@vritti/quantum-ui 0.3.12 → 0.3.15
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/ActivePoints.js.map +1 -1
- package/dist/ActiveShapeUtils.js.map +1 -1
- package/dist/Alert.js +1 -1
- package/dist/Alert.js.map +1 -1
- package/dist/AreaChart.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/BarChart.js.map +1 -1
- 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/CartesianChart.js.map +1 -1
- package/dist/CategoryFilter.js +6 -4
- package/dist/CategoryFilter.js.map +1 -1
- package/dist/Chart.js +53 -55
- package/dist/Chart.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/CopyField.js +71 -0
- package/dist/CopyField.js.map +1 -0
- 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/ErrorBarContext.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 +3 -2
- 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/LineChart.js.map +1 -1
- 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/PieChart.js.map +1 -1
- package/dist/PolarChart.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/RadarChart.js.map +1 -1
- package/dist/RadialChart.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 +44 -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/CopyField.js +2 -0
- package/dist/components/CopyField.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/copy.js +18 -0
- package/dist/copy.js.map +1 -0
- 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/getClassNameFromUnknown.js.map +1 -1
- package/dist/getRadiusAndStrokeWidthFromDot.js.map +1 -1
- package/dist/getZIndexFromUnknown.js.map +1 -1
- package/dist/graphicalItemSelectors.js.map +1 -1
- package/dist/image-component.js.map +1 -1
- package/dist/index.js +16 -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 +23 -43
- 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/CopyField/CopyField.d.ts +10 -0
- package/dist/lib/components/CopyField/CopyField.d.ts.map +1 -0
- package/dist/lib/components/CopyField/index.d.ts +2 -0
- package/dist/lib/components/CopyField/index.d.ts.map +1 -0
- 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.map +1 -1
- package/dist/lib/components/DataTable/cells/cells.d.ts.map +1 -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.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 +3 -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 +50 -17
- package/dist/lib/types/catalog-resolver.d.ts.map +1 -1
- 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/polarScaleSelectors.js.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/tooltipContext.js.map +1 -1
- package/dist/types/catalog-resolver.js +5 -2
- package/dist/types/catalog-resolver.js.map +1 -1
- package/dist/useBUTimezone.js.map +1 -1
- package/dist/useDataTable.js +58 -60
- 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/dist/youtube.js +15 -29
- package/dist/youtube.js.map +1 -1
- package/package.json +77 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepProgressIndicator.js","sources":["../lib/components/StepProgressIndicator/StepProgressIndicator.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { Fragment, type ReactNode } from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport { Progress } from '../Progress';\nimport { Typography } from '../Typography';\n\nexport interface StepDef {\n label: string;\n icon: ReactNode;\n}\n\nexport interface StepProgressIndicatorProps {\n steps: StepDef[];\n
|
|
1
|
+
{"version":3,"file":"StepProgressIndicator.js","sources":["../lib/components/StepProgressIndicator/StepProgressIndicator.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport { Fragment, type ReactNode } from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport { Progress } from '../Progress';\nimport { Typography } from '../Typography';\n\nexport interface StepDef {\n label: string;\n icon: ReactNode;\n}\n\nexport interface StepProgressIndicatorProps {\n steps: StepDef[];\n currentStep: number;\n progress?: number;\n}\n\n// Reusable multi-step indicator with icon circles, connector lines, and per-step progress bars\nexport const StepProgressIndicator = ({ steps, currentStep, progress = 0 }: StepProgressIndicatorProps) => (\n <div className=\"flex w-full items-start justify-between\">\n {steps.map((step, index) => {\n const num = index + 1;\n const isCompleted = num < currentStep;\n const isActive = num === currentStep;\n\n return (\n <Fragment key={step.label}>\n <div className=\"flex flex-col items-center gap-1.5\">\n <div\n className={cn(\n 'flex h-8 w-8 items-center justify-center rounded-full border-2 transition-all',\n isCompleted || isActive\n ? 'border-primary bg-primary text-primary-foreground'\n : 'border-border bg-secondary text-muted-foreground',\n )}\n >\n {isCompleted ? <Check className=\"h-4 w-4\" /> : step.icon}\n </div>\n <Typography\n variant=\"body2\"\n className={cn(\n 'whitespace-nowrap text-[10px] transition-all',\n isCompleted || isActive ? 'font-medium text-foreground' : 'text-muted-foreground',\n )}\n >\n {step.label}\n </Typography>\n <Progress value={isCompleted ? 100 : isActive ? progress : 0} className=\"h-1 w-16\" />\n </div>\n\n {index < steps.length - 1 && (\n <div className=\"mx-2 mt-4 h-0.5 flex-1\">\n <div className={cn('h-full rounded-full transition-all', isCompleted ? 'bg-primary' : 'bg-border')} />\n </div>\n )}\n </Fragment>\n );\n })}\n </div>\n);\n"],"names":[],"mappings":";;;;;;;AAkBO,MAAM,wBAAwB,CAAC,EAAE,KAAA,EAAO,WAAA,EAAa,WAAW,CAAA,EAAE,qBACvE,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yCAAA,EACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAC1B,EAAA,MAAM,MAAM,KAAA,GAAQ,CAAA;AACpB,EAAA,MAAM,cAAc,GAAA,GAAM,WAAA;AAC1B,EAAA,MAAM,WAAW,GAAA,KAAQ,WAAA;AAEzB,EAAA,4BACG,QAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oCAAA,EACb,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,EAAA;AAAA,YACT,+EAAA;AAAA,YACA,WAAA,IAAe,WACX,mDAAA,GACA;AAAA,WACN;AAAA,UAEC,wCAAc,GAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,IAAK,IAAA,CAAK;AAAA;AAAA,OACtD;AAAA,sBACA,GAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,OAAA;AAAA,UACR,SAAA,EAAW,EAAA;AAAA,YACT,8CAAA;AAAA,YACA,WAAA,IAAe,WAAW,6BAAA,GAAgC;AAAA,WAC5D;AAAA,UAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,OACR;AAAA,sBACA,GAAA,CAAC,YAAS,KAAA,EAAO,WAAA,GAAc,MAAM,QAAA,GAAW,QAAA,GAAW,CAAA,EAAG,SAAA,EAAU,UAAA,EAAW;AAAA,KAAA,EACrF,CAAA;AAAA,IAEC,QAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,oBACtB,GAAA,CAAC,SAAI,SAAA,EAAU,wBAAA,EACb,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,oCAAA,EAAsC,cAAc,YAAA,GAAe,WAAW,GAAG,CAAA,EACtG;AAAA,GAAA,EAAA,EA3BW,KAAK,KA6BpB,CAAA;AAEJ,CAAC,CAAA,EACH;;;;"}
|
|
@@ -12,7 +12,7 @@ const SupplierItemFilter = Object.assign(
|
|
|
12
12
|
name: "supplierItemId",
|
|
13
13
|
label: "Supplier Item",
|
|
14
14
|
placeholder: "Select supplier item",
|
|
15
|
-
optionsEndpoint: "commerce-api/supplier-items
|
|
15
|
+
optionsEndpoint: "commerce-api/select-api/supplier-items",
|
|
16
16
|
fieldKeys: { valueKey: "id", labelKey: "name", groupIdKey: "categoryId" },
|
|
17
17
|
...props
|
|
18
18
|
}
|
|
@@ -60,7 +60,7 @@ const SupplierItemSelector = forwardRef(
|
|
|
60
60
|
label: "Supplier Item",
|
|
61
61
|
placeholder: "Select supplier item",
|
|
62
62
|
searchable: true,
|
|
63
|
-
optionsEndpoint: "commerce-api/supplier-items
|
|
63
|
+
optionsEndpoint: "commerce-api/select-api/supplier-items",
|
|
64
64
|
params,
|
|
65
65
|
transformLabel: defaultTransformLabel,
|
|
66
66
|
transformDescription: defaultTransformDescription,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupplierItemSelector.js","sources":["../lib/selects/supplier-item/SupplierItemFilter.tsx","../lib/selects/supplier-item/SupplierItemSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport type { SupplierItemSelectorParams } from './SupplierItemSelector';\n\nexport type SupplierItemFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured SelectFilter for supplier-item filtering
|
|
1
|
+
{"version":3,"file":"SupplierItemSelector.js","sources":["../lib/selects/supplier-item/SupplierItemFilter.tsx","../lib/selects/supplier-item/SupplierItemSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport type { SupplierItemSelectorParams } from './SupplierItemSelector';\n\nexport type SupplierItemFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured SelectFilter for supplier-item filtering, sharing SupplierItemSelector's params shape.\nexport const SupplierItemFilter = Object.assign(\n forwardRef<HTMLButtonElement, SupplierItemFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"supplierItemId\"\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n optionsEndpoint=\"commerce-api/select-api/supplier-items\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', groupIdKey: 'categoryId' }}\n {...props}\n />\n )),\n { displayName: 'SupplierItemFilter', defaultLabel: 'Supplier Item', defaultName: 'supplierItemId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\nimport type { SelectOption } from '../../components/Select/types';\nimport { formatCurrency } from '../../utils/money';\n\nexport type SupplierItemSelectorParams = {\n supplierId?: string;\n excludeOnPurchaseOrderId?: string;\n excludeOnGoodsReceiptId?: string;\n};\n\nexport type SupplierItemSelectorProps = Omit<SelectProps, 'optionsEndpoint' | 'params'> & {\n params?: SupplierItemSelectorParams;\n};\n\nconst DEFAULT_FIELD_KEYS = {\n valueKey: 'id',\n labelKey: 'name',\n descriptionKey: 'tracking',\n groupIdKey: 'categoryId',\n additionalKeys: 'symbol,unitPrice,currencyCode,allowDecimal,inventoryItemId,uomId',\n} as const;\n\nfunction defaultTransformLabel(label: string, option: SelectOption): string {\n const baseLabel = label.replace(/\\s-\\s[^-]+$/, '');\n const uom = typeof option.additionals?.symbol === 'string' ? option.additionals.symbol.trim() : '';\n const rawPrice = option.additionals?.unitPrice;\n const currencyCode = typeof option.additionals?.currencyCode === 'string' ? option.additionals.currencyCode : null;\n const unitPrice = rawPrice != null && currencyCode != null ? formatCurrency(String(rawPrice), currencyCode) : null;\n if (unitPrice && uom) return `${baseLabel} - ${unitPrice}/${uom}`;\n if (unitPrice) return `${baseLabel} - ${unitPrice}`;\n if (uom) return `${baseLabel} (${uom})`;\n return baseLabel;\n}\n\n// Humanises the inventory_items.tracking enum served as the option description.\nfunction defaultTransformDescription(value: string): string {\n switch (value) {\n case 'quantity':\n return 'Quantity';\n case 'lot':\n return 'Lot';\n case 'serial':\n return 'Serial';\n case 'lot_serial':\n return 'Lot + Serial';\n default:\n return value.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n }\n}\n\nexport const SupplierItemSelector = forwardRef<HTMLButtonElement, SupplierItemSelectorProps>(\n ({ fieldKeys, params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n searchable\n optionsEndpoint=\"commerce-api/select-api/supplier-items\"\n params={params}\n transformLabel={defaultTransformLabel}\n transformDescription={defaultTransformDescription}\n {...props}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n ),\n);\nSupplierItemSelector.displayName = 'SupplierItemSelector';\n"],"names":[],"mappings":"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"}
|
package/dist/SupplierSelector.js
CHANGED
|
@@ -11,7 +11,7 @@ const SupplierFilter = Object.assign(
|
|
|
11
11
|
name: "supplierId",
|
|
12
12
|
label: "Supplier",
|
|
13
13
|
placeholder: "Select supplier",
|
|
14
|
-
optionsEndpoint: "commerce-api/suppliers
|
|
14
|
+
optionsEndpoint: "commerce-api/select-api/suppliers",
|
|
15
15
|
fieldKeys: { valueKey: "id", labelKey: "name" },
|
|
16
16
|
...props
|
|
17
17
|
}
|
|
@@ -39,7 +39,7 @@ const SupplierSelector = forwardRef(({ fieldKeys, ...props }, ref) => /* @__PURE
|
|
|
39
39
|
label: "Supplier",
|
|
40
40
|
placeholder: "Select supplier",
|
|
41
41
|
searchable: true,
|
|
42
|
-
optionsEndpoint: "commerce-api/suppliers
|
|
42
|
+
optionsEndpoint: "commerce-api/select-api/suppliers",
|
|
43
43
|
transformDescription: defaultTransformDescription,
|
|
44
44
|
...props,
|
|
45
45
|
fieldKeys: { ...DEFAULT_FIELD_KEYS, ...fieldKeys }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SupplierSelector.js","sources":["../lib/selects/supplier/SupplierFilter.tsx","../lib/selects/supplier/SupplierSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SupplierFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name'> & { name?: string };\n\n// Pre-configured SelectFilter for supplier filtering with async search\nexport const SupplierFilter = Object.assign(\n forwardRef<HTMLButtonElement, SupplierFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"supplierId\"\n label=\"Supplier\"\n placeholder=\"Select supplier\"\n optionsEndpoint=\"commerce-api/suppliers
|
|
1
|
+
{"version":3,"file":"SupplierSelector.js","sources":["../lib/selects/supplier/SupplierFilter.tsx","../lib/selects/supplier/SupplierSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SupplierFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name'> & { name?: string };\n\n// Pre-configured SelectFilter for supplier filtering with async search\nexport const SupplierFilter = Object.assign(\n forwardRef<HTMLButtonElement, SupplierFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"supplierId\"\n label=\"Supplier\"\n placeholder=\"Select supplier\"\n optionsEndpoint=\"commerce-api/select-api/suppliers\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name' }}\n {...props}\n />\n )),\n { displayName: 'SupplierFilter', defaultLabel: 'Supplier', defaultName: 'supplierId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\nimport type { SelectOption } from '../../components/Select/types';\n\nexport type SupplierSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;\n\nconst DEFAULT_FIELD_KEYS = {\n valueKey: 'id',\n labelKey: 'name',\n descriptionKey: 'currencyCode', // default to name, but transformDescription will show currency + payment terms if available\n additionalKeys: 'currencyCode,paymentTerms',\n} as const;\n\nfunction defaultTransformDescription(value: string, option: SelectOption): string {\n const currencyCode =\n typeof option.additionals?.currencyCode === 'string' ? option.additionals.currencyCode.trim() : '';\n const paymentTerms =\n typeof option.additionals?.paymentTerms === 'string' ? option.additionals.paymentTerms.trim() : '';\n const parts = [currencyCode, paymentTerms].filter(Boolean);\n return parts.length > 0 ? parts.join(' · ') : value;\n}\n\n// Pre-configured Select for supplier selection with async search.\nexport const SupplierSelector = forwardRef<HTMLButtonElement, SupplierSelectorProps>(({ fieldKeys, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Supplier\"\n placeholder=\"Select supplier\"\n searchable\n optionsEndpoint=\"commerce-api/select-api/suppliers\"\n transformDescription={defaultTransformDescription}\n {...props}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n));\nSupplierSelector.displayName = 'SupplierSelector';\n"],"names":[],"mappings":";;;;;AAMO,MAAM,iBAAiB,MAAA,CAAO,MAAA;AAAA,EACnC,UAAA,CAAmD,CAAC,KAAA,EAAO,GAAA,qBACzD,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,YAAA;AAAA,MACL,KAAA,EAAM,UAAA;AAAA,MACN,WAAA,EAAY,iBAAA;AAAA,MACZ,eAAA,EAAgB,mCAAA;AAAA,MAChB,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,MAAA,EAAO;AAAA,MAC7C,GAAG;AAAA;AAAA,GAEP,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,gBAAA,EAAkB,YAAA,EAAc,UAAA,EAAY,aAAa,YAAA;AAC1E;;ACbA,MAAM,kBAAA,GAAqB;AAAA,EACzB,QAAA,EAAU,IAAA;AAAA,EACV,QAAA,EAAU,MAAA;AAAA,EACV,cAAA,EAAgB,cAAA;AAAA;AAAA,EAChB,cAAA,EAAgB;AAClB,CAAA;AAEA,SAAS,2BAAA,CAA4B,OAAe,MAAA,EAA8B;AAChF,EAAA,MAAM,YAAA,GACJ,OAAO,MAAA,CAAO,WAAA,EAAa,YAAA,KAAiB,WAAW,MAAA,CAAO,WAAA,CAAY,YAAA,CAAa,IAAA,EAAK,GAAI,EAAA;AAClG,EAAA,MAAM,YAAA,GACJ,OAAO,MAAA,CAAO,WAAA,EAAa,YAAA,KAAiB,WAAW,MAAA,CAAO,WAAA,CAAY,YAAA,CAAa,IAAA,EAAK,GAAI,EAAA;AAClG,EAAA,MAAM,QAAQ,CAAC,YAAA,EAAc,YAAY,CAAA,CAAE,OAAO,OAAO,CAAA;AACzD,EAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,GAAI,KAAA;AAChD;AAGO,MAAM,gBAAA,GAAmB,WAAqD,CAAC,EAAE,WAAW,GAAG,KAAA,IAAS,GAAA,qBAC7G,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAY,iBAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,mCAAA;AAAA,IAChB,oBAAA,EAAsB,2BAAA;AAAA,IACrB,GAAG,KAAA;AAAA,IACJ,SAAA,EAAW,EAAE,GAAG,kBAAA,EAAoB,GAAG,SAAA;AAAU;AACnD,CACD;AACD,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;;;"}
|
package/dist/Switch.js
CHANGED
|
@@ -2,9 +2,9 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import React__default from 'react';
|
|
4
4
|
import { F as Field, e as FieldLabel, c as FieldError } from './field.js';
|
|
5
|
-
import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './
|
|
6
|
-
import { u as useComposedRefs } from './
|
|
7
|
-
import { c as createContextScope } from './
|
|
5
|
+
import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index20.js';
|
|
6
|
+
import { u as useComposedRefs } from './index12.js';
|
|
7
|
+
import { c as createContextScope } from './index21.js';
|
|
8
8
|
import { u as usePrevious } from './index36.js';
|
|
9
9
|
import { u as useSize } from './index37.js';
|
|
10
10
|
import { c as cn } from './utils.js';
|
package/dist/Switch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n /**\n * Label for the switch\n */\n label?: React.ReactNode;\n\n /**\n * Helper text or description displayed beside the toggle — required for field layout\n */\n description: React.ReactNode;\n\n /**\n * Error message to display below the switch\n */\n error?: string;\n}\n\n/**\n * Switch component for toggling between two states (on/off).\n *\n * Description is required. The label and description stack vertically on the\n * left, with the toggle pinned to the right of the row.\n *\n * @example\n * ```tsx\n * // With Field system (form usage)\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email updates about your account\"\n * />\n *\n * // In a Form component\n * <Form form={form} onSubmit={handleSubmit}>\n * <Switch\n * name=\"marketing\"\n * label=\"Marketing emails\"\n * description=\"Receive promotional content\"\n * />\n * </Form>\n * ```\n */\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n return (\n <Field data-disabled={props.disabled} data-invalid={hasError}>\n <div className=\"flex min-h-9 items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"font-normal cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"text-sm text-muted-foreground leading-normal cursor-pointer\"\n >\n {description}\n </label>\n </div>\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />\n </div>\n\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n\nexport type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch>;\n\n/**\n * A bare, compact switch — the native shadcn switch with no Field wrapper, label, or description.\n * Defaults to the `sm` size; intended for dense layouts like table/matrix cells. Use `Switch` for\n * form-field usage (label + description + error).\n *\n * @example\n * ```tsx\n * <CompactSwitch checked={on} onCheckedChange={setOn} />\n * ```\n */\nexport const CompactSwitch: React.FC<CompactSwitchProps> = ({ size = 'sm', ...props }) => (\n <ShadcnSwitch size={size} {...props} />\n);\n\nCompactSwitch.displayName = 'CompactSwitch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n label?: React.ReactNode;\n\n description: React.ReactNode;\n\n error?: string;\n}\n\n// Switch for toggling on/off; label + description stack left with the toggle pinned right (description required)\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n return (\n <Field data-disabled={props.disabled} data-invalid={hasError}>\n <div className=\"flex min-h-9 items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"font-normal cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"text-sm text-muted-foreground leading-normal cursor-pointer\"\n >\n {description}\n </label>\n </div>\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />\n </div>\n\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n\nexport type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch>;\n\n// Bare compact switch with no Field wrapper, defaults to sm size for dense layouts like table/matrix cells\nexport const CompactSwitch: React.FC<CompactSwitchProps> = ({ size = 'sm', ...props }) => (\n <ShadcnSwitch size={size} {...props} />\n);\n\nCompactSwitch.displayName = 'CompactSwitch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
|
package/dist/TabsSkeleton.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { C as Content, L as List, T as Trigger, R as Root2 } from './
|
|
2
|
+
import { C as Content, L as List, T as Trigger, R as Root2 } from './index19.js';
|
|
3
3
|
import { useState, useId } from 'react';
|
|
4
4
|
import { useParams, useNavigate, useLocation } from 'react-router-dom';
|
|
5
5
|
import { c as cn } from './utils.js';
|
|
6
|
+
import { c as usePermissionGate, b as PermissionLockIcon, l as lockedTip } from './PermissionGate.js';
|
|
6
7
|
import { L as LayoutGroup } from './index39.js';
|
|
7
8
|
import { m as motion, A as AnimatePresence } from './proxy.js';
|
|
9
|
+
import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip2.js';
|
|
8
10
|
import { S as Skeleton } from './Skeleton.js';
|
|
9
11
|
|
|
10
12
|
function Tabs$1({ className, ...props }) {
|
|
@@ -57,13 +59,50 @@ function TabsContent$1({ className, ...props }) {
|
|
|
57
59
|
return /* @__PURE__ */ jsx(Content, { "data-slot": "tabs-content", className: cn("flex-1 outline-none", className), ...props });
|
|
58
60
|
}
|
|
59
61
|
|
|
62
|
+
function useGatedTabs(tabs) {
|
|
63
|
+
const gate = usePermissionGate();
|
|
64
|
+
const gated = [];
|
|
65
|
+
for (const tab of tabs) {
|
|
66
|
+
if (!tab.permission) {
|
|
67
|
+
gated.push(tab);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const result = gate(tab.permission);
|
|
71
|
+
if (!result.granted) continue;
|
|
72
|
+
if (!result.locked) {
|
|
73
|
+
gated.push(tab);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
gated.push({
|
|
77
|
+
...tab,
|
|
78
|
+
disabled: true,
|
|
79
|
+
lockTip: lockedTip(result),
|
|
80
|
+
label: /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
|
|
81
|
+
/* @__PURE__ */ jsx(PermissionLockIcon, { reason: result.reason, className: "size-3.5" }),
|
|
82
|
+
tab.label
|
|
83
|
+
] })
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return gated;
|
|
87
|
+
}
|
|
88
|
+
function firstSelectableValue(tabs) {
|
|
89
|
+
return (tabs.find((tab) => !tab.disabled) ?? tabs[0])?.value;
|
|
90
|
+
}
|
|
91
|
+
function withLockTooltip(trigger, tab) {
|
|
92
|
+
if (!tab.lockTip) return trigger;
|
|
93
|
+
return /* @__PURE__ */ jsx(TooltipProvider, { children: /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
94
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx("span", { className: "inline-flex cursor-not-allowed", children: trigger }) }),
|
|
95
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: tab.lockTip })
|
|
96
|
+
] }) }, tab.value);
|
|
97
|
+
}
|
|
60
98
|
function Tabs(props) {
|
|
61
|
-
|
|
62
|
-
return /* @__PURE__ */ jsx(
|
|
99
|
+
const tabs = useGatedTabs(props.tabs);
|
|
100
|
+
if (props.routeParam) return /* @__PURE__ */ jsx(RoutedTabs, { ...props, tabs, routeParam: props.routeParam });
|
|
101
|
+
return /* @__PURE__ */ jsx(StatefulTabs, { ...props, tabs });
|
|
63
102
|
}
|
|
64
103
|
Tabs.displayName = "Tabs";
|
|
65
104
|
function StatefulTabs({ routeParam: _routeParam, defaultValue, value, onValueChange, tabs, ...rest }) {
|
|
66
|
-
const [activeTab, setActiveTab] = useState(value ?? defaultValue ?? tabs
|
|
105
|
+
const [activeTab, setActiveTab] = useState(value ?? defaultValue ?? firstSelectableValue(tabs));
|
|
67
106
|
function handleValueChange(newValue) {
|
|
68
107
|
setActiveTab(newValue);
|
|
69
108
|
onValueChange?.(newValue);
|
|
@@ -74,7 +113,7 @@ function RoutedTabs({ routeParam, defaultValue, onValueChange, tabs, ...rest })
|
|
|
74
113
|
const params = useParams();
|
|
75
114
|
const navigate = useNavigate();
|
|
76
115
|
const { pathname } = useLocation();
|
|
77
|
-
const fallback = defaultValue ?? tabs
|
|
116
|
+
const fallback = defaultValue ?? firstSelectableValue(tabs) ?? "";
|
|
78
117
|
const current = params[routeParam] ?? fallback;
|
|
79
118
|
function handleValueChange(newValue) {
|
|
80
119
|
const existing = params[routeParam];
|
|
@@ -98,6 +137,7 @@ function TabsView({
|
|
|
98
137
|
value,
|
|
99
138
|
onValueChange,
|
|
100
139
|
tabs,
|
|
140
|
+
className,
|
|
101
141
|
listClassName,
|
|
102
142
|
contentClassName,
|
|
103
143
|
disabled,
|
|
@@ -106,24 +146,31 @@ function TabsView({
|
|
|
106
146
|
...props
|
|
107
147
|
}) {
|
|
108
148
|
const layoutId = useId();
|
|
149
|
+
const rootClassName = cn("min-h-0 flex-1", className);
|
|
150
|
+
const contentBaseClassName = "flex min-h-0 flex-1 flex-col [&>*]:min-h-0 [&>*]:flex-1";
|
|
109
151
|
if (!animated) {
|
|
110
|
-
return /* @__PURE__ */ jsxs(Tabs$1, { value, onValueChange, ...props, children: [
|
|
111
|
-
/* @__PURE__ */ jsx(TabsList$1, { className: listClassName, children: tabs.map(
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
152
|
+
return /* @__PURE__ */ jsxs(Tabs$1, { value, onValueChange, className: rootClassName, ...props, children: [
|
|
153
|
+
/* @__PURE__ */ jsx(TabsList$1, { className: listClassName, children: tabs.map(
|
|
154
|
+
(tab) => withLockTooltip(
|
|
155
|
+
/* @__PURE__ */ jsx(
|
|
156
|
+
TabsTrigger$1,
|
|
157
|
+
{
|
|
158
|
+
value: tab.value,
|
|
159
|
+
disabled: disabled || tab.disabled,
|
|
160
|
+
className: tab.className,
|
|
161
|
+
children: tab.label
|
|
162
|
+
},
|
|
163
|
+
tab.value
|
|
164
|
+
),
|
|
165
|
+
tab
|
|
166
|
+
)
|
|
167
|
+
) }),
|
|
121
168
|
tabs.map((tab) => /* @__PURE__ */ jsx(
|
|
122
169
|
TabsContent$1,
|
|
123
170
|
{
|
|
124
171
|
value: tab.value,
|
|
125
172
|
forceMount: mountStrategy === "all" ? true : void 0,
|
|
126
|
-
className: cn(contentClassName, tab.contentClassName),
|
|
173
|
+
className: cn(contentBaseClassName, contentClassName, tab.contentClassName),
|
|
127
174
|
children: tab.content
|
|
128
175
|
},
|
|
129
176
|
tab.value
|
|
@@ -131,38 +178,43 @@ function TabsView({
|
|
|
131
178
|
] });
|
|
132
179
|
}
|
|
133
180
|
const activeTabItem = tabs.find((t) => t.value === value);
|
|
134
|
-
return /* @__PURE__ */ jsxs(Tabs$1, { value, onValueChange, ...props, children: [
|
|
135
|
-
/* @__PURE__ */ jsx(LayoutGroup, { id: layoutId, children: /* @__PURE__ */ jsx(TabsList$1, { className: listClassName, children: tabs.map(
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
181
|
+
return /* @__PURE__ */ jsxs(Tabs$1, { value, onValueChange, className: rootClassName, ...props, children: [
|
|
182
|
+
/* @__PURE__ */ jsx(LayoutGroup, { id: layoutId, children: /* @__PURE__ */ jsx(TabsList$1, { className: listClassName, children: tabs.map(
|
|
183
|
+
(tab) => withLockTooltip(
|
|
184
|
+
/* @__PURE__ */ jsxs(
|
|
185
|
+
Trigger,
|
|
186
|
+
{
|
|
187
|
+
value: tab.value,
|
|
188
|
+
disabled: disabled || tab.disabled,
|
|
189
|
+
className: cn(
|
|
190
|
+
"relative inline-flex items-center justify-center gap-1.5",
|
|
191
|
+
"rounded-md px-3 py-1",
|
|
192
|
+
"text-sm font-medium whitespace-nowrap",
|
|
193
|
+
"text-muted-foreground",
|
|
194
|
+
"data-[state=active]:text-foreground",
|
|
195
|
+
"transition-colors duration-150",
|
|
196
|
+
"focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50",
|
|
197
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
198
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
199
|
+
tab.className
|
|
200
|
+
),
|
|
201
|
+
children: [
|
|
202
|
+
value === tab.value && /* @__PURE__ */ jsx(
|
|
203
|
+
motion.span,
|
|
204
|
+
{
|
|
205
|
+
layoutId: "tab-pill",
|
|
206
|
+
className: "absolute inset-0 rounded-md bg-background shadow-sm",
|
|
207
|
+
transition: { type: "spring", visualDuration: 0.3, bounce: 0.05 }
|
|
208
|
+
}
|
|
209
|
+
),
|
|
210
|
+
/* @__PURE__ */ jsx("span", { className: "relative z-10", children: tab.label })
|
|
211
|
+
]
|
|
212
|
+
},
|
|
213
|
+
tab.value
|
|
151
214
|
),
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
{
|
|
156
|
-
layoutId: "tab-pill",
|
|
157
|
-
className: "absolute inset-0 rounded-md bg-background shadow-sm",
|
|
158
|
-
transition: { type: "spring", visualDuration: 0.3, bounce: 0.05 }
|
|
159
|
-
}
|
|
160
|
-
),
|
|
161
|
-
/* @__PURE__ */ jsx("span", { className: "relative z-10", children: tab.label })
|
|
162
|
-
]
|
|
163
|
-
},
|
|
164
|
-
tab.value
|
|
165
|
-
)) }) }),
|
|
215
|
+
tab
|
|
216
|
+
)
|
|
217
|
+
) }) }),
|
|
166
218
|
/* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", initial: false, children: activeTabItem && /* @__PURE__ */ jsx(
|
|
167
219
|
motion.div,
|
|
168
220
|
{
|
|
@@ -170,7 +222,7 @@ function TabsView({
|
|
|
170
222
|
animate: { opacity: 1 },
|
|
171
223
|
exit: { opacity: 0 },
|
|
172
224
|
transition: { duration: 0.15, ease: "easeOut" },
|
|
173
|
-
className: cn("
|
|
225
|
+
className: cn(contentBaseClassName, "outline-none", contentClassName, activeTabItem.contentClassName),
|
|
174
226
|
children: activeTabItem.content
|
|
175
227
|
},
|
|
176
228
|
activeTabItem.value
|
package/dist/TabsSkeleton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabsSkeleton.js","sources":["../shadcn/shadcnTabs/tabs.tsx","../lib/components/Tabs/Tabs.tsx","../lib/components/Tabs/TabsSkeleton.tsx"],"sourcesContent":["import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport type * as React from 'react';\nimport { cn } from '../utils';\n\n// Tabs root component wrapping Radix Tabs primitive\nfunction Tabs({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n// Container for tab trigger buttons\nfunction TabsList({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Individual tab trigger button\nfunction TabsTrigger({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n // layout\n 'inline-flex items-center justify-center gap-1.5',\n // sizing & spacing\n 'rounded-md border border-transparent px-3 py-1',\n // typography\n 'text-sm font-medium whitespace-nowrap',\n // colors\n 'text-muted-foreground dark:text-muted-foreground',\n // active state\n 'data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n // transitions\n 'transition-all',\n // focus\n 'focus-visible:outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',\n // disabled\n 'disabled:pointer-events-none disabled:opacity-50',\n // svg children\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// Tab panel content shown when its trigger is active\nfunction TabsContent({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>) {\n return <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('flex-1 outline-none', className)} {...props} />;\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { AnimatePresence, LayoutGroup, motion } from 'motion/react';\nimport type React from 'react';\nimport { useId, useState } from 'react';\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\nimport {\n Tabs as ShadcnTabs,\n TabsContent as ShadcnTabsContent,\n TabsList as ShadcnTabsList,\n TabsTrigger as ShadcnTabsTrigger,\n} from '../../../shadcn/shadcnTabs';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface TabItem {\n value: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n className?: string;\n contentClassName?: string;\n}\n\nexport interface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {\n tabs: TabItem[];\n listClassName?: string;\n contentClassName?: string;\n disabled?: boolean;\n mountStrategy?: 'active' | 'all';\n animated?: boolean;\n // When set, the active tab is bound to this URL path param (e.g. \"versionTab\").\n // The route must include that segment; switching tabs navigates to update it,\n // so the selection is deep-linkable and survives refresh.\n routeParam?: string;\n}\n\ninterface TabsViewProps extends Omit<TabsProps, 'routeParam' | 'defaultValue' | 'value' | 'onValueChange'> {\n value: string;\n onValueChange: (value: string) => void;\n}\n\n// Tabs root — URL-path-bound when routeParam is set, otherwise internal/controlled state\nexport function Tabs(props: TabsProps) {\n if (props.routeParam) return <RoutedTabs {...props} routeParam={props.routeParam} />;\n return <StatefulTabs {...props} />;\n}\n\nTabs.displayName = 'Tabs';\n\n// Internal-state mode — preserves the original uncontrolled/`value`-controlled behavior\nfunction StatefulTabs({ routeParam: _routeParam, defaultValue, value, onValueChange, tabs, ...rest }: TabsProps) {\n const [activeTab, setActiveTab] = useState(value ?? defaultValue ?? tabs[0]?.value);\n\n function handleValueChange(newValue: string) {\n setActiveTab(newValue);\n onValueChange?.(newValue);\n }\n\n return <TabsView value={(value ?? activeTab) as string} onValueChange={handleValueChange} tabs={tabs} {...rest} />;\n}\n\n// URL-path mode — the active tab is read from / written to a route path param\nfunction RoutedTabs({ routeParam, defaultValue, onValueChange, tabs, ...rest }: TabsProps & { routeParam: string }) {\n const params = useParams();\n const navigate = useNavigate();\n const { pathname } = useLocation();\n\n const fallback = (defaultValue as string) ?? tabs[0]?.value ?? '';\n const current = params[routeParam] ?? fallback;\n\n function handleValueChange(newValue: string) {\n const existing = params[routeParam];\n if (existing) {\n const segments = pathname.split('/');\n const index = segments.lastIndexOf(existing);\n if (index >= 0) {\n segments[index] = newValue;\n navigate(segments.join('/'));\n } else {\n navigate(`${pathname.replace(/\\/+$/, '')}/${newValue}`);\n }\n } else {\n navigate(`${pathname.replace(/\\/+$/, '')}/${newValue}`);\n }\n onValueChange?.(newValue);\n }\n\n return <TabsView value={current} onValueChange={handleValueChange} tabs={tabs} {...rest} />;\n}\n\n// Presentational tabs — fully controlled by value + onValueChange\nfunction TabsView({\n value,\n onValueChange,\n tabs,\n listClassName,\n contentClassName,\n disabled,\n mountStrategy = 'active',\n animated = true,\n ...props\n}: TabsViewProps) {\n const layoutId = useId();\n\n if (!animated) {\n return (\n <ShadcnTabs value={value} onValueChange={onValueChange} {...props}>\n <ShadcnTabsList className={listClassName}>\n {tabs.map((tab) => (\n <ShadcnTabsTrigger\n key={tab.value}\n value={tab.value}\n disabled={disabled || tab.disabled}\n className={tab.className}\n >\n {tab.label}\n </ShadcnTabsTrigger>\n ))}\n </ShadcnTabsList>\n {tabs.map((tab) => (\n <ShadcnTabsContent\n key={tab.value}\n value={tab.value}\n forceMount={mountStrategy === 'all' ? true : undefined}\n className={cn(contentClassName, tab.contentClassName)}\n >\n {tab.content}\n </ShadcnTabsContent>\n ))}\n </ShadcnTabs>\n );\n }\n\n const activeTabItem = tabs.find((t) => t.value === value);\n\n return (\n <ShadcnTabs value={value} onValueChange={onValueChange} {...props}>\n <LayoutGroup id={layoutId}>\n <ShadcnTabsList className={listClassName}>\n {tabs.map((tab) => (\n <TabsPrimitive.Trigger\n key={tab.value}\n value={tab.value}\n disabled={disabled || tab.disabled}\n className={cn(\n 'relative inline-flex items-center justify-center gap-1.5',\n 'rounded-md px-3 py-1',\n 'text-sm font-medium whitespace-nowrap',\n 'text-muted-foreground',\n 'data-[state=active]:text-foreground',\n 'transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n 'disabled:pointer-events-none disabled:opacity-50',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n tab.className,\n )}\n >\n {value === tab.value && (\n <motion.span\n layoutId=\"tab-pill\"\n className=\"absolute inset-0 rounded-md bg-background shadow-sm\"\n transition={{ type: 'spring', visualDuration: 0.3, bounce: 0.05 }}\n />\n )}\n <span className=\"relative z-10\">{tab.label}</span>\n </TabsPrimitive.Trigger>\n ))}\n </ShadcnTabsList>\n </LayoutGroup>\n <AnimatePresence mode=\"wait\" initial={false}>\n {activeTabItem && (\n <motion.div\n key={activeTabItem.value}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n className={cn('flex-1 outline-none', contentClassName, activeTabItem.contentClassName)}\n >\n {activeTabItem.content}\n </motion.div>\n )}\n </AnimatePresence>\n </ShadcnTabs>\n );\n}\n\nexport const TabsList = ShadcnTabsList;\nexport const TabsContent = ShadcnTabsContent;\nexport const TabsTrigger = ShadcnTabsTrigger;\n","import type * as React from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport { Skeleton } from '../Skeleton';\n\nconst DEFAULT_TAB_WIDTHS = ['w-20', 'w-14', 'w-16', 'w-24', 'w-18'];\n\nexport interface TabsSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Number of tab triggers to render */\n count?: number;\n /** Height of the content area below the tabs */\n contentHeight?: string;\n /** Custom widths for each tab trigger (Tailwind width classes) */\n tabWidths?: string[];\n}\n\nexport const TabsSkeleton = ({\n count = 3,\n contentHeight = '500px',\n tabWidths,\n className,\n ...props\n}: TabsSkeletonProps) => {\n const widths = tabWidths ?? DEFAULT_TAB_WIDTHS;\n\n return (\n <div className={cn('flex flex-col gap-2', className)} {...props}>\n <div className=\"inline-flex h-9 w-fit items-center gap-0.5 rounded-lg bg-muted p-[3px]\">\n {Array.from({ length: count }, (_, i) => (\n <Skeleton\n // biome-ignore lint/suspicious/noArrayIndexKey: <static list of skeletons, not dynamic>\n key={i}\n className={cn('h-7 rounded-md', widths[i % widths.length], i === 0 && 'bg-background')}\n />\n ))}\n </div>\n <Skeleton className=\"w-full rounded-lg\" style={{ height: contentHeight }} />\n </div>\n );\n};\n\nTabsSkeleton.displayName = 'TabsSkeleton';\n"],"names":["Tabs","TabsPrimitive.Root","TabsList","TabsPrimitive.List","TabsTrigger","TabsPrimitive.Trigger","TabsContent","TabsPrimitive.Content","ShadcnTabs","ShadcnTabsList","ShadcnTabsTrigger","ShadcnTabsContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"TabsSkeleton.js","sources":["../shadcn/shadcnTabs/tabs.tsx","../lib/components/Tabs/Tabs.tsx","../lib/components/Tabs/TabsSkeleton.tsx"],"sourcesContent":["import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport type * as React from 'react';\nimport { cn } from '../utils';\n\n// Tabs root component wrapping Radix Tabs primitive\nfunction Tabs({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root>) {\n return <TabsPrimitive.Root data-slot=\"tabs\" className={cn('flex flex-col gap-2', className)} {...props} />;\n}\n\n// Container for tab trigger buttons\nfunction TabsList({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>) {\n return (\n <TabsPrimitive.List\n data-slot=\"tabs-list\"\n className={cn(\n 'bg-muted text-muted-foreground inline-flex h-9 w-fit items-center justify-center rounded-lg p-[3px]',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Individual tab trigger button\nfunction TabsTrigger({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>) {\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(\n // layout\n 'inline-flex items-center justify-center gap-1.5',\n // sizing & spacing\n 'rounded-md border border-transparent px-3 py-1',\n // typography\n 'text-sm font-medium whitespace-nowrap',\n // colors\n 'text-muted-foreground dark:text-muted-foreground',\n // active state\n 'data-[state=active]:bg-background data-[state=active]:text-foreground dark:data-[state=active]:text-foreground data-[state=active]:shadow-sm',\n // transitions\n 'transition-all',\n // focus\n 'focus-visible:outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50',\n // disabled\n 'disabled:pointer-events-none disabled:opacity-50',\n // svg children\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n// Tab panel content shown when its trigger is active\nfunction TabsContent({ className, ...props }: React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>) {\n return <TabsPrimitive.Content data-slot=\"tabs-content\" className={cn('flex-1 outline-none', className)} {...props} />;\n}\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","import * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { AnimatePresence, LayoutGroup, motion } from 'motion/react';\nimport type React from 'react';\nimport { useId, useState } from 'react';\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\nimport {\n Tabs as ShadcnTabs,\n TabsContent as ShadcnTabsContent,\n TabsList as ShadcnTabsList,\n TabsTrigger as ShadcnTabsTrigger,\n} from '../../../shadcn/shadcnTabs';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../../../shadcn/shadcnTooltip';\nimport { cn } from '../../../shadcn/utils';\nimport { lockedTip, PermissionLockIcon, usePermissionGate } from '../PermissionGate';\n\nexport interface TabItem {\n value: string;\n label: React.ReactNode;\n content: React.ReactNode;\n disabled?: boolean;\n className?: string;\n contentClassName?: string;\n permission?: string;\n // Set internally by permission gating: the upsell tip shown when a tab is plan/BU-locked\n lockTip?: string;\n}\n\nexport interface TabsProps extends React.ComponentPropsWithoutRef<typeof TabsPrimitive.Root> {\n tabs: TabItem[];\n listClassName?: string;\n contentClassName?: string;\n disabled?: boolean;\n mountStrategy?: 'active' | 'all';\n animated?: boolean;\n routeParam?: string;\n}\n\ninterface TabsViewProps extends Omit<TabsProps, 'routeParam' | 'defaultValue' | 'value' | 'onValueChange'> {\n value: string;\n onValueChange: (value: string) => void;\n}\n\n// Drops tabs the role doesn't grant and disables plan/BU-locked ones with a lock + upsell tip\nfunction useGatedTabs(tabs: TabItem[]): TabItem[] {\n const gate = usePermissionGate();\n const gated: TabItem[] = [];\n for (const tab of tabs) {\n if (!tab.permission) {\n gated.push(tab);\n continue;\n }\n const result = gate(tab.permission);\n if (!result.granted) continue;\n if (!result.locked) {\n gated.push(tab);\n continue;\n }\n gated.push({\n ...tab,\n disabled: true,\n lockTip: lockedTip(result),\n label: (\n <span className=\"inline-flex items-center gap-1.5\">\n <PermissionLockIcon reason={result.reason} className=\"size-3.5\" />\n {tab.label}\n </span>\n ),\n });\n }\n return gated;\n}\n\n// First tab a user can actually open — skips locked/disabled tabs so the default selection lands on a real one\nfunction firstSelectableValue(tabs: TabItem[]): string | undefined {\n return (tabs.find((tab) => !tab.disabled) ?? tabs[0])?.value;\n}\n\n// Wraps a plan/BU-locked (disabled) trigger in a hover tooltip — disabled triggers don't emit hover, so the\n// trigger sits inside a hoverable wrapper span (mirrors Button's locked tooltip)\nfunction withLockTooltip(trigger: React.ReactNode, tab: TabItem): React.ReactNode {\n if (!tab.lockTip) return trigger;\n return (\n <TooltipProvider key={tab.value}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex cursor-not-allowed\">{trigger}</span>\n </TooltipTrigger>\n <TooltipContent>{tab.lockTip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n\n// Tabs root — URL-path-bound when routeParam is set, otherwise internal/controlled state\nexport function Tabs(props: TabsProps) {\n const tabs = useGatedTabs(props.tabs);\n if (props.routeParam) return <RoutedTabs {...props} tabs={tabs} routeParam={props.routeParam} />;\n return <StatefulTabs {...props} tabs={tabs} />;\n}\n\nTabs.displayName = 'Tabs';\n\n// Internal-state mode — preserves the original uncontrolled/`value`-controlled behavior\nfunction StatefulTabs({ routeParam: _routeParam, defaultValue, value, onValueChange, tabs, ...rest }: TabsProps) {\n const [activeTab, setActiveTab] = useState(value ?? defaultValue ?? firstSelectableValue(tabs));\n\n function handleValueChange(newValue: string) {\n setActiveTab(newValue);\n onValueChange?.(newValue);\n }\n\n return <TabsView value={(value ?? activeTab) as string} onValueChange={handleValueChange} tabs={tabs} {...rest} />;\n}\n\n// URL-path mode — the active tab is read from / written to a route path param\nfunction RoutedTabs({ routeParam, defaultValue, onValueChange, tabs, ...rest }: TabsProps & { routeParam: string }) {\n const params = useParams();\n const navigate = useNavigate();\n const { pathname } = useLocation();\n\n const fallback = (defaultValue as string) ?? firstSelectableValue(tabs) ?? '';\n const current = params[routeParam] ?? fallback;\n\n function handleValueChange(newValue: string) {\n const existing = params[routeParam];\n if (existing) {\n const segments = pathname.split('/');\n const index = segments.lastIndexOf(existing);\n if (index >= 0) {\n segments[index] = newValue;\n navigate(segments.join('/'));\n } else {\n navigate(`${pathname.replace(/\\/+$/, '')}/${newValue}`);\n }\n } else {\n navigate(`${pathname.replace(/\\/+$/, '')}/${newValue}`);\n }\n onValueChange?.(newValue);\n }\n\n return <TabsView value={current} onValueChange={handleValueChange} tabs={tabs} {...rest} />;\n}\n\n// Presentational tabs — fully controlled by value + onValueChange\nfunction TabsView({\n value,\n onValueChange,\n tabs,\n className,\n listClassName,\n contentClassName,\n disabled,\n mountStrategy = 'active',\n animated = true,\n ...props\n}: TabsViewProps) {\n const layoutId = useId();\n const rootClassName = cn('min-h-0 flex-1', className);\n const contentBaseClassName = 'flex min-h-0 flex-1 flex-col [&>*]:min-h-0 [&>*]:flex-1';\n\n if (!animated) {\n return (\n <ShadcnTabs value={value} onValueChange={onValueChange} className={rootClassName} {...props}>\n <ShadcnTabsList className={listClassName}>\n {tabs.map((tab) =>\n withLockTooltip(\n <ShadcnTabsTrigger\n key={tab.value}\n value={tab.value}\n disabled={disabled || tab.disabled}\n className={tab.className}\n >\n {tab.label}\n </ShadcnTabsTrigger>,\n tab,\n ),\n )}\n </ShadcnTabsList>\n {tabs.map((tab) => (\n <ShadcnTabsContent\n key={tab.value}\n value={tab.value}\n forceMount={mountStrategy === 'all' ? true : undefined}\n className={cn(contentBaseClassName, contentClassName, tab.contentClassName)}\n >\n {tab.content}\n </ShadcnTabsContent>\n ))}\n </ShadcnTabs>\n );\n }\n\n const activeTabItem = tabs.find((t) => t.value === value);\n\n return (\n <ShadcnTabs value={value} onValueChange={onValueChange} className={rootClassName} {...props}>\n <LayoutGroup id={layoutId}>\n <ShadcnTabsList className={listClassName}>\n {tabs.map((tab) =>\n withLockTooltip(\n <TabsPrimitive.Trigger\n key={tab.value}\n value={tab.value}\n disabled={disabled || tab.disabled}\n className={cn(\n 'relative inline-flex items-center justify-center gap-1.5',\n 'rounded-md px-3 py-1',\n 'text-sm font-medium whitespace-nowrap',\n 'text-muted-foreground',\n 'data-[state=active]:text-foreground',\n 'transition-colors duration-150',\n 'focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-ring/50',\n 'disabled:pointer-events-none disabled:opacity-50',\n \"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n tab.className,\n )}\n >\n {value === tab.value && (\n <motion.span\n layoutId=\"tab-pill\"\n className=\"absolute inset-0 rounded-md bg-background shadow-sm\"\n transition={{ type: 'spring', visualDuration: 0.3, bounce: 0.05 }}\n />\n )}\n <span className=\"relative z-10\">{tab.label}</span>\n </TabsPrimitive.Trigger>,\n tab,\n ),\n )}\n </ShadcnTabsList>\n </LayoutGroup>\n <AnimatePresence mode=\"wait\" initial={false}>\n {activeTabItem && (\n <motion.div\n key={activeTabItem.value}\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15, ease: 'easeOut' }}\n className={cn(contentBaseClassName, 'outline-none', contentClassName, activeTabItem.contentClassName)}\n >\n {activeTabItem.content}\n </motion.div>\n )}\n </AnimatePresence>\n </ShadcnTabs>\n );\n}\n\nexport const TabsList = ShadcnTabsList;\nexport const TabsContent = ShadcnTabsContent;\nexport const TabsTrigger = ShadcnTabsTrigger;\n","import type * as React from 'react';\nimport { cn } from '../../../shadcn/utils';\nimport { Skeleton } from '../Skeleton';\n\nconst DEFAULT_TAB_WIDTHS = ['w-20', 'w-14', 'w-16', 'w-24', 'w-18'];\n\nexport interface TabsSkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n count?: number;\n contentHeight?: string;\n tabWidths?: string[];\n}\n\nexport const TabsSkeleton = ({\n count = 3,\n contentHeight = '500px',\n tabWidths,\n className,\n ...props\n}: TabsSkeletonProps) => {\n const widths = tabWidths ?? DEFAULT_TAB_WIDTHS;\n\n return (\n <div className={cn('flex flex-col gap-2', className)} {...props}>\n <div className=\"inline-flex h-9 w-fit items-center gap-0.5 rounded-lg bg-muted p-[3px]\">\n {Array.from({ length: count }, (_, i) => (\n <Skeleton\n // biome-ignore lint/suspicious/noArrayIndexKey: <static list of skeletons, not dynamic>\n key={i}\n className={cn('h-7 rounded-md', widths[i % widths.length], i === 0 && 'bg-background')}\n />\n ))}\n </div>\n <Skeleton className=\"w-full rounded-lg\" style={{ height: contentHeight }} />\n </div>\n );\n};\n\nTabsSkeleton.displayName = 'TabsSkeleton';\n"],"names":["Tabs","TabsPrimitive.Root","TabsList","TabsPrimitive.List","TabsTrigger","TabsPrimitive.Trigger","TabsContent","TabsPrimitive.Content","ShadcnTabs","ShadcnTabsList","ShadcnTabsTrigger","ShadcnTabsContent"],"mappings":";;;;;;;;;;;AAKA,SAASA,MAAA,CAAK,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8D;AAChG,EAAA,uBAAO,GAAA,CAACC,KAAc,EAAd,EAAmB,WAAA,EAAU,MAAA,EAAO,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AAC1G;AAGA,SAASC,UAAA,CAAS,EAAE,SAAA,EAAW,GAAG,OAAM,EAA8D;AACpG,EAAA,uBACE,GAAA;AAAA,IAACC,IAAc;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qGAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAASC,aAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiE;AAC1G,EAAA,uBACE,GAAA;AAAA,IAACC,OAAc;AAAA,IAAd;AAAA,MACC,WAAA,EAAU,cAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA;AAAA,QAET,iDAAA;AAAA;AAAA,QAEA,gDAAA;AAAA;AAAA,QAEA,uCAAA;AAAA;AAAA,QAEA,kDAAA;AAAA;AAAA,QAEA,8IAAA;AAAA;AAAA,QAEA,gBAAA;AAAA;AAAA,QAEA,0GAAA;AAAA;AAAA,QAEA,kDAAA;AAAA;AAAA,QAEA,mFAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAGA,SAASC,aAAA,CAAY,EAAE,SAAA,EAAW,GAAG,OAAM,EAAiE;AAC1G,EAAA,uBAAO,GAAA,CAACC,OAAc,EAAd,EAAsB,WAAA,EAAU,cAAA,EAAe,SAAA,EAAW,EAAA,CAAG,qBAAA,EAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CAAA;AACrH;;ACdA,SAAS,aAAa,IAAA,EAA4B;AAChD,EAAA,MAAM,OAAO,iBAAA,EAAkB;AAC/B,EAAA,MAAM,QAAmB,EAAC;AAC1B,EAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,IAAA,IAAI,CAAC,IAAI,UAAA,EAAY;AACnB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,UAAU,CAAA;AAClC,IAAA,IAAI,CAAC,OAAO,OAAA,EAAS;AACrB,IAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA;AAAA,IACF;AACA,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,GAAG,GAAA;AAAA,MACH,QAAA,EAAU,IAAA;AAAA,MACV,OAAA,EAAS,UAAU,MAAM,CAAA;AAAA,MACzB,KAAA,kBACE,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAA,EACd,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,kBAAA,EAAA,EAAmB,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,WAAU,UAAA,EAAW,CAAA;AAAA,QAC/D,GAAA,CAAI;AAAA,OAAA,EACP;AAAA,KAEH,CAAA;AAAA,EACH;AACA,EAAA,OAAO,KAAA;AACT;AAGA,SAAS,qBAAqB,IAAA,EAAqC;AACjE,EAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,CAAC,IAAI,QAAQ,CAAA,IAAK,IAAA,CAAK,CAAC,CAAA,GAAI,KAAA;AACzD;AAIA,SAAS,eAAA,CAAgB,SAA0B,GAAA,EAA+B;AAChF,EAAA,IAAI,CAAC,GAAA,CAAI,OAAA,EAAS,OAAO,OAAA;AACzB,EAAA,uBACE,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,SAAO,IAAA,EACrB,QAAA,kBAAA,GAAA,CAAC,UAAK,SAAA,EAAU,gCAAA,EAAkC,mBAAQ,CAAA,EAC5D,CAAA;AAAA,oBACA,GAAA,CAAC,cAAA,EAAA,EAAgB,QAAA,EAAA,GAAA,CAAI,OAAA,EAAQ;AAAA,GAAA,EAC/B,CAAA,EAAA,EANoB,IAAI,KAO1B,CAAA;AAEJ;AAGO,SAAS,KAAK,KAAA,EAAkB;AACrC,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA;AACpC,EAAA,IAAI,KAAA,CAAM,UAAA,EAAY,uBAAO,GAAA,CAAC,UAAA,EAAA,EAAY,GAAG,KAAA,EAAO,IAAA,EAAY,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,CAAA;AAC9F,EAAA,uBAAO,GAAA,CAAC,YAAA,EAAA,EAAc,GAAG,KAAA,EAAO,IAAA,EAAY,CAAA;AAC9C;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAGnB,SAAS,YAAA,CAAa,EAAE,UAAA,EAAY,WAAA,EAAa,YAAA,EAAc,OAAO,aAAA,EAAe,IAAA,EAAM,GAAG,IAAA,EAAK,EAAc;AAC/G,EAAA,MAAM,CAAC,WAAW,YAAY,CAAA,GAAI,SAAS,KAAA,IAAS,YAAA,IAAgB,oBAAA,CAAqB,IAAI,CAAC,CAAA;AAE9F,EAAA,SAAS,kBAAkB,QAAA,EAAkB;AAC3C,IAAA,YAAA,CAAa,QAAQ,CAAA;AACrB,IAAA,aAAA,GAAgB,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,uBAAO,GAAA,CAAC,YAAS,KAAA,EAAQ,KAAA,IAAS,WAAsB,aAAA,EAAe,iBAAA,EAAmB,IAAA,EAAa,GAAG,IAAA,EAAM,CAAA;AAClH;AAGA,SAAS,UAAA,CAAW,EAAE,UAAA,EAAY,YAAA,EAAc,eAAe,IAAA,EAAM,GAAG,MAAK,EAAuC;AAClH,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,WAAA,EAAY;AAEjC,EAAA,MAAM,QAAA,GAAY,YAAA,IAA2B,oBAAA,CAAqB,IAAI,CAAA,IAAK,EAAA;AAC3E,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,UAAU,CAAA,IAAK,QAAA;AAEtC,EAAA,SAAS,kBAAkB,QAAA,EAAkB;AAC3C,IAAA,MAAM,QAAA,GAAW,OAAO,UAAU,CAAA;AAClC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AACnC,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,WAAA,CAAY,QAAQ,CAAA;AAC3C,MAAA,IAAI,SAAS,CAAA,EAAG;AACd,QAAA,QAAA,CAAS,KAAK,CAAA,GAAI,QAAA;AAClB,QAAA,QAAA,CAAS,QAAA,CAAS,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,CAAA,EAAG,SAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,MACxD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,CAAA,EAAG,SAAS,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAC,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAE,CAAA;AAAA,IACxD;AACA,IAAA,aAAA,GAAgB,QAAQ,CAAA;AAAA,EAC1B;AAEA,EAAA,uBAAO,GAAA,CAAC,YAAS,KAAA,EAAO,OAAA,EAAS,eAAe,iBAAA,EAAmB,IAAA,EAAa,GAAG,IAAA,EAAM,CAAA;AAC3F;AAGA,SAAS,QAAA,CAAS;AAAA,EAChB,KAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA,GAAgB,QAAA;AAAA,EAChB,QAAA,GAAW,IAAA;AAAA,EACX,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,WAAW,KAAA,EAAM;AACvB,EAAA,MAAM,aAAA,GAAgB,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AACpD,EAAA,MAAM,oBAAA,GAAuB,yDAAA;AAE7B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,4BACGC,MAAA,EAAA,EAAW,KAAA,EAAc,eAA8B,SAAA,EAAW,aAAA,EAAgB,GAAG,KAAA,EACpF,QAAA,EAAA;AAAA,sBAAA,GAAA,CAACC,UAAA,EAAA,EAAe,SAAA,EAAW,aAAA,EACxB,QAAA,EAAA,IAAA,CAAK,GAAA;AAAA,QAAI,CAAC,GAAA,KACT,eAAA;AAAA,0BACE,GAAA;AAAA,YAACC,aAAA;AAAA,YAAA;AAAA,cAEC,OAAO,GAAA,CAAI,KAAA;AAAA,cACX,QAAA,EAAU,YAAY,GAAA,CAAI,QAAA;AAAA,cAC1B,WAAW,GAAA,CAAI,SAAA;AAAA,cAEd,QAAA,EAAA,GAAA,CAAI;AAAA,aAAA;AAAA,YALA,GAAA,CAAI;AAAA,WAMX;AAAA,UACA;AAAA;AACF,OACF,EACF,CAAA;AAAA,MACC,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACT,GAAA;AAAA,QAACC,aAAA;AAAA,QAAA;AAAA,UAEC,OAAO,GAAA,CAAI,KAAA;AAAA,UACX,UAAA,EAAY,aAAA,KAAkB,KAAA,GAAQ,IAAA,GAAO,MAAA;AAAA,UAC7C,SAAA,EAAW,EAAA,CAAG,oBAAA,EAAsB,gBAAA,EAAkB,IAAI,gBAAgB,CAAA;AAAA,UAEzE,QAAA,EAAA,GAAA,CAAI;AAAA,SAAA;AAAA,QALA,GAAA,CAAI;AAAA,OAOZ;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,gBAAgB,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AAExD,EAAA,4BACGH,MAAA,EAAA,EAAW,KAAA,EAAc,eAA8B,SAAA,EAAW,aAAA,EAAgB,GAAG,KAAA,EACpF,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,eAAY,EAAA,EAAI,QAAA,EACf,8BAACC,UAAA,EAAA,EAAe,SAAA,EAAW,eACxB,QAAA,EAAA,IAAA,CAAK,GAAA;AAAA,MAAI,CAAC,GAAA,KACT,eAAA;AAAA,wBACE,IAAA;AAAA,UAACJ,OAAc;AAAA,UAAd;AAAA,YAEC,OAAO,GAAA,CAAI,KAAA;AAAA,YACX,QAAA,EAAU,YAAY,GAAA,CAAI,QAAA;AAAA,YAC1B,SAAA,EAAW,EAAA;AAAA,cACT,0DAAA;AAAA,cACA,sBAAA;AAAA,cACA,uCAAA;AAAA,cACA,uBAAA;AAAA,cACA,qCAAA;AAAA,cACA,gCAAA;AAAA,cACA,gFAAA;AAAA,cACA,kDAAA;AAAA,cACA,mFAAA;AAAA,cACA,GAAA,CAAI;AAAA,aACN;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,KAAA,KAAU,IAAI,KAAA,oBACb,GAAA;AAAA,gBAAC,MAAA,CAAO,IAAA;AAAA,gBAAP;AAAA,kBACC,QAAA,EAAS,UAAA;AAAA,kBACT,SAAA,EAAU,qDAAA;AAAA,kBACV,YAAY,EAAE,IAAA,EAAM,UAAU,cAAA,EAAgB,GAAA,EAAK,QAAQ,IAAA;AAAK;AAAA,eAClE;AAAA,8BAEF,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAA,EAAiB,cAAI,KAAA,EAAM;AAAA;AAAA,WAAA;AAAA,UAvBtC,GAAA,CAAI;AAAA,SAwBX;AAAA,QACA;AAAA;AACF,OAEJ,CAAA,EACF,CAAA;AAAA,wBACC,eAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EAAO,OAAA,EAAS,OACnC,QAAA,EAAA,aAAA,oBACC,GAAA;AAAA,MAAC,MAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QAEC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACnB,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,SAAA,EAAU;AAAA,QAC9C,WAAW,EAAA,CAAG,oBAAA,EAAsB,cAAA,EAAgB,gBAAA,EAAkB,cAAc,gBAAgB,CAAA;AAAA,QAEnG,QAAA,EAAA,aAAA,CAAc;AAAA,OAAA;AAAA,MAPV,aAAA,CAAc;AAAA,KAQrB,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAEO,MAAM,QAAA,GAAWI;AACjB,MAAM,WAAA,GAAcE;AACpB,MAAM,WAAA,GAAcD;;ACvP3B,MAAM,qBAAqB,CAAC,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,QAAQ,MAAM,CAAA;AAQ3D,MAAM,eAAe,CAAC;AAAA,EAC3B,KAAA,GAAQ,CAAA;AAAA,EACR,aAAA,GAAgB,OAAA;AAAA,EAChB,SAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAyB;AACvB,EAAA,MAAM,SAAS,SAAA,IAAa,kBAAA;AAE5B,EAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,EAAA,CAAG,uBAAuB,SAAS,CAAA,EAAI,GAAG,KAAA,EACxD,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACZ,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAM,EAAG,CAAC,CAAA,EAAG,CAAA,qBACjC,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAGC,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,MAAA,CAAO,CAAA,GAAI,OAAO,MAAM,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,eAAe;AAAA,OAAA;AAAA,MADhF;AAAA,KAGR,CAAA,EACH,CAAA;AAAA,oBACA,GAAA,CAAC,YAAS,SAAA,EAAU,mBAAA,EAAoB,OAAO,EAAE,MAAA,EAAQ,eAAc,EAAG;AAAA,GAAA,EAC5E,CAAA;AAEJ;AAEA,YAAA,CAAa,WAAA,GAAc,cAAA;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { S as Select } from './Select.js';
|
|
4
|
+
|
|
5
|
+
const TaxClassSelector = forwardRef((props, ref) => /* @__PURE__ */ jsx(
|
|
6
|
+
Select,
|
|
7
|
+
{
|
|
8
|
+
ref,
|
|
9
|
+
label: "Tax Class",
|
|
10
|
+
placeholder: "Select tax class",
|
|
11
|
+
searchable: true,
|
|
12
|
+
optionsEndpoint: "commerce-api/select-api/tax-classes",
|
|
13
|
+
fieldKeys: { valueKey: "id", labelKey: "name", descriptionKey: "code" },
|
|
14
|
+
...props
|
|
15
|
+
}
|
|
16
|
+
));
|
|
17
|
+
TaxClassSelector.displayName = "TaxClassSelector";
|
|
18
|
+
|
|
19
|
+
export { TaxClassSelector as T };
|
|
20
|
+
//# sourceMappingURL=TaxClassSelector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaxClassSelector.js","sources":["../lib/selects/tax-class/TaxClassSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type TaxClassSelectorProps = Omit<SelectProps, 'optionsEndpoint'>;\n\n// Pre-configured Select for tax-class selection (id → name, code as description); BU-scoped server-side via RLS\nexport const TaxClassSelector = forwardRef<HTMLButtonElement, TaxClassSelectorProps>((props, ref) => (\n <Select\n ref={ref}\n label=\"Tax Class\"\n placeholder=\"Select tax class\"\n searchable\n optionsEndpoint=\"commerce-api/select-api/tax-classes\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', descriptionKey: 'code' }}\n {...props}\n />\n));\nTaxClassSelector.displayName = 'TaxClassSelector';\n"],"names":[],"mappings":";;;;AAMO,MAAM,gBAAA,GAAmB,UAAA,CAAqD,CAAC,KAAA,EAAO,GAAA,qBAC3F,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,WAAA;AAAA,IACN,WAAA,EAAY,kBAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,qCAAA;AAAA,IAChB,WAAW,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,MAAA,EAAQ,gBAAgB,MAAA,EAAO;AAAA,IACrE,GAAG;AAAA;AACN,CACD;AACD,gBAAA,CAAiB,WAAA,GAAc,kBAAA;;;;"}
|