@yewdiel21/motion-kit 0.9.1 → 0.10.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 (129) hide show
  1. package/README.md +93 -83
  2. package/dist/auto/index.d.ts +22 -3
  3. package/dist/auto/index.js +41 -3
  4. package/dist/auto/index.js.map +1 -1
  5. package/dist/{chunk-BFC27F2G.js → chunk-IKQ5FODN.js} +2 -2
  6. package/dist/{chunk-JQMJQSXD.js → chunk-TFNRIZHU.js} +1614 -11
  7. package/dist/chunk-TFNRIZHU.js.map +1 -0
  8. package/dist/{chunk-XDWBVFHQ.js → chunk-XAKC2QY7.js} +1202 -3
  9. package/dist/chunk-XAKC2QY7.js.map +1 -0
  10. package/dist/css/components/calendar.css +159 -0
  11. package/dist/css/components/hover-card.css +14 -0
  12. package/dist/css/components/input-otp.css +10 -0
  13. package/dist/css/components/pagination.css +11 -0
  14. package/dist/css/components/quantity.css +16 -0
  15. package/dist/css/components/slot-picker.css +126 -0
  16. package/dist/css/components/studio-dock.css +35 -0
  17. package/dist/css/components/trailer.css +37 -0
  18. package/dist/css/controls.css +65 -0
  19. package/dist/elements/index.d.ts +72 -4
  20. package/dist/elements/index.js +170 -4
  21. package/dist/elements/index.js.map +1 -1
  22. package/dist/index.css +1017 -0
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +45 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/react/index.d.ts +105 -6
  27. package/dist/react/index.js +350 -3
  28. package/dist/react/index.js.map +1 -1
  29. package/dist/{reduced-B98f8LPs.d.ts → reduced-BmBzKH94.d.ts} +199 -2
  30. package/dist/{reveal-C0hCDcB_.d.ts → reveal-jsX-uwUz.d.ts} +211 -1
  31. package/dist/{store-pHiUvxP8.d.ts → store-DYb3tTsZ.d.ts} +1 -1
  32. package/package.json +1 -1
  33. package/registry.json +178 -104
  34. package/skills/motion-kit/SKILL.md +209 -189
  35. package/src/auto/auto-init.ts +38 -0
  36. package/src/components/calendar/README.md +82 -0
  37. package/src/components/calendar/calendar.css +158 -0
  38. package/src/components/calendar/element.ts +27 -0
  39. package/src/components/calendar/engine.ts +412 -0
  40. package/src/components/calendar/react.tsx +69 -0
  41. package/src/components/hover-card/README.md +16 -0
  42. package/src/components/hover-card/element.ts +8 -0
  43. package/src/components/hover-card/engine.ts +69 -0
  44. package/src/components/hover-card/hover-card.css +13 -0
  45. package/src/components/hover-card/react.tsx +19 -0
  46. package/src/components/input-otp/README.md +18 -0
  47. package/src/components/input-otp/element.ts +14 -0
  48. package/src/components/input-otp/engine.ts +106 -0
  49. package/src/components/input-otp/input-otp.css +9 -0
  50. package/src/components/input-otp/react.tsx +21 -0
  51. package/src/components/pagination/README.md +17 -0
  52. package/src/components/pagination/element.ts +14 -0
  53. package/src/components/pagination/engine.ts +102 -0
  54. package/src/components/pagination/pagination.css +10 -0
  55. package/src/components/pagination/react.tsx +22 -0
  56. package/src/components/quantity/README.md +20 -0
  57. package/src/components/quantity/element.ts +14 -0
  58. package/src/components/quantity/engine.ts +85 -0
  59. package/src/components/quantity/quantity.css +15 -0
  60. package/src/components/quantity/react.tsx +21 -0
  61. package/src/components/slot-picker/README.md +68 -0
  62. package/src/components/slot-picker/element.ts +27 -0
  63. package/src/components/slot-picker/engine.ts +412 -0
  64. package/src/components/slot-picker/react.tsx +76 -0
  65. package/src/components/slot-picker/slot-picker.css +125 -0
  66. package/src/components/studio-dock/README.md +44 -0
  67. package/src/components/studio-dock/element.ts +11 -0
  68. package/src/components/studio-dock/engine.ts +212 -0
  69. package/src/components/studio-dock/react.tsx +23 -0
  70. package/src/components/studio-dock/studio-dock.css +34 -0
  71. package/src/components/trailer/README.md +28 -0
  72. package/src/components/trailer/element.ts +13 -0
  73. package/src/components/trailer/engine.ts +189 -0
  74. package/src/components/trailer/react.tsx +16 -0
  75. package/src/components/trailer/trailer.css +36 -0
  76. package/src/core/dates.ts +98 -0
  77. package/src/css/controls/README.md +14 -0
  78. package/src/css/controls/status.css +63 -0
  79. package/src/elements/index.ts +24 -0
  80. package/src/index.ts +25 -0
  81. package/src/react/index.ts +21 -0
  82. package/src/react/use-action-button.ts +6 -0
  83. package/src/react/use-editorial-reveal.ts +7 -0
  84. package/src/react/use-film-hero.ts +6 -0
  85. package/src/react/use-font-cycle.ts +7 -0
  86. package/src/react/use-image-zoom.ts +5 -0
  87. package/src/react/use-joined-cta.ts +5 -0
  88. package/src/react/use-local-clock.ts +5 -0
  89. package/src/react/use-scroll-dock.ts +5 -0
  90. package/src/react/use-sticker.ts +5 -0
  91. package/src/react/use-studio-dock.ts +8 -0
  92. package/src/react/use-thumbnail-nav.ts +7 -0
  93. package/src/react/use-trailer.ts +6 -0
  94. package/src/react/use-weight-hover.ts +5 -0
  95. package/src/recipes/action-button/README.md +31 -0
  96. package/src/recipes/action-button/action-button.css +113 -0
  97. package/src/recipes/action-button/create-action-button.ts +56 -0
  98. package/src/recipes/editorial-reveal/README.md +35 -0
  99. package/src/recipes/editorial-reveal/create-editorial-reveal.ts +91 -0
  100. package/src/recipes/editorial-reveal/editorial-reveal.css +17 -0
  101. package/src/recipes/film-hero/README.md +23 -0
  102. package/src/recipes/film-hero/create-film-hero.ts +65 -0
  103. package/src/recipes/film-hero/film-hero.css +29 -0
  104. package/src/recipes/font-cycle/README.md +11 -0
  105. package/src/recipes/font-cycle/create-font-cycle.ts +126 -0
  106. package/src/recipes/font-cycle/font-cycle.css +36 -0
  107. package/src/recipes/image-zoom/README.md +16 -0
  108. package/src/recipes/image-zoom/create-image-zoom.ts +27 -0
  109. package/src/recipes/image-zoom/image-zoom.css +7 -0
  110. package/src/recipes/joined-cta/README.md +13 -0
  111. package/src/recipes/joined-cta/create-joined-cta.ts +22 -0
  112. package/src/recipes/joined-cta/joined-cta.css +17 -0
  113. package/src/recipes/local-clock/README.md +31 -0
  114. package/src/recipes/local-clock/create-local-clock.ts +61 -0
  115. package/src/recipes/scroll-dock/README.md +46 -0
  116. package/src/recipes/scroll-dock/create-scroll-dock.ts +72 -0
  117. package/src/recipes/scroll-dock/scroll-dock.css +70 -0
  118. package/src/recipes/sticker/README.md +59 -0
  119. package/src/recipes/sticker/create-sticker.ts +490 -0
  120. package/src/recipes/sticker/sticker.css +112 -0
  121. package/src/recipes/thumbnail-nav/README.md +16 -0
  122. package/src/recipes/thumbnail-nav/create-thumbnail-nav.ts +165 -0
  123. package/src/recipes/thumbnail-nav/thumbnail-nav.css +108 -0
  124. package/src/recipes/weight-hover/README.md +37 -0
  125. package/src/recipes/weight-hover/create-weight-hover.ts +136 -0
  126. package/src/recipes/weight-hover/weight-hover.css +7 -0
  127. package/dist/chunk-JQMJQSXD.js.map +0 -1
  128. package/dist/chunk-XDWBVFHQ.js.map +0 -1
  129. /package/dist/{chunk-BFC27F2G.js.map → chunk-IKQ5FODN.js.map} +0 -0
