powr-sdk-web 2.4.0 → 3.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.
@@ -100,7 +100,9 @@ var PowrBaseChat = function PowrBaseChat(_ref) {
100
100
  var options,
101
101
  token,
102
102
  url,
103
+ separator,
103
104
  config,
105
+ bodyWithProjectId,
104
106
  response,
105
107
  data,
106
108
  _args = arguments;
@@ -109,16 +111,23 @@ var PowrBaseChat = function PowrBaseChat(_ref) {
109
111
  case 0:
110
112
  options = _args.length > 1 && _args[1] !== undefined ? _args[1] : {};
111
113
  token = getAuthToken();
112
- url = "".concat(apiUrl).concat(endpoint);
114
+ url = "".concat(apiUrl).concat(endpoint); // Add projectId as query parameter for GET requests
115
+ if (!options.method || options.method === 'GET') {
116
+ separator = endpoint.includes('?') ? '&' : '?';
117
+ url = "".concat(url).concat(separator, "projectId=").concat(projectId);
118
+ }
113
119
  config = _objectSpread({
114
120
  headers: _objectSpread(_objectSpread({
115
121
  'Content-Type': 'application/json'
116
122
  }, token && {
117
123
  'Authorization': "Bearer ".concat(token)
118
124
  }), options.headers)
119
- }, options);
125
+ }, options); // Add projectId to body for POST/PUT requests
120
126
  if (options.body) {
121
- config.body = JSON.stringify(options.body);
127
+ bodyWithProjectId = _objectSpread(_objectSpread({}, options.body), {}, {
128
+ projectId: projectId
129
+ });
130
+ config.body = JSON.stringify(bodyWithProjectId);
122
131
  }
123
132
  _context.n = 1;
124
133
  return fetch(url, config);
