{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "date-picker", "title": "Date Picker", "description": "Sélecteur de date localisé (Intl) en popover, positionné via CSS Anchor Positioning.", "registryDependencies": [ "@valraiso/icon" ], "files": [ { "path": "registry/valraiso/date-picker/date-picker.astro", "content": "---\nimport Icon from \"../icon/icon.astro\";\nimport styles from \"./date-picker.module.css\";\n\n/**\n * DatePicker — champ date avec calendrier en popover (CSS Anchor Positioning).\n * Localisé via Intl, navigation par mois, bornes min/max, polyfill anchor au\n * besoin. Le champ expose la valeur ISO sur `input.dataset.value` et émet\n * `input`/`change`.\n *\n * Props :\n * - `lang` : locale Intl (défaut \"fr\").\n * - `placeholder` : texte du champ.\n * - `min` / `max` : bornes ISO (AAAA-MM-JJ).\n * - `class` : classe(s) ajoutée(s) au conteneur racine.\n * - tout autre attribut est transmis à l'``.\n *\n * Personnalisation (variables CSS) : --ads-date-picker-bg,\n * --ads-date-picker-color, --ads-date-picker-radius, --ads-date-picker-shadow,\n * --ads-date-picker-accent, --ads-date-picker-accent-color,\n * --ads-date-picker-muted, --ads-date-picker-hover-bg,\n * --ads-date-picker-today-border.\n */\ninterface Props {\n lang?: string;\n placeholder?: string;\n min?: string;\n max?: string;\n class?: string;\n [key: string]: unknown;\n}\n\nconst {\n class: className,\n lang = \"fr\",\n type: _type,\n placeholder,\n min,\n max,\n ...props\n} = Astro.props;\n\nconst minDate = min || \"\";\nconst maxDate = max || \"\";\nconst placeholderText = placeholder || \"\";\nconst uniqueId = crypto.randomUUID();\n---\n\n\n \n \n \n \n\n \n
\n \n \n \n
\n\n
\n
\n \n\n\n\n\n\n", "type": "registry:file", "target": "src/components/valraiso/date-picker/date-picker.astro" }, { "path": "registry/valraiso/date-picker/date-picker.module.css", "content": ".datePicker {\n display: inline-block;\n font-family: var(--ads-sans-serif-font, inherit);\n}\n\n/* --- Champ déclencheur --- */\n.trigger {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: var(--ads-date-picker-padding, 8px 12px);\n background: var(--ads-date-picker-field-bg, var(--ads-white, #fff));\n color: var(--ads-date-picker-color, var(--ads-black, #262626));\n border: 1px solid var(--ads-date-picker-border, var(--ads-grey-300, #c9c9c9));\n border-radius: var(--ads-date-picker-radius, var(--ads-radius-200, 8px));\n cursor: pointer;\n}\n\n.inputIcon {\n flex: 0 0 auto;\n color: currentColor;\n opacity: 0.7;\n}\n\n.input {\n border: none;\n background: none;\n outline: none;\n color: inherit;\n font: inherit;\n cursor: pointer;\n min-width: 7em;\n}\n\n.input::placeholder {\n color: var(--ads-date-picker-muted, var(--ads-grey-300, #c9c9c9));\n}\n\n/* --- Popover calendrier --- */\n.dropdown {\n margin: 0;\n inset: auto;\n top: anchor(bottom);\n justify-self: anchor-center;\n margin-top: var(--ads-date-picker-gap, 6px);\n padding: var(--ads-date-picker-dropdown-padding, 12px);\n width: max-content;\n background: var(--ads-date-picker-bg, var(--ads-white, #fff));\n color: var(--ads-date-picker-color, var(--ads-black, #262626));\n border: none;\n border-radius: var(--ads-date-picker-radius, var(--ads-radius-300, 12px));\n box-shadow: var(\n --ads-date-picker-shadow,\n var(--ads-shadow-200, 0 5px 10px rgba(0, 0, 0, 0.12))\n );\n z-index: var(--ads-date-picker-z-index, var(--ads-floating-z-index, 100));\n}\n\n/* --- En-tête (mois/année + navigation) --- */\n.header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n margin-bottom: 8px;\n}\n\n.monthYear {\n flex: 1 1 auto;\n text-align: center;\n font-weight: 600;\n font-size: 15px;\n}\n\n.nav {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n border: none;\n background: none;\n color: currentColor;\n cursor: pointer;\n border-radius: var(--ads-date-picker-radius, var(--ads-radius-100, 4px));\n transition: background 160ms var(--ads-transition-easing, ease);\n}\n\n.nav:hover {\n background: var(--ads-date-picker-hover-bg, var(--ads-grey-100, #f7f1f1));\n}\n\n/* --- Grilles (jours de la semaine + dates) --- */\n.weekdays,\n.grid {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 2px;\n}\n\n.weekdays {\n margin-bottom: 4px;\n}\n\n.weekdays :global(span) {\n text-align: center;\n font-size: 12px;\n color: var(--ads-date-picker-muted, var(--ads-grey-300, #c9c9c9));\n}\n\n/* Boutons-jours générés dynamiquement par le script. */\n.grid :global([data-day]) {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n width: 36px;\n border: 1px solid transparent;\n background: none;\n color: inherit;\n font: inherit;\n font-size: 14px;\n cursor: pointer;\n border-radius: 50%;\n transition: background 140ms var(--ads-transition-easing, ease);\n}\n\n.grid :global([data-day]:hover:not([disabled])) {\n background: var(--ads-date-picker-hover-bg, var(--ads-grey-100, #f7f1f1));\n}\n\n/* Jours d'un mois adjacent */\n.grid :global([data-day][data-outside]) {\n color: var(--ads-date-picker-muted, var(--ads-grey-300, #c9c9c9));\n}\n\n/* Aujourd'hui */\n.grid :global([data-day][data-today]) {\n border-color: var(\n --ads-date-picker-today-border,\n var(--ads-grey-300, #c9c9c9)\n );\n}\n\n/* Jour sélectionné */\n.grid :global([data-day][data-selected]) {\n background: var(--ads-date-picker-accent, var(--ads-black, #262626));\n color: var(--ads-date-picker-accent-color, var(--ads-white, #fff));\n border-color: transparent;\n}\n\n.grid :global([data-day][disabled]) {\n color: var(--ads-date-picker-muted, var(--ads-grey-300, #c9c9c9));\n opacity: 0.4;\n cursor: not-allowed;\n}\n", "type": "registry:file", "target": "src/components/valraiso/date-picker/date-picker.module.css" } ], "type": "registry:component" }