@acoustte-digital-services/digitalstore-controls-dev 0.8.1-dev.20260422090829 → 0.8.1-dev.20260423042903

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.
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  HlsPlayer_default
4
- } from "./chunk-NTZ3IUOL.mjs";
4
+ } from "./chunk-BV2VX3HP.mjs";
5
5
  export {
6
6
  HlsPlayer_default as default
7
7
  };
@@ -115,7 +115,7 @@ var HlsPlayer = React.memo(
115
115
  autoPlay: playOptions === "autoplay",
116
116
  loop,
117
117
  playsInline: true,
118
- onClick: !isMobile && !isPlaying ? handlePlayPause : void 0,
118
+ onClick: !isMobile ? handlePlayPause : void 0,
119
119
  children: resolvedSources.map(({ src, media }, i) => /* @__PURE__ */ jsx(
120
120
  "source",
121
121
  {
@@ -146,12 +146,63 @@ var HlsPlayer = React.memo(
146
146
  ]
147
147
  }
148
148
  ),
149
- !isMobile && !isPlaying && /* @__PURE__ */ jsx(
149
+ !isMobile && /* @__PURE__ */ jsx(
150
150
  "div",
151
151
  {
152
- className: "absolute inset-0 flex items-center justify-center cursor-pointer",
153
- onClick: handlePlayPause,
154
- children: "\u25B6"
152
+ className: "absolute inset-0 flex items-center justify-center pointer-events-none",
153
+ style: {
154
+ opacity: !isPlaying || isHovered ? 1 : 0,
155
+ transition: "opacity 0.25s ease"
156
+ },
157
+ children: /* @__PURE__ */ jsx(
158
+ "button",
159
+ {
160
+ type: "button",
161
+ "aria-label": isPlaying ? "Pause" : "Play",
162
+ onClick: (e) => {
163
+ e.stopPropagation();
164
+ handlePlayPause();
165
+ },
166
+ style: {
167
+ pointerEvents: "auto",
168
+ width: 64,
169
+ height: 64,
170
+ borderRadius: "50%",
171
+ border: "1.5px solid rgba(255,255,255,0.18)",
172
+ cursor: "pointer",
173
+ display: "flex",
174
+ alignItems: "center",
175
+ justifyContent: "center",
176
+ background: "rgba(0, 0, 0, 0.45)",
177
+ backdropFilter: "blur(10px)",
178
+ WebkitBackdropFilter: "blur(10px)",
179
+ boxShadow: "0 4px 32px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.1)",
180
+ transition: "transform 0.18s ease, background 0.18s ease, border-color 0.18s ease"
181
+ },
182
+ onMouseEnter: (e) => {
183
+ const btn = e.currentTarget;
184
+ btn.style.transform = "scale(1.1)";
185
+ btn.style.background = "rgba(0,0,0,0.65)";
186
+ btn.style.borderColor = "rgba(255,255,255,0.32)";
187
+ },
188
+ onMouseLeave: (e) => {
189
+ const btn = e.currentTarget;
190
+ btn.style.transform = "scale(1)";
191
+ btn.style.background = "rgba(0,0,0,0.45)";
192
+ btn.style.borderColor = "rgba(255,255,255,0.18)";
193
+ },
194
+ children: isPlaying ? (
195
+ /* Pause — two rounded bars */
196
+ /* @__PURE__ */ jsxs("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
197
+ /* @__PURE__ */ jsx("rect", { x: "3.5", y: "2.5", width: "4.5", height: "15", rx: "1.5", fill: "white" }),
198
+ /* @__PURE__ */ jsx("rect", { x: "12", y: "2.5", width: "4.5", height: "15", rx: "1.5", fill: "white" })
199
+ ] })
200
+ ) : (
201
+ /* Play — solid triangle, nudged right for optical balance */
202
+ /* @__PURE__ */ jsx("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { transform: "translateX(2px)" }, children: /* @__PURE__ */ jsx("path", { d: "M5 3.5L17 10L5 16.5V3.5Z", fill: "white" }) })
203
+ )
204
+ }
205
+ )
155
206
  }
156
207
  )
157
208
  ]
package/dist/index.js CHANGED
@@ -392,7 +392,7 @@ var init_HlsPlayer = __esm({
392
392
  autoPlay: playOptions === "autoplay",
393
393
  loop,
394
394
  playsInline: true,
395
- onClick: !isMobile && !isPlaying ? handlePlayPause : void 0,
395
+ onClick: !isMobile ? handlePlayPause : void 0,
396
396
  children: resolvedSources.map(({ src, media }, i) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
397
397
  "source",
398
398
  {
@@ -423,12 +423,63 @@ var init_HlsPlayer = __esm({
423
423
  ]
424
424
  }
425
425
  ),
426
- !isMobile && !isPlaying && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
426
+ !isMobile && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
427
427
  "div",
428
428
  {
429
- className: "absolute inset-0 flex items-center justify-center cursor-pointer",
430
- onClick: handlePlayPause,
431
- children: "\u25B6"
429
+ className: "absolute inset-0 flex items-center justify-center pointer-events-none",
430
+ style: {
431
+ opacity: !isPlaying || isHovered ? 1 : 0,
432
+ transition: "opacity 0.25s ease"
433
+ },
434
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
435
+ "button",
436
+ {
437
+ type: "button",
438
+ "aria-label": isPlaying ? "Pause" : "Play",
439
+ onClick: (e) => {
440
+ e.stopPropagation();
441
+ handlePlayPause();
442
+ },
443
+ style: {
444
+ pointerEvents: "auto",
445
+ width: 64,
446
+ height: 64,
447
+ borderRadius: "50%",
448
+ border: "1.5px solid rgba(255,255,255,0.18)",
449
+ cursor: "pointer",
450
+ display: "flex",
451
+ alignItems: "center",
452
+ justifyContent: "center",
453
+ background: "rgba(0, 0, 0, 0.45)",
454
+ backdropFilter: "blur(10px)",
455
+ WebkitBackdropFilter: "blur(10px)",
456
+ boxShadow: "0 4px 32px rgba(0,0,0,0.4), inset 0 1px 0 rgba(255,255,255,0.1)",
457
+ transition: "transform 0.18s ease, background 0.18s ease, border-color 0.18s ease"
458
+ },
459
+ onMouseEnter: (e) => {
460
+ const btn = e.currentTarget;
461
+ btn.style.transform = "scale(1.1)";
462
+ btn.style.background = "rgba(0,0,0,0.65)";
463
+ btn.style.borderColor = "rgba(255,255,255,0.32)";
464
+ },
465
+ onMouseLeave: (e) => {
466
+ const btn = e.currentTarget;
467
+ btn.style.transform = "scale(1)";
468
+ btn.style.background = "rgba(0,0,0,0.45)";
469
+ btn.style.borderColor = "rgba(255,255,255,0.18)";
470
+ },
471
+ children: isPlaying ? (
472
+ /* Pause — two rounded bars */
473
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
474
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("rect", { x: "3.5", y: "2.5", width: "4.5", height: "15", rx: "1.5", fill: "white" }),
475
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("rect", { x: "12", y: "2.5", width: "4.5", height: "15", rx: "1.5", fill: "white" })
476
+ ] })
477
+ ) : (
478
+ /* Play — solid triangle, nudged right for optical balance */
479
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { transform: "translateX(2px)" }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("path", { d: "M5 3.5L17 10L5 16.5V3.5Z", fill: "white" }) })
480
+ )
481
+ }
482
+ )
432
483
  }
