@cognite/aura 0.3.5 → 1.46105.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.
- package/CHANGELOG.md +264 -0
- package/DESIGN.md +638 -281
- package/LICENSE +21 -0
- package/README.md +21 -13
- package/dist/colors-deprecated.css +587 -0
- package/dist/colors.css +803 -830
- package/dist/components/index.d.ts +63 -57
- package/dist/components/index.js +62 -59
- package/dist/components/index.js.map +1 -0
- package/dist/components/ui/core/accordion/accordion.d.ts +19 -18
- package/dist/components/ui/core/accordion/accordion.js +99 -78
- package/dist/components/ui/core/accordion/accordion.js.map +1 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.d.ts +8 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js +125 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar-motion.js.map +1 -0
- package/dist/components/ui/core/action-toolbar/action-toolbar.d.ts +31 -31
- package/dist/components/ui/core/action-toolbar/action-toolbar.js +156 -106
- package/dist/components/ui/core/action-toolbar/action-toolbar.js.map +1 -0
- package/dist/components/ui/core/alert/alert.d.ts +25 -25
- package/dist/components/ui/core/alert/alert.js +181 -152
- package/dist/components/ui/core/alert/alert.js.map +1 -0
- package/dist/components/ui/core/avatar/avatar.d.ts +10 -9
- package/dist/components/ui/core/avatar/avatar.js +75 -65
- package/dist/components/ui/core/avatar/avatar.js.map +1 -0
- package/dist/components/ui/core/badge/badge.d.ts +13 -12
- package/dist/components/ui/core/badge/badge.js +88 -72
- package/dist/components/ui/core/badge/badge.js.map +1 -0
- package/dist/components/ui/core/banner/banner.d.ts +18 -18
- package/dist/components/ui/core/banner/banner.js +179 -142
- package/dist/components/ui/core/banner/banner.js.map +1 -0
- package/dist/components/ui/core/breadcrumb/breadcrumb.d.ts +12 -12
- package/dist/components/ui/core/breadcrumb/breadcrumb.js +139 -104
- package/dist/components/ui/core/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/ui/core/button/button.d.ts +7 -7
- package/dist/components/ui/core/button/button.gallery.d.ts +2 -0
- package/dist/components/ui/core/button/button.gallery.js +76 -0
- package/dist/components/ui/core/button/button.gallery.js.map +1 -0
- package/dist/components/ui/core/button/button.js +57 -47
- package/dist/components/ui/core/button/button.js.map +1 -0
- package/dist/components/ui/core/button-group/button-group.d.ts +9 -9
- package/dist/components/ui/core/button-group/button-group.js +50 -40
- package/dist/components/ui/core/button-group/button-group.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar-header.d.ts +7 -7
- package/dist/components/ui/core/calendar/calendar-header.js +102 -63
- package/dist/components/ui/core/calendar/calendar-header.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar-utils.d.ts +30 -30
- package/dist/components/ui/core/calendar/calendar-utils.js +116 -39
- package/dist/components/ui/core/calendar/calendar-utils.js.map +1 -0
- package/dist/components/ui/core/calendar/calendar.d.ts +10 -10
- package/dist/components/ui/core/calendar/calendar.js +95 -66
- package/dist/components/ui/core/calendar/calendar.js.map +1 -0
- package/dist/components/ui/core/calendar/constants.js +3 -0
- package/dist/components/ui/core/calendar/constants.js.map +1 -0
- package/dist/components/ui/core/card/card.d.ts +20 -20
- package/dist/components/ui/core/card/card.js +133 -104
- package/dist/components/ui/core/card/card.js.map +1 -0
- package/dist/components/ui/core/chart/chart.d.ts +55 -53
- package/dist/components/ui/core/chart/chart.js +196 -116
- package/dist/components/ui/core/chart/chart.js.map +1 -0
- package/dist/components/ui/core/chart/index.d.ts +2 -2
- package/dist/components/ui/core/chart/index.js +3 -2
- package/dist/components/ui/core/chart/index.js.map +1 -0
- package/dist/components/ui/core/checkbox/checkbox.d.ts +9 -9
- package/dist/components/ui/core/checkbox/checkbox.js +88 -68
- package/dist/components/ui/core/checkbox/checkbox.js.map +1 -0
- package/dist/components/ui/core/checkbox/checkbox.metadata.d.ts +1 -1
- package/dist/components/ui/core/checkbox/checkbox.metadata.js +6 -7
- package/dist/components/ui/core/checkbox/checkbox.metadata.js.map +1 -0
- package/dist/components/ui/core/code-block/code-block.d.ts +19 -19
- package/dist/components/ui/core/code-block/code-block.js +259 -175
- package/dist/components/ui/core/code-block/code-block.js.map +1 -0
- package/dist/components/ui/core/collapsible/collapsible.d.ts +5 -5
- package/dist/components/ui/core/collapsible/collapsible.js +36 -30
- package/dist/components/ui/core/collapsible/collapsible.js.map +1 -0
- package/dist/components/ui/core/combobox/combobox.d.ts +13 -13
- package/dist/components/ui/core/combobox/combobox.js +89 -40
- package/dist/components/ui/core/combobox/combobox.js.map +1 -0
- package/dist/components/ui/core/command/command.d.ts +20 -18
- package/dist/components/ui/core/command/command.js +137 -85
- package/dist/components/ui/core/command/command.js.map +1 -0
- package/dist/components/ui/core/conversation/conversation.d.ts +14 -0
- package/dist/components/ui/core/conversation/conversation.js +51 -0
- package/dist/components/ui/core/conversation/conversation.js.map +1 -0
- package/dist/components/ui/core/count/count.d.ts +8 -6
- package/dist/components/ui/core/count/count.js +51 -21
- package/dist/components/ui/core/count/count.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-cell.d.ts +7 -7
- package/dist/components/ui/core/data-grid/data-grid-cell.js +22 -22
- package/dist/components/ui/core/data-grid/data-grid-cell.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.d.ts +14 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js +36 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-clauses.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.d.ts +41 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.js +273 -0
- package/dist/components/ui/core/data-grid/data-grid-filter-panel.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.d.ts +6 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.js +34 -0
- package/dist/components/ui/core/data-grid/data-grid-footer.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-header-row.d.ts +10 -10
- package/dist/components/ui/core/data-grid/data-grid-header-row.js +69 -55
- package/dist/components/ui/core/data-grid/data-grid-header-row.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-header.d.ts +11 -0
- package/dist/components/ui/core/data-grid/data-grid-header.js +67 -0
- package/dist/components/ui/core/data-grid/data-grid-header.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid-row.d.ts +15 -15
- package/dist/components/ui/core/data-grid/data-grid-row.js +104 -76
- package/dist/components/ui/core/data-grid/data-grid-row.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.d.ts +85 -35
- package/dist/components/ui/core/data-grid/data-grid.fixtures.d.ts +7 -7
- package/dist/components/ui/core/data-grid/data-grid.fixtures.js +139 -0
- package/dist/components/ui/core/data-grid/data-grid.fixtures.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.js +402 -132
- package/dist/components/ui/core/data-grid/data-grid.js.map +1 -0
- package/dist/components/ui/core/data-grid/data-grid.utils.d.ts +3 -3
- package/dist/components/ui/core/data-grid/data-grid.utils.js +44 -33
- package/dist/components/ui/core/data-grid/data-grid.utils.js.map +1 -0
- package/dist/components/ui/core/data-grid/index.d.ts +4 -1
- package/dist/components/ui/core/data-grid/index.js +5 -2
- package/dist/components/ui/core/data-grid/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.d.ts +11 -13
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js +85 -61
- package/dist/components/ui/core/date-time-pickers/date-picker/date-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/types.d.ts +14 -14
- package/dist/components/ui/core/date-time-pickers/date-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js +51 -36
- package/dist/components/ui/core/date-time-pickers/date-picker/use-date-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.d.ts +11 -13
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js +89 -64
- package/dist/components/ui/core/date-time-pickers/date-range-picker/date-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.d.ts +20 -20
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.d.ts +4 -4
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js +95 -60
- package/dist/components/ui/core/date-time-pickers/date-range-picker/use-date-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.d.ts +15 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js +120 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/date-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.d.ts +3 -1
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.d.ts +25 -32
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js +78 -0
- package/dist/components/ui/core/date-time-pickers/date-time-picker/use-date-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.d.ts +13 -15
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js +165 -119
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/date-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.d.ts +37 -37
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js +163 -104
- package/dist/components/ui/core/date-time-pickers/date-time-range-picker/use-date-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/index.d.ts +17 -12
- package/dist/components/ui/core/date-time-pickers/index.js +10 -6
- package/dist/components/ui/core/date-time-pickers/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js +52 -42
- package/dist/components/ui/core/date-time-pickers/shared/am-pm-scroll/am-pm-scroll.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/constants.d.ts +6 -1
- package/dist/components/ui/core/date-time-pickers/shared/constants.js +23 -0
- package/dist/components/ui/core/date-time-pickers/shared/constants.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.d.ts +16 -15
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js +87 -64
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/date-time-input.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.d.ts +10 -9
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js +89 -38
- package/dist/components/ui/core/date-time-pickers/shared/date-time-input/range-input-display.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js +34 -23
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-popover-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.d.ts +23 -23
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js +95 -52
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-date-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js +22 -18
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-range-step-manager.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.d.ts +19 -19
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js +41 -24
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-single-date-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.d.ts +13 -13
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js +33 -24
- package/dist/components/ui/core/date-time-pickers/shared/hooks/use-time-state.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.d.ts +5 -5
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js +9 -4
- package/dist/components/ui/core/date-time-pickers/shared/scroll-cell-classes.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.d.ts +13 -9
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js +22 -17
- package/dist/components/ui/core/date-time-pickers/shared/shortcuts-panel/shortcuts-panel.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.d.ts +13 -13
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js +49 -40
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-panel/time-picker-panel.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.d.ts +7 -7
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js +41 -34
- package/dist/components/ui/core/date-time-pickers/shared/time-picker-scroll/time-picker-scroll.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/index.d.ts +3 -3
- package/dist/components/ui/core/date-time-pickers/time-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.d.ts +12 -14
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js +99 -79
- package/dist/components/ui/core/date-time-pickers/time-picker/time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/types.d.ts +20 -20
- package/dist/components/ui/core/date-time-pickers/time-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js +63 -41
- package/dist/components/ui/core/date-time-pickers/time-picker/use-time-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.d.ts +3 -1
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/index.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.d.ts +14 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js +115 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.d.ts +30 -36
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js +3 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/types.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.d.ts +2 -2
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js +145 -0
- package/dist/components/ui/core/date-time-pickers/time-range-picker/use-time-range-picker.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.d.ts +56 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.js +67 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-input.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.d.ts +18 -18
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js +42 -0
- package/dist/components/ui/core/date-time-pickers/utils/date-range-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.d.ts +31 -29
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.js +56 -0
- package/dist/components/ui/core/date-time-pickers/utils/format-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.d.ts +21 -21
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js +170 -0
- package/dist/components/ui/core/date-time-pickers/utils/segment-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.d.ts +28 -28
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.js +88 -7
- package/dist/components/ui/core/date-time-pickers/utils/time-utils.js.map +1 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.d.ts +17 -17
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.js +43 -0
- package/dist/components/ui/core/date-time-pickers/utils/time-validation.js.map +1 -0
- package/dist/components/ui/core/dialog/dialog.d.ts +12 -9
- package/dist/components/ui/core/dialog/dialog.js +90 -82
- package/dist/components/ui/core/dialog/dialog.js.map +1 -0
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.d.ts +22 -19
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.js +204 -149
- package/dist/components/ui/core/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/ui/core/empty-state/empty-state.context.d.ts +4 -4
- package/dist/components/ui/core/empty-state/empty-state.context.js +8 -5
- package/dist/components/ui/core/empty-state/empty-state.context.js.map +1 -0
- package/dist/components/ui/core/empty-state/empty-state.d.ts +14 -14
- package/dist/components/ui/core/empty-state/empty-state.js +96 -82
- package/dist/components/ui/core/empty-state/empty-state.js.map +1 -0
- package/dist/components/ui/core/helper-text/helper-text.d.ts +7 -7
- package/dist/components/ui/core/helper-text/helper-text.js +55 -36
- package/dist/components/ui/core/helper-text/helper-text.js.map +1 -0
- package/dist/components/ui/core/hover-card/hover-card.d.ts +7 -6
- package/dist/components/ui/core/hover-card/hover-card.js +56 -52
- package/dist/components/ui/core/hover-card/hover-card.js.map +1 -0
- package/dist/components/ui/core/inline-citation/inline-citation.d.ts +26 -25
- package/dist/components/ui/core/inline-citation/inline-citation.js +121 -97
- package/dist/components/ui/core/inline-citation/inline-citation.js.map +1 -0
- package/dist/components/ui/core/input/input.d.ts +2 -2
- package/dist/components/ui/core/input/input.js +15 -13
- package/dist/components/ui/core/input/input.js.map +1 -0
- package/dist/components/ui/core/input-group/input-group.d.ts +25 -14
- package/dist/components/ui/core/input-group/input-group.js +149 -76
- package/dist/components/ui/core/input-group/input-group.js.map +1 -0
- package/dist/components/ui/core/item/item.d.ts +20 -0
- package/dist/components/ui/core/item/item.js +93 -0
- package/dist/components/ui/core/item/item.js.map +1 -0
- package/dist/components/ui/core/kbd/kbd.d.ts +3 -3
- package/dist/components/ui/core/kbd/kbd.js +24 -20
- package/dist/components/ui/core/kbd/kbd.js.map +1 -0
- package/dist/components/ui/core/label/label.d.ts +3 -3
- package/dist/components/ui/core/label/label.js +33 -26
- package/dist/components/ui/core/label/label.js.map +1 -0
- package/dist/components/ui/core/loader/loader.d.ts +6 -6
- package/dist/components/ui/core/loader/loader.js +97 -80
- package/dist/components/ui/core/loader/loader.js.map +1 -0
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.d.ts +9 -9
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.js +19 -12
- package/dist/components/ui/core/message/message-response-default-streamdown-controls.js.map +1 -0
- package/dist/components/ui/core/message/message-response-math-plugin.d.ts +3 -0
- package/dist/components/ui/core/message/message-response-math-plugin.js +6 -0
- package/dist/components/ui/core/message/message-response-math-plugin.js.map +1 -0
- package/dist/components/ui/core/message/message.d.ts +27 -23
- package/dist/components/ui/core/message/message.js +453 -316
- package/dist/components/ui/core/message/message.js.map +1 -0
- package/dist/components/ui/core/overflow-list/overflow-list.d.ts +21 -0
- package/dist/components/ui/core/overflow-list/overflow-list.js +197 -0
- package/dist/components/ui/core/overflow-list/overflow-list.js.map +1 -0
- package/dist/components/ui/core/overflow-list/overflow-list.utils.d.ts +37 -35
- package/dist/components/ui/core/overflow-list/overflow-list.utils.js +206 -0
- package/dist/components/ui/core/overflow-list/overflow-list.utils.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-size-context.d.ts +2 -2
- package/dist/components/ui/core/pagination/pagination-size-context.js +6 -5
- package/dist/components/ui/core/pagination/pagination-size-context.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-teleport.d.ts +9 -9
- package/dist/components/ui/core/pagination/pagination-teleport.js +127 -84
- package/dist/components/ui/core/pagination/pagination-teleport.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination-teleport.utils.js +6 -6
- package/dist/components/ui/core/pagination/pagination-teleport.utils.js.map +1 -0
- package/dist/components/ui/core/pagination/pagination.d.ts +39 -39
- package/dist/components/ui/core/pagination/pagination.js +294 -234
- package/dist/components/ui/core/pagination/pagination.js.map +1 -0
- package/dist/components/ui/core/popover/popover.d.ts +12 -11
- package/dist/components/ui/core/popover/popover.js +104 -89
- package/dist/components/ui/core/popover/popover.js.map +1 -0
- package/dist/components/ui/core/progress/progress.d.ts +9 -8
- package/dist/components/ui/core/progress/progress.js +50 -35
- package/dist/components/ui/core/progress/progress.js.map +1 -0
- package/dist/components/ui/core/prompt-input/prompt-input.d.ts +27 -27
- package/dist/components/ui/core/prompt-input/prompt-input.js +342 -271
- package/dist/components/ui/core/prompt-input/prompt-input.js.map +1 -0
- package/dist/components/ui/core/radio-group/radio-group.d.ts +12 -12
- package/dist/components/ui/core/radio-group/radio-group.js +88 -58
- package/dist/components/ui/core/radio-group/radio-group.js.map +1 -0
- package/dist/components/ui/core/reasoning/reasoning.d.ts +7 -7
- package/dist/components/ui/core/reasoning/reasoning.js +68 -56
- package/dist/components/ui/core/reasoning/reasoning.js.map +1 -0
- package/dist/components/ui/core/scroll-area/scroll-area.d.ts +4 -4
- package/dist/components/ui/core/scroll-area/scroll-area.js +50 -40
- package/dist/components/ui/core/scroll-area/scroll-area.js.map +1 -0
- package/dist/components/ui/core/search/search.d.ts +8 -8
- package/dist/components/ui/core/search/search.js +122 -76
- package/dist/components/ui/core/search/search.js.map +1 -0
- package/dist/components/ui/core/segmented-control/segmented-control.d.ts +10 -10
- package/dist/components/ui/core/segmented-control/segmented-control.js +203 -149
- package/dist/components/ui/core/segmented-control/segmented-control.js.map +1 -0
- package/dist/components/ui/core/select/select.d.ts +27 -26
- package/dist/components/ui/core/select/select.js +213 -168
- package/dist/components/ui/core/select/select.js.map +1 -0
- package/dist/components/ui/core/separator/separator.d.ts +2 -2
- package/dist/components/ui/core/separator/separator.js +13 -13
- package/dist/components/ui/core/separator/separator.js.map +1 -0
- package/dist/components/ui/core/shimmer/shimmer.d.ts +8 -8
- package/dist/components/ui/core/shimmer/shimmer.js +64 -40
- package/dist/components/ui/core/shimmer/shimmer.js.map +1 -0
- package/dist/components/ui/core/skeleton/skeleton.d.ts +2 -2
- package/dist/components/ui/core/skeleton/skeleton.js +13 -13
- package/dist/components/ui/core/skeleton/skeleton.js.map +1 -0
- package/dist/components/ui/core/slider/slider.d.ts +7 -7
- package/dist/components/ui/core/slider/slider.js +51 -39
- package/dist/components/ui/core/slider/slider.js.map +1 -0
- package/dist/components/ui/core/sonner-toast/sonner-toast.d.ts +2 -2
- package/dist/components/ui/core/sonner-toast/sonner-toast.js +67 -54
- package/dist/components/ui/core/sonner-toast/sonner-toast.js.map +1 -0
- package/dist/components/ui/core/sources/sources.d.ts +12 -12
- package/dist/components/ui/core/sources/sources.js +87 -58
- package/dist/components/ui/core/sources/sources.js.map +1 -0
- package/dist/components/ui/core/switch/switch.d.ts +9 -9
- package/dist/components/ui/core/switch/switch.js +83 -61
- package/dist/components/ui/core/switch/switch.js.map +1 -0
- package/dist/components/ui/core/switch/switch.metadata.d.ts +1 -1
- package/dist/components/ui/core/switch/switch.metadata.js +8 -0
- package/dist/components/ui/core/switch/switch.metadata.js.map +1 -0
- package/dist/components/ui/core/tabs/tabs.d.ts +20 -18
- package/dist/components/ui/core/tabs/tabs.js +176 -147
- package/dist/components/ui/core/tabs/tabs.js.map +1 -0
- package/dist/components/ui/core/tabs/tabs.utils.d.ts +1 -1
- package/dist/components/ui/core/tabs/tabs.utils.js +10 -6
- package/dist/components/ui/core/tabs/tabs.utils.js.map +1 -0
- package/dist/components/ui/core/textarea/textarea.d.ts +2 -2
- package/dist/components/ui/core/textarea/textarea.js +13 -13
- package/dist/components/ui/core/textarea/textarea.js.map +1 -0
- package/dist/components/ui/core/toggle/toggle.d.ts +9 -9
- package/dist/components/ui/core/toggle/toggle.js +60 -54
- package/dist/components/ui/core/toggle/toggle.js.map +1 -0
- package/dist/components/ui/core/tool/tool.d.ts +18 -18
- package/dist/components/ui/core/tool/tool.js +167 -126
- package/dist/components/ui/core/tool/tool.js.map +1 -0
- package/dist/components/ui/core/toolbar/toolbar.d.ts +37 -0
- package/dist/components/ui/core/toolbar/toolbar.js +171 -0
- package/dist/components/ui/core/toolbar/toolbar.js.map +1 -0
- package/dist/components/ui/core/tooltip/tooltip.d.ts +8 -7
- package/dist/components/ui/core/tooltip/tooltip.js +53 -46
- package/dist/components/ui/core/tooltip/tooltip.js.map +1 -0
- package/dist/components/ui/core/topbar/topbar.d.ts +26 -26
- package/dist/components/ui/core/topbar/topbar.js +160 -105
- package/dist/components/ui/core/topbar/topbar.js.map +1 -0
- package/dist/components/ui/core/tree/tree.d.ts +20 -0
- package/dist/components/ui/core/tree/tree.js +100 -0
- package/dist/components/ui/core/tree/tree.js.map +1 -0
- package/dist/eslint/index.d.ts +5 -5
- package/dist/eslint/index.js +9 -5
- package/dist/eslint/index.js.map +1 -0
- package/dist/eslint/no-overriding-styles.d.ts +1 -1
- package/dist/eslint/no-overriding-styles.js +341 -201
- package/dist/eslint/no-overriding-styles.js.map +1 -0
- package/dist/icons/index.d.ts +1 -1
- package/dist/icons/index.js +2 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/ai/types.d.ts +43 -43
- package/dist/lib/ai/types.js +3 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/decorative-variant-classes.d.ts +53 -0
- package/dist/lib/decorative-variant-classes.js +58 -0
- package/dist/lib/decorative-variant-classes.js.map +1 -0
- package/dist/lib/highlight-code.d.ts +11 -8
- package/dist/lib/highlight-code.js +58 -40
- package/dist/lib/highlight-code.js.map +1 -0
- package/dist/lib/portal-container-context.d.ts +1 -1
- package/dist/lib/portal-container-context.js +8 -8
- package/dist/lib/portal-container-context.js.map +1 -0
- package/dist/lib/shared-theme-from-url.d.ts +13 -0
- package/dist/lib/shared-theme-from-url.js +61 -0
- package/dist/lib/shared-theme-from-url.js.map +1 -0
- package/dist/lib/style-scope.d.ts +2 -2
- package/dist/lib/style-scope.js +6 -6
- package/dist/lib/style-scope.js.map +1 -0
- package/dist/lib/theme-share-url.d.ts +31 -0
- package/dist/lib/theme-share-url.js +116 -0
- package/dist/lib/theme-share-url.js.map +1 -0
- package/dist/lib/types.d.ts +39 -39
- package/dist/lib/types.js +3 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/use-controllable-state.d.ts +4 -7
- package/dist/lib/use-controllable-state.js +34 -21
- package/dist/lib/use-controllable-state.js.map +1 -0
- package/dist/lib/utils.d.ts +63 -34
- package/dist/lib/utils.js +134 -32
- package/dist/lib/utils.js.map +1 -0
- package/dist/styles.css +2 -1
- package/dist/styles.source.css +24 -12
- package/dist/utils/assign-ref.d.ts +3 -0
- package/dist/utils/assign-ref.js +13 -0
- package/dist/utils/assign-ref.js.map +1 -0
- package/package.json +46 -11
- package/src/components/ui/core/button/button.md +93 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { buildSharedThemeCss, emptySharedTheme, readAppearanceFromHash, readThemeFromHash } from "./theme-share-url.js";
|
|
4
|
+
const readInitialTheme = ()=>{
|
|
5
|
+
if (typeof window === 'undefined') return emptySharedTheme();
|
|
6
|
+
return readThemeFromHash(window.location.hash) ?? emptySharedTheme();
|
|
7
|
+
};
|
|
8
|
+
const readInitialAppearance = ()=>{
|
|
9
|
+
if (typeof window === 'undefined') return undefined;
|
|
10
|
+
return readAppearanceFromHash(window.location.hash);
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Applies a shared theme (`#theme=…`) via injected CSS variables. Hash
|
|
14
|
+
* `#appearance=` overrides the Storybook toolbar theme so iframe parents can
|
|
15
|
+
* restyle the preview without remounting.
|
|
16
|
+
*/ export const SharedThemeFromUrl = ({ toolbarTheme, children })=>{
|
|
17
|
+
const [shared, setShared] = useState(readInitialTheme);
|
|
18
|
+
const [hashAppearance, setHashAppearance] = useState(readInitialAppearance);
|
|
19
|
+
const applyFromHash = useCallback(()=>{
|
|
20
|
+
const fromHash = readThemeFromHash(window.location.hash);
|
|
21
|
+
if (fromHash) {
|
|
22
|
+
setShared(fromHash);
|
|
23
|
+
}
|
|
24
|
+
setHashAppearance(readAppearanceFromHash(window.location.hash));
|
|
25
|
+
}, []);
|
|
26
|
+
useEffect(()=>{
|
|
27
|
+
const onHashChange = ()=>applyFromHash();
|
|
28
|
+
window.addEventListener('hashchange', onHashChange);
|
|
29
|
+
return ()=>window.removeEventListener('hashchange', onHashChange);
|
|
30
|
+
}, [
|
|
31
|
+
applyFromHash
|
|
32
|
+
]);
|
|
33
|
+
const theme = hashAppearance ?? toolbarTheme;
|
|
34
|
+
useEffect(()=>{
|
|
35
|
+
const root = document.documentElement;
|
|
36
|
+
if (theme === 'dark') {
|
|
37
|
+
root.classList.add('dark');
|
|
38
|
+
} else {
|
|
39
|
+
root.classList.remove('dark');
|
|
40
|
+
}
|
|
41
|
+
}, [
|
|
42
|
+
theme
|
|
43
|
+
]);
|
|
44
|
+
const css = useMemo(()=>buildSharedThemeCss(shared), [
|
|
45
|
+
shared
|
|
46
|
+
]);
|
|
47
|
+
return /*#__PURE__*/ _jsxs(_Fragment, {
|
|
48
|
+
children: [
|
|
49
|
+
css ? /*#__PURE__*/ _jsx("style", {
|
|
50
|
+
"data-aura-shared-theme": "",
|
|
51
|
+
children: css
|
|
52
|
+
}) : null,
|
|
53
|
+
/*#__PURE__*/ _jsx("div", {
|
|
54
|
+
className: theme === 'dark' ? 'dark text-foreground' : 'text-foreground',
|
|
55
|
+
children: children
|
|
56
|
+
})
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=shared-theme-from-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/shared-theme-from-url.tsx"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useMemo,\n useState,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport {\n buildSharedThemeCss,\n emptySharedTheme,\n readAppearanceFromHash,\n readThemeFromHash,\n type SharedThemeOverrides,\n type ThemeAppearance,\n} from './theme-share-url';\n\nconst readInitialTheme = (): SharedThemeOverrides => {\n if (typeof window === 'undefined') return emptySharedTheme();\n return readThemeFromHash(window.location.hash) ?? emptySharedTheme();\n};\n\nconst readInitialAppearance = (): ThemeAppearance | undefined => {\n if (typeof window === 'undefined') return undefined;\n return readAppearanceFromHash(window.location.hash);\n};\n\ntype SharedThemeFromUrlProps = {\n toolbarTheme: ThemeAppearance;\n children: ReactNode;\n};\n\n/**\n * Applies a shared theme (`#theme=…`) via injected CSS variables. Hash\n * `#appearance=` overrides the Storybook toolbar theme so iframe parents can\n * restyle the preview without remounting.\n */\nexport const SharedThemeFromUrl = ({\n toolbarTheme,\n children,\n}: SharedThemeFromUrlProps): ReactElement => {\n const [shared, setShared] = useState<SharedThemeOverrides>(readInitialTheme);\n const [hashAppearance, setHashAppearance] = useState<\n ThemeAppearance | undefined\n >(readInitialAppearance);\n\n const applyFromHash = useCallback(() => {\n const fromHash = readThemeFromHash(window.location.hash);\n if (fromHash) {\n setShared(fromHash);\n }\n setHashAppearance(readAppearanceFromHash(window.location.hash));\n }, []);\n\n useEffect(() => {\n const onHashChange = () => applyFromHash();\n window.addEventListener('hashchange', onHashChange);\n return () => window.removeEventListener('hashchange', onHashChange);\n }, [applyFromHash]);\n\n const theme = hashAppearance ?? toolbarTheme;\n\n useEffect(() => {\n const root = document.documentElement;\n if (theme === 'dark') {\n root.classList.add('dark');\n } else {\n root.classList.remove('dark');\n }\n }, [theme]);\n\n const css = useMemo(() => buildSharedThemeCss(shared), [shared]);\n\n return (\n <>\n {css ? <style data-aura-shared-theme=\"\">{css}</style> : null}\n <div\n className={\n theme === 'dark' ? 'dark text-foreground' : 'text-foreground'\n }\n >\n {children}\n </div>\n </>\n );\n};\n"],"names":["useCallback","useEffect","useMemo","useState","buildSharedThemeCss","emptySharedTheme","readAppearanceFromHash","readThemeFromHash","readInitialTheme","window","location","hash","readInitialAppearance","undefined","SharedThemeFromUrl","toolbarTheme","children","shared","setShared","hashAppearance","setHashAppearance","applyFromHash","fromHash","onHashChange","addEventListener","removeEventListener","theme","root","document","documentElement","classList","add","remove","css","style","data-aura-shared-theme","div","className"],"mappings":";AAAA,SACEA,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,QAAQ,QAGH,QAAQ;AAEf,SACEC,mBAAmB,EACnBC,gBAAgB,EAChBC,sBAAsB,EACtBC,iBAAiB,QAGZ,uBAAoB;AAE3B,MAAMC,mBAAmB;IACvB,IAAI,OAAOC,WAAW,aAAa,OAAOJ;IAC1C,OAAOE,kBAAkBE,OAAOC,QAAQ,CAACC,IAAI,KAAKN;AACpD;AAEA,MAAMO,wBAAwB;IAC5B,IAAI,OAAOH,WAAW,aAAa,OAAOI;IAC1C,OAAOP,uBAAuBG,OAAOC,QAAQ,CAACC,IAAI;AACpD;AAOA;;;;CAIC,GACD,OAAO,MAAMG,qBAAqB,CAAC,EACjCC,YAAY,EACZC,QAAQ,EACgB;IACxB,MAAM,CAACC,QAAQC,UAAU,GAAGf,SAA+BK;IAC3D,MAAM,CAACW,gBAAgBC,kBAAkB,GAAGjB,SAE1CS;IAEF,MAAMS,gBAAgBrB,YAAY;QAChC,MAAMsB,WAAWf,kBAAkBE,OAAOC,QAAQ,CAACC,IAAI;QACvD,IAAIW,UAAU;YACZJ,UAAUI;QACZ;QACAF,kBAAkBd,uBAAuBG,OAAOC,QAAQ,CAACC,IAAI;IAC/D,GAAG,EAAE;IAELV,UAAU;QACR,MAAMsB,eAAe,IAAMF;QAC3BZ,OAAOe,gBAAgB,CAAC,cAAcD;QACtC,OAAO,IAAMd,OAAOgB,mBAAmB,CAAC,cAAcF;IACxD,GAAG;QAACF;KAAc;IAElB,MAAMK,QAAQP,kBAAkBJ;IAEhCd,UAAU;QACR,MAAM0B,OAAOC,SAASC,eAAe;QACrC,IAAIH,UAAU,QAAQ;YACpBC,KAAKG,SAAS,CAACC,GAAG,CAAC;QACrB,OAAO;YACLJ,KAAKG,SAAS,CAACE,MAAM,CAAC;QACxB;IACF,GAAG;QAACN;KAAM;IAEV,MAAMO,MAAM/B,QAAQ,IAAME,oBAAoBa,SAAS;QAACA;KAAO;IAE/D,qBACE;;YACGgB,oBAAM,KAACC;gBAAMC,0BAAuB;0BAAIF;iBAAe;0BACxD,KAACG;gBACCC,WACEX,UAAU,SAAS,yBAAyB;0BAG7CV;;;;AAIT,EAAE"}
|
package/dist/lib/style-scope.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
portalContainer: "aura-portal-container"
|
|
1
|
+
const styleScope = {
|
|
2
|
+
styleScope: 'aura-style-scope',
|
|
3
|
+
portalContainer: 'aura-portal-container'
|
|
5
4
|
};
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export default styleScope;
|
|
6
|
+
|
|
7
|
+
//# sourceMappingURL=style-scope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/style-scope.ts"],"sourcesContent":["const styleScope = {\n styleScope: 'aura-style-scope',\n portalContainer: 'aura-portal-container',\n} as const;\n\nexport default styleScope;\n"],"names":["styleScope","portalContainer"],"mappings":"AAAA,MAAMA,aAAa;IACjBA,YAAY;IACZC,iBAAiB;AACnB;AAEA,eAAeD,WAAW"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shareable theme encoding for Aura Storybook (and iframe parents).
|
|
3
|
+
*
|
|
4
|
+
* URL-safe base64 JSON of `{ base, light, dark }` string maps. Transport is
|
|
5
|
+
* the URL hash (`#theme=…`) so a parent can restyle an iframe via `hashchange`
|
|
6
|
+
* without rewriting Storybook's query string (which would remount the preview).
|
|
7
|
+
*/
|
|
8
|
+
export declare const THEME_HASH_PARAM = "theme";
|
|
9
|
+
export declare const APPEARANCE_HASH_PARAM = "appearance";
|
|
10
|
+
export type ThemeAppearance = "light" | "dark";
|
|
11
|
+
export interface SharedThemeOverrides {
|
|
12
|
+
base: Record<string, string>;
|
|
13
|
+
light: Record<string, string>;
|
|
14
|
+
dark: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
export declare const emptySharedTheme: () => SharedThemeOverrides;
|
|
17
|
+
/** Encodes theme overrides into a URL-safe base64 string. */
|
|
18
|
+
export declare function encodeTheme(overrides: SharedThemeOverrides): string;
|
|
19
|
+
/** Decodes a theme string, returning undefined when malformed or unsafe. */
|
|
20
|
+
export declare function decodeTheme(encoded: string): SharedThemeOverrides | undefined;
|
|
21
|
+
/** Reads and decodes `#theme=…` from a location hash. */
|
|
22
|
+
export declare function readThemeFromHash(hash: string): SharedThemeOverrides | undefined;
|
|
23
|
+
/** Reads `#appearance=light|dark` from a location hash. */
|
|
24
|
+
export declare function readAppearanceFromHash(hash: string): ThemeAppearance | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Builds a URL with the theme (and optional appearance) in the hash.
|
|
27
|
+
* Existing hash params unrelated to theme/appearance are preserved.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildThemeHashUrl(baseUrl: string, overrides: SharedThemeOverrides, appearance?: ThemeAppearance): string;
|
|
30
|
+
/** Serialises overrides into a `:root` / `.dark` CSS block (changed tokens only). */
|
|
31
|
+
export declare function buildSharedThemeCss(overrides: SharedThemeOverrides): string;
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shareable theme encoding for Aura Storybook (and iframe parents).
|
|
3
|
+
*
|
|
4
|
+
* URL-safe base64 JSON of `{ base, light, dark }` string maps. Transport is
|
|
5
|
+
* the URL hash (`#theme=…`) so a parent can restyle an iframe via `hashchange`
|
|
6
|
+
* without rewriting Storybook's query string (which would remount the preview).
|
|
7
|
+
*/ export const THEME_HASH_PARAM = 'theme';
|
|
8
|
+
export const APPEARANCE_HASH_PARAM = 'appearance';
|
|
9
|
+
export const emptySharedTheme = ()=>({
|
|
10
|
+
base: {},
|
|
11
|
+
light: {},
|
|
12
|
+
dark: {}
|
|
13
|
+
});
|
|
14
|
+
const toBase64 = (input)=>btoa(unescape(encodeURIComponent(input)));
|
|
15
|
+
const fromBase64 = (input)=>decodeURIComponent(escape(atob(input)));
|
|
16
|
+
const toUrlSafe = (value)=>value.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
17
|
+
const fromUrlSafe = (value)=>{
|
|
18
|
+
const padded = value.replace(/-/g, '+').replace(/_/g, '/');
|
|
19
|
+
const remainder = padded.length % 4;
|
|
20
|
+
return remainder === 0 ? padded : padded + '='.repeat(4 - remainder);
|
|
21
|
+
};
|
|
22
|
+
const isRecord = (value)=>typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
23
|
+
const isStringRecord = (value)=>isRecord(value) && Object.values(value).every((entry)=>typeof entry === 'string');
|
|
24
|
+
/** CSS custom-property name without the leading `--`. */ const CSS_TOKEN_NAME_PATTERN = /^[a-zA-Z][a-zA-Z0-9-]{0,127}$/;
|
|
25
|
+
const isSafeCssTokenName = (name)=>CSS_TOKEN_NAME_PATTERN.test(name);
|
|
26
|
+
const BREAKOUT_CHARS = new Set([
|
|
27
|
+
';',
|
|
28
|
+
'{',
|
|
29
|
+
'}',
|
|
30
|
+
'<',
|
|
31
|
+
'>',
|
|
32
|
+
'\\'
|
|
33
|
+
]);
|
|
34
|
+
const hasUnsafeCssChars = (value)=>{
|
|
35
|
+
for (const char of value){
|
|
36
|
+
const code = char.charCodeAt(0);
|
|
37
|
+
if (code <= 0x1f || code === 0x7f || BREAKOUT_CHARS.has(char)) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
/** Rejects values that can break out of a CSS declaration or `<style>` block. */ const isSafeCssTokenValue = (value)=>{
|
|
44
|
+
if (value.length === 0 || value.length > 512) return false;
|
|
45
|
+
if (hasUnsafeCssChars(value)) return false;
|
|
46
|
+
return !/@|url\s*\(|expression\s*\(/i.test(value);
|
|
47
|
+
};
|
|
48
|
+
const isSafeTokenRecord = (value)=>isStringRecord(value) && Object.entries(value).every(([name, tokenValue])=>isSafeCssTokenName(name) && isSafeCssTokenValue(tokenValue));
|
|
49
|
+
const sanitizeDeclarations = (declarations)=>Object.fromEntries(Object.entries(declarations).filter(([name, tokenValue])=>isSafeCssTokenName(name) && isSafeCssTokenValue(tokenValue)));
|
|
50
|
+
/** Encodes theme overrides into a URL-safe base64 string. */ export function encodeTheme(overrides) {
|
|
51
|
+
return toUrlSafe(toBase64(JSON.stringify(overrides)));
|
|
52
|
+
}
|
|
53
|
+
/** Decodes a theme string, returning undefined when malformed or unsafe. */ export function decodeTheme(encoded) {
|
|
54
|
+
try {
|
|
55
|
+
const parsed = JSON.parse(fromBase64(fromUrlSafe(encoded)));
|
|
56
|
+
if (!isRecord(parsed)) return undefined;
|
|
57
|
+
if (!isSafeTokenRecord(parsed.base) || !isSafeTokenRecord(parsed.light) || !isSafeTokenRecord(parsed.dark)) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
base: parsed.base,
|
|
62
|
+
light: parsed.light,
|
|
63
|
+
dark: parsed.dark
|
|
64
|
+
};
|
|
65
|
+
} catch {
|
|
66
|
+
return undefined;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
function parseHashParams(hash) {
|
|
70
|
+
const raw = hash.startsWith('#') ? hash.slice(1) : hash;
|
|
71
|
+
return new URLSearchParams(raw);
|
|
72
|
+
}
|
|
73
|
+
/** Reads and decodes `#theme=…` from a location hash. */ export function readThemeFromHash(hash) {
|
|
74
|
+
const encoded = parseHashParams(hash).get(THEME_HASH_PARAM);
|
|
75
|
+
return encoded ? decodeTheme(encoded) : undefined;
|
|
76
|
+
}
|
|
77
|
+
/** Reads `#appearance=light|dark` from a location hash. */ export function readAppearanceFromHash(hash) {
|
|
78
|
+
const value = parseHashParams(hash).get(APPEARANCE_HASH_PARAM);
|
|
79
|
+
return value === 'light' || value === 'dark' ? value : undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Builds a URL with the theme (and optional appearance) in the hash.
|
|
83
|
+
* Existing hash params unrelated to theme/appearance are preserved.
|
|
84
|
+
*/ export function buildThemeHashUrl(baseUrl, overrides, appearance) {
|
|
85
|
+
const url = new URL(baseUrl, typeof window !== 'undefined' ? window.location.origin : 'http://localhost');
|
|
86
|
+
const params = parseHashParams(url.hash);
|
|
87
|
+
params.set(THEME_HASH_PARAM, encodeTheme(overrides));
|
|
88
|
+
if (appearance) {
|
|
89
|
+
params.set(APPEARANCE_HASH_PARAM, appearance);
|
|
90
|
+
} else {
|
|
91
|
+
params.delete(APPEARANCE_HASH_PARAM);
|
|
92
|
+
}
|
|
93
|
+
url.hash = params.toString();
|
|
94
|
+
return url.toString();
|
|
95
|
+
}
|
|
96
|
+
/** Serialises overrides into a `:root` / `.dark` CSS block (changed tokens only). */ export function buildSharedThemeCss(overrides) {
|
|
97
|
+
const nl = String.fromCharCode(10);
|
|
98
|
+
const renderBlock = (selector, declarations)=>{
|
|
99
|
+
const safe = sanitizeDeclarations(declarations);
|
|
100
|
+
const names = Object.keys(safe).sort();
|
|
101
|
+
if (names.length === 0) return undefined;
|
|
102
|
+
const body = names.map((name)=>` --${name}: ${safe[name]};`).join(nl);
|
|
103
|
+
return `${selector} {${nl}${body}${nl}}`;
|
|
104
|
+
};
|
|
105
|
+
const blocks = [];
|
|
106
|
+
const lightBlock = renderBlock(':root', {
|
|
107
|
+
...overrides.base,
|
|
108
|
+
...overrides.light
|
|
109
|
+
});
|
|
110
|
+
if (lightBlock) blocks.push(lightBlock);
|
|
111
|
+
const darkBlock = renderBlock('.dark', overrides.dark);
|
|
112
|
+
if (darkBlock) blocks.push(darkBlock);
|
|
113
|
+
return blocks.join(nl + nl);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//# sourceMappingURL=theme-share-url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/theme-share-url.ts"],"sourcesContent":["/**\n * Shareable theme encoding for Aura Storybook (and iframe parents).\n *\n * URL-safe base64 JSON of `{ base, light, dark }` string maps. Transport is\n * the URL hash (`#theme=…`) so a parent can restyle an iframe via `hashchange`\n * without rewriting Storybook's query string (which would remount the preview).\n */\n\nexport const THEME_HASH_PARAM = 'theme';\nexport const APPEARANCE_HASH_PARAM = 'appearance';\n\nexport type ThemeAppearance = 'light' | 'dark';\n\nexport interface SharedThemeOverrides {\n base: Record<string, string>;\n light: Record<string, string>;\n dark: Record<string, string>;\n}\n\nexport const emptySharedTheme = (): SharedThemeOverrides => ({\n base: {},\n light: {},\n dark: {},\n});\n\nconst toBase64 = (input: string): string =>\n btoa(unescape(encodeURIComponent(input)));\n\nconst fromBase64 = (input: string): string =>\n decodeURIComponent(escape(atob(input)));\n\nconst toUrlSafe = (value: string): string =>\n value.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n\nconst fromUrlSafe = (value: string): string => {\n const padded = value.replace(/-/g, '+').replace(/_/g, '/');\n const remainder = padded.length % 4;\n return remainder === 0 ? padded : padded + '='.repeat(4 - remainder);\n};\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n typeof value === 'object' && value !== null && !Array.isArray(value);\n\nconst isStringRecord = (value: unknown): value is Record<string, string> =>\n isRecord(value) &&\n Object.values(value).every((entry) => typeof entry === 'string');\n\n/** CSS custom-property name without the leading `--`. */\nconst CSS_TOKEN_NAME_PATTERN = /^[a-zA-Z][a-zA-Z0-9-]{0,127}$/;\n\nconst isSafeCssTokenName = (name: string): boolean =>\n CSS_TOKEN_NAME_PATTERN.test(name);\n\nconst BREAKOUT_CHARS = new Set([';', '{', '}', '<', '>', '\\\\']);\n\nconst hasUnsafeCssChars = (value: string): boolean => {\n for (const char of value) {\n const code = char.charCodeAt(0);\n if (code <= 0x1f || code === 0x7f || BREAKOUT_CHARS.has(char)) {\n return true;\n }\n }\n return false;\n};\n\n/** Rejects values that can break out of a CSS declaration or `<style>` block. */\nconst isSafeCssTokenValue = (value: string): boolean => {\n if (value.length === 0 || value.length > 512) return false;\n if (hasUnsafeCssChars(value)) return false;\n return !/@|url\\s*\\(|expression\\s*\\(/i.test(value);\n};\n\nconst isSafeTokenRecord = (value: unknown): value is Record<string, string> =>\n isStringRecord(value) &&\n Object.entries(value).every(\n ([name, tokenValue]) =>\n isSafeCssTokenName(name) && isSafeCssTokenValue(tokenValue)\n );\n\nconst sanitizeDeclarations = (\n declarations: Record<string, string>\n): Record<string, string> =>\n Object.fromEntries(\n Object.entries(declarations).filter(\n ([name, tokenValue]) =>\n isSafeCssTokenName(name) && isSafeCssTokenValue(tokenValue)\n )\n );\n\n/** Encodes theme overrides into a URL-safe base64 string. */\nexport function encodeTheme(overrides: SharedThemeOverrides): string {\n return toUrlSafe(toBase64(JSON.stringify(overrides)));\n}\n\n/** Decodes a theme string, returning undefined when malformed or unsafe. */\nexport function decodeTheme(encoded: string): SharedThemeOverrides | undefined {\n try {\n const parsed: unknown = JSON.parse(fromBase64(fromUrlSafe(encoded)));\n if (!isRecord(parsed)) return undefined;\n if (\n !isSafeTokenRecord(parsed.base) ||\n !isSafeTokenRecord(parsed.light) ||\n !isSafeTokenRecord(parsed.dark)\n ) {\n return undefined;\n }\n return {\n base: parsed.base,\n light: parsed.light,\n dark: parsed.dark,\n };\n } catch {\n return undefined;\n }\n}\n\nfunction parseHashParams(hash: string): URLSearchParams {\n const raw = hash.startsWith('#') ? hash.slice(1) : hash;\n return new URLSearchParams(raw);\n}\n\n/** Reads and decodes `#theme=…` from a location hash. */\nexport function readThemeFromHash(\n hash: string\n): SharedThemeOverrides | undefined {\n const encoded = parseHashParams(hash).get(THEME_HASH_PARAM);\n return encoded ? decodeTheme(encoded) : undefined;\n}\n\n/** Reads `#appearance=light|dark` from a location hash. */\nexport function readAppearanceFromHash(\n hash: string\n): ThemeAppearance | undefined {\n const value = parseHashParams(hash).get(APPEARANCE_HASH_PARAM);\n return value === 'light' || value === 'dark' ? value : undefined;\n}\n\n/**\n * Builds a URL with the theme (and optional appearance) in the hash.\n * Existing hash params unrelated to theme/appearance are preserved.\n */\nexport function buildThemeHashUrl(\n baseUrl: string,\n overrides: SharedThemeOverrides,\n appearance?: ThemeAppearance\n): string {\n const url = new URL(\n baseUrl,\n typeof window !== 'undefined' ? window.location.origin : 'http://localhost'\n );\n const params = parseHashParams(url.hash);\n params.set(THEME_HASH_PARAM, encodeTheme(overrides));\n if (appearance) {\n params.set(APPEARANCE_HASH_PARAM, appearance);\n } else {\n params.delete(APPEARANCE_HASH_PARAM);\n }\n url.hash = params.toString();\n return url.toString();\n}\n\n/** Serialises overrides into a `:root` / `.dark` CSS block (changed tokens only). */\nexport function buildSharedThemeCss(overrides: SharedThemeOverrides): string {\n const nl = String.fromCharCode(10);\n const renderBlock = (\n selector: string,\n declarations: Record<string, string>\n ): string | undefined => {\n const safe = sanitizeDeclarations(declarations);\n const names = Object.keys(safe).sort();\n if (names.length === 0) return undefined;\n const body = names.map((name) => ` --${name}: ${safe[name]};`).join(nl);\n return `${selector} {${nl}${body}${nl}}`;\n };\n\n const blocks: string[] = [];\n const lightBlock = renderBlock(':root', {\n ...overrides.base,\n ...overrides.light,\n });\n if (lightBlock) blocks.push(lightBlock);\n const darkBlock = renderBlock('.dark', overrides.dark);\n if (darkBlock) blocks.push(darkBlock);\n return blocks.join(nl + nl);\n}\n"],"names":["THEME_HASH_PARAM","APPEARANCE_HASH_PARAM","emptySharedTheme","base","light","dark","toBase64","input","btoa","unescape","encodeURIComponent","fromBase64","decodeURIComponent","escape","atob","toUrlSafe","value","replace","fromUrlSafe","padded","remainder","length","repeat","isRecord","Array","isArray","isStringRecord","Object","values","every","entry","CSS_TOKEN_NAME_PATTERN","isSafeCssTokenName","name","test","BREAKOUT_CHARS","Set","hasUnsafeCssChars","char","code","charCodeAt","has","isSafeCssTokenValue","isSafeTokenRecord","entries","tokenValue","sanitizeDeclarations","declarations","fromEntries","filter","encodeTheme","overrides","JSON","stringify","decodeTheme","encoded","parsed","parse","undefined","parseHashParams","hash","raw","startsWith","slice","URLSearchParams","readThemeFromHash","get","readAppearanceFromHash","buildThemeHashUrl","baseUrl","appearance","url","URL","window","location","origin","params","set","delete","toString","buildSharedThemeCss","nl","String","fromCharCode","renderBlock","selector","safe","names","keys","sort","body","map","join","blocks","lightBlock","push","darkBlock"],"mappings":"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"}
|
package/dist/lib/types.d.ts
CHANGED
|
@@ -1,50 +1,50 @@
|
|
|
1
1
|
export interface ComponentExample {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
title: string;
|
|
3
|
+
description: string;
|
|
4
|
+
component: React.ComponentType;
|
|
5
|
+
code: string;
|
|
6
|
+
tags?: string[];
|
|
7
|
+
difficulty?: "beginner" | "intermediate" | "advanced";
|
|
8
|
+
notes?: string;
|
|
9
|
+
category?: "usage" | "variants" | "advanced";
|
|
10
10
|
}
|
|
11
11
|
export type ComponentExamples = Record<string, ComponentExample>;
|
|
12
12
|
export interface PropDefinition {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
name: string;
|
|
14
|
+
type: string;
|
|
15
|
+
default?: string;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
description: string;
|
|
18
18
|
}
|
|
19
19
|
export interface ComponentMeta {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
/** Component status - defaults to 'draft' if not specified */
|
|
23
|
+
status?: ComponentStatusType;
|
|
24
|
+
llmUsage?: string;
|
|
25
|
+
importPath?: string;
|
|
26
|
+
apiReference?: {
|
|
27
|
+
props: PropDefinition[];
|
|
28
|
+
};
|
|
29
|
+
relatedComponents?: string[];
|
|
30
|
+
notes?: string[];
|
|
31
|
+
codeExamples?: CodeExample[];
|
|
32
32
|
}
|
|
33
33
|
export interface CodeExample {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
/** Title of the code example */
|
|
35
|
+
title: string;
|
|
36
|
+
/** Optional description */
|
|
37
|
+
description?: string;
|
|
38
|
+
/** The actual code string */
|
|
39
|
+
code: string;
|
|
40
40
|
}
|
|
41
|
-
export type ComponentStatusType =
|
|
41
|
+
export type ComponentStatusType = "deprecated" | "planned" | "shadcn-ui" | "experimental" | "draft" | "in-progress-storybook" | "in-progress-code-review" | "in-progress-chromatic" | "in-progress-design-conformance" | "ready-for-ga" | "stable";
|
|
42
42
|
export interface StatusConfig {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
43
|
+
label: string;
|
|
44
|
+
color: string;
|
|
45
|
+
colorDark: string;
|
|
46
|
+
bgColor: string;
|
|
47
|
+
bgColorDark: string;
|
|
48
|
+
borderColor: string;
|
|
49
|
+
borderColorDark: string;
|
|
50
50
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/types.ts"],"sourcesContent":["export interface ComponentExample {\n title: string;\n description: string;\n component: React.ComponentType;\n code: string;\n tags?: string[];\n difficulty?: 'beginner' | 'intermediate' | 'advanced';\n notes?: string;\n category?: 'usage' | 'variants' | 'advanced';\n}\n\nexport type ComponentExamples = Record<string, ComponentExample>;\n\n// API Reference types\nexport interface PropDefinition {\n name: string;\n type: string;\n default?: string;\n required?: boolean;\n description: string;\n}\n\nexport interface ComponentMeta {\n name: string;\n description: string;\n /** Component status - defaults to 'draft' if not specified */\n status?: ComponentStatusType;\n llmUsage?: string;\n importPath?: string;\n apiReference?: {\n props: PropDefinition[];\n };\n relatedComponents?: string[];\n notes?: string[];\n codeExamples?: CodeExample[];\n}\n\nexport interface CodeExample {\n /** Title of the code example */\n title: string;\n /** Optional description */\n description?: string;\n /** The actual code string */\n code: string;\n}\n\nexport type ComponentStatusType =\n | 'deprecated'\n | 'planned'\n | 'shadcn-ui'\n | 'experimental'\n | 'draft'\n | 'in-progress-storybook'\n | 'in-progress-code-review'\n | 'in-progress-chromatic'\n | 'in-progress-design-conformance'\n | 'ready-for-ga'\n | 'stable';\n\nexport interface StatusConfig {\n label: string;\n color: string; // hex color for light mode text\n colorDark: string; // hex color for dark mode text\n bgColor: string; // background hex for light mode\n bgColorDark: string; // background hex for dark mode\n borderColor: string; // border hex for light mode\n borderColorDark: string; // border hex for dark mode\n}\n"],"names":[],"mappings":"AA2DA,WAQC"}
|
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
type UseControllableStateParams<T> = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
prop?: T;
|
|
3
|
+
defaultProp: T;
|
|
4
|
+
onChange?: (next: T) => void;
|
|
5
5
|
};
|
|
6
6
|
type SetStateAction<T> = T | ((prev: T) => T);
|
|
7
|
-
export declare function useControllableState<T>({ prop, defaultProp, onChange
|
|
8
|
-
T,
|
|
9
|
-
(next: SetStateAction<T>) => void
|
|
10
|
-
];
|
|
7
|
+
export declare function useControllableState<T>({ prop, defaultProp, onChange }: UseControllableStateParams<T>): readonly [T, (next: SetStateAction<T>) => void];
|
|
11
8
|
export {};
|
|
@@ -1,23 +1,36 @@
|
|
|
1
|
-
import { useCallback
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
return typeof e == "function";
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
function isUpdater(next) {
|
|
3
|
+
return typeof next === 'function';
|
|
5
4
|
}
|
|
6
|
-
function
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
export function useControllableState({ prop, defaultProp, onChange }) {
|
|
6
|
+
const [uncontrolledValue, setUncontrolledValue] = useState(defaultProp);
|
|
7
|
+
const isControlled = prop !== undefined;
|
|
8
|
+
const value = isControlled ? prop : uncontrolledValue;
|
|
9
|
+
const onChangeRef = useRef(onChange);
|
|
10
|
+
useEffect(()=>{
|
|
11
|
+
onChangeRef.current = onChange;
|
|
12
|
+
}, [
|
|
13
|
+
onChange
|
|
14
|
+
]);
|
|
15
|
+
const setValue = useCallback((next)=>{
|
|
16
|
+
if (isControlled) {
|
|
17
|
+
const resolved = isUpdater(next) ? next(prop) : next;
|
|
18
|
+
onChangeRef.current?.(resolved);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
setUncontrolledValue((prev)=>{
|
|
22
|
+
const resolved = isUpdater(next) ? next(prev) : next;
|
|
23
|
+
onChangeRef.current?.(resolved);
|
|
24
|
+
return resolved;
|
|
25
|
+
});
|
|
26
|
+
}, [
|
|
27
|
+
isControlled,
|
|
28
|
+
prop
|
|
29
|
+
]);
|
|
30
|
+
return [
|
|
31
|
+
value,
|
|
32
|
+
setValue
|
|
33
|
+
];
|
|
21
34
|
}
|
|
22
|
-
|
|
23
|
-
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=use-controllable-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/use-controllable-state.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\ntype UseControllableStateParams<T> = {\n prop?: T;\n defaultProp: T;\n onChange?: (next: T) => void;\n};\n\ntype SetStateAction<T> = T | ((prev: T) => T);\n\nfunction isUpdater<T>(next: SetStateAction<T>): next is (prev: T) => T {\n return typeof next === 'function';\n}\n\nexport function useControllableState<T>({\n prop,\n defaultProp,\n onChange,\n}: UseControllableStateParams<T>): readonly [\n T,\n (next: SetStateAction<T>) => void,\n] {\n const [uncontrolledValue, setUncontrolledValue] = useState<T>(defaultProp);\n const isControlled = prop !== undefined;\n const value = isControlled ? prop : uncontrolledValue;\n\n const onChangeRef = useRef(onChange);\n useEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const setValue = useCallback(\n (next: SetStateAction<T>) => {\n if (isControlled) {\n const resolved = isUpdater(next) ? next(prop) : next;\n onChangeRef.current?.(resolved);\n return;\n }\n\n setUncontrolledValue((prev) => {\n const resolved = isUpdater(next) ? next(prev) : next;\n onChangeRef.current?.(resolved);\n return resolved;\n });\n },\n [isControlled, prop]\n );\n\n return [value, setValue];\n}\n"],"names":["useCallback","useEffect","useRef","useState","isUpdater","next","useControllableState","prop","defaultProp","onChange","uncontrolledValue","setUncontrolledValue","isControlled","undefined","value","onChangeRef","current","setValue","resolved","prev"],"mappings":"AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAQ;AAUjE,SAASC,UAAaC,IAAuB;IAC3C,OAAO,OAAOA,SAAS;AACzB;AAEA,OAAO,SAASC,qBAAwB,EACtCC,IAAI,EACJC,WAAW,EACXC,QAAQ,EACsB;IAI9B,MAAM,CAACC,mBAAmBC,qBAAqB,GAAGR,SAAYK;IAC9D,MAAMI,eAAeL,SAASM;IAC9B,MAAMC,QAAQF,eAAeL,OAAOG;IAEpC,MAAMK,cAAcb,OAAOO;IAC3BR,UAAU;QACRc,YAAYC,OAAO,GAAGP;IACxB,GAAG;QAACA;KAAS;IAEb,MAAMQ,WAAWjB,YACf,CAACK;QACC,IAAIO,cAAc;YAChB,MAAMM,WAAWd,UAAUC,QAAQA,KAAKE,QAAQF;YAChDU,YAAYC,OAAO,GAAGE;YACtB;QACF;QAEAP,qBAAqB,CAACQ;YACpB,MAAMD,WAAWd,UAAUC,QAAQA,KAAKc,QAAQd;YAChDU,YAAYC,OAAO,GAAGE;YACtB,OAAOA;QACT;IACF,GACA;QAACN;QAAcL;KAAK;IAGtB,OAAO;QAACO;QAAOG;KAAS;AAC1B"}
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,54 +1,83 @@
|
|
|
1
|
-
import { ClassValue } from
|
|
1
|
+
import { type ClassValue } from "clsx";
|
|
2
2
|
type PortalContainerOptions = {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
id?: string;
|
|
4
|
+
className?: string;
|
|
5
|
+
style?: Partial<CSSStyleDeclaration>;
|
|
6
6
|
};
|
|
7
7
|
export declare function cn(...inputs: ClassValue[]): string;
|
|
8
8
|
export declare const isStorybookTestEnv: boolean;
|
|
9
9
|
export declare function getInitials(name: string): string;
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
* Focus rings for non-form interactive elements (buttons, etc.).
|
|
12
|
+
* These provide only the shadow-based focus ring without background/border changes.
|
|
13
|
+
*/
|
|
14
14
|
export declare const focusRing: "focus-visible:shadow-focus-ring outline-none";
|
|
15
15
|
export declare const focusRingDestructive: "focus-visible:shadow-focus-ring-destructive outline-none";
|
|
16
|
+
/** Shared typography for section/group labels inside menus (dropdown, select, command). */
|
|
17
|
+
export declare const menuSectionLabelTypography: "text-sm font-medium text-muted-foreground";
|
|
18
|
+
/** Popover menu surface padding (dropdown content, command list). */
|
|
19
|
+
export declare const menuContainerPadding: "p-1";
|
|
20
|
+
/** Menu item padding — section labels use the same horizontal inset. */
|
|
21
|
+
export declare const menuItemPadding: "p-2";
|
|
22
|
+
/** Section label layout: 8px top, 4px bottom, horizontal padding aligned with menu items. */
|
|
23
|
+
export declare const menuSectionLabelLayout: "pt-2 pb-1 px-2";
|
|
24
|
+
export declare const menuSectionLabelClasses: string;
|
|
25
|
+
/** Full-width divider between menu sections (not below section labels).
|
|
26
|
+
* `-mx-1` cancels container padding so the line is edge-to-edge;
|
|
27
|
+
* `my-1` keeps a 4px gap so item hover surfaces match the container inset. */
|
|
28
|
+
export declare const menuSectionSeparatorClasses: "bg-default h-px shrink-0 -mx-1 my-1";
|
|
16
29
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export declare const
|
|
21
|
-
|
|
22
|
-
export declare const
|
|
23
|
-
export declare const focusState: "focus-visible:shadow-focus-ring focus-visible:bg-background focus-visible:border-transparent focus-visible:text-foreground outline-none";
|
|
24
|
-
export declare const invalidState: "aria-invalid:border-destructive-foreground aria-invalid:shadow-focus-ring-destructive aria-invalid:border-transparent aria-invalid:text-foreground aria-invalid:focus-visible:shadow-focus-ring aria-invalid:focus-visible:bg-background aria-invalid:focus-visible:border-transparent aria-invalid:focus-visible:text-foreground outline-none";
|
|
25
|
-
export declare const disabledState: "disabled:bg-disabled-background disabled:border-transparent disabled:text-disabled-foreground disabled:placeholder:text-disabled-foreground disabled:pointer-events-none disabled:cursor-not-allowed";
|
|
26
|
-
export declare const readOnlyState: "read-only:border-transparent read-only:text-muted-foreground read-only:cursor-default read-only:hover:border-transparent read-only:focus-visible:shadow-none read-only:focus-visible:border-transparent read-only:focus-visible:bg-muted-background [&:read-only:not(:placeholder-shown)]:text-muted-foreground";
|
|
30
|
+
* cmdk group headings (Command palette sections).
|
|
31
|
+
* pl-2 matches menu item content start — icon column when present, text when not.
|
|
32
|
+
*/
|
|
33
|
+
export declare const menuSectionLabelCmdkHeadingClasses: "**:[[cmdk-group-heading]]:text-sm **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group-heading]]:text-muted-foreground **:[[cmdk-group-heading]]:pt-2 **:[[cmdk-group-heading]]:pb-1 **:[[cmdk-group-heading]]:pl-2 **:[[cmdk-group-heading]]:pr-2";
|
|
34
|
+
/** When cmdk items use inset padding (e.g. checkbox column), align labels with item text. */
|
|
35
|
+
export declare const menuSectionLabelCmdkHeadingInsetClasses: "**:[[cmdk-group][data-inset=true]>[[cmdk-group-heading]]]:pl-8";
|
|
27
36
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
37
|
+
* Reusable form element state Tailwind classes.
|
|
38
|
+
* Import these to maintain consistent styling across all form components.
|
|
39
|
+
*/
|
|
40
|
+
export declare const formElementBase: "border border-transparent rounded-lg bg-medium-background py-1.75 pl-2 pr-1 text-sm leading-5 tracking-tight text-muted-foreground placeholder:text-muted-foreground";
|
|
41
|
+
export declare const hoverState: "hover:border-emphasized";
|
|
42
|
+
export declare const filledState: "[&:not(:placeholder-shown):not(:focus):not(:read-only)]:bg-medium-background [&:not(:placeholder-shown):not(:read-only)]:text-base-foreground";
|
|
43
|
+
export declare const focusState: "focus-visible:shadow-focus-ring focus-visible:bg-base-background focus-visible:border-transparent focus-visible:text-base-foreground outline-none";
|
|
44
|
+
export declare const invalidState: "aria-invalid:border-destructive-foreground aria-invalid:shadow-focus-ring-destructive aria-invalid:border-transparent aria-invalid:text-base-foreground aria-invalid:focus-visible:shadow-focus-ring aria-invalid:focus-visible:bg-base-background aria-invalid:focus-visible:border-transparent aria-invalid:focus-visible:text-base-foreground outline-none";
|
|
45
|
+
export declare const disabledState: "disabled:bg-transparent disabled:border-disabled disabled:text-base-foreground-disabled disabled:placeholder:text-base-foreground-disabled disabled:pointer-events-none disabled:cursor-not-allowed";
|
|
46
|
+
export declare const formFieldTriggerDisabledState: string;
|
|
47
|
+
/** Shared layout and states for select/combobox triggers (not native inputs). */
|
|
48
|
+
export declare const formFieldTriggerLayout: "w-full min-w-0 h-9 flex items-center justify-between gap-2 text-left overflow-hidden transition-[color,box-shadow] cursor-pointer";
|
|
49
|
+
export declare const formFieldOpenState: "shadow-focus-ring bg-base-background border-transparent focus:border-transparent hover:border-transparent text-base-foreground";
|
|
50
|
+
export declare const formFieldTriggerIcon: "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground disabled:[&_svg:not([class*='text-'])]:text-base-foreground-disabled data-disabled:[&_svg:not([class*='text-'])]:text-base-foreground-disabled data-readonly:[&_svg:not([class*='text-'])]:text-muted-foreground";
|
|
51
|
+
export declare const formFieldTriggerReadOnlyState: "data-readonly:bg-card-background data-readonly:border-transparent data-readonly:text-muted-foreground data-readonly:cursor-default data-readonly:hover:border-transparent data-readonly:focus-visible:shadow-none data-readonly:focus-visible:border-transparent data-readonly:focus-visible:bg-card-background";
|
|
52
|
+
export declare const formFieldTriggerClasses: string;
|
|
53
|
+
export declare const readOnlyState: "read-only:bg-card-background read-only:border-transparent read-only:text-muted-foreground read-only:placeholder:text-muted-foreground read-only:cursor-default read-only:hover:border-transparent read-only:focus-visible:shadow-none read-only:focus-visible:border-transparent read-only:focus-visible:bg-card-background [&:read-only:not(:placeholder-shown)]:text-muted-foreground";
|
|
54
|
+
/**
|
|
55
|
+
* Reusable styles for selection-control rows (radio group items, checkbox items, etc.).
|
|
56
|
+
* These provide the shared layout, card variant, label, and description classes
|
|
57
|
+
* without baking in a parent group name (ancestor `group-has-[...]/<name>` selectors
|
|
58
|
+
* must stay inline in each consumer so they reference that component's own `group/<name>`).
|
|
59
|
+
*/
|
|
33
60
|
export declare const selectionItemBase: "grid max-w-150 cursor-pointer grid-cols-[auto_1fr] items-start gap-x-2 gap-y-1 has-[[data-disabled]]:cursor-not-allowed";
|
|
34
61
|
export declare const selectionItemDefault: "min-h-9 py-2";
|
|
35
62
|
export declare const selectionItemCard: string;
|
|
36
|
-
export declare const selectionItemLabel: "col-start-2 text-sm font-medium leading-4.5 tracking-normal text-secondary-foreground
|
|
63
|
+
export declare const selectionItemLabel: "col-start-2 text-sm font-medium leading-4.5 tracking-normal text-secondary-foreground";
|
|
37
64
|
export declare const selectionItemDescription: "col-start-2 text-xs font-normal leading-3.5 tracking-tightest text-muted-foreground";
|
|
38
65
|
export declare function slugToPascalCase(slug: string): string;
|
|
39
66
|
/**
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
67
|
+
* Safely extracts hostname from a URL string.
|
|
68
|
+
* Returns the hostname if valid, otherwise returns the original string or "unknown".
|
|
69
|
+
*
|
|
70
|
+
* @param url - URL string to extract hostname from (optional)
|
|
71
|
+
* @returns The hostname, original string, or "unknown" if url is undefined
|
|
72
|
+
*/
|
|
46
73
|
export declare function getHostname(url: string | undefined): string;
|
|
74
|
+
/** True when `value` parses as JSON, so it is worth highlighting as such. */
|
|
75
|
+
export declare function isJsonString(value: string): boolean;
|
|
47
76
|
/**
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
* Gets or creates the portal container for portalled UI components.
|
|
78
|
+
* Container is created in document.body to avoid positioning issues
|
|
79
|
+
* from the shell app's container query context.
|
|
80
|
+
* The result is cached to avoid side effects on subsequent calls during React renders.
|
|
81
|
+
*/
|
|
53
82
|
export declare const getPortalContainer: (options?: PortalContainerOptions) => HTMLElement | undefined;
|
|
54
83
|
export {};
|