@lostgradient/cinder 0.11.0 → 0.12.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 (107) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/components.json +3 -2
  3. package/dist/components/accordion/index.js +14 -11
  4. package/dist/components/accordion-item/accordion-item.css +20 -7
  5. package/dist/components/accordion-item/accordion-item.schema.js +5 -1
  6. package/dist/components/accordion-item/accordion-item.types.d.ts +4 -0
  7. package/dist/components/accordion-item/accordion-item.variables.js +13 -2
  8. package/dist/components/accordion-item/index.js +14 -11
  9. package/dist/components/action-row/action-row.css +20 -9
  10. package/dist/components/action-row/action-row.schema.js +5 -1
  11. package/dist/components/action-row/action-row.types.d.ts +43 -0
  12. package/dist/components/action-row/action-row.variables.js +12 -2
  13. package/dist/components/chat/chat.svelte.d.ts +1 -0
  14. package/dist/components/code-block/code-block.css +15 -9
  15. package/dist/components/code-block/code-block.variables.js +8 -2
  16. package/dist/components/confirm-dialog/confirm-dialog.css +2 -0
  17. package/dist/components/confirm-dialog/confirm-dialog.schema.js +10 -1
  18. package/dist/components/confirm-dialog/confirm-dialog.types.d.ts +7 -0
  19. package/dist/components/confirm-dialog/index.js +478 -106
  20. package/dist/components/faceted-filter-bar/faceted-filter-bar.schema.js +5 -1
  21. package/dist/components/faceted-filter-bar/faceted-filter-bar.types.d.ts +2 -0
  22. package/dist/components/faceted-filter-bar/index.js +40 -31
  23. package/dist/components/navigation-bar/index.js +11 -17
  24. package/dist/components/run-step-timeline/index.js +65 -6
  25. package/dist/components/run-step-timeline/run-step-timeline.utilities.d.ts +9 -1
  26. package/dist/components/side-navigation/side-navigation.css +2 -1
  27. package/dist/components/side-navigation/side-navigation.schema.js +9 -6
  28. package/dist/components/side-navigation/side-navigation.types.d.ts +11 -0
  29. package/dist/components/side-navigation/side-navigation.variables.js +2 -2
  30. package/dist/components/stat/stat.css +16 -8
  31. package/dist/components/stat/stat.schema.js +5 -1
  32. package/dist/components/stat/stat.types.d.ts +19 -0
  33. package/dist/components/stat/stat.variables.js +11 -2
  34. package/dist/components/stat-group/stat-group.css +7 -4
  35. package/dist/components/stat-group/stat-group.schema.js +5 -1
  36. package/dist/components/stat-group/stat-group.types.d.ts +27 -0
  37. package/dist/components/stat-group/stat-group.variables.js +6 -2
  38. package/dist/index.js +365 -256
  39. package/dist/server/components/accordion/index.js +2 -2
  40. package/dist/server/components/accordion-item/index.js +2 -2
  41. package/dist/server/components/color-field/index.js +2 -2
  42. package/dist/server/components/confirm-dialog/index.js +7 -2
  43. package/dist/server/components/faceted-filter-bar/index.js +1 -1
  44. package/dist/server/components/navigation-bar/index.js +1 -1
  45. package/dist/server/components/run-step-timeline/index.js +1 -1
  46. package/dist/server/index.js +10 -10
  47. package/dist/server/{index.server-cf6pxeyg.js → index.server-0rzd71e0.js} +1 -1
  48. package/dist/server/{index.server-5tf22d6e.js → index.server-4wx0qven.js} +3 -3
  49. package/dist/server/{index.server-894t97kv.js → index.server-7yvpb6z7.js} +4 -4
  50. package/dist/server/{index.server-btgb3d56.js → index.server-d5a5ccz7.js} +18 -12
  51. package/dist/server/{index.server-z38bxms8.js → index.server-g5jgq3jp.js} +65 -6
  52. package/dist/server/{index.server-y83kqayt.js → index.server-h3nzp8g8.js} +1 -1
  53. package/dist/server/index.server-jwvxxjvc.js +50 -0
  54. package/dist/server/{index.server-39ne5cd1.js → index.server-pxq277t5.js} +32 -1
  55. package/package.json +22 -95
  56. package/src/components/accordion/accordion.examples.json +6 -0
  57. package/src/components/accordion-item/accordion-item.css +20 -7
  58. package/src/components/accordion-item/accordion-item.schema.json +4 -0
  59. package/src/components/accordion-item/accordion-item.schema.ts +4 -0
  60. package/src/components/accordion-item/accordion-item.svelte +9 -7
  61. package/src/components/accordion-item/accordion-item.types.ts +4 -0
  62. package/src/components/accordion-item/accordion-item.variables.json +12 -1
  63. package/src/components/accordion-item/accordion-item.variables.ts +12 -1
  64. package/src/components/action-row/action-row.css +20 -9
  65. package/src/components/action-row/action-row.examples.json +6 -0
  66. package/src/components/action-row/action-row.schema.json +4 -0
  67. package/src/components/action-row/action-row.schema.ts +4 -0
  68. package/src/components/action-row/action-row.types.ts +44 -0
  69. package/src/components/action-row/action-row.variables.json +11 -1
  70. package/src/components/action-row/action-row.variables.ts +11 -1
  71. package/src/components/chat/chat.examples.json +6 -0
  72. package/src/components/code-block/code-block.css +15 -9
  73. package/src/components/code-block/code-block.variables.json +7 -1
  74. package/src/components/code-block/code-block.variables.ts +7 -1
  75. package/src/components/confirm-dialog/confirm-dialog.css +2 -0
  76. package/src/components/confirm-dialog/confirm-dialog.schema.json +8 -0
  77. package/src/components/confirm-dialog/confirm-dialog.schema.ts +10 -0
  78. package/src/components/confirm-dialog/confirm-dialog.svelte +31 -3
  79. package/src/components/confirm-dialog/confirm-dialog.types.ts +7 -0
  80. package/src/components/faceted-filter-bar/faceted-filter-bar.schema.json +4 -0
  81. package/src/components/faceted-filter-bar/faceted-filter-bar.schema.ts +4 -0
  82. package/src/components/faceted-filter-bar/faceted-filter-bar.svelte +13 -11
  83. package/src/components/faceted-filter-bar/faceted-filter-bar.types.ts +2 -0
  84. package/src/components/navigation-bar/navigation-bar.svelte +2 -2
  85. package/src/components/run-step-timeline/run-step-timeline.svelte +4 -4
  86. package/src/components/run-step-timeline/run-step-timeline.utilities.ts +68 -0
  87. package/src/components/side-navigation/side-navigation.css +2 -1
  88. package/src/components/side-navigation/side-navigation.examples.json +6 -0
  89. package/src/components/side-navigation/side-navigation.schema.json +8 -5
  90. package/src/components/side-navigation/side-navigation.schema.ts +8 -5
  91. package/src/components/side-navigation/side-navigation.types.ts +12 -0
  92. package/src/components/side-navigation/side-navigation.variables.json +1 -1
  93. package/src/components/side-navigation/side-navigation.variables.ts +1 -1
  94. package/src/components/stat/stat.css +16 -8
  95. package/src/components/stat/stat.schema.json +4 -0
  96. package/src/components/stat/stat.schema.ts +4 -0
  97. package/src/components/stat/stat.types.ts +20 -0
  98. package/src/components/stat/stat.variables.json +10 -1
  99. package/src/components/stat/stat.variables.ts +10 -1
  100. package/src/components/stat-group/stat-group.css +7 -4
  101. package/src/components/stat-group/stat-group.examples.json +6 -0
  102. package/src/components/stat-group/stat-group.schema.json +4 -0
  103. package/src/components/stat-group/stat-group.schema.ts +4 -0
  104. package/src/components/stat-group/stat-group.types.ts +28 -0
  105. package/src/components/stat-group/stat-group.variables.json +5 -1
  106. package/src/components/stat-group/stat-group.variables.ts +5 -1
  107. package/dist/server/index.server-hfx487zj.js +0 -42
