@aglyn/shared-ui-jsx 1.0.0-beta.143

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 (261) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +7 -0
  3. package/package.json +63 -0
  4. package/src/index.d.ts +48 -0
  5. package/src/index.js +179 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/components/aglyn-text.d.ts +86 -0
  8. package/src/lib/components/aglyn-text.js +44 -0
  9. package/src/lib/components/aglyn-text.js.map +1 -0
  10. package/src/lib/components/app-link.d.ts +74 -0
  11. package/src/lib/components/app-link.js +139 -0
  12. package/src/lib/components/app-link.js.map +1 -0
  13. package/src/lib/components/aspect-ratio.d.ts +59 -0
  14. package/src/lib/components/aspect-ratio.js +153 -0
  15. package/src/lib/components/aspect-ratio.js.map +1 -0
  16. package/src/lib/components/background-image.component.d.ts +30 -0
  17. package/src/lib/components/background-image.component.js +42 -0
  18. package/src/lib/components/background-image.component.js.map +1 -0
  19. package/src/lib/components/card-columns.d.ts +86 -0
  20. package/src/lib/components/card-columns.js +148 -0
  21. package/src/lib/components/card-columns.js.map +1 -0
  22. package/src/lib/components/card-display.d.ts +36 -0
  23. package/src/lib/components/card-display.js +158 -0
  24. package/src/lib/components/card-display.js.map +1 -0
  25. package/src/lib/components/card-list-item.d.ts +35 -0
  26. package/src/lib/components/card-list-item.js +137 -0
  27. package/src/lib/components/card-list-item.js.map +1 -0
  28. package/src/lib/components/children-function-prop.d.ts +25 -0
  29. package/src/lib/components/children-function-prop.js +29 -0
  30. package/src/lib/components/children-function-prop.js.map +1 -0
  31. package/src/lib/components/confirmation-provider.component.d.ts +19 -0
  32. package/src/lib/components/confirmation-provider.component.js +83 -0
  33. package/src/lib/components/confirmation-provider.component.js.map +1 -0
  34. package/src/lib/components/container.d.ts +25 -0
  35. package/src/lib/components/container.js +62 -0
  36. package/src/lib/components/container.js.map +1 -0
  37. package/src/lib/components/data-table.component.d.ts +54 -0
  38. package/src/lib/components/data-table.component.js +211 -0
  39. package/src/lib/components/data-table.component.js.map +1 -0
  40. package/src/lib/components/dialog-confirm.d.ts +36 -0
  41. package/src/lib/components/dialog-confirm.js +74 -0
  42. package/src/lib/components/dialog-confirm.js.map +1 -0
  43. package/src/lib/components/ellipsis-pulse.component.d.ts +22 -0
  44. package/src/lib/components/ellipsis-pulse.component.js +51 -0
  45. package/src/lib/components/ellipsis-pulse.component.js.map +1 -0
  46. package/src/lib/components/emotion-cache-provider.d.ts +31 -0
  47. package/src/lib/components/emotion-cache-provider.js +40 -0
  48. package/src/lib/components/emotion-cache-provider.js.map +1 -0
  49. package/src/lib/components/empty-state.component.d.ts +63 -0
  50. package/src/lib/components/empty-state.component.js +214 -0
  51. package/src/lib/components/empty-state.component.js.map +1 -0
  52. package/src/lib/components/error-boundary.component.d.ts +28 -0
  53. package/src/lib/components/error-boundary.component.js +86 -0
  54. package/src/lib/components/error-boundary.component.js.map +1 -0
  55. package/src/lib/components/grid-buttons.d.ts +26 -0
  56. package/src/lib/components/grid-buttons.js +45 -0
  57. package/src/lib/components/grid-buttons.js.map +1 -0
  58. package/src/lib/components/grid-items.d.ts +103 -0
  59. package/src/lib/components/grid-items.js +336 -0
  60. package/src/lib/components/grid-items.js.map +1 -0
  61. package/src/lib/components/grid-list.d.ts +37 -0
  62. package/src/lib/components/grid-list.js +156 -0
  63. package/src/lib/components/grid-list.js.map +1 -0
  64. package/src/lib/components/help-tip.component.d.ts +30 -0
  65. package/src/lib/components/help-tip.component.js +139 -0
  66. package/src/lib/components/help-tip.component.js.map +1 -0
  67. package/src/lib/components/link-navigation-reporter.d.ts +24 -0
  68. package/src/lib/components/link-navigation-reporter.js +64 -0
  69. package/src/lib/components/link-navigation-reporter.js.map +1 -0
  70. package/src/lib/components/list-pagination.component.d.ts +57 -0
  71. package/src/lib/components/list-pagination.component.js +90 -0
  72. package/src/lib/components/list-pagination.component.js.map +1 -0
  73. package/src/lib/components/list-table.component.d.ts +155 -0
  74. package/src/lib/components/list-table.component.js +369 -0
  75. package/src/lib/components/list-table.component.js.map +1 -0
  76. package/src/lib/components/loading-layout-app.component.d.ts +35 -0
  77. package/src/lib/components/loading-layout-app.component.js +42 -0
  78. package/src/lib/components/loading-layout-app.component.js.map +1 -0
  79. package/src/lib/components/loading-modal-overlay.d.ts +30 -0
  80. package/src/lib/components/loading-modal-overlay.js +156 -0
  81. package/src/lib/components/loading-modal-overlay.js.map +1 -0
  82. package/src/lib/components/loading-modal.d.ts +19 -0
  83. package/src/lib/components/loading-modal.js +113 -0
  84. package/src/lib/components/loading-modal.js.map +1 -0
  85. package/src/lib/components/loading-text.component.d.ts +21 -0
  86. package/src/lib/components/loading-text.component.js +40 -0
  87. package/src/lib/components/loading-text.component.js.map +1 -0
  88. package/src/lib/components/mdi-icon/index.d.ts +2 -0
  89. package/src/lib/components/mdi-icon/index.js +4 -0
  90. package/src/lib/components/mdi-icon/index.js.map +1 -0
  91. package/src/lib/components/mdi-icon/md-icon-stack.d.ts +31 -0
  92. package/src/lib/components/mdi-icon/md-icon-stack.js +101 -0
  93. package/src/lib/components/mdi-icon/md-icon-stack.js.map +1 -0
  94. package/src/lib/components/mdi-icon/md-icon.d.ts +32 -0
  95. package/src/lib/components/mdi-icon/md-icon.js +147 -0
  96. package/src/lib/components/mdi-icon/md-icon.js.map +1 -0
  97. package/src/lib/components/mdi-icon/mdi-icon-from-id.d.ts +23 -0
  98. package/src/lib/components/mdi-icon/mdi-icon-from-id.js +35 -0
  99. package/src/lib/components/mdi-icon/mdi-icon-from-id.js.map +1 -0
  100. package/src/lib/components/mdi-icon/mdi-icon.d.ts +24 -0
  101. package/src/lib/components/mdi-icon/mdi-icon.js +46 -0
  102. package/src/lib/components/mdi-icon/mdi-icon.js.map +1 -0
  103. package/src/lib/components/measured-figures.component.d.ts +64 -0
  104. package/src/lib/components/measured-figures.component.js +161 -0
  105. package/src/lib/components/measured-figures.component.js.map +1 -0
  106. package/src/lib/components/menu.d.ts +45 -0
  107. package/src/lib/components/menu.js +229 -0
  108. package/src/lib/components/menu.js.map +1 -0
  109. package/src/lib/components/mui-shadow-dom.d.ts +38 -0
  110. package/src/lib/components/mui-shadow-dom.js +161 -0
  111. package/src/lib/components/mui-shadow-dom.js.map +1 -0
  112. package/src/lib/components/navigation-drawer.component.d.ts +31 -0
  113. package/src/lib/components/navigation-drawer.component.js +76 -0
  114. package/src/lib/components/navigation-drawer.component.js.map +1 -0
  115. package/src/lib/components/navigation-intent.d.ts +18 -0
  116. package/src/lib/components/navigation-intent.js +56 -0
  117. package/src/lib/components/navigation-intent.js.map +1 -0
  118. package/src/lib/components/navigation-view/index.d.ts +18 -0
  119. package/src/lib/components/navigation-view/index.js +19 -0
  120. package/src/lib/components/navigation-view/index.js.map +1 -0
  121. package/src/lib/components/navigation-view/navigation-view.d.ts +35 -0
  122. package/src/lib/components/navigation-view/navigation-view.js +175 -0
  123. package/src/lib/components/navigation-view/navigation-view.js.map +1 -0
  124. package/src/lib/components/next-link.d.ts +27 -0
  125. package/src/lib/components/next-link.js +88 -0
  126. package/src/lib/components/next-link.js.map +1 -0
  127. package/src/lib/components/popper-styled.component.d.ts +25 -0
  128. package/src/lib/components/popper-styled.component.js +129 -0
  129. package/src/lib/components/popper-styled.component.js.map +1 -0
  130. package/src/lib/components/quota-readout.component.d.ts +69 -0
  131. package/src/lib/components/quota-readout.component.js +52 -0
  132. package/src/lib/components/quota-readout.component.js.map +1 -0
  133. package/src/lib/components/resizeable-stack.d.ts +4 -0
  134. package/src/lib/components/resizeable-stack.js +23 -0
  135. package/src/lib/components/resizeable-stack.js.map +1 -0
  136. package/src/lib/components/row-actions-menu.component.d.ts +53 -0
  137. package/src/lib/components/row-actions-menu.component.js +132 -0
  138. package/src/lib/components/row-actions-menu.component.js.map +1 -0
  139. package/src/lib/components/ruler-guides.component.d.ts +35 -0
  140. package/src/lib/components/ruler-guides.component.js +166 -0
  141. package/src/lib/components/ruler-guides.component.js.map +1 -0
  142. package/src/lib/components/sandbox-frame.d.ts +42 -0
  143. package/src/lib/components/sandbox-frame.js +122 -0
  144. package/src/lib/components/sandbox-frame.js.map +1 -0
  145. package/src/lib/components/scroll-reaction.d.ts +59 -0
  146. package/src/lib/components/scroll-reaction.js +43 -0
  147. package/src/lib/components/scroll-reaction.js.map +1 -0
  148. package/src/lib/components/scroll-table.component.d.ts +124 -0
  149. package/src/lib/components/scroll-table.component.js +103 -0
  150. package/src/lib/components/scroll-table.component.js.map +1 -0
  151. package/src/lib/components/shadow-dom/index.d.ts +18 -0
  152. package/src/lib/components/shadow-dom/index.js +19 -0
  153. package/src/lib/components/shadow-dom/index.js.map +1 -0
  154. package/src/lib/components/shadow-dom/shadow-dom.d.ts +42 -0
  155. package/src/lib/components/shadow-dom/shadow-dom.js +123 -0
  156. package/src/lib/components/shadow-dom/shadow-dom.js.map +1 -0
  157. package/src/lib/components/splash-screen.d.ts +33 -0
  158. package/src/lib/components/splash-screen.js +105 -0
  159. package/src/lib/components/splash-screen.js.map +1 -0
  160. package/src/lib/components/sr-only.d.ts +20 -0
  161. package/src/lib/components/sr-only.js +25 -0
  162. package/src/lib/components/sr-only.js.map +1 -0
  163. package/src/lib/components/status-screen-plain.component.d.ts +27 -0
  164. package/src/lib/components/status-screen-plain.component.js +178 -0
  165. package/src/lib/components/status-screen-plain.component.js.map +1 -0
  166. package/src/lib/components/usage-meter.component.d.ts +30 -0
  167. package/src/lib/components/usage-meter.component.js +92 -0
  168. package/src/lib/components/usage-meter.component.js.map +1 -0
  169. package/src/lib/components/variable-text-field.component.d.ts +50 -0
  170. package/src/lib/components/variable-text-field.component.js +188 -0
  171. package/src/lib/components/variable-text-field.component.js.map +1 -0
  172. package/src/lib/components/zoomable-panning-component/index.d.ts +1 -0
  173. package/src/lib/components/zoomable-panning-component/index.js +3 -0
  174. package/src/lib/components/zoomable-panning-component/index.js.map +1 -0
  175. package/src/lib/components/zoomable-panning-component/util.d.ts +58 -0
  176. package/src/lib/components/zoomable-panning-component/util.js +114 -0
  177. package/src/lib/components/zoomable-panning-component/util.js.map +1 -0
  178. package/src/lib/components/zoomable-panning-component/zoomable-panning-component.d.ts +132 -0
  179. package/src/lib/components/zoomable-panning-component/zoomable-panning-component.js +728 -0
  180. package/src/lib/components/zoomable-panning-component/zoomable-panning-component.js.map +1 -0
  181. package/src/lib/const/aglyn-besigner-logo-full.d.ts +39 -0
  182. package/src/lib/const/aglyn-besigner-logo-full.js +146 -0
  183. package/src/lib/const/aglyn-besigner-logo-full.js.map +1 -0
  184. package/src/lib/const/aglyn-console-logo-full.d.ts +34 -0
  185. package/src/lib/const/aglyn-console-logo-full.js +142 -0
  186. package/src/lib/const/aglyn-console-logo-full.js.map +1 -0
  187. package/src/lib/const/aglyn-logo-class-keys.d.ts +30 -0
  188. package/src/lib/const/aglyn-logo-class-keys.js +32 -0
  189. package/src/lib/const/aglyn-logo-class-keys.js.map +1 -0
  190. package/src/lib/const/aglyn-logo-full.d.ts +29 -0
  191. package/src/lib/const/aglyn-logo-full.js +111 -0
  192. package/src/lib/const/aglyn-logo-full.js.map +1 -0
  193. package/src/lib/const/list-filter.d.ts +260 -0
  194. package/src/lib/const/list-filter.js +409 -0
  195. package/src/lib/const/list-filter.js.map +1 -0
  196. package/src/lib/const/prebuilt-components.d.ts +17 -0
  197. package/src/lib/const/prebuilt-components.js +22 -0
  198. package/src/lib/const/prebuilt-components.js.map +1 -0
  199. package/src/lib/const/svg-icons.d.ts +75 -0
  200. package/src/lib/const/svg-icons.js +313 -0
  201. package/src/lib/const/svg-icons.js.map +1 -0
  202. package/src/lib/const/table-pagination.d.ts +106 -0
  203. package/src/lib/const/table-pagination.js +106 -0
  204. package/src/lib/const/table-pagination.js.map +1 -0
  205. package/src/lib/contexts/confirmation.context.d.ts +996 -0
  206. package/src/lib/contexts/confirmation.context.js +49 -0
  207. package/src/lib/contexts/confirmation.context.js.map +1 -0
  208. package/src/lib/contexts/loading.context.d.ts +93 -0
  209. package/src/lib/contexts/loading.context.js +126 -0
  210. package/src/lib/contexts/loading.context.js.map +1 -0
  211. package/src/lib/hocs/create-hoc-with-context-consumer.d.ts +36 -0
  212. package/src/lib/hocs/create-hoc-with-context-consumer.js +44 -0
  213. package/src/lib/hocs/create-hoc-with-context-consumer.js.map +1 -0
  214. package/src/lib/hocs/with-hoc.d.ts +32 -0
  215. package/src/lib/hocs/with-hoc.js +37 -0
  216. package/src/lib/hocs/with-hoc.js.map +1 -0
  217. package/src/lib/hooks/mdi-icon/use-mdi-icon.d.ts +20 -0
  218. package/src/lib/hooks/mdi-icon/use-mdi-icon.js +48 -0
  219. package/src/lib/hooks/mdi-icon/use-mdi-icon.js.map +1 -0
  220. package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.d.ts +26 -0
  221. package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.js +73 -0
  222. package/src/lib/hooks/mdi-icon/use-mdi-icons-fuzzy.js.map +1 -0
  223. package/src/lib/hooks/mdi-icon/use-mdi-icons.d.ts +19 -0
  224. package/src/lib/hooks/mdi-icon/use-mdi-icons.js +49 -0
  225. package/src/lib/hooks/mdi-icon/use-mdi-icons.js.map +1 -0
  226. package/src/lib/hooks/router-events.d.ts +56 -0
  227. package/src/lib/hooks/router-events.js +88 -0
  228. package/src/lib/hooks/router-events.js.map +1 -0
  229. package/src/lib/hooks/use-async-effect.d.ts +24 -0
  230. package/src/lib/hooks/use-async-effect.js +44 -0
  231. package/src/lib/hooks/use-async-effect.js.map +1 -0
  232. package/src/lib/hooks/use-callback-param-ref.d.ts +19 -0
  233. package/src/lib/hooks/use-callback-param-ref.js +29 -0
  234. package/src/lib/hooks/use-callback-param-ref.js.map +1 -0
  235. package/src/lib/hooks/use-id.d.ts +21 -0
  236. package/src/lib/hooks/use-id.js +28 -0
  237. package/src/lib/hooks/use-id.js.map +1 -0
  238. package/src/lib/hooks/use-isomorphic-layout-effect.d.ts +19 -0
  239. package/src/lib/hooks/use-isomorphic-layout-effect.js +20 -0
  240. package/src/lib/hooks/use-isomorphic-layout-effect.js.map +1 -0
  241. package/src/lib/hooks/use-merge-refs.d.ts +38 -0
  242. package/src/lib/hooks/use-merge-refs.js +52 -0
  243. package/src/lib/hooks/use-merge-refs.js.map +1 -0
  244. package/src/lib/hooks/use-subscribable.d.ts +29 -0
  245. package/src/lib/hooks/use-subscribable.js +50 -0
  246. package/src/lib/hooks/use-subscribable.js.map +1 -0
  247. package/src/lib/types.d.ts +18 -0
  248. package/src/lib/types.js +18 -0
  249. package/src/lib/types.js.map +1 -0
  250. package/src/lib/utils/make-link-elements.d.ts +24 -0
  251. package/src/lib/utils/make-link-elements.js +32 -0
  252. package/src/lib/utils/make-link-elements.js.map +1 -0
  253. package/src/lib/utils/make-meta-elements.d.ts +24 -0
  254. package/src/lib/utils/make-meta-elements.js +32 -0
  255. package/src/lib/utils/make-meta-elements.js.map +1 -0
  256. package/src/lib/utils/scroll-overflow.d.ts +120 -0
  257. package/src/lib/utils/scroll-overflow.js +115 -0
  258. package/src/lib/utils/scroll-overflow.js.map +1 -0
  259. package/src/lib/utils/vendor.d.ts +17 -0
  260. package/src/lib/utils/vendor.js +18 -0
  261. package/src/lib/utils/vendor.js.map +1 -0