433
484
  )
434
485
  ]
@@ -1186,15 +1237,12 @@ var timeZoneAbbreviations = {
1186
1237
  // src/components/controls/view/DateView.tsx
1187
1238
  var import_jsx_runtime2 = require("react/jsx-runtime");
1188
1239
  var DateView = (props) => {
1189
- const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
1190
1240
  const getTimeZoneAbbreviation = (timeZone) => {
1191
1241
  return timeZoneAbbreviations[timeZone] || timeZone;
1192
1242
  };
1193
1243
  const getRelativeTime = (dateString) => {
1194
1244
  const now = /* @__PURE__ */ new Date();
1195
- const date = new Date(
1196
- dateString.includes("Z") ? dateString : dateString + "Z"
1197
- );
1245
+ const date = /* @__PURE__ */ new Date(dateString + "Z");
1198
1246
  const diffMs = now.getTime() - date.getTime();
1199
1247
  const diffSec = Math.floor(diffMs / 1e3);
1200
1248
  const diffMin = Math.floor(diffSec / 60);
@@ -1205,19 +1253,48 @@ var DateView = (props) => {
1205
1253
  if (diffHr < 24) return `${diffHr} hour${diffHr > 1 ? "s" : ""} ago`;
1206
1254
  if (diffDay < 7) return `${diffDay} day${diffDay > 1 ? "s" : ""} ago`;
1207
1255
  return new Intl.DateTimeFormat("en", {
1208
- timeZone: userTimeZone,
1209
1256
  day: "2-digit",
1210
1257
  month: "short",
1211
1258
  year: "numeric"
1212
1259
  }).format(date);
1213
1260
  };
1261
+ console.log("DateView props:", props);
1262
+ const parseAndFormatDate = (dateString, format) => {
1263
+ const parsedDate = /* @__PURE__ */ new Date(dateString + "Z");
1264
+ if (format === "relative") {
1265
+ return getRelativeTime(dateString);
1266
+ }
1267
+ switch (props.controlType) {
1268
+ case "date":
1269
+ return new Intl.DateTimeFormat("en", {
1270
+ day: "2-digit",
1271
+ month: "short",
1272
+ year: "numeric"
1273
+ }).format(parsedDate);
1274
+ case "time":
1275
+ return `${formatTime(parsedDate)} ${getTimeZoneAbbreviation(Intl.DateTimeFormat().resolvedOptions().timeZone)} (${getTimePeriod(parsedDate)})`;
1276
+ default:
1277
+ return parsedDate.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
1278
+ day: "2-digit",
1279
+ month: "short",
1280
+ year: "numeric",
1281
+ hour: "2-digit",
1282
+ minute: "2-digit"
1283
+ }).format(parsedDate) : new Intl.DateTimeFormat("en", {
1284
+ day: "2-digit",
1285
+ month: "short",
1286
+ year: "numeric",
1287
+ hour: "2-digit",
1288
+ minute: "2-digit",
1289
+ second: "2-digit"
1290
+ }).format(parsedDate);
1291
+ }
1292
+ };
1214
1293
  const formatTime = (date) => {
1215
1294
  return date.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
1216
- timeZone: userTimeZone,
1217
1295
  hour: "2-digit",
1218
1296
  minute: "2-digit"
1219
1297
  }).format(date) : new Intl.DateTimeFormat("en", {
1220
- timeZone: userTimeZone,
1221
1298
  hour: "2-digit",
1222
1299
  minute: "2-digit",
1223
1300
  second: "2-digit"
@@ -1234,55 +1311,19 @@ var DateView = (props) => {
1234
1311
  if (hours >= 22 || hours < 5) return "Night";
1235
1312
  return "Late Night";
1236
1313
  };
1237
- const parseAndFormatDate = (dateString, format) => {
1238
- if (!dateString) return "";
1239
- if (format === "relative") {
1240
- return getRelativeTime(dateString);
1241
- }
1242
- const parsedDate = new Date(
1243
- dateString.includes("Z") ? dateString : dateString + "Z"
1244
- );
1245
- if (props.controlType === "date") {
1246
- return new Intl.DateTimeFormat("en", {
1247
- timeZone: userTimeZone,
1248
- day: "2-digit",
1249
- month: "short",
1250
- year: "numeric"
1251
- }).format(parsedDate);
1252
- }
1253
- if (props.controlType === "time") {
1254
- return `${formatTime(parsedDate)} ${getTimeZoneAbbreviation(
1255
- userTimeZone
1256
- )} (${getTimePeriod(parsedDate)})`;
1257
- }
1258
- return parsedDate.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
1259
- timeZone: userTimeZone,
1260
- day: "2-digit",
1261
- month: "short",
1262
- year: "numeric",
1263
- hour: "2-digit",
1264
- minute: "2-digit"
1265
- }).format(parsedDate) : new Intl.DateTimeFormat("en", {
1266
- timeZone: userTimeZone,
1267
- day: "2-digit",
1268
- month: "short",
1269
- year: "numeric",
1270
- hour: "2-digit",
1271
- minute: "2-digit",
1272
- second: "2-digit"
1273
- }).format(parsedDate);
1274
- };
1275
1314
  let localDateTime = "";
