@vritti/quantum-ui 0.3.11 → 0.3.13
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/dist/Alert.js +1 -1
- package/dist/Alert.js.map +1 -1
- package/dist/Avatar.js +1 -1
- package/dist/Avatar.js.map +1 -1
- package/dist/Badge2.js +2 -2
- package/dist/BillingCycleSelector.js +37 -0
- package/dist/BillingCycleSelector.js.map +1 -0
- package/dist/Breadcrumb.js +1 -1
- package/dist/Breadcrumb.js.map +1 -1
- package/dist/Button.js +1 -1
- package/dist/Button.js.map +1 -1
- package/dist/Button2.js +2 -2
- package/dist/CardSkeleton.js.map +1 -1
- package/dist/CategoryFilter.js +6 -4
- package/dist/CategoryFilter.js.map +1 -1
- package/dist/Checkbox.js.map +1 -1
- package/dist/Checkbox2.js +4 -4
- package/dist/CheckboxGroup.js.map +1 -1
- package/dist/Collapsible.js.map +1 -1
- package/dist/Combination.js +1129 -0
- package/dist/Combination.js.map +1 -0
- package/dist/CompanySelector.js +20 -0
- package/dist/CompanySelector.js.map +1 -0
- package/dist/ConfirmHost.js.map +1 -1
- package/dist/CountrySelector.js +37 -0
- package/dist/CountrySelector.js.map +1 -0
- package/dist/CurrencyField.js +1 -0
- package/dist/CurrencyField.js.map +1 -1
- package/dist/CustomerSelector.js +2 -2
- package/dist/CustomerSelector.js.map +1 -1
- package/dist/DangerZoneSkeleton.js +21 -3
- package/dist/DangerZoneSkeleton.js.map +1 -1
- package/dist/DatePicker.js +3 -3
- package/dist/DatePicker.js.map +1 -1
- package/dist/DateTimePicker.js +2 -2
- package/dist/DetailSectionSkeleton.js.map +1 -1
- package/dist/Dialog.js.map +1 -1
- package/dist/DropdownMenu.js.map +1 -1
- package/dist/FeaturePermissionSelector.js +37 -0
- package/dist/FeaturePermissionSelector.js.map +1 -0
- package/dist/Form.js.map +1 -1
- package/dist/FormSection.js +4 -4
- package/dist/FormSection.js.map +1 -1
- package/dist/HierarchyGraph.js +5 -10621
- package/dist/HierarchyGraph.js.map +1 -1
- package/dist/ISOCountrySelect.js +283 -0
- package/dist/ISOCountrySelect.js.map +1 -0
- package/dist/IconSelect.js +1 -1
- package/dist/IconSelect.js.map +1 -1
- package/dist/InventoryItemSelector.js +2 -2
- package/dist/InventoryItemSelector.js.map +1 -1
- package/dist/Kbd.js +1 -1
- package/dist/Kbd.js.map +1 -1
- package/dist/Label.js +1 -1
- package/dist/LayoutModeContext.js.map +1 -1
- package/dist/LegalEntitySelector.js +37 -0
- package/dist/LegalEntitySelector.js.map +1 -0
- package/dist/LocationSelector.js +2 -2
- package/dist/LocationSelector.js.map +1 -1
- package/dist/LotSelector.js +2 -2
- package/dist/LotSelector.js.map +1 -1
- package/dist/OTPField.js.map +1 -1
- package/dist/PageContent.js.map +1 -1
- package/dist/PageHeaderSkeleton.js +21 -10
- package/dist/PageHeaderSkeleton.js.map +1 -1
- package/dist/PasswordField.js.map +1 -1
- package/dist/PermissionGate.js +49 -5
- package/dist/PermissionGate.js.map +1 -1
- package/dist/PersonSelector.js +20 -0
- package/dist/PersonSelector.js.map +1 -0
- package/dist/PhoneField.js.map +1 -1
- package/dist/PurchaseOrderSelector.js +2 -2
- package/dist/PurchaseOrderSelector.js.map +1 -1
- package/dist/QuantSelector.js +2 -2
- package/dist/QuantSelector.js.map +1 -1
- package/dist/RadioGroup.js +6 -6
- package/dist/RadioGroup.js.map +1 -1
- package/dist/RoleSelector.js +20 -0
- package/dist/RoleSelector.js.map +1 -0
- package/dist/Select.js +4 -1
- package/dist/Select.js.map +1 -1
- package/dist/SelectFilter.js.map +1 -1
- package/dist/Separator.js.map +1 -1
- package/dist/SerialSelector.js +2 -2
- package/dist/SerialSelector.js.map +1 -1
- package/dist/Sidebar.js +2 -2
- package/dist/Sidebar.js.map +1 -1
- package/dist/SingleSelect.js +2 -2
- package/dist/SingleSelect.js.map +1 -1
- package/dist/SiteGroupSelector.js +37 -0
- package/dist/SiteGroupSelector.js.map +1 -0
- package/dist/SiteSelector.js +37 -0
- package/dist/SiteSelector.js.map +1 -0
- package/dist/Sonner.js +1 -1
- package/dist/Sonner.js.map +1 -1
- package/dist/Sortable.js +4 -4417
- package/dist/Sortable.js.map +1 -1
- package/dist/StepProgressIndicator.js.map +1 -1
- package/dist/SupplierItemSelector.js +2 -2
- package/dist/SupplierItemSelector.js.map +1 -1
- package/dist/SupplierSelector.js +2 -2
- package/dist/SupplierSelector.js.map +1 -1
- package/dist/Switch.js +3 -3
- package/dist/Switch.js.map +1 -1
- package/dist/TabsSkeleton.js +101 -49
- package/dist/TabsSkeleton.js.map +1 -1
- package/dist/TaxClassSelector.js +20 -0
- package/dist/TaxClassSelector.js.map +1 -0
- package/dist/TextField.js.map +1 -1
- package/dist/ThemeContext.js.map +1 -1
- package/dist/ThemeToggle.js.map +1 -1
- package/dist/Toggle.js +1 -1
- package/dist/Toggle.js.map +1 -1
- package/dist/Tooltip.js.map +1 -1
- package/dist/Typography.js.map +1 -1
- package/dist/UomSelector.js +2 -2
- package/dist/UomSelector.js.map +1 -1
- package/dist/UploadFile.js.map +1 -1
- package/dist/assets/quantum-ui.css +25 -13
- package/dist/calendar2.js +1 -1
- package/dist/collapsible2.js +1 -1
- package/dist/components/CompanySelector.js +2 -0
- package/dist/components/CompanySelector.js.map +1 -0
- package/dist/components/FormattedDate.js +2 -2
- package/dist/components/HierarchyGraph.js +2 -1
- package/dist/components/HierarchyGraph.js.map +1 -1
- package/dist/components/PermissionGate.js +1 -1
- package/dist/components/PersonSelector.js +2 -0
- package/dist/components/PersonSelector.js.map +1 -0
- package/dist/components/ScanBarcodeButton.js.map +1 -1
- package/dist/components/TreeView.js +7 -7
- package/dist/components/TreeView.js.map +1 -1
- package/dist/core.esm.js +4025 -0
- package/dist/core.esm.js.map +1 -0
- package/dist/dropdown-menu.js +10 -10
- package/dist/field.js +1 -1
- package/dist/image-component.js.map +1 -1
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/index10.js +102 -1499
- package/dist/index10.js.map +1 -1
- package/dist/index11.js +1499 -37
- package/dist/index11.js.map +1 -1
- package/dist/index12.js +29 -477
- package/dist/index12.js.map +1 -1
- package/dist/index13.js +427 -231
- package/dist/index13.js.map +1 -1
- package/dist/index14.js +215 -1074
- package/dist/index14.js.map +1 -1
- package/dist/index15.js +1140 -14
- package/dist/index15.js.map +1 -1
- package/dist/index16.js +13 -19
- package/dist/index16.js.map +1 -1
- package/dist/index17.js +24 -172
- package/dist/index17.js.map +1 -1
- package/dist/index18.js +168 -175
- package/dist/index18.js.map +1 -1
- package/dist/index19.js +173 -201
- package/dist/index19.js.map +1 -1
- package/dist/index20.js +203 -69
- package/dist/index20.js.map +1 -1
- package/dist/index21.js +70 -211
- package/dist/index21.js.map +1 -1
- package/dist/index22.js +207 -117
- package/dist/index22.js.map +1 -1
- package/dist/index23.js +123 -71
- package/dist/index23.js.map +1 -1
- package/dist/index24.js +74 -11
- package/dist/index24.js.map +1 -1
- package/dist/index25.js +13 -1134
- package/dist/index25.js.map +1 -1
- package/dist/index26.js +1120 -219
- package/dist/index26.js.map +1 -1
- package/dist/index27.js +202 -2506
- package/dist/index27.js.map +1 -1
- package/dist/index28.js +2527 -23
- package/dist/index28.js.map +1 -1
- package/dist/index29.js +32 -4
- package/dist/index29.js.map +1 -1
- package/dist/index3.js +11543 -267
- package/dist/index3.js.map +1 -1
- package/dist/index30.js +3 -1124
- package/dist/index30.js.map +1 -1
- package/dist/index31.js +1 -1
- package/dist/index32.js +7 -7
- package/dist/index34.js +1 -1
- package/dist/index37.js +1 -1
- package/dist/index38.js +21 -42
- package/dist/index38.js.map +1 -1
- package/dist/index4.js +272 -132
- package/dist/index4.js.map +1 -1
- package/dist/index5.js +138 -388
- package/dist/index5.js.map +1 -1
- package/dist/index6.js +386 -7
- package/dist/index6.js.map +1 -1
- package/dist/index7.js +13 -92
- package/dist/index7.js.map +1 -1
- package/dist/index8.js +92 -43
- package/dist/index8.js.map +1 -1
- package/dist/index9.js +42 -102
- package/dist/index9.js.map +1 -1
- package/dist/lib/components/Alert/Alert.d.ts.map +1 -1
- package/dist/lib/components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/lib/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/lib/components/Button/Button.d.ts.map +1 -1
- package/dist/lib/components/Card/CardSkeleton.d.ts.map +1 -1
- package/dist/lib/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
- package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/lib/components/CompanySelector/CompanySelector.d.ts +4 -0
- package/dist/lib/components/CompanySelector/CompanySelector.d.ts.map +1 -0
- package/dist/lib/components/CompanySelector/index.d.ts +2 -0
- package/dist/lib/components/CompanySelector/index.d.ts.map +1 -0
- package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
- package/dist/lib/components/CurrencyField/CurrencyField.d.ts.map +1 -1
- package/dist/lib/components/DangerZone/DangerZone.d.ts +3 -1
- package/dist/lib/components/DangerZone/DangerZone.d.ts.map +1 -1
- package/dist/lib/components/DataTable/CompactTableSkeleton.d.ts.map +1 -1
- package/dist/lib/components/DataTable/DataTable.d.ts +1 -1
- package/dist/lib/components/DataTable/DataTable.d.ts.map +1 -1
- package/dist/lib/components/DataTable/cells/cells.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts +3 -1
- package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts.map +1 -1
- package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
- package/dist/lib/components/DataTable/hooks/useDataTable.d.ts.map +1 -1
- package/dist/lib/components/DataTable/store/store.d.ts.map +1 -1
- package/dist/lib/components/DataTable/types.d.ts +3 -0
- package/dist/lib/components/DataTable/types.d.ts.map +1 -1
- package/dist/lib/components/DatePicker/DatePicker.d.ts +2 -2
- package/dist/lib/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/lib/components/DetailField/DetailField.d.ts.map +1 -1
- package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -1
- package/dist/lib/components/DetailField/DetailSectionSkeleton.d.ts.map +1 -1
- package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
- package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
- package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/react-patches.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
- package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
- package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/collapsible.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/guard.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/set-floating-elem-position-for-link-editor.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
- package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
- package/dist/lib/components/Form/Form.d.ts.map +1 -1
- package/dist/lib/components/OTPField/OTPField.d.ts.map +1 -1
- package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
- package/dist/lib/components/PageHeader/PageHeader.d.ts.map +1 -1
- package/dist/lib/components/PasswordField/PasswordField.d.ts.map +1 -1
- package/dist/lib/components/PermissionGate/PermissionGate.d.ts +15 -4
- package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -1
- package/dist/lib/components/PermissionGate/index.d.ts +1 -1
- package/dist/lib/components/PermissionGate/index.d.ts.map +1 -1
- package/dist/lib/components/PersonSelector/PersonSelector.d.ts +4 -0
- package/dist/lib/components/PersonSelector/PersonSelector.d.ts.map +1 -0
- package/dist/lib/components/PersonSelector/index.d.ts +2 -0
- package/dist/lib/components/PersonSelector/index.d.ts.map +1 -0
- package/dist/lib/components/PhoneField/PhoneField.d.ts.map +1 -1
- package/dist/lib/components/RadioGroup/RadioGroup.d.ts.map +1 -1
- package/dist/lib/components/ScanBarcodeButton/ScanBarcodeButton.d.ts.map +1 -1
- package/dist/lib/components/Select/SelectFilter.d.ts.map +1 -1
- package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
- package/dist/lib/components/Select/components/MultiSelect/MultiSelectFilter.d.ts.map +1 -1
- package/dist/lib/components/Select/components/SingleSelect/SingleSelect.d.ts.map +1 -1
- package/dist/lib/components/Select/components/SingleSelect/SingleSelectFilter.d.ts.map +1 -1
- package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
- package/dist/lib/components/Select/hooks/useSingleSelect.d.ts.map +1 -1
- package/dist/lib/components/Select/types.d.ts +1 -1
- package/dist/lib/components/Select/types.d.ts.map +1 -1
- package/dist/lib/components/Separator/Separator.d.ts.map +1 -1
- package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/lib/components/Sonner/Sonner.d.ts.map +1 -1
- package/dist/lib/components/Sonner/toast.d.ts.map +1 -1
- package/dist/lib/components/StepProgressIndicator/StepProgressIndicator.d.ts.map +1 -1
- package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
- package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
- package/dist/lib/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/lib/components/Tabs/TabsSkeleton.d.ts.map +1 -1
- package/dist/lib/components/TextField/TextField.d.ts.map +1 -1
- package/dist/lib/components/ThemeToggle/ThemeToggle.d.ts.map +1 -1
- package/dist/lib/components/Toggle/Toggle.d.ts.map +1 -1
- package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/lib/components/TreeView/TreeView.d.ts.map +1 -1
- package/dist/lib/components/Typography/Typography.d.ts.map +1 -1
- package/dist/lib/components/UploadFile/UploadFile.d.ts.map +1 -1
- package/dist/lib/components/index.d.ts +2 -0
- package/dist/lib/components/index.d.ts.map +1 -1
- package/dist/lib/config/index.d.ts.map +1 -1
- package/dist/lib/context/LayoutModeContext.d.ts.map +1 -1
- package/dist/lib/context/ThemeContext.d.ts.map +1 -1
- package/dist/lib/hooks/useBUCurrency.d.ts.map +1 -1
- package/dist/lib/hooks/useBUTimezone.d.ts.map +1 -1
- package/dist/lib/hooks/useBarcodeScanner.d.ts.map +1 -1
- package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
- package/dist/lib/hooks/useSSE.d.ts.map +1 -1
- package/dist/lib/hooks/useTheme.d.ts.map +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts +12 -0
- package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts.map +1 -0
- package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts +4 -0
- package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts.map +1 -0
- package/dist/lib/selects/billing-cycle/index.d.ts +3 -0
- package/dist/lib/selects/billing-cycle/index.d.ts.map +1 -0
- package/dist/lib/selects/category/CategoryFilter.d.ts.map +1 -1
- package/dist/lib/selects/category/CategorySelector.d.ts.map +1 -1
- package/dist/lib/selects/cost-category/CostCategorySelector.d.ts.map +1 -1
- package/dist/lib/selects/country/CountryFilter.d.ts +12 -0
- package/dist/lib/selects/country/CountryFilter.d.ts.map +1 -0
- package/dist/lib/selects/country/CountrySelector.d.ts +4 -0
- package/dist/lib/selects/country/CountrySelector.d.ts.map +1 -0
- package/dist/lib/selects/country/index.d.ts +3 -0
- package/dist/lib/selects/country/index.d.ts.map +1 -0
- package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts +12 -0
- package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts.map +1 -0
- package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts +4 -0
- package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts.map +1 -0
- package/dist/lib/selects/feature-permission/index.d.ts +3 -0
- package/dist/lib/selects/feature-permission/index.d.ts.map +1 -0
- package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -1
- package/dist/lib/selects/index.d.ts +9 -0
- package/dist/lib/selects/index.d.ts.map +1 -1
- package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts +2 -2
- package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts.map +1 -1
- package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts +15 -0
- package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts.map +1 -0
- package/dist/lib/selects/iso-country/index.d.ts +3 -0
- package/dist/lib/selects/iso-country/index.d.ts.map +1 -0
- package/dist/lib/selects/iso-country/iso-countries.d.ts +7 -0
- package/dist/lib/selects/iso-country/iso-countries.d.ts.map +1 -0
- package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts +12 -0
- package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts.map +1 -0
- package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts +4 -0
- package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts.map +1 -0
- package/dist/lib/selects/legal-entity/index.d.ts +3 -0
- package/dist/lib/selects/legal-entity/index.d.ts.map +1 -0
- package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
- package/dist/lib/selects/purchase-order/PurchaseOrderSelector.d.ts.map +1 -1
- package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
- package/dist/lib/selects/role/RoleSelector.d.ts +4 -0
- package/dist/lib/selects/role/RoleSelector.d.ts.map +1 -0
- package/dist/lib/selects/role/index.d.ts +2 -0
- package/dist/lib/selects/role/index.d.ts.map +1 -0
- package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
- package/dist/lib/selects/site/SiteFilter.d.ts +12 -0
- package/dist/lib/selects/site/SiteFilter.d.ts.map +1 -0
- package/dist/lib/selects/site/SiteSelector.d.ts +4 -0
- package/dist/lib/selects/site/SiteSelector.d.ts.map +1 -0
- package/dist/lib/selects/site/index.d.ts +3 -0
- package/dist/lib/selects/site/index.d.ts.map +1 -0
- package/dist/lib/selects/site-group/SiteGroupFilter.d.ts +12 -0
- package/dist/lib/selects/site-group/SiteGroupFilter.d.ts.map +1 -0
- package/dist/lib/selects/site-group/SiteGroupSelector.d.ts +4 -0
- package/dist/lib/selects/site-group/SiteGroupSelector.d.ts.map +1 -0
- package/dist/lib/selects/site-group/index.d.ts +3 -0
- package/dist/lib/selects/site-group/index.d.ts.map +1 -0
- package/dist/lib/selects/supplier/SupplierSelector.d.ts.map +1 -1
- package/dist/lib/selects/supplier-item/SupplierItemFilter.d.ts.map +1 -1
- package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
- package/dist/lib/selects/tax-class/TaxClassSelector.d.ts +4 -0
- package/dist/lib/selects/tax-class/TaxClassSelector.d.ts.map +1 -0
- package/dist/lib/selects/tax-class/index.d.ts +2 -0
- package/dist/lib/selects/tax-class/index.d.ts.map +1 -0
- package/dist/lib/theme/index.d.ts.map +1 -1
- package/dist/lib/types/catalog-resolver.d.ts +222 -0
- package/dist/lib/types/catalog-resolver.d.ts.map +1 -0
- package/dist/lib/utils/axios.d.ts.map +1 -1
- package/dist/lib/utils/cn.d.ts +3 -0
- package/dist/lib/utils/cn.d.ts.map +1 -0
- package/dist/lib/utils/dagre.d.ts +2 -0
- package/dist/lib/utils/dagre.d.ts.map +1 -0
- package/dist/lib/utils/dnd-kit/core.d.ts +2 -0
- package/dist/lib/utils/dnd-kit/core.d.ts.map +1 -0
- package/dist/lib/utils/dnd-kit/sortable.d.ts +2 -0
- package/dist/lib/utils/dnd-kit/sortable.d.ts.map +1 -0
- package/dist/lib/utils/dnd-kit/utilities.d.ts +2 -0
- package/dist/lib/utils/dnd-kit/utilities.d.ts.map +1 -0
- package/dist/lib/utils/formHelpers.d.ts.map +1 -1
- package/dist/lib/utils/format.d.ts.map +1 -1
- package/dist/lib/utils/permission-deps.d.ts +9 -0
- package/dist/lib/utils/permission-deps.d.ts.map +1 -0
- package/dist/lib/utils/react-flow.d.ts +2 -0
- package/dist/lib/utils/react-flow.d.ts.map +1 -0
- package/dist/lib/utils/zod.d.ts +9 -0
- package/dist/lib/utils/zod.d.ts.map +1 -1
- package/dist/popover.js +1 -1
- package/dist/select2.js +1 -1
- package/dist/selects/billing-cycle.js +2 -0
- package/dist/selects/billing-cycle.js.map +1 -0
- package/dist/selects/cost-category.js +2 -2
- package/dist/selects/cost-category.js.map +1 -1
- package/dist/selects/country.js +2 -0
- package/dist/selects/country.js.map +1 -0
- package/dist/selects/feature-permission.js +2 -0
- package/dist/selects/feature-permission.js.map +1 -0
- package/dist/selects/iso-country.js +2 -0
- package/dist/selects/iso-country.js.map +1 -0
- package/dist/selects/legal-entity.js +2 -0
- package/dist/selects/legal-entity.js.map +1 -0
- package/dist/selects/purchase-order-item.js +1 -1
- package/dist/selects/purchase-order-item.js.map +1 -1
- package/dist/selects/role.js +2 -0
- package/dist/selects/role.js.map +1 -0
- package/dist/selects/site-group.js +2 -0
- package/dist/selects/site-group.js.map +1 -0
- package/dist/selects/site.js +2 -0
- package/dist/selects/site.js.map +1 -0
- package/dist/selects/tax-class.js +2 -0
- package/dist/selects/tax-class.js.map +1 -0
- package/dist/selects/tax-group.js +2 -2
- package/dist/selects/tax-group.js.map +1 -1
- package/dist/separator2.js +1 -1
- package/dist/sortable.esm.js +780 -0
- package/dist/sortable.esm.js.map +1 -0
- package/dist/theme/index.js.map +1 -1
- package/dist/toast.js +2 -26
- package/dist/toast.js.map +1 -1
- package/dist/tooltip2.js +1 -1
- package/dist/types/api-response.js +2 -0
- package/dist/types/api-response.js.map +1 -0
- package/dist/types/catalog-resolver.js +8 -0
- package/dist/types/catalog-resolver.js.map +1 -0
- package/dist/types/table-filter.js +17 -0
- package/dist/types/table-filter.js.map +1 -0
- package/dist/useBUTimezone.js.map +1 -1
- package/dist/useDataTable.js +152 -119
- package/dist/useDataTable.js.map +1 -1
- package/dist/useFormatters.js.map +1 -1
- package/dist/useTheme.js.map +1 -1
- package/dist/useTimer.js +2 -2
- package/dist/useTimer.js.map +1 -1
- package/dist/utilities.esm.js +333 -0
- package/dist/utilities.esm.js.map +1 -0
- package/dist/utils/axios.js +1 -1
- package/dist/utils/axios.js.map +1 -1
- package/dist/utils/cn.js +6 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/currency.js +2 -2
- package/dist/utils/dagre.js +4 -0
- package/dist/utils/dagre.js.map +1 -0
- package/dist/utils/dnd-kit/core.js +2 -0
- package/dist/utils/dnd-kit/core.js.map +1 -0
- package/dist/utils/dnd-kit/sortable.js +2 -0
- package/dist/utils/dnd-kit/sortable.js.map +1 -0
- package/dist/utils/dnd-kit/utilities.js +2 -0
- package/dist/utils/dnd-kit/utilities.js.map +1 -0
- package/dist/utils/format.js +2 -2
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/hotkeys.js +1 -1
- package/dist/utils/money.js +1 -1
- package/dist/utils/permission-deps.js +64 -0
- package/dist/utils/permission-deps.js.map +1 -0
- package/dist/utils/react-flow.js +2 -0
- package/dist/utils/react-flow.js.map +1 -0
- package/dist/utils/timezone.js +1 -1
- package/dist/utils/zod.js +11 -1
- package/dist/utils/zod.js.map +1 -1
- package/package.json +79 -3
package/dist/Sidebar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sidebar.js","sources":["../shadcn/shadcnSheet/sheet.tsx","../shadcn/shadcnSidebar/sidebar.tsx","../lib/components/Sidebar/Sidebar.tsx"],"sourcesContent":["'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nconst SheetContent = forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n side === 'top' &&\n 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n side === 'left' &&\n 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n side === 'right' &&\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetPortal>\n ),\n);\nSheetContent.displayName = DialogPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\nSheetHeader.displayName = 'SheetHeader';\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n);\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n));\nSheetTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nSheetDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport type React from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useIsMobile } from '../../lib/hooks/useIsMobile';\nimport { Button } from '../shadcnButton';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from '../shadcnDropdownMenu';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../shadcnSheet';\nimport { Skeleton } from '../shadcnSkeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../shadcnTooltip';\nimport { cn } from '../utils';\n\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3.5rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n// Accesses sidebar state from the nearest SidebarProvider\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n// Provides sidebar state and keyboard shortcut to all sidebar sub-components\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen]);\n\n // Keyboard shortcut to toggle sidebar (Cmd+B / Ctrl+B)\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n// Main sidebar container with responsive mobile Sheet and desktop fixed panel\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n overlay = false,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n overlay?: boolean;\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn('bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n data-overlay={overlay || undefined}\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative bg-transparent transition-[width] duration-200 ease-linear',\n overlay\n ? 'w-(--sidebar-width-icon)'\n : cn(\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ),\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n overlay && state === 'expanded' && 'z-30 shadow-xl',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n// Toggle button that calls toggleSidebar from context\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n// Invisible rail at sidebar edge for drag/click toggling\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Main content area wrapper that adjusts for sidebar inset variant\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Sticky header area at the top of the sidebar\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Sticky footer area at the bottom of the sidebar\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Scrollable content area between header and footer\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Groups related menu items with an optional label\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\n// Label for a sidebar group, hides when collapsed to icon mode\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Action button positioned in the top-right of a sidebar group\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Content wrapper within a sidebar group\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\n// Unordered list container for sidebar menu items\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n}\n\n// List item wrapper for a single menu entry\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding,background-color,color] duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// Interactive menu button with tooltip support in collapsed icon mode\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltipProps} />\n </Tooltip>\n );\n}\n\n// Action button overlaid on a menu item (e.g., \"more\" or \"add\" buttons)\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Badge positioned on a menu item (e.g., unread count)\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Skeleton loading placeholder for a menu item\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n// Nested submenu list container\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// List item wrapper within a submenu\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\n// Link/button within a submenu item\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMode = 'expanded' | 'collapsed' | 'hover';\n\nconst SIDEBAR_MODE_OPTIONS: { value: SidebarMode; label: string }[] = [\n { value: 'expanded', label: 'Expanded' },\n { value: 'collapsed', label: 'Collapsed' },\n { value: 'hover', label: 'Expand on hover' },\n];\n\n// Manages sidebar mode state with localStorage persistence and hover behavior\nfunction useSidebarMode(storageKey = 'sidebar-mode') {\n const { setOpen } = useSidebar();\n\n const [sidebarMode, setSidebarMode] = useState<SidebarMode>(() => {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'expanded' || stored === 'collapsed' || stored === 'hover') return stored;\n return 'expanded';\n });\n\n // Stable ref to avoid re-triggering effect when setOpen identity changes\n const setOpenRef = useRef(setOpen);\n setOpenRef.current = setOpen;\n\n // Sync sidebar open/close when mode changes\n useEffect(() => {\n if (sidebarMode === 'expanded') {\n setOpenRef.current(true);\n } else {\n setOpenRef.current(false);\n }\n }, [sidebarMode]);\n\n function handleModeChange(mode: SidebarMode) {\n setSidebarMode(mode);\n localStorage.setItem(storageKey, mode);\n }\n\n function handleMouseEnter() {\n if (sidebarMode === 'hover') setOpen(true);\n }\n\n function handleMouseLeave() {\n if (sidebarMode === 'hover') setOpen(false);\n }\n\n return {\n sidebarMode,\n setSidebarMode: handleModeChange,\n sidebarProps: {\n overlay: sidebarMode === 'hover',\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n },\n controlProps: {\n sidebarMode,\n onSidebarModeChange: handleModeChange,\n },\n };\n}\n\n// Renders a dropdown menu for selecting the sidebar display mode\nconst SidebarControl = ({\n sidebarMode,\n onSidebarModeChange,\n}: {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton tooltip=\"Sidebar control\">\n <PanelLeftIcon />\n <span>Sidebar control</span>\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"start\" sideOffset={8} className=\"w-48\">\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">Sidebar control</DropdownMenuLabel>\n {SIDEBAR_MODE_OPTIONS.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => onSidebarModeChange(option.value)} className=\"gap-2\">\n <span className=\"flex size-3.5 items-center justify-center\">\n {sidebarMode === option.value && <span className=\"size-1.5 rounded-full bg-foreground\" />}\n </span>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarControl,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n sidebarMenuButtonVariants,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n useSidebar,\n useSidebarMode,\n};\n\nexport type { SidebarMode };\n","import { ChevronRight } from 'lucide-react';\nimport type * as React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport {\n Sidebar as ShadcnSidebar,\n SidebarContent as ShadcnSidebarContent,\n SidebarControl as ShadcnSidebarControl,\n SidebarFooter as ShadcnSidebarFooter,\n SidebarGroup as ShadcnSidebarGroup,\n SidebarGroupContent as ShadcnSidebarGroupContent,\n SidebarGroupLabel as ShadcnSidebarGroupLabel,\n SidebarMenu as ShadcnSidebarMenu,\n SidebarMenuButton as ShadcnSidebarMenuButton,\n SidebarMenuItem as ShadcnSidebarMenuItem,\n SidebarMenuSub as ShadcnSidebarMenuSub,\n SidebarMenuSubButton as ShadcnSidebarMenuSubButton,\n SidebarMenuSubItem as ShadcnSidebarMenuSubItem,\n SidebarRail as ShadcnSidebarRail,\n useSidebarMode as shadcnUseSidebarMode,\n} from '../../../shadcn/shadcnSidebar';\n\nexport interface SidebarNavChild {\n title: string;\n path: string;\n}\n\nexport interface SidebarNavItem {\n title: string;\n icon: React.ComponentType<{ className?: string }>;\n path: string;\n children?: SidebarNavChild[];\n // Optional trailing element (e.g. a lock chip), right-aligned after the title\n endAdornment?: React.ReactNode;\n // When true the row is greyed and non-navigating (still visible)\n disabled?: boolean;\n}\n\nexport interface SidebarNavGroup {\n label: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarProps {\n groups: SidebarNavGroup[];\n topOffset?: number;\n}\n\n// Renders a collapsible menu item with a submenu\nconst CollapsibleItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnCollapsible\n defaultOpen={item.children?.some((child) => pathname === child.path)}\n className=\"group/collapsible\"\n >\n <ShadcnSidebarMenuItem>\n <ShadcnCollapsibleTrigger asChild>\n <ShadcnSidebarMenuButton tooltip={item.title} isActive={pathname.startsWith(item.path)}>\n <item.icon />\n <span>{item.title}</span>\n <ChevronRight className=\"ml-auto size-4 transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\" />\n </ShadcnSidebarMenuButton>\n </ShadcnCollapsibleTrigger>\n <ShadcnCollapsibleContent>\n <ShadcnSidebarMenuSub>\n {item.children?.map((child) => (\n <ShadcnSidebarMenuSubItem key={child.path}>\n <ShadcnSidebarMenuSubButton isActive={pathname === child.path} onClick={() => navigate(child.path)}>\n <span>{child.title}</span>\n </ShadcnSidebarMenuSubButton>\n </ShadcnSidebarMenuSubItem>\n ))}\n </ShadcnSidebarMenuSub>\n </ShadcnCollapsibleContent>\n </ShadcnSidebarMenuItem>\n </ShadcnCollapsible>\n);\n\n// Renders a flat menu item without children\nconst FlatItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnSidebarMenuItem>\n <ShadcnSidebarMenuButton\n tooltip={item.title}\n isActive={pathname === item.path || pathname.startsWith(`${item.path}/`)}\n onClick={() => (item.disabled ? undefined : navigate(item.path))}\n aria-disabled={item.disabled}\n className={item.disabled ? 'opacity-60' : undefined}\n >\n <item.icon />\n <span>{item.title}</span>\n {item.endAdornment && <span className=\"ml-auto flex items-center\">{item.endAdornment}</span>}\n </ShadcnSidebarMenuButton>\n </ShadcnSidebarMenuItem>\n);\n\n// Data-driven sidebar that renders grouped nav items with collapsible support\nexport const Sidebar: React.FC<SidebarProps> = ({ groups, topOffset = 14 }) => {\n const location = useLocation();\n const navigate = useNavigate();\n const { sidebarProps, controlProps } = shadcnUseSidebarMode();\n\n return (\n <ShadcnSidebar\n {...sidebarProps}\n collapsible=\"icon\"\n style={{\n top: `calc(var(--spacing) * ${topOffset})`,\n height: `calc(100svh - calc(var(--spacing) * ${topOffset}))`,\n }}\n >\n <ShadcnSidebarContent>\n {groups.map((group) => (\n <ShadcnSidebarGroup key={group.label}>\n <ShadcnSidebarGroupLabel className=\"group-data-[collapsible=icon]:mt-0\">\n {group.label}\n </ShadcnSidebarGroupLabel>\n <ShadcnSidebarGroupContent>\n <ShadcnSidebarMenu>\n {group.items.map((item) =>\n item.children ? (\n <CollapsibleItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ) : (\n <FlatItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ),\n )}\n </ShadcnSidebarMenu>\n </ShadcnSidebarGroupContent>\n </ShadcnSidebarGroup>\n ))}\n </ShadcnSidebarContent>\n\n <ShadcnSidebarFooter>\n <ShadcnSidebarControl {...controlProps} />\n </ShadcnSidebarFooter>\n\n <ShadcnSidebarRail />\n </ShadcnSidebar>\n );\n};\n\nSidebar.displayName = 'Sidebar';\n\n// Re-export layout primitives consumers need alongside the sidebar\nexport {\n SidebarInset,\n SidebarProvider,\n} from '../../../shadcn/shadcnSidebar';\n"],"names":["DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","open","Sidebar","PanelLeftIcon","ShadcnCollapsible","ShadcnSidebarMenuItem","ShadcnCollapsibleTrigger","ShadcnSidebarMenuButton","ShadcnCollapsibleContent","ShadcnSidebarMenuSub","ShadcnSidebarMenuSubItem","ShadcnSidebarMenuSubButton","shadcnUseSidebarMode","ShadcnSidebar","ShadcnSidebarContent","ShadcnSidebarGroup","ShadcnSidebarGroupLabel","ShadcnSidebarGroupContent","ShadcnSidebarMenu","ShadcnSidebarFooter","ShadcnSidebarControl","ShadcnSidebarRail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Sidebar.js","sources":["../shadcn/shadcnSheet/sheet.tsx","../shadcn/shadcnSidebar/sidebar.tsx","../lib/components/Sidebar/Sidebar.tsx"],"sourcesContent":["'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nconst SheetContent = forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n side === 'top' &&\n 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n side === 'left' &&\n 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n side === 'right' &&\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetPortal>\n ),\n);\nSheetContent.displayName = DialogPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\nSheetHeader.displayName = 'SheetHeader';\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n);\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n));\nSheetTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nSheetDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport type React from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useIsMobile } from '../../lib/hooks/useIsMobile';\nimport { Button } from '../shadcnButton';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from '../shadcnDropdownMenu';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../shadcnSheet';\nimport { Skeleton } from '../shadcnSkeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../shadcnTooltip';\nimport { cn } from '../utils';\n\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3.5rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n// Accesses sidebar state from the nearest SidebarProvider\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n// Provides sidebar state and keyboard shortcut to all sidebar sub-components\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen]);\n\n // Keyboard shortcut to toggle sidebar (Cmd+B / Ctrl+B)\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n// Main sidebar container with responsive mobile Sheet and desktop fixed panel\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n overlay = false,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n overlay?: boolean;\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn('bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n data-overlay={overlay || undefined}\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative bg-transparent transition-[width] duration-200 ease-linear',\n overlay\n ? 'w-(--sidebar-width-icon)'\n : cn(\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ),\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n overlay && state === 'expanded' && 'z-30 shadow-xl',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n// Toggle button that calls toggleSidebar from context\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n// Invisible rail at sidebar edge for drag/click toggling\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Main content area wrapper that adjusts for sidebar inset variant\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Sticky header area at the top of the sidebar\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Sticky footer area at the bottom of the sidebar\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Scrollable content area between header and footer\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Groups related menu items with an optional label\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\n// Label for a sidebar group, hides when collapsed to icon mode\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Action button positioned in the top-right of a sidebar group\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Content wrapper within a sidebar group\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\n// Unordered list container for sidebar menu items\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n}\n\n// List item wrapper for a single menu entry\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding,background-color,color] duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// Interactive menu button with tooltip support in collapsed icon mode\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltipProps} />\n </Tooltip>\n );\n}\n\n// Action button overlaid on a menu item (e.g., \"more\" or \"add\" buttons)\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Badge positioned on a menu item (e.g., unread count)\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Skeleton loading placeholder for a menu item\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n// Nested submenu list container\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// List item wrapper within a submenu\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\n// Link/button within a submenu item\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMode = 'expanded' | 'collapsed' | 'hover';\n\nconst SIDEBAR_MODE_OPTIONS: { value: SidebarMode; label: string }[] = [\n { value: 'expanded', label: 'Expanded' },\n { value: 'collapsed', label: 'Collapsed' },\n { value: 'hover', label: 'Expand on hover' },\n];\n\n// Manages sidebar mode state with localStorage persistence and hover behavior\nfunction useSidebarMode(storageKey = 'sidebar-mode') {\n const { setOpen } = useSidebar();\n\n const [sidebarMode, setSidebarMode] = useState<SidebarMode>(() => {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'expanded' || stored === 'collapsed' || stored === 'hover') return stored;\n return 'expanded';\n });\n\n // Stable ref to avoid re-triggering effect when setOpen identity changes\n const setOpenRef = useRef(setOpen);\n setOpenRef.current = setOpen;\n\n // Sync sidebar open/close when mode changes\n useEffect(() => {\n if (sidebarMode === 'expanded') {\n setOpenRef.current(true);\n } else {\n setOpenRef.current(false);\n }\n }, [sidebarMode]);\n\n function handleModeChange(mode: SidebarMode) {\n setSidebarMode(mode);\n localStorage.setItem(storageKey, mode);\n }\n\n function handleMouseEnter() {\n if (sidebarMode === 'hover') setOpen(true);\n }\n\n function handleMouseLeave() {\n if (sidebarMode === 'hover') setOpen(false);\n }\n\n return {\n sidebarMode,\n setSidebarMode: handleModeChange,\n sidebarProps: {\n overlay: sidebarMode === 'hover',\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n },\n controlProps: {\n sidebarMode,\n onSidebarModeChange: handleModeChange,\n },\n };\n}\n\n// Renders a dropdown menu for selecting the sidebar display mode\nconst SidebarControl = ({\n sidebarMode,\n onSidebarModeChange,\n}: {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton tooltip=\"Sidebar control\">\n <PanelLeftIcon />\n <span>Sidebar control</span>\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"start\" sideOffset={8} className=\"w-48\">\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">Sidebar control</DropdownMenuLabel>\n {SIDEBAR_MODE_OPTIONS.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => onSidebarModeChange(option.value)} className=\"gap-2\">\n <span className=\"flex size-3.5 items-center justify-center\">\n {sidebarMode === option.value && <span className=\"size-1.5 rounded-full bg-foreground\" />}\n </span>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarControl,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n sidebarMenuButtonVariants,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n useSidebar,\n useSidebarMode,\n};\n\nexport type { SidebarMode };\n","import { ChevronRight } from 'lucide-react';\nimport type * as React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport {\n Sidebar as ShadcnSidebar,\n SidebarContent as ShadcnSidebarContent,\n SidebarControl as ShadcnSidebarControl,\n SidebarFooter as ShadcnSidebarFooter,\n SidebarGroup as ShadcnSidebarGroup,\n SidebarGroupContent as ShadcnSidebarGroupContent,\n SidebarGroupLabel as ShadcnSidebarGroupLabel,\n SidebarMenu as ShadcnSidebarMenu,\n SidebarMenuButton as ShadcnSidebarMenuButton,\n SidebarMenuItem as ShadcnSidebarMenuItem,\n SidebarMenuSub as ShadcnSidebarMenuSub,\n SidebarMenuSubButton as ShadcnSidebarMenuSubButton,\n SidebarMenuSubItem as ShadcnSidebarMenuSubItem,\n SidebarRail as ShadcnSidebarRail,\n useSidebarMode as shadcnUseSidebarMode,\n} from '../../../shadcn/shadcnSidebar';\n\nexport interface SidebarNavChild {\n title: string;\n path: string;\n}\n\nexport interface SidebarNavItem {\n title: string;\n icon: React.ComponentType<{ className?: string }>;\n path: string;\n children?: SidebarNavChild[];\n endAdornment?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface SidebarNavGroup {\n label: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarProps {\n groups: SidebarNavGroup[];\n topOffset?: number;\n}\n\n// Renders a collapsible menu item with a submenu\nconst CollapsibleItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnCollapsible\n defaultOpen={item.children?.some((child) => pathname === child.path)}\n className=\"group/collapsible\"\n >\n <ShadcnSidebarMenuItem>\n <ShadcnCollapsibleTrigger asChild>\n <ShadcnSidebarMenuButton tooltip={item.title} isActive={pathname.startsWith(item.path)}>\n <item.icon />\n <span>{item.title}</span>\n <ChevronRight className=\"ml-auto size-4 transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\" />\n </ShadcnSidebarMenuButton>\n </ShadcnCollapsibleTrigger>\n <ShadcnCollapsibleContent>\n <ShadcnSidebarMenuSub>\n {item.children?.map((child) => (\n <ShadcnSidebarMenuSubItem key={child.path}>\n <ShadcnSidebarMenuSubButton isActive={pathname === child.path} onClick={() => navigate(child.path)}>\n <span>{child.title}</span>\n </ShadcnSidebarMenuSubButton>\n </ShadcnSidebarMenuSubItem>\n ))}\n </ShadcnSidebarMenuSub>\n </ShadcnCollapsibleContent>\n </ShadcnSidebarMenuItem>\n </ShadcnCollapsible>\n);\n\n// Renders a flat menu item without children\nconst FlatItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnSidebarMenuItem>\n <ShadcnSidebarMenuButton\n tooltip={item.title}\n isActive={pathname === item.path || pathname.startsWith(`${item.path}/`)}\n onClick={() => (item.disabled ? undefined : navigate(item.path))}\n aria-disabled={item.disabled}\n className={item.disabled ? 'opacity-60' : undefined}\n >\n <item.icon />\n <span>{item.title}</span>\n {item.endAdornment && <span className=\"ml-auto flex items-center\">{item.endAdornment}</span>}\n </ShadcnSidebarMenuButton>\n </ShadcnSidebarMenuItem>\n);\n\n// Data-driven sidebar that renders grouped nav items with collapsible support\nexport const Sidebar: React.FC<SidebarProps> = ({ groups, topOffset = 14 }) => {\n const location = useLocation();\n const navigate = useNavigate();\n const { sidebarProps, controlProps } = shadcnUseSidebarMode();\n\n return (\n <ShadcnSidebar\n {...sidebarProps}\n collapsible=\"icon\"\n style={{\n top: `calc(var(--spacing) * ${topOffset})`,\n height: `calc(100svh - calc(var(--spacing) * ${topOffset}))`,\n }}\n >\n <ShadcnSidebarContent>\n {groups.map((group) => (\n <ShadcnSidebarGroup key={group.label}>\n <ShadcnSidebarGroupLabel className=\"group-data-[collapsible=icon]:mt-0\">\n {group.label}\n </ShadcnSidebarGroupLabel>\n <ShadcnSidebarGroupContent>\n <ShadcnSidebarMenu>\n {group.items.map((item) =>\n item.children ? (\n <CollapsibleItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ) : (\n <FlatItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ),\n )}\n </ShadcnSidebarMenu>\n </ShadcnSidebarGroupContent>\n </ShadcnSidebarGroup>\n ))}\n </ShadcnSidebarContent>\n\n <ShadcnSidebarFooter>\n <ShadcnSidebarControl {...controlProps} />\n </ShadcnSidebarFooter>\n\n <ShadcnSidebarRail />\n </ShadcnSidebar>\n );\n};\n\nSidebar.displayName = 'Sidebar';\n\n// Re-export layout primitives consumers need alongside the sidebar\nexport {\n SidebarInset,\n SidebarProvider,\n} from '../../../shadcn/shadcnSidebar';\n"],"names":["DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","open","Sidebar","PanelLeftIcon","ShadcnCollapsible","ShadcnSidebarMenuItem","ShadcnCollapsibleTrigger","ShadcnSidebarMenuButton","ShadcnCollapsibleContent","ShadcnSidebarMenuSub","ShadcnSidebarMenuSubItem","ShadcnSidebarMenuSubButton","shadcnUseSidebarMode","ShadcnSidebar","ShadcnSidebarContent","ShadcnSidebarGroup","ShadcnSidebarGroupLabel","ShadcnSidebarGroupContent","ShadcnSidebarMenu","ShadcnSidebarFooter","ShadcnSidebarControl","ShadcnSidebarRail"],"mappings":";;;;;;;;;;;;;;;AAQA,MAAM,QAAQA,IAAgB;AAM9B,MAAM,cAAcC,MAAgB;AAEpC,MAAM,YAAA,GAAe,WAGnB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA;AAAA,EAACC,OAAgB;AAAA,EAAhB;AAAA,IACC,SAAA,EAAW,EAAA;AAAA,MACT,wJAAA;AAAA,MACA;AAAA,KACF;AAAA,IACC,GAAG,KAAA;AAAA,IACJ;AAAA;AACF,CACD,CAAA;AACD,YAAA,CAAa,WAAA,GAAcA,OAAgB,CAAQ,WAAA;AAMnD,MAAM,YAAA,GAAe,UAAA;AAAA,EACnB,CAAC,EAAE,IAAA,GAAO,OAAA,EAAS,SAAA,EAAW,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,qBAClD,IAAA,CAAC,WAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,oBACd,IAAA;AAAA,MAACC,OAAgB;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA,UACT,kMAAA;AAAA,UACA,SAAS,KAAA,IACP,mGAAA;AAAA,UACF,SAAS,QAAA,IACP,4GAAA;AAAA,UACF,SAAS,MAAA,IACP,+HAAA;AAAA,UACF,SAAS,OAAA,IACP,kIAAA;AAAA,UACF;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD,IAAA,CAACC,KAAgB,EAAhB,EAAsB,WAAU,+QAAA,EAC/B,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,CAAA,EAAA,EAAE,WAAU,SAAA,EAAU,CAAA;AAAA,4BACvB,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,OAAA,EAAK;AAAA,WAAA,EACjC;AAAA;AAAA;AAAA;AACF,GAAA,EACF;AAEJ,CAAA;AACA,YAAA,CAAa,WAAA,GAAcD,OAAgB,CAAQ,WAAA;AAEnD,MAAM,WAAA,GAAc,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBACzC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,kDAAA,EAAoD,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAEhG,WAAA,CAAY,WAAA,GAAc,aAAA;AAO1B,MAAM,UAAA,GAAa,WAGjB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA,CAACE,KAAgB,EAAhB,EAAsB,KAAU,SAAA,EAAW,EAAA,CAAG,yCAAyC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAChH,CAAA;AACD,UAAA,CAAW,WAAA,GAAcA,KAAgB,CAAM,WAAA;AAE/C,MAAM,gBAAA,GAAmB,WAGvB,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC1B,GAAA,CAACC,WAAgB,EAAhB,EAA4B,KAAU,SAAA,EAAW,EAAA,CAAG,iCAAiC,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAC9G,CAAA;AACD,gBAAA,CAAiB,WAAA,GAAcA,WAAgB,CAAY,WAAA;;ACpE3D,MAAM,aAAA,GAAgB,OAAA;AACtB,MAAM,oBAAA,GAAuB,OAAA;AAC7B,MAAM,kBAAA,GAAqB,QAAA;AAC3B,MAAM,yBAAA,GAA4B,GAAA;AAYlC,MAAM,cAAA,GAAiB,cAA0C,IAAI,CAAA;AAGrE,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,OAAA,GAAU,WAAW,cAAc,CAAA;AACzC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAAA,EACrE;AACA,EAAA,OAAO,OAAA;AACT;AAGA,SAAS,eAAA,CAAgB;AAAA,EACvB,WAAA,GAAc,IAAA;AAAA,EACd,IAAA,EAAM,QAAA;AAAA,EACN,YAAA,EAAc,WAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIG;AACD,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAI,SAAS,KAAK,CAAA;AAElD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,WAAW,CAAA;AAC9C,EAAA,MAAM,OAAO,QAAA,IAAY,KAAA;AACzB,EAAA,MAAM,OAAA,GAAU,WAAA;AAAA,IACd,CAAC,KAAA,KAAmD;AAClD,MAAA,MAAM,YAAY,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAI,CAAA,GAAI,KAAA;AAC9D,MAAA,IAAI,WAAA,EAAa;AACf,QAAA,WAAA,CAAY,SAAS,CAAA;AAAA,MACvB,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,SAAS,CAAA;AAAA,MACpB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,aAAa,IAAI;AAAA,GACpB;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAY,MAAM;AACtC,IAAA,OAAO,QAAA,GAAW,aAAA,CAAc,CAACC,KAAAA,KAAS,CAACA,KAAI,CAAA,GAAI,OAAA,CAAQ,CAACA,KAAAA,KAAS,CAACA,KAAI,CAAA;AAAA,EAC5E,CAAA,EAAG,CAAC,QAAA,EAAU,OAAO,CAAC,CAAA;AAGtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC9C,MAAA,IAAI,MAAM,GAAA,KAAQ,yBAAA,KAA8B,KAAA,CAAM,OAAA,IAAW,MAAM,OAAA,CAAA,EAAU;AAC/E,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,aAAa,CAAA;AAAA,EAClE,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAElB,EAAA,MAAM,KAAA,GAAQ,OAAO,UAAA,GAAa,WAAA;AAElC,EAAA,MAAM,YAAA,GAAe,OAAA;AAAA,IACnB,OAAO;AAAA,MACL,KAAA;AAAA,MACA,IAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,IAAA,EAAM,OAAA,EAAS,QAAA,EAAU,YAAY,aAAa;AAAA,GAC5D;AAEA,EAAA,uBACE,GAAA,CAAC,eAAe,QAAA,EAAf,EAAwB,OAAO,YAAA,EAC9B,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAe,CAAA,EAC9B,QAAA,kBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,KAAA,EACE;AAAA,QACE,iBAAA,EAAmB,aAAA;AAAA,QACnB,sBAAA,EAAwB,kBAAA;AAAA,QACxB,GAAG;AAAA,OACL;AAAA,MAEF,SAAA,EAAW,EAAA,CAAG,iFAAA,EAAmF,SAAS,CAAA;AAAA,MACzG,GAAG,KAAA;AAAA,MAEH;AAAA;AAAA,KAEL,CAAA,EACF,CAAA;AAEJ;AAGA,SAASC,SAAA,CAAQ;AAAA,EACf,IAAA,GAAO,MAAA;AAAA,EACP,OAAA,GAAU,SAAA;AAAA,EACV,WAAA,GAAc,WAAA;AAAA,EACd,OAAA,GAAU,KAAA;AAAA,EACV,SAAA;AAAA,EACA,QAAA;AAAA,EACA,GAAG;AACL,CAAA,EAKG;AACD,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,aAAA,KAAkB,UAAA,EAAW;AAElE,EAAA,IAAI,gBAAgB,MAAA,EAAQ;AAC1B,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,SAAA;AAAA,QACV,SAAA,EAAW,EAAA,CAAG,6EAAA,EAA+E,SAAS,CAAA;AAAA,QACrG,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,2BACG,KAAA,EAAA,EAAM,IAAA,EAAM,YAAY,YAAA,EAAc,aAAA,EAAgB,GAAG,KAAA,EACxD,QAAA,kBAAA,IAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,SAAA;AAAA,QACb,WAAA,EAAU,SAAA;AAAA,QACV,aAAA,EAAY,MAAA;AAAA,QACZ,SAAA,EAAU,8EAAA;AAAA,QACV,KAAA,EACE;AAAA,UACE,iBAAA,EAAmB;AAAA,SACrB;AAAA,QAEF,IAAA;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAA,IAAA,CAAC,WAAA,EAAA,EAAY,WAAU,SAAA,EACrB,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,cAAW,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,4BACnB,GAAA,CAAC,oBAAiB,QAAA,EAAA,8BAAA,EAA4B;AAAA,WAAA,EAChD,CAAA;AAAA,0BACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA+B,QAAA,EAAS;AAAA;AAAA;AAAA,KACzD,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,oDAAA;AAAA,MACV,YAAA,EAAY,KAAA;AAAA,MACZ,kBAAA,EAAkB,KAAA,KAAU,WAAA,GAAc,WAAA,GAAc,EAAA;AAAA,MACxD,cAAA,EAAc,OAAA;AAAA,MACd,WAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAU,SAAA;AAAA,MACV,gBAAc,OAAA,IAAW,MAAA;AAAA,MAEzB,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,aAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,qEAAA;AAAA,cACA,UACI,0BAAA,GACA,EAAA;AAAA,gBACE,qBAAA;AAAA,gBACA,wCAAA;AAAA,gBACA,oCAAA;AAAA,gBACA,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,OAAA,GAClC,kFAAA,GACA;AAAA;AACN;AACN;AAAA,SACF;AAAA,wBACA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,mBAAA;AAAA,YACV,SAAA,EAAW,EAAA;AAAA,cACT,sHAAA;AAAA,cACA,IAAA,KAAS,SACL,gFAAA,GACA,kFAAA;AAAA,cACJ,OAAA,KAAY,UAAA,IAAc,OAAA,KAAY,OAAA,GAClC,0FAAA,GACA,yHAAA;AAAA,cACJ,OAAA,IAAW,UAAU,UAAA,IAAc,gBAAA;AAAA,cACnC;AAAA,aACF;AAAA,YACC,GAAG,KAAA;AAAA,YAEJ,QAAA,kBAAA,GAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,cAAA,EAAa,SAAA;AAAA,gBACb,WAAA,EAAU,eAAA;AAAA,gBACV,SAAA,EAAU,kNAAA;AAAA,gBAET;AAAA;AAAA;AACH;AAAA;AACF;AAAA;AAAA,GACF;AAEJ;AA0BA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAmC;AAC5E,EAAA,MAAM,EAAE,aAAA,EAAc,GAAI,UAAA,EAAW;AAErC,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,MAAA;AAAA,MACb,WAAA,EAAU,cAAA;AAAA,MACV,YAAA,EAAW,gBAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAM,gBAAA;AAAA,MACN,SAAA,EAAW,EAAA;AAAA,QACT,iPAAA;AAAA,QACA,0EAAA;AAAA,QACA,wHAAA;AAAA,QACA,yJAAA;AAAA,QACA,2DAAA;AAAA,QACA,2DAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,oDAAA;AAAA,QACA,iNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAeA,SAAS,aAAA,CAAc,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,cAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,yBAAA,EAA2B,SAAS,CAAA;AAAA,MACjD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC5E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,SAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,YAAA,CAAa,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AAC1E,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,cAAA,EAAa,OAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA;AAAA,MACnE,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,SAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,GAAG;AACL,CAAA,EAAwD;AACtD,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,KAAA;AAE9B,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,0OAAA;AAAA,QACA,6EAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AA0BA,SAAS,mBAAA,CAAoB,EAAE,SAAA,EAAW,GAAG,OAAM,EAAgC;AACjF,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,MACxC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AACxE,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,oCAAA,EAAsC,SAAS,CAAA;AAAA,MAC5D,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC5E,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,WAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,0BAAA,EAA4B,SAAS,CAAA;AAAA,MAClD,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,MAAM,yBAAA,GAA4B,GAAA;AAAA,EAChC,u1BAAA;AAAA,EACA;AAAA,IACE,QAAA,EAAU;AAAA,MACR,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,8DAAA;AAAA,QACT,OAAA,EACE;AAAA,OACJ;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,OAAA,EAAS,aAAA;AAAA,QACT,EAAA,EAAI,aAAA;AAAA,QACJ,EAAA,EAAI;AAAA;AACN,KACF;AAAA,IACA,eAAA,EAAiB;AAAA,MACf,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM;AAAA;AACR;AAEJ,CAAA;AAGA,SAAS,iBAAA,CAAkB;AAAA,EACzB,OAAA,GAAU,KAAA;AAAA,EACV,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,SAAA;AAAA,EACP,OAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIoD;AAClD,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,QAAA;AAC9B,EAAA,MAAM,EAAE,QAAA,EAAU,KAAA,EAAM,GAAI,UAAA,EAAW;AAEvC,EAAA,MAAM,MAAA,mBACJ,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,GAAG,yBAAA,CAA0B,EAAE,SAAS,IAAA,EAAM,GAAG,SAAS,CAAA;AAAA,MACpE,GAAG;AAAA;AAAA,GACN;AAGF,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,MAAM,eAAe,OAAO,OAAA,KAAY,WAAW,EAAE,QAAA,EAAU,SAAQ,GAAI,OAAA;AAE3E,EAAA,4BACG,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,MAAA,EAAO,CAAA;AAAA,oBAChC,GAAA,CAAC,cAAA,EAAA,EAAe,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAM,QAAA,EAAS,MAAA,EAAQ,KAAA,KAAU,WAAA,IAAe,QAAA,EAAW,GAAG,YAAA,EAAc;AAAA,GAAA,EAC3G,CAAA;AAEJ;AAwFA,SAAS,cAAA,CAAe,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC3E,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAa,UAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,gGAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,kBAAA,CAAmB,EAAE,SAAA,EAAW,GAAG,OAAM,EAA+B;AAC/E,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,8BAAA,EAAgC,SAAS,CAAA;AAAA,MACtD,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAAS,oBAAA,CAAqB;AAAA,EAC5B,OAAA,GAAU,KAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAIG;AACD,EAAA,MAAM,IAAA,GAAO,UAAU,IAAA,GAAO,GAAA;AAE9B,EAAA,uBACE,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,yBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,WAAA,EAAW,IAAA;AAAA,MACX,aAAA,EAAa,QAAA;AAAA,MACb,SAAA,EAAW,EAAA;AAAA,QACT,+eAAA;AAAA,QACA,wFAAA;AAAA,QACA,SAAS,IAAA,IAAQ,SAAA;AAAA,QACjB,SAAS,IAAA,IAAQ,SAAA;AAAA,QACjB,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAIA,MAAM,oBAAA,GAAgE;AAAA,EACpE,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAW;AAAA,EACvC,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACzC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,iBAAA;AAC3B,CAAA;AAGA,SAAS,cAAA,CAAe,aAAa,cAAA,EAAgB;AACnD,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,UAAA,EAAW;AAE/B,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,SAAsB,MAAM;AAChE,IAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA;AAC9C,IAAA,IAAI,WAAW,UAAA,IAAc,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,SAAS,OAAO,MAAA;AAClF,IAAA,OAAO,UAAA;AAAA,EACT,CAAC,CAAA;AAGD,EAAA,MAAM,UAAA,GAAa,OAAO,OAAO,CAAA;AACjC,EAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AAGrB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,gBAAgB,UAAA,EAAY;AAC9B,MAAA,UAAA,CAAW,QAAQ,IAAI,CAAA;AAAA,IACzB,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,SAAS,iBAAiB,IAAA,EAAmB;AAC3C,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,YAAA,CAAa,OAAA,CAAQ,YAAY,IAAI,CAAA;AAAA,EACvC;AAEA,EAAA,SAAS,gBAAA,GAAmB;AAC1B,IAAA,IAAI,WAAA,KAAgB,OAAA,EAAS,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC3C;AAEA,EAAA,SAAS,gBAAA,GAAmB;AAC1B,IAAA,IAAI,WAAA,KAAgB,OAAA,EAAS,OAAA,CAAQ,KAAK,CAAA;AAAA,EAC5C;AAEA,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,cAAA,EAAgB,gBAAA;AAAA,IAChB,YAAA,EAAc;AAAA,MACZ,SAAS,WAAA,KAAgB,OAAA;AAAA,MACzB,YAAA,EAAc,gBAAA;AAAA,MACd,YAAA,EAAc;AAAA,KAChB;AAAA,IACA,YAAA,EAAc;AAAA,MACZ,WAAA;AAAA,MACA,mBAAA,EAAqB;AAAA;AACvB,GACF;AACF;AAGA,MAAM,iBAAiB,CAAC;AAAA,EACtB,WAAA;AAAA,EACA;AACF,CAAA,KAGM;AACJ,EAAA,4BACG,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,uBAAoB,OAAA,EAAO,IAAA,EAC1B,QAAA,kBAAA,IAAA,CAAC,iBAAA,EAAA,EAAkB,SAAQ,iBAAA,EACzB,QAAA,EAAA;AAAA,sBAAA,GAAA,CAACC,SAAA,EAAA,EAAc,CAAA;AAAA,sBACf,GAAA,CAAC,UAAK,QAAA,EAAA,iBAAA,EAAe;AAAA,KAAA,EACvB,CAAA,EACF,CAAA;AAAA,oBACA,IAAA,CAAC,uBAAoB,IAAA,EAAK,KAAA,EAAM,OAAM,OAAA,EAAQ,UAAA,EAAY,CAAA,EAAG,SAAA,EAAU,MAAA,EACrE,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,2CAAA,EAA4C,QAAA,EAAA,iBAAA,EAAe,CAAA;AAAA,MACvF,oBAAA,CAAqB,GAAA,CAAI,CAAC,MAAA,qBACzB,IAAA,CAAC,gBAAA,EAAA,EAAoC,OAAA,EAAS,MAAM,mBAAA,CAAoB,MAAA,CAAO,KAAK,CAAA,EAAG,WAAU,OAAA,EAC/F,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA,WAAA,KAAgB,MAAA,CAAO,yBAAS,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,CAAA,EACzF,CAAA;AAAA,QACC,MAAA,CAAO;AAAA,OAAA,EAAA,EAJa,MAAA,CAAO,KAK9B,CACD;AAAA,KAAA,EACH;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;;AC3qBA,MAAM,kBAID,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,UAAS,qBAC/B,GAAA;AAAA,EAACC,WAAA;AAAA,EAAA;AAAA,IACC,WAAA,EAAa,KAAK,QAAA,EAAU,IAAA,CAAK,CAAC,KAAA,KAAU,QAAA,KAAa,MAAM,IAAI,CAAA;AAAA,IACnE,SAAA,EAAU,mBAAA;AAAA,IAEV,+BAACC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAACC,kBAAA,EAAA,EAAyB,OAAA,EAAO,IAAA,EAC/B,QAAA,kBAAA,IAAA,CAACC,iBAAA,EAAA,EAAwB,OAAA,EAAS,IAAA,CAAK,KAAA,EAAO,QAAA,EAAU,QAAA,CAAS,UAAA,CAAW,IAAA,CAAK,IAAI,CAAA,EACnF,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,IAAA,CAAK,MAAL,EAAU,CAAA;AAAA,wBACX,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,wBAClB,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,gGAAA,EAAiG;AAAA,OAAA,EAC3H,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAACC,kBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAACC,cAAA,EAAA,EACE,eAAK,QAAA,EAAU,GAAA,CAAI,CAAC,KAAA,qBACnB,GAAA,CAACC,kBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAACC,oBAAA,EAAA,EAA2B,UAAU,QAAA,KAAa,KAAA,CAAM,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,CAAS,KAAA,CAAM,IAAI,GAC/F,QAAA,kBAAA,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,KAAA,CAAM,KAAA,EAAM,GACrB,CAAA,EAAA,EAH6B,KAAA,CAAM,IAIrC,CACD,GACH,CAAA,EACF;AAAA,KAAA,EACF;AAAA;AACF,CAAA;AAIF,MAAM,QAAA,GAID,CAAC,EAAE,IAAA,EAAM,UAAU,QAAA,EAAS,yBAC9BN,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA;AAAA,EAACE,iBAAA;AAAA,EAAA;AAAA,IACC,SAAS,IAAA,CAAK,KAAA;AAAA,IACd,QAAA,EAAU,aAAa,IAAA,CAAK,IAAA,IAAQ,SAAS,UAAA,CAAW,CAAA,EAAG,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,IACvE,SAAS,MAAO,IAAA,CAAK,WAAW,MAAA,GAAY,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IAC9D,iBAAe,IAAA,CAAK,QAAA;AAAA,IACpB,SAAA,EAAW,IAAA,CAAK,QAAA,GAAW,YAAA,GAAe,MAAA;AAAA,IAE1C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,CAAK,MAAL,EAAU,CAAA;AAAA,sBACX,GAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,IAAA,CAAK,KAAA,EAAM,CAAA;AAAA,MACjB,KAAK,YAAA,oBAAgB,GAAA,CAAC,UAAK,SAAA,EAAU,2BAAA,EAA6B,eAAK,YAAA,EAAa;AAAA;AAAA;AACvF,CAAA,EACF,CAAA;AAIK,MAAM,UAAkC,CAAC,EAAE,MAAA,EAAQ,SAAA,GAAY,IAAG,KAAM;AAC7E,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAIK,cAAA,EAAqB;AAE5D,EAAA,uBACE,IAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACE,GAAG,YAAA;AAAA,MACJ,WAAA,EAAY,MAAA;AAAA,MACZ,KAAA,EAAO;AAAA,QACL,GAAA,EAAK,yBAAyB,SAAS,CAAA,CAAA,CAAA;AAAA,QACvC,MAAA,EAAQ,uCAAuC,SAAS,CAAA,EAAA;AAAA,OAC1D;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAA,GAAA,CAACC,kBACE,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,0BACVC,YAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAA,GAAA,CAACC,iBAAA,EAAA,EAAwB,SAAA,EAAU,oCAAA,EAChC,QAAA,EAAA,KAAA,CAAM,KAAA,EACT,CAAA;AAAA,0BACA,GAAA,CAACC,mBAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAACC,WAAA,EAAA,EACE,gBAAM,KAAA,CAAM,GAAA;AAAA,YAAI,CAAC,SAChB,IAAA,CAAK,QAAA,uBACF,eAAA,EAAA,EAAiC,IAAA,EAAY,QAAA,EAAU,QAAA,CAAS,QAAA,EAAU,QAAA,EAAA,EAArD,KAAK,KAAoE,CAAA,uBAE9F,QAAA,EAAA,EAA0B,IAAA,EAAY,UAAU,QAAA,CAAS,QAAA,EAAU,QAAA,EAAA,EAArD,IAAA,CAAK,KAAoE;AAAA,aAG9F,CAAA,EACF;AAAA,SAAA,EAAA,EAduB,KAAA,CAAM,KAe/B,CACD,CAAA,EACH,CAAA;AAAA,4BAECC,aAAA,EAAA,EACC,QAAA,kBAAA,GAAA,CAACC,cAAA,EAAA,EAAsB,GAAG,cAAc,CAAA,EAC1C,CAAA;AAAA,4BAECC,WAAA,EAAA,EAAkB;AAAA;AAAA;AAAA,GACrB;AAEJ;AAEA,OAAA,CAAQ,WAAA,GAAc,SAAA;;;;"}
|
package/dist/SingleSelect.js
CHANGED
|
@@ -196,7 +196,7 @@ function useSingleSelect({
|
|
|
196
196
|
remoteSearch
|
|
197
197
|
}) {
|
|
198
198
|
const isControlled = controlledValue !== void 0;
|
|
199
|
-
const [internalValue, setInternalValue] = useState(defaultValue ??
|
|
199
|
+
const [internalValue, setInternalValue] = useState(defaultValue ?? null);
|
|
200
200
|
const selectedValue = isControlled ? controlledValue : internalValue;
|
|
201
201
|
const [open, setOpen] = useState(false);
|
|
202
202
|
const [searchQuery, setSearchQuery] = useState("");
|
|
@@ -234,7 +234,7 @@ function useSingleSelect({
|
|
|
234
234
|
);
|
|
235
235
|
const clearSelection = useCallback(() => {
|
|
236
236
|
onOptionSelect?.(null);
|
|
237
|
-
updateSelection(
|
|
237
|
+
updateSelection(null);
|
|
238
238
|
setOpen(false);
|
|
239
239
|
}, [updateSelection, onOptionSelect]);
|
|
240
240
|
useEffect(() => {
|
package/dist/SingleSelect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SingleSelect.js","sources":["../shadcn/shadcnSingleSelect/single-select.tsx","../lib/components/Select/hooks/useSingleSelect.ts","../lib/components/Select/components/SingleSelect/SingleSelect.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, memo } from 'react';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcnPopover';\nimport { cn } from '../utils';\n\n// SingleSelectRoot — wraps Radix Popover to provide open/close state\ninterface SingleSelectRootProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nfunction SingleSelectRoot({ open, onOpenChange, disabled, children }: SingleSelectRootProps) {\n return (\n <Popover\n data-slot=\"single-select\"\n open={disabled ? false : open}\n onOpenChange={disabled ? undefined : onOpenChange}\n >\n {children}\n </Popover>\n );\n}\n\n// SingleSelectTrigger — styled trigger button that mirrors SelectTrigger\ninterface SingleSelectTriggerProps extends React.ComponentProps<'button'> {\n className?: string;\n open?: boolean;\n listboxId?: string;\n}\n\nconst SingleSelectTrigger = forwardRef<HTMLButtonElement, SingleSelectTriggerProps>(\n ({ className, children, disabled, open, listboxId, ...props }, ref) => {\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"single-select-trigger\"\n role=\"combobox\"\n aria-expanded={open ?? false}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n disabled={disabled}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n 'min-h-9',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n );\n },\n);\n\nSingleSelectTrigger.displayName = 'SingleSelectTrigger';\n\n// SingleSelectContent — styled dropdown panel wrapping PopoverContent\ninterface SingleSelectContentProps extends React.ComponentProps<typeof PopoverContent> {\n className?: string;\n}\n\nfunction SingleSelectContent({ className, children, align = 'start', ...props }: SingleSelectContentProps) {\n return (\n <PopoverContent\n data-slot=\"single-select-content\"\n align={align}\n className={cn('w-auto min-w-[var(--radix-popover-trigger-width)] p-0', className)}\n {...props}\n >\n {children}\n </PopoverContent>\n );\n}\n\n// SingleSelectSearch — search input for filtering options (stateless)\ninterface SingleSelectSearchProps {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nfunction SingleSelectSearch({ value, onValueChange, placeholder = 'Search...', className }: SingleSelectSearchProps) {\n return (\n <div data-slot=\"single-select-search\" className={cn('px-3 py-2', className)}>\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background px-3 h-9\">\n <SearchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n type=\"text\"\n aria-label=\"Search options\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n </div>\n );\n}\n\n// SingleSelectClear — \"Clear\" text button in border-b bar\ninterface SingleSelectClearProps {\n onClear: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction SingleSelectClear({ onClear, disabled, className }: SingleSelectClearProps) {\n return (\n <div\n data-slot=\"single-select-clear\"\n className={cn('flex items-center justify-end border-t px-3 py-1.5', className)}\n >\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground disabled:pointer-events-none disabled:opacity-50\"\n onClick={onClear}\n >\n Clear\n </button>\n </div>\n );\n}\n\n// SingleSelectList — scrollable listbox container for option rows\ninterface SingleSelectListProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectList({ className, children, ...props }: SingleSelectListProps) {\n return (\n <div\n data-slot=\"single-select-list\"\n role=\"listbox\"\n className={cn('max-h-60 overflow-y-auto p-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectRow — a single option row with a check icon\ninterface SingleSelectRowProps {\n name: string;\n description?: string;\n selected: boolean;\n onSelect: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nconst SingleSelectRow = memo(function SingleSelectRow({\n name,\n description,\n selected,\n onSelect,\n disabled,\n className,\n}: SingleSelectRowProps) {\n function handleClick() {\n if (!disabled) {\n onSelect();\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n }\n\n return (\n <div\n data-slot=\"single-select-row\"\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n tabIndex={disabled ? undefined : 0}\n className={cn(\n 'relative flex w-full cursor-default flex-col items-start rounded-md pr-8 px-2 text-sm outline-hidden select-none',\n description ? 'min-h-11 justify-center py-1.5' : 'h-8 justify-center',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <span className=\"truncate\">{name}</span>\n {description && <span className=\"truncate text-xs text-muted-foreground mt-0.5\">{description}</span>}\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n {selected && <CheckIcon className=\"size-4\" />}\n </span>\n </div>\n );\n});\n\n// SingleSelectGroup — wraps a group of rows with a role=\"group\" container\ninterface SingleSelectGroupProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectGroup({ className, children, ...props }: SingleSelectGroupProps) {\n return (\n <div\n data-slot=\"single-select-group\"\n role=\"group\"\n className={cn('border-t border-border first:border-t-0 pt-1 mt-1 first:pt-0 first:mt-0', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectGroupLabel — styled label for a group header\ninterface SingleSelectGroupLabelProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectGroupLabel({ className, children, ...props }: SingleSelectGroupLabelProps) {\n return (\n <div\n data-slot=\"single-select-group-label\"\n className={cn('text-primary px-2 py-1 text-[10px] font-semibold uppercase tracking-wide', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectEmpty — displayed when no options match a search filter\ninterface SingleSelectEmptyProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction SingleSelectEmpty({ children, className }: SingleSelectEmptyProps) {\n return (\n <div\n data-slot=\"single-select-empty\"\n className={cn('flex items-center justify-center py-6 text-sm text-muted-foreground', className)}\n >\n {children ?? 'No options found.'}\n </div>\n );\n}\n\nexport {\n SingleSelectClear,\n SingleSelectContent,\n SingleSelectEmpty,\n SingleSelectGroup,\n SingleSelectGroupLabel,\n SingleSelectList,\n SingleSelectRoot,\n SingleSelectRow,\n SingleSelectSearch,\n SingleSelectTrigger,\n};\n\nexport type {\n SingleSelectClearProps,\n SingleSelectContentProps,\n SingleSelectEmptyProps,\n SingleSelectGroupLabelProps,\n SingleSelectGroupProps,\n SingleSelectListProps,\n SingleSelectRootProps,\n SingleSelectRowProps,\n SingleSelectSearchProps,\n SingleSelectTriggerProps,\n};\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { SelectGroup, SelectOption, SelectValue } from '../types';\n\ninterface UseSingleSelectStateProps {\n options: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue;\n onChange?: (value: SelectValue) => void;\n onOptionSelect?: (option: SelectOption | null) => void;\n defaultValue?: SelectValue;\n remoteSearch?: boolean;\n}\n\n// Manages controlled/uncontrolled single-select state, search filtering, and grouping\n// No ref needed here — selectOption receives the value as an argument rather than reading current state\nexport function useSingleSelect({\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n defaultValue,\n remoteSearch,\n}: UseSingleSelectStateProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<SelectValue>(defaultValue ?? '');\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const listboxId = useId();\n\n const optionMap = useMemo(() => {\n const map = new Map<SelectValue, SelectOption>();\n for (const option of options) {\n map.set(option.value, option);\n }\n return map;\n }, [options]);\n\n const filteredOptions = useMemo(() => {\n if (remoteSearch || !searchQuery) return options;\n const lower = searchQuery.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, searchQuery, remoteSearch]);\n\n const updateSelection = useCallback(\n (nextValue: SelectValue) => {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(nextValue);\n },\n [isControlled, onChange],\n );\n\n // Select an option and close the popover\n const selectOption = useCallback(\n (optionValue: SelectValue) => {\n const option = optionMap.get(optionValue);\n if (option?.disabled) return;\n onOptionSelect?.(option ?? null);\n updateSelection(optionValue);\n setOpen(false);\n },\n [optionMap, updateSelection, onOptionSelect],\n );\n\n // Clear the selection and close the popover\n const clearSelection = useCallback(() => {\n onOptionSelect?.(null);\n updateSelection('');\n setOpen(false);\n }, [updateSelection, onOptionSelect]);\n\n // Reset search when popover closes\n useEffect(() => {\n if (!open) {\n setSearchQuery('');\n }\n }, [open]);\n\n const selectedOption = selectedValue ? optionMap.get(selectedValue) : undefined;\n\n // Fire onOptionSelect once when the initial value resolves from the async option map.\n // Tracks whether we've already notified so re-renders don't re-fire it.\n const notifiedInitialRef = useRef<SelectValue | null>(null);\n useEffect(() => {\n if (selectedOption && notifiedInitialRef.current !== selectedValue) {\n notifiedInitialRef.current = selectedValue ?? null;\n onOptionSelect?.(selectedOption);\n }\n }, [selectedOption, selectedValue, onOptionSelect]);\n\n // O(n + g) grouping — one pass over groups, one pass over options\n const grouped = useMemo(() => {\n if (!groups || groups.length === 0) return null;\n\n const buckets = new Map<string | number, SelectOption[]>();\n for (const g of groups) {\n buckets.set(g.id, []);\n }\n\n const ungrouped: SelectOption[] = [];\n for (const option of filteredOptions) {\n const bucket = option.groupId != null ? buckets.get(option.groupId) : undefined;\n if (bucket) {\n bucket.push(option);\n } else {\n ungrouped.push(option);\n }\n }\n\n const entries: Array<{ name: string; options: SelectOption[] }> = [];\n for (const g of groups) {\n const bucket = buckets.get(g.id);\n if (!bucket || bucket.length === 0) continue;\n entries.push({ name: g.name, options: bucket });\n }\n\n return { ungrouped, entries };\n }, [filteredOptions, groups]);\n\n return {\n selectedValue,\n selectedOption,\n open,\n setOpen,\n searchQuery,\n setSearchQuery,\n listboxId,\n filteredOptions,\n grouped,\n selectOption,\n clearSelection,\n };\n}\n","import { Loader2 } from 'lucide-react';\nimport type React from 'react';\nimport { Fragment, forwardRef } from 'react';\nimport { PopoverTrigger } from '../../../../../shadcn/shadcnPopover';\nimport {\n SingleSelectClear,\n SingleSelectContent,\n SingleSelectEmpty,\n SingleSelectGroup,\n SingleSelectGroupLabel,\n SingleSelectList,\n SingleSelectRoot,\n SingleSelectRow,\n SingleSelectSearch,\n SingleSelectTrigger,\n} from '../../../../../shadcn/shadcnSingleSelect';\nimport { cn } from '../../../../../shadcn/utils';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../../../Field';\nimport { useSingleSelect } from '../../hooks/useSingleSelect';\nimport type { AsyncSelectState, SelectGroup, SelectOption, SelectValue } from '../../types';\n\nexport interface SingleSelectAnchorProps {\n selectedOption: SelectOption | undefined;\n open: boolean;\n disabled: boolean;\n}\n\nexport interface SingleSelectOptionRenderProps {\n option: SelectOption;\n selected: boolean;\n onSelect: () => void;\n}\n\nexport type SingleSelectLabelTransformContext = 'trigger' | 'option';\n\nexport interface SingleSelectProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n options?: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue;\n onChange?: (value: SelectValue) => void;\n onOptionSelect?: (option: SelectOption | null) => void;\n onBlur?: () => void;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n defaultValue?: SelectValue;\n searchable?: boolean;\n searchPlaceholder?: string;\n clearable?: boolean;\n asyncState?: AsyncSelectState;\n // Custom trigger -- replaces the default SingleSelectTrigger\n anchor?: (props: SingleSelectAnchorProps) => React.ReactElement;\n // Custom option row renderer -- replaces the default SingleSelectRow\n renderOption?: (props: SingleSelectOptionRenderProps) => React.ReactNode;\n // Transforms how labels are displayed in trigger and option rows\n transformLabel?: (label: string, option: SelectOption, context: SingleSelectLabelTransformContext) => string;\n // Transforms how description is displayed in option rows\n transformDescription?: (description: string, option: SelectOption) => string;\n // Content rendered below the option list\n footer?: React.ReactNode;\n // Custom className for the popover content panel\n contentClassName?: string;\n // Called when the popover open state changes\n onOpenChange?: (open: boolean) => void;\n}\n\n// Single-value form field wrapper built on Popover primitives\nexport const SingleSelect = forwardRef<HTMLButtonElement, SingleSelectProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select an option',\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n onBlur,\n name,\n disabled = false,\n required,\n className,\n id,\n defaultValue,\n searchable = false,\n searchPlaceholder = 'Search...',\n clearable = false,\n asyncState,\n anchor,\n renderOption,\n transformLabel,\n transformDescription,\n footer,\n contentClassName,\n onOpenChange,\n },\n ref,\n ) => {\n const state = useSingleSelect({\n options: options ?? [],\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n defaultValue,\n remoteSearch: !!asyncState,\n });\n\n // Notifies parent (Select.tsx) of open state changes to gate async queries; clears async search on close\n function handleOpenChange(o: boolean) {\n state.setOpen(o);\n onOpenChange?.(o);\n if (!o) asyncState?.setSearchQuery('');\n }\n\n function handleSelectOption(value: SelectValue) {\n state.selectOption(value);\n handleOpenChange(false);\n }\n\n function handleClearSelection() {\n state.clearSelection();\n handleOpenChange(false);\n }\n\n // Resolve search binding -- async delegates to parent, static uses local state\n const searchValue = asyncState ? asyncState.searchQuery : state.searchQuery;\n const setSearchValue = asyncState ? asyncState.setSearchQuery : state.setSearchQuery;\n const showSearch = !!asyncState || searchable;\n\n // Renders a single option row\n function renderRow(option: SelectOption) {\n if (renderOption) {\n return (\n <Fragment key={String(option.value)}>\n {renderOption({\n option,\n selected: state.selectedValue === option.value,\n onSelect: () => handleSelectOption(option.value),\n })}\n </Fragment>\n );\n }\n return (\n <SingleSelectRow\n key={String(option.value)}\n name={transformLabel ? transformLabel(option.label, option, 'option') : option.label}\n description={\n option.description\n ? transformDescription\n ? transformDescription(option.description, option)\n : option.description\n : undefined\n }\n selected={state.selectedValue === option.value}\n onSelect={() => {\n handleSelectOption(option.value);\n }}\n disabled={option.disabled}\n />\n );\n }\n\n // Renders the option list content (flat or grouped)\n function renderOptions() {\n if (asyncState?.loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-6\">\n <Loader2 className=\"size-4 animate-spin text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n );\n }\n\n if (state.filteredOptions.length === 0) {\n return <SingleSelectEmpty />;\n }\n\n if (!state.grouped) {\n return state.filteredOptions.map(renderRow);\n }\n\n return (\n <>\n {state.grouped.ungrouped.map(renderRow)}\n {state.grouped.entries.map((entry) => (\n <SingleSelectGroup key={entry.name}>\n <SingleSelectGroupLabel>{entry.name}</SingleSelectGroupLabel>\n {entry.options.map(renderRow)}\n </SingleSelectGroup>\n ))}\n </>\n );\n }\n\n // Shared popover content used by both anchor and default paths\n function renderContent() {\n return (\n <SingleSelectContent className={contentClassName}>\n {showSearch && (\n <SingleSelectSearch value={searchValue} onValueChange={setSearchValue} placeholder={searchPlaceholder} />\n )}\n\n <SingleSelectList id={state.listboxId}>\n {renderOptions()}\n {asyncState?.hasMore && <div ref={asyncState.sentinelRef} className=\"h-1\" />}\n {asyncState?.loadingMore && (\n <div className=\"flex items-center justify-center gap-2 py-2\">\n <Loader2 className=\"size-3 animate-spin text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Loading more...</span>\n </div>\n )}\n </SingleSelectList>\n\n {clearable && <SingleSelectClear onClear={handleClearSelection} disabled={!state.selectedValue} />}\n {footer}\n </SingleSelectContent>\n );\n }\n\n // Custom anchor path -- skip Field wrapper and use PopoverTrigger asChild\n if (anchor) {\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n <SingleSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <PopoverTrigger asChild>\n {anchor({ selectedOption: state.selectedOption, open: state.open, disabled })}\n </PopoverTrigger>\n {renderContent()}\n </SingleSelectRoot>\n {name && state.selectedValue && <input type=\"hidden\" name={name} value={String(state.selectedValue)} />}\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n }\n\n // Default path -- Field wrapper with SingleSelectTrigger\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n\n <SingleSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <SingleSelectTrigger\n ref={ref}\n id={id}\n open={state.open}\n listboxId={state.listboxId}\n aria-invalid={!!error}\n aria-required={required}\n disabled={disabled}\n onBlur={onBlur}\n className={cn('w-full', className)}\n >\n <span className=\"flex flex-1 items-center overflow-hidden\">\n {state.selectedOption ? (\n <span className=\"truncate\">\n {transformLabel\n ? transformLabel(state.selectedOption.label, state.selectedOption, 'trigger')\n : state.selectedOption.label}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </span>\n </SingleSelectTrigger>\n {renderContent()}\n </SingleSelectRoot>\n\n {name && state.selectedValue && <input type=\"hidden\" name={name} value={String(state.selectedValue)} />}\n\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSingleSelect.displayName = 'SingleSelect';\n"],"names":["ChevronDownIcon","SearchIcon","SingleSelectRow","CheckIcon","Fragment","Loader2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SingleSelect.js","sources":["../shadcn/shadcnSingleSelect/single-select.tsx","../lib/components/Select/hooks/useSingleSelect.ts","../lib/components/Select/components/SingleSelect/SingleSelect.tsx"],"sourcesContent":["'use client';\n\nimport { CheckIcon, ChevronDownIcon, SearchIcon } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef, memo } from 'react';\n\nimport { Popover, PopoverContent, PopoverTrigger } from '../shadcnPopover';\nimport { cn } from '../utils';\n\n// SingleSelectRoot — wraps Radix Popover to provide open/close state\ninterface SingleSelectRootProps {\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n children: React.ReactNode;\n}\n\nfunction SingleSelectRoot({ open, onOpenChange, disabled, children }: SingleSelectRootProps) {\n return (\n <Popover\n data-slot=\"single-select\"\n open={disabled ? false : open}\n onOpenChange={disabled ? undefined : onOpenChange}\n >\n {children}\n </Popover>\n );\n}\n\n// SingleSelectTrigger — styled trigger button that mirrors SelectTrigger\ninterface SingleSelectTriggerProps extends React.ComponentProps<'button'> {\n className?: string;\n open?: boolean;\n listboxId?: string;\n}\n\nconst SingleSelectTrigger = forwardRef<HTMLButtonElement, SingleSelectTriggerProps>(\n ({ className, children, disabled, open, listboxId, ...props }, ref) => {\n return (\n <PopoverTrigger asChild>\n <button\n ref={ref}\n type=\"button\"\n data-slot=\"single-select-trigger\"\n role=\"combobox\"\n aria-expanded={open ?? false}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n disabled={disabled}\n className={cn(\n \"border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n 'min-h-9',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"size-4 shrink-0 opacity-50\" />\n </button>\n </PopoverTrigger>\n );\n },\n);\n\nSingleSelectTrigger.displayName = 'SingleSelectTrigger';\n\n// SingleSelectContent — styled dropdown panel wrapping PopoverContent\ninterface SingleSelectContentProps extends React.ComponentProps<typeof PopoverContent> {\n className?: string;\n}\n\nfunction SingleSelectContent({ className, children, align = 'start', ...props }: SingleSelectContentProps) {\n return (\n <PopoverContent\n data-slot=\"single-select-content\"\n align={align}\n className={cn('w-auto min-w-[var(--radix-popover-trigger-width)] p-0', className)}\n {...props}\n >\n {children}\n </PopoverContent>\n );\n}\n\n// SingleSelectSearch — search input for filtering options (stateless)\ninterface SingleSelectSearchProps {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\nfunction SingleSelectSearch({ value, onValueChange, placeholder = 'Search...', className }: SingleSelectSearchProps) {\n return (\n <div data-slot=\"single-select-search\" className={cn('px-3 py-2', className)}>\n <div className=\"flex items-center gap-2 rounded-lg border border-border bg-background px-3 h-9\">\n <SearchIcon className=\"size-4 shrink-0 text-muted-foreground\" />\n <input\n type=\"text\"\n aria-label=\"Search options\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n placeholder={placeholder}\n className=\"w-full bg-transparent text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50\"\n />\n </div>\n </div>\n );\n}\n\n// SingleSelectClear — \"Clear\" text button in border-b bar\ninterface SingleSelectClearProps {\n onClear: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nfunction SingleSelectClear({ onClear, disabled, className }: SingleSelectClearProps) {\n return (\n <div\n data-slot=\"single-select-clear\"\n className={cn('flex items-center justify-end border-t px-3 py-1.5', className)}\n >\n <button\n type=\"button\"\n disabled={disabled}\n className=\"text-xs font-medium text-muted-foreground hover:text-foreground disabled:pointer-events-none disabled:opacity-50\"\n onClick={onClear}\n >\n Clear\n </button>\n </div>\n );\n}\n\n// SingleSelectList — scrollable listbox container for option rows\ninterface SingleSelectListProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectList({ className, children, ...props }: SingleSelectListProps) {\n return (\n <div\n data-slot=\"single-select-list\"\n role=\"listbox\"\n className={cn('max-h-60 overflow-y-auto p-1', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectRow — a single option row with a check icon\ninterface SingleSelectRowProps {\n name: string;\n description?: string;\n selected: boolean;\n onSelect: () => void;\n disabled?: boolean;\n className?: string;\n}\n\nconst SingleSelectRow = memo(function SingleSelectRow({\n name,\n description,\n selected,\n onSelect,\n disabled,\n className,\n}: SingleSelectRowProps) {\n function handleClick() {\n if (!disabled) {\n onSelect();\n }\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n if (disabled) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onSelect();\n }\n }\n\n return (\n <div\n data-slot=\"single-select-row\"\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled}\n tabIndex={disabled ? undefined : 0}\n className={cn(\n 'relative flex w-full cursor-default flex-col items-start rounded-md pr-8 px-2 text-sm outline-hidden select-none',\n description ? 'min-h-11 justify-center py-1.5' : 'h-8 justify-center',\n 'hover:bg-accent hover:text-accent-foreground',\n 'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className,\n )}\n data-disabled={disabled ? '' : undefined}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n <span className=\"truncate\">{name}</span>\n {description && <span className=\"truncate text-xs text-muted-foreground mt-0.5\">{description}</span>}\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n {selected && <CheckIcon className=\"size-4\" />}\n </span>\n </div>\n );\n});\n\n// SingleSelectGroup — wraps a group of rows with a role=\"group\" container\ninterface SingleSelectGroupProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectGroup({ className, children, ...props }: SingleSelectGroupProps) {\n return (\n <div\n data-slot=\"single-select-group\"\n role=\"group\"\n className={cn('border-t border-border first:border-t-0 pt-1 mt-1 first:pt-0 first:mt-0', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectGroupLabel — styled label for a group header\ninterface SingleSelectGroupLabelProps extends React.ComponentProps<'div'> {\n className?: string;\n}\n\nfunction SingleSelectGroupLabel({ className, children, ...props }: SingleSelectGroupLabelProps) {\n return (\n <div\n data-slot=\"single-select-group-label\"\n className={cn('text-primary px-2 py-1 text-[10px] font-semibold uppercase tracking-wide', className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n// SingleSelectEmpty — displayed when no options match a search filter\ninterface SingleSelectEmptyProps {\n children?: React.ReactNode;\n className?: string;\n}\n\nfunction SingleSelectEmpty({ children, className }: SingleSelectEmptyProps) {\n return (\n <div\n data-slot=\"single-select-empty\"\n className={cn('flex items-center justify-center py-6 text-sm text-muted-foreground', className)}\n >\n {children ?? 'No options found.'}\n </div>\n );\n}\n\nexport {\n SingleSelectClear,\n SingleSelectContent,\n SingleSelectEmpty,\n SingleSelectGroup,\n SingleSelectGroupLabel,\n SingleSelectList,\n SingleSelectRoot,\n SingleSelectRow,\n SingleSelectSearch,\n SingleSelectTrigger,\n};\n\nexport type {\n SingleSelectClearProps,\n SingleSelectContentProps,\n SingleSelectEmptyProps,\n SingleSelectGroupLabelProps,\n SingleSelectGroupProps,\n SingleSelectListProps,\n SingleSelectRootProps,\n SingleSelectRowProps,\n SingleSelectSearchProps,\n SingleSelectTriggerProps,\n};\n","import { useCallback, useEffect, useId, useMemo, useRef, useState } from 'react';\nimport type { SelectGroup, SelectOption, SelectValue } from '../types';\n\ninterface UseSingleSelectStateProps {\n options: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue;\n onChange?: (value: SelectValue) => void;\n onOptionSelect?: (option: SelectOption | null) => void;\n defaultValue?: SelectValue;\n remoteSearch?: boolean;\n}\n\n// Manages controlled/uncontrolled single-select state, search filtering, and grouping\nexport function useSingleSelect({\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n defaultValue,\n remoteSearch,\n}: UseSingleSelectStateProps) {\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<SelectValue>(defaultValue ?? null);\n const selectedValue = isControlled ? controlledValue : internalValue;\n\n const [open, setOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const listboxId = useId();\n\n const optionMap = useMemo(() => {\n const map = new Map<SelectValue, SelectOption>();\n for (const option of options) {\n map.set(option.value, option);\n }\n return map;\n }, [options]);\n\n const filteredOptions = useMemo(() => {\n if (remoteSearch || !searchQuery) return options;\n const lower = searchQuery.toLowerCase();\n return options.filter((o) => o.label.toLowerCase().includes(lower));\n }, [options, searchQuery, remoteSearch]);\n\n const updateSelection = useCallback(\n (nextValue: SelectValue) => {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(nextValue);\n },\n [isControlled, onChange],\n );\n\n // Select an option and close the popover\n const selectOption = useCallback(\n (optionValue: SelectValue) => {\n const option = optionMap.get(optionValue);\n if (option?.disabled) return;\n onOptionSelect?.(option ?? null);\n updateSelection(optionValue);\n setOpen(false);\n },\n [optionMap, updateSelection, onOptionSelect],\n );\n\n // Clear the selection and close the popover\n const clearSelection = useCallback(() => {\n onOptionSelect?.(null);\n updateSelection(null);\n setOpen(false);\n }, [updateSelection, onOptionSelect]);\n\n // Reset search when popover closes\n useEffect(() => {\n if (!open) {\n setSearchQuery('');\n }\n }, [open]);\n\n const selectedOption = selectedValue ? optionMap.get(selectedValue) : undefined;\n\n // Fire onOptionSelect once when the initial value resolves from the async option map\n const notifiedInitialRef = useRef<SelectValue | null>(null);\n useEffect(() => {\n if (selectedOption && notifiedInitialRef.current !== selectedValue) {\n notifiedInitialRef.current = selectedValue ?? null;\n onOptionSelect?.(selectedOption);\n }\n }, [selectedOption, selectedValue, onOptionSelect]);\n\n // O(n + g) grouping — one pass over groups, one pass over options\n const grouped = useMemo(() => {\n if (!groups || groups.length === 0) return null;\n\n const buckets = new Map<string | number, SelectOption[]>();\n for (const g of groups) {\n buckets.set(g.id, []);\n }\n\n const ungrouped: SelectOption[] = [];\n for (const option of filteredOptions) {\n const bucket = option.groupId != null ? buckets.get(option.groupId) : undefined;\n if (bucket) {\n bucket.push(option);\n } else {\n ungrouped.push(option);\n }\n }\n\n const entries: Array<{ name: string; options: SelectOption[] }> = [];\n for (const g of groups) {\n const bucket = buckets.get(g.id);\n if (!bucket || bucket.length === 0) continue;\n entries.push({ name: g.name, options: bucket });\n }\n\n return { ungrouped, entries };\n }, [filteredOptions, groups]);\n\n return {\n selectedValue,\n selectedOption,\n open,\n setOpen,\n searchQuery,\n setSearchQuery,\n listboxId,\n filteredOptions,\n grouped,\n selectOption,\n clearSelection,\n };\n}\n","import { Loader2 } from 'lucide-react';\nimport type React from 'react';\nimport { Fragment, forwardRef } from 'react';\nimport { PopoverTrigger } from '../../../../../shadcn/shadcnPopover';\nimport {\n SingleSelectClear,\n SingleSelectContent,\n SingleSelectEmpty,\n SingleSelectGroup,\n SingleSelectGroupLabel,\n SingleSelectList,\n SingleSelectRoot,\n SingleSelectRow,\n SingleSelectSearch,\n SingleSelectTrigger,\n} from '../../../../../shadcn/shadcnSingleSelect';\nimport { cn } from '../../../../../shadcn/utils';\nimport { Field, FieldDescription, FieldError, FieldLabel } from '../../../Field';\nimport { useSingleSelect } from '../../hooks/useSingleSelect';\nimport type { AsyncSelectState, SelectGroup, SelectOption, SelectValue } from '../../types';\n\nexport interface SingleSelectAnchorProps {\n selectedOption: SelectOption | undefined;\n open: boolean;\n disabled: boolean;\n}\n\nexport interface SingleSelectOptionRenderProps {\n option: SelectOption;\n selected: boolean;\n onSelect: () => void;\n}\n\nexport type SingleSelectLabelTransformContext = 'trigger' | 'option';\n\nexport interface SingleSelectProps {\n label?: string;\n description?: React.ReactNode;\n error?: string;\n placeholder?: string;\n options?: SelectOption[];\n groups?: SelectGroup[];\n value?: SelectValue;\n onChange?: (value: SelectValue) => void;\n onOptionSelect?: (option: SelectOption | null) => void;\n onBlur?: () => void;\n name?: string;\n disabled?: boolean;\n required?: boolean;\n className?: string;\n id?: string;\n defaultValue?: SelectValue;\n searchable?: boolean;\n searchPlaceholder?: string;\n clearable?: boolean;\n asyncState?: AsyncSelectState;\n anchor?: (props: SingleSelectAnchorProps) => React.ReactElement;\n renderOption?: (props: SingleSelectOptionRenderProps) => React.ReactNode;\n transformLabel?: (label: string, option: SelectOption, context: SingleSelectLabelTransformContext) => string;\n transformDescription?: (description: string, option: SelectOption) => string;\n footer?: React.ReactNode;\n contentClassName?: string;\n onOpenChange?: (open: boolean) => void;\n}\n\n// Single-value form field wrapper built on Popover primitives\nexport const SingleSelect = forwardRef<HTMLButtonElement, SingleSelectProps>(\n (\n {\n label,\n description,\n error,\n placeholder = 'Select an option',\n options,\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n onBlur,\n name,\n disabled = false,\n required,\n className,\n id,\n defaultValue,\n searchable = false,\n searchPlaceholder = 'Search...',\n clearable = false,\n asyncState,\n anchor,\n renderOption,\n transformLabel,\n transformDescription,\n footer,\n contentClassName,\n onOpenChange,\n },\n ref,\n ) => {\n const state = useSingleSelect({\n options: options ?? [],\n groups,\n value: controlledValue,\n onChange,\n onOptionSelect,\n defaultValue,\n remoteSearch: !!asyncState,\n });\n\n // Notifies parent (Select.tsx) of open state changes to gate async queries; clears async search on close\n function handleOpenChange(o: boolean) {\n state.setOpen(o);\n onOpenChange?.(o);\n if (!o) asyncState?.setSearchQuery('');\n }\n\n function handleSelectOption(value: SelectValue) {\n state.selectOption(value);\n handleOpenChange(false);\n }\n\n function handleClearSelection() {\n state.clearSelection();\n handleOpenChange(false);\n }\n\n // Resolve search binding -- async delegates to parent, static uses local state\n const searchValue = asyncState ? asyncState.searchQuery : state.searchQuery;\n const setSearchValue = asyncState ? asyncState.setSearchQuery : state.setSearchQuery;\n const showSearch = !!asyncState || searchable;\n\n // Renders a single option row\n function renderRow(option: SelectOption) {\n if (renderOption) {\n return (\n <Fragment key={String(option.value)}>\n {renderOption({\n option,\n selected: state.selectedValue === option.value,\n onSelect: () => handleSelectOption(option.value),\n })}\n </Fragment>\n );\n }\n return (\n <SingleSelectRow\n key={String(option.value)}\n name={transformLabel ? transformLabel(option.label, option, 'option') : option.label}\n description={\n option.description\n ? transformDescription\n ? transformDescription(option.description, option)\n : option.description\n : undefined\n }\n selected={state.selectedValue === option.value}\n onSelect={() => {\n handleSelectOption(option.value);\n }}\n disabled={option.disabled}\n />\n );\n }\n\n // Renders the option list content (flat or grouped)\n function renderOptions() {\n if (asyncState?.loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 py-6\">\n <Loader2 className=\"size-4 animate-spin text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground\">Loading...</span>\n </div>\n );\n }\n\n if (state.filteredOptions.length === 0) {\n return <SingleSelectEmpty />;\n }\n\n if (!state.grouped) {\n return state.filteredOptions.map(renderRow);\n }\n\n return (\n <>\n {state.grouped.ungrouped.map(renderRow)}\n {state.grouped.entries.map((entry) => (\n <SingleSelectGroup key={entry.name}>\n <SingleSelectGroupLabel>{entry.name}</SingleSelectGroupLabel>\n {entry.options.map(renderRow)}\n </SingleSelectGroup>\n ))}\n </>\n );\n }\n\n // Shared popover content used by both anchor and default paths\n function renderContent() {\n return (\n <SingleSelectContent className={contentClassName}>\n {showSearch && (\n <SingleSelectSearch value={searchValue} onValueChange={setSearchValue} placeholder={searchPlaceholder} />\n )}\n\n <SingleSelectList id={state.listboxId}>\n {renderOptions()}\n {asyncState?.hasMore && <div ref={asyncState.sentinelRef} className=\"h-1\" />}\n {asyncState?.loadingMore && (\n <div className=\"flex items-center justify-center gap-2 py-2\">\n <Loader2 className=\"size-3 animate-spin text-muted-foreground\" />\n <span className=\"text-xs text-muted-foreground\">Loading more...</span>\n </div>\n )}\n </SingleSelectList>\n\n {clearable && <SingleSelectClear onClear={handleClearSelection} disabled={!state.selectedValue} />}\n {footer}\n </SingleSelectContent>\n );\n }\n\n // Custom anchor path -- skip Field wrapper and use PopoverTrigger asChild\n if (anchor) {\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n <SingleSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <PopoverTrigger asChild>\n {anchor({ selectedOption: state.selectedOption, open: state.open, disabled })}\n </PopoverTrigger>\n {renderContent()}\n </SingleSelectRoot>\n {name && state.selectedValue && <input type=\"hidden\" name={name} value={String(state.selectedValue)} />}\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n }\n\n // Default path -- Field wrapper with SingleSelectTrigger\n return (\n <Field>\n {label && <FieldLabel>{label}</FieldLabel>}\n\n <SingleSelectRoot open={state.open} onOpenChange={handleOpenChange} disabled={disabled}>\n <SingleSelectTrigger\n ref={ref}\n id={id}\n open={state.open}\n listboxId={state.listboxId}\n aria-invalid={!!error}\n aria-required={required}\n disabled={disabled}\n onBlur={onBlur}\n className={cn('w-full', className)}\n >\n <span className=\"flex flex-1 items-center overflow-hidden\">\n {state.selectedOption ? (\n <span className=\"truncate\">\n {transformLabel\n ? transformLabel(state.selectedOption.label, state.selectedOption, 'trigger')\n : state.selectedOption.label}\n </span>\n ) : (\n <span className=\"text-muted-foreground\">{placeholder}</span>\n )}\n </span>\n </SingleSelectTrigger>\n {renderContent()}\n </SingleSelectRoot>\n\n {name && state.selectedValue && <input type=\"hidden\" name={name} value={String(state.selectedValue)} />}\n\n {description && !error && <FieldDescription>{description}</FieldDescription>}\n {error && <FieldError>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSingleSelect.displayName = 'SingleSelect';\n"],"names":["ChevronDownIcon","SearchIcon","SingleSelectRow","CheckIcon","Fragment","Loader2"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { S as SelectFilter } from './SelectFilter.js';
|
|
4
|
+
import { S as Select } from './Select.js';
|
|
5
|
+
|
|
6
|
+
const SiteGroupFilter = Object.assign(
|
|
7
|
+
forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
8
|
+
SelectFilter,
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
name: "siteGroupId",
|
|
12
|
+
label: "Site Group",
|
|
13
|
+
placeholder: "Select site group",
|
|
14
|
+
optionsEndpoint: "select-api/site-groups",
|
|
15
|
+
fieldKeys: { valueKey: "id", labelKey: "name", descriptionKey: "code" },
|
|
16
|
+
...props
|
|
17
|
+
}
|
|
18
|
+
)),
|
|
19
|
+
{ displayName: "SiteGroupFilter", defaultLabel: "Site Group", defaultName: "siteGroupId" }
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const SiteGroupSelector = forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
23
|
+
Select,
|
|
24
|
+
{
|
|
25
|
+
ref,
|
|
26
|
+
label: "Site Group",
|
|
27
|
+
placeholder: "Select site group",
|
|
28
|
+
searchable: true,
|
|
29
|
+
optionsEndpoint: "select-api/site-groups",
|
|
30
|
+
fieldKeys: { valueKey: "id", labelKey: "name", descriptionKey: "code" },
|
|
31
|
+
...props
|
|
32
|
+
}
|
|
33
|
+
));
|
|
34
|
+
SiteGroupSelector.displayName = "SiteGroupSelector";
|
|
35
|
+
|
|
36
|
+
export { SiteGroupFilter as S, SiteGroupSelector as a };
|
|
37
|
+
//# sourceMappingURL=SiteGroupSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteGroupSelector.js","sources":["../lib/selects/site-group/SiteGroupFilter.tsx","../lib/selects/site-group/SiteGroupSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SiteGroupFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name'> & { name?: string };\n\n// Pre-configured SelectFilter for site group filtering with async search\nexport const SiteGroupFilter = Object.assign(\n forwardRef<HTMLButtonElement, SiteGroupFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"siteGroupId\"\n label=\"Site Group\"\n placeholder=\"Select site group\"\n optionsEndpoint=\"select-api/site-groups\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', descriptionKey: 'code' }}\n {...props}\n />\n )),\n { displayName: 'SiteGroupFilter', defaultLabel: 'Site Group', defaultName: 'siteGroupId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type SiteGroupSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;\n\n// Pre-configured Select for site group selection with async search (supports single and multi-select)\nexport const SiteGroupSelector = forwardRef<HTMLButtonElement, SiteGroupSelectorProps>((props, ref) => (\n <Select\n ref={ref}\n label=\"Site Group\"\n placeholder=\"Select site group\"\n searchable\n optionsEndpoint=\"select-api/site-groups\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', descriptionKey: 'code' }}\n {...props}\n />\n));\nSiteGroupSelector.displayName = 'SiteGroupSelector';\n"],"names":[],"mappings":";;;;;AAMO,MAAM,kBAAkB,MAAA,CAAO,MAAA;AAAA,EACpC,UAAA,CAAoD,CAAC,KAAA,EAAO,GAAA,qBAC1D,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,aAAA;AAAA,MACL,KAAA,EAAM,YAAA;AAAA,MACN,WAAA,EAAY,mBAAA;AAAA,MACZ,eAAA,EAAgB,wBAAA;AAAA,MAChB,WAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAAA,MACrE,GAAG;AAAA;AAAA,GAEP,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,iBAAA,EAAmB,YAAA,EAAc,YAAA,EAAc,aAAa,aAAA;AAC7E;;ACbO,MAAM,iBAAA,GAAoB,UAAA,CAAsD,CAAC,KAAA,EAAO,GAAA,qBAC7F,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAY,mBAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,wBAAA;AAAA,IAChB,WAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAAA,IACrE,GAAG;AAAA;AACN,CACD;AACD,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;;;"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { S as SelectFilter } from './SelectFilter.js';
|
|
4
|
+
import { S as Select } from './Select.js';
|
|
5
|
+
|
|
6
|
+
const SiteFilter = Object.assign(
|
|
7
|
+
forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
8
|
+
SelectFilter,
|
|
9
|
+
{
|
|
10
|
+
ref,
|
|
11
|
+
name: "siteId",
|
|
12
|
+
label: "Site",
|
|
13
|
+
placeholder: "Select site",
|
|
14
|
+
optionsEndpoint: "select-api/sites",
|
|
15
|
+
fieldKeys: { valueKey: "id", labelKey: "name", descriptionKey: "code" },
|
|
16
|
+
...props
|
|
17
|
+
}
|
|
18
|
+
)),
|
|
19
|
+
{ displayName: "SiteFilter", defaultLabel: "Site", defaultName: "siteId" }
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
const SiteSelector = forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
23
|
+
Select,
|
|
24
|
+
{
|
|
25
|
+
ref,
|
|
26
|
+
label: "Site",
|
|
27
|
+
placeholder: "Select site",
|
|
28
|
+
searchable: true,
|
|
29
|
+
optionsEndpoint: "select-api/sites",
|
|
30
|
+
fieldKeys: { valueKey: "id", labelKey: "name", descriptionKey: "code" },
|
|
31
|
+
...props
|
|
32
|
+
}
|
|
33
|
+
));
|
|
34
|
+
SiteSelector.displayName = "SiteSelector";
|
|
35
|
+
|
|
36
|
+
export { SiteFilter as S, SiteSelector as a };
|
|
37
|
+
//# sourceMappingURL=SiteSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SiteSelector.js","sources":["../lib/selects/site/SiteFilter.tsx","../lib/selects/site/SiteSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SiteFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name'> & { name?: string };\n\n// Pre-configured SelectFilter for site filtering with async search\nexport const SiteFilter = Object.assign(\n forwardRef<HTMLButtonElement, SiteFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"siteId\"\n label=\"Site\"\n placeholder=\"Select site\"\n optionsEndpoint=\"select-api/sites\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', descriptionKey: 'code' }}\n {...props}\n />\n )),\n { displayName: 'SiteFilter', defaultLabel: 'Site', defaultName: 'siteId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type SiteSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;\n\n// Pre-configured Select for site selection with async search (supports single and multi-select)\nexport const SiteSelector = forwardRef<HTMLButtonElement, SiteSelectorProps>((props, ref) => (\n <Select\n ref={ref}\n label=\"Site\"\n placeholder=\"Select site\"\n searchable\n optionsEndpoint=\"select-api/sites\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', descriptionKey: 'code' }}\n {...props}\n />\n));\nSiteSelector.displayName = 'SiteSelector';\n"],"names":[],"mappings":";;;;;AAMO,MAAM,aAAa,MAAA,CAAO,MAAA;AAAA,EAC/B,UAAA,CAA+C,CAAC,KAAA,EAAO,GAAA,qBACrD,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAM,MAAA;AAAA,MACN,WAAA,EAAY,aAAA;AAAA,MACZ,eAAA,EAAgB,kBAAA;AAAA,MAChB,WAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAAA,MACrE,GAAG;AAAA;AAAA,GAEP,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,YAAA,EAAc,YAAA,EAAc,MAAA,EAAQ,aAAa,QAAA;AAClE;;ACbO,MAAM,YAAA,GAAe,UAAA,CAAiD,CAAC,KAAA,EAAO,GAAA,qBACnF,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,MAAA;AAAA,IACN,WAAA,EAAY,aAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,kBAAA;AAAA,IAChB,WAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAAA,IACrE,GAAG;AAAA;AACN,CACD;AACD,YAAA,CAAa,WAAA,GAAc,cAAA;;;;"}
|
package/dist/Sonner.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
|
-
import { T as Toaster$2, t as toast } from './
|
|
3
|
+
import { T as Toaster$2, t as toast } from './index26.js';
|
|
4
4
|
import { T as TOAST_EVENT } from './toast.js';
|
|
5
5
|
import { u as useTheme } from './useTheme.js';
|
|
6
6
|
import { L as LoaderCircle } from './loader-circle.js';
|
package/dist/Sonner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sonner.js","sources":["../shadcn/shadcnSonner/sonner.tsx","../lib/components/Sonner/Sonner.tsx"],"sourcesContent":["import { AlertTriangleIcon, CheckCircleIcon, InfoIcon, Loader2Icon, XCircleIcon } from 'lucide-react';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\nimport { useTheme } from '../../lib/hooks/useTheme';\n\nconst Toaster = ({ theme, ...props }: ToasterProps) => {\n const { theme: activeTheme } = useTheme();\n return (\n <Sonner\n theme={(theme ?? activeTheme) as ToasterProps['theme']}\n className=\"toaster group\"\n icons={{\n success: <CheckCircleIcon className=\"size-4 text-success\" />,\n error: <XCircleIcon className=\"size-4 text-destructive\" />,\n warning: <AlertTriangleIcon className=\"size-4 text-warning\" />,\n info: <InfoIcon className=\"size-4 text-info\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin text-primary\" />,\n }}\n toastOptions={{\n classNames: {\n toast: '!group toast shadow-lg',\n description: '!text-muted-foreground',\n actionButton: '!bg-primary text-primary-foreground',\n cancelButton: '!bg-muted text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useEffect } from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport { Toaster as ShadcnToaster } from '../../../shadcn/shadcnSonner';\nimport { TOAST_EVENT, type ToastEventDetail } from './toast';\n\ntype ToasterProps = React.ComponentProps<typeof ShadcnToaster>;\n\n
|
|
1
|
+
{"version":3,"file":"Sonner.js","sources":["../shadcn/shadcnSonner/sonner.tsx","../lib/components/Sonner/Sonner.tsx"],"sourcesContent":["import { AlertTriangleIcon, CheckCircleIcon, InfoIcon, Loader2Icon, XCircleIcon } from 'lucide-react';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\nimport { useTheme } from '../../lib/hooks/useTheme';\n\nconst Toaster = ({ theme, ...props }: ToasterProps) => {\n const { theme: activeTheme } = useTheme();\n return (\n <Sonner\n theme={(theme ?? activeTheme) as ToasterProps['theme']}\n className=\"toaster group\"\n icons={{\n success: <CheckCircleIcon className=\"size-4 text-success\" />,\n error: <XCircleIcon className=\"size-4 text-destructive\" />,\n warning: <AlertTriangleIcon className=\"size-4 text-warning\" />,\n info: <InfoIcon className=\"size-4 text-info\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin text-primary\" />,\n }}\n toastOptions={{\n classNames: {\n toast: '!group toast shadow-lg',\n description: '!text-muted-foreground',\n actionButton: '!bg-primary text-primary-foreground',\n cancelButton: '!bg-muted text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useEffect } from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport { Toaster as ShadcnToaster } from '../../../shadcn/shadcnSonner';\nimport { TOAST_EVENT, type ToastEventDetail } from './toast';\n\ntype ToasterProps = React.ComponentProps<typeof ShadcnToaster>;\n\n// Toaster that listens for global toast events; mount once in the host app to display toasts from any micro-frontend\nexport const Toaster: React.FC<ToasterProps> = (props) => {\n useEffect(() => {\n const handleToast = (event: Event) => {\n const { type, message, options } = (event as CustomEvent<ToastEventDetail>).detail;\n\n switch (type) {\n case 'success':\n sonnerToast.success(message, options);\n break;\n case 'error':\n sonnerToast.error(message, options);\n break;\n case 'warning':\n sonnerToast.warning(message, options);\n break;\n case 'info':\n sonnerToast.info(message, options);\n break;\n case 'loading':\n sonnerToast.loading(message, options);\n break;\n default:\n sonnerToast(message, options);\n break;\n }\n };\n\n window.addEventListener(TOAST_EVENT, handleToast);\n return () => window.removeEventListener(TOAST_EVENT, handleToast);\n }, []);\n\n return <ShadcnToaster {...props} />;\n};\n"],"names":["Toaster","Sonner","CheckCircleIcon","XCircleIcon","AlertTriangleIcon","InfoIcon","Loader2Icon","sonnerToast","ShadcnToaster"],"mappings":";;;;;;;;;;AAIA,MAAMA,YAAU,CAAC,EAAE,KAAA,EAAO,GAAG,OAAM,KAAoB;AACrD,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,QAAA,EAAS;AACxC,EAAA,uBACE,GAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,OAAQ,KAAA,IAAS,WAAA;AAAA,MACjB,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,kBAAS,GAAA,CAACC,cAAA,EAAA,EAAgB,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,QAC1D,KAAA,kBAAO,GAAA,CAACC,OAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,QACxD,OAAA,kBAAS,GAAA,CAACC,aAAA,EAAA,EAAkB,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,QAC5D,IAAA,kBAAM,GAAA,CAACC,IAAA,EAAA,EAAS,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,QAC7C,OAAA,kBAAS,GAAA,CAACC,YAAA,EAAA,EAAY,SAAA,EAAU,kCAAA,EAAmC;AAAA,OACrE;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,wBAAA;AAAA,UACP,WAAA,EAAa,wBAAA;AAAA,UACb,YAAA,EAAc,qCAAA;AAAA,UACd,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;;ACpBO,MAAM,OAAA,GAAkC,CAAC,KAAA,KAAU;AACxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAiB;AACpC,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,KAAa,KAAA,CAAwC,MAAA;AAE5E,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,SAAA;AACH,UAAAC,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAAA,KAAA,CAAY,KAAA,CAAM,SAAS,OAAO,CAAA;AAClC,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAAA,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAAA,KAAA,CAAY,IAAA,CAAK,SAAS,OAAO,CAAA;AACjC,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAAA,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF;AACE,UAAAA,KAAA,CAAY,SAAS,OAAO,CAAA;AAC5B,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,WAAW,CAAA;AAAA,EAClE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBAAO,GAAA,CAACC,SAAA,EAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AACnC;;;;"}
|