@@ -0,0 +1,43 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2023 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ import { _isFnT } from "@aglyn/shared-util-tools";
18
+ import { useScrollTrigger } from "@mui/material";
19
+ import { cloneElement } from "react";
20
+ export function ScrollReaction(props) {
21
+ const { children, renderProps, threshold, target, withHysteresis, withoutHysteresis } = props;
22
+ const activeWithoutHysteresis = useScrollTrigger(_extends({
23
+ disableHysteresis: true,
24
+ threshold,
25
+ target: target != null ? target : undefined
26
+ }, withoutHysteresis));
27
+ const activeWithHysteresis = useScrollTrigger(_extends({
28
+ disableHysteresis: false,
29
+ threshold,
30
+ target: target != null ? target : undefined
31
+ }, withHysteresis));
32
+ const activity = {
33
+ activeWithHysteresis,
34
+ activeWithoutHysteresis
35
+ };
36
+ if (_isFnT(children)) return children(activity);
37
+ return /*#__PURE__*/ cloneElement(children, _isFnT(renderProps) ? renderProps(activity) : renderProps);
38
+ }
39
+ ScrollReaction.displayName = 'ScrollReaction';
40
+ ScrollReaction.aglyn = true;
41
+ export default ScrollReaction;
42
+
43
+ //# sourceMappingURL=scroll-reaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/scroll-reaction.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2023 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { _isFnT } from '@aglyn/shared-util-tools'\nimport { useScrollTrigger } from '@mui/material'\nimport { cloneElement, type ReactElement } from 'react'\n\ntype UseScrollTriggerOptions = Parameters<typeof useScrollTrigger>[0]\n\nexport type ElevatedRenderProps = {\n activeWithHysteresis: boolean\n activeWithoutHysteresis: boolean\n}\n\nexport type ScrollTriggerOptions = Omit<\n UseScrollTriggerOptions,\n 'disableHysteresis'\n>\n\nexport interface ScrollReactionProps<P = any> extends ScrollTriggerOptions {\n /**\n * If children is a render function then passes local state to parameter.\n * Otherwise will clone child element, passing or calling renderProps\n */\n children: ReactElement<P> | ((state: ElevatedRenderProps) => ReactElement<P>)\n /**\n * Optionally, provide a render props function to contextually change passed\n * props based on the local state provided through the\n */\n renderProps?: Partial<P> | ((state: ElevatedRenderProps) => Partial<P>)\n\n /**\n * Optionally provided to override the options passed to useScrollTrigger for\n * the hook responding to triggers *WITH* hysteresis.\n *\n * __Meaning of Hysteresis__\n * > The meaning of hysteresis is \"lagging.\" Hysteresis is characterized as a\n * > lag of magnetic flux density (B) behind the magnetic field strength (H).\n */\n withHysteresis?: ScrollTriggerOptions\n /**\n * Optionally provided to override the options passed to\n * the`useScrollTrigger` for the hook responding to triggers *WITHOUT*\n * hysteresis.\n *\n * @see {@link withHysteresis} for Hysteresis meaning\n */\n withoutHysteresis?: ScrollTriggerOptions\n}\n\nexport function ScrollReaction<P>(\n props: ScrollReactionProps<P>,\n): ReactElement<P> {\n const {\n children,\n renderProps,\n threshold,\n target,\n withHysteresis,\n withoutHysteresis,\n } = props\n\n const activeWithoutHysteresis = useScrollTrigger({\n disableHysteresis: true,\n threshold,\n target: target ?? undefined,\n ...withoutHysteresis,\n })\n const activeWithHysteresis = useScrollTrigger({\n disableHysteresis: false,\n threshold,\n target: target ?? undefined,\n ...withHysteresis,\n })\n const activity = { activeWithHysteresis, activeWithoutHysteresis }\n\n if (_isFnT(children))\n return (children as (state: ElevatedRenderProps) => ReactElement<P>)(\n activity,\n )\n\n return cloneElement(\n children as ReactElement<P>,\n (_isFnT(renderProps) ? renderProps(activity) : renderProps) as Partial<P>,\n )\n}\n\nScrollReaction.displayName = 'ScrollReaction'\nScrollReaction.aglyn = true\n\nexport default ScrollReaction\n"],"names":["_isFnT","useScrollTrigger","cloneElement","ScrollReaction","props","children","renderProps","threshold","target","withHysteresis","withoutHysteresis","activeWithoutHysteresis","disableHysteresis","undefined","activeWithHysteresis","activity","displayName","aglyn"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,MAAM,QAAQ,2BAA0B;AACjD,SAASC,gBAAgB,QAAQ,gBAAe;AAChD,SAASC,YAAY,QAA2B,QAAO;AA6CvD,OAAO,SAASC,eACdC,KAA6B;IAE7B,MAAM,EACJC,QAAQ,EACRC,WAAW,EACXC,SAAS,EACTC,MAAM,EACNC,cAAc,EACdC,iBAAiB,EAClB,GAAGN;IAEJ,MAAMO,0BAA0BV,iBAAiB;QAC/CW,mBAAmB;QACnBL;QACAC,MAAM,EAAEA,iBAAAA,SAAUK;OACfH;IAEL,MAAMI,uBAAuBb,iBAAiB;QAC5CW,mBAAmB;QACnBL;QACAC,MAAM,EAAEA,iBAAAA,SAAUK;OACfJ;IAEL,MAAMM,WAAW;QAAED;QAAsBH;IAAwB;IAEjE,IAAIX,OAAOK,WACT,OAAO,AAACA,SACNU;IAGJ,qBAAOb,aACLG,UACCL,OAAOM,eAAeA,YAAYS,YAAYT;AAEnD;AAEAH,eAAea,WAAW,GAAG;AAC7Bb,eAAec,KAAK,GAAG;AAEvB,eAAed,eAAc"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { type TableContainerProps, type TableProps } from '@mui/material';
18
+ export type ScrollTableProps = TableProps & ({
19
+ /**
20
+ * The scroll box around the table. Its `sx` is merged AFTER the box's
21
+ * own, so a caller can bound the box's height or space it out without
22
+ * taking the scroll away. `role`, `aria-label` and `tabIndex` belong
23
+ * here when a surface has to name the box (the customer-page Table
24
+ * element does).
25
+ */
26
+ ContainerProps?: TableContainerProps & {
27
+ [attribute: `data-${string}`]: unknown;
28
+ };
29
+ nested?: false;
30
+ } | {
31
+ ContainerProps?: never;
32
+ /**
33
+ * The table sits in a cell of another `ScrollTable`, whose box
34
+ * already scrolls it: it is drawn with no box of its own.
35
+ */
36
+ nested: true;
37
+ });
38
+ /**
39
+ * EVERY TABLE THAT IS NOT A RECORD LIST (AGL-3045).
40
+ *
41
+ * ## Why a table needs a box of its own
42
+ *
43
+ * A MUI `Card` clips what leaves it (`overflow: hidden`), and a `Table` is at
44
+ * least as wide as its widest unbreakable content — an id, a date, a figure.
45
+ * A bare table whose content outgrows its card is cut off at the card's edge,
46
+ * and nothing on the page can reach the columns past it.
47
+ *
48
+ * `DataTableComponent` and `ListTable` scroll their own columns, so a record
49
+ * list — rows of jobs, people, orders, anything paged or sorted — belongs
50
+ * there. What is left is drawn here: a breakdown by kind, month or
51
+ * jurisdiction, a key/value readout, a preview inside a dialog, a row of
52
+ * inputs.
53
+ *
54
+ * ## What it does
55
+ *
56
+ * The table sits in MUI's `TableContainer` (`width: 100%`, `overflow-x:
57
+ * auto`), so content wider than the card scrolls inside the card instead of
58
+ * being cut by it. The box carries the house overflow fade from
59
+ * `scroll-overflow`, which is how an overlay-scrollbar platform — macOS, by
60
+ * default — admits the table continues: a scroll-driven animation that is
61
+ * inactive, and paints nothing, while there is nothing to scroll.
62
+ *
63
+ * ## Why the table keeps `width: 100%` here
64
+ *
65
+ * The customer-page Table element sizes its table to `max-content`, capped at
66
+ * 560px, so a comparison matrix of prose cells scrolls rather than wrapping
67
+ * each cell into six lines (AGL-2568). That cap is safe on a full-width page
68
+ * section, which is never narrower than 560px from a tablet up. A console card
69
+ * is: two-column card flows put cards well under 560px at tablet and laptop
70
+ * widths, so the same sizing would put a scrollbar on tables that fit today.
71
+ * The console's defect is the unbreakable cell, and a `width: 100%` table
72
+ * overflows on exactly that — so the table fills its card, wraps what can
73
+ * wrap, and scrolls when what cannot wrap does not fit. A surface that wants
74
+ * the prose sizing passes it as the table's `sx`, as the Table element does.
75
+ *
76
+ * ## Keyboard
77
+ *
78
+ * Chromium (130+) and Firefox make a scroll box with no focusable content
79
+ * keyboard-reachable on their own, and a table of links or buttons scrolls to
80
+ * whichever one takes focus. A surface that must also NAME the box — a region
81
+ * a screen reader announces — passes `role`, `aria-label` and `tabIndex`
82
+ * through `ContainerProps` (see `scrollRegionProps`).
83
+ *
84
+ * ## A table inside a table
85
+ *
86
+ * A tree draws a parent's children as a table nested in a full-width cell of
87
+ * the parent's table. That table is already inside the outer box, which
88
+ * scrolls the whole tree as one piece; a box of its own would make every
89
+ * subtree a scroll region and a clip of its own, for content that is exactly
90
+ * as wide as the table around it. `nested` draws it bare.
91
+ *
92
+ * ## Shape
93
+ *
94
+ * Every `Table` prop goes to the table; `ContainerProps` go to the box; `ref`
95
+ * is the box, the element that holds the table's place on the page, so a
96
+ * `nested` table, which has no box, takes no ref.
97
+ * `aglyn/no-raw-mui-table` refuses a MUI `Table` or `TableContainer` anywhere
98
+ * but this file.
99
+ */
100
+ export declare const ScrollTable: import("react").ForwardRefExoticComponent<(Omit<import("@mui/material").TableOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "children" | "style" | "className" | "padding" | "classes" | "sx" | "size" | "stickyHeader"> & {
101
+ component?: React.ElementType | undefined;
102
+ } & {
103
+ /**
104
+ * The scroll box around the table. Its `sx` is merged AFTER the box's
105
+ * own, so a caller can bound the box's height or space it out without
106
+ * taking the scroll away. `role`, `aria-label` and `tabIndex` belong
107
+ * here when a surface has to name the box (the customer-page Table
108
+ * element does).
109
+ */
110
+ ContainerProps?: TableContainerProps & {
111
+ [attribute: `data-${string}`]: unknown;
112
+ };
113
+ nested?: false;
114
+ }, "ref"> | Omit<import("@mui/material").TableOwnProps & import("@mui/material/OverridableComponent").CommonProps & Omit<import("react").DetailedHTMLProps<import("react").TableHTMLAttributes<HTMLTableElement>, HTMLTableElement>, "children" | "style" | "className" | "padding" | "classes" | "sx" | "size" | "stickyHeader"> & {
115
+ component?: React.ElementType | undefined;
116
+ } & {
117
+ ContainerProps?: never;
118
+ /**
119
+ * The table sits in a cell of another `ScrollTable`, whose box
120
+ * already scrolls it: it is drawn with no box of its own.
121
+ */
122
+ nested: true;
123
+ }, "ref">) & import("react").RefAttributes<HTMLDivElement>>;
124
+ export default ScrollTable;
@@ -0,0 +1,103 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ /**
5
+ * @license
6
+ * Copyright 2026 Aglyn LLC
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */ import { mergeSxProps } from "@aglyn/shared-ui-theme";
20
+ import { Table, TableContainer } from "@mui/material";
21
+ import { forwardRef } from "react";
22
+ import { scrollableTableWrapperSx } from "../utils/scroll-overflow.js";
23
+ /**
24
+ * EVERY TABLE THAT IS NOT A RECORD LIST (AGL-3045).
25
+ *
26
+ * ## Why a table needs a box of its own
27
+ *
28
+ * A MUI `Card` clips what leaves it (`overflow: hidden`), and a `Table` is at
29
+ * least as wide as its widest unbreakable content — an id, a date, a figure.
30
+ * A bare table whose content outgrows its card is cut off at the card's edge,
31
+ * and nothing on the page can reach the columns past it.
32
+ *
33
+ * `DataTableComponent` and `ListTable` scroll their own columns, so a record
34
+ * list — rows of jobs, people, orders, anything paged or sorted — belongs
35
+ * there. What is left is drawn here: a breakdown by kind, month or
36
+ * jurisdiction, a key/value readout, a preview inside a dialog, a row of
37
+ * inputs.
38
+ *
39
+ * ## What it does
40
+ *
41
+ * The table sits in MUI's `TableContainer` (`width: 100%`, `overflow-x:
42
+ * auto`), so content wider than the card scrolls inside the card instead of
43
+ * being cut by it. The box carries the house overflow fade from
44
+ * `scroll-overflow`, which is how an overlay-scrollbar platform — macOS, by
45
+ * default — admits the table continues: a scroll-driven animation that is
46
+ * inactive, and paints nothing, while there is nothing to scroll.
47
+ *
48
+ * ## Why the table keeps `width: 100%` here
49
+ *
50
+ * The customer-page Table element sizes its table to `max-content`, capped at
51
+ * 560px, so a comparison matrix of prose cells scrolls rather than wrapping
52
+ * each cell into six lines (AGL-2568). That cap is safe on a full-width page
53
+ * section, which is never narrower than 560px from a tablet up. A console card
54
+ * is: two-column card flows put cards well under 560px at tablet and laptop
55
+ * widths, so the same sizing would put a scrollbar on tables that fit today.
56
+ * The console's defect is the unbreakable cell, and a `width: 100%` table
57
+ * overflows on exactly that — so the table fills its card, wraps what can
58
+ * wrap, and scrolls when what cannot wrap does not fit. A surface that wants
59
+ * the prose sizing passes it as the table's `sx`, as the Table element does.
60
+ *
61
+ * ## Keyboard
62
+ *
63
+ * Chromium (130+) and Firefox make a scroll box with no focusable content
64
+ * keyboard-reachable on their own, and a table of links or buttons scrolls to
65
+ * whichever one takes focus. A surface that must also NAME the box — a region
66
+ * a screen reader announces — passes `role`, `aria-label` and `tabIndex`
67
+ * through `ContainerProps` (see `scrollRegionProps`).
68
+ *
69
+ * ## A table inside a table
70
+ *
71
+ * A tree draws a parent's children as a table nested in a full-width cell of
72
+ * the parent's table. That table is already inside the outer box, which
73
+ * scrolls the whole tree as one piece; a box of its own would make every
74
+ * subtree a scroll region and a clip of its own, for content that is exactly
75
+ * as wide as the table around it. `nested` draws it bare.
76
+ *
77
+ * ## Shape
78
+ *
79
+ * Every `Table` prop goes to the table; `ContainerProps` go to the box; `ref`
80
+ * is the box, the element that holds the table's place on the page, so a
81
+ * `nested` table, which has no box, takes no ref.
82
+ * `aglyn/no-raw-mui-table` refuses a MUI `Table` or `TableContainer` anywhere
83
+ * but this file.
84
+ */ export const ScrollTable = /*#__PURE__*/ forwardRef(function ScrollTable(props, ref) {
85
+ const { ContainerProps, nested } = props, tableProps = _object_without_properties_loose(props, [
86
+ "ContainerProps",
87
+ "nested"
88
+ ]);
89
+ if (nested) return /*#__PURE__*/ _jsx(Table, _extends({}, tableProps));
90
+ const _ref = ContainerProps != null ? ContainerProps : {}, { sx: containerSx } = _ref, container = _object_without_properties_loose(_ref, [
91
+ "sx"
92
+ ]);
93
+ return /*#__PURE__*/ _jsx(TableContainer, _extends({
94
+ ref: ref
95
+ }, container, {
96
+ sx: mergeSxProps(scrollableTableWrapperSx, containerSx),
97
+ children: /*#__PURE__*/ _jsx(Table, _extends({}, tableProps))
98
+ }));
99
+ });
100
+ ScrollTable.displayName = 'ScrollTable';
101
+ export default ScrollTable;
102
+
103
+ //# sourceMappingURL=scroll-table.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../libs/shared/ui/jsx/src/lib/components/scroll-table.component.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { mergeSxProps } from '@aglyn/shared-ui-theme'\nimport {\n Table,\n TableContainer,\n type TableContainerProps,\n type TableProps,\n} from '@mui/material'\nimport { forwardRef } from 'react'\nimport { scrollableTableWrapperSx } from '../utils/scroll-overflow'\n\nexport type ScrollTableProps = TableProps &\n (\n | {\n /**\n * The scroll box around the table. Its `sx` is merged AFTER the box's\n * own, so a caller can bound the box's height or space it out without\n * taking the scroll away. `role`, `aria-label` and `tabIndex` belong\n * here when a surface has to name the box (the customer-page Table\n * element does).\n */\n ContainerProps?: TableContainerProps & {\n [attribute: `data-${string}`]: unknown\n }\n nested?: false\n }\n | {\n ContainerProps?: never\n /**\n * The table sits in a cell of another `ScrollTable`, whose box\n * already scrolls it: it is drawn with no box of its own.\n */\n nested: true\n }\n )\n\n/**\n * EVERY TABLE THAT IS NOT A RECORD LIST (AGL-3045).\n *\n * ## Why a table needs a box of its own\n *\n * A MUI `Card` clips what leaves it (`overflow: hidden`), and a `Table` is at\n * least as wide as its widest unbreakable content — an id, a date, a figure.\n * A bare table whose content outgrows its card is cut off at the card's edge,\n * and nothing on the page can reach the columns past it.\n *\n * `DataTableComponent` and `ListTable` scroll their own columns, so a record\n * list — rows of jobs, people, orders, anything paged or sorted — belongs\n * there. What is left is drawn here: a breakdown by kind, month or\n * jurisdiction, a key/value readout, a preview inside a dialog, a row of\n * inputs.\n *\n * ## What it does\n *\n * The table sits in MUI's `TableContainer` (`width: 100%`, `overflow-x:\n * auto`), so content wider than the card scrolls inside the card instead of\n * being cut by it. The box carries the house overflow fade from\n * `scroll-overflow`, which is how an overlay-scrollbar platform — macOS, by\n * default — admits the table continues: a scroll-driven animation that is\n * inactive, and paints nothing, while there is nothing to scroll.\n *\n * ## Why the table keeps `width: 100%` here\n *\n * The customer-page Table element sizes its table to `max-content`, capped at\n * 560px, so a comparison matrix of prose cells scrolls rather than wrapping\n * each cell into six lines (AGL-2568). That cap is safe on a full-width page\n * section, which is never narrower than 560px from a tablet up. A console card\n * is: two-column card flows put cards well under 560px at tablet and laptop\n * widths, so the same sizing would put a scrollbar on tables that fit today.\n * The console's defect is the unbreakable cell, and a `width: 100%` table\n * overflows on exactly that — so the table fills its card, wraps what can\n * wrap, and scrolls when what cannot wrap does not fit. A surface that wants\n * the prose sizing passes it as the table's `sx`, as the Table element does.\n *\n * ## Keyboard\n *\n * Chromium (130+) and Firefox make a scroll box with no focusable content\n * keyboard-reachable on their own, and a table of links or buttons scrolls to\n * whichever one takes focus. A surface that must also NAME the box — a region\n * a screen reader announces — passes `role`, `aria-label` and `tabIndex`\n * through `ContainerProps` (see `scrollRegionProps`).\n *\n * ## A table inside a table\n *\n * A tree draws a parent's children as a table nested in a full-width cell of\n * the parent's table. That table is already inside the outer box, which\n * scrolls the whole tree as one piece; a box of its own would make every\n * subtree a scroll region and a clip of its own, for content that is exactly\n * as wide as the table around it. `nested` draws it bare.\n *\n * ## Shape\n *\n * Every `Table` prop goes to the table; `ContainerProps` go to the box; `ref`\n * is the box, the element that holds the table's place on the page, so a\n * `nested` table, which has no box, takes no ref.\n * `aglyn/no-raw-mui-table` refuses a MUI `Table` or `TableContainer` anywhere\n * but this file.\n */\nexport const ScrollTable = forwardRef<HTMLDivElement, ScrollTableProps>(\n function ScrollTable(props, ref) {\n const { ContainerProps, nested, ...tableProps } = props\n if (nested) return <Table {...tableProps} />\n const { sx: containerSx, ...container } = ContainerProps ?? {}\n return (\n <TableContainer\n ref={ref}\n {...container}\n sx={mergeSxProps(scrollableTableWrapperSx, containerSx)}\n >\n <Table {...tableProps} />\n </TableContainer>\n )\n },\n)\nScrollTable.displayName = 'ScrollTable'\n\nexport default ScrollTable\n"],"names":["mergeSxProps","Table","TableContainer","forwardRef","scrollableTableWrapperSx","ScrollTable","props","ref","ContainerProps","nested","tableProps","sx","containerSx","container","displayName"],"mappings":";;;AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,YAAY,QAAQ,yBAAwB;AACrD,SACEC,KAAK,EACLC,cAAc,QAGT,gBAAe;AACtB,SAASC,UAAU,QAAQ,QAAO;AAClC,SAASC,wBAAwB,QAAQ,8BAA0B;AA2BnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6DC,GACD,OAAO,MAAMC,4BAAcF,WACzB,SAASE,YAAYC,KAAK,EAAEC,GAAG;IAC7B,MAAM,EAAEC,cAAc,EAAEC,MAAM,EAAiB,GAAGH,OAAfI,8CAAeJ;;;;IAClD,IAAIG,QAAQ,qBAAO,KAACR,oBAAUS;IAC9B,aAA0CF,yBAAAA,iBAAkB,CAAC,GAAvD,EAAEG,IAAIC,WAAW,EAAgB,SAAXC;;;IAC5B,qBACE,KAACX;QACCK,KAAKA;OACDM;QACJF,IAAIX,aAAaI,0BAA0BQ;kBAE3C,cAAA,KAACX,oBAAUS;;AAGjB,GACD;AACDL,YAAYS,WAAW,GAAG;AAE1B,eAAeT,YAAW"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export * from './shadow-dom';
18
+ export { default } from './shadow-dom';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ export * from "./shadow-dom.js";
17
+ export { default } from "./shadow-dom.js";
18
+
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/shared/ui/jsx/src/lib/components/shadow-dom/index.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2023 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport * from './shadow-dom'\nexport { default } from './shadow-dom'\n"],"names":["default"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,cAAc,kBAAc;AAC5B,SAASA,OAAO,QAAQ,kBAAc"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ export declare const ShadowDomContext: import("react").Context<any>;
18
+ export declare function useShadowDomContext(): any;
19
+ export interface ShadowContentPortalProps {
20
+ root: ShadowRoot;
21
+ children?: JSX.Children;
22
+ }
23
+ export interface BaseProps {
24
+ mode?: 'open' | 'closed';
25
+ delegatesFocus?: boolean;
26
+ styleSheets?: globalThis.CSSStyleSheet[];
27
+ ssr?: boolean;
28
+ children?: JSX.Children;
29
+ }
30
+ export type RenderProp = (props: {
31
+ root: ShadowRoot;
32
+ ssr?: boolean;
33
+ children?: JSX.Children;
34
+ }) => JSX.Children;
35
+ export type FactoryOptions<P = any> = {
36
+ tag: string;
37
+ render: RenderProp;
38
+ };
39
+ export declare function shadowDomRootFactory<P = any>(options: FactoryOptions<P>): import("react").ForwardRefExoticComponent<import("react").PropsWithoutRef<P & BaseProps> & import("react").RefAttributes<any>>;
40
+ export declare function createShadowDomProxy(target?: Record<string, ReturnType<typeof shadowDomRootFactory>>, id?: string, render?: RenderProp): Record<string, import("react").ForwardRefExoticComponent<BaseProps & import("react").RefAttributes<any>>>;
41
+ export declare const ShadowDom: Record<string, import("react").ForwardRefExoticComponent<BaseProps & import("react").RefAttributes<any>>>;
42
+ export default ShadowDom;
@@ -0,0 +1,123 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
4
+ /**
5
+ * @license
6
+ * Copyright 2023 Aglyn LLC
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */ import { paramCase } from "@aglyn/shared-util-vendor";
20
+ import { createContext, forwardRef, useContext, useState } from "react";
21
+ import { createPortal } from "react-dom";
22
+ import { useEnsuredForwardedRef, useIsomorphicLayoutEffect } from "react-use";
23
+ export const ShadowDomContext = /*#__PURE__*/ createContext(null);
24
+ export function useShadowDomContext() {
25
+ return useContext(ShadowDomContext);
26
+ }
27
+ function ShadowDomContentPortal(props) {
28
+ const { root, children = null } = props;
29
+ return /*#__PURE__*/ createPortal(children, root);
30
+ }
31
+ export function shadowDomRootFactory(options) {
32
+ const ShadowDomRoot = /*#__PURE__*/ forwardRef((props, ref)=>{
33
+ const { mode = 'open', delegatesFocus = false, styleSheets = [], ssr = false, children = null } = props, rest = _object_without_properties_loose(props, [
34
+ "mode",
35
+ "delegatesFocus",
36
+ "styleSheets",
37
+ "ssr",
38
+ "children"
39
+ ]);
40
+ const node = useEnsuredForwardedRef(ref);
41
+ const [root, setRoot] = useState(null);
42
+ const key = `node_${mode}${delegatesFocus}`;
43
+ const Tag = options.tag;
44
+ useIsomorphicLayoutEffect(()=>{
45
+ if (!node.current) return;
46
+ try {
47
+ typeof ref === 'function' && ref(node.current);
48
+ if (ssr) return setRoot(node.current.shadowRoot);
49
+ const root = node.current.attachShadow({
50
+ mode,
51
+ delegatesFocus
52
+ });
53
+ styleSheets.length > 0 && (root.adoptedStyleSheets = styleSheets);
54
+ setRoot(root);
55
+ } catch (error) {
56
+ if ((error == null ? void 0 : error.name) !== 'NotSupportedError') throw error;
57
+ // A shadow root already exists on the host (remount of the same
58
+ // element, e.g. StrictMode double-effects) — adopt it.
59
+ const existing = node.current.shadowRoot;
60
+ if (existing) {
61
+ styleSheets.length > 0 && (existing.adoptedStyleSheets = styleSheets);
62
+ setRoot(existing);
63
+ }
64
+ }
65
+ }, [
66
+ styleSheets,
67
+ delegatesFocus,
68
+ mode,
69
+ ssr
70
+ ]);
71
+ return /*#__PURE__*/ _jsx(_Fragment, {
72
+ children: /*#__PURE__*/ _jsx(Tag, _extends({
73
+ ref: node
74
+ }, rest, {
75
+ children: root ? /*#__PURE__*/ _jsx(ShadowDomContext.Provider, {
76
+ value: root,
77
+ children: /*#__PURE__*/ _jsx(ShadowDomContentPortal, {
78
+ root: root,
79
+ children: options.render == null ? void 0 : options.render.call(options, {
80
+ root,
81
+ ssr,
82
+ children
83
+ })
84
+ })
85
+ }) : // No shadow root yet: on the server and during the first client
86
+ // (hydration) render the content renders as light DOM, so the
87
+ // SSR payload carries real text for SEO/crawlers. Once the
88
+ // shadow root attaches (layout effect, before paint) the light
89
+ // DOM stops displaying — a shadow host without slots never shows
90
+ // it — and the portal branch takes over. Hydration stays
91
+ // consistent because server and first client render both take
92
+ // this branch.
93
+ options.render == null ? void 0 : options.render.call(options, {
94
+ root,
95
+ ssr,
96
+ children
97
+ })
98
+ }), key)
99
+ });
100
+ });
101
+ ShadowDomRoot.displayName = 'ShadowDomRoot';
102
+ return ShadowDomRoot;
103
+ }
104
+ const tags = new Map();
105
+ export function createShadowDomProxy(target = {}, id = 'sdp-', render = ({ children })=>children) {
106
+ return new Proxy(target, {
107
+ get: function get(_, name) {
108
+ const tag = paramCase(name);
109
+ const key = `${id}${tag}`;
110
+ if (!tags.has(key)) {
111
+ tags.set(key, shadowDomRootFactory({
112
+ tag,
113
+ render
114
+ }));
115
+ }
116
+ return tags.get(key);
117
+ }
118
+ });
119
+ }
120
+ export const ShadowDom = createShadowDomProxy();
121
+ export default ShadowDom;
122
+
123
+ //# sourceMappingURL=shadow-dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../../../libs/shared/ui/jsx/src/lib/components/shadow-dom/shadow-dom.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2023 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { paramCase } from '@aglyn/shared-util-vendor'\nimport { createContext, forwardRef, useContext, useState } from 'react'\nimport { createPortal } from 'react-dom'\nimport { useEnsuredForwardedRef, useIsomorphicLayoutEffect } from 'react-use'\n\nexport const ShadowDomContext = createContext(null)\n\nexport function useShadowDomContext() {\n return useContext(ShadowDomContext)\n}\n\nexport interface ShadowContentPortalProps {\n root: ShadowRoot\n children?: JSX.Children\n}\n\nfunction ShadowDomContentPortal(props: ShadowContentPortalProps) {\n const { root, children = null } = props\n return createPortal(children, root)\n}\n\nexport interface BaseProps {\n mode?: 'open' | 'closed'\n delegatesFocus?: boolean\n styleSheets?: globalThis.CSSStyleSheet[]\n ssr?: boolean\n children?: JSX.Children\n}\n\nexport type RenderProp = (props: {\n root: ShadowRoot\n ssr?: boolean\n children?: JSX.Children\n}) => JSX.Children\n\nexport type FactoryOptions<P = any> = {\n tag: string\n render: RenderProp\n}\n\nexport function shadowDomRootFactory<P = any>(options: FactoryOptions<P>) {\n const ShadowDomRoot = forwardRef<any, P & BaseProps>((props, ref) => {\n const {\n mode = 'open',\n delegatesFocus = false,\n styleSheets = [],\n ssr = false,\n children = null,\n ...rest\n } = props\n const node = useEnsuredForwardedRef<HTMLElement>(ref as any)\n const [root, setRoot] = useState<ShadowRoot | null>(null)\n const key = `node_${mode}${delegatesFocus}`\n const Tag = options.tag\n\n useIsomorphicLayoutEffect(() => {\n if (!node.current) return\n\n try {\n typeof ref === 'function' && ref(node.current)\n\n if (ssr) return setRoot(node.current.shadowRoot)\n\n const root = node.current.attachShadow({\n mode,\n delegatesFocus,\n })\n styleSheets.length > 0 && (root.adoptedStyleSheets = styleSheets)\n setRoot(root)\n } catch (error) {\n if ((error as Error)?.name !== 'NotSupportedError') throw error\n // A shadow root already exists on the host (remount of the same\n // element, e.g. StrictMode double-effects) — adopt it.\n const existing = node.current.shadowRoot\n if (existing) {\n styleSheets.length > 0 && (existing.adoptedStyleSheets = styleSheets)\n setRoot(existing)\n }\n }\n }, [styleSheets, delegatesFocus, mode, ssr])\n\n return (\n <>\n <Tag key={key} ref={node} {...rest}>\n {root ? (\n <ShadowDomContext.Provider value={root}>\n <ShadowDomContentPortal root={root}>\n {options.render?.({ root, ssr, children })}\n </ShadowDomContentPortal>\n </ShadowDomContext.Provider>\n ) : (\n // No shadow root yet: on the server and during the first client\n // (hydration) render the content renders as light DOM, so the\n // SSR payload carries real text for SEO/crawlers. Once the\n // shadow root attaches (layout effect, before paint) the light\n // DOM stops displaying — a shadow host without slots never shows\n // it — and the portal branch takes over. Hydration stays\n // consistent because server and first client render both take\n // this branch.\n options.render?.({ root, ssr, children })\n )}\n </Tag>\n </>\n );\n })\n ShadowDomRoot.displayName = 'ShadowDomRoot'\n\n return ShadowDomRoot\n}\n\nconst tags = new Map()\n\nexport function createShadowDomProxy(\n target: Record<string, ReturnType<typeof shadowDomRootFactory>> = {},\n id = 'sdp-',\n render: RenderProp = ({ children }) => children,\n) {\n return new Proxy(target, {\n get: function get(_, name) {\n const tag = paramCase(name as string)\n const key = `${id}${tag}`\n\n if (!tags.has(key)) {\n tags.set(key, shadowDomRootFactory({ tag, render }))\n }\n\n return tags.get(key)\n },\n })\n}\n\nexport const ShadowDom = createShadowDomProxy()\n\nexport default ShadowDom\n"],"names":["paramCase","createContext","forwardRef","useContext","useState","createPortal","useEnsuredForwardedRef","useIsomorphicLayoutEffect","ShadowDomContext","useShadowDomContext","ShadowDomContentPortal","props","root","children","shadowDomRootFactory","options","ShadowDomRoot","ref","mode","delegatesFocus","styleSheets","ssr","rest","node","setRoot","key","Tag","tag","current","shadowRoot","attachShadow","length","adoptedStyleSheets","error","name","existing","Provider","value","render","displayName","tags","Map","createShadowDomProxy","target","id","Proxy","get","_","has","set","ShadowDom"],"mappings":";;;AAAA;;;;;;;;;;;;;;;CAeC,GAED,SAASA,SAAS,QAAQ,4BAA2B;AACrD,SAASC,aAAa,EAAEC,UAAU,EAAEC,UAAU,EAAEC,QAAQ,QAAQ,QAAO;AACvE,SAASC,YAAY,QAAQ,YAAW;AACxC,SAASC,sBAAsB,EAAEC,yBAAyB,QAAQ,YAAW;AAE7E,OAAO,MAAMC,iCAAmBP,cAAc,MAAK;AAEnD,OAAO,SAASQ;IACd,OAAON,WAAWK;AACpB;AAOA,SAASE,uBAAuBC,KAA+B;IAC7D,MAAM,EAAEC,IAAI,EAAEC,WAAW,IAAI,EAAE,GAAGF;IAClC,qBAAON,aAAaQ,UAAUD;AAChC;AAqBA,OAAO,SAASE,qBAA8BC,OAA0B;IACtE,MAAMC,8BAAgBd,WAA+B,CAACS,OAAOM;QAC3D,MAAM,EACJC,OAAO,MAAM,EACbC,iBAAiB,KAAK,EACtBC,cAAc,EAAE,EAChBC,MAAM,KAAK,EACXR,WAAW,IAAI,EAEhB,GAAGF,OADCW,wCACDX;;;;;;;QACJ,MAAMY,OAAOjB,uBAAoCW;QACjD,MAAM,CAACL,MAAMY,QAAQ,GAAGpB,SAA4B;QACpD,MAAMqB,MAAM,CAAC,KAAK,EAAEP,OAAOC,gBAAgB;QAC3C,MAAMO,MAAMX,QAAQY,GAAG;QAEvBpB,0BAA0B;YACxB,IAAI,CAACgB,KAAKK,OAAO,EAAE;YAEnB,IAAI;gBACF,OAAOX,QAAQ,cAAcA,IAAIM,KAAKK,OAAO;gBAE7C,IAAIP,KAAK,OAAOG,QAAQD,KAAKK,OAAO,CAACC,UAAU;gBAE/C,MAAMjB,OAAOW,KAAKK,OAAO,CAACE,YAAY,CAAC;oBACrCZ;oBACAC;gBACF;gBACAC,YAAYW,MAAM,GAAG,KAAMnB,CAAAA,KAAKoB,kBAAkB,GAAGZ,WAAU;gBAC/DI,QAAQZ;YACV,EAAE,OAAOqB,OAAO;gBACd,IAAI,CAACA,yBAAD,AAACA,MAAiBC,IAAI,MAAK,qBAAqB,MAAMD;gBAC1D,gEAAgE;gBAChE,uDAAuD;gBACvD,MAAME,WAAWZ,KAAKK,OAAO,CAACC,UAAU;gBACxC,IAAIM,UAAU;oBACZf,YAAYW,MAAM,GAAG,KAAMI,CAAAA,SAASH,kBAAkB,GAAGZ,WAAU;oBACnEI,QAAQW;gBACV;YACF;QACF,GAAG;YAACf;YAAaD;YAAgBD;YAAMG;SAAI;QAE3C,qBACE;sBACE,cAAA,KAACK;gBAAcT,KAAKM;eAAUD;0BAC3BV,qBACC,KAACJ,iBAAiB4B,QAAQ;oBAACC,OAAOzB;8BAChC,cAAA,KAACF;wBAAuBE,MAAMA;kCAC3BG,QAAQuB,MAAM,oBAAdvB,QAAQuB,MAAM,MAAdvB,SAAiB;4BAAEH;4BAAMS;4BAAKR;wBAAS;;qBAI5C,gEAAgE;gBAChE,8DAA8D;gBAC9D,2DAA2D;gBAC3D,+DAA+D;gBAC/D,iEAAiE;gBACjE,yDAAyD;gBACzD,8DAA8D;gBAC9D,eAAe;gBACfE,QAAQuB,MAAM,oBAAdvB,QAAQuB,MAAM,MAAdvB,SAAiB;oBAAEH;oBAAMS;oBAAKR;gBAAS;gBAhBjCY;;IAqBhB;IACAT,cAAcuB,WAAW,GAAG;IAE5B,OAAOvB;AACT;AAEA,MAAMwB,OAAO,IAAIC;AAEjB,OAAO,SAASC,qBACdC,SAAkE,CAAC,CAAC,EACpEC,KAAK,MAAM,EACXN,SAAqB,CAAC,EAAEzB,QAAQ,EAAE,GAAKA,QAAQ;IAE/C,OAAO,IAAIgC,MAAMF,QAAQ;QACvBG,KAAK,SAASA,IAAIC,CAAC,EAAEb,IAAI;YACvB,MAAMP,MAAM3B,UAAUkC;YACtB,MAAMT,MAAM,GAAGmB,KAAKjB,KAAK;YAEzB,IAAI,CAACa,KAAKQ,GAAG,CAACvB,MAAM;gBAClBe,KAAKS,GAAG,CAACxB,KAAKX,qBAAqB;oBAAEa;oBAAKW;gBAAO;YACnD;YAEA,OAAOE,KAAKM,GAAG,CAACrB;QAClB;IACF;AACF;AAEA,OAAO,MAAMyB,YAAYR,uBAAsB;AAE/C,eAAeQ,UAAS"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { type BoxProps, type ModalProps as MuiModalProps } from '@mui/material';
18
+ export interface SplashScreenProps extends Partial<MuiModalProps<any, any>> {
19
+ }
20
+ /**
21
+ * The splash artwork on its own, with no Modal around it.
22
+ *
23
+ * `SplashScreen` below puts this in a `Modal`, which is a portal — and a
24
+ * portal renders NOTHING on the server and nothing on the first client
25
+ * render either. That is fine for a splash shown over an already-painted
26
+ * app, but useless as a boot-time fallback: a caller that needs markup in
27
+ * the SSR HTML (see the console's `NoSsr` fallback) has to render this
28
+ * directly inside its own positioned container.
29
+ */
30
+ export declare const SplashScreenContent: import("react").ForwardRefExoticComponent<Omit<BoxProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
31
+ declare const SplashScreen: import("react").ForwardRefExoticComponent<Omit<SplashScreenProps, "ref"> & import("react").RefAttributes<any>>;
32
+ export { SplashScreen };
33
+ export default SplashScreen;