@optimum-intelligence/opti-ui 0.0.0-stage → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +244 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +73 -0
  46. package/dist/components/data-table/DataTable.js +478 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/data-table/DataTableContent.d.ts +35 -0
  49. package/dist/components/data-table/DataTableContent.js +550 -0
  50. package/dist/components/data-table/DataTableContent.js.map +1 -0
  51. package/dist/components/data-table/DataTableFilters.d.ts +15 -0
  52. package/dist/components/data-table/DataTableFilters.js +284 -0
  53. package/dist/components/data-table/DataTableFilters.js.map +1 -0
  54. package/dist/components/data-table/DataTableRow.d.ts +33 -0
  55. package/dist/components/data-table/DataTableRow.js +552 -0
  56. package/dist/components/data-table/DataTableRow.js.map +1 -0
  57. package/dist/components/data-table/context.d.ts +5 -0
  58. package/dist/components/data-table/context.js +14 -0
  59. package/dist/components/data-table/context.js.map +1 -0
  60. package/dist/components/data-table/layout.d.ts +60 -0
  61. package/dist/components/data-table/layout.js +272 -0
  62. package/dist/components/data-table/layout.js.map +1 -0
  63. package/dist/components/data-table/types.d.ts +319 -0
  64. package/dist/components/data-table/useDataTable.d.ts +9 -0
  65. package/dist/components/data-table/useDataTable.js +666 -0
  66. package/dist/components/data-table/useDataTable.js.map +1 -0
  67. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  68. package/dist/components/date-picker/DatePicker.js +485 -0
  69. package/dist/components/date-picker/DatePicker.js.map +1 -0
  70. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  71. package/dist/components/date-picker/DateRangePicker.js +339 -0
  72. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  73. package/dist/components/date-picker/PickerField.d.ts +38 -0
  74. package/dist/components/date-picker/PickerField.js +238 -0
  75. package/dist/components/date-picker/PickerField.js.map +1 -0
  76. package/dist/components/dialog/Dialog.d.ts +70 -0
  77. package/dist/components/dialog/Dialog.js +354 -0
  78. package/dist/components/dialog/Dialog.js.map +1 -0
  79. package/dist/components/drawer/Drawer.d.ts +39 -0
  80. package/dist/components/drawer/Drawer.js +225 -0
  81. package/dist/components/drawer/Drawer.js.map +1 -0
  82. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  83. package/dist/components/empty-state/EmptyState.js +116 -0
  84. package/dist/components/empty-state/EmptyState.js.map +1 -0
  85. package/dist/components/field/Field.d.ts +36 -0
  86. package/dist/components/field/Field.js +337 -0
  87. package/dist/components/field/Field.js.map +1 -0
  88. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  89. package/dist/components/file-upload/FileUpload.js +714 -0
  90. package/dist/components/file-upload/FileUpload.js.map +1 -0
  91. package/dist/components/input/Input.d.ts +49 -0
  92. package/dist/components/input/Input.js +538 -0
  93. package/dist/components/input/Input.js.map +1 -0
  94. package/dist/components/link/Link.d.ts +17 -0
  95. package/dist/components/link/Link.js +91 -0
  96. package/dist/components/link/Link.js.map +1 -0
  97. package/dist/components/menu/Menu.d.ts +79 -0
  98. package/dist/components/menu/Menu.js +615 -0
  99. package/dist/components/menu/Menu.js.map +1 -0
  100. package/dist/components/number-field/NumberField.d.ts +16 -0
  101. package/dist/components/number-field/NumberField.js +188 -0
  102. package/dist/components/number-field/NumberField.js.map +1 -0
  103. package/dist/components/pagination/Pagination.d.ts +34 -0
  104. package/dist/components/pagination/Pagination.js +244 -0
  105. package/dist/components/pagination/Pagination.js.map +1 -0
  106. package/dist/components/popover/Popover.d.ts +22 -0
  107. package/dist/components/popover/Popover.js +186 -0
  108. package/dist/components/popover/Popover.js.map +1 -0
  109. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  110. package/dist/components/preview-card/PreviewCard.js +114 -0
  111. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  112. package/dist/components/progress/Progress.d.ts +20 -0
  113. package/dist/components/progress/Progress.js +169 -0
  114. package/dist/components/progress/Progress.js.map +1 -0
  115. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  116. package/dist/components/scroll-area/ScrollArea.js +112 -0
  117. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  118. package/dist/components/search-input/SearchInput.d.ts +14 -0
  119. package/dist/components/search-input/SearchInput.js +114 -0
  120. package/dist/components/search-input/SearchInput.js.map +1 -0
  121. package/dist/components/select/Select.d.ts +66 -0
  122. package/dist/components/select/Select.js +601 -0
  123. package/dist/components/select/Select.js.map +1 -0
  124. package/dist/components/separator/Separator.d.ts +4 -0
  125. package/dist/components/separator/Separator.js +46 -0
  126. package/dist/components/separator/Separator.js.map +1 -0
  127. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  128. package/dist/components/skeleton/Skeleton.js +135 -0
  129. package/dist/components/skeleton/Skeleton.js.map +1 -0
  130. package/dist/components/slider/Slider.d.ts +11 -0
  131. package/dist/components/slider/Slider.js +107 -0
  132. package/dist/components/slider/Slider.js.map +1 -0
  133. package/dist/components/spinner/Spinner.d.ts +9 -0
  134. package/dist/components/spinner/Spinner.js +78 -0
  135. package/dist/components/spinner/Spinner.js.map +1 -0
  136. package/dist/components/stack/Stack.d.ts +23 -0
  137. package/dist/components/stack/Stack.js +79 -0
  138. package/dist/components/stack/Stack.js.map +1 -0
  139. package/dist/components/stat-card/StatCard.d.ts +22 -0
  140. package/dist/components/stat-card/StatCard.js +153 -0
  141. package/dist/components/stat-card/StatCard.js.map +1 -0
  142. package/dist/components/stepper/Stepper.d.ts +30 -0
  143. package/dist/components/stepper/Stepper.js +131 -0
  144. package/dist/components/stepper/Stepper.js.map +1 -0
  145. package/dist/components/table/Table.d.ts +53 -0
  146. package/dist/components/table/Table.js +221 -0
  147. package/dist/components/table/Table.js.map +1 -0
  148. package/dist/components/tabs/Tabs.d.ts +19 -0
  149. package/dist/components/tabs/Tabs.js +183 -0
  150. package/dist/components/tabs/Tabs.js.map +1 -0
  151. package/dist/components/tag/Tag.d.ts +22 -0
  152. package/dist/components/tag/Tag.js +121 -0
  153. package/dist/components/tag/Tag.js.map +1 -0
  154. package/dist/components/toast/Toast.d.ts +34 -0
  155. package/dist/components/toast/Toast.js +187 -0
  156. package/dist/components/toast/Toast.js.map +1 -0
  157. package/dist/components/toggle/Toggle.d.ts +31 -0
  158. package/dist/components/toggle/Toggle.js +197 -0
  159. package/dist/components/toggle/Toggle.js.map +1 -0
  160. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  161. package/dist/components/toolbar/Toolbar.js +239 -0
  162. package/dist/components/toolbar/Toolbar.js.map +1 -0
  163. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  164. package/dist/components/tooltip/Tooltip.js +182 -0
  165. package/dist/components/tooltip/Tooltip.js.map +1 -0
  166. package/dist/components/typography/Typography.d.ts +32 -0
  167. package/dist/components/typography/Typography.js +183 -0
  168. package/dist/components/typography/Typography.js.map +1 -0
  169. package/dist/fonts.css +3 -0
  170. package/dist/icons/index.d.ts +133 -0
  171. package/dist/icons/index.js +182 -0
  172. package/dist/icons/index.js.map +1 -0
  173. package/dist/index.d.ts +55 -0
  174. package/dist/index.js +58 -0
  175. package/dist/opti-ui.css +5692 -0
  176. package/dist/theme/ThemeProvider.d.ts +22 -0
  177. package/dist/theme/ThemeProvider.js +115 -0
  178. package/dist/theme/ThemeProvider.js.map +1 -0
  179. package/dist/theme/index.d.ts +2 -0
  180. package/dist/utils/cx.d.ts +10 -0
  181. package/dist/utils/cx.js +18 -0
  182. package/dist/utils/cx.js.map +1 -0
  183. package/dist/utils/index.d.ts +2 -0
  184. package/dist/utils/portal.d.ts +8 -0
  185. package/dist/utils/portal.js +16 -0
  186. package/dist/utils/portal.js.map +1 -0
  187. package/dist/utils/primitive.d.ts +13 -0
  188. package/dist/utils/primitive.js +61 -0
  189. package/dist/utils/primitive.js.map +1 -0
  190. package/dist/utils/search.d.ts +4 -0
  191. package/dist/utils/search.js +15 -0
  192. package/dist/utils/search.js.map +1 -0
  193. package/package.json +71 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Calendar.js","names":["React","cx","ChevronLeftIcon","ChevronRightIcon","addDays","addMonths","clampDate","datePart","formatDate","formatDateLong","monthGrid","pad","startOfMonth","toRange","toUtcDate","todayIso","weekday","DateRange","CalendarLabels","previousMonth","nextMonth","previousYear","nextYear","previousYears","nextYears","chooseMonth","chooseYear","defaultLabels","Chooser","index","mode","cursor","YEARS","yearOf","date","Number","slice","monthNumber","CalendarOptions","Omit","HTMLAttributes","HTMLDivElement","ref","Ref","min","max","isDateDisabled","defaultMonth","locale","weekStartsOn","numberOfMonths","autoFocus","labels","Partial","DayState","selected","inRange","rangeStart","rangeEnd","CalendarViewProps","target","dayState","onPick","onPreview","multiselectable","reveal","view","count","month","chooserItems","year","Array","from","length","_","start","Math","floor","offset","filter","item","map","CalendarView","t0","$","_c","className","props","t1","t2","undefined","t3","text","today","useState","t4","focused","setFocused","t5","setView","monthsRef","useRef","moveFocus","Boolean","titleId","useId","chooser","setChooser","seen","setSeen","t6","Symbol","for","current","months","querySelector","focus","t7","useEffect","t8","disabled","t10","t11","t12","t13","t14","t15","t9","formats","monthLong","Intl","DateTimeFormat","timeZone","weekdayShort","weekdayLong","yearText","_temp","go","date_1","next","page","amount","next_0","select","date_2","onKeyDown","event","next_1","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End","PageUp","shiftKey","PageDown","move","key","preventDefault","day","earliest","latest","openChooser","closeChooser","moveChooser","amount_0","step","choose","current_0","date_3","next_2","onChooserKeyDown","current_1","event_0","stopPropagation","amount_1","months_0","index_0","previous","following","first","index_1","days","weeks","__0","week","choosing","choices","format","date_4","unit","unavailable","shown","date_5","week_0","date_6","outside","state","t16","t17","date_0","String","CalendarProps","value","defaultValue","onValueChange","Calendar","inner","setInner","RangeCalendarProps","rangeKey","range","end","RangeCalendar","anchor","setAnchor","preview","setPreview","setTarget","_c","_Fragment"],"sources":["../../../src/components/calendar/Calendar.tsx"],"sourcesContent":["import * as React from 'react';\nimport { cx } from '../../utils/cx';\nimport { ChevronLeftIcon, ChevronRightIcon } from '../../icons';\nimport {\n addDays,\n addMonths,\n clampDate,\n datePart,\n formatDate,\n formatDateLong,\n monthGrid,\n pad,\n startOfMonth,\n toRange,\n toUtcDate,\n todayIso,\n weekday,\n type DateRange,\n} from './date-utils';\n\nexport type { DateRange };\nexport { formatDate, formatDateLong };\n\nexport interface CalendarLabels {\n previousMonth: string;\n nextMonth: string;\n previousYear: string;\n nextYear: string;\n previousYears: string;\n nextYears: string;\n chooseMonth: string;\n chooseYear: string;\n}\n\nconst defaultLabels: CalendarLabels = {\n previousMonth: 'Previous month',\n nextMonth: 'Next month',\n previousYear: 'Previous year',\n nextYear: 'Next year',\n previousYears: 'Previous years',\n nextYears: 'Next years',\n chooseMonth: 'Choose month',\n chooseYear: 'Choose year',\n};\n\n/** The month or year list that replaces one month's day grid. */\ninterface Chooser {\n /** Which of the visible months it was opened from. */\n index: number;\n mode: 'months' | 'years';\n /** First day of the month that owns the list's tab stop. */\n cursor: string;\n}\n\n/** Years listed per page, in rows of three like the months. */\nconst YEARS = 12;\n\nconst yearOf = (date: string) => Number(date.slice(0, 4));\nconst monthNumber = (date: string) => yearOf(date) * 12 + Number(date.slice(5, 7));\n\ninterface CalendarOptions extends Omit<React.HTMLAttributes<HTMLDivElement>, 'defaultValue' | 'onChange'> {\n ref?: React.Ref<HTMLDivElement>;\n /** Earliest selectable day (ISO date). */\n min?: string;\n /** Latest selectable day (ISO date). */\n max?: string;\n /** Return true to make a day unselectable. */\n isDateDisabled?: (date: string) => boolean;\n /** Month shown first when there is no value (any ISO date in that month). */\n defaultMonth?: string;\n /** BCP 47 locale for month and weekday names. Defaults to the browser's. */\n locale?: string;\n /** First column: 0 = Sunday, 1 = Monday (default). */\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n /** Months shown side by side (default 1). */\n numberOfMonths?: number;\n /** Move focus to the selected day (or today) on mount, e.g. inside a popover. */\n autoFocus?: boolean;\n labels?: Partial<CalendarLabels>;\n}\n\ninterface DayState {\n selected?: boolean;\n inRange?: boolean;\n rangeStart?: boolean;\n rangeEnd?: boolean;\n}\n\ninterface CalendarViewProps extends CalendarOptions {\n /** Day the view opens on, and follows whenever it changes. */\n target: string | null;\n dayState: (date: string) => DayState;\n onPick: (date: string) => void;\n /** Reports the hovered or keyboard-focused day, and `null` when the pointer leaves. */\n onPreview?: (date: string | null) => void;\n multiselectable?: boolean;\n}\n\n/** The first visible month after moving `view` just enough to show `date`. */\nfunction reveal(view: string, date: string, count: number): string {\n const month = startOfMonth(date);\n if (month < view) return month;\n return month > addMonths(view, count - 1) ? addMonths(month, 1 - count) : view;\n}\n\n/** The months of the cursor's year, or the page of years around it. */\nfunction chooserItems({ mode, cursor }: Chooser): string[] {\n const year = yearOf(cursor);\n if (mode === 'months') return Array.from({ length: 12 }, (_, month) => `${cursor.slice(0, 5)}${pad(month + 1)}-01`);\n const start = Math.floor((year - 1) / YEARS) * YEARS + 1;\n return Array.from({ length: YEARS }, (_, offset) => start + offset)\n .filter((item) => item <= 9999)\n .map((item) => `${pad(item, 4)}${cursor.slice(4, 8)}01`);\n}\n\n/** Month grids, navigation and keyboard handling shared by Calendar and RangeCalendar. */\nfunction CalendarView({\n target,\n dayState,\n onPick,\n onPreview,\n multiselectable,\n min,\n max,\n isDateDisabled,\n defaultMonth,\n locale,\n weekStartsOn = 1,\n numberOfMonths = 1,\n autoFocus,\n labels,\n className,\n ref,\n ...props\n}: CalendarViewProps) {\n const text = { ...defaultLabels, ...labels };\n const count = Math.max(1, Math.floor(numberOfMonths));\n const [today] = React.useState(todayIso);\n\n // The day that owns the grid's tab stop.\n const [focused, setFocused] = React.useState(() => clampDate(target ?? datePart(defaultMonth) ?? today, min, max));\n // The first visible month; it moves just enough to keep the focused day on screen.\n const [view, setView] = React.useState(() => startOfMonth(focused));\n const monthsRef = React.useRef<HTMLDivElement>(null);\n const moveFocus = React.useRef(Boolean(autoFocus));\n const titleId = React.useId();\n const [chooser, setChooser] = React.useState<Chooser | null>(null);\n\n // Follow the target when it changes from outside.\n const [seen, setSeen] = React.useState(target);\n if (target !== seen) {\n setSeen(target);\n if (target) {\n setFocused(target);\n setView(reveal(view, target, count));\n }\n }\n\n React.useEffect(() => {\n if (!moveFocus.current) return;\n moveFocus.current = false;\n const months = monthsRef.current;\n (\n months?.querySelector<HTMLElement>('.oui-calendar__choice[tabindex=\"0\"]') ??\n months?.querySelector<HTMLElement>('[tabindex=\"0\"]')\n )?.focus();\n }, [focused, chooser]);\n\n const disabled = (date: string) =>\n Boolean((min && date < min) || (max && date > max) || isDateDisabled?.(date));\n\n const formats = {\n monthLong: new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'UTC' }),\n month: new Intl.DateTimeFormat(locale, { month: 'short', timeZone: 'UTC' }),\n weekdayShort: new Intl.DateTimeFormat(locale, { weekday: 'short', timeZone: 'UTC' }),\n weekdayLong: new Intl.DateTimeFormat(locale, { weekday: 'long', timeZone: 'UTC' }),\n };\n\n const yearText = (date: string) => String(yearOf(date));\n\n const go = (date: string) => {\n const next = clampDate(date, min, max);\n moveFocus.current = true;\n setFocused(next);\n setView(reveal(view, next, count));\n return next;\n };\n\n // The navigation buttons page the view and carry the tab stop along without moving focus.\n const page = (amount: number) => {\n const next = clampDate(addMonths(focused, amount), min, max);\n setFocused(next);\n setView(reveal(addMonths(view, amount), next, count));\n };\n\n const select = (date: string) => {\n if (disabled(date)) return;\n go(date);\n onPick(date);\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n const offset = (weekday(focused) - weekStartsOn + 7) % 7;\n const next: Record<string, () => string> = {\n ArrowLeft: () => addDays(focused, -1),\n ArrowRight: () => addDays(focused, 1),\n ArrowUp: () => addDays(focused, -7),\n ArrowDown: () => addDays(focused, 7),\n Home: () => addDays(focused, -offset),\n End: () => addDays(focused, 6 - offset),\n PageUp: () => addMonths(focused, event.shiftKey ? -12 : -1),\n PageDown: () => addMonths(focused, event.shiftKey ? 12 : 1),\n };\n const move = next[event.key];\n if (!move) return;\n event.preventDefault();\n // Not inline: an absent onPreview would skip evaluating its argument, and with it the move.\n const day = go(move());\n onPreview?.(day);\n };\n\n // The months the chooser can reach.\n const earliest = startOfMonth(min ?? '0001-01-01');\n const latest = startOfMonth(max ?? '9999-12-01');\n\n const openChooser = (index: number, mode: Chooser['mode'], cursor: string) => {\n moveFocus.current = true;\n setChooser({ index, mode, cursor: clampDate(cursor, earliest, latest) });\n };\n\n const closeChooser = () => {\n moveFocus.current = true;\n setChooser(null);\n };\n\n const moveChooser = (current: Chooser, amount: number, focus: boolean) => {\n const step = current.mode === 'months' ? amount : amount * 12;\n // Stay within the years an ISO date can spell.\n if (monthNumber(current.cursor) + step < 13 || monthNumber(current.cursor) + step > 9999 * 12 + 12) return;\n moveFocus.current = focus;\n setChooser({ ...current, cursor: clampDate(addMonths(current.cursor, step), earliest, latest) });\n };\n\n const choose = (current: Chooser, date: string) => {\n if (current.mode === 'years') {\n openChooser(current.index, 'months', date);\n return;\n }\n // Keep the day of the month, and put the chosen month where the chooser was opened.\n const next = clampDate(addMonths(focused, monthNumber(date) - monthNumber(focused)), min, max);\n moveFocus.current = true;\n setFocused(next);\n setView(reveal(addMonths(date, -current.index), next, count));\n setChooser(null);\n };\n\n const onChooserKeyDown = (current: Chooser) => (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n closeChooser();\n return;\n }\n const amount = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -3, ArrowDown: 3, PageUp: -YEARS, PageDown: YEARS }[event.key];\n if (!amount) return;\n event.preventDefault();\n moveChooser(current, amount, true);\n };\n\n const months = Array.from({ length: count }, (_, index) => addMonths(view, index));\n const previous = addDays(view, -1);\n const following = addMonths(view, count);\n\n return (\n <div ref={ref} className={cx('oui-calendar', className)} {...props}>\n <div\n ref={monthsRef}\n className=\"oui-calendar__months\"\n onPointerLeave={onPreview ? () => onPreview(null) : undefined}\n >\n {months.map((first, index) => {\n const days = monthGrid(first, weekStartsOn);\n const month = first.slice(0, 7);\n const weeks = Array.from({ length: 6 }, (_, week) => days.slice(week * 7, week * 7 + 7));\n const choosing = chooser?.index === index ? chooser : null;\n const choices = choosing ? chooserItems(choosing) : [];\n return (\n <div key={month} className=\"oui-calendar__month\">\n <div className=\"oui-calendar__header\">\n {choosing ? (\n <button\n type=\"button\"\n className=\"oui-calendar__nav\"\n aria-label={choosing.mode === 'months' ? text.previousYear : text.previousYears}\n disabled={choices[0].slice(0, 4) <= earliest.slice(0, 4)}\n onClick={() => moveChooser(choosing, -YEARS, false)}\n >\n <ChevronLeftIcon />\n </button>\n ) : index === 0 ? (\n <button\n type=\"button\"\n className=\"oui-calendar__nav\"\n aria-label={text.previousMonth}\n disabled={Boolean(min && previous < min)}\n onClick={() => page(-1)}\n >\n <ChevronLeftIcon />\n </button>\n ) : (\n <span className=\"oui-calendar__nav-spacer\" />\n )}\n <div id={`${titleId}-${index}`} className=\"oui-calendar__title\" aria-live=\"polite\">\n {!choosing ? (\n // Year first, as in the written date format: \"2026. March\".\n <>\n <button\n type=\"button\"\n className=\"oui-calendar__title-button\"\n title={text.chooseYear}\n onClick={() => openChooser(index, 'years', first)}\n >\n {yearText(first)}\n </button>\n {'. '}\n <button\n type=\"button\"\n className=\"oui-calendar__title-button\"\n title={text.chooseMonth}\n onClick={() => openChooser(index, 'months', first)}\n >\n {formats.monthLong.format(toUtcDate(first))}\n </button>\n </>\n ) : choosing.mode === 'months' ? (\n <button\n type=\"button\"\n className=\"oui-calendar__title-button\"\n title={text.chooseYear}\n onClick={() => openChooser(index, 'years', choosing.cursor)}\n >\n {yearText(choosing.cursor)}\n </button>\n ) : (\n `${yearText(choices[0])} – ${yearText(choices[choices.length - 1])}`\n )}\n </div>\n {choosing ? (\n <button\n type=\"button\"\n className=\"oui-calendar__nav\"\n aria-label={choosing.mode === 'months' ? text.nextYear : text.nextYears}\n disabled={choices[choices.length - 1].slice(0, 4) >= latest.slice(0, 4)}\n onClick={() => moveChooser(choosing, YEARS, false)}\n >\n <ChevronRightIcon />\n </button>\n ) : index === count - 1 ? (\n <button\n type=\"button\"\n className=\"oui-calendar__nav\"\n aria-label={text.nextMonth}\n disabled={Boolean(max && following > max)}\n onClick={() => page(1)}\n >\n <ChevronRightIcon />\n </button>\n ) : (\n <span className=\"oui-calendar__nav-spacer\" />\n )}\n </div>\n {choosing ? (\n <div\n role=\"group\"\n aria-labelledby={`${titleId}-${index}`}\n className=\"oui-calendar__choices\"\n onKeyDown={onChooserKeyDown(choosing)}\n >\n {choices.map((date) => {\n const unit = choosing.mode === 'months' ? 7 : 4;\n const key = date.slice(0, unit);\n const unavailable = key < earliest.slice(0, unit) || key > latest.slice(0, unit);\n const shown = key === first.slice(0, unit);\n return (\n <button\n key={date}\n type=\"button\"\n className=\"oui-calendar__choice\"\n tabIndex={key === choosing.cursor.slice(0, unit) ? 0 : -1}\n aria-pressed={shown}\n aria-disabled={unavailable || undefined}\n data-selected={shown ? '' : undefined}\n data-today={key === today.slice(0, unit) ? '' : undefined}\n data-disabled={unavailable ? '' : undefined}\n onClick={unavailable ? undefined : () => choose(choosing, date)}\n >\n {choosing.mode === 'months' ? formats.month.format(toUtcDate(date)) : yearText(date)}\n </button>\n );\n })}\n </div>\n ) : (\n <div\n role=\"grid\"\n aria-labelledby={`${titleId}-${index}`}\n aria-multiselectable={multiselectable || undefined}\n className=\"oui-calendar__grid\"\n onKeyDown={onKeyDown}\n >\n <div role=\"row\" className=\"oui-calendar__row\">\n {days.slice(0, 7).map((date) => (\n <span\n key={date}\n role=\"columnheader\"\n className=\"oui-calendar__weekday\"\n aria-label={formats.weekdayLong.format(toUtcDate(date))}\n >\n {formats.weekdayShort.format(toUtcDate(date))}\n </span>\n ))}\n </div>\n {weeks.map((week) => (\n <div key={week[0]} role=\"row\" className=\"oui-calendar__row\">\n {week.map((date) => {\n const outside = date.slice(0, 7) !== month;\n // Side by side, each day appears once: in its own month.\n if (outside && count > 1) return <span key={date} role=\"gridcell\" className=\"oui-calendar__blank\" />;\n const state = dayState(date);\n return (\n <button\n key={date}\n type=\"button\"\n role=\"gridcell\"\n className=\"oui-calendar__day\"\n tabIndex={date === focused ? 0 : -1}\n aria-label={`${formatDateLong(date, locale)}, ${formats.weekdayLong.format(toUtcDate(date))}`}\n aria-selected={Boolean(state.selected || state.inRange)}\n aria-current={date === today ? 'date' : undefined}\n aria-disabled={disabled(date) || undefined}\n data-selected={state.selected ? '' : undefined}\n data-in-range={state.inRange ? '' : undefined}\n data-range-start={state.rangeStart ? '' : undefined}\n data-range-end={state.rangeEnd ? '' : undefined}\n data-today={date === today ? '' : undefined}\n data-outside={outside ? '' : undefined}\n data-disabled={disabled(date) ? '' : undefined}\n onClick={() => select(date)}\n onPointerEnter={onPreview ? () => onPreview(date) : undefined}\n >\n {Number(date.slice(8))}\n </button>\n );\n })}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nexport interface CalendarProps extends CalendarOptions {\n /** Selected day as an ISO date (`\"2026-03-09\"`). */\n value?: string | null;\n defaultValue?: string | null;\n onValueChange?: (value: string) => void;\n}\n\n/**\n * Month grid for picking one day. Keyboard: arrows move by day / week,\n * Home / End jump within the week, PageUp / PageDown change month (with Shift: year).\n * The month and year in the title open a list to jump straight to another one.\n */\nexport function Calendar({ value, defaultValue = null, onValueChange, ...props }: CalendarProps) {\n const [inner, setInner] = React.useState(() => datePart(defaultValue));\n const selected = value === undefined ? inner : datePart(value);\n return (\n <CalendarView\n target={selected}\n dayState={(date) => ({ selected: date === selected })}\n {...props}\n onPick={(date) => {\n setInner(date);\n onValueChange?.(date);\n }}\n />\n );\n}\n\nexport interface RangeCalendarProps extends CalendarOptions {\n /** Selected days as ISO dates; both ends are inclusive. */\n value?: DateRange | null;\n defaultValue?: DateRange | null;\n /** Called once both ends are picked, with `start` on or before `end`. */\n onValueChange?: (value: DateRange) => void;\n}\n\nconst rangeKey = (range: DateRange | null) => (range ? `${range.start}/${range.end}` : '');\n\n/**\n * Month grid for picking a range of days: the first pick sets one end, the\n * second completes the range (in either order). Same keyboard as Calendar.\n * Disabled days cannot be picked as an end but may fall inside a range.\n */\nexport function RangeCalendar({ value, defaultValue = null, onValueChange, ...props }: RangeCalendarProps) {\n const [inner, setInner] = React.useState(() => toRange(defaultValue?.start, defaultValue?.end));\n const range = value === undefined ? inner : toRange(value?.start, value?.end);\n // While one end is picked, the range runs from it to the hovered or focused day.\n const [anchor, setAnchor] = React.useState<string | null>(null);\n const [preview, setPreview] = React.useState<string | null>(null);\n const shown = anchor ? toRange(anchor, preview ?? anchor) : range;\n\n // Bring the range into view when it changes from outside, but not after a pick made here.\n const [seen, setSeen] = React.useState(() => rangeKey(range));\n const [target, setTarget] = React.useState(range?.start ?? null);\n if (rangeKey(range) !== seen) {\n setSeen(rangeKey(range));\n setTarget(range?.start ?? null);\n }\n\n const select = (date: string) => {\n if (!anchor) {\n setAnchor(date);\n setPreview(date);\n return;\n }\n const next = toRange(anchor, date);\n setAnchor(null);\n setPreview(null);\n if (!next) return;\n setInner(next);\n setSeen(rangeKey(next));\n onValueChange?.(next);\n };\n\n return (\n <CalendarView\n multiselectable\n data-selecting={anchor ? '' : undefined}\n target={target}\n dayState={(date) =>\n shown\n ? {\n selected: date === shown.start || date === shown.end,\n inRange: date >= shown.start && date <= shown.end,\n rangeStart: date === shown.start,\n rangeEnd: date === shown.end,\n }\n : {}\n }\n {...props}\n onPick={select}\n onPreview={(date) => {\n if (anchor) setPreview(date);\n }}\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export declare function pad(value: number, length?: number): string;
2
+ /** The date part of an ISO date or date-time string, or `null` when invalid. */
3
+ export declare function datePart(value: string | null | undefined): string | null;
4
+ /** The time part (`"14:30"`, `"14:30:05"`, …) of an ISO date-time string. */
5
+ export declare function timePart(value: string | null | undefined): string | null;
6
+ /** `"2026-03-09"`, or `"2026-03-09 14:30:00"` for a date-time: the same everywhere, on a 24-hour clock. */
7
+ export declare function formatDate(value: string | null | undefined): string;
8
+ /**
9
+ * The written form, `"2026. March 9."`, or `"2026. March 9. 14:30"` for a date-time.
10
+ * The order and the 24-hour clock are fixed; `locale` only translates the month name.
11
+ */
12
+ export declare function formatDateLong(value: string | null | undefined, locale?: string): string;
13
+ export declare function todayIso(): string;
14
+ export declare function addDays(value: string, amount: number): string;
15
+ /** Moves by whole months, clamping the day (31 Jan + 1 month → 28/29 Feb). */
16
+ export declare function addMonths(value: string, amount: number): string;
17
+ export declare function startOfMonth(value: string): string;
18
+ /** 0 (Sunday) … 6 (Saturday). */
19
+ export declare function weekday(value: string): number;
20
+ /** The 42 days (six weeks) shown for the month containing `value`. */
21
+ export declare function monthGrid(value: string, weekStartsOn: number): string[];
22
+ /** A UTC `Date` for formatting an ISO date with `Intl` (pass `timeZone: 'UTC'`). */
23
+ export declare function toUtcDate(value: string): Date;
24
+ export declare function clampDate(value: string, min?: string | null, max?: string | null): string;
25
+ export interface DateRange {
26
+ /** First day, as an ISO date. */
27
+ start: string;
28
+ /** Last day (inclusive), as an ISO date. */
29
+ end: string;
30
+ }
31
+ /** Two days as an ordered range, or `null` when either is missing or invalid. */
32
+ export declare function toRange(a: string | null | undefined, b: string | null | undefined): DateRange | null;
@@ -0,0 +1,112 @@
1
+ "use client";
2
+ //#region src/components/calendar/date-utils.ts
3
+ var DATE = /^(\d{4})-(\d{2})-(\d{2})/;
4
+ function pad(value, length = 2) {
5
+ return String(value).padStart(length, "0");
6
+ }
7
+ /** `"2026-03-09…"` → UTC timestamp, or `null` when the string is not a real date. */
8
+ function toTime(value) {
9
+ const match = value ? DATE.exec(value) : null;
10
+ if (!match) return null;
11
+ const [year, month, day] = [
12
+ Number(match[1]),
13
+ Number(match[2]),
14
+ Number(match[3])
15
+ ];
16
+ const date = new Date(Date.UTC(year, month - 1, day));
17
+ date.setUTCFullYear(year);
18
+ return date.getUTCMonth() === month - 1 && date.getUTCDate() === day ? date.getTime() : null;
19
+ }
20
+ function fromDate(date) {
21
+ return `${pad(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())}`;
22
+ }
23
+ /** The date part of an ISO date or date-time string, or `null` when invalid. */
24
+ function datePart(value) {
25
+ const time = toTime(value);
26
+ return time === null ? null : fromDate(new Date(time));
27
+ }
28
+ /** The time part (`"14:30"`, `"14:30:05"`, …) of an ISO date-time string. */
29
+ function timePart(value) {
30
+ const match = value ? /T(\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?)/.exec(value) : null;
31
+ return match ? match[1] : null;
32
+ }
33
+ /** `"2026-03-09"`, or `"2026-03-09 14:30:00"` for a date-time: the same everywhere, on a 24-hour clock. */
34
+ function formatDate(value) {
35
+ const date = datePart(value);
36
+ if (!date) return "";
37
+ const time = timePart(value);
38
+ if (!time) return date;
39
+ const [hours, minutes, seconds = "00"] = time.split(":");
40
+ return `${date} ${hours}:${minutes}:${seconds.slice(0, 2)}`;
41
+ }
42
+ /**
43
+ * The written form, `"2026. March 9."`, or `"2026. March 9. 14:30"` for a date-time.
44
+ * The order and the 24-hour clock are fixed; `locale` only translates the month name.
45
+ */
46
+ function formatDateLong(value, locale) {
47
+ const date = datePart(value);
48
+ if (!date) return "";
49
+ const month = new Intl.DateTimeFormat(locale, {
50
+ month: "long",
51
+ timeZone: "UTC"
52
+ }).format(toUtcDate(date));
53
+ const time = timePart(value);
54
+ return `${Number(date.slice(0, 4))}. ${month} ${Number(date.slice(8))}.${time ? ` ${time.slice(0, 5)}` : ""}`;
55
+ }
56
+ function todayIso() {
57
+ const now = /* @__PURE__ */ new Date();
58
+ return `${pad(now.getFullYear(), 4)}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`;
59
+ }
60
+ function addDays(value, amount) {
61
+ const date = new Date(toTime(value) ?? 0);
62
+ date.setUTCDate(date.getUTCDate() + amount);
63
+ return fromDate(date);
64
+ }
65
+ /** Moves by whole months, clamping the day (31 Jan + 1 month → 28/29 Feb). */
66
+ function addMonths(value, amount) {
67
+ const date = new Date(toTime(value) ?? 0);
68
+ const day = date.getUTCDate();
69
+ date.setUTCDate(1);
70
+ date.setUTCMonth(date.getUTCMonth() + amount);
71
+ const lastDay = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0)).getUTCDate();
72
+ date.setUTCDate(Math.min(day, lastDay));
73
+ return fromDate(date);
74
+ }
75
+ function startOfMonth(value) {
76
+ return `${value.slice(0, 8)}01`;
77
+ }
78
+ /** 0 (Sunday) … 6 (Saturday). */
79
+ function weekday(value) {
80
+ return new Date(toTime(value) ?? 0).getUTCDay();
81
+ }
82
+ /** The 42 days (six weeks) shown for the month containing `value`. */
83
+ function monthGrid(value, weekStartsOn) {
84
+ const first = startOfMonth(value);
85
+ const start = addDays(first, -((weekday(first) - weekStartsOn + 7) % 7));
86
+ return Array.from({ length: 42 }, (_, index) => addDays(start, index));
87
+ }
88
+ /** A UTC `Date` for formatting an ISO date with `Intl` (pass `timeZone: 'UTC'`). */
89
+ function toUtcDate(value) {
90
+ return new Date(toTime(value) ?? 0);
91
+ }
92
+ function clampDate(value, min, max) {
93
+ if (min && value < min) return min;
94
+ if (max && value > max) return max;
95
+ return value;
96
+ }
97
+ /** Two days as an ordered range, or `null` when either is missing or invalid. */
98
+ function toRange(a, b) {
99
+ const [first, second] = [datePart(a), datePart(b)];
100
+ if (!first || !second) return null;
101
+ return first <= second ? {
102
+ start: first,
103
+ end: second
104
+ } : {
105
+ start: second,
106
+ end: first
107
+ };
108
+ }
109
+ //#endregion
110
+ export { addDays, addMonths, clampDate, datePart, formatDate, formatDateLong, monthGrid, pad, startOfMonth, timePart, toRange, toUtcDate, todayIso, weekday };
111
+
112
+ //# sourceMappingURL=date-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-utils.js","names":["DATE","pad","value","length","String","padStart","toTime","match","exec","year","month","day","Number","date","Date","UTC","setUTCFullYear","getUTCMonth","getUTCDate","getTime","fromDate","getUTCFullYear","datePart","time","timePart","formatDate","hours","minutes","seconds","split","slice","formatDateLong","locale","Intl","DateTimeFormat","timeZone","format","toUtcDate","todayIso","now","getFullYear","getMonth","getDate","addDays","amount","setUTCDate","addMonths","setUTCMonth","lastDay","Math","min","startOfMonth","weekday","getUTCDay","monthGrid","weekStartsOn","first","start","Array","from","_","index","clampDate","max","DateRange","end","toRange","a","b","second"],"sources":["../../../src/components/calendar/date-utils.ts"],"sourcesContent":["// Dates are plain ISO strings (\"2026-03-09\"), the same format native date\n// inputs and most APIs use. Arithmetic goes through UTC so it is unaffected by\n// the local time zone and daylight saving.\n\nconst DATE = /^(\\d{4})-(\\d{2})-(\\d{2})/;\n\nexport function pad(value: number, length = 2): string {\n return String(value).padStart(length, '0');\n}\n\n/** `\"2026-03-09…\"` → UTC timestamp, or `null` when the string is not a real date. */\nfunction toTime(value: string | null | undefined): number | null {\n const match = value ? DATE.exec(value) : null;\n if (!match) return null;\n const [year, month, day] = [Number(match[1]), Number(match[2]), Number(match[3])];\n const date = new Date(Date.UTC(year, month - 1, day));\n date.setUTCFullYear(year);\n return date.getUTCMonth() === month - 1 && date.getUTCDate() === day ? date.getTime() : null;\n}\n\nfunction fromDate(date: Date): string {\n return `${pad(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())}`;\n}\n\n/** The date part of an ISO date or date-time string, or `null` when invalid. */\nexport function datePart(value: string | null | undefined): string | null {\n const time = toTime(value);\n return time === null ? null : fromDate(new Date(time));\n}\n\n/** The time part (`\"14:30\"`, `\"14:30:05\"`, …) of an ISO date-time string. */\nexport function timePart(value: string | null | undefined): string | null {\n const match = value ? /T(\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{1,3})?)?)/.exec(value) : null;\n return match ? match[1] : null;\n}\n\n/** `\"2026-03-09\"`, or `\"2026-03-09 14:30:00\"` for a date-time: the same everywhere, on a 24-hour clock. */\nexport function formatDate(value: string | null | undefined): string {\n const date = datePart(value);\n if (!date) return '';\n const time = timePart(value);\n if (!time) return date;\n const [hours, minutes, seconds = '00'] = time.split(':');\n return `${date} ${hours}:${minutes}:${seconds.slice(0, 2)}`;\n}\n\n/**\n * The written form, `\"2026. March 9.\"`, or `\"2026. March 9. 14:30\"` for a date-time.\n * The order and the 24-hour clock are fixed; `locale` only translates the month name.\n */\nexport function formatDateLong(value: string | null | undefined, locale?: string): string {\n const date = datePart(value);\n if (!date) return '';\n const month = new Intl.DateTimeFormat(locale, { month: 'long', timeZone: 'UTC' }).format(toUtcDate(date));\n const time = timePart(value);\n return `${Number(date.slice(0, 4))}. ${month} ${Number(date.slice(8))}.${time ? ` ${time.slice(0, 5)}` : ''}`;\n}\n\nexport function todayIso(): string {\n const now = new Date();\n return `${pad(now.getFullYear(), 4)}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}`;\n}\n\nexport function addDays(value: string, amount: number): string {\n const date = new Date(toTime(value) ?? 0);\n date.setUTCDate(date.getUTCDate() + amount);\n return fromDate(date);\n}\n\n/** Moves by whole months, clamping the day (31 Jan + 1 month → 28/29 Feb). */\nexport function addMonths(value: string, amount: number): string {\n const date = new Date(toTime(value) ?? 0);\n const day = date.getUTCDate();\n date.setUTCDate(1);\n date.setUTCMonth(date.getUTCMonth() + amount);\n const lastDay = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 0)).getUTCDate();\n date.setUTCDate(Math.min(day, lastDay));\n return fromDate(date);\n}\n\nexport function startOfMonth(value: string): string {\n return `${value.slice(0, 8)}01`;\n}\n\n/** 0 (Sunday) … 6 (Saturday). */\nexport function weekday(value: string): number {\n return new Date(toTime(value) ?? 0).getUTCDay();\n}\n\n/** The 42 days (six weeks) shown for the month containing `value`. */\nexport function monthGrid(value: string, weekStartsOn: number): string[] {\n const first = startOfMonth(value);\n const start = addDays(first, -((weekday(first) - weekStartsOn + 7) % 7));\n return Array.from({ length: 42 }, (_, index) => addDays(start, index));\n}\n\n/** A UTC `Date` for formatting an ISO date with `Intl` (pass `timeZone: 'UTC'`). */\nexport function toUtcDate(value: string): Date {\n return new Date(toTime(value) ?? 0);\n}\n\nexport function clampDate(value: string, min?: string | null, max?: string | null): string {\n if (min && value < min) return min;\n if (max && value > max) return max;\n return value;\n}\n\nexport interface DateRange {\n /** First day, as an ISO date. */\n start: string;\n /** Last day (inclusive), as an ISO date. */\n end: string;\n}\n\n/** Two days as an ordered range, or `null` when either is missing or invalid. */\nexport function toRange(a: string | null | undefined, b: string | null | undefined): DateRange | null {\n const [first, second] = [datePart(a), datePart(b)];\n if (!first || !second) return null;\n return first <= second ? { start: first, end: second } : { start: second, end: first };\n}\n"],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { useRender } from '@base-ui/react/use-render';
2
+ export type CardVariant = 'outlined' | 'elevated' | 'filled' | 'ghost';
3
+ export type CardPadding = 'none' | 'sm' | 'md' | 'lg';
4
+ export type CardState = {
5
+ variant: CardVariant;
6
+ padding: CardPadding;
7
+ interactive: boolean;
8
+ };
9
+ export interface CardProps extends useRender.ComponentProps<'div', CardState> {
10
+ /** `outlined` (default) uses the card border, `elevated` a soft shadow. */
11
+ variant?: CardVariant;
12
+ /** Inner spacing. Override with `--oui-card-padding`. */
13
+ padding?: CardPadding;
14
+ /** Adds hover and focus states — use with `render={<a href=… />}` or a click handler. */
15
+ interactive?: boolean;
16
+ }
17
+ export declare function Card({ variant, padding, interactive, render, ref, ...props }: CardProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
18
+ export declare const CardHeader: {
19
+ (props: import("../../utils/primitive").PrimitiveProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
20
+ displayName: string;
21
+ };
22
+ export declare const CardTitle: {
23
+ (props: import("../../utils/primitive").PrimitiveProps<"h3">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
24
+ displayName: string;
25
+ };
26
+ export declare const CardDescription: {
27
+ (props: import("../../utils/primitive").PrimitiveProps<"p">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
28
+ displayName: string;
29
+ };
30
+ /** Right-aligned slot inside CardHeader for icon buttons or menus. */
31
+ export declare const CardActions: {
32
+ (props: import("../../utils/primitive").PrimitiveProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
33
+ displayName: string;
34
+ };
35
+ export declare const CardContent: {
36
+ (props: import("../../utils/primitive").PrimitiveProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
37
+ displayName: string;
38
+ };
39
+ export declare const CardFooter: {
40
+ (props: import("../../utils/primitive").PrimitiveProps<"div">): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
41
+ displayName: string;
42
+ };
@@ -0,0 +1,82 @@
1
+ "use client";
2
+ import { createPrimitive } from "../../utils/primitive.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import { useRender } from "@base-ui/react/use-render";
5
+ import { mergeProps } from "@base-ui/react/merge-props";
6
+ //#region src/components/card/Card.tsx
7
+ function Card(t0) {
8
+ const $ = c(17);
9
+ let t1;
10
+ let t2;
11
+ let t3;
12
+ let t4;
13
+ let t5;
14
+ let t6;
15
+ if ($[0] !== t0) {
16
+ const { variant: t7, padding: t8, interactive: t9, render, ref, ...props } = t0;
17
+ const variant = t7 === void 0 ? "outlined" : t7;
18
+ const padding = t8 === void 0 ? "md" : t8;
19
+ const interactive = t9 === void 0 ? false : t9;
20
+ let t10;
21
+ if ($[7] !== interactive || $[8] !== padding || $[9] !== variant) {
22
+ t10 = {
23
+ variant,
24
+ padding,
25
+ interactive
26
+ };
27
+ $[7] = interactive;
28
+ $[8] = padding;
29
+ $[9] = variant;
30
+ $[10] = t10;
31
+ } else t10 = $[10];
32
+ const state = t10;
33
+ t6 = useRender;
34
+ t1 = "div";
35
+ t2 = render;
36
+ t3 = ref;
37
+ t4 = state;
38
+ t5 = mergeProps({ className: "oui-card" }, props);
39
+ $[0] = t0;
40
+ $[1] = t1;
41
+ $[2] = t2;
42
+ $[3] = t3;
43
+ $[4] = t4;
44
+ $[5] = t5;
45
+ $[6] = t6;
46
+ } else {
47
+ t1 = $[1];
48
+ t2 = $[2];
49
+ t3 = $[3];
50
+ t4 = $[4];
51
+ t5 = $[5];
52
+ t6 = $[6];
53
+ }
54
+ let t7;
55
+ if ($[11] !== t1 || $[12] !== t2 || $[13] !== t3 || $[14] !== t4 || $[15] !== t5) {
56
+ t7 = {
57
+ defaultTagName: t1,
58
+ render: t2,
59
+ ref: t3,
60
+ state: t4,
61
+ props: t5
62
+ };
63
+ $[11] = t1;
64
+ $[12] = t2;
65
+ $[13] = t3;
66
+ $[14] = t4;
67
+ $[15] = t5;
68
+ $[16] = t7;
69
+ } else t7 = $[16];
70
+ return t6(t7);
71
+ }
72
+ var CardHeader = createPrimitive("div", "oui-card__header", "CardHeader");
73
+ var CardTitle = createPrimitive("h3", "oui-card__title", "CardTitle");
74
+ var CardDescription = createPrimitive("p", "oui-card__description", "CardDescription");
75
+ /** Right-aligned slot inside CardHeader for icon buttons or menus. */
76
+ var CardActions = createPrimitive("div", "oui-card__actions", "CardActions");
77
+ var CardContent = createPrimitive("div", "oui-card__content", "CardContent");
78
+ var CardFooter = createPrimitive("div", "oui-card__footer", "CardFooter");
79
+ //#endregion
80
+ export { Card, CardActions, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };
81
+
82
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","names":["useRender","mergeProps","createPrimitive","CardVariant","CardPadding","CardState","variant","padding","interactive","CardProps","ComponentProps","Card","t0","$","_c","t1","t2","t3","t4","t5","t6","t7","t8","t9","render","ref","props","undefined","t10","state","className","defaultTagName","CardHeader","CardTitle","CardDescription","CardActions","CardContent","CardFooter","_c"],"sources":["../../../src/components/card/Card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render';\nimport { mergeProps } from '@base-ui/react/merge-props';\nimport { createPrimitive } from '../../utils/primitive';\n\nexport type CardVariant = 'outlined' | 'elevated' | 'filled' | 'ghost';\nexport type CardPadding = 'none' | 'sm' | 'md' | 'lg';\n\nexport type CardState = {\n variant: CardVariant;\n padding: CardPadding;\n interactive: boolean;\n};\n\nexport interface CardProps extends useRender.ComponentProps<'div', CardState> {\n /** `outlined` (default) uses the card border, `elevated` a soft shadow. */\n variant?: CardVariant;\n /** Inner spacing. Override with `--oui-card-padding`. */\n padding?: CardPadding;\n /** Adds hover and focus states — use with `render={<a href=… />}` or a click handler. */\n interactive?: boolean;\n}\n\nexport function Card({ variant = 'outlined', padding = 'md', interactive = false, render, ref, ...props }: CardProps) {\n const state: CardState = { variant, padding, interactive };\n return useRender({\n defaultTagName: 'div',\n render,\n ref,\n state,\n props: mergeProps<'div'>({ className: 'oui-card' }, props),\n });\n}\n\nexport const CardHeader = createPrimitive('div', 'oui-card__header', 'CardHeader');\nexport const CardTitle = createPrimitive('h3', 'oui-card__title', 'CardTitle');\nexport const CardDescription = createPrimitive('p', 'oui-card__description', 'CardDescription');\n/** Right-aligned slot inside CardHeader for icon buttons or menus. */\nexport const CardActions = createPrimitive('div', 'oui-card__actions', 'CardActions');\nexport const CardContent = createPrimitive('div', 'oui-card__content', 'CardContent');\nexport const CardFooter = createPrimitive('div', 'oui-card__footer', 'CardFooter');\n"],"mappings":";;;;;;AAsBA,SAAOW,KAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAP,EAAA,OAAAD,IAAA;EAAc,MAAA,EAAAN,SAAAe,IAAAd,SAAAe,IAAAd,aAAAe,IAAAC,QAAAC,KAAA,GAAAC,UAAAd;EAAE,MAAAN,UAAAe,OAAAM,KAAAA,IAAA,aAAAN;EAAsB,MAAAd,UAAAe,OAAAK,KAAAA,IAAA,OAAAL;EAAgB,MAAAd,cAAAe,OAAAI,KAAAA,IAAA,QAAAJ;EAAmB,IAAAK;EAAA,IAAAf,EAAA,OAAAL,eAAAK,EAAA,OAAAN,WAAAM,EAAA,OAAAP,SAAA;GACrDsB,MAAA;IAAAtB;IAAAC;IAAAC;GAAgC;GAACK,EAAA,KAAAL;GAAAK,EAAA,KAAAN;GAAAM,EAAA,KAAAP;GAAAO,EAAA,MAAAe;EAAA,OAAAA,MAAAf,EAAA;EAA1D,MAAAgB,QAAyBD;EAClB5B,KAAAA;EACWe,KAAA;EAChBS,KAAAA;EACAC,KAAAA;EACAI,KAAAA;EACOV,KAAAlB,WAAkB,EAAA6B,WAAa,WAAW,GAAGJ,KAAK;EAACb,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;EAAAL,EAAA,KAAAM;EAAAN,EAAA,KAAAO;CAAA,OAAA;EAAAL,KAAAF,EAAA;EAAAG,KAAAH,EAAA;EAAAI,KAAAJ,EAAA;EAAAK,KAAAL,EAAA;EAAAM,KAAAN,EAAA;EAAAO,KAAAP,EAAA;CAAA;CAAA,IAAAQ;CAAA,IAAAR,EAAA,QAAAE,MAAAF,EAAA,QAAAG,MAAAH,EAAA,QAAAI,MAAAJ,EAAA,QAAAK,MAAAL,EAAA,QAAAM,IAAA;EAL3CE,KAAA;GAAAU,gBACChB;GAAKS,QACrBA;GAAMC,KACNA;GAAGI,OACHA;GAAKH,OACEP;EACT;EAACN,EAAA,MAAAE;EAAAF,EAAA,MAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAK;EAAAL,EAAA,MAAAM;EAAAN,EAAA,MAAAQ;CAAA,OAAAA,KAAAR,EAAA;CAAA,OANMb,GAAUqB,EAMhB;AAAC;AAGJ,IAAaW,aAAa9B,gBAAgB,OAAO,oBAAoB,YAAY;AACjF,IAAa+B,YAAY/B,gBAAgB,MAAM,mBAAmB,WAAW;AAC7E,IAAagC,kBAAkBhC,gBAAgB,KAAK,yBAAyB,iBAAiB;;AAE9F,IAAaiC,cAAcjC,gBAAgB,OAAO,qBAAqB,aAAa;AACpF,IAAakC,cAAclC,gBAAgB,OAAO,qBAAqB,aAAa;AACpF,IAAamC,aAAanC,gBAAgB,OAAO,oBAAoB,YAAY"}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+ import { Checkbox as BaseCheckbox } from '@base-ui/react/checkbox';
3
+ import { CheckboxGroup as BaseCheckboxGroup } from '@base-ui/react/checkbox-group';
4
+ import { Radio as BaseRadio } from '@base-ui/react/radio';
5
+ import { RadioGroup as BaseRadioGroup } from '@base-ui/react/radio-group';
6
+ import { Switch as BaseSwitch } from '@base-ui/react/switch';
7
+ export type ChoiceSize = 'sm' | 'md';
8
+ interface ChoiceLabelProps {
9
+ /** Visible label. Wraps the control in a `<label>` when set. */
10
+ label?: React.ReactNode;
11
+ /** Secondary text under the label. */
12
+ description?: React.ReactNode;
13
+ size?: ChoiceSize;
14
+ }
15
+ export interface CheckboxProps extends BaseCheckbox.Root.Props, ChoiceLabelProps {
16
+ }
17
+ export declare function Checkbox({ label, description, size, className, ref, ...props }: CheckboxProps): React.JSX.Element;
18
+ export interface CheckboxGroupProps extends BaseCheckboxGroup.Props {
19
+ orientation?: 'vertical' | 'horizontal';
20
+ }
21
+ export declare function CheckboxGroup({ orientation, className, ref, ...props }: CheckboxGroupProps): React.JSX.Element;
22
+ export interface RadioGroupProps extends BaseRadioGroup.Props {
23
+ orientation?: 'vertical' | 'horizontal';
24
+ }
25
+ export declare function RadioGroup({ orientation, className, ref, ...props }: RadioGroupProps): React.JSX.Element;
26
+ export interface RadioProps extends BaseRadio.Root.Props, ChoiceLabelProps {
27
+ }
28
+ export declare function Radio({ label, description, size, className, ref, ...props }: RadioProps): React.JSX.Element;
29
+ export interface SwitchProps extends BaseSwitch.Root.Props, ChoiceLabelProps {
30
+ }
31
+ export declare function Switch({ label, description, size, className, ref, ...props }: SwitchProps): React.JSX.Element;
32
+ export {};