@@ -9,11 +9,19 @@ import {
9
9
  createToaster,
10
10
  iconSvg,
11
11
  toast
12
- } from "../chunk-BFC27F2G.js";
12
+ } from "../chunk-IKQ5FODN.js";
13
13
  import {
14
+ createCalendar,
14
15
  createDialog,
15
- createMenu
16
- } from "../chunk-JQMJQSXD.js";
16
+ createHoverCard,
17
+ createInputOtp,
18
+ createMenu,
19
+ createPagination,
20
+ createQuantity,
21
+ createSlotPicker,
22
+ createStudioDock,
23
+ createTrailer
24
+ } from "../chunk-TFNRIZHU.js";
17
25
  import "../chunk-RVSKEBIC.js";
18
26
  import "../chunk-DOOMULVV.js";
19
27
  import "../chunk-TGV27ZWM.js";
@@ -72,6 +80,42 @@ function defineElement(name, ctor) {
72
80
  customElements.define(name, ctor);
73
81
  }
74
82
 
83
+ // src/components/studio-dock/element.ts
84
+ var MkStudioDockElement = class extends MkElement {
85
+ static options = { duration: "number", ease: "string", focusOnOpen: "boolean", trapFocus: "boolean" };
86
+ create(options) {
87
+ return createStudioDock(this, options);
88
+ }
89
+ open(view) {
90
+ this.instance?.open(view);
91
+ }
92
+ close() {
93
+ this.instance?.close();
94
+ }
95
+ toggle() {
96
+ this.instance?.toggle();
97
+ }
98
+ selectPage(index) {
99
+ this.instance?.selectPage(index);
100
+ }
101
+ };
102
+ var defineStudioDock = () => defineElement("mk-studio-dock", MkStudioDockElement);
103
+
104
+ // src/components/trailer/element.ts
105
+ var MkTrailerElement = class extends MkElement {
106
+ static options = { autoplay: "boolean", triggers: "string", closeOnBackdrop: "boolean" };
107
+ create(options) {
108
+ return createTrailer(this.querySelector("dialog"), options);
109
+ }
110
+ open(origin) {
111
+ this.instance?.open(origin);
112
+ }
113
+ close() {
114
+ this.instance?.close();
115
+ }
116
+ };
117
+ var defineTrailer = () => defineElement("mk-trailer", MkTrailerElement);
118
+
75
119
  // src/components/theme-picker/element.ts
76
120
  var MkThemePickerElement = class extends MkElement {
77
121
  static options = { showHidden: "boolean", themes: "list" };
@@ -434,6 +478,110 @@ var MkIslandElement = class extends MkElement {
434
478
  }
435
479
  };
436
480
 
481
+ // src/components/quantity/element.ts
482
+ var MkQuantityElement = class extends MkElement {
483
+ static options = { min: "number", max: "number", step: "number", value: "number", disabled: "boolean" };
484
+ create(options) {
485
+ return createQuantity(this, options);
486
+ }
487
+ attributeChangedCallback(name, previous, next) {
488
+ if (previous === next || !this.isConnected || !this.instance) return;
489
+ const value = this.instance.value;
490
+ this.instance.destroy();
491
+ this.instance = this.create({ ...!this.hasAttribute("value") ? { value } : {}, ...this.options });
492
+ }
493
+ };
494
+
495
+ // src/components/pagination/element.ts
496
+ var MkPaginationElement = class extends MkElement {
497
+ static options = { totalPages: "number", page: "number", siblings: "number" };
498
+ create(options) {
499
+ return createPagination(this, options);
500
+ }
501
+ attributeChangedCallback(name, previous, next) {
502
+ if (previous === next || !this.isConnected || !this.instance) return;
503
+ const page = this.instance.page;
504
+ this.instance.destroy();
505
+ this.instance = this.create({ ...!this.hasAttribute("page") ? { page } : {}, ...this.options });
506
+ }
507
+ };
508
+
509
+ // src/components/hover-card/element.ts
510
+ var MkHoverCardElement = class extends MkElement {
511
+ static options = { openDelay: "number", closeDelay: "number", placement: "string" };
512
+ create(options) {
513
+ return createHoverCard(this, options);
514
+ }
515
+ };
516
+
517
+ // src/components/input-otp/element.ts
518
+ var MkInputOtpElement = class extends MkElement {
519
+ static options = { length: "number", value: "string", mask: "boolean" };
520
+ create(options) {
521
+ return createInputOtp(this, options);
522
+ }
523
+ attributeChangedCallback(name, previous, next) {
524
+ if (previous === next || !this.isConnected || !this.instance) return;
525
+ const value = this.instance.value;
526
+ this.instance.destroy();
527
+ this.instance = this.create({ ...!this.hasAttribute("value") ? { value } : {}, ...this.options });
528
+ }
529
+ };
530
+
531
+ // src/components/calendar/element.ts
532
+ var MkCalendarElement = class extends MkElement {
533
+ static options = {
534
+ date: "string",
535
+ view: "string",
536
+ firstDay: "number",
537
+ locale: "string",
538
+ maxEvents: "number",
539
+ events: "json",
540
+ selected: "string",
541
+ today: "string"
542
+ };
543
+ create(options) {
544
+ return createCalendar(this, options);
545
+ }
546
+ attributeChangedCallback(name, previous, next) {
547
+ if (previous === next || !this.isConnected || !this.instance) return;
548
+ if (name === "events") {
549
+ this.instance.setEvents(this.options.events ?? []);
550
+ return;
551
+ }
552
+ const { date, view, selected } = this.instance;
553
+ this.instance.destroy();
554
+ this.instance = this.create({ date, view, selected, ...this.options });
555
+ }
556
+ };
557
+
558
+ // src/components/slot-picker/element.ts
559
+ var MkSlotPickerElement = class extends MkElement {
560
+ static options = {
561
+ date: "string",
562
+ value: "string",
563
+ slots: "json",
564
+ min: "string",
565
+ max: "string",
566
+ closedDays: "json",
567
+ firstDay: "number",
568
+ locale: "string"
569
+ };
570
+ create(options) {
571
+ return createSlotPicker(this, options);
572
+ }
573
+ attributeChangedCallback(name, previous, next) {
574
+ if (previous === next || !this.isConnected || !this.instance) return;
575
+ if (name === "slots") {
576
+ this.instance.setSlots(this.options.slots ?? []);
577
+ return;
578
+ }
579
+ const value = this.instance.value ?? (this.instance.date ? this.instance.date : void 0);
580
+ this.instance.destroy();
581
+ this.instance = this.create({ ...name !== "value" && value ? typeof value === "string" ? { value } : { date: value } : {}, ...this.options });
582
+ }
583
+ };
584
+
437
585
  // src/elements/index.ts
