@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260721123022 → 0.8.1-dev.20260721133206
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/index.mjs +0 -2
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +84 -38
- package/dist/server.mjs +84 -38
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
package/dist/server.d.mts
CHANGED
|
@@ -81,7 +81,7 @@ interface ViewControlProps {
|
|
|
81
81
|
session?: any;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
declare const ViewControl: (props: ViewControlProps) => React.JSX.Element
|
|
84
|
+
declare const ViewControl: React.MemoExoticComponent<(props: ViewControlProps) => React.JSX.Element>;
|
|
85
85
|
|
|
86
86
|
declare const ViewControlTypes: {
|
|
87
87
|
lineText: string;
|
package/dist/server.d.ts
CHANGED
|
@@ -81,7 +81,7 @@ interface ViewControlProps {
|
|
|
81
81
|
session?: any;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
declare const ViewControl: (props: ViewControlProps) => React.JSX.Element
|
|
84
|
+
declare const ViewControl: React.MemoExoticComponent<(props: ViewControlProps) => React.JSX.Element>;
|
|
85
85
|
|
|
86
86
|
declare const ViewControlTypes: {
|
|
87
87
|
lineText: string;
|
package/dist/server.js
CHANGED
|
@@ -3168,36 +3168,36 @@ var DateTimeVew_default = DateTimeView;
|
|
|
3168
3168
|
|
|
3169
3169
|
// src/components/controls/view/ViewControl.tsx
|
|
3170
3170
|
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
3171
|
-
var
|
|
3172
|
-
|
|
3173
|
-
|
|
3174
|
-
|
|
3175
|
-
|
|
3176
|
-
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
|
|
3183
|
-
|
|
3184
|
-
|
|
3185
|
-
|
|
3186
|
-
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
|
|
3190
|
-
|
|
3191
|
-
|
|
3192
|
-
|
|
3193
|
-
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
|
|
3171
|
+
var ControlComponents = {
|
|
3172
|
+
[ViewControlTypes_default.lineText]: LineTextView_default,
|
|
3173
|
+
[ViewControlTypes_default.emailText]: EmailTextView_default,
|
|
3174
|
+
[ViewControlTypes_default.asset]: Asset_default,
|
|
3175
|
+
[ViewControlTypes_default.multilineTextBullets]: MultilineTextBulletsView_default,
|
|
3176
|
+
[ViewControlTypes_default.boolean]: BooleanView_default,
|
|
3177
|
+
[ViewControlTypes_default.checkboxInput]: BooleanView_default,
|
|
3178
|
+
// [ViewControlTypes.timeUntilStarts]: TimeUntilStarts,
|
|
3179
|
+
[ViewControlTypes_default.money]: MoneyView_default,
|
|
3180
|
+
[ViewControlTypes_default.date]: DateView_default,
|
|
3181
|
+
[ViewControlTypes_default.time]: DateView_default,
|
|
3182
|
+
[ViewControlTypes_default.datetime]: DateTimeVew_default,
|
|
3183
|
+
[ViewControlTypes_default.number]: NumberView_default,
|
|
3184
|
+
[ViewControlTypes_default.multilineText]: MultilineTextView_default,
|
|
3185
|
+
[ViewControlTypes_default.multilinetext]: MultilineTextView_default,
|
|
3186
|
+
[ViewControlTypes_default.moneyText]: MoneyView_default,
|
|
3187
|
+
[ViewControlTypes_default.percentage]: PercentageView_default,
|
|
3188
|
+
[ViewControlTypes_default.status]: StatusView_default,
|
|
3189
|
+
[ViewControlTypes_default.statusBg]: StatusBgView_default,
|
|
3190
|
+
[ViewControlTypes_default.progressIndicator]: ProgressIndicator_default,
|
|
3191
|
+
// [ViewControlTypes.timeUntilStarts]: TimeUntilStarts,
|
|
3192
|
+
// [ViewControlTypes.timeUntilStartsStyled]: TimeUntilStartsStyled,
|
|
3193
|
+
[ViewControlTypes_default.aiGeneratedSummary]: AiGeneratedSummary_default,
|
|
3194
|
+
[ViewControlTypes_default.booleanView]: BooleanView_default,
|
|
3195
|
+
[ViewControlTypes_default.text]: LineTextView_default
|
|
3196
|
+
};
|
|
3197
|
+
var ViewControl = import_react20.default.memo((props) => {
|
|
3198
3198
|
const SelectedControlComponent = props.controlType ? ControlComponents[props.controlType] : void 0;
|
|
3199
3199
|
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react20.default.Fragment, { children: SelectedControlComponent ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SelectedControlComponent, { ...props }) : "Control not found:" + props.controlType });
|
|
3200
|
-
};
|
|
3200
|
+
});
|
|
3201
3201
|
var ViewControl_default = ViewControl;
|
|
3202
3202
|
|
|
3203
3203
|
// src/components/pageRenderingEngine/nodes/DatafieldNode.tsx
|
|
@@ -3632,6 +3632,17 @@ var EmbedNode_default = EmbedNode;
|
|
|
3632
3632
|
init_ServiceClient();
|
|
3633
3633
|
|
|
3634
3634
|
// src/components/utilities/AnimationUtility.tsx
|
|
3635
|
+
var normalizeSelector = (guid) => {
|
|
3636
|
+
const trimmedGuid = guid?.trim();
|
|
3637
|
+
if (!trimmedGuid) {
|
|
3638
|
+
return ".animation-fallback";
|
|
3639
|
+
}
|
|
3640
|
+
const baseValue = trimmedGuid.replace(/^#/, "").replace(/^\./, "");
|
|
3641
|
+
if (typeof CSS !== "undefined" && typeof CSS.escape === "function") {
|
|
3642
|
+
return `#${CSS.escape(baseValue)}`;
|
|
3643
|
+
}
|
|
3644
|
+
return `#${baseValue}`;
|
|
3645
|
+
};
|
|
3635
3646
|
var AnimationUtility = class {
|
|
3636
3647
|
static generateAnimationCSS(config, guid) {
|
|
3637
3648
|
const {
|
|
@@ -3646,10 +3657,12 @@ var AnimationUtility = class {
|
|
|
3646
3657
|
speedPerChar = 100,
|
|
3647
3658
|
cursor = true,
|
|
3648
3659
|
mode = "enter",
|
|
3649
|
-
direction = "left"
|
|
3650
|
-
|
|
3660
|
+
direction = "left",
|
|
3661
|
+
backgroundColor,
|
|
3662
|
+
borderColor
|
|
3651
3663
|
} = config;
|
|
3652
3664
|
let base = "", visible = "", keyframes = "";
|
|
3665
|
+
const selector = normalizeSelector(guid);
|
|
3653
3666
|
switch (config.animation) {
|
|
3654
3667
|
case "Fade":
|
|
3655
3668
|
base = `opacity:0; transition:opacity ${duration}ms ${easing} ${delay}ms;`;
|
|
@@ -3683,12 +3696,20 @@ var AnimationUtility = class {
|
|
|
3683
3696
|
`;
|
|
3684
3697
|
if (mode === "enter") {
|
|
3685
3698
|
base = `opacity:0;`;
|
|
3686
|
-
visible = `opacity:1; animation:bounce ${duration}ms ${easing} ${delay}ms ${repeat};`;
|
|
3699
|
+
visible = `opacity:1; animation: bounce ${duration}ms ${easing} ${delay}ms ${repeat};`;
|
|
3687
3700
|
} else {
|
|
3688
3701
|
base = ``;
|
|
3689
|
-
visible = `animation:bounce ${duration / 1e3}s ${easing} ${delay / 1e3}s ${repeat};`;
|
|
3702
|
+
visible = `animation: bounce ${duration / 1e3}s ${easing} ${delay / 1e3}s ${repeat};`;
|
|
3690
3703
|
}
|
|
3691
3704
|
break;
|
|
3705
|
+
case "Background":
|
|
3706
|
+
base = `transition: background-color ${duration}ms ${easing} ${delay}ms;`;
|
|
3707
|
+
visible = `background-color: ${backgroundColor};`;
|
|
3708
|
+
break;
|
|
3709
|
+
case "Border":
|
|
3710
|
+
base = `transition: border-color ${duration}ms ${easing} ${delay}ms;`;
|
|
3711
|
+
visible = `border-color: ${borderColor};`;
|
|
3712
|
+
break;
|
|
3692
3713
|
case "Typewriter":
|
|
3693
3714
|
keyframes = `
|
|
3694
3715
|
@keyframes typewriter { from { width: 0 } to { width: 100% } }
|
|
@@ -3710,14 +3731,14 @@ var AnimationUtility = class {
|
|
|
3710
3731
|
if (mode === "hover") {
|
|
3711
3732
|
return `
|
|
3712
3733
|
${keyframes}
|
|
3713
|
-
${
|
|
3714
|
-
${
|
|
3734
|
+
${selector} { ${base} }
|
|
3735
|
+
${selector}:hover { ${visible} }
|
|
3715
3736
|
`;
|
|
3716
3737
|
} else {
|
|
3717
3738
|
return `
|
|
3718
3739
|
${keyframes}
|
|
3719
|
-
${
|
|
3720
|
-
${
|
|
3740
|
+
${selector} { ${base} }
|
|
3741
|
+
${selector}.visible { ${visible} }
|
|
3721
3742
|
`;
|
|
3722
3743
|
}
|
|
3723
3744
|
}
|
|
@@ -4545,6 +4566,25 @@ var DocumentNode = (props) => {
|
|
|
4545
4566
|
documents = [docData];
|
|
4546
4567
|
}
|
|
4547
4568
|
}
|
|
4569
|
+
const handleDownload = async (e, url, filename) => {
|
|
4570
|
+
e.preventDefault();
|
|
4571
|
+
try {
|
|
4572
|
+
const response = await fetch(url);
|
|
4573
|
+
if (!response.ok) throw new Error("Network response was not ok");
|
|
4574
|
+
const blob = await response.blob();
|
|
4575
|
+
const blobUrl = window.URL.createObjectURL(blob);
|
|
4576
|
+
const link = document.createElement("a");
|
|
4577
|
+
link.href = blobUrl;
|
|
4578
|
+
link.download = filename;
|
|
4579
|
+
document.body.appendChild(link);
|
|
4580
|
+
link.click();
|
|
4581
|
+
document.body.removeChild(link);
|
|
4582
|
+
window.URL.revokeObjectURL(blobUrl);
|
|
4583
|
+
} catch (error) {
|
|
4584
|
+
console.warn("Blob download failed (possibly due to CORS), falling back to browser default navigation:", error);
|
|
4585
|
+
window.open(url, "_blank", "noopener,noreferrer");
|
|
4586
|
+
}
|
|
4587
|
+
};
|
|
4548
4588
|
if (documents.length === 0) {
|
|
4549
4589
|
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_jsx_runtime45.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "py-4 px-2 bg-neutral-weak border rounded text-center flex flex-col gap-2", children: [
|
|
4550
4590
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "mx-auto w-10 h-10 rounded-full flex items-center justify-center bg-neutral-soft", children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
@@ -4588,6 +4628,9 @@ var DocumentNode = (props) => {
|
|
|
4588
4628
|
}
|
|
4589
4629
|
}
|
|
4590
4630
|
const { Icon: Icon2, extLabel } = getFileDetails(documentUrl);
|
|
4631
|
+
const extMatch = documentUrl.match(/\.([a-zA-Z0-9]+)(?:[\?#]|$)/);
|
|
4632
|
+
const ext = extMatch ? extMatch[1] : "";
|
|
4633
|
+
const filename = ext ? `${documentTitle}.${ext}` : documentTitle;
|
|
4591
4634
|
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
4592
4635
|
"div",
|
|
4593
4636
|
{
|
|
@@ -4601,6 +4644,8 @@ var DocumentNode = (props) => {
|
|
|
4601
4644
|
"a",
|
|
4602
4645
|
{
|
|
4603
4646
|
href: documentUrl,
|
|
4647
|
+
download: filename,
|
|
4648
|
+
onClick: (e) => handleDownload(e, documentUrl, filename),
|
|
4604
4649
|
target: "_blank",
|
|
4605
4650
|
rel: "noopener noreferrer",
|
|
4606
4651
|
className: "inline-flex items-center px-4 py-2 text-sm font-medium bg-default border rounded focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors",
|
|
@@ -4847,6 +4892,7 @@ var DivContainer = async (props) => {
|
|
|
4847
4892
|
}
|
|
4848
4893
|
const updatedStyle = { ...updatedStyles };
|
|
4849
4894
|
const guid = "css" + crypto.randomUUID().toLocaleLowerCase();
|
|
4895
|
+
const animationSelector = `#${guid}`;
|
|
4850
4896
|
const { enterAnimation, exitAnimation, hoverAnimation } = props.node;
|
|
4851
4897
|
let animationCSS = "";
|
|
4852
4898
|
if (enterAnimation?.name) {
|
|
@@ -4856,7 +4902,7 @@ var DivContainer = async (props) => {
|
|
|
4856
4902
|
mode: "enter",
|
|
4857
4903
|
...enterAnimation.properties
|
|
4858
4904
|
},
|
|
4859
|
-
|
|
4905
|
+
animationSelector
|
|
4860
4906
|
);
|
|
4861
4907
|
}
|
|
4862
4908
|
if (hoverAnimation?.name) {
|
|
@@ -4866,7 +4912,7 @@ var DivContainer = async (props) => {
|
|
|
4866
4912
|
mode: "hover",
|
|
4867
4913
|
...hoverAnimation.properties
|
|
4868
4914
|
},
|
|
4869
|
-
|
|
4915
|
+
animationSelector
|
|
4870
4916
|
);
|
|
4871
4917
|
}
|
|
4872
4918
|
const isHidden = !shouldRenderContainer(
|
package/dist/server.mjs
CHANGED
|
@@ -732,36 +732,36 @@ var DateTimeVew_default = DateTimeView;
|
|
|
732
732
|
|
|
733
733
|
// src/components/controls/view/ViewControl.tsx
|
|
734
734
|
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
735
|
-
var
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
735
|
+
var ControlComponents = {
|
|
736
|
+
[ViewControlTypes_default.lineText]: LineTextView_default,
|
|
737
|
+
[ViewControlTypes_default.emailText]: EmailTextView_default,
|
|
738
|
+
[ViewControlTypes_default.asset]: Asset_default,
|
|
739
|
+
[ViewControlTypes_default.multilineTextBullets]: MultilineTextBulletsView_default,
|
|
740
|
+
[ViewControlTypes_default.boolean]: BooleanView_default,
|
|
741
|
+
[ViewControlTypes_default.checkboxInput]: BooleanView_default,
|
|
742
|
+
// [ViewControlTypes.timeUntilStarts]: TimeUntilStarts,
|
|
743
|
+
[ViewControlTypes_default.money]: MoneyView_default,
|
|
744
|
+
[ViewControlTypes_default.date]: DateView_default,
|
|
745
|
+
[ViewControlTypes_default.time]: DateView_default,
|
|
746
|
+
[ViewControlTypes_default.datetime]: DateTimeVew_default,
|
|
747
|
+
[ViewControlTypes_default.number]: NumberView_default,
|
|
748
|
+
[ViewControlTypes_default.multilineText]: MultilineTextView_default,
|
|
749
|
+
[ViewControlTypes_default.multilinetext]: MultilineTextView_default,
|
|
750
|
+
[ViewControlTypes_default.moneyText]: MoneyView_default,
|
|
751
|
+
[ViewControlTypes_default.percentage]: PercentageView_default,
|
|
752
|
+
[ViewControlTypes_default.status]: StatusView_default,
|
|
753
|
+
[ViewControlTypes_default.statusBg]: StatusBgView_default,
|
|
754
|
+
[ViewControlTypes_default.progressIndicator]: ProgressIndicator_default,
|
|
755
|
+
// [ViewControlTypes.timeUntilStarts]: TimeUntilStarts,
|
|
756
|
+
// [ViewControlTypes.timeUntilStartsStyled]: TimeUntilStartsStyled,
|
|
757
|
+
[ViewControlTypes_default.aiGeneratedSummary]: AiGeneratedSummary_default,
|
|
758
|
+
[ViewControlTypes_default.booleanView]: BooleanView_default,
|
|
759
|
+
[ViewControlTypes_default.text]: LineTextView_default
|
|
760
|
+
};
|
|
761
|
+
var ViewControl = React14.memo((props) => {
|
|
762
762
|
const SelectedControlComponent = props.controlType ? ControlComponents[props.controlType] : void 0;
|
|
763
763
|
return /* @__PURE__ */ jsx20(React14.Fragment, { children: SelectedControlComponent ? /* @__PURE__ */ jsx20(SelectedControlComponent, { ...props }) : "Control not found:" + props.controlType });
|
|
764
|
-
};
|
|
764
|
+
});
|
|
765
765
|
var ViewControl_default = ViewControl;
|
|
766
766
|
|
|
767
767
|
// src/components/pageRenderingEngine/nodes/DatafieldNode.tsx
|
|
@@ -1193,6 +1193,17 @@ var EmbedNode = (props) => {
|
|
|
1193
1193
|
var EmbedNode_default = EmbedNode;
|
|
1194
1194
|
|
|
1195
1195
|
// src/components/utilities/AnimationUtility.tsx
|
|
1196
|
+
var normalizeSelector = (guid) => {
|
|
1197
|
+
const trimmedGuid = guid?.trim();
|
|
1198
|
+
if (!trimmedGuid) {
|
|
1199
|
+
return ".animation-fallback";
|
|
1200
|
+
}
|
|
1201
|
+
const baseValue = trimmedGuid.replace(/^#/, "").replace(/^\./, "");
|
|
1202
|
+
if (typeof CSS !== "undefined" && typeof CSS.escape === "function") {
|
|
1203
|
+
return `#${CSS.escape(baseValue)}`;
|
|
1204
|
+
}
|
|
1205
|
+
return `#${baseValue}`;
|
|
1206
|
+
};
|
|
1196
1207
|
var AnimationUtility = class {
|
|
1197
1208
|
static generateAnimationCSS(config, guid) {
|
|
1198
1209
|
const {
|
|
@@ -1207,10 +1218,12 @@ var AnimationUtility = class {
|
|
|
1207
1218
|
speedPerChar = 100,
|
|
1208
1219
|
cursor = true,
|
|
1209
1220
|
mode = "enter",
|
|
1210
|
-
direction = "left"
|
|
1211
|
-
|
|
1221
|
+
direction = "left",
|
|
1222
|
+
backgroundColor,
|
|
1223
|
+
borderColor
|
|
1212
1224
|
} = config;
|
|
1213
1225
|
let base = "", visible = "", keyframes = "";
|
|
1226
|
+
const selector = normalizeSelector(guid);
|
|
1214
1227
|
switch (config.animation) {
|
|
1215
1228
|
case "Fade":
|
|
1216
1229
|
base = `opacity:0; transition:opacity ${duration}ms ${easing} ${delay}ms;`;
|
|
@@ -1244,12 +1257,20 @@ var AnimationUtility = class {
|
|
|
1244
1257
|
`;
|
|
1245
1258
|
if (mode === "enter") {
|
|
1246
1259
|
base = `opacity:0;`;
|
|
1247
|
-
visible = `opacity:1; animation:bounce ${duration}ms ${easing} ${delay}ms ${repeat};`;
|
|
1260
|
+
visible = `opacity:1; animation: bounce ${duration}ms ${easing} ${delay}ms ${repeat};`;
|
|
1248
1261
|
} else {
|
|
1249
1262
|
base = ``;
|
|
1250
|
-
visible = `animation:bounce ${duration / 1e3}s ${easing} ${delay / 1e3}s ${repeat};`;
|
|
1263
|
+
visible = `animation: bounce ${duration / 1e3}s ${easing} ${delay / 1e3}s ${repeat};`;
|
|
1251
1264
|
}
|
|
1252
1265
|
break;
|
|
1266
|
+
case "Background":
|
|
1267
|
+
base = `transition: background-color ${duration}ms ${easing} ${delay}ms;`;
|
|
1268
|
+
visible = `background-color: ${backgroundColor};`;
|
|
1269
|
+
break;
|
|
1270
|
+
case "Border":
|
|
1271
|
+
base = `transition: border-color ${duration}ms ${easing} ${delay}ms;`;
|
|
1272
|
+
visible = `border-color: ${borderColor};`;
|
|
1273
|
+
break;
|
|
1253
1274
|
case "Typewriter":
|
|
1254
1275
|
keyframes = `
|
|
1255
1276
|
@keyframes typewriter { from { width: 0 } to { width: 100% } }
|
|
@@ -1271,14 +1292,14 @@ var AnimationUtility = class {
|
|
|
1271
1292
|
if (mode === "hover") {
|
|
1272
1293
|
return `
|
|
1273
1294
|
${keyframes}
|
|
1274
|
-
${
|
|
1275
|
-
${
|
|
1295
|
+
${selector} { ${base} }
|
|
1296
|
+
${selector}:hover { ${visible} }
|
|
1276
1297
|
`;
|
|
1277
1298
|
} else {
|
|
1278
1299
|
return `
|
|
1279
1300
|
${keyframes}
|
|
1280
|
-
${
|
|
1281
|
-
${
|
|
1301
|
+
${selector} { ${base} }
|
|
1302
|
+
${selector}.visible { ${visible} }
|
|
1282
1303
|
`;
|
|
1283
1304
|
}
|
|
1284
1305
|
}
|
|
@@ -2103,6 +2124,25 @@ var DocumentNode = (props) => {
|
|
|
2103
2124
|
documents = [docData];
|
|
2104
2125
|
}
|
|
2105
2126
|
}
|
|
2127
|
+
const handleDownload = async (e, url, filename) => {
|
|
2128
|
+
e.preventDefault();
|
|
2129
|
+
try {
|
|
2130
|
+
const response = await fetch(url);
|
|
2131
|
+
if (!response.ok) throw new Error("Network response was not ok");
|
|
2132
|
+
const blob = await response.blob();
|
|
2133
|
+
const blobUrl = window.URL.createObjectURL(blob);
|
|
2134
|
+
const link = document.createElement("a");
|
|
2135
|
+
link.href = blobUrl;
|
|
2136
|
+
link.download = filename;
|
|
2137
|
+
document.body.appendChild(link);
|
|
2138
|
+
link.click();
|
|
2139
|
+
document.body.removeChild(link);
|
|
2140
|
+
window.URL.revokeObjectURL(blobUrl);
|
|
2141
|
+
} catch (error) {
|
|
2142
|
+
console.warn("Blob download failed (possibly due to CORS), falling back to browser default navigation:", error);
|
|
2143
|
+
window.open(url, "_blank", "noopener,noreferrer");
|
|
2144
|
+
}
|
|
2145
|
+
};
|
|
2106
2146
|
if (documents.length === 0) {
|
|
2107
2147
|
return /* @__PURE__ */ jsx33(Fragment6, { children: /* @__PURE__ */ jsxs12("div", { className: "py-4 px-2 bg-neutral-weak border rounded text-center flex flex-col gap-2", children: [
|
|
2108
2148
|
/* @__PURE__ */ jsx33("div", { className: "mx-auto w-10 h-10 rounded-full flex items-center justify-center bg-neutral-soft", children: /* @__PURE__ */ jsx33(
|
|
@@ -2146,6 +2186,9 @@ var DocumentNode = (props) => {
|
|
|
2146
2186
|
}
|
|
2147
2187
|
}
|
|
2148
2188
|
const { Icon, extLabel } = getFileDetails(documentUrl);
|
|
2189
|
+
const extMatch = documentUrl.match(/\.([a-zA-Z0-9]+)(?:[\?#]|$)/);
|
|
2190
|
+
const ext = extMatch ? extMatch[1] : "";
|
|
2191
|
+
const filename = ext ? `${documentTitle}.${ext}` : documentTitle;
|
|
2149
2192
|
return /* @__PURE__ */ jsxs12(
|
|
2150
2193
|
"div",
|
|
2151
2194
|
{
|
|
@@ -2159,6 +2202,8 @@ var DocumentNode = (props) => {
|
|
|
2159
2202
|
"a",
|
|
2160
2203
|
{
|
|
2161
2204
|
href: documentUrl,
|
|
2205
|
+
download: filename,
|
|
2206
|
+
onClick: (e) => handleDownload(e, documentUrl, filename),
|
|
2162
2207
|
target: "_blank",
|
|
2163
2208
|
rel: "noopener noreferrer",
|
|
2164
2209
|
className: "inline-flex items-center px-4 py-2 text-sm font-medium bg-default border rounded focus:outline-none focus:ring-2 focus:ring-offset-2 transition-colors",
|
|
@@ -2405,6 +2450,7 @@ var DivContainer = async (props) => {
|
|
|
2405
2450
|
}
|
|
2406
2451
|
const updatedStyle = { ...updatedStyles };
|
|
2407
2452
|
const guid = "css" + crypto.randomUUID().toLocaleLowerCase();
|
|
2453
|
+
const animationSelector = `#${guid}`;
|
|
2408
2454
|
const { enterAnimation, exitAnimation, hoverAnimation } = props.node;
|
|
2409
2455
|
let animationCSS = "";
|
|
2410
2456
|
if (enterAnimation?.name) {
|
|
@@ -2414,7 +2460,7 @@ var DivContainer = async (props) => {
|
|
|
2414
2460
|
mode: "enter",
|
|
2415
2461
|
...enterAnimation.properties
|
|
2416
2462
|
},
|
|
2417
|
-
|
|
2463
|
+
animationSelector
|
|
2418
2464
|
);
|
|
2419
2465
|
}
|
|
2420
2466
|
if (hoverAnimation?.name) {
|
|
@@ -2424,7 +2470,7 @@ var DivContainer = async (props) => {
|
|
|
2424
2470
|
mode: "hover",
|
|
2425
2471
|
...hoverAnimation.properties
|
|
2426
2472
|
},
|
|
2427
|
-
|
|
2473
|
+
animationSelector
|
|
2428
2474
|
);
|
|
2429
2475
|
}
|
|
2430
2476
|
const isHidden = !shouldRenderContainer(
|
package/package.json
CHANGED