@yewdiel21/motion-kit 0.18.0 → 0.19.1

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 (75) hide show
  1. package/README.md +245 -222
  2. package/bin/motion-kit.mjs +0 -0
  3. package/dist/auto/index.d.ts +4 -3
  4. package/dist/auto/index.js +5 -3
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-QFBOHPWZ.js → chunk-CQP66AZK.js} +2 -2
  7. package/dist/{chunk-QP4QJOEN.js → chunk-H4STLMCM.js} +2 -2
  8. package/dist/{chunk-AWDEKDEJ.js → chunk-LIXSOGS2.js} +8 -22
  9. package/dist/chunk-LIXSOGS2.js.map +1 -0
  10. package/dist/{chunk-Q7IW4FV3.js → chunk-NCGNIPJE.js} +1430 -968
  11. package/dist/chunk-NCGNIPJE.js.map +1 -0
  12. package/dist/{chunk-DOOMULVV.js → chunk-OLT3CWDJ.js} +4 -2
  13. package/dist/chunk-OLT3CWDJ.js.map +1 -0
  14. package/dist/{chunk-EDMXWUW3.js → chunk-PVN7YVKV.js} +3 -3
  15. package/dist/css/components/code-block.css +267 -0
  16. package/dist/css/components/command-search.css +274 -2
  17. package/dist/css/components/dialog.css +264 -0
  18. package/dist/css/components/heatmap-chart.css +267 -1
  19. package/dist/css/components/pill-button.css +7 -5
  20. package/dist/css/components/scroll-area.css +261 -0
  21. package/dist/css/components/scroll-island.css +6 -0
  22. package/dist/css/components/select.css +284 -4
  23. package/dist/elements/index.d.ts +15 -4
  24. package/dist/elements/index.js +36 -6
  25. package/dist/elements/index.js.map +1 -1
  26. package/dist/{engine-t8d7brjn.d.ts → engine-D6XV-WNt.d.ts} +50 -1
  27. package/dist/gl/index.js +2 -2
  28. package/dist/index.css +321 -12
  29. package/dist/index.d.ts +3 -3
  30. package/dist/index.js +7 -5
  31. package/dist/index.js.map +1 -1
  32. package/dist/react/index.d.ts +20 -7
  33. package/dist/react/index.js +56 -7
  34. package/dist/react/index.js.map +1 -1
  35. package/dist/{reduced-dPsZYqtI.d.ts → reduced-4croIXl-.d.ts} +1 -1
  36. package/dist/{store-6hZNKiee.d.ts → store-CAHWkurn.d.ts} +1 -1
  37. package/package.json +117 -110
  38. package/registry.json +1357 -1340
  39. package/src/auto/auto-init.ts +341 -339
  40. package/src/components/code-block/README.md +1 -1
  41. package/src/components/code-block/code-block.css +5 -0
  42. package/src/components/code-block/engine.ts +5 -0
  43. package/src/components/command-search/README.md +1 -1
  44. package/src/components/command-search/command-search.css +12 -2
  45. package/src/components/command-search/engine.ts +6 -0
  46. package/src/components/dialog/README.md +104 -103
  47. package/src/components/dialog/dialog.css +2 -0
  48. package/src/components/dialog/engine.ts +465 -449
  49. package/src/components/heatmap-chart/README.md +48 -48
  50. package/src/components/heatmap-chart/engine.ts +6 -1
  51. package/src/components/heatmap-chart/heatmap-chart.css +5 -1
  52. package/src/components/icons.ts +1 -0
  53. package/src/components/pill-button/engine.ts +1 -1
  54. package/src/components/pill-button/pill-button.css +7 -5
  55. package/src/components/scroll-area/README.md +89 -0
  56. package/src/components/scroll-area/element.ts +35 -0
  57. package/src/components/scroll-area/engine.ts +528 -0
  58. package/src/components/scroll-area/react.tsx +67 -0
  59. package/src/components/scroll-area/scroll-area.css +260 -0
  60. package/src/components/scroll-island/engine.ts +10 -1
  61. package/src/components/scroll-island/scroll-island.css +6 -0
  62. package/src/components/select/README.md +1 -1
  63. package/src/components/select/engine.ts +16 -4
  64. package/src/components/select/select.css +22 -4
  65. package/src/core/timing.ts +2 -0
  66. package/src/elements/index.ts +321 -318
  67. package/src/index.ts +1 -0
  68. package/src/motion/morph.ts +5 -2
  69. package/src/react/index.ts +2 -1
  70. package/dist/chunk-AWDEKDEJ.js.map +0 -1
  71. package/dist/chunk-DOOMULVV.js.map +0 -1
  72. package/dist/chunk-Q7IW4FV3.js.map +0 -1
  73. /package/dist/{chunk-QFBOHPWZ.js.map → chunk-CQP66AZK.js.map} +0 -0
  74. /package/dist/{chunk-QP4QJOEN.js.map → chunk-H4STLMCM.js.map} +0 -0
  75. /package/dist/{chunk-EDMXWUW3.js.map → chunk-PVN7YVKV.js.map} +0 -0
