@ai-ecoverse/slicc-spectrum 1.0.0 → 1.1.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 (80) hide show
  1. package/README.md +63 -3
  2. package/dist/chunk-24WRGUXG.js +168 -0
  3. package/dist/chunk-24WRGUXG.js.map +7 -0
  4. package/dist/chunk-364Y2XOJ.js +28 -0
  5. package/dist/chunk-364Y2XOJ.js.map +7 -0
  6. package/dist/chunk-4RGMMAR4.js +18 -0
  7. package/dist/chunk-4RGMMAR4.js.map +7 -0
  8. package/dist/chunk-5OVGH7HO.js +28 -0
  9. package/dist/chunk-5OVGH7HO.js.map +7 -0
  10. package/dist/chunk-6A6NIESE.js +9 -0
  11. package/dist/chunk-6A6NIESE.js.map +7 -0
  12. package/dist/chunk-EN3XGF2M.js +26 -0
  13. package/dist/chunk-EN3XGF2M.js.map +7 -0
  14. package/dist/chunk-ER3HU7OE.js +22 -0
  15. package/dist/chunk-ER3HU7OE.js.map +7 -0
  16. package/dist/chunk-FN3Y2AYJ.js +17 -0
  17. package/dist/chunk-FN3Y2AYJ.js.map +7 -0
  18. package/dist/chunk-H5WU2XYY.js +8 -0
  19. package/dist/chunk-H5WU2XYY.js.map +7 -0
  20. package/dist/chunk-HBUX7E54.js +234 -0
  21. package/dist/chunk-HBUX7E54.js.map +7 -0
  22. package/dist/chunk-IBQ4O4NO.js +13 -0
  23. package/dist/chunk-IBQ4O4NO.js.map +7 -0
  24. package/dist/chunk-J45KH7MF.js +180 -0
  25. package/dist/chunk-J45KH7MF.js.map +7 -0
  26. package/dist/chunk-JASEW37G.js +411 -0
  27. package/dist/chunk-JASEW37G.js.map +7 -0
  28. package/dist/chunk-MR7SU4GJ.js +59 -0
  29. package/dist/chunk-MR7SU4GJ.js.map +7 -0
  30. package/dist/chunk-MTF6JFSL.js +1093 -0
  31. package/dist/chunk-MTF6JFSL.js.map +7 -0
  32. package/dist/chunk-Q4AC2O6Z.js +13 -0
  33. package/dist/chunk-Q4AC2O6Z.js.map +7 -0
  34. package/dist/chunk-SZ33GAVH.js +2638 -0
  35. package/dist/chunk-SZ33GAVH.js.map +7 -0
  36. package/dist/chunk-T5NHW4KC.js +23 -0
  37. package/dist/chunk-T5NHW4KC.js.map +7 -0
  38. package/dist/chunk-T5QFSUYQ.js +8 -0
  39. package/dist/chunk-T5QFSUYQ.js.map +7 -0
  40. package/dist/chunk-TS7SL372.js +687 -0
  41. package/dist/chunk-TS7SL372.js.map +7 -0
  42. package/dist/chunk-Y4Z7K443.js +64 -0
  43. package/dist/chunk-Y4Z7K443.js.map +7 -0
  44. package/dist/chunk-ZMBN6APP.js +11 -0
  45. package/dist/chunk-ZMBN6APP.js.map +7 -0
  46. package/dist/chunk-ZTPYBVZL.js +181 -0
  47. package/dist/chunk-ZTPYBVZL.js.map +7 -0
  48. package/dist/fonts/source-code-pro-latin-400-normal.woff2 +0 -0
  49. package/dist/fonts/source-code-pro-latin-600-normal.woff2 +0 -0
  50. package/dist/slicc-dummy.js +1393 -0
  51. package/dist/slicc-dummy.js.map +7 -0
  52. package/dist/slicc-terminal.js +2 -27
  53. package/dist/slicc-terminal.js.map +4 -4
  54. package/dist/slicc-ui.js +22441 -0
  55. package/dist/slicc-ui.js.map +7 -0
  56. package/dist/types/app/agents.d.ts +11 -0
  57. package/dist/types/app/app.d.ts +40 -0
  58. package/dist/types/app/base.d.ts +27 -0
  59. package/dist/types/app/chat.d.ts +23 -0
  60. package/dist/types/app/fonts.d.ts +3 -0
  61. package/dist/types/app/markdown.d.ts +24 -0
  62. package/dist/types/app/panels.d.ts +31 -0
  63. package/dist/types/app/spectrum.d.ts +19 -0
  64. package/dist/types/components/dock.d.ts +24 -0
  65. package/dist/types/components/sheets.d.ts +1 -0
  66. package/dist/types/dummy/agent.d.ts +14 -0
  67. package/dist/types/dummy/browser.d.ts +15 -0
  68. package/dist/types/dummy/clock.d.ts +5 -0
  69. package/dist/types/dummy/files.d.ts +14 -0
  70. package/dist/types/dummy/fixtures.d.ts +11 -0
  71. package/dist/types/dummy/index.d.ts +6 -0
  72. package/dist/types/dummy/script.d.ts +23 -0
  73. package/dist/types/dummy/settings.d.ts +13 -0
  74. package/dist/types/dummy/shell.d.ts +16 -0
  75. package/dist/types/dummy/terminals.d.ts +15 -0
  76. package/dist/types/dummy.d.ts +2 -0
  77. package/dist/types/model/emitter.d.ts +9 -0
  78. package/dist/types/model/types.d.ts +183 -0
  79. package/dist/types/ui.d.ts +15 -0
  80. package/package.json +29 -11
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # slicc-spectrum
2
2
 
