ixia-ui-react 1.8.0 → 2.0.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 (270) hide show
  1. package/README.md +24 -1
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/alert/index.d.ts +22 -0
  6. package/dist/alert/index.js +1 -0
  7. package/dist/alert-Dcu9R8CY.js +73 -0
  8. package/dist/alert-Dcu9R8CY.js.map +1 -0
  9. package/dist/alert-dialog/index.d.ts +39 -0
  10. package/dist/alert-dialog/index.js +134 -0
  11. package/dist/alert-dialog/index.js.map +1 -0
  12. package/dist/autocomplete/index.d.ts +2 -0
  13. package/dist/autocomplete/index.js +1 -0
  14. package/dist/autocomplete-BfpWVO1l.js +169 -0
  15. package/dist/autocomplete-BfpWVO1l.js.map +1 -0
  16. package/dist/avatar/index.d.ts +2 -0
  17. package/dist/avatar/index.js +1 -0
  18. package/dist/avatar-Bp4gZh21.js +93 -0
  19. package/dist/avatar-Bp4gZh21.js.map +1 -0
  20. package/dist/badge/index.d.ts +2 -0
  21. package/dist/badge/index.js +1 -0
  22. package/dist/badge-Cl-9WTW-.js +160 -0
  23. package/dist/badge-Cl-9WTW-.js.map +1 -0
  24. package/dist/bento-box/index.d.ts +30 -0
  25. package/dist/bento-box/index.js +103 -0
  26. package/dist/bento-box/index.js.map +1 -0
  27. package/dist/breadcrumb/index.d.ts +18 -0
  28. package/dist/breadcrumb/index.js +58 -0
  29. package/dist/breadcrumb/index.js.map +1 -0
  30. package/dist/button/index.d.ts +3 -0
  31. package/dist/button/index.js +1 -0
  32. package/dist/button-BpUC-R1J.js +307 -0
  33. package/dist/button-BpUC-R1J.js.map +1 -0
  34. package/dist/button-group/index.d.ts +2 -0
  35. package/dist/button-group/index.js +1 -0
  36. package/dist/button-group-7azbqlcO.js +269 -0
  37. package/dist/button-group-7azbqlcO.js.map +1 -0
  38. package/dist/button.types-BFKrBCGd.d.ts +10 -0
  39. package/dist/calendar/index.d.ts +63 -0
  40. package/dist/calendar/index.js +292 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/chart/index.d.ts +87 -0
  43. package/dist/chart/index.js +262 -0
  44. package/dist/chart/index.js.map +1 -0
  45. package/dist/checkbox/index.d.ts +2 -0
  46. package/dist/checkbox/index.js +1 -0
  47. package/dist/checkbox-BuUZ1Lly.js +54 -0
  48. package/dist/checkbox-BuUZ1Lly.js.map +1 -0
  49. package/dist/checkbox-group/index.d.ts +6 -0
  50. package/dist/checkbox-group/index.js +17 -0
  51. package/dist/checkbox-group/index.js.map +1 -0
  52. package/dist/cn-BDi0DfT5.js +29 -0
  53. package/dist/cn-BDi0DfT5.js.map +1 -0
  54. package/dist/code-block/index.d.ts +50 -0
  55. package/dist/code-block/index.js +208 -0
  56. package/dist/code-block/index.js.map +1 -0
  57. package/dist/collapsible/index.d.ts +2 -0
  58. package/dist/collapsible/index.js +1 -0
  59. package/dist/collapsible-BVqrh0Q0.js +44 -0
  60. package/dist/collapsible-BVqrh0Q0.js.map +1 -0
  61. package/dist/color-channel-slider/index.d.ts +2 -0
  62. package/dist/color-channel-slider/index.js +1 -0
  63. package/dist/color-channel-slider-h8mUPJ35.js +70 -0
  64. package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
  65. package/dist/color-picker/index.d.ts +137 -0
  66. package/dist/color-picker/index.js +621 -0
  67. package/dist/color-picker/index.js.map +1 -0
  68. package/dist/combobox/index.d.ts +64 -0
  69. package/dist/combobox/index.js +289 -0
  70. package/dist/combobox/index.js.map +1 -0
  71. package/dist/context-menu/index.d.ts +49 -0
  72. package/dist/context-menu/index.js +166 -0
  73. package/dist/context-menu/index.js.map +1 -0
  74. package/dist/dialog/index.d.ts +36 -0
  75. package/dist/dialog/index.js +119 -0
  76. package/dist/dialog/index.js.map +1 -0
  77. package/dist/drawer/index.d.ts +31 -0
  78. package/dist/drawer/index.js +95 -0
  79. package/dist/drawer/index.js.map +1 -0
  80. package/dist/dropzone/index.d.ts +70 -0
  81. package/dist/dropzone/index.js +479 -0
  82. package/dist/dropzone/index.js.map +1 -0
  83. package/dist/field/index.d.ts +2 -0
  84. package/dist/field/index.js +1 -0
  85. package/dist/field-DTL7eA5y.js +254 -0
  86. package/dist/field-DTL7eA5y.js.map +1 -0
  87. package/dist/form/index.d.ts +220 -0
  88. package/dist/form/index.js +3 -0
  89. package/dist/form-BxMg796f.js +192 -0
  90. package/dist/form-BxMg796f.js.map +1 -0
  91. package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
  92. package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
  93. package/dist/hooks/index.d.ts +26 -0
  94. package/dist/hooks/index.js +1 -0
  95. package/dist/hooks-DUm-q_ig.js +68 -0
  96. package/dist/hooks-DUm-q_ig.js.map +1 -0
  97. package/dist/icon/index.d.ts +2 -0
  98. package/dist/icon/index.js +1 -0
  99. package/dist/icon-D3JWfCa2.js +85 -0
  100. package/dist/icon-D3JWfCa2.js.map +1 -0
  101. package/dist/icon-container/index.d.ts +10 -0
  102. package/dist/icon-container/index.js +64 -0
  103. package/dist/icon-container/index.js.map +1 -0
  104. package/dist/index-0ZQzIKoE.d.ts +11 -0
  105. package/dist/index-B3MK1QYh.d.ts +11 -0
  106. package/dist/index-BJVMIPq4.d.ts +54 -0
  107. package/dist/index-BsV-u_jc.d.ts +4 -0
  108. package/dist/index-BygR7cUT.d.ts +22 -0
  109. package/dist/index-BzTOLSgZ.d.ts +9 -0
  110. package/dist/index-C15xiG9O.d.ts +14 -0
  111. package/dist/index-C2zco6-C.d.ts +15 -0
  112. package/dist/index-CIDOd4Z8.d.ts +56 -0
  113. package/dist/index-CQti9gFb.d.ts +49 -0
  114. package/dist/index-CiE-Rqit.d.ts +70 -0
  115. package/dist/index-D1kkOg9k.d.ts +14 -0
  116. package/dist/index-DLfdAked.d.ts +34 -0
  117. package/dist/index-DMaW_XF1.d.ts +24 -0
  118. package/dist/index-Db_QGr6S.d.ts +5 -0
  119. package/dist/index-DdFxZ3Xr.d.ts +22 -0
  120. package/dist/index-DfNHJF0t.d.ts +33 -0
  121. package/dist/index-DyQYoAUf.d.ts +29 -0
  122. package/dist/index-N2CBSUDu.d.ts +14 -0
  123. package/dist/index-PuhTRMce.d.ts +11 -0
  124. package/dist/index-Wb_tILYa.d.ts +24 -0
  125. package/dist/index-bVyqfhJS.d.ts +4 -0
  126. package/dist/index-x4f8gnaI.d.ts +15 -0
  127. package/dist/input/index.d.ts +3 -0
  128. package/dist/input/index.js +1 -0
  129. package/dist/input-Laj6dwtK.js +179 -0
  130. package/dist/input-Laj6dwtK.js.map +1 -0
  131. package/dist/input-group/index.d.ts +2 -0
  132. package/dist/input-group/index.js +1 -0
  133. package/dist/input-group-CgdazGrY.js +111 -0
  134. package/dist/input-group-CgdazGrY.js.map +1 -0
  135. package/dist/input-otp/index.d.ts +13 -0
  136. package/dist/input-otp/index.js +44 -0
  137. package/dist/input-otp/index.js.map +1 -0
  138. package/dist/input.types-816rEVWU.d.ts +20 -0
  139. package/dist/input.types-D0gyoaQv.js +48 -0
  140. package/dist/input.types-D0gyoaQv.js.map +1 -0
  141. package/dist/kbd/index.d.ts +9 -0
  142. package/dist/kbd/index.js +25 -0
  143. package/dist/kbd/index.js.map +1 -0
  144. package/dist/label/index.d.ts +8 -0
  145. package/dist/label/index.js +1 -0
  146. package/dist/label-BgpayDvN.js +27 -0
  147. package/dist/label-BgpayDvN.js.map +1 -0
  148. package/dist/layer-tree/index.d.ts +728 -0
  149. package/dist/layer-tree/index.js +685 -0
  150. package/dist/layer-tree/index.js.map +1 -0
  151. package/dist/map/google/index.d.ts +143 -0
  152. package/dist/map/google/index.js +445 -0
  153. package/dist/map/google/index.js.map +1 -0
  154. package/dist/map/index.d.ts +94 -0
  155. package/dist/map/index.js +208 -0
  156. package/dist/map/index.js.map +1 -0
  157. package/dist/map.context-Dw1D7E8m.js +11 -0
  158. package/dist/map.context-Dw1D7E8m.js.map +1 -0
  159. package/dist/menu/index.d.ts +2 -0
  160. package/dist/menu/index.js +1 -0
  161. package/dist/menu-sf13cnGp.js +173 -0
  162. package/dist/menu-sf13cnGp.js.map +1 -0
  163. package/dist/menu-tone-DWBEHoX2.js +22 -0
  164. package/dist/menu-tone-DWBEHoX2.js.map +1 -0
  165. package/dist/meter/index.d.ts +2 -0
  166. package/dist/meter/index.js +1 -0
  167. package/dist/meter-HD5taq57.js +116 -0
  168. package/dist/meter-HD5taq57.js.map +1 -0
  169. package/dist/nav-bar/index.d.ts +25 -0
  170. package/dist/nav-bar/index.js +133 -0
  171. package/dist/nav-bar/index.js.map +1 -0
  172. package/dist/navigation-menu/index.d.ts +43 -0
  173. package/dist/navigation-menu/index.js +176 -0
  174. package/dist/navigation-menu/index.js.map +1 -0
  175. package/dist/number-field/index.d.ts +14 -0
  176. package/dist/number-field/index.js +116 -0
  177. package/dist/number-field/index.js.map +1 -0
  178. package/dist/popover/index.d.ts +2 -0
  179. package/dist/popover/index.js +1 -0
  180. package/dist/popover-B1s4xXrX.js +114 -0
  181. package/dist/popover-B1s4xXrX.js.map +1 -0
  182. package/dist/preview-card/index.d.ts +13 -0
  183. package/dist/preview-card/index.js +35 -0
  184. package/dist/preview-card/index.js.map +1 -0
  185. package/dist/profile/index.d.ts +21 -0
  186. package/dist/profile/index.js +52 -0
  187. package/dist/profile/index.js.map +1 -0
  188. package/dist/progress/index.d.ts +23 -0
  189. package/dist/progress/index.js +97 -0
  190. package/dist/progress/index.js.map +1 -0
  191. package/dist/radar-ping/index.d.ts +11 -0
  192. package/dist/radar-ping/index.js +49 -0
  193. package/dist/radar-ping/index.js.map +1 -0
  194. package/dist/radio-group/index.d.ts +2 -0
  195. package/dist/radio-group/index.js +1 -0
  196. package/dist/radio-group-Dj43u35Z.js +47 -0
  197. package/dist/radio-group-Dj43u35Z.js.map +1 -0
  198. package/dist/resizeable/index.d.ts +11 -0
  199. package/dist/resizeable/index.js +31 -0
  200. package/dist/resizeable/index.js.map +1 -0
  201. package/dist/scroll-area/index.d.ts +11 -0
  202. package/dist/scroll-area/index.js +51 -0
  203. package/dist/scroll-area/index.js.map +1 -0
  204. package/dist/select/index.d.ts +2 -0
  205. package/dist/select/index.js +1 -0
  206. package/dist/select-DncJXYim.js +159 -0
  207. package/dist/select-DncJXYim.js.map +1 -0
  208. package/dist/separator/index.d.ts +2 -0
  209. package/dist/separator/index.js +1 -0
  210. package/dist/separator-DgIQp1cB.js +97 -0
  211. package/dist/separator-DgIQp1cB.js.map +1 -0
  212. package/dist/sidebar/index.d.ts +80 -0
  213. package/dist/sidebar/index.js +334 -0
  214. package/dist/sidebar/index.js.map +1 -0
  215. package/dist/site-header/index.d.ts +22 -0
  216. package/dist/site-header/index.js +55 -0
  217. package/dist/site-header/index.js.map +1 -0
  218. package/dist/skeleton/index.d.ts +4 -0
  219. package/dist/skeleton/index.js +1 -0
  220. package/dist/skeleton-DSG3FWby.js +13 -0
  221. package/dist/skeleton-DSG3FWby.js.map +1 -0
  222. package/dist/slider/index.d.ts +2 -0
  223. package/dist/slider/index.js +1 -0
  224. package/dist/slider-D_XlV4OW.js +114 -0
  225. package/dist/slider-D_XlV4OW.js.map +1 -0
  226. package/dist/slider-group/index.d.ts +46 -0
  227. package/dist/slider-group/index.js +198 -0
  228. package/dist/slider-group/index.js.map +1 -0
  229. package/dist/styles.css +4 -1
  230. package/dist/switch/index.d.ts +2 -0
  231. package/dist/switch/index.js +1 -0
  232. package/dist/switch-DXHixGHe.js +23 -0
  233. package/dist/switch-DXHixGHe.js.map +1 -0
  234. package/dist/table/index.d.ts +920 -0
  235. package/dist/table/index.js +1544 -0
  236. package/dist/table/index.js.map +1 -0
  237. package/dist/tabs/index.d.ts +2 -0
  238. package/dist/tabs/index.js +1 -0
  239. package/dist/tabs-DTC7coap.js +270 -0
  240. package/dist/tabs-DTC7coap.js.map +1 -0
  241. package/dist/text-area/index.d.ts +2 -0
  242. package/dist/text-area/index.js +1 -0
  243. package/dist/text-area-H6HjKnv_.js +50 -0
  244. package/dist/text-area-H6HjKnv_.js.map +1 -0
  245. package/dist/toast/index.d.ts +65 -0
  246. package/dist/toast/index.js +216 -0
  247. package/dist/toast/index.js.map +1 -0
  248. package/dist/toggle/index.d.ts +2 -0
  249. package/dist/toggle/index.js +1 -0
  250. package/dist/toggle-ZT9thVmz.js +73 -0
  251. package/dist/toggle-ZT9thVmz.js.map +1 -0
  252. package/dist/toggle-group/index.d.ts +10 -0
  253. package/dist/toggle-group/index.js +63 -0
  254. package/dist/toggle-group/index.js.map +1 -0
  255. package/dist/toggle-group-context-CBNZEf1I.js +6 -0
  256. package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
  257. package/dist/tooltip/index.d.ts +18 -0
  258. package/dist/tooltip/index.js +1 -0
  259. package/dist/tooltip-B6z3tDbW.js +41 -0
  260. package/dist/tooltip-B6z3tDbW.js.map +1 -0
  261. package/dist/trim-text-children-CQRFg2fL.js +33 -0
  262. package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
  263. package/dist/utils/index.d.ts +4 -0
  264. package/dist/utils/index.js +3 -0
  265. package/dist/utils-BI2x7nW5.js +5 -0
  266. package/dist/utils-BI2x7nW5.js.map +1 -0
  267. package/package.json +100 -31
  268. package/dist/index.d.ts +0 -8000
  269. package/dist/index.js +0 -17274
  270. package/dist/index.js.map +0 -1
