@iota-uz/sdk 0.8.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +11 -0
  2. package/dist/client-host/identity.d.ts +4 -4
  3. package/dist/client-host/identity.js +2 -2
  4. package/dist/client-host/portal-host.d.ts +22 -0
  5. package/dist/client-host/portal-host.d.ts.map +1 -0
  6. package/dist/client-host/portal-host.js +118 -0
  7. package/dist/client-host/portals.d.ts +2 -2
  8. package/dist/client-host/portals.d.ts.map +1 -1
  9. package/dist/client-host/portals.js +13 -78
  10. package/dist/client-host/solid-index.d.ts +1 -0
  11. package/dist/client-host/solid-index.d.ts.map +1 -1
  12. package/dist/client-host/solid-index.js +1 -0
  13. package/dist/client-host/solid-portals.d.ts +27 -0
  14. package/dist/client-host/solid-portals.d.ts.map +1 -0
  15. package/dist/client-host/solid-portals.js +112 -0
  16. package/dist/client-host/solid.d.ts +15 -0
  17. package/dist/client-host/solid.d.ts.map +1 -1
  18. package/dist/client-host/solid.js +259 -16
  19. package/dist/sdk-identity.cjs +3 -3
  20. package/dist/sdk-identity.js +3 -3
  21. package/dist/sdk-identity.json +2 -2
  22. package/dist/solid-ui/charts/Chart.d.ts +33 -0
  23. package/dist/solid-ui/charts/Chart.d.ts.map +1 -0
  24. package/dist/solid-ui/data/Avatar.d.ts +19 -0
  25. package/dist/solid-ui/data/Avatar.d.ts.map +1 -0
  26. package/dist/solid-ui/data/DescriptionList.d.ts +20 -0
  27. package/dist/solid-ui/data/DescriptionList.d.ts.map +1 -0
  28. package/dist/solid-ui/data/EmptyState.d.ts +10 -0
  29. package/dist/solid-ui/data/EmptyState.d.ts.map +1 -0
  30. package/dist/solid-ui/data/LazyLoad.d.ts +38 -0
  31. package/dist/solid-ui/data/LazyLoad.d.ts.map +1 -0
  32. package/dist/solid-ui/data/Loader.d.ts +13 -0
  33. package/dist/solid-ui/data/Loader.d.ts.map +1 -0
  34. package/dist/solid-ui/data/Table.d.ts +37 -0
  35. package/dist/solid-ui/data/Table.d.ts.map +1 -0
  36. package/dist/solid-ui/display/Alert.d.ts +10 -0
  37. package/dist/solid-ui/display/Alert.d.ts.map +1 -0
  38. package/dist/solid-ui/display/Badge.d.ts +9 -0
  39. package/dist/solid-ui/display/Badge.d.ts.map +1 -0
  40. package/dist/solid-ui/display/Card.d.ts +10 -0
  41. package/dist/solid-ui/display/Card.d.ts.map +1 -0
  42. package/dist/solid-ui/display/Phone.d.ts +17 -0
  43. package/dist/solid-ui/display/Phone.d.ts.map +1 -0
  44. package/dist/solid-ui/display/Progress.d.ts +9 -0
  45. package/dist/solid-ui/display/Progress.d.ts.map +1 -0
  46. package/dist/solid-ui/display/Skeleton.d.ts +13 -0
  47. package/dist/solid-ui/display/Skeleton.d.ts.map +1 -0
  48. package/dist/solid-ui/display/Spinner.d.ts +7 -0
  49. package/dist/solid-ui/display/Spinner.d.ts.map +1 -0
  50. package/dist/solid-ui/fonts/Gilroy/Gilroy-Medium.woff2 +0 -0
  51. package/dist/solid-ui/fonts/Gilroy/Gilroy-Regular.woff2 +0 -0
  52. package/dist/solid-ui/fonts/Gilroy/Gilroy-Semibold.woff2 +0 -0
  53. package/dist/solid-ui/fonts/Inter.var.woff2 +0 -0
  54. package/dist/solid-ui/forms/Button.d.ts +28 -0
  55. package/dist/solid-ui/forms/Button.d.ts.map +1 -0
  56. package/dist/solid-ui/forms/Checkbox.d.ts +10 -0
  57. package/dist/solid-ui/forms/Checkbox.d.ts.map +1 -0
  58. package/dist/solid-ui/forms/Field.d.ts +16 -0
  59. package/dist/solid-ui/forms/Field.d.ts.map +1 -0
  60. package/dist/solid-ui/forms/Input.d.ts +47 -0
  61. package/dist/solid-ui/forms/Input.d.ts.map +1 -0
  62. package/dist/solid-ui/forms/Select.d.ts +19 -0
  63. package/dist/solid-ui/forms/Select.d.ts.map +1 -0
  64. package/dist/solid-ui/forms/Textarea.d.ts +11 -0
  65. package/dist/solid-ui/forms/Textarea.d.ts.map +1 -0
  66. package/dist/solid-ui/forms-advanced/DateRangeClearButton.d.ts +8 -0
  67. package/dist/solid-ui/forms-advanced/DateRangeClearButton.d.ts.map +1 -0
  68. package/dist/solid-ui/forms-advanced/PhoneInput.d.ts +4 -0
  69. package/dist/solid-ui/forms-advanced/PhoneInput.d.ts.map +1 -0
  70. package/dist/solid-ui/forms-advanced/Radio.d.ts +24 -0
  71. package/dist/solid-ui/forms-advanced/Radio.d.ts.map +1 -0
  72. package/dist/solid-ui/forms-advanced/Slider.d.ts +16 -0
  73. package/dist/solid-ui/forms-advanced/Slider.d.ts.map +1 -0
  74. package/dist/solid-ui/forms-advanced/Switch.d.ts +12 -0
  75. package/dist/solid-ui/forms-advanced/Switch.d.ts.map +1 -0
  76. package/dist/solid-ui/forms-advanced/Toggle.d.ts +22 -0
  77. package/dist/solid-ui/forms-advanced/Toggle.d.ts.map +1 -0
  78. package/dist/solid-ui/forms-advanced/Upload.d.ts +48 -0
  79. package/dist/solid-ui/forms-advanced/Upload.d.ts.map +1 -0
  80. package/dist/solid-ui/forms-advanced/state.d.ts +3 -0
  81. package/dist/solid-ui/forms-advanced/state.d.ts.map +1 -0
  82. package/dist/solid-ui/illustrations/Illustrations.d.ts +27 -0
  83. package/dist/solid-ui/illustrations/Illustrations.d.ts.map +1 -0
  84. package/dist/solid-ui/import/Import.d.ts +121 -0
  85. package/dist/solid-ui/import/Import.d.ts.map +1 -0
  86. package/dist/solid-ui/index.d.ts +60 -0
  87. package/dist/solid-ui/index.d.ts.map +1 -0
  88. package/dist/solid-ui/index.js +8798 -0
  89. package/dist/solid-ui/index.server.js +7175 -0
  90. package/dist/solid-ui/internal/classes.d.ts +3 -0
  91. package/dist/solid-ui/internal/classes.d.ts.map +1 -0
  92. package/dist/solid-ui/internal/events.d.ts +2 -0
  93. package/dist/solid-ui/internal/events.d.ts.map +1 -0
  94. package/dist/solid-ui/internal/floating.d.ts +13 -0
  95. package/dist/solid-ui/internal/floating.d.ts.map +1 -0
  96. package/dist/solid-ui/internal/icons.d.ts +10 -0
  97. package/dist/solid-ui/internal/icons.d.ts.map +1 -0
  98. package/dist/solid-ui/multilang/MultiLang.d.ts +48 -0
  99. package/dist/solid-ui/multilang/MultiLang.d.ts.map +1 -0
  100. package/dist/solid-ui/navigation/Breadcrumbs.d.ts +6 -0
  101. package/dist/solid-ui/navigation/Breadcrumbs.d.ts.map +1 -0
  102. package/dist/solid-ui/navigation/Dropdown.d.ts +23 -0
  103. package/dist/solid-ui/navigation/Dropdown.d.ts.map +1 -0
  104. package/dist/solid-ui/navigation/NavTabs.d.ts +17 -0
  105. package/dist/solid-ui/navigation/NavTabs.d.ts.map +1 -0
  106. package/dist/solid-ui/navigation/Pagination.d.ts +16 -0
  107. package/dist/solid-ui/navigation/Pagination.d.ts.map +1 -0
  108. package/dist/solid-ui/navigation/Tabs.d.ts +38 -0
  109. package/dist/solid-ui/navigation/Tabs.d.ts.map +1 -0
  110. package/dist/solid-ui/overlays/Dialog.d.ts +22 -0
  111. package/dist/solid-ui/overlays/Dialog.d.ts.map +1 -0
  112. package/dist/solid-ui/overlays/Drawer.d.ts +13 -0
  113. package/dist/solid-ui/overlays/Drawer.d.ts.map +1 -0
  114. package/dist/solid-ui/overlays/Toast.d.ts +36 -0
  115. package/dist/solid-ui/overlays/Toast.d.ts.map +1 -0
  116. package/dist/solid-ui/scaffold/Actions.d.ts +37 -0
  117. package/dist/solid-ui/scaffold/Actions.d.ts.map +1 -0
  118. package/dist/solid-ui/scaffold/DefaultFilters.d.ts +61 -0
  119. package/dist/solid-ui/scaffold/DefaultFilters.d.ts.map +1 -0
  120. package/dist/solid-ui/scaffold/FilterBuilder.d.ts +66 -0
  121. package/dist/solid-ui/scaffold/FilterBuilder.d.ts.map +1 -0
  122. package/dist/solid-ui/scaffold/Filters.d.ts +38 -0
  123. package/dist/solid-ui/scaffold/Filters.d.ts.map +1 -0
  124. package/dist/solid-ui/scaffold/Form.d.ts +26 -0
  125. package/dist/solid-ui/scaffold/Form.d.ts.map +1 -0
  126. package/dist/solid-ui/scaffold/TableDrawers.d.ts +43 -0
  127. package/dist/solid-ui/scaffold/TableDrawers.d.ts.map +1 -0
  128. package/dist/solid-ui/scaffold/TableWorkflow.d.ts +153 -0
  129. package/dist/solid-ui/scaffold/TableWorkflow.d.ts.map +1 -0
  130. package/dist/solid-ui/selection/Combobox.d.ts +37 -0
  131. package/dist/solid-ui/selection/Combobox.d.ts.map +1 -0
  132. package/dist/solid-ui/selection/Countries.d.ts +18 -0
  133. package/dist/solid-ui/selection/Countries.d.ts.map +1 -0
  134. package/dist/solid-ui/selection/DatePicker.d.ts +36 -0
  135. package/dist/solid-ui/selection/DatePicker.d.ts.map +1 -0
  136. package/dist/solid-ui/selection/SearchSelect.d.ts +33 -0
  137. package/dist/solid-ui/selection/SearchSelect.d.ts.map +1 -0
  138. package/dist/solid-ui/shell/CommandSearch.d.ts +41 -0
  139. package/dist/solid-ui/shell/CommandSearch.d.ts.map +1 -0
  140. package/dist/solid-ui/shell/Kanban.d.ts +49 -0
  141. package/dist/solid-ui/shell/Kanban.d.ts.map +1 -0
  142. package/dist/solid-ui/shell/PermissionGuard.d.ts +11 -0
  143. package/dist/solid-ui/shell/PermissionGuard.d.ts.map +1 -0
  144. package/dist/solid-ui/shell/Sidebar.d.ts +72 -0
  145. package/dist/solid-ui/shell/Sidebar.d.ts.map +1 -0
  146. package/dist/solid-ui/standalone.css +2 -0
  147. package/dist/solid-ui/utilities/CopyButton.d.ts +33 -0
  148. package/dist/solid-ui/utilities/CopyButton.d.ts.map +1 -0
  149. package/dist/solid-ui/utilities/ExportDropdown.d.ts +43 -0
  150. package/dist/solid-ui/utilities/ExportDropdown.d.ts.map +1 -0
  151. package/dist/solid-ui/utilities/Help.d.ts +41 -0
  152. package/dist/solid-ui/utilities/Help.d.ts.map +1 -0
  153. package/dist/solid-ui/utilities/LanguageSelect.d.ts +13 -0
  154. package/dist/solid-ui/utilities/LanguageSelect.d.ts.map +1 -0
  155. package/dist/solid-ui/utilities/Slot.d.ts +30 -0
  156. package/dist/solid-ui/utilities/Slot.d.ts.map +1 -0
  157. package/dist/solid-ui/utilities/Spotlight.d.ts +84 -0
  158. package/dist/solid-ui/utilities/Spotlight.d.ts.map +1 -0
  159. package/dist/styles.css +33 -9
  160. package/package.json +8 -1
