@vuu-ui/vuu-layout 2.1.17 → 2.1.19-beta.1

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 (265) hide show
  1. package/package.json +14 -16
  2. package/types/dock-layout/DockLayout.d.ts +4 -4
  3. package/types/dock-layout/Drawer.d.ts +4 -4
  4. package/types/drag-drop/BoxModel.d.ts +7 -7
  5. package/types/flexbox/FlexboxLayout.d.ts +4 -4
  6. package/types/flexbox/Splitter.d.ts +1 -1
  7. package/types/layout-reducer/layoutUtils.d.ts +1 -1
  8. package/types/layout-reducer/remove-layout-element.d.ts +1 -1
  9. package/types/layout-reducer/replace-layout-element.d.ts +2 -2
  10. package/types/layout-reducer/resize-flex-children.d.ts +2 -2
  11. package/types/layout-view/useView.d.ts +1 -1
  12. package/types/placeholder/Placeholder.d.ts +4 -4
  13. package/types/responsive/overflowUtils.d.ts +2 -2
  14. package/types/stack/StackLayout.d.ts +4 -4
  15. package/types/tools/devtools-box/layout-configurator.d.ts +26 -26
  16. package/types/tools/devtools-tree/layout-tree-viewer.d.ts +2 -2
  17. package/types/utils/pathUtils.d.ts +1 -1
  18. package/cjs/Component.js +0 -14
  19. package/cjs/Component.js.map +0 -1
  20. package/cjs/LayoutContainer.css.js +0 -6
  21. package/cjs/LayoutContainer.css.js.map +0 -1
  22. package/cjs/LayoutContainer.js +0 -33
  23. package/cjs/LayoutContainer.js.map +0 -1
  24. package/cjs/dock-layout/DockLayout.css.js +0 -6
  25. package/cjs/dock-layout/DockLayout.css.js.map +0 -1
  26. package/cjs/dock-layout/DockLayout.js +0 -41
  27. package/cjs/dock-layout/DockLayout.js.map +0 -1
  28. package/cjs/dock-layout/Drawer.css.js +0 -6
  29. package/cjs/dock-layout/Drawer.css.js.map +0 -1
  30. package/cjs/dock-layout/Drawer.js +0 -95
  31. package/cjs/dock-layout/Drawer.js.map +0 -1
  32. package/cjs/drag-drop/BoxModel.js +0 -416
  33. package/cjs/drag-drop/BoxModel.js.map +0 -1
  34. package/cjs/drag-drop/DragState.js +0 -161
  35. package/cjs/drag-drop/DragState.js.map +0 -1
  36. package/cjs/drag-drop/Draggable.js +0 -192
  37. package/cjs/drag-drop/Draggable.js.map +0 -1
  38. package/cjs/drag-drop/DropTarget.js +0 -257
  39. package/cjs/drag-drop/DropTarget.js.map +0 -1
  40. package/cjs/drag-drop/DropTargetRenderer.js +0 -218
  41. package/cjs/drag-drop/DropTargetRenderer.js.map +0 -1
  42. package/cjs/flexbox/Flexbox.css.js +0 -6
  43. package/cjs/flexbox/Flexbox.css.js.map +0 -1
  44. package/cjs/flexbox/Flexbox.js +0 -69
  45. package/cjs/flexbox/Flexbox.js.map +0 -1
  46. package/cjs/flexbox/FlexboxLayout.js +0 -30
  47. package/cjs/flexbox/FlexboxLayout.js.map +0 -1
  48. package/cjs/flexbox/Splitter.css.js +0 -6
  49. package/cjs/flexbox/Splitter.css.js.map +0 -1
  50. package/cjs/flexbox/Splitter.js +0 -122
  51. package/cjs/flexbox/Splitter.js.map +0 -1
  52. package/cjs/flexbox/flexbox-utils.js +0 -95
  53. package/cjs/flexbox/flexbox-utils.js.map +0 -1
  54. package/cjs/flexbox/useSplitterResizing.js +0 -197
  55. package/cjs/flexbox/useSplitterResizing.js.map +0 -1
  56. package/cjs/index.js +0 -122
  57. package/cjs/index.js.map +0 -1
  58. package/cjs/layout-action.js +0 -24
  59. package/cjs/layout-action.js.map +0 -1
  60. package/cjs/layout-header/Header.css.js +0 -6
  61. package/cjs/layout-header/Header.css.js.map +0 -1
  62. package/cjs/layout-header/Header.js +0 -152
  63. package/cjs/layout-header/Header.js.map +0 -1
  64. package/cjs/layout-header/useHeader.js +0 -85
  65. package/cjs/layout-header/useHeader.js.map +0 -1
  66. package/cjs/layout-provider/LayoutProvider.js +0 -304
  67. package/cjs/layout-provider/LayoutProvider.js.map +0 -1
  68. package/cjs/layout-provider/LayoutProviderContext.js +0 -23
  69. package/cjs/layout-provider/LayoutProviderContext.js.map +0 -1
  70. package/cjs/layout-provider/useLayoutDragDrop.js +0 -177
  71. package/cjs/layout-provider/useLayoutDragDrop.js.map +0 -1
  72. package/cjs/layout-reducer/flexUtils.js +0 -227
  73. package/cjs/layout-reducer/flexUtils.js.map +0 -1
  74. package/cjs/layout-reducer/insert-layout-element.js +0 -286
  75. package/cjs/layout-reducer/insert-layout-element.js.map +0 -1
  76. package/cjs/layout-reducer/layout-reducer.js +0 -202
  77. package/cjs/layout-reducer/layout-reducer.js.map +0 -1
  78. package/cjs/layout-reducer/layoutTypes.js +0 -40
  79. package/cjs/layout-reducer/layoutTypes.js.map +0 -1
  80. package/cjs/layout-reducer/layoutUtils.js +0 -237
  81. package/cjs/layout-reducer/layoutUtils.js.map +0 -1
  82. package/cjs/layout-reducer/move-layout-element.js +0 -31
  83. package/cjs/layout-reducer/move-layout-element.js.map +0 -1
  84. package/cjs/layout-reducer/remove-layout-element.js +0 -237
  85. package/cjs/layout-reducer/remove-layout-element.js.map +0 -1
  86. package/cjs/layout-reducer/replace-layout-element.js +0 -96
  87. package/cjs/layout-reducer/replace-layout-element.js.map +0 -1
  88. package/cjs/layout-reducer/resize-flex-children.js +0 -62
  89. package/cjs/layout-reducer/resize-flex-children.js.map +0 -1
  90. package/cjs/layout-reducer/wrap-layout-element.js +0 -211
  91. package/cjs/layout-reducer/wrap-layout-element.js.map +0 -1
  92. package/cjs/layout-view/View.css.js +0 -6
  93. package/cjs/layout-view/View.css.js.map +0 -1
  94. package/cjs/layout-view/View.js +0 -160
  95. package/cjs/layout-view/View.js.map +0 -1
  96. package/cjs/layout-view/useView.js +0 -75
  97. package/cjs/layout-view/useView.js.map +0 -1
  98. package/cjs/layout-view/useViewBroadcastChannel.js +0 -35
  99. package/cjs/layout-view/useViewBroadcastChannel.js.map +0 -1
  100. package/cjs/layout-view/useViewResize.js +0 -42
  101. package/cjs/layout-view/useViewResize.js.map +0 -1
  102. package/cjs/layout-view-actions/ViewContext.js +0 -16
  103. package/cjs/layout-view-actions/ViewContext.js.map +0 -1
  104. package/cjs/layout-view-actions/useViewActionDispatcher.js +0 -112
  105. package/cjs/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  106. package/cjs/layout-view-actions/useViewContributions.js +0 -33
  107. package/cjs/layout-view-actions/useViewContributions.js.map +0 -1
  108. package/cjs/palette/Palette.css.js +0 -6
  109. package/cjs/palette/Palette.css.js.map +0 -1
  110. package/cjs/palette/Palette.js +0 -115
  111. package/cjs/palette/Palette.js.map +0 -1
  112. package/cjs/placeholder/LayoutStartPanel.css.js +0 -6
  113. package/cjs/placeholder/LayoutStartPanel.css.js.map +0 -1
  114. package/cjs/placeholder/LayoutStartPanel.js +0 -56
  115. package/cjs/placeholder/LayoutStartPanel.js.map +0 -1
  116. package/cjs/placeholder/Placeholder.css.js +0 -6
  117. package/cjs/placeholder/Placeholder.css.js.map +0 -1
  118. package/cjs/placeholder/Placeholder.js +0 -34
  119. package/cjs/placeholder/Placeholder.js.map +0 -1
  120. package/cjs/responsive/useResizeObserver.js +0 -118
  121. package/cjs/responsive/useResizeObserver.js.map +0 -1
  122. package/cjs/responsive/utils.js +0 -34
  123. package/cjs/responsive/utils.js.map +0 -1
  124. package/cjs/stack/Stack.css.js +0 -6
  125. package/cjs/stack/Stack.css.js.map +0 -1
  126. package/cjs/stack/Stack.js +0 -150
  127. package/cjs/stack/Stack.js.map +0 -1
  128. package/cjs/stack/StackLayout.js +0 -116
  129. package/cjs/stack/StackLayout.js.map +0 -1
  130. package/cjs/use-persistent-state.js +0 -63
  131. package/cjs/use-persistent-state.js.map +0 -1
  132. package/cjs/utils/pathUtils.js +0 -293
  133. package/cjs/utils/pathUtils.js.map +0 -1
  134. package/cjs/utils/propUtils.js +0 -27
  135. package/cjs/utils/propUtils.js.map +0 -1
  136. package/cjs/utils/refUtils.js +0 -12
  137. package/cjs/utils/refUtils.js.map +0 -1
  138. package/cjs/utils/styleUtils.js +0 -15
  139. package/cjs/utils/styleUtils.js.map +0 -1
  140. package/cjs/utils/typeOf.js +0 -27
  141. package/cjs/utils/typeOf.js.map +0 -1
  142. package/esm/Component.js +0 -12
  143. package/esm/Component.js.map +0 -1
  144. package/esm/LayoutContainer.css.js +0 -4
  145. package/esm/LayoutContainer.css.js.map +0 -1
  146. package/esm/LayoutContainer.js +0 -31
  147. package/esm/LayoutContainer.js.map +0 -1
  148. package/esm/dock-layout/DockLayout.css.js +0 -4
  149. package/esm/dock-layout/DockLayout.css.js.map +0 -1
  150. package/esm/dock-layout/DockLayout.js +0 -39
  151. package/esm/dock-layout/DockLayout.js.map +0 -1
  152. package/esm/dock-layout/Drawer.css.js +0 -4
  153. package/esm/dock-layout/Drawer.css.js.map +0 -1
  154. package/esm/dock-layout/Drawer.js +0 -93
  155. package/esm/dock-layout/Drawer.js.map +0 -1
  156. package/esm/drag-drop/BoxModel.js +0 -409
  157. package/esm/drag-drop/BoxModel.js.map +0 -1
  158. package/esm/drag-drop/DragState.js +0 -159
  159. package/esm/drag-drop/DragState.js.map +0 -1
  160. package/esm/drag-drop/Draggable.js +0 -190
  161. package/esm/drag-drop/Draggable.js.map +0 -1
  162. package/esm/drag-drop/DropTarget.js +0 -253
  163. package/esm/drag-drop/DropTarget.js.map +0 -1
  164. package/esm/drag-drop/DropTargetRenderer.js +0 -216
  165. package/esm/drag-drop/DropTargetRenderer.js.map +0 -1
  166. package/esm/flexbox/Flexbox.css.js +0 -4
  167. package/esm/flexbox/Flexbox.css.js.map +0 -1
  168. package/esm/flexbox/Flexbox.js +0 -67
  169. package/esm/flexbox/Flexbox.js.map +0 -1
  170. package/esm/flexbox/FlexboxLayout.js +0 -28
  171. package/esm/flexbox/FlexboxLayout.js.map +0 -1
  172. package/esm/flexbox/Splitter.css.js +0 -4
  173. package/esm/flexbox/Splitter.css.js.map +0 -1
  174. package/esm/flexbox/Splitter.js +0 -120
  175. package/esm/flexbox/Splitter.js.map +0 -1
  176. package/esm/flexbox/flexbox-utils.js +0 -89
  177. package/esm/flexbox/flexbox-utils.js.map +0 -1
  178. package/esm/flexbox/useSplitterResizing.js +0 -195
  179. package/esm/flexbox/useSplitterResizing.js.map +0 -1
  180. package/esm/index.js +0 -33
  181. package/esm/index.js.map +0 -1
  182. package/esm/layout-action.js +0 -22
  183. package/esm/layout-action.js.map +0 -1
  184. package/esm/layout-header/Header.css.js +0 -4
  185. package/esm/layout-header/Header.css.js.map +0 -1
  186. package/esm/layout-header/Header.js +0 -150
  187. package/esm/layout-header/Header.js.map +0 -1
  188. package/esm/layout-header/useHeader.js +0 -83
  189. package/esm/layout-header/useHeader.js.map +0 -1
  190. package/esm/layout-provider/LayoutProvider.js +0 -297
  191. package/esm/layout-provider/LayoutProvider.js.map +0 -1
  192. package/esm/layout-provider/LayoutProviderContext.js +0 -20
  193. package/esm/layout-provider/LayoutProviderContext.js.map +0 -1
  194. package/esm/layout-provider/useLayoutDragDrop.js +0 -175
  195. package/esm/layout-provider/useLayoutDragDrop.js.map +0 -1
  196. package/esm/layout-reducer/flexUtils.js +0 -218
  197. package/esm/layout-reducer/flexUtils.js.map +0 -1
  198. package/esm/layout-reducer/insert-layout-element.js +0 -282
  199. package/esm/layout-reducer/insert-layout-element.js.map +0 -1
  200. package/esm/layout-reducer/layout-reducer.js +0 -200
  201. package/esm/layout-reducer/layout-reducer.js.map +0 -1
  202. package/esm/layout-reducer/layoutTypes.js +0 -36
  203. package/esm/layout-reducer/layoutTypes.js.map +0 -1
  204. package/esm/layout-reducer/layoutUtils.js +0 -226
  205. package/esm/layout-reducer/layoutUtils.js.map +0 -1
  206. package/esm/layout-reducer/move-layout-element.js +0 -29
  207. package/esm/layout-reducer/move-layout-element.js.map +0 -1
  208. package/esm/layout-reducer/remove-layout-element.js +0 -235
  209. package/esm/layout-reducer/remove-layout-element.js.map +0 -1
  210. package/esm/layout-reducer/replace-layout-element.js +0 -92
  211. package/esm/layout-reducer/replace-layout-element.js.map +0 -1
  212. package/esm/layout-reducer/resize-flex-children.js +0 -59
  213. package/esm/layout-reducer/resize-flex-children.js.map +0 -1
  214. package/esm/layout-reducer/wrap-layout-element.js +0 -209
  215. package/esm/layout-reducer/wrap-layout-element.js.map +0 -1
  216. package/esm/layout-view/View.css.js +0 -4
  217. package/esm/layout-view/View.css.js.map +0 -1
  218. package/esm/layout-view/View.js +0 -158
  219. package/esm/layout-view/View.js.map +0 -1
  220. package/esm/layout-view/useView.js +0 -73
  221. package/esm/layout-view/useView.js.map +0 -1
  222. package/esm/layout-view/useViewBroadcastChannel.js +0 -33
  223. package/esm/layout-view/useViewBroadcastChannel.js.map +0 -1
  224. package/esm/layout-view/useViewResize.js +0 -40
  225. package/esm/layout-view/useViewResize.js.map +0 -1
  226. package/esm/layout-view-actions/ViewContext.js +0 -12
  227. package/esm/layout-view-actions/ViewContext.js.map +0 -1
  228. package/esm/layout-view-actions/useViewActionDispatcher.js +0 -110
  229. package/esm/layout-view-actions/useViewActionDispatcher.js.map +0 -1
  230. package/esm/layout-view-actions/useViewContributions.js +0 -31
  231. package/esm/layout-view-actions/useViewContributions.js.map +0 -1
  232. package/esm/palette/Palette.css.js +0 -4
  233. package/esm/palette/Palette.css.js.map +0 -1
  234. package/esm/palette/Palette.js +0 -112
  235. package/esm/palette/Palette.js.map +0 -1
  236. package/esm/placeholder/LayoutStartPanel.css.js +0 -4
  237. package/esm/placeholder/LayoutStartPanel.css.js.map +0 -1
  238. package/esm/placeholder/LayoutStartPanel.js +0 -54
  239. package/esm/placeholder/LayoutStartPanel.js.map +0 -1
  240. package/esm/placeholder/Placeholder.css.js +0 -4
  241. package/esm/placeholder/Placeholder.css.js.map +0 -1
  242. package/esm/placeholder/Placeholder.js +0 -32
  243. package/esm/placeholder/Placeholder.js.map +0 -1
  244. package/esm/responsive/useResizeObserver.js +0 -112
  245. package/esm/responsive/useResizeObserver.js.map +0 -1
  246. package/esm/responsive/utils.js +0 -31
  247. package/esm/responsive/utils.js.map +0 -1
  248. package/esm/stack/Stack.css.js +0 -4
  249. package/esm/stack/Stack.css.js.map +0 -1
  250. package/esm/stack/Stack.js +0 -148
  251. package/esm/stack/Stack.js.map +0 -1
  252. package/esm/stack/StackLayout.js +0 -114
  253. package/esm/stack/StackLayout.js.map +0 -1
  254. package/esm/use-persistent-state.js +0 -58
  255. package/esm/use-persistent-state.js.map +0 -1
  256. package/esm/utils/pathUtils.js +0 -280
  257. package/esm/utils/pathUtils.js.map +0 -1
  258. package/esm/utils/propUtils.js +0 -23
  259. package/esm/utils/propUtils.js.map +0 -1
  260. package/esm/utils/refUtils.js +0 -10
  261. package/esm/utils/refUtils.js.map +0 -1
  262. package/esm/utils/styleUtils.js +0 -13
  263. package/esm/utils/styleUtils.js.map +0 -1
  264. package/esm/utils/typeOf.js +0 -23
  265. package/esm/utils/typeOf.js.map +0 -1
