dinocollab-shared 1.2.1 → 1.2.2
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/_virtual/_rollupPluginBabelHelpers.js +2 -2
- package/dist/editor-kit/array-item.js +1 -1
- package/dist/editor-kit/array-item.js.map +1 -1
- package/dist/editor-kit/helpers.js +1 -1
- package/dist/editor-kit/helpers.js.map +1 -1
- package/dist/editor-kit/index.js +1 -1
- package/dist/editor-kit/mode.iframe.js +1 -1
- package/dist/editor-kit/mode.iframe.js.map +1 -1
- package/dist/types/editor-kit/array-item.d.ts +16 -0
- package/dist/types/editor-kit/array-item.d.ts.map +1 -1
- package/dist/types/editor-kit/index.d.ts +0 -1
- package/dist/types/editor-kit/index.d.ts.map +1 -1
- package/dist/types/editor-kit/mode.iframe.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/editor-kit/events.js +0 -2
- package/dist/editor-kit/events.js.map +0 -1
- package/dist/editor-kit/mode.wrap.js +0 -2
- package/dist/editor-kit/mode.wrap.js.map +0 -1
- package/dist/types/editor-kit/mode.wrap.d.ts +0 -43
- package/dist/types/editor-kit/mode.wrap.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
function t(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}function r(t){if(Array.isArray(t))return t}function e(r){if(Array.isArray(r))return t(r)}function n(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t,r,e,n,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void e(t)}u.done?r(c):Promise.resolve(c).then(n,o)}function i(t){return function(){var r=this,e=arguments;return new Promise(function(n,i){var a=t.apply(r,e);function u(t){o(a,n,i,u,c,"next",t)}function c(t){o(a,n,i,u,c,"throw",t)}u(void 0)})}}function a(t,r,e){return r=y(r),P(t,b()?Reflect.construct(r,e||[],y(t).constructor):r.apply(t,e))}function u(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}function c(t,r,e){return r&&function(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function f(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=k(t))||r){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}}function l(t,r,e){return(r=C(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function s(){return s="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,r,e){var n=_(t,r);if(n){var o=Object.getOwnPropertyDescriptor(n,r);return o.get?o.get.call(arguments.length<3?t:e):o.value}},s.apply(null,arguments)}function y(t){return y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},y(t)}function p(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&A(t,r)}function b(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(b=function(){return!!t})()}function v(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function d(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(e=e.call(t)).next,0===r);else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==r);c=!0);}catch(t){f=!0,o=t}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function m(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),e.push.apply(e,n)}return e}function
|
|
1
|
+
function t(t,r){(null==r||r>t.length)&&(r=t.length);for(var e=0,n=Array(r);e<r;e++)n[e]=t[e];return n}function r(t){if(Array.isArray(t))return t}function e(r){if(Array.isArray(r))return t(r)}function n(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function o(t,r,e,n,o,i,a){try{var u=t[i](a),c=u.value}catch(t){return void e(t)}u.done?r(c):Promise.resolve(c).then(n,o)}function i(t){return function(){var r=this,e=arguments;return new Promise(function(n,i){var a=t.apply(r,e);function u(t){o(a,n,i,u,c,"next",t)}function c(t){o(a,n,i,u,c,"throw",t)}u(void 0)})}}function a(t,r,e){return r=y(r),P(t,b()?Reflect.construct(r,e||[],y(t).constructor):r.apply(t,e))}function u(t,r){if(!(t instanceof r))throw new TypeError("Cannot call a class as a function")}function c(t,r,e){return r&&function(t,r){for(var e=0;e<r.length;e++){var n=r[e];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,C(n.key),n)}}(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function f(t,r){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!e){if(Array.isArray(t)||(e=k(t))||r){e&&(t=e);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){e=e.call(t)},n:function(){var t=e.next();return a=t.done,t},e:function(t){u=!0,i=t},f:function(){try{a||null==e.return||e.return()}finally{if(u)throw i}}}}function l(t,r,e){return(r=C(r))in t?Object.defineProperty(t,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[r]=e,t}function s(){return s="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,r,e){var n=_(t,r);if(n){var o=Object.getOwnPropertyDescriptor(n,r);return o.get?o.get.call(arguments.length<3?t:e):o.value}},s.apply(null,arguments)}function y(t){return y=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},y(t)}function p(t,r){if("function"!=typeof r&&null!==r)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(r&&r.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),r&&A(t,r)}function b(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(b=function(){return!!t})()}function v(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}function d(t,r){var e=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var n,o,i,a,u=[],c=!0,f=!1;try{if(i=(e=e.call(t)).next,0===r){if(Object(e)!==e)return;c=!1}else for(;!(c=(n=i.call(e)).done)&&(u.push(n.value),u.length!==r);c=!0);}catch(t){f=!0,o=t}finally{try{if(!c&&null!=e.return&&(a=e.return(),Object(a)!==a))return}finally{if(f)throw o}}return u}}function h(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function m(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function O(t,r){var e=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),e.push.apply(e,n)}return e}function j(t){for(var r=1;r<arguments.length;r++){var e=null!=arguments[r]?arguments[r]:{};r%2?O(Object(e),!0).forEach(function(r){l(t,r,e[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):O(Object(e)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))})}return t}function g(t,r){if(null==t)return{};var e,n,o=w(t,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n<i.length;n++)e=i[n],-1===r.indexOf(e)&&{}.propertyIsEnumerable.call(t,e)&&(o[e]=t[e])}return o}function w(t,r){if(null==t)return{};var e={};for(var n in t)if({}.hasOwnProperty.call(t,n)){if(-1!==r.indexOf(n))continue;e[n]=t[n]}return e}function P(t,r){if(r&&("object"==typeof r||"function"==typeof r))return r;if(void 0!==r)throw new TypeError("Derived constructors may only return object or undefined");return n(t)}function S(){
|
|
2
2
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
3
|
-
var t,r,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return T(f,"_invoke",function(e,n,o){var i,u,c,f=0,l=o||[],s=!1,y={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(r,e){return i=r,u=0,c=t,y.n=e,a}};function p(e,n){for(u=e,c=n,r=0;!s&&f&&!o&&r<l.length;r++){var o,i=l[r],p=y.p,b=i[2];e>3?(o=b===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=p&&((o=e<2&&p<i[1])?(u=0,y.v=n,y.n=i[1]):p<b&&(o=e<3||i[0]>n||n>b)&&(i[4]=e,i[5]=n,y.n=b,u=0))}if(o||e>1)return a;throw s=!0,n}return function(o,l,b){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&p(l,b),u=l,c=b;(r=u<2?t:c)||!s;){i||(u?u<3?(u>1&&(y.n=-1),p(u,c)):y.n=c:y.v=c);try{if(f=2,i){if(u||(o="next"),r=i[o]){if(!(r=r.call(i,c)))throw TypeError("iterator result is not an object");if(!r.done)return r;c=r.value,u<2&&(u=0)}else 1===u&&(r=i.return)&&r.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=t}else if((r=(s=y.n<0)?c:e.call(n,y))!==a)break}catch(r){i=t,u=1,c=r}finally{f=1}}return{value:r,done:s}}}(e,o,i),!0),f}var a={};function u(){}function c(){}function f(){}r=Object.getPrototypeOf;var l=[][n]?r(r([][n]())):(T(r={},n,function(){return this}),r),s=f.prototype=u.prototype=Object.create(l);function y(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,T(t,o,"GeneratorFunction")),t.prototype=Object.create(s),t}return c.prototype=f,T(s,"constructor",f),T(f,"constructor",c),c.displayName="GeneratorFunction",T(f,o,"GeneratorFunction"),T(s),T(s,o,"Generator"),T(s,n,function(){return this}),T(s,"toString",function(){return"[object Generator]"}),(S=function(){return{w:i,m:y}})()}function T(t,r,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}T=function(t,r,e,n){function i(r,e){T(t,r,function(t){return this._invoke(r,e,t)})}r?o?o(t,r,{value:e,enumerable:!n,configurable:!n,writable:!n}):t[r]=e:(i("next",0),i("throw",1),i("return",2))},T(t,r,e,n)}function A(t,r){return A=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},A(t,r)}function E(t,e){return r(t)||d(t,e)||k(t,e)||h()}function _(t,r){for(;!{}.hasOwnProperty.call(t,r)&&null!==(t=y(t)););return t}function I(t,r,e,n){var o=s(y(t.prototype),r,e);return"function"==typeof o?function(t){return o.apply(e,t)}:o}function x(t){return e(t)||v(t)||k(t)||m()}function R(t,r){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,r);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function C(t){var r=R(t,"string");return"symbol"==typeof r?r:r+""}function G(t){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},G(t)}function k(r,e){if(r){if("string"==typeof r)return t(r,e);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(r,e):void 0}}export{t as arrayLikeToArray,r as arrayWithHoles,e as arrayWithoutHoles,n as assertThisInitialized,i as asyncToGenerator,a as callSuper,u as classCallCheck,c as createClass,f as createForOfIteratorHelper,l as defineProperty,s as get,y as getPrototypeOf,p as inherits,b as isNativeReflectConstruct,v as iterableToArray,d as iterableToArrayLimit,h as nonIterableRest,m as nonIterableSpread,
|
|
3
|
+
var t,r,e="function"==typeof Symbol?Symbol:{},n=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function i(e,n,o,i){var c=n&&n.prototype instanceof u?n:u,f=Object.create(c.prototype);return T(f,"_invoke",function(e,n,o){var i,u,c,f=0,l=o||[],s=!1,y={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(r,e){return i=r,u=0,c=t,y.n=e,a}};function p(e,n){for(u=e,c=n,r=0;!s&&f&&!o&&r<l.length;r++){var o,i=l[r],p=y.p,b=i[2];e>3?(o=b===n)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=t):i[0]<=p&&((o=e<2&&p<i[1])?(u=0,y.v=n,y.n=i[1]):p<b&&(o=e<3||i[0]>n||n>b)&&(i[4]=e,i[5]=n,y.n=b,u=0))}if(o||e>1)return a;throw s=!0,n}return function(o,l,b){if(f>1)throw TypeError("Generator is already running");for(s&&1===l&&p(l,b),u=l,c=b;(r=u<2?t:c)||!s;){i||(u?u<3?(u>1&&(y.n=-1),p(u,c)):y.n=c:y.v=c);try{if(f=2,i){if(u||(o="next"),r=i[o]){if(!(r=r.call(i,c)))throw TypeError("iterator result is not an object");if(!r.done)return r;c=r.value,u<2&&(u=0)}else 1===u&&(r=i.return)&&r.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=t}else if((r=(s=y.n<0)?c:e.call(n,y))!==a)break}catch(r){i=t,u=1,c=r}finally{f=1}}return{value:r,done:s}}}(e,o,i),!0),f}var a={};function u(){}function c(){}function f(){}r=Object.getPrototypeOf;var l=[][n]?r(r([][n]())):(T(r={},n,function(){return this}),r),s=f.prototype=u.prototype=Object.create(l);function y(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,f):(t.__proto__=f,T(t,o,"GeneratorFunction")),t.prototype=Object.create(s),t}return c.prototype=f,T(s,"constructor",f),T(f,"constructor",c),c.displayName="GeneratorFunction",T(f,o,"GeneratorFunction"),T(s),T(s,o,"Generator"),T(s,n,function(){return this}),T(s,"toString",function(){return"[object Generator]"}),(S=function(){return{w:i,m:y}})()}function T(t,r,e,n){var o=Object.defineProperty;try{o({},"",{})}catch(t){o=0}T=function(t,r,e,n){function i(r,e){T(t,r,function(t){return this._invoke(r,e,t)})}r?o?o(t,r,{value:e,enumerable:!n,configurable:!n,writable:!n}):t[r]=e:(i("next",0),i("throw",1),i("return",2))},T(t,r,e,n)}function A(t,r){return A=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,r){return t.__proto__=r,t},A(t,r)}function E(t,e){return r(t)||d(t,e)||k(t,e)||h()}function _(t,r){for(;!{}.hasOwnProperty.call(t,r)&&null!==(t=y(t)););return t}function I(t,r,e,n){var o=s(y(t.prototype),r,e);return"function"==typeof o?function(t){return o.apply(e,t)}:o}function x(t){return e(t)||v(t)||k(t)||m()}function R(t,r){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var n=e.call(t,r);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}function C(t){var r=R(t,"string");return"symbol"==typeof r?r:r+""}function G(t){return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},G(t)}function k(r,e){if(r){if("string"==typeof r)return t(r,e);var n={}.toString.call(r).slice(8,-1);return"Object"===n&&r.constructor&&(n=r.constructor.name),"Map"===n||"Set"===n?Array.from(r):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(r,e):void 0}}export{t as arrayLikeToArray,r as arrayWithHoles,e as arrayWithoutHoles,n as assertThisInitialized,i as asyncToGenerator,a as callSuper,u as classCallCheck,c as createClass,f as createForOfIteratorHelper,l as defineProperty,s as get,y as getPrototypeOf,p as inherits,b as isNativeReflectConstruct,v as iterableToArray,d as iterableToArrayLimit,h as nonIterableRest,m as nonIterableSpread,j as objectSpread2,g as objectWithoutProperties,w as objectWithoutPropertiesLoose,P as possibleConstructorReturn,S as regenerator,T as regeneratorDefine,A as setPrototypeOf,E as slicedToArray,_ as superPropBase,I as superPropGet,x as toConsumableArray,R as toPrimitive,C as toPropertyKey,G as typeof,k as unsupportedIterableToArray};
|
|
4
4
|
//# sourceMappingURL=_rollupPluginBabelHelpers.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,inherits as e,createClass as o,classCallCheck as
|
|
1
|
+
import{defineProperty as t,inherits as e,createClass as o,classCallCheck as r,callSuper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as a,jsx as i}from"react/jsx-runtime";import{Component as l}from"react";import{styled as s,Paper as c,Box as p,Typography as m,IconButton as d}from"@mui/material";import u from"@mui/icons-material/Edit";import f from"@mui/icons-material/Delete";import g from"@mui/icons-material/Check";import h from"@mui/icons-material/Close";import D from"@mui/icons-material/ArrowUpward";import v from"@mui/icons-material/ArrowDownward";import x from"@mui/icons-material/DragIndicator";var C=function(){function s(e){var o;return r(this,s),o=n(this,s,[e]),t(o,"handleDeleteClick",function(t){t.stopPropagation(),o.setState({showDeleteConfirm:!0})}),t(o,"handleConfirmDelete",function(t){t.stopPropagation(),o.props.onDelete(o.props.index),o.setState({showDeleteConfirm:!1})}),t(o,"handleCancelDelete",function(t){t.stopPropagation(),o.setState({showDeleteConfirm:!1})}),t(o,"handleEdit",function(){o.props.onEdit(o.props.index)}),t(o,"handleMoveUp",function(t){t.stopPropagation(),o.props.onMoveUp&&o.props.onMoveUp(o.props.index)}),t(o,"handleMoveDown",function(t){t.stopPropagation(),o.props.onMoveDown&&o.props.onMoveDown(o.props.index)}),t(o,"handleDragStart",function(t){t.stopPropagation(),o.props.onDragStart&&o.props.onDragStart(o.props.index),t.dataTransfer.effectAllowed="move",t.dataTransfer.setData("text/plain",String(o.props.index))}),t(o,"handleDragEnd",function(t){t.stopPropagation(),o.props.onDragEnd&&o.props.onDragEnd()}),t(o,"handleDragOver",function(t){t.preventDefault(),t.stopPropagation(),o.props.onDragOver&&o.props.onDragOver(o.props.index)}),t(o,"handleDrop",function(t){if(t.preventDefault(),t.stopPropagation(),o.props.onDrop){var e=parseInt(t.dataTransfer.getData("text/plain"));isNaN(e)||e===o.props.index||o.props.onDrop(e,o.props.index)}}),o.state={showDeleteConfirm:!1},o}return e(s,l),o(s,[{key:"render",value:function(){var t=this.props,e=t.item,o=t.index,r=t.totalItems,n=t.isDragging,l=t.dragOverIndex,s=this.state.showDeleteConfirm,c=0===o,C=o===r-1,y=l===o;return a(b,{className:B.root,draggable:!0,onDragStart:this.handleDragStart,onDragEnd:this.handleDragEnd,onDragOver:this.handleDragOver,onDrop:this.handleDrop,sx:{opacity:n?.5:1,borderTop:y?"2px solid #1976d2":"none",transition:"all 0.2s ease"},children:[i(p,{className:B.dragHandle,sx:{cursor:"grab",display:"flex",alignItems:"center",mr:1},children:i(x,{fontSize:"small",color:"action"})}),a(p,{className:B.content,children:[a(m,{variant:"subtitle2",color:"primary",children:["Item #",o+1]}),i(m,{variant:"caption",color:"text.secondary",children:e.title||e.name||"Untitled"})]}),a(p,s?{className:B.confirmButtons,children:[i(d,{size:"small",color:"success",onClick:this.handleConfirmDelete,className:B.confirmButton,children:i(g,{fontSize:"small"})}),i(d,{size:"small",color:"error",onClick:this.handleCancelDelete,className:B.cancelButton,children:i(h,{fontSize:"small"})})]}:{className:B.actionButtons,children:[i(d,{size:"small",onClick:this.handleMoveUp,disabled:c,title:"Move Up",children:i(D,{fontSize:"small"})}),i(d,{size:"small",onClick:this.handleMoveDown,disabled:C,title:"Move Down",children:i(v,{fontSize:"small"})}),i(d,{size:"small",color:"primary",onClick:this.handleEdit,className:B.editButton,children:i(u,{fontSize:"small"})}),i(d,{size:"small",color:"error",onClick:this.handleDeleteClick,children:i(f,{fontSize:"small"})})]})]})}}])}(),B={root:"ArrayItem-root",dragHandle:"ArrayItem-dragHandle",content:"ArrayItem-content",actionButtons:"ArrayItem-actionButtons",confirmButtons:"ArrayItem-confirmButtons",editButton:"ArrayItem-editButton",confirmButton:"ArrayItem-confirmButton",cancelButton:"ArrayItem-cancelButton"},y=function(t,e){return"".concat("",".").concat(B[t]).concat("")},b=s(c)(function(e){var o=e.theme;return t(t(t(t(t(t(t({marginBottom:o.spacing(2),padding:o.spacing(2),display:"flex",justifyContent:"space-between",alignItems:"center",cursor:"default","&:active":{cursor:"grabbing"}},y("dragHandle"),{cursor:"grab",display:"flex",alignItems:"center","&:active":{cursor:"grabbing"}}),y("content"),{flex:1}),y("actionButtons"),{display:"flex",gap:o.spacing(.5)}),y("confirmButtons"),{display:"flex",gap:o.spacing(.5)}),y("editButton"),{}),y("confirmButton"),{backgroundColor:o.palette.success.light,color:o.palette.success.contrastText,"&:hover":{backgroundColor:o.palette.success.main}}),y("cancelButton"),{backgroundColor:o.palette.error.light,color:o.palette.error.contrastText,"&:hover":{backgroundColor:o.palette.error.main}})});export{C as ArrayItem,B as arrayItemClasses};
|
|
2
2
|
//# sourceMappingURL=array-item.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-item.js","sources":["../../src/editor-kit/array-item.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Box, Paper, IconButton, Typography, styled } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport CheckIcon from '@mui/icons-material/Check'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n\r\ninterface IArrayItemProps {\r\n item: any\r\n index: number\r\n onEdit: (index: number) => void\r\n onDelete: (index: number) => void\r\n}\r\n\r\ninterface IArrayItemState {\r\n showDeleteConfirm: boolean\r\n}\r\n\r\nexport class ArrayItem extends Component<IArrayItemProps, IArrayItemState> {\r\n constructor(props: IArrayItemProps) {\r\n super(props)\r\n this.state = {\r\n showDeleteConfirm: false\r\n }\r\n }\r\n\r\n handleDeleteClick = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.setState({ showDeleteConfirm: true })\r\n }\r\n\r\n handleConfirmDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.props.onDelete(this.props.index)\r\n this.setState({ showDeleteConfirm: false })\r\n }\r\n\r\n handleCancelDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.setState({ showDeleteConfirm: false })\r\n }\r\n\r\n handleEdit = () => {\r\n this.props.onEdit(this.props.index)\r\n }\r\n\r\n render() {\r\n const { item, index } = this.props\r\n const { showDeleteConfirm } = this.state\r\n\r\n return (\r\n <ArrayItemStyled className={arrayItemClasses.root}>\r\n <Box className={arrayItemClasses.content}>\r\n <Typography variant='subtitle2' color='primary'>\r\n Item #{index + 1}\r\n </Typography>\r\n <Typography variant='caption' color='text.secondary'>\r\n {item.title || item.name || 'Untitled'}\r\n </Typography>\r\n </Box>\r\n\r\n {showDeleteConfirm ? (\r\n <Box className={arrayItemClasses.confirmButtons}>\r\n <IconButton size='small' color='success' onClick={this.handleConfirmDelete} className={arrayItemClasses.confirmButton}>\r\n <CheckIcon fontSize='small' />\r\n </IconButton>\r\n <IconButton size='small' color='error' onClick={this.handleCancelDelete} className={arrayItemClasses.cancelButton}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Box>\r\n ) : (\r\n <Box className={arrayItemClasses.actionButtons}>\r\n <IconButton size='small' color='primary' onClick={this.handleEdit} className={arrayItemClasses.editButton}>\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n <IconButton size='small' color='error' onClick={this.handleDeleteClick}>\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </Box>\r\n )}\r\n </ArrayItemStyled>\r\n )\r\n }\r\n}\r\n\r\nexport const arrayItemClasses = {\r\n root: 'ArrayItem-root',\r\n content: 'ArrayItem-content',\r\n actionButtons: 'ArrayItem-actionButtons',\r\n confirmButtons: 'ArrayItem-confirmButtons',\r\n editButton: 'ArrayItem-editButton',\r\n confirmButton: 'ArrayItem-confirmButton',\r\n cancelButton: 'ArrayItem-cancelButton'\r\n}\r\n\r\nconst getClasses = (key: keyof typeof arrayItemClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${arrayItemClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst ArrayItemStyled = styled(Paper)(({ theme }) => ({\r\n marginBottom: theme.spacing(2),\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n\r\n [getClasses('content')]: {\r\n flex: 1\r\n },\r\n\r\n [getClasses('actionButtons')]: {\r\n display: 'flex',\r\n gap: theme.spacing(0.5)\r\n },\r\n\r\n [getClasses('confirmButtons')]: {\r\n display: 'flex',\r\n gap: theme.spacing(0.5)\r\n },\r\n\r\n [getClasses('editButton')]: {\r\n // No additional styles needed, using MUI default\r\n },\r\n\r\n [getClasses('confirmButton')]: {\r\n backgroundColor: theme.palette.success.light,\r\n color: theme.palette.success.contrastText,\r\n '&:hover': {\r\n backgroundColor: theme.palette.success.main\r\n }\r\n },\r\n\r\n [getClasses('cancelButton')]: {\r\n backgroundColor: theme.palette.error.light,\r\n color: theme.palette.error.contrastText,\r\n '&:hover': {\r\n backgroundColor: theme.palette.error.main\r\n }\r\n }\r\n}))\r\n"],"names":["ArrayItem","props","_this","_classCallCheck","_callSuper","_defineProperty","e","stopPropagation","setState","showDeleteConfirm","onDelete","index","onEdit","state","_inherits","Component","_createClass","key","value","_this$props","this","item","_jsxs","ArrayItemStyled","className","arrayItemClasses","root","children","Box","content","Typography","variant","color","_jsx","title","name","confirmButtons","IconButton","size","onClick","handleConfirmDelete","confirmButton","CheckIcon","fontSize","handleCancelDelete","cancelButton","CloseIcon","actionButtons","handleEdit","editButton","EditIcon","handleDeleteClick","DeleteIcon","getClasses","options","concat","styled","Paper","_ref","theme","marginBottom","spacing","padding","display","justifyContent","alignItems","flex","gap","backgroundColor","palette","success","light","contrastText","main","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"array-item.js","sources":["../../src/editor-kit/array-item.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { Box, Paper, IconButton, Typography, styled } from '@mui/material'\r\nimport EditIcon from '@mui/icons-material/Edit'\r\nimport DeleteIcon from '@mui/icons-material/Delete'\r\nimport CheckIcon from '@mui/icons-material/Check'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\nimport ArrowUpwardIcon from '@mui/icons-material/ArrowUpward'\r\nimport ArrowDownwardIcon from '@mui/icons-material/ArrowDownward'\r\nimport DragIndicatorIcon from '@mui/icons-material/DragIndicator'\r\n\r\ninterface IArrayItemProps {\r\n item: any\r\n index: number\r\n totalItems: number\r\n onEdit: (index: number) => void\r\n onDelete: (index: number) => void\r\n onMoveUp?: (index: number) => void\r\n onMoveDown?: (index: number) => void\r\n onDragStart?: (index: number) => void\r\n onDragEnd?: () => void\r\n onDragOver?: (index: number) => void\r\n onDrop?: (draggedIndex: number, targetIndex: number) => void\r\n isDragging?: boolean\r\n dragOverIndex?: number\r\n}\r\n\r\ninterface IArrayItemState {\r\n showDeleteConfirm: boolean\r\n}\r\n\r\nexport class ArrayItem extends Component<IArrayItemProps, IArrayItemState> {\r\n constructor(props: IArrayItemProps) {\r\n super(props)\r\n this.state = {\r\n showDeleteConfirm: false\r\n }\r\n }\r\n\r\n handleDeleteClick = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.setState({ showDeleteConfirm: true })\r\n }\r\n\r\n handleConfirmDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.props.onDelete(this.props.index)\r\n this.setState({ showDeleteConfirm: false })\r\n }\r\n\r\n handleCancelDelete = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n this.setState({ showDeleteConfirm: false })\r\n }\r\n\r\n handleEdit = () => {\r\n this.props.onEdit(this.props.index)\r\n }\r\n\r\n handleMoveUp = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n if (this.props.onMoveUp) {\r\n this.props.onMoveUp(this.props.index)\r\n }\r\n }\r\n\r\n handleMoveDown = (e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n if (this.props.onMoveDown) {\r\n this.props.onMoveDown(this.props.index)\r\n }\r\n }\r\n\r\n handleDragStart = (e: React.DragEvent) => {\r\n e.stopPropagation()\r\n if (this.props.onDragStart) {\r\n this.props.onDragStart(this.props.index)\r\n }\r\n // Set drag data\r\n e.dataTransfer.effectAllowed = 'move'\r\n e.dataTransfer.setData('text/plain', String(this.props.index))\r\n }\r\n\r\n handleDragEnd = (e: React.DragEvent) => {\r\n e.stopPropagation()\r\n if (this.props.onDragEnd) {\r\n this.props.onDragEnd()\r\n }\r\n }\r\n\r\n handleDragOver = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n if (this.props.onDragOver) {\r\n this.props.onDragOver(this.props.index)\r\n }\r\n }\r\n\r\n handleDrop = (e: React.DragEvent) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n \r\n if (this.props.onDrop) {\r\n const draggedIndex = parseInt(e.dataTransfer.getData('text/plain'))\r\n if (!isNaN(draggedIndex) && draggedIndex !== this.props.index) {\r\n this.props.onDrop(draggedIndex, this.props.index)\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { item, index, totalItems, isDragging, dragOverIndex } = this.props\r\n const { showDeleteConfirm } = this.state\r\n\r\n const isFirst = index === 0\r\n const isLast = index === totalItems - 1\r\n const isDraggedOver = dragOverIndex === index\r\n\r\n return (\r\n <ArrayItemStyled\r\n className={arrayItemClasses.root}\r\n draggable\r\n onDragStart={this.handleDragStart}\r\n onDragEnd={this.handleDragEnd}\r\n onDragOver={this.handleDragOver}\r\n onDrop={this.handleDrop}\r\n sx={{\r\n opacity: isDragging ? 0.5 : 1,\r\n borderTop: isDraggedOver ? '2px solid #1976d2' : 'none',\r\n transition: 'all 0.2s ease'\r\n }}\r\n >\r\n {/* Drag Handle */}\r\n <Box className={arrayItemClasses.dragHandle} sx={{ cursor: 'grab', display: 'flex', alignItems: 'center', mr: 1 }}>\r\n <DragIndicatorIcon fontSize='small' color='action' />\r\n </Box>\r\n\r\n <Box className={arrayItemClasses.content}>\r\n <Typography variant='subtitle2' color='primary'>\r\n Item #{index + 1}\r\n </Typography>\r\n <Typography variant='caption' color='text.secondary'>\r\n {item.title || item.name || 'Untitled'}\r\n </Typography>\r\n </Box>\r\n\r\n {showDeleteConfirm ? (\r\n <Box className={arrayItemClasses.confirmButtons}>\r\n <IconButton size='small' color='success' onClick={this.handleConfirmDelete} className={arrayItemClasses.confirmButton}>\r\n <CheckIcon fontSize='small' />\r\n </IconButton>\r\n <IconButton size='small' color='error' onClick={this.handleCancelDelete} className={arrayItemClasses.cancelButton}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Box>\r\n ) : (\r\n <Box className={arrayItemClasses.actionButtons}>\r\n {/* Move Up Button */}\r\n <IconButton size='small' onClick={this.handleMoveUp} disabled={isFirst} title='Move Up'>\r\n <ArrowUpwardIcon fontSize='small' />\r\n </IconButton>\r\n\r\n {/* Move Down Button */}\r\n <IconButton size='small' onClick={this.handleMoveDown} disabled={isLast} title='Move Down'>\r\n <ArrowDownwardIcon fontSize='small' />\r\n </IconButton>\r\n\r\n {/* Edit Button */}\r\n <IconButton size='small' color='primary' onClick={this.handleEdit} className={arrayItemClasses.editButton}>\r\n <EditIcon fontSize='small' />\r\n </IconButton>\r\n\r\n {/* Delete Button */}\r\n <IconButton size='small' color='error' onClick={this.handleDeleteClick}>\r\n <DeleteIcon fontSize='small' />\r\n </IconButton>\r\n </Box>\r\n )}\r\n </ArrayItemStyled>\r\n )\r\n }\r\n}\r\n\r\nexport const arrayItemClasses = {\r\n root: 'ArrayItem-root',\r\n dragHandle: 'ArrayItem-dragHandle',\r\n content: 'ArrayItem-content',\r\n actionButtons: 'ArrayItem-actionButtons',\r\n confirmButtons: 'ArrayItem-confirmButtons',\r\n editButton: 'ArrayItem-editButton',\r\n confirmButton: 'ArrayItem-confirmButton',\r\n cancelButton: 'ArrayItem-cancelButton'\r\n}\r\n\r\nconst getClasses = (key: keyof typeof arrayItemClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${arrayItemClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst ArrayItemStyled = styled(Paper)(({ theme }) => ({\r\n marginBottom: theme.spacing(2),\r\n padding: theme.spacing(2),\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n cursor: 'default',\r\n\r\n '&:active': {\r\n cursor: 'grabbing'\r\n },\r\n\r\n [getClasses('dragHandle')]: {\r\n cursor: 'grab',\r\n display: 'flex',\r\n alignItems: 'center',\r\n '&:active': {\r\n cursor: 'grabbing'\r\n }\r\n },\r\n\r\n [getClasses('content')]: {\r\n flex: 1\r\n },\r\n\r\n [getClasses('actionButtons')]: {\r\n display: 'flex',\r\n gap: theme.spacing(0.5)\r\n },\r\n\r\n [getClasses('confirmButtons')]: {\r\n display: 'flex',\r\n gap: theme.spacing(0.5)\r\n },\r\n\r\n [getClasses('editButton')]: {\r\n // No additional styles needed, using MUI default\r\n },\r\n\r\n [getClasses('confirmButton')]: {\r\n backgroundColor: theme.palette.success.light,\r\n color: theme.palette.success.contrastText,\r\n '&:hover': {\r\n backgroundColor: theme.palette.success.main\r\n }\r\n },\r\n\r\n [getClasses('cancelButton')]: {\r\n backgroundColor: theme.palette.error.light,\r\n color: theme.palette.error.contrastText,\r\n '&:hover': {\r\n backgroundColor: theme.palette.error.main\r\n }\r\n }\r\n}))\r\n"],"names":["ArrayItem","props","_this","_classCallCheck","_callSuper","_defineProperty","e","stopPropagation","setState","showDeleteConfirm","onDelete","index","onEdit","onMoveUp","onMoveDown","onDragStart","dataTransfer","effectAllowed","setData","String","onDragEnd","preventDefault","onDragOver","onDrop","draggedIndex","parseInt","getData","isNaN","state","_inherits","Component","_createClass","key","value","_this$props","this","item","totalItems","isDragging","dragOverIndex","isFirst","isLast","isDraggedOver","_jsxs","ArrayItemStyled","className","arrayItemClasses","root","draggable","handleDragStart","handleDragEnd","handleDragOver","handleDrop","sx","opacity","borderTop","transition","children","_jsx","Box","dragHandle","cursor","display","alignItems","mr","DragIndicatorIcon","fontSize","color","content","Typography","variant","title","name","confirmButtons","IconButton","size","onClick","handleConfirmDelete","confirmButton","CheckIcon","handleCancelDelete","cancelButton","CloseIcon","actionButtons","handleMoveUp","disabled","ArrowUpwardIcon","handleMoveDown","ArrowDownwardIcon","handleEdit","editButton","EditIcon","handleDeleteClick","DeleteIcon","getClasses","options","concat","styled","Paper","_ref","theme","marginBottom","spacing","padding","justifyContent","flex","gap","backgroundColor","palette","success","light","contrastText","main","error"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,createForOfIteratorHelper as e,typeof as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{useEffect as o}from"react";import
|
|
1
|
+
import{defineProperty as t,createForOfIteratorHelper as e,typeof as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{useEffect as o}from"react";import"events";var i={button:"editor-kit-btn",auto:"editor-kit-btn--auto"},r="data-editor-key",a=function(e){return t({},r,e)},d="data-editor-auto-mounted",c=function(t){t instanceof HTMLElement&&(t.querySelectorAll(".".concat(i.auto)).forEach(function(t){return t.remove()}),t.removeAttribute(d))},l=null,u=function(){l&&(l.disconnect(),l=null);try{document.querySelectorAll("[".concat(d,"]")).forEach(c)}catch(t){}},s=function(){if("undefined"!=typeof document&&!document.getElementById("editor-kit-styles")){var t=document.createElement("style");t.id="editor-kit-styles",t.textContent="\n [data-editor-key] {\n position: relative;\n border: 1px dashed rgba(255, 0, 0, 0.4);\n min-height: 40px;\n padding-top: 4px;\n }\n\n .editor-kit-btn {\n appearance: none;\n border: 0;\n background: rgba(0, 0, 0, 0.6);\n color: #fff;\n cursor: pointer;\n border-radius: 4px;\n padding: 4px 8px;\n font-size: 12px;\n line-height: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-weight: 500;\n transition: all 0.2s ease;\n }\n\n .editor-kit-btn--auto {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 9999;\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\n }\n\n .editor-kit-btn:hover,\n .editor-kit-btn:focus {\n background: rgba(0, 0, 0, 0.8);\n outline: none;\n transform: scale(1.05);\n }\n\n .editor-kit-btn:active {\n transform: scale(0.95);\n }\n ",document.head.appendChild(t)}},f=function(t){if(t instanceof HTMLElement&&!t.hasAttribute(d)){var e=t.getAttribute(r);if(e){var n=document.createElement("button");n.type="button",n.className=[i.button,i.auto].join(" "),n.textContent="Edit",n.title="Edit",n.addEventListener("click",function(n){n.preventDefault(),n.stopPropagation();var o=t.getAttribute("data-editor-index");window.parent.postMessage({type:"EDITOR_KIT_EDIT",key:e,index:o?parseInt(o):null},"*")}),t.appendChild(n),t.setAttribute(d,"1")}}},p=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:document,e=arguments.length>1&&void 0!==arguments[1]&&arguments[1];try{var n=t.querySelectorAll("[".concat(r,"]:not([").concat(d,"])"));(e||n.length>0)&&console.log("[EditorKit Client] Found",n.length,"unmounted elements"),n.forEach(f)}catch(t){console.error("[EditorKit Client] Error scanning:",t)}},m=function(){"undefined"!=typeof window&&"undefined"!=typeof document&&(console.log("[EditorKit Client] Starting auto-mount for iframe..."),p(document,!0),l&&l.disconnect(),(l=new MutationObserver(function(t){var n,o=e(t);try{for(o.s();!(n=o.n()).done;){var i=n.value;"childList"===i.type?i.addedNodes.forEach(function(t){t instanceof Element&&(t.hasAttribute(r)?f(t):t.children.length>0&&p(t))}):"attributes"===i.type&&i.target instanceof Element&&i.attributeName===r&&f(i.target)}}catch(t){o.e(t)}finally{o.f()}})).observe(document.documentElement||document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:[r]}),console.log("[EditorKit Client] Auto-mount started"))},b=function(){if("undefined"!=typeof window){s();var t=null;window.addEventListener("message",function(e){var o,i,a=null===(o=e.data)||void 0===o?void 0:o.type;if(a&&a.startsWith("EDITOR_KIT_"))switch(a){case"EDITOR_KIT_INIT":t=e.data.data,console.log("[EditorKit Client] Initialized with data"),window.parent.postMessage({type:"EDITOR_KIT_READY"},"*"),m();break;case"EDITOR_KIT_UPDATE_DATA":t=e.data.data,console.log("[EditorKit Client] Data updated"),(i=t)&&Object.keys(i).forEach(function(t){document.querySelectorAll("[".concat(r,'="').concat(t,'"]')).forEach(function(e){var o,r=e.getAttribute("data-editor-index"),a=null!==r?null===(o=i[t])||void 0===o?void 0:o[parseInt(r)]:i[t];if(null!=a)if("string"==typeof a){var d=Array.from(e.childNodes).find(function(t){return t.nodeType===Node.TEXT_NODE});d?d.textContent=a:e.textContent=a}else"object"===n(a)&&e.dispatchEvent(new CustomEvent("editor-kit-data-update",{detail:a}))})})}})}},E=function(){o(function(){return window.parent!==window&&(console.log("[useEditorKitClient] Initializing in iframe mode..."),s(),m(),b(),window.parent.postMessage({type:"EDITOR_KIT_CLIENT_READY"},"*")),function(){u()}},[])};export{r as EDIT_KEY,i as editKitClasses,a as getFieldEditor,b as initEditorKitClient,s as injectEditorKitStyles,m as startAutoMountForIframe,u as stopAutoMount,E as useEditorKitClient};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../src/editor-kit/helpers.ts"],"sourcesContent":["import { useEffect } from 'react'\r\nimport { getEditorKitEvent } from './events'\r\n\r\nexport const editKitClasses = {\r\n root: 'editor-kit-root',\r\n button: 'editor-kit-btn',\r\n auto: 'editor-kit-btn--auto'\r\n}\r\n\r\nexport const EDIT_KEY = 'data-editor-key'\r\n\r\n// event emitted when an edit button is clicked\r\nexport const EDIT_EVENT = 'editor-kit:edit'\r\n\r\n// Keep this minimal and non-intrusive for landing pages: only a data attribute.\r\nexport const getFieldEditor = <T = any>(key: keyof T) => ({ [EDIT_KEY]: key })\r\n\r\n/* --- Editor-mode auto-mount (minimal & opt-in) ---\r\n Behaviour:\r\n - Does nothing on landing pages by default.\r\n - Finds elements with [data-editor-key] and appends a small positioned Edit button when started.\r\n - Exports startAutoMount/stopAutoMount for manual control from an editor wrapper.\r\n*/\r\nconst AUTO_MOUNT_MARK = 'data-editor-auto-mounted'\r\n\r\nconst mountButtonOnElement = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n if (el.hasAttribute(AUTO_MOUNT_MARK)) return\r\n const key = el.getAttribute(EDIT_KEY)\r\n if (!key) return\r\n\r\n const btn = document.createElement('button')\r\n btn.type = 'button'\r\n btn.className = [editKitClasses.button, editKitClasses.auto].join(' ')\r\n btn.textContent = 'Edit'\r\n btn.title = 'Edit'\r\n\r\n // emit the edit event via the EditorKitEvent emitter so it doesn't pollute window\r\n btn.addEventListener('click', () => {\r\n try {\r\n const ee = getEditorKitEvent()\r\n if (ee) {\r\n // use the stateChange channel to signal editor UI; payload includes key\r\n ee.emit('stateChange', { key })\r\n } else {\r\n // fallback to window event if emitter not available\r\n window.dispatchEvent(new CustomEvent(EDIT_EVENT, { detail: { key } }))\r\n }\r\n } catch (err) {\r\n // graceful fallback\r\n window.dispatchEvent(new CustomEvent(EDIT_EVENT, { detail: { key } }))\r\n }\r\n })\r\n\r\n // Styling and parent positioning are handled by `style.scss` which is imported\r\n // from the editor component. This keeps helpers passive on landing pages.\r\n el.appendChild(btn)\r\n el.setAttribute(AUTO_MOUNT_MARK, '1')\r\n}\r\n\r\nconst unmountButtonsFromElement = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n const buttons = el.querySelectorAll(`.${editKitClasses.auto}`)\r\n buttons.forEach((btn) => btn.remove())\r\n el.removeAttribute(AUTO_MOUNT_MARK)\r\n}\r\n\r\nconst scanAndMount = (root: ParentNode = document) => {\r\n try {\r\n root.querySelectorAll(`[${EDIT_KEY}]`).forEach(mountButtonOnElement)\r\n } catch {\r\n // no-op in non-DOM envs\r\n }\r\n}\r\n\r\nlet _observer: MutationObserver | null = null\r\n\r\nexport const startAutoMount = () => {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') return\r\n if (_observer) return // already started\r\n\r\n // Inject CSS styles\r\n injectEditorKitStyles()\r\n\r\n scanAndMount(document)\r\n _observer = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n if (m.type === 'childList') {\r\n m.addedNodes.forEach((n) => {\r\n if (n instanceof Element) {\r\n if (n.hasAttribute(EDIT_KEY)) mountButtonOnElement(n)\r\n scanAndMount(n)\r\n }\r\n })\r\n } else if (m.type === 'attributes' && m.target instanceof Element) {\r\n if (m.attributeName === EDIT_KEY) mountButtonOnElement(m.target)\r\n }\r\n }\r\n })\r\n _observer.observe(document.documentElement || document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [EDIT_KEY]\r\n })\r\n}\r\n\r\nexport const stopAutoMount = () => {\r\n if (_observer) {\r\n _observer.disconnect()\r\n _observer = null\r\n }\r\n // Cleanup all mounted buttons\r\n try {\r\n document.querySelectorAll(`[${AUTO_MOUNT_MARK}]`).forEach(unmountButtonsFromElement)\r\n } catch {\r\n // no-op\r\n }\r\n}\r\n\r\n/* --- Inject CSS Styles ---\r\n Inject editor kit styles dynamically\r\n Used by both Normal mode and Iframe mode\r\n*/\r\nexport const injectEditorKitStyles = () => {\r\n if (typeof document === 'undefined') return\r\n\r\n // Check if already injected\r\n if (document.getElementById('editor-kit-styles')) return\r\n\r\n const style = document.createElement('style')\r\n style.id = 'editor-kit-styles'\r\n style.textContent = `\r\n [data-editor-key] {\r\n position: relative;\r\n border: 1px dashed rgba(255, 0, 0, 0.4);\r\n min-height: 40px;\r\n padding-top: 4px;\r\n }\r\n\r\n .editor-kit-btn {\r\n appearance: none;\r\n border: 0;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n padding: 4px 8px;\r\n font-size: 12px;\r\n line-height: 1;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n }\r\n\r\n .editor-kit-btn--auto {\r\n position: absolute;\r\n top: 4px;\r\n right: 4px;\r\n z-index: 9999;\r\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\r\n }\r\n\r\n .editor-kit-btn:hover,\r\n .editor-kit-btn:focus {\r\n background: rgba(0, 0, 0, 0.8);\r\n outline: none;\r\n transform: scale(1.05);\r\n }\r\n\r\n .editor-kit-btn:active {\r\n transform: scale(0.95);\r\n }\r\n `\r\n document.head.appendChild(style)\r\n}\r\n\r\n/* --- Iframe Client Mode ---\r\n Initialize editor kit client for landing pages loaded in iframe\r\n*/\r\n\r\n// Mount button for iframe mode - sends postMessage instead of event\r\nconst mountButtonForIframe = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n if (el.hasAttribute(AUTO_MOUNT_MARK)) return\r\n const key = el.getAttribute(EDIT_KEY)\r\n if (!key) return\r\n\r\n const btn = document.createElement('button')\r\n btn.type = 'button'\r\n btn.className = [editKitClasses.button, editKitClasses.auto].join(' ')\r\n btn.textContent = 'Edit'\r\n btn.title = 'Edit'\r\n\r\n // Click handler sends message to parent window\r\n btn.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n const indexAttr = el.getAttribute('data-editor-index')\r\n\r\n // Send message to Admin parent\r\n window.parent.postMessage({ type: 'EDITOR_KIT_EDIT', key: key, index: indexAttr ? parseInt(indexAttr) : null }, '*')\r\n })\r\n\r\n el.appendChild(btn)\r\n el.setAttribute(AUTO_MOUNT_MARK, '1')\r\n}\r\n\r\n// Scan and mount for iframe\r\nconst scanAndMountForIframe = (root: ParentNode = document, isInitialScan = false) => {\r\n try {\r\n const elements = root.querySelectorAll(`[${EDIT_KEY}]:not([${AUTO_MOUNT_MARK}])`)\r\n // Only log during initial scan or if elements found\r\n if (isInitialScan || elements.length > 0) {\r\n console.log('[EditorKit Client] Found', elements.length, 'unmounted elements')\r\n }\r\n elements.forEach(mountButtonForIframe)\r\n } catch (err) {\r\n console.error('[EditorKit Client] Error scanning:', err)\r\n }\r\n}\r\n\r\n// Start auto-mount for iframe with custom click handler\r\nexport const startAutoMountForIframe = () => {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') return\r\n\r\n console.log('[EditorKit Client] Starting auto-mount for iframe...')\r\n\r\n // Initial scan with logging\r\n scanAndMountForIframe(document, true)\r\n\r\n // Setup mutation observer for dynamic content\r\n if (_observer) {\r\n _observer.disconnect()\r\n }\r\n\r\n _observer = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n if (m.type === 'childList') {\r\n m.addedNodes.forEach((n) => {\r\n if (n instanceof Element) {\r\n // Only mount if the element itself has the key\r\n if (n.hasAttribute(EDIT_KEY)) {\r\n mountButtonForIframe(n)\r\n }\r\n // Only scan children if this is a container element (has children)\r\n else if (n.children.length > 0) {\r\n scanAndMountForIframe(n)\r\n }\r\n }\r\n })\r\n } else if (m.type === 'attributes' && m.target instanceof Element) {\r\n if (m.attributeName === EDIT_KEY) {\r\n mountButtonForIframe(m.target)\r\n }\r\n }\r\n }\r\n })\r\n _observer.observe(document.documentElement || document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [EDIT_KEY]\r\n })\r\n\r\n console.log('[EditorKit Client] Auto-mount started')\r\n}\r\n\r\n// Update display data when receiving new data\r\n// Note: For React apps, this is usually not needed as React handles re-rendering\r\n// This is useful for vanilla JS or non-React landing pages\r\nconst updateDisplayData = (data: any) => {\r\n if (!data) return\r\n\r\n Object.keys(data).forEach((key) => {\r\n const elements = document.querySelectorAll(`[${EDIT_KEY}=\"${key}\"]`)\r\n elements.forEach((el: any) => {\r\n const indexAttr = el.getAttribute('data-editor-index')\r\n const value = indexAttr !== null ? data[key]?.[parseInt(indexAttr)] : data[key]\r\n\r\n // Update content (you can customize this based on your needs)\r\n if (value !== undefined && value !== null) {\r\n if (typeof value === 'string') {\r\n // For simple text content\r\n const textNode = Array.from(el.childNodes).find((node: any) => node.nodeType === Node.TEXT_NODE) as any\r\n if (textNode) {\r\n textNode.textContent = value\r\n } else {\r\n el.textContent = value\r\n }\r\n } else if (typeof value === 'object') {\r\n // For complex objects, dispatch custom event for manual handling\r\n // React apps should update via state, not via this event\r\n el.dispatchEvent(new CustomEvent('editor-kit-data-update', { detail: value }))\r\n }\r\n }\r\n })\r\n })\r\n}\r\n\r\nexport const initEditorKitClient = () => {\r\n if (typeof window === 'undefined') return\r\n\r\n // Inject CSS styles for editor kit\r\n injectEditorKitStyles()\r\n\r\n let editorData: any = null\r\n\r\n // Listen to messages from parent (Admin)\r\n window.addEventListener('message', (event) => {\r\n const msgType = event.data?.type\r\n if (!msgType || !msgType.startsWith('EDITOR_KIT_')) return\r\n\r\n switch (msgType) {\r\n case 'EDITOR_KIT_INIT':\r\n editorData = event.data.data\r\n console.log('[EditorKit Client] Initialized with data')\r\n // Notify parent that we're ready\r\n window.parent.postMessage({ type: 'EDITOR_KIT_READY' }, '*')\r\n // Start auto-mounting edit buttons\r\n startAutoMountForIframe()\r\n break\r\n\r\n case 'EDITOR_KIT_UPDATE_DATA':\r\n editorData = event.data.data\r\n console.log('[EditorKit Client] Data updated')\r\n updateDisplayData(editorData)\r\n break\r\n }\r\n })\r\n}\r\n\r\nexport const useEditorKitClient = () => {\r\n useEffect(() => {\r\n // Only init when loaded inside an iframe from Admin\r\n if (window.parent !== window) {\r\n console.log('[useEditorKitClient] Initializing in iframe mode...')\r\n\r\n // Inject CSS styles\r\n injectEditorKitStyles()\r\n\r\n // Start auto-mounting immediately for iframe mode\r\n startAutoMountForIframe()\r\n\r\n // Also setup message listener for data updates\r\n initEditorKitClient()\r\n\r\n // Notify parent that client is ready\r\n window.parent.postMessage({ type: 'EDITOR_KIT_CLIENT_READY' }, '*')\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n stopAutoMount()\r\n }\r\n }, [])\r\n}\r\n"],"names":["editKitClasses","button","auto","EDIT_KEY","EDIT_EVENT","getFieldEditor","key","_defineProperty","AUTO_MOUNT_MARK","mountButtonOnElement","el","HTMLElement","hasAttribute","getAttribute","btn","document","createElement","type","className","join","textContent","title","addEventListener","ee","getEditorKitEvent","emit","window","dispatchEvent","CustomEvent","detail","err","appendChild","setAttribute","unmountButtonsFromElement","querySelectorAll","concat","forEach","remove","removeAttribute","scanAndMount","root","arguments","length","undefined","_unused","_observer","startAutoMount","injectEditorKitStyles","MutationObserver","mutations","_step","_iterator","_createForOfIteratorHelper","s","n","done","m","value","addedNodes","Element","target","attributeName","e","f","observe","documentElement","body","childList","subtree","attributes","attributeFilter","stopAutoMount","disconnect","_unused2","getElementById","style","id","head","mountButtonForIframe","preventDefault","stopPropagation","indexAttr","parent","postMessage","index","parseInt","scanAndMountForIframe","isInitialScan","elements","console","log","error","startAutoMountForIframe","_step2","_iterator2","children","initEditorKitClient","editorData","event","_event$data","data","msgType","startsWith","Object","keys","_data$key","textNode","Array","from","childNodes","find","node","nodeType","Node","TEXT_NODE","_typeof","useEditorKitClient","useEffect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../src/editor-kit/helpers.ts"],"sourcesContent":["import { useEffect } from 'react'\r\nimport { getEditorKitEvent } from './events'\r\n\r\nexport const editKitClasses = {\r\n root: 'editor-kit-root',\r\n button: 'editor-kit-btn',\r\n auto: 'editor-kit-btn--auto'\r\n}\r\n\r\nexport const EDIT_KEY = 'data-editor-key'\r\n\r\n// event emitted when an edit button is clicked\r\nexport const EDIT_EVENT = 'editor-kit:edit'\r\n\r\n// Keep this minimal and non-intrusive for landing pages: only a data attribute.\r\nexport const getFieldEditor = <T = any>(key: keyof T) => ({ [EDIT_KEY]: key })\r\n\r\n/* --- Editor-mode auto-mount (minimal & opt-in) ---\r\n Behaviour:\r\n - Does nothing on landing pages by default.\r\n - Finds elements with [data-editor-key] and appends a small positioned Edit button when started.\r\n - Exports startAutoMount/stopAutoMount for manual control from an editor wrapper.\r\n*/\r\nconst AUTO_MOUNT_MARK = 'data-editor-auto-mounted'\r\n\r\nconst mountButtonOnElement = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n if (el.hasAttribute(AUTO_MOUNT_MARK)) return\r\n const key = el.getAttribute(EDIT_KEY)\r\n if (!key) return\r\n\r\n const btn = document.createElement('button')\r\n btn.type = 'button'\r\n btn.className = [editKitClasses.button, editKitClasses.auto].join(' ')\r\n btn.textContent = 'Edit'\r\n btn.title = 'Edit'\r\n\r\n // emit the edit event via the EditorKitEvent emitter so it doesn't pollute window\r\n btn.addEventListener('click', () => {\r\n try {\r\n const ee = getEditorKitEvent()\r\n if (ee) {\r\n // use the stateChange channel to signal editor UI; payload includes key\r\n ee.emit('stateChange', { key })\r\n } else {\r\n // fallback to window event if emitter not available\r\n window.dispatchEvent(new CustomEvent(EDIT_EVENT, { detail: { key } }))\r\n }\r\n } catch (err) {\r\n // graceful fallback\r\n window.dispatchEvent(new CustomEvent(EDIT_EVENT, { detail: { key } }))\r\n }\r\n })\r\n\r\n // Styling and parent positioning are handled by `style.scss` which is imported\r\n // from the editor component. This keeps helpers passive on landing pages.\r\n el.appendChild(btn)\r\n el.setAttribute(AUTO_MOUNT_MARK, '1')\r\n}\r\n\r\nconst unmountButtonsFromElement = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n const buttons = el.querySelectorAll(`.${editKitClasses.auto}`)\r\n buttons.forEach((btn) => btn.remove())\r\n el.removeAttribute(AUTO_MOUNT_MARK)\r\n}\r\n\r\nconst scanAndMount = (root: ParentNode = document) => {\r\n try {\r\n root.querySelectorAll(`[${EDIT_KEY}]`).forEach(mountButtonOnElement)\r\n } catch {\r\n // no-op in non-DOM envs\r\n }\r\n}\r\n\r\nlet _observer: MutationObserver | null = null\r\n\r\nexport const startAutoMount = () => {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') return\r\n if (_observer) return // already started\r\n\r\n // Inject CSS styles\r\n injectEditorKitStyles()\r\n\r\n scanAndMount(document)\r\n _observer = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n if (m.type === 'childList') {\r\n m.addedNodes.forEach((n) => {\r\n if (n instanceof Element) {\r\n if (n.hasAttribute(EDIT_KEY)) mountButtonOnElement(n)\r\n scanAndMount(n)\r\n }\r\n })\r\n } else if (m.type === 'attributes' && m.target instanceof Element) {\r\n if (m.attributeName === EDIT_KEY) mountButtonOnElement(m.target)\r\n }\r\n }\r\n })\r\n _observer.observe(document.documentElement || document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [EDIT_KEY]\r\n })\r\n}\r\n\r\nexport const stopAutoMount = () => {\r\n if (_observer) {\r\n _observer.disconnect()\r\n _observer = null\r\n }\r\n // Cleanup all mounted buttons\r\n try {\r\n document.querySelectorAll(`[${AUTO_MOUNT_MARK}]`).forEach(unmountButtonsFromElement)\r\n } catch {\r\n // no-op\r\n }\r\n}\r\n\r\n/* --- Inject CSS Styles ---\r\n Inject editor kit styles dynamically\r\n Used by both Normal mode and Iframe mode\r\n*/\r\nexport const injectEditorKitStyles = () => {\r\n if (typeof document === 'undefined') return\r\n\r\n // Check if already injected\r\n if (document.getElementById('editor-kit-styles')) return\r\n\r\n const style = document.createElement('style')\r\n style.id = 'editor-kit-styles'\r\n style.textContent = `\r\n [data-editor-key] {\r\n position: relative;\r\n border: 1px dashed rgba(255, 0, 0, 0.4);\r\n min-height: 40px;\r\n padding-top: 4px;\r\n }\r\n\r\n .editor-kit-btn {\r\n appearance: none;\r\n border: 0;\r\n background: rgba(0, 0, 0, 0.6);\r\n color: #fff;\r\n cursor: pointer;\r\n border-radius: 4px;\r\n padding: 4px 8px;\r\n font-size: 12px;\r\n line-height: 1;\r\n display: inline-flex;\r\n align-items: center;\r\n justify-content: center;\r\n font-weight: 500;\r\n transition: all 0.2s ease;\r\n }\r\n\r\n .editor-kit-btn--auto {\r\n position: absolute;\r\n top: 4px;\r\n right: 4px;\r\n z-index: 9999;\r\n box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);\r\n }\r\n\r\n .editor-kit-btn:hover,\r\n .editor-kit-btn:focus {\r\n background: rgba(0, 0, 0, 0.8);\r\n outline: none;\r\n transform: scale(1.05);\r\n }\r\n\r\n .editor-kit-btn:active {\r\n transform: scale(0.95);\r\n }\r\n `\r\n document.head.appendChild(style)\r\n}\r\n\r\n/* --- Iframe Client Mode ---\r\n Initialize editor kit client for landing pages loaded in iframe\r\n*/\r\n\r\n// Mount button for iframe mode - sends postMessage instead of event\r\nconst mountButtonForIframe = (el: Element) => {\r\n if (!(el instanceof HTMLElement)) return\r\n if (el.hasAttribute(AUTO_MOUNT_MARK)) return\r\n const key = el.getAttribute(EDIT_KEY)\r\n if (!key) return\r\n\r\n const btn = document.createElement('button')\r\n btn.type = 'button'\r\n btn.className = [editKitClasses.button, editKitClasses.auto].join(' ')\r\n btn.textContent = 'Edit'\r\n btn.title = 'Edit'\r\n\r\n // Click handler sends message to parent window\r\n btn.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n const indexAttr = el.getAttribute('data-editor-index')\r\n\r\n // Send message to Admin parent\r\n window.parent.postMessage({ type: 'EDITOR_KIT_EDIT', key: key, index: indexAttr ? parseInt(indexAttr) : null }, '*')\r\n })\r\n\r\n el.appendChild(btn)\r\n el.setAttribute(AUTO_MOUNT_MARK, '1')\r\n}\r\n\r\n// Scan and mount for iframe\r\nconst scanAndMountForIframe = (root: ParentNode = document, isInitialScan = false) => {\r\n try {\r\n const elements = root.querySelectorAll(`[${EDIT_KEY}]:not([${AUTO_MOUNT_MARK}])`)\r\n // Only log during initial scan or if elements found\r\n if (isInitialScan || elements.length > 0) {\r\n console.log('[EditorKit Client] Found', elements.length, 'unmounted elements')\r\n }\r\n elements.forEach(mountButtonForIframe)\r\n } catch (err) {\r\n console.error('[EditorKit Client] Error scanning:', err)\r\n }\r\n}\r\n\r\n// Start auto-mount for iframe with custom click handler\r\nexport const startAutoMountForIframe = () => {\r\n if (typeof window === 'undefined' || typeof document === 'undefined') return\r\n\r\n console.log('[EditorKit Client] Starting auto-mount for iframe...')\r\n\r\n // Initial scan with logging\r\n scanAndMountForIframe(document, true)\r\n\r\n // Setup mutation observer for dynamic content\r\n if (_observer) {\r\n _observer.disconnect()\r\n }\r\n\r\n _observer = new MutationObserver((mutations) => {\r\n for (const m of mutations) {\r\n if (m.type === 'childList') {\r\n m.addedNodes.forEach((n) => {\r\n if (n instanceof Element) {\r\n // Only mount if the element itself has the key\r\n if (n.hasAttribute(EDIT_KEY)) {\r\n mountButtonForIframe(n)\r\n }\r\n // Only scan children if this is a container element (has children)\r\n else if (n.children.length > 0) {\r\n scanAndMountForIframe(n)\r\n }\r\n }\r\n })\r\n } else if (m.type === 'attributes' && m.target instanceof Element) {\r\n if (m.attributeName === EDIT_KEY) {\r\n mountButtonForIframe(m.target)\r\n }\r\n }\r\n }\r\n })\r\n _observer.observe(document.documentElement || document.body, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [EDIT_KEY]\r\n })\r\n\r\n console.log('[EditorKit Client] Auto-mount started')\r\n}\r\n\r\n// Update display data when receiving new data\r\n// Note: For React apps, this is usually not needed as React handles re-rendering\r\n// This is useful for vanilla JS or non-React landing pages\r\nconst updateDisplayData = (data: any) => {\r\n if (!data) return\r\n\r\n Object.keys(data).forEach((key) => {\r\n const elements = document.querySelectorAll(`[${EDIT_KEY}=\"${key}\"]`)\r\n elements.forEach((el: any) => {\r\n const indexAttr = el.getAttribute('data-editor-index')\r\n const value = indexAttr !== null ? data[key]?.[parseInt(indexAttr)] : data[key]\r\n\r\n // Update content (you can customize this based on your needs)\r\n if (value !== undefined && value !== null) {\r\n if (typeof value === 'string') {\r\n // For simple text content\r\n const textNode = Array.from(el.childNodes).find((node: any) => node.nodeType === Node.TEXT_NODE) as any\r\n if (textNode) {\r\n textNode.textContent = value\r\n } else {\r\n el.textContent = value\r\n }\r\n } else if (typeof value === 'object') {\r\n // For complex objects, dispatch custom event for manual handling\r\n // React apps should update via state, not via this event\r\n el.dispatchEvent(new CustomEvent('editor-kit-data-update', { detail: value }))\r\n }\r\n }\r\n })\r\n })\r\n}\r\n\r\nexport const initEditorKitClient = () => {\r\n if (typeof window === 'undefined') return\r\n\r\n // Inject CSS styles for editor kit\r\n injectEditorKitStyles()\r\n\r\n let editorData: any = null\r\n\r\n // Listen to messages from parent (Admin)\r\n window.addEventListener('message', (event) => {\r\n const msgType = event.data?.type\r\n if (!msgType || !msgType.startsWith('EDITOR_KIT_')) return\r\n\r\n switch (msgType) {\r\n case 'EDITOR_KIT_INIT':\r\n editorData = event.data.data\r\n console.log('[EditorKit Client] Initialized with data')\r\n // Notify parent that we're ready\r\n window.parent.postMessage({ type: 'EDITOR_KIT_READY' }, '*')\r\n // Start auto-mounting edit buttons\r\n startAutoMountForIframe()\r\n break\r\n\r\n case 'EDITOR_KIT_UPDATE_DATA':\r\n editorData = event.data.data\r\n console.log('[EditorKit Client] Data updated')\r\n updateDisplayData(editorData)\r\n break\r\n }\r\n })\r\n}\r\n\r\nexport const useEditorKitClient = () => {\r\n useEffect(() => {\r\n // Only init when loaded inside an iframe from Admin\r\n if (window.parent !== window) {\r\n console.log('[useEditorKitClient] Initializing in iframe mode...')\r\n\r\n // Inject CSS styles\r\n injectEditorKitStyles()\r\n\r\n // Start auto-mounting immediately for iframe mode\r\n startAutoMountForIframe()\r\n\r\n // Also setup message listener for data updates\r\n initEditorKitClient()\r\n\r\n // Notify parent that client is ready\r\n window.parent.postMessage({ type: 'EDITOR_KIT_CLIENT_READY' }, '*')\r\n }\r\n\r\n // Cleanup on unmount\r\n return () => {\r\n stopAutoMount()\r\n }\r\n }, [])\r\n}\r\n"],"names":["editKitClasses","button","auto","EDIT_KEY","getFieldEditor","key","_defineProperty","AUTO_MOUNT_MARK","unmountButtonsFromElement","el","HTMLElement","querySelectorAll","concat","forEach","btn","remove","removeAttribute","_observer","stopAutoMount","disconnect","document","_unused2","injectEditorKitStyles","getElementById","style","createElement","id","textContent","head","appendChild","mountButtonForIframe","hasAttribute","getAttribute","type","className","join","title","addEventListener","e","preventDefault","stopPropagation","indexAttr","window","parent","postMessage","index","parseInt","setAttribute","scanAndMountForIframe","root","arguments","length","undefined","isInitialScan","elements","console","log","err","error","startAutoMountForIframe","MutationObserver","mutations","_step2","_iterator2","_createForOfIteratorHelper","s","n","done","m","value","addedNodes","Element","children","target","attributeName","f","observe","documentElement","body","childList","subtree","attributes","attributeFilter","initEditorKitClient","editorData","event","_event$data","data","msgType","startsWith","Object","keys","_data$key","textNode","Array","from","childNodes","find","node","nodeType","Node","TEXT_NODE","_typeof","dispatchEvent","CustomEvent","detail","useEditorKitClient","useEffect"],"mappings":"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"}
|
package/dist/editor-kit/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"reflect-metadata";export{
|
|
1
|
+
import"reflect-metadata";export{EditorKitIframe,editorKitIframeClasses}from"./mode.iframe.js";export{getFieldEditor,useEditorKitClient}from"./helpers.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,slicedToArray as
|
|
1
|
+
import{defineProperty as e,slicedToArray as r,objectSpread2 as n,asyncToGenerator as t,regenerator as a,toConsumableArray as i}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as o,jsx as d}from"react/jsx-runtime";import{DinoForm as c}from"dinocollab-core/form";import{useRef as l,useState as s,useEffect as u}from"react";import{styled as f,Box as m,Typography as g,Drawer as p,Button as h,Paper as v,IconButton as I}from"@mui/material";import y from"@mui/icons-material/ArrowBack";import b from"@mui/icons-material/Add";import{ArrayItem as x}from"./array-item.js";var w=function(f){var w=f.configs,E=f.url,T=f.value,D=f.onChange,O=l(null),C=s({drawerOpen:!1,selectedKey:null,editingIndex:null,draggedIndex:null,dragOverIndex:null}),B=r(C,2),N=B[0],_=B[1],S=function(e){if(!w||!w[e])return null;var r=w[e];return r.formClass?{formClass:r.formClass,isArray:r.isArray||!1}:{formClass:r,isArray:!1}};u(function(){var e=O.current;if(e){var r=function(){var r=e.contentWindow;if(r)try{r.postMessage({type:"EDITOR_KIT_INIT",data:T,configs:w?Object.keys(w):[]},"*")}catch(e){console.error("EditorKitIframe: Failed to send init message",e)}};e.addEventListener("load",r);var t=function(r){var t,a;switch(r.data.type){case"EDITOR_KIT_EDIT":_(n(n({},N),{},{selectedKey:r.data.key,editingIndex:null!==(t=r.data.index)&&void 0!==t?t:null,drawerOpen:!0}));break;case"EDITOR_KIT_READY":null===(a=e.contentWindow)||void 0===a||a.postMessage({type:"EDITOR_KIT_UPDATE_DATA",data:T},"*")}};return window.addEventListener("message",t),function(){e.removeEventListener("load",r),window.removeEventListener("message",t)}}},[E,w,T]),u(function(){var e,r=null===(e=O.current)||void 0===e?void 0:e.contentWindow;if(r)try{r.postMessage({type:"EDITOR_KIT_UPDATE_DATA",data:T},"*")}catch(e){console.error("EditorKitIframe: Failed to send update",e)}},[T]);var M=function(){var e=t(a().m(function e(r){var t,o,d,c,l,s;return a().w(function(e){for(;;)switch(e.p=e.n){case 0:if(t=N.selectedKey,o=N.editingIndex,D&&t){e.n=1;break}return e.a(2);case 1:if(d=S(t)){e.n=2;break}return e.a(2);case 2:return c=n({},T),d.isArray?(l=Array.isArray(T[t])?i(T[t]):[],null!==o&&o>=0?l[o]=r:l.push(r),c[t]=l):c[t]=r,e.p=3,e.n=4,D(c);case 4:d.isArray?_(n(n({},N),{},{editingIndex:null})):_(n(n({},N),{},{drawerOpen:!1,selectedKey:null,editingIndex:null})),e.n=6;break;case 5:e.p=5,s=e.v,console.error("EditorKitIframe: onChange failed",s);case 6:return e.a(2)}},e,null,[[3,5]])}));return function(r){return e.apply(this,arguments)}}(),R=function(){var r=t(a().m(function r(t){var o,d,c;return a().w(function(r){for(;;)switch(r.p=r.n){case 0:if(o=N.selectedKey,D&&o){r.n=1;break}return r.a(2);case 1:return(d=Array.isArray(T[o])?i(T[o]):[]).splice(t,1),r.p=2,r.n=3,D(n(n({},T),{},e({},o,d)));case 3:r.n=5;break;case 4:r.p=4,c=r.v,console.error("EditorKitIframe: delete failed",c);case 5:return r.a(2)}},r,null,[[2,4]])}));return function(e){return r.apply(this,arguments)}}(),j=function(){var e=t(a().m(function e(r){return a().w(function(e){for(;;)switch(e.n){case 0:if(0!==r){e.n=1;break}return e.a(2);case 1:return e.n=2,W(r,r-1);case 2:return e.a(2)}},e)}));return function(r){return e.apply(this,arguments)}}(),H=function(){var e=t(a().m(function e(r){var n,t;return a().w(function(e){for(;;)switch(e.n){case 0:if(n=N.selectedKey){e.n=1;break}return e.a(2);case 1:if(t=Array.isArray(null==T?void 0:T[n])?T[n]:[],!(r>=t.length-1)){e.n=2;break}return e.a(2);case 2:return e.n=3,W(r,r+1);case 3:return e.a(2)}},e)}));return function(r){return e.apply(this,arguments)}}(),P=function(e){_(n(n({},N),{},{draggedIndex:e}))},F=function(){_(n(n({},N),{},{draggedIndex:null,dragOverIndex:null}))},L=function(e){var r=N.draggedIndex;null!==r&&r!==e&&_(n(n({},N),{},{dragOverIndex:e}))},W=function(){var o=t(a().m(function t(o,d){var c,l,s,u,f,m;return a().w(function(t){for(;;)switch(t.p=t.n){case 0:if(c=N.selectedKey,D&&c){t.n=1;break}return t.a(2);case 1:return l=Array.isArray(T[c])?i(T[c]):[],s=l.splice(o,1),u=r(s,1),f=u[0],l.splice(d,0,f),t.p=2,t.n=3,D(n(n({},T),{},e({},c,l)));case 3:_(n(n({},N),{},{draggedIndex:null,dragOverIndex:null})),t.n=5;break;case 4:t.p=4,m=t.v,console.error("EditorKitIframe: reorder failed",m);case 5:return t.a(2)}},t,null,[[2,4]])}));return function(e,r){return o.apply(this,arguments)}}(),U=function(e){var r=N.selectedKey,n=T&&r?T[r]:{};return o(m,{children:[o(g,{variant:"h5",className:A.title,children:["Editing: ",d("b",{children:r})]}),d(c.DecoratorForm,{data:n,configClass:e,onSubmit:M})]})},Y=function(){var e=N.selectedKey,r=N.draggedIndex,t=N.dragOverIndex,a=e&&Array.isArray(null==T?void 0:T[e])?T[e]:[];return o(m,{children:[o(g,{variant:"h5",className:A.title,children:["Manage: ",d("b",{children:e})]}),d(h,{variant:"contained",startIcon:d(b,{}),onClick:function(){return _(n(n({},N),{},{editingIndex:-1}))},fullWidth:!0,className:A.addButton,children:"Add New Item"}),0===a.length?d(v,{className:A.emptyState,children:d(g,{color:"text.secondary",children:'No items yet. Click "Add New Item" to create one.'})}):d(m,{children:a.map(function(e,i){return d(x,{item:e,index:i,totalItems:a.length,onEdit:function(e){return _(n(n({},N),{},{editingIndex:e}))},onDelete:R,onMoveUp:j,onMoveDown:H,onDragStart:P,onDragEnd:F,onDragOver:L,onDrop:W,isDragging:r===i,dragOverIndex:null!=t?t:void 0},i)})})]})},z=function(e,r){var t=N.selectedKey,a=t&&Array.isArray(null==T?void 0:T[t])?T[t]:[],i=r>=0&&a[r]||{};return o(m,{children:[o(m,{className:A.editHeader,children:[d(I,{onClick:function(){return _(n(n({},N),{},{editingIndex:null}))},className:A.backButton,children:d(y,{})}),d(g,{variant:"h5",children:r>=0?"Edit Item #".concat(r+1):"Add New Item"})]}),d(c.DecoratorForm,{data:i,configClass:e,onSubmit:M})]})};return o(K,{children:[d(m,{className:A.badge,children:o(g,{variant:"h6",component:"div",className:A.badgeText,children:["Editor Kit: ",d("b",{className:A.badgeStatus,children:"On"})," (Iframe Mode)"]})}),d("iframe",{ref:O,src:E,className:A.iframe,title:"Editor Preview"}),d(p,{anchor:"right",open:N.drawerOpen,onClose:function(){_(n(n({},N),{},{drawerOpen:!1,selectedKey:null,editingIndex:null}))},children:d(k,{children:function(){var e=N.selectedKey,r=N.editingIndex;if(!e)return null;var n=S(e);return n?n.isArray?null!==r?z(n.formClass,r):Y():U(n.formClass):o(m,{p:2,children:["Config not found for key: ",e]})}()})})]})},A={badge:"EditorKitIframe-badge",badgeText:"EditorKitIframe-badgeText",badgeStatus:"EditorKitIframe-badgeStatus",iframe:"EditorKitIframe-iframe",title:"EditorKitIframe-title",addButton:"EditorKitIframe-addButton",emptyState:"EditorKitIframe-emptyState",editHeader:"EditorKitIframe-editHeader",backButton:"EditorKitIframe-backButton"},E=function(e,r){return"".concat("",".").concat(A[e]).concat("")},K=f(m)(function(r){var n=r.theme;return e(e(e(e({position:"relative",width:"100%",height:"calc(100vh - var(--height-header, 114px) - 10px)",padding:"6px",backgroundColor:n.palette.grey[100]},E("badge"),{position:"fixed",bottom:64,right:16,zIndex:1e3,backgroundColor:n.palette.primary.main,padding:n.spacing(1),borderRadius:n.spacing(1),boxShadow:n.shadows[3]}),E("badgeText"),{color:"#fff"}),E("badgeStatus"),{color:"#00ff00"}),E("iframe"),{width:"100%",height:"100%",border:"none"})}),k=f(m)(function(r){var n=r.theme;return e(e(e(e(e({width:"var(--editor-kit-drawer-width, 450px)",height:"100%",overflowY:"auto",padding:n.spacing(2),".MuiInputBase-input.MuiOutlinedInput-input":{height:"auto"}},E("title"),{paddingTop:n.spacing(2),paddingBottom:n.spacing(2),marginBottom:n.spacing(2),borderBottom:"1px solid #ccc"}),E("addButton"),{marginBottom:n.spacing(3)}),E("emptyState"),{padding:n.spacing(3),textAlign:"center",backgroundColor:n.palette.grey[50]}),E("editHeader"),{display:"flex",alignItems:"center",paddingTop:n.spacing(2),paddingBottom:n.spacing(2),marginBottom:n.spacing(2),borderBottom:"1px solid #ccc"}),E("backButton"),{marginRight:n.spacing(1)})});export{w as EditorKitIframe,w as default,A as editorKitIframeClasses};
|
|
2
2
|
//# sourceMappingURL=mode.iframe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.iframe.js","sources":["../../src/editor-kit/mode.iframe.tsx"],"sourcesContent":["import { DinoForm } from 'dinocollab-core/form'\r\nimport { FC, useEffect, useRef, useState } from 'react'\r\nimport { Box, Drawer, Typography, IconButton, Button, Paper, styled } from '@mui/material'\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack'\r\nimport AddIcon from '@mui/icons-material/Add'\r\nimport { ArrayItem } from './array-item'\r\n\r\nexport interface IEditorKitIframeProps {\r\n configs?: Record<string, any>\r\n url: string // URL của landing page\r\n value: any\r\n onChange: (value: any) => void\r\n}\r\n\r\ninterface IEditorKitIframeState {\r\n drawerOpen: boolean\r\n selectedKey: string | null\r\n editingIndex: number | null // null = list view, number = editing item at index, -1 = add new\r\n}\r\n\r\nexport const EditorKitIframe: FC<IEditorKitIframeProps> = ({ configs, url, value, onChange }) => {\r\n const iframeRef = useRef<HTMLIFrameElement>(null)\r\n const [state, setState] = useState<IEditorKitIframeState>({ drawerOpen: false, selectedKey: null, editingIndex: null })\r\n\r\n const getConfig = (key: string) => {\r\n if (!configs || !configs[key]) return null\r\n\r\n const config = configs[key]\r\n // Support both formats: direct class or {formClass, isArray}\r\n if (config.formClass) {\r\n return { formClass: config.formClass, isArray: config.isArray || false }\r\n }\r\n return { formClass: config, isArray: false }\r\n }\r\n\r\n useEffect(() => {\r\n const iframe = iframeRef.current\r\n if (!iframe) return\r\n\r\n const handleIframeLoad = () => {\r\n const iframeWindow = iframe.contentWindow\r\n if (!iframeWindow) return\r\n\r\n try {\r\n // Send initial data to landing page\r\n iframeWindow.postMessage({ type: 'EDITOR_KIT_INIT', data: value, configs: configs ? Object.keys(configs) : [] }, '*')\r\n } catch (err) {\r\n console.error('EditorKitIframe: Failed to send init message', err)\r\n }\r\n }\r\n\r\n iframe.addEventListener('load', handleIframeLoad)\r\n\r\n // Listen to messages from landing page (iframe)\r\n const handleMessage = (event: MessageEvent) => {\r\n // Optional: Verify origin for security\r\n // if (event.origin !== window.location.origin) return\r\n\r\n switch (event.data.type) {\r\n case 'EDITOR_KIT_EDIT':\r\n setState({ selectedKey: event.data.key, editingIndex: event.data.index ?? null, drawerOpen: true })\r\n break\r\n\r\n case 'EDITOR_KIT_READY':\r\n // Landing page is ready, send data\r\n iframe.contentWindow?.postMessage({ type: 'EDITOR_KIT_UPDATE_DATA', data: value }, '*')\r\n break\r\n }\r\n }\r\n\r\n window.addEventListener('message', handleMessage)\r\n\r\n return () => {\r\n iframe.removeEventListener('load', handleIframeLoad)\r\n window.removeEventListener('message', handleMessage)\r\n }\r\n }, [url, configs, value])\r\n\r\n // Send updated data to landing page when value changes\r\n useEffect(() => {\r\n const iframeWindow = iframeRef.current?.contentWindow\r\n if (iframeWindow) {\r\n try {\r\n iframeWindow.postMessage({ type: 'EDITOR_KIT_UPDATE_DATA', data: value }, '*')\r\n } catch (err) {\r\n console.error('EditorKitIframe: Failed to send update', err)\r\n }\r\n }\r\n }, [value])\r\n\r\n const handleValueChange = async (data: any) => {\r\n const { selectedKey, editingIndex } = state\r\n if (!onChange || !selectedKey) return\r\n\r\n const config = getConfig(selectedKey)\r\n if (!config) return\r\n\r\n let newValue = { ...value }\r\n\r\n if (config.isArray) {\r\n // Array field\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n\r\n if (editingIndex !== null && editingIndex >= 0) {\r\n // Update existing item\r\n currentArray[editingIndex] = data\r\n } else {\r\n // Add new item\r\n currentArray.push(data)\r\n }\r\n\r\n newValue[selectedKey] = currentArray\r\n } else {\r\n // Single field\r\n newValue[selectedKey] = data\r\n }\r\n\r\n try {\r\n await onChange(newValue)\r\n // Back to list view for array, close for single\r\n if (config.isArray) {\r\n setState({ ...state, editingIndex: null })\r\n } else {\r\n setState({ drawerOpen: false, selectedKey: null, editingIndex: null })\r\n }\r\n } catch (err) {\r\n console.error('EditorKitIframe: onChange failed', err)\r\n }\r\n }\r\n\r\n const handleDeleteItem = async (index: number) => {\r\n const { selectedKey } = state\r\n if (!onChange || !selectedKey) return\r\n\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n currentArray.splice(index, 1)\r\n\r\n try {\r\n await onChange({ ...value, [selectedKey]: currentArray })\r\n } catch (err) {\r\n console.error('EditorKitIframe: delete failed', err)\r\n }\r\n }\r\n\r\n const handleDrawerClose = () => {\r\n setState({ drawerOpen: false, selectedKey: null, editingIndex: null })\r\n }\r\n\r\n const renderContent = () => {\r\n const { selectedKey, editingIndex } = state\r\n if (!selectedKey) return null\r\n\r\n const config = getConfig(selectedKey)\r\n if (!config) {\r\n return <Box p={2}>Config not found for key: {selectedKey}</Box>\r\n }\r\n\r\n if (config.isArray) {\r\n // Array mode: show list or edit form\r\n if (editingIndex !== null) {\r\n return renderEditForm(config.formClass, editingIndex)\r\n }\r\n return renderArrayList()\r\n } else {\r\n // Single mode: show form directly\r\n return renderSingleForm(config.formClass)\r\n }\r\n }\r\n\r\n const renderSingleForm = (ConfigClass: any) => {\r\n const { selectedKey } = state\r\n const formData = value && selectedKey ? value[selectedKey] : {}\r\n\r\n return (\r\n <Box>\r\n <Typography variant='h5' className={editorKitIframeClasses.title}>\r\n Editing: <b>{selectedKey}</b>\r\n </Typography>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={handleValueChange} />\r\n </Box>\r\n )\r\n }\r\n\r\n const renderArrayList = () => {\r\n const { selectedKey } = state\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n\r\n return (\r\n <Box>\r\n <Typography variant='h5' className={editorKitIframeClasses.title}>\r\n Manage: <b>{selectedKey}</b>\r\n </Typography>\r\n\r\n <Button\r\n variant='contained'\r\n startIcon={<AddIcon />}\r\n onClick={() => setState({ ...state, editingIndex: -1 })}\r\n fullWidth\r\n className={editorKitIframeClasses.addButton}\r\n >\r\n Add New Item\r\n </Button>\r\n\r\n {arrayData.length === 0 ? (\r\n <Paper className={editorKitIframeClasses.emptyState}>\r\n <Typography color='text.secondary'>No items yet. Click \"Add New Item\" to create one.</Typography>\r\n </Paper>\r\n ) : (\r\n <Box>\r\n {arrayData.map((item: any, index: number) => (\r\n <ArrayItem\r\n key={index}\r\n item={item}\r\n index={index}\r\n onEdit={(idx) => setState({ ...state, editingIndex: idx })}\r\n onDelete={handleDeleteItem}\r\n />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n }\r\n\r\n const renderEditForm = (ConfigClass: any, index: number) => {\r\n const { selectedKey } = state\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n const formData = index >= 0 ? arrayData[index] || {} : {}\r\n\r\n return (\r\n <Box>\r\n <Box className={editorKitIframeClasses.editHeader}>\r\n <IconButton onClick={() => setState({ ...state, editingIndex: null })} className={editorKitIframeClasses.backButton}>\r\n <ArrowBackIcon />\r\n </IconButton>\r\n <Typography variant='h5'>{index >= 0 ? `Edit Item #${index + 1}` : 'Add New Item'}</Typography>\r\n </Box>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={handleValueChange} />\r\n </Box>\r\n )\r\n }\r\n\r\n return (\r\n <EditorKitIframeStyled>\r\n {/* Badge \"Editor Kit: On\" */}\r\n <Box className={editorKitIframeClasses.badge}>\r\n <Typography variant='h6' component='div' className={editorKitIframeClasses.badgeText}>\r\n Editor Kit: <b className={editorKitIframeClasses.badgeStatus}>On</b> (Iframe Mode)\r\n </Typography>\r\n </Box>\r\n\r\n {/* Iframe displaying Landing page */}\r\n <iframe ref={iframeRef} src={url} className={editorKitIframeClasses.iframe} title='Editor Preview' />\r\n\r\n {/* Drawer for editing */}\r\n <Drawer anchor='right' open={state.drawerOpen} onClose={handleDrawerClose}>\r\n <FormStyled>{renderContent()}</FormStyled>\r\n </Drawer>\r\n </EditorKitIframeStyled>\r\n )\r\n}\r\n\r\nexport default EditorKitIframe\r\n\r\nexport const editorKitIframeClasses = {\r\n badge: 'EditorKitIframe-badge',\r\n badgeText: 'EditorKitIframe-badgeText',\r\n badgeStatus: 'EditorKitIframe-badgeStatus',\r\n iframe: 'EditorKitIframe-iframe',\r\n title: 'EditorKitIframe-title',\r\n addButton: 'EditorKitIframe-addButton',\r\n emptyState: 'EditorKitIframe-emptyState',\r\n editHeader: 'EditorKitIframe-editHeader',\r\n backButton: 'EditorKitIframe-backButton'\r\n}\r\n\r\nconst getClasses = (key: keyof typeof editorKitIframeClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${editorKitIframeClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst EditorKitIframeStyled = styled(Box)(({ theme }) => ({\r\n position: 'relative',\r\n width: '100%',\r\n height: 'calc(100vh - var(--height-header, 114px) - 10px)',\r\n padding: '6px',\r\n backgroundColor: theme.palette.grey[100],\r\n\r\n [getClasses('badge')]: {\r\n position: 'fixed',\r\n bottom: 64,\r\n right: 16,\r\n zIndex: 1000,\r\n backgroundColor: theme.palette.primary.main,\r\n padding: theme.spacing(1),\r\n borderRadius: theme.spacing(1),\r\n boxShadow: theme.shadows[3]\r\n },\r\n\r\n [getClasses('badgeText')]: { color: '#fff' },\r\n\r\n [getClasses('badgeStatus')]: { color: '#00ff00' },\r\n\r\n [getClasses('iframe')]: { width: '100%', height: '100%', border: 'none' }\r\n}))\r\n\r\nconst FormStyled = styled(Box)(({ theme }) => ({\r\n width: 'var(--editor-kit-drawer-width, 450px)',\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(2),\r\n '.MuiInputBase-input.MuiOutlinedInput-input': {\r\n height: 'auto'\r\n },\r\n\r\n [getClasses('title')]: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('addButton')]: { marginBottom: theme.spacing(3) },\r\n\r\n [getClasses('emptyState')]: {\r\n padding: theme.spacing(3),\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.grey[50]\r\n },\r\n\r\n [getClasses('editHeader')]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('backButton')]: { marginRight: theme.spacing(1) }\r\n}))\r\n"],"names":["EditorKitIframe","_ref","configs","url","value","onChange","iframeRef","useRef","_useState","useState","drawerOpen","selectedKey","editingIndex","_useState2","_slicedToArray","state","setState","getConfig","key","config","formClass","isArray","useEffect","iframe","current","handleIframeLoad","iframeWindow","contentWindow","postMessage","type","data","Object","keys","err","console","error","addEventListener","handleMessage","event","_event$data$index","_iframe$contentWindow","index","window","removeEventListener","_iframeRef$current","handleValueChange","_ref2","_asyncToGenerator","_regenerator","m","_callee","newValue","currentArray","_t","w","_context","p","n","a","_objectSpread","Array","_toConsumableArray","push","v","_x","apply","this","arguments","handleDeleteItem","_ref3","_callee2","_t2","_context2","splice","_defineProperty","_x2","renderSingleForm","ConfigClass","formData","_jsxs","Box","Typography","variant","className","editorKitIframeClasses","title","children","_jsx","DinoForm","DecoratorForm","configClass","onSubmit","renderArrayList","arrayData","Button","startIcon","AddIcon","onClick","fullWidth","addButton","length","Paper","emptyState","color","map","item","ArrayItem","onEdit","idx","onDelete","renderEditForm","editHeader","IconButton","backButton","ArrowBackIcon","concat","EditorKitIframeStyled","badge","component","badgeText","badgeStatus","ref","src","Drawer","anchor","open","onClose","FormStyled","renderContent","getClasses","options","styled","_ref4","theme","position","width","height","padding","backgroundColor","palette","grey","bottom","right","zIndex","primary","main","spacing","borderRadius","boxShadow","shadows","border","_ref6","overflowY","paddingTop","paddingBottom","marginBottom","borderBottom","textAlign","display","alignItems","marginRight"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mode.iframe.js","sources":["../../src/editor-kit/mode.iframe.tsx"],"sourcesContent":["import { DinoForm } from 'dinocollab-core/form'\r\nimport { FC, useEffect, useRef, useState } from 'react'\r\nimport { Box, Drawer, Typography, IconButton, Button, Paper, styled } from '@mui/material'\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack'\r\nimport AddIcon from '@mui/icons-material/Add'\r\nimport { ArrayItem } from './array-item'\r\n\r\nexport interface IEditorKitIframeProps {\r\n configs?: Record<string, any>\r\n url: string // URL của landing page\r\n value: any\r\n onChange: (value: any) => void\r\n}\r\n\r\ninterface IEditorKitIframeState {\r\n drawerOpen: boolean\r\n selectedKey: string | null\r\n editingIndex: number | null // null = list view, number = editing item at index, -1 = add new\r\n draggedIndex: number | null\r\n dragOverIndex: number | null\r\n}\r\n\r\nexport const EditorKitIframe: FC<IEditorKitIframeProps> = ({ configs, url, value, onChange }) => {\r\n const iframeRef = useRef<HTMLIFrameElement>(null)\r\n const [state, setState] = useState<IEditorKitIframeState>({\r\n drawerOpen: false,\r\n selectedKey: null,\r\n editingIndex: null,\r\n draggedIndex: null,\r\n dragOverIndex: null\r\n })\r\n\r\n const getConfig = (key: string) => {\r\n if (!configs || !configs[key]) return null\r\n\r\n const config = configs[key]\r\n // Support both formats: direct class or {formClass, isArray}\r\n if (config.formClass) {\r\n return { formClass: config.formClass, isArray: config.isArray || false }\r\n }\r\n return { formClass: config, isArray: false }\r\n }\r\n\r\n useEffect(() => {\r\n const iframe = iframeRef.current\r\n if (!iframe) return\r\n\r\n const handleIframeLoad = () => {\r\n const iframeWindow = iframe.contentWindow\r\n if (!iframeWindow) return\r\n\r\n try {\r\n // Send initial data to landing page\r\n iframeWindow.postMessage({ type: 'EDITOR_KIT_INIT', data: value, configs: configs ? Object.keys(configs) : [] }, '*')\r\n } catch (err) {\r\n console.error('EditorKitIframe: Failed to send init message', err)\r\n }\r\n }\r\n\r\n iframe.addEventListener('load', handleIframeLoad)\r\n\r\n // Listen to messages from landing page (iframe)\r\n const handleMessage = (event: MessageEvent) => {\r\n // Optional: Verify origin for security\r\n // if (event.origin !== window.location.origin) return\r\n\r\n switch (event.data.type) {\r\n case 'EDITOR_KIT_EDIT':\r\n setState({ ...state, selectedKey: event.data.key, editingIndex: event.data.index ?? null, drawerOpen: true })\r\n break\r\n\r\n case 'EDITOR_KIT_READY':\r\n // Landing page is ready, send data\r\n iframe.contentWindow?.postMessage({ type: 'EDITOR_KIT_UPDATE_DATA', data: value }, '*')\r\n break\r\n }\r\n }\r\n\r\n window.addEventListener('message', handleMessage)\r\n\r\n return () => {\r\n iframe.removeEventListener('load', handleIframeLoad)\r\n window.removeEventListener('message', handleMessage)\r\n }\r\n }, [url, configs, value])\r\n\r\n // Send updated data to landing page when value changes\r\n useEffect(() => {\r\n const iframeWindow = iframeRef.current?.contentWindow\r\n if (iframeWindow) {\r\n try {\r\n iframeWindow.postMessage({ type: 'EDITOR_KIT_UPDATE_DATA', data: value }, '*')\r\n } catch (err) {\r\n console.error('EditorKitIframe: Failed to send update', err)\r\n }\r\n }\r\n }, [value])\r\n\r\n const handleValueChange = async (data: any) => {\r\n const { selectedKey, editingIndex } = state\r\n if (!onChange || !selectedKey) return\r\n\r\n const config = getConfig(selectedKey)\r\n if (!config) return\r\n\r\n let newValue = { ...value }\r\n\r\n if (config.isArray) {\r\n // Array field\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n\r\n if (editingIndex !== null && editingIndex >= 0) {\r\n // Update existing item\r\n currentArray[editingIndex] = data\r\n } else {\r\n // Add new item\r\n currentArray.push(data)\r\n }\r\n\r\n newValue[selectedKey] = currentArray\r\n } else {\r\n // Single field\r\n newValue[selectedKey] = data\r\n }\r\n\r\n try {\r\n await onChange(newValue)\r\n // Back to list view for array, close for single\r\n if (config.isArray) {\r\n setState({ ...state, editingIndex: null })\r\n } else {\r\n setState({ ...state, drawerOpen: false, selectedKey: null, editingIndex: null })\r\n }\r\n } catch (err) {\r\n console.error('EditorKitIframe: onChange failed', err)\r\n }\r\n }\r\n\r\n const handleDeleteItem = async (index: number) => {\r\n const { selectedKey } = state\r\n if (!onChange || !selectedKey) return\r\n\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n currentArray.splice(index, 1)\r\n\r\n try {\r\n await onChange({ ...value, [selectedKey]: currentArray })\r\n } catch (err) {\r\n console.error('EditorKitIframe: delete failed', err)\r\n }\r\n }\r\n\r\n const handleMoveUp = async (index: number) => {\r\n if (index === 0) return\r\n await handleReorderItems(index, index - 1)\r\n }\r\n\r\n const handleMoveDown = async (index: number) => {\r\n const { selectedKey } = state\r\n if (!selectedKey) return\r\n const arrayData = Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n if (index >= arrayData.length - 1) return\r\n await handleReorderItems(index, index + 1)\r\n }\r\n\r\n const handleDragStart = (index: number) => {\r\n setState({ ...state, draggedIndex: index })\r\n }\r\n\r\n const handleDragEnd = () => {\r\n setState({ ...state, draggedIndex: null, dragOverIndex: null })\r\n }\r\n\r\n const handleDragOver = (index: number) => {\r\n const { draggedIndex } = state\r\n if (draggedIndex === null || draggedIndex === index) return\r\n setState({ ...state, dragOverIndex: index })\r\n }\r\n\r\n const handleReorderItems = async (fromIndex: number, toIndex: number) => {\r\n const { selectedKey } = state\r\n if (!onChange || !selectedKey) return\r\n\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n const [movedItem] = currentArray.splice(fromIndex, 1)\r\n currentArray.splice(toIndex, 0, movedItem)\r\n\r\n try {\r\n await onChange({ ...value, [selectedKey]: currentArray })\r\n setState({ ...state, draggedIndex: null, dragOverIndex: null })\r\n } catch (err) {\r\n console.error('EditorKitIframe: reorder failed', err)\r\n }\r\n }\r\n\r\n const handleDrawerClose = () => {\r\n setState({ ...state, drawerOpen: false, selectedKey: null, editingIndex: null })\r\n }\r\n\r\n const renderContent = () => {\r\n const { selectedKey, editingIndex } = state\r\n if (!selectedKey) return null\r\n\r\n const config = getConfig(selectedKey)\r\n if (!config) {\r\n return <Box p={2}>Config not found for key: {selectedKey}</Box>\r\n }\r\n\r\n if (config.isArray) {\r\n // Array mode: show list or edit form\r\n if (editingIndex !== null) {\r\n return renderEditForm(config.formClass, editingIndex)\r\n }\r\n return renderArrayList()\r\n } else {\r\n // Single mode: show form directly\r\n return renderSingleForm(config.formClass)\r\n }\r\n }\r\n\r\n const renderSingleForm = (ConfigClass: any) => {\r\n const { selectedKey } = state\r\n const formData = value && selectedKey ? value[selectedKey] : {}\r\n\r\n return (\r\n <Box>\r\n <Typography variant='h5' className={editorKitIframeClasses.title}>\r\n Editing: <b>{selectedKey}</b>\r\n </Typography>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={handleValueChange} />\r\n </Box>\r\n )\r\n }\r\n\r\n const renderArrayList = () => {\r\n const { selectedKey, draggedIndex, dragOverIndex } = state\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n\r\n return (\r\n <Box>\r\n <Typography variant='h5' className={editorKitIframeClasses.title}>\r\n Manage: <b>{selectedKey}</b>\r\n </Typography>\r\n\r\n <Button\r\n variant='contained'\r\n startIcon={<AddIcon />}\r\n onClick={() => setState({ ...state, editingIndex: -1 })}\r\n fullWidth\r\n className={editorKitIframeClasses.addButton}\r\n >\r\n Add New Item\r\n </Button>\r\n\r\n {arrayData.length === 0 ? (\r\n <Paper className={editorKitIframeClasses.emptyState}>\r\n <Typography color='text.secondary'>No items yet. Click \"Add New Item\" to create one.</Typography>\r\n </Paper>\r\n ) : (\r\n <Box>\r\n {arrayData.map((item: any, index: number) => (\r\n <ArrayItem\r\n key={index}\r\n item={item}\r\n index={index}\r\n totalItems={arrayData.length}\r\n onEdit={(idx) => setState({ ...state, editingIndex: idx })}\r\n onDelete={handleDeleteItem}\r\n onMoveUp={handleMoveUp}\r\n onMoveDown={handleMoveDown}\r\n onDragStart={handleDragStart}\r\n onDragEnd={handleDragEnd}\r\n onDragOver={handleDragOver}\r\n onDrop={handleReorderItems}\r\n isDragging={draggedIndex === index}\r\n dragOverIndex={dragOverIndex ?? undefined}\r\n />\r\n ))}\r\n </Box>\r\n )}\r\n </Box>\r\n )\r\n }\r\n\r\n const renderEditForm = (ConfigClass: any, index: number) => {\r\n const { selectedKey } = state\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n const formData = index >= 0 ? arrayData[index] || {} : {}\r\n\r\n return (\r\n <Box>\r\n <Box className={editorKitIframeClasses.editHeader}>\r\n <IconButton onClick={() => setState({ ...state, editingIndex: null })} className={editorKitIframeClasses.backButton}>\r\n <ArrowBackIcon />\r\n </IconButton>\r\n <Typography variant='h5'>{index >= 0 ? `Edit Item #${index + 1}` : 'Add New Item'}</Typography>\r\n </Box>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={handleValueChange} />\r\n </Box>\r\n )\r\n }\r\n\r\n return (\r\n <EditorKitIframeStyled>\r\n {/* Badge \"Editor Kit: On\" */}\r\n <Box className={editorKitIframeClasses.badge}>\r\n <Typography variant='h6' component='div' className={editorKitIframeClasses.badgeText}>\r\n Editor Kit: <b className={editorKitIframeClasses.badgeStatus}>On</b> (Iframe Mode)\r\n </Typography>\r\n </Box>\r\n\r\n {/* Iframe displaying Landing page */}\r\n <iframe ref={iframeRef} src={url} className={editorKitIframeClasses.iframe} title='Editor Preview' />\r\n\r\n {/* Drawer for editing */}\r\n <Drawer anchor='right' open={state.drawerOpen} onClose={handleDrawerClose}>\r\n <FormStyled>{renderContent()}</FormStyled>\r\n </Drawer>\r\n </EditorKitIframeStyled>\r\n )\r\n}\r\n\r\nexport default EditorKitIframe\r\n\r\nexport const editorKitIframeClasses = {\r\n badge: 'EditorKitIframe-badge',\r\n badgeText: 'EditorKitIframe-badgeText',\r\n badgeStatus: 'EditorKitIframe-badgeStatus',\r\n iframe: 'EditorKitIframe-iframe',\r\n title: 'EditorKitIframe-title',\r\n addButton: 'EditorKitIframe-addButton',\r\n emptyState: 'EditorKitIframe-emptyState',\r\n editHeader: 'EditorKitIframe-editHeader',\r\n backButton: 'EditorKitIframe-backButton'\r\n}\r\n\r\nconst getClasses = (key: keyof typeof editorKitIframeClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${editorKitIframeClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst EditorKitIframeStyled = styled(Box)(({ theme }) => ({\r\n position: 'relative',\r\n width: '100%',\r\n height: 'calc(100vh - var(--height-header, 114px) - 10px)',\r\n padding: '6px',\r\n backgroundColor: theme.palette.grey[100],\r\n\r\n [getClasses('badge')]: {\r\n position: 'fixed',\r\n bottom: 64,\r\n right: 16,\r\n zIndex: 1000,\r\n backgroundColor: theme.palette.primary.main,\r\n padding: theme.spacing(1),\r\n borderRadius: theme.spacing(1),\r\n boxShadow: theme.shadows[3]\r\n },\r\n\r\n [getClasses('badgeText')]: { color: '#fff' },\r\n\r\n [getClasses('badgeStatus')]: { color: '#00ff00' },\r\n\r\n [getClasses('iframe')]: { width: '100%', height: '100%', border: 'none' }\r\n}))\r\n\r\nconst FormStyled = styled(Box)(({ theme }) => ({\r\n width: 'var(--editor-kit-drawer-width, 450px)',\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(2),\r\n '.MuiInputBase-input.MuiOutlinedInput-input': {\r\n height: 'auto'\r\n },\r\n\r\n [getClasses('title')]: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('addButton')]: { marginBottom: theme.spacing(3) },\r\n\r\n [getClasses('emptyState')]: {\r\n padding: theme.spacing(3),\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.grey[50]\r\n },\r\n\r\n [getClasses('editHeader')]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('backButton')]: { marginRight: theme.spacing(1) }\r\n}))\r\n"],"names":["EditorKitIframe","_ref","configs","url","value","onChange","iframeRef","useRef","_useState","useState","drawerOpen","selectedKey","editingIndex","draggedIndex","dragOverIndex","_useState2","_slicedToArray","state","setState","getConfig","key","config","formClass","isArray","useEffect","iframe","current","handleIframeLoad","iframeWindow","contentWindow","postMessage","type","data","Object","keys","err","console","error","addEventListener","handleMessage","event","_event$data$index","_iframe$contentWindow","_objectSpread","index","window","removeEventListener","_iframeRef$current","handleValueChange","_ref2","_asyncToGenerator","_regenerator","m","_callee","newValue","currentArray","_t","w","_context","p","n","a","Array","_toConsumableArray","push","v","_x","apply","this","arguments","handleDeleteItem","_ref3","_callee2","_t2","_context2","splice","_defineProperty","_x2","handleMoveUp","_ref4","_callee3","_context3","handleReorderItems","_x3","handleMoveDown","_ref5","_callee4","arrayData","_context4","length","_x4","handleDragStart","handleDragEnd","handleDragOver","_ref6","_callee5","fromIndex","toIndex","_currentArray$splice","_currentArray$splice2","movedItem","_t3","_context5","_x5","_x6","renderSingleForm","ConfigClass","formData","_jsxs","Box","Typography","variant","className","editorKitIframeClasses","title","children","_jsx","DinoForm","DecoratorForm","configClass","onSubmit","renderArrayList","Button","startIcon","AddIcon","onClick","fullWidth","addButton","Paper","emptyState","color","map","item","ArrayItem","totalItems","onEdit","idx","onDelete","onMoveUp","onMoveDown","onDragStart","onDragEnd","onDragOver","onDrop","isDragging","undefined","renderEditForm","editHeader","IconButton","backButton","ArrowBackIcon","concat","EditorKitIframeStyled","badge","component","badgeText","badgeStatus","ref","src","Drawer","anchor","open","onClose","FormStyled","renderContent","getClasses","options","styled","_ref7","theme","position","width","height","padding","backgroundColor","palette","grey","bottom","right","zIndex","primary","main","spacing","borderRadius","boxShadow","shadows","border","_ref9","overflowY","paddingTop","paddingBottom","marginBottom","borderBottom","textAlign","display","alignItems","marginRight"],"mappings":"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"}
|
|
@@ -2,8 +2,17 @@ import React, { Component } from 'react';
|
|
|
2
2
|
interface IArrayItemProps {
|
|
3
3
|
item: any;
|
|
4
4
|
index: number;
|
|
5
|
+
totalItems: number;
|
|
5
6
|
onEdit: (index: number) => void;
|
|
6
7
|
onDelete: (index: number) => void;
|
|
8
|
+
onMoveUp?: (index: number) => void;
|
|
9
|
+
onMoveDown?: (index: number) => void;
|
|
10
|
+
onDragStart?: (index: number) => void;
|
|
11
|
+
onDragEnd?: () => void;
|
|
12
|
+
onDragOver?: (index: number) => void;
|
|
13
|
+
onDrop?: (draggedIndex: number, targetIndex: number) => void;
|
|
14
|
+
isDragging?: boolean;
|
|
15
|
+
dragOverIndex?: number;
|
|
7
16
|
}
|
|
8
17
|
interface IArrayItemState {
|
|
9
18
|
showDeleteConfirm: boolean;
|
|
@@ -14,10 +23,17 @@ export declare class ArrayItem extends Component<IArrayItemProps, IArrayItemStat
|
|
|
14
23
|
handleConfirmDelete: (e: React.MouseEvent) => void;
|
|
15
24
|
handleCancelDelete: (e: React.MouseEvent) => void;
|
|
16
25
|
handleEdit: () => void;
|
|
26
|
+
handleMoveUp: (e: React.MouseEvent) => void;
|
|
27
|
+
handleMoveDown: (e: React.MouseEvent) => void;
|
|
28
|
+
handleDragStart: (e: React.DragEvent) => void;
|
|
29
|
+
handleDragEnd: (e: React.DragEvent) => void;
|
|
30
|
+
handleDragOver: (e: React.DragEvent) => void;
|
|
31
|
+
handleDrop: (e: React.DragEvent) => void;
|
|
17
32
|
render(): import("react/jsx-runtime").JSX.Element;
|
|
18
33
|
}
|
|
19
34
|
export declare const arrayItemClasses: {
|
|
20
35
|
root: string;
|
|
36
|
+
dragHandle: string;
|
|
21
37
|
content: string;
|
|
22
38
|
actionButtons: string;
|
|
23
39
|
confirmButtons: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-item.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/array-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"array-item.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/array-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAUxC,UAAU,eAAe;IACvB,IAAI,EAAE,GAAG,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5D,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,UAAU,eAAe;IACvB,iBAAiB,EAAE,OAAO,CAAA;CAC3B;AAED,qBAAa,SAAU,SAAQ,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC;gBAC5D,KAAK,EAAE,eAAe;IAOlC,iBAAiB,MAAO,gBAAgB,UAGvC;IAED,mBAAmB,MAAO,gBAAgB,UAIzC;IAED,kBAAkB,MAAO,gBAAgB,UAGxC;IAED,UAAU,aAET;IAED,YAAY,MAAO,gBAAgB,UAKlC;IAED,cAAc,MAAO,gBAAgB,UAKpC;IAED,eAAe,MAAO,eAAe,UAQpC;IAED,aAAa,MAAO,eAAe,UAKlC;IAED,cAAc,MAAO,eAAe,UAMnC;IAED,UAAU,MAAO,eAAe,UAU/B;IAED,MAAM;CAuEP;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;CAS5B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,CAAA;AAEzB,cAAc,eAAe,CAAA;AAG7B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mode.iframe.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/mode.iframe.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAA;AAMvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;CAC/B;
|
|
1
|
+
{"version":3,"file":"mode.iframe.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/mode.iframe.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAA;AAMvD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,GAAG,CAAA;IACV,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;CAC/B;AAUD,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,qBAAqB,CA0SrD,CAAA;AAED,eAAe,eAAe,CAAA;AAE9B,eAAO,MAAM,sBAAsB;;;;;;;;;;CAUlC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{inherits as r,createClass as e,superPropGet as t,classCallCheck as i,callSuper as n,defineProperty as o}from"../_virtual/_rollupPluginBabelHelpers.js";import s from"events";var a=function(){function a(){var r;i(this,a);for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];return r=n(this,a,[].concat(t)),o(r,"_createWrapListener",function(r){return function(){try{r.apply(void 0,arguments)}catch(r){console.error("Error in EditorKit listener:",r)}}}),r}return r(a,s),e(a,[{key:"subscribe",value:function(r,e){var i=this,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2]?this._createWrapListener(e):e;return t(a,"addListener",this)([r,n]),function(){t(a,"removeListener",i)([r,n])}}}])}();function l(){if("undefined"==typeof globalThis)return null;void 0===globalThis.EditorKitEventStore&&(globalThis.EditorKitEventStore=new a);var r=globalThis.EditorKitEventStore;return r.setMaxListeners(50),r}export{a as EditorKitEvent,l as getEditorKitEvent};
|
|
2
|
-
//# sourceMappingURL=events.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"events.js","sources":["../../src/editor-kit/events.ts"],"sourcesContent":["import EventEmitter from 'events'\r\n\r\ninterface IEventOptions {\r\n message?: string\r\n}\r\n\r\nexport interface IEditorKitEventConfigs {\r\n stateChange: [{ key: string; options?: IEventOptions }]\r\n requestState: [{ options?: IEventOptions }]\r\n}\r\n\r\nexport class EditorKitEvent extends EventEmitter<IEditorKitEventConfigs> {\r\n /**\r\n * Subscribe to a specific channel\r\n * @param channel The channel to subscribe to\r\n * @param callback Function to call when an event occurs on this channel\r\n * @returns Unsubscribe function to remove the event listener\r\n */\r\n private _createWrapListener = (callback: (...payload: any[]) => void) => {\r\n return (...payload: any[]) => {\r\n try {\r\n callback(...payload)\r\n } catch (error) {\r\n console.error('Error in EditorKit listener:', error)\r\n }\r\n }\r\n }\r\n subscribe<K extends keyof IEditorKitEventConfigs>(\r\n eventName: K,\r\n listener: K extends keyof IEditorKitEventConfigs\r\n ? IEditorKitEventConfigs[K] extends unknown[]\r\n ? (...args: IEditorKitEventConfigs[K]) => void\r\n : never\r\n : never,\r\n isTry: boolean = true\r\n ) {\r\n const action = isTry ? this._createWrapListener(listener) : listener\r\n super.addListener(eventName, action as any)\r\n return () => {\r\n super.removeListener(eventName, action as any)\r\n }\r\n }\r\n}\r\n\r\nexport function getEditorKitEvent() {\r\n if (typeof globalThis === 'undefined') return null\r\n\r\n if (typeof (globalThis as any).EditorKitEventStore === 'undefined') {\r\n // If EditorKitEventStore is not defined globally, define it\r\n // This allows it to be used in other parts of the application\r\n // without needing to import it explicitly\r\n ;(globalThis as any).EditorKitEventStore = new EditorKitEvent()\r\n }\r\n const eventEmitter = (globalThis as any).EditorKitEventStore as EditorKitEvent\r\n eventEmitter.setMaxListeners(50)\r\n return eventEmitter\r\n}\r\n"],"names":["EditorKitEvent","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","callback","apply","error","console","_inherits","EventEmitter","_createClass","key","value","eventName","listener","_this2","action","_createWrapListener","_superPropGet","getEditorKitEvent","globalThis","EditorKitEventStore","eventEmitter","setMaxListeners"],"mappings":"oLAWaA,IAAAA,aAAe,SAAAA,IAAA,IAAAC,EAAAC,OAAAF,GAAA,IAAA,IAAAG,EAAAC,UAAAC,OAAAC,EAAAC,IAAAA,MAAAJ,GAAAK,EAAA,EAAAA,EAAAL,EAAAK,IAAAF,EAAAE,GAAAJ,UAAAI,GAezB,OAfyBP,EAAAQ,EAAAC,KAAAV,EAAAW,GAAAA,OAAAL,IAC1BM,EAAAX,EAM8B,sBAAA,SAACY,GAC7B,OAAO,WACL,IACEA,EAAQC,WAAAV,EAAAA,UACT,CAAC,MAAOW,GACPC,QAAQD,MAAM,+BAAgCA,EAC/C,CACF,IACFd,CAAA,CAAA,OAAAgB,EAAAjB,EAfiCkB,GAejCC,EAAAnB,EAAA,CAAA,CAAAoB,IAAA,YAAAC,MACD,SACEC,EACAC,GAKqB,IAAAC,EAAAd,KAEfe,6DAAiBf,KAAKgB,oBAAoBH,GAAYA,EAE5D,OADAI,EAAA3B,EAAkBsB,cAAAA,KAAlBK,CAAkBL,CAAAA,EAAWG,IACtB,WACLE,EAAA3B,EAAA,iBAAAwB,EAAAG,CAAqBL,CAAAA,EAAWG,GACjC,CACH,IAAC,aAGaG,IACd,GAA0B,oBAAfC,WAA4B,OAAO,UAES,IAA3CA,WAAmBC,sBAI3BD,WAAmBC,oBAAsB,IAAI9B,GAEjD,IAAM+B,EAAgBF,WAAmBC,oBAEzC,OADAC,EAAaC,gBAAgB,IACtBD,CACT"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{defineProperty as e,inherits as t,createClass as r,classCallCheck as n,callSuper as a,asyncToGenerator as i,regenerator as o,objectSpread2 as s,toConsumableArray as d}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as l,jsx as c}from"react/jsx-runtime";import{Component as u}from"react";import{DinoForm as p}from"dinocollab-core/form";import{styled as m,Box as f,Typography as g,Drawer as h,Button as b,Paper as y,IconButton as v}from"@mui/material";import C from"@mui/icons-material/Add";import x from"@mui/icons-material/ArrowBack";import{getEditorKitEvent as A}from"./events.js";import{startAutoMount as K,stopAutoMount as k}from"./helpers.js";import{ArrayItem as S}from"./array-item.js";var E=function(){function m(t){var r;return n(this,m),r=a(this,m,[t]),e(r,"unsubscribeFn",null),e(r,"getConfig",function(e){var t=r.props.configs;if(!t||!t[e])return null;var n=t[e];return n.formClass?{formClass:n.formClass,isArray:n.isArray||!1}:{formClass:n,isArray:!1}}),e(r,"handleValueChange",function(){var e=i(o().m(function e(t){var n,a,i,l,c,u,p,m,f,g;return o().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n=r.props,a=n.onChange,i=n.value,l=r.state,c=l.selectedKey,u=l.editingIndex,a&&c){e.n=1;break}return e.a(2);case 1:if(p=r.getConfig(c)){e.n=2;break}return e.a(2);case 2:return m=s({},i),p.isArray?(f=Array.isArray(i[c])?d(i[c]):[],null!==u&&u>=0?f[u]=t:f.push(t),m[c]=f):m[c]=t,e.p=3,e.n=4,a(m);case 4:p.isArray?r.setState({editingIndex:null}):r.setState({drawerOpen:!1,selectedKey:null}),e.n=6;break;case 5:e.p=5,g=e.v,console.error("EditorKit: onChange failed",g);case 6:return e.a(2)}},e,null,[[3,5]])}));return function(t){return e.apply(this,arguments)}}()),e(r,"handleDeleteItem",function(){var t=i(o().m(function t(n){var a,i,l,c,u,p;return o().w(function(t){for(;;)switch(t.p=t.n){case 0:if(a=r.props,i=a.onChange,l=a.value,c=r.state.selectedKey,i&&c){t.n=1;break}return t.a(2);case 1:return(u=Array.isArray(l[c])?d(l[c]):[]).splice(n,1),t.p=2,t.n=3,i(s(s({},l),{},e({},c,u)));case 3:t.n=5;break;case 4:t.p=4,p=t.v,console.error("EditorKit: delete failed",p);case 5:return t.a(2)}},t,null,[[2,4]])}));return function(e){return t.apply(this,arguments)}}()),e(r,"handleDrawerClose",function(){r.setState({drawerOpen:!1,selectedKey:null,editingIndex:null})}),e(r,"renderContent",function(){var e=r.state,t=e.selectedKey,n=e.editingIndex;if(!t)return null;var a=r.getConfig(t);return a?a.isArray?null!==n?r.renderEditForm(a.formClass,n):r.renderArrayList():r.renderSingleForm(a.formClass):l(f,{p:2,children:["Config not found for key: ",t]})}),e(r,"renderSingleForm",function(e){var t=r.state.selectedKey,n=r.props.value,a=n&&t?n[t]:{};return l(B,{children:[l(g,{variant:"h5",className:I.title,children:["Editing: ",c("b",{children:t})]}),c(p.DecoratorForm,{data:a,configClass:e,onSubmit:r.handleValueChange})]})}),e(r,"renderArrayList",function(){var e=r.state.selectedKey,t=r.props.value,n=e&&Array.isArray(null==t?void 0:t[e])?t[e]:[];return l(B,{children:[l(g,{variant:"h5",className:I.title,children:["Manage: ",c("b",{children:e})]}),c(b,{variant:"contained",startIcon:c(C,{}),onClick:function(){return r.setState({editingIndex:-1})},fullWidth:!0,className:I.addButton,children:"Add New Item"}),0===n.length?c(y,{className:I.emptyState,children:c(g,{color:"text.secondary",children:'No items yet. Click "Add New Item" to create one.'})}):c(f,{children:n.map(function(e,t){return c(S,{item:e,index:t,onEdit:function(e){return r.setState({editingIndex:e})},onDelete:r.handleDeleteItem},t)})})]})}),e(r,"renderEditForm",function(e,t){var n=r.state.selectedKey,a=r.props.value,i=n&&Array.isArray(null==a?void 0:a[n])?a[n]:[],o=t>=0&&i[t]||{};return l(B,{children:[l(f,{className:I.editHeader,children:[c(v,{onClick:function(){return r.setState({editingIndex:null})},className:I.backButton,children:c(x,{})}),c(g,{variant:"h5",children:t>=0?"Edit Item #".concat(t+1):"Add New Item"})]}),c(p.DecoratorForm,{data:o,configClass:e,onSubmit:r.handleValueChange})]})}),e(r,"renderForm",function(){var e=r.state.selectedKey,t=r.props,n=t.configs,a=t.value;if(!n||!e||!n[e])return l(f,{p:2,children:["Config class not found for key: ",e]});var i=n[e],o=a&&e?a[e]:{};return l(B,{children:[l(g,{variant:"h5",sx:{py:2,mb:2,borderBottom:"1px solid #ccc"},children:["Editing Form: ",c("b",{children:e})]}),c(p.DecoratorForm,{data:o,configClass:i,onSubmit:r.handleValueChange})]})}),r.state={drawerOpen:!1,selectedKey:null,editingIndex:null},r}return t(m,u),r(m,[{key:"componentDidMount",value:function(){var e=this,t=A();if(t&&"function"==typeof t.subscribe)try{this.unsubscribeFn=t.subscribe("stateChange",function(t){null!=t&&t.key&&e.setState({selectedKey:t.key,drawerOpen:!0,editingIndex:null})})}catch(e){console.error("EditorKit: subscribe failed",e)}try{K()}catch(e){console.error("EditorKit: startAutoMount failed",e)}}},{key:"componentWillUnmount",value:function(){if(this.unsubscribeFn)try{this.unsubscribeFn()}catch(e){}try{k()}catch(e){console.error("EditorKit: stopAutoMount failed",e)}}},{key:"render",value:function(){var e=this.props.children,t=this.state.drawerOpen;return l("div",{children:[c(f,{className:I.badge,children:l(g,{variant:"h6",component:"div",className:I.badgeText,children:["Editor Kit: ",c("b",{className:I.badgeStatus,children:"On"})]})}),e,c(h,{open:t,onClose:this.handleDrawerClose,anchor:"right",children:this.renderContent()})]})}}])}(),I={badge:"EditorKitWrap-badge",badgeText:"EditorKitWrap-badgeText",badgeStatus:"EditorKitWrap-badgeStatus",title:"EditorKitWrap-title",addButton:"EditorKitWrap-addButton",emptyState:"EditorKitWrap-emptyState",editHeader:"EditorKitWrap-editHeader",backButton:"EditorKitWrap-backButton"},w=function(e,t){return"".concat("",".").concat(I[e]).concat("")},B=m(f)(function(t){var r=t.theme;return e(e(e(e(e(e(e(e({width:400,height:"100%",overflowY:"auto",padding:r.spacing(2),".MuiInputBase-input.MuiOutlinedInput-input":{height:"auto"}},w("badge"),{position:"fixed",bottom:64,right:16,zIndex:1e3,backgroundColor:r.palette.primary.main,padding:r.spacing(1),borderRadius:r.spacing(1),boxShadow:r.shadows[3]}),w("badgeText"),{color:"#fff"}),w("badgeStatus"),{color:"#00ff00"}),w("title"),{paddingTop:r.spacing(2),paddingBottom:r.spacing(2),marginBottom:r.spacing(2),borderBottom:"1px solid #ccc"}),w("addButton"),{marginBottom:r.spacing(3)}),w("emptyState"),{padding:r.spacing(3),textAlign:"center",backgroundColor:r.palette.grey[50]}),w("editHeader"),{display:"flex",alignItems:"center",paddingTop:r.spacing(2),paddingBottom:r.spacing(2),marginBottom:r.spacing(2),borderBottom:"1px solid #ccc"}),w("backButton"),{marginRight:r.spacing(1)})});export{E as EditorKitWrap,E as default,I as editorKitWrapClasses};
|
|
2
|
-
//# sourceMappingURL=mode.wrap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mode.wrap.js","sources":["../../src/editor-kit/mode.wrap.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { DinoForm } from 'dinocollab-core/form'\r\nimport { Box, Drawer, styled, Typography, IconButton, Button, Paper } from '@mui/material'\r\nimport AddIcon from '@mui/icons-material/Add'\r\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack'\r\nimport { getEditorKitEvent } from './events'\r\nimport { editKitClasses, startAutoMount, stopAutoMount } from './helpers'\r\nimport { ArrayItem } from './array-item'\r\n\r\nexport interface IEditorKitWrapProps {\r\n children?: React.ReactNode\r\n configs?: Record<string, any>\r\n value?: any\r\n onChange?: (data: any) => Promise<void>\r\n}\r\n\r\ninterface IEditorKitWrapState {\r\n drawerOpen: boolean\r\n selectedKey: string | null\r\n editingIndex: number | null // null = list view, number = editing item at index, -1 = add new\r\n}\r\n\r\nexport class EditorKitWrap extends Component<IEditorKitWrapProps, IEditorKitWrapState> {\r\n private unsubscribeFn: (() => void) | null = null\r\n\r\n constructor(props: IEditorKitWrapProps) {\r\n super(props)\r\n this.state = {\r\n drawerOpen: false,\r\n selectedKey: null,\r\n editingIndex: null\r\n }\r\n }\r\n\r\n getConfig = (key: string) => {\r\n const { configs } = this.props\r\n if (!configs || !configs[key]) return null\r\n\r\n const config = configs[key]\r\n // Support both formats: direct class or {formClass, isArray}\r\n if (config.formClass) {\r\n return { formClass: config.formClass, isArray: config.isArray || false }\r\n }\r\n return { formClass: config, isArray: false }\r\n }\r\n\r\n handleValueChange = async (data: any) => {\r\n const { onChange, value } = this.props\r\n const { selectedKey, editingIndex } = this.state\r\n if (!onChange || !selectedKey) return\r\n\r\n const config = this.getConfig(selectedKey)\r\n if (!config) return\r\n\r\n let newValue = { ...value }\r\n\r\n if (config.isArray) {\r\n // Array field\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n\r\n if (editingIndex !== null && editingIndex >= 0) {\r\n // Update existing item\r\n currentArray[editingIndex] = data\r\n } else {\r\n // Add new item\r\n currentArray.push(data)\r\n }\r\n\r\n newValue[selectedKey] = currentArray\r\n } else {\r\n // Single field\r\n newValue[selectedKey] = data\r\n }\r\n\r\n try {\r\n await onChange(newValue)\r\n // Back to list view for array, close for single\r\n if (config.isArray) {\r\n this.setState({ editingIndex: null })\r\n } else {\r\n this.setState({ drawerOpen: false, selectedKey: null })\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('EditorKit: onChange failed', err)\r\n }\r\n }\r\n\r\n handleDeleteItem = async (index: number) => {\r\n const { onChange, value } = this.props\r\n const { selectedKey } = this.state\r\n if (!onChange || !selectedKey) return\r\n\r\n const currentArray = Array.isArray(value[selectedKey]) ? [...value[selectedKey]] : []\r\n currentArray.splice(index, 1)\r\n\r\n try {\r\n await onChange({ ...value, [selectedKey]: currentArray })\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('EditorKit: delete failed', err)\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const ee = getEditorKitEvent()\r\n if (ee && typeof ee.subscribe === 'function') {\r\n try {\r\n this.unsubscribeFn = ee.subscribe('stateChange', (payload) => {\r\n if (payload?.key) {\r\n this.setState({\r\n selectedKey: payload.key,\r\n drawerOpen: true,\r\n editingIndex: null // Always start with list view\r\n })\r\n }\r\n })\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('EditorKit: subscribe failed', err)\r\n }\r\n }\r\n\r\n try {\r\n startAutoMount()\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('EditorKit: startAutoMount failed', err)\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.unsubscribeFn) {\r\n try {\r\n this.unsubscribeFn()\r\n } catch (e) {\r\n // ignore\r\n }\r\n }\r\n try {\r\n stopAutoMount()\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.error('EditorKit: stopAutoMount failed', err)\r\n }\r\n }\r\n\r\n handleDrawerClose = () => {\r\n this.setState({ drawerOpen: false, selectedKey: null, editingIndex: null })\r\n }\r\n\r\n render() {\r\n const { children } = this.props\r\n const { drawerOpen } = this.state\r\n\r\n return (\r\n <div>\r\n <Box className={editorKitWrapClasses.badge}>\r\n <Typography variant='h6' component='div' className={editorKitWrapClasses.badgeText}>\r\n Editor Kit: <b className={editorKitWrapClasses.badgeStatus}>On</b>\r\n </Typography>\r\n </Box>\r\n {children}\r\n <Drawer open={drawerOpen} onClose={this.handleDrawerClose} anchor='right'>\r\n {this.renderContent()}\r\n </Drawer>\r\n </div>\r\n )\r\n }\r\n\r\n renderContent = () => {\r\n const { selectedKey, editingIndex } = this.state\r\n if (!selectedKey) return null\r\n\r\n const config = this.getConfig(selectedKey)\r\n if (!config) {\r\n return <Box p={2}>Config not found for key: {selectedKey}</Box>\r\n }\r\n\r\n if (config.isArray) {\r\n // Array mode: show list or edit form\r\n if (editingIndex !== null) {\r\n return this.renderEditForm(config.formClass, editingIndex)\r\n }\r\n return this.renderArrayList()\r\n } else {\r\n // Single mode: show form directly\r\n return this.renderSingleForm(config.formClass)\r\n }\r\n }\r\n\r\n renderSingleForm = (ConfigClass: any) => {\r\n const { selectedKey } = this.state\r\n const { value } = this.props\r\n const formData = value && selectedKey ? value[selectedKey] : {}\r\n\r\n return (\r\n <FormStyled>\r\n <Typography variant='h5' className={editorKitWrapClasses.title}>\r\n Editing: <b>{selectedKey}</b>\r\n </Typography>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={this.handleValueChange} />\r\n </FormStyled>\r\n )\r\n }\r\n\r\n renderArrayList = () => {\r\n const { selectedKey } = this.state\r\n const { value } = this.props\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n\r\n return (\r\n <FormStyled>\r\n <Typography variant='h5' className={editorKitWrapClasses.title}>\r\n Manage: <b>{selectedKey}</b>\r\n </Typography>\r\n\r\n <Button\r\n variant='contained'\r\n startIcon={<AddIcon />}\r\n onClick={() => this.setState({ editingIndex: -1 })}\r\n fullWidth\r\n className={editorKitWrapClasses.addButton}\r\n >\r\n Add New Item\r\n </Button>\r\n\r\n {arrayData.length === 0 ? (\r\n <Paper className={editorKitWrapClasses.emptyState}>\r\n <Typography color='text.secondary'>No items yet. Click \"Add New Item\" to create one.</Typography>\r\n </Paper>\r\n ) : (\r\n <Box>\r\n {arrayData.map((item: any, index: number) => (\r\n <ArrayItem\r\n key={index}\r\n item={item}\r\n index={index}\r\n onEdit={(idx) => this.setState({ editingIndex: idx })}\r\n onDelete={this.handleDeleteItem}\r\n />\r\n ))}\r\n </Box>\r\n )}\r\n </FormStyled>\r\n )\r\n }\r\n\r\n renderEditForm = (ConfigClass: any, index: number) => {\r\n const { selectedKey } = this.state\r\n const { value } = this.props\r\n const arrayData = selectedKey && Array.isArray(value?.[selectedKey]) ? value[selectedKey] : []\r\n const formData = index >= 0 ? arrayData[index] || {} : {}\r\n\r\n return (\r\n <FormStyled>\r\n <Box className={editorKitWrapClasses.editHeader}>\r\n <IconButton onClick={() => this.setState({ editingIndex: null })} className={editorKitWrapClasses.backButton}>\r\n <ArrowBackIcon />\r\n </IconButton>\r\n <Typography variant='h5'>{index >= 0 ? `Edit Item #${index + 1}` : 'Add New Item'}</Typography>\r\n </Box>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={this.handleValueChange} />\r\n </FormStyled>\r\n )\r\n }\r\n\r\n renderForm = () => {\r\n const { selectedKey } = this.state\r\n const { configs, value } = this.props\r\n\r\n if (!configs || !selectedKey || !configs[selectedKey]) {\r\n return <Box p={2}>Config class not found for key: {selectedKey}</Box>\r\n }\r\n\r\n const ConfigClass = configs[selectedKey]\r\n const formData = value && selectedKey ? value[selectedKey] : {}\r\n\r\n return (\r\n <FormStyled>\r\n <Typography variant='h5' sx={{ py: 2, mb: 2, borderBottom: '1px solid #ccc' }}>\r\n Editing Form: <b>{selectedKey}</b>\r\n </Typography>\r\n <DinoForm.DecoratorForm data={formData} configClass={ConfigClass} onSubmit={this.handleValueChange} />\r\n </FormStyled>\r\n )\r\n }\r\n}\r\nexport default EditorKitWrap\r\n\r\nexport const editorKitWrapClasses = {\r\n badge: 'EditorKitWrap-badge',\r\n badgeText: 'EditorKitWrap-badgeText',\r\n badgeStatus: 'EditorKitWrap-badgeStatus',\r\n title: 'EditorKitWrap-title',\r\n addButton: 'EditorKitWrap-addButton',\r\n emptyState: 'EditorKitWrap-emptyState',\r\n editHeader: 'EditorKitWrap-editHeader',\r\n backButton: 'EditorKitWrap-backButton'\r\n}\r\n\r\nconst getClasses = (key: keyof typeof editorKitWrapClasses, options?: { prefix?: string; suffix?: string }) => {\r\n return `${options?.prefix || ''}.${editorKitWrapClasses[key]}${options?.suffix || ''}`\r\n}\r\n\r\nconst FormStyled = styled(Box)(({ theme }) => ({\r\n width: 400,\r\n height: '100%',\r\n overflowY: 'auto',\r\n padding: theme.spacing(2),\r\n '.MuiInputBase-input.MuiOutlinedInput-input': {\r\n height: 'auto'\r\n },\r\n\r\n [getClasses('badge')]: {\r\n position: 'fixed',\r\n bottom: 64,\r\n right: 16,\r\n zIndex: 1000,\r\n backgroundColor: theme.palette.primary.main,\r\n padding: theme.spacing(1),\r\n borderRadius: theme.spacing(1),\r\n boxShadow: theme.shadows[3]\r\n },\r\n\r\n [getClasses('badgeText')]: {\r\n color: '#fff'\r\n },\r\n\r\n [getClasses('badgeStatus')]: {\r\n color: '#00ff00'\r\n },\r\n\r\n [getClasses('title')]: {\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('addButton')]: {\r\n marginBottom: theme.spacing(3)\r\n },\r\n\r\n [getClasses('emptyState')]: {\r\n padding: theme.spacing(3),\r\n textAlign: 'center',\r\n backgroundColor: theme.palette.grey[50]\r\n },\r\n\r\n [getClasses('editHeader')]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n paddingTop: theme.spacing(2),\r\n paddingBottom: theme.spacing(2),\r\n marginBottom: theme.spacing(2),\r\n borderBottom: '1px solid #ccc'\r\n },\r\n\r\n [getClasses('backButton')]: {\r\n marginRight: theme.spacing(1)\r\n }\r\n}))\r\n"],"names":["EditorKitWrap","props","_this","_classCallCheck","_callSuper","_defineProperty","key","configs","config","formClass","isArray","_ref","_asyncToGenerator","_regenerator","m","_callee","data","_this$props","onChange","value","_this$state","selectedKey","editingIndex","newValue","currentArray","_t","w","_context","p","n","state","a","getConfig","_objectSpread","Array","_toConsumableArray","push","setState","drawerOpen","v","console","error","_x","apply","this","arguments","_ref2","_callee2","index","_this$props2","_t2","_context2","splice","_x2","_this$state2","renderEditForm","renderArrayList","renderSingleForm","_jsxs","Box","children","ConfigClass","formData","FormStyled","Typography","variant","className","editorKitWrapClasses","title","_jsx","DinoForm","DecoratorForm","configClass","onSubmit","handleValueChange","arrayData","Button","startIcon","AddIcon","onClick","fullWidth","addButton","length","Paper","emptyState","color","map","item","ArrayItem","onEdit","idx","onDelete","handleDeleteItem","editHeader","IconButton","backButton","ArrowBackIcon","concat","_this$props3","sx","py","mb","borderBottom","_inherits","Component","_createClass","_this2","ee","getEditorKitEvent","subscribe","unsubscribeFn","payload","err","startAutoMount","e","stopAutoMount","badge","component","badgeText","badgeStatus","Drawer","open","onClose","handleDrawerClose","anchor","renderContent","getClasses","options","styled","_ref3","theme","width","height","overflowY","padding","spacing","position","bottom","right","zIndex","backgroundColor","palette","primary","main","borderRadius","boxShadow","shadows","paddingTop","paddingBottom","marginBottom","textAlign","grey","display","alignItems","marginRight"],"mappings":"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"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import React, { Component } from 'react';
|
|
2
|
-
export interface IEditorKitWrapProps {
|
|
3
|
-
children?: React.ReactNode;
|
|
4
|
-
configs?: Record<string, any>;
|
|
5
|
-
value?: any;
|
|
6
|
-
onChange?: (data: any) => Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
interface IEditorKitWrapState {
|
|
9
|
-
drawerOpen: boolean;
|
|
10
|
-
selectedKey: string | null;
|
|
11
|
-
editingIndex: number | null;
|
|
12
|
-
}
|
|
13
|
-
export declare class EditorKitWrap extends Component<IEditorKitWrapProps, IEditorKitWrapState> {
|
|
14
|
-
private unsubscribeFn;
|
|
15
|
-
constructor(props: IEditorKitWrapProps);
|
|
16
|
-
getConfig: (key: string) => {
|
|
17
|
-
formClass: any;
|
|
18
|
-
isArray: any;
|
|
19
|
-
} | null;
|
|
20
|
-
handleValueChange: (data: any) => Promise<void>;
|
|
21
|
-
handleDeleteItem: (index: number) => Promise<void>;
|
|
22
|
-
componentDidMount(): void;
|
|
23
|
-
componentWillUnmount(): void;
|
|
24
|
-
handleDrawerClose: () => void;
|
|
25
|
-
render(): import("react/jsx-runtime").JSX.Element;
|
|
26
|
-
renderContent: () => import("react/jsx-runtime").JSX.Element | null;
|
|
27
|
-
renderSingleForm: (ConfigClass: any) => import("react/jsx-runtime").JSX.Element;
|
|
28
|
-
renderArrayList: () => import("react/jsx-runtime").JSX.Element;
|
|
29
|
-
renderEditForm: (ConfigClass: any, index: number) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
-
renderForm: () => import("react/jsx-runtime").JSX.Element;
|
|
31
|
-
}
|
|
32
|
-
export default EditorKitWrap;
|
|
33
|
-
export declare const editorKitWrapClasses: {
|
|
34
|
-
badge: string;
|
|
35
|
-
badgeText: string;
|
|
36
|
-
badgeStatus: string;
|
|
37
|
-
title: string;
|
|
38
|
-
addButton: string;
|
|
39
|
-
emptyState: string;
|
|
40
|
-
editHeader: string;
|
|
41
|
-
backButton: string;
|
|
42
|
-
};
|
|
43
|
-
//# sourceMappingURL=mode.wrap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mode.wrap.d.ts","sourceRoot":"","sources":["../../../src/editor-kit/mode.wrap.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AASxC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAA;IACX,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAED,UAAU,mBAAmB;IAC3B,UAAU,EAAE,OAAO,CAAA;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAED,qBAAa,aAAc,SAAQ,SAAS,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IACpF,OAAO,CAAC,aAAa,CAA4B;gBAErC,KAAK,EAAE,mBAAmB;IAStC,SAAS,QAAS,MAAM;;;aAUvB;IAED,iBAAiB,SAAgB,GAAG,mBAwCnC;IAED,gBAAgB,UAAiB,MAAM,mBActC;IAED,iBAAiB;IA2BjB,oBAAoB;IAgBpB,iBAAiB,aAEhB;IAED,MAAM;IAmBN,aAAa,uDAmBZ;IAED,gBAAgB,gBAAiB,GAAG,6CAanC;IAED,eAAe,gDAwCd;IAED,cAAc,gBAAiB,GAAG,SAAS,MAAM,6CAiBhD;IAED,UAAU,gDAmBT;CACF;AACD,eAAe,aAAa,CAAA;AAE5B,eAAO,MAAM,oBAAoB;;;;;;;;;CAShC,CAAA"}
|