1276
1315
  let timeZoneAbbreviation = "";
1277
1316
  try {
1278
1317
  localDateTime = parseAndFormatDate(props.value, props.format);
1279
- timeZoneAbbreviation = getTimeZoneAbbreviation(userTimeZone);
1318
+ timeZoneAbbreviation = getTimeZoneAbbreviation(
1319
+ Intl.DateTimeFormat().resolvedOptions().timeZone
1320
+ );
1280
1321
  } catch (error) {
1281
1322
  console.error("Error parsing date:", props.value, error);
1282
1323
  }
1283
1324
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react2.default.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { className: "inline-flex flex-wrap gap-1", children: [
1284
1325
  /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: localDateTime }),
1285
- !props.format && props.controlType !== "date" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: timeZoneAbbreviation })
1326
+ !props.format && props.controlType != "date" && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("span", { children: timeZoneAbbreviation })
1286
1327
  ] }) });
1287
1328
  };
1288
1329
  var DateView_default = DateView;
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  HlsPlayer_default
3
- } from "./chunk-NTZ3IUOL.mjs";
3
+ } from "./chunk-BV2VX3HP.mjs";
4
4
  import {
5
5
  Button_default,
6
6
  ServiceClient_default,
@@ -162,15 +162,12 @@ var timeZoneAbbreviations = {
162
162
  // src/components/controls/view/DateView.tsx
163
163
  import { jsx as jsx2, jsxs } from "react/jsx-runtime";
164
164
  var DateView = (props) => {
165
- const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
166
165
  const getTimeZoneAbbreviation = (timeZone) => {
167
166
  return timeZoneAbbreviations[timeZone] || timeZone;
168
167
  };
169
168
  const getRelativeTime = (dateString) => {
170
169
  const now = /* @__PURE__ */ new Date();
171
- const date = new Date(
172
- dateString.includes("Z") ? dateString : dateString + "Z"
173
- );
170
+ const date = /* @__PURE__ */ new Date(dateString + "Z");
174
171
  const diffMs = now.getTime() - date.getTime();
175
172
  const diffSec = Math.floor(diffMs / 1e3);
176
173
  const diffMin = Math.floor(diffSec / 60);
@@ -181,19 +178,48 @@ var DateView = (props) => {
181
178
  if (diffHr < 24) return `${diffHr} hour${diffHr > 1 ? "s" : ""} ago`;
182
179
  if (diffDay < 7) return `${diffDay} day${diffDay > 1 ? "s" : ""} ago`;
183
180
  return new Intl.DateTimeFormat("en", {
184
- timeZone: userTimeZone,
185
181
  day: "2-digit",
186
182
  month: "short",
187
183
  year: "numeric"
188
184
  }).format(date);
189
185
  };
186
+ console.log("DateView props:", props);
187
+ const parseAndFormatDate = (dateString, format) => {
188
+ const parsedDate = /* @__PURE__ */ new Date(dateString + "Z");
189
+ if (format === "relative") {
190
+ return getRelativeTime(dateString);
191
+ }
192
+ switch (props.controlType) {
193
+ case "date":
194
+ return new Intl.DateTimeFormat("en", {
195
+ day: "2-digit",
196
+ month: "short",
197
+ year: "numeric"
198
+ }).format(parsedDate);
199
+ case "time":
200
+ return `${formatTime(parsedDate)} ${getTimeZoneAbbreviation(Intl.DateTimeFormat().resolvedOptions().timeZone)} (${getTimePeriod(parsedDate)})`;
201
+ default:
202
+ return parsedDate.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
203
+ day: "2-digit",
204
+ month: "short",
205
+ year: "numeric",
206
+ hour: "2-digit",
207
+ minute: "2-digit"
208
+ }).format(parsedDate) : new Intl.DateTimeFormat("en", {
209
+ day: "2-digit",
210
+ month: "short",
211
+ year: "numeric",
212
+ hour: "2-digit",
213
+ minute: "2-digit",
214
+ second: "2-digit"
215
+ }).format(parsedDate);
216
+ }
217
+ };
190
218
  const formatTime = (date) => {
191
219
  return date.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
192
- timeZone: userTimeZone,
193
220
  hour: "2-digit",
194
221
  minute: "2-digit"
195
222
  }).format(date) : new Intl.DateTimeFormat("en", {
196
- timeZone: userTimeZone,
197
223
  hour: "2-digit",
198
224
  minute: "2-digit",
199
225
  second: "2-digit"
@@ -210,55 +236,19 @@ var DateView = (props) => {
210
236
  if (hours >= 22 || hours < 5) return "Night";
211
237
  return "Late Night";
212
238
  };
213
- const parseAndFormatDate = (dateString, format) => {
214
- if (!dateString) return "";
215
- if (format === "relative") {
216
- return getRelativeTime(dateString);
217
- }
218
- const parsedDate = new Date(
219
- dateString.includes("Z") ? dateString : dateString + "Z"
220
- );
221
- if (props.controlType === "date") {
222
- return new Intl.DateTimeFormat("en", {
223
- timeZone: userTimeZone,
224
- day: "2-digit",
225
- month: "short",
226
- year: "numeric"
227
- }).format(parsedDate);
228
- }
229
- if (props.controlType === "time") {
230
- return `${formatTime(parsedDate)} ${getTimeZoneAbbreviation(
231
- userTimeZone
232
- )} (${getTimePeriod(parsedDate)})`;
233
- }
234
- return parsedDate.getSeconds() === 0 ? new Intl.DateTimeFormat("en", {
235
- timeZone: userTimeZone,
236
- day: "2-digit",
237
- month: "short",
238
- year: "numeric",
239
- hour: "2-digit",
240
- minute: "2-digit"
241
- }).format(parsedDate) : new Intl.DateTimeFormat("en", {
242
- timeZone: userTimeZone,
243
- day: "2-digit",
244
- month: "short",
245
- year: "numeric",
246
- hour: "2-digit",
247
- minute: "2-digit",
248
- second: "2-digit"
249
- }).format(parsedDate);
250
- };
251
239
  let localDateTime = "";
252
240
  let timeZoneAbbreviation = "";
253
241
  try {
254
242
  localDateTime = parseAndFormatDate(props.value, props.format);
255
- timeZoneAbbreviation = getTimeZoneAbbreviation(userTimeZone);
243
+ timeZoneAbbreviation = getTimeZoneAbbreviation(
244
+ Intl.DateTimeFormat().resolvedOptions().timeZone
245
+ );
256
246
  } catch (error) {
257
247
  console.error("Error parsing date:", props.value, error);
258
248
  }
259
249
  return /* @__PURE__ */ jsx2(React2.Fragment, { children: /* @__PURE__ */ jsxs("div", { className: "inline-flex flex-wrap gap-1", children: [
260
250
  /* @__PURE__ */ jsx2("span", { children: localDateTime }),
261
- !props.format && props.controlType !== "date" && /* @__PURE__ */ jsx2("span", { children: timeZoneAbbreviation })
251
+ !props.format && props.controlType != "date" && /* @__PURE__ */ jsx2("span", { children: timeZoneAbbreviation })
262
252
  ] }) });
263
253
  };
264
254
  var DateView_default = DateView;
@@ -2638,7 +2628,7 @@ var DeviceAssetSelector_default = DeviceAssetSelector;
2638
2628
 
2639
2629
  // src/components/pageRenderingEngine/nodes/ImageNode.tsx
2640
2630
  import { Fragment as Fragment3, jsx as jsx39 } from "react/jsx-runtime";
2641
- var HlsPlayer = dynamic(() => import("./HlsPlayer-KOTCX7MY.mjs"), {
2631
+ var HlsPlayer = dynamic(() => import("./HlsPlayer-IBPSMECZ.mjs"), {
2642
2632
  ssr: false
2643
2633
  });
2644
2634
  var getNestedValue = (obj, path) => {
@@ -4107,7 +4097,7 @@ var Pagination_default = Pagination;
4107
4097
  // src/components/pageRenderingEngine/nodes/ImageGalleryNode.tsx
4108
4098
  import dynamic5 from "next/dynamic";
4109
4099
  import { Fragment as Fragment9, jsx as jsx58, jsxs as jsxs33 } from "react/jsx-runtime";
4110
- var HlsPlayer2 = dynamic5(() => import("./HlsPlayer-KOTCX7MY.mjs"), { ssr: false });
4100
+ var HlsPlayer2 = dynamic5(() => import("./HlsPlayer-IBPSMECZ.mjs"), { ssr: false });
4111
4101
  var deviceToMediaQuery = (device) => {
4112
4102
  switch (device) {
4113
4103
  case "sm":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acoustte-digital-services/digitalstore-controls-dev",
3
- "version": "0.8.1-dev.20260422090829",
3
+ "version": "0.8.1-dev.20260423042903",
4
4
  "description": "Reusable React components",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",