package/README.md CHANGED
@@ -5,6 +5,8 @@ subpath APIs are built from separate internal workspace modules:
5
5
 
6
6
  - `@iota-uz/sdk/client-host`
7
7
  - `@iota-uz/sdk/solid`
8
+ - `@iota-uz/sdk/solid-ui`
9
+ - `@iota-uz/sdk/solid-ui/standalone.css`
8
10
  - `@iota-uz/sdk/styles.css`
9
11
  - `@iota-uz/sdk/lens`
10
12
  - `@iota-uz/sdk/lens/styles.css`
@@ -15,3 +17,12 @@ exports are intentionally absent. Solid is the standard client-route renderer;
15
17
  React and ReactDOM remain optional peers for migration compatibility;
16
18
  Lens implementation dependencies are contained in lazy Lens chunks and are not
17
19
  loaded by client-host imports.
20
+
21
+ Solid routes rendered inside the standard iota shell can use the component
22
+ exports directly. Standalone applications and the component gallery import the
23
+ compiled stylesheet once at their root:
24
+
25
+ ```ts
26
+ import { Button, Input } from '@iota-uz/sdk/solid-ui'
27
+ import '@iota-uz/sdk/solid-ui/standalone.css'
28
+ ```
@@ -1,9 +1,9 @@
1
- export declare const SDK_RELEASE_VERSION = "0.8.0";
2
- export declare const SDK_SOURCE_COMMIT = "4db430f807b23db5df725e623b23b45ccb30c9db";
1
+ export declare const SDK_RELEASE_VERSION = "0.9.0";
2
+ export declare const SDK_SOURCE_COMMIT = "3a1e16e7bd004b02c27f688654321169d622cb0f";
3
3
  export declare const SDK_PROTOCOL_VERSION = "1.0.0";
