@janga/norna 0.7.2 → 0.7.4

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 (88) hide show
  1. package/README.md +16 -16
  2. package/bin/norna-cli.mjs +12 -7
  3. package/docs/README.md +11 -12
  4. package/docs/commands.md +9 -9
  5. package/docs/configuration.md +14 -145
  6. package/docs/content.md +17 -15
  7. package/docs/design/command-organization.md +58 -57
  8. package/docs/design/site-examples-structure.md +6 -5
  9. package/docs/engine-development.md +5 -5
  10. package/docs/getting-started.md +20 -26
  11. package/docs/images-and-metadata.md +1 -1
  12. package/docs/local-development.md +2 -2
  13. package/docs/publishing.md +1 -1
  14. package/docs/routes.md +2 -2
  15. package/docs/site-structure.md +8 -7
  16. package/docs/theme.md +133 -7
  17. package/docs/typography.md +78 -43
  18. package/examples/dog-gallery/node_modules/.vite/deps/_metadata.json +74 -0
  19. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js +434 -0
  20. package/examples/dog-gallery/node_modules/.vite/deps/astro-D_GIpJIE.js.map +1 -0
  21. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js +6390 -0
  22. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_aria-query.js.map +1 -0
  23. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js +2702 -0
  24. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_axobject-query.js.map +1 -0
  25. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js +65 -0
  26. package/examples/dog-gallery/node_modules/.vite/deps/astro_n_html-escaper.js.map +1 -0
  27. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js +455 -0
  28. package/examples/dog-gallery/node_modules/.vite/deps/astro_runtime_client_dev-toolbar_entrypoint__js.js.map +1 -0
  29. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js +1534 -0
  30. package/examples/dog-gallery/node_modules/.vite/deps/audit-DM9Hkl5B.js.map +1 -0
  31. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js +48 -0
  32. package/examples/dog-gallery/node_modules/.vite/deps/highlight-DnZ1ULOL.js.map +1 -0
  33. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js +42 -0
  34. package/examples/dog-gallery/node_modules/.vite/deps/icons-RyebKi45.js.map +1 -0
  35. package/examples/dog-gallery/node_modules/.vite/deps/package.json +3 -0
  36. package/examples/dog-gallery/node_modules/.vite/deps/rolldown-runtime-BvCyGRYZ.js +4 -0
  37. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js +190 -0
  38. package/examples/dog-gallery/node_modules/.vite/deps/settings-DaU-gNnK.js.map +1 -0
  39. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js +458 -0
  40. package/examples/dog-gallery/node_modules/.vite/deps/toolbar-63PA619H.js.map +1 -0
  41. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js +1016 -0
  42. package/examples/dog-gallery/node_modules/.vite/deps/ui-library--bkcNSYz.js.map +1 -0
  43. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js +32 -0
  44. package/examples/dog-gallery/node_modules/.vite/deps/window-jPkpKVcy.js.map +1 -0
  45. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js +111 -0
  46. package/examples/dog-gallery/node_modules/.vite/deps/xray-BXCHpEJP.js.map +1 -0
  47. package/examples/dog-gallery/site/config.mjs +12 -42
  48. package/examples/dog-gallery/site/content.md +28 -6
  49. package/examples/dog-gallery/site/routes/dog-care/route-content.md +17 -3
  50. package/examples/dog-gallery/site/theme.md +83 -26
  51. package/fixtures/basic/site/config.mjs +2 -22
  52. package/fixtures/basic/site/content.md +1 -1
  53. package/fixtures/basic/site/theme.md +7 -3
  54. package/package.json +3 -3
  55. package/scripts/check-config.mjs +4 -3
  56. package/scripts/deploy-site.mjs +3 -3
  57. package/scripts/init-site.mjs +10 -8
  58. package/scripts/lib/frontmatter-yaml.mjs +85 -0
  59. package/scripts/lib/presentation.mjs +10 -11
  60. package/scripts/lib/project-config.mjs +146 -45
  61. package/scripts/lib/site-content.mjs +21 -3
  62. package/scripts/lib/theme-config.mjs +34 -0
  63. package/scripts/lib/typography.mjs +155 -35
  64. package/scripts/show-typography.mjs +127 -159
  65. package/scripts/sync-content-sections.mjs +6 -6
  66. package/scripts/test-content-check.mjs +3 -4
  67. package/scripts/test-engine-commands.mjs +21 -3
  68. package/scripts/test-package-check.mjs +34 -17
  69. package/scripts/test-temporary-visibility.mjs +2 -3
  70. package/src/components/SitePage.astro +2 -3
  71. package/src/components/SiteSection.astro +115 -19
  72. package/src/content.config.ts +66 -6
  73. package/src/layouts/BaseLayout.astro +11 -0
  74. package/src/styles/global.css +83 -52
  75. package/starters/basic/README.md +11 -15
  76. package/starters/basic/package.json +2 -2
  77. package/starters/basic/site/config.mjs +3 -24
  78. package/starters/basic/site/content.md +40 -7
  79. package/starters/basic/site/theme.md +84 -18
  80. package/starters/project/.github/workflows/deploy.yml +65 -0
  81. package/starters/project/README.md +72 -0
  82. package/starters/project/package-lock.json +4296 -0
  83. package/starters/project/package.json +35 -0
  84. package/starters/project/site/config.mjs +43 -0
  85. package/starters/project/site/content.md +128 -0
  86. package/starters/project/site/public/robots.txt +2 -0
  87. package/starters/project/site/routes/guide/route-content.md +85 -0
  88. package/starters/project/site/theme.md +43 -0