package/dist/index.js CHANGED
@@ -42,7 +42,7 @@ Object.defineProperty(exports, "PowrBaseFormsAdmin", {
42
42
  Object.defineProperty(exports, "PowrBaseInvoice", {
43
43
  enumerable: true,
44
44
  get: function get() {
45
- return _invoice["default"];
45
+ return _invoices["default"];
46
46
  }
47
47
  });
48
48
  Object.defineProperty(exports, "PowrBaseInvoicesAdmin", {
@@ -69,6 +69,12 @@ Object.defineProperty(exports, "PowrBaseNotificationsAdmin", {
69
69
  return _admin5["default"];
70
70
  }
71
71
  });
72
+ Object.defineProperty(exports, "PowrBasePlexxAdmin", {
73
+ enumerable: true,
74
+ get: function get() {
75
+ return _admin7["default"];
76
+ }
77
+ });
72
78
  Object.defineProperty(exports, "PowrBaseReviews", {
73
79
  enumerable: true,
74
80
  get: function get() {
@@ -117,23 +123,24 @@ Object.defineProperty(exports, "PowrWaitListAdmin", {
117
123
  return _admin["default"];
118
124
  }
119
125
  });
126
+ var _table = _interopRequireDefault(require("./table"));
120
127
  var _swiper = _interopRequireDefault(require("./swiper"));
121
128
  var _reviews = _interopRequireDefault(require("./reviews"));
122
129
  var _uploader = _interopRequireDefault(require("./uploader"));
123
130
  var _comments = _interopRequireDefault(require("./comments"));
124
- var _invoice = _interopRequireDefault(require("./invoice"));
131
+ var _invoices = _interopRequireDefault(require("./invoices"));
125
132
  var _waitlists = _interopRequireDefault(require("./waitlists"));
126
- var _admin = _interopRequireDefault(require("./waitlists/admin"));
127
133
  var _activities = _interopRequireDefault(require("./activities"));
128
134
  var _blogs = _interopRequireDefault(require("./blogs"));
129
135
  var _likes = _interopRequireDefault(require("./likes"));
130
136
  var _auth = _interopRequireDefault(require("./auth"));
131
137
  var _forms = _interopRequireDefault(require("./forms"));
138
+ var _chat = _interopRequireDefault(require("./chat"));
139
+ var _admin = _interopRequireDefault(require("./waitlists/admin"));
132
140
  var _admin2 = _interopRequireDefault(require("./forms/admin"));
133
141
  var _admin3 = _interopRequireDefault(require("./slides/admin"));
134
142
  var _admin4 = _interopRequireDefault(require("./invoices/admin"));
135
143
  var _admin5 = _interopRequireDefault(require("./notifications/admin"));
136
144
  var _admin6 = _interopRequireDefault(require("./users/admin"));
137
- var _table = _interopRequireDefault(require("./table"));
138
- var _chat = _interopRequireDefault(require("./chat"));
145
+ var _admin7 = _interopRequireDefault(require("./plexx/admin"));
139
146
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "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(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t2 in e) "default" !== _t2 && {}.hasOwnProperty.call(e, _t2) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t2)) && (i.get || i.set) ? o(f, _t2, i) : f[_t2] = e[_t2]); return f; })(e, t); }
10
+ function _regenerator() { /*! 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(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(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(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
11
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(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(e, r, n, t); }
12
+ function asyncGeneratorStep(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); }
13
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
14
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
15
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
16
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
17
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
18
+ 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; } }
19
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
20
+ var PowrBaseInvoice = function PowrBaseInvoice(_ref) {
21
+ var _invoice$customerInfo, _invoice$customerInfo2, _invoice$customerInfo3, _invoice$customerInfo4, _invoice$serviceSecti, _invoice$serviceSecti2, _invoice$serviceSecti3, _invoice$paymentSecti, _invoice$paymentSecti2, _invoice$paymentSecti3, _invoice$paymentSecti4, _invoice$serviceSecti4, _invoice$serviceSecti5;
22
+ var projectId = _ref.projectId,
23
+ invoiceId = _ref.invoiceId;
24
+ var _useState = (0, _react.useState)(null),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ invoice = _useState2[0],
27
+ setInvoice = _useState2[1];
28
+ var _useState3 = (0, _react.useState)(true),
29
+ _useState4 = _slicedToArray(_useState3, 2),
30
+ loading = _useState4[0],
31
+ setLoading = _useState4[1];
32
+ (0, _react.useEffect)(function () {
33
+ var fetchInvoice = /*#__PURE__*/function () {
34
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
35
+ var response, data, _t;
36
+ return _regenerator().w(function (_context) {
37
+ while (1) switch (_context.n) {
38
+ case 0:
39
+ _context.p = 0;
40
+ _context.n = 1;
41
+ return fetch("https://api.powrbase.cloud/invoice/".concat(invoiceId, "?projectId=").concat(projectId));
42
+ case 1:
43
+ response = _context.v;
44
+ _context.n = 2;
45
+ return response.json();
46
+ case 2:
47
+ data = _context.v;
48
+ setInvoice(data === null || data === void 0 ? void 0 : data.invoice);
49
+ _context.n = 4;
50
+ break;
51
+ case 3:
52
+ _context.p = 3;
53
+ _t = _context.v;
54
+ console.error("Error fetching invoice:", _t);
55
+ case 4:
56
+ _context.p = 4;
57
+ setLoading(false);
58
+ return _context.f(4);
59
+ case 5:
60
+ return _context.a(2);
61
+ }
62
+ }, _callee, null, [[0, 3, 4, 5]]);
63
+ }));
64
+ return function fetchInvoice() {
65
+ return _ref2.apply(this, arguments);
66
+ };
67
+ }();
68
+ fetchInvoice();
69
+ }, [invoiceId, projectId]);
70
+ if (loading) return /*#__PURE__*/_react["default"].createElement("div", null, "Loading...");
71
+ if (!invoice) return /*#__PURE__*/_react["default"].createElement("div", null, "No invoice found.");
72
+ return /*#__PURE__*/_react["default"].createElement("div", {
73
+ className: "z-50 flex items-center justify-center"
74
+ }, /*#__PURE__*/_react["default"].createElement("div", {
75
+ className: "bg-white rounded-lg shadow-lg max-w-3xl w-full p-4 md:p-8 relative flex flex-col md:flex-row gap-8",
76
+ style: {
77
+ maxHeight: "90vh",
78
+ overflowY: "auto",
79
+ margin: "5vw",
80
+ boxSizing: "border-box"
81
+ }
82
+ }, /*#__PURE__*/_react["default"].createElement("div", {
83
+ className: "flex-1 min-w-0"
84
+ }, /*#__PURE__*/_react["default"].createElement("h2", {
85
+ className: "text-2xl font-bold mb-6"
86
+ }, "Invoice Details"), /*#__PURE__*/_react["default"].createElement("div", {
87
+ className: "mb-4"
88
+ }, /*#__PURE__*/_react["default"].createElement("div", {
89
+ className: "text-lg font-semibold"
90
+ }, invoice.invoiceNumber), /*#__PURE__*/_react["default"].createElement("div", {
91
+ className: "text-gray-500 text-sm"
92
+ }, "Issued: ", invoice.dateOfIssue), /*#__PURE__*/_react["default"].createElement("div", {
93
+ className: "text-sm mt-2"
94
+ }, "Status:", " ", /*#__PURE__*/_react["default"].createElement("span", {
95
+ className: invoice.paymentStatus === "Paid" ? "text-green-600" : "text-yellow-600"
96
+ }, invoice.paymentStatus))), /*#__PURE__*/_react["default"].createElement("div", {
97
+ className: "mb-4"
98
+ }, /*#__PURE__*/_react["default"].createElement("div", {
99
+ className: "font-semibold mb-1"
100
+ }, "Customer"), /*#__PURE__*/_react["default"].createElement("div", {
101
+ className: "text-sm"
102
+ }, (_invoice$customerInfo = invoice.customerInfo) === null || _invoice$customerInfo === void 0 ? void 0 : _invoice$customerInfo.name), /*#__PURE__*/_react["default"].createElement("div", {
103
+ className: "text-sm text-gray-500"
104
+ }, (_invoice$customerInfo2 = invoice.customerInfo) === null || _invoice$customerInfo2 === void 0 ? void 0 : _invoice$customerInfo2.email), /*#__PURE__*/_react["default"].createElement("div", {
105
+ className: "text-sm text-gray-500"
106
+ }, "Phone: ", (_invoice$customerInfo3 = invoice.customerInfo) === null || _invoice$customerInfo3 === void 0 ? void 0 : _invoice$customerInfo3.phoneNumber), /*#__PURE__*/_react["default"].createElement("div", {
107
+ className: "text-sm text-gray-500"
108
+ }, "Customer ID: ", (_invoice$customerInfo4 = invoice.customerInfo) === null || _invoice$customerInfo4 === void 0 ? void 0 : _invoice$customerInfo4.customerId)), /*#__PURE__*/_react["default"].createElement("div", {
109
+ className: "mb-4"
110
+ }, /*#__PURE__*/_react["default"].createElement("div", {
111
+ className: "font-semibold mb-1"
112
+ }, "Service"), /*#__PURE__*/_react["default"].createElement("div", {
113
+ className: "text-sm"
114
+ }, (_invoice$serviceSecti = invoice.serviceSection) === null || _invoice$serviceSecti === void 0 ? void 0 : _invoice$serviceSecti.serviceTitle), /*#__PURE__*/_react["default"].createElement("div", {
115
+ className: "text-sm text-gray-500"
116
+ }, "Provider: ", (_invoice$serviceSecti2 = invoice.serviceSection) === null || _invoice$serviceSecti2 === void 0 ? void 0 : _invoice$serviceSecti2.providerName), /*#__PURE__*/_react["default"].createElement("div", {
117
+ className: "text-sm text-gray-500"
118
+ }, "Duration: ", (_invoice$serviceSecti3 = invoice.serviceSection) === null || _invoice$serviceSecti3 === void 0 ? void 0 : _invoice$serviceSecti3.duration))), /*#__PURE__*/_react["default"].createElement("div", {
119
+ className: "w-full md:w-80 flex-shrink-0 bg-gray-50 rounded-lg p-6 flex flex-col justify-between"
120
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
121
+ className: "font-semibold mb-2"
122
+ }, "Payment Summary"), /*#__PURE__*/_react["default"].createElement("div", {
123
+ className: "flex justify-between text-sm mb-1"
124
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "Base Amount"), /*#__PURE__*/_react["default"].createElement("span", null, "\u20B9", (_invoice$paymentSecti = invoice.paymentSection) === null || _invoice$paymentSecti === void 0 || (_invoice$paymentSecti = _invoice$paymentSecti.baseAmount) === null || _invoice$paymentSecti === void 0 ? void 0 : _invoice$paymentSecti.toLocaleString())), /*#__PURE__*/_react["default"].createElement("div", {
125
+ className: "flex justify-between text-sm mb-1"
126
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "Tax"), /*#__PURE__*/_react["default"].createElement("span", null, "\u20B9", (_invoice$paymentSecti2 = invoice.paymentSection) === null || _invoice$paymentSecti2 === void 0 || (_invoice$paymentSecti2 = _invoice$paymentSecti2.tax) === null || _invoice$paymentSecti2 === void 0 ? void 0 : _invoice$paymentSecti2.toLocaleString())), /*#__PURE__*/_react["default"].createElement("div", {
127
+ className: "flex justify-between text-sm mb-1"
128
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "Discount"), /*#__PURE__*/_react["default"].createElement("span", null, "-\u20B9", (_invoice$paymentSecti3 = invoice.paymentSection) === null || _invoice$paymentSecti3 === void 0 || (_invoice$paymentSecti3 = _invoice$paymentSecti3.discount) === null || _invoice$paymentSecti3 === void 0 ? void 0 : _invoice$paymentSecti3.toLocaleString())), /*#__PURE__*/_react["default"].createElement("div", {
129
+ className: "flex justify-between text-base font-bold border-t pt-2 mt-2"
130
+ }, /*#__PURE__*/_react["default"].createElement("span", null, "Total"), /*#__PURE__*/_react["default"].createElement("span", null, "\u20B9", (_invoice$paymentSecti4 = invoice.paymentSection) === null || _invoice$paymentSecti4 === void 0 || (_invoice$paymentSecti4 = _invoice$paymentSecti4.totalAmount) === null || _invoice$paymentSecti4 === void 0 ? void 0 : _invoice$paymentSecti4.toLocaleString()))), /*#__PURE__*/_react["default"].createElement("div", {
131
+ className: "mt-8"
132
+ }, /*#__PURE__*/_react["default"].createElement("div", {
133
+ className: "font-semibold mb-1"
134
+ }, "Schedule"), /*#__PURE__*/_react["default"].createElement("div", {
135
+ className: "text-sm"
136
+ }, (_invoice$serviceSecti4 = invoice.serviceSection) === null || _invoice$serviceSecti4 === void 0 ? void 0 : _invoice$serviceSecti4.schedule), /*#__PURE__*/_react["default"].createElement("div", {
137
+ className: "text-sm text-gray-500"
138
+ }, "Mode: ", (_invoice$serviceSecti5 = invoice.serviceSection) === null || _invoice$serviceSecti5 === void 0 ? void 0 : _invoice$serviceSecti5.deliveryMode)))));
139
+ };
140
+ var _default = exports["default"] = PowrBaseInvoice;
@@ -0,0 +1,647 @@
1
+ "use strict";
2
+ "use client";
3
+
4
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "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(o); }
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports["default"] = void 0;
9
+ var _react = _interopRequireWildcard(require("react"));
10
+ var _button = require("../ui/button");
11
+ var _input = require("../ui/input");
12
+ var _label = require("../ui/label");
13
+ var _card = require("../ui/card");
14
+ var _lucideReact = require("lucide-react");
15
+ var _reactToastify = require("react-toastify");
16
+ require("react-toastify/dist/ReactToastify.css");
17
+ var _react2 = require("@monaco-editor/react");
18
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t4 in e) "default" !== _t4 && {}.hasOwnProperty.call(e, _t4) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t4)) && (i.get || i.set) ? o(f, _t4, i) : f[_t4] = e[_t4]); return f; })(e, t); }
19
+ function ownKeys(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; }
20
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
22
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
23
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
24
+ function _regenerator() { /*! 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(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(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(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
25
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(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(e, r, n, t); }
26
+ function asyncGeneratorStep(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); }
27
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
28
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
29
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
30
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
31
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
32
+ 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; } }
33
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
34
+ var PowrBasePlexxAdmin = function PowrBasePlexxAdmin(_ref) {
35
+ var projectId = _ref.projectId,
36
+ _ref$apiUrl = _ref.apiUrl,
37
+ apiUrl = _ref$apiUrl === void 0 ? "https://api.powrbase.cloud" : _ref$apiUrl,
38
+ _ref$theme = _ref.theme,
39
+ theme = _ref$theme === void 0 ? "default" : _ref$theme,
40
+ onRouteAdded = _ref.onRouteAdded,
41
+ onRouteUpdated = _ref.onRouteUpdated,
42
+ onError = _ref.onError;
43
+ var _useState = (0, _react.useState)([]),
44
+ _useState2 = _slicedToArray(_useState, 2),
45
+ routes = _useState2[0],
46
+ setRoutes = _useState2[1];
47
+ var _useState3 = (0, _react.useState)(true),
48
+ _useState4 = _slicedToArray(_useState3, 2),
49
+ loading = _useState4[0],
50
+ setLoading = _useState4[1];
51
+ var _useState5 = (0, _react.useState)(false),
52
+ _useState6 = _slicedToArray(_useState5, 2),
53
+ isSubmitting = _useState6[0],
54
+ setIsSubmitting = _useState6[1];
55
+ var _useState7 = (0, _react.useState)(false),
56
+ _useState8 = _slicedToArray(_useState7, 2),
57
+ showAddModal = _useState8[0],
58
+ setShowAddModal = _useState8[1];
59
+ var _useState9 = (0, _react.useState)(false),
60
+ _useState0 = _slicedToArray(_useState9, 2),
61
+ showEditModal = _useState0[0],
62
+ setShowEditModal = _useState0[1];
63
+ var _useState1 = (0, _react.useState)(null),
64
+ _useState10 = _slicedToArray(_useState1, 2),
65
+ editingRoute = _useState10[0],
66
+ setEditingRoute = _useState10[1];
67
+ var _useState11 = (0, _react.useState)(''),
68
+ _useState12 = _slicedToArray(_useState11, 2),
69
+ iframeSrcDoc = _useState12[0],
70
+ setIframeSrcDoc = _useState12[1];
71
+
72
+ // Separate state for add modal testing
73
+ var _useState13 = (0, _react.useState)(''),
74
+ _useState14 = _slicedToArray(_useState13, 2),
75
+ addUserInput = _useState14[0],
76
+ setAddUserInput = _useState14[1];
77
+ var _useState15 = (0, _react.useState)(''),
78
+ _useState16 = _slicedToArray(_useState15, 2),
79
+ addOutput = _useState16[0],
80
+ setAddOutput = _useState16[1];
81
+
82
+ // Separate state for edit modal testing
83
+ var _useState17 = (0, _react.useState)(''),
84
+ _useState18 = _slicedToArray(_useState17, 2),
85
+ editUserInput = _useState18[0],
86
+ setEditUserInput = _useState18[1];
87
+ var _useState19 = (0, _react.useState)(''),
88
+ _useState20 = _slicedToArray(_useState19, 2),
89
+ editOutput = _useState20[0],
90
+ setEditOutput = _useState20[1];
91
+
92
+ // Test mode to track which modal is being tested
93
+ var _useState21 = (0, _react.useState)(null),
94
+ _useState22 = _slicedToArray(_useState21, 2),
95
+ testMode = _useState22[0],
96
+ setTestMode = _useState22[1];
97
+ var _useState23 = (0, _react.useState)({
98
+ name: '',
99
+ // Default code for testing
100
+ path: ''
101
+ }),
102
+ _useState24 = _slicedToArray(_useState23, 2),
103
+ formData = _useState24[0],
104
+ setFormData = _useState24[1];
105
+ var _useState25 = (0, _react.useState)({
106
+ code: ''
107
+ }),
108
+ _useState26 = _slicedToArray(_useState25, 2),
109
+ editFormData = _useState26[0],
110
+ setEditFormData = _useState26[1];
111
+ var iframeRef = (0, _react.useRef)(null);
112
+ var handleTestAddCode = function handleTestAddCode() {
113
+ setAddOutput("");
114
+ setTestMode('add');
115
+ console.log("Testing add code with user input:", addUserInput, formData);
116
+ var escapedUserInput = addUserInput.replace(/`/g, "\\`");
117
+ var wrappedCode = "\n <script>\n const userInput = `".concat(escapedUserInput, "`;\n const log = console.log;\n console.log = function(...args) {\n parent.postMessage({ type: 'console', message: args.join(' ') }, '*');\n log.apply(console, args);\n };\n try {\n ").concat(formData.name, "\n } catch (err) {\n console.log(\"Error:\", err.message);\n }\n </script>\n ");
118
+ setIframeSrcDoc("<html><body>".concat(wrappedCode, "</body></html>"));
119
+ };
120
+ var handleTestEditCode = function handleTestEditCode() {
121
+ setEditOutput("");
122
+ setTestMode('edit');
123
+ console.log("Testing edit code with user input:", editUserInput, editFormData);
124
+ var escapedUserInput = editUserInput.replace(/`/g, "\\`");
125
+ var wrappedCode = "\n <script>\n const userInput = `".concat(escapedUserInput, "`;\n const log = console.log;\n console.log = function(...args) {\n parent.postMessage({ type: 'console', message: args.join(' ') }, '*');\n log.apply(console, args);\n };\n try {\n ").concat(editFormData.code, "\n } catch (err) {\n console.log(\"Error:\", err.message);\n }\n </script>\n ");
126
+ setIframeSrcDoc("<html><body>".concat(wrappedCode, "</body></html>"));
127
+ };
128
+ (0, _react.useEffect)(function () {
129
+ var handleMessage = function handleMessage(event) {
130
+ var _event$data;
131
+ if (((_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.type) === 'console') {
132
+ if (testMode === 'add') {
133
+ setAddOutput(function (prev) {
134
+ return prev + event.data.message + '\n';
135
+ });
136
+ } else if (testMode === 'edit') {
137
+ setEditOutput(function (prev) {
138
+ return prev + event.data.message + '\n';
139
+ });
140
+ }
141
+ }
142
+ };
143
+ window.addEventListener('message', handleMessage);
144
+ return function () {
145
+ return window.removeEventListener('message', handleMessage);
146
+ };
147
+ }, [testMode]);
148
+ var fetchRoutes = /*#__PURE__*/function () {
149
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
150
+ var response, data, errorMsg, _t;
151
+ return _regenerator().w(function (_context) {
152
+ while (1) switch (_context.n) {
153
+ case 0:
154
+ _context.p = 0;
155
+ setLoading(true);
156
+ _context.n = 1;
157
+ return fetch("".concat(apiUrl, "/routes?projectId=").concat(projectId), {
158
+ method: 'GET',
159
+ headers: {
160
+ 'Content-Type': 'application/json'
161
+ }
162
+ });
163
+ case 1:
164
+ response = _context.v;
165
+ if (response.ok) {
166
+ _context.n = 2;
167
+ break;
168
+ }
169
+ throw new Error('Failed to fetch routes');
170
+ case 2:
171
+ _context.n = 3;
172
+ return response.json();
173
+ case 3:
174
+ data = _context.v;
175
+ if (!data.success) {
176
+ _context.n = 4;
177
+ break;
178
+ }
179
+ setRoutes(data.allroutes || []);
180
+ _context.n = 5;
181
+ break;
182
+ case 4:
183
+ throw new Error('API response indicates failure');
184
+ case 5:
185
+ _context.n = 7;
186
+ break;
187
+ case 6:
188
+ _context.p = 6;
189
+ _t = _context.v;
190
+ console.error('Error fetching routes:', _t);
191
+ errorMsg = 'Failed to load routes';
192
+ _reactToastify.toast.error(errorMsg);
193
+ onError && onError(_t, errorMsg);
194
+ case 7:
195
+ _context.p = 7;
196
+ setLoading(false);
197
+ return _context.f(7);
198
+ case 8:
199
+ return _context.a(2);
200
+ }
201
+ }, _callee, null, [[0, 6, 7, 8]]);
202
+ }));
203
+ return function fetchRoutes() {
204
+ return _ref2.apply(this, arguments);
205
+ };
206
+ }();
207
+ (0, _react.useEffect)(function () {
208
+ if (projectId) {
209
+ fetchRoutes();
210
+ }
211
+ }, [projectId]);
212
+ var handleInputChange = function handleInputChange(e) {
213
+ var _e$target = e.target,
214
+ name = _e$target.name,
215
+ value = _e$target.value;
216
+ setFormData(function (prev) {
217
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, value));
218
+ });
219
+ };
220
+ var handleEditInputChange = function handleEditInputChange(e) {
221
+ var _e$target2 = e.target,
222
+ name = _e$target2.name,
223
+ value = _e$target2.value;
224
+ setEditFormData(function (prev) {
225
+ return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, value));
226
+ });
227
+ };
228
+ var handleSubmit = /*#__PURE__*/function () {
229
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
230
+ var errorMsg, response, contentType, result, successMsg, _errorMsg, _t2;
231
+ return _regenerator().w(function (_context2) {
232
+ while (1) switch (_context2.n) {
233
+ case 0:
234
+ if (!(!formData.name || !formData.path)) {
235
+ _context2.n = 1;
236
+ break;
237
+ }
238
+ errorMsg = 'Name and path are required';
239
+ _reactToastify.toast.error(errorMsg);
240
+ onError && onError(new Error(errorMsg), errorMsg);
241
+ return _context2.a(2);
242
+ case 1:
243
+ setIsSubmitting(true);
244
+ _context2.p = 2;
245
+ _context2.n = 3;
246
+ return fetch("".concat(apiUrl, "/routes?projectId=").concat(projectId), {
247
+ method: 'POST',
248
+ headers: {
249
+ 'Content-Type': 'application/json'
250
+ },
251
+ body: JSON.stringify({
252
+ code: formData.name,
253
+ route: formData.path
254
+ })
255
+ });
256
+ case 3:
257
+ response = _context2.v;
258
+ if (response.ok) {
259
+ _context2.n = 4;
260
+ break;
261
+ }
262
+ throw new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
263
+ case 4:
264
+ contentType = response.headers.get('content-type');
265
+ if (!(!contentType || !contentType.includes('application/json'))) {
266
+ _context2.n = 5;
267
+ break;
268
+ }
269
+ throw new Error('Server returned non-JSON response');
270
+ case 5:
271
+ _context2.n = 6;
272
+ return response.json();
273
+ case 6:
274
+ result = _context2.v;
275
+ if (!result.success) {
276
+ _context2.n = 7;
277
+ break;
278
+ }
279
+ successMsg = 'Route added successfully!';
280
+ _reactToastify.toast.success(successMsg);
281
+ onRouteAdded && onRouteAdded(result.entry);
282
+ setFormData({
283
+ name: '',
284
+ path: ''
285
+ });
286
+ setShowAddModal(false);
287
+ setAddUserInput('');
288
+ setAddOutput('');
289
+ setTestMode(null);
290
+ fetchRoutes();
291
+ _context2.n = 8;
292
+ break;
293
+ case 7:
294
+ throw new Error(result.message || 'Failed to add route');
295
+ case 8:
296
+ _context2.n = 10;
297
+ break;
298
+ case 9:
299
+ _context2.p = 9;
300
+ _t2 = _context2.v;
301
+ console.error('Error adding route:', _t2);
302
+ _errorMsg = _t2 instanceof Error ? _t2.message : 'Failed to add route';
303
+ _reactToastify.toast.error(_errorMsg);
304
+ onError && onError(_t2, _errorMsg);
305
+ case 10:
306
+ _context2.p = 10;
307
+ setIsSubmitting(false);
308
+ return _context2.f(10);
309
+ case 11:
310
+ return _context2.a(2);
311
+ }
312
+ }, _callee2, null, [[2, 9, 10, 11]]);
313
+ }));
314
+ return function handleSubmit() {
315
+ return _ref3.apply(this, arguments);
316
+ };
317
+ }();
318
+ var handleEditClick = function handleEditClick(route) {
319
+ setEditingRoute(route);
320
+ setEditFormData({
321
+ code: route.code
322
+ });
323
+ setEditUserInput('');
324
+ setEditOutput('');
325
+ setTestMode(null);
326
+ setShowEditModal(true);
327
+ };
328
+ var handleEditSubmit = /*#__PURE__*/function () {
329
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
330
+ var errorMsg, response, contentType, result, successMsg, _errorMsg2, _t3;
331
+ return _regenerator().w(function (_context3) {
332
+ while (1) switch (_context3.n) {
333
+ case 0:
334
+ if (!(!editingRoute || !editFormData.code)) {
335
+ _context3.n = 1;
336
+ break;
337
+ }
338
+ errorMsg = 'Code is required';
339
+ _reactToastify.toast.error(errorMsg);
340
+ onError && onError(new Error(errorMsg), errorMsg);
341
+ return _context3.a(2);
342
+ case 1:
343
+ setIsSubmitting(true);
344
+ _context3.p = 2;
345
+ _context3.n = 3;
346
+ return fetch("".concat(apiUrl, "/routes/").concat(editingRoute.route.replace('/', ''), "?projectId=").concat(projectId), {
347
+ method: 'PUT',
348
+ headers: {
349
+ 'Content-Type': 'application/json'
350
+ },
351
+ body: JSON.stringify({
352
+ code: editFormData.code
353
+ })
354
+ });
355
+ case 3:
356
+ response = _context3.v;
357
+ if (response.ok) {
358
+ _context3.n = 4;
359
+ break;
360
+ }
361
+ throw new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
362
+ case 4:
363
+ contentType = response.headers.get('content-type');
364
+ if (!(!contentType || !contentType.includes('application/json'))) {
365
+ _context3.n = 5;
366
+ break;
367
+ }
368
+ throw new Error('Server returned non-JSON response');
369
+ case 5:
370
+ _context3.n = 6;
371
+ return response.json();
372
+ case 6:
373
+ result = _context3.v;
374
+ if (!result.success) {
375
+ _context3.n = 7;
376
+ break;
377
+ }
378
+ successMsg = 'Route updated successfully!';
379
+ _reactToastify.toast.success(successMsg);
380
+ onRouteUpdated && onRouteUpdated(result.entry);
381
+ setEditFormData({
382
+ code: ''
383
+ });
384
+ setShowEditModal(false);
385
+ setEditingRoute(null);
386
+ setEditUserInput('');
387
+ setEditOutput('');
388
+ setTestMode(null);
389
+ fetchRoutes();
390
+ _context3.n = 8;
391
+ break;
392
+ case 7:
393
+ throw new Error(result.message || 'Failed to update route');
394
+ case 8:
395
+ _context3.n = 10;
396
+ break;
397
+ case 9:
398
+ _context3.p = 9;
399
+ _t3 = _context3.v;
400
+ console.log('Error updating route:', _t3);
401
+ _errorMsg2 = _t3 instanceof Error ? _t3.message : 'Failed to update route';
402
+ _reactToastify.toast.error(_errorMsg2);
403
+ onError && onError(_t3, _errorMsg2);
404
+ case 10:
405
+ _context3.p = 10;
406
+ setIsSubmitting(false);
407
+ return _context3.f(10);
408
+ case 11:
409
+ return _context3.a(2);
410
+ }
411
+ }, _callee3, null, [[2, 9, 10, 11]]);
412
+ }));
413
+ return function handleEditSubmit() {
414
+ return _ref4.apply(this, arguments);
415
+ };
416
+ }();
417
+ if (loading) {
418
+ return /*#__PURE__*/_react["default"].createElement("div", {
419
+ className: "flex items-center justify-center h-64"
420
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Loader, {
421
+ className: "animate-spin size-8"
422
+ }));
423
+ }
424
+ return /*#__PURE__*/_react["default"].createElement("div", {
425
+ className: ""
426
+ }, /*#__PURE__*/_react["default"].createElement(_reactToastify.ToastContainer, null), /*#__PURE__*/_react["default"].createElement("div", {
427
+ className: "flex items-center justify-between"
428
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h1", {
429
+ className: "text-2xl font-bold text-gray-900"
430
+ }, "Plexx Routes Management"), /*#__PURE__*/_react["default"].createElement("p", {
431
+ className: "text-gray-600 mt-1"
432
+ }, "Manage your dynamic API routes and endpoints")), /*#__PURE__*/_react["default"].createElement(_button.Button, {
433
+ onClick: function onClick() {
434
+ setShowAddModal(true);
435
+ setAddUserInput('');
436
+ setAddOutput('');
437
+ setTestMode(null);
438
+ },
439
+ className: "bg-orange-600 hover:bg-orange-700"
440
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Plus, {
441
+ className: "size-4 mr-2"
442
+ }), "Add Route")), /*#__PURE__*/_react["default"].createElement("div", {
443
+ className: "grid grid-cols-1 md:grid-cols-1 gap-4 mt-6"
444
+ }, /*#__PURE__*/_react["default"].createElement(_card.Card, null, /*#__PURE__*/_react["default"].createElement(_card.CardContent, {
445
+ className: "p-4"
446
+ }, /*#__PURE__*/_react["default"].createElement("div", {
447
+ className: "flex items-center"
448
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Route, {
449
+ className: "size-8 text-blue-600"
450
+ }), /*#__PURE__*/_react["default"].createElement("div", {
451
+ className: "ml-3"
452
+ }, /*#__PURE__*/_react["default"].createElement("p", {
453
+ className: "text-sm font-medium text-gray-600"
454
+ }, "Total Routes"), /*#__PURE__*/_react["default"].createElement("p", {
455
+ className: "text-2xl font-bold text-gray-900"
456
+ }, routes.length)))))), /*#__PURE__*/_react["default"].createElement(_card.Card, {
457
+ className: "mt-6"
458
+ }, /*#__PURE__*/_react["default"].createElement(_card.CardHeader, null, /*#__PURE__*/_react["default"].createElement(_card.CardTitle, null, "All API Routes")), /*#__PURE__*/_react["default"].createElement(_card.CardContent, null, routes.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
459
+ className: "text-center py-8 text-gray-500"
460
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Route, {
461
+ className: "size-12 mx-auto mb-4 text-gray-300"
462
+ }), /*#__PURE__*/_react["default"].createElement("p", null, "No routes configured yet"), /*#__PURE__*/_react["default"].createElement("p", {
463
+ className: "text-sm"
464
+ }, "Add your first route to get started")) : /*#__PURE__*/_react["default"].createElement("div", {
465
+ className: "space-y-4"
466
+ }, routes.map(function (route) {
467
+ return /*#__PURE__*/_react["default"].createElement("div", {
468
+ key: route._id,
469
+ className: "flex items-center justify-between p-4 border rounded-lg hover:bg-gray-50"
470
+ }, /*#__PURE__*/_react["default"].createElement("div", {
471
+ className: "flex-1"
472
+ }, /*#__PURE__*/_react["default"].createElement("div", {
473
+ className: "flex items-center space-x-3"
474
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("p", {
475
+ className: "text-sm font-medium text-gray-900"
476
+ }, "/", route.route), /*#__PURE__*/_react["default"].createElement("p", {
477
+ className: "text-xs text-gray-400 font-mono bg-gray-100 px-2 py-1 rounded"
478
+ }, route.code)))), /*#__PURE__*/_react["default"].createElement("div", {
479
+ className: "flex items-center space-x-2"
480
+ }, /*#__PURE__*/_react["default"].createElement(_button.Button, {
481
+ variant: "ghost",
482
+ size: "sm",
483
+ onClick: function onClick() {
484
+ return handleEditClick(route);
485
+ },
486
+ className: "p-2 hover:bg-gray-100"
487
+ }, /*#__PURE__*/_react["default"].createElement(_lucideReact.Edit, {
488
+ className: "size-4 text-gray-500"
489
+ }))));
490
+ })))), showAddModal && /*#__PURE__*/_react["default"].createElement("div", {
491
+ className: "fixed inset-0 flex items-center justify-center bg-black/50 z-50"
492
+ }, /*#__PURE__*/_react["default"].createElement("div", {
493
+ className: "bg-white rounded-2xl shadow-xl p-6 w-full max-w-3xl overflow-y-auto max-h-[90vh]"
494
+ }, /*#__PURE__*/_react["default"].createElement("h2", {
495
+ className: "text-xl font-bold text-gray-800 mb-6"
496
+ }, "Add New Route"), /*#__PURE__*/_react["default"].createElement("div", {
497
+ className: "space-y-4"
498
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_label.Label, {
499
+ htmlFor: "name"
500
+ }, "Code * ", /*#__PURE__*/_react["default"].createElement("span", {
501
+ className: "text-xs text-gray-400"
502
+ }, "(Use ", /*#__PURE__*/_react["default"].createElement("code", null, "userInput"), " to access test input)")), /*#__PURE__*/_react["default"].createElement(_react2.Editor, {
503
+ height: "40vh",
504
+ language: "javascript",
505
+ value: formData.name,
506
+ onChange: function onChange(newValue) {
507
+ return setFormData(function (prev) {
508
+ return _objectSpread(_objectSpread({}, prev), {}, {
509
+ name: newValue || ''
510
+ });
511
+ });
512
+ },
513
+ theme: "vs-dark"
514
+ })), /*#__PURE__*/_react["default"].createElement("div", {
515
+ className: "space-y-2"
516
+ }, /*#__PURE__*/_react["default"].createElement("label", {
517
+ htmlFor: "userInput",
518
+ className: "block text-sm font-medium text-gray-700"
519
+ }, "Test Input (optional)"), /*#__PURE__*/_react["default"].createElement("textarea", {
520
+ id: "userInput",
521
+ rows: 3,
522
+ className: "w-full border border-gray-300 rounded-md p-2 focus:outline-none focus:border-orange-600 focus:ring-1 focus:ring-orange-600",
523
+ value: addUserInput,
524
+ onChange: function onChange(e) {
525
+ return setAddUserInput(e.target.value);
526
+ },
527
+ placeholder: "Enter test input if required"
528
+ }), /*#__PURE__*/_react["default"].createElement("div", {
529
+ className: "flex justify-end gap-4 mt-4"
530
+ }, /*#__PURE__*/_react["default"].createElement(_button.Button, {
531
+ className: "bg-orange-600 text-white hover:bg-orange-700",
532
+ onClick: handleTestAddCode,
533
+ disabled: loading
534
+ }, "Test Code")), addOutput && /*#__PURE__*/_react["default"].createElement("div", {
535
+ className: "mt-6"
536
+ }, /*#__PURE__*/_react["default"].createElement("label", {
537
+ className: "block text-sm font-medium text-gray-700 mb-1"
538
+ }, "Output"), /*#__PURE__*/_react["default"].createElement("pre", {
539
+ className: "bg-gray-800 text-green-200 p-4 rounded-md overflow-auto max-h-64"
540
+ }, addOutput))), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_label.Label, {
541
+ htmlFor: "path"
542
+ }, "Route *"), /*#__PURE__*/_react["default"].createElement(_input.Input, {
543
+ id: "path",
544
+ name: "path",
545
+ type: "text",
546
+ value: formData.path,
547
+ onChange: handleInputChange,
548
+ placeholder: "welcome",
549
+ required: true
550
+ }))), /*#__PURE__*/_react["default"].createElement("div", {
551
+ className: "flex justify-end gap-4 mt-6"
552
+ }, /*#__PURE__*/_react["default"].createElement(_button.Button, {
553
+ onClick: function onClick() {
554
+ setShowAddModal(false);
555
+ setAddUserInput('');
556
+ setAddOutput('');
557
+ setTestMode(null);
558
+ },
559
+ variant: "outline",
560
+ className: "bg-gray-300 text-gray-700 hover:bg-gray-400"
561
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement(_button.Button, {
562
+ onClick: handleSubmit,
563
+ disabled: isSubmitting,
564
+ className: "bg-orange-600 text-white hover:bg-orange-700"
565
+ }, isSubmitting ? /*#__PURE__*/_react["default"].createElement(_lucideReact.Loader, {
566
+ className: "animate-spin size-5 mx-auto"
567
+ }) : 'Add Route')))), showEditModal && editingRoute && /*#__PURE__*/_react["default"].createElement("div", {
568
+ className: "fixed inset-0 flex items-center justify-center bg-black/50 z-50"
569
+ }, /*#__PURE__*/_react["default"].createElement("div", {
570
+ className: "bg-white rounded-2xl shadow-xl p-6 w-full max-w-3xl overflow-y-auto max-h-[90vh]"
571
+ }, /*#__PURE__*/_react["default"].createElement("h2", {
572
+ className: "text-xl font-bold text-gray-800 mb-6"
573
+ }, "Edit Route: /", editingRoute.route), /*#__PURE__*/_react["default"].createElement("div", {
574
+ className: "space-y-4"
575
+ }, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement(_label.Label, {
576
+ htmlFor: "name"
577
+ }, "Code * ", /*#__PURE__*/_react["default"].createElement("span", {
578
+ className: "text-xs text-gray-400"
579
+ }, "(Use ", /*#__PURE__*/_react["default"].createElement("code", null, "userInput"), " to access test input)")), /*#__PURE__*/_react["default"].createElement(_react2.Editor, {
580
+ height: "40vh",
581
+ language: "javascript",
582
+ value: editFormData.code,
583
+ onChange: function onChange(newValue) {
584
+ return setEditFormData(function (prev) {
585
+ return _objectSpread(_objectSpread({}, prev), {}, {
586
+ code: newValue || ''
587
+ });
588
+ });
589
+ },
590
+ theme: "vs-dark"
591
+ })), /*#__PURE__*/_react["default"].createElement("div", {
592
+ className: "space-y-2"
593
+ }, /*#__PURE__*/_react["default"].createElement("label", {
594
+ htmlFor: "userInput",
595
+ className: "block text-sm font-medium text-gray-700"
596
+ }, "Test Input (optional)"), /*#__PURE__*/_react["default"].createElement("textarea", {
597
+ id: "userInput",
598
+ rows: 3,
599
+ className: "w-full border border-gray-300 rounded-md p-2 focus:outline-none focus:border-orange-600 focus:ring-1 focus:ring-orange-600",
600
+ value: editUserInput,
601
+ onChange: function onChange(e) {
602
+ return setEditUserInput(e.target.value);
603
+ },
604
+ placeholder: "Enter test input if required"
605
+ }), /*#__PURE__*/_react["default"].createElement("div", {
606
+ className: "flex justify-end gap-4 mt-4"
607
+ }, /*#__PURE__*/_react["default"].createElement(_button.Button, {
608
+ className: "bg-orange-600 text-white hover:bg-orange-700",
609
+ onClick: handleTestEditCode,
610
+ disabled: loading
611
+ }, "Test Code")), editOutput && /*#__PURE__*/_react["default"].createElement("div", {
612
+ className: "mt-6"
613
+ }, /*#__PURE__*/_react["default"].createElement("label", {
614
+ className: "block text-sm font-medium text-gray-700 mb-1"
615
+ }, "Output"), /*#__PURE__*/_react["default"].createElement("pre", {
616
+ className: "bg-gray-800 text-green-200 p-4 rounded-md overflow-auto max-h-64"
617
+ }, editOutput)))), /*#__PURE__*/_react["default"].createElement("div", {
618
+ className: "flex justify-end gap-4 mt-6"
619
+ }, /*#__PURE__*/_react["default"].createElement(_button.Button, {
620
+ onClick: function onClick() {
621
+ setShowEditModal(false);
622
+ setEditingRoute(null);
623
+ setEditFormData({
624
+ code: ''
625
+ });
626
+ setEditUserInput('');
627
+ setEditOutput('');
628
+ setTestMode(null);
629
+ },
630
+ variant: "outline",
631
+ className: "bg-gray-300 text-gray-700 hover:bg-gray-400"
632
+ }, "Cancel"), /*#__PURE__*/_react["default"].createElement(_button.Button, {
633
+ onClick: handleEditSubmit,
634
+ disabled: isSubmitting,
635
+ className: "bg-orange-600 text-white hover:bg-orange-700"
636
+ }, isSubmitting ? /*#__PURE__*/_react["default"].createElement(_lucideReact.Loader, {
637
+ className: "animate-spin size-5 mx-auto"
638
+ }) : 'Update Route')))), /*#__PURE__*/_react["default"].createElement("iframe", {
639
+ title: "code-runner",
640
+ sandbox: "allow-scripts",
641
+ srcDoc: iframeSrcDoc,
642
+ style: {
643
+ display: 'none'
644
+ }
645
+ }));
646
+ };
647
+ var _default = exports["default"] = PowrBasePlexxAdmin;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "powr-sdk-web",
3
- "version": "2.4.0",
3
+ "version": "3.0.0",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "build": "babel src -d dist --copy-files",