4
4
  export declare const SDK_IDENTITY: Readonly<{
5
- releaseVersion: "0.8.0";
6
- sourceCommit: "4db430f807b23db5df725e623b23b45ccb30c9db";
5
+ releaseVersion: "0.9.0";
6
+ sourceCommit: "3a1e16e7bd004b02c27f688654321169d622cb0f";
7
7
  protocolVersion: "1.0.0";
8
8
  }>;
9
9
  export interface SDKRuntimeIdentity {
@@ -1,6 +1,6 @@
1
1
  import { CLIENT_HOST_PROTOCOL_VERSION } from './protocol';
2
- export const SDK_RELEASE_VERSION = '0.8.0';
3
- export const SDK_SOURCE_COMMIT = '4db430f807b23db5df725e623b23b45ccb30c9db';
2
+ export const SDK_RELEASE_VERSION = '0.9.0';
3
+ export const SDK_SOURCE_COMMIT = '3a1e16e7bd004b02c27f688654321169d622cb0f';
4
4
  export const SDK_PROTOCOL_VERSION = CLIENT_HOST_PROTOCOL_VERSION;
5
5
  export const SDK_IDENTITY = Object.freeze({
6
6
  releaseVersion: SDK_RELEASE_VERSION,
@@ -0,0 +1,22 @@
1
+ export type PortalSurface = 'modal' | 'drawer' | 'toast' | 'command';
2
+ export declare const WIDGET_SLOT_NAMES: readonly ["navigation-leading", "navigation-trailing", "header-actions", "document-status"];
3
+ export type WidgetSlotName = typeof WIDGET_SLOT_NAMES[number];
4
+ export interface OverlayEntry {
5
+ id: string;
6
+ surface: PortalSurface;
7
+ restore: HTMLElement | null;
8
+ }
9
+ export declare class PortalRegistry {
10
+ private readonly owner;
11
+ private readonly background?;
12
+ private readonly roots;
13
+ private readonly overlays;
14
+ private locked;
15
+ constructor(owner: HTMLElement, background?: HTMLElement | undefined);
16
+ get ownerDocument(): Document;
17
+ root(surface: PortalSurface): HTMLElement;
18
+ mount(entry: OverlayEntry): () => void;
19
+ destroy(): void;
20
+ private sync;
21
+ }
22
+ //# sourceMappingURL=portal-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal-host.d.ts","sourceRoot":"","sources":["../src/portal-host.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AACpE,eAAO,MAAM,iBAAiB,6FAA8F,CAAA;AAC5H,MAAM,MAAM,cAAc,GAAG,OAAO,iBAAiB,CAAC,MAAM,CAAC,CAAA;AAI7D,MAAM,WAAW,YAAY;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE;AA4CjG,qBAAa,cAAc;IAKb,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAe,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAJ7E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwC;IAC9D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,MAAM,CAAQ;gBAEO,KAAK,EAAE,WAAW,EAAmB,UAAU,CAAC,EAAE,WAAW,YAAA;IAE1F,IAAI,aAAa,IAAI,QAAQ,CAAoC;IAEjE,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW;IAazC,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,IAAI;IAiBtC,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,IAAI;CAYb"}
@@ -0,0 +1,118 @@
1
+ export const WIDGET_SLOT_NAMES = ['navigation-leading', 'navigation-trailing', 'header-actions', 'document-status'];
2
+ const zLayers = { drawer: 600, modal: 700, command: 800, toast: 900 };
3
+ const documentLocks = new WeakMap();
4
+ const backgroundLocks = new WeakMap();
5
+ function acquireDocumentLock(owner) {
6
+ const state = documentLocks.get(owner);
7
+ if (state) {
8
+ state.count += 1;
9
+ return;
10
+ }
11
+ documentLocks.set(owner, { count: 1, overflow: owner.documentElement.style.overflow });
12
+ owner.documentElement.style.overflow = 'hidden';
13
+ }
14
+ function releaseDocumentLock(owner) {
15
+ const state = documentLocks.get(owner);
16
+ if (!state)
17
+ return;
18
+ state.count -= 1;
19
+ if (state.count > 0)
20
+ return;
21
+ owner.documentElement.style.overflow = state.overflow;
22
+ documentLocks.delete(owner);
23
+ }
24
+ function acquireBackgroundLock(background) {
25
+ const state = backgroundLocks.get(background);
26
+ if (state) {
27
+ state.count += 1;
28
+ return;
29
+ }
30
+ backgroundLocks.set(background, { count: 1, inert: Boolean(background.inert), ariaHidden: background.getAttribute('aria-hidden') });
31
+ background.inert = true;
32
+ background.setAttribute('aria-hidden', 'true');
33
+ }
34
+ function releaseBackgroundLock(background) {
35
+ const state = backgroundLocks.get(background);
36
+ if (!state)
37
+ return;
38
+ state.count -= 1;
39
+ if (state.count > 0)
40
+ return;
41
+ background.inert = state.inert;
42
+ if (state.ariaHidden === null)
43
+ background.removeAttribute('aria-hidden');
44
+ else
45
+ background.setAttribute('aria-hidden', state.ariaHidden);
46
+ backgroundLocks.delete(background);
47
+ }
48
+ function isBlocking(surface) {
49
+ return surface === 'modal' || surface === 'drawer' || surface === 'command';
50
+ }
51
+ export class PortalRegistry {
52
+ owner;
53
+ background;
54
+ roots = new Map();
55
+ overlays = [];
56
+ locked = false;
57
+ constructor(owner, background) {
58
+ this.owner = owner;
59
+ this.background = background;
60
+ }
61
+ get ownerDocument() { return this.owner.ownerDocument; }
62
+ root(surface) {
63
+ let root = this.roots.get(surface);
64
+ if (!root) {
65
+ root = this.owner.ownerDocument.createElement('div');
66
+ root.dataset.iotaPortal = surface;
67
+ root.style.position = 'relative';
68
+ root.style.zIndex = String(zLayers[surface]);
69
+ this.owner.append(root);
70
+ this.roots.set(surface, root);
71
+ }
72
+ return root;
73
+ }
74
+ mount(entry) {
75
+ this.overlays.push(entry);
76
+ this.sync();
77
+ return () => {
78
+ const index = this.overlays.findIndex((candidate) => candidate.id === entry.id);
79
+ if (index < 0)
80
+ return;
81
+ const wasTopBlocking = isBlocking(entry.surface) && !this.overlays.slice(index + 1).some(({ surface }) => isBlocking(surface));
82
+ const nextBlocking = this.overlays.slice(index + 1).find(({ surface }) => isBlocking(surface));
83
+ this.overlays.splice(index, 1);
84
+ // A nested overlay normally restores into its parent. If that parent is
85
+ // removed first, preserve the parent's still-connected restore target.
86
+ if (nextBlocking && !nextBlocking.restore?.isConnected)
87
+ nextBlocking.restore = entry.restore;
88
+ this.sync();
89
+ if (wasTopBlocking && entry.restore?.isConnected)
90
+ entry.restore.focus();
91
+ };
92
+ }
93
+ destroy() {
94
+ const restore = this.overlays.find(({ surface }) => isBlocking(surface))?.restore;
95
+ this.overlays.splice(0);
96
+ this.sync();
97
+ for (const root of this.roots.values())
98
+ root.remove();
99
+ this.roots.clear();
100
+ if (restore?.isConnected)
101
+ restore.focus();
102
+ }
103
+ sync() {
104
+ const blocking = this.overlays.some(({ surface }) => isBlocking(surface));
105
+ if (blocking && !this.locked) {
106
+ this.locked = true;
107
+ acquireDocumentLock(this.owner.ownerDocument);
108
+ if (this.background)
109
+ acquireBackgroundLock(this.background);
110
+ }
111
+ else if (!blocking && this.locked) {
112
+ this.locked = false;
113
+ releaseDocumentLock(this.owner.ownerDocument);
114
+ if (this.background)
115
+ releaseBackgroundLock(this.background);
116
+ }
117
+ }
118
+ }
@@ -1,6 +1,6 @@
1
1
  import { type PropsWithChildren, type ReactNode } from 'react';
2
- export type PortalSurface = 'modal' | 'drawer' | 'toast' | 'command';
3
- export type WidgetSlotName = 'navigation-leading' | 'navigation-trailing' | 'header-actions' | 'document-status';
2
+ import { type PortalSurface, type WidgetSlotName } from './portal-host';
3
+ export type { PortalSurface, WidgetSlotName } from './portal-host';
4
4
  export interface ClientHostProviderProps extends PropsWithChildren {
5
5
  portalOwner: HTMLElement;
6
6
  background?: HTMLElement | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"portals.d.ts","sourceRoot":"","sources":["../src/portals.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAA2D,MAAM,OAAO,CAAA;AAG1J,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;AACpE,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,qBAAqB,GAAG,gBAAgB,GAAG,iBAAiB,CAAA;AA2EhH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,GAAG,SAAS,CAAA;IACtE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CACrC;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CAQzH;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IAAG,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE;AAErK,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,+BA0B3F;AAED;2EAC2E;AAC3E,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC;IAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,gHAIlH;AAaD,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,sCAG3F"}
1
+ {"version":3,"file":"portals.d.ts","sourceRoot":"","sources":["../src/portals.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,iBAAiB,EAAE,KAAK,SAAS,EAA2D,MAAM,OAAO,CAAA;AAE1J,OAAO,EAAkB,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAKlE,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,GAAG,SAAS,CAAA;IACtE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CACrC;AAED,oFAAoF;AACpF,wBAAgB,kBAAkB,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,WAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CAazH;AAED,MAAM,WAAW,WAAY,SAAQ,iBAAiB;IAAG,OAAO,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;CAAE;AAErK,wBAAgB,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,+BA0B3F;AAED;2EAC2E;AAC3E,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,iBAAiB,CAAC;IAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC,gHAIlH;AAaD,2FAA2F;AAC3F,wBAAgB,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,sCAG3F"}
@@ -1,90 +1,25 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { createContext, useContext, useEffect, useId, useMemo, useRef, useState } from 'react';
3
3
  import { createPortal } from 'react-dom';
4
- const zLayers = { drawer: 600, modal: 700, command: 800, toast: 900 };
5
- class PortalRegistry {
6
- owner;
7
- background;
8
- roots = new Map();
9
- overlays = [];
10
- lockState;
11
- constructor(owner, background) {
12
- this.owner = owner;
13
- this.background = background;
14
- }
15
- root(surface) {
16
- let root = this.roots.get(surface);
17
- if (!root) {
18
- root = document.createElement('div');
19
- root.dataset.iotaPortal = surface;
20
- root.style.position = 'relative';
21
- root.style.zIndex = String(zLayers[surface]);
22
- this.owner.append(root);
23
- this.roots.set(surface, root);
24
- }
25
- return root;
26
- }
27
- mount(entry) {
28
- this.overlays.push(entry);
29
- this.sync();
30
- return () => {
31
- const index = this.overlays.findIndex((candidate) => candidate.id === entry.id);
32
- const wasTop = index === this.overlays.length - 1;
33
- if (index >= 0)
34
- this.overlays.splice(index, 1);
35
- this.sync();
36
- if (wasTop)
37
- entry.restore?.focus();
38
- };
39
- }
40
- destroy() {
41
- this.overlays.splice(0);
42
- this.sync();
43
- for (const root of this.roots.values())
44
- root.remove();
45
- this.roots.clear();
46
- }
47
- sync() {
48
- const blocking = this.overlays.some(({ surface }) => surface === 'modal' || surface === 'drawer' || surface === 'command');
49
- if (blocking && !this.lockState) {
50
- this.lockState = {
51
- overflow: document.documentElement.style.overflow,
52
- ...(this.background ? {
53
- inert: this.background.inert,
54
- ariaHidden: this.background.getAttribute('aria-hidden'),
55
- } : {}),
56
- };
57
- document.documentElement.style.overflow = 'hidden';
58
- if (!this.background)
59
- return;
60
- this.background.inert = blocking;
61
- this.background.setAttribute('aria-hidden', 'true');
62
- return;
63
- }
64
- if (!blocking && this.lockState) {
65
- document.documentElement.style.overflow = this.lockState.overflow;
66
- if (this.background) {
67
- this.background.inert = this.lockState.inert ?? false;
68
- if (this.lockState.ariaHidden === null || this.lockState.ariaHidden === undefined)
69
- this.background.removeAttribute('aria-hidden');
70
- else
71
- this.background.setAttribute('aria-hidden', this.lockState.ariaHidden);
72
- }
73
- this.lockState = undefined;
74
- }
75
- }
76
- }
4
+ import { PortalRegistry } from './portal-host';
77
5
  const PortalContext = createContext(undefined);
78
6
  const WidgetContext = createContext(new Map());
79
7
  /** Owns document-lifetime portal roots; feature roots must never append to body. */
80
8
  export function ClientHostProvider({ portalOwner, background, widgetSlots = {}, theme, children }) {
81
9
  const registry = useMemo(() => new PortalRegistry(portalOwner, background), [portalOwner, background]);
82
10
  const slots = useMemo(() => new Map(Object.entries(widgetSlots)), [widgetSlots]);
11
+ useEffect(() => () => registry.destroy(), [registry]);
83
12
  useEffect(() => {
13
+ const baseTheme = portalOwner.getAttribute('data-theme');
84
14
  if (theme)
85
15
  portalOwner.dataset.theme = theme;
86
- return () => { registry.destroy(); delete portalOwner.dataset.theme; };
87
- }, [portalOwner, registry, theme]);
16
+ return () => {
17
+ if (baseTheme === null)
18
+ delete portalOwner.dataset.theme;
19
+ else
20
+ portalOwner.setAttribute('data-theme', baseTheme);
21
+ };
22
+ }, [portalOwner, theme]);
88
23
  return _jsx(PortalContext.Provider, { value: registry, children: _jsx(WidgetContext.Provider, { value: slots, children: children }) });
89
24
  }
90
25
  export function Portal({ surface, label, className, onEscape, theme, children }) {
@@ -93,7 +28,7 @@ export function Portal({ surface, label, className, onEscape, theme, children })
93
28
  throw new Error('Portal must be rendered inside ClientHostProvider');
94
29
  const id = useId();
95
30
  const content = useRef(null);
96
- useEffect(() => registry.mount({ id, surface, restore: document.activeElement }), [id, registry, surface]);
31
+ useEffect(() => registry.mount({ id, surface, restore: registry.ownerDocument.activeElement }), [id, registry, surface]);
97
32
  useEffect(() => {
98
33
  if (surface === 'toast')
99
34
  return;
@@ -118,11 +53,11 @@ export function Portal({ surface, label, className, onEscape, theme, children })
118
53
  }
119
54
  const first = focusable[0];
120
55
  const last = focusable.at(-1);
121
- if (event.shiftKey && document.activeElement === first) {
56
+ if (event.shiftKey && registry.ownerDocument.activeElement === first) {
122
57
  event.preventDefault();
123
58
  last?.focus();
124
59
  }
125
- else if (!event.shiftKey && document.activeElement === last) {
60
+ else if (!event.shiftKey && registry.ownerDocument.activeElement === last) {
126
61
  event.preventDefault();
127
62
  first?.focus();
128
63
  }
@@ -8,6 +8,7 @@ export * from './protocol';
8
8
  export * from './rpc-core';
9
9
  export * from './services';
10
10
  export * from './solid';
11
+ export * from './solid-portals';
11
12
  export * from './solid-rpc';
12
13
  export * from './transport';
13
14
  //# sourceMappingURL=solid-index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solid-index.d.ts","sourceRoot":"","sources":["../src/solid-index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"solid-index.d.ts","sourceRoot":"","sources":["../src/solid-index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,YAAY,CAAA;AAC1B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -8,5 +8,6 @@ export * from './protocol';
8
8
  export * from './rpc-core';
9
9
  export * from './services';
10
10
  export * from './solid';
11
+ export * from './solid-portals';
11
12
  export * from './solid-rpc';
12
13
  export * from './transport';
@@ -0,0 +1,27 @@
1
+ import { type JSX } from 'solid-js';
2
+ import { PortalRegistry, type PortalSurface, type WidgetSlotName } from './portal-host';
3
+ export type { PortalSurface, WidgetSlotName } from './portal-host';
4
+ export interface SolidPortalHost {
5
+ registry: PortalRegistry;
6
+ slots: ReadonlyMap<WidgetSlotName, HTMLElement>;
7
+ registerCleanup(cleanup: () => void): () => void;
8
+ }
9
+ export declare function SolidPortalHostProvider(props: {
10
+ host: SolidPortalHost;
11
+ children: JSX.Element;
12
+ }): JSX.Element;
13
+ export interface PortalProps {
14
+ surface: PortalSurface;
15
+ label: string;
16
+ class?: string;
17
+ className?: string;
18
+ onEscape?: () => void;
19
+ theme?: 'light' | 'dark';
20
+ children?: JSX.Element;
21
+ }
22
+ export declare function Portal(props: PortalProps): JSX.Element;
23
+ export declare function WidgetSlot(props: {
24
+ name: WidgetSlotName;
25
+ children?: JSX.Element;
26
+ }): JSX.Element;
27
+ //# sourceMappingURL=solid-portals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid-portals.d.ts","sourceRoot":"","sources":["../src/solid-portals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgG,KAAK,GAAG,EAAE,MAAM,UAAU,CAAA;AAEjI,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AAEvF,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAElE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAA;IACxB,KAAK,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IAC/C,eAAe,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CACjD;AAID,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CAK5G;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,aAAa,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CACvB;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,OAAO,CAqEtD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE,GAAG,GAAG,CAAC,OAAO,CA0B/F"}
@@ -0,0 +1,112 @@
1
+ import { createComponent, createContext, createEffect, createUniqueId, onCleanup, onMount, useContext } from 'solid-js';
2
+ import { insert } from 'solid-js/web';
3
+ const PortalHostContext = createContext();
4
+ export function SolidPortalHostProvider(props) {
5
+ return createComponent(PortalHostContext.Provider, {
6
+ value: props.host,
7
+ get children() { return props.children; },
8
+ });
9
+ }
10
+ const focusableSelector = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
11
+ export function Portal(props) {
12
+ const host = useContext(PortalHostContext);
13
+ if (!host)
14
+ throw new Error('Portal must be rendered inside a mounted Solid client route with a portal owner');
15
+ const id = createUniqueId();
16
+ const document = host.registry.ownerDocument;
17
+ const content = document.createElement('div');
18
+ const marker = document.createTextNode('');
19
+ const activeElement = document.activeElement;
20
+ const restore = activeElement && 'focus' in activeElement ? activeElement : null;
21
+ let unmountOverlay = () => undefined;
22
+ let unregisterHostCleanup = () => undefined;
23
+ let cleaned = false;
24
+ insert(content, () => props.children);
25
+ createEffect(() => {
26
+ content.className = props.class ?? props.className ?? '';
27
+ content.dataset.iotaSurface = props.surface;
28
+ if (props.theme)
29
+ content.dataset.theme = props.theme;
30
+ else
31
+ delete content.dataset.theme;
32
+ });
33
+ content.setAttribute('role', props.surface === 'toast' ? 'status' : 'dialog');
34
+ content.setAttribute('aria-label', props.label);
35
+ content.tabIndex = -1;
36
+ if (props.surface !== 'toast')
37
+ content.setAttribute('aria-modal', 'true');
38
+ const onKeyDown = (event) => {
39
+ if (event.key === 'Escape' && props.onEscape) {
40
+ event.preventDefault();
41
+ event.stopPropagation();
42
+ props.onEscape();
43
+ return;
44
+ }
45
+ if (event.key !== 'Tab' || props.surface === 'toast')
46
+ return;
47
+ const focusable = Array.from(content.querySelectorAll(focusableSelector));
48
+ if (focusable.length === 0) {
49
+ event.preventDefault();
50
+ content.focus();
51
+ return;
52
+ }
53
+ const first = focusable[0];
54
+ const last = focusable.at(-1);
55
+ if (event.shiftKey && document.activeElement === first) {
56
+ event.preventDefault();
57
+ last?.focus();
58
+ }
59
+ else if (!event.shiftKey && document.activeElement === last) {
60
+ event.preventDefault();
61
+ first?.focus();
62
+ }
63
+ };
64
+ content.addEventListener('keydown', onKeyDown);
65
+ const cleanup = () => {
66
+ if (cleaned)
67
+ return;
68
+ cleaned = true;
69
+ content.removeEventListener('keydown', onKeyDown);
70
+ content.remove();
71
+ unmountOverlay();
72
+ unregisterHostCleanup();
73
+ };
74
+ onMount(() => {
75
+ host.registry.root(props.surface).append(content);
76
+ unmountOverlay = host.registry.mount({ id, surface: props.surface, restore });
77
+ unregisterHostCleanup = host.registerCleanup(cleanup);
78
+ if (props.surface !== 'toast')
79
+ (content.querySelector(focusableSelector) ?? content).focus();
80
+ });
81
+ onCleanup(cleanup);
82
+ return marker;
83
+ }
84
+ export function WidgetSlot(props) {
85
+ const host = useContext(PortalHostContext);
86
+ if (!host)
87
+ throw new Error('WidgetSlot must be rendered inside a mounted Solid client route with a portal owner');
88
+ const slot = host.slots.get(props.name);
89
+ if (!slot) {
90
+ host.registry.ownerDocument.defaultView?.console.warn(`Solid widget slot ${props.name} is unavailable`);
91
+ return undefined;
92
+ }
93
+ const container = slot.ownerDocument.createElement('div');
94
+ const marker = slot.ownerDocument.createTextNode('');
95
+ let unregisterHostCleanup = () => undefined;
96
+ let cleaned = false;
97
+ container.style.display = 'contents';
98
+ insert(container, () => props.children);
99
+ const cleanup = () => {
100
+ if (cleaned)
101
+ return;
102
+ cleaned = true;
103
+ container.remove();
104
+ unregisterHostCleanup();
105
+ };
106
+ onMount(() => {
107
+ slot.append(container);
108
+ unregisterHostCleanup = host.registerCleanup(cleanup);
109
+ });
110
+ onCleanup(cleanup);
111
+ return marker;
112
+ }
@@ -1,5 +1,6 @@
1
1
  import { type Component } from 'solid-js';
2
2
  import { type ClientRouteContext } from './bootstrap';
3
+ import { type WidgetSlotName } from './portal-host';
3
4
  import { type ClientHostServices } from './services';
4
5
  export declare function useClientHost(): ClientHostServices;
5
6
  export interface SolidRouteProps<TInitial = unknown> {
@@ -11,7 +12,21 @@ export interface MountSolidClientRouteOptions<TInitial, TProps extends object> {
11
12
  props: TProps;
12
13
  context: ClientRouteContext<TInitial>;
13
14
  services?: ClientHostServices;
15
+ portals?: HTMLElement;
16
+ background?: HTMLElement;
17
+ widgetSlots?: Partial<Record<WidgetSlotName, HTMLElement>>;
14
18
  }
15
19
  export declare function mountSolidClientRoute<TInitial, TProps extends object>(options: MountSolidClientRouteOptions<TInitial, TProps>): () => void;
16
20
  export declare function mountSolidClientRouteFromDocument<TInitial, TProps extends object>(component: Component<TProps & SolidRouteProps<TInitial>>, props: TProps, owner?: Document): () => void;
21
+ export interface SolidFeatureModule {
22
+ default: Component<SolidRouteProps<never>>;
23
+ }
24
+ export type SolidFeatureCatalog = Record<string, () => Promise<SolidFeatureModule>>;
25
+ export interface MountSolidFeatureCatalogOptions {
26
+ catalog: SolidFeatureCatalog;
27
+ owner?: Document;
28
+ /** Must navigate or dispose the current mount so Retry does not retain ownership. */
29
+ reload?: () => void;
30
+ }
31
+ export declare function mountSolidFeatureCatalogFromDocument(options: MountSolidFeatureCatalogOptions): () => void;
17
32
  //# sourceMappingURL=solid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../src/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AAErF,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAI9E,wBAAgB,aAAa,IAAI,kBAAkB,CAIlD;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,4BAA4B,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM;IAC3E,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CAmD1I;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAC/E,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,EACxD,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,QAAmB,GACzB,MAAM,IAAI,CAIZ"}
1
+ {"version":3,"file":"solid.d.ts","sourceRoot":"","sources":["../src/solid.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8C,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AAErF,OAAO,EAA8C,KAAK,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAA;AACtF,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAK9E,wBAAgB,aAAa,IAAI,kBAAkB,CAIlD;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,GAAG,OAAO;IACjD,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;CACpC;AAED,MAAM,WAAW,4BAA4B,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM;IAC3E,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAA;IACxD,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAA;IACrC,QAAQ,CAAC,EAAE,kBAAkB,CAAA;IAC7B,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,UAAU,CAAC,EAAE,WAAW,CAAA;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC,CAAA;CAC3D;AAoED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAAE,OAAO,EAAE,4BAA4B,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,MAAM,IAAI,CA6F1I;AAED,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,MAAM,SAAS,MAAM,EAC/E,SAAS,EAAE,SAAS,CAAC,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,EACxD,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,QAAmB,GACzB,MAAM,IAAI,CAcZ;AAED,MAAM,WAAW,kBAAkB;IAGjC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAA;CAC3C;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAA;AAEnF,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,mBAAmB,CAAA;IAC5B,KAAK,CAAC,EAAE,QAAQ,CAAA;IAChB,qFAAqF;IACrF,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CACpB;AAeD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,+BAA+B,GACvC,MAAM,IAAI,CAsGZ"}