@jsswift/ui 1.0.53 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/css/animation.css +36 -36
  2. package/dist/css/base.css +374 -374
  3. package/dist/css/docs.css +54 -54
  4. package/dist/css/fonts-nunito.css +2 -2
  5. package/dist/css/min-ui.css +1 -1
  6. package/dist/css/responsive-base.css +557 -0
  7. package/dist/css/responsive.css +3225 -3225
  8. package/dist/css/ui-components.css +2902 -2930
  9. package/dist/css/ui-light.css +9908 -0
  10. package/dist/css/ui-light.min.css +1 -0
  11. package/dist/css/ui.css +6530 -6558
  12. package/dist/css/ui.min.css +1 -1
  13. package/dist/min-ui.js +12 -12
  14. package/dist/ui.js +4354 -9379
  15. package/dist/ui.min.js +12 -12
  16. package/package.json +4 -2
  17. package/src/00-bootstrap.js +305 -305
  18. package/src/01-foundation-helpers.js +328 -325
  19. package/src/10-primitives-layout.js +242 -242
  20. package/src/20-display-content.js +76 -76
  21. package/src/21-list-content.js +21 -21
  22. package/src/22-banner-content.js +376 -376
  23. package/src/23-tooltip.js +9 -9
  24. package/src/31-form-advanced.js +141 -141
  25. package/src/40-navigation.js +81 -81
  26. package/src/41-tab-panel.js +37 -37
  27. package/src/50-feedback.js +52 -52
  28. package/src/51-feedback-service.js +166 -166
  29. package/src/60-shell-app.js +1082 -1082
  30. package/src/61-form-service.js +5 -5
  31. package/src/70-dialog.js +34 -34
  32. package/src/71-menu-overlays.js +73 -73
  33. package/src/80-data.js +38 -38
  34. package/src/css/README.md +2 -0
  35. package/src/css/animation.css +36 -36
  36. package/src/css/base.css +374 -374
  37. package/src/css/docs.css +54 -54
  38. package/src/css/fonts-nunito.css +2 -2
  39. package/src/css/responsive.css +3225 -3225
  40. package/src/css/ui-components.css +2902 -2930
@@ -102,13 +102,13 @@
102
102
  const rowSpaceValue = (value) => {
103
103
  if (value == null || value === false || value === "") return "";
104
104
  if (typeof value === "number") return `${value}px`;
105
- if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--cms-s-${value})`;
105
+ if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--jss-s-${value})`;
106
106
  return String(value);
107
107
  };
108
108
  const rowWidthValue = (value) => {
109
109
  if (value == null || value === false || value === "") return "";
110
110
  if (typeof value === "number") return `${value}px`;
111
- if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--cms-w-${value})`;
111
+ if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--jss-w-${value})`;
112
112
  return String(value);
113
113
  };
114
114
 
@@ -122,7 +122,7 @@
122
122
  ...JSswift.uiResponsiveOmitProps
123
123
  ]);
