@elmethis/qwik 1.0.0-alpha.30 → 1.0.0-alpha.31

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.
@@ -42,15 +42,15 @@ const zodToJsonSchema = require("zod-to-json-schema");
42
42
  const uuid = require("uuid");
43
43
  const autoAnimate = require("@formkit/auto-animate");
44
44
  const esToolkit = require("es-toolkit");
45
- const tab = "_tab_1fco0_14";
46
- const active$3 = "_active_1fco0_37";
45
+ const tab = "_tab_fka8s_14";
46
+ const active$3 = "_active_fka8s_42";
47
47
  const styles$S = {
48
- "elm-tabs": "_elm-tabs_1fco0_1",
49
- "tab-container": "_tab-container_1fco0_14",
48
+ "elm-tabs": "_elm-tabs_fka8s_1",
49
+ "tab-container": "_tab-container_fka8s_14",
50
50
  tab,
51
51
  active: active$3,
52
- "tab-content": "_tab-content_1fco0_48",
53
- "tab-content-inner": "_tab-content-inner_1fco0_53"
52
+ "tab-content": "_tab-content_fka8s_53",
53
+ "tab-content-inner": "_tab-content-inner_fka8s_58"
54
54
  };
55
55
  const row$2 = "_row_12wiu_5";
56
56
  const open$1 = "_open_12wiu_11";
@@ -65,7 +65,7 @@ const styles$R = {
65
65
  both,
66
66
  inner
67
67
  };
68
- const _hf0$B = (p0) => ({
68
+ const _hf0$C = (p0) => ({
69
69
  "--elmethis-scoped-transition-timing-function": p0.transitionTimingFunction ?? "ease-in-out"
70
70
  });
71
71
  const ElmCollapse = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
@@ -86,7 +86,7 @@ const ElmCollapse = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.i
86
86
  },
87
87
  _rawProps.class
88
88
  ],