@@ -0,0 +1,685 @@
1
+ import { t as cn } from "../cn-BDi0DfT5.js";
2
+ import { n as Icon } from "../icon-D3JWfCa2.js";
3
+ import { t as Button } from "../button-BpUC-R1J.js";
4
+ import { t as Badge } from "../badge-Cl-9WTW-.js";
5
+ import { i as InputGroupAddon, r as InputGroupInput, t as InputGroup } from "../input-group-CgdazGrY.js";
6
+ import { i as MenuSubmenu, l as MenuPopup, n as MenuTrigger, p as MenuCheckboxItem, r as MenuSubmenuTrigger, t as Menu } from "../menu-sf13cnGp.js";
7
+ import { cva } from "class-variance-authority";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import React, { createElement } from "react";
10
+ import { assignPrototypeAPIs, assignTableAPIs, columnFacetingFeature, columnFilteringFeature, columnSizingFeature, columnVisibilityFeature, createExpandedRowModel, createFacetedRowModel, createFacetedUniqueValues, createFilteredRowModel, createPaginatedRowModel, createSortedRowModel, createTableHook, createTableHookContexts, filterFn_arrHas, filterFn_arrIncludes, filterFn_arrIncludesAll, filterFn_arrIncludesSome, filterFn_between, filterFn_betweenInclusive, filterFn_empty, filterFn_endsWith, filterFn_equals, filterFn_equalsString, filterFn_equalsStringSensitive, filterFn_inDateRange, filterFn_inNumberRange, filterFn_includesString, filterFn_includesStringSensitive, filterFn_notEmpty, filterFn_startsWith, filterFn_weakEquals, functionalUpdate, globalFilteringFeature, makeStateUpdater, metaHelper, rowExpandingFeature, rowPaginationFeature, rowSelectionFeature, rowSortingFeature, sortFn_alphanumeric, sortFn_basic, sortFn_datetime, sortFn_text, tableFeatures } from "@tanstack/react-table";
11
+ import { Feedback } from "@dnd-kit/dom";
12
+ import { DragDropProvider, DragOverlay, useDraggable, useDroppable } from "@dnd-kit/react";
13
+ // src/components/layer-tree/layer-tree-utils.ts
14
+ /**
15
+ * Recursively searches for a node by ID in a nested tree structure.
16
+ *
17
+ * @param nodes - The array of nodes to search through
18
+ * @param nodeId - The ID of the node to find
19
+ * @returns The matching node or `null` if not found
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const node = findLayerTreeNode(layers, 'layer-001')
24
+ * if (node) console.log(node.name)
25
+ * ```
26
+ */
27
+ const findLayerTreeNode = (nodes, nodeId) => {
28
+ for (const node of nodes) {
29
+ if (node.id === nodeId) return node;
30
+ if (node.children?.length) {
31
+ const match = findLayerTreeNode(node.children, nodeId);
32
+ if (match) return match;
33
+ }
34
+ }
35
+ return null;
36
+ };
37
+ const removeLayerTreeNode = (nodes, nodeId) => {
38
+ let removedNode = null;
39
+ return {
40
+ nextNodes: nodes.flatMap((node) => {
41
+ if (node.id === nodeId) {
42
+ removedNode = node;
43
+ return [];
44
+ }
45
+ if (!node.children?.length) return [node];
46
+ const { nextNodes: nextChildren, removedNode: nestedRemovedNode } = removeLayerTreeNode(node.children, nodeId);
47
+ if (!nestedRemovedNode) return [node];
48
+ removedNode = nestedRemovedNode;
49
+ return [{
50
+ ...node,
51
+ children: nextChildren
52
+ }];
53
+ }),
54
+ removedNode
55
+ };
56
+ };
57
+ const insertLayerTreeNode = (nodes, folderId, nodeToInsert) => nodes.map((node) => {
58
+ if (node.id === folderId) return {
59
+ ...node,
60
+ children: [...node.children ?? [], nodeToInsert]
61
+ };
62
+ if (!node.children?.length) return node;
63
+ return {
64
+ ...node,
65
+ children: insertLayerTreeNode(node.children, folderId, nodeToInsert)
66
+ };
67
+ });
68
+ const containsLayerTreeNode = (nodes, nodeId) => Boolean(findLayerTreeNode(nodes, nodeId));
69
+ const moveNodeIntoFolder = (nodes, sourceId, targetId) => {
70
+ const { nextNodes, removedNode } = removeLayerTreeNode(nodes, sourceId);
71
+ if (!removedNode) return nodes;
72
+ return insertLayerTreeNode(nextNodes, targetId, removedNode);
73
+ };
74
+ const moveLayerTreeNode = (nodes, sourceId, targetId) => {
75
+ if (sourceId === targetId) return nodes;
76
+ const sourceNode = findLayerTreeNode(nodes, sourceId), targetNode = findLayerTreeNode(nodes, targetId);
77
+ if (!sourceNode || !targetNode?.children) return nodes;
78
+ if (containsLayerTreeNode(sourceNode.children ?? [], targetId)) return nodes;
79
+ return moveNodeIntoFolder(nodes, sourceId, targetId);
80
+ };
81
+ const moveLayerTreeNodeToRoot = (nodes, sourceId) => {
82
+ const { nextNodes, removedNode } = removeLayerTreeNode(nodes, sourceId);
83
+ if (!removedNode) return nodes;
84
+ return [...nextNodes, removedNode];
85
+ };
86
+ const rowVisibilityFeature = {
87
+ assignRowPrototype: (prototype, table) => {
88
+ const layerTable = table;
89
+ assignPrototypeAPIs("rowVisibilityFeature", prototype, table, {
90
+ row_getIsVisible: { fn: (row) => layerTable.atoms.rowVisibility?.get()?.[row.id] ?? layerTable.options.getRowVisible?.(row) ?? true },
91
+ row_toggleVisibility: { fn: (row, value) => {
92
+ layerTable.options.onRowVisibilityChange?.((old) => ({
93
+ ...old,
94
+ [row.id]: value ?? !(old[row.id] ?? true)
95
+ }));
96
+ } }
97
+ });
98
+ },
99
+ constructTableAPIs: (table) => {
100
+ const layerTable = table, isRowVisible = (row) => layerTable.atoms.rowVisibility?.get()?.[row.id] ?? layerTable.options.getRowVisible?.(row) ?? true, setRowVisibility = (updater) => {
101
+ const safeUpdater = (old) => functionalUpdate(updater, old);
102
+ layerTable.options.onRowVisibilityChange?.(safeUpdater);
103
+ }, getIsAllRowsVisible = () => layerTable.getRowModel().flatRows.every((row) => isRowVisible(row));
104
+ assignTableAPIs("rowVisibilityFeature", layerTable, {
105
+ table_getIsAllRowsVisible: { fn: () => getIsAllRowsVisible() },
106
+ table_resetRowVisibility: { fn: () => setRowVisibility(layerTable.initialState.rowVisibility ?? {}) },
107
+ table_setRowVisibility: { fn: (updater) => setRowVisibility(updater) },
108
+ table_toggleAllRowsVisible: { fn: (value) => {
109
+ const next = value ?? !getIsAllRowsVisible();
110
+ setRowVisibility(() => {
111
+ const state = {};
112
+ for (const row of layerTable.getRowModel().flatRows) state[row.id] = next;
113
+ return state;
114
+ });
115
+ } }
116
+ });
117
+ },
118
+ getDefaultTableOptions: (table) => ({
119
+ enableRowVisibility: true,
120
+ onRowVisibilityChange: makeStateUpdater("rowVisibility", table)
121
+ }),
122
+ getInitialState: (initialState) => ({
123
+ rowVisibility: {},
124
+ ...initialState
125
+ })
126
+ };
127
+ const rowLockedFeature = {
128
+ assignRowPrototype: (prototype, table) => {
129
+ const layerTable = table;
130
+ assignPrototypeAPIs("rowLockedFeature", prototype, table, {
131
+ row_getIsLocked: { fn: (row) => layerTable.atoms.rowLocked?.get()?.[row.id] ?? layerTable.options.getRowLocked?.(row) ?? false },
132
+ row_toggleLocked: { fn: (row, value) => {
133
+ layerTable.options.onRowLockedChange?.((old) => ({
134
+ ...old,
135
+ [row.id]: value ?? !(old[row.id] ?? false)
136
+ }));
137
+ } }
138
+ });
139
+ },
140
+ constructTableAPIs: (table) => {
141
+ const layerTable = table, isRowLocked = (row) => layerTable.atoms.rowLocked?.get()?.[row.id] ?? layerTable.options.getRowLocked?.(row) ?? false, setRowLocked = (updater) => {
142
+ const safeUpdater = (old) => functionalUpdate(updater, old);
143
+ layerTable.options.onRowLockedChange?.(safeUpdater);
144
+ }, getIsAllRowsLocked = () => layerTable.getRowModel().flatRows.every((row) => isRowLocked(row));
145
+ assignTableAPIs("rowLockedFeature", layerTable, {
146
+ table_getIsAllRowsLocked: { fn: () => getIsAllRowsLocked() },
147
+ table_resetRowLocked: { fn: () => setRowLocked(layerTable.initialState.rowLocked ?? {}) },
148
+ table_setRowLocked: { fn: (updater) => setRowLocked(updater) },
149
+ table_toggleAllRowsLocked: { fn: (value) => {
150
+ const next = value ?? !getIsAllRowsLocked();
151
+ setRowLocked(() => {
152
+ const state = {};
153
+ for (const row of layerTable.getRowModel().flatRows) state[row.id] = next;
154
+ return state;
155
+ });
156
+ } }
157
+ });
158
+ },
159
+ getDefaultTableOptions: (table) => ({
160
+ enableRowLocked: true,
161
+ onRowLockedChange: makeStateUpdater("rowLocked", table)
162
+ }),
163
+ getInitialState: (initialState) => ({
164
+ rowLocked: {},
165
+ ...initialState
166
+ })
167
+ };
168
+ // src/components/layer-tree/layer-tree-context.tsx
169
+ const features = tableFeatures({
170
+ columnFacetingFeature,
171
+ columnFilteringFeature,
172
+ columnMeta: metaHelper(),
173
+ columnSizingFeature,
174
+ columnVisibilityFeature,
175
+ expandedRowModel: createExpandedRowModel(),
176
+ facetedRowModel: createFacetedRowModel(),
177
+ facetedUniqueValues: createFacetedUniqueValues(),
178
+ filterFns: {
179
+ arrHas: filterFn_arrHas,
180
+ arrIncludes: filterFn_arrIncludes,
181
+ arrIncludesAll: filterFn_arrIncludesAll,
182
+ arrIncludesSome: filterFn_arrIncludesSome,
183
+ between: filterFn_between,
184
+ betweenInclusive: filterFn_betweenInclusive,
185
+ empty: filterFn_empty,
186
+ endsWith: filterFn_endsWith,
187
+ equals: filterFn_equals,
188
+ equalsString: filterFn_equalsString,
189
+ equalsStringSensitive: filterFn_equalsStringSensitive,
190
+ inDateRange: filterFn_inDateRange,
191
+ inNumberRange: filterFn_inNumberRange,
192
+ includesString: filterFn_includesString,
193
+ includesStringSensitive: filterFn_includesStringSensitive,
194
+ notEmpty: filterFn_notEmpty,
195
+ startsWith: filterFn_startsWith,
196
+ weakEquals: filterFn_weakEquals
197
+ },
198
+ filteredRowModel: createFilteredRowModel(),
199
+ globalFilteringFeature,
200
+ paginatedRowModel: createPaginatedRowModel(),
201
+ rowExpandingFeature,
202
+ rowLockedFeature,
203
+ rowPaginationFeature,
204
+ rowSelectionFeature,
205
+ rowSortingFeature,
206
+ rowVisibilityFeature,
207
+ sortFns: {
208
+ alphanumeric: sortFn_alphanumeric,
209
+ basic: sortFn_basic,
210
+ datetime: sortFn_datetime,
211
+ text: sortFn_text
212
+ },
213
+ sortedRowModel: createSortedRowModel(),
214
+ tableMeta: metaHelper()
215
+ }), { tableContext, cellContext, headerContext, useTableContext: useTableContext$1, useCellContext: useCellContext$1, useHeaderContext: useHeaderContext$1 } = createTableHookContexts();
216
+ // src/components/layer-tree/layer-tree.types.ts
217
+ const layerTreeTextCellVariants = cva("min-w-0 grow truncate px-2xs", {
218
+ defaultVariants: { size: "medium" },
219
+ variants: { size: {
220
+ large: "style-text-default-1",
221
+ medium: "style-text-default-0",
222
+ small: "style-text-default--1"
223
+ } }
224
+ });
225
+ const LayerTreeContext = React.createContext(null);
226
+ const useLayerTree = () => {
227
+ const context = React.useContext(LayerTreeContext);
228
+ if (!context) throw new Error("useLayerTree must be used within a LayerTreeProvider");
229
+ return context;
230
+ };
231
+ // src/components/layer-tree/layer-tree.tsx
232
+ const PARENT_ROW_COUNT = 1;
233
+ function LayerTree({ onDNDStart: onDragStart, onDNDEnd: onDragEnd, className, children, ref, ...props }) {
234
+ const table = useTableContext$1(), [draggingNodeId, setDraggingNodeId] = React.useState(null), handleDragStart = ({ operation: { source } }) => {
235
+ setDraggingNodeId(source?.data.nodeId ?? null);
236
+ if (onDragStart) onDragStart({ nodeId: source?.data.nodeId ?? "" });
237
+ }, handleDragEnd = ({ operation: { source, target } }) => {
238
+ setDraggingNodeId(null);
239
+ if (onDragEnd) {
240
+ const targetNodeId = target?.data.folderId ?? target?.data.nodeId ?? null;
241
+ onDragEnd({
242
+ sourceNodeId: source?.data.nodeId ?? "",
243
+ targetNodeId
244
+ });
245
+ }
246
+ };
247
+ return /* @__PURE__ */ jsx(DragDropProvider, {
248
+ onDragStart: handleDragStart,
249
+ onDragEnd: handleDragEnd,
250
+ plugins: (defaults) => [...defaults, Feedback.configure({ dropAnimation: null })],
251
+ children: /* @__PURE__ */ jsx(LayerTreeContext.Provider, {
252
+ value: {
253
+ children,
254
+ className,
255
+ draggingNodeId,
256
+ ref,
257
+ ...props
258
+ },
259
+ children: /* @__PURE__ */ jsxs("div", {
260
+ className: cn("flex flex-col justify-between", className),
261
+ ref,
262
+ ...props,
263
+ children: [children, /* @__PURE__ */ jsx(DragOverlay, { children: (source) => /* @__PURE__ */ jsxs("div", {
264
+ className: cn("relative rounded-md border border-neutral-border bg-neutral-container px-xs py-3xs opacity-80 shadow-md transition-opacity"),
265
+ children: [table.getRow(String(source.id)).renderValue("name") ?? source.id, /* @__PURE__ */ jsx(Badge, {
266
+ className: "absolute -top-xs -right-xs",
267
+ tone: "neutral",
268
+ children: table.getRow(String(source.id))?.subRows.length + PARENT_ROW_COUNT
269
+ })]
270
+ }) })]
271
+ })
272
+ })
273
+ });
274
+ }
275
+ // src/components/layer-tree/layer-tree-row.tsx
276
+ const ROOT_DEPTH = 0;
277
+ const FIRST_CELL_INDEX = 0;
278
+ const ROW_INDENT_PER_LEVEL = 24;
279
+ const EMPTY_LEAF_COUNT = 0;
280
+ const VISIBLE_OPACITY = 1;
281
+ const HIDDEN_OPACITY = .5;
282
+ function LayerTreeRow({ rowId, className, children, ref, ...props }) {
283
+ const table = useTableContext$1();
284
+ return /* @__PURE__ */ jsx(table.Subscribe, {
285
+ selector: (state) => ({
286
+ expanded: state.expanded,
287
+ rowSelection: state.rowSelection,
288
+ rowVisibility: state.rowVisibility
289
+ }),
290
+ children: () => {
291
+ const row = table.getRowModel().rows.find((candidate) => candidate.id === rowId), indent = (row?.depth ?? ROOT_DEPTH) * ROW_INDENT_PER_LEVEL, leafRows = row?.getLeafRows() ?? [];
292
+ let isVisible = row?.getIsVisible() ?? true;
293
+ if (leafRows.length > EMPTY_LEAF_COUNT) isVisible = leafRows.some((leaf) => leaf.getIsVisible());
294
+ return /* @__PURE__ */ jsxs("div", {
295
+ className: cn("flex w-full items-center gap-3xs", className),
296
+ ref,
297
+ ...props,
298
+ children: [children, row?.getVisibleCells().map((cell, cellIndex) => {
299
+ const isFirstCell = cellIndex === FIRST_CELL_INDEX, isFill = cell.column.columnDef.meta?.fill ?? cell.column.id === "name";
300
+ let marginLeft = void 0, opacity = HIDDEN_OPACITY;
301
+ if (isFirstCell) marginLeft = indent;
302
+ if (isVisible) opacity = VISIBLE_OPACITY;
303
+ return /* @__PURE__ */ jsx(table.AppCell, {
304
+ cell,
305
+ children: (renderedCell) => /* @__PURE__ */ jsx("div", {
306
+ style: {
307
+ marginLeft,
308
+ opacity
309
+ },
310
+ className: cn("flex items-center", isFill && "min-w-0 grow gap-3xs", !isFill && "w-fit shrink-0"),
311
+ children: /* @__PURE__ */ jsx(table.FlexRender, { cell: renderedCell })
312
+ })
313
+ }, cell.id);
314
+ })]
315
+ });
316
+ }
317
+ });
318
+ }
319
+ // src/components/layer-tree/layer-tree-body.tsx
320
+ function LayerTreeBody({ className, children, ...props }) {
321
+ const table = useTableContext$1(), { isDropTarget, ref } = useDroppable({
322
+ data: {
323
+ folderId: "root",
324
+ nodeId: "root"
325
+ },
326
+ id: "root-dropzone"
327
+ });
328
+ return /* @__PURE__ */ jsx(table.Subscribe, {
329
+ selector: (state) => state,
330
+ children: () => /* @__PURE__ */ jsxs("div", {
331
+ className: cn("flex min-h-0 w-full grow flex-col", className),
332
+ ...props,
333
+ children: [
334
+ children,
335
+ /* @__PURE__ */ jsx("div", {
336
+ className: "flex min-h-0 w-full flex-col gap-xs overflow-y-auto",
337
+ children: table.getRowModel().rows.map((row) => /* @__PURE__ */ jsx(LayerTreeRow, { rowId: row.id }, row.id))
338
+ }),
339
+ /* @__PURE__ */ jsx("div", {
340
+ ref,
341
+ className: cn("grow", isDropTarget && "rounded-lg bg-success-container ring-1 ring-success-default ring-inset")
342
+ })
343
+ ]
344
+ })
345
+ });
346
+ }
347
+ // src/components/layer-tree/layer-tree-expand-all.tsx
348
+ function LayerTreeExpandAll({ className, ref, ...props }) {
349
+ const table = useTableContext$1(), handleClick = () => {
350
+ if (table.getIsSomeRowsExpanded()) table.toggleAllRowsExpanded(false);
351
+ else table.toggleAllRowsExpanded(true);
352
+ };
353
+ return /* @__PURE__ */ jsx(table.Subscribe, {
354
+ selector: (state) => state.expanded,
355
+ children: () => /* @__PURE__ */ jsxs(Button, {
356
+ "aria-label": "Expand or collapse all layers",
357
+ size: "medium",
358
+ tone: "neutral",
359
+ variant: "ghost",
360
+ onClick: handleClick,
361
+ className: cn("", className),
362
+ ref,
363
+ ...props,
364
+ children: [table.getIsSomeRowsExpanded() && /* @__PURE__ */ jsx(Icon, { name: "folderOpen" }), !table.getIsSomeRowsExpanded() && /* @__PURE__ */ jsx(Icon, { name: "folderExpandAll" })]
365
+ })
366
+ });
367
+ }
368
+ // src/components/layer-tree/layer-tree-footer.tsx
369
+ function LayerTreeFooter({ className, ref, ...props }) {
370
+ return /* @__PURE__ */ jsx("div", {
371
+ className: cn("flex flex-col gap-3xs", className),
372
+ ref,
373
+ ...props
374
+ });
375
+ }
376
+ // src/components/layer-tree/layer-tree-icon-cell.tsx
377
+ function LayerTreeIconCell({ className, children, ref, ...props }) {
378
+ const cell = useCellContext$1(), table = useTableContext$1(), icon = cell.getValue(), { row } = cell, hasChildren = row.getCanExpand() && Boolean(row.getLeafRows().length);
379
+ return /* @__PURE__ */ jsx(table.Subscribe, {
380
+ selector: (state) => state.expanded,
381
+ children: () => {
382
+ const isExpanded = row.getIsExpanded();
383
+ let iconNode = createElement(icon);
384
+ if (hasChildren && isExpanded) iconNode = /* @__PURE__ */ jsx(Icon, { name: "folderOpen" });
385
+ else if (hasChildren) iconNode = /* @__PURE__ */ jsx(Icon, { name: "folder" });
386
+ return /* @__PURE__ */ jsxs("div", {
387
+ className: cn("flex w-fit shrink-0 items-center [&>svg]:size-sm", className),
388
+ ref,
389
+ ...props,
390
+ children: [children, iconNode]
391
+ });
392
+ }
393
+ });
394
+ }
395
+ // src/components/layer-tree/layer-tree-locked-all.tsx
396
+ function LayerTreeLockedAll({ className, children, ref, ...props }) {
397
+ const table = useTableContext$1(), allRows = table.getCoreRowModel().flatRows, handleClick = (isLocked) => {
398
+ const next = !isLocked;
399
+ for (const leafRow of allRows) leafRow.toggleLocked(next);
400
+ };
401
+ return /* @__PURE__ */ jsx(table.Subscribe, {
402
+ selector: (state) => state.rowLocked,
403
+ children: () => {
404
+ const isLocked = allRows.some((leafRow) => leafRow.getIsLocked());
405
+ return /* @__PURE__ */ jsxs(Button, {
406
+ "aria-label": "Toggle all layers lock",
407
+ size: "small",
408
+ tone: "neutral",
409
+ variant: "ghost",
410
+ onClick: () => handleClick(isLocked),
411
+ className: cn("", className),
412
+ ref,
413
+ ...props,
414
+ children: [
415
+ children,
416
+ isLocked && /* @__PURE__ */ jsx(Icon, { name: "locked" }),
417
+ !isLocked && /* @__PURE__ */ jsx(Icon, { name: "unlocked" })
418
+ ]
419
+ });
420
+ }
421
+ });
422
+ }
423
+ // src/components/layer-tree/layer-tree-locked-cell.tsx
424
+ function LayerTreeLockedCell({ className, children, ref, ...props }) {
425
+ const cell = useCellContext$1(), table = useTableContext$1(), { row } = cell, rows = row.getLeafRows(), handleClick = (isLocked) => {
426
+ const next = !isLocked;
427
+ for (const leafRow of rows) leafRow.toggleLocked(next);
428
+ };
429
+ if (!rows.length) rows.push(row);
430
+ return /* @__PURE__ */ jsx(table.Subscribe, {
431
+ selector: (state) => state.rowLocked,
432
+ children: () => {
433
+ const isLocked = rows.every((leafRow) => leafRow.getIsLocked());
434
+ return /* @__PURE__ */ jsxs(Button, {
435
+ "aria-label": "Toggle layer lock",
436
+ size: "small",
437
+ tone: "neutral",
438
+ variant: "ghost",
439
+ onClick: () => handleClick(isLocked),
440
+ className: cn("", className),
441
+ ref,
442
+ ...props,
443
+ children: [
444
+ children,
445
+ isLocked && /* @__PURE__ */ jsx(Icon, { name: "locked" }),
446
+ !isLocked && /* @__PURE__ */ jsx(Icon, { name: "unlocked" })
447
+ ]
448
+ });
449
+ }
450
+ });
451
+ }
452
+ // src/components/layer-tree/layer-tree-node-icon.tsx
453
+ function LayerTreeNodeIcon({ icon: NodeIcon, className, children, ref, ...props }) {
454
+ const { row } = useCellContext$1(), hasChildren = row.getCanExpand() && Boolean(row.getLeafRows().length);
455
+ let nodeIcon = /* @__PURE__ */ jsx(NodeIcon, {});
456
+ if (hasChildren) {
457
+ nodeIcon = /* @__PURE__ */ jsx(Icon, { name: "folder" });
458
+ if (row.getIsExpanded()) nodeIcon = /* @__PURE__ */ jsx(Icon, { name: "folderOpen" });
459
+ }
460
+ return /* @__PURE__ */ jsxs("div", {
461
+ className: cn("", className),
462
+ ref,
463
+ ...props,
464
+ children: [children, nodeIcon]
465
+ });
466
+ }
467
+ // src/components/layer-tree/layer-tree-search.tsx
468
+ function LayerTreeSearch({ placeholder, className, children, ref, ...props }) {
469
+ const table = useTableContext$1();
470
+ return /* @__PURE__ */ jsx(table.Subscribe, {
471
+ selector: (state) => state.globalFilter,
472
+ children: (globalFilter) => /* @__PURE__ */ jsxs(InputGroup, {
473
+ className: cn("", className),
474
+ ref,
475
+ ...props,
476
+ children: [
477
+ /* @__PURE__ */ jsx(InputGroupAddon, { children: /* @__PURE__ */ jsx(Icon, { name: "search" }) }),
478
+ /* @__PURE__ */ jsx(InputGroupInput, {
479
+ placeholder,
480
+ onChange: (event) => table.setGlobalFilter(event.target.value),
481
+ value: globalFilter ?? ""
482
+ }),
483
+ children
484
+ ]
485
+ })
486
+ });
487
+ }
488
+ // src/components/layer-tree/layer-tree-sort.tsx
489
+ function getColumnHeaderLabel(header, fallback) {
490
+ if (typeof header === "string") return header;
491
+ return fallback;
492
+ }
493
+ function LayerTreeSort({ className, children, ref, ...props }) {
494
+ const table = useTableContext$1(), buttonLabels = table.options.meta?.translations?.buttonLabels ?? {}, ascendingLabel = buttonLabels.ascending ?? "Ascending", descendingLabel = buttonLabels.descending ?? "Descending", handleSort = (columnId, direction) => {
495
+ const column = table.getColumn(columnId);
496
+ if (column?.getIsSorted() === direction) {
497
+ column?.clearSorting();
498
+ return;
499
+ }
500
+ column?.toggleSorting(direction === "desc", column.getCanMultiSort());
501
+ };
502
+ return /* @__PURE__ */ jsxs(Menu, { children: [/* @__PURE__ */ jsx(MenuTrigger, {
503
+ className: cn("shrink-0", className),
504
+ ref,
505
+ ...props,
506
+ children: /* @__PURE__ */ jsx(Button, {
507
+ "aria-label": "Sort layers",
508
+ variant: "ghost",
509
+ size: "medium",
510
+ tone: "neutral",
511
+ children: /* @__PURE__ */ jsx(Icon, { name: "sort" })
512
+ })
513
+ }), /* @__PURE__ */ jsx(MenuPopup, {
514
+ align: "end",
515
+ children: /* @__PURE__ */ jsx(table.Subscribe, {
516
+ selector: (state) => state.sorting,
517
+ children: () => table.getAllColumns().filter((column) => column.getCanSort()).map((column) => /* @__PURE__ */ jsxs(MenuSubmenu, { children: [/* @__PURE__ */ jsx(MenuSubmenuTrigger, { children: getColumnHeaderLabel(column.columnDef.header, column.id) }), /* @__PURE__ */ jsxs(MenuPopup, { children: [
518
+ children,
519
+ /* @__PURE__ */ jsxs(MenuCheckboxItem, {
520
+ checked: column.getIsSorted() === "asc",
521
+ onClick: () => handleSort(column.id, "asc"),
522
+ children: [/* @__PURE__ */ jsx(Icon, { name: "sortDescending" }), ascendingLabel]
523
+ }),
524
+ /* @__PURE__ */ jsxs(MenuCheckboxItem, {
525
+ checked: column.getIsSorted() === "desc",
526
+ onClick: () => handleSort(column.id, "desc"),
527
+ children: [/* @__PURE__ */ jsx(Icon, { name: "sortAscending" }), descendingLabel]
528
+ })
529
+ ] })] }, column.id))
530
+ })
531
+ })] });
532
+ }
533
+ // src/components/layer-tree/layer-tree-text-cell.tsx
534
+ function LayerTreeTextCell({ size, className, children, ref, ...props }) {
535
+ const cell = useCellContext$1();
536
+ return /* @__PURE__ */ jsxs("span", {
537
+ className: cn(layerTreeTextCellVariants({
538
+ className,
539
+ size
540
+ })),
541
+ ref,
542
+ ...props,
543
+ children: [children, cell.getValue()]
544
+ });
545
+ }
546
+ // src/components/layer-tree/layer-tree-trigger-cell.tsx
547
+ function LayerTreeTriggerCell({ className, children, dndDisabled, onClick, ...props }) {
548
+ const cell = useCellContext$1(), { draggingNodeId } = useLayerTree(), { row } = cell, hasChildren = row.getCanExpand(), isSelected = row.getIsSelected(), { ref: draggableRef, isDragging } = useDraggable({
549
+ data: {
550
+ isFolder: hasChildren,
551
+ nodeId: row.id
552
+ },
553
+ disabled: dndDisabled,
554
+ id: row.id
555
+ }), { ref: droppableRef, isDropTarget } = useDroppable({
556
+ data: {
557
+ folderId: row.id,
558
+ isFolder: hasChildren,
559
+ nodeId: row.id
560
+ },
561
+ disabled: dndDisabled || !hasChildren,
562
+ id: `folder:${row.id}`
563
+ }), setNodeRef = (element) => {
564
+ draggableRef(element);
565
+ droppableRef(element);
566
+ }, selectRow = (event) => {
567
+ if (!row.getCanSelect()) return;
568
+ if (!event.shiftKey) cell.table.resetRowSelection();
569
+ row.getToggleSelectedHandler()({
570
+ shiftKey: event.shiftKey,
571
+ target: { checked: true }
572
+ });
573
+ }, handleClick = (event) => {
574
+ onClick?.(event);
575
+ if (event.defaultPrevented) return;
576
+ if (hasChildren) {
577
+ row.toggleExpanded();
578
+ return;
579
+ }
580
+ selectRow(event);
581
+ }, isAncestorDragging = (() => {
582
+ if (!draggingNodeId) return false;
583
+ let parent = row.getParentRow();
584
+ while (parent) {
585
+ if (parent.id === draggingNodeId) return true;
586
+ parent = parent.getParentRow();
587
+ }
588
+ return false;
589
+ })();
590
+ return /* @__PURE__ */ jsxs("button", {
591
+ type: "button",
592
+ onClick: handleClick,
593
+ className: cn("flex h-lg min-w-0 grow items-center justify-start gap-2xs truncate rounded-lg px-2xs style-text-default-0 transition-all hover:cursor-pointer [&>svg]:size-sm [&>svg]:shrink-0", hasChildren && isDropTarget && "bg-success-container text-success-on-container ring ring-success-border", isSelected && "bg-neutral-default text-neutral-on-default", !isSelected && "hover:bg-neutral-container hover:text-neutral-on-container", (isDragging || isAncestorDragging) && "opacity-60", className),
594
+ ref: setNodeRef,
595
+ ...props,
596
+ children: [children, cell.getValue()]
597
+ });
598
+ }
599
+ // src/components/layer-tree/layer-tree-visibility-all.tsx
600
+ function LayerTreeVisibilityAll({ className, children, ref, ...props }) {
601
+ const table = useTableContext$1(), allRows = table.getCoreRowModel().flatRows, handleClick = (isVisible) => {
602
+ const next = !isVisible;
603
+ for (const leafRow of allRows) leafRow.toggleVisibility(next);
604
+ };
605
+ return /* @__PURE__ */ jsx(table.Subscribe, {
606
+ selector: (state) => state.rowVisibility,
607
+ children: () => {
608
+ const isVisible = allRows.some((leafRow) => leafRow.getIsVisible());
609
+ return /* @__PURE__ */ jsxs(Button, {
610
+ "aria-label": "Toggle all layers visibility",
611
+ size: "small",
612
+ tone: "neutral",
613
+ variant: "ghost",
614
+ onClick: () => handleClick(isVisible),
615
+ className: cn("", className),
616
+ ref,
617
+ ...props,
618
+ children: [
619
+ children,
620
+ isVisible && /* @__PURE__ */ jsx(Icon, { name: "visible" }),
621
+ !isVisible && /* @__PURE__ */ jsx(Icon, { name: "hidden" })
622
+ ]
623
+ });
624
+ }
625
+ });
626
+ }
627
+ // src/components/layer-tree/layer-tree-visibility-cell.tsx
628
+ function LayerTreeVisibilityCell({ className, children, ref, ...props }) {
629
+ const cell = useCellContext$1(), table = useTableContext$1(), { row } = cell, rows = row.getLeafRows(), handleClick = (isVisible) => {
630
+ const next = !isVisible;
631
+ for (const leafRow of rows) leafRow.toggleVisibility(next);
632
+ };
633
+ if (!rows.length) rows.push(row);
634
+ return /* @__PURE__ */ jsx(table.Subscribe, {
635
+ selector: (state) => state.rowVisibility,
636
+ children: () => {
637
+ const isVisible = rows.some((leafRow) => leafRow.getIsVisible());
638
+ return /* @__PURE__ */ jsxs(Button, {
639
+ "aria-label": "Toggle layer visibility",
640
+ size: "small",
641
+ tone: "neutral",
642
+ variant: "ghost",
643
+ onClick: () => handleClick(isVisible),
644
+ className: cn("", className),
645
+ ref,
646
+ ...props,
647
+ children: [
648
+ children,
649
+ isVisible && /* @__PURE__ */ jsx(Icon, { name: "visible" }),
650
+ !isVisible && /* @__PURE__ */ jsx(Icon, { name: "hidden" })
651
+ ]
652
+ });
653
+ }
654
+ });
655
+ }
656
+ // src/components/layer-tree/layer-tree-table.tsx
657
+ const { createAppColumnHelper, useAppTable, useTableContext, useCellContext, useHeaderContext } = createTableHook({
658
+ cellComponents: {
659
+ LayerTreeIconCell,
660
+ LayerTreeLockedCell,
661
+ LayerTreeNodeIcon,
662
+ LayerTreeTextCell,
663
+ LayerTreeTriggerCell,
664
+ LayerTreeVisibilityCell
665
+ },
666
+ cellContext,
667
+ features,
668
+ headerComponents: {},
669
+ headerContext,
670
+ tableComponents: {
671
+ LayerTree,
672
+ LayerTreeBody,
673
+ LayerTreeExpandAll,
674
+ LayerTreeFooter,
675
+ LayerTreeLockedAll,
676
+ LayerTreeRow,
677
+ LayerTreeSearch,
678
+ LayerTreeSort,
679
+ LayerTreeVisibilityAll
680
+ },
681
+ tableContext
682
+ });
683
+ export { LayerTree, LayerTreeBody, LayerTreeExpandAll, LayerTreeFooter, LayerTreeIconCell, LayerTreeLockedAll, LayerTreeLockedCell, LayerTreeNodeIcon, LayerTreeRow, LayerTreeSearch, LayerTreeSort, LayerTreeTextCell, LayerTreeTriggerCell, LayerTreeVisibilityAll, LayerTreeVisibilityCell, createAppColumnHelper as createLayerTreeColumnHelper, findLayerTreeNode, insertLayerTreeNode, features as layerTreeFeatures, moveLayerTreeNode, moveLayerTreeNodeToRoot, removeLayerTreeNode, rowLockedFeature, rowVisibilityFeature, useLayerTree, useCellContext as useLayerTreeCellContext, useTableContext as useLayerTreeContext, useHeaderContext as useLayerTreeHeaderContext, useAppTable as useLayerTreeTable };
684
+
685
+ //# sourceMappingURL=index.js.map