124
124
  p.class = uiClass([
125
- "cms-row",
125
+ "jss-row",
126
126
  JSswift.uiResponsiveClasses({ mobile: props }, uiResponsiveLayoutRules),
127
127
  JSswift.uiResponsiveClasses(props, uiResponsiveLayoutRules),
128
128
  props.class
@@ -203,14 +203,14 @@
203
203
 
204
204
  const parts = [
205
205
  startNodes.length
206
- ? _.div({ class: uiClass(["cms-row-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
206
+ ? _.div({ class: uiClass(["jss-row-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
207
207
  : null,
208
208
  bodyNodes.length
209
- ? _.div({ class: uiClass(["cms-row-body", bodyClass]), style: { ...regionStyle, flex: "1 1 auto" } }, ...bodyNodes)
209
+ ? _.div({ class: uiClass(["jss-row-body", bodyClass]), style: { ...regionStyle, flex: "1 1 auto" } }, ...bodyNodes)
210
210
  : null,
211
211
  endNodes.length
212
212
  ? _.div({
213
- class: uiClass(["cms-row-end", props.endClass]),
213
+ class: uiClass(["jss-row-end", props.endClass]),
214
214
  style: {
215
215
  ...regionStyle,
216
216
  justifyContent: "flex-end",
@@ -342,7 +342,7 @@
342
342
  const resolveSpaceValue = (value) => {
343
343
  if (value == null || value === false || value === "") return "";
344
344
  if (typeof value === "number") return `${value}px`;
345
- if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--cms-s-${value})`;
345
+ if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--jss-s-${value})`;
346
346
  return String(value);
347
347
  };
348
348
  const resolveSizeValue = (value) => {
@@ -353,7 +353,7 @@
353
353
  const resolveSpanClass = (value, prefix) => {
354
354
  const raw = uiUnwrap(value);
355
355
  if (raw == null || raw === false || raw === "") return "";
356
- if (raw === "auto") return prefix === "cms-col-" ? "cms-col-auto" : "";
356
+ if (raw === "auto") return prefix === "jss-col-" ? "jss-col-auto" : "";
357
357
  if (raw === true) return `${prefix}24`;
358
358
  const n = Number(raw);
359
359
  if (Number.isFinite(n) && n > 0) {
@@ -384,9 +384,9 @@
384
384
  };
385
385
 
386
386
  const baseColClass = uiComputed([rawProps.auto, rawProps.col, rawProps.span], () => {
387
- if (uiUnwrap(rawProps.auto)) return "cms-col-auto";
387
+ if (uiUnwrap(rawProps.auto)) return "jss-col-auto";
388
388
  const spanSource = hasOwn("span") ? rawProps.span : rawProps.col;
389
- return resolveSpanClass(spanSource, "cms-col-") || "cms-col";
389
+ return resolveSpanClass(spanSource, "jss-col-") || "jss-col";
390
390
  });
391
391
 
392
392
  const p = JSswift.omit(rawProps, [
@@ -496,15 +496,15 @@
496
496
  });
497
497
 
498
498
  p.class = uiClass([
499
- "cms-col",
499
+ "jss-col",
500
500
  baseColClass,
501
- uiComputed(rawProps.sm, () => resolveSpanClass(rawProps.sm, "cms-sm-col-")),
502
- uiComputed(rawProps.md, () => resolveSpanClass(rawProps.md, "cms-md-col-")),
503
- uiComputed(rawProps.lg, () => resolveSpanClass(rawProps.lg, "cms-lg-col-")),
501
+ uiComputed(rawProps.sm, () => resolveSpanClass(rawProps.sm, "jss-sm-col-")),
502
+ uiComputed(rawProps.md, () => resolveSpanClass(rawProps.md, "jss-md-col-")),
503
+ uiComputed(rawProps.lg, () => resolveSpanClass(rawProps.lg, "jss-lg-col-")),
504
504
  JSswift.uiResponsiveClasses({ mobile: rawProps }, uiResponsiveColRules),
505
505
  JSswift.uiResponsiveClasses(rawProps, uiResponsiveColRules),
506
- uiWhen(useFlexLayout, "cms-col-flex"),
507
- uiWhen(rawProps.inline, "cms-col-inline"),
506
+ uiWhen(useFlexLayout, "jss-col-flex"),
507
+ uiWhen(rawProps.inline, "jss-col-inline"),
508
508
  rawProps.class
509
509
  ]);
510
510
 
@@ -533,19 +533,19 @@
533
533
  const parts = [
534
534
  startNodes.length
535
535
  ? _.div({
536
- class: uiClass(["cms-col-start", rawProps.startClass, rawProps.topClass, rawProps.headerClass]),
536
+ class: uiClass(["jss-col-start", rawProps.startClass, rawProps.topClass, rawProps.headerClass]),
537
537
  style: { ...sectionStyle }
538
538
  }, ...startNodes)
539
539
  : null,
540
540
  bodyNodes.length
541
541
  ? _.div({
542
- class: uiClass(["cms-col-body", rawProps.bodyClass, rawProps.contentClass]),
542
+ class: uiClass(["jss-col-body", rawProps.bodyClass, rawProps.contentClass]),
543
543
  style: { ...sectionStyle, flex: "1 1 auto" }
544
544
  }, ...bodyNodes)
545
545
  : null,
546
546
  endNodes.length
547
547
  ? _.div({
548
- class: uiClass(["cms-col-end", rawProps.endClass, rawProps.bottomClass, rawProps.footerClass]),
548
+ class: uiClass(["jss-col-end", rawProps.endClass, rawProps.bottomClass, rawProps.footerClass]),
549
549
  style: { ...sectionStyle }
550
550
  }, ...endNodes)
551
551
  : null
@@ -561,7 +561,7 @@
561
561
  const { props, children } = JSswift.uiNormalizeArgs(args);
562
562
  const slots = props.slots || {};
563
563
  const p = JSswift.omit(props, ["slots"]);
564
- p.class = uiClass(["cms-spacer", props.class]);
564
+ p.class = uiClass(["jss-spacer", props.class]);
565
565
  const content = renderSlotToArray(slots, "default", {}, children);
566
566
  return _.div(p, ...content);
567
567
  };
@@ -595,7 +595,7 @@
595
595
  const resolveSpaceValue = (value) => {
596
596
  if (value == null || value === false || value === "") return "";
597
597
  if (typeof value === "number") return `${value}px`;
598
- if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--cms-s-${value})`;
598
+ if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--jss-s-${value})`;
599
599
  return String(value);
600
600
  };
601
601
  const resolveColsValue = (value) => {
@@ -631,7 +631,7 @@
631
631
  return renderSlotToArray(slots, name, ctx, null);
632
632
  }
633
633
  if (typeof fallback === "function") {
634
- const host = _.div({ class: `cms-container-slot-${name}` });
634
+ const host = _.div({ class: `jss-container-slot-${name}` });
635
635
  JSswift.reactive.effect(() => {
636
636
  const normalized = flattenSlotValue(JSswift.ui.slot(fallback(ctx)));
637
637
  host.replaceChildren();
@@ -699,16 +699,16 @@
699
699
  }));
700
700
  assignStyle("width", uiStyleValue(rawProps.width, resolveWidthValue));
701
701
  assignStyle("minWidth", uiStyleValue(rawProps.minWidth, resolveWidthValue));
702
- assignStyle("--cms-container-padding", uiStyleValue(rawProps.padding, resolveSpaceValue));
703
- assignStyle("--cms-container-padding-x", uiStyleValue(rawProps.paddingX ?? rawProps.gutter, resolveSpaceValue));
704
- assignStyle("--cms-container-padding-y", uiStyleValue(rawProps.paddingY, resolveSpaceValue));
705
- assignStyle("--cms-container-gap", uiStyleValue(rawProps.gap, resolveSpaceValue));
706
- assignStyle("--cms-container-section-gap", uiStyleValue(rawProps.sectionGap ?? rawProps.gap, resolveSpaceValue));
707
- assignStyle("--cms-container-cols", uiStyleValue(rawProps.cols, resolveColsValue));
708
- assignStyle("--cms-container-align", uiStyleValue(rawProps.align, (value) => String(value)));
709
- assignStyle("--cms-container-justify", uiStyleValue(rawProps.justify, (value) => String(value)));
710
- assignStyle("--cms-container-direction", uiStyleValue(rawProps.direction, (value) => String(value)));
711
- assignStyle("--cms-container-wrap", uiStyleValue(rawProps.wrap, resolveWrapValue));
702
+ assignStyle("--jss-container-padding", uiStyleValue(rawProps.padding, resolveSpaceValue));
703
+ assignStyle("--jss-container-padding-x", uiStyleValue(rawProps.paddingX ?? rawProps.gutter, resolveSpaceValue));
704
+ assignStyle("--jss-container-padding-y", uiStyleValue(rawProps.paddingY, resolveSpaceValue));
705
+ assignStyle("--jss-container-gap", uiStyleValue(rawProps.gap, resolveSpaceValue));
706
+ assignStyle("--jss-container-section-gap", uiStyleValue(rawProps.sectionGap ?? rawProps.gap, resolveSpaceValue));
707
+ assignStyle("--jss-container-cols", uiStyleValue(rawProps.cols, resolveColsValue));
708
+ assignStyle("--jss-container-align", uiStyleValue(rawProps.align, (value) => String(value)));
709
+ assignStyle("--jss-container-justify", uiStyleValue(rawProps.justify, (value) => String(value)));
710
+ assignStyle("--jss-container-direction", uiStyleValue(rawProps.direction, (value) => String(value)));
711
+ assignStyle("--jss-container-wrap", uiStyleValue(rawProps.wrap, resolveWrapValue));
712
712
 
713
713
  const p = JSswift.omit(props, [
714
714
  "after", "afterClass", "align", "as", "before", "beforeClass", "body", "bodyClass",
@@ -719,7 +719,7 @@
719
719
  "start", "startClass", "tag", "top", "width", "wrap"
720
720
  ]);
721
721
  p.class = uiClass([
722
- "cms-container",
722
+ "jss-container",
723
723
  uiWhen(rawProps.fluid, "is-fluid"),
724
724
  uiWhen(hasStructuredLayout, "has-structure"),
725
725
  hasStructuredLayout ? "" : layoutClass,
@@ -730,17 +730,17 @@
730
730
 
731
731
  const createSection = (name, nodes, extraClass) => {
732
732
  if (!nodes.length) return null;
733
- return _.div({ class: uiClass(["cms-container-section", `cms-container-${name}`, extraClass]) }, ...nodes);
733
+ return _.div({ class: uiClass(["jss-container-section", `jss-container-${name}`, extraClass]) }, ...nodes);
734
734
  };
735
735
 
736
736
  const contentRoot = bodyNodes.length
737
- ? _.div({ class: uiClass(["cms-container-body", hasStructuredLayout ? layoutClass : "", rawProps.bodyClass]) }, ...bodyNodes)
737
+ ? _.div({ class: uiClass(["jss-container-body", hasStructuredLayout ? layoutClass : "", rawProps.bodyClass]) }, ...bodyNodes)
738
738
  : (
739
739
  (startNodes.length || contentNodes.length || endNodes.length)
740
740
  ? _.div(
741
- { class: uiClass(["cms-container-body", hasStructuredLayout ? layoutClass : "", rawProps.bodyClass]) },
741
+ { class: uiClass(["jss-container-body", hasStructuredLayout ? layoutClass : "", rawProps.bodyClass]) },
742
742
  createSection("start", startNodes, rawProps.startClass),
743
- contentNodes.length ? _.div({ class: uiClass(["cms-container-main", rawProps.mainClass, rawProps.contentClass]) }, ...contentNodes) : null,
743
+ contentNodes.length ? _.div({ class: uiClass(["jss-container-main", rawProps.mainClass, rawProps.contentClass]) }, ...contentNodes) : null,
744
744
  createSection("end", endNodes, rawProps.endClass)
745
745
  )
746
746
  : null
@@ -773,7 +773,7 @@
773
773
  applyCommonProps(props);
774
774
 
775
775
  const isSectionNode = (node, name) => {
776
- return !!(node && node.nodeType === 1 && node.classList?.contains(`cms-card-${name}`));
776
+ return !!(node && node.nodeType === 1 && node.classList?.contains(`jss-card-${name}`));
777
777
  };
778
778
  const renderIconFallback = (value) => {
779
779
  if (value == null) return null;
@@ -785,7 +785,7 @@
785
785
  ? _.img({
786
786
  src: rawProps.image,
787
787
  alt: rawProps.imageAlt || "",
788
- class: uiClass(["cms-card-cover-media", rawProps.imageClass]),
788
+ class: uiClass(["jss-card-cover-media", rawProps.imageClass]),
789
789
  style: rawProps.imageStyle
790
790
  })
791
791
  : rawProps.cover;
@@ -834,50 +834,50 @@
834
834
  const actionsNodes = renderSlotToArray(slots, "actions", ctx, rawProps.actions);
835
835
 
836
836
  const generatedIdentifier = identifierNodes.length
837
- ? _.div({ class: uiClass(["cms-card-identifier", rawProps.identifierClass]) }, ...identifierNodes)
837
+ ? _.div({ class: uiClass(["jss-card-identifier", rawProps.identifierClass]) }, ...identifierNodes)
838
838
  : null;
839
839
  const generatedCover = coverNodes.length
840
- ? _.div({ class: uiClass(["cms-card-cover", rawProps.coverClass]) }, ...coverNodes)
840
+ ? _.div({ class: uiClass(["jss-card-cover", rawProps.coverClass]) }, ...coverNodes)
841
841
  : null;
842
842
  const generatedMedia = mediaNodes.length
843
- ? _.div({ class: uiClass(["cms-card-media", rawProps.mediaClass]) }, ...mediaNodes)
843
+ ? _.div({ class: uiClass(["jss-card-media", rawProps.mediaClass]) }, ...mediaNodes)
844
844
  : null;
845
845
 
846
846
  const hasStructuredHeader = iconNodes.length || eyebrowNodes.length || titleNodes.length || subtitleNodes.length || headerNodes.length || asideNodes.length;
847
847
  const generatedHeader = hasStructuredHeader
848
848
  ? _.div(
849
- { class: uiClass(["cms-card-header", rawProps.headerClass]) },
849
+ { class: uiClass(["jss-card-header", rawProps.headerClass]) },
850
850
  _.div(
851
- { class: "cms-card-head" },
852
- iconNodes.length ? _.div({ class: "cms-card-icon" }, ...iconNodes) : null,
851
+ { class: "jss-card-head" },
852
+ iconNodes.length ? _.div({ class: "jss-card-icon" }, ...iconNodes) : null,
853
853
  _.div(
854
- { class: "cms-card-head-main" },
855
- eyebrowNodes.length ? _.div({ class: uiClass(["cms-card-eyebrow", rawProps.eyebrowClass]) }, ...eyebrowNodes) : null,
856
- titleNodes.length ? _.div({ class: uiClass(["cms-card-title", rawProps.titleClass]) }, ...titleNodes) : null,
857
- subtitleNodes.length ? _.div({ class: uiClass(["cms-card-subtitle", rawProps.subtitleClass]) }, ...subtitleNodes) : null,
858
- headerNodes.length ? _.div({ class: uiClass(["cms-card-header-content", rawProps.headerContentClass]) }, ...headerNodes) : null
854
+ { class: "jss-card-head-main" },
855
+ eyebrowNodes.length ? _.div({ class: uiClass(["jss-card-eyebrow", rawProps.eyebrowClass]) }, ...eyebrowNodes) : null,
856
+ titleNodes.length ? _.div({ class: uiClass(["jss-card-title", rawProps.titleClass]) }, ...titleNodes) : null,
857
+ subtitleNodes.length ? _.div({ class: uiClass(["jss-card-subtitle", rawProps.subtitleClass]) }, ...subtitleNodes) : null,
858
+ headerNodes.length ? _.div({ class: uiClass(["jss-card-header-content", rawProps.headerContentClass]) }, ...headerNodes) : null
859
859
  ),
860
- asideNodes.length ? _.div({ class: uiClass(["cms-card-aside", rawProps.asideClass]) }, ...asideNodes) : null
860
+ asideNodes.length ? _.div({ class: uiClass(["jss-card-aside", rawProps.asideClass]) }, ...asideNodes) : null
861
861
  )
862
862
  )
863
863
  : null;
864
864
 
865
865
  const mergedBodyNodes = [...bodyNodes, ...looseNodes];
866
866
  const generatedBody = mergedBodyNodes.length
867
- ? _.div({ class: uiClass(["cms-card-body", rawProps.bodyClass]) }, ...mergedBodyNodes)
867
+ ? _.div({ class: uiClass(["jss-card-body", rawProps.bodyClass]) }, ...mergedBodyNodes)
868
868
  : null;
869
869
 
870
870
  const mergedActionNodes = [...actionsNodes, ...sectionNodes.actions];
871
871
  const generatedFooter = (footerNodes.length || mergedActionNodes.length)
872
872
  ? _.div(
873
- { class: uiClass(["cms-card-footer", rawProps.footerClass]) },
873
+ { class: uiClass(["jss-card-footer", rawProps.footerClass]) },
874
874
  ...footerNodes,
875
- mergedActionNodes.length ? _.div({ class: "cms-card-actions" }, ...mergedActionNodes) : null
875
+ mergedActionNodes.length ? _.div({ class: "jss-card-actions" }, ...mergedActionNodes) : null
876
876
  )
877
877
  : null;
878
878
 
879
879
  const interactiveClass = uiComputed([rawProps.clickable, rawProps.to], () => {
880
- return (uiUnwrap(rawProps.clickable) || uiUnwrap(rawProps.to)) ? "cms-card-clickable" : "";
880
+ return (uiUnwrap(rawProps.clickable) || uiUnwrap(rawProps.to)) ? "jss-card-clickable" : "";
881
881
  });
882
882
  const hasIdentifier = identifierNodes.length || sectionNodes.identifier.length;
883
883
  const hasTopVisual = coverNodes.length || sectionNodes.cover.length || mediaNodes.length || sectionNodes.media.length;
@@ -892,20 +892,20 @@
892
892
  "cols", "columns"
893
893
  ]);
894
894
  p.class = uiClass([
895
- "cms-panel",
896
- "cms-card",
897
- 'cms-clear-set',
898
- "cms-singularity",
899
- uiWhen(rawProps.flat, "cms-card-flat"),
900
- uiWhen(rawProps.dense, "cms-card-dense"),
901
- uiWhen(hasIdentifier, "cms-card-has-identifier"),
902
- uiWhen(hasTopVisual, "cms-card-has-top-visual"),
895
+ "jss-panel",
896
+ "jss-card",
897
+ 'jss-clear-set',
898
+ "jss-singularity",
899
+ uiWhen(rawProps.flat, "jss-card-flat"),
900
+ uiWhen(rawProps.dense, "jss-card-dense"),
901
+ uiWhen(hasIdentifier, "jss-card-has-identifier"),
902
+ uiWhen(hasTopVisual, "jss-card-has-top-visual"),
903
903
  interactiveClass,
904
904
  props.class
905
905
  ]);
906
906
  p.style = { ...(props.style || {}) };
907
907
  if (rawProps.coverHeight != null) {
908
- p.style["--cms-card-cover-height"] = toCssSize(uiUnwrap(rawProps.coverHeight));
908
+ p.style["--jss-card-cover-height"] = toCssSize(uiUnwrap(rawProps.coverHeight));
909
909
  }
910
910
  JSswift.uiApplyResponsiveProps(p, rawProps, JSswift.uiResponsiveStyleRules);
911
911
 
@@ -966,7 +966,7 @@
966
966
  : (uiUnwrap(props.state) || "");
967
967
  });
968
968
 
969
- const cls = uiClass(["cms-clear-set", "cms-btn", "cms-singularity", "cms-clickable", state, uiWhen(props.outline, "outline"), props.class]);
969
+ const cls = uiClass(["jss-clear-set", "jss-btn", "jss-singularity", "jss-clickable", state, uiWhen(props.outline, "outline"), props.class]);
970
970
 
971
971
  const p = JSswift.omit(props, [
972
972
  "icon", "iconRight", "label", "loading", "loadingText", "disabled", "outline", "iconAlign", "slots",
@@ -1007,12 +1007,12 @@
1007
1007
  if (slotChildren.length) content.push(...slotChildren);
1008
1008
  }
1009
1009
  pushAll(iconRight);
1010
- pushAll(uiCreateShortcodeHint(props, { className: "cms-shortcode cms-btn-shortcode" }));
1010
+ pushAll(uiCreateShortcodeHint(props, { className: "jss-shortcode jss-btn-shortcode" }));
1011
1011
 
1012
1012
  if (content.length === 0) content.push(_.span("Button"));
1013
1013
 
1014
- const loadingNode = _.span({ class: "cms-btn-loading", hidden: true });
1015
- const contentNode = _.span({ class: "cms-btn-content" }, ...content);
1014
+ const loadingNode = _.span({ class: "jss-btn-loading", hidden: true });
1015
+ const contentNode = _.span({ class: "jss-btn-content" }, ...content);
1016
1016
  let loadingVisible = false;
1017
1017
  const renderLoadingContent = () => {
1018
1018
  const fallback = UI.Spinner
@@ -1023,7 +1023,7 @@
1023
1023
  label: props.loadingText || null,
1024
1024
  "aria-label": props.loadingText ? null : "Loading"
1025
1025
  })
1026
- : _.span({ class: "cms-muted", style: { marginRight: "8px" } }, props.loadingText || "Loading");
1026
+ : _.span({ class: "jss-muted", style: { marginRight: "8px" } }, props.loadingText || "Loading");
1027
1027
  return renderSlotToArray(null, "default", {}, JSswift.ui.renderSlot(slots, "loading", {}, fallback));
1028
1028
  };
1029
1029
 
@@ -1034,11 +1034,11 @@
1034
1034
  const rect = btn.getBoundingClientRect();
1035
1035
  const x = typeof e.clientX === "number" ? e.clientX - rect.left : rect.width / 2;
1036
1036
  const y = typeof e.clientY === "number" ? e.clientY - rect.top : rect.height / 2;
1037
- btn.style.setProperty("--cms-burst-x", `${x}px`);
1038
- btn.style.setProperty("--cms-burst-y", `${y}px`);
1039
- btn.classList.remove("cms-btn-burst");
1037
+ btn.style.setProperty("--jss-burst-x", `${x}px`);
1038
+ btn.style.setProperty("--jss-burst-y", `${y}px`);
1039
+ btn.classList.remove("jss-btn-burst");
1040
1040
  void btn.offsetWidth;
1041
- btn.classList.add("cms-btn-burst");
1041
+ btn.classList.add("jss-btn-burst");
1042
1042
  };
1043
1043
 
1044
1044
  const btn = _.button({
@@ -1105,11 +1105,11 @@
1105
1105
  : (uiUnwrap(props.state) || "");
1106
1106
  });
1107
1107
 
1108
- const wrap = _.div({ class: uiClass(["cms-clear-field-set", "cms-field", "cms-singularity-field", state, uiWhen(props.fill, "cms-field-fill"), uiWhen(props.outline, "outline"), props.wrapClass, props.class]) });
1108
+ const wrap = _.div({ class: uiClass(["jss-clear-field-set", "jss-field", "jss-singularity-field", state, uiWhen(props.fill, "jss-field-fill"), uiWhen(props.outline, "outline"), props.wrapClass, props.class]) });
1109
1109
 
1110
1110
  const topLabelNodes = renderSlotToArray(slots, "topLabel", {}, props.topLabel);
1111
1111
  if (topLabelNodes.length) {
1112
- wrap.appendChild(_.div({ class: "cms-field-label" }, ...topLabelNodes));
1112
+ wrap.appendChild(_.div({ class: "jss-field-label" }, ...topLabelNodes));
1113
1113
  }
1114
1114
  const isMulti = props.multi || props.multiple;
1115
1115
 
@@ -1140,13 +1140,13 @@
1140
1140
 
1141
1141
  if (controlSlot) {
1142
1142
  control = Array.isArray(controlSlot)
1143
- ? _.div({ class: "cms-control" }, ...controlSlot)
1143
+ ? _.div({ class: "jss-control" }, ...controlSlot)
1144
1144
  : controlSlot;
1145
1145
  } else {
1146
- control = _.div({ class: "cms-control" });
1146
+ control = _.div({ class: "jss-control" });
1147
1147
 
1148
1148
  // left addon
1149
- const left = _.div({ class: "cms-addon cms-addon-left" });
1149
+ const left = _.div({ class: "jss-addon jss-addon-left" });
1150
1150
  const iconFallback = props.icon != null
1151
1151
  ? (typeof props.icon === "string" ? UI.Icon({ name: props.icon }) : props.icon)
1152
1152
  : null;
@@ -1157,12 +1157,12 @@
1157
1157
  if (left.childNodes.length) control.appendChild(left);
1158
1158
 
1159
1159
  // middle: controlEl + floating label
1160
- const mid = _.div({ class: "cms-mid" + (left.childNodes.length > 0 ? " cms-with-left" : ""), style: { position: "relative", flex: "1", minWidth: "0" } });
1160
+ const mid = _.div({ class: "jss-mid" + (left.childNodes.length > 0 ? " jss-with-left" : ""), style: { position: "relative", flex: "1", minWidth: "0" } });
1161
1161
  if (controlEl) mid.appendChild(controlEl);
1162
1162
 
1163
1163
  const labelNodes = renderSlotToArray(slots, "label", {}, props.label);
1164
1164
  if (labelNodes.length) {
1165
- const floatLabel = _.div({ class: uiClass(["cms-float-label", uiWhen(isMulti, "cms-multiselect")]) }, ...labelNodes);
1165
+ const floatLabel = _.div({ class: uiClass(["jss-float-label", uiWhen(isMulti, "jss-multiselect")]) }, ...labelNodes);
1166
1166
  mid.appendChild(floatLabel);
1167
1167
  }
1168
1168
 
@@ -1170,7 +1170,7 @@
1170
1170
 
1171
1171
  // clear
1172
1172
  const defaultClear = props.clearable ? _.div({
1173
- class: "cms-clear",
1173
+ class: "jss-clear",
1174
1174
  title: "Clear",
1175
1175
  onClick: clear
1176
1176
  }, UI.Icon({ name: "close" })) : null;
@@ -1192,23 +1192,23 @@
1192
1192
 
1193
1193
  clearBtn = defaultClear;
1194
1194
  if (clearBtn && props.clearable?.action) {
1195
- props.clearable.action((v) => v ? clearBtn.classList.remove("cms-d-none") : clearBtn.classList.add("cms-d-none"));
1195
+ props.clearable.action((v) => v ? clearBtn.classList.remove("jss-d-none") : clearBtn.classList.add("jss-d-none"));
1196
1196
  }
1197
1197
 
1198
1198
  // right addon
1199
- const right = _.div({ class: "cms-addon cms-addon-right" });
1199
+ const right = _.div({ class: "jss-addon jss-addon-right" });
1200
1200
  const iconRightFallback = props.iconRight != null
1201
1201
  ? (typeof props.iconRight === "string" ? UI.Icon({ name: props.iconRight }) : props.iconRight)
1202
1202
  : null;
1203
1203
  const iconRightNode = JSswift.ui.renderSlot(slots, "iconRight", {}, iconRightFallback);
1204
1204
  const suffixNode = JSswift.ui.renderSlot(slots, "suffix", {}, props.suffix);
1205
- const shortcodeNode = JSswift.ui.renderSlot(slots, "shortcode", { props }, uiCreateShortcodeHint(props, { className: "cms-shortcode cms-field-shortcode" }));
1205
+ const shortcodeNode = JSswift.ui.renderSlot(slots, "shortcode", { props }, uiCreateShortcodeHint(props, { className: "jss-shortcode jss-field-shortcode" }));
1206
1206
  renderSlotToArray(null, "default", {}, suffixNode).forEach(n => right.appendChild(n));
1207
1207
  renderSlotToArray(null, "default", {}, iconRightNode).forEach(n => right.appendChild(n));
1208
1208
  renderSlotToArray(null, "default", {}, shortcodeNode).forEach(n => right.appendChild(n));
1209
1209
  if (right.childNodes.length) {
1210
1210
  control.appendChild(right);
1211
- mid.classList.add("cms-with-right");
1211
+ mid.classList.add("jss-with-right");
1212
1212
  }
1213
1213
  }
1214
1214
 
@@ -1235,11 +1235,11 @@
1235
1235
  wrap._syncDescription = syncDescription;
1236
1236
  const renderMessage = () => {
1237
1237
  const statusOrder = [
1238
- { key: "error", value: resolveValue(props.error), slot: "errorMessage", className: "cms-error" },
1239
- { key: "warning", value: resolveValue(props.warning), slot: "warning", className: "cms-warning" },
1240
- { key: "success", value: resolveValue(props.success), slot: "success", className: "cms-success" },
1241
- { key: "note", value: resolveValue(props.note), slot: "note", className: "cms-note" },
1242
- { key: "hint", value: resolveValue(props.hint), slot: "hint", className: "cms-hint" }
1238
+ { key: "error", value: resolveValue(props.error), slot: "errorMessage", className: "jss-error" },
1239
+ { key: "warning", value: resolveValue(props.warning), slot: "warning", className: "jss-warning" },
1240
+ { key: "success", value: resolveValue(props.success), slot: "success", className: "jss-success" },
1241
+ { key: "note", value: resolveValue(props.note), slot: "note", className: "jss-note" },
1242
+ { key: "hint", value: resolveValue(props.hint), slot: "hint", className: "jss-hint" }
1243
1243
  ];
1244
1244
  let active = null;
1245
1245
  for (const item of statusOrder) {
@@ -1326,7 +1326,7 @@
1326
1326
 
1327
1327
  UI.InputRaw = (props = {}) => {
1328
1328
  const el = _.input({
1329
- class: uiClass(["cms-input-raw", props.class]),
1329
+ class: uiClass(["jss-input-raw", props.class]),
1330
1330
  type: props.type || "text",
1331
1331
  name: props.name,
1332
1332
  placeholder: props.placeholder,
@@ -1388,7 +1388,7 @@
1388
1388
  el.addEventListener("input", () => { lastKnownValue = el.value ?? ""; });
1389
1389
  el.addEventListener("change", () => { lastKnownValue = el.value ?? ""; });
1390
1390
  el.addEventListener("animationstart", (e) => {
1391
- if (e.animationName !== "cms-autofill") return;
1391
+ if (e.animationName !== "jss-autofill") return;
1392
1392
  syncAutofill();
1393
1393
  startAutofillWatch();
1394
1394
  scheduleAutofillProbe();
@@ -1464,7 +1464,7 @@
1464
1464
  label: props.label ?? props.placeholder
1465
1465
  };
1466
1466
  const input = _.input({
1467
- class: uiClass(["cms-input", props.class]),
1467
+ class: uiClass(["jss-input", props.class]),
1468
1468
  type: props.type || "text",
1469
1469
  name: props.name,
1470
1470
  autocomplete: props.autocomplete,
@@ -1547,7 +1547,7 @@
1547
1547
  autofillLater(syncAutofill, 0);
1548
1548
  });
1549
1549
  input.addEventListener("animationstart", (e) => {
1550
- if (e.animationName !== "cms-autofill") return;
1550
+ if (e.animationName !== "jss-autofill") return;
1551
1551
  syncAutofill();
1552
1552
  startAutofillWatch();
1553
1553
  scheduleAutofillProbe();
@@ -1659,10 +1659,10 @@
1659
1659
  const fieldProps = {
1660
1660
  ...props,
1661
1661
  label: props.label ?? props.placeholder,
1662
- wrapClass: uiClass(["cms-textarea-field", props.wrapClass])
1662
+ wrapClass: uiClass(["jss-textarea-field", props.wrapClass])
1663
1663
  };
1664
1664
  const textarea = _.textarea({
1665
- class: uiClass(["cms-input", "cms-textarea", props.class]),
1665
+ class: uiClass(["jss-input", "jss-textarea", props.class]),
1666
1666
  name: props.name,
1667
1667
  autocomplete: props.autocomplete,
1668
1668
  inputmode: props.inputmode,
@@ -1807,7 +1807,7 @@
1807
1807
  const [getResults, setResults] = JSswift.reactive.signal([]);
1808
1808
  const [getActive, setActive] = JSswift.reactive.signal(-1);
1809
1809
 
1810
- const uid = `cms-search-${Math.random().toString(36).slice(2, 10)}`;
1810
+ const uid = `jss-search-${Math.random().toString(36).slice(2, 10)}`;
1811
1811
  const cache = new Map();
1812
1812
  let modelSet = null;
1813
1813
  let searchTimer = null;
@@ -2021,16 +2021,16 @@
2021
2021
  if (index < 0) return [document.createTextNode(text)];
2022
2022
  return [
2023
2023
  document.createTextNode(text.slice(0, index)),
2024
- _.mark({ class: "cms-search-highlight" }, text.slice(index, index + q.length)),
2024
+ _.mark({ class: "jss-search-highlight" }, text.slice(index, index + q.length)),
2025
2025
  document.createTextNode(text.slice(index + q.length))
2026
2026
  ];
2027
2027
  };
2028
2028
  const renderDefaultResult = (item) => {
2029
2029
  const label = getLabel(item);
2030
2030
  const description = item && typeof item === "object" ? (item.description ?? item.subtitle ?? item.note) : null;
2031
- return _.div({ class: "cms-search-result-content" },
2032
- _.div({ class: "cms-search-result-label" }, ...renderHighlightedLabel(label)),
2033
- description ? _.div({ class: "cms-search-result-description" }, String(description)) : null
2031
+ return _.div({ class: "jss-search-result-content" },
2032
+ _.div({ class: "jss-search-result-label" }, ...renderHighlightedLabel(label)),
2033
+ description ? _.div({ class: "jss-search-result-description" }, String(description)) : null
2034
2034
  );
2035
2035
  };
2036
2036
  const scheduleMenuPosition = () => {
@@ -2108,7 +2108,7 @@
2108
2108
 
2109
2109
  const input = _.input({
2110
2110
  id: props.id,
2111
- class: uiClass(["cms-input", "cms-search-input", props.inputClass]),
2111
+ class: uiClass(["jss-input", "jss-search-input", props.inputClass]),
2112
2112
  type: "search",
2113
2113
  name: props.name,
2114
2114
  placeholder: hasFloatingLabel ? "" : props.placeholder,
@@ -2125,16 +2125,16 @@
2125
2125
 
2126
2126
  const resultsWrap = _.div({
2127
2127
  id: `${uid}-list`,
2128
- class: "cms-search-results",
2128
+ class: "jss-search-results",
2129
2129
  role: "listbox"
2130
2130
  });
2131
2131
  const menu = _.div({
2132
- class: uiClass(["cms-search-menu", "cms-singularity-menu-select", props.menuClass, uiWhen(props.fill, "cms-select-menu-fill")]),
2133
- "data-cms-overlay-portal": "true",
2132
+ class: uiClass(["jss-search-menu", "jss-singularity-menu-select", props.menuClass, uiWhen(props.fill, "jss-select-menu-fill")]),
2133
+ "data-jss-overlay-portal": "true",
2134
2134
  onClick: (event) => event.stopPropagation()
2135
2135
  }, resultsWrap);
2136
2136
  const root = _.div({
2137
- class: uiClass(["cms-search", props.class]),
2137
+ class: uiClass(["jss-search", props.class]),
2138
2138
  role: "presentation"
2139
2139
  }, input, menu);
2140
2140
 
@@ -2255,16 +2255,16 @@
2255
2255
 
2256
2256
  if (loading) {
2257
2257
  const loadingNode = JSswift.ui.renderSlot(slots, "loading", { query }, props.loadingText || "Caricamento...");
2258
- resultsWrap.appendChild(_.div({ class: "cms-search-empty is-loading" }, ...renderSlotToArray(null, "default", {}, loadingNode)));
2258
+ resultsWrap.appendChild(_.div({ class: "jss-search-empty is-loading" }, ...renderSlotToArray(null, "default", {}, loadingNode)));
2259
2259
  } else if (error) {
2260
2260
  const errorNode = JSswift.ui.renderSlot(slots, "error", { error, query }, props.errorText || "Errore ricerca");
2261
- resultsWrap.appendChild(_.div({ class: "cms-search-empty is-error" }, ...renderSlotToArray(null, "default", {}, errorNode)));
2261
+ resultsWrap.appendChild(_.div({ class: "jss-search-empty is-error" }, ...renderSlotToArray(null, "default", {}, errorNode)));
2262
2262
  } else if (!results.length) {
2263
2263
  const enoughQuery = query.trim().length >= minLength();
2264
2264
  const emptyDefault = enoughQuery ? (props.emptyText || "Nessun risultato") : (props.startText || "");
2265
2265
  const emptyNode = JSswift.ui.renderSlot(slots, "empty", { query }, emptyDefault);
2266
2266
  if (emptyDefault || JSswift.ui.getSlot(slots, "empty") != null) {
2267
- resultsWrap.appendChild(_.div({ class: "cms-search-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2267
+ resultsWrap.appendChild(_.div({ class: "jss-search-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2268
2268
  }
2269
2269
  } else {
2270
2270
  results.forEach((item, index) => {
@@ -2283,7 +2283,7 @@
2283
2283
  }, renderDefaultResult(item));
2284
2284
  const node = _.div({
2285
2285
  id: `${uid}-result-${index}`,
2286
- class: uiClass(["cms-search-result", selected ? "active" : ""]),
2286
+ class: uiClass(["jss-search-result", selected ? "active" : ""]),
2287
2287
  role: "option",
2288
2288
  "aria-selected": selected ? "true" : "false",
2289
2289
  onMouseEnter: () => setActive(index),
@@ -2319,7 +2319,7 @@
2319
2319
  field = UI.FormField({
2320
2320
  ...props,
2321
2321
  icon: props.icon ?? "search",
2322
- wrapClass: uiClass(["cms-search-field", props.wrapClass]),
2322
+ wrapClass: uiClass(["jss-search-field", props.wrapClass]),
2323
2323
  control: root,
2324
2324
  getValue: () => getQuery(),
2325
2325
  onClear: () => {
@@ -2580,7 +2580,7 @@
2580
2580
 
2581
2581
  // root select (control + menu)
2582
2582
  const root = _.div({
2583
- class: uiClass(["cms-select", isMulti ? "multiple" : "", props.class]),
2583
+ class: uiClass(["jss-select", isMulti ? "multiple" : "", props.class]),
2584
2584
  tabIndex: isDisabled() ? -1 : 0,
2585
2585
  role: "combobox",
2586
2586
  "aria-expanded": "false",
@@ -2588,7 +2588,7 @@
2588
2588
  });
2589
2589
 
2590
2590
  const valueNode = _.div({
2591
- class: uiClass(["cms-select-value", isMulti ? "cms-select-value-multi" : ""])
2591
+ class: uiClass(["jss-select-value", isMulti ? "jss-select-value-multi" : ""])
2592
2592
  });
2593
2593
  scope.effect(() => {
2594
2594
  const flat = getFlat();
@@ -2636,28 +2636,28 @@
2636
2636
  }
2637
2637
  }, "UI.Select:value");
2638
2638
 
2639
- const arrowWrap = _.div({ class: "cms-select-arrow" });
2639
+ const arrowWrap = _.div({ class: "jss-select-arrow" });
2640
2640
  scope.effect(() => {
2641
2641
  const arrowNode = JSswift.ui.renderSlot(slots, "arrow", { open: getOpen() }, UI.Icon("#chevron-down"));
2642
2642
  arrowWrap.innerHTML = "";
2643
2643
  renderSlotToArray(null, "default", {}, arrowNode).forEach(n => arrowWrap.appendChild(n));
2644
2644
  }, "UI.Select:arrow");
2645
2645
 
2646
- const control = _.div({ class: "cms-select-control", onClick: toggle },
2646
+ const control = _.div({ class: "jss-select-control", onClick: toggle },
2647
2647
  valueNode,
2648
2648
  arrowWrap
2649
2649
  );
2650
2650
 
2651
2651
  const optionsWrap = _.div({
2652
- class: "cms-select-options",
2652
+ class: "jss-select-options",
2653
2653
  role: "listbox",
2654
2654
  "aria-multiselectable": isMulti ? "true" : "false"
2655
2655
  });
2656
2656
 
2657
- const filterWrap = _.div({ class: "cms-select-filter cms-d-none" });
2657
+ const filterWrap = _.div({ class: "jss-select-filter jss-d-none" });
2658
2658
  let filterInput = null;
2659
2659
  const defaultFilterInput = _.input({
2660
- class: "cms-input",
2660
+ class: "jss-input",
2661
2661
  type: "text",
2662
2662
  placeholder: props.filterPlaceholder || "Cerca...",
2663
2663
  onInput: (e) => setFilter(e.target.value || "")
@@ -2686,12 +2686,12 @@
2686
2686
  }
2687
2687
  }, "UI.Select:filterValue");
2688
2688
 
2689
- if (typeof filterable === "boolean") filterable ? filterWrap.classList.remove("cms-d-none") : filterWrap.classList.add("cms-d-none");
2689
+ if (typeof filterable === "boolean") filterable ? filterWrap.classList.remove("jss-d-none") : filterWrap.classList.add("jss-d-none");
2690
2690
  else if (filterable?.action) {
2691
2691
  scope.action(filterable, (v) => {
2692
- v ? filterWrap.classList.remove("cms-d-none") : filterWrap.classList.add("cms-d-none");
2692
+ v ? filterWrap.classList.remove("jss-d-none") : filterWrap.classList.add("jss-d-none");
2693
2693
  });
2694
- filterable.value ? filterWrap.classList.remove("cms-d-none") : filterWrap.classList.add("cms-d-none");;
2694
+ filterable.value ? filterWrap.classList.remove("jss-d-none") : filterWrap.classList.add("jss-d-none");;
2695
2695
  }
2696
2696
  //copia del props
2697
2697
  const menuProps = { ...props };
@@ -2704,8 +2704,8 @@
2704
2704
  : (uiUnwrap(menuProps.state) || "");
2705
2705
  });
2706
2706
  const menu = _.div({
2707
- class: uiClass(["cms-select-menu", "cms-singularity-menu-select", stateMenu, menuProps.class, uiWhen(props.fill, "cms-select-menu-fill")]),
2708
- "data-cms-overlay-portal": "true",
2707
+ class: uiClass(["jss-select-menu", "jss-singularity-menu-select", stateMenu, menuProps.class, uiWhen(props.fill, "jss-select-menu-fill")]),
2708
+ "data-jss-overlay-portal": "true",
2709
2709
  onClick: (e) => e.stopPropagation()
2710
2710
  },
2711
2711
  filterWrap, optionsWrap
@@ -2842,7 +2842,7 @@
2842
2842
  const disabled = !!opt.disabled;
2843
2843
 
2844
2844
  const cls = [
2845
- "cms-select-option",
2845
+ "jss-select-option",
2846
2846
  selected ? "selected" : "",
2847
2847
  disabled ? "disabled" : ""
2848
2848
  ].filter(Boolean).join(" ");
@@ -2879,7 +2879,7 @@
2879
2879
  const filtered = flat.filter(o => o.label.toLowerCase().includes(filter));
2880
2880
  if (filtered.length === 0) {
2881
2881
  const emptyNode = JSswift.ui.renderSlot(slots, "empty", { filter }, props.emptyText || "Nessuna opzione");
2882
- optionsWrap.appendChild(_.div({ class: "cms-select-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2882
+ optionsWrap.appendChild(_.div({ class: "jss-select-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2883
2883
  if (getOpen()) scheduleMenuPosition();
2884
2884
  return;
2885
2885
  }
@@ -2890,7 +2890,7 @@
2890
2890
  for (const item of display) {
2891
2891
  if (item.type === "group") {
2892
2892
  const groupNode = JSswift.ui.renderSlot(slots, "group", { label: item.label }, item.label);
2893
- nodes.push(_.div({ class: "cms-select-group" }, ...renderSlotToArray(null, "default", {}, groupNode)));
2893
+ nodes.push(_.div({ class: "jss-select-group" }, ...renderSlotToArray(null, "default", {}, groupNode)));
2894
2894
  } else {
2895
2895
  hadAnyOption = true;
2896
2896
  pushOption(item);
@@ -2898,7 +2898,7 @@
2898
2898
  }
2899
2899
  if (!hadAnyOption) {
2900
2900
  const emptyNode = JSswift.ui.renderSlot(slots, "empty", { filter }, props.emptyText || "Nessuna opzione");
2901
- optionsWrap.appendChild(_.div({ class: "cms-select-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2901
+ optionsWrap.appendChild(_.div({ class: "jss-select-empty" }, ...renderSlotToArray(null, "default", {}, emptyNode)));
2902
2902
  if (getOpen()) scheduleMenuPosition();
2903
2903
  return;
2904
2904
  }
@@ -2906,7 +2906,7 @@
2906
2906
 
2907
2907
  if (loading) {
2908
2908
  const loadingNode = JSswift.ui.renderSlot(slots, "loading", {}, "Caricamento...");
2909
- optionsWrap.appendChild(_.div({ class: "cms-select-empty" }, ...renderSlotToArray(null, "default", {}, loadingNode)));
2909
+ optionsWrap.appendChild(_.div({ class: "jss-select-empty" }, ...renderSlotToArray(null, "default", {}, loadingNode)));
2910
2910
  if (getOpen()) scheduleMenuPosition();
2911
2911
  return;
2912
2912
  }
@@ -3113,7 +3113,7 @@
3113
3113
  const showFiles = () => uiUnwrap(props.showFiles ?? props.files) !== false;
3114
3114
  const getStatusClass = () => {
3115
3115
  const state = normalizeState(uiUnwrap(props.state) || uiUnwrap(props.status));
3116
- return state ? `cms-state-${state}` : "";
3116
+ return state ? `jss-state-${state}` : "";
3117
3117
  };
3118
3118
  const getFieldName = () => props.fieldName || props.paramName || props.name || "file";
3119
3119
  const getParallel = () => Math.max(1, Number(uiUnwrap(props.parallelUploads ?? props.parallel) || 1));
@@ -3453,7 +3453,7 @@
3453
3453
 
3454
3454
  const input = _.input({
3455
3455
  type: "file",
3456
- class: "cms-upload-input",
3456
+ class: "jss-upload-input",
3457
3457
  name: getFieldName(),
3458
3458
  accept: getAccepted() || null,
3459
3459
  multiple: isMultiple(),
@@ -3464,16 +3464,16 @@
3464
3464
  event.target.value = "";
3465
3465
  }
3466
3466
  });
3467
- const listEl = _.div({ class: "cms-upload-list" });
3468
- const summaryEl = _.div({ class: "cms-upload-summary" });
3469
- const actionsEl = _.div({ class: "cms-upload-actions" });
3467
+ const listEl = _.div({ class: "jss-upload-list" });
3468
+ const summaryEl = _.div({ class: "jss-upload-summary" });
3469
+ const actionsEl = _.div({ class: "jss-upload-actions" });
3470
3470
  let currentStatusClass = getStatusClass();
3471
3471
  const root = _.div({
3472
3472
  class: uiClass([
3473
- "cms-upload",
3474
- "cms-singularity",
3473
+ "jss-upload",
3474
+ "jss-singularity",
3475
3475
  currentStatusClass,
3476
- uiWhen(props.box || props.variant === "box", "cms-upload-box"),
3476
+ uiWhen(props.box || props.variant === "box", "jss-upload-box"),
3477
3477
  uiWhen(props.compact, "is-compact"),
3478
3478
  uiWhen(isFormSubmitMode(), "is-form-mode"),
3479
3479
  uiWhen(!showFiles(), "is-files-hidden"),
@@ -3526,20 +3526,20 @@
3526
3526
  retry: () => retryUpload(item),
3527
3527
  abort: () => abort(item)
3528
3528
  };
3529
- const fallback = _.div({ class: uiClass(["cms-upload-file", `is-${item.status}`]) },
3530
- _.div({ class: "cms-upload-file-icon" }, UI.Icon({ name: item.status === "done" ? "check_circle" : item.status === "error" || item.status === "rejected" ? "error" : "description" })),
3531
- _.div({ class: "cms-upload-file-main" },
3532
- _.div({ class: "cms-upload-file-name" }, ...renderSlotToArray(slots, "fileName", ctx, item.name)),
3533
- _.div({ class: "cms-upload-file-meta" },
3529
+ const fallback = _.div({ class: uiClass(["jss-upload-file", `is-${item.status}`]) },
3530
+ _.div({ class: "jss-upload-file-icon" }, UI.Icon({ name: item.status === "done" ? "check_circle" : item.status === "error" || item.status === "rejected" ? "error" : "description" })),
3531
+ _.div({ class: "jss-upload-file-main" },
3532
+ _.div({ class: "jss-upload-file-name" }, ...renderSlotToArray(slots, "fileName", ctx, item.name)),
3533
+ _.div({ class: "jss-upload-file-meta" },
3534
3534
  ...renderSlotToArray(slots, "fileMeta", ctx, item.error ? String(item.error?.message || item.error) : (item.status === "queued" ? "Queued" : item.status))
3535
3535
  ),
3536
- _.div({ class: "cms-upload-progress", role: "progressbar", "aria-valuemin": "0", "aria-valuemax": "100", "aria-valuenow": String(item.progress || 0) },
3537
- _.div({ class: "cms-upload-progress-bar", style: { width: `${item.progress || 0}%` } })
3536
+ _.div({ class: "jss-upload-progress", role: "progressbar", "aria-valuemin": "0", "aria-valuemax": "100", "aria-valuenow": String(item.progress || 0) },
3537
+ _.div({ class: "jss-upload-progress-bar", style: { width: `${item.progress || 0}%` } })
3538
3538
  )
3539
3539
  ),
3540
- _.div({ class: "cms-upload-file-trailing" },
3541
- _.div({ class: "cms-upload-file-size" }, formatBytes(item.size)),
3542
- _.div({ class: "cms-upload-file-actions" },
3540
+ _.div({ class: "jss-upload-file-trailing" },
3541
+ _.div({ class: "jss-upload-file-size" }, formatBytes(item.size)),
3542
+ _.div({ class: "jss-upload-file-actions" },
3543
3543
  ...renderSlotToArray(slots, "fileActions", ctx, [
3544
3544
  item.status === "uploading" ? UI.Btn({ size: "sm", outline: true, icon: "close", "aria-label": "Cancel", onClick: () => abort(item) }) : null,
3545
3545
  item.status === "error" || item.status === "canceled" ? UI.Btn({ size: "sm", outline: true, icon: "refresh", "aria-label": "Retry", onClick: () => retryUpload(item) }) : null,
@@ -3549,7 +3549,7 @@
3549
3549
  )
3550
3550
  );
3551
3551
  const custom = JSswift.ui.renderSlot(slots, "file", ctx, fallback);
3552
- return _.div({ class: "cms-upload-file-wrap", "data-status": item.status, "data-id": item.id }, ...renderSlotToArray(null, "default", {}, custom));
3552
+ return _.div({ class: "jss-upload-file-wrap", "data-status": item.status, "data-id": item.id }, ...renderSlotToArray(null, "default", {}, custom));
3553
3553
  };
3554
3554
  const render = () => {
3555
3555
  const files = getFiles();
@@ -3559,7 +3559,7 @@
3559
3559
  listEl.hidden = !showFiles();
3560
3560
  if (!files.length) {
3561
3561
  const empty = JSswift.ui.renderSlot(slots, "empty", { api }, props.emptyText || "No files selected");
3562
- listEl.appendChild(_.div({ class: "cms-upload-empty" }, ...renderSlotToArray(null, "default", {}, empty)));
3562
+ listEl.appendChild(_.div({ class: "jss-upload-empty" }, ...renderSlotToArray(null, "default", {}, empty)));
3563
3563
  } else {
3564
3564
  files.forEach((item, index) => listEl.appendChild(renderFile(item, index)));
3565
3565
  }
@@ -3570,9 +3570,9 @@
3570
3570
  const titleNode = JSswift.ui.renderSlot(slots, "title", { api }, props.title || "Upload files");
3571
3571
  const subtitleNode = JSswift.ui.renderSlot(slots, "subtitle", { api }, props.subtitle || (getAccepted() ? `Accepted: ${getAccepted()}` : "Drag files here or browse from your device"));
3572
3572
  const dropzone = _.div({
3573
- class: "cms-upload-dropzone",
3573
+ class: "jss-upload-dropzone",
3574
3574
  onClick: (event) => {
3575
- if (event.target?.closest?.(".cms-upload-actions, .cms-upload-list")) return;
3575
+ if (event.target?.closest?.(".jss-upload-actions, .jss-upload-list")) return;
3576
3576
  if (props.clickable !== false) browse();
3577
3577
  },
3578
3578
  onDragenter: (event) => {
@@ -3599,11 +3599,11 @@
3599
3599
  addFiles(event.dataTransfer?.files || [], { event, source: "drop" });
3600
3600
  }
3601
3601
  },
3602
- _.div({ class: "cms-upload-head" },
3603
- _.div({ class: "cms-upload-icon" }, ...renderSlotToArray(null, "default", {}, iconNode)),
3604
- _.div({ class: "cms-upload-copy" },
3605
- _.div({ class: "cms-upload-title" }, ...renderSlotToArray(null, "default", {}, titleNode)),
3606
- _.div({ class: "cms-upload-subtitle" }, ...renderSlotToArray(null, "default", {}, subtitleNode))
3602
+ _.div({ class: "jss-upload-head" },
3603
+ _.div({ class: "jss-upload-icon" }, ...renderSlotToArray(null, "default", {}, iconNode)),
3604
+ _.div({ class: "jss-upload-copy" },
3605
+ _.div({ class: "jss-upload-title" }, ...renderSlotToArray(null, "default", {}, titleNode)),
3606
+ _.div({ class: "jss-upload-subtitle" }, ...renderSlotToArray(null, "default", {}, subtitleNode))
3607
3607
  ),
3608
3608
  actionsEl
3609
3609
  ),
@@ -3907,8 +3907,8 @@
3907
3907
  const pageFallback = pageSource !== undefined ? pageSource : children;
3908
3908
 
3909
3909
  const cls = uiClass([
3910
- "cms-app",
3911
- "cms-layout",
3910
+ "jss-app",
3911
+ "jss-layout",
3912
3912
  JSswift.uiResponsiveClasses({ mobile: props }, uiResponsiveLayoutRules),
3913
3913
  JSswift.uiResponsiveClasses(props, uiResponsiveLayoutRules),
3914
3914
  props.class
@@ -3947,40 +3947,40 @@
3947
3947
  ? { header: "header", aside: "aside", nav: "nav", page: "main", footer: "footer" }
3948
3948
  : { header: "div", aside: "div", nav: "div", page: "div", footer: "div" };
3949
3949
 
3950
- const shell = _.div({ class: uiClass(["cms-layout-shell-grid", props.shellClass]) });
3950
+ const shell = _.div({ class: uiClass(["jss-layout-shell-grid", props.shellClass]) });
3951
3951
  const headerWrap = _[tags.header]({
3952
- class: uiClass(["cms-layout-section", "cms-layout-header", "header", uiWhen(props.stickyHeader, "sticky"), props.headerClass])
3952
+ class: uiClass(["jss-layout-section", "jss-layout-header", "header", uiWhen(props.stickyHeader, "sticky"), props.headerClass])
3953
3953
  });
3954
3954
  const asideWrap = _[tags.aside]({
3955
- class: uiClass(["cms-layout-section", "cms-layout-aside", "aside", uiWhen(props.stickyAside !== false, "sticky"), props.asideClass]),
3955
+ class: uiClass(["jss-layout-section", "jss-layout-aside", "aside", uiWhen(props.stickyAside !== false, "sticky"), props.asideClass]),
3956
3956
  role: "navigation",
3957
3957
  "aria-hidden": "true"
3958
3958
  });
3959
- const asideContentWrap = _.div({ class: "cms-layout-panel-body cms-layout-aside-body" });
3959
+ const asideContentWrap = _.div({ class: "jss-layout-panel-body jss-layout-aside-body" });
3960
3960
  const asideResizeHandle = _.div({
3961
- class: "cms-layout-resize-handle cms-layout-resize-handle-drawer",
3961
+ class: "jss-layout-resize-handle jss-layout-resize-handle-drawer",
3962
3962
  "aria-hidden": "true"
3963
3963
  });
3964
3964
  asideWrap.appendChild(asideContentWrap);
3965
3965
  asideWrap.appendChild(asideResizeHandle);
3966
3966
  const navWrap = _[tags.nav]({
3967
- class: uiClass(["cms-layout-section", "cms-layout-nav", "nav", uiWhen(props.stickyNav, "sticky"), props.navClass]),
3967
+ class: uiClass(["jss-layout-section", "jss-layout-nav", "nav", uiWhen(props.stickyNav, "sticky"), props.navClass]),
3968
3968
  role: tags.nav === "nav" ? null : "complementary",
3969
3969
  "aria-hidden": "true"
3970
3970
  });
3971
- const navContentWrap = _.div({ class: "cms-layout-panel-body cms-layout-nav-body" });
3971
+ const navContentWrap = _.div({ class: "jss-layout-panel-body jss-layout-nav-body" });
3972
3972
  const navResizeHandle = _.div({
3973
- class: "cms-layout-resize-handle cms-layout-resize-handle-nav",
3973
+ class: "jss-layout-resize-handle jss-layout-resize-handle-nav",
3974
3974
  "aria-hidden": "true"
3975
3975
  });
3976
3976
  navWrap.appendChild(navContentWrap);
3977
3977
  navWrap.appendChild(navResizeHandle);
3978
3978
  const mainWrap = _[tags.page]({
3979
- class: uiClass(["cms-layout-section", "cms-layout-main", "main", props.pageClass]),
3979
+ class: uiClass(["jss-layout-section", "jss-layout-main", "main", props.pageClass]),
3980
3980
  role: tags.page === "main" ? null : "main"
3981
3981
  });
3982
3982
  const footerWrap = _[tags.footer]({
3983
- class: uiClass(["cms-layout-section", "cms-layout-footer", "footer", uiWhen(props.stickyFooter, "sticky"), props.footerClass])
3983
+ class: uiClass(["jss-layout-section", "jss-layout-footer", "footer", uiWhen(props.stickyFooter, "sticky"), props.footerClass])
3984
3984
  });
3985
3985
 
3986
3986
  shell.appendChild(headerWrap);
@@ -3991,7 +3991,7 @@
3991
3991
  root.appendChild(shell);
3992
3992
 
3993
3993
  const overlay = _.div({
3994
- class: uiClass(["cms-aside-overlay", props.overlayClass]),
3994
+ class: uiClass(["jss-aside-overlay", props.overlayClass]),
3995
3995
  onClick: () => {
3996
3996
  if (uiUnwrap(resolveLayoutProp("overlayClose")) === false) return;
3997
3997
  if (getOpen()) setOpen(false);
@@ -4040,29 +4040,29 @@
4040
4040
  return nodes.length > 0;
4041
4041
  };
4042
4042
  const syncLayoutVars = () => {
4043
- root.style.setProperty("--cms-layout-drawer-width", toLayoutCssSize(uiUnwrap(resolveLayoutProp("drawerWidth")) ?? 280, "280px"));
4044
- root.style.setProperty("--cms-layout-nav-width", toLayoutCssSize(uiUnwrap(resolveLayoutProp("navWidth")) ?? uiUnwrap(resolveLayoutProp("asideRightWidth")) ?? 280, "280px"));
4045
- root.style.setProperty("--cms-layout-drawer-peek", toLayoutCssSize(uiUnwrap(resolveLayoutProp("drawerPeek")) ?? 20, "20px"));
4046
- root.style.setProperty("--cms-layout-nav-peek", toLayoutCssSize(uiUnwrap(resolveLayoutProp("navPeek")) ?? uiUnwrap(resolveLayoutProp("asideRightPeek")) ?? 20, "20px"));
4043
+ root.style.setProperty("--jss-layout-drawer-width", toLayoutCssSize(uiUnwrap(resolveLayoutProp("drawerWidth")) ?? 280, "280px"));
4044
+ root.style.setProperty("--jss-layout-nav-width", toLayoutCssSize(uiUnwrap(resolveLayoutProp("navWidth")) ?? uiUnwrap(resolveLayoutProp("asideRightWidth")) ?? 280, "280px"));
4045
+ root.style.setProperty("--jss-layout-drawer-peek", toLayoutCssSize(uiUnwrap(resolveLayoutProp("drawerPeek")) ?? 20, "20px"));
4046
+ root.style.setProperty("--jss-layout-nav-peek", toLayoutCssSize(uiUnwrap(resolveLayoutProp("navPeek")) ?? uiUnwrap(resolveLayoutProp("asideRightPeek")) ?? 20, "20px"));
4047
4047
  const layoutGap = toLayoutCssSize(uiUnwrap(resolveLayoutProp("gap")), null);
4048
- if (layoutGap != null) root.style.setProperty("--cms-layout-gap", layoutGap);
4049
- else root.style.removeProperty("--cms-layout-gap");
4048
+ if (layoutGap != null) root.style.setProperty("--jss-layout-gap", layoutGap);
4049
+ else root.style.removeProperty("--jss-layout-gap");
4050
4050
  const headerOffset = toLayoutCssSize(uiUnwrap(resolveLayoutProp("headerOffset")), null);
4051
4051
  if (headerOffset != null) root.style.setProperty("--layout-header-height", headerOffset);
4052
4052
  const minHeight = toLayoutCssSize(uiUnwrap(resolveLayoutProp("minHeight")), null);
4053
- if (minHeight != null) root.style.setProperty("--cms-layout-min-height", minHeight);
4054
- else root.style.removeProperty("--cms-layout-min-height");
4053
+ if (minHeight != null) root.style.setProperty("--jss-layout-min-height", minHeight);
4054
+ else root.style.removeProperty("--jss-layout-min-height");
4055
4055
  };
4056
4056
  const syncPanelWidths = () => {
4057
4057
  if (getDrawerResizable()) {
4058
4058
  const nextDrawerWidth = clampLayoutWidth(getDrawerWidthPx(), getDrawerMinWidth(), getDrawerMaxWidth());
4059
4059
  if (nextDrawerWidth !== getDrawerWidthPx()) setDrawerWidthPx(nextDrawerWidth);
4060
- root.style.setProperty("--cms-layout-drawer-width", `${nextDrawerWidth}px`);
4060
+ root.style.setProperty("--jss-layout-drawer-width", `${nextDrawerWidth}px`);
4061
4061
  }
4062
4062
  if (getNavResizable()) {
4063
4063
  const nextNavWidth = clampLayoutWidth(getNavWidthPx(), getNavMinWidth(), getNavMaxWidth());
4064
4064
  if (nextNavWidth !== getNavWidthPx()) setNavWidthPx(nextNavWidth);
4065
- root.style.setProperty("--cms-layout-nav-width", `${nextNavWidth}px`);
4065
+ root.style.setProperty("--jss-layout-nav-width", `${nextNavWidth}px`);
4066
4066
  }
4067
4067
  };
4068
4068
  const startResize = (side, event) => {
@@ -4174,15 +4174,15 @@
4174
4174
  root.classList.toggle("nav-side", inlineNavVisible && (navColumn === "left" || navColumn === "right"));
4175
4175
  shell.style.gridTemplateColumns = [
4176
4176
  drawerColumn === "left"
4177
- ? "minmax(0, var(--cms-layout-drawer-width))"
4177
+ ? "minmax(0, var(--jss-layout-drawer-width))"
4178
4178
  : navColumn === "left"
4179
- ? "minmax(0, var(--cms-layout-nav-width))"
4179
+ ? "minmax(0, var(--jss-layout-nav-width))"
4180
4180
  : "0px",
4181
4181
  "minmax(0, 1fr)",
4182
4182
  drawerColumn === "right"
4183
- ? "minmax(0, var(--cms-layout-drawer-width))"
4183
+ ? "minmax(0, var(--jss-layout-drawer-width))"
4184
4184
  : navColumn === "right"
4185
- ? "minmax(0, var(--cms-layout-nav-width))"
4185
+ ? "minmax(0, var(--jss-layout-nav-width))"
4186
4186
  : "0px"
4187
4187
  ].join(" ");
4188
4188
  const defaultAreas = [
@@ -4332,7 +4332,7 @@
4332
4332
  }
4333
4333
  if (typeof fallback === "function") {
4334
4334
  const inlineNames = new Set(["eyebrow", "title", "subtitle"]);
4335
- const host = _[inlineNames.has(name) ? "span" : "div"]({ class: `cms-footer-slot-${name}` });
4335
+ const host = _[inlineNames.has(name) ? "span" : "div"]({ class: `jss-footer-slot-${name}` });
4336
4336
  JSswift.reactive.effect(() => {
4337
4337
  const nextValue = map(fallback(ctx));
4338
4338
  const normalized = flattenSlotValue(JSswift.ui.slot(nextValue));
@@ -4383,33 +4383,33 @@
4383
4383
  const actionNodes = renderPropNodes("actions", rawProps.actions);
4384
4384
 
4385
4385
  const structuredBody = _.div(
4386
- { class: uiClass(["cms-footer-body", rawProps.bodyClass, rawProps.centerClass]) },
4386
+ { class: uiClass(["jss-footer-body", rawProps.bodyClass, rawProps.centerClass]) },
4387
4387
  _.div(
4388
- { class: "cms-footer-heading" },
4389
- iconNodes.length ? _.div({ class: "cms-footer-icon" }, ...iconNodes) : null,
4388
+ { class: "jss-footer-heading" },
4389
+ iconNodes.length ? _.div({ class: "jss-footer-icon" }, ...iconNodes) : null,
4390
4390
  _.div(
4391
- { class: "cms-footer-copy" },
4392
- eyebrowNodes.length ? _.div({ class: uiClass(["cms-footer-eyebrow", rawProps.eyebrowClass]) }, ...eyebrowNodes) : null,
4393
- titleNodes.length ? _.div({ class: uiClass(["cms-footer-title", rawProps.titleClass]) }, ...titleNodes) : null,
4394
- subtitleNodes.length ? _.div({ class: uiClass(["cms-footer-subtitle", rawProps.subtitleClass]) }, ...subtitleNodes) : null,
4395
- contentNodes.length ? _.div({ class: uiClass(["cms-footer-content", rawProps.contentClass]) }, ...contentNodes) : null
4391
+ { class: "jss-footer-copy" },
4392
+ eyebrowNodes.length ? _.div({ class: uiClass(["jss-footer-eyebrow", rawProps.eyebrowClass]) }, ...eyebrowNodes) : null,
4393
+ titleNodes.length ? _.div({ class: uiClass(["jss-footer-title", rawProps.titleClass]) }, ...titleNodes) : null,
4394
+ subtitleNodes.length ? _.div({ class: uiClass(["jss-footer-subtitle", rawProps.subtitleClass]) }, ...subtitleNodes) : null,
4395
+ contentNodes.length ? _.div({ class: uiClass(["jss-footer-content", rawProps.contentClass]) }, ...contentNodes) : null
4396
4396
  ),
4397
- metaNodes.length ? _.div({ class: uiClass(["cms-footer-meta", rawProps.metaClass]) }, ...metaNodes) : null
4397
+ metaNodes.length ? _.div({ class: uiClass(["jss-footer-meta", rawProps.metaClass]) }, ...metaNodes) : null
4398
4398
  )
4399
4399
  );
4400
4400
 
4401
4401
  const mainChildren = [];
4402
4402
  if (customBodyNodes.length) {
4403
- mainChildren.push(_.div({ class: uiClass(["cms-footer-body", rawProps.bodyClass, rawProps.centerClass]) }, ...customBodyNodes));
4403
+ mainChildren.push(_.div({ class: uiClass(["jss-footer-body", rawProps.bodyClass, rawProps.centerClass]) }, ...customBodyNodes));
4404
4404
  } else if (iconNodes.length || eyebrowNodes.length || titleNodes.length || subtitleNodes.length || contentNodes.length || metaNodes.length) {
4405
4405
  mainChildren.push(structuredBody);
4406
4406
  }
4407
4407
  if (endNodes.length || actionNodes.length) {
4408
4408
  mainChildren.push(
4409
4409
  _.div(
4410
- { class: uiClass(["cms-footer-end", rawProps.endClass]) },
4410
+ { class: uiClass(["jss-footer-end", rawProps.endClass]) },
4411
4411
  ...endNodes,
4412
- ...(actionNodes.length ? [_.div({ class: uiClass(["cms-footer-actions", rawProps.actionsClass]) }, ...actionNodes)] : [])
4412
+ ...(actionNodes.length ? [_.div({ class: uiClass(["jss-footer-actions", rawProps.actionsClass]) }, ...actionNodes)] : [])
4413
4413
  )
4414
4414
  );
4415
4415
  }
@@ -4422,9 +4422,9 @@
4422
4422
  "subtitleClass", "title", "titleClass", "wrap", "justify"
4423
4423
  ]);
4424
4424
  p.class = uiClass([
4425
- "cms-panel",
4426
- "cms-footer",
4427
- "cms-singularity",
4425
+ "jss-panel",
4426
+ "jss-footer",
4427
+ "jss-singularity",
4428
4428
  uiWhen(rawProps.sticky, "sticky"),
4429
4429
  uiWhen(rawProps.dense, "dense"),
4430
4430
  uiWhen(rawProps.elevated, "elevated"),
@@ -4438,14 +4438,14 @@
4438
4438
  if (justify != null) p.style.justifyContent = justify;
4439
4439
  const wrap = uiStyleValue(rawProps.wrap, (v) => v ? "wrap" : "nowrap");
4440
4440
  if (wrap != null) p.style.flexWrap = wrap;
4441
- if (rawProps.gap != null) p.style["--cms-footer-gap"] = toCssSize(uiUnwrap(rawProps.gap));
4441
+ if (rawProps.gap != null) p.style["--jss-footer-gap"] = toCssSize(uiUnwrap(rawProps.gap));
4442
4442
  if (rawProps.minHeight != null) p.style.minHeight = toCssSize(uiUnwrap(rawProps.minHeight));
4443
4443
  JSswift.uiApplyResponsiveProps(p, rawProps, JSswift.uiResponsiveStyleRules);
4444
4444
 
4445
4445
  const el = _.footer(
4446
4446
  p,
4447
- ...(startNodes.length ? [_.div({ class: uiClass(["cms-footer-start", rawProps.startClass]) }, ...startNodes)] : []),
4448
- ...(mainChildren.length ? [_.div({ class: "cms-footer-main" }, ...mainChildren)] : [])
4447
+ ...(startNodes.length ? [_.div({ class: uiClass(["jss-footer-start", rawProps.startClass]) }, ...startNodes)] : []),
4448
+ ...(mainChildren.length ? [_.div({ class: "jss-footer-main" }, ...mainChildren)] : [])
4449
4449
  );
4450
4450
 
4451
4451
  setPropertyProps(el, rawProps);
@@ -4473,7 +4473,7 @@
4473
4473
 
4474
4474
  const toCssSize = (v) => {
4475
4475
  if (typeof v === "number") return `${v}px`;
4476
- if (typeof v === "string" && JSswift.uiSizes?.includes(v)) return `var(--cms-size-${v})`;
4476
+ if (typeof v === "string" && JSswift.uiSizes?.includes(v)) return `var(--jss-size-${v})`;
4477
4477
  return String(v);
4478
4478
  };
4479
4479
 
@@ -4514,7 +4514,7 @@
4514
4514
  );
4515
4515
 
4516
4516
  const cls = uiClass([
4517
- "cms-toolbar",
4517
+ "jss-toolbar",
4518
4518
  uiWhen(hasStructuredContent, "structured"),
4519
4519
  uiWhen(props.dense, "dense"),
4520
4520
  uiWhen(props.divider, "divider"),
@@ -4536,10 +4536,10 @@
4536
4536
  const align = uiStyleValue(props.align);
4537
4537
  const justify = uiStyleValue(props.justify);
4538
4538
  const wrap = uiStyleValue(props.wrap, (v) => typeof v === "boolean" ? (v ? "wrap" : "nowrap") : String(v), "wrap");
4539
- const gap = uiStyleValue(props.gap, toCssSize, "var(--cms-s-md)");
4539
+ const gap = uiStyleValue(props.gap, toCssSize, "var(--jss-s-md)");
4540
4540
  const hasResponsiveGap = uiHasResponsiveOverride(props, "gap");
4541
- style["--cms-toolbar-gap"] = gap != null ? gap : "var(--cms-s-md)";
4542
- if (!hasResponsiveGap) style.gap = style.gap || "var(--cms-toolbar-gap)";
4541
+ style["--jss-toolbar-gap"] = gap != null ? gap : "var(--jss-s-md)";
4542
+ if (!hasResponsiveGap) style.gap = style.gap || "var(--jss-toolbar-gap)";
4543
4543
  const sizePadding = {
4544
4544
  xxs: "4px 6px",
4545
4545
  xs: "6px 8px",
@@ -4577,7 +4577,7 @@
4577
4577
  const regionStyle = {
4578
4578
  display: "flex",
4579
4579
  alignItems: "inherit",
4580
- gap: "var(--cms-toolbar-gap)",
4580
+ gap: "var(--jss-toolbar-gap)",
4581
4581
  flexWrap: "inherit",
4582
4582
  minWidth: 0
4583
4583
  };
@@ -4588,30 +4588,30 @@
4588
4588
 
4589
4589
  const copyNode = (metaNodes.length || titleNodes.length || subtitleNodes.length)
4590
4590
  ? _.div(
4591
- { class: uiClass(["cms-toolbar-copy", props.copyClass]) },
4592
- metaNodes.length ? _.div({ class: uiClass(["cms-toolbar-meta", props.metaClass]) }, ...metaNodes) : null,
4593
- titleNodes.length ? _.div({ class: uiClass(["cms-toolbar-title", props.titleClass]) }, ...titleNodes) : null,
4594
- subtitleNodes.length ? _.div({ class: uiClass(["cms-toolbar-subtitle", props.subtitleClass]) }, ...subtitleNodes) : null
4591
+ { class: uiClass(["jss-toolbar-copy", props.copyClass]) },
4592
+ metaNodes.length ? _.div({ class: uiClass(["jss-toolbar-meta", props.metaClass]) }, ...metaNodes) : null,
4593
+ titleNodes.length ? _.div({ class: uiClass(["jss-toolbar-title", props.titleClass]) }, ...titleNodes) : null,
4594
+ subtitleNodes.length ? _.div({ class: uiClass(["jss-toolbar-subtitle", props.subtitleClass]) }, ...subtitleNodes) : null
4595
4595
  )
4596
4596
  : null;
4597
4597
 
4598
4598
  const hasMainContent = !!(startNodes.length || copyNode || centerNodes.length || endNodes.length);
4599
4599
  const parts = [
4600
4600
  beforeNodes.length
4601
- ? _.div({ class: uiClass(["cms-toolbar-before", props.beforeClass]), style: { ...regionStyle } }, ...beforeNodes)
4601
+ ? _.div({ class: uiClass(["jss-toolbar-before", props.beforeClass]), style: { ...regionStyle } }, ...beforeNodes)
4602
4602
  : null,
4603
4603
  hasMainContent
4604
4604
  ? _.div(
4605
- { class: "cms-toolbar-main", style: mainStyle },
4605
+ { class: "jss-toolbar-main", style: mainStyle },
4606
4606
  startNodes.length
4607
- ? _.div({ class: uiClass(["cms-toolbar-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
4607
+ ? _.div({ class: uiClass(["jss-toolbar-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
4608
4608
  : null,
4609
4609
  (copyNode || centerNodes.length)
4610
- ? _.div({ class: uiClass(["cms-toolbar-center", bodyClass]), style: { ...regionStyle, flex: "1 1 240px" } }, copyNode, ...centerNodes)
4610
+ ? _.div({ class: uiClass(["jss-toolbar-center", bodyClass]), style: { ...regionStyle, flex: "1 1 240px" } }, copyNode, ...centerNodes)
4611
4611
  : null,
4612
4612
  endNodes.length
4613
4613
  ? _.div({
4614
- class: uiClass(["cms-toolbar-end", props.endClass]),
4614
+ class: uiClass(["jss-toolbar-end", props.endClass]),
4615
4615
  style: {
4616
4616
  ...regionStyle,
4617
4617
  justifyContent: "flex-end",
@@ -4622,7 +4622,7 @@
4622
4622
  )
4623
4623
  : null,
4624
4624
  afterNodes.length
4625
- ? _.div({ class: uiClass(["cms-toolbar-after", props.afterClass]), style: { ...regionStyle } }, ...afterNodes)
4625
+ ? _.div({ class: uiClass(["jss-toolbar-after", props.afterClass]), style: { ...regionStyle } }, ...afterNodes)
4626
4626
  : null
4627
4627
  ].filter(Boolean);
4628
4628
 
@@ -4633,7 +4633,7 @@
4633
4633
 
4634
4634
  // Esempio: JSswift.ui.Toolbar({}, JSswift.ui.Btn({}, "Azione"))
4635
4635
 
4636
- const isGridColNode = (value) => value && value.nodeType === 1 && value.classList?.contains("cms-grid-col");
4636
+ const isGridColNode = (value) => value && value.nodeType === 1 && value.classList?.contains("jss-grid-col");
4637
4637
 
4638
4638
  UI.Grid = (...args) => {
4639
4639
  const { props: rawProps, children } = JSswift.uiNormalizeArgs(args);
@@ -4712,12 +4712,12 @@
4712
4712
  }
4713
4713
 
4714
4714
  const cls = uiClass([
4715
- "cms-grid",
4715
+ "jss-grid",
4716
4716
  JSswift.uiResponsiveClasses({ mobile: rawProps }, uiResponsiveGridRules),
4717
4717
  JSswift.uiResponsiveClasses(rawProps, uiResponsiveGridRules),
4718
4718
  uiWhen(rawProps.dense, "dense"),
4719
- uiWhen(rawProps.inline, "cms-grid-inline"),
4720
- uiWhen(rawProps.debug, "cms-grid-debug"),
4719
+ uiWhen(rawProps.inline, "jss-grid-inline"),
4720
+ uiWhen(rawProps.debug, "jss-grid-debug"),
4721
4721
  rawProps.class
4722
4722
  ]);
4723
4723
 
@@ -4741,7 +4741,7 @@
4741
4741
  }
4742
4742
  const gap = uiStyleValue(rawProps.gap, toCssSize);
4743
4743
  if (gap != null && !uiHasResponsiveOverride(rawProps, "gap")) {
4744
- style["--cms-grid-gap"] = gap;
4744
+ style["--jss-grid-gap"] = gap;
4745
4745
  style.gap = gap;
4746
4746
  }
4747
4747
  const rowGap = uiStyleValue(rawProps.rowGap, toCssSize);
@@ -4829,7 +4829,7 @@
4829
4829
  };
4830
4830
  const resolveSpaceValue = (value) => {
4831
4831
  if (value == null || value === false || value === "") return "";
4832
- if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--cms-s-${value})`;
4832
+ if (typeof value === "string" && JSswift.uiSizes?.includes(value)) return `var(--jss-s-${value})`;
4833
4833
  return toCssSize(value);
4834
4834
  };
4835
4835
  const resolveSizeValue = (value) => {
@@ -4956,18 +4956,18 @@
4956
4956
  uiUnwrap(props.gradient) || uiUnwrap(props.textGradient) || uiUnwrap(props.lightShadow) ||
4957
4957
  uiUnwrap(props.radius)
4958
4958
  );
4959
- return active ? ["cms-clear-set", "cms-singularity", "cms-grid-col-surface"] : [];
4959
+ return active ? ["jss-clear-set", "jss-singularity", "jss-grid-col-surface"] : [];
4960
4960
  });
4961
4961
  const cls = uiClass([
4962
- "cms-grid-col",
4962
+ "jss-grid-col",
4963
4963
  surfaceClasses,
4964
4964
  JSswift.uiResponsiveClasses({ mobile: props }, uiResponsiveGridColRules),
4965
4965
  JSswift.uiResponsiveClasses(props, uiResponsiveGridColRules),
4966
- uiWhen(props.panel, "cms-grid-col-panel"),
4966
+ uiWhen(props.panel, "jss-grid-col-panel"),
4967
4967
  uiWhen(props.auto, "is-auto"),
4968
- uiWhen(useStackLayout, "cms-grid-col-stack"),
4969
- uiWhen(props.inline, "cms-grid-col-inline"),
4970
- uiWhen(centerContent, "cms-grid-col-center"),
4968
+ uiWhen(useStackLayout, "jss-grid-col-stack"),
4969
+ uiWhen(props.inline, "jss-grid-col-inline"),
4970
+ uiWhen(centerContent, "jss-grid-col-center"),
4971
4971
  props.class
4972
4972
  ]);
4973
4973
 
@@ -4989,16 +4989,16 @@
4989
4989
  ]);
4990
4990
  p.class = cls;
4991
4991
 
4992
- if (style["--cms-grid-col-base"] == null) style["--cms-grid-col-base"] = "auto";
4993
- if (style["--cms-grid-col-tablet"] == null) style["--cms-grid-col-tablet"] = "var(--cms-grid-col-base, auto)";
4994
- if (style["--cms-grid-col-pc"] == null) style["--cms-grid-col-pc"] = "var(--cms-grid-col-tablet, var(--cms-grid-col-base, auto))";
4995
- if (uiUnwrap(props.auto) === true) style["--cms-grid-col-base"] = "auto";
4996
- else if (span != null) style["--cms-grid-col-base"] = span;
4997
- if (sm != null) style["--cms-grid-col-sm"] = sm;
4998
- if (md != null) style["--cms-grid-col-md"] = md;
4999
- if (lg != null) style["--cms-grid-col-lg"] = lg;
5000
- if (tabletSpan != null) style["--cms-grid-col-tablet"] = tabletSpan;
5001
- if (pcSpan != null) style["--cms-grid-col-pc"] = pcSpan;
4992
+ if (style["--jss-grid-col-base"] == null) style["--jss-grid-col-base"] = "auto";
4993
+ if (style["--jss-grid-col-tablet"] == null) style["--jss-grid-col-tablet"] = "var(--jss-grid-col-base, auto)";
4994
+ if (style["--jss-grid-col-pc"] == null) style["--jss-grid-col-pc"] = "var(--jss-grid-col-tablet, var(--jss-grid-col-base, auto))";
4995
+ if (uiUnwrap(props.auto) === true) style["--jss-grid-col-base"] = "auto";
4996
+ else if (span != null) style["--jss-grid-col-base"] = span;
4997
+ if (sm != null) style["--jss-grid-col-sm"] = sm;
4998
+ if (md != null) style["--jss-grid-col-md"] = md;
4999
+ if (lg != null) style["--jss-grid-col-lg"] = lg;
5000
+ if (tabletSpan != null) style["--jss-grid-col-tablet"] = tabletSpan;
5001
+ if (pcSpan != null) style["--jss-grid-col-pc"] = pcSpan;
5002
5002
  if (rowSpan != null) style.gridRow = rowSpan;
5003
5003
  else if (row != null) style.gridRow = row;
5004
5004
  if (area != null) style.gridArea = area;
@@ -5065,19 +5065,19 @@
5065
5065
  const parts = [
5066
5066
  startNodes.length
5067
5067
  ? _.div({
5068
- class: uiClass(["cms-grid-col-start", props.startClass, props.topClass, props.headerClass]),
5068
+ class: uiClass(["jss-grid-col-start", props.startClass, props.topClass, props.headerClass]),
5069
5069
  style: { ...sectionStyle }
5070
5070
  }, ...startNodes)
5071
5071
  : null,
5072
5072
  bodyNodes.length
5073
5073
  ? _.div({
5074
- class: uiClass(["cms-grid-col-body", props.bodyClass, props.contentClass]),
5074
+ class: uiClass(["jss-grid-col-body", props.bodyClass, props.contentClass]),
5075
5075
  style: { ...sectionStyle, flex: "1 1 auto" }
5076
5076
  }, ...bodyNodes)
5077
5077
  : null,
5078
5078
  endNodes.length
5079
5079
  ? _.div({
5080
- class: uiClass(["cms-grid-col-end", props.endClass, props.bottomClass, props.footerClass]),
5080
+ class: uiClass(["jss-grid-col-end", props.endClass, props.bottomClass, props.footerClass]),
5081
5081
  style: { ...sectionStyle }
5082
5082
  }, ...endNodes)
5083
5083
  : null