89
- style: core$1._fnSignal(_hf0$B, [
89
+ style: core$1._fnSignal(_hf0$C, [
90
90
  _rawProps
91
91
  ]),
92
92
  ...core$1._getVarProps(props)
@@ -98,7 +98,7 @@ function useBindableSignal({ signal, defaultValue }) {
98
98
  const internal = core$1.useSignal(defaultValue);
99
99
  return signal ?? internal;
100
100
  }
101
- const _hf0$A = (p0, p1) => p0.selectedValue.value === p1.value;
101
+ const _hf0$B = (p0, p1) => p0.selectedValue.value === p1.value;
102
102
  const ElmTabsContext = core$1.createContextId("elmethis.tabs");
103
103
  const ElmTabs = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((props) => {
104
104
  const rest = core$1._restProps(props, [
@@ -174,7 +174,7 @@ const ElmTabPanel = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.i
174
174
  ...core$1._getVarProps(rest)
175
175
  }, core$1._getConstProps(rest), /* @__PURE__ */ core$1._jsxSorted(ElmCollapse, null, {
176
176
  direction: "row",
177
- isOpen: core$1._fnSignal(_hf0$A, [
177
+ isOpen: core$1._fnSignal(_hf0$B, [
178
178
  ctx,
179
179
  props
180
180
  ]),
@@ -293,8 +293,8 @@ const styles$O = {
293
293
  const styles$N = {
294
294
  "elm-inline-icon": "_elm-inline-icon_1qs0i_1"
295
295
  };
296
- const _hf0$z = (p0) => p0.width ?? p0.size ?? 16;
297
- const _hf1$j = (p0) => p0.height ?? p0.size ?? 16;
296
+ const _hf0$A = (p0) => p0.width ?? p0.size ?? 16;
297
+ const _hf1$k = (p0) => p0.height ?? p0.size ?? 16;
298
298
  const ElmInlineIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
299
299
  const props = core$1._restProps(_rawProps, [
300
300
  "class",
@@ -312,18 +312,18 @@ const ElmInlineIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
312
312
  ...core$1._getVarProps(props)
313
313
  }, core$1._getConstProps(props), /* @__PURE__ */ core$1._jsxSorted("img", {
314
314
  alt: core$1._wrapProp(_rawProps, "alt"),
315
- height: core$1._fnSignal(_hf1$j, [
315
+ height: core$1._fnSignal(_hf1$k, [
316
316
  _rawProps
317
317
  ]),
318
318
  src: core$1._wrapProp(_rawProps, "src"),
319
- width: core$1._fnSignal(_hf0$z, [
319
+ width: core$1._fnSignal(_hf0$A, [
320
320
  _rawProps
321
321
  ])
322
322
  }, {
323
323
  class: styles$N["elm-inline-icon"]
324
324
  }, null, 3, null), 0, "D4_0");
325
325
  }, "ElmInlineIcon_component_9LkENpSGozA"));
326
- const _hf0$y = (p0) => ({
326
+ const _hf0$z = (p0) => ({
327
327
  ...p0.style,
328
328
  "--elmethis-scoped-color": p0.color,
329
329
  "--elmethis-scoped-font-size": p0.size ?? "1em",
@@ -386,7 +386,7 @@ const ElmInlineText = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
386
386
  textStyles.text,
387
387
  _rawProps.class
388
388
  ],
389
- style: core$1._fnSignal(_hf0$y, [
389
+ style: core$1._fnSignal(_hf0$z, [
390
390
  _rawProps
391
391
  ]),
392
392
  ...core$1._getVarProps(rest)
@@ -395,7 +395,7 @@ const ElmInlineText = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
395
395
  const styles$M = {
396
396
  "elm-paragraph": "_elm-paragraph_rbsk5_1"
397
397
  };
398
- const _hf0$x = (p0) => ({
398
+ const _hf0$y = (p0) => ({
399
399
  ...p0.style,
400
400
  "--elmethis-scoped-color": p0.color,
401
401
  "--elmethis-scoped-background-color": p0.backgroundColor
@@ -413,7 +413,7 @@ const ElmParagraph = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.
413
413
  textStyles.text,
414
414
  _rawProps.class
415
415
  ],
416
- style: core$1._fnSignal(_hf0$x, [
416
+ style: core$1._fnSignal(_hf0$y, [
417
417
  _rawProps
418
418
  ]),
419
419
  ...core$1._getVarProps(props)
@@ -533,8 +533,8 @@ function firstChildMargin(index) {
533
533
  marginBlockStart: 0
534
534
  } : void 0;
535
535
  }
536
- const _hf0$w = (p0) => p0.props.min ?? 0;
537
- const _hf1$i = (p0) => p0.props.max;
536
+ const _hf0$x = (p0) => p0.props.min ?? 0;
537
+ const _hf1$j = (p0) => p0.props.max;
538
538
  const textFieldInputType = {
539
539
  shortText: "text",
540
540
  number: "number",
@@ -691,10 +691,10 @@ const basicCatalog = new CatalogRenderer([
691
691
  defineRenderer(basic_catalog.SliderApi, (_rawProps) => {
692
692
  const value = typeof _rawProps.props.value === "number" ? _rawProps.props.value : Number(_rawProps.ctx.dataContext.resolveDynamicValue(_rawProps.props.value) ?? 0);
693
693
  return /* @__PURE__ */ core$1._jsxSorted("input", {
694
- max: core$1._fnSignal(_hf1$i, [
694
+ max: core$1._fnSignal(_hf1$j, [
695
695
  _rawProps
696
696
  ]),
697
- min: core$1._fnSignal(_hf0$w, [
697
+ min: core$1._fnSignal(_hf0$x, [
698
698
  _rawProps
699
699
  ]),
700
700
  "q-e:change": /* @__PURE__ */ core$1.inlinedQrl((_e, el, _rawProps2) => _rawProps2.setBinding$("value", Number(el.value)), "basicCatalog_defineRenderer_input_q_e_change_U0Dwvjz0O9o"),
@@ -1190,7 +1190,7 @@ const ElmA2ui = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlin
1190
1190
  const styles$K = {
1191
1191
  "elm-katex": "_elm-katex_189xe_1"
1192
1192
  };
1193
- const _hf0$v = (p0) => p0.value ?? "";
1193
+ const _hf0$w = (p0) => p0.value ?? "";
1194
1194
  const ElmKatex = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((props) => {
1195
1195
  const rest = core$1._restProps(props, [
1196
1196
  "class",
@@ -1212,7 +1212,7 @@ const ElmKatex = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inli
1212
1212
  props.block ? styles$K["elm-katex"] : void 0,
1213
1213
  props.class
1214
1214
  ],
1215
- dangerouslySetInnerHTML: core$1._fnSignal(_hf0$v, [
1215
+ dangerouslySetInnerHTML: core$1._fnSignal(_hf0$w, [
1216
1216
  html
1217
1217
  ]),
1218
1218
  ...core$1._getVarProps(rest)
@@ -1229,8 +1229,8 @@ const styles$J = {
1229
1229
  divider: divider$1,
1230
1230
  code
1231
1231
  };
1232
- const _hf0$u = (p0) => p0.icon.viewBox;
1233
- const _hf1$h = (p0) => p0.size ?? 24;
1232
+ const _hf0$v = (p0) => p0.icon.viewBox;
1233
+ const _hf1$i = (p0) => p0.size ?? 24;
1234
1234
  const scopeId = (value, key2, suffix) => key2 === "id" ? `${value}-${suffix}` : value.replace(/url\(#([^)]+)\)/g, `url(#$1-${suffix})`);
1235
1235
  const renderNode = (node, suffix, key2) => {
1236
1236
  const attrs = {};
@@ -1249,13 +1249,13 @@ const LanguageGlyph = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
1249
1249
  const suffix = core$1.useId();
1250
1250
  return /* @__PURE__ */ core$1._jsxSplit("svg", {
1251
1251
  xmlns: "http://www.w3.org/2000/svg",
1252
- viewBox: core$1._fnSignal(_hf0$u, [
1252
+ viewBox: core$1._fnSignal(_hf0$v, [
1253
1253
  _rawProps
1254
1254
  ]),
1255
- width: core$1._fnSignal(_hf1$h, [
1255
+ width: core$1._fnSignal(_hf1$i, [
1256
1256
  _rawProps
1257
1257
  ]),
1258
- height: core$1._fnSignal(_hf1$h, [
1258
+ height: core$1._fnSignal(_hf1$i, [
1259
1259
  _rawProps
1260
1260
  ]),
1261
1261
  class: core$1._wrapProp(_rawProps, "class"),
@@ -1266,13 +1266,13 @@ const LanguageGlyph = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
1266
1266
  const styles$I = {
1267
1267
  "elm-mdi-icon": "_elm-mdi-icon_ihskx_1"
1268
1268
  };
1269
- const _hf0$t = (p0) => ({
1269
+ const _hf0$u = (p0) => ({
1270
1270
  "--elmethis-scoped-color": p0.lightColor ?? p0.color ?? "currentColor",
1271
1271
  "--dark-color": p0.darkColor ?? p0.color ?? "currentColor",
1272
1272
  ...p0.style
1273
1273
  });
1274
- const _hf1$g = (p0) => p0.size ?? "1em";
1275
- const _hf2$b = (p0) => p0.color ?? "currentColor";
1274
+ const _hf1$h = (p0) => p0.size ?? "1em";
1275
+ const _hf2$c = (p0) => p0.color ?? "currentColor";
1276
1276
  const ElmMdiIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
1277
1277
  const props = core$1._restProps(_rawProps, [
1278
1278
  "class",
@@ -1288,17 +1288,17 @@ const ElmMdiIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.in
1288
1288
  styles$I["elm-mdi-icon"],
1289
1289
  _rawProps.class
1290
1290
  ],
1291
- style: core$1._fnSignal(_hf0$t, [
1291
+ style: core$1._fnSignal(_hf0$u, [
1292
1292
  _rawProps
1293
1293
  ]),
1294
- width: core$1._fnSignal(_hf1$g, [
1294
+ width: core$1._fnSignal(_hf1$h, [
1295
1295
  _rawProps
1296
1296
  ]),
1297
- height: core$1._fnSignal(_hf1$g, [
1297
+ height: core$1._fnSignal(_hf1$h, [
1298
1298
  _rawProps
1299
1299
  ]),
1300
1300
  viewBox: "0 0 24 24",
1301
- fill: core$1._fnSignal(_hf2$b, [
1301
+ fill: core$1._fnSignal(_hf2$c, [
1302
1302
  _rawProps
1303
1303
  ]),
1304
1304
  xmlns: "http://www.w3.org/2000/svg",
@@ -1309,7 +1309,7 @@ const ElmMdiIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.in
1309
1309
  d: core$1._wrapProp(_rawProps, "d")
1310
1310
  }, null, null, 3, null), 0, "IA_0");
1311
1311
  }, "ElmMdiIcon_component_AUxPCIu3tI0"));
1312
- const _hf0$s = (p0) => p0.size ?? 24;
1312
+ const _hf0$t = (p0) => p0.size ?? 24;
1313
1313
  const ElmLanguageIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
1314
1314
  const normalized = core.normalizeLanguage(_rawProps.language);
1315
1315
  if (normalized === "file") {
@@ -1322,7 +1322,7 @@ const ElmLanguageIcon = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core
1322
1322
  return /* @__PURE__ */ core$1._jsxSorted(LanguageGlyph, {
1323
1323
  icon: core.languageIcons[normalized]
1324
1324
  }, {
1325
- size: core$1._fnSignal(_hf0$s, [
1325
+ size: core$1._fnSignal(_hf0$t, [
1326
1326
  _rawProps
1327
1327
  ]),
1328
1328
  class: core$1._wrapProp(_rawProps, "class"),
@@ -1441,8 +1441,8 @@ const useClipboard = (options) => {
1441
1441
  copy
1442
1442
  };
1443
1443
  };
1444
- const _hf0$r = (p0) => p0.language ?? "txt";
1445
- const _hf1$f = (p0) => p0.caption || (p0.language ?? "txt");
1444
+ const _hf0$s = (p0) => p0.language ?? "txt";
1445
+ const _hf1$g = (p0) => p0.caption || (p0.language ?? "txt");
1446
1446
  const ElmCodeBlock = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
1447
1447
  const props = core$1._restProps(_rawProps, [
1448
1448
  "class",
@@ -1463,14 +1463,14 @@ const ElmCodeBlock = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.
1463
1463
  /* @__PURE__ */ core$1._jsxSorted("span", null, {
1464
1464
  class: styles$J["language-icon"]
1465
1465
  }, /* @__PURE__ */ core$1._jsxSorted(ElmLanguageIcon, null, {
1466
- language: core$1._fnSignal(_hf0$r, [
1466
+ language: core$1._fnSignal(_hf0$s, [
1467
1467
  _rawProps
1468
1468
  ])
1469
1469
  }, null, 3, "sK_0"), 1, null),
1470
1470
  /* @__PURE__ */ core$1._jsxSorted("span", null, {
1471
1471
  class: styles$J.caption
1472
1472
  }, /* @__PURE__ */ core$1._jsxSorted(ElmInlineText, null, null, [
1473
- core$1._fnSignal(_hf1$f, [
1473
+ core$1._fnSignal(_hf1$g, [
1474
1474
  _rawProps
1475
1475
  ]),
1476
1476
  /* @__PURE__ */ core$1._jsxSorted(core$1.Slot, null, null, null, 3, "sK_1")
@@ -1485,7 +1485,7 @@ const ElmCodeBlock = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.
1485
1485
  class: styles$J.code
1486
1486
  }, /* @__PURE__ */ core$1._jsxSorted(ElmShikiHighlighter, null, {
1487
1487
  code: core$1._wrapProp(_rawProps, "code"),
1488
- language: core$1._fnSignal(_hf0$r, [
1488
+ language: core$1._fnSignal(_hf0$s, [
1489
1489
  _rawProps
1490
1490
  ])
1491
1491
  }, null, 3, "sK_4"), 1, null)
@@ -1537,13 +1537,13 @@ const styles$F = {
1537
1537
  "error-notice": "_error-notice_p7xym_421",
1538
1538
  "error-message": "_error-message_p7xym_431"
1539
1539
  };
1540
- const _hf0$q = (p0, p1) => ({
1540
+ const _hf0$r = (p0, p1) => ({
1541
1541
  "--elmethis-scoped-progress": p1.value,
1542
1542
  "--elmethis-scoped-hover": p0.value ?? 0
1543
1543
  });
1544
- const _hf1$e = (p0) => p0.errorMessage ?? "This audio couldn't be loaded.";
1545
- const _hf2$a = (p0) => p0.value ? "Pause" : "Play";
1546
- const _hf3$9 = (p0) => p0.value ? "Unmute" : "Mute";
1544
+ const _hf1$f = (p0) => p0.errorMessage ?? "This audio couldn't be loaded.";
1545
+ const _hf2$b = (p0) => p0.value ? "Pause" : "Play";
1546
+ const _hf3$a = (p0) => p0.value ? "Unmute" : "Mute";
1547
1547
  const _hf4$5 = (p0, p1) => p0.value ? 0 : p1.value;
1548
1548
  const _hf5$3 = (p0, p1) => ({
1549
1549
  "--elmethis-scoped-volume": p0.value ? 0 : p1.value
@@ -1702,7 +1702,7 @@ const ElmAudioPlayer = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$
1702
1702
  hasError.value && styles$F.errored,
1703
1703
  props.class
1704
1704
  ],
1705
- style: core$1._fnSignal(_hf0$q, [
1705
+ style: core$1._fnSignal(_hf0$r, [
1706
1706
  hoverRatio,
1707
1707
  progress
1708
1708
  ]),
@@ -1807,7 +1807,7 @@ const ElmAudioPlayer = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$
1807
1807
  }, null, 3, "CY_2"),
1808
1808
  /* @__PURE__ */ core$1._jsxSorted("span", null, {
1809
1809
  class: styles$F["error-message"]
1810
- }, core$1._fnSignal(_hf1$e, [
1810
+ }, core$1._fnSignal(_hf1$f, [
1811
1811
  props
1812
1812
  ]), 1, null)
1813
1813
  ], 1, "CY_3") : /* @__PURE__ */ core$1._jsxSorted(jsxRuntime.Fragment, null, null, [
@@ -1905,7 +1905,7 @@ const ElmAudioPlayer = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$
1905
1905
  type: "button",
1906
1906
  class: styles$F["play-button"],
1907
1907
  "q-e:click": togglePlay,
1908
- "aria-label": core$1._fnSignal(_hf2$a, [
1908
+ "aria-label": core$1._fnSignal(_hf2$b, [
1909
1909
  isPlaying
1910
1910
  ]),
1911
1911
  "aria-pressed": core$1._wrapProp(isPlaying)
@@ -1937,7 +1937,7 @@ const ElmAudioPlayer = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$
1937
1937
  type: "button",
1938
1938
  class: styles$F["icon-button"],
1939
1939
  "q-e:click": toggleMute,
1940
- "aria-label": core$1._fnSignal(_hf3$9, [
1940
+ "aria-label": core$1._fnSignal(_hf3$a, [
1941
1941
  isMuted
1942
1942
  ]),
1943
1943
  "aria-pressed": core$1._wrapProp(isMuted)
@@ -2110,10 +2110,10 @@ const useModal = (options = {}) => {
2110
2110
  toggle
2111
2111
  };
2112
2112
  };
2113
- const _hf0$p = (p0) => p0.alt ?? p0.caption ?? "Image";
2114
- const _hf1$d = (p0, p1) => p0 ? void 0 : p1.srcset;
2115
- const _hf2$9 = (p0, p1) => p0 ? void 0 : p1.sizes;
2116
- const _hf3$8 = (p0) => ({
2113
+ const _hf0$q = (p0) => p0.alt ?? p0.caption ?? "Image";
2114
+ const _hf1$e = (p0, p1) => p0 ? void 0 : p1.srcset;
2115
+ const _hf2$a = (p0, p1) => p0 ? void 0 : p1.sizes;
2116
+ const _hf3$9 = (p0) => ({
2117
2117
  "--elmethis-scoped-opacity": p0.value ? 1 : 0.01
2118
2118
  });
2119
2119
  const _hf4$4 = (p0) => ({
@@ -2166,7 +2166,7 @@ const ElmBlockImage = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
2166
2166
  isLoading
2167
2167
  ]));
2168
2168
  const ImageComponent = (isModal) => /* @__PURE__ */ core$1._jsxSorted("img", {
2169
- alt: core$1._fnSignal(_hf0$p, [
2169
+ alt: core$1._fnSignal(_hf0$q, [
2170
2170
  props
2171
2171
  ]),
2172
2172
  fetchPriority: isModal ? "low" : "auto",
@@ -2176,12 +2176,12 @@ const ElmBlockImage = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
2176
2176
  // Only the inline image owns imgRef; the modal image must not steal it
2177
2177
  // (ElmModal keeps its slot mounted, so both can coexist in the DOM).
2178
2178
  ref: isModal ? void 0 : imgRef,
2179
- sizes: core$1._fnSignal(_hf2$9, [
2179
+ sizes: core$1._fnSignal(_hf2$a, [
2180
2180
  isModal,
2181
2181
  props
2182
2182
  ]),
2183
2183
  src: core$1._wrapProp(props, "src"),
2184
- srcset: core$1._fnSignal(_hf1$d, [
2184
+ srcset: core$1._fnSignal(_hf1$e, [
2185
2185
  isModal,
2186
2186
  props
2187
2187
  ]),
@@ -2204,7 +2204,7 @@ const ElmBlockImage = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1
2204
2204
  }, core$1._getConstProps(rest), [
2205
2205
  /* @__PURE__ */ core$1._jsxSorted("div", null, {
2206
2206
  class: styles$E["image-container"],
2207
- style: core$1._fnSignal(_hf3$8, [
2207
+ style: core$1._fnSignal(_hf3$9, [
2208
2208
  isLoading
2209
2209
  ]),
2210
2210
  "q-e:click": handleOpenModal
@@ -2308,7 +2308,7 @@ const styles$A = {
2308
2308
  description,
2309
2309
  link
2310
2310
  };
2311
- const _hf0$o = (p0, p1, p2) => p2.value || p0.image == null ? p1 : {};
2311
+ const _hf0$p = (p0, p1, p2) => p2.value || p0.image == null ? p1 : {};
2312
2312
  const ElmBookmark = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((_rawProps) => {
2313
2313
  const props = core$1._restProps(_rawProps, [
2314
2314
  "class",
@@ -2344,7 +2344,7 @@ const ElmBookmark = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.i
2344
2344
  }, [
2345
2345
  /* @__PURE__ */ core$1._jsxSorted("img", {
2346
2346
  src: core$1._wrapProp(_rawProps, "image"),
2347
- style: core$1._fnSignal(_hf0$o, [
2347
+ style: core$1._fnSignal(_hf0$p, [
2348
2348
  _rawProps,
2349
2349
  hiddenStyle,
2350
2350
  isError
@@ -2401,8 +2401,8 @@ const styles$z = {
2401
2401
  border,
2402
2402
  content: content$1
2403
2403
  };
2404
- const _hf0$n = (p0) => p0.monochrome ? "var(--elmethis-color-neutral-weak)" : "var(--elmethis-color-primary)";
2405
- const _hf1$c = (p0, p1) => p1.monochrome ? "var(--elmethis-color-neutral-weak)" : p0.value ? "var(--elmethis-color-accent-error)" : "var(--elmethis-color-primary)";
2404
+ const _hf0$o = (p0) => p0.monochrome ? "var(--elmethis-color-neutral-weak)" : "var(--elmethis-color-primary)";
2405
+ const _hf1$d = (p0, p1) => p1.monochrome ? "var(--elmethis-color-neutral-weak)" : p0.value ? "var(--elmethis-color-accent-error)" : "var(--elmethis-color-primary)";
2406
2406
  const ElmToggle = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((props) => {
2407
2407
  const rest = core$1._restProps(props, [
2408
2408
  "class",
@@ -2450,7 +2450,7 @@ const ElmToggle = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inl
2450
2450
  ]
2451
2451
  }, null, /* @__PURE__ */ core$1._jsxSorted(ElmMdiIcon, null, {
2452
2452
  d: js.mdiChevronRight,
2453
- color: core$1._fnSignal(_hf0$n, [
2453
+ color: core$1._fnSignal(_hf0$o, [
2454
2454
  props
2455
2455
  ]),
2456
2456
  size: "1rem"
@@ -2472,7 +2472,7 @@ const ElmToggle = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inl
2472
2472
  }, null, /* @__PURE__ */ core$1._jsxSorted(ElmMdiIcon, null, {
2473
2473
  d: js.mdiPlus,
2474
2474
  size: "1rem",
2475
- color: core$1._fnSignal(_hf1$c, [
2475
+ color: core$1._fnSignal(_hf1$d, [
2476
2476
  isOpen,
2477
2477
  props
2478
2478
  ])
@@ -2552,7 +2552,7 @@ const styles$x = {
2552
2552
  warning,
2553
2553
  caution
2554
2554
  };
2555
- const _hf0$m = (p0) => p0.type ?? "note";
2555
+ const _hf0$n = (p0) => p0.type ?? "note";
2556
2556
  const ICON_MAP = Object.freeze({
2557
2557
  note: js.mdiInformation,
2558
2558
  tip: js.mdiLightbulbOn,
@@ -2584,7 +2584,7 @@ const ElmCallout = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.in
2584
2584
  class: styles$x.icon,
2585
2585
  size: "1.25rem"
2586
2586
  }, null, 3, "qp_0"),
2587
- /* @__PURE__ */ core$1._jsxSorted("span", null, null, core$1._fnSignal(_hf0$m, [
2587
+ /* @__PURE__ */ core$1._jsxSorted("span", null, null, core$1._fnSignal(_hf0$n, [
2588
2588
  _rawProps
2589
2589
  ]), 1, null)
2590
2590
  ], 1, null),
@@ -2645,16 +2645,23 @@ const ElmList = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlin
2645
2645
  }, core$1._getConstProps(props), /* @__PURE__ */ core$1._jsxSorted(core$1.Slot, null, null, null, 3, "jF_2"), 0, "jF_3");
2646
2646
  }
2647
2647
  }, "ElmList_component_aFEzPziW6Gs"));
2648
- const caption = "_caption_14qfo_8";
2649
- const spacing = "_spacing_14qfo_25";
2648
+ const caption = "_caption_wl7v3_68";
2649
+ const spacing = "_spacing_wl7v3_85";
2650
2650
  const styles$u = {
2651
- "elm-table": "_elm-table_14qfo_1",
2651
+ "elm-table-frame": "_elm-table-frame_wl7v3_3",
2652
+ "elm-table-scroll": "_elm-table-scroll_wl7v3_50",
2653
+ "elm-table": "_elm-table_wl7v3_3",
2652
2654
  caption,
2653
- "caption-inner": "_caption-inner_14qfo_18",
2654
- spacing
2655
+ "caption-inner": "_caption-inner_wl7v3_78",
2656
+ spacing,
2657
+ "sticky-row-header": "_sticky-row-header_wl7v3_96"
2655
2658
  };
2656
2659
  const HasRowHeaderContext = core$1.createContextId("elm.table.HasRowHeader");
2657
2660
  const TableSectionContext = core$1.createContextId("elm.table.Section");
2661
+ const _hf0$m = (p0, p1) => p1.value && !p0.value ? "" : void 0;
2662
+ const _hf1$c = (p0) => p0.value ? 0 : void 0;
2663
+ const _hf2$9 = (p0, p1) => p0.value && p1.caption != null ? "region" : void 0;
2664
+ const _hf3$8 = (p0, p1) => p0.value && p1.caption != null ? p1.caption : void 0;
2658
2665
  const ElmTable = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inlinedQrl((props) => {
2659
2666
  const rest = core$1._restProps(props, [
2660
2667
  "class",
@@ -2670,10 +2677,68 @@ const ElmTable = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inli
2670
2677
  props
2671
2678
  ]));
2672
2679
  core$1.useContextProvider(HasRowHeaderContext, hasRowHeader);
2673
- return /* @__PURE__ */ core$1._jsxSplit("table", {
2680
+ const scrollRef = core$1.useSignal();
2681
+ const canScroll = core$1.useSignal(false);
2682
+ const atStart = core$1.useSignal(true);
2683
+ const atEnd = core$1.useSignal(true);
2684
+ core$1.useVisibleTaskQrl(/* @__PURE__ */ core$1.inlinedQrl(({ cleanup }) => {
2685
+ const atEnd2 = core$1._captures[0], atStart2 = core$1._captures[1], canScroll2 = core$1._captures[2], scrollRef2 = core$1._captures[3];
2686
+ const el = scrollRef2.value;
2687
+ if (el == null) return;
2688
+ const measure = () => {
2689
+ const max = el.scrollWidth - el.clientWidth;
2690
+ canScroll2.value = max > 1;
2691
+ atStart2.value = el.scrollLeft <= 1;
2692
+ atEnd2.value = el.scrollLeft >= max - 1;
2693
+ };
2694
+ measure();
2695
+ el.addEventListener("scroll", measure, {
2696
+ passive: true
2697
+ });
2698
+ cleanup(() => el.removeEventListener("scroll", measure));
2699
+ if (typeof ResizeObserver !== "undefined") {
2700
+ const observer = new ResizeObserver(measure);
2701
+ observer.observe(el);
2702
+ cleanup(() => observer.disconnect());
2703
+ }
2704
+ }, "ElmTable_component_useVisibleTask_93J4bNO5KnI", [
2705
+ atEnd,
2706
+ atStart,
2707
+ canScroll,
2708
+ scrollRef
2709
+ ]), {
2710
+ strategy: "document-ready"
2711
+ });
2712
+ return /* @__PURE__ */ core$1._jsxSorted("div", null, {
2713
+ class: styles$u["elm-table-frame"],
2714
+ "data-overflow-start": core$1._fnSignal(_hf0$m, [
2715
+ atStart,
2716
+ canScroll
2717
+ ]),
2718
+ "data-overflow-end": core$1._fnSignal(_hf0$m, [
2719
+ atEnd,
2720
+ canScroll
2721
+ ])
2722
+ }, /* @__PURE__ */ core$1._jsxSorted("div", {
2723
+ "aria-label": core$1._fnSignal(_hf3$8, [
2724
+ canScroll,
2725
+ props
2726
+ ]),
2727
+ ref: scrollRef,
2728
+ role: core$1._fnSignal(_hf2$9, [
2729
+ canScroll,
2730
+ props
2731
+ ])
2732
+ }, {
2733
+ class: styles$u["elm-table-scroll"],
2734
+ tabIndex: core$1._fnSignal(_hf1$c, [
2735
+ canScroll
2736
+ ])
2737
+ }, /* @__PURE__ */ core$1._jsxSplit("table", {
2674
2738
  class: [
2675
2739
  styles$u["elm-table"],
2676
2740
  textStyles.text,
2741
+ hasRowHeader.value && styles$u["sticky-row-header"],
2677
2742
  props.class
2678
2743
  ],
2679
2744
  ...core$1._getVarProps(rest)
@@ -2692,7 +2757,7 @@ const ElmTable = /* @__PURE__ */ core$1.componentQrl(/* @__PURE__ */ core$1.inli
2692
2757
  }, null, 3, null)
2693
2758
  ], 1, null), 1, "Yw_1"),
2694
2759
  /* @__PURE__ */ core$1._jsxSorted(core$1.Slot, null, null, null, 3, "Yw_2")
2695
- ], 0, "Yw_3");
2760
+ ], 0, null), 1, null), 1, "Yw_3");
2696
2761
  }, "ElmTable_component_UT2AChu46oY"));
2697
2762
  const styles$t = {
2698
2763
  "elm-table-header": "_elm-table-header_jhft7_1"
@@ -20,15 +20,15 @@ import { zodToJsonSchema } from "zod-to-json-schema";
20
20
  import { v7 } from "uuid";
21
21
  import autoAnimate from "@formkit/auto-animate";
22
22
  import { cloneDeep, isEqual } from "es-toolkit";
23
- const tab = "_tab_1fco0_14";
24
- const active$3 = "_active_1fco0_37";
23
+ const tab = "_tab_fka8s_14";
24
+ const active$3 = "_active_fka8s_42";
25
25
  const styles$S = {
26
- "elm-tabs": "_elm-tabs_1fco0_1",
27
- "tab-container": "_tab-container_1fco0_14",
26
+ "elm-tabs": "_elm-tabs_fka8s_1",
27
+ "tab-container": "_tab-container_fka8s_14",
28
28
  tab,
29
29
  active: active$3,
30
- "tab-content": "_tab-content_1fco0_48",
31
- "tab-content-inner": "_tab-content-inner_1fco0_53"
30
+ "tab-content": "_tab-content_fka8s_53",
31
+ "tab-content-inner": "_tab-content-inner_fka8s_58"
32
32
  };
33
33
  const row$2 = "_row_12wiu_5";
34
34
  const open$1 = "_open_12wiu_11";
@@ -43,7 +43,7 @@ const styles$R = {
43
43
  both,
44
44
  inner
45
45
  };
46
- const _hf0$B = (p0) => ({
46
+ const _hf0$C = (p0) => ({
47
47
  "--elmethis-scoped-transition-timing-function": p0.transitionTimingFunction ?? "ease-in-out"
48
48
  });
49
49
  const ElmCollapse = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
@@ -64,7 +64,7 @@ const ElmCollapse = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_ra
64
64
  },
65
65
  _rawProps.class
66
66
  ],
67
- style: _fnSignal(_hf0$B, [
67
+ style: _fnSignal(_hf0$C, [
68
68
  _rawProps
69
69
  ]),
70
70
  ..._getVarProps(props)
@@ -76,7 +76,7 @@ function useBindableSignal({ signal, defaultValue }) {
76
76
  const internal = useSignal(defaultValue);
77
77
  return signal ?? internal;
78
78
  }
79
- const _hf0$A = (p0, p1) => p0.selectedValue.value === p1.value;
79
+ const _hf0$B = (p0, p1) => p0.selectedValue.value === p1.value;
80
80
  const ElmTabsContext = createContextId("elmethis.tabs");
81
81
  const ElmTabs = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
82
82
  const rest = _restProps(props, [
@@ -152,7 +152,7 @@ const ElmTabPanel = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((pro
152
152
  ..._getVarProps(rest)
153
153
  }, _getConstProps(rest), /* @__PURE__ */ _jsxSorted(ElmCollapse, null, {
154
154
  direction: "row",
155
- isOpen: _fnSignal(_hf0$A, [
155
+ isOpen: _fnSignal(_hf0$B, [
156
156
  ctx,
157
157
  props
158
158
  ]),
@@ -271,8 +271,8 @@ const styles$O = {
271
271
  const styles$N = {
272
272
  "elm-inline-icon": "_elm-inline-icon_1qs0i_1"
273
273
  };
274
- const _hf0$z = (p0) => p0.width ?? p0.size ?? 16;
275
- const _hf1$j = (p0) => p0.height ?? p0.size ?? 16;
274
+ const _hf0$A = (p0) => p0.width ?? p0.size ?? 16;
275
+ const _hf1$k = (p0) => p0.height ?? p0.size ?? 16;
276
276
  const ElmInlineIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
277
277
  const props = _restProps(_rawProps, [
278
278
  "class",
@@ -290,18 +290,18 @@ const ElmInlineIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_
290
290
  ..._getVarProps(props)
291
291
  }, _getConstProps(props), /* @__PURE__ */ _jsxSorted("img", {
292
292
  alt: _wrapProp(_rawProps, "alt"),
293
- height: _fnSignal(_hf1$j, [
293
+ height: _fnSignal(_hf1$k, [
294
294
  _rawProps
295
295
  ]),
296
296
  src: _wrapProp(_rawProps, "src"),
297
- width: _fnSignal(_hf0$z, [
297
+ width: _fnSignal(_hf0$A, [
298
298
  _rawProps
299
299
  ])
300
300
  }, {
301
301
  class: styles$N["elm-inline-icon"]
302
302
  }, null, 3, null), 0, "D4_0");
303
303
  }, "ElmInlineIcon_component_9LkENpSGozA"));
304
- const _hf0$y = (p0) => ({
304
+ const _hf0$z = (p0) => ({
305
305
  ...p0.style,
306
306
  "--elmethis-scoped-color": p0.color,
307
307
  "--elmethis-scoped-font-size": p0.size ?? "1em",
@@ -364,7 +364,7 @@ const ElmInlineText = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_
364
364
  textStyles.text,
365
365
  _rawProps.class
366
366
  ],
367
- style: _fnSignal(_hf0$y, [
367
+ style: _fnSignal(_hf0$z, [
368
368
  _rawProps
369
369
  ]),
370
370
  ..._getVarProps(rest)
@@ -373,7 +373,7 @@ const ElmInlineText = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_
373
373
  const styles$M = {
374
374
  "elm-paragraph": "_elm-paragraph_rbsk5_1"
375
375
  };
376
- const _hf0$x = (p0) => ({
376
+ const _hf0$y = (p0) => ({
377
377
  ...p0.style,
378
378
  "--elmethis-scoped-color": p0.color,
379
379
  "--elmethis-scoped-background-color": p0.backgroundColor
@@ -391,7 +391,7 @@ const ElmParagraph = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_r
391
391
  textStyles.text,
392
392
  _rawProps.class
393
393
  ],
394
- style: _fnSignal(_hf0$x, [
394
+ style: _fnSignal(_hf0$y, [
395
395
  _rawProps
396
396
  ]),
397
397
  ..._getVarProps(props)
@@ -511,8 +511,8 @@ function firstChildMargin(index) {
511
511
  marginBlockStart: 0
512
512
  } : void 0;
513
513
  }
514
- const _hf0$w = (p0) => p0.props.min ?? 0;
515
- const _hf1$i = (p0) => p0.props.max;
514
+ const _hf0$x = (p0) => p0.props.min ?? 0;
515
+ const _hf1$j = (p0) => p0.props.max;
516
516
  const textFieldInputType = {
517
517
  shortText: "text",
518
518
  number: "number",
@@ -669,10 +669,10 @@ const basicCatalog = new CatalogRenderer([
669
669
  defineRenderer(SliderApi, (_rawProps) => {
670
670
  const value = typeof _rawProps.props.value === "number" ? _rawProps.props.value : Number(_rawProps.ctx.dataContext.resolveDynamicValue(_rawProps.props.value) ?? 0);
671
671
  return /* @__PURE__ */ _jsxSorted("input", {
672
- max: _fnSignal(_hf1$i, [
672
+ max: _fnSignal(_hf1$j, [
673
673
  _rawProps
674
674
  ]),
675
- min: _fnSignal(_hf0$w, [
675
+ min: _fnSignal(_hf0$x, [
676
676
  _rawProps
677
677
  ]),
678
678
  "q-e:change": /* @__PURE__ */ inlinedQrl((_e, el, _rawProps2) => _rawProps2.setBinding$("value", Number(el.value)), "basicCatalog_defineRenderer_input_q_e_change_U0Dwvjz0O9o"),
@@ -1168,7 +1168,7 @@ const ElmA2ui = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props)
1168
1168
  const styles$K = {
1169
1169
  "elm-katex": "_elm-katex_189xe_1"
1170
1170
  };
1171
- const _hf0$v = (p0) => p0.value ?? "";
1171
+ const _hf0$w = (p0) => p0.value ?? "";
1172
1172
  const ElmKatex = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
1173
1173
  const rest = _restProps(props, [
1174
1174
  "class",
@@ -1190,7 +1190,7 @@ const ElmKatex = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props)
1190
1190
  props.block ? styles$K["elm-katex"] : void 0,
1191
1191
  props.class
1192
1192
  ],
1193
- dangerouslySetInnerHTML: _fnSignal(_hf0$v, [
1193
+ dangerouslySetInnerHTML: _fnSignal(_hf0$w, [
1194
1194
  html
1195
1195
  ]),
1196
1196
  ..._getVarProps(rest)
@@ -1207,8 +1207,8 @@ const styles$J = {
1207
1207
  divider: divider$1,
1208
1208
  code
1209
1209
  };
1210
- const _hf0$u = (p0) => p0.icon.viewBox;
1211
- const _hf1$h = (p0) => p0.size ?? 24;
1210
+ const _hf0$v = (p0) => p0.icon.viewBox;
1211
+ const _hf1$i = (p0) => p0.size ?? 24;
1212
1212
  const scopeId = (value, key2, suffix) => key2 === "id" ? `${value}-${suffix}` : value.replace(/url\(#([^)]+)\)/g, `url(#$1-${suffix})`);
1213
1213
  const renderNode = (node, suffix, key2) => {
1214
1214
  const attrs = {};
@@ -1227,13 +1227,13 @@ const LanguageGlyph = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_
1227
1227
  const suffix = useId();
1228
1228
  return /* @__PURE__ */ _jsxSplit("svg", {
1229
1229
  xmlns: "http://www.w3.org/2000/svg",
1230
- viewBox: _fnSignal(_hf0$u, [
1230
+ viewBox: _fnSignal(_hf0$v, [
1231
1231
  _rawProps
1232
1232
  ]),
1233
- width: _fnSignal(_hf1$h, [
1233
+ width: _fnSignal(_hf1$i, [
1234
1234
  _rawProps
1235
1235
  ]),
1236
- height: _fnSignal(_hf1$h, [
1236
+ height: _fnSignal(_hf1$i, [
1237
1237
  _rawProps
1238
1238
  ]),
1239
1239
  class: _wrapProp(_rawProps, "class"),
@@ -1244,13 +1244,13 @@ const LanguageGlyph = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_
1244
1244
  const styles$I = {
1245
1245
  "elm-mdi-icon": "_elm-mdi-icon_ihskx_1"
1246
1246
  };
1247
- const _hf0$t = (p0) => ({
1247
+ const _hf0$u = (p0) => ({
1248
1248
  "--elmethis-scoped-color": p0.lightColor ?? p0.color ?? "currentColor",
1249
1249
  "--dark-color": p0.darkColor ?? p0.color ?? "currentColor",
1250
1250
  ...p0.style
1251
1251
  });
1252
- const _hf1$g = (p0) => p0.size ?? "1em";
1253
- const _hf2$b = (p0) => p0.color ?? "currentColor";
1252
+ const _hf1$h = (p0) => p0.size ?? "1em";
1253
+ const _hf2$c = (p0) => p0.color ?? "currentColor";
1254
1254
  const ElmMdiIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
1255
1255
  const props = _restProps(_rawProps, [
1256
1256
  "class",
@@ -1266,17 +1266,17 @@ const ElmMdiIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_raw
1266
1266
  styles$I["elm-mdi-icon"],
1267
1267
  _rawProps.class
1268
1268
  ],
1269
- style: _fnSignal(_hf0$t, [
1269
+ style: _fnSignal(_hf0$u, [
1270
1270
  _rawProps
1271
1271
  ]),
1272
- width: _fnSignal(_hf1$g, [
1272
+ width: _fnSignal(_hf1$h, [
1273
1273
  _rawProps
1274
1274
  ]),
1275
- height: _fnSignal(_hf1$g, [
1275
+ height: _fnSignal(_hf1$h, [
1276
1276
  _rawProps
1277
1277
  ]),
1278
1278
  viewBox: "0 0 24 24",
1279
- fill: _fnSignal(_hf2$b, [
1279
+ fill: _fnSignal(_hf2$c, [
1280
1280
  _rawProps
1281
1281
  ]),
1282
1282
  xmlns: "http://www.w3.org/2000/svg",
@@ -1287,7 +1287,7 @@ const ElmMdiIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_raw
1287
1287
  d: _wrapProp(_rawProps, "d")
1288
1288
  }, null, null, 3, null), 0, "IA_0");
1289
1289
  }, "ElmMdiIcon_component_AUxPCIu3tI0"));
1290
- const _hf0$s = (p0) => p0.size ?? 24;
1290
+ const _hf0$t = (p0) => p0.size ?? 24;
1291
1291
  const ElmLanguageIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
1292
1292
  const normalized = normalizeLanguage(_rawProps.language);
1293
1293
  if (normalized === "file") {
@@ -1300,7 +1300,7 @@ const ElmLanguageIcon = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl(
1300
1300
  return /* @__PURE__ */ _jsxSorted(LanguageGlyph, {
1301
1301
  icon: languageIcons[normalized]
1302
1302
  }, {
1303
- size: _fnSignal(_hf0$s, [
1303
+ size: _fnSignal(_hf0$t, [
1304
1304
  _rawProps
1305
1305
  ]),
1306
1306
  class: _wrapProp(_rawProps, "class"),
@@ -1419,8 +1419,8 @@ const useClipboard = (options) => {
1419
1419
  copy
1420
1420
  };
1421
1421
  };
1422
- const _hf0$r = (p0) => p0.language ?? "txt";
1423
- const _hf1$f = (p0) => p0.caption || (p0.language ?? "txt");
1422
+ const _hf0$s = (p0) => p0.language ?? "txt";
1423
+ const _hf1$g = (p0) => p0.caption || (p0.language ?? "txt");
1424
1424
  const ElmCodeBlock = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
1425
1425
  const props = _restProps(_rawProps, [
1426
1426
  "class",
@@ -1441,14 +1441,14 @@ const ElmCodeBlock = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_r
1441
1441
  /* @__PURE__ */ _jsxSorted("span", null, {
1442
1442
  class: styles$J["language-icon"]
1443
1443
  }, /* @__PURE__ */ _jsxSorted(ElmLanguageIcon, null, {
1444
- language: _fnSignal(_hf0$r, [
1444
+ language: _fnSignal(_hf0$s, [
1445
1445
  _rawProps
1446
1446
  ])
1447
1447
  }, null, 3, "sK_0"), 1, null),
1448
1448
  /* @__PURE__ */ _jsxSorted("span", null, {
1449
1449
  class: styles$J.caption
1450
1450
  }, /* @__PURE__ */ _jsxSorted(ElmInlineText, null, null, [
1451
- _fnSignal(_hf1$f, [
1451
+ _fnSignal(_hf1$g, [
1452
1452
  _rawProps
1453
1453
  ]),
1454
1454
  /* @__PURE__ */ _jsxSorted(Slot, null, null, null, 3, "sK_1")
@@ -1463,7 +1463,7 @@ const ElmCodeBlock = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_r
1463
1463
  class: styles$J.code
1464
1464
  }, /* @__PURE__ */ _jsxSorted(ElmShikiHighlighter, null, {
1465
1465
  code: _wrapProp(_rawProps, "code"),
1466
- language: _fnSignal(_hf0$r, [
1466
+ language: _fnSignal(_hf0$s, [
1467
1467
  _rawProps
1468
1468
  ])
1469
1469
  }, null, 3, "sK_4"), 1, null)
@@ -1515,13 +1515,13 @@ const styles$F = {
1515
1515
  "error-notice": "_error-notice_p7xym_421",
1516
1516
  "error-message": "_error-message_p7xym_431"
1517
1517
  };
1518
- const _hf0$q = (p0, p1) => ({
1518
+ const _hf0$r = (p0, p1) => ({
1519
1519
  "--elmethis-scoped-progress": p1.value,
1520
1520
  "--elmethis-scoped-hover": p0.value ?? 0
1521
1521
  });
1522
- const _hf1$e = (p0) => p0.errorMessage ?? "This audio couldn't be loaded.";
1523
- const _hf2$a = (p0) => p0.value ? "Pause" : "Play";
1524
- const _hf3$9 = (p0) => p0.value ? "Unmute" : "Mute";
1522
+ const _hf1$f = (p0) => p0.errorMessage ?? "This audio couldn't be loaded.";
1523
+ const _hf2$b = (p0) => p0.value ? "Pause" : "Play";
1524
+ const _hf3$a = (p0) => p0.value ? "Unmute" : "Mute";
1525
1525
  const _hf4$5 = (p0, p1) => p0.value ? 0 : p1.value;
1526
1526
  const _hf5$3 = (p0, p1) => ({
1527
1527
  "--elmethis-scoped-volume": p0.value ? 0 : p1.value
@@ -1680,7 +1680,7 @@ const ElmAudioPlayer = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1680
1680
  hasError.value && styles$F.errored,
1681
1681
  props.class
1682
1682
  ],
1683
- style: _fnSignal(_hf0$q, [
1683
+ style: _fnSignal(_hf0$r, [
1684
1684
  hoverRatio,
1685
1685
  progress
1686
1686
  ]),
@@ -1785,7 +1785,7 @@ const ElmAudioPlayer = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1785
1785
  }, null, 3, "CY_2"),
1786
1786
  /* @__PURE__ */ _jsxSorted("span", null, {
1787
1787
  class: styles$F["error-message"]
1788
- }, _fnSignal(_hf1$e, [
1788
+ }, _fnSignal(_hf1$f, [
1789
1789
  props
1790
1790
  ]), 1, null)
1791
1791
  ], 1, "CY_3") : /* @__PURE__ */ _jsxSorted(Fragment, null, null, [
@@ -1883,7 +1883,7 @@ const ElmAudioPlayer = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1883
1883
  type: "button",
1884
1884
  class: styles$F["play-button"],
1885
1885
  "q-e:click": togglePlay,
1886
- "aria-label": _fnSignal(_hf2$a, [
1886
+ "aria-label": _fnSignal(_hf2$b, [
1887
1887
  isPlaying
1888
1888
  ]),
1889
1889
  "aria-pressed": _wrapProp(isPlaying)
@@ -1915,7 +1915,7 @@ const ElmAudioPlayer = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((
1915
1915
  type: "button",
1916
1916
  class: styles$F["icon-button"],
1917
1917
  "q-e:click": toggleMute,
1918
- "aria-label": _fnSignal(_hf3$9, [
1918
+ "aria-label": _fnSignal(_hf3$a, [
1919
1919
  isMuted
1920
1920
  ]),
1921
1921
  "aria-pressed": _wrapProp(isMuted)
@@ -2088,10 +2088,10 @@ const useModal = (options = {}) => {
2088
2088
  toggle
2089
2089
  };
2090
2090
  };
2091
- const _hf0$p = (p0) => p0.alt ?? p0.caption ?? "Image";
2092
- const _hf1$d = (p0, p1) => p0 ? void 0 : p1.srcset;
2093
- const _hf2$9 = (p0, p1) => p0 ? void 0 : p1.sizes;
2094
- const _hf3$8 = (p0) => ({
2091
+ const _hf0$q = (p0) => p0.alt ?? p0.caption ?? "Image";
2092
+ const _hf1$e = (p0, p1) => p0 ? void 0 : p1.srcset;
2093
+ const _hf2$a = (p0, p1) => p0 ? void 0 : p1.sizes;
2094
+ const _hf3$9 = (p0) => ({
2095
2095
  "--elmethis-scoped-opacity": p0.value ? 1 : 0.01
2096
2096
  });
2097
2097
  const _hf4$4 = (p0) => ({
@@ -2144,7 +2144,7 @@ const ElmBlockImage = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((p
2144
2144
  isLoading
2145
2145
  ]));
2146
2146
  const ImageComponent = (isModal) => /* @__PURE__ */ _jsxSorted("img", {
2147
- alt: _fnSignal(_hf0$p, [
2147
+ alt: _fnSignal(_hf0$q, [
2148
2148
  props
2149
2149
  ]),
2150
2150
  fetchPriority: isModal ? "low" : "auto",
@@ -2154,12 +2154,12 @@ const ElmBlockImage = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((p
2154
2154
  // Only the inline image owns imgRef; the modal image must not steal it
2155
2155
  // (ElmModal keeps its slot mounted, so both can coexist in the DOM).
2156
2156
  ref: isModal ? void 0 : imgRef,
2157
- sizes: _fnSignal(_hf2$9, [
2157
+ sizes: _fnSignal(_hf2$a, [
2158
2158
  isModal,
2159
2159
  props
2160
2160
  ]),
2161
2161
  src: _wrapProp(props, "src"),
2162
- srcset: _fnSignal(_hf1$d, [
2162
+ srcset: _fnSignal(_hf1$e, [
2163
2163
  isModal,
2164
2164
  props
2165
2165
  ]),
@@ -2182,7 +2182,7 @@ const ElmBlockImage = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((p
2182
2182
  }, _getConstProps(rest), [
2183
2183
  /* @__PURE__ */ _jsxSorted("div", null, {
2184
2184
  class: styles$E["image-container"],
2185
- style: _fnSignal(_hf3$8, [
2185
+ style: _fnSignal(_hf3$9, [
2186
2186
  isLoading
2187
2187
  ]),
2188
2188
  "q-e:click": handleOpenModal
@@ -2286,7 +2286,7 @@ const styles$A = {
2286
2286
  description,
2287
2287
  link
2288
2288
  };
2289
- const _hf0$o = (p0, p1, p2) => p2.value || p0.image == null ? p1 : {};
2289
+ const _hf0$p = (p0, p1, p2) => p2.value || p0.image == null ? p1 : {};
2290
2290
  const ElmBookmark = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawProps) => {
2291
2291
  const props = _restProps(_rawProps, [
2292
2292
  "class",
@@ -2322,7 +2322,7 @@ const ElmBookmark = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_ra
2322
2322
  }, [
2323
2323
  /* @__PURE__ */ _jsxSorted("img", {
2324
2324
  src: _wrapProp(_rawProps, "image"),
2325
- style: _fnSignal(_hf0$o, [
2325
+ style: _fnSignal(_hf0$p, [
2326
2326
  _rawProps,
2327
2327
  hiddenStyle,
2328
2328
  isError
@@ -2379,8 +2379,8 @@ const styles$z = {
2379
2379
  border,
2380
2380
  content: content$1
2381
2381
  };
2382
- const _hf0$n = (p0) => p0.monochrome ? "var(--elmethis-color-neutral-weak)" : "var(--elmethis-color-primary)";
2383
- const _hf1$c = (p0, p1) => p1.monochrome ? "var(--elmethis-color-neutral-weak)" : p0.value ? "var(--elmethis-color-accent-error)" : "var(--elmethis-color-primary)";
2382
+ const _hf0$o = (p0) => p0.monochrome ? "var(--elmethis-color-neutral-weak)" : "var(--elmethis-color-primary)";
2383
+ const _hf1$d = (p0, p1) => p1.monochrome ? "var(--elmethis-color-neutral-weak)" : p0.value ? "var(--elmethis-color-accent-error)" : "var(--elmethis-color-primary)";
2384
2384
  const ElmToggle = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
2385
2385
  const rest = _restProps(props, [
2386
2386
  "class",
@@ -2428,7 +2428,7 @@ const ElmToggle = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props
2428
2428
  ]
2429
2429
  }, null, /* @__PURE__ */ _jsxSorted(ElmMdiIcon, null, {
2430
2430
  d: mdiChevronRight,
2431
- color: _fnSignal(_hf0$n, [
2431
+ color: _fnSignal(_hf0$o, [
2432
2432
  props
2433
2433
  ]),
2434
2434
  size: "1rem"
@@ -2450,7 +2450,7 @@ const ElmToggle = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props
2450
2450
  }, null, /* @__PURE__ */ _jsxSorted(ElmMdiIcon, null, {
2451
2451
  d: mdiPlus,
2452
2452
  size: "1rem",
2453
- color: _fnSignal(_hf1$c, [
2453
+ color: _fnSignal(_hf1$d, [
2454
2454
  isOpen,
2455
2455
  props
2456
2456
  ])
@@ -2530,7 +2530,7 @@ const styles$x = {
2530
2530
  warning,
2531
2531
  caution
2532
2532
  };
2533
- const _hf0$m = (p0) => p0.type ?? "note";
2533
+ const _hf0$n = (p0) => p0.type ?? "note";
2534
2534
  const ICON_MAP = Object.freeze({
2535
2535
  note: mdiInformation,
2536
2536
  tip: mdiLightbulbOn,
@@ -2562,7 +2562,7 @@ const ElmCallout = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_raw
2562
2562
  class: styles$x.icon,
2563
2563
  size: "1.25rem"
2564
2564
  }, null, 3, "qp_0"),
2565
- /* @__PURE__ */ _jsxSorted("span", null, null, _fnSignal(_hf0$m, [
2565
+ /* @__PURE__ */ _jsxSorted("span", null, null, _fnSignal(_hf0$n, [
2566
2566
  _rawProps
2567
2567
  ]), 1, null)
2568
2568
  ], 1, null),
@@ -2623,16 +2623,23 @@ const ElmList = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((_rawPro
2623
2623
  }, _getConstProps(props), /* @__PURE__ */ _jsxSorted(Slot, null, null, null, 3, "jF_2"), 0, "jF_3");
2624
2624
  }
2625
2625
  }, "ElmList_component_aFEzPziW6Gs"));
2626
- const caption = "_caption_14qfo_8";
2627
- const spacing = "_spacing_14qfo_25";
2626
+ const caption = "_caption_wl7v3_68";
2627
+ const spacing = "_spacing_wl7v3_85";
2628
2628
  const styles$u = {
2629
- "elm-table": "_elm-table_14qfo_1",
2629
+ "elm-table-frame": "_elm-table-frame_wl7v3_3",
2630
+ "elm-table-scroll": "_elm-table-scroll_wl7v3_50",
2631
+ "elm-table": "_elm-table_wl7v3_3",
2630
2632
  caption,
2631
- "caption-inner": "_caption-inner_14qfo_18",
2632
- spacing
2633
+ "caption-inner": "_caption-inner_wl7v3_78",
2634
+ spacing,
2635
+ "sticky-row-header": "_sticky-row-header_wl7v3_96"
2633
2636
  };
2634
2637
  const HasRowHeaderContext = createContextId("elm.table.HasRowHeader");
2635
2638
  const TableSectionContext = createContextId("elm.table.Section");
2639
+ const _hf0$m = (p0, p1) => p1.value && !p0.value ? "" : void 0;
2640
+ const _hf1$c = (p0) => p0.value ? 0 : void 0;
2641
+ const _hf2$9 = (p0, p1) => p0.value && p1.caption != null ? "region" : void 0;
2642
+ const _hf3$8 = (p0, p1) => p0.value && p1.caption != null ? p1.caption : void 0;
2636
2643
  const ElmTable = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props) => {
2637
2644
  const rest = _restProps(props, [
2638
2645
  "class",
@@ -2648,10 +2655,68 @@ const ElmTable = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props)
2648
2655
  props
2649
2656
  ]));
2650
2657
  useContextProvider(HasRowHeaderContext, hasRowHeader);
2651
- return /* @__PURE__ */ _jsxSplit("table", {
2658
+ const scrollRef = useSignal();
2659
+ const canScroll = useSignal(false);
2660
+ const atStart = useSignal(true);
2661
+ const atEnd = useSignal(true);
2662
+ useVisibleTaskQrl(/* @__PURE__ */ inlinedQrl(({ cleanup }) => {
2663
+ const atEnd2 = _captures[0], atStart2 = _captures[1], canScroll2 = _captures[2], scrollRef2 = _captures[3];
2664
+ const el = scrollRef2.value;
2665
+ if (el == null) return;
2666
+ const measure = () => {
2667
+ const max = el.scrollWidth - el.clientWidth;
2668
+ canScroll2.value = max > 1;
2669
+ atStart2.value = el.scrollLeft <= 1;
2670
+ atEnd2.value = el.scrollLeft >= max - 1;
2671
+ };
2672
+ measure();
2673
+ el.addEventListener("scroll", measure, {
2674
+ passive: true
2675
+ });
2676
+ cleanup(() => el.removeEventListener("scroll", measure));
2677
+ if (typeof ResizeObserver !== "undefined") {
2678
+ const observer = new ResizeObserver(measure);
2679
+ observer.observe(el);
2680
+ cleanup(() => observer.disconnect());
2681
+ }
2682
+ }, "ElmTable_component_useVisibleTask_93J4bNO5KnI", [
2683
+ atEnd,
2684
+ atStart,
2685
+ canScroll,
2686
+ scrollRef
2687
+ ]), {
2688
+ strategy: "document-ready"
2689
+ });
2690
+ return /* @__PURE__ */ _jsxSorted("div", null, {
2691
+ class: styles$u["elm-table-frame"],
2692
+ "data-overflow-start": _fnSignal(_hf0$m, [
2693
+ atStart,
2694
+ canScroll
2695
+ ]),
2696
+ "data-overflow-end": _fnSignal(_hf0$m, [
2697
+ atEnd,
2698
+ canScroll
2699
+ ])
2700
+ }, /* @__PURE__ */ _jsxSorted("div", {
2701
+ "aria-label": _fnSignal(_hf3$8, [
2702
+ canScroll,
2703
+ props
2704
+ ]),
2705
+ ref: scrollRef,
2706
+ role: _fnSignal(_hf2$9, [
2707
+ canScroll,
2708
+ props
2709
+ ])
2710
+ }, {
2711
+ class: styles$u["elm-table-scroll"],
2712
+ tabIndex: _fnSignal(_hf1$c, [
2713
+ canScroll
2714
+ ])
2715
+ }, /* @__PURE__ */ _jsxSplit("table", {
2652
2716
  class: [
2653
2717
  styles$u["elm-table"],
2654
2718
  textStyles.text,
2719
+ hasRowHeader.value && styles$u["sticky-row-header"],
2655
2720
  props.class
2656
2721
  ],
2657
2722
  ..._getVarProps(rest)
@@ -2670,7 +2735,7 @@ const ElmTable = /* @__PURE__ */ componentQrl(/* @__PURE__ */ inlinedQrl((props)
2670
2735
  }, null, 3, null)
2671
2736
  ], 1, null), 1, "Yw_1"),
2672
2737
  /* @__PURE__ */ _jsxSorted(Slot, null, null, null, 3, "Yw_2")
2673
- ], 0, "Yw_3");
2738
+ ], 0, null), 1, null), 1, "Yw_3");
2674
2739
  }, "ElmTable_component_UT2AChu46oY"));
2675
2740
  const styles$t = {
2676
2741
  "elm-table-header": "_elm-table-header_jhft7_1"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "1",
3
- "manifestHash": "w0o7qg",
3
+ "manifestHash": "6qicfm",
4
4
  "options": {
5
5
  "target": "lib",
6
6
  "buildMode": "development",
@@ -30,8 +30,8 @@
30
30
  "mapping": {},
31
31
  "bundles": {
32
32
  "../index.qwik.cjs": {
33
- "size": 489408,
34
- "total": 489408,
33
+ "size": 491664,
34
+ "total": 491664,
35
35
  "origins": [
36
36
  "src/components/a2ui/catalog/basic-catalog.tsx",
37
37
  "src/components/a2ui/catalog/block-catalog.tsx",
@@ -187,7 +187,7 @@
187
187
  "assets": {
188
188
  "style.css": {
189
189
  "name": "style.css.css",
190
- "size": 79234
190
+ "size": 81961
191
191
  },
192
192
  "assets/bundle-graph.BqrDAOEV.json": {
193
193
  "name": "bundle-graph.json",
package/lib/style.css CHANGED
@@ -1,4 +1,4 @@
1
- ._elm-tabs_1fco0_1 {
1
+ ._elm-tabs_fka8s_1 {
2
2
  margin-block-start: var(--elmethis-margin-block-start);
3
3
  display: flex;
4
4
  flex-direction: column;
@@ -11,15 +11,20 @@
11
11
  background-color: var(--elmethis-color-surface-raised);
12
12
  }
13
13
 
14
- ._tab-container_1fco0_14 {
14
+ ._tab-container_fka8s_14 {
15
15
  display: flex;
16
16
  flex-direction: row;
17
17
  border-bottom: solid 1px oklch(from var(--elmethis-color-primary) l c h / 30%);
18
+ overflow-x: auto;
19
+ scrollbar-width: thin;
20
+ scrollbar-color: var(--elmethis-color-neutral-weak)
21
+ var(--elmethis-color-surface-base);
18
22
  }
19
23
 
20
- ._tab_1fco0_14 {
24
+ ._tab_fka8s_14 {
21
25
  box-sizing: border-box;
22
26
  min-width: 6rem;
27
+ flex-shrink: 0;
23
28
  padding: 1rem;
24
29
  margin: 0;
25
30
  cursor: pointer;
@@ -34,7 +39,7 @@
34
39
  color: var(--elmethis-scoped-color, var(--elmethis-color-neutral));
35
40
  user-select: none;
36
41
 
37
- &._active_1fco0_37 {
42
+ &._active_fka8s_42 {
38
43
  background-color: oklch(from var(--elmethis-color-primary) l c h / 5%);
39
44
  border-bottom-color: var(--elmethis-color-primary);
40
45
  cursor: default;
@@ -45,12 +50,12 @@
45
50
  }
46
51
  }
47
52
 
48
- ._tab-content_1fco0_48 {
53
+ ._tab-content_fka8s_53 {
49
54
  width: 100%;
50
55
  margin: 0;
51
56
  }
52
57
 
53
- ._tab-content-inner_1fco0_53 {
58
+ ._tab-content-inner_fka8s_58 {
54
59
  box-sizing: border-box;
55
60
  padding: 1em;
56
61
  }
@@ -1754,14 +1759,74 @@
1754
1759
  list-style-type: none;
1755
1760
  }
1756
1761
  }
1757
- ._elm-table_14qfo_1 {
1762
+ /* Non-scrolling frame: owns the outer spacing and pins the edge shadows so they
1763
+ stay glued to the viewport edges while the table scrolls underneath. */
1764
+ ._elm-table-frame_wl7v3_3 {
1765
+ position: relative;
1766
+ width: 100%;
1758
1767
  margin-block-start: var(--elmethis-margin-block-start);
1768
+ }
1769
+
1770
+ ._elm-table-frame_wl7v3_3::before,
1771
+ ._elm-table-frame_wl7v3_3::after {
1772
+ content: "";
1773
+ position: absolute;
1774
+ inset-block: 0;
1775
+ width: 1.5rem;
1776
+ z-index: 2;
1777
+ pointer-events: none;
1778
+ opacity: 0;
1779
+ transition: opacity 200ms;
1780
+ }
1781
+
1782
+ ._elm-table-frame_wl7v3_3::before {
1783
+ inset-inline-start: 0;
1784
+ background: linear-gradient(
1785
+ to right,
1786
+ oklch(from var(--elmethis-color-surface-sunken) l c h / 50%),
1787
+ transparent
1788
+ );
1789
+ }
1790
+
1791
+ ._elm-table-frame_wl7v3_3::after {
1792
+ inset-inline-end: 0;
1793
+ background: linear-gradient(
1794
+ to left,
1795
+ oklch(from var(--elmethis-color-surface-sunken) l c h / 50%),
1796
+ transparent
1797
+ );
1798
+ }
1799
+
1800
+ /* Shadows are revealed only when there is content to scroll toward, set from the
1801
+ scroll position in elm-table.tsx. */
1802
+ ._elm-table-frame_wl7v3_3[data-overflow-start]::before {
1803
+ opacity: 1;
1804
+ }
1805
+
1806
+ ._elm-table-frame_wl7v3_3[data-overflow-end]::after {
1807
+ opacity: 1;
1808
+ }
1809
+
1810
+ /* The actual scroller. Mirrors the house pattern from elm-code-block. */
1811
+ ._elm-table-scroll_wl7v3_50 {
1812
+ overflow-x: auto;
1813
+ scrollbar-width: thin;
1814
+ scrollbar-color: var(--elmethis-color-primary-weak)
1815
+ var(--elmethis-color-surface-base);
1816
+ }
1817
+
1818
+ ._elm-table-scroll_wl7v3_50:focus-visible {
1819
+ outline: 2px solid var(--elmethis-color-primary);
1820
+ outline-offset: 2px;
1821
+ }
1822
+
1823
+ ._elm-table_wl7v3_3 {
1759
1824
  border-collapse: collapse;
1760
1825
  border-spacing: 0;
1761
1826
  box-shadow: 0 0 0.125rem rgb(0 0 0 / 20%);
1762
1827
  }
1763
1828
 
1764
- ._caption_14qfo_8 {
1829
+ ._caption_wl7v3_68 {
1765
1830
  position: relative;
1766
1831
  width: 100%;
1767
1832
  display: inline-flex;
@@ -1771,18 +1836,46 @@
1771
1836
  margin-block-end: 1rem;
1772
1837
  }
1773
1838
 
1774
- ._caption-inner_14qfo_18 {
1839
+ ._caption-inner_wl7v3_78 {
1775
1840
  display: inline-flex;
1776
1841
  justify-content: center;
1777
1842
  align-items: center;
1778
1843
  gap: 0.25rem;
1779
1844
  }
1780
1845
 
1781
- ._spacing_14qfo_25 {
1846
+ ._spacing_wl7v3_85 {
1782
1847
  flex-grow: 1;
1783
1848
  height: 1px;
1784
1849
  background-color: rgb(128 128 128 / 20%);
1785
1850
  }
1851
+
1852
+ /* Sticky label column. When the first column holds row headers, pin it so the
1853
+ labels stay visible while the data columns scroll. The structural
1854
+ `:first-child` selector targets the lead cell of every row regardless of
1855
+ whether the caller threaded a `columnIndex` prop, and an opaque background
1856
+ (matched to each row's stripe) keeps scrolled cells from bleeding through. */
1857
+ ._sticky-row-header_wl7v3_96 :where(thead, tbody) tr > :first-child {
1858
+ position: sticky;
1859
+ inset-inline-start: 0;
1860
+ z-index: 1;
1861
+ box-shadow: 1px 0 0 oklch(from var(--elmethis-color-primary-weak) l c h / 50%);
1862
+ }
1863
+
1864
+ ._sticky-row-header_wl7v3_96 thead tr > :first-child {
1865
+ background-color: var(--elmethis-color-surface-sunken);
1866
+ }
1867
+
1868
+ ._sticky-row-header_wl7v3_96 tbody tr:nth-child(odd) > :first-child {
1869
+ background-color: var(--elmethis-color-surface-raised);
1870
+ }
1871
+
1872
+ ._sticky-row-header_wl7v3_96 tbody tr:nth-child(even) > :first-child {
1873
+ background-color: var(--elmethis-color-surface-base);
1874
+ }
1875
+
1876
+ ._sticky-row-header_wl7v3_96 tbody tr:hover > :first-child {
1877
+ background-color: var(--elmethis-color-surface-sunken);
1878
+ }
1786
1879
  ._elm-table-header_jhft7_1 {
1787
1880
  text-align: left;
1788
1881
  transition:
@@ -6,6 +6,7 @@ type Story = StoryObj<ElmTabsProps>;
6
6
  export declare const Primary: Story;
7
7
  export declare const DefaultSelected: Story;
8
8
  export declare const Controlled: Story;
9
+ export declare const Scrollable: Story;
9
10
  export declare const UncontrolledClickTest: Story;
10
11
  export declare const DefaultValueTest: Story;
11
12
  export declare const ControlledSignalTest: Story;
@@ -3,4 +3,11 @@ import { type ElmTableProps } from "./elm-table";
3
3
  declare const meta: Meta<ElmTableProps>;
4
4
  export default meta;
5
5
  type Story = StoryObj<ElmTableProps>;
6
+ /**
7
+ * Wide table inside a narrow (mobile-sized) frame. The table scrolls
8
+ * horizontally, edge shadows hint at off-screen columns, and the row-header
9
+ * column stays pinned via `hasRowHeader`. The wrapper becomes a focusable,
10
+ * labeled scroll region while it overflows.
11
+ */
12
+ export declare const ScrollableWithRowHeader: Story;
6
13
  export declare const Primary: Story;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elmethis/qwik",
3
- "version": "1.0.0-alpha.30",
3
+ "version": "1.0.0-alpha.31",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },