@exxatdesignux/ui 0.2.19 → 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 +60 -7
- package/bin/sync-extras.mjs +116 -29
- package/consumer-extras/README.md +42 -7
- 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 +4 -15
- package/consumer-extras/cursor-skills/exxat-ds-skill/SKILL.md +13 -28
- package/consumer-extras/cursor-skills/exxat-ds-skill/references/data-table-pattern.md +1 -1
- package/consumer-extras/cursor-skills/exxat-primary-nav-secondary-panel/SKILL.md +2 -4
- 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/consumer-upgrade-checklist.md +0 -20
- package/consumer-extras/patterns/data-views-pattern.md +17 -54
- package/consumer-extras/patterns/shell-surface-elevation-pattern.md +3 -5
- 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 -19
- 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/button.tsx +4 -4
- 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 +2201 -7
- 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 +104 -78
- package/template/app/(app)/dashboard/loading.tsx +15 -3
- package/template/app/(app)/dashboard/page.tsx +14 -2
- package/template/app/(app)/examples/page.tsx +0 -2
- package/template/app/(app)/layout.tsx +17 -4
- package/template/app/(app)/loading.tsx +18 -1
- package/template/app/(app)/question-bank/find/page.tsx +1 -2
- package/template/app/(app)/question-bank/layout.tsx +1 -1
- package/template/app/(app)/question-bank/library/page.tsx +1 -2
- package/template/app/(app)/question-bank/list/page.tsx +1 -2
- package/template/app/(app)/question-bank/new/page.tsx +15 -20
- package/template/app/(app)/question-bank/page.tsx +1 -2
- package/template/app/(app)/settings/page.tsx +5 -4
- package/template/app/globals.css +14 -16
- 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-board-view.tsx +142 -0
- package/template/components/compliance-client.tsx +92 -0
- package/template/components/compliance-page-header.tsx +89 -0
- package/template/components/compliance-table.tsx +468 -0
- 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 +963 -0
- package/template/components/data-view-dashboard-charts-team.tsx +971 -0
- package/template/components/data-view-dashboard-charts.tsx +1503 -0
- 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 +50 -37
- 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 -66
- 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 -68
- 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 +28 -0
- package/template/components/new-placement-form.tsx +942 -0
- package/template/components/new-question-composer.tsx +456 -408
- 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 +250 -0
- package/template/components/placement-detail.tsx +438 -0
- package/template/components/placements-board-view.tsx +397 -0
- package/template/components/placements-client.tsx +220 -0
- package/template/components/placements-list-view.tsx +124 -0
- package/template/components/placements-page-header.tsx +166 -0
- package/template/components/placements-table-cells.test.tsx +22 -0
- package/template/components/placements-table-cells.tsx +173 -0
- package/template/components/placements-table-columns.tsx +210 -0
- package/template/components/placements-table.tsx +934 -0
- package/template/components/product-switcher.tsx +3 -4
- package/template/components/product-wordmark.tsx +2 -1
- package/template/components/question-bank-client.tsx +5 -5
- 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 +541 -431
- package/template/components/rotations-empty-state.tsx +50 -0
- package/template/components/rotations-panel-activator.tsx +8 -0
- package/template/components/settings-appearance-card.tsx +3 -4
- package/template/components/settings-client.tsx +15 -59
- package/template/components/settings-form-row.tsx +4 -9
- package/template/components/{app-sidebar-dynamic.tsx → sidebar/app-sidebar-dynamic.tsx} +1 -1
- package/template/components/{app-sidebar.tsx → sidebar/app-sidebar.tsx} +59 -74
- 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} +50 -7
- 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-board-view.tsx +67 -0
- package/template/components/sites-client.tsx +154 -0
- package/template/components/sites-table.tsx +249 -0
- 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 -262
- package/template/components/table-properties/drawer.tsx +1 -1166
- 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-board-view.tsx +122 -0
- package/template/components/team-client.tsx +100 -0
- package/template/components/team-page-header.tsx +92 -0
- package/template/components/team-table.tsx +553 -0
- 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 -608
- package/template/components/templates/nested-secondary-panel-shell.tsx +1 -63
- 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 +17 -54
- package/template/docs/drawer-vs-dialog-pattern.md +1 -3
- 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/shell-surface-elevation-pattern.md +3 -5
- 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/command-menu-search-data.ts +27 -11
- 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 -49
- package/template/lib/data-list-view-registry.ts +1 -104
- package/template/lib/data-list-view-surface.ts +1 -83
- package/template/lib/data-list-view.ts +1 -47
- package/template/lib/data-view-dashboard-placements-layout.ts +215 -0
- package/template/lib/data-view-dashboard-storage.ts +35 -38
- package/template/lib/dev-log.ts +1 -8
- package/template/lib/editable-target.ts +1 -10
- package/template/lib/list-page-table-properties.ts +1 -48
- package/template/lib/list-status-badges.ts +97 -4
- package/template/lib/mock/compliance-kpi.ts +61 -0
- package/template/lib/mock/compliance.ts +146 -0
- package/template/lib/mock/navigation.tsx +0 -9
- package/template/lib/mock/placements-kpi.ts +134 -0
- package/template/lib/mock/placements.ts +176 -0
- package/template/lib/mock/sites-directory.ts +16 -0
- package/template/lib/mock/sites-kpi.ts +25 -0
- package/template/lib/mock/team-kpi.ts +60 -0
- package/template/lib/mock/team.ts +118 -0
- package/template/lib/placement-board-card-layout.ts +79 -0
- package/template/lib/placements-supported-views.ts +12 -0
- package/template/lib/question-bank-supported-views.ts +0 -1
- 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/table-state-lifecycle.ts +2 -2
- package/template/lib/team-supported-views.ts +10 -0
- package/template/package.json +1 -0
- package/template/tests/setup.ts +25 -0
- package/consumer-extras/AGENTS.md +0 -76
- package/consumer-extras/cursor-skills/exxat-consumer-app/SKILL.md +0 -37
- package/consumer-extras/cursor-skills/exxat-focused-workflow-page/SKILL.md +0 -57
- package/consumer-extras/patterns/consumer-app-pattern.md +0 -39
- package/consumer-extras/patterns/focused-workflow-page-pattern.md +0 -84
- package/src/components/ui/button-group.tsx +0 -81
- package/src/theme.css +0 -16
- package/src/tokens/README.md +0 -15
- package/src/tokens/base.css +0 -337
- package/src/tokens/high-contrast.css +0 -1195
- package/src/tokens/layers.css +0 -224
- package/src/tokens/tailwind-bridge.css +0 -118
- package/src/tokens/themes.css +0 -201
- package/template/app/(app)/data-list/layout.tsx +0 -43
- package/template/app/(app)/data-list/page.tsx +0 -10
- package/template/app/(app)/examples/focused-workflow/page.tsx +0 -5
- package/template/components/app-route-loading.tsx +0 -14
- package/template/components/dashboard-onboarding-gallery.tsx +0 -13
- package/template/components/dashboard-onboarding.tsx +0 -21
- package/template/components/data-views/list-page-calendar-view.tsx +0 -593
- package/template/components/data-views/list-page-folder-columns-panel.tsx +0 -345
- package/template/components/examples/focused-workflow-showcase.tsx +0 -183
- package/template/components/list-hub-board-view.tsx +0 -68
- package/template/components/list-hub-client.tsx +0 -186
- package/template/components/list-hub-list-view.tsx +0 -36
- package/template/components/list-hub-panel-activator.tsx +0 -8
- package/template/components/list-hub-secondary-nav.tsx +0 -121
- package/template/components/list-hub-table.tsx +0 -336
- package/template/components/question-bank-folder-columns-panel.tsx +0 -104
- package/template/components/question-bank-list-view.tsx +0 -53
- package/template/components/secondary-panel/nav-link-rows.tsx +0 -83
- package/template/components/secondary-panels/list-hub-panel.tsx +0 -39
- package/template/components/secondary-panels/question-bank-panel.tsx +0 -39
- package/template/components/secondary-panels/registry.tsx +0 -15
- package/template/components/section-cards.tsx +0 -106
- package/template/components/templates/focused-workflow-layouts.tsx +0 -448
- package/template/components/templates/focused-workflow-page-template.tsx +0 -69
- package/template/components/templates/page-loading-shell.tsx +0 -262
- package/template/components/ui/button-group.tsx +0 -1
- package/template/docs/consumer-app-pattern.md +0 -39
- package/template/docs/focused-workflow-page-pattern.md +0 -84
- package/template/lib/list-hub-nav.ts +0 -121
- package/template/lib/mock/list-hub-directory.ts +0 -27
- package/template/lib/mock/list-hub-kpi.ts +0 -27
- package/template/lib/page-loading-variant.ts +0 -40
- /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,20 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { SortRule } from '../../lib/table-properties-types.js';
|
|
3
|
+
|
|
4
|
+
/** Sort rule card inside the Sort drawer panel */
|
|
5
|
+
type DrawerSortCardProps = {
|
|
6
|
+
rule: SortRule;
|
|
7
|
+
/**
|
|
8
|
+
* Resolved column label for the sort rule's `fieldKey`. Required — every
|
|
9
|
+
* consumer derives labels from its column defs (the drawer passes
|
|
10
|
+
* `resolveColumnLabel(rule.fieldKey)`), so the card never falls back to a
|
|
11
|
+
* product-specific column list.
|
|
12
|
+
*/
|
|
13
|
+
fieldLabel: string;
|
|
14
|
+
isPrimary: boolean;
|
|
15
|
+
onRemove: () => void;
|
|
16
|
+
onToggleDir: () => void;
|
|
17
|
+
};
|
|
18
|
+
declare function DrawerSortCard(props: DrawerSortCardProps): react_jsx_runtime.JSX.Element | null;
|
|
19
|
+
|
|
20
|
+
export { DrawerSortCard, type DrawerSortCardProps };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Tooltip as Tooltip$1 } from 'radix-ui';
|
|
3
|
+
import { clsx } from 'clsx';
|
|
4
|
+
import { twMerge } from 'tailwind-merge';
|
|
5
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
function Tooltip({
|
|
11
|
+
...props
|
|
12
|
+
}) {
|
|
13
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Root, { "data-slot": "tooltip", ...props });
|
|
14
|
+
}
|
|
15
|
+
function TooltipTrigger({
|
|
16
|
+
className,
|
|
17
|
+
...props
|
|
18
|
+
}) {
|
|
19
|
+
return /* @__PURE__ */ jsx(
|
|
20
|
+
Tooltip$1.Trigger,
|
|
21
|
+
{
|
|
22
|
+
"data-slot": "tooltip-trigger",
|
|
23
|
+
suppressHydrationWarning: true,
|
|
24
|
+
className: cn("cursor-pointer", className),
|
|
25
|
+
...props
|
|
26
|
+
}
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
function TooltipContent({
|
|
30
|
+
className,
|
|
31
|
+
sideOffset = 0,
|
|
32
|
+
children,
|
|
33
|
+
...props
|
|
34
|
+
}) {
|
|
35
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsxs(
|
|
36
|
+
Tooltip$1.Content,
|
|
37
|
+
{
|
|
38
|
+
"data-slot": "tooltip-content",
|
|
39
|
+
sideOffset,
|
|
40
|
+
className: cn(
|
|
41
|
+
"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 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-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 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",
|
|
42
|
+
className
|
|
43
|
+
),
|
|
44
|
+
...props,
|
|
45
|
+
children: [
|
|
46
|
+
children,
|
|
47
|
+
/* @__PURE__ */ jsx(Tooltip$1.Arrow, { className: "z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground" })
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
) });
|
|
51
|
+
}
|
|
52
|
+
function Tip({ label, children, side = "top" }) {
|
|
53
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
54
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children }),
|
|
55
|
+
/* @__PURE__ */ jsx(TooltipContent, { side, className: "flex flex-wrap items-center gap-1.5", children: label })
|
|
56
|
+
] });
|
|
57
|
+
}
|
|
58
|
+
function DragHandleGripIcon({ className }) {
|
|
59
|
+
return /* @__PURE__ */ jsx("i", { className: cn("fa-solid fa-grip-dots-vertical shrink-0", className), "aria-hidden": "true" });
|
|
60
|
+
}
|
|
61
|
+
function DrawerSortCard(props) {
|
|
62
|
+
const { rule, fieldLabel, isPrimary, onRemove, onToggleDir } = props;
|
|
63
|
+
const label = fieldLabel || rule.fieldKey;
|
|
64
|
+
if (!label) return null;
|
|
65
|
+
return /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-border bg-background overflow-hidden", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 px-3 py-2.5", children: [
|
|
66
|
+
/* @__PURE__ */ jsx(DragHandleGripIcon, { className: "text-[13px] text-muted-foreground/40" }),
|
|
67
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1 min-w-0", children: [
|
|
68
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-1.5", children: [
|
|
69
|
+
isPrimary && /* @__PURE__ */ jsx("span", { className: "text-xs font-bold text-accent-foreground bg-accent rounded px-1 py-0.5 leading-none uppercase tracking-wide shrink-0", children: "Primary" }),
|
|
70
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium text-foreground truncate", children: label })
|
|
71
|
+
] }),
|
|
72
|
+
/* @__PURE__ */ jsxs(
|
|
73
|
+
"button",
|
|
74
|
+
{
|
|
75
|
+
type: "button",
|
|
76
|
+
"aria-label": `Direction: ${rule.direction === "asc" ? "Ascending" : "Descending"} \u2014 click to toggle`,
|
|
77
|
+
onClick: onToggleDir,
|
|
78
|
+
className: "inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-interactive-hover-foreground transition-colors mt-0.5",
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ jsx("i", { className: `fa-light ${rule.direction === "asc" ? "fa-arrow-up-a-z" : "fa-arrow-down-a-z"} text-xs`, "aria-hidden": "true" }),
|
|
81
|
+
rule.direction === "asc" ? "Ascending" : "Descending",
|
|
82
|
+
/* @__PURE__ */ jsx("i", { className: "fa-light fa-chevron-down text-xs", "aria-hidden": "true" })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
] }),
|
|
87
|
+
/* @__PURE__ */ jsx(Tip, { label: `Remove ${label} sort`, side: "top", children: /* @__PURE__ */ jsx(
|
|
88
|
+
"button",
|
|
89
|
+
{
|
|
90
|
+
type: "button",
|
|
91
|
+
"aria-label": `Remove ${label} sort`,
|
|
92
|
+
onClick: onRemove,
|
|
93
|
+
className: "inline-flex items-center justify-center size-7 rounded text-muted-foreground hover:text-destructive hover:bg-interactive-hover transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring shrink-0",
|
|
94
|
+
children: /* @__PURE__ */ jsx("i", { className: "fa-light fa-trash text-xs", "aria-hidden": "true" })
|
|
95
|
+
}
|
|
96
|
+
) })
|
|
97
|
+
] }) });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export { DrawerSortCard };
|
|
101
|
+
//# sourceMappingURL=sort-card.js.map
|
|
102
|
+
//# sourceMappingURL=sort-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/tooltip.tsx","../../../src/components/ui/tip.tsx","../../../src/components/ui/drag-handle-grip.tsx","../../../src/components/table-properties/sort-card.tsx"],"names":["TooltipPrimitive","jsxs","jsx"],"mappings":"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","file":"sort-card.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\nimport * as React from \"react\"\nimport { Tooltip as TooltipPrimitive } from \"radix-ui\"\n\nimport { cn } from \"../../lib/utils\"\n\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n )\n}\n\nfunction Tooltip({\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n}\n\nfunction TooltipTrigger({\n className,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return (\n <TooltipPrimitive.Trigger\n data-slot=\"tooltip-trigger\"\n suppressHydrationWarning\n className={cn(\"cursor-pointer\", className)}\n {...props}\n />\n )\n}\n\nfunction TooltipContent({\n className,\n sideOffset = 0,\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 inline-flex w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin) items-center gap-1.5 rounded-md bg-foreground px-3 py-1.5 text-xs text-background has-data-[slot=kbd]:pe-1.5 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-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 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\",\n className\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow className=\"z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px] bg-foreground fill-foreground\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n )\n}\n\nexport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }\n","\"use client\"\nimport * as React from \"react\"\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"./tooltip\"\n\ninterface TipProps {\n /** Plain string or text + `<Kbd />` — see `.cursor/rules/exxat-kbd-shortcuts.mdc` */\n label: React.ReactNode\n children: React.ReactNode\n side?: \"top\" | \"bottom\" | \"left\" | \"right\"\n}\n\nexport function Tip({ label, children, side = \"top\" }: TipProps) {\n return (\n <Tooltip>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipContent side={side} className=\"flex flex-wrap items-center gap-1.5\">\n {label}\n </TooltipContent>\n </Tooltip>\n )\n}\n","import { cn } from \"../../lib/utils\"\n\n/**\n * Solid grip icon for drag handles — use anywhere rows/cards reorder (dashboard, Properties, etc.).\n */\nexport function DragHandleGripIcon({ className }: { className?: string }) {\n return (\n <i className={cn(\"fa-solid fa-grip-dots-vertical shrink-0\", className)} aria-hidden=\"true\" />\n )\n}\n","\"use client\"\nimport * as React from \"react\"\nimport { Tip } from \"../ui/tip\"\nimport { DragHandleGripIcon } from \"../ui/drag-handle-grip\"\nimport { type SortRule } from \"../../lib/table-properties-types\"\n\n/** Sort rule card inside the Sort drawer panel */\nexport type DrawerSortCardProps = {\n rule: SortRule\n /**\n * Resolved column label for the sort rule's `fieldKey`. Required — every\n * consumer derives labels from its column defs (the drawer passes\n * `resolveColumnLabel(rule.fieldKey)`), so the card never falls back to a\n * product-specific column list.\n */\n fieldLabel: string\n isPrimary: boolean\n onRemove: () => void\n onToggleDir: () => void\n}\n\nexport function DrawerSortCard(props: DrawerSortCardProps) {\n const { rule, fieldLabel, isPrimary, onRemove, onToggleDir } = props\n const label = fieldLabel || rule.fieldKey\n if (!label) return null\n return (\n <div className=\"rounded-lg border border-border bg-background overflow-hidden\">\n <div className=\"flex items-center gap-2 px-3 py-2.5\">\n <DragHandleGripIcon className=\"text-[13px] text-muted-foreground/40\" />\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n {isPrimary && (\n <span className=\"text-xs font-bold text-accent-foreground bg-accent rounded px-1 py-0.5 leading-none uppercase tracking-wide shrink-0\">\n Primary\n </span>\n )}\n <p className=\"text-sm font-medium text-foreground truncate\">{label}</p>\n </div>\n <button\n type=\"button\"\n aria-label={`Direction: ${rule.direction === \"asc\" ? \"Ascending\" : \"Descending\"} — click to toggle`}\n onClick={onToggleDir}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-interactive-hover-foreground transition-colors mt-0.5\"\n >\n <i className={`fa-light ${rule.direction === \"asc\" ? \"fa-arrow-up-a-z\" : \"fa-arrow-down-a-z\"} text-xs`} aria-hidden=\"true\" />\n {rule.direction === \"asc\" ? \"Ascending\" : \"Descending\"}\n <i className=\"fa-light fa-chevron-down text-xs\" aria-hidden=\"true\" />\n </button>\n </div>\n <Tip label={`Remove ${label} sort`} side=\"top\">\n <button\n type=\"button\"\n aria-label={`Remove ${label} sort`}\n onClick={onRemove}\n className=\"inline-flex items-center justify-center size-7 rounded text-muted-foreground hover:text-destructive hover:bg-interactive-hover transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring shrink-0\"\n >\n <i className=\"fa-light fa-trash text-xs\" aria-hidden=\"true\" />\n </button>\n </Tip>\n </div>\n </div>\n )\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
interface DedicatedSearchLandingTemplateProps {
|
|
5
|
+
/** Page title — string or rich node (e.g. styled heading). */
|
|
6
|
+
title: React.ReactNode;
|
|
7
|
+
/** Primary search control (typically {@link DedicatedSearchUrlComposer}). */
|
|
8
|
+
composer: React.ReactNode;
|
|
9
|
+
/** Optional block below composer (e.g. {@link DedicatedSearchRecents}). */
|
|
10
|
+
trailing?: React.ReactNode;
|
|
11
|
+
/** Forwarded to {@link ListPageViewFrame}. */
|
|
12
|
+
maxWidthClassName?: string;
|
|
13
|
+
frameClassName?: string;
|
|
14
|
+
gutterClassName?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Centered dedicated-search landing — empty `?q=` shell (hero title + composer + optional trailing).
|
|
18
|
+
*/
|
|
19
|
+
declare function DedicatedSearchLandingTemplate({ title, composer, trailing, maxWidthClassName, frameClassName, gutterClassName, }: DedicatedSearchLandingTemplateProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
|
|
21
|
+
export { DedicatedSearchLandingTemplate, type DedicatedSearchLandingTemplateProps };
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { clsx } from 'clsx';
|
|
3
|
+
import { twMerge } from 'tailwind-merge';
|
|
4
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
5
|
+
import * as React from 'react';
|
|
6
|
+
import { motion } from 'motion/react';
|
|
7
|
+
|
|
8
|
+
function cn(...inputs) {
|
|
9
|
+
return twMerge(clsx(inputs));
|
|
10
|
+
}
|
|
11
|
+
var LIST_PAGE_VIEW_FRAME_GUTTER = "mx-4 mb-6 lg:mx-6";
|
|
12
|
+
function ListPageViewFrame({
|
|
13
|
+
children,
|
|
14
|
+
className,
|
|
15
|
+
maxWidthClassName,
|
|
16
|
+
gutterClassName = LIST_PAGE_VIEW_FRAME_GUTTER,
|
|
17
|
+
...rest
|
|
18
|
+
}) {
|
|
19
|
+
return /* @__PURE__ */ jsx("div", { className: cn(gutterClassName, className), ...rest, children: maxWidthClassName ? /* @__PURE__ */ jsx("div", { className: cn("mx-auto w-full min-w-0", maxWidthClassName), children }) : children });
|
|
20
|
+
}
|
|
21
|
+
function mulberry32(seed) {
|
|
22
|
+
let s = seed >>> 0;
|
|
23
|
+
return () => {
|
|
24
|
+
s = s + 1831565813 >>> 0;
|
|
25
|
+
let t = s;
|
|
26
|
+
t = Math.imul(t ^ t >>> 15, t | 1);
|
|
27
|
+
t ^= t + Math.imul(t ^ t >>> 7, t | 61);
|
|
28
|
+
return ((t ^ t >>> 14) >>> 0) / 4294967296;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function hashString(str) {
|
|
32
|
+
let h = 2166136261;
|
|
33
|
+
for (let i = 0; i < str.length; i++) {
|
|
34
|
+
h ^= str.charCodeAt(i);
|
|
35
|
+
h = Math.imul(h, 16777619);
|
|
36
|
+
}
|
|
37
|
+
return h >>> 0;
|
|
38
|
+
}
|
|
39
|
+
function DotPattern({
|
|
40
|
+
width = 14,
|
|
41
|
+
height = 14,
|
|
42
|
+
x = 0,
|
|
43
|
+
y = 0,
|
|
44
|
+
cx = 1,
|
|
45
|
+
cy = 1,
|
|
46
|
+
cr = 0.8,
|
|
47
|
+
className,
|
|
48
|
+
glow = false,
|
|
49
|
+
glowCount = 2,
|
|
50
|
+
glowRadius = 240,
|
|
51
|
+
...props
|
|
52
|
+
}) {
|
|
53
|
+
const id = React.useId();
|
|
54
|
+
const maskId = `${id}-mask`;
|
|
55
|
+
const gradId = `${id}-grad`;
|
|
56
|
+
const clouds = React.useMemo(() => {
|
|
57
|
+
const rng = mulberry32(hashString(`${id}|${glowCount}`));
|
|
58
|
+
const rand = (min, max) => min + rng() * (max - min);
|
|
59
|
+
return Array.from({ length: glowCount }).map((_, i) => {
|
|
60
|
+
const startX = rand(85, 120);
|
|
61
|
+
const endX = rand(-20, 15);
|
|
62
|
+
const midX = (startX + endX) / 2 + rand(-6, 6);
|
|
63
|
+
const startY = rand(85, 115);
|
|
64
|
+
const endY = rand(-15, 10);
|
|
65
|
+
const midY = (startY + endY) / 2 + rand(-4, 4);
|
|
66
|
+
const duration = rand(8, 12);
|
|
67
|
+
const delay = -(i / glowCount) * duration;
|
|
68
|
+
return {
|
|
69
|
+
key: i,
|
|
70
|
+
xs: [`${startX}%`, `${midX}%`, `${endX}%`],
|
|
71
|
+
ys: [`${startY}%`, `${midY}%`, `${endY}%`],
|
|
72
|
+
duration,
|
|
73
|
+
delay
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}, [glowCount, id]);
|
|
77
|
+
return /* @__PURE__ */ jsxs(
|
|
78
|
+
"svg",
|
|
79
|
+
{
|
|
80
|
+
"aria-hidden": "true",
|
|
81
|
+
className: cn(
|
|
82
|
+
"pointer-events-none absolute inset-0 h-full w-full fill-neutral-400/80",
|
|
83
|
+
className
|
|
84
|
+
),
|
|
85
|
+
...props,
|
|
86
|
+
children: [
|
|
87
|
+
/* @__PURE__ */ jsxs("defs", { children: [
|
|
88
|
+
/* @__PURE__ */ jsx(
|
|
89
|
+
"pattern",
|
|
90
|
+
{
|
|
91
|
+
id,
|
|
92
|
+
width,
|
|
93
|
+
height,
|
|
94
|
+
patternUnits: "userSpaceOnUse",
|
|
95
|
+
patternContentUnits: "userSpaceOnUse",
|
|
96
|
+
x,
|
|
97
|
+
y,
|
|
98
|
+
children: /* @__PURE__ */ jsx("circle", { cx, cy, r: cr })
|
|
99
|
+
}
|
|
100
|
+
),
|
|
101
|
+
glow ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
102
|
+
/* @__PURE__ */ jsxs("radialGradient", { id: gradId, children: [
|
|
103
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0.9" }),
|
|
104
|
+
/* @__PURE__ */ jsx("stop", { offset: "40%", stopColor: "white", stopOpacity: "0.55" }),
|
|
105
|
+
/* @__PURE__ */ jsx("stop", { offset: "75%", stopColor: "white", stopOpacity: "0.18" }),
|
|
106
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
|
|
107
|
+
] }),
|
|
108
|
+
/* @__PURE__ */ jsx("mask", { id: maskId, children: clouds.map((c) => /* @__PURE__ */ jsx(
|
|
109
|
+
motion.circle,
|
|
110
|
+
{
|
|
111
|
+
r: glowRadius,
|
|
112
|
+
fill: `url(#${gradId})`,
|
|
113
|
+
initial: { cx: c.xs[0], cy: c.ys[0], opacity: 0 },
|
|
114
|
+
animate: {
|
|
115
|
+
cx: c.xs,
|
|
116
|
+
cy: c.ys,
|
|
117
|
+
// Long hold with soft fade at both ends.
|
|
118
|
+
opacity: [0, 1, 1, 0]
|
|
119
|
+
},
|
|
120
|
+
transition: {
|
|
121
|
+
duration: c.duration,
|
|
122
|
+
delay: c.delay,
|
|
123
|
+
repeat: Infinity,
|
|
124
|
+
ease: "linear",
|
|
125
|
+
times: [0, 0.3, 0.7, 1]
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
`cloud-${c.key}`
|
|
129
|
+
)) })
|
|
130
|
+
] }) : null
|
|
131
|
+
] }),
|
|
132
|
+
/* @__PURE__ */ jsx(
|
|
133
|
+
"rect",
|
|
134
|
+
{
|
|
135
|
+
width: "100%",
|
|
136
|
+
height: "100%",
|
|
137
|
+
strokeWidth: 0,
|
|
138
|
+
fill: `url(#${id})`,
|
|
139
|
+
mask: glow ? `url(#${maskId})` : void 0
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
var DEFAULT_GUTTER = "mx-auto flex min-h-[min(72vh,36rem)] w-full min-w-0 flex-col justify-center gap-0 px-6 py-8 sm:px-8 sm:py-10 md:px-12 md:py-12 lg:px-16";
|
|
147
|
+
var HERO_BACKDROP_MASK = "[mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)] [-webkit-mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)]";
|
|
148
|
+
function DedicatedSearchLandingBackdrop() {
|
|
149
|
+
return /* @__PURE__ */ jsxs(
|
|
150
|
+
"div",
|
|
151
|
+
{
|
|
152
|
+
"aria-hidden": true,
|
|
153
|
+
className: cn(
|
|
154
|
+
"pointer-events-none absolute inset-0 -z-10 select-none overflow-hidden",
|
|
155
|
+
HERO_BACKDROP_MASK
|
|
156
|
+
),
|
|
157
|
+
children: [
|
|
158
|
+
/* @__PURE__ */ jsx(
|
|
159
|
+
"div",
|
|
160
|
+
{
|
|
161
|
+
className: "absolute -left-[20%] -top-[30%] h-[min(54vmin,27rem)] w-[min(54vmin,27rem)] rounded-full blur-[76px]",
|
|
162
|
+
style: {
|
|
163
|
+
background: "radial-gradient(circle at 42% 36%, var(--leo-surface-tint-b) 0%, transparent 68%)"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
),
|
|
167
|
+
/* @__PURE__ */ jsx(
|
|
168
|
+
"div",
|
|
169
|
+
{
|
|
170
|
+
className: "absolute -right-[12%] top-[2%] h-[min(46vmin,23rem)] w-[min(46vmin,23rem)] rounded-full blur-[68px]",
|
|
171
|
+
style: {
|
|
172
|
+
background: "radial-gradient(circle at 48% 48%, var(--leo-surface-tint-a) 0%, transparent 66%)"
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
),
|
|
176
|
+
/* @__PURE__ */ jsx(
|
|
177
|
+
"div",
|
|
178
|
+
{
|
|
179
|
+
className: "absolute bottom-[-16%] left-[14%] h-[min(50vmin,25rem)] w-[min(50vmin,25rem)] rounded-full blur-[84px]",
|
|
180
|
+
style: {
|
|
181
|
+
background: "radial-gradient(circle at 44% 40%, var(--leo-surface-tint-b) 0%, transparent 70%)"
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
),
|
|
185
|
+
/* @__PURE__ */ jsx(
|
|
186
|
+
"div",
|
|
187
|
+
{
|
|
188
|
+
className: "absolute bottom-[4%] right-[6%] h-[min(40vmin,20rem)] w-[min(40vmin,20rem)] rounded-full blur-[60px]",
|
|
189
|
+
style: {
|
|
190
|
+
background: "radial-gradient(circle at 52% 44%, var(--leo-surface-tint-a) 0%, transparent 72%)"
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
),
|
|
194
|
+
/* @__PURE__ */ jsx(
|
|
195
|
+
"div",
|
|
196
|
+
{
|
|
197
|
+
className: "absolute left-[36%] top-[32%] h-[min(38vmin,19rem)] w-[min(38vmin,19rem)] -translate-x-1/2 rounded-full blur-[74px]",
|
|
198
|
+
style: {
|
|
199
|
+
background: "radial-gradient(circle at 50% 50%, var(--leo-surface-tint-b) 0%, transparent 68%)"
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
),
|
|
203
|
+
/* @__PURE__ */ jsx(
|
|
204
|
+
DotPattern,
|
|
205
|
+
{
|
|
206
|
+
width: 15,
|
|
207
|
+
height: 15,
|
|
208
|
+
cr: 0.65,
|
|
209
|
+
className: cn(
|
|
210
|
+
"absolute inset-0 opacity-[0.34] mix-blend-multiply dark:opacity-[0.22] dark:mix-blend-soft-light",
|
|
211
|
+
"fill-[color-mix(in_oklch,var(--brand-color)_14%,var(--background))]"
|
|
212
|
+
)
|
|
213
|
+
}
|
|
214
|
+
)
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
);
|
|
218
|
+
}
|
|
219
|
+
function DedicatedSearchLandingTemplate({
|
|
220
|
+
title,
|
|
221
|
+
composer,
|
|
222
|
+
trailing,
|
|
223
|
+
maxWidthClassName = "max-w-5xl",
|
|
224
|
+
frameClassName = "min-w-0",
|
|
225
|
+
gutterClassName = DEFAULT_GUTTER
|
|
226
|
+
}) {
|
|
227
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative isolate min-w-0 w-full overflow-hidden", children: [
|
|
228
|
+
/* @__PURE__ */ jsx(DedicatedSearchLandingBackdrop, {}),
|
|
229
|
+
/* @__PURE__ */ jsxs(
|
|
230
|
+
ListPageViewFrame,
|
|
231
|
+
{
|
|
232
|
+
maxWidthClassName,
|
|
233
|
+
className: cn("relative z-10", frameClassName),
|
|
234
|
+
gutterClassName,
|
|
235
|
+
children: [
|
|
236
|
+
/* @__PURE__ */ jsx("header", { className: "min-w-0", children: typeof title === "string" ? /* @__PURE__ */ jsx(
|
|
237
|
+
"h1",
|
|
238
|
+
{
|
|
239
|
+
className: "text-balance text-3xl font-semibold tracking-tight text-foreground sm:text-4xl",
|
|
240
|
+
style: { fontFamily: "var(--font-heading)" },
|
|
241
|
+
children: title
|
|
242
|
+
}
|
|
243
|
+
) : title }),
|
|
244
|
+
/* @__PURE__ */ jsx("div", { className: "min-w-0 mt-6 sm:mt-8", children: composer }),
|
|
245
|
+
trailing ? /* @__PURE__ */ jsx("div", { className: "min-w-0 mt-10 sm:mt-12 md:mt-14 lg:mt-16", children: trailing }) : null
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
)
|
|
249
|
+
] });
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export { DedicatedSearchLandingTemplate };
|
|
253
|
+
//# sourceMappingURL=dedicated-search-landing-template.js.map
|
|
254
|
+
//# sourceMappingURL=dedicated-search-landing-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/ui/list-page-view-frame.tsx","../../../src/components/ui/dot-pattern.tsx","../../../src/components/templates/dedicated-search-landing-template.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"dedicated-search-landing-template.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","\"use client\"\n\n/**\n * ListPageViewFrame — shared horizontal gutter + optional centered max-width\n * for list-hub **view bodies** (folder icon grid, finder panel chrome,\n * OS-style folder explorer, dashboard slices, etc.).\n *\n * MUST be used instead of ad-hoc `mx-4 lg:mx-6` + `mx-auto max-w-*` pairs on\n * each page — see `apps/web/AGENTS.md` §4.5 and\n * `.cursor/rules/exxat-list-page-view-shells.mdc`.\n *\n * MUST NOT wrap `DataTable` when its toolbar already applies the same inset\n * (avoid double gutter); use this for **non-table** view branches or\n * **sections below** the shared toolbar.\n *\n * Promotion note: this file lived at\n * `apps/web/components/data-views/list-page-view-frame.tsx` until\n * 2026-05-20. It moved into `@exxatdesignux/ui` because the gutter / max-\n * width contract is entity-agnostic and other consumers (a future docs\n * site, partner apps) need the same rhythm without dragging in the whole\n * `data-views/` family.\n */\n\nimport * as React from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/** Default horizontal rhythm for view bodies under `ListPageTemplate` (matches `FolderGridView`). */\nexport const LIST_PAGE_VIEW_FRAME_GUTTER = \"mx-4 mb-6 lg:mx-6\"\n\n/** Typical max width for icon grids / dense tile views on ultra-wide monitors. */\nexport const LIST_PAGE_VIEW_FRAME_MAX_ICON_GRID = \"max-w-6xl\"\n\n/** Slightly wider shell when a view includes toolbar + breadcrumbs + grid (e.g. OS folder explorer). */\nexport const LIST_PAGE_VIEW_FRAME_MAX_WIDE = \"max-w-7xl\"\n\nexport interface ListPageViewFrameProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n /**\n * When set, children are wrapped in `mx-auto w-full min-w-0` + this\n * max-width so the block stays centered inside the primary page column.\n */\n maxWidthClassName?: string\n /** Override outer gutter; default `LIST_PAGE_VIEW_FRAME_GUTTER`. */\n gutterClassName?: string\n}\n\nexport function ListPageViewFrame({\n children,\n className,\n maxWidthClassName,\n gutterClassName = LIST_PAGE_VIEW_FRAME_GUTTER,\n ...rest\n}: ListPageViewFrameProps) {\n return (\n <div className={cn(gutterClassName, className)} {...rest}>\n {maxWidthClassName ? (\n <div className={cn(\"mx-auto w-full min-w-0\", maxWidthClassName)}>{children}</div>\n ) : (\n children\n )}\n </div>\n )\n}\n","\"use client\"\n\n/**\n * DotPattern — dot grid revealed by a soft drifting \"cloud\" mask.\n *\n * Inspiration: Google/Apple AI loading states — a diffuse dot field that\n * softly fades in, drifts diagonally across the surface, then fades out.\n * No bright glow cores, no particles — just one or two large soft halos\n * sliding across the grid so the dots appear as an ambient cloud.\n */\n\nimport * as React from \"react\"\nimport { motion } from \"motion/react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface DotPatternProps extends React.SVGProps<SVGSVGElement> {\n width?: number\n height?: number\n x?: number\n y?: number\n cx?: number\n cy?: number\n cr?: number\n className?: string\n glow?: boolean\n /** Number of drifting soft clouds (keep small: 1–2). */\n glowCount?: number\n /** Cloud radius — large values produce a wide, diffuse reveal. */\n glowRadius?: number\n}\n\ntype Cloud = {\n key: number\n xs: string[]\n ys: string[]\n duration: number\n delay: number\n}\n\n/**\n * Tiny deterministic PRNG (mulberry32). We use a seeded RNG instead of\n * `Math.random()` so the SVG attributes emitted on the server match the\n * client's first paint — otherwise React reports a hydration mismatch and\n * has to re-paint every drifting `<motion.circle>` on mount, which is both\n * a perf cost and a visible jump.\n */\nfunction mulberry32(seed: number): () => number {\n let s = seed >>> 0\n return () => {\n s = (s + 0x6d2b79f5) >>> 0\n let t = s\n t = Math.imul(t ^ (t >>> 15), t | 1)\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61)\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296\n }\n}\n\nfunction hashString(str: string): number {\n // Cheap FNV-1a-style hash. Stable across SSR + CSR for the same input.\n let h = 2166136261\n for (let i = 0; i < str.length; i++) {\n h ^= str.charCodeAt(i)\n h = Math.imul(h, 16777619)\n }\n return h >>> 0\n}\n\nexport function DotPattern({\n width = 14,\n height = 14,\n x = 0,\n y = 0,\n cx = 1,\n cy = 1,\n cr = 0.8,\n className,\n glow = false,\n glowCount = 2,\n glowRadius = 240,\n ...props\n}: DotPatternProps) {\n const id = React.useId()\n const maskId = `${id}-mask`\n const gradId = `${id}-grad`\n\n const clouds = React.useMemo<Cloud[]>(() => {\n const rng = mulberry32(hashString(`${id}|${glowCount}`))\n const rand = (min: number, max: number) => min + rng() * (max - min)\n return Array.from({ length: glowCount }).map((_, i) => {\n // Drift diagonally: bottom-right → top-left. Start/end partly off-canvas\n // so the cloud enters and exits softly without a visible edge.\n const startX = rand(85, 120)\n const endX = rand(-20, 15)\n const midX = (startX + endX) / 2 + rand(-6, 6)\n\n const startY = rand(85, 115)\n const endY = rand(-15, 10)\n const midY = (startY + endY) / 2 + rand(-4, 4)\n\n const duration = rand(8, 12)\n // Offset clouds by half a cycle so one is arriving as the other leaves.\n const delay = -(i / glowCount) * duration\n\n return {\n key: i,\n xs: [`${startX}%`, `${midX}%`, `${endX}%`],\n ys: [`${startY}%`, `${midY}%`, `${endY}%`],\n duration,\n delay,\n }\n })\n }, [glowCount, id])\n\n return (\n <svg\n aria-hidden=\"true\"\n className={cn(\n \"pointer-events-none absolute inset-0 h-full w-full fill-neutral-400/80\",\n className,\n )}\n {...props}\n >\n <defs>\n <pattern\n id={id}\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n patternContentUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <circle cx={cx} cy={cy} r={cr} />\n </pattern>\n\n {glow ? (\n <>\n {/* Very soft falloff — no visible ring edge, dots dissolve gradually. */}\n <radialGradient id={gradId}>\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity=\"0.9\" />\n <stop offset=\"40%\" stopColor=\"white\" stopOpacity=\"0.55\" />\n <stop offset=\"75%\" stopColor=\"white\" stopOpacity=\"0.18\" />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity=\"0\" />\n </radialGradient>\n\n <mask id={maskId}>\n {clouds.map((c) => (\n <motion.circle\n key={`cloud-${c.key}`}\n r={glowRadius}\n fill={`url(#${gradId})`}\n initial={{ cx: c.xs[0], cy: c.ys[0], opacity: 0 }}\n animate={{\n cx: c.xs,\n cy: c.ys,\n // Long hold with soft fade at both ends.\n opacity: [0, 1, 1, 0],\n }}\n transition={{\n duration: c.duration,\n delay: c.delay,\n repeat: Infinity,\n ease: \"linear\",\n times: [0, 0.3, 0.7, 1],\n }}\n />\n ))}\n </mask>\n </>\n ) : null}\n </defs>\n\n {/* Dot grid — only visible inside the drifting soft clouds when glow is on. */}\n <rect\n width=\"100%\"\n height=\"100%\"\n strokeWidth={0}\n fill={`url(#${id})`}\n mask={glow ? `url(#${maskId})` : undefined}\n />\n </svg>\n )\n}\n","\"use client\"\n\nimport * as React from \"react\"\n\nimport { ListPageViewFrame } from \"../ui/list-page-view-frame\"\nimport { DotPattern } from \"../ui/dot-pattern\"\nimport { cn } from \"../../lib/utils\"\n\nexport interface DedicatedSearchLandingTemplateProps {\n /** Page title — string or rich node (e.g. styled heading). */\n title: React.ReactNode\n /** Primary search control (typically {@link DedicatedSearchUrlComposer}). */\n composer: React.ReactNode\n /** Optional block below composer (e.g. {@link DedicatedSearchRecents}). */\n trailing?: React.ReactNode\n /** Forwarded to {@link ListPageViewFrame}. */\n maxWidthClassName?: string\n frameClassName?: string\n gutterClassName?: string\n}\n\nconst DEFAULT_GUTTER =\n \"mx-auto flex min-h-[min(72vh,36rem)] w-full min-w-0 flex-col justify-center gap-0 px-6 py-8 sm:px-8 sm:py-10 md:px-12 md:py-12 lg:px-16\"\n\n/** Feather into page white / header so the hero never reads as a hard horizontal slab. */\nconst HERO_BACKDROP_MASK =\n \"[mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)] [-webkit-mask-image:linear-gradient(to_bottom,transparent_0%,black_5%,black_95%,transparent_100%)]\"\n\n/**\n * Soft blurred blobs using only Ask Leo surface tints (`--leo-surface-tint-a|b` in `globals.css`).\n */\nfunction DedicatedSearchLandingBackdrop() {\n return (\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 -z-10 select-none overflow-hidden\",\n HERO_BACKDROP_MASK,\n )}\n >\n <div\n className=\"absolute -left-[20%] -top-[30%] h-[min(54vmin,27rem)] w-[min(54vmin,27rem)] rounded-full blur-[76px]\"\n style={{\n background: \"radial-gradient(circle at 42% 36%, var(--leo-surface-tint-b) 0%, transparent 68%)\",\n }}\n />\n <div\n className=\"absolute -right-[12%] top-[2%] h-[min(46vmin,23rem)] w-[min(46vmin,23rem)] rounded-full blur-[68px]\"\n style={{\n background: \"radial-gradient(circle at 48% 48%, var(--leo-surface-tint-a) 0%, transparent 66%)\",\n }}\n />\n <div\n className=\"absolute bottom-[-16%] left-[14%] h-[min(50vmin,25rem)] w-[min(50vmin,25rem)] rounded-full blur-[84px]\"\n style={{\n background: \"radial-gradient(circle at 44% 40%, var(--leo-surface-tint-b) 0%, transparent 70%)\",\n }}\n />\n <div\n className=\"absolute bottom-[4%] right-[6%] h-[min(40vmin,20rem)] w-[min(40vmin,20rem)] rounded-full blur-[60px]\"\n style={{\n background: \"radial-gradient(circle at 52% 44%, var(--leo-surface-tint-a) 0%, transparent 72%)\",\n }}\n />\n <div\n className=\"absolute left-[36%] top-[32%] h-[min(38vmin,19rem)] w-[min(38vmin,19rem)] -translate-x-1/2 rounded-full blur-[74px]\"\n style={{\n background: \"radial-gradient(circle at 50% 50%, var(--leo-surface-tint-b) 0%, transparent 68%)\",\n }}\n />\n\n {/* Static dot field — same primitive as `AiThinkingOverlay` (no motion here). */}\n <DotPattern\n width={15}\n height={15}\n cr={0.65}\n className={cn(\n \"absolute inset-0 opacity-[0.34] mix-blend-multiply dark:opacity-[0.22] dark:mix-blend-soft-light\",\n \"fill-[color-mix(in_oklch,var(--brand-color)_14%,var(--background))]\",\n )}\n />\n </div>\n )\n}\n\n/**\n * Centered dedicated-search landing — empty `?q=` shell (hero title + composer + optional trailing).\n */\nexport function DedicatedSearchLandingTemplate({\n title,\n composer,\n trailing,\n maxWidthClassName = \"max-w-5xl\",\n frameClassName = \"min-w-0\",\n gutterClassName = DEFAULT_GUTTER,\n}: DedicatedSearchLandingTemplateProps) {\n return (\n <div className=\"relative isolate min-w-0 w-full overflow-hidden\">\n <DedicatedSearchLandingBackdrop />\n <ListPageViewFrame\n maxWidthClassName={maxWidthClassName}\n className={cn(\"relative z-10\", frameClassName)}\n gutterClassName={gutterClassName}\n >\n <header className=\"min-w-0\">\n {typeof title === \"string\" ? (\n <h1\n className=\"text-balance text-3xl font-semibold tracking-tight text-foreground sm:text-4xl\"\n style={{ fontFamily: \"var(--font-heading)\" }}\n >\n {title}\n </h1>\n ) : (\n title\n )}\n </header>\n\n <div className=\"min-w-0 mt-6 sm:mt-8\">{composer}</div>\n\n {trailing ? <div className=\"min-w-0 mt-10 sm:mt-12 md:mt-14 lg:mt-16\">{trailing}</div> : null}\n </ListPageViewFrame>\n </div>\n )\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
/** Apply to the hub content wrapper when showing results (list surface under composer). */
|
|
5
|
+
declare const DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME = "border-t border-border/40 bg-gradient-to-b from-muted/25 via-background to-background";
|
|
6
|
+
interface DedicatedSearchResultsHeaderChromeProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Muted strip wrapping page chrome + composer on the results branch (below site header).
|
|
12
|
+
*/
|
|
13
|
+
declare function DedicatedSearchResultsHeaderChrome({ children, className }: DedicatedSearchResultsHeaderChromeProps): react_jsx_runtime.JSX.Element;
|
|
14
|
+
|
|
15
|
+
export { DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME, DedicatedSearchResultsHeaderChrome, type DedicatedSearchResultsHeaderChromeProps };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { clsx } from 'clsx';
|
|
2
|
+
import { twMerge } from 'tailwind-merge';
|
|
3
|
+
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
|
|
5
|
+
// src/lib/utils.ts
|
|
6
|
+
function cn(...inputs) {
|
|
7
|
+
return twMerge(clsx(inputs));
|
|
8
|
+
}
|
|
9
|
+
var DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME = "border-t border-border/40 bg-gradient-to-b from-muted/25 via-background to-background";
|
|
10
|
+
function DedicatedSearchResultsHeaderChrome({ children, className }) {
|
|
11
|
+
return /* @__PURE__ */ jsx("div", { className: cn("border-b border-border/50 bg-muted/15", className), children });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME, DedicatedSearchResultsHeaderChrome };
|
|
15
|
+
//# sourceMappingURL=dedicated-search-results-template.js.map
|
|
16
|
+
//# sourceMappingURL=dedicated-search-results-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/utils.ts","../../../src/components/templates/dedicated-search-results-template.tsx"],"names":[],"mappings":";;;;;AAGO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;ACAO,IAAM,gDAAA,GACX;AAUK,SAAS,kCAAA,CAAmC,EAAE,QAAA,EAAU,SAAA,EAAU,EAA4C;AACnH,EAAA,2BAAQ,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,uCAAA,EAAyC,SAAS,GAAI,QAAA,EAAS,CAAA;AAC3F","file":"dedicated-search-results-template.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import type { ReactNode } from \"react\"\n\nimport { cn } from \"../../lib/utils\"\n\n/** Apply to the hub content wrapper when showing results (list surface under composer). */\nexport const DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME =\n \"border-t border-border/40 bg-gradient-to-b from-muted/25 via-background to-background\"\n\nexport interface DedicatedSearchResultsHeaderChromeProps {\n children: ReactNode\n className?: string\n}\n\n/**\n * Muted strip wrapping page chrome + composer on the results branch (below site header).\n */\nexport function DedicatedSearchResultsHeaderChrome({ children, className }: DedicatedSearchResultsHeaderChromeProps) {\n return <div className={cn(\"border-b border-border/50 bg-muted/15\", className)}>{children}</div>\n}\n"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { FilterOption, ListPageTemplate, ListPageTemplateProps, VIEW_TYPES, ViewTab, ViewType } from './list-page.js';
|
|
2
|
+
export { NestedSecondaryPanelShell, NestedSecondaryPanelShellProps } from './nested-secondary-panel-shell.js';
|
|
3
|
+
export { DedicatedSearchLandingTemplate, DedicatedSearchLandingTemplateProps } from './dedicated-search-landing-template.js';
|
|
4
|
+
export { DEDICATED_SEARCH_RESULTS_OUTER_CONTENT_CLASSNAME, DedicatedSearchResultsHeaderChrome, DedicatedSearchResultsHeaderChromeProps } from './dedicated-search-results-template.js';
|
|
5
|
+
import 'react/jsx-runtime';
|
|
6
|
+
import 'react';
|
|
7
|
+
import '../../lib/data-list-view.js';
|
|
8
|
+
import '../../lib/list-page-table-properties.js';
|
|
9
|
+
import '../../data-list-view-registry-CyBoBML4.js';
|