@@ -1,48 +1,48 @@
1
- # heatmap-chart
2
-
3
- Calendario de actividad tipo GitHub con intensidad por día, tooltips y desplazamiento horizontal.
4
-
5
- ## Instalación
6
-
7
- ```tsx
8
- import '@yewdiel21/motion-kit/css';
9
- import { HeatmapChart } from '@yewdiel21/motion-kit/react';
10
- ```
11
-
12
- ```sh
13
- npx @yewdiel21/motion-kit add heatmap-chart --react --elements
14
- ```
15
-
16
- ## React
17
-
18
- ```tsx
19
- <HeatmapChart end="2026-10-31" weeks={26} data={{ "2026-10-30": 4, "2026-10-31": 8 }} unit="sesiones" locale="es-MX" />
20
- ```
21
-
22
- Los callbacks del ejemplo (`ask`, `run`, `setTool`, `setVolume`) pertenecen a tu aplicación. React acepta `className`, `style` y atributos HTML. Los componentes con estado exponen `instanceRef` (excepto PillButton).
23
-
24
- ## HTML / Astro
25
-
26
- ```html
27
- <mk-heatmap-chart end="2026-10-31" weeks="26" data='{"2026-10-30":4,"2026-10-31":8}'></mk-heatmap-chart>
28
- <script type="module">
29
- import { defineElements } from '@yewdiel21/motion-kit/elements';
30
- defineElements(['mk-heatmap-chart']);
31
- </script>
32
- ```
33
-
34
- En Astro usa un `<script>` procesado por Astro. En HTML directo el import requiere bundler o import map. También puedes usar `import { createHeatmapChart } from '@yewdiel21/motion-kit'` y llamar a la factory con el contenedor y las mismas opciones. Al desmontar, llama a `instance.destroy()`.
35
-
36
- ## Opciones
37
-
38
- data: {date, value}[] o mapa YYYY-MM-DD a valor. end: hoy. weeks: 53. firstDay: 1 (lunes). levels: 4. color: acento. locale, unit, legend. onSelect(date, value). Instancia: select(date | null), update(options), selected.
39
-
40
- Todos los gráficos aceptan `label`, `emptyLabel` y `formatValue`. Se actualizan con `update(options)` sin desmontarse; `select(index | null)` y `selected` controlan la selección (en heatmap se usa una fecha). `onSelect` también emite `mk:select`.
41
-
42
- Los nombres camelCase se escriben como atributos kebab-case. Los arrays y objetos se pasan como JSON. Los booleanos aceptan atributo vacío o `"false"`.
43
-
44
- ## Estilos y accesibilidad
45
-
46
- Variables: --mk-heatmap-color, --mk-heatmap-empty; --mk-chart-surface.
47
-
48
- Respeta los colores del tema, foco visible y `prefers-reduced-motion`. Los gráficos incluyen una tabla accesible y selección con flechas, Home, End y Escape. Heatmap usa arriba/abajo para un día e izquierda/derecha para una semana. Toolbar usa flechas y Home/End; OrbitMenu cierra con Escape y devuelve el foco. Los controles conservan nombres accesibles; VoiceDots anuncia los estados sin leer cada fotograma.
1
+ # heatmap-chart
2
+
3
+ Calendario de actividad tipo GitHub con intensidad por día, tooltips y desplazamiento horizontal. Las semanas se desplazan con la barra de [`scroll-area`](../scroll-area/README.md), que tiene su propio carril bajo la última fila.
4
+
5
+ ## Instalación
6
+
7
+ ```tsx
8
+ import '@yewdiel21/motion-kit/css';
9
+ import { HeatmapChart } from '@yewdiel21/motion-kit/react';
10
+ ```
11
+
12
+ ```sh
13
+ npx @yewdiel21/motion-kit add heatmap-chart --react --elements
14
+ ```
15
+
16
+ ## React
17
+
18
+ ```tsx
19
+ <HeatmapChart end="2026-10-31" weeks={26} data={{ "2026-10-30": 4, "2026-10-31": 8 }} unit="sesiones" locale="es-MX" />
20
+ ```
21
+
22
+ Los callbacks del ejemplo (`ask`, `run`, `setTool`, `setVolume`) pertenecen a tu aplicación. React acepta `className`, `style` y atributos HTML. Los componentes con estado exponen `instanceRef` (excepto PillButton).
23
+
24
+ ## HTML / Astro
25
+
26
+ ```html
27
+ <mk-heatmap-chart end="2026-10-31" weeks="26" data='{"2026-10-30":4,"2026-10-31":8}'></mk-heatmap-chart>
28
+ <script type="module">
29
+ import { defineElements } from '@yewdiel21/motion-kit/elements';
30
+ defineElements(['mk-heatmap-chart']);
31
+ </script>
32
+ ```
33
+
34
+ En Astro usa un `<script>` procesado por Astro. En HTML directo el import requiere bundler o import map. También puedes usar `import { createHeatmapChart } from '@yewdiel21/motion-kit'` y llamar a la factory con el contenedor y las mismas opciones. Al desmontar, llama a `instance.destroy()`.
35
+
36
+ ## Opciones
37
+
38
+ data: {date, value}[] o mapa YYYY-MM-DD a valor. end: hoy. weeks: 53. firstDay: 1 (lunes). levels: 4. color: acento. locale, unit, legend. onSelect(date, value). Instancia: select(date | null), update(options), selected.
39
+
40
+ Todos los gráficos aceptan `label`, `emptyLabel` y `formatValue`. Se actualizan con `update(options)` sin desmontarse; `select(index | null)` y `selected` controlan la selección (en heatmap se usa una fecha). `onSelect` también emite `mk:select`.
41
+
42
+ Los nombres camelCase se escriben como atributos kebab-case. Los arrays y objetos se pasan como JSON. Los booleanos aceptan atributo vacío o `"false"`.
43
+
44
+ ## Estilos y accesibilidad
45
+
46
+ Variables: --mk-heatmap-color, --mk-heatmap-empty; --mk-chart-surface.
47
+
48
+ Respeta los colores del tema, foco visible y `prefers-reduced-motion`. Los gráficos incluyen una tabla accesible y selección con flechas, Home, End y Escape. Heatmap usa arriba/abajo para un día e izquierda/derecha para una semana. Toolbar usa flechas y Home/End; OrbitMenu cierra con Escape y devuelve el foco. Los controles conservan nombres accesibles; VoiceDots anuncia los estados sin leer cada fotograma.
@@ -4,6 +4,7 @@ import { reduced } from '../../core/reduced';
4
4
  import { createScope } from '../../core/scope';
