@12-apps/ui 6.24.8 → 6.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/_internal/components/data-display/Alert/Alert.helpers.js +5 -1
  2. package/dist/_internal/components/data-display/Alert/Alert.js +3 -3
  3. package/dist/_internal/components/data-display/Alert/Alert.styles.js +2 -2
  4. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -4
  5. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
  6. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +19 -19
  7. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +24 -24
  8. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +15 -15
  9. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +16 -16
  10. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +18 -18
  11. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +16 -16
  12. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +4 -4
  13. package/dist/_internal/components/data-display/index.js +3 -3
  14. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -8
  15. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +2 -2
  16. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +2 -2
  17. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +4 -4
  18. package/dist/_internal/components/form/CategorySelect/CategoryQuickActions.js +2 -2
  19. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +7 -9
  20. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +14 -14
  21. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -1
  22. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +2 -2
  23. package/dist/_internal/components/form/CategorySelect/category-keyboard.js +2 -2
  24. package/dist/_internal/components/form/CategorySelect/category-tree.js +11 -3
  25. package/dist/_internal/components/form/CategorySelect/useCategoryCommit.js +2 -2
  26. package/dist/_internal/components/form/CategorySelect/useCategoryKeyHandler.js +3 -3
  27. package/dist/_internal/components/form/CategorySelect/useCategorySelect.js +2 -2
  28. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +15 -15
  29. package/dist/_internal/components/form/total-form/Fields/index.js +16 -16
  30. package/dist/_internal/components/index.js +3 -3
  31. package/dist/{chunk-WNMYWQ7D.js → chunk-4Y6SPFKW.js} +10 -8
  32. package/dist/chunk-4Y6SPFKW.js.map +1 -0
  33. package/dist/{chunk-KM5O4ICK.js → chunk-7LCXGJN5.js} +2 -2
  34. package/dist/{chunk-NLJV4CPF.js → chunk-7MN6I5NK.js} +2 -2
  35. package/dist/{chunk-PN5CQKA2.js → chunk-AXTLFK4T.js} +2 -2
  36. package/dist/{chunk-4TXIZ5WI.js → chunk-CJUOBTLL.js} +2 -2
  37. package/dist/{chunk-57Z2ND3N.js → chunk-CXLAJZSE.js} +2 -2
  38. package/dist/{chunk-E3PUH5IF.js → chunk-EQ7PWGBN.js} +2 -2
  39. package/dist/{chunk-EJQW2IYW.js → chunk-FPFUXRD2.js} +2 -2
  40. package/dist/{chunk-KIHQE5YA.js → chunk-GVDJQMFI.js} +2 -2
  41. package/dist/{chunk-N3QUEBNS.js → chunk-L7VH6IMR.js} +14 -1
  42. package/dist/chunk-L7VH6IMR.js.map +1 -0
  43. package/dist/{chunk-OFOYMZRY.js → chunk-NPN7JTRM.js} +22 -47
  44. package/dist/chunk-NPN7JTRM.js.map +1 -0
  45. package/dist/{chunk-OVLNF4AZ.js → chunk-P7IVAMAU.js} +24 -35
  46. package/dist/chunk-P7IVAMAU.js.map +1 -0
  47. package/dist/chunk-PN4HVM43.js +160 -0
  48. package/dist/chunk-PN4HVM43.js.map +1 -0
  49. package/dist/{chunk-WWM2YTW4.js → chunk-R2AZOWEZ.js} +21 -27
  50. package/dist/chunk-R2AZOWEZ.js.map +1 -0
  51. package/dist/{chunk-2GB5CIN6.js → chunk-RZVUY2MO.js} +8 -4
  52. package/dist/chunk-RZVUY2MO.js.map +1 -0
  53. package/dist/{chunk-FBI6QB3O.js → chunk-TVPPA4RD.js} +3 -3
  54. package/dist/{chunk-KFWIOFMS.js → chunk-TWY5FOBY.js} +3 -3
  55. package/dist/{chunk-6ZY5XU4J.js → chunk-UIZH4DAE.js} +2 -2
  56. package/dist/{chunk-ISH42UC7.js → chunk-USJPZ5Q7.js} +2 -2
  57. package/dist/{chunk-ZUIJ3N7N.js → chunk-V6Z4XS3I.js} +5 -3
  58. package/dist/chunk-V6Z4XS3I.js.map +1 -0
  59. package/dist/{chunk-SYJMI2NP.js → chunk-VNTOBLIB.js} +2 -2
  60. package/dist/{chunk-JM64OEU6.js → chunk-WAPJ2DL3.js} +10 -13
  61. package/dist/chunk-WAPJ2DL3.js.map +1 -0
  62. package/dist/{chunk-ZAB65STX.js → chunk-XHHR6G35.js} +2 -2
  63. package/dist/{chunk-WIT3Y7JT.js → chunk-Y2B3I3IH.js} +2 -2
  64. package/dist/{chunk-R6SNYC3D.js → chunk-Y3KRUT7O.js} +2 -2
  65. package/dist/{chunk-TPLKJHNN.js → chunk-ZC7RQDZ5.js} +8 -7
  66. package/dist/chunk-ZC7RQDZ5.js.map +1 -0
  67. package/dist/{chunk-TFO6GBW7.js → chunk-ZS44PY7T.js} +5 -1
  68. package/dist/chunk-ZS44PY7T.js.map +1 -0
  69. package/dist/{chunk-AJ6XEO4E.js → chunk-ZUY65MFH.js} +2 -2
  70. package/dist/data-display/Alert.js +3 -3
  71. package/dist/data-display/CardKit.js +5 -5
  72. package/dist/data-display/DataViews.js +24 -24
  73. package/dist/form/CategorySelect.js +24 -16
  74. package/dist/form/total-form.js +16 -16
  75. package/dist/native/data-display/Alert.js +18 -3
  76. package/dist/native/data-display/Alert.js.map +1 -1
  77. package/dist/types/components/data-display/Alert/Alert.base.d.ts +28 -2
  78. package/dist/types/components/data-display/Alert/Alert.base.d.ts.map +1 -1
  79. package/dist/types/components/data-display/Alert/Alert.helpers.d.ts +39 -0
  80. package/dist/types/components/data-display/Alert/Alert.helpers.d.ts.map +1 -1
  81. package/dist/types/components/form/CategorySelect/CategoryPanel.d.ts.map +1 -1
  82. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts +6 -0
  83. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts.map +1 -1
  84. package/dist/types/components/form/CategorySelect/CategoryQuickActions.d.ts.map +1 -1
  85. package/dist/types/components/form/CategorySelect/CategoryRows.d.ts +12 -24
  86. package/dist/types/components/form/CategorySelect/CategoryRows.d.ts.map +1 -1
  87. package/dist/types/components/form/CategorySelect/CategorySelect.d.ts +10 -7
  88. package/dist/types/components/form/CategorySelect/CategorySelect.d.ts.map +1 -1
  89. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts +11 -0
  90. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
  91. package/dist/types/components/form/CategorySelect/CategorySelect.types.d.ts +10 -2
  92. package/dist/types/components/form/CategorySelect/CategorySelect.types.d.ts.map +1 -1
  93. package/dist/types/components/form/CategorySelect/category-keyboard.d.ts.map +1 -1
  94. package/dist/types/components/form/CategorySelect/category-tree.d.ts +52 -20
  95. package/dist/types/components/form/CategorySelect/category-tree.d.ts.map +1 -1
  96. package/dist/types/components/form/CategorySelect/index.d.ts +1 -1
  97. package/dist/types/components/form/CategorySelect/index.d.ts.map +1 -1
  98. package/dist/types/components/form/CategorySelect/useCategorySelect.d.ts +2 -0
  99. package/dist/types/components/form/CategorySelect/useCategorySelect.d.ts.map +1 -1
  100. package/dist/types-native/components/data-display/Alert/Alert.base.d.ts +28 -2
  101. package/dist/types-native/components/data-display/Alert/Alert.base.d.ts.map +1 -1
  102. package/dist/types-native/components/data-display/Alert/Alert.helpers.d.ts +39 -0
  103. package/dist/types-native/components/data-display/Alert/Alert.helpers.d.ts.map +1 -1
  104. package/dist/types-native/components/data-display/Alert/Alert.native.d.ts.map +1 -1
  105. package/package.json +1 -1
  106. package/src/components/data-display/Alert/Alert.base.ts +29 -2
  107. package/src/components/data-display/Alert/Alert.helpers.ts +50 -0
  108. package/src/components/data-display/Alert/Alert.md +29 -1
  109. package/src/components/data-display/Alert/Alert.native.tsx +8 -4
  110. package/src/components/data-display/Alert/Alert.tsx +5 -5
  111. package/src/components/form/CategorySelect/CategoryPanel.tsx +1 -0
  112. package/src/components/form/CategorySelect/CategoryPanelList.tsx +42 -34
  113. package/src/components/form/CategorySelect/CategoryQuickActions.tsx +6 -4
  114. package/src/components/form/CategorySelect/CategoryRows.tsx +45 -81
  115. package/src/components/form/CategorySelect/CategorySelect.md +47 -13
  116. package/src/components/form/CategorySelect/CategorySelect.styles.ts +13 -0
  117. package/src/components/form/CategorySelect/CategorySelect.tsx +16 -14
  118. package/src/components/form/CategorySelect/CategorySelect.types.ts +10 -2
  119. package/src/components/form/CategorySelect/category-keyboard.ts +27 -31
  120. package/src/components/form/CategorySelect/category-tree.ts +143 -63
  121. package/src/components/form/CategorySelect/index.ts +4 -0
  122. package/src/components/form/CategorySelect/useCategorySelect.ts +15 -1
  123. package/dist/chunk-2GB5CIN6.js.map +0 -1
  124. package/dist/chunk-JM64OEU6.js.map +0 -1
  125. package/dist/chunk-LR6MSKTT.js +0 -124
  126. package/dist/chunk-LR6MSKTT.js.map +0 -1
  127. package/dist/chunk-N3QUEBNS.js.map +0 -1
  128. package/dist/chunk-OFOYMZRY.js.map +0 -1
  129. package/dist/chunk-OVLNF4AZ.js.map +0 -1
  130. package/dist/chunk-TFO6GBW7.js.map +0 -1
  131. package/dist/chunk-TPLKJHNN.js.map +0 -1
  132. package/dist/chunk-WNMYWQ7D.js.map +0 -1
  133. package/dist/chunk-WWM2YTW4.js.map +0 -1
  134. package/dist/chunk-ZUIJ3N7N.js.map +0 -1
  135. /package/dist/{chunk-KM5O4ICK.js.map → chunk-7LCXGJN5.js.map} +0 -0
  136. /package/dist/{chunk-NLJV4CPF.js.map → chunk-7MN6I5NK.js.map} +0 -0
  137. /package/dist/{chunk-PN5CQKA2.js.map → chunk-AXTLFK4T.js.map} +0 -0
  138. /package/dist/{chunk-4TXIZ5WI.js.map → chunk-CJUOBTLL.js.map} +0 -0
  139. /package/dist/{chunk-57Z2ND3N.js.map → chunk-CXLAJZSE.js.map} +0 -0
  140. /package/dist/{chunk-E3PUH5IF.js.map → chunk-EQ7PWGBN.js.map} +0 -0
  141. /package/dist/{chunk-EJQW2IYW.js.map → chunk-FPFUXRD2.js.map} +0 -0
  142. /package/dist/{chunk-KIHQE5YA.js.map → chunk-GVDJQMFI.js.map} +0 -0
  143. /package/dist/{chunk-FBI6QB3O.js.map → chunk-TVPPA4RD.js.map} +0 -0
  144. /package/dist/{chunk-KFWIOFMS.js.map → chunk-TWY5FOBY.js.map} +0 -0
  145. /package/dist/{chunk-6ZY5XU4J.js.map → chunk-UIZH4DAE.js.map} +0 -0
  146. /package/dist/{chunk-ISH42UC7.js.map → chunk-USJPZ5Q7.js.map} +0 -0
  147. /package/dist/{chunk-SYJMI2NP.js.map → chunk-VNTOBLIB.js.map} +0 -0
  148. /package/dist/{chunk-ZAB65STX.js.map → chunk-XHHR6G35.js.map} +0 -0
  149. /package/dist/{chunk-WIT3Y7JT.js.map → chunk-Y2B3I3IH.js.map} +0 -0
  150. /package/dist/{chunk-R6SNYC3D.js.map → chunk-Y3KRUT7O.js.map} +0 -0
  151. /package/dist/{chunk-AJ6XEO4E.js.map → chunk-ZUY65MFH.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/CategorySelect/useCategorySelect.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport {\n buildCategoryGroups,\n collectBranchIds,\n filterCategoryGroups,\n flattenRows,\n toggleCategoryLeaves,\n toggleLeaf,\n treeDepth,\n type CategoryRowRef,\n} from './category-tree';\nimport type { CategoryGroup, CategorySelectOption } from './CategorySelect.types';\n\n/** Which categories are unfolded, and the ways that set changes. */\ninterface ExpansionState {\n isExpanded: (categoryId: string) => boolean;\n toggleExpanded: (categoryId: string) => void;\n setAllExpanded: (expanded: boolean) => void;\n expandAll: (groups: CategoryGroup[]) => void;\n}\n\n/**\n * The expanded set.\n *\n * `searching` short-circuits the lookup instead of mutating the set: a query must\n * reveal every hit, but clearing it has to restore whatever the admin had folded,\n * which an overwrite would have destroyed.\n */\nfunction useExpandedCategories(\n allGroups: CategoryGroup[],\n searching: boolean,\n): ExpansionState {\n const [expanded, setExpanded] = useState<ReadonlySet<string>>(() => new Set());\n\n const isExpanded = useCallback(\n (categoryId: string) => searching || expanded.has(categoryId),\n [searching, expanded],\n );\n\n const toggleExpanded = useCallback((categoryId: string) => {\n setExpanded((current) => {\n const next = new Set(current);\n if (!next.delete(categoryId)) next.add(categoryId);\n return next;\n });\n }, []);\n\n // Every foldable node at EVERY depth, so \"Expandir tudo\" opens the tree rather\n // than only its first storey.\n const setAllExpanded = useCallback(\n (shouldExpand: boolean) => {\n setExpanded(shouldExpand ? new Set(collectBranchIds(allGroups)) : new Set());\n },\n [allGroups],\n );\n\n // Opening unfolds the TOP level only. On a two-level tree that is the whole\n // thing on show, which is what the panel has always done; on a deeper one it\n // is the categories and their subcategories, with the items behind one more\n // click — the alternative being the flat list the tree replaces. A search\n // still reveals every hit: `searching` short-circuits the lookup above.\n const expandAll = useCallback((groups: CategoryGroup[]) => {\n setExpanded(new Set(groups.map((group) => group.category.id)));\n }, []);\n\n return { isExpanded, toggleExpanded, setAllExpanded, expandAll };\n}\n\n/** The pending selection and the two ways a row changes it. */\ninterface DraftState {\n draft: ReadonlySet<string>;\n setDraft: (next: ReadonlySet<string>) => void;\n toggleCategory: (group: CategoryGroup) => void;\n toggleSubcategory: (id: string) => void;\n}\n\nfunction useDraftSelection(initial: readonly string[]): DraftState {\n const [draft, setDraftState] = useState<ReadonlySet<string>>(() => new Set(initial));\n\n const toggleCategory = useCallback((group: CategoryGroup) => {\n setDraftState((current) => toggleCategoryLeaves(group, current));\n }, []);\n\n const toggleSubcategory = useCallback((id: string) => {\n setDraftState((current) => toggleLeaf(id, current));\n }, []);\n\n const setDraft = useCallback((next: ReadonlySet<string>) => setDraftState(next), []);\n\n return { draft, setDraft, toggleCategory, toggleSubcategory };\n}\n\n/** Everything the panel and trigger need to render and drive one select. */\nexport interface CategorySelectState extends ExpansionState, DraftState {\n open: boolean;\n query: string;\n /** Groups after the search filter — what is actually on screen. */\n visibleGroups: CategoryGroup[];\n /** All groups, unfiltered — the basis for chips and \"select all\". */\n allGroups: CategoryGroup[];\n /** True when the tree runs deeper than category/subcategory. */\n deepTree: boolean;\n rows: CategoryRowRef[];\n activeIndex: number;\n setQuery: (next: string) => void;\n setActiveIndex: (next: number) => void;\n openPanel: () => void;\n closePanel: () => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n}\n\ninterface UseCategorySelectArgs {\n options: CategorySelectOption[];\n /** The applied selection to seed the draft from each time the panel opens. */\n selected: readonly string[];\n}\n\n/**\n * Panel state for one CategorySelect.\n *\n * The DRAFT is the load-bearing idea. Ticks land here, not on the caller's\n * `value`, so the list behind the panel does not refetch on every click; Apply\n * publishes, dismissing discards. Opening re-seeds the draft from the applied\n * value, which is what makes \"cancel\" mean cancel.\n */\nexport function useCategorySelect({\n options,\n selected,\n}: UseCategorySelectArgs): CategorySelectState {\n const [open, setOpen] = useState(false);\n const [query, setQueryState] = useState('');\n const [activeIndex, setActiveIndex] = useState(-1);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const allGroups = useMemo(() => buildCategoryGroups(options), [options]);\n const visibleGroups = useMemo(\n () => filterCategoryGroups(allGroups, query),\n [allGroups, query],\n );\n\n const deepTree = useMemo(() => treeDepth(allGroups) > 2, [allGroups]);\n\n const expansion = useExpandedCategories(allGroups, query.trim().length > 0);\n const selection = useDraftSelection(selected);\n const rows = useMemo(\n () => flattenRows(visibleGroups, expansion.isExpanded),\n [visibleGroups, expansion.isExpanded],\n );\n\n const openPanel = useCallback(() => {\n selection.setDraft(new Set(selected));\n expansion.expandAll(allGroups);\n setQueryState('');\n setActiveIndex(-1);\n setOpen(true);\n }, [selected, allGroups, selection, expansion]);\n\n const closePanel = useCallback(() => {\n setOpen(false);\n setQueryState('');\n setActiveIndex(-1);\n }, []);\n\n const setQuery = useCallback((next: string) => {\n setQueryState(next);\n setActiveIndex(-1);\n }, []);\n\n return {\n ...expansion,\n ...selection,\n open,\n query,\n visibleGroups,\n allGroups,\n deepTree,\n rows,\n activeIndex,\n setQuery,\n setActiveIndex,\n openPanel,\n closePanel,\n triggerRef,\n };\n}\n"],"mappings":"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","names":[]}
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  FilterDialog,
6
6
  GridFilterPanel
7
- } from "./chunk-PN5CQKA2.js";
7
+ } from "./chunk-AXTLFK4T.js";
8
8
  import {
9
9
  DataViewsEmpty
10
10
  } from "./chunk-V4FKHLEB.js";