@@ -64,6 +64,10 @@ var schema = {
64
64
  type: "string",
65
65
  description: "Current text search query. When provided, the search field is controlled."
66
66
  },
67
+ showSearch: {
68
+ type: "boolean",
69
+ description: "Whether to render the leading search field. Defaults to `true`."
70
+ },
67
71
  searchPlaceholder: {
68
72
  type: "string",
69
73
  description: "Placeholder text shown in the leading search field."
@@ -124,4 +128,4 @@ export {
124
128
  faceted_filter_bar_schema_default as default
125
129
  };
126
130
 
127
- //# debugId=3999D147AB9F861F64756E2164756E21
131
+ //# debugId=5E8BF6E34E58E39164756E2164756E21
@@ -66,6 +66,8 @@ export type FacetedFilterBarProps = Omit<HTMLAttributes<HTMLDivElement>, 'class'
66
66
  'aria-label'?: string;
67
67
  /** Current text search query. When provided, the search field is controlled. */
68
68
  searchQuery?: string;
69
+ /** Whether to render the leading search field. Defaults to `true`. */
70
+ showSearch?: boolean;
69
71
  /** Placeholder text shown in the leading search field. */
70
72
  searchPlaceholder?: string;
71
73
  /** Accessible label for the search input. Defaults to 'Search'. */
@@ -862,6 +862,7 @@ var rest_excludes4 = new Set([
862
862
  "$$legacy",
863
863
  "aria-label",
864
864
  "searchQuery",
865
+ "showSearch",
865
866
  "searchPlaceholder",
866
867
  "searchAriaLabel",
867
868
  "facets",
@@ -881,7 +882,7 @@ var root_42 = $8.from_html(`<div><div class="cinder-faceted-filter-bar__controls
881
882
  function Faceted_filter_bar($$anchor, $$props) {
882
883
  const generatedId = $8.props_id();
883
884
  $8.push($$props, true);
884
- let ariaLabel = $8.prop($$props, "aria-label", 3, "Filters"), searchPlaceholder = $8.prop($$props, "searchPlaceholder", 3, "Search…"), searchAriaLabel = $8.prop($$props, "searchAriaLabel", 3, "Search"), facets = $8.prop($$props, "facets", 19, () => []), appliedFilters = $8.prop($$props, "appliedFilters", 19, () => []), disabled = $8.prop($$props, "disabled", 3, false), rest = $8.rest_props($$props, rest_excludes4);
885
+ let ariaLabel = $8.prop($$props, "aria-label", 3, "Filters"), showSearch = $8.prop($$props, "showSearch", 3, true), searchPlaceholder = $8.prop($$props, "searchPlaceholder", 3, "Search…"), searchAriaLabel = $8.prop($$props, "searchAriaLabel", 3, "Search"), facets = $8.prop($$props, "facets", 19, () => []), appliedFilters = $8.prop($$props, "appliedFilters", 19, () => []), disabled = $8.prop($$props, "disabled", 3, false), rest = $8.rest_props($$props, rest_excludes4);
885
886
  const searchId = $8.derived(() => `${generatedId}-search`);
886
887
  let rootElement = $8.state(undefined);
887
888
  let internalSearchQuery = $8.state("");
@@ -896,7 +897,7 @@ function Faceted_filter_bar($$anchor, $$props) {
896
897
  return value;
897
898
  return facet.options.find((option) => option.value === value)?.label ?? value;
898
899
  }
899
- const hasAppliedFilters = $8.derived(() => appliedFilters().length > 0 || $8.get(currentSearchQuery).length > 0);
900
+ const hasAppliedFilters = $8.derived(() => appliedFilters().length > 0 || showSearch() && $8.get(currentSearchQuery).length > 0);
900
901
  const totalActiveCount = $8.derived(() => appliedFilters().length);
901
902
  const summaryMessage = $8.derived(() => {
902
903
  if ($8.get(totalActiveCount) === 0)
@@ -940,31 +941,39 @@ function Faceted_filter_bar($$anchor, $$props) {
940
941
  }), [() => classNames("cinder-faceted-filter-bar", $$props.class)]);
941
942
  var div_1 = $8.child(div);
942
943
  var node = $8.child(div_1);
943
- Search_field(node, {
944
- get id() {
945
- return $8.get(searchId);
946
- },
947
- class: "cinder-faceted-filter-bar__search",
948
- get value() {
949
- return $8.get(currentSearchQuery);
950
- },
951
- get placeholder() {
952
- return searchPlaceholder();
953
- },
954
- get "aria-label"() {
955
- return searchAriaLabel();
956
- },
957
- get disabled() {
958
- return disabled();
959
- },
960
- oninput: handleSearchInput
961
- });
944
+ {
945
+ var consequent = ($$anchor2) => {
946
+ Search_field($$anchor2, {
947
+ get id() {
948
+ return $8.get(searchId);
949
+ },
950
+ class: "cinder-faceted-filter-bar__search",
951
+ get value() {
952
+ return $8.get(currentSearchQuery);
953
+ },
954
+ get placeholder() {
955
+ return searchPlaceholder();
956
+ },
957
+ get "aria-label"() {
958
+ return searchAriaLabel();
959
+ },
960
+ get disabled() {
961
+ return disabled();
962
+ },
963
+ oninput: handleSearchInput
964
+ });
965
+ };
966
+ $8.if(node, ($$render) => {
967
+ if (showSearch())
968
+ $$render(consequent);
969
+ });
970
+ }
962
971
  var node_1 = $8.sibling(node, 2);
963
972
  $8.each(node_1, 17, facets, (facet) => facet.key, ($$anchor2, facet) => {
964
- var fragment = $8.comment();
965
- var node_2 = $8.first_child(fragment);
973
+ var fragment_1 = $8.comment();
974
+ var node_2 = $8.first_child(fragment_1);
966
975
  {
967
- var consequent = ($$anchor3) => {
976
+ var consequent_1 = ($$anchor3) => {
968
977
  const selectFacet = $8.derived(() => $8.get(facet));
969
978
  var div_2 = root_14();
970
979
  var label = $8.child(div_2);
@@ -1012,7 +1021,7 @@ function Faceted_filter_bar($$anchor, $$props) {
1012
1021
  });
1013
1022
  $8.append($$anchor3, div_2);
1014
1023
  };
1015
- var consequent_1 = ($$anchor3) => {
1024
+ var consequent_2 = ($$anchor3) => {
1016
1025
  var div_3 = root_23();
1017
1026
  var node_4 = $8.child(div_3);
1018
1027
  {
@@ -1029,17 +1038,17 @@ function Faceted_filter_bar($$anchor, $$props) {
1029
1038
  };
1030
1039
  $8.if(node_2, ($$render) => {
1031
1040
  if ($8.get(facet).type === "select")
1032
- $$render(consequent);
1041
+ $$render(consequent_1);
1033
1042
  else if ($8.get(facet).type === "custom")
1034
- $$render(consequent_1, 1);
1043
+ $$render(consequent_2, 1);
1035
1044
  });
1036
1045
  }
1037
- $8.append($$anchor2, fragment);
1046
+ $8.append($$anchor2, fragment_1);
1038
1047
  });
1039
1048
  $8.reset(div_1);
1040
1049
  var node_5 = $8.sibling(div_1, 2);
1041
1050
  {
1042
- var consequent_2 = ($$anchor2) => {
1051
+ var consequent_3 = ($$anchor2) => {
1043
1052
  var div_4 = root_33();
1044
1053
  var node_6 = $8.child(div_4);
1045
1054
  $8.each(node_6, 17, appliedFilters, (filter) => filter.key, ($$anchor3, filter) => {
@@ -1084,7 +1093,7 @@ function Faceted_filter_bar($$anchor, $$props) {
1084
1093
  };
1085
1094
  $8.if(node_5, ($$render) => {
1086
1095
  if ($8.get(hasAppliedFilters))
1087
- $$render(consequent_2);
1096
+ $$render(consequent_3);
1088
1097
  });
1089
1098
  }
1090
1099
  var node_8 = $8.sibling(node_5, 2);
@@ -1108,4 +1117,4 @@ export {
1108
1117
  Faceted_filter_bar as FacetedFilterBar
1109
1118
  };
1110
1119
 
1111
- //# debugId=56374F25339661AB64756E2164756E21
1120
+ //# debugId=87F490947F95C08764756E2164756E21
@@ -275,14 +275,11 @@ function Navigation_bar($$anchor, $$props) {
275
275
  var consequent = ($$anchor2) => {
276
276
  var div = root();
277
277
  var node_1 = $.child(div);
278
- {
279
- let $0 = $.derived(() => ({
280
- "aria-expanded": mobileMenuOpen() ? "true" : "false",
281
- "aria-controls": regionId,
282
- ...true_default ? { onclick: handleToggle } : {}
283
- }));
284
- $.snippet(node_1, () => $$props.menuToggle, () => $.get($0));
285
- }
278
+ $.snippet(node_1, () => $$props.menuToggle, () => ({
279
+ "aria-expanded": mobileMenuOpen() ? "true" : "false",
280
+ "aria-controls": regionId,
281
+ onclick: handleToggle
282
+ }));
286
283
  $.reset(div);
287
284
  $.append($$anchor2, div);
288
285
  };
@@ -310,14 +307,11 @@ function Navigation_bar($$anchor, $$props) {
310
307
  var consequent_2 = ($$anchor2) => {
311
308
  var div_2 = root();
312
309
  var node_5 = $.child(div_2);
313
- {
314
- let $0 = $.derived(() => ({
315
- "aria-expanded": mobileMenuOpen() ? "true" : "false",
316
- "aria-controls": regionId,
317
- ...true_default ? { onclick: handleToggle } : {}
318
- }));
319
- $.snippet(node_5, () => $$props.menuToggle, () => $.get($0));
320
- }
310
+ $.snippet(node_5, () => $$props.menuToggle, () => ({
311
+ "aria-expanded": mobileMenuOpen() ? "true" : "false",
312
+ "aria-controls": regionId,
313
+ onclick: handleToggle
314
+ }));
321
315
  $.reset(div_2);
322
316
  $.append($$anchor2, div_2);
323
317
  };
@@ -367,4 +361,4 @@ export {
367
361
  Navigation_bar as NavigationBar
368
362
  };
369
363
 
370
- //# debugId=D071FB931C6D395164756E2164756E21
364
+ //# debugId=1BB3A9EE76EE8C6964756E2164756E21
@@ -670,6 +670,65 @@ function Status_dot($$anchor, $$props) {
670
670
  }
671
671
 
672
672
  // src/components/run-step-timeline/run-step-timeline.utilities.ts
673
+ function relocateCompensationSteps(steps) {
674
+ return relocateSiblingItems(steps, (step) => step);
675
+ }
676
+ function relocateSiblingItems(items, getStep) {
677
+ if (!items.some((item) => getStep(item)?.compensates !== undefined))
678
+ return items;
679
+ const stepById = new Map;
680
+ for (const item of items) {
681
+ const step = getStep(item);
682
+ if (step !== undefined) {
683
+ stepById.set(step.id, step);
684
+ }
685
+ }
686
+ const canRelocate = (step) => {
687
+ const visited = new Set([step.id]);
688
+ let targetId = step.compensates;
689
+ while (targetId !== undefined) {
690
+ const target = stepById.get(targetId);
691
+ if (target === undefined || visited.has(targetId))
692
+ return false;
693
+ visited.add(targetId);
694
+ targetId = target.compensates;
695
+ }
696
+ return true;
697
+ };
698
+ const relocatable = new Set;
699
+ const compensationsByTarget = new Map;
700
+ for (const item of items) {
701
+ const step = getStep(item);
702
+ if (step === undefined || step.compensates === undefined || !canRelocate(step))
703
+ continue;
704
+ relocatable.add(step);
705
+ const compensations = compensationsByTarget.get(step.compensates) ?? [];
706
+ compensations.push(item);
707
+ compensationsByTarget.set(step.compensates, compensations);
708
+ }
709
+ const result = [];
710
+ const appendWithCompensations = (item) => {
711
+ result.push(item);
712
+ const step = getStep(item);
713
+ if (step === undefined)
714
+ return;
715
+ for (const compensation of compensationsByTarget.get(step.id) ?? []) {
716
+ appendWithCompensations(compensation);
717
+ }
718
+ };
719
+ for (const item of items) {
720
+ const step = getStep(item);
721
+ if (step === undefined || !relocatable.has(step))
722
+ appendWithCompensations(item);
723
+ }
724
+ return result;
725
+ }
726
+ function relocateCompensationEntries(entries) {
727
+ return relocateSiblingItems(entries, (entry) => isBranchGroup(entry) ? undefined : entry);
728
+ }
729
+ function isBranchGroup(entry) {
730
+ return "kind" in entry && entry.kind === "branch";
731
+ }
673
732
  function statusDotStatus(status) {
674
733
  switch (status) {
675
734
  case "succeeded":
@@ -1254,8 +1313,8 @@ function Run_step_timeline($$anchor, $$props) {
1254
1313
  const MAX_NESTED_STEP_DEPTH = 3;
1255
1314
  let rest = $8.rest_props($$props, rest_excludes5);
1256
1315
  const resolvedAriaLabel = $8.derived(() => $$props["aria-labelledby"] === undefined && $$props["aria-label"] === undefined ? $$props.label : $$props["aria-label"]);
1257
- const renderedEntries = $8.derived(() => flattenEntries($$props.steps));
1258
- function isBranchGroup(entry) {
1316
+ const renderedEntries = $8.derived(() => flattenEntries(relocateCompensationEntries($$props.steps)));
1317
+ function isBranchGroup2(entry) {
1259
1318
  return "kind" in entry && entry.kind === "branch";
1260
1319
  }
1261
1320
  function flattenEntries(entries) {
@@ -1268,7 +1327,7 @@ function Run_step_timeline($$anchor, $$props) {
1268
1327
  stepRun = [];
1269
1328
  };
1270
1329
  for (const entry of entries) {
1271
- if (isBranchGroup(entry)) {
1330
+ if (isBranchGroup2(entry)) {
1272
1331
  flushRun();
1273
1332
  result.push({
1274
1333
  kind: "branch",
@@ -1330,7 +1389,7 @@ function Run_step_timeline($$anchor, $$props) {
1330
1389
  }
1331
1390
  function flattenSteps(list, pathPrefix) {
1332
1391
  const rows = [];
1333
- appendRunStepRows(rows, list, 0, pathPrefix);
1392
+ appendRunStepRows(rows, relocateCompensationSteps(list), 0, pathPrefix);
1334
1393
  const currentRowIndex = deepestCurrentStepIndex(rows);
1335
1394
  const labelByPathKey = new Map;
1336
1395
  for (const row of rows) {
@@ -1368,7 +1427,7 @@ function Run_step_timeline($$anchor, $$props) {
1368
1427
  rows.push({ kind: "step", step, depth, pathKey });
1369
1428
  if (step.children && step.children.length > 0) {
1370
1429
  if (depth < MAX_NESTED_STEP_DEPTH) {
1371
- appendRunStepRows(rows, step.children, depth + 1, pathKey);
1430
+ appendRunStepRows(rows, relocateCompensationSteps(step.children), depth + 1, pathKey);
1372
1431
  } else {
1373
1432
  const hiddenSummary = summarizeNestedRunSteps(step.children);
1374
1433
  rows.push({
@@ -1611,4 +1670,4 @@ export {
1611
1670
  Run_step_timeline as RunStepTimeline
1612
1671
  };
1613
1672
 
1614
- //# debugId=9EFCA6AA2F9089A264756E2164756E21
1673
+ //# debugId=77801BC78A33372764756E2164756E21
@@ -1,5 +1,13 @@
1
1
  import type { StatusDotStatus } from '../status-dot/status-dot.types.ts';
2
- import type { RunStep, RunStepBranchGroup, RunStepBranchLane, RunStepBranchLaneOutcome, RunStepStatus } from './run-step-timeline.types.ts';
2
+ import type { RunStep, RunStepBranchGroup, RunStepBranchLane, RunStepBranchLaneOutcome, RunStepStatus, RunStepTimelineEntry } from './run-step-timeline.types.ts';
3
+ /**
4
+ * Relocate resolved compensation steps immediately after the subtree of the
5
+ * sibling they reverse. Unresolved, self-referential, and cyclic links retain
6
+ * consumer order. Multiple compensations retain their relative input order.
7
+ */
8
+ export declare function relocateCompensationSteps(steps: RunStep[]): RunStep[];
9
+ /** Relocate top-level compensations while preserving branch rows as rail entries. */
10
+ export declare function relocateCompensationEntries(entries: RunStepTimelineEntry[]): RunStepTimelineEntry[];
3
11
  /** Badge variants used for the per-step status chip. */
4
12
  export type RunStepBadgeVariant = 'neutral' | 'success' | 'warning' | 'danger' | 'info' | 'accent';
5
13
  /** Map a generic {@link RunStepStatus} onto a StatusDot status token. */
@@ -13,6 +13,7 @@
13
13
  * ======================================== */
14
14
 
15
15
  .cinder-side-navigation {
16
+ --cinder-side-navigation-list-gap: var(--cinder-space-1);
16
17
  display: block;
17
18
  }
18
19
 
@@ -22,7 +23,7 @@
22
23
  padding: 0;
23
24
  display: flex;
24
25
  flex-direction: column;
25
- gap: var(--cinder-space-1);
26
+ gap: var(--cinder-side-navigation-list-gap, var(--cinder-space-1));
26
27
  }
27
28
 
28
29
  /* ----------------------------------------
@@ -59,6 +59,14 @@ var schema = {
59
59
  ariaLabel: {
60
60
  type: "string",
61
61
  description: "Accessible name for the <nav> landmark. Required, non-empty, distinct from other navs on the page."
62
+ },
63
+ class: {
64
+ type: "string",
65
+ description: "Additional CSS class merged with `.cinder-side-navigation`."
66
+ },
67
+ style: {
68
+ type: "string",
69
+ description: "Inline style string applied to the `.cinder-side-navigation` root."
62
70
  }
63
71
  },
64
72
  additionalProperties: false,
@@ -70,11 +78,6 @@ var schema = {
70
78
  reason: "function-or-snippet",
71
79
  required: true,
72
80
  description: "Must be <li> elements containing NavigationItem and/or SideNavigationGroup."
73
- },
74
- {
75
- name: "class",
76
- reason: "unknown-shape",
77
- description: "Additional CSS class merged with `.cinder-side-navigation`."
78
81
  }
79
82
  ]
80
83
  }
@@ -84,4 +87,4 @@ export {
84
87
  side_navigation_schema_default as default
85
88
  };
86
89
 
87
- //# debugId=F505A75B9F06310E64756E2164756E21
90
+ //# debugId=8436A7F5FC75585064756E2164756E21
@@ -9,3 +9,14 @@ export type SideNavigationProps = Omit<HTMLAttributes<HTMLElement>, 'aria-label'
9
9
  /** Must be <li> elements containing NavigationItem and/or SideNavigationGroup. */
10
10
  children: Snippet;
11
11
  };
12
+ /** Schema generator surface for SideNavigation — excludes native attributes except supported styling hooks. */
13
+ export interface SideNavigationSchemaProps {
14
+ /** Accessible name for the <nav> landmark. Required, non-empty, distinct from other navs on the page. */
15
+ ariaLabel: string;
16
+ /** Additional CSS class merged with `.cinder-side-navigation`. */
17
+ class?: string;
18
+ /** Inline style string applied to the `.cinder-side-navigation` root. */
19
+ style?: string;
20
+ /** Must be <li> elements containing NavigationItem and/or SideNavigationGroup. */
21
+ children: Snippet;
22
+ }
@@ -52,10 +52,10 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
52
52
  });
53
53
 
54
54
  // src/components/side-navigation/side-navigation.variables.ts
55
- var variables = [];
55
+ var variables = ["--cinder-side-navigation-list-gap"];
56
56
  var side_navigation_variables_default = variables;
57
57
  export {
58
58
  side_navigation_variables_default as default
59
59
  };
60
60
 
61
- //# debugId=641D501BF9DA807764756E2164756E21
61
+ //# debugId=E3DF58EF8E02E02F64756E2164756E21
@@ -1,17 +1,25 @@
1
1
  @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
2
  @layer cinder.components {
3
3
  .cinder-stat {
4
+ --cinder-stat-row-gap: var(--cinder-space-1, 0.25rem);
5
+ --cinder-stat-column-gap: var(--cinder-space-3, 0.75rem);
6
+ --cinder-stat-label-font-size: var(--cinder-text-sm);
7
+ --cinder-stat-value-font-size: var(--cinder-text-4xl);
8
+ --cinder-stat-value-font-weight: var(--cinder-font-semibold);
9
+ --cinder-stat-value-line-height: 1.1;
10
+ --cinder-stat-change-gap: var(--cinder-space-1, 0.25rem);
11
+ --cinder-stat-change-font-size: var(--cinder-text-sm);
4
12
  display: grid;
5
13
  grid-template-columns: 1fr;
6
14
  grid-template-rows: auto auto auto;
7
- row-gap: var(--cinder-space-1, 0.25rem);
15
+ row-gap: var(--cinder-stat-row-gap, var(--cinder-space-1, 0.25rem));
8
16
  align-items: start;
9
17
  color: var(--cinder-text);
10
18
  }
11
19
 
12
20
  .cinder-stat[data-cinder-has-icon] {
13
21
  grid-template-columns: auto 1fr;
14
- column-gap: var(--cinder-space-3, 0.75rem);
22
+ column-gap: var(--cinder-stat-column-gap, var(--cinder-space-3, 0.75rem));
15
23
  }
16
24
 
17
25
  .cinder-stat__icon {
@@ -25,7 +33,7 @@
25
33
  }
26
34
 
27
35
  .cinder-stat__label {
28
- font-size: var(--cinder-text-sm);
36
+ font-size: var(--cinder-stat-label-font-size, var(--cinder-text-sm));
29
37
  color: var(--cinder-text-muted);
30
38
  }
31
39
 
@@ -34,10 +42,10 @@
34
42
  }
35
43
 
36
44
  .cinder-stat__value {
37
- font-size: var(--cinder-text-4xl);
38
- font-weight: var(--cinder-font-semibold);
45
+ font-size: var(--cinder-stat-value-font-size, var(--cinder-text-4xl));
46
+ font-weight: var(--cinder-stat-value-font-weight, var(--cinder-font-semibold));
39
47
  font-variant-numeric: tabular-nums;
40
- line-height: 1.1;
48
+ line-height: var(--cinder-stat-value-line-height, 1.1);
41
49
  }
42
50
 
43
51
  .cinder-stat[data-cinder-has-icon] .cinder-stat__value {
@@ -47,8 +55,8 @@
47
55
  .cinder-stat__change {
48
56
  display: inline-flex;
49
57
  align-items: center;
50
- gap: var(--cinder-space-1, 0.25rem);
51
- font-size: var(--cinder-text-sm);
58
+ gap: var(--cinder-stat-change-gap, var(--cinder-space-1, 0.25rem));
59
+ font-size: var(--cinder-stat-change-font-size, var(--cinder-text-sm));
52
60
  }
53
61
 
54
62
  .cinder-stat[data-cinder-has-icon] .cinder-stat__change {
@@ -78,6 +78,10 @@ var schema = {
78
78
  class: {
79
79
  type: "string",
80
80
  description: "Additional class names merged with `.cinder-stat`."
81
+ },
82
+ style: {
83
+ type: "string",
84
+ description: "Inline style string applied to the `.cinder-stat` root."
81
85
  }
82
86
  },
83
87
  additionalProperties: false,
@@ -107,4 +111,4 @@ export {
107
111
  stat_schema_default as default
108
112
  };
109
113
 
110
- //# debugId=C0F5E1E3C641FA3864756E2164756E21
114
+ //# debugId=429D4BA8E0F6656864756E2164756E21
@@ -33,3 +33,22 @@ export type StatProps = Omit<HTMLAttributes<HTMLDivElement>, 'class'> & {
33
33
  /** Additional class names merged with `.cinder-stat`. */
34
34
  class?: string;
35
35
  };
36
+ /** Schema generator surface for Stat — excludes native attributes except supported styling hooks. */
37
+ export interface StatSchemaProps {
38
+ /** Short label describing the metric, e.g. "Monthly Revenue". */
39
+ label: string;
40
+ /** The statistic. Strings rendered verbatim; numbers formatted via formatNumber. */
41
+ value: string | number;
42
+ /** Optional change indicator with direction and accessible wording. */
43
+ change?: StatChange;
44
+ /** Optional leading icon snippet (decorative — wrapper is aria-hidden). */
45
+ icon?: Snippet;
46
+ /** Intl.NumberFormat options applied only when `value` is a number. */
47
+ valueFormatOptions?: Intl.NumberFormatOptions;
48
+ /** Locale forwarded to formatNumber. Defaults to the nearest LocaleProvider locale, then en-US. */
49
+ valueLocale?: string;
50
+ /** Additional class names merged with `.cinder-stat`. */
51
+ class?: string;
52
+ /** Inline style string applied to the `.cinder-stat` root. */
53
+ style?: string;
54
+ }
@@ -52,10 +52,19 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
52
52
  });
53
53
 
54
54
  // src/components/stat/stat.variables.ts
55
- var variables = [];
55
+ var variables = [
56
+ "--cinder-stat-change-font-size",
57
+ "--cinder-stat-change-gap",
58
+ "--cinder-stat-column-gap",
59
+ "--cinder-stat-label-font-size",
60
+ "--cinder-stat-row-gap",
61
+ "--cinder-stat-value-font-size",
62
+ "--cinder-stat-value-font-weight",
63
+ "--cinder-stat-value-line-height"
64
+ ];
56
65
  var stat_variables_default = variables;
57
66
  export {
58
67
  stat_variables_default as default
59
68
  };
60
69
 
61
- //# debugId=D0CE6D1B1C484C6664756E2164756E21
70
+ //# debugId=7108937A7CEA419964756E2164756E21
@@ -1,8 +1,11 @@
1
1
  @layer cinder.tokens, cinder.foundation, cinder.components, cinder.utilities;
2
2
  @layer cinder.components {
3
3
  .cinder-stat-group {
4
+ --cinder-stat-group-gap: var(--cinder-space-4, 1rem);
5
+ --cinder-stat-group-card-padding: var(--cinder-space-4, 1rem);
6
+ --cinder-stat-group-shared-cell-padding: var(--cinder-space-4, 1rem);
4
7
  display: grid;
5
- gap: var(--cinder-space-4, 1rem);
8
+ gap: var(--cinder-stat-group-gap, var(--cinder-space-4, 1rem));
6
9
  /* Query the group's own inline size so fixed column counts can collapse when
7
10
  the group is narrow — even inside a wide viewport (RESPONSIVE-POLICY.md). */
8
11
  container-type: inline-size;
@@ -50,7 +53,7 @@
50
53
 
51
54
  /* variant: cards — each stat gets a card-style border, background, and shadow */
52
55
  .cinder-stat-group[data-cinder-variant='cards'] > .cinder-stat {
53
- padding: var(--cinder-space-4, 1rem);
56
+ padding: var(--cinder-stat-group-card-padding, var(--cinder-space-4, 1rem));
54
57
  background: var(--cinder-surface-raised);
55
58
  border: 1px solid var(--cinder-border);
56
59
  border-radius: var(--cinder-radius-md, 0.5rem);
@@ -63,15 +66,15 @@
63
66
  * gap with the surface color, avoiding nth-child math for any column count.
64
67
  */
65
68
  .cinder-stat-group[data-cinder-variant='shared-borders'] {
69
+ --cinder-stat-group-gap: 1px;
66
70
  border: 1px solid var(--cinder-border);
67
71
  border-radius: var(--cinder-radius-md, 0.5rem);
68
72
  overflow: hidden;
69
73
  background: var(--cinder-border);
70
- gap: 1px;
71
74
  }
72
75
 
73
76
  .cinder-stat-group[data-cinder-variant='shared-borders'] > .cinder-stat {
74
- padding: var(--cinder-space-4, 1rem);
77
+ padding: var(--cinder-stat-group-shared-cell-padding, var(--cinder-space-4, 1rem));
75
78
  background: var(--cinder-surface-raised);
76
79
  }
77
80
  }
@@ -73,6 +73,10 @@ var schema = {
73
73
  class: {
74
74
  type: "string",
75
75
  description: "Additional class names merged with `.cinder-stat-group`."
76
+ },
77
+ style: {
78
+ type: "string",
79
+ description: "Inline style string applied to the `.cinder-stat-group` root."
76
80
  }
77
81
  },
78
82
  additionalProperties: false,
@@ -92,4 +96,4 @@ export {
92
96
  stat_group_schema_default as default
93
97
  };
94
98
 
95
- //# debugId=A2F52548CE94E2A964756E2164756E21
99
+ //# debugId=0D9871ECB97A1A0D64756E2164756E21
@@ -28,3 +28,30 @@ export type StatGroupProps = Omit<HTMLAttributes<HTMLDivElement>, 'class'> & {
28
28
  /** Additional class names merged with `.cinder-stat-group`. */
29
29
  class?: string;
30
30
  };
31
+ /** Schema generator surface for StatGroup — excludes native attributes except supported styling hooks. */
32
+ export interface StatGroupSchemaProps {
33
+ /**
34
+ * Optional accessible label for the whole stat set. When provided, the
35
+ * container becomes `role="group"` and uses this value as its accessible name.
36
+ */
37
+ label?: string;
38
+ /**
39
+ * Grid column count. `'auto'` uses auto-fit with minmax for responsive layout.
40
+ * @default 'auto'
41
+ */
42
+ columns?: StatGroupColumns;
43
+ /**
44
+ * Visual variant; surfaced as `data-cinder-variant` for CSS styling.
45
+ * - `'default'` — plain grid, no borders or backgrounds.
46
+ * - `'cards'` — each stat gets a card-style border and shadow.
47
+ * - `'shared-borders'` — single outer border with 1px gap dividers between stats.
48
+ * @default 'default'
49
+ */
50
+ variant?: StatGroupVariant;
51
+ /** Stat children, typically one or more `<Stat>` components. */
52
+ children: Snippet;
53
+ /** Additional class names merged with `.cinder-stat-group`. */
54
+ class?: string;
55
+ /** Inline style string applied to the `.cinder-stat-group` root. */
56
+ style?: string;
57
+ }
@@ -52,10 +52,14 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
52
52
  });
53
53
 
54
54
  // src/components/stat-group/stat-group.variables.ts
55
- var variables = [];
55
+ var variables = [
56
+ "--cinder-stat-group-card-padding",
57
+ "--cinder-stat-group-gap",
58
+ "--cinder-stat-group-shared-cell-padding"
59
+ ];
56
60
  var stat_group_variables_default = variables;
57
61
  export {
58
62
  stat_group_variables_default as default
59
63
  };
60
64
 
61
- //# debugId=D3FFE80178FC6D7064756E2164756E21
65
+ //# debugId=1CF303317D7DF3EA64756E2164756E21