@trops/dash-react 1.0.28 → 1.0.29

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.js CHANGED
@@ -8437,6 +8437,11 @@ var PalettePreviewPane = function PalettePreviewPane(_ref2) {
8437
8437
  };
8438
8438
 
8439
8439
  function _typeof$2(o) { "@babel/helpers - typeof"; return _typeof$2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof$2(o); }
8440
+ function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8441
+ function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8442
+ function _defineProperty$1(e, r, t) { return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8443
+ function _toPropertyKey$1(t) { var i = _toPrimitive$1(t, "string"); return "symbol" == _typeof$2(i) ? i : i + ""; }
8444
+ function _toPrimitive$1(t, r) { if ("object" != _typeof$2(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof$2(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8440
8445
  function _regeneratorRuntime$1() { var r = _regenerator$1(), e = r.m(_regeneratorRuntime$1), t = (Object.getPrototypeOf ? Object.getPrototypeOf(e) : e.__proto__).constructor; function n(r) { var e = "function" == typeof r && r.constructor; return !!e && (e === t || "GeneratorFunction" === (e.displayName || e.name)); } var o = { "throw": 1, "return": 2, "break": 3, "continue": 3 }; function a(r) { var e, t; return function (n) { e || (e = { stop: function stop() { return t(n.a, 2); }, "catch": function _catch() { return n.v; }, abrupt: function abrupt(r, e) { return t(n.a, o[r], e); }, delegateYield: function delegateYield(r, o, a) { return e.resultName = o, t(n.d, _regeneratorValues$1(r), a); }, finish: function finish(r) { return t(n.f, r); } }, t = function t(r, _t, o) { n.p = e.prev, n.n = e.next; try { return r(_t, o); } finally { e.next = n.n; } }), e.resultName && (e[e.resultName] = n.v, e.resultName = void 0), e.sent = n.v, e.next = n.n; try { return r.call(this, e); } finally { n.p = e.prev, n.n = e.next; } }; } return (_regeneratorRuntime$1 = function _regeneratorRuntime() { return { wrap: function wrap(e, t, n, o) { return r.w(a(e), t, n, o && o.reverse()); }, isGeneratorFunction: n, mark: r.m, awrap: function awrap(r, e) { return new _OverloadYield$1(r, e); }, AsyncIterator: _regeneratorAsyncIterator$1, async: function async(r, e, t, o, u) { return (n(e) ? _regeneratorAsyncGen$1 : _regeneratorAsync$1)(a(r), e, t, o, u); }, keys: _regeneratorKeys$1, values: _regeneratorValues$1 }; })(); }
8441
8446
  function _regeneratorValues$1(e) { if (null != e) { var t = e["function" == typeof Symbol && Symbol.iterator || "@@iterator"], r = 0; if (t) return t.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) return { next: function next() { return e && r >= e.length && (e = void 0), { value: e && e[r++], done: !e }; } }; } throw new TypeError(_typeof$2(e) + " is not iterable"); }
8442
8447
  function _regeneratorKeys$1(e) { var n = Object(e), r = []; for (var t in n) r.unshift(t); return function e() { for (; r.length;) if ((t = r.pop()) in n) return e.value = t, e.done = !1, e; return e.done = !0, e; }; }
@@ -8446,11 +8451,6 @@ function _regeneratorAsyncIterator$1(t, e) { function n(r, o, i, f) { try { var
8446
8451
  function _regenerator$1() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2$1(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2$1(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2$1(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2$1(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2$1(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2$1(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2$1(u), _regeneratorDefine2$1(u, o, "Generator"), _regeneratorDefine2$1(u, n, function () { return this; }), _regeneratorDefine2$1(u, "toString", function () { return "[object Generator]"; }), (_regenerator$1 = function _regenerator() { return { w: i, m: f }; })(); }
8447
8452
  function _regeneratorDefine2$1(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2$1 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2$1(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2$1(e, r, n, t); }
8448
8453
  function _OverloadYield$1(e, d) { this.v = e, this.k = d; }
8449
- function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
8450
- function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty$1(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8451
- function _defineProperty$1(e, r, t) { return (r = _toPropertyKey$1(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
8452
- function _toPropertyKey$1(t) { var i = _toPrimitive$1(t, "string"); return "symbol" == _typeof$2(i) ? i : i + ""; }
8453
- function _toPrimitive$1(t, r) { if ("object" != _typeof$2(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof$2(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
8454
8454
  function asyncGeneratorStep$1(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
8455
8455
  function _asyncToGenerator$1(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep$1(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep$1(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
8456
8456
  function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray$1(r, e) || _nonIterableRest(); }
@@ -8460,6 +8460,20 @@ function _arrayLikeToArray$1(r, a) { (null == a || a > r.length) && (a = r.lengt
8460
8460
  function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
8461
8461
  function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
8462
8462
  var URL_REGEX = /^https?:\/\/.+\..+/i;
8463
+ var EXTRACT_TIMEOUT_MS = 20000;
8464
+ var ERROR_MESSAGES = {
8465
+ URL_TIMEOUT: "The site took too long to load. Try a simpler page.",
8466
+ URL_UNREACHABLE: "Couldn't reach that URL. Check the address.",
8467
+ NO_COLORS_FOUND: "No usable colors found. Try a more styled page.",
8468
+ EXTRACTION_FAILED: "Site blocks scanning. Colors extracted from favicon only."
8469
+ };
8470
+ function getErrorMessage(err) {
8471
+ if (err !== null && err !== void 0 && err.type && ERROR_MESSAGES[err.type]) {
8472
+ return ERROR_MESSAGES[err.type];
8473
+ }
8474
+ if (err !== null && err !== void 0 && err.message) return err.message;
8475
+ return "Something went wrong. Please try again.";
8476
+ }
8463
8477
 
8464
8478
  /**
8465
8479
  * ThemeFromUrlPane
@@ -8522,20 +8536,18 @@ var ThemeFromUrlPane = function ThemeFromUrlPane(_ref) {
8522
8536
  _useState12 = _slicedToArray(_useState11, 2),
8523
8537
  generatedTheme = _useState12[0],
8524
8538
  setGeneratedTheme = _useState12[1];
8539
+ var timeoutRef = useRef(null);
8525
8540
  var isValidUrl = URL_REGEX.test(url.trim());
8526
8541
  var canExtract = isValidUrl && !loading;
8527
8542
  var canGenerate = palette && roleAssignments && !loading;
8528
8543
  var inputId = getUUID$1("", "theme-url-input");
8529
- function handleExtract() {
8530
- return _handleExtract.apply(this, arguments);
8531
- }
8532
- function _handleExtract() {
8533
- _handleExtract = _asyncToGenerator$1(/*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
8534
- var result, theme, message;
8544
+ var handleExtract = useCallback(/*#__PURE__*/function () {
8545
+ var _handleExtract = _asyncToGenerator$1(/*#__PURE__*/_regeneratorRuntime$1().mark(function _callee() {
8546
+ var extractPromise, timeoutPromise, result, data, theme;
8535
8547
  return _regeneratorRuntime$1().wrap(function _callee$(_context) {
8536
8548
  while (1) switch (_context.prev = _context.next) {
8537
8549
  case 0:
8538
- if (!(!onExtract || !canExtract)) {
8550
+ if (!(!onExtract || !isValidUrl || loading)) {
8539
8551
  _context.next = 2;
8540
8552
  break;
8541
8553
  }
@@ -8546,84 +8558,99 @@ var ThemeFromUrlPane = function ThemeFromUrlPane(_ref) {
8546
8558
  setPalette(null);
8547
8559
  setRoleAssignments(null);
8548
8560
  setGeneratedTheme(null);
8549
- _context.prev = 7;
8550
- _context.next = 10;
8551
- return onExtract(url.trim());
8552
- case 10:
8561
+ if (timeoutRef.current) clearTimeout(timeoutRef.current);
8562
+ _context.prev = 9;
8563
+ extractPromise = onExtract(url.trim());
8564
+ timeoutPromise = new Promise(function (_, reject) {
8565
+ timeoutRef.current = setTimeout(function () {
8566
+ reject({
8567
+ type: "URL_TIMEOUT"
8568
+ });
8569
+ }, EXTRACT_TIMEOUT_MS);
8570
+ });
8571
+ _context.next = 14;
8572
+ return Promise.race([extractPromise, timeoutPromise]);
8573
+ case 14:
8553
8574
  result = _context.sent;
8554
- if (!(!result || !result.palette || result.palette.length === 0)) {
8555
- _context.next = 14;
8575
+ clearTimeout(timeoutRef.current);
8576
+ timeoutRef.current = null;
8577
+ if (!(result && !result.success && result.error && result.error.type)) {
8578
+ _context.next = 20;
8556
8579
  break;
8557
8580
  }
8558
- setError("No colors found on this page. Try a different URL.");
8581
+ setError(getErrorMessage(result.error));
8559
8582
  return _context.abrupt("return");
8560
- case 14:
8561
- setPalette(result.palette);
8562
- setRoleAssignments(result.roleAssignments || buildDefaultRoles(result.palette));
8563
- setSuggestedName(result.suggestedName || deriveNameFromUrl(url));
8564
-
8565
- // Auto-generate theme if mapper is available
8583
+ case 20:
8584
+ data = result && result.success && result.data ? result.data : result;
8585
+ if (!(!data || !data.palette || data.palette.length === 0)) {
8586
+ _context.next = 24;
8587
+ break;
8588
+ }
8589
+ setError(getErrorMessage({
8590
+ type: "NO_COLORS_FOUND"
8591
+ }));
8592
+ return _context.abrupt("return");
8593
+ case 24:
8594
+ setPalette(data.palette);
8595
+ setRoleAssignments(data.roleAssignments || buildDefaultRoles(data.palette));
8596
+ setSuggestedName(data.suggestedName || deriveNameFromUrl(url));
8566
8597
  if (!onMapToTheme) {
8567
- _context.next = 23;
8598
+ _context.next = 33;
8568
8599
  break;
8569
8600
  }
8570
- _context.next = 20;
8571
- return onMapToTheme(result.palette, result.roleAssignments || buildDefaultRoles(result.palette));
8572
- case 20:
8601
+ _context.next = 30;
8602
+ return onMapToTheme(data.palette, data.roleAssignments || buildDefaultRoles(data.palette));
8603
+ case 30:
8573
8604
  theme = _context.sent;
8574
8605
  setGeneratedTheme(theme);
8575
8606
  if (onPreview) onPreview(theme);
8576
- case 23:
8577
- _context.next = 29;
8607
+ case 33:
8608
+ _context.next = 40;
8578
8609
  break;
8579
- case 25:
8580
- _context.prev = 25;
8581
- _context.t0 = _context["catch"](7);
8582
- message = (_context.t0 === null || _context.t0 === void 0 ? void 0 : _context.t0.message) || "Failed to extract colors. Check the URL and try again.";
8583
- setError(message);
8584
- case 29:
8585
- _context.prev = 29;
8610
+ case 35:
8611
+ _context.prev = 35;
8612
+ _context.t0 = _context["catch"](9);
8613
+ clearTimeout(timeoutRef.current);
8614
+ timeoutRef.current = null;
8615
+ setError(getErrorMessage(_context.t0));
8616
+ case 40:
8617
+ _context.prev = 40;
8586
8618
  setLoading(false);
8587
- return _context.finish(29);
8588
- case 32:
8619
+ return _context.finish(40);
8620
+ case 43:
8589
8621
  case "end":
8590
8622
  return _context.stop();
8591
8623
  }
8592
- }, _callee, null, [[7, 25, 29, 32]]);
8624
+ }, _callee, null, [[9, 35, 40, 43]]);
8593
8625
  }));
8594
- return _handleExtract.apply(this, arguments);
8595
- }
8626
+ function handleExtract() {
8627
+ return _handleExtract.apply(this, arguments);
8628
+ }
8629
+ return handleExtract;
8630
+ }(), [onExtract, onMapToTheme, onPreview, url, isValidUrl, loading]);
8596
8631
  function handleSwapRole(role, currentIndex) {
8597
8632
  if (!palette || !roleAssignments) return;
8598
-
8599
- // Cycle to the next palette color for this role
8600
8633
  var nextIndex = (currentIndex + 1) % palette.length;
8601
8634
  var newAssignments = _objectSpread$1(_objectSpread$1({}, roleAssignments), {}, _defineProperty$1({}, role, nextIndex));
8602
8635
  setRoleAssignments(newAssignments);
8603
- setGeneratedTheme(null); // Invalidate generated theme
8604
-
8605
- // Re-map theme with new assignments
8636
+ setGeneratedTheme(null);
8606
8637
  if (onMapToTheme) {
8607
8638
  onMapToTheme(palette, newAssignments).then(function (theme) {
8608
8639
  setGeneratedTheme(theme);
8609
8640
  if (onPreview) onPreview(theme);
8610
- });
8641
+ })["catch"](function () {});
8611
8642
  }
8612
8643
  }
8613
8644
  function handleReorderRoles(sourceRole, targetRole) {
8614
8645
  if (!palette || !roleAssignments) return;
8615
-
8616
- // Swap the palette indices between the two roles
8617
8646
  var newAssignments = _objectSpread$1(_objectSpread$1({}, roleAssignments), {}, _defineProperty$1(_defineProperty$1({}, sourceRole, roleAssignments[targetRole]), targetRole, roleAssignments[sourceRole]));
8618
8647
  setRoleAssignments(newAssignments);
8619
8648
  setGeneratedTheme(null);
8620
-
8621
- // Re-map theme with swapped assignments
8622
8649
  if (onMapToTheme) {
8623
8650
  onMapToTheme(palette, newAssignments).then(function (theme) {
8624
8651
  setGeneratedTheme(theme);
8625
8652
  if (onPreview) onPreview(theme);
8626
- });
8653
+ })["catch"](function () {});
8627
8654
  }
8628
8655
  }
8629
8656
  function handleGenerate() {
@@ -8697,13 +8724,27 @@ var ThemeFromUrlPane = function ThemeFromUrlPane(_ref) {
8697
8724
  children: "Scanning page for colors..."
8698
8725
  })]
8699
8726
  }), error && /*#__PURE__*/jsxs("div", {
8700
- className: "flex flex-row items-center gap-2 py-2 text-red-400",
8701
- children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
8702
- icon: "circle-exclamation",
8703
- className: "h-4 w-4"
8704
- }), /*#__PURE__*/jsx("span", {
8705
- className: "text-sm",
8706
- children: error
8727
+ className: "flex flex-col gap-2 py-2",
8728
+ children: [/*#__PURE__*/jsxs("div", {
8729
+ className: "flex flex-row items-center gap-2 text-red-400",
8730
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
8731
+ icon: "circle-exclamation",
8732
+ className: "h-4 w-4"
8733
+ }), /*#__PURE__*/jsx("span", {
8734
+ className: "text-sm",
8735
+ children: error
8736
+ })]
8737
+ }), /*#__PURE__*/jsxs("button", {
8738
+ type: "button",
8739
+ onClick: handleExtract,
8740
+ disabled: !isValidUrl || loading,
8741
+ className: "flex flex-row items-center gap-2 px-3 py-1.5 w-fit ".concat(buttonStyles.string, " text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 ").concat(buttonStyles.focusRingColor || "", " disabled:opacity-40 disabled:cursor-not-allowed"),
8742
+ children: [/*#__PURE__*/jsx(FontAwesomeIcon, {
8743
+ icon: "rotate-right",
8744
+ className: "h-3 w-3"
8745
+ }), /*#__PURE__*/jsx("span", {
8746
+ children: "Try Again"
8747
+ })]
8707
8748
  })]
8708
8749
  }), palette && roleAssignments && /*#__PURE__*/jsx(PalettePreviewPane, {
8709
8750
  palette: palette,