11
11
  import {
12
12
  InlineFilterControls
13
- } from "./chunk-NLJV4CPF.js";
13
+ } from "./chunk-7MN6I5NK.js";
14
14
  import {
15
15
  GridHeaderRow
16
16
  } from "./chunk-JSH3HFDQ.js";
@@ -237,4 +237,4 @@ function GridShell(props) {
237
237
  export {
238
238
  GridShell
239
239
  };
240
- //# sourceMappingURL=chunk-FBI6QB3O.js.map
240
+ //# sourceMappingURL=chunk-TVPPA4RD.js.map
@@ -3,14 +3,14 @@ import {
3
3
  } from "./chunk-ZZMZF7PZ.js";
4
4
  import {
5
5
  DataViewsGrid
6
- } from "./chunk-E3PUH5IF.js";
6
+ } from "./chunk-EQ7PWGBN.js";
7
7
  import {
8
8
  viewStateKey
9
9
  } from "./chunk-ZOLAYP2D.js";
10
10
  import {
11
11
  ViewDialogs,
12
12
  ViewMutationErrorAlert
13
- } from "./chunk-6ZY5XU4J.js";
13
+ } from "./chunk-UIZH4DAE.js";
14
14
  import {
15
15
  useSavedViewsController
16
16
  } from "./chunk-HR7YTBR7.js";
@@ -178,4 +178,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
178
178
  export {
179
179
  DataViewsTableBase
180
180
  };
181
- //# sourceMappingURL=chunk-KFWIOFMS.js.map
181
+ //# sourceMappingURL=chunk-TWY5FOBY.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-EFEZWG4C.js";
13
13
  import {
14
14
  Alert
15
- } from "./chunk-WNMYWQ7D.js";
15
+ } from "./chunk-4Y6SPFKW.js";
16
16
 