438
586
  var ELEMENTS = {
439
587
  "mk-theme-picker": MkThemePickerElement,
@@ -445,7 +593,15 @@ var ELEMENTS = {
445
593
  "mk-nav": MkNavElement,
446
594
  "mk-steps": MkStepsElement,
447
595
  "mk-cursor": MkCursorElement,
448
- "mk-island": MkIslandElement
596
+ "mk-island": MkIslandElement,
597
+ "mk-quantity": MkQuantityElement,
598
+ "mk-pagination": MkPaginationElement,
599
+ "mk-hover-card": MkHoverCardElement,
600
+ "mk-input-otp": MkInputOtpElement,
601
+ "mk-studio-dock": MkStudioDockElement,
602
+ "mk-trailer": MkTrailerElement,
603
+ "mk-calendar": MkCalendarElement,
604
+ "mk-slot-picker": MkSlotPickerElement
449
605
  // new-component:entries
450
606
  };
451
607
  function defineElements(names = Object.keys(ELEMENTS)) {
@@ -453,20 +609,30 @@ function defineElements(names = Object.keys(ELEMENTS)) {
453
609
  }
454
610
  export {
455
611
  ELEMENTS,
612
+ MkCalendarElement,
456
613
  MkChatBackgroundElement,
457
614
  MkChatElement,
458
615
  MkCursorElement,
459
616
  MkDialogElement,
460
617
  MkElement,
618
+ MkHoverCardElement,
619
+ MkInputOtpElement,
461
620
  MkIslandElement,
462
621
  MkMenuElement,
463
622
  MkNavElement,
623
+ MkPaginationElement,
624
+ MkQuantityElement,
625
+ MkSlotPickerElement,
464
626
  MkStepsElement,
627
+ MkStudioDockElement,
465
628
  MkThemePickerElement,
466
629
  MkToasterElement,
630
+ MkTrailerElement,
467
631
  SafeHTMLElement,
468
632
  defineElement,
469
633
  defineElements,
634
+ defineStudioDock,
635
+ defineTrailer,
470
636
  toast
471
637
  };
472
638
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/elements/base.ts","../../src/components/theme-picker/element.ts","../../src/components/dialog/element.ts","../../src/components/menu/element.ts","../../src/components/toast/element.ts","../../src/components/chat-background/element.ts","../../src/components/chat/element.ts","../../src/components/nav/element.ts","../../src/components/steps/element.ts","../../src/components/cursor/element.ts","../../src/components/island/element.ts","../../src/elements/index.ts"],"sourcesContent":["import type { Instance } from '../core/types';\n\n/*\n * Base for motion-kit custom elements (Astro / plain HTML). Light DOM only, so\n * themes and project CSS reach the markup. Attributes map to engine options\n * (kebab-case → camelCase); the engine is created on connect, recreated when an\n * observed attribute changes, and destroyed on disconnect.\n */\n\nexport type OptionType = 'string' | 'number' | 'boolean' | 'list' | 'json';\n\n/** `HTMLElement` in the browser; an empty class during SSR so importing never throws. */\nexport const SafeHTMLElement = (typeof HTMLElement === 'undefined' ? class {} : HTMLElement) as typeof HTMLElement;\n\nconst kebab = (name: string) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n\nexport abstract class MkElement<I extends Instance = Instance> extends SafeHTMLElement {\n /** Option name (camelCase) → how to read its attribute. */\n static options: Record<string, OptionType> = {};\n\n static get observedAttributes() {\n return Object.keys(this.options).map(kebab);\n }\n\n /** The live engine (null while disconnected). */\n instance: I | null = null;\n\n protected abstract create(options: Record<string, unknown>): I;\n\n /** Options read from the attributes now. */\n get options(): Record<string, unknown> {\n const types = (this.constructor as typeof MkElement).options;\n const options: Record<string, unknown> = {};\n for (const [name, type] of Object.entries(types)) {\n const raw = this.getAttribute(kebab(name));\n if (type === 'boolean') {\n if (raw !== null) options[name] = raw !== 'false';\n continue;\n }\n if (raw === null) continue;\n if (type === 'number') {\n const value = Number(raw);\n if (Number.isFinite(value)) options[name] = value;\n } else if (type === 'list') options[name] = raw.split(',').map((item) => item.trim()).filter(Boolean);\n else if (type === 'json') {\n try {\n options[name] = JSON.parse(raw);\n } catch {\n // Ignore malformed JSON: the engine keeps its default.\n }\n } else options[name] = raw;\n }\n return options;\n }\n\n connectedCallback() {\n if (!this.instance) this.instance = this.create(this.options);\n }\n\n disconnectedCallback() {\n this.instance?.destroy();\n this.instance = null;\n }\n\n attributeChangedCallback(_name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n this.instance.destroy();\n this.instance = this.create(this.options);\n }\n}\n\n/** customElements.define once; later calls with the same name are ignored. */\nexport function defineElement(name: string, ctor: CustomElementConstructor) {\n if (typeof customElements === 'undefined' || customElements.get(name)) return;\n customElements.define(name, ctor);\n}\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createThemePicker, type ThemePickerInstance } from './engine';\n\n/**\n * <mk-theme-picker show-hidden themes=\"neogreen,pink\"></mk-theme-picker>\n * Emits `mk:theme` on document when a theme is chosen (from setTheme).\n */\nexport class MkThemePickerElement extends MkElement<ThemePickerInstance> {\n static options: Record<string, OptionType> = { showHidden: 'boolean', themes: 'list' };\n\n protected create(options: Record<string, unknown>) {\n return createThemePicker(this, options);\n }\n\n select(id: string) {\n this.instance?.select(id);\n }\n}\n\nexport const defineThemePicker = () => defineElement('mk-theme-picker', MkThemePickerElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport { iconSvg } from '../icons';\nimport { createDialog, type DialogInstance, type DialogPlacement, type DialogVariant } from './engine';\n\n/**\n * <mk-dialog id=\"crear\" heading=\"Crear proyecto\" [description] [shared=\"id\"] [variant=\"liquid\"]\n * [placement=\"anchor|side\"] [size=\"sm|lg|xl\"] [float=\"key\"] [no-backdrop] [persistent] [no-drag]>…</mk-dialog>\n * Any [data-mk-open=\"crear\"] opens it from that button. On connect its children\n * move into a <dialog class=\"mk-dialog\"> (with `heading`, a header with title and\n * close button and a body are made for them); on disconnect they move back.\n */\nexport class MkDialogElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = {\n variant: 'string',\n placement: 'string',\n size: 'string',\n heading: 'string',\n description: 'string',\n float: 'string',\n noBackdrop: 'boolean',\n persistent: 'boolean',\n noDrag: 'boolean',\n closeLabel: 'string',\n shared: 'string',\n };\n\n dialog: DialogInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const original = [...this.childNodes];\n const dialog = document.createElement('dialog');\n dialog.className = 'mk-dialog';\n if (options.size && options.size !== 'md') dialog.classList.add(`mk-dialog--${options.size}`);\n const hasParts = original.some((node) => node instanceof Element && node.matches('[data-mk-part]'));\n const closeLabel = (options.closeLabel as string | undefined) ?? 'Cerrar';\n if (options.heading) {\n const header = document.createElement('header');\n header.dataset.mkPart = 'header';\n const text = document.createElement('div');\n const title = document.createElement('h2');\n title.dataset.mkPart = 'title';\n title.textContent = options.heading as string;\n if (options.shared) title.dataset.mkShared = options.shared as string;\n text.append(title);\n if (options.description) {\n const description = document.createElement('p');\n description.dataset.mkPart = 'description';\n description.textContent = options.description as string;\n text.append(description);\n }\n const actions = document.createElement('div');\n actions.dataset.mkPart = 'actions';\n if (options.float) {\n const handle = document.createElement('button');\n handle.type = 'button';\n handle.dataset.mkPart = 'handle';\n handle.innerHTML = iconSvg('expand', 18);\n actions.append(handle);\n }\n const close = document.createElement('button');\n close.type = 'button';\n close.dataset.mkPart = 'close';\n close.setAttribute('aria-label', closeLabel);\n close.innerHTML = iconSvg('close');\n actions.append(close);\n header.append(text, actions);\n const body = document.createElement('div');\n body.dataset.mkPart = 'body';\n // A footer stays out of the scrolling body.\n const isFooter = (node: Node) => node instanceof Element && node.matches('[data-mk-part=\"footer\"]');\n body.append(...original.filter((node) => !isFooter(node)));\n dialog.append(header, body, ...original.filter(isFooter));\n } else if (hasParts) {\n dialog.append(...original);\n } else {\n const body = document.createElement('div');\n body.dataset.mkPart = 'body';\n body.append(...original);\n dialog.append(body);\n }\n this.append(dialog);\n\n const engine = createDialog(dialog, {\n variant: (options.variant as DialogVariant) ?? 'morph',\n placement: (options.placement as DialogPlacement) ?? 'center',\n backdrop: !options.noBackdrop,\n closeOnBackdrop: !options.persistent,\n drag: !options.noDrag,\n float: (options.float as string) || false,\n triggers: this.id || false,\n labels: { close: closeLabel },\n });\n this.dialog = engine;\n return {\n destroy: () => {\n engine.destroy();\n this.append(...original);\n dialog.remove();\n this.dialog = null;\n },\n };\n }\n\n open(origin?: HTMLElement | null) {\n this.dialog?.open(origin);\n }\n\n close() {\n this.dialog?.close();\n }\n\n get isOpen() {\n return this.dialog?.isOpen ?? false;\n }\n}\n\nexport const defineDialog = () => defineElement('mk-dialog', MkDialogElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport type { DialogVariant } from '../dialog/engine';\nimport { createMenu, type MenuInstance } from './engine';\n\n/**\n * <mk-menu id=\"opciones\" [variant=\"liquid\"] [keep-open]>\n * <button data-mk-item data-mk-value=\"ajustes\">Ajustes</button> …\n * </mk-menu>\n * Any [data-mk-open=\"opciones\"] opens it from that button; choosing an option\n * emits `mk:select` (detail.value, detail.item).\n */\nexport class MkMenuElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = { variant: 'string', keepOpen: 'boolean', label: 'string', ticket: 'boolean' };\n\n menu: MenuInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const original = [...this.childNodes];\n const dialog = document.createElement('dialog');\n dialog.className = 'mk-dialog mk-menu';\n if (options.label) dialog.setAttribute('aria-label', options.label as string);\n dialog.append(...original);\n this.append(dialog);\n const menu = createMenu(dialog, {\n ticket: Boolean(options.ticket),\n variant: (options.variant as DialogVariant) ?? 'morph',\n closeOnSelect: !options.keepOpen,\n triggers: this.id || false,\n });\n this.menu = menu;\n return {\n destroy: () => {\n menu.destroy();\n this.append(...original);\n dialog.remove();\n this.menu = null;\n },\n };\n }\n\n open(origin?: HTMLElement | null) {\n this.menu?.open(origin);\n }\n\n close() {\n this.menu?.close();\n }\n\n get isOpen() {\n return this.menu?.isOpen ?? false;\n }\n}\n\nexport const defineMenu = () => defineElement('mk-menu', MkMenuElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createToaster, type ToasterInstance } from './engine';\n\n/**\n * <mk-toaster dismiss-label=\"Cerrar\"></mk-toaster> — mount once; then call\n * `toast('Copiado', { origin: button })` from anywhere.\n */\nexport class MkToasterElement extends MkElement<ToasterInstance> {\n static options: Record<string, OptionType> = { dismissLabel: 'string' };\n\n protected create(options: Record<string, unknown>) {\n const host = document.createElement('div');\n host.className = 'mk-toaster';\n this.append(host);\n const toaster = createToaster(host, { labels: { dismiss: options.dismissLabel as string | undefined } });\n return {\n destroy: () => {\n toaster.destroy();\n host.remove();\n },\n };\n }\n}\n\nexport const defineToaster = () => defineElement('mk-toaster', MkToasterElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createChatBackground, type ChatBackgroundInstance } from './engine';\n\n/** <mk-chat-background energy=\"0\" scale=\"1\"></mk-chat-background> inside any positioned container. */\nexport class MkChatBackgroundElement extends MkElement<ChatBackgroundInstance> {\n static options: Record<string, OptionType> = {};\n static get observedAttributes() {\n return ['energy', 'scale'];\n }\n\n protected create() {\n return createChatBackground(this, { energy: Number(this.getAttribute('energy')) || 0, scale: Number(this.getAttribute('scale')) || 1 });\n }\n\n // Energy changes every frame while recording: update the engine instead of rebuilding it.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'energy') this.instance.setEnergy(Number(next) || 0);\n if (name === 'scale') this.instance.setScale(Number(next) || 1);\n }\n\n setEnergy(energy: number) {\n this.instance?.setEnergy(energy);\n }\n\n busy(on: boolean) {\n this.instance?.busy(on);\n }\n}\n\nexport const defineChatBackground = () => defineElement('mk-chat-background', MkChatBackgroundElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport { iconSvg } from '../icons';\nimport { defineChatBackground } from '../chat-background/element';\nimport { createChat, type ChatInstance, type ChatRole } from './engine';\n\n/**\n * <mk-chat placeholder=\"Escribe un mensaje...\" [background] [mic] [animate-existing]>\n * (optional) your own [data-mk-part=\"messages\"] / composer markup\n * </mk-chat>\n * Empty, it builds the messages list and the composer. Listen to `mk:send`\n * (detail.text) and answer with `element.reply(text)` after `element.pending()`.\n */\nexport class MkChatElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = {\n placeholder: 'string',\n background: 'boolean',\n mic: 'boolean',\n animateExisting: 'boolean',\n thinking: 'string',\n };\n\n chat: ChatInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const made: Element[] = [];\n if (!this.querySelector('[data-mk-part=\"messages\"]')) {\n if (options.background && !this.querySelector('.mk-chat-background, mk-chat-background')) {\n defineChatBackground();\n const background = document.createElement('mk-chat-background');\n this.prepend(background);\n made.push(background);\n }\n const messages = document.createElement('div');\n messages.dataset.mkPart = 'messages';\n // Messages written inside the element (history) move into the list.\n messages.append(...[...this.children].filter((child) => child.matches('[data-mk-message]')));\n const composer = document.createElement('form');\n composer.dataset.mkPart = 'composer';\n const input = document.createElement('textarea');\n input.dataset.mkPart = 'input';\n input.rows = 1;\n input.placeholder = (options.placeholder as string | undefined) ?? 'Escribe un mensaje...';\n input.setAttribute('aria-label', input.placeholder);\n const buttons = document.createElement('div');\n buttons.dataset.mkPart = 'buttons';\n if (options.mic) {\n const mic = document.createElement('button');\n mic.type = 'button';\n mic.dataset.mkPart = 'mic';\n mic.setAttribute('aria-label', 'Micrófono');\n mic.innerHTML = iconSvg('mic', 22);\n buttons.append(mic);\n }\n const send = document.createElement('button');\n send.type = 'submit';\n send.dataset.mkPart = 'send';\n send.setAttribute('aria-label', 'Enviar');\n send.innerHTML = iconSvg('send', 22);\n buttons.append(send);\n composer.append(input, buttons);\n this.append(messages, composer);\n made.push(messages, composer);\n }\n const chat = createChat(this, {\n animateExisting: Boolean(options.animateExisting),\n labels: { thinking: options.thinking as string | undefined },\n });\n this.chat = chat;\n return {\n destroy: () => {\n chat.destroy();\n const messages = made.find((node) => node instanceof HTMLElement && node.dataset.mkPart === 'messages');\n if (messages) this.append(...[...messages.children]);\n for (const node of made) node.remove();\n this.chat = null;\n },\n };\n }\n\n add(role: ChatRole, text: string) {\n return this.chat?.add(role, text);\n }\n\n pending() {\n this.chat?.pending();\n }\n\n reply(message: HTMLElement | string) {\n return this.chat?.reply(message);\n }\n\n setRecording(on: boolean) {\n this.chat?.setRecording(on);\n }\n}\n\nexport const defineChat = () => defineElement('mk-chat', MkChatElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createNav, type NavInstance, type NavStyle } from './engine';\n\n/**\n * <mk-nav class=\"mk-nav mk-nav--bonita\" nav-style=\"bonita\" [accent] [reveal] [storage-key=\"mi-app-nav\"]>\n * <div class=\"mk-nav__buttons\"><a class=\"mk-nav__button\" href=\"/\">…</a></div>\n * </mk-nav>\n * Emits `mk:navigate` (detail: index, value, item, originalEvent) on click.\n */\nexport class MkNavElement extends MkElement<NavInstance> {\n static options: Record<string, OptionType> = { navStyle: 'string', accent: 'boolean', reveal: 'boolean', storageKey: 'string' };\n\n protected create(options: Record<string, unknown>) {\n return createNav(this, {\n style: options.navStyle as NavStyle | undefined,\n accent: options.accent as boolean | undefined,\n reveal: Boolean(options.reveal),\n storageKey: options.storageKey as string | undefined,\n });\n }\n\n // Style and accent change in place: rebuilding would replay the reveal.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'nav-style' && next) this.instance.setStyle(next as NavStyle);\n else if (name === 'accent') this.instance.setAccent(next !== null && next !== 'false');\n else super.attributeChangedCallback(name, previous, next);\n }\n\n select(target: number | string) {\n this.instance?.select(target);\n }\n\n setStyle(style: NavStyle) {\n this.instance?.setStyle(style);\n }\n}\n\nexport const defineNav = () => defineElement('mk-nav', MkNavElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createSteps, type StepsInstance } from './engine';\n\n/**\n * <mk-steps index=\"0\">\n * <mk-chat-background></mk-chat-background>\n * <section data-mk-step><h2 data-mk-flow-item>Hola</h2><button data-mk-flow-item data-mk-step-next>Seguir</button></section>\n * <section data-mk-step>…</section>\n * </mk-steps>\n * Emits `mk:step` (detail: index, previous, step) after each change.\n */\nexport class MkStepsElement extends MkElement<StepsInstance> {\n static options: Record<string, OptionType> = { index: 'number', duration: 'number', animateFirst: 'boolean' };\n\n protected create(options: Record<string, unknown>) {\n return createSteps(this, options);\n }\n\n // A new index moves to that step; rebuilding would jump without the flow.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'index') void this.instance.goTo(Number(next) || 0);\n else super.attributeChangedCallback(name, previous, next);\n }\n\n next() {\n return this.instance?.next();\n }\n\n prev() {\n return this.instance?.prev();\n }\n\n goTo(index: number) {\n return this.instance?.goTo(index);\n }\n\n busy(on: boolean) {\n this.instance?.busy(on);\n }\n}\n\nexport const defineSteps = () => defineElement('mk-steps', MkStepsElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createCursor, type CursorInstance, type CursorOptions, type CursorVariant } from './engine';\n\n/**\n * <mk-cursor></mk-cursor> glass chip (once per page)\n * <mk-cursor variant=\"dot\" text=\"Scroll\" arrows=\"y\"></mk-cursor> dot, inside its parent\n * zone=\"#hero\" picks another zone.\n */\nexport class MkCursorElement extends MkElement<CursorInstance> {\n static options: Record<string, OptionType> = { variant: 'string', text: 'string', arrows: 'string', zone: 'string' };\n\n protected create(options: Record<string, unknown>) {\n const zone = typeof options.zone === 'string' ? document.querySelector(options.zone) : undefined;\n return createCursor(this, {\n variant: options.variant as CursorVariant | undefined,\n text: options.text as string | undefined,\n arrows: options.arrows as CursorOptions['arrows'],\n zone,\n });\n }\n}\n\nexport const defineCursor = () => defineElement('mk-cursor', MkCursorElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createIsland, type IslandInstance, type IslandOptions } from './engine';\n\n/**\n * <mk-island [entrance=\"false|manual\"] [close-on-scroll=\"false\"] [close-on-navigate=\"false\"] [focus-on-open=\"false\"]>\n * <button class=\"mk-island__backdrop\" data-mk-island-close tabindex=\"-1\" aria-label=\"Cerrar\"></button>\n * <div class=\"mk-island__shell\">…header with [data-mk-island-toggle=\"menu\"]…\n * <div class=\"mk-island__content\"><div><section data-mk-island-panel=\"menu\">…</section></div></div>\n * </div>\n * </mk-island>\n * Emits `mk:island` (detail: { active }) when a panel opens or closes.\n */\nexport class MkIslandElement extends MkElement<IslandInstance> {\n static options: Record<string, OptionType> = {\n entrance: 'string',\n closeOnScroll: 'boolean',\n closeOnNavigate: 'boolean',\n focusOnOpen: 'boolean',\n };\n\n protected create(options: Record<string, unknown>) {\n const entrance: IslandOptions['entrance'] = options.entrance === 'false' ? false : options.entrance === 'manual' ? 'manual' : true;\n return createIsland(this, {\n entrance,\n closeOnScroll: options.closeOnScroll as boolean | undefined,\n closeOnNavigate: options.closeOnNavigate as boolean | undefined,\n focusOnOpen: options.focusOnOpen as boolean | undefined,\n onChange: (active) => this.dispatchEvent(new CustomEvent('mk:island', { detail: { active }, bubbles: true })),\n });\n }\n\n open(name?: string) {\n this.instance?.open(name);\n }\n\n close() {\n this.instance?.close();\n }\n\n ready() {\n this.instance?.ready();\n }\n}\n\nexport const defineIsland = () => defineElement('mk-island', MkIslandElement);\n","import { defineElement } from './base';\nimport { MkThemePickerElement } from '../components/theme-picker/element';\nimport { MkDialogElement } from '../components/dialog/element';\nimport { MkMenuElement } from '../components/menu/element';\nimport { MkToasterElement } from '../components/toast/element';\nimport { MkChatBackgroundElement } from '../components/chat-background/element';\nimport { MkChatElement } from '../components/chat/element';\nimport { MkNavElement } from '../components/nav/element';\nimport { MkStepsElement } from '../components/steps/element';\nimport { MkCursorElement } from '../components/cursor/element';\nimport { MkIslandElement } from '../components/island/element';\n// new-component:imports (scripts/new-component.mjs inserts above this line)\n\nexport { MkElement, SafeHTMLElement, defineElement, type OptionType } from './base';\nexport { MkThemePickerElement } from '../components/theme-picker/element';\nexport { MkDialogElement } from '../components/dialog/element';\nexport { MkMenuElement } from '../components/menu/element';\nexport { MkToasterElement } from '../components/toast/element';\nexport { MkChatBackgroundElement } from '../components/chat-background/element';\nexport { MkChatElement } from '../components/chat/element';\nexport { MkNavElement } from '../components/nav/element';\nexport { MkStepsElement } from '../components/steps/element';\nexport { MkCursorElement } from '../components/cursor/element';\nexport { toast } from '../components/toast/store';\nexport { MkIslandElement } from '../components/island/element';\n// new-component:exports\n\n/** Tag name → element class, for every component. */\nexport const ELEMENTS = {\n 'mk-theme-picker': MkThemePickerElement,\n 'mk-dialog': MkDialogElement,\n 'mk-menu': MkMenuElement,\n 'mk-toaster': MkToasterElement,\n 'mk-chat-background': MkChatBackgroundElement,\n 'mk-chat': MkChatElement,\n 'mk-nav': MkNavElement,\n 'mk-steps': MkStepsElement,\n 'mk-cursor': MkCursorElement,\n 'mk-island': MkIslandElement,\n // new-component:entries\n} as const;\n\nexport type ElementName = keyof typeof ELEMENTS;\n\n/** Register every motion-kit element (or the ones named). Safe to call more than once. */\nexport function defineElements(names: ElementName[] = Object.keys(ELEMENTS) as ElementName[]) {\n for (const name of names) defineElement(name, ELEMENTS[name]);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/elements/base.ts","../../src/components/studio-dock/element.ts","../../src/components/trailer/element.ts","../../src/components/theme-picker/element.ts","../../src/components/dialog/element.ts","../../src/components/menu/element.ts","../../src/components/toast/element.ts","../../src/components/chat-background/element.ts","../../src/components/chat/element.ts","../../src/components/nav/element.ts","../../src/components/steps/element.ts","../../src/components/cursor/element.ts","../../src/components/island/element.ts","../../src/components/quantity/element.ts","../../src/components/pagination/element.ts","../../src/components/hover-card/element.ts","../../src/components/input-otp/element.ts","../../src/components/calendar/element.ts","../../src/components/slot-picker/element.ts","../../src/elements/index.ts"],"sourcesContent":["import type { Instance } from '../core/types';\n\n/*\n * Base for motion-kit custom elements (Astro / plain HTML). Light DOM only, so\n * themes and project CSS reach the markup. Attributes map to engine options\n * (kebab-case → camelCase); the engine is created on connect, recreated when an\n * observed attribute changes, and destroyed on disconnect.\n */\n\nexport type OptionType = 'string' | 'number' | 'boolean' | 'list' | 'json';\n\n/** `HTMLElement` in the browser; an empty class during SSR so importing never throws. */\nexport const SafeHTMLElement = (typeof HTMLElement === 'undefined' ? class {} : HTMLElement) as typeof HTMLElement;\n\nconst kebab = (name: string) => name.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`);\n\nexport abstract class MkElement<I extends Instance = Instance> extends SafeHTMLElement {\n /** Option name (camelCase) → how to read its attribute. */\n static options: Record<string, OptionType> = {};\n\n static get observedAttributes() {\n return Object.keys(this.options).map(kebab);\n }\n\n /** The live engine (null while disconnected). */\n instance: I | null = null;\n\n protected abstract create(options: Record<string, unknown>): I;\n\n /** Options read from the attributes now. */\n get options(): Record<string, unknown> {\n const types = (this.constructor as typeof MkElement).options;\n const options: Record<string, unknown> = {};\n for (const [name, type] of Object.entries(types)) {\n const raw = this.getAttribute(kebab(name));\n if (type === 'boolean') {\n if (raw !== null) options[name] = raw !== 'false';\n continue;\n }\n if (raw === null) continue;\n if (type === 'number') {\n const value = Number(raw);\n if (Number.isFinite(value)) options[name] = value;\n } else if (type === 'list') options[name] = raw.split(',').map((item) => item.trim()).filter(Boolean);\n else if (type === 'json') {\n try {\n options[name] = JSON.parse(raw);\n } catch {\n // Ignore malformed JSON: the engine keeps its default.\n }\n } else options[name] = raw;\n }\n return options;\n }\n\n connectedCallback() {\n if (!this.instance) this.instance = this.create(this.options);\n }\n\n disconnectedCallback() {\n this.instance?.destroy();\n this.instance = null;\n }\n\n attributeChangedCallback(_name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n this.instance.destroy();\n this.instance = this.create(this.options);\n }\n}\n\n/** customElements.define once; later calls with the same name are ignored. */\nexport function defineElement(name: string, ctor: CustomElementConstructor) {\n if (typeof customElements === 'undefined' || customElements.get(name)) return;\n customElements.define(name, ctor);\n}\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createStudioDock, type StudioDockInstance, type StudioDockView } from './engine';\nexport class MkStudioDockElement extends MkElement<StudioDockInstance> {\n static options: Record<string, OptionType> = { duration: 'number', ease: 'string', focusOnOpen: 'boolean', trapFocus: 'boolean' };\n protected create(options: Record<string, unknown>) { return createStudioDock(this, options); }\n open(view?: StudioDockView) { this.instance?.open(view); }\n close() { this.instance?.close(); }\n toggle() { this.instance?.toggle(); }\n selectPage(index: number) { this.instance?.selectPage(index); }\n}\nexport const defineStudioDock = () => defineElement('mk-studio-dock', MkStudioDockElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createTrailer, type TrailerInstance, type TrailerOptions } from './engine';\n\n/** Wrap a consumer-authored native <dialog> containing <video>. */\nexport class MkTrailerElement extends MkElement<TrailerInstance> {\n static options: Record<string, OptionType> = { autoplay: 'boolean', triggers: 'string', closeOnBackdrop: 'boolean' };\n protected create(options: Record<string, unknown>) {\n return createTrailer(this.querySelector('dialog'), options as TrailerOptions);\n }\n open(origin?: HTMLElement | null) { this.instance?.open(origin); }\n close() { this.instance?.close(); }\n}\nexport const defineTrailer = () => defineElement('mk-trailer', MkTrailerElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createThemePicker, type ThemePickerInstance } from './engine';\n\n/**\n * <mk-theme-picker show-hidden themes=\"neogreen,pink\"></mk-theme-picker>\n * Emits `mk:theme` on document when a theme is chosen (from setTheme).\n */\nexport class MkThemePickerElement extends MkElement<ThemePickerInstance> {\n static options: Record<string, OptionType> = { showHidden: 'boolean', themes: 'list' };\n\n protected create(options: Record<string, unknown>) {\n return createThemePicker(this, options);\n }\n\n select(id: string) {\n this.instance?.select(id);\n }\n}\n\nexport const defineThemePicker = () => defineElement('mk-theme-picker', MkThemePickerElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport { iconSvg } from '../icons';\nimport { createDialog, type DialogInstance, type DialogPlacement, type DialogVariant } from './engine';\n\n/**\n * <mk-dialog id=\"crear\" heading=\"Crear proyecto\" [description] [shared=\"id\"] [variant=\"liquid\"]\n * [placement=\"anchor|side\"] [size=\"sm|lg|xl\"] [float=\"key\"] [no-backdrop] [persistent] [no-drag]>…</mk-dialog>\n * Any [data-mk-open=\"crear\"] opens it from that button. On connect its children\n * move into a <dialog class=\"mk-dialog\"> (with `heading`, a header with title and\n * close button and a body are made for them); on disconnect they move back.\n */\nexport class MkDialogElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = {\n variant: 'string',\n placement: 'string',\n size: 'string',\n heading: 'string',\n description: 'string',\n float: 'string',\n noBackdrop: 'boolean',\n persistent: 'boolean',\n noDrag: 'boolean',\n closeLabel: 'string',\n shared: 'string',\n };\n\n dialog: DialogInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const original = [...this.childNodes];\n const dialog = document.createElement('dialog');\n dialog.className = 'mk-dialog';\n if (options.size && options.size !== 'md') dialog.classList.add(`mk-dialog--${options.size}`);\n const hasParts = original.some((node) => node instanceof Element && node.matches('[data-mk-part]'));\n const closeLabel = (options.closeLabel as string | undefined) ?? 'Cerrar';\n if (options.heading) {\n const header = document.createElement('header');\n header.dataset.mkPart = 'header';\n const text = document.createElement('div');\n const title = document.createElement('h2');\n title.dataset.mkPart = 'title';\n title.textContent = options.heading as string;\n if (options.shared) title.dataset.mkShared = options.shared as string;\n text.append(title);\n if (options.description) {\n const description = document.createElement('p');\n description.dataset.mkPart = 'description';\n description.textContent = options.description as string;\n text.append(description);\n }\n const actions = document.createElement('div');\n actions.dataset.mkPart = 'actions';\n if (options.float) {\n const handle = document.createElement('button');\n handle.type = 'button';\n handle.dataset.mkPart = 'handle';\n handle.innerHTML = iconSvg('expand', 18);\n actions.append(handle);\n }\n const close = document.createElement('button');\n close.type = 'button';\n close.dataset.mkPart = 'close';\n close.setAttribute('aria-label', closeLabel);\n close.innerHTML = iconSvg('close');\n actions.append(close);\n header.append(text, actions);\n const body = document.createElement('div');\n body.dataset.mkPart = 'body';\n // A footer stays out of the scrolling body.\n const isFooter = (node: Node) => node instanceof Element && node.matches('[data-mk-part=\"footer\"]');\n body.append(...original.filter((node) => !isFooter(node)));\n dialog.append(header, body, ...original.filter(isFooter));\n } else if (hasParts) {\n dialog.append(...original);\n } else {\n const body = document.createElement('div');\n body.dataset.mkPart = 'body';\n body.append(...original);\n dialog.append(body);\n }\n this.append(dialog);\n\n const engine = createDialog(dialog, {\n variant: (options.variant as DialogVariant) ?? 'morph',\n placement: (options.placement as DialogPlacement) ?? 'center',\n backdrop: !options.noBackdrop,\n closeOnBackdrop: !options.persistent,\n drag: !options.noDrag,\n float: (options.float as string) || false,\n triggers: this.id || false,\n labels: { close: closeLabel },\n });\n this.dialog = engine;\n return {\n destroy: () => {\n engine.destroy();\n this.append(...original);\n dialog.remove();\n this.dialog = null;\n },\n };\n }\n\n open(origin?: HTMLElement | null) {\n this.dialog?.open(origin);\n }\n\n close() {\n this.dialog?.close();\n }\n\n get isOpen() {\n return this.dialog?.isOpen ?? false;\n }\n}\n\nexport const defineDialog = () => defineElement('mk-dialog', MkDialogElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport type { DialogVariant } from '../dialog/engine';\nimport { createMenu, type MenuInstance } from './engine';\n\n/**\n * <mk-menu id=\"opciones\" [variant=\"liquid\"] [keep-open]>\n * <button data-mk-item data-mk-value=\"ajustes\">Ajustes</button> …\n * </mk-menu>\n * Any [data-mk-open=\"opciones\"] opens it from that button; choosing an option\n * emits `mk:select` (detail.value, detail.item).\n */\nexport class MkMenuElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = { variant: 'string', keepOpen: 'boolean', label: 'string', ticket: 'boolean' };\n\n menu: MenuInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const original = [...this.childNodes];\n const dialog = document.createElement('dialog');\n dialog.className = 'mk-dialog mk-menu';\n if (options.label) dialog.setAttribute('aria-label', options.label as string);\n dialog.append(...original);\n this.append(dialog);\n const menu = createMenu(dialog, {\n ticket: Boolean(options.ticket),\n variant: (options.variant as DialogVariant) ?? 'morph',\n closeOnSelect: !options.keepOpen,\n triggers: this.id || false,\n });\n this.menu = menu;\n return {\n destroy: () => {\n menu.destroy();\n this.append(...original);\n dialog.remove();\n this.menu = null;\n },\n };\n }\n\n open(origin?: HTMLElement | null) {\n this.menu?.open(origin);\n }\n\n close() {\n this.menu?.close();\n }\n\n get isOpen() {\n return this.menu?.isOpen ?? false;\n }\n}\n\nexport const defineMenu = () => defineElement('mk-menu', MkMenuElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createToaster, type ToasterInstance } from './engine';\n\n/**\n * <mk-toaster dismiss-label=\"Cerrar\"></mk-toaster> — mount once; then call\n * `toast('Copiado', { origin: button })` from anywhere.\n */\nexport class MkToasterElement extends MkElement<ToasterInstance> {\n static options: Record<string, OptionType> = { dismissLabel: 'string' };\n\n protected create(options: Record<string, unknown>) {\n const host = document.createElement('div');\n host.className = 'mk-toaster';\n this.append(host);\n const toaster = createToaster(host, { labels: { dismiss: options.dismissLabel as string | undefined } });\n return {\n destroy: () => {\n toaster.destroy();\n host.remove();\n },\n };\n }\n}\n\nexport const defineToaster = () => defineElement('mk-toaster', MkToasterElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createChatBackground, type ChatBackgroundInstance } from './engine';\n\n/** <mk-chat-background energy=\"0\" scale=\"1\"></mk-chat-background> inside any positioned container. */\nexport class MkChatBackgroundElement extends MkElement<ChatBackgroundInstance> {\n static options: Record<string, OptionType> = {};\n static get observedAttributes() {\n return ['energy', 'scale'];\n }\n\n protected create() {\n return createChatBackground(this, { energy: Number(this.getAttribute('energy')) || 0, scale: Number(this.getAttribute('scale')) || 1 });\n }\n\n // Energy changes every frame while recording: update the engine instead of rebuilding it.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'energy') this.instance.setEnergy(Number(next) || 0);\n if (name === 'scale') this.instance.setScale(Number(next) || 1);\n }\n\n setEnergy(energy: number) {\n this.instance?.setEnergy(energy);\n }\n\n busy(on: boolean) {\n this.instance?.busy(on);\n }\n}\n\nexport const defineChatBackground = () => defineElement('mk-chat-background', MkChatBackgroundElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport type { Instance } from '../../core/types';\nimport { iconSvg } from '../icons';\nimport { defineChatBackground } from '../chat-background/element';\nimport { createChat, type ChatInstance, type ChatRole } from './engine';\n\n/**\n * <mk-chat placeholder=\"Escribe un mensaje...\" [background] [mic] [animate-existing]>\n * (optional) your own [data-mk-part=\"messages\"] / composer markup\n * </mk-chat>\n * Empty, it builds the messages list and the composer. Listen to `mk:send`\n * (detail.text) and answer with `element.reply(text)` after `element.pending()`.\n */\nexport class MkChatElement extends MkElement<Instance> {\n static options: Record<string, OptionType> = {\n placeholder: 'string',\n background: 'boolean',\n mic: 'boolean',\n animateExisting: 'boolean',\n thinking: 'string',\n };\n\n chat: ChatInstance | null = null;\n\n protected create(options: Record<string, unknown>): Instance {\n const made: Element[] = [];\n if (!this.querySelector('[data-mk-part=\"messages\"]')) {\n if (options.background && !this.querySelector('.mk-chat-background, mk-chat-background')) {\n defineChatBackground();\n const background = document.createElement('mk-chat-background');\n this.prepend(background);\n made.push(background);\n }\n const messages = document.createElement('div');\n messages.dataset.mkPart = 'messages';\n // Messages written inside the element (history) move into the list.\n messages.append(...[...this.children].filter((child) => child.matches('[data-mk-message]')));\n const composer = document.createElement('form');\n composer.dataset.mkPart = 'composer';\n const input = document.createElement('textarea');\n input.dataset.mkPart = 'input';\n input.rows = 1;\n input.placeholder = (options.placeholder as string | undefined) ?? 'Escribe un mensaje...';\n input.setAttribute('aria-label', input.placeholder);\n const buttons = document.createElement('div');\n buttons.dataset.mkPart = 'buttons';\n if (options.mic) {\n const mic = document.createElement('button');\n mic.type = 'button';\n mic.dataset.mkPart = 'mic';\n mic.setAttribute('aria-label', 'Micrófono');\n mic.innerHTML = iconSvg('mic', 22);\n buttons.append(mic);\n }\n const send = document.createElement('button');\n send.type = 'submit';\n send.dataset.mkPart = 'send';\n send.setAttribute('aria-label', 'Enviar');\n send.innerHTML = iconSvg('send', 22);\n buttons.append(send);\n composer.append(input, buttons);\n this.append(messages, composer);\n made.push(messages, composer);\n }\n const chat = createChat(this, {\n animateExisting: Boolean(options.animateExisting),\n labels: { thinking: options.thinking as string | undefined },\n });\n this.chat = chat;\n return {\n destroy: () => {\n chat.destroy();\n const messages = made.find((node) => node instanceof HTMLElement && node.dataset.mkPart === 'messages');\n if (messages) this.append(...[...messages.children]);\n for (const node of made) node.remove();\n this.chat = null;\n },\n };\n }\n\n add(role: ChatRole, text: string) {\n return this.chat?.add(role, text);\n }\n\n pending() {\n this.chat?.pending();\n }\n\n reply(message: HTMLElement | string) {\n return this.chat?.reply(message);\n }\n\n setRecording(on: boolean) {\n this.chat?.setRecording(on);\n }\n}\n\nexport const defineChat = () => defineElement('mk-chat', MkChatElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createNav, type NavInstance, type NavStyle } from './engine';\n\n/**\n * <mk-nav class=\"mk-nav mk-nav--bonita\" nav-style=\"bonita\" [accent] [reveal] [storage-key=\"mi-app-nav\"]>\n * <div class=\"mk-nav__buttons\"><a class=\"mk-nav__button\" href=\"/\">…</a></div>\n * </mk-nav>\n * Emits `mk:navigate` (detail: index, value, item, originalEvent) on click.\n */\nexport class MkNavElement extends MkElement<NavInstance> {\n static options: Record<string, OptionType> = { navStyle: 'string', accent: 'boolean', reveal: 'boolean', storageKey: 'string' };\n\n protected create(options: Record<string, unknown>) {\n return createNav(this, {\n style: options.navStyle as NavStyle | undefined,\n accent: options.accent as boolean | undefined,\n reveal: Boolean(options.reveal),\n storageKey: options.storageKey as string | undefined,\n });\n }\n\n // Style and accent change in place: rebuilding would replay the reveal.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'nav-style' && next) this.instance.setStyle(next as NavStyle);\n else if (name === 'accent') this.instance.setAccent(next !== null && next !== 'false');\n else super.attributeChangedCallback(name, previous, next);\n }\n\n select(target: number | string) {\n this.instance?.select(target);\n }\n\n setStyle(style: NavStyle) {\n this.instance?.setStyle(style);\n }\n}\n\nexport const defineNav = () => defineElement('mk-nav', MkNavElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createSteps, type StepsInstance } from './engine';\n\n/**\n * <mk-steps index=\"0\">\n * <mk-chat-background></mk-chat-background>\n * <section data-mk-step><h2 data-mk-flow-item>Hola</h2><button data-mk-flow-item data-mk-step-next>Seguir</button></section>\n * <section data-mk-step>…</section>\n * </mk-steps>\n * Emits `mk:step` (detail: index, previous, step) after each change.\n */\nexport class MkStepsElement extends MkElement<StepsInstance> {\n static options: Record<string, OptionType> = { index: 'number', duration: 'number', animateFirst: 'boolean' };\n\n protected create(options: Record<string, unknown>) {\n return createSteps(this, options);\n }\n\n // A new index moves to that step; rebuilding would jump without the flow.\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.instance) return;\n if (name === 'index') void this.instance.goTo(Number(next) || 0);\n else super.attributeChangedCallback(name, previous, next);\n }\n\n next() {\n return this.instance?.next();\n }\n\n prev() {\n return this.instance?.prev();\n }\n\n goTo(index: number) {\n return this.instance?.goTo(index);\n }\n\n busy(on: boolean) {\n this.instance?.busy(on);\n }\n}\n\nexport const defineSteps = () => defineElement('mk-steps', MkStepsElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createCursor, type CursorInstance, type CursorOptions, type CursorVariant } from './engine';\n\n/**\n * <mk-cursor></mk-cursor> glass chip (once per page)\n * <mk-cursor variant=\"dot\" text=\"Scroll\" arrows=\"y\"></mk-cursor> dot, inside its parent\n * zone=\"#hero\" picks another zone.\n */\nexport class MkCursorElement extends MkElement<CursorInstance> {\n static options: Record<string, OptionType> = { variant: 'string', text: 'string', arrows: 'string', zone: 'string' };\n\n protected create(options: Record<string, unknown>) {\n const zone = typeof options.zone === 'string' ? document.querySelector(options.zone) : undefined;\n return createCursor(this, {\n variant: options.variant as CursorVariant | undefined,\n text: options.text as string | undefined,\n arrows: options.arrows as CursorOptions['arrows'],\n zone,\n });\n }\n}\n\nexport const defineCursor = () => defineElement('mk-cursor', MkCursorElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createIsland, type IslandInstance, type IslandOptions } from './engine';\n\n/**\n * <mk-island [entrance=\"false|manual\"] [close-on-scroll=\"false\"] [close-on-navigate=\"false\"] [focus-on-open=\"false\"]>\n * <button class=\"mk-island__backdrop\" data-mk-island-close tabindex=\"-1\" aria-label=\"Cerrar\"></button>\n * <div class=\"mk-island__shell\">…header with [data-mk-island-toggle=\"menu\"]…\n * <div class=\"mk-island__content\"><div><section data-mk-island-panel=\"menu\">…</section></div></div>\n * </div>\n * </mk-island>\n * Emits `mk:island` (detail: { active }) when a panel opens or closes.\n */\nexport class MkIslandElement extends MkElement<IslandInstance> {\n static options: Record<string, OptionType> = {\n entrance: 'string',\n closeOnScroll: 'boolean',\n closeOnNavigate: 'boolean',\n focusOnOpen: 'boolean',\n };\n\n protected create(options: Record<string, unknown>) {\n const entrance: IslandOptions['entrance'] = options.entrance === 'false' ? false : options.entrance === 'manual' ? 'manual' : true;\n return createIsland(this, {\n entrance,\n closeOnScroll: options.closeOnScroll as boolean | undefined,\n closeOnNavigate: options.closeOnNavigate as boolean | undefined,\n focusOnOpen: options.focusOnOpen as boolean | undefined,\n onChange: (active) => this.dispatchEvent(new CustomEvent('mk:island', { detail: { active }, bubbles: true })),\n });\n }\n\n open(name?: string) {\n this.instance?.open(name);\n }\n\n close() {\n this.instance?.close();\n }\n\n ready() {\n this.instance?.ready();\n }\n}\n\nexport const defineIsland = () => defineElement('mk-island', MkIslandElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createQuantity, type QuantityInstance } from './engine';\n/** Light DOM: supply the same child markup shown in the README. */\nexport class MkQuantityElement extends MkElement<QuantityInstance> {\n static options: Record<string, OptionType> = { min: 'number', max: 'number', step: 'number', value: 'number', disabled: 'boolean' };\n protected create(options: Record<string, unknown>) { return createQuantity(this, options); }\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n const value = this.instance.value;\n this.instance.destroy();\n this.instance = this.create({ ...(!this.hasAttribute('value') ? { value } : {}), ...this.options });\n }\n}\nexport const defineQuantity = () => defineElement('mk-quantity', MkQuantityElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createPagination, type PaginationInstance } from './engine';\n/** Light DOM: supply the same child markup shown in the README. */\nexport class MkPaginationElement extends MkElement<PaginationInstance> {\n static options: Record<string, OptionType> = { totalPages: 'number', page: 'number', siblings: 'number' };\n protected create(options: Record<string, unknown>) { return createPagination(this, options); }\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n const page = this.instance.page;\n this.instance.destroy();\n this.instance = this.create({ ...(!this.hasAttribute('page') ? { page } : {}), ...this.options });\n }\n}\nexport const definePagination = () => defineElement('mk-pagination', MkPaginationElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createHoverCard, type HoverCardInstance } from './engine';\n/** Light DOM: supply the same child markup shown in the README. */\nexport class MkHoverCardElement extends MkElement<HoverCardInstance> {\n static options: Record<string, OptionType> = { openDelay: 'number', closeDelay: 'number', placement: 'string' };\n protected create(options: Record<string, unknown>) { return createHoverCard(this, options); }\n}\nexport const defineHoverCard = () => defineElement('mk-hover-card', MkHoverCardElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createInputOtp, type InputOtpInstance } from './engine';\n/** Light DOM: supply the same child markup shown in the README. */\nexport class MkInputOtpElement extends MkElement<InputOtpInstance> {\n static options: Record<string, OptionType> = { length: 'number', value: 'string', mask: 'boolean' };\n protected create(options: Record<string, unknown>) { return createInputOtp(this, options); }\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n const value = this.instance.value;\n this.instance.destroy();\n this.instance = this.create({ ...(!this.hasAttribute('value') ? { value } : {}), ...this.options });\n }\n}\nexport const defineInputOtp = () => defineElement('mk-input-otp', MkInputOtpElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createCalendar, type CalendarEvent, type CalendarInstance } from './engine';\n\n/** Light DOM: supply the header and the [data-mk-calendar-grid] shown in the README. */\nexport class MkCalendarElement extends MkElement<CalendarInstance> {\n static options: Record<string, OptionType> = {\n date: 'string', view: 'string', firstDay: 'number', locale: 'string', maxEvents: 'number', events: 'json', selected: 'string', today: 'string',\n };\n\n protected create(options: Record<string, unknown>) {\n return createCalendar(this, options);\n }\n\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n if (name === 'events') {\n this.instance.setEvents((this.options.events as CalendarEvent[] | undefined) ?? []);\n return;\n }\n // Keep where the visitor is unless the changed attribute says otherwise.\n const { date, view, selected } = this.instance;\n this.instance.destroy();\n this.instance = this.create({ date, view, selected, ...this.options });\n }\n}\n\nexport const defineCalendar = () => defineElement('mk-calendar', MkCalendarElement);\n","import { MkElement, defineElement, type OptionType } from '../../elements/base';\nimport { createSlotPicker, type SlotPickerInstance, type SlotSource } from './engine';\n\n/** Light DOM: supply the [data-mk-slot-days] and [data-mk-slot-times] markup shown in the README. */\nexport class MkSlotPickerElement extends MkElement<SlotPickerInstance> {\n static options: Record<string, OptionType> = {\n date: 'string', value: 'string', slots: 'json', min: 'string', max: 'string', closedDays: 'json', firstDay: 'number', locale: 'string',\n };\n\n protected create(options: Record<string, unknown>) {\n return createSlotPicker(this, options);\n }\n\n attributeChangedCallback(name: string, previous: string | null, next: string | null) {\n if (previous === next || !this.isConnected || !this.instance) return;\n if (name === 'slots') {\n this.instance.setSlots((this.options.slots as SlotSource | undefined) ?? []);\n return;\n }\n // Keep the visitor's pick unless the value itself changed.\n const value = this.instance.value ?? (this.instance.date ? this.instance.date : undefined);\n this.instance.destroy();\n this.instance = this.create({ ...(name !== 'value' && value ? (typeof value === 'string' ? { value } : { date: value }) : {}), ...this.options });\n }\n}\n\nexport const defineSlotPicker = () => defineElement('mk-slot-picker', MkSlotPickerElement);\n","import { MkStudioDockElement } from '../components/studio-dock/element';\nimport { MkTrailerElement } from '../components/trailer/element';\nimport { defineElement } from './base';\nimport { MkThemePickerElement } from '../components/theme-picker/element';\nimport { MkDialogElement } from '../components/dialog/element';\nimport { MkMenuElement } from '../components/menu/element';\nimport { MkToasterElement } from '../components/toast/element';\nimport { MkChatBackgroundElement } from '../components/chat-background/element';\nimport { MkChatElement } from '../components/chat/element';\nimport { MkNavElement } from '../components/nav/element';\nimport { MkStepsElement } from '../components/steps/element';\nimport { MkCursorElement } from '../components/cursor/element';\nimport { MkIslandElement } from '../components/island/element';\nimport { MkQuantityElement } from '../components/quantity/element';\nimport { MkPaginationElement } from '../components/pagination/element';\nimport { MkHoverCardElement } from '../components/hover-card/element';\nimport { MkInputOtpElement } from '../components/input-otp/element';\nimport { MkCalendarElement } from '../components/calendar/element';\nimport { MkSlotPickerElement } from '../components/slot-picker/element';\n// new-component:imports (scripts/new-component.mjs inserts above this line)\n\nexport { MkElement, SafeHTMLElement, defineElement, type OptionType } from './base';\nexport { MkThemePickerElement } from '../components/theme-picker/element';\nexport { MkDialogElement } from '../components/dialog/element';\nexport { MkMenuElement } from '../components/menu/element';\nexport { MkToasterElement } from '../components/toast/element';\nexport { MkChatBackgroundElement } from '../components/chat-background/element';\nexport { MkChatElement } from '../components/chat/element';\nexport { MkNavElement } from '../components/nav/element';\nexport { MkStepsElement } from '../components/steps/element';\nexport { MkCursorElement } from '../components/cursor/element';\nexport { toast } from '../components/toast/store';\nexport { MkIslandElement } from '../components/island/element';\nexport { MkQuantityElement } from '../components/quantity/element';\nexport { MkPaginationElement } from '../components/pagination/element';\nexport { MkHoverCardElement } from '../components/hover-card/element';\nexport { MkInputOtpElement } from '../components/input-otp/element';\nexport { MkStudioDockElement, defineStudioDock } from '../components/studio-dock/element';\nexport { MkTrailerElement, defineTrailer } from '../components/trailer/element';\nexport { MkCalendarElement } from '../components/calendar/element';\nexport { MkSlotPickerElement } from '../components/slot-picker/element';\n// new-component:exports\n\n/** Tag name → element class, for every component. */\nexport const ELEMENTS = {\n 'mk-theme-picker': MkThemePickerElement,\n 'mk-dialog': MkDialogElement,\n 'mk-menu': MkMenuElement,\n 'mk-toaster': MkToasterElement,\n 'mk-chat-background': MkChatBackgroundElement,\n 'mk-chat': MkChatElement,\n 'mk-nav': MkNavElement,\n 'mk-steps': MkStepsElement,\n 'mk-cursor': MkCursorElement,\n 'mk-island': MkIslandElement,\n 'mk-quantity': MkQuantityElement,\n 'mk-pagination': MkPaginationElement,\n 'mk-hover-card': MkHoverCardElement,\n 'mk-input-otp': MkInputOtpElement,\n 'mk-studio-dock': MkStudioDockElement,\n'mk-trailer': MkTrailerElement,\n 'mk-calendar': MkCalendarElement,\n 'mk-slot-picker': MkSlotPickerElement,\n // new-component:entries\n} as const;\n\nexport type ElementName = keyof typeof ELEMENTS;\n\n/** Register every motion-kit element (or the ones named). Safe to call more than once. */\nexport function defineElements(names: ElementName[] = Object.keys(ELEMENTS) as ElementName[]) {\n for (const name of names) defineElement(name, ELEMENTS[name]);\n}\n"],"mappings":"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","names":[]}