@@ -1,31 +0,0 @@
1
- const COLLAPSIBLE = "data-collapsible";
2
- const RESPONSIVE_ATTRIBUTE = {
3
- [COLLAPSIBLE]: true,
4
- "data-pad-start": true,
5
- "data-pad-end": true
6
- };
7
- const isResponsiveAttribute = (propName) => RESPONSIVE_ATTRIBUTE[propName] ?? false;
8
- const isCollapsible = (propName) => propName === COLLAPSIBLE;
9
- const COLLAPSIBLE_VALUE = {
10
- dynamic: "dynamic",
11
- instant: "instant",
12
- true: "instant"
13
- };
14
- const collapsibleValue = (value) => COLLAPSIBLE_VALUE[value] ?? "none";
15
- const extractResponsiveProps = (props) => {
16
- return Object.keys(props).reduce(
17
- (result, propName) => {
18
- const [toolbarProps, rest] = result;
19
- if (isResponsiveAttribute(propName)) {
20
- const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];
21
- toolbarProps[propName] = value;
22
- rest[propName] = void 0;
23
- }
24
- return result;
25
- },
26
- [{}, {}]
27
- );
28
- };
29
-
30
- export { extractResponsiveProps, isResponsiveAttribute };
31
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../packages/vuu-layout/src/responsive/utils.ts"],"sourcesContent":["const COLLAPSIBLE = 'data-collapsible';\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n 'data-pad-start': true,\n 'data-pad-end': true\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: 'dynamic',\n instant: 'instant',\n true: 'instant'\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? 'none';\n\ntype Props = { [key: string]: any };\nexport const extractResponsiveProps = (props: Props) => {\n return Object.keys(props).reduce<[Props, Props]>(\n (result, propName) => {\n const [toolbarProps, rest] = result;\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return result;\n },\n [{}, {}]\n );\n};\n"],"names":[],"mappings":"AAAA,MAAM,WAAc,GAAA,kBAAA;AAEpB,MAAM,oBAAmD,GAAA;AAAA,EACvD,CAAC,WAAW,GAAG,IAAA;AAAA,EACf,gBAAkB,EAAA,IAAA;AAAA,EAClB,cAAgB,EAAA;AAClB,CAAA;AAEO,MAAM,qBAAwB,GAAA,CAAC,QACpC,KAAA,oBAAA,CAAqB,QAAQ,CAAK,IAAA;AAEpC,MAAM,aAAA,GAAgB,CAAC,QAAA,KAAqB,QAAa,KAAA,WAAA;AAEzD,MAAM,iBAA+C,GAAA;AAAA,EACnD,OAAS,EAAA,SAAA;AAAA,EACT,OAAS,EAAA,SAAA;AAAA,EACT,IAAM,EAAA;AACR,CAAA;AAEA,MAAM,gBAAmB,GAAA,CAAC,KAAkB,KAAA,iBAAA,CAAkB,KAAK,CAAK,IAAA,MAAA;AAG3D,MAAA,sBAAA,GAAyB,CAAC,KAAiB,KAAA;AACtD,EAAO,OAAA,MAAA,CAAO,IAAK,CAAA,KAAK,CAAE,CAAA,MAAA;AAAA,IACxB,CAAC,QAAQ,QAAa,KAAA;AACpB,MAAM,MAAA,CAAC,YAAc,EAAA,IAAI,CAAI,GAAA,MAAA;AAC7B,MAAI,IAAA,qBAAA,CAAsB,QAAQ,CAAG,EAAA;AACnC,QAAM,MAAA,KAAA,GAAQ,aAAc,CAAA,QAAQ,CAAI,GAAA,gBAAA,CAAiB,MAAM,QAAQ,CAAC,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAA;AAE1F,QAAA,YAAA,CAAa,QAAQ,CAAI,GAAA,KAAA;AACzB,QAAA,IAAA,CAAK,QAAQ,CAAI,GAAA,KAAA,CAAA;AAAA;AAEnB,MAAO,OAAA,MAAA;AAAA,KACT;AAAA,IACA,CAAC,EAAI,EAAA,EAAE;AAAA,GACT;AACF;;;;"}
@@ -1,4 +0,0 @@
1
- var stackCss = ".vuuTabs {\n display: flex;\n box-sizing: border-box;\n flex-direction: column;\n}\n\n.vuuTabs-horizontal {\n --vuu-tabs-border-style: none solid none none;\n flex-direction: row;\n}\n\n.vuuTabs .Toolbar:before {\n left: 0;\n width: 100%;\n bottom: 0;\n height: 1px;\n content: '';\n position: absolute;\n background: var(--grey60);\n}\n\n.vuuTabs-tabPanel {\n display: flex;\n flex: 1; \n flex-direction: column;\n}\n\n.vuuTabs-tabPanel > * {\n flex: 1 1 auto;\n}\n\n.vuuTabHeader + .vuuView > .vuuHeader {\n height: 0;\n overflow: hidden;\n}\n\n.Layout-svg-button {\n --spacing-medium: 5px;\n}\n";
2
-
3
- export { stackCss as default };
4
- //# sourceMappingURL=Stack.css.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Stack.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -1,148 +0,0 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { Tabstrip, Tab } from '@vuu-ui/vuu-ui-controls';
3
- import { useId } from '@vuu-ui/vuu-utils';
4
- import cx from 'clsx';
5
- import { useComponentCssInjection } from '@salt-ds/styles';
6
- import { useWindow } from '@salt-ds/window';
7
- import React, { forwardRef, useRef, useCallback } from 'react';
8
- import { getDefaultTabLabel } from '../layout-reducer/layoutUtils.js';
9
- import stackCss from './Stack.css.js';
10
-
11
- const classBase = "vuuTabs";
12
- const getDefaultTabIcon = () => void 0;
13
- const getChildElements = (children) => {
14
- const elements = [];
15
- React.Children.forEach(children, (child) => {
16
- if (React.isValidElement(child)) {
17
- elements.push(child);
18
- } else {
19
- console.warn(`Stack has unexpected child element type`);
20
- }
21
- });
22
- return elements;
23
- };
24
- const DefaultTabstripProps = {
25
- allowAddTab: false,
26
- allowCloseTab: false,
27
- allowRenameTab: false
28
- };
29
- const Stack = forwardRef(function Stack2({
30
- TabstripProps: TabstripProps2 = DefaultTabstripProps,
31
- active = 0,
32
- children,
33
- className: classNameProp,
34
- getTabIcon = getDefaultTabIcon,
35
- getTabLabel = getDefaultTabLabel,
36
- id: idProp,
37
- keyBoardActivation = "manual",
38
- // onMouseDown,
39
- onAddTab,
40
- onMoveTab,
41
- onTabClose,
42
- onTabEdit,
43
- onTabSelectionChanged,
44
- showTabs = "top",
45
- style
46
- }, ref) {
47
- const targetWindow = useWindow();
48
- useComponentCssInjection({
49
- testId: "vuu-stack",
50
- css: stackCss,
51
- window: targetWindow
52
- });
53
- const id = useId(idProp);
54
- const tabLabelsRef = useRef([]);
55
- const {
56
- allowCloseTab,
57
- allowRenameTab,
58
- className: tabstripClassName
59
- } = TabstripProps2;
60
- const handleExitEditMode = useCallback(
61
- (_oldText, newText, _allowDeactivation, tabIndex) => {
62
- onTabEdit?.(tabIndex, newText);
63
- },
64
- [onTabEdit]
65
- );
66
- const activeChild = () => {
67
- if (React.isValidElement(children)) {
68
- return children;
69
- }
70
- if (Array.isArray(children)) {
71
- return children[active] ?? null;
72
- }
73
- return null;
74
- };
75
- tabLabelsRef.current.length = 0;
76
- const renderTabs = () => getChildElements(children).map((child2, idx) => {
77
- const {
78
- closeable = allowCloseTab,
79
- id: childId = `${id}-${idx}`,
80
- "data-tab-location": tabLocation
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
- } = child2.props;
83
- const label = getTabLabel(child2, idx, tabLabelsRef.current);
84
- tabLabelsRef.current.push(label);
85
- return /* @__PURE__ */ jsx(
86
- Tab,
87
- {
88
- ariaControls: childId,
89
- "data-icon": getTabIcon(child2, idx),
90
- id: `${childId}-tab`,
91
- index: idx,
92
- label,
93
- location: tabLocation,
94
- closeable,
95
- editable: allowRenameTab
96
- },
97
- childId
98
- );
99
- });
100
- const child = activeChild();
101
- const isHorizontal = showTabs === "left" || showTabs === "right";
102
- const tabstripOrientation = isHorizontal ? "vertical" : "horizontal";
103
- return /* @__PURE__ */ jsxs(
104
- "div",
105
- {
106
- className: cx(classBase, classNameProp, {
107
- [`${classBase}-horizontal`]: isHorizontal
108
- }),
109
- style,
110
- id,
111
- ref,
112
- children: [
113
- showTabs ? /* @__PURE__ */ jsx(
114
- Tabstrip,
115
- {
116
- "aria-label": "data tabs",
117
- ...TabstripProps2,
118
- activeTabIndex: TabstripProps2?.activeTabIndex ?? (child === null ? -1 : active),
119
- allowDragDrop: TabstripProps2.allowDragDrop !== false,
120
- animateSelectionThumb: true,
121
- className: cx("vuuTabHeader", tabstripClassName),
122
- keyBoardActivation,
123
- onActiveChange: onTabSelectionChanged,
124
- onAddTab,
125
- onCloseTab: onTabClose,
126
- onExitEditMode: handleExitEditMode,
127
- onMoveTab,
128
- orientation: tabstripOrientation,
129
- children: renderTabs()
130
- }
131
- ) : null,
132
- /* @__PURE__ */ jsx(
133
- "div",
134
- {
135
- "aria-labelledby": `${id}-${active}`,
136
- className: `${classBase}-tabPanel`,
137
- role: "tabpanel",
138
- children: child
139
- }
140
- )
141
- ]
142
- }
143
- );
144
- });
145
- Stack.displayName = "Stack";
146
-
147
- export { Stack };
148
- //# sourceMappingURL=Stack.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Stack.js","sources":["../../../../packages/vuu-layout/src/stack/Stack.tsx"],"sourcesContent":["import { Tab, Tabstrip, TabstripProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useRef,\n} from \"react\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { StackProps } from \"./stackTypes\";\n\nimport stackCss from \"./Stack.css\";\n\nconst classBase = \"vuuTabs\";\n\nconst getDefaultTabIcon = () => undefined;\n\nconst getChildElements = <T extends ReactElement = ReactElement>(\n children: ReactNode,\n): T[] => {\n const elements: T[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n elements.push(child as T);\n } else {\n console.warn(`Stack has unexpected child element type`);\n }\n });\n return elements;\n};\n\nconst DefaultTabstripProps: Partial<TabstripProps> = {\n allowAddTab: false,\n allowCloseTab: false,\n allowRenameTab: false,\n};\n\nexport const Stack = forwardRef(function Stack(\n {\n TabstripProps = DefaultTabstripProps,\n active = 0,\n children,\n className: classNameProp,\n getTabIcon = getDefaultTabIcon,\n getTabLabel = getDefaultTabLabel,\n id: idProp,\n keyBoardActivation = \"manual\",\n // onMouseDown,\n onAddTab,\n onMoveTab,\n onTabClose,\n onTabEdit,\n onTabSelectionChanged,\n showTabs = \"top\",\n style,\n }: StackProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-stack\",\n css: stackCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n const tabLabelsRef = useRef<string[]>([]);\n const {\n allowCloseTab,\n allowRenameTab,\n className: tabstripClassName,\n } = TabstripProps;\n\n const handleExitEditMode = useCallback(\n (\n _oldText: string,\n newText: string,\n _allowDeactivation: boolean,\n tabIndex: number,\n ) => {\n onTabEdit?.(tabIndex, newText);\n },\n [onTabEdit],\n );\n\n const activeChild = () => {\n //TODO need to inject an id if child does not have one, so we can\n // establish the aria-controls relationship. In a Vuu layout, there\n // will always be an id.\n if (React.isValidElement(children)) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[active] ?? null;\n }\n return null;\n };\n\n // The list of existing Tab Labels is required only when assigning a default label\n // to a new Tab. We rebuild on each render\n tabLabelsRef.current.length = 0;\n\n const renderTabs = () =>\n getChildElements(children).map((child, idx) => {\n const {\n closeable = allowCloseTab,\n id: childId = `${id}-${idx}`,\n \"data-tab-location\": tabLocation,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = child.props as any;\n const label = getTabLabel(child, idx, tabLabelsRef.current);\n tabLabelsRef.current.push(label);\n return (\n <Tab\n ariaControls={childId}\n data-icon={getTabIcon(child, idx)}\n key={childId}\n id={`${childId}-tab`}\n index={idx}\n label={label}\n location={tabLocation}\n closeable={closeable}\n editable={allowRenameTab}\n />\n );\n });\n\n const child = activeChild();\n const isHorizontal = showTabs === \"left\" || showTabs === \"right\";\n const tabstripOrientation = isHorizontal ? \"vertical\" : \"horizontal\";\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-horizontal`]: isHorizontal,\n })}\n style={style}\n id={id}\n ref={ref}\n >\n {showTabs ? (\n <Tabstrip\n aria-label=\"data tabs\"\n {...TabstripProps}\n activeTabIndex={\n TabstripProps?.activeTabIndex ?? (child === null ? -1 : active)\n }\n allowDragDrop={TabstripProps.allowDragDrop !== false}\n animateSelectionThumb\n className={cx(\"vuuTabHeader\", tabstripClassName)}\n keyBoardActivation={keyBoardActivation}\n onActiveChange={onTabSelectionChanged}\n onAddTab={onAddTab}\n onCloseTab={onTabClose}\n onExitEditMode={handleExitEditMode}\n onMoveTab={onMoveTab}\n orientation={tabstripOrientation}\n >\n {renderTabs()}\n </Tabstrip>\n ) : null}\n <div\n aria-labelledby={`${id}-${active}`}\n className={`${classBase}-tabPanel`}\n role=\"tabpanel\"\n >\n {child}\n </div>\n </div>\n );\n});\nStack.displayName = \"Stack\";\n"],"names":["Stack","TabstripProps","child"],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { registerComponent, useId } from '@vuu-ui/vuu-utils';
3
- import React, { useRef, useCallback } from 'react';
4
- import { useLayoutProviderDispatch, useLayoutCreateNewChild } from '../layout-provider/LayoutProvider.js';
5
- import '../layout-provider/LayoutProviderContext.js';
6
- import { getDefaultTabLabel } from '../layout-reducer/layoutUtils.js';
7
- import { useViewActionDispatcher } from '../layout-view-actions/useViewActionDispatcher.js';
8
- import { useViewBroadcastChannel } from '../layout-view/useViewBroadcastChannel.js';
9
- import { usePersistentState } from '../use-persistent-state.js';
10
- import { Stack } from './Stack.js';
11
-
12
- const StackLayout = (props) => {
13
- const rootRef = useRef(null);
14
- const dispatch = useLayoutProviderDispatch();
15
- const { loadState } = usePersistentState();
16
- const {
17
- createNewChild: createNewChildProp,
18
- id: idProp,
19
- onTabSelectionChanged,
20
- path,
21
- ...restProps
22
- } = props;
23
- const { children } = props;
24
- const id = useId(idProp);
25
- const sendMessage = useViewBroadcastChannel();
26
- const [dispatchViewAction] = useViewActionDispatcher(id, rootRef, path);
27
- const createNewChildFromContext = useLayoutCreateNewChild();
28
- const createNewChild = createNewChildProp ?? createNewChildFromContext;
29
- const handleTabSelection = (nextIdx) => {
30
- if (path) {
31
- dispatch({ type: "switch-tab", id, path, nextIdx });
32
- onTabSelectionChanged?.(nextIdx);
33
- }
34
- };
35
- const handleTabClose = useCallback(
36
- (tabIndex) => {
37
- if (Array.isArray(children)) {
38
- const {
39
- props: { "data-path": dataPath, path: path2 = dataPath }
40
- } = children[tabIndex];
41
- sendMessage({ type: "layout-closed", path: path2 });
42
- setTimeout(() => {
43
- dispatch({ type: "remove", path: path2 });
44
- }, 100);
45
- }
46
- },
47
- [children, dispatch, sendMessage]
48
- );
49
- const handleTabAdd = useCallback(() => {
50
- if (path) {
51
- const tabIndex = React.Children.count(children);
52
- dispatch({
53
- type: "add",
54
- path,
55
- component: createNewChild(tabIndex)
56
- });
57
- }
58
- }, [children, createNewChild, dispatch, path]);
59
- const handleMoveTab = useCallback(
60
- (fromIndex, toIndex) => {
61
- if (path) {
62
- dispatch({
63
- fromIndex,
64
- toIndex,
65
- path,
66
- type: "move-child"
67
- });
68
- }
69
- },
70
- [dispatch, path]
71
- );
72
- const handleMouseDown = async (e, index) => {
73
- let readyToDrag;
74
- const preDragActivity = async () => new Promise((resolve) => {
75
- console.log("preDragActivity: Ok, gonna release the drag");
76
- readyToDrag = resolve;
77
- });
78
- const dragging = await dispatchViewAction(
79
- { type: "mousedown", index, preDragActivity },
80
- e
81
- );
82
- if (dragging) {
83
- readyToDrag?.(void 0);
84
- }
85
- };
86
- const handleTabEdit = (tabIndex, text) => {
87
- dispatch({ type: "set-title", path: `${path}.${tabIndex}`, title: text });
88
- };
89
- const getTabLabel = (component, idx, existingLabels) => {
90
- const { id: id2, title } = component.props;
91
- return loadState(id2, "view-title") || title || // This will normally never be called as title is always assigned in layout model
92
- getDefaultTabLabel(component, idx, existingLabels);
93
- };
94
- return /* @__PURE__ */ jsx(
95
- Stack,
96
- {
97
- ...restProps,
98
- id,
99
- getTabLabel,
100
- onMouseDown: handleMouseDown,
101
- onMoveTab: handleMoveTab,
102
- onAddTab: handleTabAdd,
103
- onTabClose: handleTabClose,
104
- onTabEdit: handleTabEdit,
105
- onTabSelectionChanged: handleTabSelection,
106
- ref: rootRef
107
- }
108
- );
109
- };
110
- StackLayout.displayName = "Stack";
111
- registerComponent("Stack", StackLayout, "container");
112
-
113
- export { StackLayout };
114
- //# sourceMappingURL=StackLayout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"StackLayout.js","sources":["../../../../packages/vuu-layout/src/stack/StackLayout.tsx"],"sourcesContent":["import { registerComponent, useId } from \"@vuu-ui/vuu-utils\";\nimport React, { MouseEvent, useCallback, useRef } from \"react\";\nimport {\n useLayoutCreateNewChild,\n useLayoutProviderDispatch,\n} from \"../layout-provider\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { useViewActionDispatcher } from \"../layout-view-actions/useViewActionDispatcher\";\nimport { useViewBroadcastChannel } from \"../layout-view/useViewBroadcastChannel\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { Stack } from \"./Stack\";\nimport { StackProps, TabLabelFactory } from \"./stackTypes\";\n\nexport const StackLayout = (props: StackProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const dispatch = useLayoutProviderDispatch();\n const { loadState } = usePersistentState();\n\n const {\n createNewChild: createNewChildProp,\n id: idProp,\n onTabSelectionChanged,\n path,\n ...restProps\n } = props;\n\n const { children } = props;\n\n const id = useId(idProp);\n\n const sendMessage = useViewBroadcastChannel();\n\n const [dispatchViewAction] = useViewActionDispatcher(id, rootRef, path);\n const createNewChildFromContext = useLayoutCreateNewChild();\n const createNewChild = createNewChildProp ?? createNewChildFromContext;\n\n const handleTabSelection = (nextIdx: number) => {\n if (path) {\n dispatch({ type: \"switch-tab\", id, path, nextIdx });\n onTabSelectionChanged?.(nextIdx);\n }\n };\n\n const handleTabClose = useCallback(\n (tabIndex: number) => {\n if (Array.isArray(children)) {\n const {\n props: { \"data-path\": dataPath, path = dataPath },\n } = children[tabIndex];\n sendMessage({ type: \"layout-closed\", path });\n setTimeout(() => {\n dispatch({ type: \"remove\", path });\n }, 100);\n }\n },\n [children, dispatch, sendMessage],\n );\n\n const handleTabAdd = useCallback(() => {\n if (path) {\n const tabIndex = React.Children.count(children);\n dispatch({\n type: \"add\",\n path,\n component: createNewChild(tabIndex),\n });\n }\n }, [children, createNewChild, dispatch, path]);\n\n const handleMoveTab = useCallback(\n (fromIndex: number, toIndex: number) => {\n if (path) {\n dispatch({\n fromIndex,\n toIndex,\n path,\n type: \"move-child\",\n });\n }\n },\n [dispatch, path],\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleMouseDown = async (e: MouseEvent, index: number) => {\n let readyToDrag: undefined | ((value: unknown) => void);\n\n const preDragActivity = async () =>\n new Promise((resolve) => {\n console.log(\"preDragActivity: Ok, gonna release the drag\");\n readyToDrag = resolve;\n });\n\n const dragging = await dispatchViewAction(\n { type: \"mousedown\", index, preDragActivity },\n e,\n );\n\n if (dragging) {\n readyToDrag?.(undefined);\n }\n };\n\n const handleTabEdit = (tabIndex: number, text: string) => {\n dispatch({ type: \"set-title\", path: `${path}.${tabIndex}`, title: text });\n };\n\n const getTabLabel: TabLabelFactory = (component, idx, existingLabels) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { id, title } = component.props as any;\n return (\n loadState(id, \"view-title\") ||\n title ||\n // This will normally never be called as title is always assigned in layout model\n getDefaultTabLabel(component, idx, existingLabels)\n );\n };\n\n return (\n <Stack\n {...restProps}\n id={id}\n getTabLabel={getTabLabel}\n onMouseDown={handleMouseDown}\n onMoveTab={handleMoveTab}\n onAddTab={handleTabAdd}\n onTabClose={handleTabClose}\n onTabEdit={handleTabEdit}\n onTabSelectionChanged={handleTabSelection}\n ref={rootRef}\n />\n );\n};\nStackLayout.displayName = \"Stack\";\n\nregisterComponent(\"Stack\", StackLayout, \"container\");\n"],"names":["path","id"],"mappings":"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"}
@@ -1,58 +0,0 @@
1
- import { useCallback } from 'react';
2
-
3
- const persistentState = /* @__PURE__ */ new Map();
4
- const getPersistentState = (id) => persistentState.get(id);
5
- const hasPersistentState = (id) => persistentState.has(id);
6
- const setPersistentState = (id, value) => persistentState.set(id, value);
7
- const usePersistentState = () => {
8
- const loadState = useCallback((id, key) => {
9
- const state = persistentState.get(id);
10
- if (state) {
11
- if (key !== void 0) {
12
- return state[key];
13
- }
14
- return state;
15
- }
16
- }, []);
17
- const saveState = useCallback(
18
- (id, key, data) => {
19
- if (key === void 0) {
20
- persistentState.set(id, data);
21
- } else if (persistentState.has(id)) {
22
- const state = persistentState.get(id);
23
- persistentState.set(id, {
24
- ...state,
25
- [key]: data
26
- });
27
- } else {
28
- persistentState.set(id, { [key]: data });
29
- }
30
- },
31
- []
32
- );
33
- const purgeState = useCallback((id, key) => {
34
- if (persistentState.has(id)) {
35
- if (key === void 0) {
36
- persistentState.delete(id);
37
- } else {
38
- const state = persistentState.get(id);
39
- if (state[key]) {
40
- const { [key]: _doomedState, ...rest } = persistentState.get(id);
41
- if (Object.keys(rest).length > 0) {
42
- persistentState.set(id, rest);
43
- } else {
44
- persistentState.delete(id);
45
- }
46
- }
47
- }
48
- }
49
- }, []);
50
- return {
51
- loadState,
52
- saveState,
53
- purgeState
54
- };
55
- };
56
-
57
- export { getPersistentState, hasPersistentState, setPersistentState, usePersistentState };
58
- //# sourceMappingURL=use-persistent-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-persistent-state.js","sources":["../../../packages/vuu-layout/src/use-persistent-state.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\n\n/**\n * Persistent state is stored at module level (i.e singleton-style)\n * It is kept at this level, rather than passed to the target component(s)\n * so that it endures across the unmount/mount lifecycle journey of any\n * individual component. e.g when switching between tabs, components are\n * unmounted and mounted. They re-request their persistent state on re-mount.\n * Persistent state is populated as the serialized layout schema is processed\n * (see layoutFromJSON).\n */\nconst persistentState = new Map<string, any>();\n\nexport const getPersistentState = (id: string) => persistentState.get(id);\nexport const hasPersistentState = (id: string) => persistentState.has(id);\nexport const setPersistentState = (id: string, value: any) =>\n persistentState.set(id, value);\n\nexport const usePersistentState = () => {\n const loadState = useCallback((id: string, key?: string) => {\n const state = persistentState.get(id);\n if (state) {\n if (key !== undefined) {\n return state[key];\n }\n return state;\n }\n }, []);\n\n const saveState = useCallback(\n (id: string, key: string | undefined, data: unknown) => {\n if (key === undefined) {\n persistentState.set(id, data);\n } else if (persistentState.has(id)) {\n const state = persistentState.get(id);\n persistentState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n persistentState.set(id, { [key]: data });\n }\n },\n [],\n );\n\n const purgeState = useCallback((id: string, key?: string) => {\n if (persistentState.has(id)) {\n if (key === undefined) {\n persistentState.delete(id);\n } else {\n const state = persistentState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = persistentState.get(id);\n if (Object.keys(rest).length > 0) {\n persistentState.set(id, rest);\n } else {\n persistentState.delete(id);\n }\n }\n }\n }\n }, []);\n\n return {\n loadState,\n saveState,\n purgeState,\n };\n};\n"],"names":[],"mappings":";;AAYA,MAAM,eAAA,uBAAsB,GAAiB,EAAA;AAEtC,MAAM,kBAAqB,GAAA,CAAC,EAAe,KAAA,eAAA,CAAgB,IAAI,EAAE;AACjE,MAAM,kBAAqB,GAAA,CAAC,EAAe,KAAA,eAAA,CAAgB,IAAI,EAAE;AACjE,MAAM,qBAAqB,CAAC,EAAA,EAAY,UAC7C,eAAgB,CAAA,GAAA,CAAI,IAAI,KAAK;AAExB,MAAM,qBAAqB,MAAM;AACtC,EAAA,MAAM,SAAY,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,GAAiB,KAAA;AAC1D,IAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,GAAA,CAAI,EAAE,CAAA;AACpC,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAA,OAAO,MAAM,GAAG,CAAA;AAAA;AAElB,MAAO,OAAA,KAAA;AAAA;AACT,GACF,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,EAAY,EAAA,GAAA,EAAyB,IAAkB,KAAA;AACtD,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAgB,eAAA,CAAA,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,OACnB,MAAA,IAAA,eAAA,CAAgB,GAAI,CAAA,EAAE,CAAG,EAAA;AAClC,QAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,GAAA,CAAI,EAAE,CAAA;AACpC,QAAA,eAAA,CAAgB,IAAI,EAAI,EAAA;AAAA,UACtB,GAAG,KAAA;AAAA,UACH,CAAC,GAAG,GAAG;AAAA,SACR,CAAA;AAAA,OACI,MAAA;AACL,QAAA,eAAA,CAAgB,IAAI,EAAI,EAAA,EAAE,CAAC,GAAG,GAAG,MAAM,CAAA;AAAA;AACzC,KACF;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAa,GAAA,WAAA,CAAY,CAAC,EAAA,EAAY,GAAiB,KAAA;AAC3D,IAAI,IAAA,eAAA,CAAgB,GAAI,CAAA,EAAE,CAAG,EAAA;AAC3B,MAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,QAAA,eAAA,CAAgB,OAAO,EAAE,CAAA;AAAA,OACpB,MAAA;AACL,QAAM,MAAA,KAAA,GAAQ,eAAgB,CAAA,GAAA,CAAI,EAAE,CAAA;AACpC,QAAI,IAAA,KAAA,CAAM,GAAG,CAAG,EAAA;AACd,UAAM,MAAA,EAAE,CAAC,GAAG,GAAG,YAAA,EAAc,GAAG,IAAK,EAAA,GAAI,eAAgB,CAAA,GAAA,CAAI,EAAE,CAAA;AAC/D,UAAA,IAAI,MAAO,CAAA,IAAA,CAAK,IAAI,CAAA,CAAE,SAAS,CAAG,EAAA;AAChC,YAAgB,eAAA,CAAA,GAAA,CAAI,IAAI,IAAI,CAAA;AAAA,WACvB,MAAA;AACL,YAAA,eAAA,CAAgB,OAAO,EAAE,CAAA;AAAA;AAC3B;AACF;AACF;AACF,GACF,EAAG,EAAE,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,SAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}