41 lines
1.4 KiB
JSON
41 lines
1.4 KiB
JSON
{
|
|
"id": "media-source-field",
|
|
"name": "MediaSourceField",
|
|
"kind": "component",
|
|
"status": "draft-stable",
|
|
"summary": "Media input field that switches between local storage upload and external URL for card and background content.",
|
|
"sourceRefs": [
|
|
{
|
|
"project": "nodedc_launcher",
|
|
"file": "src/widgets/admin-overlay/AdminOverlay.tsx",
|
|
"functions": ["MediaSourceField", "MediaPreview"]
|
|
},
|
|
{
|
|
"project": "nodedc_launcher",
|
|
"file": "src/styles/globals.css",
|
|
"classes": ["service-media-control", "service-media-file-button", "service-media-source-button"]
|
|
}
|
|
],
|
|
"anatomy": [
|
|
"label with icon",
|
|
"rounded input/control shell",
|
|
"file chooser button",
|
|
"selected filename",
|
|
"URL input",
|
|
"two circular source buttons: file, url",
|
|
"preview surface"
|
|
],
|
|
"behaviorContract": [
|
|
"Local file upload persists to public storage and returns stable URL.",
|
|
"Source switch decides whether field uses stored file URL or external URL.",
|
|
"Accepts images, gifs, videos, and common video extensions.",
|
|
"Preview renders video when mediaKind or extension indicates video."
|
|
],
|
|
"rules": [
|
|
"The file chooser is a single rounded button, never browser default file input UI.",
|
|
"The source buttons are circular and attached to the field right side.",
|
|
"Background content and card content both accept the same media categories."
|
|
]
|
|
}
|
|
|