3
- Web components for SLICC. The first one is `<slicc-terminal>`, a terminal built on [wterm](https://github.com/vercel-labs/wterm) (`@wterm/dom` 0.5.4, Zig/WASM VT core) that talks to [`@ai-ecoverse/slicc-kernel`](https://github.com/ai-ecoverse/slicc-kernel) through a small backend interface. It is a standards custom element with no framework and no shadow root, so it can move to a shared web-components repo unchanged.
3
+ Web components for SLICC: `<slicc-terminal>`, and SLICC's app UI on [Spectrum Web Components](https://opensource.adobe.com/spectrum-web-components/) (see [UI](#ui)). `<slicc-terminal>` is a terminal built on [wterm](https://github.com/vercel-labs/wterm) (`@wterm/dom` 0.5.4, Zig/WASM VT core) that talks to [`@ai-ecoverse/slicc-kernel`](https://github.com/ai-ecoverse/slicc-kernel) through a small backend interface. It is a standards custom element with no framework and no shadow root, so it can move to a shared web-components repo unchanged.
4
4
 
5
5
  ```html
6
6
  <slicc-terminal></slicc-terminal>
@@ -100,6 +100,64 @@ Things found while building this against wterm 0.5.4, recorded here, not pushed
100
100
  - `@wterm/core` always ships the WASM inlined as base64 behind a dynamic import. A build without it, or an explicit entry point that takes a URL, would save the bundler plugin.
101
101
  - wterm reads focus and selection from `ownerDocument` (`activeElement`, `getSelection()`), so selection and copy don't work inside a shadow root that wterm itself owns. That's why the element renders in light DOM. It still works when the element is placed inside someone else's shadow root.
102
102
 
103
+ ## UI
104
+
105
+ `dist/slicc-ui.js` is SLICC's app shell on Spectrum Web Components 1.12 with the Spectrum 2 theme (`<sp-theme system="spectrum-two">`), in light and dark. It runs against a typed model, not against the kernel, the agent or the browser directly, and is not wired to any of them yet. `dist/slicc-dummy.js` provides a dummy model that streams replies and tool calls with timers.
106
+
107
+ ```html
108
+ <slicc-app></slicc-app>
109
+ <script type="module">
110
+ import { createDummyModel } from './dist/slicc-dummy.js';
111
+ import './dist/slicc-ui.js';
112
+
113
+ document.querySelector('slicc-app').model = createDummyModel({ storage: localStorage });
114
+ </script>
115
+ ```
116
+
117
+ `npm start` serves it at `/ui/`. `?fonts=<url>` loads Adobe Clean from another folder (see [Fonts](#fonts)).
118
+
119
+ ### Layouts and rails
120
+
121
+ The layout follows the width of `<slicc-app>`, which it reflects as its `screen` attribute: `phone` (under 640 px) has one column, `tablet` (under 1200 px) two, `desktop` three, like SLICC v6. Each screen class starts with few panels open and saves its own layout (`slicc-ui.layout.<screen>`). Every surface has a home side, left, center or right. Closed panels wait as icons in the left and right rails (on a phone, in one bar at the bottom); one click puts a panel back on its side, next to its neighbours.
122
+
123
+ ### Fonts
124
+
125
+ Text is Adobe Clean and code Spectrum's Source Code Pro. Source Code Pro (OFL) is in `dist/fonts/`, same origin. Adobe Clean can't ship in a public package, so `<slicc-app>` loads it from `fontBase` (`AdobeClean-{Regular,Medium,Bold,ExtraBold}.otf`), which defaults to `/fonts/` on the current origin. Every `*.sliccy.ai` host passes it through to v6, and `npm start` proxies it from `seven.sliccy.ai`. Where it 404s, text falls back to the system font stack. `?delay=` sets the dummy's tick in milliseconds (default 30) and `?color=light|dark|system` the theme.
126
+
127
+ ### Elements
128
+
129
+ | Element | |
130
+ | :--- | :--- |
131
+ | `<slicc-app>` | The shell: header with the agent picker, the View menu and the theme switch, rails, a `<slicc-dock>`, and a status bar. Saves the dock layout per screen class to `storage` (default `localStorage`) under `layoutKey`. |
132
+ | `<slicc-dock>` | Generic. [dockview-core](https://dockview.dev/) 8 with a theme mapped to Spectrum tokens, in its own shadow root. Panels come from `factories` (`name → (params) => HTMLElement`). `open`, `close`, `has`, `content`, `focusPanel`, `cycleGroup`, `cycleTab`, `toJSON`, `restore`, `clear`, and the full `api`. Tabs have a context menu (close, close others, float, maximize). Events: `layout-change`, `active-panel-change`, `panel-close`. |
133
+ | `<slicc-agents>` | Cones with their scoops, status, context fill and unread count. Selecting one makes it the active agent. |
134
+ | `<slicc-chat>` | The active agent's conversation: Markdown, thinking, tool calls (collapsible, with input and output), events such as webhooks, schedules, scoops, compaction and errors, and a composer that streams and stops. |
135
+
136
+ Keys: <kbd>Alt</kbd>+<kbd>1</kbd>… opens and focuses a panel, <kbd>F6</kbd> and <kbd>Shift</kbd>+<kbd>F6</kbd> move between groups, <kbd>Ctrl</kbd>+<kbd>]</kbd> and <kbd>Ctrl</kbd>+<kbd>[</kbd> between tabs, <kbd>Alt</kbd>+<kbd>Shift</kbd>+<kbd>T</kbd> switches the theme. In the agents list, arrows, <kbd>Home</kbd>, <kbd>End</kbd>, <kbd>Enter</kbd> and <kbd>Space</kbd>. In the composer, <kbd>Enter</kbd> sends, <kbd>Shift</kbd>+<kbd>Enter</kbd> adds a line and <kbd>Esc</kbd> stops a reply.
137
+
138
+ ### Model
139
+
140
+ `SliccModel` (`src/model/types.ts`) has one port per future backend, so adapters can replace the dummy without UI changes. Every port is subscribable with `on(type, listener)`, which returns an unsubscribe function.
141
+
142
+ | Port | Later backed by | |
143
+ | :--- | :--- | :--- |
144
+ | `agent` | `@ai-ecoverse/slicc-agent` | Cones and scoops, the active agent, conversations, `send` and `stop`. Assistant messages stream: the same message is re-emitted as its parts grow and its tool calls go from `running` to `done`. |
145
+ | `files` | slicc-kernel's OPFS | `list`, `read`, `write`, `remove`, and pending changes with their before and after text (`accept`, `revert`). |
146
+ | `terminals` | slicc-kernel's terminal API | Terminal sessions; `backend(id)` returns a `TerminalBackend` for `<slicc-terminal>`. |
147
+ | `browser` | `@ai-ecoverse/slicc-cdp` | Tabs, the active tab, `open`, `navigate`, `close`, `screenshot`. |
148
+ | `settings` | local storage | Theme, model, thinking level, composer and diff preferences, the models on offer, and accounts. |
149
+
150
+ The dummy's fixtures are invented: a small forecast API called harbor, with cones, scoops, a conversation per agent, pending changes, browser tabs and accounts. Its replies are scripted by keyword (tests, fix or add, open or docs, files, anything else), and their tool calls act on the other ports: an edit writes a file and shows up as a change, a browse opens a tab.
151
+
152
+ ### Distribution
153
+
154
+ The UI is ESM with code splitting: `slicc-ui.js`, `slicc-dummy.js` and `chunk-*.js` next to them in `dist/`, with no bare imports, so the folder can be served as plain files from OPFS. dockview's ESM build has no CSS; the build takes it from dockview's UMD bundle. Types are in `dist/types/ui.d.ts` and `dist/types/dummy.d.ts`, exported as `@ai-ecoverse/slicc-spectrum/ui` and `/dummy`.
155
+
156
+ ### dockview notes
157
+
158
+ - Keyboard navigation (`keyboardNavigation`) needs dockview-enterprise, so `<slicc-dock>` implements <kbd>F6</kbd> and <kbd>Ctrl</kbd>+<kbd>]</kbd>/<kbd>[</kbd> itself.
159
+ - A floating group with a border (`--dv-floating-border`, which dockview's own light theme sets) grows by twice the border width on every save and restore. The theme draws the edge with a box shadow instead.
160
+
103
161
  ## Development
104
162
 
105
163
  ```sh
@@ -108,9 +166,11 @@ npm run lint
108
166
  npm test
109
167
  ```
110
168
 
111
- `npm test` builds `dist/` and runs the integration tests in headless Chromium over raw CDP against a fake backend (`test/integration/page/fake-backend.js`). It writes V8 coverage to `coverage/` and CPU profiles, screenshots and console logs to `artifacts/`. The test page is served cross-origin isolated (COOP/COEP), as slicc-kernel requires. `test/integration/kernel.test.mjs` runs `bash -i` end to end on `@ai-ecoverse/slicc-kernel` (a pinned dev dependency), with `@ai-ecoverse/wasm-bash` and `@ai-ecoverse/wasm-coreutils` installed into OPFS by the page (`/kernel.html`). `npm start` serves the test page on port 8080.
169
+ `npm test` builds `dist/` and runs the integration tests in headless Chromium over raw CDP, through the [harness from slicc-shared-web](https://github.com/ai-ecoverse/slicc-shared-web#integration-test-harness), against a fake backend (`test/integration/page/fake-backend.js`). It writes V8 coverage to `coverage/` and CPU profiles, screenshots and console logs to `artifacts/`. The test page is served cross-origin isolated (COOP/COEP), as slicc-kernel requires. `test/integration/kernel.test.mjs` runs `bash -i` end to end on `@ai-ecoverse/slicc-kernel` (a pinned dev dependency), with `@ai-ecoverse/wasm-bash` and `@ai-ecoverse/wasm-coreutils` installed into OPFS by the page (`/kernel.html`). `npm start` serves the test page on port 8080, and the UI at `/ui/`. `test/integration/ui.test.mjs` covers the shell, the layout (moving, closing, floating, reopening and reloading), streaming a reply with a tool call, stopping it, switching themes and the keyboard, and saves screenshots to `artifacts/ui/`.
170
+
171
+ The Biome, TypeScript, lefthook, Renovate and CI configuration comes from [slicc-shared-web](https://github.com/ai-ecoverse/slicc-shared-web), which also provides the `slicc-lint-comments`, `slicc-no-unit-tests` and `slicc-diff-cover` commands used by `npm run lint` and the pre-commit hook.
112
172
 
113
- Unit tests live in `test/unit/`, which is gitignored. The pre-commit hook runs them in Node against happy-dom under monocart and fails the commit unless the staged lines in `src/` are fully covered (`diff-cover --fail-under 100`).
173
+ Unit tests live in `test/unit/`, which is gitignored. The pre-commit hook runs them in Node against happy-dom under monocart and fails the commit unless the staged lines in `src/` are fully covered (`slicc-diff-cover`, which runs `diff-cover --fail-under 100` and needs [uv](https://docs.astral.sh/uv/)).
114
174
 
115
175
  ## License
116
176
 
@@ -0,0 +1,168 @@
1
+ import {
2
+ __commonJS
3
+ } from "./chunk-Q4AC2O6Z.js";
4
+
5
+ // node_modules/focus-visible/dist/focus-visible.js
6
+ var require_focus_visible = __commonJS({
7
+ "node_modules/focus-visible/dist/focus-visible.js"(exports, module) {
8
+ (function(global, factory) {
9
+ typeof exports === "object" && typeof module !== "undefined" ? factory() : typeof define === "function" && define.amd ? define(factory) : factory();
10
+ })(exports, (function() {
11
+ "use strict";
12
+ function applyFocusVisiblePolyfill(scope) {
13
+ var hadKeyboardEvent = true;
14
+ var hadFocusVisibleRecently = false;
15
+ var hadFocusVisibleRecentlyTimeout = null;
16
+ var inputTypesAllowlist = {
17
+ text: true,
18
+ search: true,
19
+ url: true,
20
+ tel: true,
21
+ email: true,
22
+ password: true,
23
+ number: true,
24
+ date: true,
25
+ month: true,
26
+ week: true,
27
+ time: true,
28
+ datetime: true,
29
+ "datetime-local": true
30
+ };
31
+ function isValidFocusTarget(el) {
32
+ if (el && el !== document && el.nodeName !== "HTML" && el.nodeName !== "BODY" && "classList" in el && "contains" in el.classList) {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ function focusTriggersKeyboardModality(el) {
38
+ var type = el.type;
39
+ var tagName = el.tagName;
40
+ if (tagName === "INPUT" && inputTypesAllowlist[type] && !el.readOnly) {
41
+ return true;
42
+ }
43
+ if (tagName === "TEXTAREA" && !el.readOnly) {
44
+ return true;
45
+ }
46
+ if (el.isContentEditable) {
47
+ return true;
48
+ }
49
+ return false;
50
+ }
51
+ function addFocusVisibleClass(el) {
52
+ if (el.classList.contains("focus-visible")) {
53
+ return;
54
+ }
55
+ el.classList.add("focus-visible");
56
+ el.setAttribute("data-focus-visible-added", "");
57
+ }
58
+ function removeFocusVisibleClass(el) {
59
+ if (!el.hasAttribute("data-focus-visible-added")) {
60
+ return;
61
+ }
62
+ el.classList.remove("focus-visible");
63
+ el.removeAttribute("data-focus-visible-added");
64
+ }
65
+ function onKeyDown(e) {
66
+ if (e.metaKey || e.altKey || e.ctrlKey) {
67
+ return;
68
+ }
69
+ if (isValidFocusTarget(scope.activeElement)) {
70
+ addFocusVisibleClass(scope.activeElement);
71
+ }
72
+ hadKeyboardEvent = true;
73
+ }
74
+ function onPointerDown(e) {
75
+ hadKeyboardEvent = false;
76
+ }
77
+ function onFocus(e) {
78
+ if (!isValidFocusTarget(e.target)) {
79
+ return;
80
+ }
81
+ if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {
82
+ addFocusVisibleClass(e.target);
83
+ }
84
+ }
85
+ function onBlur(e) {
86
+ if (!isValidFocusTarget(e.target)) {
87
+ return;
88
+ }
89
+ if (e.target.classList.contains("focus-visible") || e.target.hasAttribute("data-focus-visible-added")) {
90
+ hadFocusVisibleRecently = true;
91
+ window.clearTimeout(hadFocusVisibleRecentlyTimeout);
92
+ hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {
93
+ hadFocusVisibleRecently = false;
94
+ }, 100);
95
+ removeFocusVisibleClass(e.target);
96
+ }
97
+ }
98
+ function onVisibilityChange(e) {
99
+ if (document.visibilityState === "hidden") {
100
+ if (hadFocusVisibleRecently) {
101
+ hadKeyboardEvent = true;
102
+ }
103
+ addInitialPointerMoveListeners();
104
+ }
105
+ }
106
+ function addInitialPointerMoveListeners() {
107
+ document.addEventListener("mousemove", onInitialPointerMove);
108
+ document.addEventListener("mousedown", onInitialPointerMove);
109
+ document.addEventListener("mouseup", onInitialPointerMove);
110
+ document.addEventListener("pointermove", onInitialPointerMove);
111
+ document.addEventListener("pointerdown", onInitialPointerMove);
112
+ document.addEventListener("pointerup", onInitialPointerMove);
113
+ document.addEventListener("touchmove", onInitialPointerMove);
114
+ document.addEventListener("touchstart", onInitialPointerMove);
115
+ document.addEventListener("touchend", onInitialPointerMove);
116
+ }
117
+ function removeInitialPointerMoveListeners() {
118
+ document.removeEventListener("mousemove", onInitialPointerMove);
119
+ document.removeEventListener("mousedown", onInitialPointerMove);
120
+ document.removeEventListener("mouseup", onInitialPointerMove);
121
+ document.removeEventListener("pointermove", onInitialPointerMove);
122
+ document.removeEventListener("pointerdown", onInitialPointerMove);
123
+ document.removeEventListener("pointerup", onInitialPointerMove);
124
+ document.removeEventListener("touchmove", onInitialPointerMove);
125
+ document.removeEventListener("touchstart", onInitialPointerMove);
126
+ document.removeEventListener("touchend", onInitialPointerMove);
127
+ }
128
+ function onInitialPointerMove(e) {
129
+ if (e.target.nodeName && e.target.nodeName.toLowerCase() === "html") {
130
+ return;
131
+ }
132
+ hadKeyboardEvent = false;
133
+ removeInitialPointerMoveListeners();
134
+ }
135
+ document.addEventListener("keydown", onKeyDown, true);
136
+ document.addEventListener("mousedown", onPointerDown, true);
137
+ document.addEventListener("pointerdown", onPointerDown, true);
138
+ document.addEventListener("touchstart", onPointerDown, true);
139
+ document.addEventListener("visibilitychange", onVisibilityChange, true);
140
+ addInitialPointerMoveListeners();
141
+ scope.addEventListener("focus", onFocus, true);
142
+ scope.addEventListener("blur", onBlur, true);
143
+ if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {
144
+ scope.host.setAttribute("data-js-focus-visible", "");
145
+ } else if (scope.nodeType === Node.DOCUMENT_NODE) {
146
+ document.documentElement.classList.add("js-focus-visible");
147
+ document.documentElement.setAttribute("data-js-focus-visible", "");
148
+ }
149
+ }
150
+ if (typeof window !== "undefined" && typeof document !== "undefined") {
151
+ window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;
152
+ var event;
153
+ try {
154
+ event = new CustomEvent("focus-visible-polyfill-ready");
155
+ } catch (error) {
156
+ event = document.createEvent("CustomEvent");
157
+ event.initCustomEvent("focus-visible-polyfill-ready", false, false, {});
158
+ }
159
+ window.dispatchEvent(event);
160
+ }
161
+ if (typeof document !== "undefined") {
162
+ applyFocusVisiblePolyfill(document);
163
+ }
164
+ }));
165
+ }
166
+ });
167
+ export default require_focus_visible();
168
+ //# sourceMappingURL=chunk-24WRGUXG.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/focus-visible/dist/focus-visible.js"],
4
+ "sourcesContent": ["(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (factory());\n}(this, (function () { 'use strict';\n\n /**\n * Applies the :focus-visible polyfill at the given scope.\n * A scope in this case is either the top-level Document or a Shadow Root.\n *\n * @param {(Document|ShadowRoot)} scope\n * @see https://github.com/WICG/focus-visible\n */\n function applyFocusVisiblePolyfill(scope) {\n var hadKeyboardEvent = true;\n var hadFocusVisibleRecently = false;\n var hadFocusVisibleRecentlyTimeout = null;\n\n var inputTypesAllowlist = {\n text: true,\n search: true,\n url: true,\n tel: true,\n email: true,\n password: true,\n number: true,\n date: true,\n month: true,\n week: true,\n time: true,\n datetime: true,\n 'datetime-local': true\n };\n\n /**\n * Helper function for legacy browsers and iframes which sometimes focus\n * elements like document, body, and non-interactive SVG.\n * @param {Element} el\n */\n function isValidFocusTarget(el) {\n if (\n el &&\n el !== document &&\n el.nodeName !== 'HTML' &&\n el.nodeName !== 'BODY' &&\n 'classList' in el &&\n 'contains' in el.classList\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Computes whether the given element should automatically trigger the\n * `focus-visible` class being added, i.e. whether it should always match\n * `:focus-visible` when focused.\n * @param {Element} el\n * @return {boolean}\n */\n function focusTriggersKeyboardModality(el) {\n var type = el.type;\n var tagName = el.tagName;\n\n if (tagName === 'INPUT' && inputTypesAllowlist[type] && !el.readOnly) {\n return true;\n }\n\n if (tagName === 'TEXTAREA' && !el.readOnly) {\n return true;\n }\n\n if (el.isContentEditable) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Add the `focus-visible` class to the given element if it was not added by\n * the author.\n * @param {Element} el\n */\n function addFocusVisibleClass(el) {\n if (el.classList.contains('focus-visible')) {\n return;\n }\n el.classList.add('focus-visible');\n el.setAttribute('data-focus-visible-added', '');\n }\n\n /**\n * Remove the `focus-visible` class from the given element if it was not\n * originally added by the author.\n * @param {Element} el\n */\n function removeFocusVisibleClass(el) {\n if (!el.hasAttribute('data-focus-visible-added')) {\n return;\n }\n el.classList.remove('focus-visible');\n el.removeAttribute('data-focus-visible-added');\n }\n\n /**\n * If the most recent user interaction was via the keyboard;\n * and the key press did not include a meta, alt/option, or control key;\n * then the modality is keyboard. Otherwise, the modality is not keyboard.\n * Apply `focus-visible` to any current active element and keep track\n * of our keyboard modality state with `hadKeyboardEvent`.\n * @param {KeyboardEvent} e\n */\n function onKeyDown(e) {\n if (e.metaKey || e.altKey || e.ctrlKey) {\n return;\n }\n\n if (isValidFocusTarget(scope.activeElement)) {\n addFocusVisibleClass(scope.activeElement);\n }\n\n hadKeyboardEvent = true;\n }\n\n /**\n * If at any point a user clicks with a pointing device, ensure that we change\n * the modality away from keyboard.\n * This avoids the situation where a user presses a key on an already focused\n * element, and then clicks on a different element, focusing it with a\n * pointing device, while we still think we're in keyboard modality.\n * @param {Event} e\n */\n function onPointerDown(e) {\n hadKeyboardEvent = false;\n }\n\n /**\n * On `focus`, add the `focus-visible` class to the target if:\n * - the target received focus as a result of keyboard navigation, or\n * - the event target is an element that will likely require interaction\n * via the keyboard (e.g. a text box)\n * @param {Event} e\n */\n function onFocus(e) {\n // Prevent IE from focusing the document or HTML element.\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (hadKeyboardEvent || focusTriggersKeyboardModality(e.target)) {\n addFocusVisibleClass(e.target);\n }\n }\n\n /**\n * On `blur`, remove the `focus-visible` class from the target.\n * @param {Event} e\n */\n function onBlur(e) {\n if (!isValidFocusTarget(e.target)) {\n return;\n }\n\n if (\n e.target.classList.contains('focus-visible') ||\n e.target.hasAttribute('data-focus-visible-added')\n ) {\n // To detect a tab/window switch, we look for a blur event followed\n // rapidly by a visibility change.\n // If we don't see a visibility change within 100ms, it's probably a\n // regular focus change.\n hadFocusVisibleRecently = true;\n window.clearTimeout(hadFocusVisibleRecentlyTimeout);\n hadFocusVisibleRecentlyTimeout = window.setTimeout(function() {\n hadFocusVisibleRecently = false;\n }, 100);\n removeFocusVisibleClass(e.target);\n }\n }\n\n /**\n * If the user changes tabs, keep track of whether or not the previously\n * focused element had .focus-visible.\n * @param {Event} e\n */\n function onVisibilityChange(e) {\n if (document.visibilityState === 'hidden') {\n // If the tab becomes active again, the browser will handle calling focus\n // on the element (Safari actually calls it twice).\n // If this tab change caused a blur on an element with focus-visible,\n // re-apply the class when the user switches back to the tab.\n if (hadFocusVisibleRecently) {\n hadKeyboardEvent = true;\n }\n addInitialPointerMoveListeners();\n }\n }\n\n /**\n * Add a group of listeners to detect usage of any pointing devices.\n * These listeners will be added when the polyfill first loads, and anytime\n * the window is blurred, so that they are active when the window regains\n * focus.\n */\n function addInitialPointerMoveListeners() {\n document.addEventListener('mousemove', onInitialPointerMove);\n document.addEventListener('mousedown', onInitialPointerMove);\n document.addEventListener('mouseup', onInitialPointerMove);\n document.addEventListener('pointermove', onInitialPointerMove);\n document.addEventListener('pointerdown', onInitialPointerMove);\n document.addEventListener('pointerup', onInitialPointerMove);\n document.addEventListener('touchmove', onInitialPointerMove);\n document.addEventListener('touchstart', onInitialPointerMove);\n document.addEventListener('touchend', onInitialPointerMove);\n }\n\n function removeInitialPointerMoveListeners() {\n document.removeEventListener('mousemove', onInitialPointerMove);\n document.removeEventListener('mousedown', onInitialPointerMove);\n document.removeEventListener('mouseup', onInitialPointerMove);\n document.removeEventListener('pointermove', onInitialPointerMove);\n document.removeEventListener('pointerdown', onInitialPointerMove);\n document.removeEventListener('pointerup', onInitialPointerMove);\n document.removeEventListener('touchmove', onInitialPointerMove);\n document.removeEventListener('touchstart', onInitialPointerMove);\n document.removeEventListener('touchend', onInitialPointerMove);\n }\n\n /**\n * When the polfyill first loads, assume the user is in keyboard modality.\n * If any event is received from a pointing device (e.g. mouse, pointer,\n * touch), turn off keyboard modality.\n * This accounts for situations where focus enters the page from the URL bar.\n * @param {Event} e\n */\n function onInitialPointerMove(e) {\n // Work around a Safari quirk that fires a mousemove on <html> whenever the\n // window blurs, even if you're tabbing out of the page. \u00AF\\_(\u30C4)_/\u00AF\n if (e.target.nodeName && e.target.nodeName.toLowerCase() === 'html') {\n return;\n }\n\n hadKeyboardEvent = false;\n removeInitialPointerMoveListeners();\n }\n\n // For some kinds of state, we are interested in changes at the global scope\n // only. For example, global pointer input, global key presses and global\n // visibility change should affect the state at every scope:\n document.addEventListener('keydown', onKeyDown, true);\n document.addEventListener('mousedown', onPointerDown, true);\n document.addEventListener('pointerdown', onPointerDown, true);\n document.addEventListener('touchstart', onPointerDown, true);\n document.addEventListener('visibilitychange', onVisibilityChange, true);\n\n addInitialPointerMoveListeners();\n\n // For focus and blur, we specifically care about state changes in the local\n // scope. This is because focus / blur events that originate from within a\n // shadow root are not re-dispatched from the host element if it was already\n // the active element in its own scope:\n scope.addEventListener('focus', onFocus, true);\n scope.addEventListener('blur', onBlur, true);\n\n // We detect that a node is a ShadowRoot by ensuring that it is a\n // DocumentFragment and also has a host property. This check covers native\n // implementation and polyfill implementation transparently. If we only cared\n // about the native implementation, we could just check if the scope was\n // an instance of a ShadowRoot.\n if (scope.nodeType === Node.DOCUMENT_FRAGMENT_NODE && scope.host) {\n // Since a ShadowRoot is a special kind of DocumentFragment, it does not\n // have a root element to add a class to. So, we add this attribute to the\n // host element instead:\n scope.host.setAttribute('data-js-focus-visible', '');\n } else if (scope.nodeType === Node.DOCUMENT_NODE) {\n document.documentElement.classList.add('js-focus-visible');\n document.documentElement.setAttribute('data-js-focus-visible', '');\n }\n }\n\n // It is important to wrap all references to global window and document in\n // these checks to support server-side rendering use cases\n // @see https://github.com/WICG/focus-visible/issues/199\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n // Make the polyfill helper globally available. This can be used as a signal\n // to interested libraries that wish to coordinate with the polyfill for e.g.,\n // applying the polyfill to a shadow root:\n window.applyFocusVisiblePolyfill = applyFocusVisiblePolyfill;\n\n // Notify interested libraries of the polyfill's presence, in case the\n // polyfill was loaded lazily:\n var event;\n\n try {\n event = new CustomEvent('focus-visible-polyfill-ready');\n } catch (error) {\n // IE11 does not support using CustomEvent as a constructor directly:\n event = document.createEvent('CustomEvent');\n event.initCustomEvent('focus-visible-polyfill-ready', false, false, {});\n }\n\n window.dispatchEvent(event);\n }\n\n if (typeof document !== 'undefined') {\n // Apply the polyfill to the global document, so that no JavaScript\n // coordination is required to use the polyfill in the top-level document:\n applyFocusVisiblePolyfill(document);\n }\n\n})));\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ import {
2
+ e
3
+ } from "./chunk-TS7SL372.js";
4
+
5
+ // node_modules/@lit/reactive-element/decorators/query-assigned-elements.js
6
+ function o(o2) {
7
+ return (e2, n) => {
8
+ const { slot: r, selector: s } = o2 ?? {}, c = "slot" + (r ? `[name=${r}]` : ":not([name])");
9
+ return e(e2, n, { get() {
10
+ const t = this.renderRoot?.querySelector(c), e3 = t?.assignedElements(o2) ?? [];
11
+ return void 0 === s ? e3 : e3.filter((t2) => t2.matches(s));
12
+ } });
13
+ };
14
+ }
15
+
16
+ export {
17
+ o
18
+ };
19
+ /*! Bundled license information:
20
+
21
+ @lit/reactive-element/decorators/query-assigned-elements.js:
22
+ (**
23
+ * @license
24
+ * Copyright 2021 Google LLC
25
+ * SPDX-License-Identifier: BSD-3-Clause
26
+ *)
27
+ */
28
+ //# sourceMappingURL=chunk-364Y2XOJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@lit/reactive-element/src/decorators/query-assigned-elements.ts"],
4
+ "sourcesContent": ["/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport type {ReactiveElement} from '../reactive-element.js';\nimport type {QueryAssignedNodesOptions} from './query-assigned-nodes.js';\nimport {desc, type Interface} from './base.js';\n\nexport type QueryAssignedElementsDecorator = {\n // legacy\n (\n proto: Interface<ReactiveElement>,\n name: PropertyKey,\n descriptor?: PropertyDescriptor\n // Note TypeScript requires the return type to be `void|any`\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ): void | any;\n\n // standard\n <C extends Interface<ReactiveElement>, V extends Array<Element>>(\n value: ClassAccessorDecoratorTarget<C, V>,\n context: ClassAccessorDecoratorContext<C, V>\n ): ClassAccessorDecoratorResult<C, V>;\n};\n\n/**\n * Options for the {@linkcode queryAssignedElements} decorator. Extends the\n * options that can be passed into\n * [HTMLSlotElement.assignedElements](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSlotElement/assignedElements).\n */\nexport interface QueryAssignedElementsOptions\n extends QueryAssignedNodesOptions {\n /**\n * CSS selector used to filter the elements returned. For example, a selector\n * of `\".item\"` will only include elements with the `item` class.\n */\n selector?: string;\n}\n\n/**\n * A property decorator that converts a class property into a getter that\n * returns the `assignedElements` of the given `slot`. Provides a declarative\n * way to use\n * [`HTMLSlotElement.assignedElements`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLSlotElement/assignedElements).\n *\n * Can be passed an optional {@linkcode QueryAssignedElementsOptions} object.\n *\n * Example usage:\n * ```ts\n * class MyElement {\n * @queryAssignedElements({ slot: 'list' })\n * listItems!: Array<HTMLElement>;\n * @queryAssignedElements()\n * unnamedSlotEls!: Array<HTMLElement>;\n *\n * render() {\n * return html`\n * <slot name=\"list\"></slot>\n * <slot></slot>\n * `;\n * }\n * }\n * ```\n *\n * Note, the type of this property should be annotated as `Array<HTMLElement>`.\n *\n * @category Decorator\n */\nexport function queryAssignedElements(\n options?: QueryAssignedElementsOptions\n): QueryAssignedElementsDecorator {\n return (<V extends Array<Element>>(\n obj: object,\n name: PropertyKey | ClassAccessorDecoratorContext<unknown, unknown>\n ) => {\n const {slot, selector} = options ?? {};\n const slotSelector = `slot${slot ? `[name=${slot}]` : ':not([name])'}`;\n return desc(obj, name, {\n get(this: ReactiveElement): V {\n const slotEl =\n this.renderRoot?.querySelector<HTMLSlotElement>(slotSelector);\n const elements = slotEl?.assignedElements(options) ?? [];\n return (\n selector === undefined\n ? elements\n : elements.filter((node) => node.matches(selector))\n ) as V;\n },\n });\n }) as QueryAssignedElementsDecorator;\n}\n"],
5
+ "mappings": ";;;;;AA6EM,SAAUA,EACdC,IAAAA;AAEA,SAAA,CACEC,IACAC,MAAAA;AAEA,UAAA,EAAMC,MAACA,GAAIC,UAAEA,EAAAA,IAAYJ,MAAW,CAAA,GAC9BK,IAAe,UAAOF,IAAO,SAASA,CAAAA,MAAU;AACtD,WAAOG,EAAKL,IAAKC,GAAM,EACrB,MAAAK;AACE,YAAMC,IACJC,KAAKC,YAAYC,cAA+BN,CAAAA,GAC5CO,KAAWJ,GAAQK,iBAAiBb,EAAAA,KAAY,CAAA;AACtD,aAAA,WACEI,IACIQ,KACAA,GAASE,OAAQC,CAAAA,OAASA,GAAKC,QAAQZ,CAAAA,CAAAA;IAE/C,EAAA,CAAA;EAEH;AACH;",
6
+ "names": ["queryAssignedElements", "options", "obj", "name", "slot", "selector", "slotSelector", "desc", "get", "slotEl", "this", "renderRoot", "querySelector", "elements", "assignedElements", "filter", "node", "matches"]
7
+ }
@@ -0,0 +1,18 @@
1
+ import {
2
+ defineElement
3
+ } from "./chunk-6A6NIESE.js";
4
+ import {
5
+ Overlay
6
+ } from "./chunk-SZ33GAVH.js";
7
+ import "./chunk-IBQ4O4NO.js";
8
+ import "./chunk-ZMBN6APP.js";
9
+ import "./chunk-Y4Z7K443.js";
10
+ import "./chunk-364Y2XOJ.js";
11
+ import "./chunk-ER3HU7OE.js";
12
+ import "./chunk-JASEW37G.js";
13
+ import "./chunk-TS7SL372.js";
14
+ import "./chunk-Q4AC2O6Z.js";
15
+
16
+ // node_modules/@spectrum-web-components/overlay/sp-overlay.js
17
+ defineElement("sp-overlay", Overlay);
18
+ //# sourceMappingURL=chunk-4RGMMAR4.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@spectrum-web-components/overlay/sp-overlay.ts"],
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\nimport { Overlay } from './src/Overlay.js';\n\ndefineElement('sp-overlay', Overlay);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-overlay': Overlay;\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;AAeAA,cAAc,cAAcC,OAAO;",
6
+ "names": ["defineElement", "Overlay"]
7
+ }
@@ -0,0 +1,28 @@
1
+ // node_modules/@spectrum-web-components/reactive-controllers/src/MatchMedia.js
2
+ var IS_MOBILE = "(max-width: 743px) and (hover: none) and (pointer: coarse)";
3
+ var IS_TOUCH_DEVICE = "(hover: none) and (pointer: coarse)";
4
+ var MatchMediaController = class {
5
+ constructor(e, t) {
6
+ this.key = /* @__PURE__ */ Symbol("match-media-key");
7
+ this.matches = false;
8
+ this.host = e, this.host.addController(this), this.media = window.matchMedia(t), this.matches = this.media.matches, this.onChange = this.onChange.bind(this), e.addController(this);
9
+ }
10
+ hostConnected() {
11
+ var e;
12
+ (e = this.media) == null || e.addEventListener("change", this.onChange);
13
+ }
14
+ hostDisconnected() {
15
+ var e;
16
+ (e = this.media) == null || e.removeEventListener("change", this.onChange);
17
+ }
18
+ onChange(e) {
19
+ this.matches !== e.matches && (this.matches = e.matches, this.host.requestUpdate(this.key, !this.matches));
20
+ }
21
+ };
22
+
23
+ export {
24
+ IS_MOBILE,
25
+ IS_TOUCH_DEVICE,
26
+ MatchMediaController
27
+ };
28
+ //# sourceMappingURL=chunk-5OVGH7HO.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@spectrum-web-components/reactive-controllers/src/MatchMedia.ts"],
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\nimport type { ReactiveController, ReactiveElement } from 'lit';\n\nexport const DARK_MODE = '(prefers-color-scheme: dark)';\nexport const IS_MOBILE =\n '(max-width: 743px) and (hover: none) and (pointer: coarse)';\nexport const IS_TOUCH_DEVICE = '(hover: none) and (pointer: coarse)';\n\nexport class MatchMediaController implements ReactiveController {\n key = Symbol('match-media-key');\n\n matches = false;\n\n protected host: ReactiveElement;\n\n protected media: MediaQueryList;\n\n constructor(host: ReactiveElement, query: string) {\n this.host = host;\n this.host.addController(this);\n this.media = window.matchMedia(query);\n this.matches = this.media.matches;\n this.onChange = this.onChange.bind(this);\n host.addController(this);\n }\n\n public hostConnected(): void {\n this.media?.addEventListener('change', this.onChange);\n }\n\n public hostDisconnected(): void {\n this.media?.removeEventListener('change', this.onChange);\n }\n\n protected onChange(event: MediaQueryListEvent): void {\n if (this.matches === event.matches) {\n return;\n }\n this.matches = event.matches;\n this.host.requestUpdate(this.key, !this.matches);\n }\n}\n"],
5
+ "mappings": ";AAaO,IACM,YACX;AAFK,IAGM,kBAAkB;AAExB,IAAM,uBAAN,MAAyD;EAS9D,YAAYA,GAAuBC,GAAe;AARlD,SAAA,MAAM,uBAAO,iBAAiB;AAE9B,SAAA,UAAU;AAOR,SAAK,OAAOD,GACZ,KAAK,KAAK,cAAc,IAAI,GAC5B,KAAK,QAAQ,OAAO,WAAWC,CAAK,GACpC,KAAK,UAAU,KAAK,MAAM,SAC1B,KAAK,WAAW,KAAK,SAAS,KAAK,IAAI,GACvCD,EAAK,cAAc,IAAI;EACzB;EAEO,gBAAsB;AApC/B,QAAAE;AAAAA,KAqCIA,IAAA,KAAK,UAAL,QAAAA,EAAY,iBAAiB,UAAU,KAAK,QAAA;EAC9C;EAEO,mBAAyB;AAxClC,QAAAA;AAAAA,KAyCIA,IAAA,KAAK,UAAL,QAAAA,EAAY,oBAAoB,UAAU,KAAK,QAAA;EACjD;EAEU,SAASC,GAAkC;AAC/C,SAAK,YAAYA,EAAM,YAG3B,KAAK,UAAUA,EAAM,SACrB,KAAK,KAAK,cAAc,KAAK,KAAK,CAAC,KAAK,OAAO;EACjD;AACF;",
6
+ "names": ["host", "query", "_a", "event"]
7
+ }
@@ -0,0 +1,9 @@
1
+ // node_modules/@spectrum-web-components/base/src/define-element.js
2
+ function defineElement(e, n) {
3
+ window.__swc, customElements.define(e, n);
4
+ }
5
+
6
+ export {
7
+ defineElement
8
+ };
9
+ //# sourceMappingURL=chunk-6A6NIESE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@spectrum-web-components/base/src/define-element.ts"],
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\ninterface CustomElementConstructor {\n new (...params: unknown[]): HTMLElement;\n}\n\nexport function defineElement(\n name: string,\n constructor: CustomElementConstructor\n): void {\n if (window.__swc && window.__swc.DEBUG) {\n if (customElements.get(name)) {\n window.__swc.warn(\n undefined,\n `Attempted to redefine <${name}>. This usually indicates that multiple versions of the same web component were loaded onto a single page.`,\n 'https://opensource.adobe.com/spectrum-web-components/registry-conflicts'\n );\n }\n }\n customElements.define(name, constructor);\n}\n"],
5
+ "mappings": ";AAgBO,SAAS,cACdA,GACAC,GACM;AACF,SAAO,OASX,eAAe,OAAOD,GAAMC,CAAW;AACzC;",
6
+ "names": ["name", "constructor"]
7
+ }
@@ -0,0 +1,26 @@
1
+ // node_modules/@spectrum-web-components/reactive-controllers/src/DependencyManger.js
2
+ var dependencyManagerLoadedSymbol = /* @__PURE__ */ Symbol("dependency manager loaded");
3
+ var DependencyManagerController = class {
4
+ constructor(e) {
5
+ this.dependencies = {};
6
+ this._loaded = false;
7
+ this.host = e;
8
+ }
9
+ get loaded() {
10
+ return this._loaded;
11
+ }
12
+ set loaded(e) {
13
+ e !== this.loaded && (this._loaded = e, this.host.requestUpdate(dependencyManagerLoadedSymbol, !this.loaded));
14
+ }
15
+ add(e, o) {
16
+ const t = !!o || !!customElements.get(e) || this.dependencies[e];
17
+ t || customElements.whenDefined(e).then(() => {
18
+ this.add(e, true);
19
+ }), this.dependencies = { ...this.dependencies, [e]: t }, this.loaded = Object.values(this.dependencies).every((d) => d);
20
+ }
21
+ };
22
+
23
+ export {
24
+ DependencyManagerController
25
+ };
26
+ //# sourceMappingURL=chunk-EN3XGF2M.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@spectrum-web-components/reactive-controllers/src/DependencyManger.ts"],
4
+ "sourcesContent": ["/**\n * Copyright 2026 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport type { ReactiveElement } from 'lit';\nexport const dependencyManagerLoadedSymbol = Symbol(\n 'dependency manager loaded'\n);\n\n/**\n * Manage the availability of custom element dependencies of a host element\n * to gate render and functional behavior before and after their presence\n */\nexport class DependencyManagerController {\n private dependencies: Record<string, boolean> = {};\n\n private host!: ReactiveElement;\n\n /**\n * Whether all of the provided dependencies have been registered.\n * This will be `false` when no dependencies have been listed for management.\n * Changes to this value will trigger `requestUpdate()` on the host.\n */\n public get loaded(): boolean {\n return this._loaded;\n }\n\n private set loaded(loaded: boolean) {\n if (loaded === this.loaded) {\n return;\n }\n this._loaded = loaded;\n this.host.requestUpdate(dependencyManagerLoadedSymbol, !this.loaded);\n }\n\n private _loaded = false;\n\n constructor(host: ReactiveElement) {\n this.host = host;\n }\n\n /**\n * Submit a custom element tag name to be managed as a dependency.\n *\n * @param dependency {string} - the custom element tag to manage\n * @param alreadyLoaded {boolean} - force the managemented custom element to be listed as loaded\n */\n public add(dependency: string, alreadyLoaded?: boolean): void {\n const loaded =\n !!alreadyLoaded ||\n !!customElements.get(dependency) ||\n this.dependencies[dependency];\n if (!loaded) {\n customElements.whenDefined(dependency).then(() => {\n this.add(dependency, true);\n });\n }\n this.dependencies = {\n ...this.dependencies,\n [dependency]: loaded,\n };\n // Update the loaded property based on the new loaded state of all dependencies\n this.loaded = Object.values(this.dependencies).every((loaded) => loaded);\n }\n}\n"],
5
+ "mappings": ";AAaO,IAAM,gCAAgC,uBAC3C,2BACF;AAMO,IAAM,8BAAN,MAAkC;EAwBvC,YAAYA,GAAuB;AAvBnC,SAAQ,eAAwC,CAAC;AAqBjD,SAAQ,UAAU;AAGhB,SAAK,OAAOA;EACd;EAhBA,IAAW,SAAkB;AAC3B,WAAO,KAAK;EACd;EAEA,IAAY,OAAOC,GAAiB;AAC9BA,UAAW,KAAK,WAGpB,KAAK,UAAUA,GACf,KAAK,KAAK,cAAc,+BAA+B,CAAC,KAAK,MAAM;EACrE;EAcO,IAAIC,GAAoBC,GAA+B;AAC5D,UAAMF,IACJ,CAAC,CAACE,KACF,CAAC,CAAC,eAAe,IAAID,CAAU,KAC/B,KAAK,aAAaA,CAAU;AACzBD,SACH,eAAe,YAAYC,CAAU,EAAE,KAAK,MAAM;AAChD,WAAK,IAAIA,GAAY,IAAI;IAC3B,CAAC,GAEH,KAAK,eAAe,EAClB,GAAG,KAAK,cACR,CAACA,CAAU,GAAGD,EAChB,GAEA,KAAK,SAAS,OAAO,OAAO,KAAK,YAAY,EAAE,MAAOA,OAAWA,CAAM;EACzE;AACF;",
6
+ "names": ["host", "loaded", "dependency", "alreadyLoaded"]
7
+ }
@@ -0,0 +1,22 @@
1
+ import {
2
+ n
3
+ } from "./chunk-TS7SL372.js";
4
+
5
+ // node_modules/@lit/reactive-element/decorators/state.js
6
+ function r(r2) {
7
+ return n({ ...r2, state: true, attribute: false });
8
+ }
9
+
10
+ export {
11
+ r
12
+ };
13
+ /*! Bundled license information:
14
+
15
+ @lit/reactive-element/decorators/state.js:
16
+ (**
17
+ * @license
18
+ * Copyright 2017 Google LLC
19
+ * SPDX-License-Identifier: BSD-3-Clause
20
+ *)
21
+ */
22
+ //# sourceMappingURL=chunk-ER3HU7OE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../node_modules/@lit/reactive-element/src/decorators/state.ts"],
4
+ "sourcesContent": ["/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\n\n/*\n * IMPORTANT: For compatibility with tsickle and the Closure JS compiler, all\n * property decorators (but not class decorators) in this file that have\n * an @ExportDecoratedItems annotation must be defined as a regular function,\n * not an arrow function.\n */\n\nimport {property} from './property.js';\n\nexport interface StateDeclaration<Type = unknown> {\n /**\n * A function that indicates if a property should be considered changed when\n * it is set. The function should take the `newValue` and `oldValue` and\n * return `true` if an update should be requested.\n */\n hasChanged?(value: Type, oldValue: Type): boolean;\n}\n\n/**\n * @deprecated use StateDeclaration\n */\nexport type InternalPropertyDeclaration<Type = unknown> =\n StateDeclaration<Type>;\n\n/**\n * Declares a private or protected reactive property that still triggers\n * updates to the element when it changes. It does not reflect from the\n * corresponding attribute.\n *\n * Properties declared this way must not be used from HTML or HTML templating\n * systems, they're solely for properties internal to the element. These\n * properties may be renamed by optimization tools like closure compiler.\n * @category Decorator\n */\nexport function state(options?: StateDeclaration) {\n return property({\n ...options,\n // Add both `state` and `attribute` because we found a third party\n // controller that is keying off of PropertyOptions.state to determine\n // whether a field is a private internal property or not.\n state: true,\n attribute: false,\n });\n}\n"],
5
+ "mappings": ";;;;;AAwCM,SAAUA,EAAMC,IAAAA;AACpB,SAAOC,EAAS,EAAA,GACXD,IAIHD,OAAAA,MACAG,WAAAA,MAAW,CAAA;AAEf;",
6
+ "names": ["state", "options", "property", "attribute"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ LONGPRESS_INSTRUCTIONS,
3
+ Overlay
4
+ } from "./chunk-SZ33GAVH.js";
5
+ import "./chunk-IBQ4O4NO.js";
6
+ import "./chunk-ZMBN6APP.js";
7
+ import "./chunk-Y4Z7K443.js";
8
+ import "./chunk-364Y2XOJ.js";
9
+ import "./chunk-ER3HU7OE.js";
10
+ import "./chunk-JASEW37G.js";
11
+ import "./chunk-TS7SL372.js";
12
+ import "./chunk-Q4AC2O6Z.js";
13
+ export {
14
+ LONGPRESS_INSTRUCTIONS,
15
+ Overlay
16
+ };
17
+ //# sourceMappingURL=chunk-FN3Y2AYJ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ import "./chunk-HBUX7E54.js";
2
+ import "./chunk-6A6NIESE.js";
3
+ import "./chunk-364Y2XOJ.js";
4
+ import "./chunk-ER3HU7OE.js";
5
+ import "./chunk-JASEW37G.js";
6
+ import "./chunk-TS7SL372.js";
7
+ import "./chunk-Q4AC2O6Z.js";
8
+ //# sourceMappingURL=chunk-H5WU2XYY.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }