@birdapi/velinstyle 1.2.0 → 1.2.2

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 (89) hide show
  1. package/README.de.md +150 -24
  2. package/README.md +155 -33
  3. package/cli/__fixtures__/atelier-library/showcases/01-login/app.css +1 -0
  4. package/cli/__fixtures__/atelier-library/showcases/01-login/app.js +2 -0
  5. package/cli/__fixtures__/atelier-library/showcases/01-login/index.html +5 -0
  6. package/cli/__fixtures__/atelier-library/showcases/04-pricing/app.css +1 -0
  7. package/cli/__fixtures__/atelier-library/showcases/04-pricing/app.js +2 -0
  8. package/cli/__fixtures__/atelier-library/showcases/04-pricing/index.html +5 -0
  9. package/cli/__fixtures__/atelier-library/showcases/36-calendar/app.css +1 -0
  10. package/cli/__fixtures__/atelier-library/showcases/36-calendar/app.js +2 -0
  11. package/cli/__fixtures__/atelier-library/showcases/36-calendar/index.html +5 -0
  12. package/cli/atelier-catalog.json +1267 -0
  13. package/cli/atelier-formats.js +159 -0
  14. package/cli/atelier.js +382 -0
  15. package/cli/blueprints/empty-state.html +3 -5
  16. package/cli/cli-manifest.json +23 -10
  17. package/cli/docgen/extract-attributes.js +2 -0
  18. package/cli/docgen/extract-cli.js +1 -1
  19. package/cli/index.js +181 -6
  20. package/cli/production/component-graph.json +166 -0
  21. package/cli/production/explain.js +52 -0
  22. package/cli/production/extract.js +238 -0
  23. package/cli/production/graph.js +102 -0
  24. package/cli/production/report.js +78 -0
  25. package/cli/production/run.js +312 -0
  26. package/cli/production/trim-css.js +177 -0
  27. package/cli/production/trim-fonts.js +23 -0
  28. package/cli/production/trim-icons.js +38 -0
  29. package/cli/production/trim-js.js +48 -0
  30. package/cli/production/trim-motion.js +22 -0
  31. package/cli/production/trim-themes.js +50 -0
  32. package/cli/production/watch.js +38 -0
  33. package/cli/review.js +48 -1
  34. package/cli/scripts/write-atelier-fixtures.mjs +33 -0
  35. package/cli/transparency.js +221 -0
  36. package/components/index.js +3 -0
  37. package/components/runtime/component-loaders.js +3 -0
  38. package/components/velin-drawer.js +43 -4
  39. package/components/velin-empty-state.js +83 -0
  40. package/components/velin-modal.js +76 -15
  41. package/components/velin-otp-input.js +220 -0
  42. package/components/velin-password-strength.js +147 -0
  43. package/components/velin-sheet.js +49 -4
  44. package/core/a11y/component-contracts.json +23 -4
  45. package/core/attributes/registry.js +14 -0
  46. package/core/meta/knowledge/components.json +75 -3
  47. package/core/meta/schema.js +10 -0
  48. package/core/transparency/attach.js +74 -0
  49. package/core/transparency/claims.js +97 -0
  50. package/core/transparency/doctor.js +142 -0
  51. package/core/transparency/engine.js +75 -0
  52. package/core/transparency/export.js +98 -0
  53. package/core/transparency/index.js +30 -0
  54. package/core/transparency/migrate.js +130 -0
  55. package/core/transparency/normalize.js +125 -0
  56. package/core/transparency/policy.js +105 -0
  57. package/core/transparency/providers.js +235 -0
  58. package/core/transparency/registry.js +104 -0
  59. package/core/transparency/renderer.js +111 -0
  60. package/core/transparency/reporter.js +113 -0
  61. package/core/transparency/validator.js +112 -0
  62. package/dist/chunks/attach-H2ZSEAE6.js +365 -0
  63. package/dist/chunks/attributes-2ORR27KA.js +404 -0
  64. package/dist/chunks/attributes-DZCXX2RZ.js +404 -0
  65. package/dist/chunks/chunk-CQMTCEI6.js +113 -0
  66. package/dist/chunks/chunk-Y6HN7HWX.js +116 -0
  67. package/dist/chunks/runtime-entry.js +1 -1
  68. package/dist/chunks/velin-drawer-A7Q7EBOS.js +162 -0
  69. package/dist/chunks/velin-empty-state-3NTUH2RF.js +81 -0
  70. package/dist/chunks/velin-modal-3MV4FYBK.js +231 -0
  71. package/dist/chunks/velin-otp-input-PSK42MM6.js +207 -0
  72. package/dist/chunks/velin-password-strength-TAXMLSED.js +136 -0
  73. package/dist/chunks/velin-sheet-N2VVYXFP.js +157 -0
  74. package/dist/llms.txt +5 -4
  75. package/dist/search-index.json +94 -5
  76. package/dist/velin-agent.json +290 -23
  77. package/dist/velinstyle-components.iife.js +3189 -2202
  78. package/dist/velinstyle-components.js +3187 -2196
  79. package/dist/velinstyle-components.min.js +261 -119
  80. package/dist/velinstyle.css +214 -6
  81. package/dist/velinstyle.d.ts +3 -0
  82. package/dist/velinstyle.min.css +1 -1
  83. package/package.json +143 -142
  84. package/packages/velinstyle-skills/catalog.json +1 -1
  85. package/src/components/data-table.css +19 -0
  86. package/src/components/empty-auth.css +33 -0
  87. package/src/components/table.css +16 -6
  88. package/src/components/transparency.css +138 -0
  89. package/src/velinstyle.css +2 -0
@@ -0,0 +1,404 @@
1
+ import {
2
+ disconnectInViewObserver,
3
+ observeInView
4
+ } from "./chunk-7MCGPHVC.js";
5
+ import {
6
+ lazyDefine
7
+ } from "./chunk-CQMTCEI6.js";
8
+
9
+ // core/motion/effects.js
10
+ var VISIBLE_CLASS = "velin-in-view";
11
+ var EFFECT_MAP = {
12
+ reveal: ["velin-animate-on-scroll"],
13
+ fade: ["velin-animate-on-scroll", "velin-animate-on-scroll--fade"],
14
+ slide: ["velin-animate-on-scroll", "velin-animate-on-scroll--slide-up"],
15
+ "slide-up": ["velin-animate-on-scroll", "velin-animate-on-scroll--slide-up"],
16
+ "slide-down": ["velin-animate-on-scroll", "velin-animate-on-scroll--slide-down"],
17
+ "slide-left": ["velin-animate-on-scroll", "velin-animate-on-scroll--slide-left"],
18
+ "slide-right": ["velin-animate-on-scroll", "velin-animate-on-scroll--slide-right"],
19
+ scale: ["velin-animate-on-scroll", "velin-animate-on-scroll--scale"],
20
+ parallax: ["velin-parallax"],
21
+ "parallax-slow": ["velin-parallax", "velin-parallax--slow"],
22
+ hover: ["velin-animate-hover"],
23
+ "hover-lift": ["velin-animate-hover"],
24
+ flip: ["velin-animate-scale-in"],
25
+ blur: ["velin-animate-fade-in"]
26
+ };
27
+ function applyEffects(el, attrs = {}) {
28
+ const classes = /* @__PURE__ */ new Set();
29
+ for (const [name, value] of Object.entries(attrs)) {
30
+ if (value === "false" || value === "off") continue;
31
+ const mapped = EFFECT_MAP[name];
32
+ if (mapped) mapped.forEach((c) => classes.add(c));
33
+ if (name === "slide" && value && value !== "true" && value !== "") {
34
+ const key = `slide-${value}`;
35
+ EFFECT_MAP[key]?.forEach((c) => classes.add(c));
36
+ }
37
+ }
38
+ classes.forEach((c) => el.classList.add(c));
39
+ if (!el.classList.contains("velin-animate-on-scroll") && attrs.reveal !== void 0) {
40
+ el.classList.add("velin-animate-on-scroll");
41
+ }
42
+ return [...classes];
43
+ }
44
+ function markVisible(el) {
45
+ el.classList.add(VISIBLE_CLASS);
46
+ el.dataset.velinVisible = "true";
47
+ }
48
+ function prefersReducedMotion() {
49
+ return typeof window !== "undefined" && window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
50
+ }
51
+
52
+ // core/motion/stagger.js
53
+ var STAGGER_ATTR = "velin-stagger";
54
+ function applyStagger(listEl, value = "true") {
55
+ const base = value === "true" || value === "" ? 60 : parseInt(value, 10) || 60;
56
+ const children = [...listEl.children];
57
+ children.forEach((child, i) => {
58
+ child.style.setProperty("--velin-stagger-delay", `${i * base}ms`);
59
+ child.classList.add("velin-stagger-item");
60
+ });
61
+ listEl.classList.add("velin-stagger");
62
+ }
63
+ function enhanceStagger(root = document) {
64
+ root.querySelectorAll(`[${STAGGER_ATTR}]`).forEach((el) => {
65
+ if (el.dataset.velinStaggerDone) return;
66
+ el.dataset.velinStaggerDone = "1";
67
+ applyStagger(el, el.getAttribute(STAGGER_ATTR) || "true");
68
+ });
69
+ }
70
+
71
+ // core/motion/scroll.js
72
+ function smoothScrollTo(target, options = {}) {
73
+ const reduced = typeof window !== "undefined" && window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
74
+ const el = typeof target === "string" ? document.querySelector(target) : target;
75
+ if (!el) return;
76
+ el.scrollIntoView({
77
+ behavior: reduced || options.instant ? "auto" : "smooth",
78
+ block: options.block || "start",
79
+ inline: options.inline || "nearest"
80
+ });
81
+ if (el.tabIndex < 0 && !el.hasAttribute("tabindex")) {
82
+ el.setAttribute("tabindex", "-1");
83
+ }
84
+ el.focus({ preventScroll: true });
85
+ }
86
+ function bindSmoothScroll(root = document) {
87
+ root.querySelectorAll("[velin-scroll]").forEach((link) => {
88
+ if (link.dataset.velinScrollBound) return;
89
+ link.dataset.velinScrollBound = "1";
90
+ link.addEventListener("click", (e) => {
91
+ const href = link.getAttribute("href");
92
+ if (!href || !href.startsWith("#")) return;
93
+ const target = document.querySelector(href);
94
+ if (!target) return;
95
+ e.preventDefault();
96
+ smoothScrollTo(target);
97
+ });
98
+ });
99
+ }
100
+
101
+ // core/motion/index.js
102
+ var MOTION_ATTRS = ["velin-reveal", "velin-fade", "velin-slide", "velin-scale", "velin-parallax", "velin-hover"];
103
+ var teardownFns = [];
104
+ function initMotion(options = {}) {
105
+ const root = options.root || (typeof document !== "undefined" ? document : null);
106
+ if (!root) return () => {
107
+ };
108
+ const selector = options.selector || [
109
+ "[velin-reveal]",
110
+ "[velin-fade]",
111
+ "[velin-slide]",
112
+ "[velin-scale]",
113
+ "[velin-parallax]",
114
+ "[velin-hover]",
115
+ ".velin-animate-on-scroll"
116
+ ].join(",");
117
+ const elements = root.querySelectorAll(selector);
118
+ const reduced = prefersReducedMotion();
119
+ for (const el of elements) {
120
+ if (el.dataset.velinMotionInit) continue;
121
+ el.dataset.velinMotionInit = "1";
122
+ const attrs = {};
123
+ for (const name of MOTION_ATTRS) {
124
+ if (el.hasAttribute(name)) attrs[name.replace("velin-", "")] = el.getAttribute(name) || "true";
125
+ }
126
+ applyEffects(el, attrs);
127
+ if (reduced) {
128
+ markVisible(el);
129
+ continue;
130
+ }
131
+ const stop = observeInView(el, (node) => markVisible(node));
132
+ teardownFns.push(stop);
133
+ }
134
+ enhanceStagger(root);
135
+ bindSmoothScroll(root);
136
+ return () => {
137
+ teardownFns.forEach((fn) => fn());
138
+ teardownFns = [];
139
+ disconnectInViewObserver();
140
+ };
141
+ }
142
+
143
+ // core/attributes/registry.js
144
+ var registry = /* @__PURE__ */ new Map();
145
+ function registerAttribute(name, handler) {
146
+ registry.set(name, handler);
147
+ }
148
+ function getAttributeHandler(name) {
149
+ return registry.get(name);
150
+ }
151
+ function bridgeComponent(el, tag, attrs = {}) {
152
+ el.setAttribute("data-velin-component", tag);
153
+ for (const [k, v] of Object.entries(attrs)) {
154
+ if (v != null) el.setAttribute(k, v);
155
+ }
156
+ return lazyDefine(tag);
157
+ }
158
+ function registerBuiltins() {
159
+ registerAttribute("velin-modal", {
160
+ enhance(el) {
161
+ bridgeComponent(el, "velin-modal", { open: el.getAttribute("velin-modal") || "" });
162
+ }
163
+ });
164
+ registerAttribute("velin-tabs", { enhance: (el) => bridgeComponent(el, "velin-tabs") });
165
+ registerAttribute("velin-accordion", { enhance: (el) => bridgeComponent(el, "velin-accordion") });
166
+ registerAttribute("velin-tooltip", {
167
+ enhance(el) {
168
+ const tip = el.getAttribute("velin-tooltip") || el.getAttribute("title") || "";
169
+ if (tip && el.hasAttribute("title")) el.removeAttribute("title");
170
+ if (el.tagName === "VELIN-TOOLTIP" || el.tagName === "VELIN-TOOLTIP-WC") {
171
+ el.setAttribute("content", tip);
172
+ return lazyDefine("velin-tooltip");
173
+ }
174
+ const wc = document.createElement("velin-tooltip");
175
+ wc.setAttribute("content", tip);
176
+ const parent = el.parentElement;
177
+ if (parent) {
178
+ parent.insertBefore(wc, el);
179
+ wc.appendChild(el);
180
+ }
181
+ return lazyDefine("velin-tooltip");
182
+ }
183
+ });
184
+ registerAttribute("velin-copy", {
185
+ enhance(el) {
186
+ const text = el.getAttribute("velin-copy") || el.textContent?.trim() || "";
187
+ if (!el.querySelector("velin-copy")) {
188
+ const wc = document.createElement("velin-copy");
189
+ wc.setAttribute("value", text);
190
+ if (el.tagName === "BUTTON") {
191
+ wc.append(...el.childNodes);
192
+ el.replaceWith(wc);
193
+ return lazyDefine("velin-copy");
194
+ }
195
+ el.appendChild(wc);
196
+ }
197
+ return lazyDefine("velin-copy");
198
+ }
199
+ });
200
+ registerAttribute("velin-counter", {
201
+ enhance(el) {
202
+ bridgeComponent(el, "velin-counter", {
203
+ value: el.getAttribute("velin-counter") || "0"
204
+ });
205
+ }
206
+ });
207
+ registerAttribute("velin-notify", {
208
+ async enhance(el) {
209
+ await lazyDefine("velin-toast");
210
+ el.addEventListener("click", () => {
211
+ const msg = el.getAttribute("velin-notify") || el.textContent || "";
212
+ document.dispatchEvent(
213
+ new CustomEvent("velin-toast-show", { detail: { message: msg, variant: el.dataset.variant || "info" } })
214
+ );
215
+ });
216
+ }
217
+ });
218
+ registerAttribute("velin-theme", {
219
+ enhance(el) {
220
+ const theme = el.getAttribute("velin-theme") || "toggle";
221
+ if (theme === "toggle") {
222
+ if (!el.querySelector("velin-theme-toggle")) {
223
+ el.appendChild(document.createElement("velin-theme-toggle"));
224
+ }
225
+ return lazyDefine("velin-theme-toggle");
226
+ }
227
+ document.documentElement.setAttribute("data-velin-theme", theme);
228
+ }
229
+ });
230
+ registerAttribute("velin-scroll-top", {
231
+ enhance(el) {
232
+ const raw = el.getAttribute("velin-scroll-top");
233
+ const threshold = raw && raw !== "true" ? raw : "300";
234
+ if (el.tagName === "VELIN-SCROLL-TOP") {
235
+ if (raw && raw !== "true") el.setAttribute("threshold", threshold);
236
+ return lazyDefine("velin-scroll-top");
237
+ }
238
+ let wc = document.querySelector("velin-scroll-top");
239
+ if (!wc) {
240
+ wc = document.createElement("velin-scroll-top");
241
+ wc.setAttribute("threshold", threshold);
242
+ (el === document.body || el === document.documentElement ? document.body : el).appendChild(wc);
243
+ }
244
+ return lazyDefine("velin-scroll-top");
245
+ }
246
+ });
247
+ registerAttribute("velin-progress", {
248
+ enhance(el) {
249
+ const ring = el.hasAttribute("ring");
250
+ if (ring) return bridgeComponent(el, "velin-progress-ring");
251
+ el.classList.add("velin-progress");
252
+ const val = parseInt(el.getAttribute("velin-progress") || "0", 10);
253
+ el.setAttribute("role", "progressbar");
254
+ el.setAttribute("aria-valuenow", String(val));
255
+ el.style.setProperty("--velin-progress", `${Math.min(100, val)}%`);
256
+ }
257
+ });
258
+ registerAttribute("velin-search", {
259
+ async enhance(el) {
260
+ if (el.tagName !== "VELIN-SEARCH") {
261
+ const host = document.createElement("velin-search");
262
+ host.setAttribute("index", el.getAttribute("data-search-index") || "/search-index.json");
263
+ el.replaceWith(host);
264
+ host.appendChild(el);
265
+ }
266
+ return lazyDefine("velin-search");
267
+ }
268
+ });
269
+ registerAttribute("velin-lazy", {
270
+ enhance(el) {
271
+ if (el.tagName === "IMG") {
272
+ el.loading = "lazy";
273
+ el.decoding = "async";
274
+ if (el.hasAttribute("velin-skeleton") || el.dataset.velinSkeleton) {
275
+ el.classList.add("velin-skeleton", "velin-skeleton--image");
276
+ el.addEventListener("load", () => el.classList.remove("velin-skeleton", "velin-skeleton--image"), { once: true });
277
+ }
278
+ }
279
+ }
280
+ });
281
+ registerAttribute("velin-skeleton", {
282
+ enhance(el) {
283
+ const variant = el.getAttribute("velin-skeleton") || "text";
284
+ el.classList.add("velin-skeleton", `velin-skeleton--${variant}`);
285
+ const hasText = Boolean(el.textContent?.trim()) && el.children.length > 0;
286
+ if (!hasText && !el.textContent?.trim()) {
287
+ el.setAttribute("aria-hidden", "true");
288
+ }
289
+ }
290
+ });
291
+ registerAttribute("velin-loading", {
292
+ enhance(el) {
293
+ el.classList.add("velin-spinner");
294
+ el.setAttribute("aria-busy", "true");
295
+ el.setAttribute("role", "status");
296
+ if (!el.getAttribute("aria-label")?.trim()) {
297
+ el.setAttribute("aria-label", "Loading");
298
+ }
299
+ }
300
+ });
301
+ registerAttribute("velin-grid", {
302
+ enhance(el) {
303
+ const cols = el.getAttribute("velin-grid") || "auto";
304
+ el.classList.add("velin-grid");
305
+ if (cols !== "auto") el.style.setProperty("--velin-grid-cols", cols);
306
+ }
307
+ });
308
+ registerAttribute("velin-anchor", {
309
+ enhance(el) {
310
+ if (!el.id && el.getAttribute("velin-anchor")) el.id = el.getAttribute("velin-anchor");
311
+ el.setAttribute("tabindex", "-1");
312
+ }
313
+ });
314
+ registerAttribute("velin-code", {
315
+ async enhance(el) {
316
+ const lang = el.getAttribute("velin-code") || el.getAttribute("language") || el.getAttribute("data-language") || "";
317
+ el.classList.add("velin-code-block");
318
+ if (lang && lang !== "true") {
319
+ el.dataset.language = lang;
320
+ if (!el.getAttribute("language")) el.setAttribute("language", lang);
321
+ }
322
+ if (!el.querySelector("[data-velin-copy]")) {
323
+ const btn = document.createElement("button");
324
+ btn.type = "button";
325
+ btn.className = "velin-code-block__copy velin-btn velin-btn--sm";
326
+ btn.textContent = "Copy";
327
+ btn.setAttribute("data-velin-copy", "");
328
+ btn.setAttribute("velin-copy", el.querySelector("code")?.textContent || el.textContent || "");
329
+ el.style.position = "relative";
330
+ el.appendChild(btn);
331
+ }
332
+ await lazyDefine("velin-copy");
333
+ const { initHighlight, highlightElement } = await import("./highlight-M2ELQNYK.js");
334
+ const immediate = el.getAttribute("data-velin-highlight") === "immediate" || typeof matchMedia !== "undefined" && matchMedia("(prefers-reduced-motion: reduce)").matches;
335
+ if (immediate) {
336
+ await highlightElement(el);
337
+ } else {
338
+ initHighlight(el, { root: el });
339
+ }
340
+ }
341
+ });
342
+ registerAttribute("velin-quote", {
343
+ enhance(el) {
344
+ if (el.tagName === "BLOCKQUOTE" || el.tagName === "Q") {
345
+ el.classList.add("velin-quote");
346
+ }
347
+ }
348
+ });
349
+ registerAttribute("velin-highlight", {
350
+ enhance(el) {
351
+ el.classList.add("velin-highlight");
352
+ }
353
+ });
354
+ registerAttribute("velin-transparency", {
355
+ async enhance(el) {
356
+ const { attach } = await import("./attach-H2ZSEAE6.js");
357
+ attach(el);
358
+ }
359
+ });
360
+ registerAttribute("velin-disclosure", {
361
+ async enhance(el) {
362
+ const { attach } = await import("./attach-H2ZSEAE6.js");
363
+ if (!el.hasAttribute("velin-transparency")) el.setAttribute("velin-transparency", "");
364
+ attach(el);
365
+ }
366
+ });
367
+ for (const motion of ["velin-reveal", "velin-fade", "velin-slide", "velin-scale", "velin-parallax", "velin-hover", "velin-stagger", "velin-scroll"]) {
368
+ registerAttribute(motion, { enhance() {
369
+ } });
370
+ }
371
+ }
372
+ registerBuiltins();
373
+ var enhanced = /* @__PURE__ */ new WeakSet();
374
+ async function bootAttributes(root = document) {
375
+ const selector = [...registry.keys()].map((a) => `[${a}]`).join(",");
376
+ const elements = root.querySelectorAll(selector);
377
+ for (const el of elements) {
378
+ if (enhanced.has(el)) continue;
379
+ for (const attr of registry.keys()) {
380
+ if (!el.hasAttribute(attr)) continue;
381
+ const handler = registry.get(attr);
382
+ if (handler?.enhance) await handler.enhance(el);
383
+ }
384
+ enhanced.add(el);
385
+ }
386
+ initMotion({ root });
387
+ if (typeof HTMLElement !== "undefined") {
388
+ const { bindDeclarativeSearch } = await import("./velin-search-L3UG6NDQ.js");
389
+ bindDeclarativeSearch(root);
390
+ if (!document.querySelector("velin-announcer")) {
391
+ const { getAnnouncer } = await import("./a11y-utils-IRC7LOPF.js");
392
+ getAnnouncer();
393
+ }
394
+ }
395
+ }
396
+ function listRegisteredAttributes() {
397
+ return [...registry.keys()];
398
+ }
399
+ export {
400
+ bootAttributes,
401
+ getAttributeHandler,
402
+ listRegisteredAttributes,
403
+ registerAttribute
404
+ };
@@ -0,0 +1,113 @@
1
+ // components/runtime/component-loaders.js
2
+ var COMPONENT_LOADERS = {
3
+ "velin-accordion": () => import("./velin-accordion-WSY6BMLA.js"),
4
+ "velin-announcer": () => import("./velin-announcer-PVTXXCWR.js"),
5
+ "velin-bottom-nav": () => import("./velin-bottom-nav-N5F4UO2I.js"),
6
+ "velin-calendar": () => import("./velin-calendar-XC7JRDSH.js"),
7
+ "velin-carousel": () => import("./velin-carousel-ZTBANFQQ.js"),
8
+ "velin-code-block": () => import("./velin-code-block-ZGWG7JI5.js"),
9
+ "velin-collapse": () => import("./velin-collapse-5XYBUIID.js"),
10
+ "velin-combobox": () => import("./velin-combobox-56V2ZWT5.js"),
11
+ "velin-command": () => import("./velin-command-ZJSLPK7B.js"),
12
+ "velin-copy": () => import("./velin-copy-XDQSV2XU.js"),
13
+ "velin-countdown": () => import("./velin-countdown-V4Z5MA63.js"),
14
+ "velin-counter": () => import("./velin-counter-L5FYJF7A.js"),
15
+ "velin-data-table": () => import("./velin-data-table-UVR42UUM.js"),
16
+ "velin-dialog": () => import("./velin-dialog-3YK2RPRV.js"),
17
+ "velin-drawer": () => import("./velin-drawer-CCM6S25D.js"),
18
+ "velin-dropdown": () => import("./velin-dropdown-PLUIFA5M.js"),
19
+ "velin-email": () => import("./velin-email-TNFONXPW.js"),
20
+ "velin-file-dropzone": () => import("./velin-file-dropzone-QRGF2JNA.js"),
21
+ "velin-form-summary": () => import("./velin-form-summary-XRQ7COQH.js"),
22
+ "velin-icon": () => import("./velin-icon-A6NCXGUK.js"),
23
+ "velin-lightbox": () => import("./velin-lightbox-P725FLTY.js"),
24
+ "velin-live-dot": () => import("./velin-live-dot-RJHX2DGY.js"),
25
+ "velin-menubar": () => import("./velin-menubar-6I2LM5HL.js"),
26
+ "velin-modal": () => import("./velin-modal-ICTMGRSU.js"),
27
+ "velin-persist": () => import("./velin-persist-DFPL3QP4.js"),
28
+ "velin-popover": () => import("./velin-popover-WZG2GHBL.js"),
29
+ "velin-progress-ring": () => import("./velin-progress-ring-E4YRLZHH.js"),
30
+ "velin-rating": () => import("./velin-rating-QBBYRRBU.js"),
31
+ "velin-scroll-top": () => import("./velin-scroll-top-OHYVVHHY.js"),
32
+ "velin-scrollspy": () => import("./velin-scrollspy-OKCT4FDV.js"),
33
+ "velin-search": () => import("./velin-search-L3UG6NDQ.js"),
34
+ "velin-secure-field": () => import("./velin-secure-field-DGYMP7OK.js"),
35
+ "velin-segmented-control": () => import("./velin-segmented-control-P74GJPAR.js"),
36
+ "velin-sheet": () => import("./velin-sheet-X7RXIWKV.js"),
37
+ "velin-sparkline": () => import("./velin-sparkline-XVTFC6GE.js"),
38
+ "velin-stepper": () => import("./velin-stepper-4YQJUHPC.js"),
39
+ "velin-stepper-wc": () => import("./velin-stepper-4YQJUHPC.js"),
40
+ "velin-tabs": () => import("./velin-tabs-5UQ5ZVMV.js"),
41
+ "velin-theme-toggle": () => import("./velin-theme-toggle-32J2CBNC.js"),
42
+ "velin-toast": () => import("./velin-toast-UG5LWTG2.js"),
43
+ "velin-tooltip": () => import("./velin-tooltip-ZDH5SDLU.js"),
44
+ "velin-tooltip-wc": () => import("./velin-tooltip-ZDH5SDLU.js")
45
+ };
46
+
47
+ // components/runtime/index.js
48
+ var registry = /* @__PURE__ */ new Map();
49
+ var VELIN_TAG_RE = /^velin-[a-z0-9-]+$/;
50
+ function whenDefined(tagName) {
51
+ if (typeof customElements === "undefined") {
52
+ return Promise.reject(new Error("customElements not available"));
53
+ }
54
+ return customElements.whenDefined(tagName);
55
+ }
56
+ async function lazyDefine(tagName) {
57
+ const loader = COMPONENT_LOADERS[tagName];
58
+ if (!loader) {
59
+ throw new Error(`Unknown Velin component: ${tagName}`);
60
+ }
61
+ if (registry.has(tagName)) return registry.get(tagName);
62
+ const p = loader().then((mod) => {
63
+ const Cls = mod.default;
64
+ if (Cls && !customElements.get(tagName)) {
65
+ customElements.define(tagName, Cls);
66
+ }
67
+ return Cls;
68
+ });
69
+ registry.set(tagName, p);
70
+ return p;
71
+ }
72
+ async function register(tagNames) {
73
+ return Promise.all(tagNames.map((t) => lazyDefine(t)));
74
+ }
75
+ function collectTagsFromDOM(root) {
76
+ const tags = /* @__PURE__ */ new Set();
77
+ root.querySelectorAll("[data-velin-component]").forEach((el) => {
78
+ const name = el.getAttribute("data-velin-component");
79
+ if (name) tags.add(name.startsWith("velin-") ? name : `velin-${name}`);
80
+ });
81
+ for (const el of root.querySelectorAll("*")) {
82
+ const tag = el.tagName?.toLowerCase();
83
+ if (tag && VELIN_TAG_RE.test(tag) && COMPONENT_LOADERS[tag]) {
84
+ tags.add(tag);
85
+ }
86
+ }
87
+ return tags;
88
+ }
89
+ async function bootFromDOM(root = document, options = {}) {
90
+ const tags = options.tags?.length ? new Set(options.tags) : collectTagsFromDOM(root);
91
+ const wcPromise = register([...tags]);
92
+ if (options.attributes) {
93
+ const { bootAttributes } = await import("./attributes-DZCXX2RZ.js");
94
+ await bootAttributes(root);
95
+ }
96
+ if (options.highlight) {
97
+ const { initHighlight } = await import("./highlight-M2ELQNYK.js");
98
+ initHighlight(root);
99
+ }
100
+ if (options.haptic) {
101
+ const { VelinHapticObserver } = await import("./velin-haptic-4QQTM3RK.js");
102
+ new VelinHapticObserver().start(root instanceof Document ? root.body : root);
103
+ }
104
+ return wcPromise;
105
+ }
106
+
107
+ export {
108
+ COMPONENT_LOADERS,
109
+ whenDefined,
110
+ lazyDefine,
111
+ register,
112
+ bootFromDOM
113
+ };
@@ -0,0 +1,116 @@
1
+ // components/runtime/component-loaders.js
2
+ var COMPONENT_LOADERS = {
3
+ "velin-accordion": () => import("./velin-accordion-WSY6BMLA.js"),
4
+ "velin-announcer": () => import("./velin-announcer-PVTXXCWR.js"),
5
+ "velin-bottom-nav": () => import("./velin-bottom-nav-N5F4UO2I.js"),
6
+ "velin-calendar": () => import("./velin-calendar-XC7JRDSH.js"),
7
+ "velin-carousel": () => import("./velin-carousel-ZTBANFQQ.js"),
8
+ "velin-code-block": () => import("./velin-code-block-ZGWG7JI5.js"),
9
+ "velin-collapse": () => import("./velin-collapse-5XYBUIID.js"),
10
+ "velin-combobox": () => import("./velin-combobox-56V2ZWT5.js"),
11
+ "velin-command": () => import("./velin-command-ZJSLPK7B.js"),
12
+ "velin-copy": () => import("./velin-copy-XDQSV2XU.js"),
13
+ "velin-countdown": () => import("./velin-countdown-V4Z5MA63.js"),
14
+ "velin-counter": () => import("./velin-counter-L5FYJF7A.js"),
15
+ "velin-data-table": () => import("./velin-data-table-UVR42UUM.js"),
16
+ "velin-dialog": () => import("./velin-dialog-3YK2RPRV.js"),
17
+ "velin-drawer": () => import("./velin-drawer-A7Q7EBOS.js"),
18
+ "velin-dropdown": () => import("./velin-dropdown-PLUIFA5M.js"),
19
+ "velin-email": () => import("./velin-email-TNFONXPW.js"),
20
+ "velin-empty-state": () => import("./velin-empty-state-3NTUH2RF.js"),
21
+ "velin-file-dropzone": () => import("./velin-file-dropzone-QRGF2JNA.js"),
22
+ "velin-form-summary": () => import("./velin-form-summary-XRQ7COQH.js"),
23
+ "velin-icon": () => import("./velin-icon-A6NCXGUK.js"),
24
+ "velin-lightbox": () => import("./velin-lightbox-P725FLTY.js"),
25
+ "velin-live-dot": () => import("./velin-live-dot-RJHX2DGY.js"),
26
+ "velin-menubar": () => import("./velin-menubar-6I2LM5HL.js"),
27
+ "velin-modal": () => import("./velin-modal-3MV4FYBK.js"),
28
+ "velin-otp-input": () => import("./velin-otp-input-PSK42MM6.js"),
29
+ "velin-password-strength": () => import("./velin-password-strength-TAXMLSED.js"),
30
+ "velin-persist": () => import("./velin-persist-DFPL3QP4.js"),
31
+ "velin-popover": () => import("./velin-popover-WZG2GHBL.js"),
32
+ "velin-progress-ring": () => import("./velin-progress-ring-E4YRLZHH.js"),
33
+ "velin-rating": () => import("./velin-rating-QBBYRRBU.js"),
34
+ "velin-scroll-top": () => import("./velin-scroll-top-OHYVVHHY.js"),
35
+ "velin-scrollspy": () => import("./velin-scrollspy-OKCT4FDV.js"),
36
+ "velin-search": () => import("./velin-search-L3UG6NDQ.js"),
37
+ "velin-secure-field": () => import("./velin-secure-field-DGYMP7OK.js"),
38
+ "velin-segmented-control": () => import("./velin-segmented-control-P74GJPAR.js"),
39
+ "velin-sheet": () => import("./velin-sheet-N2VVYXFP.js"),
40
+ "velin-sparkline": () => import("./velin-sparkline-XVTFC6GE.js"),
41
+ "velin-stepper": () => import("./velin-stepper-4YQJUHPC.js"),
42
+ "velin-stepper-wc": () => import("./velin-stepper-4YQJUHPC.js"),
43
+ "velin-tabs": () => import("./velin-tabs-5UQ5ZVMV.js"),
44
+ "velin-theme-toggle": () => import("./velin-theme-toggle-32J2CBNC.js"),
45
+ "velin-toast": () => import("./velin-toast-UG5LWTG2.js"),
46
+ "velin-tooltip": () => import("./velin-tooltip-ZDH5SDLU.js"),
47
+ "velin-tooltip-wc": () => import("./velin-tooltip-ZDH5SDLU.js")
48
+ };
49
+
50
+ // components/runtime/index.js
51
+ var registry = /* @__PURE__ */ new Map();
52
+ var VELIN_TAG_RE = /^velin-[a-z0-9-]+$/;
53
+ function whenDefined(tagName) {
54
+ if (typeof customElements === "undefined") {
55
+ return Promise.reject(new Error("customElements not available"));
56
+ }
57
+ return customElements.whenDefined(tagName);
58
+ }
59
+ async function lazyDefine(tagName) {
60
+ const loader = COMPONENT_LOADERS[tagName];
61
+ if (!loader) {
62
+ throw new Error(`Unknown Velin component: ${tagName}`);
63
+ }
64
+ if (registry.has(tagName)) return registry.get(tagName);
65
+ const p = loader().then((mod) => {
66
+ const Cls = mod.default;
67
+ if (Cls && !customElements.get(tagName)) {
68
+ customElements.define(tagName, Cls);
69
+ }
70
+ return Cls;
71
+ });
72
+ registry.set(tagName, p);
73
+ return p;
74
+ }
75
+ async function register(tagNames) {
76
+ return Promise.all(tagNames.map((t) => lazyDefine(t)));
77
+ }
78
+ function collectTagsFromDOM(root) {
79
+ const tags = /* @__PURE__ */ new Set();
80
+ root.querySelectorAll("[data-velin-component]").forEach((el) => {
81
+ const name = el.getAttribute("data-velin-component");
82
+ if (name) tags.add(name.startsWith("velin-") ? name : `velin-${name}`);
83
+ });
84
+ for (const el of root.querySelectorAll("*")) {
85
+ const tag = el.tagName?.toLowerCase();
86
+ if (tag && VELIN_TAG_RE.test(tag) && COMPONENT_LOADERS[tag]) {
87
+ tags.add(tag);
88
+ }
89
+ }
90
+ return tags;
91
+ }
92
+ async function bootFromDOM(root = document, options = {}) {
93
+ const tags = options.tags?.length ? new Set(options.tags) : collectTagsFromDOM(root);
94
+ const wcPromise = register([...tags]);
95
+ if (options.attributes) {
96
+ const { bootAttributes } = await import("./attributes-2ORR27KA.js");
97
+ await bootAttributes(root);
98
+ }
99
+ if (options.highlight) {
100
+ const { initHighlight } = await import("./highlight-M2ELQNYK.js");
101
+ initHighlight(root);
102
+ }
103
+ if (options.haptic) {
104
+ const { VelinHapticObserver } = await import("./velin-haptic-4QQTM3RK.js");
105
+ new VelinHapticObserver().start(root instanceof Document ? root.body : root);
106
+ }
107
+ return wcPromise;
108
+ }
109
+
110
+ export {
111
+ COMPONENT_LOADERS,
112
+ whenDefined,
113
+ lazyDefine,
114
+ register,
115
+ bootFromDOM
116
+ };
@@ -4,7 +4,7 @@ import {
4
4
  lazyDefine,
5
5
  register,
6
6
  whenDefined
7
- } from "./chunk-TUGIPKW5.js";
7
+ } from "./chunk-Y6HN7HWX.js";
8
8
  export {
9
9
  COMPONENT_LOADERS,
10
10
  bootFromDOM,