@exxatdesignux/ui 0.2.18 → 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.
- package/CHANGELOG.md +69 -1
- package/bin/sync-extras.mjs +116 -29
- package/consumer-extras/README.md +43 -4
- package/consumer-extras/cursor-rules/exxat-accessibility.mdc +39 -0
- package/consumer-extras/cursor-rules/exxat-board-cards.mdc +26 -0
- package/consumer-extras/cursor-rules/exxat-breadcrumbs-no-back.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-card-vs-list-rows.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-centralized-list-dataset.mdc +44 -0
- package/consumer-extras/cursor-rules/exxat-collaboration-access.mdc +32 -0
- package/consumer-extras/cursor-rules/exxat-command-menu.mdc +22 -0
- package/consumer-extras/cursor-rules/exxat-dashboard-view-charts.mdc +53 -0
- package/consumer-extras/cursor-rules/exxat-data-tables.mdc +41 -0
- package/consumer-extras/cursor-rules/exxat-dedicated-search-surfaces.mdc +25 -0
- package/consumer-extras/cursor-rules/exxat-drawer-vs-dialog.mdc +22 -0
- package/consumer-extras/cursor-rules/exxat-ds-agents.mdc +56 -0
- package/consumer-extras/cursor-rules/exxat-fontawesome-icons.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-kbd-shortcuts.mdc +100 -0
- package/consumer-extras/cursor-rules/exxat-kpi-flat-band.mdc +28 -0
- package/consumer-extras/cursor-rules/exxat-kpi-max-four.mdc +21 -0
- package/consumer-extras/cursor-rules/exxat-kpi-trends.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-list-page-connected-views.mdc +24 -0
- package/consumer-extras/cursor-rules/exxat-list-page-view-shells.mdc +31 -0
- package/consumer-extras/cursor-rules/exxat-mono-ids.mdc +30 -0
- package/consumer-extras/cursor-rules/exxat-no-slds-leakage.mdc +78 -0
- package/consumer-extras/cursor-rules/exxat-no-toast.mdc +25 -0
- package/consumer-extras/cursor-rules/exxat-page-vs-drawer.mdc +23 -0
- package/consumer-extras/cursor-rules/exxat-person-identity-display.mdc +47 -0
- package/consumer-extras/cursor-rules/exxat-primary-nav-secondary-panel.mdc +52 -0
- package/consumer-extras/cursor-rules/exxat-question-bank-hub-header.mdc +28 -0
- package/consumer-extras/cursor-rules/exxat-reuse-before-custom.mdc +34 -0
- package/consumer-extras/cursor-rules/exxat-table-properties-drawer.mdc +77 -0
- package/consumer-extras/cursor-rules/exxat-token-discipline.mdc +103 -0
- package/consumer-extras/cursor-skills/exxat-accessibility/SKILL.md +1 -1
- package/consumer-extras/cursor-skills/exxat-board-cards/SKILL.md +2 -2
- package/consumer-extras/cursor-skills/exxat-centralized-list-dataset/SKILL.md +1 -1
- package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +9 -9
- package/consumer-extras/cursor-skills/exxat-ds-skill/references/data-table-pattern.md +1 -1
- package/consumer-extras/handbook/HANDBOOK.md +185 -0
- package/consumer-extras/handbook/glossary.md +57 -0
- package/consumer-extras/handbook/reference-implementations.md +126 -0
- package/consumer-extras/handbook/voice-and-tone.md +262 -0
- package/consumer-extras/patterns/command-menu-pattern.md +1 -1
- package/consumer-extras/patterns/data-views-pattern.md +14 -14
- package/dist/components/data-table/filter-date-calendar.d.ts +10 -0
- package/dist/components/data-table/filter-date-calendar.js +280 -0
- package/dist/components/data-table/filter-date-calendar.js.map +1 -0
- package/dist/components/data-table/filter-text-value-input.d.ts +15 -0
- package/dist/components/data-table/filter-text-value-input.js +561 -0
- package/dist/components/data-table/filter-text-value-input.js.map +1 -0
- package/dist/components/data-table/index.d.ts +45 -0
- package/dist/components/data-table/index.js +3085 -0
- package/dist/components/data-table/index.js.map +1 -0
- package/dist/components/data-table/pagination.d.ts +28 -0
- package/dist/components/data-table/pagination.js +3264 -0
- package/dist/components/data-table/pagination.js.map +1 -0
- package/dist/components/data-table/types.d.ts +84 -0
- package/dist/components/data-table/types.js +3 -0
- package/dist/components/data-table/types.js.map +1 -0
- package/dist/components/data-table/use-table-state.d.ts +116 -0
- package/dist/components/data-table/use-table-state.js +670 -0
- package/dist/components/data-table/use-table-state.js.map +1 -0
- package/dist/components/data-views/board-card-primitives.d.ts +22 -0
- package/dist/components/data-views/board-card-primitives.js +84 -0
- package/dist/components/data-views/board-card-primitives.js.map +1 -0
- package/dist/components/data-views/data-row-list.d.ts +33 -0
- package/dist/components/data-views/data-row-list.js +106 -0
- package/dist/components/data-views/data-row-list.js.map +1 -0
- package/dist/components/data-views/finder-panel-view.d.ts +54 -0
- package/dist/components/data-views/finder-panel-view.js +388 -0
- package/dist/components/data-views/finder-panel-view.js.map +1 -0
- package/dist/components/data-views/folder-grid-view.d.ts +22 -0
- package/dist/components/data-views/folder-grid-view.js +58 -0
- package/dist/components/data-views/folder-grid-view.js.map +1 -0
- package/dist/components/data-views/hub-table.d.ts +167 -0
- package/dist/components/data-views/hub-table.js +5561 -0
- package/dist/components/data-views/hub-table.js.map +1 -0
- package/dist/components/data-views/index.d.ts +27 -0
- package/dist/components/data-views/index.js +6575 -0
- package/dist/components/data-views/index.js.map +1 -0
- package/dist/components/data-views/list-page-board-card.d.ts +72 -0
- package/dist/components/data-views/list-page-board-card.js +264 -0
- package/dist/components/data-views/list-page-board-card.js.map +1 -0
- package/dist/components/data-views/list-page-board-template.d.ts +24 -0
- package/dist/components/data-views/list-page-board-template.js +137 -0
- package/dist/components/data-views/list-page-board-template.js.map +1 -0
- package/dist/components/data-views/list-page-connected-view-body.d.ts +19 -0
- package/dist/components/data-views/list-page-connected-view-body.js +116 -0
- package/dist/components/data-views/list-page-connected-view-body.js.map +1 -0
- package/dist/components/data-views/list-page-split-details-placeholder.d.ts +14 -0
- package/dist/components/data-views/list-page-split-details-placeholder.js +38 -0
- package/dist/components/data-views/list-page-split-details-placeholder.js.map +1 -0
- package/dist/components/data-views/list-page-split-hub-chrome.d.ts +17 -0
- package/dist/components/data-views/list-page-split-hub-chrome.js +54 -0
- package/dist/components/data-views/list-page-split-hub-chrome.js.map +1 -0
- package/dist/components/data-views/list-page-split-hub-tokens.d.ts +12 -0
- package/dist/components/data-views/list-page-split-hub-tokens.js +8 -0
- package/dist/components/data-views/list-page-split-hub-tokens.js.map +1 -0
- package/dist/components/data-views/list-page-tree-column-header.d.ts +15 -0
- package/dist/components/data-views/list-page-tree-column-header.js +22 -0
- package/dist/components/data-views/list-page-tree-column-header.js.map +1 -0
- package/dist/components/data-views/list-page-tree-panel-shell.d.ts +25 -0
- package/dist/components/data-views/list-page-tree-panel-shell.js +146 -0
- package/dist/components/data-views/list-page-tree-panel-shell.js.map +1 -0
- package/dist/components/data-views/os-folder-glyph.d.ts +35 -0
- package/dist/components/data-views/os-folder-glyph.js +104 -0
- package/dist/components/data-views/os-folder-glyph.js.map +1 -0
- package/dist/components/data-views/outline-tree-menu.d.ts +36 -0
- package/dist/components/data-views/outline-tree-menu.js +131 -0
- package/dist/components/data-views/outline-tree-menu.js.map +1 -0
- package/dist/components/table-properties/column-row.d.ts +22 -0
- package/dist/components/table-properties/column-row.js +153 -0
- package/dist/components/table-properties/column-row.js.map +1 -0
- package/dist/components/table-properties/draggable-list.d.ts +24 -0
- package/dist/components/table-properties/draggable-list.js +53 -0
- package/dist/components/table-properties/draggable-list.js.map +1 -0
- package/dist/components/table-properties/drawer-button.d.ts +110 -0
- package/dist/components/table-properties/drawer-button.js +2748 -0
- package/dist/components/table-properties/drawer-button.js.map +1 -0
- package/dist/components/table-properties/drawer.d.ts +100 -0
- package/dist/components/table-properties/drawer.js +2595 -0
- package/dist/components/table-properties/drawer.js.map +1 -0
- package/dist/components/table-properties/filter-card.d.ts +24 -0
- package/dist/components/table-properties/filter-card.js +854 -0
- package/dist/components/table-properties/filter-card.js.map +1 -0
- package/dist/components/table-properties/index.d.ts +14 -0
- package/dist/components/table-properties/index.js +2768 -0
- package/dist/components/table-properties/index.js.map +1 -0
- package/dist/components/table-properties/sort-card.d.ts +20 -0
- package/dist/components/table-properties/sort-card.js +102 -0
- package/dist/components/table-properties/sort-card.js.map +1 -0
- package/dist/components/templates/dedicated-search-landing-template.d.ts +21 -0
- package/dist/components/templates/dedicated-search-landing-template.js +254 -0
- package/dist/components/templates/dedicated-search-landing-template.js.map +1 -0
- package/dist/components/templates/dedicated-search-results-template.d.ts +15 -0
- package/dist/components/templates/dedicated-search-results-template.js +16 -0
- package/dist/components/templates/dedicated-search-results-template.js.map +1 -0
- package/dist/components/templates/index.d.ts +9 -0
- package/dist/components/templates/index.js +2720 -0
- package/dist/components/templates/index.js.map +1 -0
- package/dist/components/templates/list-page.d.ts +83 -0
- package/dist/components/templates/list-page.js +2433 -0
- package/dist/components/templates/list-page.js.map +1 -0
- package/dist/components/templates/nested-secondary-panel-shell.d.ts +20 -0
- package/dist/components/templates/nested-secondary-panel-shell.js +54 -0
- package/dist/components/templates/nested-secondary-panel-shell.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +10 -0
- package/dist/components/ui/accordion.js +74 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +37 -0
- package/dist/components/ui/alert-dialog.js +201 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +84 -0
- package/dist/components/ui/avatar.js +328 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +13 -0
- package/dist/components/ui/badge.js +49 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/banner.d.ts +62 -0
- package/dist/components/ui/banner.js +364 -0
- package/dist/components/ui/banner.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +14 -0
- package/dist/components/ui/breadcrumb.js +114 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button.d.ts +16 -0
- package/dist/components/ui/button.js +59 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +13 -0
- package/dist/components/ui/calendar.js +238 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +14 -0
- package/dist/components/ui/card.js +102 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/chart.d.ts +58 -0
- package/dist/components/ui/chart.js +292 -0
- package/dist/components/ui/chart.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +23 -0
- package/dist/components/ui/checkbox.js +155 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/coach-mark.d.ts +27 -0
- package/dist/components/ui/coach-mark.js +306 -0
- package/dist/components/ui/coach-mark.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +8 -0
- package/dist/components/ui/collapsible.js +35 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +36 -0
- package/dist/components/ui/command.js +274 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +32 -0
- package/dist/components/ui/context-menu.js +245 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/date-picker-field.d.ts +38 -0
- package/dist/components/ui/date-picker-field.js +550 -0
- package/dist/components/ui/date-picker-field.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +22 -0
- package/dist/components/ui/dialog.js +200 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/dot-pattern.d.ts +21 -0
- package/dist/components/ui/dot-pattern.js +139 -0
- package/dist/components/ui/dot-pattern.js.map +1 -0
- package/dist/components/ui/drag-handle-grip.d.ts +10 -0
- package/dist/components/ui/drag-handle-grip.js +15 -0
- package/dist/components/ui/drag-handle-grip.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +16 -0
- package/dist/components/ui/drawer.js +125 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +45 -0
- package/dist/components/ui/dropdown-menu.js +353 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/export-drawer.d.ts +11 -0
- package/dist/components/ui/export-drawer.js +1658 -0
- package/dist/components/ui/export-drawer.js.map +1 -0
- package/dist/components/ui/field.d.ts +30 -0
- package/dist/components/ui/field.js +249 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/form.d.ts +28 -0
- package/dist/components/ui/form.js +110 -0
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +9 -0
- package/dist/components/ui/hover-card.js +43 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-group.d.ts +20 -0
- package/dist/components/ui/input-group.js +219 -0
- package/dist/components/ui/input-group.js.map +1 -0
- package/dist/components/ui/input-mask.d.ts +39 -0
- package/dist/components/ui/input-mask.js +118 -0
- package/dist/components/ui/input-mask.js.map +1 -0
- package/dist/components/ui/input.d.ts +5 -0
- package/dist/components/ui/input.js +30 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +20 -0
- package/dist/components/ui/kbd.js +45 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/key-metrics-context.d.ts +19 -0
- package/dist/components/ui/key-metrics-context.js +26 -0
- package/dist/components/ui/key-metrics-context.js.map +1 -0
- package/dist/components/ui/key-metrics.d.ts +131 -0
- package/dist/components/ui/key-metrics.js +1015 -0
- package/dist/components/ui/key-metrics.js.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.js +28 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/list-page-view-frame.d.ts +22 -0
- package/dist/components/ui/list-page-view-frame.js +24 -0
- package/dist/components/ui/list-page-view-frame.js.map +1 -0
- package/dist/components/ui/page-header.d.ts +51 -0
- package/dist/components/ui/page-header.js +372 -0
- package/dist/components/ui/page-header.js.map +1 -0
- package/dist/components/ui/payment-card-fields.d.ts +10 -0
- package/dist/components/ui/payment-card-fields.js +80 -0
- package/dist/components/ui/payment-card-fields.js.map +1 -0
- package/dist/components/ui/popover.d.ts +10 -0
- package/dist/components/ui/popover.js +47 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +29 -0
- package/dist/components/ui/radio-group.js +190 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +16 -0
- package/dist/components/ui/resizable.js +51 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +8 -0
- package/dist/components/ui/scroll-area.js +66 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +18 -0
- package/dist/components/ui/select.js +186 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/selection-tile-grid.d.ts +52 -0
- package/dist/components/ui/selection-tile-grid.js +347 -0
- package/dist/components/ui/selection-tile-grid.js.map +1 -0
- package/dist/components/ui/separator.d.ts +7 -0
- package/dist/components/ui/separator.js +33 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +18 -0
- package/dist/components/ui/sheet.js +181 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/sidebar.d.ts +94 -0
- package/dist/components/ui/sidebar.js +805 -0
- package/dist/components/ui/sidebar.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +5 -0
- package/dist/components/ui/skeleton.js +22 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +7 -0
- package/dist/components/ui/slider.js +66 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +6 -0
- package/dist/components/ui/sonner.js +38 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +38 -0
- package/dist/components/ui/status-badge.js +77 -0
- package/dist/components/ui/status-badge.js.map +1 -0
- package/dist/components/ui/table.d.ts +13 -0
- package/dist/components/ui/table.js +115 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +15 -0
- package/dist/components/ui/tabs.js +93 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.js +25 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/tip.d.ts +12 -0
- package/dist/components/ui/tip.js +61 -0
- package/dist/components/ui/tip.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +14 -0
- package/dist/components/ui/toggle-group.js +104 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle-switch.d.ts +10 -0
- package/dist/components/ui/toggle-switch.js +33 -0
- package/dist/components/ui/toggle-switch.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +13 -0
- package/dist/components/ui/toggle.js +51 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +10 -0
- package/dist/components/ui/tooltip.js +68 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/components/ui/view-segmented-control.d.ts +31 -0
- package/dist/components/ui/view-segmented-control.js +167 -0
- package/dist/components/ui/view-segmented-control.js.map +1 -0
- package/dist/data-list-view-registry-CyBoBML4.d.ts +73 -0
- package/dist/hooks/use-app-theme.d.ts +24 -0
- package/dist/hooks/use-app-theme.js +286 -0
- package/dist/hooks/use-app-theme.js.map +1 -0
- package/dist/hooks/use-coach-mark.d.ts +86 -0
- package/dist/hooks/use-coach-mark.js +218 -0
- package/dist/hooks/use-coach-mark.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +3 -0
- package/dist/hooks/use-mobile.js +29 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-mod-key-label.d.ts +6 -0
- package/dist/hooks/use-mod-key-label.js +25 -0
- package/dist/hooks/use-mod-key-label.js.map +1 -0
- package/dist/index.d.ts +120 -0
- package/dist/index.js +13324 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/compose-refs.d.ts +6 -0
- package/dist/lib/compose-refs.js +17 -0
- package/dist/lib/compose-refs.js.map +1 -0
- package/dist/lib/conditional-rule-match.d.ts +30 -0
- package/dist/lib/conditional-rule-match.js +66 -0
- package/dist/lib/conditional-rule-match.js.map +1 -0
- package/dist/lib/data-list-display-options.d.ts +26 -0
- package/dist/lib/data-list-display-options.js +14 -0
- package/dist/lib/data-list-display-options.js.map +1 -0
- package/dist/lib/data-list-view-registry.d.ts +2 -0
- package/dist/lib/data-list-view-registry.js +102 -0
- package/dist/lib/data-list-view-registry.js.map +1 -0
- package/dist/lib/data-list-view-surface.d.ts +2 -0
- package/dist/lib/data-list-view-surface.js +80 -0
- package/dist/lib/data-list-view-surface.js.map +1 -0
- package/dist/lib/data-list-view.d.ts +21 -0
- package/dist/lib/data-list-view.js +25 -0
- package/dist/lib/data-list-view.js.map +1 -0
- package/dist/lib/date-filter.d.ts +22 -0
- package/dist/lib/date-filter.js +61 -0
- package/dist/lib/date-filter.js.map +1 -0
- package/dist/lib/dev-log.d.ts +8 -0
- package/dist/lib/dev-log.js +10 -0
- package/dist/lib/dev-log.js.map +1 -0
- package/dist/lib/dropdown-menu-surface.d.ts +14 -0
- package/dist/lib/dropdown-menu-surface.js +6 -0
- package/dist/lib/dropdown-menu-surface.js.map +1 -0
- package/dist/lib/editable-target.d.ts +12 -0
- package/dist/lib/editable-target.js +12 -0
- package/dist/lib/editable-target.js.map +1 -0
- package/dist/lib/list-page-table-properties.d.ts +35 -0
- package/dist/lib/list-page-table-properties.js +81 -0
- package/dist/lib/list-page-table-properties.js.map +1 -0
- package/dist/lib/raf-throttle.d.ts +23 -0
- package/dist/lib/raf-throttle.js +27 -0
- package/dist/lib/raf-throttle.js.map +1 -0
- package/dist/lib/row-height.d.ts +16 -0
- package/dist/lib/row-height.js +10 -0
- package/dist/lib/row-height.js.map +1 -0
- package/dist/lib/table-properties-types.d.ts +83 -0
- package/dist/lib/table-properties-types.js +19 -0
- package/dist/lib/table-properties-types.js.map +1 -0
- package/dist/lib/utils.d.ts +5 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/package.json +83 -18
- package/src/components/data-table/filter-date-calendar.tsx +38 -0
- package/src/components/data-table/filter-text-value-input.tsx +77 -0
- package/src/components/data-table/index.tsx +1678 -0
- package/src/components/data-table/pagination.tsx +255 -0
- package/src/components/data-table/types.ts +96 -0
- package/src/components/data-table/use-table-state.ts +767 -0
- package/src/components/data-views/board-card-primitives.tsx +93 -0
- package/src/components/data-views/data-row-list.tsx +183 -0
- package/src/components/data-views/finder-panel-view.tsx +405 -0
- package/src/components/data-views/folder-grid-view.tsx +86 -0
- package/src/components/data-views/hub-table.tsx +498 -0
- package/src/components/data-views/index.ts +28 -0
- package/src/components/data-views/list-page-board-card.tsx +192 -0
- package/src/components/data-views/list-page-board-template.tsx +122 -0
- package/src/components/data-views/list-page-connected-view-body.tsx +66 -0
- package/src/components/data-views/list-page-split-details-placeholder.tsx +39 -0
- package/src/components/data-views/list-page-split-hub-chrome.tsx +60 -0
- package/src/components/data-views/list-page-split-hub-tokens.ts +16 -0
- package/src/components/data-views/list-page-tree-column-header.tsx +31 -0
- package/src/components/data-views/list-page-tree-panel-shell.tsx +91 -0
- package/src/components/data-views/os-folder-glyph.tsx +141 -0
- package/src/components/data-views/outline-tree-menu.tsx +157 -0
- package/src/components/table-properties/column-row.tsx +90 -0
- package/src/components/table-properties/draggable-list.ts +54 -0
- package/src/components/table-properties/drawer-button.tsx +300 -0
- package/src/components/table-properties/drawer.tsx +1148 -0
- package/src/components/table-properties/filter-card.tsx +251 -0
- package/src/components/table-properties/index.ts +36 -0
- package/src/components/table-properties/sort-card.tsx +63 -0
- package/src/components/templates/dedicated-search-landing-template.tsx +124 -0
- package/src/components/templates/dedicated-search-results-template.tsx +19 -0
- package/src/components/templates/index.ts +33 -0
- package/src/components/templates/list-page.tsx +602 -0
- package/src/components/templates/nested-secondary-panel-shell.tsx +70 -0
- package/src/components/ui/accordion.tsx +92 -0
- package/src/components/ui/alert-dialog.tsx +221 -0
- package/src/components/ui/avatar.tsx +13 -2
- package/src/components/ui/banner.tsx +2 -2
- package/src/components/ui/calendar.tsx +1 -1
- package/src/components/ui/coach-mark.tsx +1 -1
- package/src/components/ui/context-menu.tsx +291 -0
- package/src/components/ui/date-picker-field.tsx +2 -2
- package/src/components/ui/dot-pattern.tsx +183 -0
- package/src/components/ui/export-drawer.tsx +375 -0
- package/src/components/ui/hover-card.tsx +66 -0
- package/src/components/ui/key-metrics-context.tsx +78 -0
- package/src/components/ui/key-metrics.tsx +1133 -0
- package/src/components/ui/list-page-view-frame.tsx +64 -0
- package/src/components/ui/page-header.tsx +244 -0
- package/src/components/ui/payment-card-fields.tsx +2 -2
- package/src/components/ui/resizable.tsx +68 -0
- package/src/components/ui/scroll-area.tsx +72 -0
- package/src/components/ui/selection-tile-grid.tsx +9 -2
- package/src/components/ui/sidebar.tsx +84 -12
- package/src/components/ui/slider.tsx +83 -0
- package/src/globals.css +494 -151
- package/src/globals.d.ts +20 -0
- package/src/index.ts +68 -1
- package/src/lib/conditional-rule-match.ts +119 -0
- package/src/lib/data-list-display-options.ts +35 -0
- package/src/lib/data-list-view-registry.ts +104 -0
- package/src/lib/data-list-view-surface.ts +83 -0
- package/src/lib/data-list-view.ts +47 -0
- package/src/lib/dev-log.ts +10 -0
- package/src/lib/editable-target.ts +20 -0
- package/src/lib/list-page-table-properties.ts +48 -0
- package/src/lib/raf-throttle.ts +45 -0
- package/src/lib/row-height.ts +19 -0
- package/src/lib/table-properties-types.ts +98 -0
- package/template/.cursor/rules/exxat-command-menu.mdc +1 -1
- package/template/.cursor/rules/exxat-dashboard-view-charts.mdc +3 -3
- package/template/.cursor/rules/exxat-data-tables.mdc +1 -1
- package/template/.cursor/rules/exxat-ds-agents.mdc +2 -2
- package/template/.cursor/rules/exxat-kbd-shortcuts.mdc +2 -2
- package/template/.cursor/rules/exxat-table-properties-drawer.mdc +1 -1
- package/template/AGENTS.md +84 -20
- package/template/app/(app)/examples/page.tsx +0 -1
- package/template/app/(app)/layout.tsx +17 -4
- package/template/app/(app)/question-bank/layout.tsx +1 -1
- package/template/app/(app)/question-bank/new/page.tsx +11 -24
- package/template/app/globals.css +13 -1972
- package/template/components/ask-leo-sidebar.tsx +5 -1
- package/template/components/brand-color-picker.tsx +2 -2
- package/template/components/charts-overview.tsx +1 -1
- package/template/components/compliance-table.tsx +240 -384
- package/template/components/dashboard-report-charts.tsx +1 -1
- package/template/components/dashboard-tabs.tsx +1 -1
- package/template/components/data-table/filter-date-calendar.tsx +1 -38
- package/template/components/data-table/filter-text-value-input.tsx +1 -77
- package/template/components/data-table/index.tsx +1 -1634
- package/template/components/data-table/pagination.tsx +1 -255
- package/template/components/data-table/types.ts +1 -94
- package/template/components/data-table/use-table-state.test.ts +420 -0
- package/template/components/data-table/use-table-state.ts +1 -758
- package/template/components/data-view-dashboard-charts-compliance.tsx +2 -2
- package/template/components/data-view-dashboard-charts-team.tsx +2 -2
- package/template/components/data-view-dashboard-charts.tsx +2 -2
- package/template/components/data-views/board-card-primitives.tsx +1 -93
- package/template/components/data-views/data-row-list.tsx +1 -183
- package/template/components/data-views/finder-panel-view.tsx +1 -405
- package/template/components/data-views/folder-grid-view.tsx +1 -86
- package/template/components/data-views/hub-table.tsx +1 -0
- package/template/components/data-views/index.ts +42 -1
- package/template/components/data-views/list-page-board-card.tsx +1 -192
- package/template/components/data-views/list-page-board-template.tsx +1 -122
- package/template/components/data-views/list-page-connected-view-body.tsx +1 -0
- package/template/components/data-views/list-page-split-details-placeholder.tsx +1 -39
- package/template/components/data-views/list-page-split-hub-chrome.tsx +1 -60
- package/template/components/data-views/list-page-split-hub-tokens.ts +1 -16
- package/template/components/data-views/list-page-tree-column-header.tsx +1 -31
- package/template/components/data-views/list-page-tree-panel-shell.tsx +1 -91
- package/template/components/data-views/list-page-view-frame.tsx +5 -53
- package/template/components/data-views/os-folder-glyph.tsx +1 -129
- package/template/components/data-views/outline-tree-menu.tsx +1 -157
- package/template/components/export-drawer.test.tsx +71 -0
- package/template/components/export-drawer.tsx +1 -375
- package/template/components/exxat-product-logo.tsx +5 -5
- package/template/components/hub-tree-panel-view.tsx +2 -2
- package/template/components/invite-collaborators-drawer.tsx +3 -3
- package/template/components/key-metrics-ask-leo-bridge.tsx +40 -0
- package/template/components/key-metrics.tsx +1 -1063
- package/template/components/leo-insight-indicator.tsx +2 -2
- package/template/components/new-placement-back-btn.tsx +1 -1
- package/template/components/new-placement-form.tsx +63 -189
- package/template/components/new-question-composer.tsx +432 -402
- package/template/components/onboarding/index.ts +9 -0
- package/template/components/onboarding/onboarding-01.tsx +1 -1
- package/template/components/onboarding/onboarding-02.tsx +1 -1
- package/template/components/onboarding/onboarding-03.tsx +1 -1
- package/template/components/onboarding/onboarding-04.tsx +1 -1
- package/template/components/page-header.tsx +8 -226
- package/template/components/placement-board-card.tsx +71 -83
- package/template/components/placements-board-view.tsx +3 -10
- package/template/components/placements-client.tsx +10 -42
- package/template/components/placements-list-view.tsx +22 -69
- package/template/components/placements-table-columns.tsx +8 -438
- package/template/components/placements-table.tsx +588 -1296
- package/template/components/product-switcher.tsx +1 -1
- package/template/components/product-wordmark.tsx +2 -1
- package/template/components/question-bank-client.tsx +4 -1
- package/template/components/question-bank-hub-client.tsx +1 -1
- package/template/components/question-bank-new-folder-sheet.tsx +2 -2
- package/template/components/question-bank-secondary-nav.tsx +3 -3
- package/template/components/question-bank-table.tsx +294 -526
- package/template/components/rotations-empty-state.tsx +1 -1
- package/template/components/rotations-panel-activator.tsx +1 -1
- package/template/components/settings-appearance-card.tsx +1 -1
- package/template/components/{app-sidebar-dynamic.tsx → sidebar/app-sidebar-dynamic.tsx} +1 -1
- package/template/components/{app-sidebar.tsx → sidebar/app-sidebar.tsx} +4 -4
- package/template/components/sidebar/index.ts +16 -0
- package/template/components/{secondary-nav.tsx → sidebar/secondary-nav.tsx} +2 -2
- package/template/components/{secondary-panel.tsx → sidebar/secondary-panel.tsx} +6 -3
- package/template/components/{sidebar-auto-collapse.tsx → sidebar/sidebar-auto-collapse.tsx} +6 -2
- package/template/components/{sidebar-shell.tsx → sidebar/sidebar-shell.tsx} +1 -1
- package/template/components/site-header.tsx +1 -1
- package/template/components/{sites-all-client.tsx → sites-client.tsx} +1 -1
- package/template/components/sites-table.tsx +124 -257
- package/template/components/table-properties/column-row.tsx +1 -90
- package/template/components/table-properties/draggable-list.ts +1 -49
- package/template/components/table-properties/drawer-button.tsx +1 -249
- package/template/components/table-properties/drawer.tsx +1 -1105
- package/template/components/table-properties/filter-card.tsx +1 -251
- package/template/components/table-properties/sort-card.tsx +1 -59
- package/template/components/table-properties/types.ts +28 -71
- package/template/components/team-table.tsx +242 -382
- package/template/components/templates/dedicated-search-landing-template.tsx +1 -124
- package/template/components/templates/dedicated-search-results-template.tsx +1 -19
- package/template/components/templates/list-page.tsx +1 -584
- package/template/components/templates/nested-secondary-panel-shell.tsx +1 -62
- package/template/components/templates/new-focus-template.tsx +659 -0
- package/template/components/templates/secondary-panel-hub-template.tsx +1 -1
- package/template/components/ui/accordion.tsx +1 -0
- package/template/components/ui/alert-dialog.tsx +1 -0
- package/template/components/ui/context-menu.tsx +1 -0
- package/template/components/ui/dot-pattern.tsx +1 -183
- package/template/components/ui/hover-card.tsx +1 -0
- package/template/components/ui/resizable.tsx +1 -68
- package/template/components/ui/scroll-area.tsx +1 -0
- package/template/components/ui/slider.tsx +1 -0
- package/template/docs/blueprints/README.md +86 -0
- package/template/docs/blueprints/_template.md +91 -0
- package/template/docs/blueprints/board-card.md +123 -0
- package/template/docs/blueprints/data-table.md +139 -0
- package/template/docs/blueprints/key-metrics.md +128 -0
- package/template/docs/blueprints/list-page-template.md +123 -0
- package/template/docs/blueprints/page-header.md +130 -0
- package/template/docs/command-menu-pattern.md +1 -1
- package/template/docs/component-selection-guide.md +224 -0
- package/template/docs/components-audit-2026-05.md +158 -0
- package/template/docs/data-views-pattern.md +14 -14
- package/template/docs/migrations/0001-brand-deep-alias-stabilization.md +95 -0
- package/template/docs/migrations/0002-exxat-token-namespace.md +154 -0
- package/template/docs/migrations/0003-globals-css-canonical.md +110 -0
- package/template/docs/migrations/README.md +100 -0
- package/template/docs/migrations/_template.md +64 -0
- package/template/docs/token-taxonomy.md +416 -0
- package/template/eslint.config.mjs +27 -0
- package/template/hooks/use-secondary-panel-hub-nav.ts +1 -1
- package/template/lib/command-menu-config.ts +0 -1
- package/template/lib/compliance-supported-views.ts +10 -0
- package/template/lib/conditional-rule-match.ts +6 -97
- package/template/lib/data-list-display-options.ts +1 -35
- package/template/lib/data-list-view-registry.ts +1 -0
- package/template/lib/data-list-view-surface.ts +1 -69
- package/template/lib/data-list-view.ts +1 -38
- package/template/lib/dev-log.ts +1 -8
- package/template/lib/editable-target.ts +1 -10
- package/template/lib/hub-connected-view-renderers.ts +58 -0
- package/template/lib/list-hub-supported-views.ts +10 -0
- package/template/lib/list-page-table-properties.ts +1 -52
- package/template/lib/mock/navigation.tsx +0 -8
- package/template/lib/mock/placements.ts +0 -7
- package/template/lib/placement-board-card-layout.ts +41 -41
- package/template/lib/placements-supported-views.ts +12 -0
- package/template/lib/question-bank-supported-views.ts +12 -0
- package/template/lib/raf-throttle.ts +1 -45
- package/template/lib/row-height.ts +4 -10
- package/template/lib/sidebar-state-cookie.ts +11 -2
- package/template/lib/sites-supported-views.ts +10 -0
- package/template/lib/team-supported-views.ts +10 -0
- package/template/package.json +1 -0
- package/template/tests/setup.ts +25 -0
- package/src/theme.css +0 -1132
- package/template/app/(app)/data-list/[id]/page.tsx +0 -44
- package/template/app/(app)/data-list/new/page.tsx +0 -34
- package/template/app/(app)/data-list/page.tsx +0 -10
- package/template/components/compliance-list-view.tsx +0 -54
- package/template/components/dashboard-onboarding-gallery.tsx +0 -13
- package/template/components/dashboard-onboarding.tsx +0 -21
- package/template/components/question-bank-list-view.tsx +0 -53
- package/template/components/section-cards.tsx +0 -106
- package/template/components/sites-list-view.tsx +0 -42
- package/template/components/team-list-view.tsx +0 -59
- package/template/lib/placement-lifecycle.ts +0 -5
- /package/template/components/{getting-started.tsx → onboarding/getting-started.tsx} +0 -0
- /package/template/components/{nav-documents.tsx → sidebar/nav-documents.tsx} +0 -0
- /package/template/components/{nav-main.tsx → sidebar/nav-main.tsx} +0 -0
- /package/template/components/{nav-secondary.tsx → sidebar/nav-secondary.tsx} +0 -0
- /package/template/components/{nav-user.tsx → sidebar/nav-user.tsx} +0 -0
- /package/template/components/{sidebar-auto-open.tsx → sidebar/sidebar-auto-open.tsx} +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Accordion — Radix-backed expandable section list.
|
|
5
|
+
*
|
|
6
|
+
* Use for **collapsible groups of secondary content** that would otherwise
|
|
7
|
+
* make the page too long (FAQ, settings categories, glossary, audit
|
|
8
|
+
* timeline grouped by day). Each `AccordionItem` toggles independently
|
|
9
|
+
* when `type="multiple"`, or as a single-open group when `type="single"`.
|
|
10
|
+
*
|
|
11
|
+
* When to choose `Accordion` vs `Collapsible` vs `Tabs`:
|
|
12
|
+
* - **`Accordion`** — multiple siblings, each independently expandable,
|
|
13
|
+
* visible chevron + label that wraps cleanly.
|
|
14
|
+
* - **`Collapsible`** — a single show / hide region with no sibling
|
|
15
|
+
* grouping (used inside lists, inspector panels).
|
|
16
|
+
* - **`Tabs`** — only one panel visible at a time, vertical or
|
|
17
|
+
* horizontal nav, fixed set of named sections.
|
|
18
|
+
*
|
|
19
|
+
* Accessibility:
|
|
20
|
+
* - Each `AccordionTrigger` renders as a `<button>` inside an `<h3>` so
|
|
21
|
+
* screen readers expose the headings + expanded state (WCAG 1.3.1).
|
|
22
|
+
* - Arrow-up / Arrow-down navigate between triggers; Home / End jump to
|
|
23
|
+
* the first / last.
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import * as React from "react"
|
|
27
|
+
import { Accordion as AccordionPrimitive } from "radix-ui"
|
|
28
|
+
import { ChevronDown } from "lucide-react"
|
|
29
|
+
|
|
30
|
+
import { cn } from "../../lib/utils"
|
|
31
|
+
|
|
32
|
+
function Accordion({
|
|
33
|
+
...props
|
|
34
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Root>) {
|
|
35
|
+
return <AccordionPrimitive.Root data-slot="accordion" {...props} />
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function AccordionItem({
|
|
39
|
+
className,
|
|
40
|
+
...props
|
|
41
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Item>) {
|
|
42
|
+
return (
|
|
43
|
+
<AccordionPrimitive.Item
|
|
44
|
+
data-slot="accordion-item"
|
|
45
|
+
className={cn("border-b last:border-b-0", className)}
|
|
46
|
+
{...props}
|
|
47
|
+
/>
|
|
48
|
+
)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function AccordionTrigger({
|
|
52
|
+
className,
|
|
53
|
+
children,
|
|
54
|
+
...props
|
|
55
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Trigger>) {
|
|
56
|
+
return (
|
|
57
|
+
<AccordionPrimitive.Header className="flex">
|
|
58
|
+
<AccordionPrimitive.Trigger
|
|
59
|
+
data-slot="accordion-trigger"
|
|
60
|
+
className={cn(
|
|
61
|
+
"flex flex-1 items-start justify-between gap-4 rounded-md py-4 text-sm font-medium text-foreground outline-none transition-all hover:underline focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&[data-state=open]>i.accordion-chevron]:rotate-180",
|
|
62
|
+
className,
|
|
63
|
+
)}
|
|
64
|
+
{...props}
|
|
65
|
+
>
|
|
66
|
+
{children}
|
|
67
|
+
<ChevronDown
|
|
68
|
+
className="accordion-chevron pointer-events-none mt-0.5 size-4 shrink-0 text-muted-foreground transition-transform duration-200"
|
|
69
|
+
aria-hidden="true"
|
|
70
|
+
/>
|
|
71
|
+
</AccordionPrimitive.Trigger>
|
|
72
|
+
</AccordionPrimitive.Header>
|
|
73
|
+
)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function AccordionContent({
|
|
77
|
+
className,
|
|
78
|
+
children,
|
|
79
|
+
...props
|
|
80
|
+
}: React.ComponentProps<typeof AccordionPrimitive.Content>) {
|
|
81
|
+
return (
|
|
82
|
+
<AccordionPrimitive.Content
|
|
83
|
+
data-slot="accordion-content"
|
|
84
|
+
className="overflow-hidden text-sm text-muted-foreground"
|
|
85
|
+
{...props}
|
|
86
|
+
>
|
|
87
|
+
<div className={cn("pb-4 pt-0", className)}>{children}</div>
|
|
88
|
+
</AccordionPrimitive.Content>
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export { Accordion, AccordionItem, AccordionTrigger, AccordionContent }
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* AlertDialog — blocking confirm dialog backed by Radix `AlertDialog`.
|
|
5
|
+
*
|
|
6
|
+
* Use for **short, blocking** confirms where the user MUST acknowledge before
|
|
7
|
+
* the surface behind can be interacted with again — destructive deletes,
|
|
8
|
+
* irreversible status changes, legal acknowledgements, etc. (See
|
|
9
|
+
* `.cursor/rules/exxat-drawer-vs-dialog.mdc` for the drawer-vs-dialog rule.)
|
|
10
|
+
*
|
|
11
|
+
* Differences from the regular `Dialog` primitive:
|
|
12
|
+
* - Radix sets `role="alertdialog"` automatically — screen readers
|
|
13
|
+
* announce the title + description immediately.
|
|
14
|
+
* - Cannot be dismissed by overlay click or `Esc` (only the explicit
|
|
15
|
+
* `AlertDialogCancel` / `AlertDialogAction` buttons close it).
|
|
16
|
+
* - Ships an `Action` (primary destructive / commit) + `Cancel`
|
|
17
|
+
* (secondary dismiss) pair that map to `Button` variants without
|
|
18
|
+
* additional wiring.
|
|
19
|
+
*
|
|
20
|
+
* Accessibility:
|
|
21
|
+
* - WCAG 4.1.2 — `AlertDialogTitle` is REQUIRED. Hide it visually with
|
|
22
|
+
* `sr-only` if the design omits the heading, but never omit the element.
|
|
23
|
+
* - WCAG 2.1.2 — focus is trapped inside the dialog while open (Radix).
|
|
24
|
+
* - WCAG 3.3.4 — pair destructive actions with explicit, named verbs
|
|
25
|
+
* ("Delete site" rather than "OK").
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import * as React from "react"
|
|
29
|
+
import { AlertDialog as AlertDialogPrimitive } from "radix-ui"
|
|
30
|
+
|
|
31
|
+
import { Button, buttonVariants } from "./button"
|
|
32
|
+
import { cn } from "../../lib/utils"
|
|
33
|
+
|
|
34
|
+
function AlertDialog({
|
|
35
|
+
...props
|
|
36
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Root>) {
|
|
37
|
+
return <AlertDialogPrimitive.Root data-slot="alert-dialog" {...props} />
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function AlertDialogTrigger({
|
|
41
|
+
...props
|
|
42
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>) {
|
|
43
|
+
return (
|
|
44
|
+
<AlertDialogPrimitive.Trigger data-slot="alert-dialog-trigger" {...props} />
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function AlertDialogPortal({
|
|
49
|
+
...props
|
|
50
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Portal>) {
|
|
51
|
+
return (
|
|
52
|
+
<AlertDialogPrimitive.Portal data-slot="alert-dialog-portal" {...props} />
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function AlertDialogOverlay({
|
|
57
|
+
className,
|
|
58
|
+
...props
|
|
59
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Overlay>) {
|
|
60
|
+
return (
|
|
61
|
+
<AlertDialogPrimitive.Overlay
|
|
62
|
+
data-slot="alert-dialog-overlay"
|
|
63
|
+
className={cn(
|
|
64
|
+
"fixed inset-0 isolate z-50 bg-black/15 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0",
|
|
65
|
+
className,
|
|
66
|
+
)}
|
|
67
|
+
{...props}
|
|
68
|
+
/>
|
|
69
|
+
)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function AlertDialogContent({
|
|
73
|
+
className,
|
|
74
|
+
overlayClassName,
|
|
75
|
+
...props
|
|
76
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Content> & {
|
|
77
|
+
/** Merged onto `AlertDialogOverlay` (e.g. `bg-transparent` for an undimmed backdrop). */
|
|
78
|
+
overlayClassName?: string
|
|
79
|
+
}) {
|
|
80
|
+
return (
|
|
81
|
+
<AlertDialogPortal>
|
|
82
|
+
<AlertDialogOverlay className={overlayClassName ?? undefined} />
|
|
83
|
+
<AlertDialogPrimitive.Content
|
|
84
|
+
data-slot="alert-dialog-content"
|
|
85
|
+
className={cn(
|
|
86
|
+
"fixed top-1/2 start-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 rtl:translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-md data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
87
|
+
className,
|
|
88
|
+
)}
|
|
89
|
+
{...props}
|
|
90
|
+
/>
|
|
91
|
+
</AlertDialogPortal>
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function AlertDialogHeader({
|
|
96
|
+
className,
|
|
97
|
+
...props
|
|
98
|
+
}: React.ComponentProps<"div">) {
|
|
99
|
+
return (
|
|
100
|
+
<div
|
|
101
|
+
data-slot="alert-dialog-header"
|
|
102
|
+
className={cn("flex flex-col gap-2", className)}
|
|
103
|
+
{...props}
|
|
104
|
+
/>
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function AlertDialogFooter({
|
|
109
|
+
className,
|
|
110
|
+
...props
|
|
111
|
+
}: React.ComponentProps<"div">) {
|
|
112
|
+
return (
|
|
113
|
+
<div
|
|
114
|
+
data-slot="alert-dialog-footer"
|
|
115
|
+
className={cn(
|
|
116
|
+
"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end",
|
|
117
|
+
className,
|
|
118
|
+
)}
|
|
119
|
+
{...props}
|
|
120
|
+
/>
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function AlertDialogTitle({
|
|
125
|
+
className,
|
|
126
|
+
...props
|
|
127
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Title>) {
|
|
128
|
+
return (
|
|
129
|
+
<AlertDialogPrimitive.Title
|
|
130
|
+
data-slot="alert-dialog-title"
|
|
131
|
+
className={cn(
|
|
132
|
+
"font-heading text-base leading-none font-medium",
|
|
133
|
+
className,
|
|
134
|
+
)}
|
|
135
|
+
{...props}
|
|
136
|
+
/>
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
function AlertDialogDescription({
|
|
141
|
+
className,
|
|
142
|
+
...props
|
|
143
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Description>) {
|
|
144
|
+
return (
|
|
145
|
+
<AlertDialogPrimitive.Description
|
|
146
|
+
data-slot="alert-dialog-description"
|
|
147
|
+
className={cn(
|
|
148
|
+
"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground",
|
|
149
|
+
className,
|
|
150
|
+
)}
|
|
151
|
+
{...props}
|
|
152
|
+
/>
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Primary commit button. Defaults to `Button` `default` variant; pass
|
|
158
|
+
* `variant="destructive"` when the action is irreversible (delete, archive
|
|
159
|
+
* with cascade, etc.).
|
|
160
|
+
*
|
|
161
|
+
* Radix marks this as the **submit** button — pressing `Enter` while the
|
|
162
|
+
* dialog has focus invokes it.
|
|
163
|
+
*/
|
|
164
|
+
function AlertDialogAction({
|
|
165
|
+
className,
|
|
166
|
+
variant,
|
|
167
|
+
...props
|
|
168
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Action> &
|
|
169
|
+
React.ComponentProps<typeof Button>) {
|
|
170
|
+
return (
|
|
171
|
+
<AlertDialogPrimitive.Action asChild>
|
|
172
|
+
<Button
|
|
173
|
+
data-slot="alert-dialog-action"
|
|
174
|
+
variant={variant}
|
|
175
|
+
className={className}
|
|
176
|
+
{...props}
|
|
177
|
+
/>
|
|
178
|
+
</AlertDialogPrimitive.Action>
|
|
179
|
+
)
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Secondary dismiss button — closes the dialog without committing the
|
|
184
|
+
* action. Defaults to `Button` `outline` variant for a quieter visual
|
|
185
|
+
* weight next to `AlertDialogAction`.
|
|
186
|
+
*/
|
|
187
|
+
function AlertDialogCancel({
|
|
188
|
+
className,
|
|
189
|
+
variant = "outline",
|
|
190
|
+
...props
|
|
191
|
+
}: React.ComponentProps<typeof AlertDialogPrimitive.Cancel> &
|
|
192
|
+
React.ComponentProps<typeof Button>) {
|
|
193
|
+
return (
|
|
194
|
+
<AlertDialogPrimitive.Cancel asChild>
|
|
195
|
+
<Button
|
|
196
|
+
data-slot="alert-dialog-cancel"
|
|
197
|
+
variant={variant}
|
|
198
|
+
className={className}
|
|
199
|
+
{...props}
|
|
200
|
+
/>
|
|
201
|
+
</AlertDialogPrimitive.Cancel>
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export {
|
|
206
|
+
AlertDialog,
|
|
207
|
+
AlertDialogAction,
|
|
208
|
+
AlertDialogCancel,
|
|
209
|
+
AlertDialogContent,
|
|
210
|
+
AlertDialogDescription,
|
|
211
|
+
AlertDialogFooter,
|
|
212
|
+
AlertDialogHeader,
|
|
213
|
+
AlertDialogOverlay,
|
|
214
|
+
AlertDialogPortal,
|
|
215
|
+
AlertDialogTitle,
|
|
216
|
+
AlertDialogTrigger,
|
|
217
|
+
// Re-export the button class-variance helper so consumers building
|
|
218
|
+
// ad-hoc footers can match the alert-dialog action styling without
|
|
219
|
+
// importing the Button primitive separately.
|
|
220
|
+
buttonVariants,
|
|
221
|
+
}
|
|
@@ -150,12 +150,23 @@ function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
|
|
|
150
150
|
)
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
/**
|
|
154
|
+
* A row of avatars with an overflow counter — **never overlapping**.
|
|
155
|
+
*
|
|
156
|
+
* Overlapping face piles (Slack / GitHub style) have known UX problems in
|
|
157
|
+
* dense product chrome: ring-on-background contrast is fragile in dark mode,
|
|
158
|
+
* click targets stack, and screen readers announce ambiguous groupings.
|
|
159
|
+
* `AvatarGroup` therefore renders children side-by-side with a small inline
|
|
160
|
+
* gap. See `.cursor/rules/exxat-person-identity-display.mdc` (MUST NOT —
|
|
161
|
+
* overlapping avatars) and the `PageHeader` collaboration variant which
|
|
162
|
+
* uses the same gapped row.
|
|
163
|
+
*/
|
|
153
164
|
function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
|
|
154
165
|
return (
|
|
155
166
|
<div
|
|
156
167
|
data-slot="avatar-group"
|
|
157
168
|
className={cn(
|
|
158
|
-
"group/avatar-group flex -
|
|
169
|
+
"group/avatar-group flex items-center gap-1.5",
|
|
159
170
|
className
|
|
160
171
|
)}
|
|
161
172
|
{...props}
|
|
@@ -171,7 +182,7 @@ function AvatarGroupCount({
|
|
|
171
182
|
<div
|
|
172
183
|
data-slot="avatar-group-count"
|
|
173
184
|
className={cn(
|
|
174
|
-
"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground
|
|
185
|
+
"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
|
|
175
186
|
className
|
|
176
187
|
)}
|
|
177
188
|
{...props}
|
|
@@ -166,7 +166,7 @@ export function SystemBanner({
|
|
|
166
166
|
className="h-auto shrink-0 px-0 text-xs font-semibold underline underline-offset-2 hover:no-underline"
|
|
167
167
|
>
|
|
168
168
|
{action.label}
|
|
169
|
-
<i className="fa-light fa-arrow-right text-xs
|
|
169
|
+
<i className="fa-light fa-arrow-right text-xs ms-0.5" aria-hidden="true" />
|
|
170
170
|
</Button>
|
|
171
171
|
)
|
|
172
172
|
)
|
|
@@ -212,7 +212,7 @@ export function SystemBanner({
|
|
|
212
212
|
{actionPosition === "inline" ? (
|
|
213
213
|
<>
|
|
214
214
|
<div className="relative z-[1] min-w-0 flex-1">
|
|
215
|
-
{title && <span className="font-semibold
|
|
215
|
+
{title && <span className="font-semibold me-1.5">{title}</span>}
|
|
216
216
|
<span className="opacity-90">{children}</span>
|
|
217
217
|
</div>
|
|
218
218
|
{actionEl ? <span className="relative z-[1] inline-flex shrink-0">{actionEl}</span> : null}
|
|
@@ -85,7 +85,7 @@ function Calendar({
|
|
|
85
85
|
"font-medium select-none",
|
|
86
86
|
captionLayout === "label"
|
|
87
87
|
? "text-sm"
|
|
88
|
-
: "flex h-8 items-center gap-1 rounded-md
|
|
88
|
+
: "flex h-8 items-center gap-1 rounded-md pe-1 ps-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground",
|
|
89
89
|
defaultClassNames.caption_label
|
|
90
90
|
),
|
|
91
91
|
table: "w-full border-collapse",
|
|
@@ -285,7 +285,7 @@ export function CoachMark({
|
|
|
285
285
|
<button
|
|
286
286
|
type="button"
|
|
287
287
|
onClick={skip}
|
|
288
|
-
className="shrink-0 -mt-0.5 -
|
|
288
|
+
className="shrink-0 -mt-0.5 -me-1 flex h-6 w-6 items-center justify-center rounded-md text-white/60 hover:bg-white/15 hover:text-white transition-colors focus-visible:outline-2 focus-visible:outline-white hc:!text-foreground hc:hover:!bg-foreground/10"
|
|
289
289
|
aria-label="Dismiss"
|
|
290
290
|
>
|
|
291
291
|
<i className="fa-light fa-xmark text-xs" aria-hidden="true" />
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ContextMenu — right-click + long-press menu surface backed by Radix
|
|
5
|
+
* `ContextMenu`. Visual surface mirrors `DropdownMenu` so the two read as
|
|
6
|
+
* a consistent menu family across the product (same item heights, same
|
|
7
|
+
* tints, same separator + label rhythm).
|
|
8
|
+
*
|
|
9
|
+
* Use for **secondary, contextual actions** on a specific row, card, or
|
|
10
|
+
* editable region — duplicate, rename, archive, copy link. The primary
|
|
11
|
+
* action SHOULD still be reachable by click / keyboard via a visible
|
|
12
|
+
* trigger; the context menu is an accelerator, not a replacement.
|
|
13
|
+
*
|
|
14
|
+
* Accessibility:
|
|
15
|
+
* - Radix handles the right-click trigger, long-press on touch, the
|
|
16
|
+
* `aria-haspopup` / `aria-expanded` wiring, and arrow-key navigation
|
|
17
|
+
* between items.
|
|
18
|
+
* - Items announce as `role="menuitem"`; `CheckboxItem` and `RadioItem`
|
|
19
|
+
* expose checked / selected state correctly.
|
|
20
|
+
* - Pair with a visible alternative (a `…` overflow `DropdownMenu`) so
|
|
21
|
+
* keyboard-only users can reach the same actions without a pointer.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import * as React from "react"
|
|
25
|
+
import { ContextMenu as ContextMenuPrimitive } from "radix-ui"
|
|
26
|
+
import { ChevronRight } from "lucide-react"
|
|
27
|
+
|
|
28
|
+
import { cn } from "../../lib/utils"
|
|
29
|
+
import { DROPDOWN_MENU_CONTENT_SURFACE_CLASS } from "../../lib/dropdown-menu-surface"
|
|
30
|
+
|
|
31
|
+
function ContextMenu({
|
|
32
|
+
...props
|
|
33
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Root>) {
|
|
34
|
+
return <ContextMenuPrimitive.Root data-slot="context-menu" {...props} />
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function ContextMenuTrigger({
|
|
38
|
+
...props
|
|
39
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Trigger>) {
|
|
40
|
+
return (
|
|
41
|
+
<ContextMenuPrimitive.Trigger
|
|
42
|
+
data-slot="context-menu-trigger"
|
|
43
|
+
{...props}
|
|
44
|
+
/>
|
|
45
|
+
)
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function ContextMenuGroup({
|
|
49
|
+
...props
|
|
50
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Group>) {
|
|
51
|
+
return <ContextMenuPrimitive.Group data-slot="context-menu-group" {...props} />
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function ContextMenuPortal({
|
|
55
|
+
...props
|
|
56
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Portal>) {
|
|
57
|
+
return (
|
|
58
|
+
<ContextMenuPrimitive.Portal data-slot="context-menu-portal" {...props} />
|
|
59
|
+
)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function ContextMenuSub({
|
|
63
|
+
...props
|
|
64
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Sub>) {
|
|
65
|
+
return <ContextMenuPrimitive.Sub data-slot="context-menu-sub" {...props} />
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function ContextMenuRadioGroup({
|
|
69
|
+
...props
|
|
70
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.RadioGroup>) {
|
|
71
|
+
return (
|
|
72
|
+
<ContextMenuPrimitive.RadioGroup
|
|
73
|
+
data-slot="context-menu-radio-group"
|
|
74
|
+
{...props}
|
|
75
|
+
/>
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function ContextMenuSubTrigger({
|
|
80
|
+
className,
|
|
81
|
+
inset,
|
|
82
|
+
children,
|
|
83
|
+
...props
|
|
84
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.SubTrigger> & {
|
|
85
|
+
inset?: boolean
|
|
86
|
+
}) {
|
|
87
|
+
return (
|
|
88
|
+
<ContextMenuPrimitive.SubTrigger
|
|
89
|
+
data-slot="context-menu-sub-trigger"
|
|
90
|
+
data-inset={inset}
|
|
91
|
+
className={cn(
|
|
92
|
+
"flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground data-inset:ps-7 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
93
|
+
className,
|
|
94
|
+
)}
|
|
95
|
+
{...props}
|
|
96
|
+
>
|
|
97
|
+
{children}
|
|
98
|
+
<ChevronRight className="ms-auto size-4 text-muted-foreground" aria-hidden="true" />
|
|
99
|
+
</ContextMenuPrimitive.SubTrigger>
|
|
100
|
+
)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function ContextMenuSubContent({
|
|
104
|
+
className,
|
|
105
|
+
...props
|
|
106
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.SubContent>) {
|
|
107
|
+
return (
|
|
108
|
+
<ContextMenuPrimitive.SubContent
|
|
109
|
+
data-slot="context-menu-sub-content"
|
|
110
|
+
className={cn(
|
|
111
|
+
"z-50 min-w-32 origin-(--radix-context-menu-content-transform-origin) overflow-hidden rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
112
|
+
DROPDOWN_MENU_CONTENT_SURFACE_CLASS,
|
|
113
|
+
className,
|
|
114
|
+
)}
|
|
115
|
+
{...props}
|
|
116
|
+
/>
|
|
117
|
+
)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function ContextMenuContent({
|
|
121
|
+
className,
|
|
122
|
+
...props
|
|
123
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Content>) {
|
|
124
|
+
return (
|
|
125
|
+
<ContextMenuPrimitive.Portal>
|
|
126
|
+
<ContextMenuPrimitive.Content
|
|
127
|
+
data-slot="context-menu-content"
|
|
128
|
+
className={cn(
|
|
129
|
+
"z-50 max-h-(--radix-context-menu-content-available-height) origin-(--radix-context-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-lg bg-popover p-1 text-popover-foreground shadow-md ring-1 ring-foreground/10 duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95",
|
|
130
|
+
DROPDOWN_MENU_CONTENT_SURFACE_CLASS,
|
|
131
|
+
className,
|
|
132
|
+
)}
|
|
133
|
+
{...props}
|
|
134
|
+
/>
|
|
135
|
+
</ContextMenuPrimitive.Portal>
|
|
136
|
+
)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function ContextMenuItem({
|
|
140
|
+
className,
|
|
141
|
+
inset,
|
|
142
|
+
variant = "default",
|
|
143
|
+
...props
|
|
144
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Item> & {
|
|
145
|
+
inset?: boolean
|
|
146
|
+
variant?: "default" | "destructive"
|
|
147
|
+
}) {
|
|
148
|
+
return (
|
|
149
|
+
<ContextMenuPrimitive.Item
|
|
150
|
+
data-slot="context-menu-item"
|
|
151
|
+
data-inset={inset}
|
|
152
|
+
data-variant={variant}
|
|
153
|
+
className={cn(
|
|
154
|
+
"relative flex cursor-default items-center gap-1.5 rounded-md px-1.5 py-1 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground data-inset:ps-7 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4 data-[variant=destructive]:*:[svg]:text-destructive",
|
|
155
|
+
className,
|
|
156
|
+
)}
|
|
157
|
+
{...props}
|
|
158
|
+
/>
|
|
159
|
+
)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function ContextMenuCheckboxItem({
|
|
163
|
+
className,
|
|
164
|
+
children,
|
|
165
|
+
checked,
|
|
166
|
+
inset,
|
|
167
|
+
...props
|
|
168
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.CheckboxItem> & {
|
|
169
|
+
inset?: boolean
|
|
170
|
+
}) {
|
|
171
|
+
return (
|
|
172
|
+
<ContextMenuPrimitive.CheckboxItem
|
|
173
|
+
data-slot="context-menu-checkbox-item"
|
|
174
|
+
data-inset={inset}
|
|
175
|
+
className={cn(
|
|
176
|
+
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
177
|
+
className,
|
|
178
|
+
)}
|
|
179
|
+
checked={checked}
|
|
180
|
+
{...props}
|
|
181
|
+
>
|
|
182
|
+
<span
|
|
183
|
+
className="pointer-events-none absolute end-2 flex items-center justify-center"
|
|
184
|
+
data-slot="context-menu-checkbox-item-indicator"
|
|
185
|
+
>
|
|
186
|
+
<ContextMenuPrimitive.ItemIndicator>
|
|
187
|
+
<i className="fa-light fa-check" aria-hidden="true" />
|
|
188
|
+
</ContextMenuPrimitive.ItemIndicator>
|
|
189
|
+
</span>
|
|
190
|
+
{children}
|
|
191
|
+
</ContextMenuPrimitive.CheckboxItem>
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
function ContextMenuRadioItem({
|
|
196
|
+
className,
|
|
197
|
+
children,
|
|
198
|
+
inset,
|
|
199
|
+
...props
|
|
200
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.RadioItem> & {
|
|
201
|
+
inset?: boolean
|
|
202
|
+
}) {
|
|
203
|
+
return (
|
|
204
|
+
<ContextMenuPrimitive.RadioItem
|
|
205
|
+
data-slot="context-menu-radio-item"
|
|
206
|
+
data-inset={inset}
|
|
207
|
+
className={cn(
|
|
208
|
+
"relative flex cursor-default items-center gap-1.5 rounded-md py-1 pe-8 ps-1.5 text-sm outline-hidden select-none focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground data-inset:ps-7 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_i]:pointer-events-none [&_svg]:shrink-0 [&_i]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
209
|
+
className,
|
|
210
|
+
)}
|
|
211
|
+
{...props}
|
|
212
|
+
>
|
|
213
|
+
<span
|
|
214
|
+
className="pointer-events-none absolute end-2 flex items-center justify-center"
|
|
215
|
+
data-slot="context-menu-radio-item-indicator"
|
|
216
|
+
>
|
|
217
|
+
<ContextMenuPrimitive.ItemIndicator>
|
|
218
|
+
<i className="fa-light fa-check" aria-hidden="true" />
|
|
219
|
+
</ContextMenuPrimitive.ItemIndicator>
|
|
220
|
+
</span>
|
|
221
|
+
{children}
|
|
222
|
+
</ContextMenuPrimitive.RadioItem>
|
|
223
|
+
)
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function ContextMenuLabel({
|
|
227
|
+
className,
|
|
228
|
+
inset,
|
|
229
|
+
...props
|
|
230
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Label> & {
|
|
231
|
+
inset?: boolean
|
|
232
|
+
}) {
|
|
233
|
+
return (
|
|
234
|
+
<ContextMenuPrimitive.Label
|
|
235
|
+
data-slot="context-menu-label"
|
|
236
|
+
data-inset={inset}
|
|
237
|
+
className={cn(
|
|
238
|
+
"px-1.5 py-1 text-xs font-medium text-muted-foreground data-inset:ps-7",
|
|
239
|
+
className,
|
|
240
|
+
)}
|
|
241
|
+
{...props}
|
|
242
|
+
/>
|
|
243
|
+
)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
function ContextMenuSeparator({
|
|
247
|
+
className,
|
|
248
|
+
...props
|
|
249
|
+
}: React.ComponentProps<typeof ContextMenuPrimitive.Separator>) {
|
|
250
|
+
return (
|
|
251
|
+
<ContextMenuPrimitive.Separator
|
|
252
|
+
data-slot="context-menu-separator"
|
|
253
|
+
className={cn("-mx-1 my-1 h-px bg-border", className)}
|
|
254
|
+
{...props}
|
|
255
|
+
/>
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function ContextMenuShortcut({
|
|
260
|
+
className,
|
|
261
|
+
...props
|
|
262
|
+
}: React.ComponentProps<"span">) {
|
|
263
|
+
return (
|
|
264
|
+
<span
|
|
265
|
+
data-slot="context-menu-shortcut"
|
|
266
|
+
className={cn(
|
|
267
|
+
"ms-auto text-xs tracking-widest text-muted-foreground",
|
|
268
|
+
className,
|
|
269
|
+
)}
|
|
270
|
+
{...props}
|
|
271
|
+
/>
|
|
272
|
+
)
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export {
|
|
276
|
+
ContextMenu,
|
|
277
|
+
ContextMenuTrigger,
|
|
278
|
+
ContextMenuContent,
|
|
279
|
+
ContextMenuItem,
|
|
280
|
+
ContextMenuCheckboxItem,
|
|
281
|
+
ContextMenuRadioGroup,
|
|
282
|
+
ContextMenuRadioItem,
|
|
283
|
+
ContextMenuLabel,
|
|
284
|
+
ContextMenuSeparator,
|
|
285
|
+
ContextMenuShortcut,
|
|
286
|
+
ContextMenuGroup,
|
|
287
|
+
ContextMenuPortal,
|
|
288
|
+
ContextMenuSub,
|
|
289
|
+
ContextMenuSubContent,
|
|
290
|
+
ContextMenuSubTrigger,
|
|
291
|
+
}
|
|
@@ -56,12 +56,12 @@ export function DatePickerField({
|
|
|
56
56
|
variant="outline"
|
|
57
57
|
disabled={disabled}
|
|
58
58
|
className={cn(
|
|
59
|
-
"w-full justify-start text-
|
|
59
|
+
"w-full justify-start text-start font-normal",
|
|
60
60
|
triggerClassName,
|
|
61
61
|
)}
|
|
62
62
|
aria-label={value ? formatDateFromDate(value) : "Pick a date"}
|
|
63
63
|
>
|
|
64
|
-
<i className={cn(DATE_PICKER_ICON_CLASS, "
|
|
64
|
+
<i className={cn(DATE_PICKER_ICON_CLASS, "me-2 shrink-0 text-muted-foreground")} aria-hidden="true" />
|
|
65
65
|
<span className={cn(!value && "text-muted-foreground")}>
|
|
66
66
|
{value ? formatDateFromDate(value) : "MM/DD/YYYY"}
|
|
67
67
|
</span>
|