@jsswift/ui 1.0.54 → 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.
- package/dist/css/animation.css +36 -36
- package/dist/css/base.css +374 -374
- package/dist/css/docs.css +54 -54
- package/dist/css/fonts-nunito.css +2 -2
- package/dist/css/min-ui.css +1 -1
- package/dist/css/responsive-base.css +549 -549
- package/dist/css/responsive.css +3225 -3225
- package/dist/css/ui-components.css +2902 -2930
- package/dist/css/ui-light.css +3853 -3881
- package/dist/css/ui-light.min.css +1 -1
- package/dist/css/ui.css +6530 -6558
- package/dist/css/ui.min.css +1 -1
- package/dist/min-ui.js +12 -12
- package/dist/ui.js +4354 -9379
- package/dist/ui.min.js +12 -12
- package/package.json +2 -2
- package/src/00-bootstrap.js +305 -305
- package/src/01-foundation-helpers.js +328 -325
- package/src/10-primitives-layout.js +242 -242
- package/src/20-display-content.js +76 -76
- package/src/21-list-content.js +21 -21
- package/src/22-banner-content.js +376 -376
- package/src/23-tooltip.js +9 -9
- package/src/31-form-advanced.js +141 -141
- package/src/40-navigation.js +81 -81
- package/src/41-tab-panel.js +37 -37
- package/src/50-feedback.js +52 -52
- package/src/51-feedback-service.js +166 -166
- package/src/60-shell-app.js +1082 -1082
- package/src/61-form-service.js +5 -5
- package/src/70-dialog.js +34 -34
- package/src/71-menu-overlays.js +73 -73
- package/src/80-data.js +38 -38
- package/src/css/animation.css +36 -36
- package/src/css/base.css +374 -374
- package/src/css/docs.css +54 -54
- package/src/css/fonts-nunito.css +2 -2
- package/src/css/responsive.css +3225 -3225
- 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(--
|
|
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(--
|
|
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
|
-
"
|
|
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(["
|
|
206
|
+
? _.div({ class: uiClass(["jss-row-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
|
|
207
207
|
: null,
|
|
208
208
|
bodyNodes.length
|
|
209
|
-
? _.div({ class: uiClass(["
|
|
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(["
|
|
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(--
|
|
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 === "
|
|
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 "
|
|
387
|
+
if (uiUnwrap(rawProps.auto)) return "jss-col-auto";
|
|
388
388
|
const spanSource = hasOwn("span") ? rawProps.span : rawProps.col;
|
|
389
|
-
return resolveSpanClass(spanSource, "
|
|
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
|
-
"
|
|
499
|
+
"jss-col",
|
|
500
500
|
baseColClass,
|
|
501
|
-
uiComputed(rawProps.sm, () => resolveSpanClass(rawProps.sm, "
|
|
502
|
-
uiComputed(rawProps.md, () => resolveSpanClass(rawProps.md, "
|
|
503
|
-
uiComputed(rawProps.lg, () => resolveSpanClass(rawProps.lg, "
|
|
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, "
|
|
507
|
-
uiWhen(rawProps.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(["
|
|
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(["
|
|
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(["
|
|
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(["
|
|
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(--
|
|
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: `
|
|
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("--
|
|
703
|
-
assignStyle("--
|
|
704
|
-
assignStyle("--
|
|
705
|
-
assignStyle("--
|
|
706
|
-
assignStyle("--
|
|
707
|
-
assignStyle("--
|
|
708
|
-
assignStyle("--
|
|
709
|
-
assignStyle("--
|
|
710
|
-
assignStyle("--
|
|
711
|
-
assignStyle("--
|
|
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
|
-
"
|
|
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(["
|
|
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(["
|
|
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(["
|
|
741
|
+
{ class: uiClass(["jss-container-body", hasStructuredLayout ? layoutClass : "", rawProps.bodyClass]) },
|
|
742
742
|
createSection("start", startNodes, rawProps.startClass),
|
|
743
|
-
contentNodes.length ? _.div({ class: uiClass(["
|
|
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(`
|
|
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(["
|
|
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(["
|
|
837
|
+
? _.div({ class: uiClass(["jss-card-identifier", rawProps.identifierClass]) }, ...identifierNodes)
|
|
838
838
|
: null;
|
|
839
839
|
const generatedCover = coverNodes.length
|
|
840
|
-
? _.div({ class: uiClass(["
|
|
840
|
+
? _.div({ class: uiClass(["jss-card-cover", rawProps.coverClass]) }, ...coverNodes)
|
|
841
841
|
: null;
|
|
842
842
|
const generatedMedia = mediaNodes.length
|
|
843
|
-
? _.div({ class: uiClass(["
|
|
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(["
|
|
849
|
+
{ class: uiClass(["jss-card-header", rawProps.headerClass]) },
|
|
850
850
|
_.div(
|
|
851
|
-
{ class: "
|
|
852
|
-
iconNodes.length ? _.div({ class: "
|
|
851
|
+
{ class: "jss-card-head" },
|
|
852
|
+
iconNodes.length ? _.div({ class: "jss-card-icon" }, ...iconNodes) : null,
|
|
853
853
|
_.div(
|
|
854
|
-
{ class: "
|
|
855
|
-
eyebrowNodes.length ? _.div({ class: uiClass(["
|
|
856
|
-
titleNodes.length ? _.div({ class: uiClass(["
|
|
857
|
-
subtitleNodes.length ? _.div({ class: uiClass(["
|
|
858
|
-
headerNodes.length ? _.div({ class: uiClass(["
|
|
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(["
|
|
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(["
|
|
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(["
|
|
873
|
+
{ class: uiClass(["jss-card-footer", rawProps.footerClass]) },
|
|
874
874
|
...footerNodes,
|
|
875
|
-
mergedActionNodes.length ? _.div({ class: "
|
|
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)) ? "
|
|
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
|
-
"
|
|
896
|
-
"
|
|
897
|
-
'
|
|
898
|
-
"
|
|
899
|
-
uiWhen(rawProps.flat, "
|
|
900
|
-
uiWhen(rawProps.dense, "
|
|
901
|
-
uiWhen(hasIdentifier, "
|
|
902
|
-
uiWhen(hasTopVisual, "
|
|
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["--
|
|
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(["
|
|
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: "
|
|
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: "
|
|
1015
|
-
const contentNode = _.span({ class: "
|
|
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: "
|
|
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("--
|
|
1038
|
-
btn.style.setProperty("--
|
|
1039
|
-
btn.classList.remove("
|
|
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("
|
|
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(["
|
|
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: "
|
|
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: "
|
|
1143
|
+
? _.div({ class: "jss-control" }, ...controlSlot)
|
|
1144
1144
|
: controlSlot;
|
|
1145
1145
|
} else {
|
|
1146
|
-
control = _.div({ class: "
|
|
1146
|
+
control = _.div({ class: "jss-control" });
|
|
1147
1147
|
|
|
1148
1148
|
// left addon
|
|
1149
|
-
const left = _.div({ class: "
|
|
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: "
|
|
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(["
|
|
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: "
|
|
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("
|
|
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: "
|
|
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: "
|
|
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("
|
|
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: "
|
|
1239
|
-
{ key: "warning", value: resolveValue(props.warning), slot: "warning", className: "
|
|
1240
|
-
{ key: "success", value: resolveValue(props.success), slot: "success", className: "
|
|
1241
|
-
{ key: "note", value: resolveValue(props.note), slot: "note", className: "
|
|
1242
|
-
{ key: "hint", value: resolveValue(props.hint), slot: "hint", className: "
|
|
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(["
|
|
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 !== "
|
|
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(["
|
|
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 !== "
|
|
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(["
|
|
1662
|
+
wrapClass: uiClass(["jss-textarea-field", props.wrapClass])
|
|
1663
1663
|
};
|
|
1664
1664
|
const textarea = _.textarea({
|
|
1665
|
-
class: uiClass(["
|
|
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 = `
|
|
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: "
|
|
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: "
|
|
2032
|
-
_.div({ class: "
|
|
2033
|
-
description ? _.div({ class: "
|
|
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(["
|
|
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: "
|
|
2128
|
+
class: "jss-search-results",
|
|
2129
2129
|
role: "listbox"
|
|
2130
2130
|
});
|
|
2131
2131
|
const menu = _.div({
|
|
2132
|
-
class: uiClass(["
|
|
2133
|
-
"data-
|
|
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(["
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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(["
|
|
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(["
|
|
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(["
|
|
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(["
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
2657
|
+
const filterWrap = _.div({ class: "jss-select-filter jss-d-none" });
|
|
2658
2658
|
let filterInput = null;
|
|
2659
2659
|
const defaultFilterInput = _.input({
|
|
2660
|
-
class: "
|
|
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("
|
|
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("
|
|
2692
|
+
v ? filterWrap.classList.remove("jss-d-none") : filterWrap.classList.add("jss-d-none");
|
|
2693
2693
|
});
|
|
2694
|
-
filterable.value ? filterWrap.classList.remove("
|
|
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(["
|
|
2708
|
-
"data-
|
|
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
|
-
"
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
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 ? `
|
|
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: "
|
|
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: "
|
|
3468
|
-
const summaryEl = _.div({ class: "
|
|
3469
|
-
const actionsEl = _.div({ class: "
|
|
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
|
-
"
|
|
3474
|
-
"
|
|
3473
|
+
"jss-upload",
|
|
3474
|
+
"jss-singularity",
|
|
3475
3475
|
currentStatusClass,
|
|
3476
|
-
uiWhen(props.box || props.variant === "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(["
|
|
3530
|
-
_.div({ class: "
|
|
3531
|
-
_.div({ class: "
|
|
3532
|
-
_.div({ class: "
|
|
3533
|
-
_.div({ class: "
|
|
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: "
|
|
3537
|
-
_.div({ class: "
|
|
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: "
|
|
3541
|
-
_.div({ class: "
|
|
3542
|
-
_.div({ class: "
|
|
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: "
|
|
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: "
|
|
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: "
|
|
3573
|
+
class: "jss-upload-dropzone",
|
|
3574
3574
|
onClick: (event) => {
|
|
3575
|
-
if (event.target?.closest?.(".
|
|
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: "
|
|
3603
|
-
_.div({ class: "
|
|
3604
|
-
_.div({ class: "
|
|
3605
|
-
_.div({ class: "
|
|
3606
|
-
_.div({ class: "
|
|
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
|
-
"
|
|
3911
|
-
"
|
|
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(["
|
|
3950
|
+
const shell = _.div({ class: uiClass(["jss-layout-shell-grid", props.shellClass]) });
|
|
3951
3951
|
const headerWrap = _[tags.header]({
|
|
3952
|
-
class: uiClass(["
|
|
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(["
|
|
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: "
|
|
3959
|
+
const asideContentWrap = _.div({ class: "jss-layout-panel-body jss-layout-aside-body" });
|
|
3960
3960
|
const asideResizeHandle = _.div({
|
|
3961
|
-
class: "
|
|
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(["
|
|
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: "
|
|
3971
|
+
const navContentWrap = _.div({ class: "jss-layout-panel-body jss-layout-nav-body" });
|
|
3972
3972
|
const navResizeHandle = _.div({
|
|
3973
|
-
class: "
|
|
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(["
|
|
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(["
|
|
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(["
|
|
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("--
|
|
4044
|
-
root.style.setProperty("--
|
|
4045
|
-
root.style.setProperty("--
|
|
4046
|
-
root.style.setProperty("--
|
|
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("--
|
|
4049
|
-
else root.style.removeProperty("--
|
|
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("--
|
|
4054
|
-
else root.style.removeProperty("--
|
|
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("--
|
|
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("--
|
|
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(--
|
|
4177
|
+
? "minmax(0, var(--jss-layout-drawer-width))"
|
|
4178
4178
|
: navColumn === "left"
|
|
4179
|
-
? "minmax(0, var(--
|
|
4179
|
+
? "minmax(0, var(--jss-layout-nav-width))"
|
|
4180
4180
|
: "0px",
|
|
4181
4181
|
"minmax(0, 1fr)",
|
|
4182
4182
|
drawerColumn === "right"
|
|
4183
|
-
? "minmax(0, var(--
|
|
4183
|
+
? "minmax(0, var(--jss-layout-drawer-width))"
|
|
4184
4184
|
: navColumn === "right"
|
|
4185
|
-
? "minmax(0, var(--
|
|
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: `
|
|
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(["
|
|
4386
|
+
{ class: uiClass(["jss-footer-body", rawProps.bodyClass, rawProps.centerClass]) },
|
|
4387
4387
|
_.div(
|
|
4388
|
-
{ class: "
|
|
4389
|
-
iconNodes.length ? _.div({ class: "
|
|
4388
|
+
{ class: "jss-footer-heading" },
|
|
4389
|
+
iconNodes.length ? _.div({ class: "jss-footer-icon" }, ...iconNodes) : null,
|
|
4390
4390
|
_.div(
|
|
4391
|
-
{ class: "
|
|
4392
|
-
eyebrowNodes.length ? _.div({ class: uiClass(["
|
|
4393
|
-
titleNodes.length ? _.div({ class: uiClass(["
|
|
4394
|
-
subtitleNodes.length ? _.div({ class: uiClass(["
|
|
4395
|
-
contentNodes.length ? _.div({ class: uiClass(["
|
|
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(["
|
|
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(["
|
|
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(["
|
|
4410
|
+
{ class: uiClass(["jss-footer-end", rawProps.endClass]) },
|
|
4411
4411
|
...endNodes,
|
|
4412
|
-
...(actionNodes.length ? [_.div({ class: uiClass(["
|
|
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
|
-
"
|
|
4426
|
-
"
|
|
4427
|
-
"
|
|
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["--
|
|
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(["
|
|
4448
|
-
...(mainChildren.length ? [_.div({ class: "
|
|
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(--
|
|
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
|
-
"
|
|
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(--
|
|
4539
|
+
const gap = uiStyleValue(props.gap, toCssSize, "var(--jss-s-md)");
|
|
4540
4540
|
const hasResponsiveGap = uiHasResponsiveOverride(props, "gap");
|
|
4541
|
-
style["--
|
|
4542
|
-
if (!hasResponsiveGap) style.gap = style.gap || "var(--
|
|
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(--
|
|
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(["
|
|
4592
|
-
metaNodes.length ? _.div({ class: uiClass(["
|
|
4593
|
-
titleNodes.length ? _.div({ class: uiClass(["
|
|
4594
|
-
subtitleNodes.length ? _.div({ class: uiClass(["
|
|
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(["
|
|
4601
|
+
? _.div({ class: uiClass(["jss-toolbar-before", props.beforeClass]), style: { ...regionStyle } }, ...beforeNodes)
|
|
4602
4602
|
: null,
|
|
4603
4603
|
hasMainContent
|
|
4604
4604
|
? _.div(
|
|
4605
|
-
{ class: "
|
|
4605
|
+
{ class: "jss-toolbar-main", style: mainStyle },
|
|
4606
4606
|
startNodes.length
|
|
4607
|
-
? _.div({ class: uiClass(["
|
|
4607
|
+
? _.div({ class: uiClass(["jss-toolbar-start", props.startClass]), style: { ...regionStyle } }, ...startNodes)
|
|
4608
4608
|
: null,
|
|
4609
4609
|
(copyNode || centerNodes.length)
|
|
4610
|
-
? _.div({ class: uiClass(["
|
|
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(["
|
|
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(["
|
|
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("
|
|
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
|
-
"
|
|
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, "
|
|
4720
|
-
uiWhen(rawProps.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["--
|
|
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(--
|
|
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 ? ["
|
|
4959
|
+
return active ? ["jss-clear-set", "jss-singularity", "jss-grid-col-surface"] : [];
|
|
4960
4960
|
});
|
|
4961
4961
|
const cls = uiClass([
|
|
4962
|
-
"
|
|
4962
|
+
"jss-grid-col",
|
|
4963
4963
|
surfaceClasses,
|
|
4964
4964
|
JSswift.uiResponsiveClasses({ mobile: props }, uiResponsiveGridColRules),
|
|
4965
4965
|
JSswift.uiResponsiveClasses(props, uiResponsiveGridColRules),
|
|
4966
|
-
uiWhen(props.panel, "
|
|
4966
|
+
uiWhen(props.panel, "jss-grid-col-panel"),
|
|
4967
4967
|
uiWhen(props.auto, "is-auto"),
|
|
4968
|
-
uiWhen(useStackLayout, "
|
|
4969
|
-
uiWhen(props.inline, "
|
|
4970
|
-
uiWhen(centerContent, "
|
|
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["--
|
|
4993
|
-
if (style["--
|
|
4994
|
-
if (style["--
|
|
4995
|
-
if (uiUnwrap(props.auto) === true) style["--
|
|
4996
|
-
else if (span != null) style["--
|
|
4997
|
-
if (sm != null) style["--
|
|
4998
|
-
if (md != null) style["--
|
|
4999
|
-
if (lg != null) style["--
|
|
5000
|
-
if (tabletSpan != null) style["--
|
|
5001
|
-
if (pcSpan != null) style["--
|
|
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(["
|
|
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(["
|
|
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(["
|
|
5080
|
+
class: uiClass(["jss-grid-col-end", props.endClass, props.bottomClass, props.footerClass]),
|
|
5081
5081
|
style: { ...sectionStyle }
|
|
5082
5082
|
}, ...endNodes)
|
|
5083
5083
|
: null
|