@@ -0,0 +1,455 @@
1
+ import { loadDevToolbarApps } from "astro:toolbar:internal";
2
+ //#region ../../node_modules/astro/dist/runtime/client/dev-toolbar/helpers.js
3
+ var ToolbarAppEventTarget = class extends EventTarget {
4
+ constructor() {
5
+ super();
6
+ }
7
+ /**
8
+ * Toggle the notification state of the toolbar
9
+ * @param options - The notification options
10
+ * @param options.state - The state of the notification
11
+ * @param options.level - The level of the notification, optional when state is false
12
+ */
13
+ toggleNotification(options) {
14
+ this.dispatchEvent(new CustomEvent("toggle-notification", { detail: {
15
+ state: options.state,
16
+ level: options.state === true ? options.level : void 0
17
+ } }));
18
+ }
19
+ /**
20
+ * Toggle the app state on or off
21
+ * @param options - The app state options
22
+ * @param options.state - The new state of the app
23
+ */
24
+ toggleState(options) {
25
+ this.dispatchEvent(new CustomEvent("toggle-app", { detail: { state: options.state } }));
26
+ }
27
+ /**
28
+ * Fired when the app is toggled on or off
29
+ * @param callback - The callback to run when the event is fired, takes an object with the new state
30
+ */
31
+ onToggled(callback) {
32
+ this.addEventListener("app-toggled", (evt) => {
33
+ if (!(evt instanceof CustomEvent)) return;
34
+ callback(evt.detail);
35
+ });
36
+ }
37
+ /**
38
+ * Fired when the toolbar placement is updated by the user
39
+ * @param callback - The callback to run when the event is fired, takes an object with the new placement
40
+ */
41
+ onToolbarPlacementUpdated(callback) {
42
+ this.addEventListener("placement-updated", (evt) => {
43
+ if (!(evt instanceof CustomEvent)) return;
44
+ callback(evt.detail);
45
+ });
46
+ }
47
+ };
48
+ var serverHelpers = {
49
+ /**
50
+ * Send a message to the server, the payload can be any serializable data.
51
+ *
52
+ * The server can listen for this message in the `astro:server:config` hook of an Astro integration, using the `toolbar.on` method.
53
+ *
54
+ * @param event - The event name
55
+ * @param payload - The payload to send
56
+ */
57
+ send: (event, payload) => {
58
+ if (import.meta.hot) import.meta.hot.send(event, payload);
59
+ },
60
+ /**
61
+ * Receive a message from the server.
62
+ * @param event - The event name
63
+ * @param callback - The callback to run when the event is received.
64
+ * The payload's content will be passed to the callback as an argument
65
+ */
66
+ on: (event, callback) => {
67
+ if (import.meta.hot) import.meta.hot.on(event, callback);
68
+ }
69
+ };
70
+ //#endregion
71
+ //#region ../../node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/window.js
72
+ var placements = [
73
+ "bottom-left",
74
+ "bottom-center",
75
+ "bottom-right"
76
+ ];
77
+ function isValidPlacement(value) {
78
+ return placements.map(String).includes(value);
79
+ }
80
+ var DevToolbarWindow = class extends HTMLElement {
81
+ shadowRoot;
82
+ _placement = defaultSettings.placement;
83
+ get placement() {
84
+ return this._placement;
85
+ }
86
+ set placement(value) {
87
+ if (!isValidPlacement(value)) {
88
+ settings.logger.error(`Invalid placement: ${value}, expected one of ${placements.join(", ")}, got ${value}.`);
89
+ return;
90
+ }
91
+ this._placement = value;
92
+ this.updateStyle();
93
+ }
94
+ static observedAttributes = ["placement"];
95
+ constructor() {
96
+ super();
97
+ this.shadowRoot = this.attachShadow({ mode: "open" });
98
+ }
99
+ async connectedCallback() {
100
+ this.shadowRoot.innerHTML = `
101
+ <style>
102
+ :host {
103
+ box-sizing: border-box;
104
+ display: flex;
105
+ flex-direction: column;
106
+ background: linear-gradient(0deg, #13151A, #13151A), linear-gradient(0deg, #343841, #343841);
107
+ border: 1px solid rgba(52, 56, 65, 1);
108
+ width: min(640px, 100%);
109
+ max-height: 480px;
110
+ border-radius: 12px;
111
+ padding: 24px;
112
+ font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
113
+ color: rgba(191, 193, 201, 1);
114
+ position: fixed;
115
+ z-index: 999999999;
116
+ bottom: 72px;
117
+ box-shadow: 0px 0px 0px 0px rgba(19, 21, 26, 0.30), 0px 1px 2px 0px rgba(19, 21, 26, 0.29), 0px 4px 4px 0px rgba(19, 21, 26, 0.26), 0px 10px 6px 0px rgba(19, 21, 26, 0.15), 0px 17px 7px 0px rgba(19, 21, 26, 0.04), 0px 26px 7px 0px rgba(19, 21, 26, 0.01);
118
+ }
119
+
120
+ @media (forced-colors: active) {
121
+ :host {
122
+ background: white;
123
+ }
124
+ }
125
+
126
+ @media (max-width: 640px) {
127
+ :host {
128
+ border-radius: 0;
129
+ }
130
+ }
131
+
132
+ ::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4), ::slotted(h5) {
133
+ font-weight: 600;
134
+ color: #fff;
135
+ }
136
+
137
+ ::slotted(h1) {
138
+ font-size: 22px;
139
+ }
140
+
141
+ ::slotted(h2) {
142
+ font-size: 20px;
143
+ }
144
+
145
+ ::slotted(h3) {
146
+ font-size: 18px;
147
+ }
148
+
149
+ ::slotted(h4) {
150
+ font-size: 16px;
151
+ }
152
+
153
+ ::slotted(h5) {
154
+ font-size: 14px;
155
+ }
156
+
157
+ hr, ::slotted(hr) {
158
+ border: 1px solid rgba(27, 30, 36, 1);
159
+ margin: 1em 0;
160
+ }
161
+
162
+ p, ::slotted(p) {
163
+ line-height: 1.5em;
164
+ }
165
+ </style>
166
+ <style id="selected-style"></style>
167
+
168
+ <slot />
169
+ `;
170
+ this.updateStyle();
171
+ }
172
+ attributeChangedCallback() {
173
+ if (this.hasAttribute("placement")) this.placement = this.getAttribute("placement");
174
+ }
175
+ updateStyle() {
176
+ const style = this.shadowRoot.querySelector("#selected-style");
177
+ if (style) style.innerHTML = {
178
+ "bottom-left": `
179
+ :host {
180
+ left: 16px;
181
+ }
182
+ `,
183
+ "bottom-center": `
184
+ :host {
185
+ left: 50%;
186
+ transform: translateX(-50%);
187
+ }
188
+ `,
189
+ "bottom-right": `
190
+ :host {
191
+ right: 16px;
192
+ }
193
+ `
194
+ }[this.placement];
195
+ }
196
+ };
197
+ //#endregion
198
+ //#region ../../node_modules/astro/dist/runtime/client/dev-toolbar/settings.js
199
+ var defaultSettings = {
200
+ disableAppNotification: false,
201
+ verbose: false,
202
+ placement: "bottom-center"
203
+ };
204
+ var settings = getSettings();
205
+ function getSettings() {
206
+ let _settings = { ...defaultSettings };
207
+ const configPlacement = globalThis.__astro_dev_toolbar__?.placement;
208
+ if (configPlacement && isValidPlacement(configPlacement)) _settings.placement = configPlacement;
209
+ const toolbarSettings = localStorage.getItem("astro:dev-toolbar:settings");
210
+ if (toolbarSettings) _settings = {
211
+ ..._settings,
212
+ ...JSON.parse(toolbarSettings)
213
+ };
214
+ function updateSetting(key, value) {
215
+ _settings[key] = value;
216
+ localStorage.setItem("astro:dev-toolbar:settings", JSON.stringify(_settings));
217
+ }
218
+ function log(message, level = "log") {
219
+ console[level](`%cAstro`, "background: linear-gradient(66.77deg, #D83333 0%, #F041FF 100%); color: white; padding-inline: 4px; border-radius: 2px; font-family: monospace;", message);
220
+ }
221
+ return {
222
+ get config() {
223
+ return _settings;
224
+ },
225
+ updateSetting,
226
+ logger: {
227
+ log,
228
+ warn: (message) => {
229
+ log(message, "warn");
230
+ },
231
+ error: (message) => {
232
+ log(message, "error");
233
+ },
234
+ verboseLog: (message) => {
235
+ if (_settings.verbose) log(message);
236
+ }
237
+ }
238
+ };
239
+ }
240
+ //#endregion
241
+ //#region ../../node_modules/astro/dist/runtime/client/dev-toolbar/entrypoint.js
242
+ var overlay;
243
+ document.addEventListener("DOMContentLoaded", async () => {
244
+ const [customAppsDefinitions, { default: astroDevToolApp }, { default: astroAuditApp }, { default: astroXrayApp }, { default: astroSettingsApp }, { AstroDevToolbar, DevToolbarCanvas, getAppIcon }, { DevToolbarCard, DevToolbarHighlight, DevToolbarTooltip, DevToolbarWindow, DevToolbarToggle, DevToolbarButton, DevToolbarBadge, DevToolbarIcon, DevToolbarSelect, DevToolbarRadioCheckbox }] = await Promise.all([
245
+ loadDevToolbarApps(),
246
+ import("./astro-D_GIpJIE.js"),
247
+ import("./audit-DM9Hkl5B.js"),
248
+ import("./xray-BXCHpEJP.js"),
249
+ import("./settings-DaU-gNnK.js"),
250
+ import("./toolbar-63PA619H.js"),
251
+ import("./ui-library--bkcNSYz.js")
252
+ ]);
253
+ customElements.define("astro-dev-toolbar", AstroDevToolbar);
254
+ customElements.define("astro-dev-toolbar-window", DevToolbarWindow);
255
+ customElements.define("astro-dev-toolbar-app-canvas", DevToolbarCanvas);
256
+ customElements.define("astro-dev-toolbar-tooltip", DevToolbarTooltip);
257
+ customElements.define("astro-dev-toolbar-highlight", DevToolbarHighlight);
258
+ customElements.define("astro-dev-toolbar-card", DevToolbarCard);
259
+ customElements.define("astro-dev-toolbar-toggle", DevToolbarToggle);
260
+ customElements.define("astro-dev-toolbar-button", DevToolbarButton);
261
+ customElements.define("astro-dev-toolbar-badge", DevToolbarBadge);
262
+ customElements.define("astro-dev-toolbar-icon", DevToolbarIcon);
263
+ customElements.define("astro-dev-toolbar-select", DevToolbarSelect);
264
+ customElements.define("astro-dev-toolbar-radio-checkbox", DevToolbarRadioCheckbox);
265
+ overlay = document.createElement("astro-dev-toolbar");
266
+ const notificationLevels = [
267
+ "error",
268
+ "warning",
269
+ "info"
270
+ ];
271
+ const notificationSVGs = {
272
+ error: "<svg viewBox=\"0 0 10 10\" style=\"--fill:var(--fill-default);--fill-default:#B33E66;--fill-hover:#E3AFC1;\"><rect width=\"9\" height=\"9\" x=\".5\" y=\".5\" fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" rx=\"4.5\"/></svg>",
273
+ warning: "<svg width=\"12\" height=\"10\" fill=\"none\" style=\"--fill:var(--fill-default);--fill-default:#B58A2D;--fill-hover:#D5B776;\"><path fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" d=\"M7.29904 1.25c-.57735-1-2.02073-1-2.59808 0l-3.4641 6C.65951 8.25 1.3812 9.5 2.5359 9.5h6.9282c1.1547 0 1.8764-1.25 1.299-2.25l-3.46406-6Z\"/></svg>",
274
+ info: "<svg viewBox=\"0 0 10 10\" style=\"--fill:var(--fill-default);--fill-default:#3645D9;--fill-hover:#BDC3FF;\"><rect width=\"9\" height=\"9\" x=\".5\" y=\".5\" fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" rx=\"1.5\"/></svg>"
275
+ };
276
+ const prepareApp = (appDefinition, builtIn) => {
277
+ const eventTarget = new ToolbarAppEventTarget();
278
+ const app = {
279
+ ...appDefinition,
280
+ builtIn,
281
+ active: false,
282
+ status: "loading",
283
+ notification: {
284
+ state: false,
285
+ level: void 0
286
+ },
287
+ eventTarget
288
+ };
289
+ eventTarget.addEventListener("toggle-notification", (evt) => {
290
+ if (!(evt instanceof CustomEvent)) return;
291
+ const target = overlay.shadowRoot?.querySelector(`[data-app-id="${app.id}"]`);
292
+ if (!target) return;
293
+ const notificationElement = target.querySelector(".notification");
294
+ if (!notificationElement) return;
295
+ let newState = evt.detail.state ?? true;
296
+ let level = notificationLevels.includes(evt?.detail?.level) ? evt.detail.level : "error";
297
+ app.notification.state = newState;
298
+ if (newState) app.notification.level = level;
299
+ notificationElement.toggleAttribute("data-active", newState);
300
+ if (newState) {
301
+ notificationElement.setAttribute("data-level", level);
302
+ notificationElement.innerHTML = notificationSVGs[level];
303
+ }
304
+ });
305
+ const onToggleApp = async (evt) => {
306
+ let newState = void 0;
307
+ if (evt instanceof CustomEvent) newState = evt.detail.state ?? true;
308
+ await overlay.setAppStatus(app, newState);
309
+ };
310
+ eventTarget.addEventListener("toggle-app", onToggleApp);
311
+ return app;
312
+ };
313
+ const apps = [...[
314
+ astroDevToolApp,
315
+ astroXrayApp,
316
+ astroAuditApp,
317
+ astroSettingsApp,
318
+ {
319
+ id: "astro:more",
320
+ name: "More",
321
+ icon: "dots-three",
322
+ init(canvas, eventTarget) {
323
+ const hiddenApps = apps.filter((p) => !p.builtIn).slice(overlay.customAppsToShow);
324
+ createDropdown();
325
+ document.addEventListener("astro:after-swap", createDropdown);
326
+ function createDropdown() {
327
+ const style = document.createElement("style");
328
+ style.innerHTML = `
329
+ #dropdown {
330
+ background: rgba(19, 21, 26, 1);
331
+ border: 1px solid rgba(52, 56, 65, 1);
332
+ border-radius: 12px;
333
+ box-shadow: 0px 0px 0px 0px rgba(19, 21, 26, 0.30), 0px 1px 2px 0px rgba(19, 21, 26, 0.29), 0px 4px 4px 0px rgba(19, 21, 26, 0.26), 0px 10px 6px 0px rgba(19, 21, 26, 0.15), 0px 17px 7px 0px rgba(19, 21, 26, 0.04), 0px 26px 7px 0px rgba(19, 21, 26, 0.01);
334
+ width: 192px;
335
+ padding: 8px;
336
+ z-index: 2000000010;
337
+ transform: translate(-50%, 0%);
338
+ position: fixed;
339
+ bottom: 72px;
340
+ left: 50%;
341
+ }
342
+
343
+ .notification {
344
+ display: none;
345
+ position: absolute;
346
+ top: -4px;
347
+ right: -5px;
348
+ width: 12px;
349
+ height: 10px;
350
+ }
351
+
352
+ .notification svg {
353
+ display: block;
354
+ }
355
+
356
+ #dropdown:not([data-no-notification]) .notification[data-active] {
357
+ display: block;
358
+ }
359
+
360
+ #dropdown button {
361
+ border: 0;
362
+ background: transparent;
363
+ color: white;
364
+ font-family: system-ui, sans-serif;
365
+ font-size: 14px;
366
+ white-space: nowrap;
367
+ text-decoration: none;
368
+ margin: 0;
369
+ display: flex;
370
+ align-items: center;
371
+ width: 100%;
372
+ padding: 8px;
373
+ border-radius: 8px;
374
+ }
375
+
376
+ #dropdown button:hover, #dropdown button:focus-visible {
377
+ background: #FFFFFF20;
378
+ cursor: pointer;
379
+ }
380
+
381
+ #dropdown button.active {
382
+ background: rgba(71, 78, 94, 1);
383
+ }
384
+
385
+ #dropdown .icon {
386
+ position: relative;
387
+ height: 20px;
388
+ width: 20px;
389
+ padding: 1px;
390
+ margin-right: 0.5em;
391
+ }
392
+
393
+ #dropdown .icon svg {
394
+ max-height: 100%;
395
+ max-width: 100%;
396
+ }
397
+ `;
398
+ canvas.append(style);
399
+ const dropdown = document.createElement("div");
400
+ dropdown.id = "dropdown";
401
+ dropdown.toggleAttribute("data-no-notification", settings.config.disableAppNotification);
402
+ for (const app of hiddenApps) {
403
+ const buttonContainer = document.createElement("div");
404
+ buttonContainer.classList.add("item");
405
+ const button = document.createElement("button");
406
+ button.setAttribute("data-app-id", app.id);
407
+ const iconContainer = document.createElement("div");
408
+ const iconElement = document.createElement("template");
409
+ iconElement.innerHTML = app.icon ? getAppIcon(app.icon) : "?";
410
+ iconContainer.append(iconElement.content.cloneNode(true));
411
+ const notification = document.createElement("div");
412
+ notification.classList.add("notification");
413
+ iconContainer.append(notification);
414
+ iconContainer.classList.add("icon");
415
+ button.append(iconContainer);
416
+ button.append(document.createTextNode(app.name));
417
+ button.addEventListener("click", () => {
418
+ overlay.toggleAppStatus(app);
419
+ });
420
+ buttonContainer.append(button);
421
+ dropdown.append(buttonContainer);
422
+ app.eventTarget.addEventListener("toggle-notification", (evt) => {
423
+ if (!(evt instanceof CustomEvent)) return;
424
+ let newState = evt.detail.state ?? true;
425
+ let level = notificationLevels.includes(evt?.detail?.level) ? evt.detail.level : "error";
426
+ notification.toggleAttribute("data-active", newState);
427
+ if (newState) {
428
+ notification.setAttribute("data-level", level);
429
+ notification.innerHTML = notificationSVGs[level];
430
+ }
431
+ app.notification.state = newState;
432
+ if (newState) app.notification.level = level;
433
+ eventTarget.dispatchEvent(new CustomEvent("toggle-notification", { detail: {
434
+ state: hiddenApps.some((p) => p.notification.state === true),
435
+ level: [
436
+ "error",
437
+ "warning",
438
+ "info"
439
+ ].find((notificationLevel) => hiddenApps.some((p) => p.notification.state === true && p.notification.level === notificationLevel)) ?? "error"
440
+ } }));
441
+ });
442
+ }
443
+ canvas.append(dropdown);
444
+ }
445
+ }
446
+ }
447
+ ].map((appDef) => prepareApp(appDef, true)), ...customAppsDefinitions.map((appDef) => prepareApp(appDef, false))];
448
+ overlay.apps = apps;
449
+ document.body.append(overlay);
450
+ document.addEventListener("astro:after-swap", () => {
451
+ document.body.append(overlay);
452
+ });
453
+ });
454
+ //#endregion
455
+ export { serverHelpers as a, placements as i, DevToolbarWindow as n, isValidPlacement as r, settings as t };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro_runtime_client_dev-toolbar_entrypoint__js.js","names":[],"sources":["../../../../../node_modules/astro/dist/runtime/client/dev-toolbar/helpers.js","../../../../../node_modules/astro/dist/runtime/client/dev-toolbar/ui-library/window.js","../../../../../node_modules/astro/dist/runtime/client/dev-toolbar/settings.js","../../../../../node_modules/astro/dist/runtime/client/dev-toolbar/entrypoint.js"],"sourcesContent":["class ToolbarAppEventTarget extends EventTarget {\n constructor() {\n super();\n }\n /**\n * Toggle the notification state of the toolbar\n * @param options - The notification options\n * @param options.state - The state of the notification\n * @param options.level - The level of the notification, optional when state is false\n */\n toggleNotification(options) {\n this.dispatchEvent(\n new CustomEvent(\"toggle-notification\", {\n detail: {\n state: options.state,\n level: options.state === true ? options.level : void 0\n }\n })\n );\n }\n /**\n * Toggle the app state on or off\n * @param options - The app state options\n * @param options.state - The new state of the app\n */\n toggleState(options) {\n this.dispatchEvent(\n new CustomEvent(\"toggle-app\", {\n detail: {\n state: options.state\n }\n })\n );\n }\n /**\n * Fired when the app is toggled on or off\n * @param callback - The callback to run when the event is fired, takes an object with the new state\n */\n onToggled(callback) {\n this.addEventListener(\"app-toggled\", (evt) => {\n if (!(evt instanceof CustomEvent)) return;\n callback(evt.detail);\n });\n }\n /**\n * Fired when the toolbar placement is updated by the user\n * @param callback - The callback to run when the event is fired, takes an object with the new placement\n */\n onToolbarPlacementUpdated(callback) {\n this.addEventListener(\"placement-updated\", (evt) => {\n if (!(evt instanceof CustomEvent)) return;\n callback(evt.detail);\n });\n }\n}\nconst serverHelpers = {\n /**\n * Send a message to the server, the payload can be any serializable data.\n *\n * The server can listen for this message in the `astro:server:config` hook of an Astro integration, using the `toolbar.on` method.\n *\n * @param event - The event name\n * @param payload - The payload to send\n */\n send: (event, payload) => {\n if (import.meta.hot) {\n import.meta.hot.send(event, payload);\n }\n },\n /**\n * Receive a message from the server.\n * @param event - The event name\n * @param callback - The callback to run when the event is received.\n * The payload's content will be passed to the callback as an argument\n */\n on: (event, callback) => {\n if (import.meta.hot) {\n import.meta.hot.on(event, callback);\n }\n }\n};\nexport {\n ToolbarAppEventTarget,\n serverHelpers\n};\n","import { defaultSettings, settings } from \"../settings.js\";\nconst placements = [\"bottom-left\", \"bottom-center\", \"bottom-right\"];\nfunction isValidPlacement(value) {\n return placements.map(String).includes(value);\n}\nclass DevToolbarWindow extends HTMLElement {\n shadowRoot;\n _placement = defaultSettings.placement;\n get placement() {\n return this._placement;\n }\n set placement(value) {\n if (!isValidPlacement(value)) {\n settings.logger.error(\n `Invalid placement: ${value}, expected one of ${placements.join(\", \")}, got ${value}.`\n );\n return;\n }\n this._placement = value;\n this.updateStyle();\n }\n static observedAttributes = [\"placement\"];\n constructor() {\n super();\n this.shadowRoot = this.attachShadow({ mode: \"open\" });\n }\n async connectedCallback() {\n this.shadowRoot.innerHTML = `\n\t\t\t<style>\n\t\t\t\t:host {\n\t\t\t\t\tbox-sizing: border-box;\n\t\t\t\t\tdisplay: flex;\n\t\t\t\t\tflex-direction: column;\n\t\t\t\t\tbackground: linear-gradient(0deg, #13151A, #13151A), linear-gradient(0deg, #343841, #343841);\n\t\t\t\t\tborder: 1px solid rgba(52, 56, 65, 1);\n\t\t\t\t\twidth: min(640px, 100%);\n\t\t\t\t\tmax-height: 480px;\n\t\t\t\t\tborder-radius: 12px;\n\t\t\t\t\tpadding: 24px;\n\t\t\t\t\tfont-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n\t\t\t\t\tcolor: rgba(191, 193, 201, 1);\n\t\t\t\t\tposition: fixed;\n\t\t\t\t\tz-index: 999999999;\n\t\t\t\t\tbottom: 72px;\n\t\t\t\t\tbox-shadow: 0px 0px 0px 0px rgba(19, 21, 26, 0.30), 0px 1px 2px 0px rgba(19, 21, 26, 0.29), 0px 4px 4px 0px rgba(19, 21, 26, 0.26), 0px 10px 6px 0px rgba(19, 21, 26, 0.15), 0px 17px 7px 0px rgba(19, 21, 26, 0.04), 0px 26px 7px 0px rgba(19, 21, 26, 0.01);\n\t\t\t\t}\n\n\t\t\t\t@media (forced-colors: active) {\n\t\t\t\t\t:host {\n\t\t\t\t\t\tbackground: white;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t@media (max-width: 640px) {\n\t\t\t\t\t:host {\n\t\t\t\t\t\tborder-radius: 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t::slotted(h1), ::slotted(h2), ::slotted(h3), ::slotted(h4), ::slotted(h5) {\n\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\n\t\t\t\t::slotted(h1) {\n\t\t\t\t\tfont-size: 22px;\n\t\t\t\t}\n\n\t\t\t\t::slotted(h2) {\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t}\n\n\t\t\t\t::slotted(h3) {\n\t\t\t\t\tfont-size: 18px;\n\t\t\t\t}\n\n\t\t\t\t::slotted(h4) {\n\t\t\t\t\tfont-size: 16px;\n\t\t\t\t}\n\n\t\t\t\t::slotted(h5) {\n\t\t\t\t\tfont-size: 14px;\n\t\t\t\t}\n\n\t\t\t\thr, ::slotted(hr) {\n\t\t\t\t\tborder: 1px solid rgba(27, 30, 36, 1);\n\t\t\t\t\tmargin: 1em 0;\n\t\t\t\t}\n\n\t\t\t\tp, ::slotted(p) {\n\t\t\t\t\tline-height: 1.5em;\n\t\t\t\t}\n\t\t\t</style>\n\t\t\t<style id=\"selected-style\"></style>\n\n\t\t\t<slot />\n\t\t`;\n this.updateStyle();\n }\n attributeChangedCallback() {\n if (this.hasAttribute(\"placement\"))\n this.placement = this.getAttribute(\"placement\");\n }\n updateStyle() {\n const style = this.shadowRoot.querySelector(\"#selected-style\");\n if (style) {\n const styleMap = {\n \"bottom-left\": `\n\t\t\t\t\t:host {\n\t\t\t\t\t\tleft: 16px;\n\t\t\t\t\t}\n\t\t\t\t`,\n \"bottom-center\": `\n\t\t\t\t\t:host {\n\t\t\t\t\t\tleft: 50%;\n\t\t\t\t\t\ttransform: translateX(-50%);\n\t\t\t\t\t}\n\t\t\t\t`,\n \"bottom-right\": `\n\t\t\t\t\t:host {\n\t\t\t\t\t\tright: 16px;\n\t\t\t\t\t}\n\t\t\t\t`\n };\n style.innerHTML = styleMap[this.placement];\n }\n }\n}\nexport {\n DevToolbarWindow,\n isValidPlacement,\n placements\n};\n","import { isValidPlacement } from \"./ui-library/window.js\";\nconst defaultSettings = {\n disableAppNotification: false,\n verbose: false,\n placement: \"bottom-center\"\n};\nconst settings = getSettings();\nfunction getSettings() {\n let _settings = { ...defaultSettings };\n const configPlacement = globalThis.__astro_dev_toolbar__?.placement;\n if (configPlacement && isValidPlacement(configPlacement)) {\n _settings.placement = configPlacement;\n }\n const toolbarSettings = localStorage.getItem(\"astro:dev-toolbar:settings\");\n if (toolbarSettings) {\n _settings = { ..._settings, ...JSON.parse(toolbarSettings) };\n }\n function updateSetting(key, value) {\n _settings[key] = value;\n localStorage.setItem(\"astro:dev-toolbar:settings\", JSON.stringify(_settings));\n }\n function log(message, level = \"log\") {\n console[level](\n `%cAstro`,\n \"background: linear-gradient(66.77deg, #D83333 0%, #F041FF 100%); color: white; padding-inline: 4px; border-radius: 2px; font-family: monospace;\",\n message\n );\n }\n return {\n get config() {\n return _settings;\n },\n updateSetting,\n logger: {\n log,\n warn: (message) => {\n log(message, \"warn\");\n },\n error: (message) => {\n log(message, \"error\");\n },\n verboseLog: (message) => {\n if (_settings.verbose) {\n log(message);\n }\n }\n }\n };\n}\nexport {\n defaultSettings,\n settings\n};\n","import { loadDevToolbarApps } from \"astro:toolbar:internal\";\nimport { ToolbarAppEventTarget } from \"./helpers.js\";\nimport { settings } from \"./settings.js\";\nlet overlay;\ndocument.addEventListener(\"DOMContentLoaded\", async () => {\n const [\n customAppsDefinitions,\n { default: astroDevToolApp },\n { default: astroAuditApp },\n { default: astroXrayApp },\n { default: astroSettingsApp },\n { AstroDevToolbar, DevToolbarCanvas, getAppIcon },\n {\n DevToolbarCard,\n DevToolbarHighlight,\n DevToolbarTooltip,\n DevToolbarWindow,\n DevToolbarToggle,\n DevToolbarButton,\n DevToolbarBadge,\n DevToolbarIcon,\n DevToolbarSelect,\n DevToolbarRadioCheckbox\n }\n ] = await Promise.all([\n loadDevToolbarApps(),\n import(\"./apps/astro.js\"),\n import(\"./apps/audit/index.js\"),\n import(\"./apps/xray.js\"),\n import(\"./apps/settings.js\"),\n import(\"./toolbar.js\"),\n import(\"./ui-library/index.js\")\n ]);\n customElements.define(\"astro-dev-toolbar\", AstroDevToolbar);\n customElements.define(\"astro-dev-toolbar-window\", DevToolbarWindow);\n customElements.define(\"astro-dev-toolbar-app-canvas\", DevToolbarCanvas);\n customElements.define(\"astro-dev-toolbar-tooltip\", DevToolbarTooltip);\n customElements.define(\"astro-dev-toolbar-highlight\", DevToolbarHighlight);\n customElements.define(\"astro-dev-toolbar-card\", DevToolbarCard);\n customElements.define(\"astro-dev-toolbar-toggle\", DevToolbarToggle);\n customElements.define(\"astro-dev-toolbar-button\", DevToolbarButton);\n customElements.define(\"astro-dev-toolbar-badge\", DevToolbarBadge);\n customElements.define(\"astro-dev-toolbar-icon\", DevToolbarIcon);\n customElements.define(\"astro-dev-toolbar-select\", DevToolbarSelect);\n customElements.define(\"astro-dev-toolbar-radio-checkbox\", DevToolbarRadioCheckbox);\n overlay = document.createElement(\"astro-dev-toolbar\");\n const notificationLevels = [\"error\", \"warning\", \"info\"];\n const notificationSVGs = {\n error: '<svg viewBox=\"0 0 10 10\" style=\"--fill:var(--fill-default);--fill-default:#B33E66;--fill-hover:#E3AFC1;\"><rect width=\"9\" height=\"9\" x=\".5\" y=\".5\" fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" rx=\"4.5\"/></svg>',\n warning: '<svg width=\"12\" height=\"10\" fill=\"none\" style=\"--fill:var(--fill-default);--fill-default:#B58A2D;--fill-hover:#D5B776;\"><path fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" d=\"M7.29904 1.25c-.57735-1-2.02073-1-2.59808 0l-3.4641 6C.65951 8.25 1.3812 9.5 2.5359 9.5h6.9282c1.1547 0 1.8764-1.25 1.299-2.25l-3.46406-6Z\"/></svg>',\n info: '<svg viewBox=\"0 0 10 10\" style=\"--fill:var(--fill-default);--fill-default:#3645D9;--fill-hover:#BDC3FF;\"><rect width=\"9\" height=\"9\" x=\".5\" y=\".5\" fill=\"var(--fill)\" stroke=\"#13151A\" stroke-width=\"2\" rx=\"1.5\"/></svg>'\n };\n const prepareApp = (appDefinition, builtIn) => {\n const eventTarget = new ToolbarAppEventTarget();\n const app = {\n ...appDefinition,\n builtIn,\n active: false,\n status: \"loading\",\n notification: { state: false, level: void 0 },\n eventTarget\n };\n eventTarget.addEventListener(\"toggle-notification\", (evt) => {\n if (!(evt instanceof CustomEvent)) return;\n const target = overlay.shadowRoot?.querySelector(`[data-app-id=\"${app.id}\"]`);\n if (!target) return;\n const notificationElement = target.querySelector(\".notification\");\n if (!notificationElement) return;\n let newState = evt.detail.state ?? true;\n let level = notificationLevels.includes(evt?.detail?.level) ? evt.detail.level : \"error\";\n app.notification.state = newState;\n if (newState) app.notification.level = level;\n notificationElement.toggleAttribute(\"data-active\", newState);\n if (newState) {\n notificationElement.setAttribute(\"data-level\", level);\n notificationElement.innerHTML = notificationSVGs[level];\n }\n });\n const onToggleApp = async (evt) => {\n let newState = void 0;\n if (evt instanceof CustomEvent) {\n newState = evt.detail.state ?? true;\n }\n await overlay.setAppStatus(app, newState);\n };\n eventTarget.addEventListener(\"toggle-app\", onToggleApp);\n return app;\n };\n const astroMoreApp = {\n id: \"astro:more\",\n name: \"More\",\n icon: \"dots-three\",\n init(canvas, eventTarget) {\n const hiddenApps = apps.filter((p) => !p.builtIn).slice(overlay.customAppsToShow);\n createDropdown();\n document.addEventListener(\"astro:after-swap\", createDropdown);\n function createDropdown() {\n const style = document.createElement(\"style\");\n style.innerHTML = `\n\t\t\t\t\t#dropdown {\n\t\t\t\t\t\tbackground: rgba(19, 21, 26, 1);\n\t\t\t\t\t\tborder: 1px solid rgba(52, 56, 65, 1);\n\t\t\t\t\t\tborder-radius: 12px;\n\t\t\t\t\t\tbox-shadow: 0px 0px 0px 0px rgba(19, 21, 26, 0.30), 0px 1px 2px 0px rgba(19, 21, 26, 0.29), 0px 4px 4px 0px rgba(19, 21, 26, 0.26), 0px 10px 6px 0px rgba(19, 21, 26, 0.15), 0px 17px 7px 0px rgba(19, 21, 26, 0.04), 0px 26px 7px 0px rgba(19, 21, 26, 0.01);\n\t\t\t\t\t\twidth: 192px;\n\t\t\t\t\t\tpadding: 8px;\n\t\t\t\t\t\tz-index: 2000000010;\n\t\t\t\t\t\ttransform: translate(-50%, 0%);\n\t\t\t\t\t\tposition: fixed;\n\t\t\t\t\t\tbottom: 72px;\n\t\t\t\t\t\tleft: 50%;\n\t\t\t\t\t}\n\n\t\t\t\t\t.notification {\n\t\t\t\t\t\tdisplay: none;\n\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\ttop: -4px;\n\t\t\t\t\t\tright: -5px;\n\t\t\t\t\t\twidth: 12px;\n\t\t\t\t\t\theight: 10px;\n\t\t\t\t\t}\n\n\t\t\t\t\t.notification svg {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown:not([data-no-notification]) .notification[data-active] {\n\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown button {\n\t\t\t\t\t\tborder: 0;\n\t\t\t\t\t\tbackground: transparent;\n\t\t\t\t\t\tcolor: white;\n\t\t\t\t\t\tfont-family: system-ui, sans-serif;\n\t\t\t\t\t\tfont-size: 14px;\n\t\t\t\t\t\twhite-space: nowrap;\n\t\t\t\t\t\ttext-decoration: none;\n\t\t\t\t\t\tmargin: 0;\n\t\t\t\t\t\tdisplay: flex;\n\t\t\t\t\t\talign-items: center;\n\t\t\t\t\t\twidth: 100%;\n\t\t\t\t\t\tpadding: 8px;\n\t\t\t\t\t\tborder-radius: 8px;\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown button:hover, #dropdown button:focus-visible {\n\t\t\t\t\t\tbackground: #FFFFFF20;\n\t\t\t\t\t\tcursor: pointer;\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown button.active {\n\t\t\t\t\t\tbackground: rgba(71, 78, 94, 1);\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown .icon {\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\theight: 20px;\n\t\t\t\t\t\twidth: 20px;\n\t\t\t\t\t\tpadding: 1px;\n\t\t\t\t\t\tmargin-right: 0.5em;\n\t\t\t\t\t}\n\n\t\t\t\t\t#dropdown .icon svg {\n\t\t\t\t\t\tmax-height: 100%;\n\t\t\t\t\t\tmax-width: 100%;\n\t\t\t\t\t}\n\t\t\t\t`;\n canvas.append(style);\n const dropdown = document.createElement(\"div\");\n dropdown.id = \"dropdown\";\n dropdown.toggleAttribute(\"data-no-notification\", settings.config.disableAppNotification);\n for (const app of hiddenApps) {\n const buttonContainer = document.createElement(\"div\");\n buttonContainer.classList.add(\"item\");\n const button = document.createElement(\"button\");\n button.setAttribute(\"data-app-id\", app.id);\n const iconContainer = document.createElement(\"div\");\n const iconElement = document.createElement(\"template\");\n iconElement.innerHTML = app.icon ? getAppIcon(app.icon) : \"?\";\n iconContainer.append(iconElement.content.cloneNode(true));\n const notification = document.createElement(\"div\");\n notification.classList.add(\"notification\");\n iconContainer.append(notification);\n iconContainer.classList.add(\"icon\");\n button.append(iconContainer);\n button.append(document.createTextNode(app.name));\n button.addEventListener(\"click\", () => {\n overlay.toggleAppStatus(app);\n });\n buttonContainer.append(button);\n dropdown.append(buttonContainer);\n app.eventTarget.addEventListener(\"toggle-notification\", (evt) => {\n if (!(evt instanceof CustomEvent)) return;\n let newState = evt.detail.state ?? true;\n let level = notificationLevels.includes(evt?.detail?.level) ? evt.detail.level : \"error\";\n notification.toggleAttribute(\"data-active\", newState);\n if (newState) {\n notification.setAttribute(\"data-level\", level);\n notification.innerHTML = notificationSVGs[level];\n }\n app.notification.state = newState;\n if (newState) app.notification.level = level;\n eventTarget.dispatchEvent(\n new CustomEvent(\"toggle-notification\", {\n detail: {\n state: hiddenApps.some((p) => p.notification.state === true),\n level: [\"error\", \"warning\", \"info\"].find(\n (notificationLevel) => hiddenApps.some(\n (p) => p.notification.state === true && p.notification.level === notificationLevel\n )\n ) ?? \"error\"\n }\n })\n );\n });\n }\n canvas.append(dropdown);\n }\n }\n };\n const apps = [\n ...[astroDevToolApp, astroXrayApp, astroAuditApp, astroSettingsApp, astroMoreApp].map(\n (appDef) => prepareApp(appDef, true)\n ),\n ...customAppsDefinitions.map((appDef) => prepareApp(appDef, false))\n ];\n overlay.apps = apps;\n document.body.append(overlay);\n document.addEventListener(\"astro:after-swap\", () => {\n document.body.append(overlay);\n });\n});\n"],"x_google_ignoreList":[0,1,2,3],"mappings":";;AAAA,IAAM,wBAAN,cAAoC,YAAY;CAC9C,cAAc;EACZ,MAAM;CACR;;;;;;;CAOA,mBAAmB,SAAS;EAC1B,KAAK,cACH,IAAI,YAAY,uBAAuB,EACrC,QAAQ;GACN,OAAO,QAAQ;GACf,OAAO,QAAQ,UAAU,OAAO,QAAQ,QAAQ,KAAK;EACvD,EACF,CAAC,CACH;CACF;;;;;;CAMA,YAAY,SAAS;EACnB,KAAK,cACH,IAAI,YAAY,cAAc,EAC5B,QAAQ,EACN,OAAO,QAAQ,MACjB,EACF,CAAC,CACH;CACF;;;;;CAKA,UAAU,UAAU;EAClB,KAAK,iBAAiB,gBAAgB,QAAQ;GAC5C,IAAI,EAAE,eAAe,cAAc;GACnC,SAAS,IAAI,MAAM;EACrB,CAAC;CACH;;;;;CAKA,0BAA0B,UAAU;EAClC,KAAK,iBAAiB,sBAAsB,QAAQ;GAClD,IAAI,EAAE,eAAe,cAAc;GACnC,SAAS,IAAI,MAAM;EACrB,CAAC;CACH;AACF;AACA,IAAM,gBAAgB;;;;;;;;;CASpB,OAAO,OAAO,YAAY;EACxB,IAAI,OAAO,KAAK,KACd,OAAO,KAAK,IAAI,KAAK,OAAO,OAAO;CAEvC;;;;;;;CAOA,KAAK,OAAO,aAAa;EACvB,IAAI,OAAO,KAAK,KACd,OAAO,KAAK,IAAI,GAAG,OAAO,QAAQ;CAEtC;AACF;;;AC/EA,IAAM,aAAa;CAAC;CAAe;CAAiB;AAAc;AAClE,SAAS,iBAAiB,OAAO;CAC/B,OAAO,WAAW,IAAI,MAAM,CAAC,CAAC,SAAS,KAAK;AAC9C;AACA,IAAM,mBAAN,cAA+B,YAAY;CACzC;CACA,aAAa,gBAAgB;CAC7B,IAAI,YAAY;EACd,OAAO,KAAK;CACd;CACA,IAAI,UAAU,OAAO;EACnB,IAAI,CAAC,iBAAiB,KAAK,GAAG;GAC5B,SAAS,OAAO,MACd,sBAAsB,MAAM,oBAAoB,WAAW,KAAK,IAAI,EAAE,QAAQ,MAAM,EACtF;GACA;EACF;EACA,KAAK,aAAa;EAClB,KAAK,YAAY;CACnB;CACA,OAAO,qBAAqB,CAAC,WAAW;CACxC,cAAc;EACZ,MAAM;EACN,KAAK,aAAa,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;CACtD;CACA,MAAM,oBAAoB;EACxB,KAAK,WAAW,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsE5B,KAAK,YAAY;CACnB;CACA,2BAA2B;EACzB,IAAI,KAAK,aAAa,WAAW,GAC/B,KAAK,YAAY,KAAK,aAAa,WAAW;CAClD;CACA,cAAc;EACZ,MAAM,QAAQ,KAAK,WAAW,cAAc,iBAAiB;EAC7D,IAAI,OAmBF,MAAM,YAAY;GAjBhB,eAAe;;;;;GAKf,iBAAiB;;;;;;GAMjB,gBAAgB;;;;;EAMO,EAAE,KAAK;CAEpC;AACF;;;AC9HA,IAAM,kBAAkB;CACtB,wBAAwB;CACxB,SAAS;CACT,WAAW;AACb;AACA,IAAM,WAAW,YAAY;AAC7B,SAAS,cAAc;CACrB,IAAI,YAAY,EAAE,GAAG,gBAAgB;CACrC,MAAM,kBAAkB,WAAW,uBAAuB;CAC1D,IAAI,mBAAmB,iBAAiB,eAAe,GACrD,UAAU,YAAY;CAExB,MAAM,kBAAkB,aAAa,QAAQ,4BAA4B;CACzE,IAAI,iBACF,YAAY;EAAE,GAAG;EAAW,GAAG,KAAK,MAAM,eAAe;CAAE;CAE7D,SAAS,cAAc,KAAK,OAAO;EACjC,UAAU,OAAO;EACjB,aAAa,QAAQ,8BAA8B,KAAK,UAAU,SAAS,CAAC;CAC9E;CACA,SAAS,IAAI,SAAS,QAAQ,OAAO;EACnC,QAAQ,MAAM,CACZ,WACA,mJACA,OACF;CACF;CACA,OAAO;EACL,IAAI,SAAS;GACX,OAAO;EACT;EACA;EACA,QAAQ;GACN;GACA,OAAO,YAAY;IACjB,IAAI,SAAS,MAAM;GACrB;GACA,QAAQ,YAAY;IAClB,IAAI,SAAS,OAAO;GACtB;GACA,aAAa,YAAY;IACvB,IAAI,UAAU,SACZ,IAAI,OAAO;GAEf;EACF;CACF;AACF;;;AC7CA,IAAI;AACJ,SAAS,iBAAiB,oBAAoB,YAAY;CACxD,MAAM,CACJ,uBACA,EAAE,SAAS,mBACX,EAAE,SAAS,iBACX,EAAE,SAAS,gBACX,EAAE,SAAS,oBACX,EAAE,iBAAiB,kBAAkB,cACrC,EACE,gBACA,qBACA,mBACA,kBACA,kBACA,kBACA,iBACA,gBACA,kBACA,6BAEA,MAAM,QAAQ,IAAI;EACpB,mBAAmB;EACnB,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;EACP,OAAO;CACT,CAAC;CACD,eAAe,OAAO,qBAAqB,eAAe;CAC1D,eAAe,OAAO,4BAA4B,gBAAgB;CAClE,eAAe,OAAO,gCAAgC,gBAAgB;CACtE,eAAe,OAAO,6BAA6B,iBAAiB;CACpE,eAAe,OAAO,+BAA+B,mBAAmB;CACxE,eAAe,OAAO,0BAA0B,cAAc;CAC9D,eAAe,OAAO,4BAA4B,gBAAgB;CAClE,eAAe,OAAO,4BAA4B,gBAAgB;CAClE,eAAe,OAAO,2BAA2B,eAAe;CAChE,eAAe,OAAO,0BAA0B,cAAc;CAC9D,eAAe,OAAO,4BAA4B,gBAAgB;CAClE,eAAe,OAAO,oCAAoC,uBAAuB;CACjF,UAAU,SAAS,cAAc,mBAAmB;CACpD,MAAM,qBAAqB;EAAC;EAAS;EAAW;CAAM;CACtD,MAAM,mBAAmB;EACvB,OAAO;EACP,SAAS;EACT,MAAM;CACR;CACA,MAAM,cAAc,eAAe,YAAY;EAC7C,MAAM,cAAc,IAAI,sBAAsB;EAC9C,MAAM,MAAM;GACV,GAAG;GACH;GACA,QAAQ;GACR,QAAQ;GACR,cAAc;IAAE,OAAO;IAAO,OAAO,KAAK;GAAE;GAC5C;EACF;EACA,YAAY,iBAAiB,wBAAwB,QAAQ;GAC3D,IAAI,EAAE,eAAe,cAAc;GACnC,MAAM,SAAS,QAAQ,YAAY,cAAc,iBAAiB,IAAI,GAAG,GAAG;GAC5E,IAAI,CAAC,QAAQ;GACb,MAAM,sBAAsB,OAAO,cAAc,eAAe;GAChE,IAAI,CAAC,qBAAqB;GAC1B,IAAI,WAAW,IAAI,OAAO,SAAS;GACnC,IAAI,QAAQ,mBAAmB,SAAS,KAAK,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ;GACjF,IAAI,aAAa,QAAQ;GACzB,IAAI,UAAU,IAAI,aAAa,QAAQ;GACvC,oBAAoB,gBAAgB,eAAe,QAAQ;GAC3D,IAAI,UAAU;IACZ,oBAAoB,aAAa,cAAc,KAAK;IACpD,oBAAoB,YAAY,iBAAiB;GACnD;EACF,CAAC;EACD,MAAM,cAAc,OAAO,QAAQ;GACjC,IAAI,WAAW,KAAK;GACpB,IAAI,eAAe,aACjB,WAAW,IAAI,OAAO,SAAS;GAEjC,MAAM,QAAQ,aAAa,KAAK,QAAQ;EAC1C;EACA,YAAY,iBAAiB,cAAc,WAAW;EACtD,OAAO;CACT;CAsIA,MAAM,OAAO,CACX,GAAG;EAAC;EAAiB;EAAc;EAAe;EAAkB;GArIpE,IAAI;GACJ,MAAM;GACN,MAAM;GACN,KAAK,QAAQ,aAAa;IACxB,MAAM,aAAa,KAAK,QAAQ,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,MAAM,QAAQ,gBAAgB;IAChF,eAAe;IACf,SAAS,iBAAiB,oBAAoB,cAAc;IAC5D,SAAS,iBAAiB;KACxB,MAAM,QAAQ,SAAS,cAAc,OAAO;KAC5C,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAsElB,OAAO,OAAO,KAAK;KACnB,MAAM,WAAW,SAAS,cAAc,KAAK;KAC7C,SAAS,KAAK;KACd,SAAS,gBAAgB,wBAAwB,SAAS,OAAO,sBAAsB;KACvF,KAAK,MAAM,OAAO,YAAY;MAC5B,MAAM,kBAAkB,SAAS,cAAc,KAAK;MACpD,gBAAgB,UAAU,IAAI,MAAM;MACpC,MAAM,SAAS,SAAS,cAAc,QAAQ;MAC9C,OAAO,aAAa,eAAe,IAAI,EAAE;MACzC,MAAM,gBAAgB,SAAS,cAAc,KAAK;MAClD,MAAM,cAAc,SAAS,cAAc,UAAU;MACrD,YAAY,YAAY,IAAI,OAAO,WAAW,IAAI,IAAI,IAAI;MAC1D,cAAc,OAAO,YAAY,QAAQ,UAAU,IAAI,CAAC;MACxD,MAAM,eAAe,SAAS,cAAc,KAAK;MACjD,aAAa,UAAU,IAAI,cAAc;MACzC,cAAc,OAAO,YAAY;MACjC,cAAc,UAAU,IAAI,MAAM;MAClC,OAAO,OAAO,aAAa;MAC3B,OAAO,OAAO,SAAS,eAAe,IAAI,IAAI,CAAC;MAC/C,OAAO,iBAAiB,eAAe;OACrC,QAAQ,gBAAgB,GAAG;MAC7B,CAAC;MACD,gBAAgB,OAAO,MAAM;MAC7B,SAAS,OAAO,eAAe;MAC/B,IAAI,YAAY,iBAAiB,wBAAwB,QAAQ;OAC/D,IAAI,EAAE,eAAe,cAAc;OACnC,IAAI,WAAW,IAAI,OAAO,SAAS;OACnC,IAAI,QAAQ,mBAAmB,SAAS,KAAK,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ;OACjF,aAAa,gBAAgB,eAAe,QAAQ;OACpD,IAAI,UAAU;QACZ,aAAa,aAAa,cAAc,KAAK;QAC7C,aAAa,YAAY,iBAAiB;OAC5C;OACA,IAAI,aAAa,QAAQ;OACzB,IAAI,UAAU,IAAI,aAAa,QAAQ;OACvC,YAAY,cACV,IAAI,YAAY,uBAAuB,EACrC,QAAQ;QACN,OAAO,WAAW,MAAM,MAAM,EAAE,aAAa,UAAU,IAAI;QAC3D,OAAO;SAAC;SAAS;SAAW;QAAM,CAAC,CAAC,MACjC,sBAAsB,WAAW,MAC/B,MAAM,EAAE,aAAa,UAAU,QAAQ,EAAE,aAAa,UAAU,iBACnE,CACF,KAAK;OACP,EACF,CAAC,CACH;MACF,CAAC;KACH;KACA,OAAO,OAAO,QAAQ;IACxB;GACF;EAG+E;CAAC,CAAC,CAAC,KAC/E,WAAW,WAAW,QAAQ,IAAI,CACrC,GACA,GAAG,sBAAsB,KAAK,WAAW,WAAW,QAAQ,KAAK,CAAC,CACpE;CACA,QAAQ,OAAO;CACf,SAAS,KAAK,OAAO,OAAO;CAC5B,SAAS,iBAAiB,0BAA0B;EAClD,SAAS,KAAK,OAAO,OAAO;CAC9B,CAAC;AACH,CAAC"}