17
17
  // src/components/data-display/DataViews/data-views-table-parts.tsx
18
18
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -121,4 +121,4 @@ export {
121
121
  ViewsMenuSlot,
122
122
  ViewDialogs
123
123
  };
124
- //# sourceMappingURL=chunk-6ZY5XU4J.js.map
124
+ //# sourceMappingURL=chunk-UIZH4DAE.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  handleCategoryKeyDown
3
- } from "./chunk-WWM2YTW4.js";
3
+ } from "./chunk-R2AZOWEZ.js";
4
4
 
5
5
  // src/components/form/CategorySelect/useCategoryKeyHandler.ts
6
6
  import { useCallback } from "react";
@@ -52,4 +52,4 @@ function useCategoryKeyHandler({
52
52
  export {
53
53
  useCategoryKeyHandler
54
54
  };
55
- //# sourceMappingURL=chunk-ISH42UC7.js.map
55
+ //# sourceMappingURL=chunk-USJPZ5Q7.js.map
@@ -1,6 +1,7 @@
1
1
  import {
2
+ collectBranchIds,
2
3
  collectLeafIds
3
- } from "./chunk-LR6MSKTT.js";
4
+ } from "./chunk-PN4HVM43.js";
4
5
 
5
6
  // src/components/form/CategorySelect/CategoryQuickActions.tsx
6
7
  import Box from "@mui/material/Box/index.js";
@@ -25,7 +26,8 @@ function CategoryQuickActions({
25
26
  }) {
26
27
  const allLeafIds = useMemo(() => collectLeafIds(state.allGroups), [state.allGroups]);
27
28
  const everythingPicked = allLeafIds.length > 0 && state.draft.size >= allLeafIds.length;
28
- const allExpanded = state.allGroups.length > 0 && state.allGroups.every((group) => state.isExpanded(group.category.id));
29
+ const branchIds = useMemo(() => collectBranchIds(state.allGroups), [state.allGroups]);
30
+ const allExpanded = branchIds.length > 0 && branchIds.every((id) => state.isExpanded(id));
29
31
  return /* @__PURE__ */ jsxs(Fragment, { children: [
30
32
  /* @__PURE__ */ jsx(
31
33
  Box,
@@ -57,4 +59,4 @@ function CategoryQuickActions({
57
59
  export {
58
60
  CategoryQuickActions
59
61
  };
60
- //# sourceMappingURL=chunk-ZUIJ3N7N.js.map
62
+ //# sourceMappingURL=chunk-V6Z4XS3I.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/CategorySelect/CategoryQuickActions.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport { useMemo } from 'react';\n\nimport type { CategorySelectCopy } from '../../../copy';\n\nimport { collectBranchIds, collectLeafIds } from './category-tree';\nimport type { CategorySelectState } from './useCategorySelect';\n\n/** The panel's text-button treatment. */\nconst linkButtonSx = {\n background: 'none',\n border: 0,\n padding: 0,\n font: 'inherit',\n fontSize: 12,\n color: 'primary.main',\n cursor: 'pointer',\n fontWeight: 550,\n '&:hover': { textDecoration: 'underline' },\n '&:disabled': { color: 'text.disabled', cursor: 'default', textDecoration: 'none' },\n} as const;\n\n/**\n * Bulk actions for multi-select: mark everything, and fold everything.\n *\n * Both labels flip to their inverse once the action is spent (\"Desmarcar tudo\",\n * \"Recolher tudo\"), so the control always says what pressing it will do rather\n * than what state the list is in.\n */\nexport function CategoryQuickActions({\n state,\n dataTestId,\n copy,\n}: {\n state: CategorySelectState;\n dataTestId: string;\n /** The words this control renders. REQUIRED — no default copy. */\n copy: CategorySelectCopy;\n}): React.JSX.Element {\n const allLeafIds = useMemo(() => collectLeafIds(state.allGroups), [state.allGroups]);\n const everythingPicked = allLeafIds.length > 0 && state.draft.size >= allLeafIds.length;\n // Measured over every foldable node at every depth: on a deep tree the top\n // storey can be open while the items under it are not, and a label reading\n // \"Recolher tudo\" there would be describing a state the list is not in.\n const branchIds = useMemo(() => collectBranchIds(state.allGroups), [state.allGroups]);\n const allExpanded = branchIds.length > 0 && branchIds.every((id) => state.isExpanded(id));\n\n return (\n <>\n <Box\n component=\"button\"\n type=\"button\"\n disabled={allLeafIds.length === 0}\n data-testid={`${dataTestId}-select-all`}\n sx={linkButtonSx}\n onClick={() => state.setDraft(everythingPicked ? new Set() : new Set(allLeafIds))}\n >\n {everythingPicked ? copy.deselectAll : copy.selectAll}\n </Box>\n <Box component=\"span\" sx={{ color: 'divider' }}>\n ·\n </Box>\n <Box\n component=\"button\"\n type=\"button\"\n data-testid={`${dataTestId}-expand-all`}\n sx={linkButtonSx}\n onClick={() => state.setAllExpanded(!allExpanded)}\n >\n {allExpanded ? copy.collapseAll : copy.expandAll}\n </Box>\n </>\n );\n}\n"],"mappings":";;;;;;AAEA,OAAO,SAAS;AAChB,SAAS,eAAe;AA+CpB,mBACE,KADF;AAvCJ,IAAM,eAAe;AAAA,EACnB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,MAAM;AAAA,EACN,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,WAAW,EAAE,gBAAgB,YAAY;AAAA,EACzC,cAAc,EAAE,OAAO,iBAAiB,QAAQ,WAAW,gBAAgB,OAAO;AACpF;AASO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAKsB;AACpB,QAAM,aAAa,QAAQ,MAAM,eAAe,MAAM,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC;AACnF,QAAM,mBAAmB,WAAW,SAAS,KAAK,MAAM,MAAM,QAAQ,WAAW;AAIjF,QAAM,YAAY,QAAQ,MAAM,iBAAiB,MAAM,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC;AACpF,QAAM,cAAc,UAAU,SAAS,KAAK,UAAU,MAAM,CAAC,OAAO,MAAM,WAAW,EAAE,CAAC;AAExF,SACE,iCACE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,UAAU,WAAW,WAAW;AAAA,QAChC,eAAa,GAAG,UAAU;AAAA,QAC1B,IAAI;AAAA,QACJ,SAAS,MAAM,MAAM,SAAS,mBAAmB,oBAAI,IAAI,IAAI,IAAI,IAAI,UAAU,CAAC;AAAA,QAE/E,6BAAmB,KAAK,cAAc,KAAK;AAAA;AAAA,IAC9C;AAAA,IACA,oBAAC,OAAI,WAAU,QAAO,IAAI,EAAE,OAAO,UAAU,GAAG,kBAEhD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,MAAK;AAAA,QACL,eAAa,GAAG,UAAU;AAAA,QAC1B,IAAI;AAAA,QACJ,SAAS,MAAM,MAAM,eAAe,CAAC,WAAW;AAAA,QAE/C,wBAAc,KAAK,cAAc,KAAK;AAAA;AAAA,IACzC;AAAA,KACF;AAEJ;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Alert
3
- } from "./chunk-WNMYWQ7D.js";
3
+ } from "./chunk-4Y6SPFKW.js";
4
4
 
5
5
  // src/components/data-display/CardKit/card-actions-context.tsx
6
6
  import { createContext, useCallback, useContext, useState } from "react";
@@ -54,4 +54,4 @@ export {
54
54
  CardActionsProvider,
55
55
  useCardActions
56
56
  };
57
- //# sourceMappingURL=chunk-SYJMI2NP.js.map
57
+ //# sourceMappingURL=chunk-VNTOBLIB.js.map
@@ -3,25 +3,26 @@ import {
3
3
  } from "./chunk-LMXWI3DD.js";
4
4
  import {
5
5
  CategoryPanel
6
- } from "./chunk-TPLKJHNN.js";
6
+ } from "./chunk-ZC7RQDZ5.js";
7
7
  import {
8
8
  useCategoryCommit
9
- } from "./chunk-ZAB65STX.js";
9
+ } from "./chunk-XHHR6G35.js";
10
10
  import {
11
11
  CategoryTrigger
12
- } from "./chunk-KIHQE5YA.js";
12
+ } from "./chunk-GVDJQMFI.js";
13
13
  import {
14
14
  METRICS
15
- } from "./chunk-TFO6GBW7.js";
15
+ } from "./chunk-ZS44PY7T.js";
16
16
  import {
17
17
  useCategorySelect
18
- } from "./chunk-2GB5CIN6.js";
18
+ } from "./chunk-RZVUY2MO.js";
19
19
  import {
20
20
  useCategoryKeyHandler
21
- } from "./chunk-ISH42UC7.js";
21
+ } from "./chunk-USJPZ5Q7.js";
22
22
  import {
23
+ categoryPath,
23
24
  summarizeSelection
24
- } from "./chunk-LR6MSKTT.js";
25
+ } from "./chunk-PN4HVM43.js";
25
26
  import {
26
27
  FormControl,
27
28
  FormLabel,
@@ -42,11 +43,7 @@ function draftChanged(draft, applied) {
42
43
  }
43
44
  function singleLabel(groups, value) {
44
45
  if (!value) return void 0;
45
- const asCategory = groups.find((group) => group.category.id === value);
46
- if (asCategory) return asCategory.category.name;
47
- const owner = groups.find((group) => group.subcategories.some((sub2) => sub2.id === value));
48
- const sub = owner?.subcategories.find((candidate) => candidate.id === value);
49
- return sub && owner ? `${owner.category.name} \u203A ${sub.name}` : void 0;
46
+ return categoryPath(groups, value)?.join(" \u203A ");
50
47
  }
51
48
  function resolveConfig(props) {
52
49
  const single = props.mode === "single";
@@ -158,4 +155,4 @@ function CategorySelect(props) {
158
155
  export {
159
156
  CategorySelect
160
157
  };
161
- //# sourceMappingURL=chunk-JM64OEU6.js.map
158
+ //# sourceMappingURL=chunk-WAPJ2DL3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/CategorySelect/CategorySelect.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useRef } from 'react';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\n\nimport { categoryPath, summarizeSelection } from './category-tree';\nimport { CategoryPanel } from './CategoryPanel';\nimport { CategoryPanelSurface } from './CategoryPanelSurface';\nimport { CategoryTrigger } from './CategoryTrigger';\nimport { METRICS } from './CategorySelect.styles';\nimport type { CategoryGroup, CategorySelectProps } from './CategorySelect.types';\nimport { useCategoryCommit } from './useCategoryCommit';\nimport { useCategoryKeyHandler } from './useCategoryKeyHandler';\nimport { useCategorySelect } from './useCategorySelect';\nimport { FormControl, FormLabel, FormMessage } from '../Form';\n\n/** The applied selection, always as an array — the two modes differ in shape. */\nfunction appliedIds(props: CategorySelectProps): string[] {\n if (props.mode === 'single') return props.value ? [props.value] : [];\n return props.value;\n}\n\n/** True when the draft differs from what is already applied. */\nfunction draftChanged(draft: ReadonlySet<string>, applied: readonly string[]): boolean {\n return draft.size !== applied.length || applied.some((id) => !draft.has(id));\n}\n\n/**\n * \"Pai › Filha\" for a chosen id, so the trigger carries its context once the\n * panel has closed over it. The whole path, at whatever depth the row sits.\n */\nfunction singleLabel(groups: CategoryGroup[], value: string | null): string | undefined {\n if (!value) return undefined;\n return categoryPath(groups, value)?.join(' › ');\n}\n\n/** The optional props, resolved once so the component body stays branch-free. */\ninterface ResolvedConfig {\n single: boolean;\n placeholder: string;\n disabled: boolean;\n loading: boolean;\n fullWidth: boolean;\n showCounts: boolean;\n allowParentSelection: boolean;\n dataTestId: string;\n}\n\nfunction resolveConfig(props: CategorySelectProps): ResolvedConfig {\n const single = props.mode === 'single';\n return {\n single,\n placeholder: props.placeholder ?? (single ? props.copy.placeholderSingle : props.copy.placeholderMulti),\n disabled: props.disabled ?? false,\n loading: props.loading ?? false,\n fullWidth: props.fullWidth ?? false,\n showCounts: props.showCounts ?? false,\n allowParentSelection: props.allowParentSelection ?? false,\n dataTestId: props.dataTestId ?? 'category-select',\n };\n}\n\n/** Focus the search box on open, and keep the keyboard cursor in view. */\nfunction usePanelFocus(\n open: boolean,\n activeIndex: number,\n searchInputRef: React.RefObject<HTMLInputElement | null>,\n listRef: React.RefObject<HTMLDivElement | null>,\n): void {\n // The first thing an admin does with ten categories is type; focusing here\n // saves the extra click every single time the panel opens.\n useEffect(() => {\n if (!open) return undefined;\n const frame = requestAnimationFrame(() => searchInputRef.current?.focus());\n return () => cancelAnimationFrame(frame);\n }, [open, searchInputRef]);\n\n useEffect(() => {\n if (activeIndex < 0) return;\n const rows = listRef.current?.querySelectorAll('[role=\"option\"], [role=\"button\"]');\n rows?.[activeIndex]?.scrollIntoView({ block: 'nearest' });\n }, [activeIndex, listRef]);\n}\n\n/**\n * A hierarchical category picker: categories as the frame, whatever is filed\n * under them as the thing you choose.\n *\n * Two modes off one component. `multi` is the FILTER — ticks accumulate in a\n * draft and reach `onChange` only on Apply, so the list behind the panel does not\n * reload on every click. `single` is the \"move to…\" picker, where choosing a row\n * commits immediately because there is nothing to batch.\n *\n * The tree nests as deep as the payload does — a picker can file ITEMS under a\n * subcategory and get a third storey with no extra configuration. Opening\n * unfolds the top level, and a search reveals every hit whatever is folded.\n *\n * Selected categories pin above the list so they survive scrolling and\n * searching, search is accent-insensitive (`agua` finds `Águas`), and the whole\n * tree is keyboard-drivable — ↑↓ to move, → to open, ← to close, Space to mark,\n * Enter to apply, Esc to cancel.\n *\n * Under {@link METRICS.sheetBreakpoint} the panel becomes a bottom sheet, which\n * is the only way a 290px-tall list stays usable one-handed.\n */\nexport function CategorySelect(props: CategorySelectProps): React.JSX.Element {\n const { options, label, error, onCreateCategory, copy } = props;\n const {\n single,\n placeholder,\n disabled,\n loading,\n fullWidth,\n showCounts,\n allowParentSelection,\n dataTestId,\n } = resolveConfig(props);\n\n const theme = useTheme();\n const sheet = useMediaQuery(theme.breakpoints.down(METRICS.sheetBreakpoint));\n const applied = appliedIds(props);\n\n const state = useCategorySelect({ options, selected: applied });\n const searchInputRef = useRef<HTMLInputElement | null>(null);\n const listRef = useRef<HTMLDivElement | null>(null);\n usePanelFocus(state.open, state.activeIndex, searchInputRef, listRef);\n\n const chips = useMemo(\n () => summarizeSelection(state.allGroups, state.draft),\n [state.allGroups, state.draft],\n );\n const rowIds = useMemo(() => state.rows.map((row) => row.id), [state.rows]);\n\n const actions = useCategoryCommit({ props, state, single, allowParentSelection });\n const onKeyDown = useCategoryKeyHandler({ state, single, allowParentSelection, actions });\n\n return (\n <FormControl fullWidth={fullWidth} error={Boolean(error)}>\n {label && <FormLabel error={Boolean(error)}>{label}</FormLabel>}\n <CategoryTrigger copy={copy}\n placeholder={placeholder}\n selectionLabel={\n props.mode === 'single' ? singleLabel(state.allGroups, props.value) : undefined\n }\n count={single ? undefined : applied.length}\n open={state.open}\n disabled={disabled}\n fullWidth={fullWidth}\n onOpen={state.openPanel}\n onClear={applied.length > 0 ? actions.clearSelection : undefined}\n triggerRef={state.triggerRef}\n dataTestId={dataTestId}\n />\n <CategoryPanelSurface\n open={state.open}\n sheet={sheet}\n anchorEl={state.triggerRef.current}\n onClose={actions.cancel}\n >\n <CategoryPanel copy={copy}\n state={state}\n chips={chips}\n rowIds={rowIds}\n changed={draftChanged(state.draft, applied)}\n single={single}\n sheet={sheet}\n loading={loading}\n showCounts={showCounts}\n allowParentSelection={allowParentSelection}\n ariaLabel={label ?? placeholder}\n onKeyDown={onKeyDown}\n onActivateCategory={actions.activateCategory}\n onActivateSubcategory={actions.activateSubcategory}\n onApply={actions.commit}\n onCancel={actions.cancel}\n onCreateCategory={onCreateCategory}\n searchInputRef={searchInputRef}\n listRef={listRef}\n dataTestId={dataTestId}\n />\n </CategoryPanelSurface>\n {error && <FormMessage error dataTestId={`${dataTestId}-message`}>{error}</FormMessage>}\n </FormControl>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  isLeafCategory
3
- } from "./chunk-LR6MSKTT.js";
3
+ } from "./chunk-PN4HVM43.js";
4
4
 
5
5
  // src/components/form/CategorySelect/useCategoryCommit.ts
6
6
  import { useCallback, useMemo } from "react";
@@ -70,4 +70,4 @@ function useCategoryCommit({
70
70
  export {
71
71
  useCategoryCommit
72
72
  };
73
- //# sourceMappingURL=chunk-ZAB65STX.js.map
73
+ //# sourceMappingURL=chunk-XHHR6G35.js.map
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-4XK6JQ4D.js";
4
4
  import {
5
5
  CategorySelect
6
- } from "./chunk-JM64OEU6.js";
6
+ } from "./chunk-WAPJ2DL3.js";
7
7
 
8
8
  // src/components/form/total-form/Fields/CategoryField.tsx
9
9
  import { jsx } from "react/jsx-runtime";
@@ -38,4 +38,4 @@ function CategoryField({
38
38
  export {
39
39
  CategoryField
40
40
  };
41
- //# sourceMappingURL=chunk-WIT3Y7JT.js.map
41
+ //# sourceMappingURL=chunk-Y2B3I3IH.js.map
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-EOHKZGOZ.js";
7
7
  import {
8
8
  CategoryField
9
- } from "./chunk-WIT3Y7JT.js";
9
+ } from "./chunk-Y2B3I3IH.js";
10
10
  import {
11
11
  ToggleField
12
12
  } from "./chunk-LYMAMKJT.js";
@@ -30,4 +30,4 @@ __export(Fields_exports, {
30
30
  export {
31
31
  Fields_exports
32
32
  };
33
- //# sourceMappingURL=chunk-R6SNYC3D.js.map
33
+ //# sourceMappingURL=chunk-Y3KRUT7O.js.map
@@ -1,24 +1,24 @@
1
1
  import {
2
2
  CategoryQuickActions
3
- } from "./chunk-ZUIJ3N7N.js";
3
+ } from "./chunk-V6Z4XS3I.js";
4
4
  import {
5
5
  CategoryPanelList
6
- } from "./chunk-OVLNF4AZ.js";
6
+ } from "./chunk-P7IVAMAU.js";
7
7
  import {
8
8
  CategoryPanelHead,
9
9
  CategoryPinnedTray
10
- } from "./chunk-4TXIZ5WI.js";
10
+ } from "./chunk-CJUOBTLL.js";
11
11
  import {
12
12
  CategoryMultiFoot,
13
13
  CategorySingleFoot
14
- } from "./chunk-AJ6XEO4E.js";
14
+ } from "./chunk-ZUY65MFH.js";
15
15
  import {
16
16
  panelSx,
17
17
  sheetSx
18
- } from "./chunk-TFO6GBW7.js";
18
+ } from "./chunk-ZS44PY7T.js";
19
19
  import {
20
20
  removeChip
21
- } from "./chunk-LR6MSKTT.js";
21
+ } from "./chunk-PN4HVM43.js";
22
22
 
23
23
  // src/components/form/CategorySelect/CategoryPanel.tsx
24
24
  import Box from "@mui/material/Box/index.js";
@@ -82,6 +82,7 @@ function CategoryPanel({
82
82
  loading,
83
83
  showCounts,
84
84
  allowParentSelection,
85
+ deepTree: state.deepTree,
85
86
  isExpanded: state.isExpanded,
86
87
  onToggleExpanded: state.toggleExpanded,
87
88
  onActivateCategory,
@@ -155,4 +156,4 @@ function PanelFooter({
155
156
  export {
156
157
  CategoryPanel
157
158
  };
158
- //# sourceMappingURL=chunk-TPLKJHNN.js.map
159
+ //# sourceMappingURL=chunk-ZC7RQDZ5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/CategorySelect/CategoryPanel.tsx"],"sourcesContent":["'use client';\n\nimport type { CategorySelectCopy } from \"../../../copy\";\nimport Box from '@mui/material/Box/index.js';\n\nimport { removeChip } from './category-tree';\nimport { CategoryMultiFoot, CategorySingleFoot } from './CategoryPanelFoot';\nimport { CategoryPanelHead, CategoryPinnedTray } from './CategoryPanelHead';\nimport { CategoryPanelList } from './CategoryPanelList';\nimport { CategoryQuickActions } from './CategoryQuickActions';\nimport { panelSx, sheetSx } from './CategorySelect.styles';\nimport type { CategoryGroup, CategorySelectionChip } from './CategorySelect.types';\nimport type { CategorySelectState } from './useCategorySelect';\n\nexport interface CategoryPanelProps {\n /** The words this panel renders. REQUIRED — no default copy. */\n copy: CategorySelectCopy;\n state: CategorySelectState;\n chips: CategorySelectionChip[];\n rowIds: string[];\n /** True when the applied selection differs from the draft. */\n changed: boolean;\n single: boolean;\n sheet: boolean;\n loading: boolean;\n showCounts: boolean;\n allowParentSelection: boolean;\n ariaLabel: string;\n onKeyDown: (event: React.KeyboardEvent) => void;\n onActivateCategory: (group: CategoryGroup) => void;\n onActivateSubcategory: (id: string) => void;\n onApply: () => void;\n onCancel: () => void;\n onCreateCategory?: () => void;\n searchInputRef: React.RefObject<HTMLInputElement | null>;\n listRef: React.RefObject<HTMLDivElement | null>;\n dataTestId: string;\n}\n\n/** Search + pinned selection + tree + footer, in the panel's own chrome. */\nexport function CategoryPanel({\n state,\n chips,\n rowIds,\n changed,\n single,\n sheet,\n loading,\n showCounts,\n allowParentSelection,\n ariaLabel,\n onKeyDown,\n onActivateCategory,\n onActivateSubcategory,\n onApply,\n onCancel,\n onCreateCategory,\n searchInputRef,\n listRef,\n dataTestId,\n copy,\n}: CategoryPanelProps): React.JSX.Element {\n return (\n <Box\n onKeyDown={onKeyDown}\n role=\"dialog\"\n aria-label={ariaLabel}\n data-testid={`${dataTestId}-panel`}\n sx={(theme) => ({ ...panelSx(theme), ...(sheet ? sheetSx(theme) : {}) })}\n >\n <CategoryPanelHead\n copy={copy}\n query={state.query}\n placeholder={single ? copy.search.placeholderSingle : copy.search.placeholderMulti}\n sheet={sheet}\n quickActions={\n single ? undefined : <CategoryQuickActions state={state} dataTestId={dataTestId} copy={copy} />\n }\n onQueryChange={state.setQuery}\n searchInputRef={searchInputRef}\n dataTestId={dataTestId}\n />\n {!single && !loading && (\n <PinnedTray state={state} chips={chips} dataTestId={dataTestId} copy={copy} />\n )}\n <CategoryPanelList copy={copy}\n groups={state.visibleGroups}\n query={state.query}\n draft={state.draft}\n rowIds={rowIds}\n activeIndex={state.activeIndex}\n sheet={sheet}\n single={single}\n loading={loading}\n showCounts={showCounts}\n allowParentSelection={allowParentSelection}\n deepTree={state.deepTree}\n isExpanded={state.isExpanded}\n onToggleExpanded={state.toggleExpanded}\n onActivateCategory={onActivateCategory}\n onActivateSubcategory={onActivateSubcategory}\n onClearQuery={() => state.setQuery('')}\n onCreateCategory={onCreateCategory}\n listRef={listRef}\n dataTestId={dataTestId}\n />\n <PanelFooter\n state={state}\n changed={changed}\n single={single}\n sheet={sheet}\n copy={copy}\n onApply={onApply}\n onCancel={onCancel}\n dataTestId={dataTestId}\n />\n </Box>\n );\n}\n\n/** The selected-category chips, wired to remove from the draft. */\nfunction PinnedTray({\n state,\n chips,\n dataTestId,\n copy,\n}: Pick<CategoryPanelProps, 'state' | 'chips' | 'dataTestId' | 'copy'>): React.JSX.Element {\n return (\n <CategoryPinnedTray\n copy={copy}\n chips={chips}\n onRemove={(chipId) => state.setDraft(removeChip(state.allGroups, chipId, state.draft))}\n dataTestId={dataTestId}\n />\n );\n}\n\n/** Whichever footer the mode calls for. */\nfunction PanelFooter({\n state,\n changed,\n single,\n sheet,\n onApply,\n onCancel,\n dataTestId,\n copy,\n}: Pick<\n CategoryPanelProps,\n 'state' | 'changed' | 'single' | 'sheet' | 'onApply' | 'onCancel' | 'dataTestId' | 'copy'\n>): React.JSX.Element {\n if (single) {\n return (\n <CategorySingleFoot sheet={sheet} onCancel={onCancel} dataTestId={dataTestId} copy={copy} />\n );\n }\n return (\n <CategoryMultiFoot\n count={state.draft.size}\n changed={changed}\n sheet={sheet}\n copy={copy}\n onClear={() => state.setDraft(new Set())}\n onApply={onApply}\n dataTestId={dataTestId}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,SAAS;AA4DZ,SAa2B,KAb3B;AAvBG,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0C;AACxC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,eAAa,GAAG,UAAU;AAAA,MAC1B,IAAI,CAAC,WAAW,EAAE,GAAG,QAAQ,KAAK,GAAG,GAAI,QAAQ,QAAQ,KAAK,IAAI,CAAC,EAAG;AAAA,MAEtE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,OAAO,MAAM;AAAA,YACb,aAAa,SAAS,KAAK,OAAO,oBAAoB,KAAK,OAAO;AAAA,YAClE;AAAA,YACA,cACE,SAAS,SAAY,oBAAC,wBAAqB,OAAc,YAAwB,MAAY;AAAA,YAE/F,eAAe,MAAM;AAAA,YACrB;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACC,CAAC,UAAU,CAAC,WACX,oBAAC,cAAW,OAAc,OAAc,YAAwB,MAAY;AAAA,QAE9E;AAAA,UAAC;AAAA;AAAA,YAAkB;AAAA,YACjB,QAAQ,MAAM;AAAA,YACd,OAAO,MAAM;AAAA,YACb,OAAO,MAAM;AAAA,YACb;AAAA,YACA,aAAa,MAAM;AAAA,YACnB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,UAAU,MAAM;AAAA,YAChB,YAAY,MAAM;AAAA,YAClB,kBAAkB,MAAM;AAAA,YACxB;AAAA,YACA;AAAA,YACA,cAAc,MAAM,MAAM,SAAS,EAAE;AAAA,YACrC;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA;AAAA,QACF;AAAA;AAAA;AAAA,EACF;AAEJ;AAGA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2F;AACzF,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,UAAU,CAAC,WAAW,MAAM,SAAS,WAAW,MAAM,WAAW,QAAQ,MAAM,KAAK,CAAC;AAAA,MACrF;AAAA;AAAA,EACF;AAEJ;AAGA,SAAS,YAAY;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGsB;AACpB,MAAI,QAAQ;AACV,WACE,oBAAC,sBAAmB,OAAc,UAAoB,YAAwB,MAAY;AAAA,EAE9F;AACA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,MAAM,MAAM;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,MAAM,MAAM,SAAS,oBAAI,IAAI,CAAC;AAAA,MACvC;AAAA,MACA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -16,6 +16,8 @@ var METRICS = {
16
16
  rowRadius: 8,
17
17
  boxSize: 18,
18
18
  chevronButton: 22,
19
+ /** Extra left padding per level of nesting. */
20
+ rowIndentStep: 14,
19
21
  footerButton: 32,
20
22
  sheetFooterButton: 38,
21
23
  /** Below this width the panel becomes a bottom sheet. */
@@ -202,6 +204,7 @@ var rowSx = (theme, active, sheet) => ({
202
204
  },
203
205
  "&:focus-visible": { outline: `2px solid ${theme.palette.primary.main}`, outlineOffset: 1 }
204
206
  });
207
+ var rowIndent = (depth) => depth === 0 ? {} : { paddingLeft: `${depth * METRICS.rowIndentStep}px` };
205
208
  var rowNameSx = (theme, isCategory) => ({
206
209
  flex: 1,
207
210
  minWidth: 0,
@@ -317,6 +320,7 @@ export {
317
320
  chipSx,
318
321
  listSx,
319
322
  rowSx,
323
+ rowIndent,
320
324
  rowNameSx,
321
325
  rowMetaSx,
322
326
  markSx,
@@ -329,4 +333,4 @@ export {
329
333
  emptySx,
330
334
  skeletonSx
331
335
  };
332
- //# sourceMappingURL=chunk-TFO6GBW7.js.map
336
+ //# sourceMappingURL=chunk-ZS44PY7T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/form/CategorySelect/CategorySelect.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\n\n/**\n * The prototype's METRICS, verbatim.\n *\n * Every number here is lifted from the approved design and is intentionally\n * absolute rather than derived from `theme.spacing`: the design is specified on\n * a half-pixel type scale (13.5px rows, 1.5px checkbox borders) that an 8px\n * spacing grid cannot express without rounding the look away.\n *\n * COLOURS are the deliberate exception — they come from the theme, because a\n * tenant can white-label the palette (a hard-coded indigo would survive the\n * rebrand and the rest of the screen would not) and because the library ships a\n * dark mode. On the default light indigo theme the tokens below resolve to the\n * prototype's own values.\n */\nexport const METRICS = {\n triggerHeight: 38,\n triggerRadius: 10,\n panelWidth: 340,\n panelRadius: 14,\n listMaxHeight: 290,\n sheetListMaxHeight: 340,\n rowHeight: 36,\n sheetRowHeight: 42,\n rowRadius: 8,\n boxSize: 18,\n chevronButton: 22,\n /** Extra left padding per level of nesting. */\n rowIndentStep: 14,\n footerButton: 32,\n sheetFooterButton: 38,\n /** Below this width the panel becomes a bottom sheet. */\n sheetBreakpoint: 480,\n} as const;\n\n/** Accent family, derived so a white-labelled palette carries through. */\nconst accent = (theme: Theme) => ({\n main: theme.palette.primary.main,\n ink: theme.palette.primary.dark,\n soft: alpha(theme.palette.primary.main, 0.08),\n edge: alpha(theme.palette.primary.main, 0.28),\n ring: alpha(theme.palette.primary.main, 0.15),\n});\n\n/** The closed control. `selected` swaps it to the accent-tinted \"has filter\" skin. */\nexport const triggerSx = (theme: Theme, selected: boolean, open: boolean): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n height: METRICS.triggerHeight,\n padding: '0 10px 0 12px',\n borderRadius: `${METRICS.triggerRadius}px`,\n border: `1px solid ${open || selected ? brand.edge : fieldEdge(theme)}`,\n background: selected ? brand.soft : theme.palette.background.paper,\n color: selected ? brand.ink : theme.palette.text.primary,\n font: 'inherit',\n fontSize: 13,\n cursor: 'pointer',\n maxWidth: '100%',\n transition: 'border-color .12s, box-shadow .12s',\n boxShadow: open ? `0 0 0 3px ${brand.ring}` : 'none',\n '&:hover': { borderColor: open || selected ? brand.edge : theme.palette.text.disabled },\n '&:focus-visible': {\n outline: 'none',\n borderColor: brand.main,\n boxShadow: `0 0 0 3px ${alpha(brand.main, 0.18)}`,\n },\n '&:disabled': { opacity: 0.5, cursor: 'default' },\n };\n};\n\n/** The count pill inside the trigger. */\nexport const triggerCountSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: 11,\n lineHeight: 1,\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n borderRadius: '999px',\n padding: '3px 6px',\n minWidth: 18,\n textAlign: 'center',\n});\n\n/** The trigger's inline clear (×) and the chevron. */\nexport const triggerClearSx: CSSObject = {\n width: 20,\n height: 20,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '5px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: 'inherit',\n opacity: 0.6,\n padding: 0,\n '&:hover': { background: alpha('#000', 0.08), opacity: 1 },\n};\n\nexport const triggerChevronSx = (open: boolean): CSSObject => ({\n width: 14,\n height: 14,\n flex: '0 0 auto',\n opacity: 0.55,\n transition: 'transform .15s',\n transform: open ? 'rotate(180deg)' : 'none',\n});\n\n/** The floating panel. */\nexport const panelSx = (theme: Theme): CSSObject => ({\n width: METRICS.panelWidth,\n maxWidth: '100%',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: `${METRICS.panelRadius}px`,\n boxShadow: '0 1px 2px rgba(16,20,35,.05), 0 18px 40px -12px rgba(16,20,35,.28)',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** Bottom-sheet skin, applied under {@link METRICS.sheetBreakpoint}. */\nexport const sheetSx = (theme: Theme): CSSObject => ({\n width: '100%',\n maxWidth: 'none',\n borderRadius: '18px 18px 0 0',\n borderBottom: 0,\n position: 'relative',\n paddingTop: '4px',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 7,\n left: '50%',\n transform: 'translateX(-50%)',\n width: 36,\n height: 4,\n borderRadius: '2px',\n background: theme.palette.divider,\n },\n});\n\nexport const panelHeadSx = (theme: Theme, sheet: boolean): CSSObject => ({\n padding: sheet ? '18px 10px 8px' : '10px 10px 8px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n});\n\nexport const pinnedSx = (theme: Theme): CSSObject => ({\n padding: '9px 10px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n background: alpha(theme.palette.primary.main, 0.03),\n});\n\nexport const pinnedLabelSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: 10,\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n marginBottom: '7px',\n});\n\nexport const chipWrapSx: CSSObject = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '5px',\n maxHeight: 74,\n overflow: 'auto',\n};\n\n/** A selected-category chip, in the pinned tray and the applied bar alike. */\nexport const chipSx = (theme: Theme): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '5px',\n fontSize: 12,\n background: brand.soft,\n color: brand.ink,\n border: `1px solid ${brand.edge}`,\n borderRadius: '7px',\n padding: '3px 4px 3px 8px',\n '& button': {\n border: 0,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: 0,\n width: 16,\n height: 16,\n borderRadius: '4px',\n display: 'grid',\n placeItems: 'center',\n opacity: 0.65,\n fontSize: 13,\n lineHeight: 1,\n '&:hover': { background: alpha(theme.palette.primary.main, 0.16), opacity: 1 },\n },\n };\n};\n\nexport const listSx = (sheet: boolean): CSSObject => ({\n overflow: 'auto',\n maxHeight: sheet ? METRICS.sheetListMaxHeight : METRICS.listMaxHeight,\n padding: '6px 6px 8px',\n scrollPadding: '8px 0',\n overscrollBehavior: 'contain',\n});\n\n/** A row. `active` is the KEYBOARD cursor — deliberately distinct from hover. */\nexport const rowSx = (theme: Theme, active: boolean, sheet: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '0 8px',\n height: sheet ? METRICS.sheetRowHeight : METRICS.rowHeight,\n borderRadius: `${METRICS.rowRadius}px`,\n cursor: 'pointer',\n userSelect: 'none',\n position: 'relative',\n width: '100%',\n border: 0,\n textAlign: 'left',\n font: 'inherit',\n background: active ? alpha(theme.palette.primary.main, 0.08) : 'transparent',\n boxShadow: active ? `inset 0 0 0 1px ${alpha(theme.palette.primary.main, 0.3)}` : 'none',\n '&:hover': {\n background: active\n ? alpha(theme.palette.primary.main, 0.08)\n : theme.palette.action.hover,\n },\n '&:focus-visible': { outline: `2px solid ${theme.palette.primary.main}`, outlineOffset: 1 },\n});\n\n/**\n * How far a row sits in from the panel edge, by depth.\n *\n * One step per level, on top of {@link rowSx}'s own 8px gutter — depth 0 keeps\n * that gutter, and every level below it adds `METRICS.rowIndentStep`. Absolute\n * like the rest of this file: the step is the design's own 14px, not a spacing\n * multiple that would round it.\n */\nexport const rowIndent = (depth: number): CSSObject =>\n depth === 0 ? {} : { paddingLeft: `${depth * METRICS.rowIndentStep}px` };\n\nexport const rowNameSx = (theme: Theme, isCategory: boolean): CSSObject => ({\n flex: 1,\n minWidth: 0,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: 13.5,\n fontWeight: isCategory ? 600 : 450,\n color: isCategory ? theme.palette.text.primary : theme.palette.text.secondary,\n});\n\nexport const rowMetaSx = (theme: Theme, selected: boolean): CSSObject => ({\n font: '500 11px/1 ui-monospace, SFMono-Regular, Menlo, monospace',\n color: selected ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: selected ? 600 : 500,\n flex: '0 0 auto',\n});\n\n/** The query hit inside a row label. */\nexport const markSx: CSSObject = {\n background: '#fff2a8',\n color: 'inherit',\n borderRadius: '2px',\n padding: '0 1px',\n};\n\nexport const chevronButtonSx = (theme: Theme, open: boolean): CSSObject => ({\n width: METRICS.chevronButton,\n height: METRICS.chevronButton,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '6px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: theme.palette.text.secondary,\n padding: 0,\n '&:hover': { background: theme.palette.action.hover, color: theme.palette.text.primary },\n '& svg': { width: 12, height: 12, transition: 'transform .15s', transform: open ? 'rotate(90deg)' : 'none' },\n});\n\n/** The tri-state checkbox: unchecked, checked, or the partial bar. */\nexport const checkboxSx = (theme: Theme, state: 'off' | 'partial' | 'on'): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n border: `1.5px solid ${state === 'off' ? theme.palette.divider : theme.palette.primary.main}`,\n borderRadius: '5px',\n background: state === 'off' ? theme.palette.background.paper : theme.palette.primary.main,\n display: 'grid',\n placeItems: 'center',\n transition: 'background .1s, border-color .1s',\n '& svg': { width: 12, height: 12, color: theme.palette.primary.contrastText },\n});\n\n/** The partial bar drawn inside a half-selected checkbox. */\nexport const checkboxBarSx = (theme: Theme): CSSObject => ({\n width: 9,\n height: 2,\n background: theme.palette.primary.contrastText,\n borderRadius: '1px',\n});\n\nexport const radioSx = (theme: Theme, on: boolean): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n borderRadius: '50%',\n background: theme.palette.background.paper,\n border: on\n ? `5.5px solid ${theme.palette.primary.main}`\n : `1.5px solid ${theme.palette.divider}`,\n boxSizing: 'border-box',\n});\n\nexport const sectionHeadSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: 10,\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n padding: '9px 8px 6px',\n});\n\nexport const footerSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n padding: '9px 10px',\n borderTop: `1px solid ${theme.palette.divider}`,\n background: theme.palette.action.hover,\n});\n\nexport const emptySx = (theme: Theme): CSSObject => ({\n padding: '26px 18px',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n '& strong': {\n display: 'block',\n color: theme.palette.text.primary,\n fontSize: 13.5,\n marginBottom: '4px',\n },\n '& p': { margin: '0 0 12px', fontSize: 12.5, lineHeight: 1.5 },\n});\n\n/** Skeleton row used while the catalogue loads. */\nexport const skeletonSx: CSSObject = {\n height: METRICS.rowHeight,\n margin: '4px 6px',\n borderRadius: `${METRICS.rowRadius}px`,\n};\n"],"mappings":";;;;;AAAA,SAAS,aAAyC;AAkB3C,IAAM,UAAU;AAAA,EACrB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AAAA;AAAA,EAEf,eAAe;AAAA,EACf,cAAc;AAAA,EACd,mBAAmB;AAAA;AAAA,EAEnB,iBAAiB;AACnB;AAGA,IAAM,SAAS,CAAC,WAAkB;AAAA,EAChC,MAAM,MAAM,QAAQ,QAAQ;AAAA,EAC5B,KAAK,MAAM,QAAQ,QAAQ;AAAA,EAC3B,MAAM,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EAC5C,MAAM,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EAC5C,MAAM,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAC9C;AAGO,IAAM,YAAY,CAAC,OAAc,UAAmB,SAA6B;AACtF,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,QAAQ,QAAQ;AAAA,IAChB,SAAS;AAAA,IACT,cAAc,GAAG,QAAQ,aAAa;AAAA,IACtC,QAAQ,aAAa,QAAQ,WAAW,MAAM,OAAO,UAAU,KAAK,CAAC;AAAA,IACrE,YAAY,WAAW,MAAM,OAAO,MAAM,QAAQ,WAAW;AAAA,IAC7D,OAAO,WAAW,MAAM,MAAM,MAAM,QAAQ,KAAK;AAAA,IACjD,MAAM;AAAA,IACN,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,WAAW,OAAO,aAAa,MAAM,IAAI,KAAK;AAAA,IAC9C,WAAW,EAAE,aAAa,QAAQ,WAAW,MAAM,OAAO,MAAM,QAAQ,KAAK,SAAS;AAAA,IACtF,mBAAmB;AAAA,MACjB,SAAS;AAAA,MACT,aAAa,MAAM;AAAA,MACnB,WAAW,aAAa,MAAM,MAAM,MAAM,IAAI,CAAC;AAAA,IACjD;AAAA,IACA,cAAc,EAAE,SAAS,KAAK,QAAQ,UAAU;AAAA,EAClD;AACF;AAGO,IAAM,iBAAiB,CAAC,WAA6B;AAAA,EAC1D,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY,MAAM,QAAQ,QAAQ;AAAA,EAClC,OAAO,MAAM,QAAQ,QAAQ;AAAA,EAC7B,cAAc;AAAA,EACd,SAAS;AAAA,EACT,UAAU;AAAA,EACV,WAAW;AACb;AAGO,IAAM,iBAA4B;AAAA,EACvC,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,SAAS;AAAA,EACT,SAAS;AAAA,EACT,WAAW,EAAE,YAAY,MAAM,QAAQ,IAAI,GAAG,SAAS,EAAE;AAC3D;AAEO,IAAM,mBAAmB,CAAC,UAA8B;AAAA,EAC7D,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW,OAAO,mBAAmB;AACvC;AAGO,IAAM,UAAU,CAAC,WAA6B;AAAA,EACnD,OAAO,QAAQ;AAAA,EACf,UAAU;AAAA,EACV,YAAY,MAAM,QAAQ,WAAW;AAAA,EACrC,QAAQ,aAAa,MAAM,QAAQ,OAAO;AAAA,EAC1C,cAAc,GAAG,QAAQ,WAAW;AAAA,EACpC,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AAAA,EACf,UAAU;AACZ;AAGO,IAAM,UAAU,CAAC,WAA6B;AAAA,EACnD,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc;AAAA,EACd,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AAAA,IACX,SAAS;AAAA,IACT,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,YAAY,MAAM,QAAQ;AAAA,EAC5B;AACF;AAEO,IAAM,cAAc,CAAC,OAAc,WAA+B;AAAA,EACvE,SAAS,QAAQ,kBAAkB;AAAA,EACnC,cAAc,aAAa,MAAM,QAAQ,OAAO;AAClD;AAEO,IAAM,WAAW,CAAC,WAA6B;AAAA,EACpD,SAAS;AAAA,EACT,cAAc,aAAa,MAAM,QAAQ,OAAO;AAAA,EAChD,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AACpD;AAEO,IAAM,gBAAgB,CAAC,WAA6B;AAAA,EACzD,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,cAAc;AAChB;AAEO,IAAM,aAAwB;AAAA,EACnC,SAAS;AAAA,EACT,UAAU;AAAA,EACV,KAAK;AAAA,EACL,WAAW;AAAA,EACX,UAAU;AACZ;AAGO,IAAM,SAAS,CAAC,UAA4B;AACjD,QAAM,QAAQ,OAAO,KAAK;AAC1B,SAAO;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,UAAU;AAAA,IACV,YAAY,MAAM;AAAA,IAClB,OAAO,MAAM;AAAA,IACb,QAAQ,aAAa,MAAM,IAAI;AAAA,IAC/B,cAAc;AAAA,IACd,SAAS;AAAA,IACT,YAAY;AAAA,MACV,QAAQ;AAAA,MACR,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,cAAc;AAAA,MACd,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,WAAW,EAAE,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,GAAG,SAAS,EAAE;AAAA,IAC/E;AAAA,EACF;AACF;AAEO,IAAM,SAAS,CAAC,WAA+B;AAAA,EACpD,UAAU;AAAA,EACV,WAAW,QAAQ,QAAQ,qBAAqB,QAAQ;AAAA,EACxD,SAAS;AAAA,EACT,eAAe;AAAA,EACf,oBAAoB;AACtB;AAGO,IAAM,QAAQ,CAAC,OAAc,QAAiB,WAA+B;AAAA,EAClF,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,SAAS;AAAA,EACT,QAAQ,QAAQ,QAAQ,iBAAiB,QAAQ;AAAA,EACjD,cAAc,GAAG,QAAQ,SAAS;AAAA,EAClC,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,MAAM;AAAA,EACN,YAAY,SAAS,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,IAAI;AAAA,EAC/D,WAAW,SAAS,mBAAmB,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC,KAAK;AAAA,EAClF,WAAW;AAAA,IACT,YAAY,SACR,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,IACtC,MAAM,QAAQ,OAAO;AAAA,EAC3B;AAAA,EACA,mBAAmB,EAAE,SAAS,aAAa,MAAM,QAAQ,QAAQ,IAAI,IAAI,eAAe,EAAE;AAC5F;AAUO,IAAM,YAAY,CAAC,UACxB,UAAU,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,QAAQ,QAAQ,aAAa,KAAK;AAElE,IAAM,YAAY,CAAC,OAAc,gBAAoC;AAAA,EAC1E,MAAM;AAAA,EACN,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AAAA,EACV,YAAY,aAAa,MAAM;AAAA,EAC/B,OAAO,aAAa,MAAM,QAAQ,KAAK,UAAU,MAAM,QAAQ,KAAK;AACtE;AAEO,IAAM,YAAY,CAAC,OAAc,cAAkC;AAAA,EACxE,MAAM;AAAA,EACN,OAAO,WAAW,MAAM,QAAQ,QAAQ,OAAO,MAAM,QAAQ,KAAK;AAAA,EAClE,YAAY,WAAW,MAAM;AAAA,EAC7B,MAAM;AACR;AAGO,IAAM,SAAoB;AAAA,EAC/B,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,cAAc;AAAA,EACd,SAAS;AACX;AAEO,IAAM,kBAAkB,CAAC,OAAc,UAA8B;AAAA,EAC1E,OAAO,QAAQ;AAAA,EACf,QAAQ,QAAQ;AAAA,EAChB,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,SAAS;AAAA,EACT,WAAW,EAAE,YAAY,MAAM,QAAQ,OAAO,OAAO,OAAO,MAAM,QAAQ,KAAK,QAAQ;AAAA,EACvF,SAAS,EAAE,OAAO,IAAI,QAAQ,IAAI,YAAY,kBAAkB,WAAW,OAAO,kBAAkB,OAAO;AAC7G;AAGO,IAAM,aAAa,CAAC,OAAc,WAAgD;AAAA,EACvF,OAAO,QAAQ;AAAA,EACf,QAAQ,QAAQ;AAAA,EAChB,MAAM;AAAA,EACN,QAAQ,eAAe,UAAU,QAAQ,MAAM,QAAQ,UAAU,MAAM,QAAQ,QAAQ,IAAI;AAAA,EAC3F,cAAc;AAAA,EACd,YAAY,UAAU,QAAQ,MAAM,QAAQ,WAAW,QAAQ,MAAM,QAAQ,QAAQ;AAAA,EACrF,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,SAAS,EAAE,OAAO,IAAI,QAAQ,IAAI,OAAO,MAAM,QAAQ,QAAQ,aAAa;AAC9E;AAGO,IAAM,gBAAgB,CAAC,WAA6B;AAAA,EACzD,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,YAAY,MAAM,QAAQ,QAAQ;AAAA,EAClC,cAAc;AAChB;AAEO,IAAM,UAAU,CAAC,OAAc,QAA4B;AAAA,EAChE,OAAO,QAAQ;AAAA,EACf,QAAQ,QAAQ;AAAA,EAChB,MAAM;AAAA,EACN,cAAc;AAAA,EACd,YAAY,MAAM,QAAQ,WAAW;AAAA,EACrC,QAAQ,KACJ,eAAe,MAAM,QAAQ,QAAQ,IAAI,KACzC,eAAe,MAAM,QAAQ,OAAO;AAAA,EACxC,WAAW;AACb;AAEO,IAAM,gBAAgB,CAAC,WAA6B;AAAA,EACzD,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,eAAe;AAAA,EACf,eAAe;AAAA,EACf,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,SAAS;AACX;AAEO,IAAM,WAAW,CAAC,WAA6B;AAAA,EACpD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,SAAS;AAAA,EACT,WAAW,aAAa,MAAM,QAAQ,OAAO;AAAA,EAC7C,YAAY,MAAM,QAAQ,OAAO;AACnC;AAEO,IAAM,UAAU,CAAC,WAA6B;AAAA,EACnD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,YAAY;AAAA,IACV,SAAS;AAAA,IACT,OAAO,MAAM,QAAQ,KAAK;AAAA,IAC1B,UAAU;AAAA,IACV,cAAc;AAAA,EAChB;AAAA,EACA,OAAO,EAAE,QAAQ,YAAY,UAAU,MAAM,YAAY,IAAI;AAC/D;AAGO,IAAM,aAAwB;AAAA,EACnC,QAAQ,QAAQ;AAAA,EAChB,QAAQ;AAAA,EACR,cAAc,GAAG,QAAQ,SAAS;AACpC;","names":[]}
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  METRICS,
3
3
  footerSx
4
- } from "./chunk-TFO6GBW7.js";
4
+ } from "./chunk-ZS44PY7T.js";
5
5
 
6
6
  // src/components/form/CategorySelect/CategoryPanelFoot.tsx
7
7
  import Box from "@mui/material/Box/index.js";
@@ -77,4 +77,4 @@ export {
77
77
  CategoryMultiFoot,
78
78
  CategorySingleFoot
79
79
  };
80
- //# sourceMappingURL=chunk-AJ6XEO4E.js.map
80
+ //# sourceMappingURL=chunk-ZUY65MFH.js.map
@@ -1,9 +1,9 @@
1
1
  import "../chunk-NUGT7LMR.js";
2
2
  import {
3
3
  Alert
4
- } from "../chunk-WNMYWQ7D.js";
5
- import "../chunk-57Z2ND3N.js";
6
- import "../chunk-N3QUEBNS.js";
4
+ } from "../chunk-4Y6SPFKW.js";
5
+ import "../chunk-CXLAJZSE.js";
6
+ import "../chunk-L7VH6IMR.js";
7
7
  import "../chunk-TXKZEKJN.js";
8
8
  import "../chunk-TYJR4GOF.js";
9
9
  import "../chunk-NQN5Z36J.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useRemoveConfirm
3
- } from "../chunk-KM5O4ICK.js";
3
+ } from "../chunk-7LCXGJN5.js";
4
4
  import {
5
5
  rowActionsToMenuItems
6
6
  } from "../chunk-ZBXG6RVJ.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  CardActionsProvider,
16
16
  useCardActions
17
- } from "../chunk-SYJMI2NP.js";
17
+ } from "../chunk-VNTOBLIB.js";
18
18
  import {
19
19
  CardKebab
20
20
  } from "../chunk-MNXVXW4T.js";
@@ -30,9 +30,9 @@ import "../chunk-3P4THDBM.js";
30
30
  import "../chunk-QQS3GQYS.js";
31
31
  import "../chunk-EMYESBIT.js";
32
32
  import "../chunk-NUGT7LMR.js";
33
- import "../chunk-WNMYWQ7D.js";
34
- import "../chunk-57Z2ND3N.js";
35
- import "../chunk-N3QUEBNS.js";
33
+ import "../chunk-4Y6SPFKW.js";
34
+ import "../chunk-CXLAJZSE.js";
35
+ import "../chunk-L7VH6IMR.js";
36
36
  import "../chunk-2IBFEHIX.js";
37
37
  import "../chunk-BWB2MVWP.js";
38
38
  import "../chunk-TXKZEKJN.js";
@@ -3,11 +3,11 @@ import {
3
3
  } from "../chunk-JWW2Z3RH.js";
4
4
  import {
5
5
  DataViewsTableBase
6
- } from "../chunk-KFWIOFMS.js";
6
+ } from "../chunk-TWY5FOBY.js";
7
7
  import "../chunk-ZZMZF7PZ.js";
8
8
  import {
9
9
  DataViewsGrid
10
- } from "../chunk-E3PUH5IF.js";
10
+ } from "../chunk-EQ7PWGBN.js";
11
11
  import {
12
12
  BaseListCard
13
13
  } from "../chunk-WR5JFDQ5.js";
@@ -22,16 +22,16 @@ import {
22
22
  DropIndicator,
23
23
  useDragItem
24
24
  } from "../chunk-JCJGJX7V.js";
25
- import "../chunk-FBI6QB3O.js";
25
+ import "../chunk-TVPPA4RD.js";
26
26
  import "../chunk-NYEA7JAI.js";
27
27
  import {
28
28
  DataViewsBoard
29
29
  } from "../chunk-E55CJV65.js";
30
- import "../chunk-PN5CQKA2.js";
30
+ import "../chunk-AXTLFK4T.js";
31
31
  import "../chunk-V4FKHLEB.js";
32
- import "../chunk-NLJV4CPF.js";
32
+ import "../chunk-7MN6I5NK.js";
33
33
  import "../chunk-5WNQJ5KS.js";
34
- import "../chunk-EJQW2IYW.js";
34
+ import "../chunk-FPFUXRD2.js";
35
35
  import "../chunk-PFDM2OIP.js";
36
36
  import "../chunk-O4VCZTK4.js";
37
37
  import "../chunk-JSH3HFDQ.js";
@@ -67,7 +67,7 @@ import {
67
67
  cardScaleForZoom
68
68
  } from "../chunk-ZPIMPOHV.js";
69
69
  import "../chunk-OE2ZVL67.js";