5
5
  import { inert, type Instance } from '../../core/types';
6
6
  import { chartFrame, finite, formatNumber, onWidth, round, svg } from '../chart/parts';
7
+ import { createScrollArea } from '../scroll-area/engine';
7
8
 
8
9
  /*
9
10
  * Heatmap chart: daily activity on a calendar, a column per week like
@@ -13,7 +14,8 @@ import { chartFrame, finite, formatNumber, onWidth, round, svg } from '../chart/
13
14
  * crossfades their colours. Pointing at a day (or the arrows: up and down a
14
15
  * day, left and right a week, PageUp/PageDown four) lifts it with a ring and
15
16
  * the tooltip says its value and date; the "less … more" scale lights the
16
- * days of a step. Narrow screens scroll the weeks, ending on the latest.
17
+ * days of a step. Narrow screens scroll the weeks, ending on the latest, under
18
+ * the kit's scroll-area bar (its own lane below the last row).
17
19
  */
18
20
 
19
21
  export interface HeatmapDatum {
@@ -70,6 +72,9 @@ export function createHeatmapChart(root: HTMLElement | null, initial: HeatmapCha
70
72
  plot.prepend(scroller);
71
73
  scroller.append(canvas);
72
74
  scope.add(() => scroller.remove());
75
+ // The arrows already move through the days: the bar is not a tab stop.
76
+ const area = createScrollArea(plot, { viewport: scroller, axis: 'x', focusable: false, decorative: true });
77
+ scope.add(() => area.destroy());
73
78
 
74
79
  const scale = document.createElement('div');
75
80
  scale.dataset.mkHeatmapScale = '';
@@ -13,7 +13,11 @@ mk-heatmap-chart {
13
13
  overflow-x: auto;
14
14
  overflow-y: hidden;
15
15
  padding-block: 4px;
16
- scrollbar-width: thin;
16
+ }
17
+
18
+ /* Weeks that scroll leave the scroll-area bar a lane below the last row, so a click on a day never lands on it. */
19
+ [data-mk-overflow-x] > [data-mk-heatmap-scroll] {
20
+ padding-bottom: 16px;
17
21
  }
18
22
 
19
23
  [data-mk-chart-type='heatmap'] [data-mk-chart-svg] {
@@ -14,6 +14,7 @@ export const ICON_PATHS = {
14
14
  mic: 'M12 3a3 3 0 00-3 3v6a3 3 0 006 0V6a3 3 0 00-3-3zM5.5 11a6.5 6.5 0 0013 0M12 17.5V21',
15
15
  sparkle: 'M12 3l1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9z',
16
16
  grip: 'M9 6h.01M15 6h.01M9 12h.01M15 12h.01M9 18h.01M15 18h.01',
17
+ toTop: 'M12 20V9M6.5 14.5L12 9l5.5 5.5M6 4.5h12',
17
18
  } as const;
18
19
 
19
20
  export type IconName = keyof typeof ICON_PATHS;
@@ -7,7 +7,7 @@ import { press } from '../../motion/micro';
7
7
  * Pill button: a dark pill with a label and an arrow. When the pointer comes in
8
8
  * (or the keyboard focuses it) the dark fill gathers into a circle around the
9
9
  * icon on the swatch curve (.38,.49,0,1.5, a small overshoot), the label slides
10
- * left and turns to the text colour, and the arrow nudges forward; leaving, the
10
+ * left and turns to the text colour, and the arrow stays centred; leaving, the
11
11
  * fill spreads back into the pill. `expand` turns it around: a circle by the
12
12
  * label that spreads into the pill. The motion is CSS (pill-button.css); the
13
13
  * engine builds the label, icon and fill when the markup lacks them, presses on
@@ -51,19 +51,24 @@ mk-pill-button {
51
51
 
52
52
  [data-mk-pill-icon] {
53
53
  display: inline-grid;
54
+ flex: none;
54
55
  place-items: center;
55
56
  width: 1.125rem;
56
57
  height: 1.125rem;
58
+ font-size: 1.125rem;
57
59
  color: var(--mk-pill-on-ink);
58
- transition: transform 0.45s var(--mk-ease-swatch);
59
60
  }
60
61
 
61
- [data-mk-pill-icon] svg {
62
+ [data-mk-pill-icon] :is(svg, .mk-icon) {
62
63
  display: block;
63
64
  width: 100%;
64
65
  height: 100%;
65
66
  }
66
67
 
68
+ [data-mk-pill-icon] .mk-icon {
69
+ font-size: inherit;
70
+ }
71
+
67
72
  /* Gathered: on hover, keyboard focus or a tap. */
68
73
  @media (hover: hover) {
69
74
  :is([data-mk-pill=''], .mk-pill-button:is(button, a):not([data-mk-pill])):hover [data-mk-pill-fill] {
@@ -73,9 +78,6 @@ mk-pill-button {
73
78
  color: var(--mk-pill-ink);
74
79
  transform: translateX(-0.5rem);
75
80
  }
76
- :is([data-mk-pill], .mk-pill-button:is(button, a)):hover [data-mk-pill-icon] {
77
- transform: translateX(2px);
78
- }
79
81
  }
80
82
  [data-mk-pill='']:is(:focus-visible, [data-mk-active]) [data-mk-pill-fill] {
81
83
  clip-path: var(--mk-pill-gathered);
@@ -0,0 +1,89 @@
1
+ # scroll-area
2
+
3
+ Área desplazable con barras propias del kit en lugar de la barra del sistema. El desplazamiento sigue siendo el nativo: teclado, tacto, inercia, `scroll-snap` y buscar en la página funcionan como siempre.
4
+
5
+ Origen: Melonmind oculta las barras nativas (`::-webkit-scrollbar { display: none }`) y no tiene barra visible. Esta barra se construye con su lenguaje: píldoras, superficies tonales y sus curvas.
6
+
7
+ - **Reposo:** una píldora de 6 px (el texto al 32 %) que aparece al pasar el puntero o al desplazarte y se desvanece 0,9 s después.
8
+ - **Hover:** sobre la barra aparece un carril tonal y la píldora crece a 10 px con la curva swing (`.38,.49,0,1.5`).
9
+ - **Arrastre:** al agarrarla se presiona (curva click), toma el acento y sigue al puntero sin suavizado.
10
+ - **Clic en el carril:** desliza hasta ese punto (0,6 s, curva signature). La rueda, un toque, una tecla u otro agarre lo cortan.
11
+ - **Bordes y volver arriba:** los bordes con más contenido se funden. Con `backToTop`, una píldora tonal entra con pop cuando has bajado una pantalla.
12
+
13
+ ## HTML / Astro
14
+
15
+ ```html
16
+ <mk-scroll-area class="mk-scroll-area" style="height: 20rem" label="Notas" back-to-top>
17
+ <article>…contenido largo…</article>
18
+ </mk-scroll-area>
19
+ <script>
20
+ import { defineElements } from '@yewdiel21/motion-kit/elements';
21
+ defineElements(['mk-scroll-area']);
22
+ </script>
23
+ ```
24
+
25
+ El contenido se envuelve en un viewport `[data-mk-scroll-viewport]`; al destruirlo vuelve a su sitio.
26
+
27
+ ## React
28
+
29
+ ```tsx
30
+ <ScrollArea style={{ height: 320 }} label="Notas" backToTop onScroll={({ y }) => setRead(y)}>
31
+ <article>…</article>
32
+ </ScrollArea>
33
+ ```
34
+
35
+ ## Vanilla
36
+
37
+ ```ts
38
+ const area = createScrollArea(document.querySelector('.panel'), { axis: 'y' });
39
+ area.scrollTo({ top: 0 });
40
+ // Con un scroller que ya existe dentro de la raíz (no se envuelve nada):
41
+ createScrollArea(dialog, { viewport: dialog.querySelector('.list'), focusable: false, decorative: true });
42
+ ```
43
+
44
+ **El área necesita una altura (`height` o `max-height`).** Si el contenido cabe, no se muestra ninguna barra.
45
+
46
+ ## Opciones
47
+
48
+ | Opción | Atributo | Por defecto | Qué hace |
49
+ |---|---|---|---|
50
+ | `visibility` | `visibility` | `'hover'` | `hover`: al pasar el puntero por el área o al desplazarte. `scroll`: solo al desplazarte. `always`: siempre que haya desbordamiento. Con el puntero encima, la barra siempre se ve. |
51
+ | `axis` | `axis` | `'both'` | `y`, `x` o `both`. Cada barra solo aparece si su eje desborda. |
52
+ | `idle` | `idle` | `900` | ms antes de ocultarse. |
53
+ | `fade` | `fade` | `true` | Funde los bordes con contenido oculto hasta 24 px. `false` lo quita; un número fija la profundidad. |
54
+ | `backToTop` | `back-to-top` | `false` | Botón «Volver arriba». `true`: aparece tras bajar una altura del área; un número: tras esos px. |
55
+ | `label` | `label` | — | Nombre accesible; el viewport pasa a ser una `region`. |
56
+ | `focusable` | `focusable` | `true` | El viewport entra en el orden de Tab para desplazarlo con el teclado. `false` si su contenido ya recibe foco (un menú). |
57
+ | `decorative` | `decorative` | `false` | Saca las barras del árbol accesible: dentro de un `menu` o `listbox`, cuyos hijos deben ser sus opciones. |
58
+ | `viewport` | — | — | Un scroller que ya existe dentro de la raíz; se usa tal cual. |
59
+ | `onScroll({ x, y })` | — | — | Progreso de cada eje, de 0 a 1. |
60
+
61
+ ## API
62
+
63
+ `scrollTo({ top, left }, { animate = true })` desliza (salta con `animate: false` o con movimiento reducido). `refresh()` vuelve a medir. `viewport` es el elemento que se desplaza. `destroy()` lo deshace todo.
64
+
65
+ ## Eventos
66
+
67
+ `mk:scroll` con `{ x, y }`.
68
+
69
+ ## Variables CSS
70
+
71
+ | Variable | Qué controla |
72
+ |---|---|
73
+ | `--mk-scroll-thumb` | Píldora en reposo (texto al 32 %). |
74
+ | `--mk-scroll-thumb-hover` | Píldora con el puntero encima (48 %). |
75
+ | `--mk-scroll-thumb-active` | Píldora mientras se arrastra (el acento). |
76
+ | `--mk-scroll-rail` | Carril tonal (6 %). |
77
+ | `--mk-scroll-inset` | Distancia de los extremos de la barra a las esquinas (6 px). Súbela en contenedores muy redondeados. |
78
+
79
+ El motor escribe `--mk-scroll-fade-top/right/bottom/left` en el viewport y `--mk-scroll-view-top/right/bottom/left` en las barras: las barras siguen la caja del viewport aunque la raíz sea más grande (una paleta con campo y pie, el cuerpo de un diálogo).
80
+
81
+ ## Accesibilidad
82
+
83
+ - **Viewport:** desplazamiento nativo y `tabindex="0"`; con `label` es una región con nombre. Al enfocarlo con el teclado, el área muestra un anillo de acento.
84
+ - **Barras:** `role="scrollbar"` con `aria-controls`, `aria-orientation` y `aria-valuenow` (0–100). No son paradas de Tab: el teclado desplaza el viewport.
85
+ - **Volver arriba:** es un `<button>` con nombre. Si desaparece mientras tiene el foco, el foco pasa al área.
86
+ - **Tacto:** se arrastra la píldora con `touch-action: none` y se mantiene la inercia del sistema.
87
+ - **Movimiento reducido:** sin crecimientos, fundidos animados ni deslizamientos; la barra salta a su sitio y todo sigue funcionando.
88
+
89
+ `destroy()` mata las animaciones, suelta la captura del puntero, limpia temporizadores, observadores y eventos, quita las barras y devuelve el contenido.
@@ -0,0 +1,35 @@
1
+ import { MkElement, defineElement, type OptionType } from '../../elements/base';
2
+ import { createScrollArea, type ScrollAreaInstance, type ScrollAreaOptions } from './engine';
3
+
4
+ /** `fade` / `back-to-top`: present or "true" → true, "false" → false, a number → that many px. */
5
+ const flagOrNumber = (raw: unknown): boolean | number | undefined => {
6
+ if (raw === undefined) return undefined;
7
+ const text = String(raw).trim();
8
+ if (text === '' || text === 'true') return true;
9
+ if (text === 'false') return false;
10
+ const value = Number(text);
11
+ return Number.isFinite(value) ? value : true;
12
+ };
13
+
14
+ /**
15
+ * <mk-scroll-area class="mk-scroll-area" style="height: 20rem" back-to-top>…</mk-scroll-area>
16
+ * Its content is wrapped in the viewport. Emits mk:scroll ({x, y}).
17
+ */
18
+ export class MkScrollAreaElement extends MkElement<ScrollAreaInstance> {
19
+ static options: Record<string, OptionType> = {
20
+ visibility: 'string',
21
+ axis: 'string',
22
+ idle: 'number',
23
+ fade: 'string',
24
+ backToTop: 'string',
25
+ label: 'string',
26
+ focusable: 'boolean',
27
+ decorative: 'boolean',
28
+ };
29
+
30
+ protected create(options: Record<string, unknown>) {
31
+ return createScrollArea(this, { ...options, fade: flagOrNumber(options.fade), backToTop: flagOrNumber(options.backToTop) } as ScrollAreaOptions);
32
+ }
33
+ }
34
+
35
+ export const defineScrollArea = () => defineElement('mk-scroll-area', MkScrollAreaElement);