70
- import "../chunk-6ZY5XU4J.js";
70
+ import "../chunk-UIZH4DAE.js";
71
71
  import "../chunk-7KWBGMQC.js";
72
72
  import "../chunk-2GI7ANEL.js";
73
73
  import "../chunk-5M4TYFR3.js";
@@ -128,22 +128,22 @@ import "../chunk-MLCFODJO.js";
128
128
  import "../chunk-35ETD7ML.js";
129
129
  import "../chunk-UCU5FCYE.js";
130
130
  import "../chunk-N5ZWC6CB.js";
131
- import "../chunk-JM64OEU6.js";
131
+ import "../chunk-WAPJ2DL3.js";
132
132
  import "../chunk-LMXWI3DD.js";
133
- import "../chunk-TPLKJHNN.js";
134
- import "../chunk-ZUIJ3N7N.js";
135
- import "../chunk-OVLNF4AZ.js";
136
- import "../chunk-4TXIZ5WI.js";
137
- import "../chunk-AJ6XEO4E.js";
138
- import "../chunk-ZAB65STX.js";
139
- import "../chunk-KIHQE5YA.js";
140
- import "../chunk-OFOYMZRY.js";
133
+ import "../chunk-ZC7RQDZ5.js";
134
+ import "../chunk-V6Z4XS3I.js";
135
+ import "../chunk-P7IVAMAU.js";
136
+ import "../chunk-CJUOBTLL.js";
137
+ import "../chunk-ZUY65MFH.js";
138
+ import "../chunk-XHHR6G35.js";
139
+ import "../chunk-GVDJQMFI.js";
140
+ import "../chunk-NPN7JTRM.js";
141
141
  import "../chunk-DMNZD3Q7.js";
142
- import "../chunk-TFO6GBW7.js";
143
- import "../chunk-2GB5CIN6.js";
144
- import "../chunk-ISH42UC7.js";
145
- import "../chunk-WWM2YTW4.js";
146
- import "../chunk-LR6MSKTT.js";
142
+ import "../chunk-ZS44PY7T.js";
143
+ import "../chunk-RZVUY2MO.js";
144
+ import "../chunk-USJPZ5Q7.js";
145
+ import "../chunk-R2AZOWEZ.js";
146
+ import "../chunk-PN4HVM43.js";
147
147
  import "../chunk-QYKDY4EI.js";
148
148
  import "../chunk-4OHRZW7U.js";
149
149
  import "../chunk-S6YY2WWK.js";
@@ -184,9 +184,9 @@ import "../chunk-G3E66C6J.js";
184
184
  import "../chunk-SNCSGLJ6.js";
185
185
  import "../chunk-M4LQRQFL.js";
186
186
  import "../chunk-NUGT7LMR.js";
187
- import "../chunk-WNMYWQ7D.js";
188
- import "../chunk-57Z2ND3N.js";
189
- import "../chunk-N3QUEBNS.js";
187
+ import "../chunk-4Y6SPFKW.js";
188
+ import "../chunk-CXLAJZSE.js";
189
+ import "../chunk-L7VH6IMR.js";
190
190
  import "../chunk-2IBFEHIX.js";
191
191
  import "../chunk-BWB2MVWP.js";
192
192
  import "../chunk-HI2OFZSZ.js";
@@ -1,30 +1,34 @@
1
1
  import "../chunk-N5ZWC6CB.js";
2
2
  import {
3
3
  CategorySelect
4
- } from "../chunk-JM64OEU6.js";
4
+ } from "../chunk-WAPJ2DL3.js";
5
5
  import "../chunk-LMXWI3DD.js";
6
- import "../chunk-TPLKJHNN.js";
7
- import "../chunk-ZUIJ3N7N.js";
8
- import "../chunk-OVLNF4AZ.js";
9
- import "../chunk-4TXIZ5WI.js";
10
- import "../chunk-AJ6XEO4E.js";
11
- import "../chunk-ZAB65STX.js";
12
- import "../chunk-KIHQE5YA.js";
13
- import "../chunk-OFOYMZRY.js";
6
+ import "../chunk-ZC7RQDZ5.js";
7
+ import "../chunk-V6Z4XS3I.js";
8
+ import "../chunk-P7IVAMAU.js";
9
+ import "../chunk-CJUOBTLL.js";
10
+ import "../chunk-ZUY65MFH.js";
11
+ import "../chunk-XHHR6G35.js";
12
+ import "../chunk-GVDJQMFI.js";
13
+ import "../chunk-NPN7JTRM.js";
14
14
  import "../chunk-DMNZD3Q7.js";
15
- import "../chunk-TFO6GBW7.js";
16
- import "../chunk-2GB5CIN6.js";
17
- import "../chunk-ISH42UC7.js";
18
- import "../chunk-WWM2YTW4.js";
15
+ import "../chunk-ZS44PY7T.js";
16
+ import "../chunk-RZVUY2MO.js";
17
+ import "../chunk-USJPZ5Q7.js";
18
+ import "../chunk-R2AZOWEZ.js";
19
19
  import {
20
20
  buildCategoryGroups,
21
21
  categoryCheckState,
22
+ categoryPath,
23
+ collectBranchIds,
22
24
  collectLeafIds,
23
25
  filterCategoryGroups,
26
+ findGroup,
24
27
  foldText,
25
28
  leavesOf,
26
- summarizeSelection
27
- } from "../chunk-LR6MSKTT.js";
29
+ summarizeSelection,
30
+ treeDepth
31
+ } from "../chunk-PN4HVM43.js";
28
32
  import "../chunk-C3UKR3NT.js";
29
33
  import "../chunk-IPPTOL53.js";
30
34
  import "../chunk-7FDU3FIN.js";
@@ -36,10 +40,14 @@ export {
36
40
  CategorySelect,
37
41
  buildCategoryGroups,
38
42
  categoryCheckState,
43
+ categoryPath,
44
+ collectBranchIds,
39
45
  collectLeafIds,
40
46
  filterCategoryGroups,
47
+ findGroup,
41
48
  foldText,
42
49
  leavesOf,
43
- summarizeSelection
50
+ summarizeSelection,
51
+ treeDepth
44
52
  };
45
53
  //# sourceMappingURL=CategorySelect.js.map