diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b62fe30 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,12 @@ +{ + "semi": false, + "singleQuote": true, + "trailingComma": "es5", + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "bracketSpacing": true, + "jsxBracketSameLine": false, + "arrowParens": "always", + "endOfLine": "lf" +} diff --git a/dist-plain/lib/VxgBasicAdminPlugin.d.ts b/dist-plain/lib/VxgBasicAdminPlugin.d.ts index a8f5b61..c3d7958 100644 --- a/dist-plain/lib/VxgBasicAdminPlugin.d.ts +++ b/dist-plain/lib/VxgBasicAdminPlugin.d.ts @@ -1,2 +1,2 @@ declare function VxgBasicAdminPlugin(this: any): void; -export { VxgBasicAdminPlugin, }; +export { VxgBasicAdminPlugin }; diff --git a/dist-plain/lib/VxgBasicAdminPlugin.js b/dist-plain/lib/VxgBasicAdminPlugin.js index 074e181..d55294b 100644 --- a/dist-plain/lib/VxgBasicAdminPlugin.js +++ b/dist-plain/lib/VxgBasicAdminPlugin.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VxgBasicAdminPlugin = void 0; +exports.VxgBasicAdminPlugin = VxgBasicAdminPlugin; const vxg_util_1 = require("./vxg-util"); function VxgBasicAdminPlugin() { const seneca = this; @@ -16,11 +16,10 @@ function VxgBasicAdminPlugin() { await this.post('aim:app,prepare:app'); }); async function setPath(msg, meta) { - const q = Object.entries(msg.query) - .reduce((s, n) => (s + ('' === s ? '?' : '') + - (encodeURIComponent(n[0]) + '=' + encodeURIComponent(n[1]))), ''); + const q = Object.entries(msg.query).reduce((s, n) => s + + ('' === s ? '?' : '') + + (encodeURIComponent(n[0]) + '=' + encodeURIComponent(n[1])), ''); const path = '/view/' + msg.view + q; - console.log('PATH', path); msg.navigate(path); } async function setMode(msg, meta) { @@ -30,11 +29,11 @@ function VxgBasicAdminPlugin() { meta.custom.state().current.view.name = msg.name; meta.custom.state().current.view.query = msg.query; meta.custom.state().current.view.hash = msg.hash; - console.log('syncView', msg.name); } async function prepareApp(_msg, meta) { let state = meta.custom.state(); let model = seneca.context.model; + console.log('model', model); let frame = model.app.web.frame.private; let viewMap = frame.view; // let partMap = frame.part @@ -43,12 +42,17 @@ function VxgBasicAdminPlugin() { view: { name: '', query: {}, - hash: '' - } + hash: '', + }, }; const viewState = (0, vxg_util_1.cmap)(viewMap, { name: vxg_util_1.cmap.COPY, active: vxg_util_1.cmap.FILTER, + alert: { + active: false, + message: '', + level: 'info', + }, }); state.view = viewState; state.nav = { @@ -60,10 +64,9 @@ function VxgBasicAdminPlugin() { active: vxg_util_1.cmap.FILTER, view: vxg_util_1.cmap.COPY, name: vxg_util_1.cmap.COPY, - }) - }) + }), + }), }; } } -exports.VxgBasicAdminPlugin = VxgBasicAdminPlugin; //# sourceMappingURL=VxgBasicAdminPlugin.js.map \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicAdminPlugin.js.map b/dist-plain/lib/VxgBasicAdminPlugin.js.map index ed46348..4a282e7 100644 --- a/dist-plain/lib/VxgBasicAdminPlugin.js.map +++ b/dist-plain/lib/VxgBasicAdminPlugin.js.map @@ -1 +1 @@ -{"version":3,"file":"VxgBasicAdminPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicAdminPlugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VxgBasicAdminPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicAdminPlugin.ts"],"names":[],"mappings":";;AAqGS,kDAAmB;AArG5B,yCAAuC;AAEvC,SAAS,mBAAmB;IAC1B,MAAM,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,KAAK,CAAA;IAEvC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,eAAI,CAAA;IAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,eAAI,CAAA;IAE/B,MAAM;SACH,OAAO,CAAC,iCAAiC,EAAE,UAAU,CAAC;SAEtD,OAAO,CACN,+BAA+B,EAC/B,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,EAC9C,QAAQ,CACT;SAEA,OAAO,CACN,uCAAuC,EACvC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,EAClC,OAAO,CACR;SAEA,OAAO,CACN,yBAAyB,EACzB,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EACpC,OAAO,CACR;SAEA,OAAO,CAAC,KAAK;QACZ,MAAM,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEJ,KAAK,UAAU,OAAO,CAAE,GAAQ,EAAE,IAAS;QACzC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CACxC,CAAC,CAAM,EAAE,CAAM,EAAE,EAAE,CACjB,CAAC;YACD,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC7D,EAAE,CACH,CAAA;QACD,MAAM,IAAI,GAAG,QAAQ,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAA;QACpC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IACpB,CAAC;IAED,KAAK,UAAU,OAAO,CAAE,GAAQ,EAAE,IAAS;QACzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IACzC,CAAC;IAED,KAAK,UAAU,QAAQ,CAAE,GAAQ,EAAE,IAAS;QAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;QAChD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;QAClD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAA;IAClD,CAAC;IAED,KAAK,UAAU,UAAU,CAAE,IAAS,EAAE,IAAS;QAC7C,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAE/B,IAAI,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QAC3B,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAA;QACvC,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,CAAA;QACxB,2BAA2B;QAC3B,IAAI,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAA;QAElC,KAAK,CAAC,OAAO,GAAG;YACd,IAAI,EAAE;gBACJ,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,EAAE;gBACT,IAAI,EAAE,EAAE;aACT;SACF,CAAA;QAED,MAAM,SAAS,GAAG,IAAA,eAAI,EAAC,OAAO,EAAE;YAC9B,IAAI,EAAE,eAAI,CAAC,IAAI;YACf,MAAM,EAAE,eAAI,CAAC,MAAM;YACnB,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,EAAE;gBACX,KAAK,EAAE,MAAM;aACd;SACF,CAAC,CAAA;QACF,KAAK,CAAC,IAAI,GAAG,SAAS,CAAA;QAEtB,KAAK,CAAC,GAAG,GAAG;YACV,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,IAAA,eAAI,EAAC,UAAU,EAAE;gBACxB,IAAI,EAAE,eAAI,CAAC,IAAI;gBACf,MAAM,EAAE,eAAI,CAAC,MAAM;gBACnB,IAAI,EAAE,CAAC,CAAM,EAAE,EAAE,CACf,IAAA,eAAI,EAAC,CAAC,EAAE;oBACN,MAAM,EAAE,eAAI,CAAC,MAAM;oBACnB,IAAI,EAAE,eAAI,CAAC,IAAI;oBACf,IAAI,EAAE,eAAI,CAAC,IAAI;iBAChB,CAAC;aACL,CAAC;SACH,CAAA;IACH,CAAC;AACH,CAAC"} \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicAuthPlugin.js b/dist-plain/lib/VxgBasicAuthPlugin.js index 532e276..3822731 100644 --- a/dist-plain/lib/VxgBasicAuthPlugin.js +++ b/dist-plain/lib/VxgBasicAuthPlugin.js @@ -1,13 +1,11 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VxgBasicAuthPlugin = void 0; +exports.VxgBasicAuthPlugin = VxgBasicAuthPlugin; const gubu_1 = require("gubu"); function VxgBasicAuthPlugin(options) { const seneca = this; const { spec, setSigninStatus, setReady } = options; - console.log('VxgBasicAuthPlugin define', spec); function handleSignin(event) { - console.log('handleSignin'); event.preventDefault(); const data = new FormData(event.currentTarget); const email = data.get('email'); @@ -39,7 +37,6 @@ function VxgBasicAuthPlugin(options) { } }; } -exports.VxgBasicAuthPlugin = VxgBasicAuthPlugin; VxgBasicAuthPlugin.default = { setSigninStatus: Function, setReady: Function, diff --git a/dist-plain/lib/VxgBasicAuthPlugin.js.map b/dist-plain/lib/VxgBasicAuthPlugin.js.map index 74dfee4..b424030 100644 --- a/dist-plain/lib/VxgBasicAuthPlugin.js.map +++ b/dist-plain/lib/VxgBasicAuthPlugin.js.map @@ -1 +1 @@ -{"version":3,"file":"VxgBasicAuthPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicAuthPlugin.ts"],"names":[],"mappings":";;;AAEA,+BAA2B;AAG3B,SAAS,kBAAkB,CAAY,OAAY;IACjD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAEnD,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAA;IAG9C,SAAS,YAAY,CAAC,KAAU;QAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAC3B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAErC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CACnB,6BAA6B,EAC7B,EAAE,KAAK,EAAE,QAAQ,EAAE,EACnB,UAAS,GAAQ,EAAE,GAAQ;YACzB,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/D,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBAC/C,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;gBAC7B,OAAM;YACR,CAAC;iBAEI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBAChC,eAAe,CAAC,SAAS,CAAC,CAAA;gBAC1B,OAAM;YACR,CAAC;iBAEI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpD,eAAe,CAAC,OAAO,CAAC,CAAA;gBACxB,OAAM;YACR,CAAC;YAED,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;YACjD,CAAC;YAED,eAAe,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC,CACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEd,OAAO;QACL,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAA;AACH,CAAC;AAgBC,gDAAkB;AAdpB,kBAAkB,CAAC,OAAO,GAAG;IAC3B,eAAe,EAAE,QAAQ;IACzB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,IAAA,WAAI,EAAC;QACT,MAAM,EAAE,IAAA,WAAI,EAAC;YACX,KAAK,EAAE,KAAK;SACb,CAAC;KACH,CAAC;CACH,CAAA;AAGD,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"VxgBasicAuthPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicAuthPlugin.ts"],"names":[],"mappings":";;AAsEE,gDAAkB;AApEpB,+BAA2B;AAG3B,SAAS,kBAAkB,CAAY,OAAY;IACjD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;IAGnD,SAAS,YAAY,CAAC,KAAU;QAC9B,KAAK,CAAC,cAAc,EAAE,CAAA;QACtB,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAE9C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAErC,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CACnB,6BAA6B,EAC7B,EAAE,KAAK,EAAE,QAAQ,EAAE,EACnB,UAAS,GAAQ,EAAE,GAAQ;YACzB,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/D,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM;oBAC/C,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;gBAC7B,OAAM;YACR,CAAC;iBAEI,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;gBAChC,eAAe,CAAC,SAAS,CAAC,CAAA;gBAC1B,OAAM;YACR,CAAC;iBAEI,IAAI,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpD,eAAe,CAAC,OAAO,CAAC,CAAA;gBACxB,OAAM;YACR,CAAC;YAED,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;YACjD,CAAC;YAED,eAAe,CAAC,aAAa,CAAC,CAAA;QAChC,CAAC,CACF,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEd,OAAO;QACL,OAAO,EAAE;YACP,YAAY;SACb;KACF,CAAA;AACH,CAAC;AAED,kBAAkB,CAAC,OAAO,GAAG;IAC3B,eAAe,EAAE,QAAQ;IACzB,QAAQ,EAAE,QAAQ;IAClB,IAAI,EAAE,IAAA,WAAI,EAAC;QACT,MAAM,EAAE,IAAA,WAAI,EAAC;YACX,KAAK,EAAE,KAAK;SACb,CAAC;KACH,CAAC;CACH,CAAA;AAGD,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAA"} \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicEntityEditPlugin.d.ts b/dist-plain/lib/VxgBasicEntityEditPlugin.d.ts index 3c35bac..7685cf5 100644 --- a/dist-plain/lib/VxgBasicEntityEditPlugin.d.ts +++ b/dist-plain/lib/VxgBasicEntityEditPlugin.d.ts @@ -5,6 +5,12 @@ declare function VxgBasicEntityEditPlugin(this: any, options: any): { slot: any; fields: any; }; + util: { + resolveMarks: (marks: any) => any; + dateTimeFromUTC: (utc: number, tz?: string) => any; + localTimeToUTC: (timeString: string, tz?: string) => number; + localDateTimeToUTC: (dateOrDateTimeString: string, tz?: string) => number; + }; }; }; export { VxgBasicEntityEditPlugin }; diff --git a/dist-plain/lib/VxgBasicEntityEditPlugin.js b/dist-plain/lib/VxgBasicEntityEditPlugin.js index bd08070..482a0f2 100644 --- a/dist-plain/lib/VxgBasicEntityEditPlugin.js +++ b/dist-plain/lib/VxgBasicEntityEditPlugin.js @@ -1,21 +1,173 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VxgBasicEntityEditPlugin = void 0; +exports.VxgBasicEntityEditPlugin = VxgBasicEntityEditPlugin; const gubu_1 = require("gubu"); +const vxg_util_1 = require("./vxg-util"); const { Open, Child } = gubu_1.Gubu; const Shape = (0, gubu_1.Gubu)(Open({ name: String, prefix: String, ent: String, order: [String], - field: Child({}, {}) -}), { prefix: 'BasicEntityEdit' }); + field: Child({}, {}), +}), { name: 'BasicEntityEdit' }); function VxgBasicEntityEditPlugin(options) { const seneca = this; const spec = Shape(options.spec); - console.log('QQQ', spec); const slot = spec.prefix + spec.name; + console.log('VxgBasicEntityEditPlugin', 'slot', slot, 'spec.name', spec.name); const fields = spec.order.reduce((a, fn) => (fixField(fn, spec.field[fn], spec), a.push(spec.field[fn]), a), []); + for (const field of fields) { + if ('Date' === field.ux.kind) { + seneca + .add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Date(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]); + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_udm$'] = dt.udm; + item[field.name] = dt.locald; + console.log('modify_edit_Date', item[field.name]); + } + return item; + }) + .add('aim:app,on:BasicLed,modify:save', { view: spec.name }, async function modify_save_Date(msg) { + const out = await this.prior(msg); + let item = { ...out }; + const dt = util.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + else if ('Time' === field.ux.kind) { + seneca + .add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Time(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]); + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_udm$'] = dt.udm; + item[field.name] = dt.localt; + console.log('modify_edit_Time', item[field.name]); + } + return item; + }) + .add('aim:app,on:BasicLed,modify:save', { view: spec.name }, async function modify_save_Time(msg) { + const out = await this.prior(msg); + let item = { ...out }; + const dt = util.localTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + else if ('DateTime' === field.ux.kind) { + seneca + .add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Datetime(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]); + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_udm$'] = dt.udm; + item[field.name] = dt.locald + 'T' + dt.localt; + } + return item; + }) + .add('aim:app,on:BasicLed,modify:save', { view: spec.name }, async function modify_save_Datetime(msg) { + const out = await this.prior(msg); + let item = { ...out }; + const dt = util.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + else if ('Slider' === field.ux.kind) { + // console.log('VxgBasicEntityEditPlugin', 'Slider') + seneca.add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Slider(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_uival$'] = Number(item[field.name]) / 60; + item[field.name + '_marks$'] = util.resolveMarks(field.ux.props.marks); + } + return item; + }); + } + else if ('Select' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'Select', field.name); + seneca.add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Select(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_default$'] = (0, vxg_util_1.resdefault)(field.cat, (val) => val); + item[field.name + '_cat$'] = Object.keys(field.cat.item).map((key) => { + var _a, _b; + return ({ + title: (_b = (_a = field.cat.item) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.title, + key: key, + }); + }); + item[field.name + '_uival$'] = (0, vxg_util_1.resvalue)(item[field.name], field.cat, (val) => val); + } + return item; + }); + } + else if ('Autocomplete' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'Autocomplete', field.name); + seneca.add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_Autocomplete(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_default$'] = (0, vxg_util_1.resdefault)(field.cat, (val, item) => ({ + key: val, + title: item.title, + })); + item[field.name + '_cat$'] = Object.keys(field.cat.item).map((key) => { + var _a, _b; + return ({ + title: (_b = (_a = field.cat.item) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.title, + key: key, + }); + }); + item[field.name + '_uival$'] = (0, vxg_util_1.resvalue)(item[field.name], field.cat, (val, item) => ({ + key: val, + title: item.title, + })); + } + // console.log('modify_edit_Autocomplete', item) + return item; + }); + } + else if ('RadioGroup' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'RadioGroup', field.name); + seneca.add('aim:app,on:BasicLed,modify:edit', { view: spec.name }, async function modify_edit_RadioGroup(msg) { + const out = await this.prior(msg); + let item = { ...out }; + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name]; + item[field.name + '_default$'] = field.cat.default; + item[field.name + '_cat$'] = Object.keys(field.cat.item).map((key) => { + var _a, _b; + return ({ + title: (_b = (_a = field.cat.item) === null || _a === void 0 ? void 0 : _a[key]) === null || _b === void 0 ? void 0 : _b.title, + key: key, + }); + }); + item[field.name + '_uival$'] = (0, vxg_util_1.resvalue)(item[field.name], field.cat, (val, item) => ({ + key: val, + title: item.title, + })); + } + // console.log('modify_edit_Autocomplete', item) + return item; + }); + } + } options.setPlugin(true); return { exports: { @@ -23,22 +175,97 @@ function VxgBasicEntityEditPlugin(options) { spec, slot, fields, - } - } + }, + util, + }, }; } -exports.VxgBasicEntityEditPlugin = VxgBasicEntityEditPlugin; function fixField(name, field, spec) { field.id = 'vxg-field-' + spec.name + '-' + name; field.name = name; field.ux = field.ux || {}; field.ux.size = null == field.ux.size ? 4 : parseInt(field.ux.size, 10); } +const util = { + resolveMarks: (marks) => { + if (!marks || (typeof marks === 'object' && !Object.keys(marks).length)) + return false; + return typeof marks === 'object' + ? Object.entries(marks).map(([key, value]) => ({ + label: value, + value: +key, + })) + : marks; + }, + dateTimeFromUTC: (utc, tz) => { + const date = new Date(utc); + const iso = date.toISOString(); + const isod = iso.split('T')[0]; + const isot = iso.split('T')[1].split('.')[0]; + // UTC millis into day (since midnight) + const udm = date.getUTCHours() * 60 * 60 * 1000 + + date.getUTCMinutes() * 60 * 1000 + + date.getUTCSeconds() * 1000 + + date.getUTCMilliseconds(); + let out = { + utc, + date, + isod, + isot, + udm, + }; + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const dateFormatter = new Intl.DateTimeFormat('en-GB', { + timeZone: tz, + year: 'numeric', + month: '2-digit', + day: '2-digit', + }); + const timeFormatter = new Intl.DateTimeFormat('en-GB', { + timeZone: tz, + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false, + }); + const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); + const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); + out.locald = `${year}-${month}-${day}`; + out.localt = `${hour}:${minute}:${second}`; + return out; + }, + localTimeToUTC: (timeString, tz) => { + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const now = new Date(); + const [hours, minutes, seconds] = timeString.split(':').map(Number); + const localDate = new Date(now.getFullYear(), now.getMonth(), now.getDate(), hours, minutes, seconds); + const utcTimestamp = Date.UTC(localDate.getFullYear(), localDate.getMonth(), localDate.getDate(), localDate.getHours(), localDate.getMinutes(), localDate.getSeconds()); + const tzOffset = new Date(utcTimestamp).getTimezoneOffset() * 60000; + return utcTimestamp - tzOffset; + }, + localDateTimeToUTC: (dateOrDateTimeString, tz) => { + const date = new Date(dateOrDateTimeString); + // Check if the date is valid + if (isNaN(date.getTime())) { + throw new Error('Invalid date or datetime string'); + } + // If a timezone is provided, adjust the date + if (tz) { + const tzDate = new Date(date.toLocaleString('en-GB', { timeZone: tz })); + const offset = date.getTime() - tzDate.getTime(); + return date.getTime() + offset; + } + // If no timezone is provided, assume the input is already in local time + return date.getTime(); + }, +}; Object.assign(VxgBasicEntityEditPlugin, { defaults: { spec: {}, setPlugin: Function, - } + }, +}); +Object.defineProperty(VxgBasicEntityEditPlugin, 'name', { + value: 'VxgBasicEntityEditPlugin', }); -Object.defineProperty(VxgBasicEntityEditPlugin, 'name', { value: 'VxgBasicEntityEditPlugin' }); //# sourceMappingURL=VxgBasicEntityEditPlugin.js.map \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicEntityEditPlugin.js.map b/dist-plain/lib/VxgBasicEntityEditPlugin.js.map index 65f3204..1253eac 100644 --- a/dist-plain/lib/VxgBasicEntityEditPlugin.js.map +++ b/dist-plain/lib/VxgBasicEntityEditPlugin.js.map @@ -1 +1 @@ -{"version":3,"file":"VxgBasicEntityEditPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicEntityEditPlugin.ts"],"names":[],"mappings":";;;AAGA,+BAA2B;AAE3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAI,CAAA;AAE5B,MAAM,KAAK,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;CACrB,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAGlC,SAAS,wBAAwB,CAAY,OAAY;IACvD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IAExB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;IAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAO,EAAE,EAAE,CACnD,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEtE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEvB,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI;gBACJ,IAAI;gBACJ,MAAM;aACP;SACF;KACF,CAAA;AACH,CAAC;AAyBC,4DAAwB;AArB1B,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAU,EAAE,IAAS;IACnD,KAAK,CAAC,EAAE,GAAG,YAAY,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;IAChD,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,CAAA;IACzB,KAAK,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;AACzE,CAAC;AAKD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE;IACtC,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAA;AAGF,MAAM,CAAC,cAAc,CAAC,wBAAwB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"VxgBasicEntityEditPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicEntityEditPlugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicEntityFieldPlugin.d.ts b/dist-plain/lib/VxgBasicEntityFieldPlugin.d.ts new file mode 100644 index 0000000..3725ec0 --- /dev/null +++ b/dist-plain/lib/VxgBasicEntityFieldPlugin.d.ts @@ -0,0 +1,6 @@ +declare function VxgBasicEntityFieldPlugin(this: any, options: any): { + exports: { + handle: {}; + }; +}; +export { VxgBasicEntityFieldPlugin }; diff --git a/dist-plain/lib/VxgBasicEntityFieldPlugin.js b/dist-plain/lib/VxgBasicEntityFieldPlugin.js new file mode 100644 index 0000000..0747dbc --- /dev/null +++ b/dist-plain/lib/VxgBasicEntityFieldPlugin.js @@ -0,0 +1,28 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.VxgBasicEntityFieldPlugin = VxgBasicEntityFieldPlugin; +const gubu_1 = require("gubu"); +const { Open, Child } = gubu_1.Gubu; +const Shape = (0, gubu_1.Gubu)(Open({ + field: {}, +}), { name: 'BasicEntityField' }); +function VxgBasicEntityFieldPlugin(options) { + const seneca = this; + const spec = Shape(options.spec); + options.setPlugin(true); + return { + exports: { + handle: {}, + }, + }; +} +Object.assign(VxgBasicEntityFieldPlugin, { + defaults: { + spec: {}, + setPlugin: Function, + }, +}); +Object.defineProperty(VxgBasicEntityFieldPlugin, 'name', { + value: 'VxgBasicEntityFieldPlugin', +}); +//# sourceMappingURL=VxgBasicEntityFieldPlugin.js.map \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicEntityFieldPlugin.js.map b/dist-plain/lib/VxgBasicEntityFieldPlugin.js.map new file mode 100644 index 0000000..35219ae --- /dev/null +++ b/dist-plain/lib/VxgBasicEntityFieldPlugin.js.map @@ -0,0 +1 @@ +{"version":3,"file":"VxgBasicEntityFieldPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicEntityFieldPlugin.ts"],"names":[],"mappings":";;AAoCS,8DAAyB;AApClC,+BAA2B;AAE3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAI,CAAA;AAE5B,MAAM,KAAK,GAAG,IAAA,WAAI,EAChB,IAAI,CAAC;IACH,KAAK,EAAE,EAAE;CACV,CAAC,EACF,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAC7B,CAAA;AAED,SAAS,yBAAyB,CAAa,OAAY;IACzD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEvB,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE,EAAE;SACX;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,CAAC,yBAAyB,EAAE;IACvC,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,cAAc,CAAC,yBAAyB,EAAE,MAAM,EAAE;IACvD,KAAK,EAAE,2BAA2B;CACnC,CAAC,CAAA"} \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicEntityListPlugin.js b/dist-plain/lib/VxgBasicEntityListPlugin.js index 7ab6991..3105507 100644 --- a/dist-plain/lib/VxgBasicEntityListPlugin.js +++ b/dist-plain/lib/VxgBasicEntityListPlugin.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VxgBasicEntityListPlugin = void 0; +exports.VxgBasicEntityListPlugin = VxgBasicEntityListPlugin; const gubu_1 = require("gubu"); const { Open, Child } = gubu_1.Gubu; const Shape = (0, gubu_1.Gubu)(Open({ @@ -9,16 +9,14 @@ const Shape = (0, gubu_1.Gubu)(Open({ ent: String, order: [String], field: Child({}, {}) -}), { prefix: 'BasicEntityList' }); +}), { name: 'BasicEntityList' }); function VxgBasicEntityListPlugin(options) { const seneca = this; const spec = Shape(options.spec); - console.log('BasicEntityList spec', spec); const slot = spec.prefix + spec.name; // TODO: error if field missing const columns = spec.order.reduce((a, fn) => { const field = spec.field[fn]; - // console.log('CF', fn, field) a.push({ accessorKey: fn, header: field.label, @@ -26,7 +24,6 @@ function VxgBasicEntityListPlugin(options) { }); return a; }, []); - // console.log('BasicEntityList columns', columns) options.setPlugin(true); return { exports: { @@ -39,7 +36,6 @@ function VxgBasicEntityListPlugin(options) { } }; } -exports.VxgBasicEntityListPlugin = VxgBasicEntityListPlugin; function buildFilter(query) { const filter = Object.entries(query) .reduce((a, n) => ((n[0].startsWith('f_') ? a[n[0].substring(2)] = n[1] : null), a), {}); diff --git a/dist-plain/lib/VxgBasicEntityListPlugin.js.map b/dist-plain/lib/VxgBasicEntityListPlugin.js.map index b8162e5..9f666a7 100644 --- a/dist-plain/lib/VxgBasicEntityListPlugin.js.map +++ b/dist-plain/lib/VxgBasicEntityListPlugin.js.map @@ -1 +1 @@ -{"version":3,"file":"VxgBasicEntityListPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicEntityListPlugin.ts"],"names":[],"mappings":";;;AAGA,+BAA2B;AAE3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAI,CAAA;AAE5B,MAAM,KAAK,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;CACrB,CAAC,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAGlC,SAAS,wBAAwB,CAAY,OAAY;IACvD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;IAEzC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;IAEpC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAO,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5B,+BAA+B;QAC/B,CAAC,CAAC,IAAI,CAAC;YACL,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;SACvB,CAAC,CAAA;QACF,OAAO,CAAC,CAAA;IACV,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,kDAAkD;IAElD,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEvB,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,WAAW;aACZ;SACF;KACF,CAAA;AACH,CAAC;AA0BC,4DAAwB;AAvB1B,SAAS,WAAW,CAAC,KAAU;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACjC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAE/F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACtC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC;AAGD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE;IACtC,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAA;AAGF,MAAM,CAAC,cAAc,CAAC,wBAAwB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA"} \ No newline at end of file +{"version":3,"file":"VxgBasicEntityListPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicEntityListPlugin.ts"],"names":[],"mappings":";;AAwEE,4DAAwB;AArE1B,+BAA2B;AAE3B,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,WAAI,CAAA;AAE5B,MAAM,KAAK,GAAG,IAAA,WAAI,EAAC,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,CAAC,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC;CACrB,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAA;AAGhC,SAAS,wBAAwB,CAAY,OAAY;IACvD,MAAM,MAAM,GAAG,IAAI,CAAA;IAEnB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAEhC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;IAEpC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAO,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC5B,CAAC,CAAC,IAAI,CAAC;YACL,WAAW,EAAE,EAAE;YACf,MAAM,EAAE,KAAK,CAAC,KAAK;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;SACvB,CAAC,CAAA;QACF,OAAO,CAAC,CAAA;IACV,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAEvB,OAAO;QACL,OAAO,EAAE;YACP,MAAM,EAAE;gBACN,IAAI;gBACJ,IAAI;gBACJ,OAAO;gBACP,WAAW;aACZ;SACF;KACF,CAAA;AACH,CAAC;AAGD,SAAS,WAAW,CAAC,KAAU;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACjC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAE/F,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACtC,MAAM,CAAC,CAAC,CAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAEzD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAA;AAC/B,CAAC;AAGD,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE;IACtC,QAAQ,EAAE;QACR,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,EAAE;QACR,SAAS,EAAE,QAAQ;KACpB;CACF,CAAC,CAAA;AAGF,MAAM,CAAC,cAAc,CAAC,wBAAwB,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,CAAC,CAAA"} \ No newline at end of file diff --git a/dist-plain/lib/VxgBasicLedPlugin.d.ts b/dist-plain/lib/VxgBasicLedPlugin.d.ts index f21d9f1..7268897 100644 --- a/dist-plain/lib/VxgBasicLedPlugin.d.ts +++ b/dist-plain/lib/VxgBasicLedPlugin.d.ts @@ -6,9 +6,6 @@ declare function VxgBasicLedPlugin(this: any, options: any): { head: any; foot: any; }; - util: { - dateTimeFromUTC: (utc: number, tz?: string | undefined) => any; - }; }; }; declare namespace VxgBasicLedPlugin { diff --git a/dist-plain/lib/VxgBasicLedPlugin.js b/dist-plain/lib/VxgBasicLedPlugin.js index f8b6528..ad089bb 100644 --- a/dist-plain/lib/VxgBasicLedPlugin.js +++ b/dist-plain/lib/VxgBasicLedPlugin.js @@ -1,6 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.VxgBasicLedPlugin = void 0; +exports.VxgBasicLedPlugin = VxgBasicLedPlugin; const gubu_1 = require("gubu"); const { Open } = gubu_1.Gubu; const Shape = (0, gubu_1.Gubu)({ @@ -23,7 +23,7 @@ const Shape = (0, gubu_1.Gubu)({ active: false, }), }, -}, { prefix: 'BasicLed' }); +}, { name: 'BasicLed' }); function VxgBasicLedPlugin(options) { const seneca = this; const spec = Shape(options.spec); @@ -31,7 +31,9 @@ function VxgBasicLedPlugin(options) { const name = spec.name; const entCanon = spec.def.ent; const slotName = 'BasicLed_' + name; + // console.log('VxgBasicLedPlugin', 'name', name, 'init') seneca + .add('on:BasicLed') .fix({ view: name }) .add('aim:app,on:view,init:state,redux$:true', function (_msg, reply, meta) { const state = meta.custom.state(); @@ -52,38 +54,26 @@ function VxgBasicLedPlugin(options) { }) .add('aim:app,on:BasicLed,ready:edit,redux$:true', function (msg, reply, meta) { const setReady = msg.setReady; + // Update the view state const view = meta.custom.state().view[name]; view.mode = 'edit'; view.status = 'edit-item'; setReady(true); reply(); }) - .add('aim:app,on:BasicLed,modify:edit', function (msg) { + .add('aim:app,on:BasicLed,modify:edit', function modify_edit(msg) { let item = msg.item; - let fields = msg.fields; + // let fields = msg.fields + if (null == item) + return item; + item = { ...item }; + return item; + }) + .add('aim:app,on:BasicLed,modify:save', function modify_save(msg) { + let item = msg.data; if (null == item) return item; item = { ...item }; - for (const field of fields) { - if ('Date' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]); - item[field.name + '_orig$'] = item[field.name]; - item[field.name + '_udm$'] = dt.udm; - item[field.name] = dt.locald; - } - else if ('Time' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]); - item[field.name + '_orig$'] = item[field.name]; - item[field.name + '_udm$'] = dt.udm; - item[field.name] = dt.localt; - } - else if ('DateTime' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]); - item[field.name + '_orig$'] = item[field.name]; - item[field.name + '_udm$'] = dt.udm; - item[field.name] = dt.locald + 'T' + dt.localt; - } - } return item; }) .message('aim:app,on:BasicLed,edit:item,redux$:true', { item_id: String }, async function (msg, meta) { @@ -91,19 +81,30 @@ function VxgBasicLedPlugin(options) { let view = state.view[name]; const { item_id } = msg; view.mode = 'edit'; + const fields$ = Object.keys(spec.def.edit.field); navigate('/view/' + name + '/edit/' + item_id); const item = await this.entity(entCanon).load$({ id: msg.item_id, slot$: slotName, + fields$, }); return item; }) - .message('aim:app,on:view,add:item', async function (_msg) { + .message('aim:app,on:BasicLed,add:item', async function (_msg) { await seneca.entity(entCanon).save$({ add$: true, slot$: slotName }); navigate('/view/' + name + '/add'); + }) + .message('aim:app,on:BasicLed,save:item', async function (msg, meta) { + const data = Object.entries(spec.def.edit.field) + .filter((n) => false !== n[1].ux.edit) + .reduce((a, n) => ((a[n[0]] = msg.data[n[0]]), a), {}); + // const state = meta.custom.state() + // let view = state.view[name] + // view.alert = { active: true, message: 'Saved', level: 'success' } + const item = await seneca.entity(entCanon).save$(data); + navigate('/view/' + name + '/edit/' + item.id); }); - seneca - .prepare(async function () { + seneca.prepare(async function () { this.act('aim:app,on:view,init:state,direct$:true', { view: name }); }); const sharedSpec = { @@ -135,50 +136,9 @@ function VxgBasicLedPlugin(options) { head: headSpec, foot: footSpec, }, - util, - } + }, }; } -exports.VxgBasicLedPlugin = VxgBasicLedPlugin; -const util = { - dateTimeFromUTC: (utc, tz) => { - const date = new Date(utc); - const iso = date.toISOString(); - const isod = iso.split('T')[0]; - const isot = iso.split('T')[1].split('.')[0]; - // UTC millis into day (since midnight) - const udm = (date.getUTCHours() * 60 * 60 * 1000) + - (date.getUTCMinutes() * 60 * 1000) + - (date.getUTCSeconds() * 1000) + - date.getUTCMilliseconds(); - let out = { - utc, - date, - isod, - isot, - udm, - }; - tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; - const dateFormatter = new Intl.DateTimeFormat('en-GB', { - timeZone: tz, - year: 'numeric', - month: '2-digit', - day: '2-digit' - }); - const timeFormatter = new Intl.DateTimeFormat('en-GB', { - timeZone: tz, - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - hour12: false - }); - const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); - const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); - out.locald = `${year}-${month}-${day}`; - out.localt = `${hour}:${minute}:${second}`; - return out; - }, -}; VxgBasicLedPlugin.defaults = { spec: {}, navigate: Function, diff --git a/dist-plain/lib/VxgBasicLedPlugin.js.map b/dist-plain/lib/VxgBasicLedPlugin.js.map index 5c9b7ac..342b418 100644 --- a/dist-plain/lib/VxgBasicLedPlugin.js.map +++ b/dist-plain/lib/VxgBasicLedPlugin.js.map @@ -1 +1 @@ -{"version":3,"file":"VxgBasicLedPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicLedPlugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"VxgBasicLedPlugin.js","sourceRoot":"","sources":["../../src/lib/VxgBasicLedPlugin.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist-plain/lib/vxg-util.d.ts b/dist-plain/lib/vxg-util.d.ts index 22c3ccc..591a2c5 100644 --- a/dist-plain/lib/vxg-util.d.ts +++ b/dist-plain/lib/vxg-util.d.ts @@ -11,4 +11,22 @@ declare namespace vmap { var KEY: (_: any, p: any) => any; } declare function searchParamsToObject(searchParams: URLSearchParams): any; -export { cmap, vmap, searchParamsToObject, }; +declare function resvalue(value: object | any[] | string, cat: { + multiple: number; + item: Record; +}, mapFn: (val: string, item: { + title: string; +}) => any): any; +declare function resdefault(cat: { + multiple: number; + item: Record; + default: string; +}, mapFn: (val: string, item: { + title: string; +}) => any): any; +declare function useSanitizedId(): string; +export { cmap, vmap, searchParamsToObject, resvalue, resdefault, useSanitizedId, }; diff --git a/dist-plain/lib/vxg-util.js b/dist-plain/lib/vxg-util.js index 44a8cb2..8895132 100644 --- a/dist-plain/lib/vxg-util.js +++ b/dist-plain/lib/vxg-util.js @@ -1,42 +1,64 @@ "use strict"; // TODO: cmap,vmap probably belong in @voxgig/model utils Object.defineProperty(exports, "__esModule", { value: true }); -exports.searchParamsToObject = exports.vmap = exports.cmap = void 0; +exports.cmap = cmap; +exports.vmap = vmap; +exports.searchParamsToObject = searchParamsToObject; +exports.resvalue = resvalue; +exports.resdefault = resdefault; +exports.useSanitizedId = useSanitizedId; +const react_1 = require("react"); // Map child objects to new child objects function cmap(o, p) { - return Object - .entries(o) - .reduce((r, n, _) => (_ = Object - .entries(p) - .reduce((s, m) => (cmap.FILTER === s ? s : (s[m[0]] = ( - // transfom(val,key,current,parentkey,parent) - 'function' === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], self: n[1], key: n[0], parent: o - }) : m[1]), (cmap.FILTER === s[m[0]] ? cmap.FILTER : s))), {}) - , (cmap.FILTER === _ ? 0 : r[n[0]] = _), r), {}); + return Object.entries(o).reduce((r, n, _) => ((_ = Object.entries(p).reduce((s, m) => cmap.FILTER === s + ? s + : ((s[m[0]] = + // transfom(val,key,current,parentkey,parent) + 'function' === typeof m[1] + ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o, + }) + : m[1]), + cmap.FILTER === s[m[0]] ? cmap.FILTER : s), {})), + cmap.FILTER === _ ? 0 : (r[n[0]] = _), + r), {}); } -exports.cmap = cmap; cmap.COPY = (x) => x; // keep self if x is truthy, or function returning truthy-new-value or [truthy,new-value] -cmap.FILTER = (x) => 'function' === typeof x ? ((y, p, _) => (_ = x(y, p), Array.isArray(_) ? !_[0] ? _[1] : cmap.FILTER : _)) : (x ? x : cmap.FILTER); +cmap.FILTER = (x) => 'function' === typeof x + ? (y, p, _) => ((_ = x(y, p)), Array.isArray(_) ? (!_[0] ? _[1] : cmap.FILTER) : _) + : x + ? x + : cmap.FILTER; cmap.KEY = (_, p) => p.key; // Map child objects to a list of child objects function vmap(o, p) { - return Object - .entries(o) - .reduce((r, n, _) => (_ = Object - .entries(p) - .reduce((s, m) => (vmap.FILTER === s ? s : (s[m[0]] = ( - // transfom(val,key,current,parentkey,parent) - // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] - 'function' === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], self: n[1], key: n[0], parent: o - }) : m[1]), (vmap.FILTER === s[m[0]] ? vmap.FILTER : s))), {}) - , (vmap.FILTER === _ ? 0 : r.push(_)), r), []); + return Object.entries(o).reduce((r, n, _) => ((_ = Object.entries(p).reduce((s, m) => vmap.FILTER === s + ? s + : ((s[m[0]] = + // transfom(val,key,current,parentkey,parent) + // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] + 'function' === typeof m[1] + ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o, + }) + : m[1]), + vmap.FILTER === s[m[0]] ? vmap.FILTER : s), {})), + vmap.FILTER === _ ? 0 : r.push(_), + r), []); } -exports.vmap = vmap; vmap.COPY = (x) => x; -vmap.FILTER = (x) => 'function' === typeof x ? ((y, p, _) => (_ = x(y, p), Array.isArray(_) ? !_[0] ? _[1] : vmap.FILTER : _)) : (x ? x : vmap.FILTER); +vmap.FILTER = (x) => 'function' === typeof x + ? (y, p, _) => ((_ = x(y, p)), Array.isArray(_) ? (!_[0] ? _[1] : vmap.FILTER) : _) + : x + ? x + : vmap.FILTER; vmap.KEY = (_, p) => p.key; function searchParamsToObject(searchParams) { let params = Object.create(null); @@ -45,5 +67,57 @@ function searchParamsToObject(searchParams) { } return params; } -exports.searchParamsToObject = searchParamsToObject; +// Map a value (object, array, or string) to a value or array of values using a map function +// TODO: possibly not the best place for this, maybe in a plugin? +function resvalue(value, cat, mapFn) { + const { item: items, multiple } = cat; + if (!value) { + return multiple === 1 ? '' : []; + } + if (Object.keys(items).length === 0) { + return multiple === 1 ? '' : []; + } + if (Array.isArray(value)) { + return multiple === 1 && value[0] ? value[0] : value.slice(0, multiple); + } + if (typeof value === 'object') { + return multiple === 1 ? value : [value]; + } + const splitValue = value.split(','); + const mapValue = (val) => items[val] ? mapFn(val, items[val]) : undefined; + switch (multiple) { + case 1: + return mapValue(splitValue[0]) || ''; + case -1: + return splitValue.map(mapValue).filter(Boolean) || []; + default: + return splitValue.slice(0, multiple).map(mapValue).filter(Boolean); + } +} +// Map a string to a value or array of values using a map function +// TODO: possibly not the best place for this, maybe in a plugin? +function resdefault(cat, mapFn) { + const { multiple, item: items, default: defaultValues } = cat; + if (Object.keys(items).length === 0) { + return multiple === 1 ? '' : []; + } + const defaultItems = defaultValues.split(','); + const mapResolvedDefault = (list) => list.map((val) => (items[val] ? mapFn(val, items[val]) : undefined)); + switch (multiple) { + case 1: + return defaultItems[0] + ? mapFn(defaultItems[0], items[defaultItems[0]]) + : ''; + case -1: + return mapResolvedDefault(defaultItems).filter(Boolean) || []; + default: + return (mapResolvedDefault(defaultItems.slice(0, multiple)).filter(Boolean) || + []); + } +} +function useSanitizedId() { + const id = (0, react_1.useId)(); + const sanitizedId = id.replace(/[^a-zA-Z0-9_]/g, 'x'); + return sanitizedId; +} //# sourceMappingURL=vxg-util.js.map \ No newline at end of file diff --git a/dist-plain/lib/vxg-util.js.map b/dist-plain/lib/vxg-util.js.map index 550d8af..ec621e0 100644 --- a/dist-plain/lib/vxg-util.js.map +++ b/dist-plain/lib/vxg-util.js.map @@ -1 +1 @@ -{"version":3,"file":"vxg-util.js","sourceRoot":"","sources":["../../src/lib/vxg-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"vxg-util.js","sourceRoot":"","sources":["../../src/lib/vxg-util.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/BasicAlert.d.ts b/dist/BasicAlert.d.ts new file mode 100644 index 0000000..171711e --- /dev/null +++ b/dist/BasicAlert.d.ts @@ -0,0 +1,5 @@ +export default function BasicAlert({ children, severity, }: { + children: any; + severity: 'success' | 'error' | 'warning' | 'info'; +}): import("react/jsx-runtime").JSX.Element; +export { BasicAlert }; diff --git a/dist/BasicEntityAutocompleteField.d.ts b/dist/BasicEntityAutocompleteField.d.ts new file mode 100644 index 0000000..cf25015 --- /dev/null +++ b/dist/BasicEntityAutocompleteField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityAutocompleteField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityAutocompleteField }; diff --git a/dist/BasicEntityButtonField.d.ts b/dist/BasicEntityButtonField.d.ts new file mode 100644 index 0000000..21481e6 --- /dev/null +++ b/dist/BasicEntityButtonField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityButtonField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityButtonField }; diff --git a/dist/BasicEntityButtonGroupField.d.ts b/dist/BasicEntityButtonGroupField.d.ts new file mode 100644 index 0000000..5d98cfc --- /dev/null +++ b/dist/BasicEntityButtonGroupField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityButtonGroupField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityButtonGroupField }; diff --git a/dist/BasicEntityCheckboxField.d.ts b/dist/BasicEntityCheckboxField.d.ts new file mode 100644 index 0000000..6013c8a --- /dev/null +++ b/dist/BasicEntityCheckboxField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityCheckboxField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityCheckboxField }; diff --git a/dist/BasicEntityDateField.d.ts b/dist/BasicEntityDateField.d.ts new file mode 100644 index 0000000..4f592f2 --- /dev/null +++ b/dist/BasicEntityDateField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityDateField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityDateField }; diff --git a/dist/BasicEntityDateTimeField.d.ts b/dist/BasicEntityDateTimeField.d.ts new file mode 100644 index 0000000..ad1ae9a --- /dev/null +++ b/dist/BasicEntityDateTimeField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityDateTimeField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityDateTimeField }; diff --git a/dist/BasicEntityFieldError.d.ts b/dist/BasicEntityFieldError.d.ts new file mode 100644 index 0000000..07da7c1 --- /dev/null +++ b/dist/BasicEntityFieldError.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityFieldError(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityFieldError }; diff --git a/dist/BasicEntityRadioGroupField.d.ts b/dist/BasicEntityRadioGroupField.d.ts new file mode 100644 index 0000000..3219868 --- /dev/null +++ b/dist/BasicEntityRadioGroupField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityRadioGroupField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityRadioGroupField }; diff --git a/dist/BasicEntityRatingField.d.ts b/dist/BasicEntityRatingField.d.ts new file mode 100644 index 0000000..1bfd202 --- /dev/null +++ b/dist/BasicEntityRatingField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityRatingField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityRatingField }; diff --git a/dist/BasicEntitySelectField.d.ts b/dist/BasicEntitySelectField.d.ts new file mode 100644 index 0000000..4a87de4 --- /dev/null +++ b/dist/BasicEntitySelectField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntitySelectField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntitySelectField }; diff --git a/dist/BasicEntitySliderField.d.ts b/dist/BasicEntitySliderField.d.ts new file mode 100644 index 0000000..2e8f094 --- /dev/null +++ b/dist/BasicEntitySliderField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntitySliderField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntitySliderField }; diff --git a/dist/BasicEntitySwitchField.d.ts b/dist/BasicEntitySwitchField.d.ts new file mode 100644 index 0000000..e541dfe --- /dev/null +++ b/dist/BasicEntitySwitchField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntitySwitchField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntitySwitchField }; diff --git a/dist/BasicEntityTextBoxField.d.ts b/dist/BasicEntityTextBoxField.d.ts new file mode 100644 index 0000000..42a9682 --- /dev/null +++ b/dist/BasicEntityTextBoxField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityTextBoxField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityTextBoxField }; diff --git a/dist/BasicEntityTextField.d.ts b/dist/BasicEntityTextField.d.ts new file mode 100644 index 0000000..e070d64 --- /dev/null +++ b/dist/BasicEntityTextField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityTextField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityTextField }; diff --git a/dist/BasicEntityTimeField.d.ts b/dist/BasicEntityTimeField.d.ts new file mode 100644 index 0000000..1709418 --- /dev/null +++ b/dist/BasicEntityTimeField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityTimeField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityTimeField }; diff --git a/dist/BasicEntityToggleButtonField.d.ts b/dist/BasicEntityToggleButtonField.d.ts new file mode 100644 index 0000000..fc5051e --- /dev/null +++ b/dist/BasicEntityToggleButtonField.d.ts @@ -0,0 +1,2 @@ +declare function BasicEntityToggleButtonField(props: any): import("react/jsx-runtime").JSX.Element; +export { BasicEntityToggleButtonField }; diff --git a/dist/VxgBasicAdminPlugin.d.ts b/dist/VxgBasicAdminPlugin.d.ts index a8f5b61..c3d7958 100644 --- a/dist/VxgBasicAdminPlugin.d.ts +++ b/dist/VxgBasicAdminPlugin.d.ts @@ -1,2 +1,2 @@ declare function VxgBasicAdminPlugin(this: any): void; -export { VxgBasicAdminPlugin, }; +export { VxgBasicAdminPlugin }; diff --git a/dist/VxgBasicEntityEditPlugin.d.ts b/dist/VxgBasicEntityEditPlugin.d.ts index 3c35bac..7685cf5 100644 --- a/dist/VxgBasicEntityEditPlugin.d.ts +++ b/dist/VxgBasicEntityEditPlugin.d.ts @@ -5,6 +5,12 @@ declare function VxgBasicEntityEditPlugin(this: any, options: any): { slot: any; fields: any; }; + util: { + resolveMarks: (marks: any) => any; + dateTimeFromUTC: (utc: number, tz?: string) => any; + localTimeToUTC: (timeString: string, tz?: string) => number; + localDateTimeToUTC: (dateOrDateTimeString: string, tz?: string) => number; + }; }; }; export { VxgBasicEntityEditPlugin }; diff --git a/dist/VxgBasicEntityFieldPlugin.d.ts b/dist/VxgBasicEntityFieldPlugin.d.ts new file mode 100644 index 0000000..3725ec0 --- /dev/null +++ b/dist/VxgBasicEntityFieldPlugin.d.ts @@ -0,0 +1,6 @@ +declare function VxgBasicEntityFieldPlugin(this: any, options: any): { + exports: { + handle: {}; + }; +}; +export { VxgBasicEntityFieldPlugin }; diff --git a/dist/VxgBasicLedPlugin.d.ts b/dist/VxgBasicLedPlugin.d.ts index 06eb567..7268897 100644 --- a/dist/VxgBasicLedPlugin.d.ts +++ b/dist/VxgBasicLedPlugin.d.ts @@ -6,9 +6,6 @@ declare function VxgBasicLedPlugin(this: any, options: any): { head: any; foot: any; }; - util: { - dateTimeFromUTC: (utc: number, tz?: string) => any; - }; }; }; declare namespace VxgBasicLedPlugin { diff --git a/dist/voxgig-model-react.es.js b/dist/voxgig-model-react.es.js index 2d6c44d..d011753 100644 --- a/dist/voxgig-model-react.es.js +++ b/dist/voxgig-model-react.es.js @@ -53,8 +53,8 @@ var __async = (__this, __arguments, generator) => { }); }; import * as React$1 from "react"; -import React__default, { isValidElement, Children, cloneElement, useMemo, useState, useReducer, useRef, useEffect, useCallback, memo as memo$2, Fragment, useLayoutEffect } from "react"; -import { Button as Button$1, Avatar, Menu as Menu$1, MenuItem as MenuItem$1, IconButton as IconButton$1, useTheme as useTheme$5, Box as Box$2, TextField as TextField$1, Grid as Grid$1, Toolbar as Toolbar$1, Container as Container$2, Drawer as Drawer$1, List as List$1, ListItem as ListItem$1, ListItemButton as ListItemButton$1, ListItemIcon as ListItemIcon$1, ListItemText as ListItemText$1, Divider as Divider$1, Typography as Typography$1 } from "@mui/material"; +import React__default, { useId as useId$1, isValidElement, Children, cloneElement, useMemo, useState, useReducer, useRef, useEffect, useCallback, memo as memo$2, Fragment, useLayoutEffect } from "react"; +import { Button as Button$1, Avatar, Menu as Menu$1, MenuItem as MenuItem$1, IconButton as IconButton$1, useTheme as useTheme$5, Box as Box$2, FormControlLabel as FormControlLabel$1, Checkbox as Checkbox$1, Autocomplete as Autocomplete$1, TextField as TextField$1, FormLabel as FormLabel$1, Slider as Slider$1, RadioGroup, Radio as Radio$1, Rating, ButtonGroup, FormControl as FormControl$1, InputLabel as InputLabel$1, Select as Select$1, Switch as Switch$1, ToggleButtonGroup, ToggleButton, Grid as Grid$1, Toolbar as Toolbar$1, Container as Container$2, Drawer as Drawer$1, List as List$1, ListItem as ListItem$1, ListItemButton as ListItemButton$1, ListItemIcon as ListItemIcon$1, ListItemText as ListItemText$1, Divider as Divider$1, Typography as Typography$1 } from "@mui/material"; import emStyled from "@emotion/styled"; import { CacheProvider, Global, ThemeContext as ThemeContext$1, css, keyframes } from "@emotion/react"; import { useSelector } from "react-redux"; @@ -1030,15 +1030,21 @@ function requireReactJsxRuntime_development() { } return reactJsxRuntime_development; } -var jsxRuntime = jsxRuntime$2.exports; -"use strict"; -if (process.env.NODE_ENV === "production") { - jsxRuntime$2.exports = requireReactJsxRuntime_production_min(); -} else { - jsxRuntime$2.exports = requireReactJsxRuntime_development(); +var jsxRuntime$1 = jsxRuntime$2.exports; +var hasRequiredJsxRuntime; +function requireJsxRuntime() { + if (hasRequiredJsxRuntime) return jsxRuntime$2.exports; + hasRequiredJsxRuntime = 1; + "use strict"; + if (process.env.NODE_ENV === "production") { + jsxRuntime$2.exports = requireReactJsxRuntime_production_min(); + } else { + jsxRuntime$2.exports = requireReactJsxRuntime_development(); + } + return jsxRuntime$2.exports; } -var jsxRuntimeExports = jsxRuntime$2.exports; -const jsxRuntime$1 = /* @__PURE__ */ getDefaultExportFromCjs(jsxRuntimeExports); +var jsxRuntimeExports = requireJsxRuntime(); +const jsxRuntime = /* @__PURE__ */ getDefaultExportFromCjs(jsxRuntimeExports); var gubu_min$2 = { exports: {} }; var gubu_min = gubu_min$2.exports; (function(module, exports) { @@ -1684,26 +1690,38 @@ var gubu_min = gubu_min$2.exports; var gubu_minExports = gubu_min$2.exports; const gubu_min$1 = /* @__PURE__ */ getDefaultExportFromCjs(gubu_minExports); function cmap(o, p) { - return Object.entries(o).reduce((r2, n, _2) => (_2 = Object.entries(p).reduce((s, m) => cmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) - "function" === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], - self: n[1], - key: n[0], - parent: o - }) : m[1], cmap.FILTER === s[m[0]] ? cmap.FILTER : s), {}), cmap.FILTER === _2 ? 0 : r2[n[0]] = _2, r2), {}); + return Object.entries(o).reduce( + (r2, n, _2) => (_2 = Object.entries(p).reduce( + (s, m) => cmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) + "function" === typeof m[1] ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o + }) : m[1], cmap.FILTER === s[m[0]] ? cmap.FILTER : s), + {} + ), cmap.FILTER === _2 ? 0 : r2[n[0]] = _2, r2), + {} + ); } cmap.COPY = (x) => x; cmap.FILTER = (x) => "function" === typeof x ? (y, p, _2) => (_2 = x(y, p), Array.isArray(_2) ? !_2[0] ? _2[1] : cmap.FILTER : _2) : x ? x : cmap.FILTER; cmap.KEY = (_2, p) => p.key; function vmap(o, p) { - return Object.entries(o).reduce((r2, n, _2) => (_2 = Object.entries(p).reduce((s, m) => vmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) - // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] - "function" === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], - self: n[1], - key: n[0], - parent: o - }) : m[1], vmap.FILTER === s[m[0]] ? vmap.FILTER : s), {}), vmap.FILTER === _2 ? 0 : r2.push(_2), r2), []); + return Object.entries(o).reduce( + (r2, n, _2) => (_2 = Object.entries(p).reduce( + (s, m) => vmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) + // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] + "function" === typeof m[1] ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o + }) : m[1], vmap.FILTER === s[m[0]] ? vmap.FILTER : s), + {} + ), vmap.FILTER === _2 ? 0 : r2.push(_2), r2), + [] + ); } vmap.COPY = (x) => x; vmap.FILTER = (x) => "function" === typeof x ? (y, p, _2) => (_2 = x(y, p), Array.isArray(_2) ? !_2[0] ? _2[1] : vmap.FILTER : _2) : x ? x : vmap.FILTER; @@ -1715,6 +1733,52 @@ function searchParamsToObject(searchParams) { } return params; } +function resvalue(value, cat, mapFn) { + const { item: items, multiple } = cat; + if (!value) { + return multiple === 1 ? "" : []; + } + if (Object.keys(items).length === 0) { + return multiple === 1 ? "" : []; + } + if (Array.isArray(value)) { + return multiple === 1 && value[0] ? value[0] : value.slice(0, multiple); + } + if (typeof value === "object") { + return multiple === 1 ? value : [value]; + } + const splitValue = value.split(","); + const mapValue = (val) => items[val] ? mapFn(val, items[val]) : void 0; + switch (multiple) { + case 1: + return mapValue(splitValue[0]) || ""; + case -1: + return splitValue.map(mapValue).filter(Boolean) || []; + default: + return splitValue.slice(0, multiple).map(mapValue).filter(Boolean); + } +} +function resdefault(cat, mapFn) { + const { multiple, item: items, default: defaultValues } = cat; + if (Object.keys(items).length === 0) { + return multiple === 1 ? "" : []; + } + const defaultItems = defaultValues.split(","); + const mapResolvedDefault = (list) => list.map((val) => items[val] ? mapFn(val, items[val]) : void 0); + switch (multiple) { + case 1: + return defaultItems[0] ? mapFn(defaultItems[0], items[defaultItems[0]]) : ""; + case -1: + return mapResolvedDefault(defaultItems).filter(Boolean) || []; + default: + return mapResolvedDefault(defaultItems.slice(0, multiple)).filter(Boolean) || []; + } +} +function useSanitizedId() { + const id = useId$1(); + const sanitizedId = id.replace(/[^a-zA-Z0-9_]/g, "x"); + return sanitizedId; +} function VxgBasicAdminPlugin() { const seneca = this; const { Exact: Exact2, Default } = seneca.valid; @@ -1739,7 +1803,10 @@ function VxgBasicAdminPlugin() { }); function setPath(msg, meta) { return __async(this, null, function* () { - const q = Object.entries(msg.query).reduce((s, n) => s + ("" === s ? "?" : "") + (encodeURIComponent(n[0]) + "=" + encodeURIComponent(n[1])), ""); + const q = Object.entries(msg.query).reduce( + (s, n) => s + ("" === s ? "?" : "") + (encodeURIComponent(n[0]) + "=" + encodeURIComponent(n[1])), + "" + ); const path = "/view/" + msg.view + q; msg.navigate(path); }); @@ -1772,7 +1839,12 @@ function VxgBasicAdminPlugin() { }; const viewState = cmap(viewMap, { name: cmap.COPY, - active: cmap.FILTER + active: cmap.FILTER, + alert: { + active: false, + message: "", + level: "info" + } }); state.view = viewState; state.nav = { @@ -2848,6 +2920,7 @@ function requireObjectWithoutPropertiesLoose() { })(objectWithoutPropertiesLoose$1); return objectWithoutPropertiesLoose$1.exports; } +var isDevelopment = false; function sheetForTag(tag) { if (tag.sheet) { return tag.sheet; @@ -2857,6 +2930,7 @@ function sheetForTag(tag) { return document.styleSheets[i]; } } + return void 0; } function createStyleElement(options) { var tag = document.createElement("style"); @@ -2887,7 +2961,7 @@ var StyleSheet = /* @__PURE__ */ function() { _this.container.insertBefore(tag, before); _this.tags.push(tag); }; - this.isSpeedy = options.speedy === void 0 ? process.env.NODE_ENV === "production" : options.speedy; + this.isSpeedy = options.speedy === void 0 ? !isDevelopment : options.speedy; this.tags = []; this.ctr = 0; this.nonce = options.nonce; @@ -2906,21 +2980,11 @@ var StyleSheet = /* @__PURE__ */ function() { this._insertTag(createStyleElement(this)); } var tag = this.tags[this.tags.length - 1]; - if (process.env.NODE_ENV !== "production") { - var isImportRule3 = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105; - if (isImportRule3 && this._alreadyInsertedOrderInsensitiveRule) { - console.error("You're attempting to insert the following rule:\n" + rule + "\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules."); - } - this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule3; - } if (this.isSpeedy) { var sheet = sheetForTag(tag); try { sheet.insertRule(rule, sheet.cssRules.length); } catch (e) { - if (process.env.NODE_ENV !== "production" && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { - console.error('There was a problem inserting the following rule: "' + rule + '"', e); - } } } else { tag.appendChild(document.createTextNode(rule)); @@ -2929,13 +2993,11 @@ var StyleSheet = /* @__PURE__ */ function() { }; _proto.flush = function flush() { this.tags.forEach(function(tag) { - return tag.parentNode && tag.parentNode.removeChild(tag); + var _tag$parentNode; + return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; - if (process.env.NODE_ENV !== "production") { - this._alreadyInsertedOrderInsensitiveRule = false; - } }; return StyleSheet2; }(); @@ -3620,68 +3682,6 @@ var removeLabel = function removeLabel2(element) { } } }; -var ignoreFlag = "emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason"; -var isIgnoringComment = function isIgnoringComment2(element) { - return element.type === "comm" && element.children.indexOf(ignoreFlag) > -1; -}; -var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm2(cache2) { - return function(element, index2, children2) { - if (element.type !== "rule" || cache2.compat) return; - var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g); - if (unsafePseudoClasses) { - var isNested = !!element.parent; - var commentContainer = isNested ? element.parent.children : ( - // global rule at the root level - children2 - ); - for (var i = commentContainer.length - 1; i >= 0; i--) { - var node2 = commentContainer[i]; - if (node2.line < element.line) { - break; - } - if (node2.column < element.column) { - if (isIgnoringComment(node2)) { - return; - } - break; - } - } - unsafePseudoClasses.forEach(function(unsafePseudoClass) { - console.error('The pseudo class "' + unsafePseudoClass + '" is potentially unsafe when doing server-side rendering. Try changing it to "' + unsafePseudoClass.split("-child")[0] + '-of-type".'); - }); - } - }; -}; -var isImportRule = function isImportRule2(element) { - return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64; -}; -var isPrependedWithRegularRules = function isPrependedWithRegularRules2(index2, children2) { - for (var i = index2 - 1; i >= 0; i--) { - if (!isImportRule(children2[i])) { - return true; - } - } - return false; -}; -var nullifyElement = function nullifyElement2(element) { - element.type = ""; - element.value = ""; - element["return"] = ""; - element.children = ""; - element.props = ""; -}; -var incorrectImportAlarm = function incorrectImportAlarm2(element, index2, children2) { - if (!isImportRule(element)) { - return; - } - if (element.parent) { - console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."); - nullifyElement(element); - } else if (isPrependedWithRegularRules(index2, children2)) { - console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."); - nullifyElement(element); - } -}; function prefix(value, length2) { switch (hash$2(value, length2)) { case 5103: @@ -3828,9 +3828,6 @@ var prefixer = function prefixer2(element, index2, children2, callback) { var defaultStylisPlugins = [prefixer]; var createCache = function createCache2(options) { var key = options.key; - if (process.env.NODE_ENV !== "production" && !key) { - throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\nIf multiple caches share the same key they might \"fight\" for each other's style elements."); - } if (key === "css") { var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); Array.prototype.forEach.call(ssrStyles, function(node2) { @@ -3843,11 +3840,6 @@ var createCache = function createCache2(options) { }); } var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; - if (process.env.NODE_ENV !== "production") { - if (/[^a-z-]/.test(key)) { - throw new Error('Emotion key must only contain lower case alphabetical characters and - but "' + key + '" was passed'); - } - } var inserted = {}; var container; var nodesToHydrate = []; @@ -3868,24 +3860,9 @@ var createCache = function createCache2(options) { } var _insert; var omnipresentPlugins = [compat, removeLabel]; - if (process.env.NODE_ENV !== "production") { - omnipresentPlugins.push(createUnsafeSelectorsAlarm({ - get compat() { - return cache2.compat; - } - }), incorrectImportAlarm); - } { var currentSheet; - var finalizingPlugins = [stringify, process.env.NODE_ENV !== "production" ? function(element) { - if (!element.root) { - if (element["return"]) { - currentSheet.insert(element["return"]); - } else if (element.value && element.type !== COMMENT) { - currentSheet.insert(element.value + "{}"); - } - } - } : rulesheet(function(rule) { + var finalizingPlugins = [stringify, rulesheet(function(rule) { currentSheet.insert(rule); })]; var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); @@ -3894,13 +3871,6 @@ var createCache = function createCache2(options) { }; _insert = function insert2(selector, serialized, sheet, shouldCache) { currentSheet = sheet; - if (process.env.NODE_ENV !== "production" && serialized.map !== void 0) { - currentSheet = { - insert: function insert3(rule) { - sheet.insert(rule + serialized.map); - } - }; - } stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); if (shouldCache) { cache2.inserted[serialized.name] = true; @@ -5592,21 +5562,21 @@ const styleFunctionSx = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def }, Symbol.toStringTag, { value: "Module" })); const require$$8 = /* @__PURE__ */ getAugmentedNamespace(styleFunctionSx); "use strict"; -var _interopRequireDefault$z = interopRequireDefaultExports; +var _interopRequireDefault$A = interopRequireDefaultExports; Object.defineProperty(createStyled$2, "__esModule", { value: true }); -var _default$z = createStyled$2.default = createStyled$1; +var _default$A = createStyled$2.default = createStyled$1; var shouldForwardProp_1 = createStyled$2.shouldForwardProp = shouldForwardProp$1; var systemDefaultTheme_1 = createStyled$2.systemDefaultTheme = void 0; -var _extends2 = _interopRequireDefault$z(require_extends()); -var _objectWithoutPropertiesLoose2 = _interopRequireDefault$z(requireObjectWithoutPropertiesLoose()); +var _extends2 = _interopRequireDefault$A(require_extends()); +var _objectWithoutPropertiesLoose2 = _interopRequireDefault$A(requireObjectWithoutPropertiesLoose()); var _styledEngine$1 = _interopRequireWildcard$1(require$$1$1); var _deepmerge = require$$4; -var _capitalize = _interopRequireDefault$z(require$$5); -var _getDisplayName = _interopRequireDefault$z(require$$6); -var _createTheme = _interopRequireDefault$z(require$$7); -var _styleFunctionSx = _interopRequireDefault$z(require$$8); +var _capitalize = _interopRequireDefault$A(require$$5); +var _getDisplayName = _interopRequireDefault$A(require$$6); +var _createTheme = _interopRequireDefault$A(require$$7); +var _styleFunctionSx = _interopRequireDefault$A(require$$8); const _excluded$2i = ["ownerState"], _excluded2$i = ["variants"], _excluded3$7 = ["name", "slot", "skipVariantsResolver", "skipSx", "overridesResolver"]; function _getRequireWildcardCache$1(e) { if ("function" != typeof WeakMap) return null; @@ -5896,7 +5866,7 @@ const clamp = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.definePropert }, Symbol.toStringTag, { value: "Module" })); const require$$2 = /* @__PURE__ */ getAugmentedNamespace(clamp); "use strict"; -var _interopRequireDefault$y = interopRequireDefaultExports; +var _interopRequireDefault$z = interopRequireDefaultExports; Object.defineProperty(colorManipulator, "__esModule", { value: true }); @@ -5918,8 +5888,8 @@ var private_safeEmphasize_1 = colorManipulator.private_safeEmphasize = private_s var private_safeLighten_1 = colorManipulator.private_safeLighten = private_safeLighten$1; var recomposeColor_1 = colorManipulator.recomposeColor = recomposeColor$1; var rgbToHex_1 = colorManipulator.rgbToHex = rgbToHex$1; -var _formatMuiErrorMessage2 = _interopRequireDefault$y(require$$1); -var _clamp = _interopRequireDefault$y(require$$2); +var _formatMuiErrorMessage2 = _interopRequireDefault$z(require$$1); +var _clamp = _interopRequireDefault$z(require$$2); function clampWrapper$1(value, min2 = 0, max2 = 1) { if (process.env.NODE_ENV !== "production") { if (value < min2 || value > max2) { @@ -6810,7 +6780,7 @@ function slotShouldForwardProp(prop) { } const rootShouldForwardProp = (prop) => slotShouldForwardProp(prop) && prop !== "classes"; "use client"; -const styled$1 = _default$z({ +const styled$1 = _default$A({ themeId: THEME_ID, defaultTheme: defaultTheme$5, rootShouldForwardProp @@ -10684,8 +10654,8 @@ process.env.NODE_ENV !== "production" ? Toolbar.propTypes = { */ variant: PropTypes.oneOfType([PropTypes.oneOf(["dense", "regular"]), PropTypes.string]) } : void 0; -const CMPNAME$c = "BasicAccountTool"; -console.log(CMPNAME$c, "1"); +const CMPNAME$r = "BasicAccountTool"; +console.log(CMPNAME$r, "1"); const { Exact: Exact$2 } = gubu_minExports.Gubu; const BasicAccountToolSpecShape = gubu_minExports.Gubu({ name: String, @@ -10695,7 +10665,7 @@ const BasicAccountToolSpecShape = gubu_minExports.Gubu({ attr: {}, sx: {}, style: {} -}, { name: CMPNAME$c }); +}, { name: CMPNAME$r }); function BasicAccountTool(props) { var _a; const { ctx, spec } = props; @@ -10769,8 +10739,8 @@ function stringAvatar(s) { children: `${parts.join("")}` }; } -const CMPNAME$b = "BasicHeadTool"; -console.log(CMPNAME$b, "1"); +const CMPNAME$q = "BasicHeadTool"; +console.log(CMPNAME$q, "1"); const { Exact: Exact$1 } = gubu_minExports.Gubu; const BasicHeadToolSpecShape = gubu_minExports.Gubu({ name: String, @@ -10780,7 +10750,7 @@ const BasicHeadToolSpecShape = gubu_minExports.Gubu({ attr: {}, sx: {}, style: {} -}, { name: CMPNAME$b }); +}, { name: CMPNAME$q }); function BasicHeadTool(props) { const { ctx, spec } = props; const { seneca } = ctx(); @@ -10789,7 +10759,7 @@ function BasicHeadTool(props) { const { name, kind, attr, sx, style: style2 } = basicHeadToolSpec; let tool = /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}); if ("" === kind) { - console.warn(CMPNAME$b, "empty-tool-kind", basicHeadToolSpec); + console.warn(CMPNAME$q, "empty-tool-kind", basicHeadToolSpec); } else if ("logo" === kind) { tool = /* @__PURE__ */ jsxRuntimeExports.jsxs( "div", @@ -10806,7 +10776,7 @@ function BasicHeadTool(props) { { href: "/", style: style2, - className: `vxg-${CMPNAME$b}-logo`, + className: `vxg-${CMPNAME$q}-logo`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: attr.img }) } ), @@ -10838,27 +10808,34 @@ function BasicHeadTool(props) { } else if ("account" === kind) { tool = /* @__PURE__ */ jsxRuntimeExports.jsx(BasicAccountTool, { ctx, spec }); } else { - console.warn(CMPNAME$b, "unknown-tool-kind", kind, basicHeadToolSpec); + console.warn(CMPNAME$q, "unknown-tool-kind", kind, basicHeadToolSpec); } return tool; } -const CMPNAME$a = "BasicHead"; -const { Child: Child$5, Exact, Open: Open$8, Required: Required$1 } = gubu_minExports.Gubu; -const BasicHeadSpecShape = gubu_minExports.Gubu({ - head: { - name: String, - active: Boolean, - tool: Child$5(Open$8({ - align: Exact("left", "right") - })) +const CMPNAME$p = "BasicHead"; +const { Child: Child$6, Exact, Open: Open$o, Required: Required$1 } = gubu_minExports.Gubu; +const BasicHeadSpecShape = gubu_minExports.Gubu( + { + head: { + name: String, + active: Boolean, + tool: Child$6( + Open$o({ + align: Exact("left", "right") + }) + ) + }, + tool: Required$1({}), + // Set MUI component props directly + ux: { + props: { + AppBar: {}, + ToolBar: {} + } + } }, - tool: Required$1({}), - // Set MUI component props directly - mui: { - AppBar: {}, - ToolBar: {} - } -}, { name: CMPNAME$a }); + { name: CMPNAME$p } +); function BasicHead(props) { const { ctx, spec } = props; const { seneca } = ctx(); @@ -10869,36 +10846,26 @@ function BasicHead(props) { active: vmap2.FILTER, name: vmap2.FILTER((_2, p) => { var _a; - return [(_a = basicHeadSpec.tool[p.key]) == null ? void 0 : _a.active, p.key]; + return [ + (_a = basicHeadSpec.tool[p.key]) == null ? void 0 : _a.active, + p.key + ]; }), align: vmap2.COPY }).map((t) => __spreadValues(__spreadValues({}, basicHeadSpec.tool[t.name]), t)); const leftTools = tools.filter((t) => "left" === t.align); const rightTools = tools.filter((t) => "right" === t.align); - return /* @__PURE__ */ jsxRuntimeExports.jsx( - AppBar, - __spreadProps(__spreadValues({ - className: "vxg-BasicHead" - }, spec.mui.AppBar), { - children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Toolbar, __spreadProps(__spreadValues({ className: "vxg-BasicHead-toolbar" }, spec.mui.ToolBar), { children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - "div", - { - className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-left", - children: leftTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx( - "div", - { - className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-right", - style: { marginLeft: "auto" }, - children: rightTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) - } - ) - ] })) - }) - ); + return /* @__PURE__ */ jsxRuntimeExports.jsx(AppBar, __spreadProps(__spreadValues({ className: "vxg-BasicHead" }, spec.ux.props.AppBar), { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Toolbar, __spreadProps(__spreadValues({ className: "vxg-BasicHead-toolbar" }, spec.ux.props.ToolBar), { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-left", children: leftTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + "div", + { + className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-right", + style: { marginLeft: "auto" }, + children: rightTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) + } + ) + ] })) })); } /** * table-core @@ -17649,7 +17616,7 @@ var useThemeWithoutDefault = {}; Object.defineProperty(useThemeWithoutDefault, "__esModule", { value: true }); -var default_1$y = useThemeWithoutDefault.default = void 0; +var default_1$z = useThemeWithoutDefault.default = void 0; var React = _interopRequireWildcard(React__default); var _styledEngine = require$$1$1; function _getRequireWildcardCache(e) { @@ -17678,7 +17645,7 @@ function useTheme(defaultTheme2 = null) { const contextTheme = React.useContext(_styledEngine.ThemeContext); return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme2 : contextTheme; } -var _default$y = default_1$y = useThemeWithoutDefault.default = useTheme; +var _default$z = default_1$z = useThemeWithoutDefault.default = useTheme; var top = "top"; var bottom = "bottom"; var right = "right"; @@ -19460,7 +19427,7 @@ const PopperRoot = styled$1(Popper$1, { })({}); const Popper2 = /* @__PURE__ */ React$1.forwardRef(function Popper3(inProps, ref) { var _slots$root; - const theme = default_1$y(); + const theme = default_1$z(); const props = useDefaultProps({ props: inProps, name: "MuiPopper" @@ -25401,450 +25368,450 @@ function requireCreateSvgIcon() { } "use strict"; "use client"; -var _interopRequireDefault$x = interopRequireDefaultExports; +var _interopRequireDefault$y = interopRequireDefaultExports; Object.defineProperty(ArrowDownward, "__esModule", { value: true }); -var default_1$x = ArrowDownward.default = void 0; -var _createSvgIcon$x = _interopRequireDefault$x(requireCreateSvgIcon()); -var _jsxRuntime$x = jsxRuntimeExports; -var _default$x = default_1$x = ArrowDownward.default = (0, _createSvgIcon$x.default)(/* @__PURE__ */ (0, _jsxRuntime$x.jsx)("path", { +var default_1$y = ArrowDownward.default = void 0; +var _createSvgIcon$y = _interopRequireDefault$y(requireCreateSvgIcon()); +var _jsxRuntime$y = requireJsxRuntime(); +var _default$y = default_1$y = ArrowDownward.default = (0, _createSvgIcon$y.default)(/* @__PURE__ */ (0, _jsxRuntime$y.jsx)("path", { d: "m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z" }), "ArrowDownward"); var ArrowRight = {}; "use strict"; "use client"; -var _interopRequireDefault$w = interopRequireDefaultExports; +var _interopRequireDefault$x = interopRequireDefaultExports; Object.defineProperty(ArrowRight, "__esModule", { value: true }); -var default_1$w = ArrowRight.default = void 0; -var _createSvgIcon$w = _interopRequireDefault$w(requireCreateSvgIcon()); -var _jsxRuntime$w = jsxRuntimeExports; -var _default$w = default_1$w = ArrowRight.default = (0, _createSvgIcon$w.default)(/* @__PURE__ */ (0, _jsxRuntime$w.jsx)("path", { +var default_1$x = ArrowRight.default = void 0; +var _createSvgIcon$x = _interopRequireDefault$x(requireCreateSvgIcon()); +var _jsxRuntime$x = requireJsxRuntime(); +var _default$x = default_1$x = ArrowRight.default = (0, _createSvgIcon$x.default)(/* @__PURE__ */ (0, _jsxRuntime$x.jsx)("path", { d: "m10 17 5-5-5-5z" }), "ArrowRight"); var Cancel = {}; "use strict"; "use client"; -var _interopRequireDefault$v = interopRequireDefaultExports; +var _interopRequireDefault$w = interopRequireDefaultExports; Object.defineProperty(Cancel, "__esModule", { value: true }); -var default_1$v = Cancel.default = void 0; -var _createSvgIcon$v = _interopRequireDefault$v(requireCreateSvgIcon()); -var _jsxRuntime$v = jsxRuntimeExports; -var _default$v = default_1$v = Cancel.default = (0, _createSvgIcon$v.default)(/* @__PURE__ */ (0, _jsxRuntime$v.jsx)("path", { +var default_1$w = Cancel.default = void 0; +var _createSvgIcon$w = _interopRequireDefault$w(requireCreateSvgIcon()); +var _jsxRuntime$w = requireJsxRuntime(); +var _default$w = default_1$w = Cancel.default = (0, _createSvgIcon$w.default)(/* @__PURE__ */ (0, _jsxRuntime$w.jsx)("path", { d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z" }), "Cancel"); var ChevronLeft = {}; "use strict"; "use client"; -var _interopRequireDefault$u = interopRequireDefaultExports; +var _interopRequireDefault$v = interopRequireDefaultExports; Object.defineProperty(ChevronLeft, "__esModule", { value: true }); -var default_1$u = ChevronLeft.default = void 0; -var _createSvgIcon$u = _interopRequireDefault$u(requireCreateSvgIcon()); -var _jsxRuntime$u = jsxRuntimeExports; -var _default$u = default_1$u = ChevronLeft.default = (0, _createSvgIcon$u.default)(/* @__PURE__ */ (0, _jsxRuntime$u.jsx)("path", { +var default_1$v = ChevronLeft.default = void 0; +var _createSvgIcon$v = _interopRequireDefault$v(requireCreateSvgIcon()); +var _jsxRuntime$v = requireJsxRuntime(); +var _default$v = default_1$v = ChevronLeft.default = (0, _createSvgIcon$v.default)(/* @__PURE__ */ (0, _jsxRuntime$v.jsx)("path", { d: "M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z" }), "ChevronLeft"); var ChevronRight = {}; "use strict"; "use client"; -var _interopRequireDefault$t = interopRequireDefaultExports; +var _interopRequireDefault$u = interopRequireDefaultExports; Object.defineProperty(ChevronRight, "__esModule", { value: true }); -var default_1$t = ChevronRight.default = void 0; -var _createSvgIcon$t = _interopRequireDefault$t(requireCreateSvgIcon()); -var _jsxRuntime$t = jsxRuntimeExports; -var _default$t = default_1$t = ChevronRight.default = (0, _createSvgIcon$t.default)(/* @__PURE__ */ (0, _jsxRuntime$t.jsx)("path", { +var default_1$u = ChevronRight.default = void 0; +var _createSvgIcon$u = _interopRequireDefault$u(requireCreateSvgIcon()); +var _jsxRuntime$u = requireJsxRuntime(); +var _default$u = default_1$u = ChevronRight.default = (0, _createSvgIcon$u.default)(/* @__PURE__ */ (0, _jsxRuntime$u.jsx)("path", { d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }), "ChevronRight"); var ClearAll = {}; "use strict"; "use client"; -var _interopRequireDefault$s = interopRequireDefaultExports; +var _interopRequireDefault$t = interopRequireDefaultExports; Object.defineProperty(ClearAll, "__esModule", { value: true }); -var default_1$s = ClearAll.default = void 0; -var _createSvgIcon$s = _interopRequireDefault$s(requireCreateSvgIcon()); -var _jsxRuntime$s = jsxRuntimeExports; -var _default$s = default_1$s = ClearAll.default = (0, _createSvgIcon$s.default)(/* @__PURE__ */ (0, _jsxRuntime$s.jsx)("path", { +var default_1$t = ClearAll.default = void 0; +var _createSvgIcon$t = _interopRequireDefault$t(requireCreateSvgIcon()); +var _jsxRuntime$t = requireJsxRuntime(); +var _default$t = default_1$t = ClearAll.default = (0, _createSvgIcon$t.default)(/* @__PURE__ */ (0, _jsxRuntime$t.jsx)("path", { d: "M5 13h14v-2H5zm-2 4h14v-2H3zM7 7v2h14V7z" }), "ClearAll"); var Close = {}; "use strict"; "use client"; -var _interopRequireDefault$r = interopRequireDefaultExports; +var _interopRequireDefault$s = interopRequireDefaultExports; Object.defineProperty(Close, "__esModule", { value: true }); -var default_1$r = Close.default = void 0; -var _createSvgIcon$r = _interopRequireDefault$r(requireCreateSvgIcon()); -var _jsxRuntime$r = jsxRuntimeExports; -var _default$r = default_1$r = Close.default = (0, _createSvgIcon$r.default)(/* @__PURE__ */ (0, _jsxRuntime$r.jsx)("path", { +var default_1$s = Close.default = void 0; +var _createSvgIcon$s = _interopRequireDefault$s(requireCreateSvgIcon()); +var _jsxRuntime$s = requireJsxRuntime(); +var _default$s = default_1$s = Close.default = (0, _createSvgIcon$s.default)(/* @__PURE__ */ (0, _jsxRuntime$s.jsx)("path", { d: "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }), "Close"); var ContentCopy = {}; "use strict"; "use client"; -var _interopRequireDefault$q = interopRequireDefaultExports; +var _interopRequireDefault$r = interopRequireDefaultExports; Object.defineProperty(ContentCopy, "__esModule", { value: true }); -var default_1$q = ContentCopy.default = void 0; -var _createSvgIcon$q = _interopRequireDefault$q(requireCreateSvgIcon()); -var _jsxRuntime$q = jsxRuntimeExports; -var _default$q = default_1$q = ContentCopy.default = (0, _createSvgIcon$q.default)(/* @__PURE__ */ (0, _jsxRuntime$q.jsx)("path", { +var default_1$r = ContentCopy.default = void 0; +var _createSvgIcon$r = _interopRequireDefault$r(requireCreateSvgIcon()); +var _jsxRuntime$r = requireJsxRuntime(); +var _default$r = default_1$r = ContentCopy.default = (0, _createSvgIcon$r.default)(/* @__PURE__ */ (0, _jsxRuntime$r.jsx)("path", { d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z" }), "ContentCopy"); var DensityLarge = {}; "use strict"; "use client"; -var _interopRequireDefault$p = interopRequireDefaultExports; +var _interopRequireDefault$q = interopRequireDefaultExports; Object.defineProperty(DensityLarge, "__esModule", { value: true }); -var default_1$p = DensityLarge.default = void 0; -var _createSvgIcon$p = _interopRequireDefault$p(requireCreateSvgIcon()); -var _jsxRuntime$p = jsxRuntimeExports; -var _default$p = default_1$p = DensityLarge.default = (0, _createSvgIcon$p.default)(/* @__PURE__ */ (0, _jsxRuntime$p.jsx)("path", { +var default_1$q = DensityLarge.default = void 0; +var _createSvgIcon$q = _interopRequireDefault$q(requireCreateSvgIcon()); +var _jsxRuntime$q = requireJsxRuntime(); +var _default$q = default_1$q = DensityLarge.default = (0, _createSvgIcon$q.default)(/* @__PURE__ */ (0, _jsxRuntime$q.jsx)("path", { d: "M3 3h18v2H3zm0 16h18v2H3z" }), "DensityLarge"); var DensityMedium = {}; "use strict"; "use client"; -var _interopRequireDefault$o = interopRequireDefaultExports; +var _interopRequireDefault$p = interopRequireDefaultExports; Object.defineProperty(DensityMedium, "__esModule", { value: true }); -var default_1$o = DensityMedium.default = void 0; -var _createSvgIcon$o = _interopRequireDefault$o(requireCreateSvgIcon()); -var _jsxRuntime$o = jsxRuntimeExports; -var _default$o = default_1$o = DensityMedium.default = (0, _createSvgIcon$o.default)(/* @__PURE__ */ (0, _jsxRuntime$o.jsx)("path", { +var default_1$p = DensityMedium.default = void 0; +var _createSvgIcon$p = _interopRequireDefault$p(requireCreateSvgIcon()); +var _jsxRuntime$p = requireJsxRuntime(); +var _default$p = default_1$p = DensityMedium.default = (0, _createSvgIcon$p.default)(/* @__PURE__ */ (0, _jsxRuntime$p.jsx)("path", { d: "M3 3h18v2H3zm0 16h18v2H3zm0-8h18v2H3z" }), "DensityMedium"); var DensitySmall = {}; "use strict"; "use client"; -var _interopRequireDefault$n = interopRequireDefaultExports; +var _interopRequireDefault$o = interopRequireDefaultExports; Object.defineProperty(DensitySmall, "__esModule", { value: true }); -var default_1$n = DensitySmall.default = void 0; -var _createSvgIcon$n = _interopRequireDefault$n(requireCreateSvgIcon()); -var _jsxRuntime$n = jsxRuntimeExports; -var _default$n = default_1$n = DensitySmall.default = (0, _createSvgIcon$n.default)(/* @__PURE__ */ (0, _jsxRuntime$n.jsx)("path", { +var default_1$o = DensitySmall.default = void 0; +var _createSvgIcon$o = _interopRequireDefault$o(requireCreateSvgIcon()); +var _jsxRuntime$o = requireJsxRuntime(); +var _default$o = default_1$o = DensitySmall.default = (0, _createSvgIcon$o.default)(/* @__PURE__ */ (0, _jsxRuntime$o.jsx)("path", { d: "M3 2h18v2H3zm0 18h18v2H3zm0-6h18v2H3zm0-6h18v2H3z" }), "DensitySmall"); var DragHandle = {}; "use strict"; "use client"; -var _interopRequireDefault$m = interopRequireDefaultExports; +var _interopRequireDefault$n = interopRequireDefaultExports; Object.defineProperty(DragHandle, "__esModule", { value: true }); -var default_1$m = DragHandle.default = void 0; -var _createSvgIcon$m = _interopRequireDefault$m(requireCreateSvgIcon()); -var _jsxRuntime$m = jsxRuntimeExports; -var _default$m = default_1$m = DragHandle.default = (0, _createSvgIcon$m.default)(/* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { +var default_1$n = DragHandle.default = void 0; +var _createSvgIcon$n = _interopRequireDefault$n(requireCreateSvgIcon()); +var _jsxRuntime$n = requireJsxRuntime(); +var _default$n = default_1$n = DragHandle.default = (0, _createSvgIcon$n.default)(/* @__PURE__ */ (0, _jsxRuntime$n.jsx)("path", { d: "M20 9H4v2h16zM4 15h16v-2H4z" }), "DragHandle"); var DynamicFeed = {}; "use strict"; "use client"; -var _interopRequireDefault$l = interopRequireDefaultExports; +var _interopRequireDefault$m = interopRequireDefaultExports; Object.defineProperty(DynamicFeed, "__esModule", { value: true }); -var default_1$l = DynamicFeed.default = void 0; -var _createSvgIcon$l = _interopRequireDefault$l(requireCreateSvgIcon()); -var _jsxRuntime$l = jsxRuntimeExports; -var _default$l = default_1$l = DynamicFeed.default = (0, _createSvgIcon$l.default)([/* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { +var default_1$m = DynamicFeed.default = void 0; +var _createSvgIcon$m = _interopRequireDefault$m(requireCreateSvgIcon()); +var _jsxRuntime$m = requireJsxRuntime(); +var _default$m = default_1$m = DynamicFeed.default = (0, _createSvgIcon$m.default)([/* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { d: "M8 8H6v7c0 1.1.9 2 2 2h9v-2H8z" -}, "0"), /* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { +}, "0"), /* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { d: "M20 3h-8c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 8h-8V7h8zM4 12H2v7c0 1.1.9 2 2 2h9v-2H4z" }, "1")], "DynamicFeed"); var Edit = {}; "use strict"; "use client"; -var _interopRequireDefault$k = interopRequireDefaultExports; +var _interopRequireDefault$l = interopRequireDefaultExports; Object.defineProperty(Edit, "__esModule", { value: true }); -var default_1$k = Edit.default = void 0; -var _createSvgIcon$k = _interopRequireDefault$k(requireCreateSvgIcon()); -var _jsxRuntime$k = jsxRuntimeExports; -var _default$k = default_1$k = Edit.default = (0, _createSvgIcon$k.default)(/* @__PURE__ */ (0, _jsxRuntime$k.jsx)("path", { +var default_1$l = Edit.default = void 0; +var _createSvgIcon$l = _interopRequireDefault$l(requireCreateSvgIcon()); +var _jsxRuntime$l = requireJsxRuntime(); +var _default$l = default_1$l = Edit.default = (0, _createSvgIcon$l.default)(/* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { d: "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z" }), "Edit"); var ExpandMore = {}; "use strict"; "use client"; -var _interopRequireDefault$j = interopRequireDefaultExports; +var _interopRequireDefault$k = interopRequireDefaultExports; Object.defineProperty(ExpandMore, "__esModule", { value: true }); -var default_1$j = ExpandMore.default = void 0; -var _createSvgIcon$j = _interopRequireDefault$j(requireCreateSvgIcon()); -var _jsxRuntime$j = jsxRuntimeExports; -var _default$j = default_1$j = ExpandMore.default = (0, _createSvgIcon$j.default)(/* @__PURE__ */ (0, _jsxRuntime$j.jsx)("path", { +var default_1$k = ExpandMore.default = void 0; +var _createSvgIcon$k = _interopRequireDefault$k(requireCreateSvgIcon()); +var _jsxRuntime$k = requireJsxRuntime(); +var _default$k = default_1$k = ExpandMore.default = (0, _createSvgIcon$k.default)(/* @__PURE__ */ (0, _jsxRuntime$k.jsx)("path", { d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z" }), "ExpandMore"); var FilterAlt = {}; "use strict"; "use client"; -var _interopRequireDefault$i = interopRequireDefaultExports; +var _interopRequireDefault$j = interopRequireDefaultExports; Object.defineProperty(FilterAlt, "__esModule", { value: true }); -var default_1$i = FilterAlt.default = void 0; -var _createSvgIcon$i = _interopRequireDefault$i(requireCreateSvgIcon()); -var _jsxRuntime$i = jsxRuntimeExports; -var _default$i = default_1$i = FilterAlt.default = (0, _createSvgIcon$i.default)(/* @__PURE__ */ (0, _jsxRuntime$i.jsx)("path", { +var default_1$j = FilterAlt.default = void 0; +var _createSvgIcon$j = _interopRequireDefault$j(requireCreateSvgIcon()); +var _jsxRuntime$j = requireJsxRuntime(); +var _default$j = default_1$j = FilterAlt.default = (0, _createSvgIcon$j.default)(/* @__PURE__ */ (0, _jsxRuntime$j.jsx)("path", { d: "M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39c.51-.66.04-1.61-.79-1.61H5.04c-.83 0-1.3.95-.79 1.61" }), "FilterAlt"); var FilterList = {}; "use strict"; "use client"; -var _interopRequireDefault$h = interopRequireDefaultExports; +var _interopRequireDefault$i = interopRequireDefaultExports; Object.defineProperty(FilterList, "__esModule", { value: true }); -var default_1$h = FilterList.default = void 0; -var _createSvgIcon$h = _interopRequireDefault$h(requireCreateSvgIcon()); -var _jsxRuntime$h = jsxRuntimeExports; -var _default$h = default_1$h = FilterList.default = (0, _createSvgIcon$h.default)(/* @__PURE__ */ (0, _jsxRuntime$h.jsx)("path", { +var default_1$i = FilterList.default = void 0; +var _createSvgIcon$i = _interopRequireDefault$i(requireCreateSvgIcon()); +var _jsxRuntime$i = requireJsxRuntime(); +var _default$i = default_1$i = FilterList.default = (0, _createSvgIcon$i.default)(/* @__PURE__ */ (0, _jsxRuntime$i.jsx)("path", { d: "M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z" }), "FilterList"); var FilterListOff = {}; "use strict"; "use client"; -var _interopRequireDefault$g = interopRequireDefaultExports; +var _interopRequireDefault$h = interopRequireDefaultExports; Object.defineProperty(FilterListOff, "__esModule", { value: true }); -var default_1$g = FilterListOff.default = void 0; -var _createSvgIcon$g = _interopRequireDefault$g(requireCreateSvgIcon()); -var _jsxRuntime$g = jsxRuntimeExports; -var _default$g = default_1$g = FilterListOff.default = (0, _createSvgIcon$g.default)(/* @__PURE__ */ (0, _jsxRuntime$g.jsx)("path", { +var default_1$h = FilterListOff.default = void 0; +var _createSvgIcon$h = _interopRequireDefault$h(requireCreateSvgIcon()); +var _jsxRuntime$h = requireJsxRuntime(); +var _default$h = default_1$h = FilterListOff.default = (0, _createSvgIcon$h.default)(/* @__PURE__ */ (0, _jsxRuntime$h.jsx)("path", { d: "M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z" }), "FilterListOff"); var FirstPage = {}; "use strict"; "use client"; -var _interopRequireDefault$f = interopRequireDefaultExports; +var _interopRequireDefault$g = interopRequireDefaultExports; Object.defineProperty(FirstPage, "__esModule", { value: true }); -var default_1$f = FirstPage.default = void 0; -var _createSvgIcon$f = _interopRequireDefault$f(requireCreateSvgIcon()); -var _jsxRuntime$f = jsxRuntimeExports; -var _default$f = default_1$f = FirstPage.default = (0, _createSvgIcon$f.default)(/* @__PURE__ */ (0, _jsxRuntime$f.jsx)("path", { +var default_1$g = FirstPage.default = void 0; +var _createSvgIcon$g = _interopRequireDefault$g(requireCreateSvgIcon()); +var _jsxRuntime$g = requireJsxRuntime(); +var _default$g = default_1$g = FirstPage.default = (0, _createSvgIcon$g.default)(/* @__PURE__ */ (0, _jsxRuntime$g.jsx)("path", { d: "M18.41 16.59 13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z" }), "FirstPage"); var Fullscreen = {}; "use strict"; "use client"; -var _interopRequireDefault$e = interopRequireDefaultExports; +var _interopRequireDefault$f = interopRequireDefaultExports; Object.defineProperty(Fullscreen, "__esModule", { value: true }); -var default_1$e = Fullscreen.default = void 0; -var _createSvgIcon$e = _interopRequireDefault$e(requireCreateSvgIcon()); -var _jsxRuntime$e = jsxRuntimeExports; -var _default$e = default_1$e = Fullscreen.default = (0, _createSvgIcon$e.default)(/* @__PURE__ */ (0, _jsxRuntime$e.jsx)("path", { +var default_1$f = Fullscreen.default = void 0; +var _createSvgIcon$f = _interopRequireDefault$f(requireCreateSvgIcon()); +var _jsxRuntime$f = requireJsxRuntime(); +var _default$f = default_1$f = Fullscreen.default = (0, _createSvgIcon$f.default)(/* @__PURE__ */ (0, _jsxRuntime$f.jsx)("path", { d: "M7 14H5v5h5v-2H7zm-2-4h2V7h3V5H5zm12 7h-3v2h5v-5h-2zM14 5v2h3v3h2V5z" }), "Fullscreen"); var FullscreenExit = {}; "use strict"; "use client"; -var _interopRequireDefault$d = interopRequireDefaultExports; +var _interopRequireDefault$e = interopRequireDefaultExports; Object.defineProperty(FullscreenExit, "__esModule", { value: true }); -var default_1$d = FullscreenExit.default = void 0; -var _createSvgIcon$d = _interopRequireDefault$d(requireCreateSvgIcon()); -var _jsxRuntime$d = jsxRuntimeExports; -var _default$d = default_1$d = FullscreenExit.default = (0, _createSvgIcon$d.default)(/* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { +var default_1$e = FullscreenExit.default = void 0; +var _createSvgIcon$e = _interopRequireDefault$e(requireCreateSvgIcon()); +var _jsxRuntime$e = requireJsxRuntime(); +var _default$e = default_1$e = FullscreenExit.default = (0, _createSvgIcon$e.default)(/* @__PURE__ */ (0, _jsxRuntime$e.jsx)("path", { d: "M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z" }), "FullscreenExit"); var KeyboardDoubleArrowDown = {}; "use strict"; "use client"; -var _interopRequireDefault$c = interopRequireDefaultExports; +var _interopRequireDefault$d = interopRequireDefaultExports; Object.defineProperty(KeyboardDoubleArrowDown, "__esModule", { value: true }); -var default_1$c = KeyboardDoubleArrowDown.default = void 0; -var _createSvgIcon$c = _interopRequireDefault$c(requireCreateSvgIcon()); -var _jsxRuntime$c = jsxRuntimeExports; -var _default$c = default_1$c = KeyboardDoubleArrowDown.default = (0, _createSvgIcon$c.default)([/* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { +var default_1$d = KeyboardDoubleArrowDown.default = void 0; +var _createSvgIcon$d = _interopRequireDefault$d(requireCreateSvgIcon()); +var _jsxRuntime$d = requireJsxRuntime(); +var _default$d = default_1$d = KeyboardDoubleArrowDown.default = (0, _createSvgIcon$d.default)([/* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { d: "M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z" -}, "0"), /* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { +}, "0"), /* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { d: "m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z" }, "1")], "KeyboardDoubleArrowDown"); var LastPage = {}; "use strict"; "use client"; -var _interopRequireDefault$b = interopRequireDefaultExports; +var _interopRequireDefault$c = interopRequireDefaultExports; Object.defineProperty(LastPage, "__esModule", { value: true }); -var default_1$b = LastPage.default = void 0; -var _createSvgIcon$b = _interopRequireDefault$b(requireCreateSvgIcon()); -var _jsxRuntime$b = jsxRuntimeExports; -var _default$b = default_1$b = LastPage.default = (0, _createSvgIcon$b.default)(/* @__PURE__ */ (0, _jsxRuntime$b.jsx)("path", { +var default_1$c = LastPage.default = void 0; +var _createSvgIcon$c = _interopRequireDefault$c(requireCreateSvgIcon()); +var _jsxRuntime$c = requireJsxRuntime(); +var _default$c = default_1$c = LastPage.default = (0, _createSvgIcon$c.default)(/* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { d: "M5.59 7.41 10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z" }), "LastPage"); var MoreHoriz = {}; "use strict"; "use client"; -var _interopRequireDefault$a = interopRequireDefaultExports; +var _interopRequireDefault$b = interopRequireDefaultExports; Object.defineProperty(MoreHoriz, "__esModule", { value: true }); -var default_1$a = MoreHoriz.default = void 0; -var _createSvgIcon$a = _interopRequireDefault$a(requireCreateSvgIcon()); -var _jsxRuntime$a = jsxRuntimeExports; -var _default$a = default_1$a = MoreHoriz.default = (0, _createSvgIcon$a.default)(/* @__PURE__ */ (0, _jsxRuntime$a.jsx)("path", { +var default_1$b = MoreHoriz.default = void 0; +var _createSvgIcon$b = _interopRequireDefault$b(requireCreateSvgIcon()); +var _jsxRuntime$b = requireJsxRuntime(); +var _default$b = default_1$b = MoreHoriz.default = (0, _createSvgIcon$b.default)(/* @__PURE__ */ (0, _jsxRuntime$b.jsx)("path", { d: "M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2" }), "MoreHoriz"); var MoreVert = {}; "use strict"; "use client"; -var _interopRequireDefault$9 = interopRequireDefaultExports; +var _interopRequireDefault$a = interopRequireDefaultExports; Object.defineProperty(MoreVert, "__esModule", { value: true }); -var default_1$9 = MoreVert.default = void 0; -var _createSvgIcon$9 = _interopRequireDefault$9(requireCreateSvgIcon()); -var _jsxRuntime$9 = jsxRuntimeExports; -var _default$9 = default_1$9 = MoreVert.default = (0, _createSvgIcon$9.default)(/* @__PURE__ */ (0, _jsxRuntime$9.jsx)("path", { +var default_1$a = MoreVert.default = void 0; +var _createSvgIcon$a = _interopRequireDefault$a(requireCreateSvgIcon()); +var _jsxRuntime$a = requireJsxRuntime(); +var _default$a = default_1$a = MoreVert.default = (0, _createSvgIcon$a.default)(/* @__PURE__ */ (0, _jsxRuntime$a.jsx)("path", { d: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2" }), "MoreVert"); var PushPin = {}; "use strict"; "use client"; -var _interopRequireDefault$8 = interopRequireDefaultExports; +var _interopRequireDefault$9 = interopRequireDefaultExports; Object.defineProperty(PushPin, "__esModule", { value: true }); -var default_1$8 = PushPin.default = void 0; -var _createSvgIcon$8 = _interopRequireDefault$8(requireCreateSvgIcon()); -var _jsxRuntime$8 = jsxRuntimeExports; -var _default$8 = default_1$8 = PushPin.default = (0, _createSvgIcon$8.default)(/* @__PURE__ */ (0, _jsxRuntime$8.jsx)("path", { +var default_1$9 = PushPin.default = void 0; +var _createSvgIcon$9 = _interopRequireDefault$9(requireCreateSvgIcon()); +var _jsxRuntime$9 = requireJsxRuntime(); +var _default$9 = default_1$9 = PushPin.default = (0, _createSvgIcon$9.default)(/* @__PURE__ */ (0, _jsxRuntime$9.jsx)("path", { fillRule: "evenodd", d: "M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3" }), "PushPin"); var RestartAlt = {}; "use strict"; "use client"; -var _interopRequireDefault$7 = interopRequireDefaultExports; +var _interopRequireDefault$8 = interopRequireDefaultExports; Object.defineProperty(RestartAlt, "__esModule", { value: true }); -var default_1$7 = RestartAlt.default = void 0; -var _createSvgIcon$7 = _interopRequireDefault$7(requireCreateSvgIcon()); -var _jsxRuntime$7 = jsxRuntimeExports; -var _default$7 = default_1$7 = RestartAlt.default = (0, _createSvgIcon$7.default)(/* @__PURE__ */ (0, _jsxRuntime$7.jsx)("path", { +var default_1$8 = RestartAlt.default = void 0; +var _createSvgIcon$8 = _interopRequireDefault$8(requireCreateSvgIcon()); +var _jsxRuntime$8 = requireJsxRuntime(); +var _default$8 = default_1$8 = RestartAlt.default = (0, _createSvgIcon$8.default)(/* @__PURE__ */ (0, _jsxRuntime$8.jsx)("path", { d: "M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91" }), "RestartAlt"); var Save = {}; "use strict"; "use client"; -var _interopRequireDefault$6 = interopRequireDefaultExports; +var _interopRequireDefault$7 = interopRequireDefaultExports; Object.defineProperty(Save, "__esModule", { value: true }); -var default_1$6 = Save.default = void 0; -var _createSvgIcon$6 = _interopRequireDefault$6(requireCreateSvgIcon()); -var _jsxRuntime$6 = jsxRuntimeExports; -var _default$6 = default_1$6 = Save.default = (0, _createSvgIcon$6.default)(/* @__PURE__ */ (0, _jsxRuntime$6.jsx)("path", { +var default_1$7 = Save.default = void 0; +var _createSvgIcon$7 = _interopRequireDefault$7(requireCreateSvgIcon()); +var _jsxRuntime$7 = requireJsxRuntime(); +var _default$7 = default_1$7 = Save.default = (0, _createSvgIcon$7.default)(/* @__PURE__ */ (0, _jsxRuntime$7.jsx)("path", { d: "M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z" }), "Save"); var Search = {}; "use strict"; "use client"; -var _interopRequireDefault$5 = interopRequireDefaultExports; +var _interopRequireDefault$6 = interopRequireDefaultExports; Object.defineProperty(Search, "__esModule", { value: true }); -var default_1$5 = Search.default = void 0; -var _createSvgIcon$5 = _interopRequireDefault$5(requireCreateSvgIcon()); -var _jsxRuntime$5 = jsxRuntimeExports; -var _default$5 = default_1$5 = Search.default = (0, _createSvgIcon$5.default)(/* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { +var default_1$6 = Search.default = void 0; +var _createSvgIcon$6 = _interopRequireDefault$6(requireCreateSvgIcon()); +var _jsxRuntime$6 = requireJsxRuntime(); +var _default$6 = default_1$6 = Search.default = (0, _createSvgIcon$6.default)(/* @__PURE__ */ (0, _jsxRuntime$6.jsx)("path", { d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14" }), "Search"); var SearchOff = {}; "use strict"; "use client"; -var _interopRequireDefault$4 = interopRequireDefaultExports; +var _interopRequireDefault$5 = interopRequireDefaultExports; Object.defineProperty(SearchOff, "__esModule", { value: true }); -var default_1$4 = SearchOff.default = void 0; -var _createSvgIcon$4 = _interopRequireDefault$4(requireCreateSvgIcon()); -var _jsxRuntime$4 = jsxRuntimeExports; -var _default$4 = default_1$4 = SearchOff.default = (0, _createSvgIcon$4.default)([/* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { +var default_1$5 = SearchOff.default = void 0; +var _createSvgIcon$5 = _interopRequireDefault$5(requireCreateSvgIcon()); +var _jsxRuntime$5 = requireJsxRuntime(); +var _default$5 = default_1$5 = SearchOff.default = (0, _createSvgIcon$5.default)([/* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3 6.08 3 3.28 5.64 3.03 9h2.02C5.3 6.75 7.18 5 9.5 5 11.99 5 14 7.01 14 9.5S11.99 14 9.5 14c-.17 0-.33-.03-.5-.05v2.02c.17.02.33.03.5.03 1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19z" -}, "0"), /* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { +}, "0"), /* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { d: "M6.47 10.82 4 13.29l-2.47-2.47-.71.71L3.29 14 .82 16.47l.71.71L4 14.71l2.47 2.47.71-.71L4.71 14l2.47-2.47z" }, "1")], "SearchOff"); var Sort = {}; "use strict"; "use client"; -var _interopRequireDefault$3 = interopRequireDefaultExports; +var _interopRequireDefault$4 = interopRequireDefaultExports; Object.defineProperty(Sort, "__esModule", { value: true }); -var default_1$3 = Sort.default = void 0; -var _createSvgIcon$3 = _interopRequireDefault$3(requireCreateSvgIcon()); -var _jsxRuntime$3 = jsxRuntimeExports; -var _default$3 = default_1$3 = Sort.default = (0, _createSvgIcon$3.default)(/* @__PURE__ */ (0, _jsxRuntime$3.jsx)("path", { +var default_1$4 = Sort.default = void 0; +var _createSvgIcon$4 = _interopRequireDefault$4(requireCreateSvgIcon()); +var _jsxRuntime$4 = requireJsxRuntime(); +var _default$4 = default_1$4 = Sort.default = (0, _createSvgIcon$4.default)(/* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { d: "M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z" }), "Sort"); var SyncAlt = {}; "use strict"; "use client"; -var _interopRequireDefault$2 = interopRequireDefaultExports; +var _interopRequireDefault$3 = interopRequireDefaultExports; Object.defineProperty(SyncAlt, "__esModule", { value: true }); -var default_1$2 = SyncAlt.default = void 0; -var _createSvgIcon$2 = _interopRequireDefault$2(requireCreateSvgIcon()); -var _jsxRuntime$2 = jsxRuntimeExports; -var _default$2 = default_1$2 = SyncAlt.default = (0, _createSvgIcon$2.default)(/* @__PURE__ */ (0, _jsxRuntime$2.jsx)("path", { +var default_1$3 = SyncAlt.default = void 0; +var _createSvgIcon$3 = _interopRequireDefault$3(requireCreateSvgIcon()); +var _jsxRuntime$3 = requireJsxRuntime(); +var _default$3 = default_1$3 = SyncAlt.default = (0, _createSvgIcon$3.default)(/* @__PURE__ */ (0, _jsxRuntime$3.jsx)("path", { d: "m18 12 4-4-4-4v3H3v2h15zM6 12l-4 4 4 4v-3h15v-2H6z" }), "SyncAlt"); var ViewColumn = {}; "use strict"; "use client"; -var _interopRequireDefault$1 = interopRequireDefaultExports; +var _interopRequireDefault$2 = interopRequireDefaultExports; Object.defineProperty(ViewColumn, "__esModule", { value: true }); -var default_1$1 = ViewColumn.default = void 0; -var _createSvgIcon$1 = _interopRequireDefault$1(requireCreateSvgIcon()); -var _jsxRuntime$1 = jsxRuntimeExports; -var _default$1 = default_1$1 = ViewColumn.default = (0, _createSvgIcon$1.default)(/* @__PURE__ */ (0, _jsxRuntime$1.jsx)("path", { +var default_1$2 = ViewColumn.default = void 0; +var _createSvgIcon$2 = _interopRequireDefault$2(requireCreateSvgIcon()); +var _jsxRuntime$2 = requireJsxRuntime(); +var _default$2 = default_1$2 = ViewColumn.default = (0, _createSvgIcon$2.default)(/* @__PURE__ */ (0, _jsxRuntime$2.jsx)("path", { d: "M14.67 5v14H9.33V5zm1 14H21V5h-5.33zm-7.34 0V5H3v14z" }), "ViewColumn"); var VisibilityOff = {}; "use strict"; "use client"; -var _interopRequireDefault = interopRequireDefaultExports; +var _interopRequireDefault$1 = interopRequireDefaultExports; Object.defineProperty(VisibilityOff, "__esModule", { value: true }); -var default_1 = VisibilityOff.default = void 0; -var _createSvgIcon = _interopRequireDefault(requireCreateSvgIcon()); -var _jsxRuntime = jsxRuntimeExports; -var _default = default_1 = VisibilityOff.default = (0, _createSvgIcon.default)(/* @__PURE__ */ (0, _jsxRuntime.jsx)("path", { +var default_1$1 = VisibilityOff.default = void 0; +var _createSvgIcon$1 = _interopRequireDefault$1(requireCreateSvgIcon()); +var _jsxRuntime$1 = requireJsxRuntime(); +var _default$1 = default_1$1 = VisibilityOff.default = (0, _createSvgIcon$1.default)(/* @__PURE__ */ (0, _jsxRuntime$1.jsx)("path", { d: "M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z" }), "VisibilityOff"); function memo(getDeps, fn2, opts) { @@ -39119,7 +39086,7 @@ const PickersLayoutContentWrapper = styled$1("div", { display: "flex", flexDirection: "column" }); -const PickersLayout = function PickersLayout2(inProps) { +const PickersLayout = /* @__PURE__ */ React$1.forwardRef(function PickersLayout2(inProps, ref) { const props = useThemeProps({ props: inProps, name: "MuiPickersLayout" @@ -39135,7 +39102,6 @@ const PickersLayout = function PickersLayout2(inProps) { sx, className, isLandscape, - ref, wrapperVariant } = props; const classes = useUtilityClasses$J(props); @@ -39153,7 +39119,7 @@ const PickersLayout = function PickersLayout2(inProps) { }) }), actionBar] }); -}; +}); process.env.NODE_ENV !== "production" ? PickersLayout.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | @@ -45057,7 +45023,7 @@ const pickersCalendarHeaderClasses = generateUtilityClasses("MuiPickersCalendarH function getPickersArrowSwitcherUtilityClass(slot) { return generateUtilityClass("MuiPickersArrowSwitcher", slot); } -const pickersArrowSwitcherClasses = generateUtilityClasses("MuiPickersArrowSwitcher", ["root", "spacer", "button"]); +const pickersArrowSwitcherClasses = generateUtilityClasses("MuiPickersArrowSwitcher", ["root", "spacer", "button", "previousIconButton", "nextIconButton", "leftArrowIcon", "rightArrowIcon"]); const _excluded$E = ["children", "className", "slots", "slotProps", "isNextDisabled", "isNextHidden", "onGoToNext", "nextLabel", "isPreviousDisabled", "isPreviousHidden", "onGoToPrevious", "previousLabel", "labelId"], _excluded2$3 = ["ownerState"], _excluded3$1 = ["ownerState"]; const PickersArrowSwitcherRoot = styled$1("div", { name: "MuiPickersArrowSwitcher", @@ -45096,7 +45062,11 @@ const useUtilityClasses$u = (ownerState) => { const slots = { root: ["root"], spacer: ["spacer"], - button: ["button"] + button: ["button"], + previousIconButton: ["previousIconButton"], + nextIconButton: ["nextIconButton"], + leftArrowIcon: ["leftArrowIcon"], + rightArrowIcon: ["rightArrowIcon"] }; return composeClasses(slots, getPickersArrowSwitcherUtilityClass, classes); }; @@ -45151,7 +45121,7 @@ const PickersArrowSwitcher = /* @__PURE__ */ React$1.forwardRef(function Pickers ownerState: _extends$1({}, ownerState, { hidden: previousProps.isHidden }), - className: classes.button + className: clsx(classes.button, classes.previousIconButton) }); const NextIconButton = (_b = slots == null ? void 0 : slots.nextIconButton) != null ? _b : PickersArrowSwitcherButton; const nextIconButtonProps = useSlotProps({ @@ -45168,7 +45138,7 @@ const PickersArrowSwitcher = /* @__PURE__ */ React$1.forwardRef(function Pickers ownerState: _extends$1({}, ownerState, { hidden: nextProps.isHidden }), - className: classes.button + className: clsx(classes.button, classes.nextIconButton) }); const LeftArrowIcon = (_c = slots == null ? void 0 : slots.leftArrowIcon) != null ? _c : ArrowLeftIcon; const _useSlotProps = useSlotProps({ @@ -45177,7 +45147,8 @@ const PickersArrowSwitcher = /* @__PURE__ */ React$1.forwardRef(function Pickers additionalProps: { fontSize: "inherit" }, - ownerState: void 0 + ownerState, + className: classes.leftArrowIcon }), leftArrowIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2$3); const RightArrowIcon = (_d = slots == null ? void 0 : slots.rightArrowIcon) != null ? _d : ArrowRightIcon; const _useSlotProps2 = useSlotProps({ @@ -45186,7 +45157,8 @@ const PickersArrowSwitcher = /* @__PURE__ */ React$1.forwardRef(function Pickers additionalProps: { fontSize: "inherit" }, - ownerState: void 0 + ownerState, + className: classes.rightArrowIcon }), rightArrowIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3$1); return /* @__PURE__ */ jsxRuntimeExports.jsxs(PickersArrowSwitcherRoot, _extends$1({ ref, @@ -45367,7 +45339,7 @@ const PickersCalendarHeader = /* @__PURE__ */ React$1.forwardRef(function Picker const _useSlotProps = useSlotProps({ elementType: SwitchViewIcon, externalSlotProps: slotProps == null ? void 0 : slotProps.switchViewIcon, - ownerState: void 0, + ownerState, className: classes.switchViewIcon }), switchViewIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2$2); const selectNextMonth = () => onMonthChange(utils2.addMonths(month, 1), "left"); @@ -50297,10 +50269,11 @@ function ClockPointer(inProps) { function getClockUtilityClass(slot) { return generateUtilityClass("MuiClock", slot); } -const clockClasses = generateUtilityClasses("MuiClock", ["root", "clock", "wrapper", "squareMask", "pin", "amButton", "pmButton", "meridiemText"]); +const clockClasses = generateUtilityClasses("MuiClock", ["root", "clock", "wrapper", "squareMask", "pin", "amButton", "pmButton", "meridiemText", "selected"]); const useUtilityClasses$h = (ownerState) => { const { - classes + classes, + meridiemMode } = ownerState; const slots = { root: ["root"], @@ -50308,8 +50281,8 @@ const useUtilityClasses$h = (ownerState) => { wrapper: ["wrapper"], squareMask: ["squareMask"], pin: ["pin"], - amButton: ["amButton"], - pmButton: ["pmButton"], + amButton: ["amButton", meridiemMode === "am" && "selected"], + pmButton: ["pmButton", meridiemMode === "pm" && "selected"], meridiemText: ["meridiemText"] }; return composeClasses(slots, getClockUtilityClass, classes); @@ -50392,23 +50365,15 @@ const ClockPin = styled$1("div", { left: "50%", transform: "translate(-50%, -50%)" })); -const ClockAmButton = styled$1(IconButton, { - name: "MuiClock", - slot: "AmButton", - overridesResolver: (_2, styles2) => styles2.amButton -})(({ - theme -}) => ({ +const meridiemButtonCommonStyles = (theme, meridiemMode) => ({ zIndex: 1, - position: "absolute", bottom: 8, - left: 8, paddingLeft: 4, paddingRight: 4, width: CLOCK_HOUR_WIDTH, variants: [{ props: { - meridiemMode: "am" + meridiemMode }, style: { backgroundColor: (theme.vars || theme).palette.primary.main, @@ -50418,6 +50383,17 @@ const ClockAmButton = styled$1(IconButton, { } } }] +}); +const ClockAmButton = styled$1(IconButton, { + name: "MuiClock", + slot: "AmButton", + overridesResolver: (_2, styles2) => styles2.amButton +})(({ + theme +}) => _extends$1({}, meridiemButtonCommonStyles(theme, "am"), { + // keeping it here to make TS happy + position: "absolute", + left: 8 })); const ClockPmButton = styled$1(IconButton, { name: "MuiClock", @@ -50425,26 +50401,10 @@ const ClockPmButton = styled$1(IconButton, { overridesResolver: (_2, styles2) => styles2.pmButton })(({ theme -}) => ({ - zIndex: 1, +}) => _extends$1({}, meridiemButtonCommonStyles(theme, "pm"), { + // keeping it here to make TS happy position: "absolute", - bottom: 8, - right: 8, - paddingLeft: 4, - paddingRight: 4, - width: CLOCK_HOUR_WIDTH, - variants: [{ - props: { - meridiemMode: "pm" - }, - style: { - backgroundColor: (theme.vars || theme).palette.primary.main, - color: (theme.vars || theme).palette.primary.contrastText, - "&:hover": { - backgroundColor: (theme.vars || theme).palette.primary.light - } - } - }] + right: 8 })); const ClockMeridiemText = styled$1(Typography, { name: "MuiClock", @@ -52511,7 +52471,7 @@ const renderMultiSectionDigitalClockTimeView = ({ skipDisabled, timezone }); -function DesktopDateTimePickerLayout(props) { +const DesktopDateTimePickerLayout = /* @__PURE__ */ React$1.forwardRef(function DesktopDateTimePickerLayout2(props, ref) { var _a, _b; const isRtl = useRtl(); const { @@ -52525,7 +52485,6 @@ function DesktopDateTimePickerLayout(props) { sx, className, isLandscape, - ref, classes } = props; const isActionBarVisible = actionBar && ((_b = (_a = actionBar.props.actions) == null ? void 0 : _a.length) != null ? _b : 0) > 0; @@ -52558,7 +52517,7 @@ function DesktopDateTimePickerLayout(props) { })] }), actionBar] }); -} +}); process.env.NODE_ENV !== "production" ? DesktopDateTimePickerLayout.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | @@ -60322,40 +60281,40 @@ const getMRT_RowSelectColumnDef = (tableOptions) => { })); }; const MRT_Default_Icons = { - ArrowDownwardIcon: default_1$x, - ArrowRightIcon: default_1$w, - CancelIcon: default_1$v, - ChevronLeftIcon: default_1$u, - ChevronRightIcon: default_1$t, - ClearAllIcon: default_1$s, - CloseIcon: default_1$r, - ContentCopy: default_1$q, - DensityLargeIcon: default_1$p, - DensityMediumIcon: default_1$o, - DensitySmallIcon: default_1$n, - DragHandleIcon: default_1$m, - DynamicFeedIcon: default_1$l, - EditIcon: default_1$k, - ExpandMoreIcon: default_1$j, - FilterAltIcon: default_1$i, - FilterListIcon: default_1$h, - FilterListOffIcon: default_1$g, - FirstPageIcon: default_1$f, - FullscreenExitIcon: default_1$d, - FullscreenIcon: default_1$e, - KeyboardDoubleArrowDownIcon: default_1$c, - LastPageIcon: default_1$b, - MoreHorizIcon: default_1$a, - MoreVertIcon: default_1$9, - PushPinIcon: default_1$8, - RestartAltIcon: default_1$7, - SaveIcon: default_1$6, - SearchIcon: default_1$5, - SearchOffIcon: default_1$4, - SortIcon: default_1$3, - SyncAltIcon: default_1$2, - ViewColumnIcon: default_1$1, - VisibilityOffIcon: default_1 + ArrowDownwardIcon: default_1$y, + ArrowRightIcon: default_1$x, + CancelIcon: default_1$w, + ChevronLeftIcon: default_1$v, + ChevronRightIcon: default_1$u, + ClearAllIcon: default_1$t, + CloseIcon: default_1$s, + ContentCopy: default_1$r, + DensityLargeIcon: default_1$q, + DensityMediumIcon: default_1$p, + DensitySmallIcon: default_1$o, + DragHandleIcon: default_1$n, + DynamicFeedIcon: default_1$m, + EditIcon: default_1$l, + ExpandMoreIcon: default_1$k, + FilterAltIcon: default_1$j, + FilterListIcon: default_1$i, + FilterListOffIcon: default_1$h, + FirstPageIcon: default_1$g, + FullscreenExitIcon: default_1$e, + FullscreenIcon: default_1$f, + KeyboardDoubleArrowDownIcon: default_1$d, + LastPageIcon: default_1$c, + MoreHorizIcon: default_1$b, + MoreVertIcon: default_1$a, + PushPinIcon: default_1$9, + RestartAltIcon: default_1$8, + SaveIcon: default_1$7, + SearchIcon: default_1$6, + SearchOffIcon: default_1$5, + SortIcon: default_1$4, + SyncAltIcon: default_1$3, + ViewColumnIcon: default_1$2, + VisibilityOffIcon: default_1$1 }; const MRT_Localization_EN = { actions: "Actions", @@ -62810,17 +62769,17 @@ const MaterialReactTable = (props) => { } return jsxRuntimeExports.jsx(MRT_TablePaper, { table }); }; -const { Open: Open$7, Child: Child$4 } = gubu_minExports.Gubu; -const Shape$2 = gubu_minExports.Gubu(Open$7({ +const { Open: Open$n, Child: Child$5 } = gubu_minExports.Gubu; +const Shape$3 = gubu_minExports.Gubu(Open$n({ name: String, prefix: String, ent: String, order: [String], - field: Child$4({}, {}) + field: Child$5({}, {}) }), { name: "BasicEntityList" }); function VxgBasicEntityListPlugin(options) { const seneca = this; - const spec = Shape$2(options.spec); + const spec = Shape$3(options.spec); const slot = spec.prefix + spec.name; const columns = spec.order.reduce((a, fn2) => { const field = spec.field[fn2]; @@ -62856,7 +62815,7 @@ Object.assign(VxgBasicEntityListPlugin, { } }); Object.defineProperty(VxgBasicEntityListPlugin, "name", { value: "VxgBasicEntityListPlugin" }); -const CMPNAME$9 = "BasicEntityList"; +const CMPNAME$o = "BasicEntityList"; function BasicEntityList(props) { const { ctx } = props; const { seneca } = ctx(); @@ -64776,32 +64735,369 @@ function useForm(props = {}) { _formControl.current.formState = getProxyFormState(formState, control); return _formControl.current; } -const CMPNAME$8 = "BasicEntityField"; -const { Open: Open$6 } = gubu_minExports.Gubu; -const BasicEntityFieldSpecShape = gubu_minExports.Gubu(Open$6({}), { name: CMPNAME$8 }); -const fieldMap = { - Text: BasicEntityTextField, - TextBox: BasicEntityTextBoxField, - Date: BasicEntityDateField, - DateTime: BasicEntityDateTimeField, - Time: BasicEntityTimeField -}; -function BasicEntityField(props) { - const { ctx, spec } = props; - const basicEntityFieldSpec = BasicEntityFieldSpecShape(spec); - const field = basicEntityFieldSpec.field; - const Field = fieldMap[field.ux.kind]; - return /* @__PURE__ */ jsxRuntimeExports.jsx(Field, { ctx, spec }); -} function BasicEntityFieldError(props) { const { err } = props; return err ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicEntityFieldError-active", children: err.message }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicEntityFieldError-none" }); } +const CMPNAME$n = "BasicEntitySliderField"; +const { Open: Open$m } = gubu_minExports.Gubu; +const BasicEntityCheckboxFieldSpecShape = gubu_minExports.Gubu( + Open$m({ + field: Open$m({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$m({ + kind: gubu_minExports.Exact("Checkbox"), + edit: gubu_minExports.Default(true), + props: Open$m({}) + }) + }) + }), + { name: CMPNAME$n } +); +function BasicEntityCheckboxField(props) { + const { spec } = props; + const basicEntityCheckboxField = BasicEntityCheckboxFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntityCheckboxField; + const val = getValues(field.name); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + FormControlLabel$1, + { + control: /* @__PURE__ */ jsxRuntimeExports.jsx( + Checkbox$1, + __spreadValues({ + id: field.id, + checked: controllerField.value, + onChange: controllerField.onChange, + disabled: !field.ux.edit + }, field.ux.props) + ), + label: field.label + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); +} +const CMPNAME$m = "BasicEntityAutocompleteField"; +const { Open: Open$l } = gubu_minExports.Gubu; +const BasicEntityAutocompleteFieldSpecShape = gubu_minExports.Gubu( + Open$l({ + field: Open$l({ + id: String, + label: String, + kind: String, + name: String, + cat: Open$l({ + default: String, + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$l({}) + }), + ux: Open$l({ + kind: gubu_minExports.Exact("Autocomplete"), + edit: gubu_minExports.Default(true) + }) + }) + }), + { name: CMPNAME$m } +); +function BasicEntityAutocompleteField(props) { + const { spec } = props; + const basicEntityAutocompleteField = BasicEntityAutocompleteFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntityAutocompleteField; + const defaultAlternative = field.cat.multiple === 1 ? {} : []; + const defaultValues = getValues(`${field.name}_default$`) || defaultAlternative; + const categories = getValues(`${field.name}_cat$`) || []; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + Autocomplete$1, + __spreadValues({ + freeSolo: true, + forcePopupIcon: true, + multiple: field.cat.multiple !== 1, + options: categories, + isOptionEqualToValue: (opt, val) => opt === val || (opt == null ? void 0 : opt.id) != null && (val == null ? void 0 : val.id) != null && opt.id === val.id || (opt == null ? void 0 : opt.key) != null && (val == null ? void 0 : val.key) != null && opt.key === val.key, + getOptionLabel: (option) => (option == null ? void 0 : option.title) || "", + value: controllerField.value, + disabled: !field.ux.edit, + onChange: (_2, v) => { + console.log("v", v); + setValue( + field.name, + Array.isArray(v) ? v.map((val) => val.key).join(",") : v == null ? void 0 : v.key + ); + controllerField.onChange(v); + }, + renderInput: (params) => /* @__PURE__ */ jsxRuntimeExports.jsx(TextField$1, __spreadProps(__spreadValues({}, params), { label: field.label })) + }, field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); +} +const CMPNAME$l = "BasicEntitySliderField"; +const { Open: Open$k } = gubu_minExports.Gubu; +const BasicEntitySliderFieldSpecShape = gubu_minExports.Gubu( + Open$k({ + field: Open$k({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$k({ + kind: gubu_minExports.Exact("Slider"), + edit: gubu_minExports.Default(true), + step: gubu_minExports.Default(1), + min: gubu_minExports.Default(0), + max: gubu_minExports.Default(100), + props: Open$k({ + marks: gubu_minExports.Default({}), + valueLabelDisplay: gubu_minExports.Exact("on", "auto", "off").Default("auto"), + direction: gubu_minExports.Exact("horizontal", "vertical").Default("horizontal"), + track: gubu_minExports.Exact("normal", "inverted", "disabled").Default("normal") + }) + }) + }) + }), + { name: CMPNAME$l } +); +function BasicEntitySliderField(props) { + const { spec } = props; + const basicEntityAutocompleteField = BasicEntitySliderFieldSpecShape(spec); + const { control, field, getValues, setValue, errors } = basicEntityAutocompleteField; + const fieldName = field.name; + const val = getValues(`${fieldName}_uival$`); + const marks = getValues(`${fieldName}_marks$`); + const err = errors[fieldName]; + const { field: controllerField } = useController({ + name: `${fieldName}_uival$`, + control, + defaultValue: val || field.ux.min + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel$1, { children: field.label }, `${field.id}-label`), + /* @__PURE__ */ jsxRuntimeExports.jsx( + Slider$1, + { + step: field.ux.step, + marks, + min: field.ux.min, + max: field.ux.max, + value: controllerField.value, + onChange: (_2, newVal) => { + setValue(field.name, newVal * 60); + controllerField.onChange(newVal); + }, + disabled: !field.ux.edit, + orientation: field.ux.direction, + track: field.ux.track, + valueLabelDisplay: field.ux.props.valueLabelDisplay + }, + `${field.id}-slider` + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }); +} +const CMPNAME$k = "BasicEntitySliderField"; +const { Open: Open$j } = gubu_minExports.Gubu; +const BasicEntityRadioGroupFieldSpecShape = gubu_minExports.Gubu( + Open$j({ + field: Open$j({ + id: String, + name: String, + kind: "", + llabel: "", + ux: Open$j({ + kind: gubu_minExports.Exact("RadioGroup"), + edit: gubu_minExports.Default(true), + direction: gubu_minExports.Exact("row", "column").Default("row") + }), + cat: Open$j({ + default: "", + title: String, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$j({}) + }) + }) + }), + { name: CMPNAME$k } +); +function BasicEntityRadioGroupField(props) { + const { spec } = props; + const basicEntityRadioGroupField = BasicEntityRadioGroupFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntityRadioGroupField; + const defaultValues = getValues(`${field.name}_default$`) || ""; + const categories = getValues(`${field.name}_cat$`) || []; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel$1, { children: field.label }, `${field.id}-label`), + /* @__PURE__ */ jsxRuntimeExports.jsx( + RadioGroup, + __spreadProps(__spreadValues({ + value: controllerField.value, + onChange: controllerField.onChange, + row: "row" === field.ux.direction, + disabled: !field.ux.edit + }, field.ux.props), { + children: categories.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx( + FormControlLabel$1, + { + value: option.key, + control: /* @__PURE__ */ jsxRuntimeExports.jsx(Radio$1, { disabled: !field.ux.edit }), + label: option.title + }, + `${option.key}-option` + )) + }), + field.id + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }); +} +const CMPNAME$j = "BasicEntityTextBoxField"; +const { Open: Open$i } = gubu_minExports.Gubu; +const BasicEntityTextBoxFieldSpecShape = gubu_minExports.Gubu( + Open$i({ + field: Open$i({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$i({ + kind: gubu_minExports.Exact("TextBox"), + edit: gubu_minExports.Default(true), + props: Open$i({}) + }) + }) + }), + { name: CMPNAME$j } +); +function BasicEntityTextBoxField(props) { + const { spec } = props; + const basicEntityTextBoxField = BasicEntityTextBoxFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTextBoxField; + const val = getValues(field.name); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + TextField$1, + __spreadValues(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + variant: "outlined", + fullWidth: true, + multiline: true, + rows: field.ux.rows, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 }, + disabled: !field.ux.edit + }, field.ux.props), register(field.name)) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.name); +} +const CMPNAME$i = "BasicEntityTextField"; +const { Open: Open$h } = gubu_minExports.Gubu; +const BasicEntityTextFieldSpecShape = gubu_minExports.Gubu( + Open$h({ + field: Open$h({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$h({ + kind: gubu_minExports.Exact("Text"), + edit: gubu_minExports.Default(true), + props: Open$h({}) + }) + }) + }), + { name: CMPNAME$i } +); function BasicEntityTextField(props) { const { spec } = props; - const { field, register, getValues, errors } = spec; + const basicEntityTextBoxField = BasicEntityTextFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTextBoxField; + const val = getValues(field.name); const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + TextField$1, + __spreadValues(__spreadProps(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)), { + disabled: !field.ux.edit + }), field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); +} +const CMPNAME$h = "BasicEntityDateField"; +const { Open: Open$g } = gubu_minExports.Gubu; +const BasicEntityDateFieldSpecShape = gubu_minExports.Gubu( + Open$g({ + field: Open$g({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$g({ + kind: gubu_minExports.Exact("Date"), + edit: gubu_minExports.Default(true), + props: Open$g({}) + }) + }) + }), + { name: CMPNAME$h } +); +function BasicEntityDateField(props) { + const { spec } = props; + const basicEntityDateField = BasicEntityDateFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityDateField; const val = getValues(field.name); + const err = errors[field.name]; return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ /* @__PURE__ */ jsxRuntimeExports.jsx( TextField$1, @@ -64811,97 +65107,731 @@ function BasicEntityTextField(props) { label: field.label, fullWidth: true, variant: "outlined", + type: "date", + disabled: !field.ux.edit, InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } }, register(field.name)) ), /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) ] }, field.id); } -function BasicEntityTextBoxField(props) { +const CMPNAME$g = "BasicEntityTimeField"; +const { Open: Open$f } = gubu_minExports.Gubu; +const BasicEntityTimeFieldSpecShape = gubu_minExports.Gubu( + Open$f({ + field: Open$f({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$f({ + kind: gubu_minExports.Exact("Time"), + edit: gubu_minExports.Default(true), + props: Open$f({}) + }) + }) + }), + { name: CMPNAME$g } +); +function BasicEntityTimeField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityTimeField = BasicEntityTimeFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTimeField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - TextField$1, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - variant: "outlined", - fullWidth: true, - multiline: true, - rows: 3, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.name); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + TextField$1, + __spreadValues(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + type: "time", + disabled: !field.ux.edit, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)), field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); } -function BasicEntityDateField(props) { +const CMPNAME$f = "BasicEntityDateTimeField"; +const { Open: Open$e } = gubu_minExports.Gubu; +const BasicEntityDateTimeFieldSpecShape = gubu_minExports.Gubu( + Open$e({ + field: Open$e({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$e({ + kind: gubu_minExports.Exact("DateTime"), + edit: gubu_minExports.Default(true), + props: Open$e({}) + }) + }) + }), + { name: CMPNAME$f } +); +function BasicEntityDateTimeField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityDateTimeField = BasicEntityDateTimeFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityDateTimeField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - TextField$1, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "date", - disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + TextField$1, + __spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + type: "datetime-local", + disabled: !field.ux.edit, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); } -function BasicEntityTimeField(props) { +const CMPNAME$e = "BasicEntitySliderField"; +const { Open: Open$d } = gubu_minExports.Gubu; +const BasicEntityRatingFieldSpecShape = gubu_minExports.Gubu( + Open$d({ + field: Open$d({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$d({ + kind: gubu_minExports.Exact("Rating"), + edit: gubu_minExports.Default(true), + precision: 1, + props: Open$d({}) + }) + }) + }), + { name: CMPNAME$e } +); +function BasicEntityRatingField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityRatingField = BasicEntityRatingFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntityRatingField; const val = getValues(field.name); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val || 0 + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel$1, { component: "legend", children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + Rating, + __spreadValues({ + name: field.name, + value: controllerField.value, + precision: field.ux.precision, + onChange: (_2, newValue) => controllerField.onChange(newValue), + disabled: !field.ux.edit + }, field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-div`); +} +const CMPNAME$d = "BasicEntitySliderField"; +const { Open: Open$c } = gubu_minExports.Gubu; +const BasicEntityButtonFieldSpecShape = gubu_minExports.Gubu( + Open$c({ + field: Open$c({ + id: String, + name: String, + kind: "", + label: String, + ux: Open$c({ + kind: gubu_minExports.Exact("Button"), + edit: true, + variant: "contained", + props: Open$c({}) + }) + }) + }), + { name: CMPNAME$d } +); +function BasicEntityButtonField(props) { + const { spec } = props; + const basicEntityButtonField = BasicEntityButtonFieldSpecShape(spec); + const { field } = basicEntityButtonField; return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - TextField$1, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "time", + Button$1, + __spreadProps(__spreadValues({ + variant: field.ux.variant, disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); -} -function BasicEntityDateTimeField(props) { + onClick: () => { + console.log("Button clicked"); + } + }, field.ux.props), { + children: field.label + }) + ) }, `${field.id}-div`); +} +const CMPNAME$c = "BasicEntitySliderField"; +const { Open: Open$b } = gubu_minExports.Gubu; +const BasicEntityButtonGroupFieldSpecShape = gubu_minExports.Gubu( + Open$b({ + field: Open$b({ + id: String, + name: String, + kind: "", + label: "", + options: Open$b({ + label: { field: "label" }, + value: { field: "value" }, + ents: Open$b({}) + }), + ux: Open$b({ + kind: gubu_minExports.Exact("ButtonGroup"), + edit: gubu_minExports.Default(true), + props: Open$b({}) + }) + }) + }), + { name: CMPNAME$c } +); +function BasicEntityButtonGroupField(props) { + const { spec } = props; + const basicEntityButtonGroupField = BasicEntityButtonGroupFieldSpecShape(spec); + const { field } = basicEntityButtonGroupField; + return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(ButtonGroup, __spreadProps(__spreadValues({ disabled: !field.ux.edit }, field.ux.props), { children: Object.entries(field.options.ents).map(([key, val]) => /* @__PURE__ */ jsxRuntimeExports.jsx(Button$1, { onClick: () => { + }, children: val == null ? void 0 : val[field.options.label.field] }, `${field.id}-${key}`)) })) }, `${field.id}-div`); +} +const CMPNAME$b = "BasicEntitySelectField"; +const { Open: Open$a } = gubu_minExports.Gubu; +const BasicEntitySelectFieldSpecShape = gubu_minExports.Gubu( + Open$a({ + field: Open$a({ + id: String, + name: String, + kind: "", + label: "", + cat: Open$a({ + default: "", + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$a({}) + }), + ux: Open$a({ + kind: gubu_minExports.Exact("Select"), + edit: gubu_minExports.Default(true) + }) + }) + }), + { name: CMPNAME$b } +); +function BasicEntitySelectField(props) { + const { spec } = props; + const basicEntitySelectField = BasicEntitySelectFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntitySelectField; + const err = errors[field.name]; + const defaultValues = getValues(field.name + "_default$") || (field.cat.multiple === 1 ? "" : []); + const categories = getValues(field.name + "_cat$") || []; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsxs(FormControl$1, { fullWidth: true, children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(InputLabel$1, { id: `${field.id}-label`, children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + Select$1, + __spreadProps(__spreadValues({ + labelId: `${field.id}-label`, + id: `${field.id}-select`, + value: controllerField.value, + multiple: field.cat.multiple !== 1, + label: field.name, + onChange: (event) => { + const { value } = event.target; + setValue(field.name, Array.isArray(value) ? value.join(",") : value); + controllerField.onChange(value); + }, + disabled: !field.ux.edit + }, field.ux.props), { + children: categories.map((opt) => /* @__PURE__ */ jsxRuntimeExports.jsx(MenuItem$1, { value: opt.key, children: opt.title }, opt.key)) + }) + ) + ] }), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); +} +const CMPNAME$a = "BasicEntitySliderField"; +const { Open: Open$9 } = gubu_minExports.Gubu; +const BasicEntitySwitchFieldSpecShape = gubu_minExports.Gubu( + Open$9({ + field: Open$9({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$9({ + kind: gubu_minExports.Exact("Switch"), + edit: gubu_minExports.Default(true), + props: Open$9({}) + }) + }) + }), + { name: CMPNAME$a } +); +function BasicEntitySwitchField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntitySwitchField = BasicEntitySwitchFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntitySwitchField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - TextField$1, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "datetime-local", - disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + FormControlLabel$1, + { + control: /* @__PURE__ */ jsxRuntimeExports.jsx( + Switch$1, + __spreadValues({ + id: field.id, + checked: controllerField.value, + onChange: controllerField.onChange, + disabled: !field.ux.edit + }, field.ux.props) + ), + label: field.label + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); +} +const CMPNAME$9 = "BasicEntitySliderField"; +const { Open: Open$8 } = gubu_minExports.Gubu; +const BasicEntityToggleButtonFieldSpecShape = gubu_minExports.Gubu( + Open$8({ + field: Open$8({ + id: String, + name: String, + kind: "", + label: "", + cat: Open$8({ + default: "", + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$8({}) + }), + ux: Open$8({ + kind: gubu_minExports.Exact("ToggleButton"), + edit: gubu_minExports.Default(true), + props: Open$8({}) + }) + }) + }), + { name: CMPNAME$9 } +); +function BasicEntityToggleButtonField(props) { + const { spec } = props; + const basicEntityToggleButtonField = BasicEntityToggleButtonFieldSpecShape(spec); + const { control, field, errors } = basicEntityToggleButtonField; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(FormLabel$1, { component: "legend", children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + ToggleButtonGroup, + __spreadProps(__spreadValues({ + value: controllerField.value, + exclusive: field.cat.multiple === 1 ? true : false, + onChange: (_2, v) => { + field.cat.multiple === 1 ? controllerField.onChange(v) : controllerField.onChange([v]); + }, + disabled: !field.ux.edit + }, field.ux.props), { + children: Object.entries(field.cat.item).map(([key, val]) => /* @__PURE__ */ jsxRuntimeExports.jsx(ToggleButton, { value: key, children: val == null ? void 0 : val.title }, `${field.id}-${key}`)) + }) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); +} +const { Open: Open$7, Child: Child$4 } = gubu_minExports.Gubu; +const Shape$2 = gubu_minExports.Gubu( + Open$7({ + field: {} + }), + { name: "BasicEntityField" } +); +function VxgBasicEntityFieldPlugin(options) { + const seneca = this; + const spec = Shape$2(options.spec); + options.setPlugin(true); + return { + exports: { + handle: {} + } + }; +} +Object.assign(VxgBasicEntityFieldPlugin, { + defaults: { + spec: {}, + setPlugin: Function + } +}); +Object.defineProperty(VxgBasicEntityFieldPlugin, "name", { + value: "VxgBasicEntityFieldPlugin" +}); +const CMPNAME$8 = "BasicEntityField"; +const { Open: Open$6 } = gubu_minExports.Gubu; +const BasicEntityFieldSpecShape = gubu_minExports.Gubu( + Open$6({ + cid: String, + field: Open$6({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$6({ + kind: gubu_minExports.Exact( + "Text", + "TextBox", + "Date", + "DateTime", + "Time", + "Checkbox", + "Autocomplete", + "Slider", + "RadioGroup", + "Rating", + "Button", + "ButtonGroup", + "Select", + "Switch", + "ToggleButton", + "custom" + ), + edit: gubu_minExports.Default(true), + rows: gubu_minExports.Default(3), + props: Open$6({}) + }) + }) + }), + { name: CMPNAME$8 } +); +const fieldMap = { + Text: BasicEntityTextField, + TextBox: BasicEntityTextBoxField, + Date: BasicEntityDateField, + DateTime: BasicEntityDateTimeField, + Time: BasicEntityTimeField, + Checkbox: BasicEntityCheckboxField, + Autocomplete: BasicEntityAutocompleteField, + Slider: BasicEntitySliderField, + RadioGroup: BasicEntityRadioGroupField, + Rating: BasicEntityRatingField, + Button: BasicEntityButtonField, + ButtonGroup: BasicEntityButtonGroupField, + Select: BasicEntitySelectField, + Switch: BasicEntitySwitchField, + ToggleButton: BasicEntityToggleButtonField +}; +function BasicEntityField(props) { + const { ctx, spec } = props; + const { seneca, cmp } = ctx(); + const basicEntityField = BasicEntityFieldSpecShape(spec); + const [plugin, setPlugin] = useState(false); + const cid = basicEntityField.cid + "-" + basicEntityField.field.name; + useEffect(() => { + if (!plugin) { + seneca.use({ + tag: cid, + define: VxgBasicEntityFieldPlugin, + options: { + spec: { + field: basicEntityField.field + }, + setPlugin + } + }); + } + }, []); + const field = spec.field; + const Field = "custom" === field.ux.kind ? cmp[field.ux.cmp] : fieldMap[field.ux.kind]; + return Field ? /* @__PURE__ */ jsxRuntimeExports.jsx(Field, { ctx, spec: basicEntityField }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", {}); } const { Open: Open$5, Child: Child$3 } = gubu_minExports.Gubu; -const Shape$1 = gubu_minExports.Gubu(Open$5({ - name: String, - prefix: String, - ent: String, - order: [String], - field: Child$3({}, {}) -}), { name: "BasicEntityEdit" }); +const Shape$1 = gubu_minExports.Gubu( + Open$5({ + name: String, + prefix: String, + ent: String, + order: [String], + field: Child$3({}, {}) + }), + { name: "BasicEntityEdit" } +); function VxgBasicEntityEditPlugin(options) { const seneca = this; const spec = Shape$1(options.spec); const slot = spec.prefix + spec.name; - const fields = spec.order.reduce((a, fn2) => (fixField(fn2, spec.field[fn2], spec), a.push(spec.field[fn2]), a), []); + console.log("VxgBasicEntityEditPlugin", "slot", slot, "spec.name", spec.name); + const fields = spec.order.reduce( + (a, fn2) => (fixField(fn2, spec.field[fn2], spec), a.push(spec.field[fn2]), a), + [] + ); + for (const field of fields) { + if ("Date" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Date(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.locald; + console.log("modify_edit_Date", item[field.name]); + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Date(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("Time" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Time(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.localt; + console.log("modify_edit_Time", item[field.name]); + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Time(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("DateTime" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Datetime(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.locald + "T" + dt.localt; + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Datetime(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("Slider" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Slider(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_uival$"] = Number(item[field.name]) / 60; + item[field.name + "_marks$"] = util$1.resolveMarks( + field.ux.props.marks + ); + } + return item; + }); + } + ); + } else if ("Select" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "Select", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Select(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = resdefault( + field.cat, + (val) => val + ); + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val) => val + ); + } + return item; + }); + } + ); + } else if ("Autocomplete" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "Autocomplete", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Autocomplete(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = resdefault( + field.cat, + (val, item2) => ({ + key: val, + title: item2.title + }) + ); + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val, item2) => ({ + key: val, + title: item2.title + }) + ); + } + return item; + }); + } + ); + } else if ("RadioGroup" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "RadioGroup", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_RadioGroup(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = field.cat.default; + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val) => val + ); + } + return item; + }); + } + ); + } + } options.setPlugin(true); return { exports: { @@ -64909,7 +65839,8 @@ function VxgBasicEntityEditPlugin(options) { spec, slot, fields - } + }, + util: util$1 } }; } @@ -64919,46 +65850,135 @@ function fixField(name, field, spec) { field.ux = field.ux || {}; field.ux.size = null == field.ux.size ? 4 : parseInt(field.ux.size, 10); } +const util$1 = { + resolveMarks: (marks) => { + if (!marks || typeof marks === "object" && !Object.keys(marks).length) + return false; + return typeof marks === "object" ? Object.entries(marks).map(([key, value]) => ({ + label: value, + value: +key + })) : marks; + }, + dateTimeFromUTC: (utc, tz) => { + const date = new Date(utc); + const iso = date.toISOString(); + const isod = iso.split("T")[0]; + const isot = iso.split("T")[1].split(".")[0]; + const udm = date.getUTCHours() * 60 * 60 * 1e3 + date.getUTCMinutes() * 60 * 1e3 + date.getUTCSeconds() * 1e3 + date.getUTCMilliseconds(); + let out = { + utc, + date, + isod, + isot, + udm + }; + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const dateFormatter = new Intl.DateTimeFormat("en-GB", { + timeZone: tz, + year: "numeric", + month: "2-digit", + day: "2-digit" + }); + const timeFormatter = new Intl.DateTimeFormat("en-GB", { + timeZone: tz, + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); + const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); + out.locald = `${year}-${month}-${day}`; + out.localt = `${hour}:${minute}:${second}`; + return out; + }, + localTimeToUTC: (timeString, tz) => { + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const now = /* @__PURE__ */ new Date(); + const [hours, minutes, seconds] = timeString.split(":").map(Number); + const localDate = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate(), + hours, + minutes, + seconds + ); + const utcTimestamp = Date.UTC( + localDate.getFullYear(), + localDate.getMonth(), + localDate.getDate(), + localDate.getHours(), + localDate.getMinutes(), + localDate.getSeconds() + ); + const tzOffset = new Date(utcTimestamp).getTimezoneOffset() * 6e4; + return utcTimestamp - tzOffset; + }, + localDateTimeToUTC: (dateOrDateTimeString, tz) => { + const date = new Date(dateOrDateTimeString); + if (isNaN(date.getTime())) { + throw new Error("Invalid date or datetime string"); + } + if (tz) { + const tzDate = new Date(date.toLocaleString("en-GB", { timeZone: tz })); + const offset2 = date.getTime() - tzDate.getTime(); + return date.getTime() + offset2; + } + return date.getTime(); + } +}; Object.assign(VxgBasicEntityEditPlugin, { defaults: { spec: {}, setPlugin: Function } }); -Object.defineProperty(VxgBasicEntityEditPlugin, "name", { value: "VxgBasicEntityEditPlugin" }); +Object.defineProperty(VxgBasicEntityEditPlugin, "name", { + value: "VxgBasicEntityEditPlugin" +}); const CMPNAME$7 = "BasicEntityEdit"; -const makeResolver = (seneca, spec) => useCallback((data) => __async(void 0, null, function* () { - const { ent, name } = spec; - const view = name; - let entity = seneca.entity(ent); - entity = entity.make$().data$(data); - let errors = entity.valid$({ errors: true }); - seneca.act("aim:app,on:BasicLed,entity:valid", { - view, - entity, - errors - }); - const errmsg = seneca.context.errmsg; - errors = errors.map((e) => (e.tag_kind = "ent", e)).reduce((a, e, _2) => (a[e.key] = { - type: e.type, - message: errmsg ? (_2 = errmsg.find(e)) ? _2.text : e.text : e.text - }, a), {}); - const values2 = entity.data$(false); - const out = { - values: values2, - errors - }; - return out; -}), [spec.ent]); +const makeResolver = (seneca, spec) => useCallback( + (data) => __async(void 0, null, function* () { + const { ent, name } = spec; + const view = name; + let entity = seneca.entity(ent); + entity = entity.make$().data$(data); + let errors = entity.valid$({ errors: true }); + seneca.act("aim:app,on:BasicLed,entity:valid", { + view, + entity, + errors + }); + const errmsg = seneca.context.errmsg; + errors = errors.map((e) => (e.tag_kind = "ent", e)).reduce( + (a, e, _2) => (a[e.key] = { + type: e.type, + message: errmsg ? (_2 = errmsg.find(e)) ? _2.text : e.text : e.text + }, a), + {} + ); + const values2 = entity.data$(false); + const out = { + values: values2, + errors + }; + console.log("makeResolver", "out", out); + return out; + }), + [spec.ent] +); function BasicEntityEdit(props) { const { ctx } = props; const { seneca } = ctx(); const [plugin, setPlugin] = useState(false); const [ready, setReady] = useState(false); + const cmpId = useSanitizedId(); + const cid = props.spec.name + "-" + cmpId; useEffect(() => { if (!plugin) { seneca.use({ - tag: props.spec.name, + tag: cid, define: VxgBasicEntityEditPlugin, options: { spec: props.spec, @@ -64967,7 +65987,9 @@ function BasicEntityEdit(props) { }); } }, []); - const { spec, slot, fields } = seneca.export("VxgBasicEntityEditPlugin/handle") || { spec: {}, slot: null, fields: [] }; + const { spec, slot, fields } = seneca.export( + "VxgBasicEntityEditPlugin$" + cid + "/handle" + ) || { spec: {}, slot: null, fields: [] }; const { ent, name } = spec; if (plugin && !ready) { seneca.act("aim:app,on:BasicLed,ready:edit", { view: name, setReady }); @@ -64975,13 +65997,23 @@ function BasicEntityEdit(props) { const slotSelectors = seneca.export("Redux/slotSelectors"); let { selectItem, selectList, selectMeta } = slotSelectors(slot); let item = useSelector((state) => selectItem(state)); - if (item && name) { - item = seneca.direct("aim:app,on:BasicLed,modify:edit", { - view: name, - item, - fields + useEffect(() => { + const modifyEdit = () => __async(this, null, function* () { + console.log("BEE", "effect", "modify:edit", "init", "view", name); + console.log("BEE", "effect", "modify:edit", "init", "item", item); + if (item && name) { + console.log("BEE", "effect", "modify:edit", "seneca.direct"); + item = yield seneca.direct("aim:app,on:BasicLed,modify:edit", { + view: name, + item, + fields + }); + console.log("BEE", "effect", "resetting", item); + reset(item); + } }); - } + modifyEdit(); + }, [item, name]); const params = useParams(); useEffect(() => { if (ready) { @@ -64992,7 +66024,6 @@ function BasicEntityEdit(props) { item_id: params.item }); } - reset(item); } }, [null == item, ready]); const resolver = makeResolver(seneca, spec); @@ -65000,60 +66031,94 @@ function BasicEntityEdit(props) { register, handleSubmit, getValues, + setValue, reset, + control, formState: { errors } } = useForm({ mode: "onChange", resolver }); - const onSubmit = (data) => { - seneca.act("aim:app,on:BasicLed,save:item", { view: name, data }); - }; + const onSubmit = (data) => __async(this, null, function* () { + console.log("BasicEntityEdit", "onSubmit", "data", data); + const modifiedData = yield seneca.direct( + "aim:app,on:BasicLed,modify:save", + { + view: name, + data, + fields + } + ); + seneca.act("aim:app,on:BasicLed,save:item", { + view: name, + data: modifiedData + }); + }); return /* @__PURE__ */ jsxRuntimeExports.jsx(Box$2, { className: "vxg-BasicEntityEdit", children: item ? /* @__PURE__ */ jsxRuntimeExports.jsxs( "form", { className: "vxg-BasicEntityEdit-form", onSubmit: handleSubmit(onSubmit), children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx(Grid$1, { container: true, spacing: 2, children: fields.map( - (field) => /* @__PURE__ */ jsxRuntimeExports.jsx( - Grid$1, - { - item: true, - xs: field.ux.size, - children: /* @__PURE__ */ jsxRuntimeExports.jsx( - BasicEntityField, - { - ctx, - spec: { - field, - register, - getValues, - errors - } - } - ) - }, - field.id - ) - ) }), + /* @__PURE__ */ jsxRuntimeExports.jsx(Grid$1, { container: true, spacing: 2, children: fields.map((field) => /* @__PURE__ */ jsxRuntimeExports.jsx(Grid$1, { item: true, xs: field.ux.size, children: /* @__PURE__ */ jsxRuntimeExports.jsx( + BasicEntityField, + { + ctx, + spec: { + cid, + field, + register, + getValues, + setValue, + control, + errors + } + } + ) }, field.id)) }), /* @__PURE__ */ jsxRuntimeExports.jsx(Toolbar$1, { className: "vxg-BasicEntityEdit-toolbar-foot", children: /* @__PURE__ */ jsxRuntimeExports.jsx(Button$1, { type: "submit", variant: "contained", children: "Save" }) }) ] } ) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}) }); } +var Check = {}; +"use strict"; +"use client"; +var _interopRequireDefault = interopRequireDefaultExports; +Object.defineProperty(Check, "__esModule", { + value: true +}); +var default_1 = Check.default = void 0; +var _createSvgIcon = _interopRequireDefault(requireCreateSvgIcon()); +var _jsxRuntime = requireJsxRuntime(); +var _default = default_1 = Check.default = (0, _createSvgIcon.default)(/* @__PURE__ */ (0, _jsxRuntime.jsx)("path", { + d: "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" +}), "Check"); +function BasicAlert({ + children: children2, + severity +}) { + return /* @__PURE__ */ jsxRuntimeExports.jsx(Alert, { icon: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1, { fontSize: "inherit" }), severity, children: children2 }); +} const CMPNAME$6 = "BasicLedHead"; const { Open: Open$4, Child: Child$2 } = gubu_minExports.Gubu; -const BasicLedHeadSpecShape = gubu_minExports.Gubu(Open$4({ - tool: Child$2({ - id: String, - kind: String, - custom: "" - }, {}), - mui: Open$4({ - Toolbar: Open$4({}) - }) -}), { name: CMPNAME$6 }); +const BasicLedHeadSpecShape = gubu_minExports.Gubu( + Open$4({ + tool: Child$2( + { + id: String, + kind: String, + custom: "" + }, + {} + ), + ux: Open$4({ + props: { + Toolbar: Open$4({}) + } + }) + }), + { name: CMPNAME$6 } +); function BasicLedHead(props) { const { ctx, spec } = props; const { seneca, custom } = ctx(); @@ -65070,46 +66135,40 @@ function BasicLedHead(props) { const state = { item, view: viewState, navigate }; const subview = "/view/" + viewName === loc.pathname ? "list" : "edit"; const customButtons = Object.values(spec.tool || {}).filter((t) => "button" === t.kind).map((t) => (custom.BasicLedHead || {})[t.custom]).filter((t) => null != t); - return /* @__PURE__ */ jsxRuntimeExports.jsx(Box$2, { className: "bxg-BasicLedHead", children: /* @__PURE__ */ jsxRuntimeExports.jsxs( - Toolbar$1, - { - className: "vxg-BasicLedHead-toolbar", - variant: "dense", - children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - Button$1, - { - color: "inherit", - onClick: () => navigate(-1), - disabled: "list" === subview, - children: "Back" - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx( - Button$1, - { - color: "inherit", - onClick: () => seneca.act("aim:app,on:view,add:item", { view: viewName }), - disabled: "edit" === subview, - children: "Add" - } - ), - customButtons.map( - (cb) => /* @__PURE__ */ jsxRuntimeExports.jsx( - Button$1, - __spreadProps(__spreadValues({ - color: "inherit", - onClick: () => seneca.act(cb.msg(state, spec, ctx)), - disabled: cb.disabled(state, spec, ctx) - }, cb.attr(state, spec, ctx)), { - children: cb.title(state, spec, ctx) - }), - cb.id - ) - ) - ] - } - ) }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { className: "bxg-BasicLedHead", children: [ + /* @__PURE__ */ jsxRuntimeExports.jsxs(Toolbar$1, { className: "vxg-BasicLedHead-toolbar", variant: "dense", children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + Button$1, + { + color: "inherit", + onClick: () => navigate(-1), + disabled: "list" === subview, + children: "Back" + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx( + Button$1, + { + color: "inherit", + onClick: () => seneca.act("aim:app,on:view,add:item", { view: viewName }), + disabled: "edit" === subview, + children: "Add" + } + ), + customButtons.map((cb) => /* @__PURE__ */ jsxRuntimeExports.jsx( + Button$1, + __spreadProps(__spreadValues({ + color: "inherit", + onClick: () => seneca.act(cb.msg(state, spec, ctx)), + disabled: cb.disabled(state, spec, ctx) + }, cb.attr(state, spec, ctx)), { + children: cb.title(state, spec, ctx) + }), + cb.id + )) + ] }), + viewState.alert.active ? /* @__PURE__ */ jsxRuntimeExports.jsx(BasicAlert, { severity: viewState.alert.level, children: viewState.alert.message }) : null + ] }); } const CMPNAME$5 = "BasicLedFoot"; const { Open: Open$3 } = gubu_minExports.Gubu; @@ -65126,27 +66185,30 @@ function BasicLoading(props) { return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { children: "Loading..." }) }); } const { Open: Open$2 } = gubu_minExports.Gubu; -const Shape = gubu_minExports.Gubu({ - name: String, - title: String, - active: Boolean, - kind: String, - def: { - ent: String, - head: Open$2({ - active: false - }), - list: Open$2({ - active: false - }), - edit: Open$2({ - active: false - }), - foot: Open$2({ - active: false - }) - } -}, { name: "BasicLed" }); +const Shape = gubu_minExports.Gubu( + { + name: String, + title: String, + active: Boolean, + kind: String, + def: { + ent: String, + head: Open$2({ + active: false + }), + list: Open$2({ + active: false + }), + edit: Open$2({ + active: false + }), + foot: Open$2({ + active: false + }) + } + }, + { name: "BasicLed" } +); function VxgBasicLedPlugin(options) { const seneca = this; const spec = Shape(options.spec); @@ -65185,34 +66247,17 @@ function VxgBasicLedPlugin(options) { setReady(true); reply(); } - ).add( - "aim:app,on:BasicLed,modify:edit", - function(msg) { - let item = msg.item; - let fields = msg.fields; - if (null == item) return item; - item = __spreadValues({}, item); - for (const field of fields) { - if ("Date" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.locald; - } else if ("Time" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.localt; - } else if ("DateTime" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.locald + "T" + dt.localt; - } - } - return item; - } - ).message( + ).add("aim:app,on:BasicLed,modify:edit", function modify_edit(msg) { + let item = msg.item; + if (null == item) return item; + item = __spreadValues({}, item); + return item; + }).add("aim:app,on:BasicLed,modify:save", function modify_save(msg) { + let item = msg.data; + if (null == item) return item; + item = __spreadValues({}, item); + return item; + }).message( "aim:app,on:BasicLed,edit:item,redux$:true", { item_id: String }, function(msg, meta) { @@ -65241,7 +66286,7 @@ function VxgBasicLedPlugin(options) { } ).message( "aim:app,on:BasicLed,save:item", - function(msg) { + function(msg, meta) { return __async(this, null, function* () { const data = Object.entries(spec.def.edit.field).filter((n) => false !== n[1].ux.edit).reduce((a, n) => (a[n[0]] = msg.data[n[0]], a), {}); const item = yield seneca.entity(entCanon).save$(data); @@ -65270,46 +66315,10 @@ function VxgBasicLedPlugin(options) { edit: editSpec, head: headSpec, foot: footSpec - }, - util: util$1 + } } }; } -const util$1 = { - dateTimeFromUTC: (utc, tz) => { - const date = new Date(utc); - const iso = date.toISOString(); - const isod = iso.split("T")[0]; - const isot = iso.split("T")[1].split(".")[0]; - const udm = date.getUTCHours() * 60 * 60 * 1e3 + date.getUTCMinutes() * 60 * 1e3 + date.getUTCSeconds() * 1e3 + date.getUTCMilliseconds(); - let out = { - utc, - date, - isod, - isot, - udm - }; - tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; - const dateFormatter = new Intl.DateTimeFormat("en-GB", { - timeZone: tz, - year: "numeric", - month: "2-digit", - day: "2-digit" - }); - const timeFormatter = new Intl.DateTimeFormat("en-GB", { - timeZone: tz, - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - hour12: false - }); - const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); - const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); - out.locald = `${year}-${month}-${day}`; - out.localt = `${hour}:${minute}:${second}`; - return out; - } -}; VxgBasicLedPlugin.defaults = { spec: {}, navigate: Function @@ -65320,12 +66329,14 @@ function BasicLed(props) { const { ctx } = props; const { seneca } = ctx(); const name = props.spec.name; + const uniqueIdRef = useRef(seneca.util.Nid()); + const cid = name; const navigate = useNavigate(); const led = useSelector((state) => state.main.view[name]); const ready = true === (led == null ? void 0 : led.ready); if (!ready) { seneca.use({ - tag: name, + tag: cid, define: VxgBasicLedPlugin, options: { spec: props.spec, @@ -65333,13 +66344,25 @@ function BasicLed(props) { } }); } - const { head, list, edit, foot } = seneca.export("VxgBasicLedPlugin$" + name + "/spec") || {}; + const { head, list, edit, foot } = seneca.export("VxgBasicLedPlugin$" + cid + "/spec") || {}; return ready ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { className: "vxg-BasicLed", children: [ head.active && /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLedHead, { ctx, spec: head }), /* @__PURE__ */ jsxRuntimeExports.jsxs(Routes, { children: [ /* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityList, { ctx, spec: list }) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/edit/:item", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/add", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) }) + /* @__PURE__ */ jsxRuntimeExports.jsx( + Route, + { + path: "/edit/:item", + element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx( + Route, + { + path: "/add", + element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) + } + ) ] }), foot.active && /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLedFoot, { ctx, spec: foot }) ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLoading, {}); @@ -65354,12 +66377,16 @@ const BasicMainSpecShape = gubu_minExports.Gubu({ default: String } }, - view: Child$1(Open$1({ - kind: String - })), - mui: { - Box: {}, - Container: {} + view: Child$1( + Open$1({ + kind: String + }) + ), + ux: { + props: { + Box: {}, + Container: {} + } } }); function BasicMain(props) { @@ -65385,7 +66412,7 @@ function BasicMain(props) { Box$2, __spreadProps(__spreadValues({ className: "vxg-BasicMain" - }, basicMainSpec.mui.Box), { + }, basicMainSpec.ux.props.Box), { sx: (theme) => ({ // TODO: should use actual toolbar height; 16 should be from standard spacing marginTop: theme.mixins.toolbar.minHeight + 38 + "px", @@ -65393,30 +66420,33 @@ function BasicMain(props) { marginBottom: 0, marginRight: 0 }), - children: /* @__PURE__ */ jsxRuntimeExports.jsx( - Container$2, - __spreadProps(__spreadValues({}, basicMainSpec.mui.Container), { - children: View && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { ctx, spec: viewSpec }) - }) - ) + children: /* @__PURE__ */ jsxRuntimeExports.jsx(Container$2, __spreadProps(__spreadValues({}, basicMainSpec.ux.props.Container), { children: View && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { ctx, spec: viewSpec }) })) }) ); } const CMPNAME$1 = "BasicSide"; const { Child, Open, Required } = gubu_minExports.Gubu; -const BasicSideSpecShape = gubu_minExports.Gubu({ - side: { - name: String, - active: Boolean +const BasicSideSpecShape = gubu_minExports.Gubu( + { + side: { + name: String, + active: Boolean + }, + view: Child( + Open({ + title: String + }), + Required({}) + ), + // Set MUI component props directly + ux: { + props: { + Drawer: {} + } + } }, - view: Child(Open({ - title: String - }), Required({})), - // Set MUI component props directly - mui: { - Drawer: {} - } -}, { name: CMPNAME$1 }); + { name: CMPNAME$1 } +); function BasicSide(props) { const { spec, ctx } = props; const basicSideSpec = BasicSideSpecShape(spec); @@ -65437,7 +66467,10 @@ function BasicSide(props) { }) }) }); - const selectView = useCallback((view) => navigate("/view/" + view), []); + const selectView = useCallback( + (view) => navigate("/view/" + view), + [] + ); return /* @__PURE__ */ jsxRuntimeExports.jsx( Drawer$1, __spreadProps(__spreadValues({ @@ -65452,54 +66485,47 @@ function BasicSide(props) { width: "var(--vxg-side-width)" } }) - }, spec.mui.Drawer), { - children: sections.map( - (section) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Fragment, { children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - List$1, - { - className: "vxg-BasicSide-section", - "data-vxg-basicside-section": section.name, - children: section.items.map( - (item) => /* @__PURE__ */ jsxRuntimeExports.jsx( - ListItem$1, - { - disablePadding: true, - className: "vxg-BasicSide-section-item", - "data-vxg-basicside-section-item": item.name, - children: /* @__PURE__ */ jsxRuntimeExports.jsxs( - ListItemButton$1, - { - onClick: () => selectView(item.view), - children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx(ListItemIcon$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1$u, {}) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(ListItemText$1, { primary: item.title }) - ] - } - ) - }, - item.name - ) - ) - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx(Divider$1, {}) - ] }, section.name) - ) + }, spec.ux.props.Drawer), { + children: sections.map((section) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Fragment, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + List$1, + { + className: "vxg-BasicSide-section", + "data-vxg-basicside-section": section.name, + children: section.items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx( + ListItem$1, + { + disablePadding: true, + className: "vxg-BasicSide-section-item", + "data-vxg-basicside-section-item": item.name, + children: /* @__PURE__ */ jsxRuntimeExports.jsxs(ListItemButton$1, { onClick: () => selectView(item.view), children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(ListItemIcon$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1$v, {}) }), + /* @__PURE__ */ jsxRuntimeExports.jsx(ListItemText$1, { primary: item.title }) + ] }) + }, + item.name + )) + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(Divider$1, {}) + ] }, section.name)) }) ); } const CMPNAME = "BasicAdmin"; -const BasicAdminSpecShape = gubu_minExports.Gubu({ - frame: { - name: String, - kind: String, - part: {}, - view: {}, - nav: {}, - tool: {} - } -}, { name: CMPNAME }); +const BasicAdminSpecShape = gubu_minExports.Gubu( + { + frame: { + name: String, + kind: String, + part: {}, + view: {}, + nav: {}, + tool: {} + } + }, + { name: CMPNAME } +); function Loading() { return /* @__PURE__ */ jsxRuntimeExports.jsx(Container$2, { children: "LOADING" }); } @@ -65521,23 +66547,29 @@ function BasicAdmin(props) { const headSpec = { head, tool: model.app.web.frame.private.tool, - mui: { - // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ - AppBar: { style: { zIndex: 4e3 } } + ux: { + props: { + // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ + AppBar: { style: { zIndex: 4e3 } } + } } }; const sideSpec = { side, view: model.app.web.frame.private.view, - mui: { - Drawer: { style: { zIndex: 3e3 } } + ux: { + props: { + Drawer: { style: { zIndex: 3e3 } } + } } }; const mainSpec = { main: main2, view: model.app.web.frame.private.view, - mui: { - Container: { style: { zIndex: 1e3 } } + ux: { + props: { + Container: { style: { zIndex: 1e3 } } + } } }; return "done" === ready ? /* @__PURE__ */ jsxRuntimeExports.jsxs(Box$2, { className: "vxg-BasicAdmin", children: [ diff --git a/dist/voxgig-model-react.umd.js b/dist/voxgig-model-react.umd.js index 398cfbb..b105a13 100644 --- a/dist/voxgig-model-react.umd.js +++ b/dist/voxgig-model-react.umd.js @@ -1042,15 +1042,21 @@ var __async = (__this, __arguments, generator) => { } return reactJsxRuntime_development; } - var jsxRuntime = jsxRuntime$2.exports; - "use strict"; - if (process.env.NODE_ENV === "production") { - jsxRuntime$2.exports = requireReactJsxRuntime_production_min(); - } else { - jsxRuntime$2.exports = requireReactJsxRuntime_development(); + var jsxRuntime$1 = jsxRuntime$2.exports; + var hasRequiredJsxRuntime; + function requireJsxRuntime() { + if (hasRequiredJsxRuntime) return jsxRuntime$2.exports; + hasRequiredJsxRuntime = 1; + "use strict"; + if (process.env.NODE_ENV === "production") { + jsxRuntime$2.exports = requireReactJsxRuntime_production_min(); + } else { + jsxRuntime$2.exports = requireReactJsxRuntime_development(); + } + return jsxRuntime$2.exports; } - var jsxRuntimeExports = jsxRuntime$2.exports; - const jsxRuntime$1 = /* @__PURE__ */ getDefaultExportFromCjs(jsxRuntimeExports); + var jsxRuntimeExports = requireJsxRuntime(); + const jsxRuntime = /* @__PURE__ */ getDefaultExportFromCjs(jsxRuntimeExports); var gubu_min$2 = { exports: {} }; var gubu_min = gubu_min$2.exports; (function(module2, exports3) { @@ -1696,26 +1702,38 @@ var __async = (__this, __arguments, generator) => { var gubu_minExports = gubu_min$2.exports; const gubu_min$1 = /* @__PURE__ */ getDefaultExportFromCjs(gubu_minExports); function cmap(o, p) { - return Object.entries(o).reduce((r2, n, _2) => (_2 = Object.entries(p).reduce((s, m) => cmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) - "function" === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], - self: n[1], - key: n[0], - parent: o - }) : m[1], cmap.FILTER === s[m[0]] ? cmap.FILTER : s), {}), cmap.FILTER === _2 ? 0 : r2[n[0]] = _2, r2), {}); + return Object.entries(o).reduce( + (r2, n, _2) => (_2 = Object.entries(p).reduce( + (s, m) => cmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) + "function" === typeof m[1] ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o + }) : m[1], cmap.FILTER === s[m[0]] ? cmap.FILTER : s), + {} + ), cmap.FILTER === _2 ? 0 : r2[n[0]] = _2, r2), + {} + ); } cmap.COPY = (x) => x; cmap.FILTER = (x) => "function" === typeof x ? (y, p, _2) => (_2 = x(y, p), Array.isArray(_2) ? !_2[0] ? _2[1] : cmap.FILTER : _2) : x ? x : cmap.FILTER; cmap.KEY = (_2, p) => p.key; function vmap(o, p) { - return Object.entries(o).reduce((r2, n, _2) => (_2 = Object.entries(p).reduce((s, m) => vmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) - // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] - "function" === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], - self: n[1], - key: n[0], - parent: o - }) : m[1], vmap.FILTER === s[m[0]] ? vmap.FILTER : s), {}), vmap.FILTER === _2 ? 0 : r2.push(_2), r2), []); + return Object.entries(o).reduce( + (r2, n, _2) => (_2 = Object.entries(p).reduce( + (s, m) => vmap.FILTER === s ? s : (s[m[0]] = // transfom(val,key,current,parentkey,parent) + // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] + "function" === typeof m[1] ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o + }) : m[1], vmap.FILTER === s[m[0]] ? vmap.FILTER : s), + {} + ), vmap.FILTER === _2 ? 0 : r2.push(_2), r2), + [] + ); } vmap.COPY = (x) => x; vmap.FILTER = (x) => "function" === typeof x ? (y, p, _2) => (_2 = x(y, p), Array.isArray(_2) ? !_2[0] ? _2[1] : vmap.FILTER : _2) : x ? x : vmap.FILTER; @@ -1727,6 +1745,52 @@ var __async = (__this, __arguments, generator) => { } return params; } + function resvalue(value, cat, mapFn) { + const { item: items, multiple } = cat; + if (!value) { + return multiple === 1 ? "" : []; + } + if (Object.keys(items).length === 0) { + return multiple === 1 ? "" : []; + } + if (Array.isArray(value)) { + return multiple === 1 && value[0] ? value[0] : value.slice(0, multiple); + } + if (typeof value === "object") { + return multiple === 1 ? value : [value]; + } + const splitValue = value.split(","); + const mapValue = (val) => items[val] ? mapFn(val, items[val]) : void 0; + switch (multiple) { + case 1: + return mapValue(splitValue[0]) || ""; + case -1: + return splitValue.map(mapValue).filter(Boolean) || []; + default: + return splitValue.slice(0, multiple).map(mapValue).filter(Boolean); + } + } + function resdefault(cat, mapFn) { + const { multiple, item: items, default: defaultValues } = cat; + if (Object.keys(items).length === 0) { + return multiple === 1 ? "" : []; + } + const defaultItems = defaultValues.split(","); + const mapResolvedDefault = (list) => list.map((val) => items[val] ? mapFn(val, items[val]) : void 0); + switch (multiple) { + case 1: + return defaultItems[0] ? mapFn(defaultItems[0], items[defaultItems[0]]) : ""; + case -1: + return mapResolvedDefault(defaultItems).filter(Boolean) || []; + default: + return mapResolvedDefault(defaultItems.slice(0, multiple)).filter(Boolean) || []; + } + } + function useSanitizedId() { + const id = React$1.useId(); + const sanitizedId = id.replace(/[^a-zA-Z0-9_]/g, "x"); + return sanitizedId; + } function VxgBasicAdminPlugin() { const seneca = this; const { Exact: Exact2, Default } = seneca.valid; @@ -1751,7 +1815,10 @@ var __async = (__this, __arguments, generator) => { }); function setPath(msg, meta) { return __async(this, null, function* () { - const q = Object.entries(msg.query).reduce((s, n) => s + ("" === s ? "?" : "") + (encodeURIComponent(n[0]) + "=" + encodeURIComponent(n[1])), ""); + const q = Object.entries(msg.query).reduce( + (s, n) => s + ("" === s ? "?" : "") + (encodeURIComponent(n[0]) + "=" + encodeURIComponent(n[1])), + "" + ); const path = "/view/" + msg.view + q; msg.navigate(path); }); @@ -1784,7 +1851,12 @@ var __async = (__this, __arguments, generator) => { }; const viewState = cmap(viewMap, { name: cmap.COPY, - active: cmap.FILTER + active: cmap.FILTER, + alert: { + active: false, + message: "", + level: "info" + } }); state.view = viewState; state.nav = { @@ -2860,6 +2932,7 @@ var __async = (__this, __arguments, generator) => { })(objectWithoutPropertiesLoose$1); return objectWithoutPropertiesLoose$1.exports; } + var isDevelopment = false; function sheetForTag(tag) { if (tag.sheet) { return tag.sheet; @@ -2869,6 +2942,7 @@ var __async = (__this, __arguments, generator) => { return document.styleSheets[i]; } } + return void 0; } function createStyleElement(options) { var tag = document.createElement("style"); @@ -2899,7 +2973,7 @@ var __async = (__this, __arguments, generator) => { _this.container.insertBefore(tag, before); _this.tags.push(tag); }; - this.isSpeedy = options.speedy === void 0 ? process.env.NODE_ENV === "production" : options.speedy; + this.isSpeedy = options.speedy === void 0 ? !isDevelopment : options.speedy; this.tags = []; this.ctr = 0; this.nonce = options.nonce; @@ -2918,21 +2992,11 @@ var __async = (__this, __arguments, generator) => { this._insertTag(createStyleElement(this)); } var tag = this.tags[this.tags.length - 1]; - if (process.env.NODE_ENV !== "production") { - var isImportRule2 = rule.charCodeAt(0) === 64 && rule.charCodeAt(1) === 105; - if (isImportRule2 && this._alreadyInsertedOrderInsensitiveRule) { - console.error("You're attempting to insert the following rule:\n" + rule + "\n\n`@import` rules must be before all other types of rules in a stylesheet but other rules have already been inserted. Please ensure that `@import` rules are before all other rules."); - } - this._alreadyInsertedOrderInsensitiveRule = this._alreadyInsertedOrderInsensitiveRule || !isImportRule2; - } if (this.isSpeedy) { var sheet = sheetForTag(tag); try { sheet.insertRule(rule, sheet.cssRules.length); } catch (e) { - if (process.env.NODE_ENV !== "production" && !/:(-moz-placeholder|-moz-focus-inner|-moz-focusring|-ms-input-placeholder|-moz-read-write|-moz-read-only|-ms-clear|-ms-expand|-ms-reveal){/.test(rule)) { - console.error('There was a problem inserting the following rule: "' + rule + '"', e); - } } } else { tag.appendChild(document.createTextNode(rule)); @@ -2941,13 +3005,11 @@ var __async = (__this, __arguments, generator) => { }; _proto.flush = function flush() { this.tags.forEach(function(tag) { - return tag.parentNode && tag.parentNode.removeChild(tag); + var _tag$parentNode; + return (_tag$parentNode = tag.parentNode) == null ? void 0 : _tag$parentNode.removeChild(tag); }); this.tags = []; this.ctr = 0; - if (process.env.NODE_ENV !== "production") { - this._alreadyInsertedOrderInsensitiveRule = false; - } }; return StyleSheet2; }(); @@ -3632,68 +3694,6 @@ var __async = (__this, __arguments, generator) => { } } }; - var ignoreFlag = "emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason"; - var isIgnoringComment = function isIgnoringComment2(element) { - return element.type === "comm" && element.children.indexOf(ignoreFlag) > -1; - }; - var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm2(cache2) { - return function(element, index2, children) { - if (element.type !== "rule" || cache2.compat) return; - var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g); - if (unsafePseudoClasses) { - var isNested = !!element.parent; - var commentContainer = isNested ? element.parent.children : ( - // global rule at the root level - children - ); - for (var i = commentContainer.length - 1; i >= 0; i--) { - var node2 = commentContainer[i]; - if (node2.line < element.line) { - break; - } - if (node2.column < element.column) { - if (isIgnoringComment(node2)) { - return; - } - break; - } - } - unsafePseudoClasses.forEach(function(unsafePseudoClass) { - console.error('The pseudo class "' + unsafePseudoClass + '" is potentially unsafe when doing server-side rendering. Try changing it to "' + unsafePseudoClass.split("-child")[0] + '-of-type".'); - }); - } - }; - }; - var isImportRule = function isImportRule2(element) { - return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64; - }; - var isPrependedWithRegularRules = function isPrependedWithRegularRules2(index2, children) { - for (var i = index2 - 1; i >= 0; i--) { - if (!isImportRule(children[i])) { - return true; - } - } - return false; - }; - var nullifyElement = function nullifyElement2(element) { - element.type = ""; - element.value = ""; - element["return"] = ""; - element.children = ""; - element.props = ""; - }; - var incorrectImportAlarm = function incorrectImportAlarm2(element, index2, children) { - if (!isImportRule(element)) { - return; - } - if (element.parent) { - console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."); - nullifyElement(element); - } else if (isPrependedWithRegularRules(index2, children)) { - console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."); - nullifyElement(element); - } - }; function prefix(value, length2) { switch (hash$2(value, length2)) { case 5103: @@ -3840,9 +3840,6 @@ var __async = (__this, __arguments, generator) => { var defaultStylisPlugins = [prefixer]; var createCache = function createCache2(options) { var key = options.key; - if (process.env.NODE_ENV !== "production" && !key) { - throw new Error("You have to configure `key` for your cache. Please make sure it's unique (and not equal to 'css') as it's used for linking styles to your cache.\nIf multiple caches share the same key they might \"fight\" for each other's style elements."); - } if (key === "css") { var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); Array.prototype.forEach.call(ssrStyles, function(node2) { @@ -3855,11 +3852,6 @@ var __async = (__this, __arguments, generator) => { }); } var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; - if (process.env.NODE_ENV !== "production") { - if (/[^a-z-]/.test(key)) { - throw new Error('Emotion key must only contain lower case alphabetical characters and - but "' + key + '" was passed'); - } - } var inserted = {}; var container; var nodesToHydrate = []; @@ -3880,24 +3872,9 @@ var __async = (__this, __arguments, generator) => { } var _insert; var omnipresentPlugins = [compat, removeLabel]; - if (process.env.NODE_ENV !== "production") { - omnipresentPlugins.push(createUnsafeSelectorsAlarm({ - get compat() { - return cache2.compat; - } - }), incorrectImportAlarm); - } { var currentSheet; - var finalizingPlugins = [stringify, process.env.NODE_ENV !== "production" ? function(element) { - if (!element.root) { - if (element["return"]) { - currentSheet.insert(element["return"]); - } else if (element.value && element.type !== COMMENT) { - currentSheet.insert(element.value + "{}"); - } - } - } : rulesheet(function(rule) { + var finalizingPlugins = [stringify, rulesheet(function(rule) { currentSheet.insert(rule); })]; var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); @@ -3906,13 +3883,6 @@ var __async = (__this, __arguments, generator) => { }; _insert = function insert2(selector, serialized, sheet, shouldCache) { currentSheet = sheet; - if (process.env.NODE_ENV !== "production" && serialized.map !== void 0) { - currentSheet = { - insert: function insert3(rule) { - sheet.insert(rule + serialized.map); - } - }; - } stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); if (shouldCache) { cache2.inserted[serialized.name] = true; @@ -5604,21 +5574,21 @@ var __async = (__this, __arguments, generator) => { }, Symbol.toStringTag, { value: "Module" })); const require$$8 = /* @__PURE__ */ getAugmentedNamespace(styleFunctionSx); "use strict"; - var _interopRequireDefault$z = interopRequireDefaultExports; + var _interopRequireDefault$A = interopRequireDefaultExports; Object.defineProperty(createStyled$2, "__esModule", { value: true }); - var _default$z = createStyled$2.default = createStyled$1; + var _default$A = createStyled$2.default = createStyled$1; var shouldForwardProp_1 = createStyled$2.shouldForwardProp = shouldForwardProp$1; var systemDefaultTheme_1 = createStyled$2.systemDefaultTheme = void 0; - var _extends2 = _interopRequireDefault$z(require_extends()); - var _objectWithoutPropertiesLoose2 = _interopRequireDefault$z(requireObjectWithoutPropertiesLoose()); + var _extends2 = _interopRequireDefault$A(require_extends()); + var _objectWithoutPropertiesLoose2 = _interopRequireDefault$A(requireObjectWithoutPropertiesLoose()); var _styledEngine$1 = _interopRequireWildcard$1(require$$1$1); var _deepmerge = require$$4; - var _capitalize = _interopRequireDefault$z(require$$5); - var _getDisplayName = _interopRequireDefault$z(require$$6); - var _createTheme = _interopRequireDefault$z(require$$7); - var _styleFunctionSx = _interopRequireDefault$z(require$$8); + var _capitalize = _interopRequireDefault$A(require$$5); + var _getDisplayName = _interopRequireDefault$A(require$$6); + var _createTheme = _interopRequireDefault$A(require$$7); + var _styleFunctionSx = _interopRequireDefault$A(require$$8); const _excluded$2i = ["ownerState"], _excluded2$i = ["variants"], _excluded3$7 = ["name", "slot", "skipVariantsResolver", "skipSx", "overridesResolver"]; function _getRequireWildcardCache$1(e) { if ("function" != typeof WeakMap) return null; @@ -5908,7 +5878,7 @@ var __async = (__this, __arguments, generator) => { }, Symbol.toStringTag, { value: "Module" })); const require$$2 = /* @__PURE__ */ getAugmentedNamespace(clamp); "use strict"; - var _interopRequireDefault$y = interopRequireDefaultExports; + var _interopRequireDefault$z = interopRequireDefaultExports; Object.defineProperty(colorManipulator, "__esModule", { value: true }); @@ -5930,8 +5900,8 @@ var __async = (__this, __arguments, generator) => { var private_safeLighten_1 = colorManipulator.private_safeLighten = private_safeLighten$1; var recomposeColor_1 = colorManipulator.recomposeColor = recomposeColor$1; var rgbToHex_1 = colorManipulator.rgbToHex = rgbToHex$1; - var _formatMuiErrorMessage2 = _interopRequireDefault$y(require$$1); - var _clamp = _interopRequireDefault$y(require$$2); + var _formatMuiErrorMessage2 = _interopRequireDefault$z(require$$1); + var _clamp = _interopRequireDefault$z(require$$2); function clampWrapper$1(value, min2 = 0, max2 = 1) { if (process.env.NODE_ENV !== "production") { if (value < min2 || value > max2) { @@ -6822,7 +6792,7 @@ Please use another name.` : formatMuiErrorMessage$1(18)); } const rootShouldForwardProp = (prop) => slotShouldForwardProp(prop) && prop !== "classes"; "use client"; - const styled$1 = _default$z({ + const styled$1 = _default$A({ themeId: THEME_ID, defaultTheme: defaultTheme$5, rootShouldForwardProp @@ -10696,8 +10666,8 @@ try { */ variant: PropTypes.oneOfType([PropTypes.oneOf(["dense", "regular"]), PropTypes.string]) } : void 0; - const CMPNAME$c = "BasicAccountTool"; - console.log(CMPNAME$c, "1"); + const CMPNAME$r = "BasicAccountTool"; + console.log(CMPNAME$r, "1"); const { Exact: Exact$2 } = gubu_minExports.Gubu; const BasicAccountToolSpecShape = gubu_minExports.Gubu({ name: String, @@ -10707,7 +10677,7 @@ try { attr: {}, sx: {}, style: {} - }, { name: CMPNAME$c }); + }, { name: CMPNAME$r }); function BasicAccountTool(props) { var _a; const { ctx, spec } = props; @@ -10781,8 +10751,8 @@ try { children: `${parts.join("")}` }; } - const CMPNAME$b = "BasicHeadTool"; - console.log(CMPNAME$b, "1"); + const CMPNAME$q = "BasicHeadTool"; + console.log(CMPNAME$q, "1"); const { Exact: Exact$1 } = gubu_minExports.Gubu; const BasicHeadToolSpecShape = gubu_minExports.Gubu({ name: String, @@ -10792,7 +10762,7 @@ try { attr: {}, sx: {}, style: {} - }, { name: CMPNAME$b }); + }, { name: CMPNAME$q }); function BasicHeadTool(props) { const { ctx, spec } = props; const { seneca } = ctx(); @@ -10801,7 +10771,7 @@ try { const { name, kind, attr, sx, style: style2 } = basicHeadToolSpec; let tool = /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}); if ("" === kind) { - console.warn(CMPNAME$b, "empty-tool-kind", basicHeadToolSpec); + console.warn(CMPNAME$q, "empty-tool-kind", basicHeadToolSpec); } else if ("logo" === kind) { tool = /* @__PURE__ */ jsxRuntimeExports.jsxs( "div", @@ -10818,7 +10788,7 @@ try { { href: "/", style: style2, - className: `vxg-${CMPNAME$b}-logo`, + className: `vxg-${CMPNAME$q}-logo`, children: /* @__PURE__ */ jsxRuntimeExports.jsx("img", { src: attr.img }) } ), @@ -10850,27 +10820,34 @@ try { } else if ("account" === kind) { tool = /* @__PURE__ */ jsxRuntimeExports.jsx(BasicAccountTool, { ctx, spec }); } else { - console.warn(CMPNAME$b, "unknown-tool-kind", kind, basicHeadToolSpec); + console.warn(CMPNAME$q, "unknown-tool-kind", kind, basicHeadToolSpec); } return tool; } - const CMPNAME$a = "BasicHead"; - const { Child: Child$5, Exact, Open: Open$8, Required: Required$1 } = gubu_minExports.Gubu; - const BasicHeadSpecShape = gubu_minExports.Gubu({ - head: { - name: String, - active: Boolean, - tool: Child$5(Open$8({ - align: Exact("left", "right") - })) + const CMPNAME$p = "BasicHead"; + const { Child: Child$6, Exact, Open: Open$o, Required: Required$1 } = gubu_minExports.Gubu; + const BasicHeadSpecShape = gubu_minExports.Gubu( + { + head: { + name: String, + active: Boolean, + tool: Child$6( + Open$o({ + align: Exact("left", "right") + }) + ) + }, + tool: Required$1({}), + // Set MUI component props directly + ux: { + props: { + AppBar: {}, + ToolBar: {} + } + } }, - tool: Required$1({}), - // Set MUI component props directly - mui: { - AppBar: {}, - ToolBar: {} - } - }, { name: CMPNAME$a }); + { name: CMPNAME$p } + ); function BasicHead(props) { const { ctx, spec } = props; const { seneca } = ctx(); @@ -10881,36 +10858,26 @@ try { active: vmap2.FILTER, name: vmap2.FILTER((_2, p) => { var _a; - return [(_a = basicHeadSpec.tool[p.key]) == null ? void 0 : _a.active, p.key]; + return [ + (_a = basicHeadSpec.tool[p.key]) == null ? void 0 : _a.active, + p.key + ]; }), align: vmap2.COPY }).map((t) => __spreadValues(__spreadValues({}, basicHeadSpec.tool[t.name]), t)); const leftTools = tools.filter((t) => "left" === t.align); const rightTools = tools.filter((t) => "right" === t.align); - return /* @__PURE__ */ jsxRuntimeExports.jsx( - AppBar, - __spreadProps(__spreadValues({ - className: "vxg-BasicHead" - }, spec.mui.AppBar), { - children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Toolbar, __spreadProps(__spreadValues({ className: "vxg-BasicHead-toolbar" }, spec.mui.ToolBar), { children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - "div", - { - className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-left", - children: leftTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx( - "div", - { - className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-right", - style: { marginLeft: "auto" }, - children: rightTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) - } - ) - ] })) - }) - ); + return /* @__PURE__ */ jsxRuntimeExports.jsx(AppBar, __spreadProps(__spreadValues({ className: "vxg-BasicHead" }, spec.ux.props.AppBar), { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Toolbar, __spreadProps(__spreadValues({ className: "vxg-BasicHead-toolbar" }, spec.ux.props.ToolBar), { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-left", children: leftTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + "div", + { + className: "vxg-BasicHead-toolbar vxg-BasicHead-toolbar-right", + style: { marginLeft: "auto" }, + children: rightTools.map((t) => /* @__PURE__ */ jsxRuntimeExports.jsx(BasicHeadTool, { ctx, spec: t }, t.name)) + } + ) + ] })) })); } /** * table-core @@ -17661,7 +17628,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha Object.defineProperty(useThemeWithoutDefault, "__esModule", { value: true }); - var default_1$y = useThemeWithoutDefault.default = void 0; + var default_1$z = useThemeWithoutDefault.default = void 0; var React = _interopRequireWildcard(React$1); var _styledEngine = require$$1$1; function _getRequireWildcardCache(e) { @@ -17690,7 +17657,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const contextTheme = React.useContext(_styledEngine.ThemeContext); return !contextTheme || isObjectEmpty(contextTheme) ? defaultTheme2 : contextTheme; } - var _default$y = default_1$y = useThemeWithoutDefault.default = useTheme; + var _default$z = default_1$z = useThemeWithoutDefault.default = useTheme; var top = "top"; var bottom = "bottom"; var right = "right"; @@ -19472,7 +19439,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha })({}); const Popper = /* @__PURE__ */ React__namespace.forwardRef(function Popper2(inProps, ref) { var _slots$root; - const theme = default_1$y(); + const theme = default_1$z(); const props = useDefaultProps({ props: inProps, name: "MuiPopper" @@ -25413,450 +25380,450 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } "use strict"; "use client"; - var _interopRequireDefault$x = interopRequireDefaultExports; + var _interopRequireDefault$y = interopRequireDefaultExports; Object.defineProperty(ArrowDownward, "__esModule", { value: true }); - var default_1$x = ArrowDownward.default = void 0; - var _createSvgIcon$x = _interopRequireDefault$x(requireCreateSvgIcon()); - var _jsxRuntime$x = jsxRuntimeExports; - var _default$x = default_1$x = ArrowDownward.default = (0, _createSvgIcon$x.default)(/* @__PURE__ */ (0, _jsxRuntime$x.jsx)("path", { + var default_1$y = ArrowDownward.default = void 0; + var _createSvgIcon$y = _interopRequireDefault$y(requireCreateSvgIcon()); + var _jsxRuntime$y = requireJsxRuntime(); + var _default$y = default_1$y = ArrowDownward.default = (0, _createSvgIcon$y.default)(/* @__PURE__ */ (0, _jsxRuntime$y.jsx)("path", { d: "m20 12-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8z" }), "ArrowDownward"); var ArrowRight = {}; "use strict"; "use client"; - var _interopRequireDefault$w = interopRequireDefaultExports; + var _interopRequireDefault$x = interopRequireDefaultExports; Object.defineProperty(ArrowRight, "__esModule", { value: true }); - var default_1$w = ArrowRight.default = void 0; - var _createSvgIcon$w = _interopRequireDefault$w(requireCreateSvgIcon()); - var _jsxRuntime$w = jsxRuntimeExports; - var _default$w = default_1$w = ArrowRight.default = (0, _createSvgIcon$w.default)(/* @__PURE__ */ (0, _jsxRuntime$w.jsx)("path", { + var default_1$x = ArrowRight.default = void 0; + var _createSvgIcon$x = _interopRequireDefault$x(requireCreateSvgIcon()); + var _jsxRuntime$x = requireJsxRuntime(); + var _default$x = default_1$x = ArrowRight.default = (0, _createSvgIcon$x.default)(/* @__PURE__ */ (0, _jsxRuntime$x.jsx)("path", { d: "m10 17 5-5-5-5z" }), "ArrowRight"); var Cancel = {}; "use strict"; "use client"; - var _interopRequireDefault$v = interopRequireDefaultExports; + var _interopRequireDefault$w = interopRequireDefaultExports; Object.defineProperty(Cancel, "__esModule", { value: true }); - var default_1$v = Cancel.default = void 0; - var _createSvgIcon$v = _interopRequireDefault$v(requireCreateSvgIcon()); - var _jsxRuntime$v = jsxRuntimeExports; - var _default$v = default_1$v = Cancel.default = (0, _createSvgIcon$v.default)(/* @__PURE__ */ (0, _jsxRuntime$v.jsx)("path", { + var default_1$w = Cancel.default = void 0; + var _createSvgIcon$w = _interopRequireDefault$w(requireCreateSvgIcon()); + var _jsxRuntime$w = requireJsxRuntime(); + var _default$w = default_1$w = Cancel.default = (0, _createSvgIcon$w.default)(/* @__PURE__ */ (0, _jsxRuntime$w.jsx)("path", { d: "M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2m5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12z" }), "Cancel"); var ChevronLeft = {}; "use strict"; "use client"; - var _interopRequireDefault$u = interopRequireDefaultExports; + var _interopRequireDefault$v = interopRequireDefaultExports; Object.defineProperty(ChevronLeft, "__esModule", { value: true }); - var default_1$u = ChevronLeft.default = void 0; - var _createSvgIcon$u = _interopRequireDefault$u(requireCreateSvgIcon()); - var _jsxRuntime$u = jsxRuntimeExports; - var _default$u = default_1$u = ChevronLeft.default = (0, _createSvgIcon$u.default)(/* @__PURE__ */ (0, _jsxRuntime$u.jsx)("path", { + var default_1$v = ChevronLeft.default = void 0; + var _createSvgIcon$v = _interopRequireDefault$v(requireCreateSvgIcon()); + var _jsxRuntime$v = requireJsxRuntime(); + var _default$v = default_1$v = ChevronLeft.default = (0, _createSvgIcon$v.default)(/* @__PURE__ */ (0, _jsxRuntime$v.jsx)("path", { d: "M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z" }), "ChevronLeft"); var ChevronRight = {}; "use strict"; "use client"; - var _interopRequireDefault$t = interopRequireDefaultExports; + var _interopRequireDefault$u = interopRequireDefaultExports; Object.defineProperty(ChevronRight, "__esModule", { value: true }); - var default_1$t = ChevronRight.default = void 0; - var _createSvgIcon$t = _interopRequireDefault$t(requireCreateSvgIcon()); - var _jsxRuntime$t = jsxRuntimeExports; - var _default$t = default_1$t = ChevronRight.default = (0, _createSvgIcon$t.default)(/* @__PURE__ */ (0, _jsxRuntime$t.jsx)("path", { + var default_1$u = ChevronRight.default = void 0; + var _createSvgIcon$u = _interopRequireDefault$u(requireCreateSvgIcon()); + var _jsxRuntime$u = requireJsxRuntime(); + var _default$u = default_1$u = ChevronRight.default = (0, _createSvgIcon$u.default)(/* @__PURE__ */ (0, _jsxRuntime$u.jsx)("path", { d: "M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" }), "ChevronRight"); var ClearAll = {}; "use strict"; "use client"; - var _interopRequireDefault$s = interopRequireDefaultExports; + var _interopRequireDefault$t = interopRequireDefaultExports; Object.defineProperty(ClearAll, "__esModule", { value: true }); - var default_1$s = ClearAll.default = void 0; - var _createSvgIcon$s = _interopRequireDefault$s(requireCreateSvgIcon()); - var _jsxRuntime$s = jsxRuntimeExports; - var _default$s = default_1$s = ClearAll.default = (0, _createSvgIcon$s.default)(/* @__PURE__ */ (0, _jsxRuntime$s.jsx)("path", { + var default_1$t = ClearAll.default = void 0; + var _createSvgIcon$t = _interopRequireDefault$t(requireCreateSvgIcon()); + var _jsxRuntime$t = requireJsxRuntime(); + var _default$t = default_1$t = ClearAll.default = (0, _createSvgIcon$t.default)(/* @__PURE__ */ (0, _jsxRuntime$t.jsx)("path", { d: "M5 13h14v-2H5zm-2 4h14v-2H3zM7 7v2h14V7z" }), "ClearAll"); var Close = {}; "use strict"; "use client"; - var _interopRequireDefault$r = interopRequireDefaultExports; + var _interopRequireDefault$s = interopRequireDefaultExports; Object.defineProperty(Close, "__esModule", { value: true }); - var default_1$r = Close.default = void 0; - var _createSvgIcon$r = _interopRequireDefault$r(requireCreateSvgIcon()); - var _jsxRuntime$r = jsxRuntimeExports; - var _default$r = default_1$r = Close.default = (0, _createSvgIcon$r.default)(/* @__PURE__ */ (0, _jsxRuntime$r.jsx)("path", { + var default_1$s = Close.default = void 0; + var _createSvgIcon$s = _interopRequireDefault$s(requireCreateSvgIcon()); + var _jsxRuntime$s = requireJsxRuntime(); + var _default$s = default_1$s = Close.default = (0, _createSvgIcon$s.default)(/* @__PURE__ */ (0, _jsxRuntime$s.jsx)("path", { d: "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" }), "Close"); var ContentCopy = {}; "use strict"; "use client"; - var _interopRequireDefault$q = interopRequireDefaultExports; + var _interopRequireDefault$r = interopRequireDefaultExports; Object.defineProperty(ContentCopy, "__esModule", { value: true }); - var default_1$q = ContentCopy.default = void 0; - var _createSvgIcon$q = _interopRequireDefault$q(requireCreateSvgIcon()); - var _jsxRuntime$q = jsxRuntimeExports; - var _default$q = default_1$q = ContentCopy.default = (0, _createSvgIcon$q.default)(/* @__PURE__ */ (0, _jsxRuntime$q.jsx)("path", { + var default_1$r = ContentCopy.default = void 0; + var _createSvgIcon$r = _interopRequireDefault$r(requireCreateSvgIcon()); + var _jsxRuntime$r = requireJsxRuntime(); + var _default$r = default_1$r = ContentCopy.default = (0, _createSvgIcon$r.default)(/* @__PURE__ */ (0, _jsxRuntime$r.jsx)("path", { d: "M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2m0 16H8V7h11z" }), "ContentCopy"); var DensityLarge = {}; "use strict"; "use client"; - var _interopRequireDefault$p = interopRequireDefaultExports; + var _interopRequireDefault$q = interopRequireDefaultExports; Object.defineProperty(DensityLarge, "__esModule", { value: true }); - var default_1$p = DensityLarge.default = void 0; - var _createSvgIcon$p = _interopRequireDefault$p(requireCreateSvgIcon()); - var _jsxRuntime$p = jsxRuntimeExports; - var _default$p = default_1$p = DensityLarge.default = (0, _createSvgIcon$p.default)(/* @__PURE__ */ (0, _jsxRuntime$p.jsx)("path", { + var default_1$q = DensityLarge.default = void 0; + var _createSvgIcon$q = _interopRequireDefault$q(requireCreateSvgIcon()); + var _jsxRuntime$q = requireJsxRuntime(); + var _default$q = default_1$q = DensityLarge.default = (0, _createSvgIcon$q.default)(/* @__PURE__ */ (0, _jsxRuntime$q.jsx)("path", { d: "M3 3h18v2H3zm0 16h18v2H3z" }), "DensityLarge"); var DensityMedium = {}; "use strict"; "use client"; - var _interopRequireDefault$o = interopRequireDefaultExports; + var _interopRequireDefault$p = interopRequireDefaultExports; Object.defineProperty(DensityMedium, "__esModule", { value: true }); - var default_1$o = DensityMedium.default = void 0; - var _createSvgIcon$o = _interopRequireDefault$o(requireCreateSvgIcon()); - var _jsxRuntime$o = jsxRuntimeExports; - var _default$o = default_1$o = DensityMedium.default = (0, _createSvgIcon$o.default)(/* @__PURE__ */ (0, _jsxRuntime$o.jsx)("path", { + var default_1$p = DensityMedium.default = void 0; + var _createSvgIcon$p = _interopRequireDefault$p(requireCreateSvgIcon()); + var _jsxRuntime$p = requireJsxRuntime(); + var _default$p = default_1$p = DensityMedium.default = (0, _createSvgIcon$p.default)(/* @__PURE__ */ (0, _jsxRuntime$p.jsx)("path", { d: "M3 3h18v2H3zm0 16h18v2H3zm0-8h18v2H3z" }), "DensityMedium"); var DensitySmall = {}; "use strict"; "use client"; - var _interopRequireDefault$n = interopRequireDefaultExports; + var _interopRequireDefault$o = interopRequireDefaultExports; Object.defineProperty(DensitySmall, "__esModule", { value: true }); - var default_1$n = DensitySmall.default = void 0; - var _createSvgIcon$n = _interopRequireDefault$n(requireCreateSvgIcon()); - var _jsxRuntime$n = jsxRuntimeExports; - var _default$n = default_1$n = DensitySmall.default = (0, _createSvgIcon$n.default)(/* @__PURE__ */ (0, _jsxRuntime$n.jsx)("path", { + var default_1$o = DensitySmall.default = void 0; + var _createSvgIcon$o = _interopRequireDefault$o(requireCreateSvgIcon()); + var _jsxRuntime$o = requireJsxRuntime(); + var _default$o = default_1$o = DensitySmall.default = (0, _createSvgIcon$o.default)(/* @__PURE__ */ (0, _jsxRuntime$o.jsx)("path", { d: "M3 2h18v2H3zm0 18h18v2H3zm0-6h18v2H3zm0-6h18v2H3z" }), "DensitySmall"); var DragHandle = {}; "use strict"; "use client"; - var _interopRequireDefault$m = interopRequireDefaultExports; + var _interopRequireDefault$n = interopRequireDefaultExports; Object.defineProperty(DragHandle, "__esModule", { value: true }); - var default_1$m = DragHandle.default = void 0; - var _createSvgIcon$m = _interopRequireDefault$m(requireCreateSvgIcon()); - var _jsxRuntime$m = jsxRuntimeExports; - var _default$m = default_1$m = DragHandle.default = (0, _createSvgIcon$m.default)(/* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { + var default_1$n = DragHandle.default = void 0; + var _createSvgIcon$n = _interopRequireDefault$n(requireCreateSvgIcon()); + var _jsxRuntime$n = requireJsxRuntime(); + var _default$n = default_1$n = DragHandle.default = (0, _createSvgIcon$n.default)(/* @__PURE__ */ (0, _jsxRuntime$n.jsx)("path", { d: "M20 9H4v2h16zM4 15h16v-2H4z" }), "DragHandle"); var DynamicFeed = {}; "use strict"; "use client"; - var _interopRequireDefault$l = interopRequireDefaultExports; + var _interopRequireDefault$m = interopRequireDefaultExports; Object.defineProperty(DynamicFeed, "__esModule", { value: true }); - var default_1$l = DynamicFeed.default = void 0; - var _createSvgIcon$l = _interopRequireDefault$l(requireCreateSvgIcon()); - var _jsxRuntime$l = jsxRuntimeExports; - var _default$l = default_1$l = DynamicFeed.default = (0, _createSvgIcon$l.default)([/* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { + var default_1$m = DynamicFeed.default = void 0; + var _createSvgIcon$m = _interopRequireDefault$m(requireCreateSvgIcon()); + var _jsxRuntime$m = requireJsxRuntime(); + var _default$m = default_1$m = DynamicFeed.default = (0, _createSvgIcon$m.default)([/* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { d: "M8 8H6v7c0 1.1.9 2 2 2h9v-2H8z" - }, "0"), /* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { + }, "0"), /* @__PURE__ */ (0, _jsxRuntime$m.jsx)("path", { d: "M20 3h-8c-1.1 0-2 .9-2 2v6c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 8h-8V7h8zM4 12H2v7c0 1.1.9 2 2 2h9v-2H4z" }, "1")], "DynamicFeed"); var Edit = {}; "use strict"; "use client"; - var _interopRequireDefault$k = interopRequireDefaultExports; + var _interopRequireDefault$l = interopRequireDefaultExports; Object.defineProperty(Edit, "__esModule", { value: true }); - var default_1$k = Edit.default = void 0; - var _createSvgIcon$k = _interopRequireDefault$k(requireCreateSvgIcon()); - var _jsxRuntime$k = jsxRuntimeExports; - var _default$k = default_1$k = Edit.default = (0, _createSvgIcon$k.default)(/* @__PURE__ */ (0, _jsxRuntime$k.jsx)("path", { + var default_1$l = Edit.default = void 0; + var _createSvgIcon$l = _interopRequireDefault$l(requireCreateSvgIcon()); + var _jsxRuntime$l = requireJsxRuntime(); + var _default$l = default_1$l = Edit.default = (0, _createSvgIcon$l.default)(/* @__PURE__ */ (0, _jsxRuntime$l.jsx)("path", { d: "M3 17.25V21h3.75L17.81 9.94l-3.75-3.75zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34a.9959.9959 0 0 0-1.41 0l-1.83 1.83 3.75 3.75z" }), "Edit"); var ExpandMore = {}; "use strict"; "use client"; - var _interopRequireDefault$j = interopRequireDefaultExports; + var _interopRequireDefault$k = interopRequireDefaultExports; Object.defineProperty(ExpandMore, "__esModule", { value: true }); - var default_1$j = ExpandMore.default = void 0; - var _createSvgIcon$j = _interopRequireDefault$j(requireCreateSvgIcon()); - var _jsxRuntime$j = jsxRuntimeExports; - var _default$j = default_1$j = ExpandMore.default = (0, _createSvgIcon$j.default)(/* @__PURE__ */ (0, _jsxRuntime$j.jsx)("path", { + var default_1$k = ExpandMore.default = void 0; + var _createSvgIcon$k = _interopRequireDefault$k(requireCreateSvgIcon()); + var _jsxRuntime$k = requireJsxRuntime(); + var _default$k = default_1$k = ExpandMore.default = (0, _createSvgIcon$k.default)(/* @__PURE__ */ (0, _jsxRuntime$k.jsx)("path", { d: "M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z" }), "ExpandMore"); var FilterAlt = {}; "use strict"; "use client"; - var _interopRequireDefault$i = interopRequireDefaultExports; + var _interopRequireDefault$j = interopRequireDefaultExports; Object.defineProperty(FilterAlt, "__esModule", { value: true }); - var default_1$i = FilterAlt.default = void 0; - var _createSvgIcon$i = _interopRequireDefault$i(requireCreateSvgIcon()); - var _jsxRuntime$i = jsxRuntimeExports; - var _default$i = default_1$i = FilterAlt.default = (0, _createSvgIcon$i.default)(/* @__PURE__ */ (0, _jsxRuntime$i.jsx)("path", { + var default_1$j = FilterAlt.default = void 0; + var _createSvgIcon$j = _interopRequireDefault$j(requireCreateSvgIcon()); + var _jsxRuntime$j = requireJsxRuntime(); + var _default$j = default_1$j = FilterAlt.default = (0, _createSvgIcon$j.default)(/* @__PURE__ */ (0, _jsxRuntime$j.jsx)("path", { d: "M4.25 5.61C6.27 8.2 10 13 10 13v6c0 .55.45 1 1 1h2c.55 0 1-.45 1-1v-6s3.72-4.8 5.74-7.39c.51-.66.04-1.61-.79-1.61H5.04c-.83 0-1.3.95-.79 1.61" }), "FilterAlt"); var FilterList = {}; "use strict"; "use client"; - var _interopRequireDefault$h = interopRequireDefaultExports; + var _interopRequireDefault$i = interopRequireDefaultExports; Object.defineProperty(FilterList, "__esModule", { value: true }); - var default_1$h = FilterList.default = void 0; - var _createSvgIcon$h = _interopRequireDefault$h(requireCreateSvgIcon()); - var _jsxRuntime$h = jsxRuntimeExports; - var _default$h = default_1$h = FilterList.default = (0, _createSvgIcon$h.default)(/* @__PURE__ */ (0, _jsxRuntime$h.jsx)("path", { + var default_1$i = FilterList.default = void 0; + var _createSvgIcon$i = _interopRequireDefault$i(requireCreateSvgIcon()); + var _jsxRuntime$i = requireJsxRuntime(); + var _default$i = default_1$i = FilterList.default = (0, _createSvgIcon$i.default)(/* @__PURE__ */ (0, _jsxRuntime$i.jsx)("path", { d: "M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z" }), "FilterList"); var FilterListOff = {}; "use strict"; "use client"; - var _interopRequireDefault$g = interopRequireDefaultExports; + var _interopRequireDefault$h = interopRequireDefaultExports; Object.defineProperty(FilterListOff, "__esModule", { value: true }); - var default_1$g = FilterListOff.default = void 0; - var _createSvgIcon$g = _interopRequireDefault$g(requireCreateSvgIcon()); - var _jsxRuntime$g = jsxRuntimeExports; - var _default$g = default_1$g = FilterListOff.default = (0, _createSvgIcon$g.default)(/* @__PURE__ */ (0, _jsxRuntime$g.jsx)("path", { + var default_1$h = FilterListOff.default = void 0; + var _createSvgIcon$h = _interopRequireDefault$h(requireCreateSvgIcon()); + var _jsxRuntime$h = requireJsxRuntime(); + var _default$h = default_1$h = FilterListOff.default = (0, _createSvgIcon$h.default)(/* @__PURE__ */ (0, _jsxRuntime$h.jsx)("path", { d: "M10.83 8H21V6H8.83zm5 5H18v-2h-4.17zM14 16.83V18h-4v-2h3.17l-3-3H6v-2h2.17l-3-3H3V6h.17L1.39 4.22 2.8 2.81l18.38 18.38-1.41 1.41z" }), "FilterListOff"); var FirstPage = {}; "use strict"; "use client"; - var _interopRequireDefault$f = interopRequireDefaultExports; + var _interopRequireDefault$g = interopRequireDefaultExports; Object.defineProperty(FirstPage, "__esModule", { value: true }); - var default_1$f = FirstPage.default = void 0; - var _createSvgIcon$f = _interopRequireDefault$f(requireCreateSvgIcon()); - var _jsxRuntime$f = jsxRuntimeExports; - var _default$f = default_1$f = FirstPage.default = (0, _createSvgIcon$f.default)(/* @__PURE__ */ (0, _jsxRuntime$f.jsx)("path", { + var default_1$g = FirstPage.default = void 0; + var _createSvgIcon$g = _interopRequireDefault$g(requireCreateSvgIcon()); + var _jsxRuntime$g = requireJsxRuntime(); + var _default$g = default_1$g = FirstPage.default = (0, _createSvgIcon$g.default)(/* @__PURE__ */ (0, _jsxRuntime$g.jsx)("path", { d: "M18.41 16.59 13.82 12l4.59-4.59L17 6l-6 6 6 6zM6 6h2v12H6z" }), "FirstPage"); var Fullscreen = {}; "use strict"; "use client"; - var _interopRequireDefault$e = interopRequireDefaultExports; + var _interopRequireDefault$f = interopRequireDefaultExports; Object.defineProperty(Fullscreen, "__esModule", { value: true }); - var default_1$e = Fullscreen.default = void 0; - var _createSvgIcon$e = _interopRequireDefault$e(requireCreateSvgIcon()); - var _jsxRuntime$e = jsxRuntimeExports; - var _default$e = default_1$e = Fullscreen.default = (0, _createSvgIcon$e.default)(/* @__PURE__ */ (0, _jsxRuntime$e.jsx)("path", { + var default_1$f = Fullscreen.default = void 0; + var _createSvgIcon$f = _interopRequireDefault$f(requireCreateSvgIcon()); + var _jsxRuntime$f = requireJsxRuntime(); + var _default$f = default_1$f = Fullscreen.default = (0, _createSvgIcon$f.default)(/* @__PURE__ */ (0, _jsxRuntime$f.jsx)("path", { d: "M7 14H5v5h5v-2H7zm-2-4h2V7h3V5H5zm12 7h-3v2h5v-5h-2zM14 5v2h3v3h2V5z" }), "Fullscreen"); var FullscreenExit = {}; "use strict"; "use client"; - var _interopRequireDefault$d = interopRequireDefaultExports; + var _interopRequireDefault$e = interopRequireDefaultExports; Object.defineProperty(FullscreenExit, "__esModule", { value: true }); - var default_1$d = FullscreenExit.default = void 0; - var _createSvgIcon$d = _interopRequireDefault$d(requireCreateSvgIcon()); - var _jsxRuntime$d = jsxRuntimeExports; - var _default$d = default_1$d = FullscreenExit.default = (0, _createSvgIcon$d.default)(/* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { + var default_1$e = FullscreenExit.default = void 0; + var _createSvgIcon$e = _interopRequireDefault$e(requireCreateSvgIcon()); + var _jsxRuntime$e = requireJsxRuntime(); + var _default$e = default_1$e = FullscreenExit.default = (0, _createSvgIcon$e.default)(/* @__PURE__ */ (0, _jsxRuntime$e.jsx)("path", { d: "M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z" }), "FullscreenExit"); var KeyboardDoubleArrowDown = {}; "use strict"; "use client"; - var _interopRequireDefault$c = interopRequireDefaultExports; + var _interopRequireDefault$d = interopRequireDefaultExports; Object.defineProperty(KeyboardDoubleArrowDown, "__esModule", { value: true }); - var default_1$c = KeyboardDoubleArrowDown.default = void 0; - var _createSvgIcon$c = _interopRequireDefault$c(requireCreateSvgIcon()); - var _jsxRuntime$c = jsxRuntimeExports; - var _default$c = default_1$c = KeyboardDoubleArrowDown.default = (0, _createSvgIcon$c.default)([/* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { + var default_1$d = KeyboardDoubleArrowDown.default = void 0; + var _createSvgIcon$d = _interopRequireDefault$d(requireCreateSvgIcon()); + var _jsxRuntime$d = requireJsxRuntime(); + var _default$d = default_1$d = KeyboardDoubleArrowDown.default = (0, _createSvgIcon$d.default)([/* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { d: "M18 6.41 16.59 5 12 9.58 7.41 5 6 6.41l6 6z" - }, "0"), /* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { + }, "0"), /* @__PURE__ */ (0, _jsxRuntime$d.jsx)("path", { d: "m18 13-1.41-1.41L12 16.17l-4.59-4.58L6 13l6 6z" }, "1")], "KeyboardDoubleArrowDown"); var LastPage = {}; "use strict"; "use client"; - var _interopRequireDefault$b = interopRequireDefaultExports; + var _interopRequireDefault$c = interopRequireDefaultExports; Object.defineProperty(LastPage, "__esModule", { value: true }); - var default_1$b = LastPage.default = void 0; - var _createSvgIcon$b = _interopRequireDefault$b(requireCreateSvgIcon()); - var _jsxRuntime$b = jsxRuntimeExports; - var _default$b = default_1$b = LastPage.default = (0, _createSvgIcon$b.default)(/* @__PURE__ */ (0, _jsxRuntime$b.jsx)("path", { + var default_1$c = LastPage.default = void 0; + var _createSvgIcon$c = _interopRequireDefault$c(requireCreateSvgIcon()); + var _jsxRuntime$c = requireJsxRuntime(); + var _default$c = default_1$c = LastPage.default = (0, _createSvgIcon$c.default)(/* @__PURE__ */ (0, _jsxRuntime$c.jsx)("path", { d: "M5.59 7.41 10.18 12l-4.59 4.59L7 18l6-6-6-6zM16 6h2v12h-2z" }), "LastPage"); var MoreHoriz = {}; "use strict"; "use client"; - var _interopRequireDefault$a = interopRequireDefaultExports; + var _interopRequireDefault$b = interopRequireDefaultExports; Object.defineProperty(MoreHoriz, "__esModule", { value: true }); - var default_1$a = MoreHoriz.default = void 0; - var _createSvgIcon$a = _interopRequireDefault$a(requireCreateSvgIcon()); - var _jsxRuntime$a = jsxRuntimeExports; - var _default$a = default_1$a = MoreHoriz.default = (0, _createSvgIcon$a.default)(/* @__PURE__ */ (0, _jsxRuntime$a.jsx)("path", { + var default_1$b = MoreHoriz.default = void 0; + var _createSvgIcon$b = _interopRequireDefault$b(requireCreateSvgIcon()); + var _jsxRuntime$b = requireJsxRuntime(); + var _default$b = default_1$b = MoreHoriz.default = (0, _createSvgIcon$b.default)(/* @__PURE__ */ (0, _jsxRuntime$b.jsx)("path", { d: "M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2" }), "MoreHoriz"); var MoreVert = {}; "use strict"; "use client"; - var _interopRequireDefault$9 = interopRequireDefaultExports; + var _interopRequireDefault$a = interopRequireDefaultExports; Object.defineProperty(MoreVert, "__esModule", { value: true }); - var default_1$9 = MoreVert.default = void 0; - var _createSvgIcon$9 = _interopRequireDefault$9(requireCreateSvgIcon()); - var _jsxRuntime$9 = jsxRuntimeExports; - var _default$9 = default_1$9 = MoreVert.default = (0, _createSvgIcon$9.default)(/* @__PURE__ */ (0, _jsxRuntime$9.jsx)("path", { + var default_1$a = MoreVert.default = void 0; + var _createSvgIcon$a = _interopRequireDefault$a(requireCreateSvgIcon()); + var _jsxRuntime$a = requireJsxRuntime(); + var _default$a = default_1$a = MoreVert.default = (0, _createSvgIcon$a.default)(/* @__PURE__ */ (0, _jsxRuntime$a.jsx)("path", { d: "M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2m0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2m0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2" }), "MoreVert"); var PushPin = {}; "use strict"; "use client"; - var _interopRequireDefault$8 = interopRequireDefaultExports; + var _interopRequireDefault$9 = interopRequireDefaultExports; Object.defineProperty(PushPin, "__esModule", { value: true }); - var default_1$8 = PushPin.default = void 0; - var _createSvgIcon$8 = _interopRequireDefault$8(requireCreateSvgIcon()); - var _jsxRuntime$8 = jsxRuntimeExports; - var _default$8 = default_1$8 = PushPin.default = (0, _createSvgIcon$8.default)(/* @__PURE__ */ (0, _jsxRuntime$8.jsx)("path", { + var default_1$9 = PushPin.default = void 0; + var _createSvgIcon$9 = _interopRequireDefault$9(requireCreateSvgIcon()); + var _jsxRuntime$9 = requireJsxRuntime(); + var _default$9 = default_1$9 = PushPin.default = (0, _createSvgIcon$9.default)(/* @__PURE__ */ (0, _jsxRuntime$9.jsx)("path", { fillRule: "evenodd", d: "M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3" }), "PushPin"); var RestartAlt = {}; "use strict"; "use client"; - var _interopRequireDefault$7 = interopRequireDefaultExports; + var _interopRequireDefault$8 = interopRequireDefaultExports; Object.defineProperty(RestartAlt, "__esModule", { value: true }); - var default_1$7 = RestartAlt.default = void 0; - var _createSvgIcon$7 = _interopRequireDefault$7(requireCreateSvgIcon()); - var _jsxRuntime$7 = jsxRuntimeExports; - var _default$7 = default_1$7 = RestartAlt.default = (0, _createSvgIcon$7.default)(/* @__PURE__ */ (0, _jsxRuntime$7.jsx)("path", { + var default_1$8 = RestartAlt.default = void 0; + var _createSvgIcon$8 = _interopRequireDefault$8(requireCreateSvgIcon()); + var _jsxRuntime$8 = requireJsxRuntime(); + var _default$8 = default_1$8 = RestartAlt.default = (0, _createSvgIcon$8.default)(/* @__PURE__ */ (0, _jsxRuntime$8.jsx)("path", { d: "M12 5V2L8 6l4 4V7c3.31 0 6 2.69 6 6 0 2.97-2.17 5.43-5 5.91v2.02c3.95-.49 7-3.85 7-7.93 0-4.42-3.58-8-8-8m-6 8c0-1.65.67-3.15 1.76-4.24L6.34 7.34C4.9 8.79 4 10.79 4 13c0 4.08 3.05 7.44 7 7.93v-2.02c-2.83-.48-5-2.94-5-5.91" }), "RestartAlt"); var Save = {}; "use strict"; "use client"; - var _interopRequireDefault$6 = interopRequireDefaultExports; + var _interopRequireDefault$7 = interopRequireDefaultExports; Object.defineProperty(Save, "__esModule", { value: true }); - var default_1$6 = Save.default = void 0; - var _createSvgIcon$6 = _interopRequireDefault$6(requireCreateSvgIcon()); - var _jsxRuntime$6 = jsxRuntimeExports; - var _default$6 = default_1$6 = Save.default = (0, _createSvgIcon$6.default)(/* @__PURE__ */ (0, _jsxRuntime$6.jsx)("path", { + var default_1$7 = Save.default = void 0; + var _createSvgIcon$7 = _interopRequireDefault$7(requireCreateSvgIcon()); + var _jsxRuntime$7 = requireJsxRuntime(); + var _default$7 = default_1$7 = Save.default = (0, _createSvgIcon$7.default)(/* @__PURE__ */ (0, _jsxRuntime$7.jsx)("path", { d: "M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7zm-5 16c-1.66 0-3-1.34-3-3s1.34-3 3-3 3 1.34 3 3-1.34 3-3 3m3-10H5V5h10z" }), "Save"); var Search = {}; "use strict"; "use client"; - var _interopRequireDefault$5 = interopRequireDefaultExports; + var _interopRequireDefault$6 = interopRequireDefaultExports; Object.defineProperty(Search, "__esModule", { value: true }); - var default_1$5 = Search.default = void 0; - var _createSvgIcon$5 = _interopRequireDefault$5(requireCreateSvgIcon()); - var _jsxRuntime$5 = jsxRuntimeExports; - var _default$5 = default_1$5 = Search.default = (0, _createSvgIcon$5.default)(/* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { + var default_1$6 = Search.default = void 0; + var _createSvgIcon$6 = _interopRequireDefault$6(requireCreateSvgIcon()); + var _jsxRuntime$6 = requireJsxRuntime(); + var _default$6 = default_1$6 = Search.default = (0, _createSvgIcon$6.default)(/* @__PURE__ */ (0, _jsxRuntime$6.jsx)("path", { d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14" }), "Search"); var SearchOff = {}; "use strict"; "use client"; - var _interopRequireDefault$4 = interopRequireDefaultExports; + var _interopRequireDefault$5 = interopRequireDefaultExports; Object.defineProperty(SearchOff, "__esModule", { value: true }); - var default_1$4 = SearchOff.default = void 0; - var _createSvgIcon$4 = _interopRequireDefault$4(requireCreateSvgIcon()); - var _jsxRuntime$4 = jsxRuntimeExports; - var _default$4 = default_1$4 = SearchOff.default = (0, _createSvgIcon$4.default)([/* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { + var default_1$5 = SearchOff.default = void 0; + var _createSvgIcon$5 = _interopRequireDefault$5(requireCreateSvgIcon()); + var _jsxRuntime$5 = requireJsxRuntime(); + var _default$5 = default_1$5 = SearchOff.default = (0, _createSvgIcon$5.default)([/* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { d: "M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3 6.08 3 3.28 5.64 3.03 9h2.02C5.3 6.75 7.18 5 9.5 5 11.99 5 14 7.01 14 9.5S11.99 14 9.5 14c-.17 0-.33-.03-.5-.05v2.02c.17.02.33.03.5.03 1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19z" - }, "0"), /* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { + }, "0"), /* @__PURE__ */ (0, _jsxRuntime$5.jsx)("path", { d: "M6.47 10.82 4 13.29l-2.47-2.47-.71.71L3.29 14 .82 16.47l.71.71L4 14.71l2.47 2.47.71-.71L4.71 14l2.47-2.47z" }, "1")], "SearchOff"); var Sort = {}; "use strict"; "use client"; - var _interopRequireDefault$3 = interopRequireDefaultExports; + var _interopRequireDefault$4 = interopRequireDefaultExports; Object.defineProperty(Sort, "__esModule", { value: true }); - var default_1$3 = Sort.default = void 0; - var _createSvgIcon$3 = _interopRequireDefault$3(requireCreateSvgIcon()); - var _jsxRuntime$3 = jsxRuntimeExports; - var _default$3 = default_1$3 = Sort.default = (0, _createSvgIcon$3.default)(/* @__PURE__ */ (0, _jsxRuntime$3.jsx)("path", { + var default_1$4 = Sort.default = void 0; + var _createSvgIcon$4 = _interopRequireDefault$4(requireCreateSvgIcon()); + var _jsxRuntime$4 = requireJsxRuntime(); + var _default$4 = default_1$4 = Sort.default = (0, _createSvgIcon$4.default)(/* @__PURE__ */ (0, _jsxRuntime$4.jsx)("path", { d: "M3 18h6v-2H3zM3 6v2h18V6zm0 7h12v-2H3z" }), "Sort"); var SyncAlt = {}; "use strict"; "use client"; - var _interopRequireDefault$2 = interopRequireDefaultExports; + var _interopRequireDefault$3 = interopRequireDefaultExports; Object.defineProperty(SyncAlt, "__esModule", { value: true }); - var default_1$2 = SyncAlt.default = void 0; - var _createSvgIcon$2 = _interopRequireDefault$2(requireCreateSvgIcon()); - var _jsxRuntime$2 = jsxRuntimeExports; - var _default$2 = default_1$2 = SyncAlt.default = (0, _createSvgIcon$2.default)(/* @__PURE__ */ (0, _jsxRuntime$2.jsx)("path", { + var default_1$3 = SyncAlt.default = void 0; + var _createSvgIcon$3 = _interopRequireDefault$3(requireCreateSvgIcon()); + var _jsxRuntime$3 = requireJsxRuntime(); + var _default$3 = default_1$3 = SyncAlt.default = (0, _createSvgIcon$3.default)(/* @__PURE__ */ (0, _jsxRuntime$3.jsx)("path", { d: "m18 12 4-4-4-4v3H3v2h15zM6 12l-4 4 4 4v-3h15v-2H6z" }), "SyncAlt"); var ViewColumn = {}; "use strict"; "use client"; - var _interopRequireDefault$1 = interopRequireDefaultExports; + var _interopRequireDefault$2 = interopRequireDefaultExports; Object.defineProperty(ViewColumn, "__esModule", { value: true }); - var default_1$1 = ViewColumn.default = void 0; - var _createSvgIcon$1 = _interopRequireDefault$1(requireCreateSvgIcon()); - var _jsxRuntime$1 = jsxRuntimeExports; - var _default$1 = default_1$1 = ViewColumn.default = (0, _createSvgIcon$1.default)(/* @__PURE__ */ (0, _jsxRuntime$1.jsx)("path", { + var default_1$2 = ViewColumn.default = void 0; + var _createSvgIcon$2 = _interopRequireDefault$2(requireCreateSvgIcon()); + var _jsxRuntime$2 = requireJsxRuntime(); + var _default$2 = default_1$2 = ViewColumn.default = (0, _createSvgIcon$2.default)(/* @__PURE__ */ (0, _jsxRuntime$2.jsx)("path", { d: "M14.67 5v14H9.33V5zm1 14H21V5h-5.33zm-7.34 0V5H3v14z" }), "ViewColumn"); var VisibilityOff = {}; "use strict"; "use client"; - var _interopRequireDefault = interopRequireDefaultExports; + var _interopRequireDefault$1 = interopRequireDefaultExports; Object.defineProperty(VisibilityOff, "__esModule", { value: true }); - var default_1 = VisibilityOff.default = void 0; - var _createSvgIcon = _interopRequireDefault(requireCreateSvgIcon()); - var _jsxRuntime = jsxRuntimeExports; - var _default = default_1 = VisibilityOff.default = (0, _createSvgIcon.default)(/* @__PURE__ */ (0, _jsxRuntime.jsx)("path", { + var default_1$1 = VisibilityOff.default = void 0; + var _createSvgIcon$1 = _interopRequireDefault$1(requireCreateSvgIcon()); + var _jsxRuntime$1 = requireJsxRuntime(); + var _default$1 = default_1$1 = VisibilityOff.default = (0, _createSvgIcon$1.default)(/* @__PURE__ */ (0, _jsxRuntime$1.jsx)("path", { d: "M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z" }), "VisibilityOff"); function memo(getDeps, fn, opts) { @@ -39131,7 +39098,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha display: "flex", flexDirection: "column" }); - const PickersLayout = function PickersLayout2(inProps) { + const PickersLayout = /* @__PURE__ */ React__namespace.forwardRef(function PickersLayout2(inProps, ref) { const props = useThemeProps({ props: inProps, name: "MuiPickersLayout" @@ -39147,7 +39114,6 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha sx, className, isLandscape, - ref, wrapperVariant } = props; const classes = useUtilityClasses$J(props); @@ -39165,7 +39131,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha }) }), actionBar] }); - }; + }); process.env.NODE_ENV !== "production" ? PickersLayout.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | @@ -45069,7 +45035,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha function getPickersArrowSwitcherUtilityClass(slot) { return generateUtilityClass("MuiPickersArrowSwitcher", slot); } - const pickersArrowSwitcherClasses = generateUtilityClasses("MuiPickersArrowSwitcher", ["root", "spacer", "button"]); + const pickersArrowSwitcherClasses = generateUtilityClasses("MuiPickersArrowSwitcher", ["root", "spacer", "button", "previousIconButton", "nextIconButton", "leftArrowIcon", "rightArrowIcon"]); const _excluded$E = ["children", "className", "slots", "slotProps", "isNextDisabled", "isNextHidden", "onGoToNext", "nextLabel", "isPreviousDisabled", "isPreviousHidden", "onGoToPrevious", "previousLabel", "labelId"], _excluded2$3 = ["ownerState"], _excluded3$1 = ["ownerState"]; const PickersArrowSwitcherRoot = styled$1("div", { name: "MuiPickersArrowSwitcher", @@ -45108,7 +45074,11 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const slots = { root: ["root"], spacer: ["spacer"], - button: ["button"] + button: ["button"], + previousIconButton: ["previousIconButton"], + nextIconButton: ["nextIconButton"], + leftArrowIcon: ["leftArrowIcon"], + rightArrowIcon: ["rightArrowIcon"] }; return composeClasses(slots, getPickersArrowSwitcherUtilityClass, classes); }; @@ -45163,7 +45133,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha ownerState: _extends$1({}, ownerState, { hidden: previousProps.isHidden }), - className: classes.button + className: clsx(classes.button, classes.previousIconButton) }); const NextIconButton = (_b = slots == null ? void 0 : slots.nextIconButton) != null ? _b : PickersArrowSwitcherButton; const nextIconButtonProps = useSlotProps({ @@ -45180,7 +45150,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha ownerState: _extends$1({}, ownerState, { hidden: nextProps.isHidden }), - className: classes.button + className: clsx(classes.button, classes.nextIconButton) }); const LeftArrowIcon = (_c = slots == null ? void 0 : slots.leftArrowIcon) != null ? _c : ArrowLeftIcon; const _useSlotProps = useSlotProps({ @@ -45189,7 +45159,8 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha additionalProps: { fontSize: "inherit" }, - ownerState: void 0 + ownerState, + className: classes.leftArrowIcon }), leftArrowIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2$3); const RightArrowIcon = (_d = slots == null ? void 0 : slots.rightArrowIcon) != null ? _d : ArrowRightIcon; const _useSlotProps2 = useSlotProps({ @@ -45198,7 +45169,8 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha additionalProps: { fontSize: "inherit" }, - ownerState: void 0 + ownerState, + className: classes.rightArrowIcon }), rightArrowIconProps = _objectWithoutPropertiesLoose(_useSlotProps2, _excluded3$1); return /* @__PURE__ */ jsxRuntimeExports.jsxs(PickersArrowSwitcherRoot, _extends$1({ ref, @@ -45379,7 +45351,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const _useSlotProps = useSlotProps({ elementType: SwitchViewIcon, externalSlotProps: slotProps == null ? void 0 : slotProps.switchViewIcon, - ownerState: void 0, + ownerState, className: classes.switchViewIcon }), switchViewIconProps = _objectWithoutPropertiesLoose(_useSlotProps, _excluded2$2); const selectNextMonth = () => onMonthChange(utils2.addMonths(month, 1), "left"); @@ -50309,10 +50281,11 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha function getClockUtilityClass(slot) { return generateUtilityClass("MuiClock", slot); } - const clockClasses = generateUtilityClasses("MuiClock", ["root", "clock", "wrapper", "squareMask", "pin", "amButton", "pmButton", "meridiemText"]); + const clockClasses = generateUtilityClasses("MuiClock", ["root", "clock", "wrapper", "squareMask", "pin", "amButton", "pmButton", "meridiemText", "selected"]); const useUtilityClasses$h = (ownerState) => { const { - classes + classes, + meridiemMode } = ownerState; const slots = { root: ["root"], @@ -50320,8 +50293,8 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha wrapper: ["wrapper"], squareMask: ["squareMask"], pin: ["pin"], - amButton: ["amButton"], - pmButton: ["pmButton"], + amButton: ["amButton", meridiemMode === "am" && "selected"], + pmButton: ["pmButton", meridiemMode === "pm" && "selected"], meridiemText: ["meridiemText"] }; return composeClasses(slots, getClockUtilityClass, classes); @@ -50404,23 +50377,15 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha left: "50%", transform: "translate(-50%, -50%)" })); - const ClockAmButton = styled$1(IconButton, { - name: "MuiClock", - slot: "AmButton", - overridesResolver: (_2, styles2) => styles2.amButton - })(({ - theme - }) => ({ + const meridiemButtonCommonStyles = (theme, meridiemMode) => ({ zIndex: 1, - position: "absolute", bottom: 8, - left: 8, paddingLeft: 4, paddingRight: 4, width: CLOCK_HOUR_WIDTH, variants: [{ props: { - meridiemMode: "am" + meridiemMode }, style: { backgroundColor: (theme.vars || theme).palette.primary.main, @@ -50430,6 +50395,17 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } } }] + }); + const ClockAmButton = styled$1(IconButton, { + name: "MuiClock", + slot: "AmButton", + overridesResolver: (_2, styles2) => styles2.amButton + })(({ + theme + }) => _extends$1({}, meridiemButtonCommonStyles(theme, "am"), { + // keeping it here to make TS happy + position: "absolute", + left: 8 })); const ClockPmButton = styled$1(IconButton, { name: "MuiClock", @@ -50437,26 +50413,10 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha overridesResolver: (_2, styles2) => styles2.pmButton })(({ theme - }) => ({ - zIndex: 1, + }) => _extends$1({}, meridiemButtonCommonStyles(theme, "pm"), { + // keeping it here to make TS happy position: "absolute", - bottom: 8, - right: 8, - paddingLeft: 4, - paddingRight: 4, - width: CLOCK_HOUR_WIDTH, - variants: [{ - props: { - meridiemMode: "pm" - }, - style: { - backgroundColor: (theme.vars || theme).palette.primary.main, - color: (theme.vars || theme).palette.primary.contrastText, - "&:hover": { - backgroundColor: (theme.vars || theme).palette.primary.light - } - } - }] + right: 8 })); const ClockMeridiemText = styled$1(Typography, { name: "MuiClock", @@ -52523,7 +52483,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha skipDisabled, timezone }); - function DesktopDateTimePickerLayout(props) { + const DesktopDateTimePickerLayout = /* @__PURE__ */ React__namespace.forwardRef(function DesktopDateTimePickerLayout2(props, ref) { var _a, _b; const isRtl = useRtl(); const { @@ -52537,7 +52497,6 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha sx, className, isLandscape, - ref, classes } = props; const isActionBarVisible = actionBar && ((_b = (_a = actionBar.props.actions) == null ? void 0 : _a.length) != null ? _b : 0) > 0; @@ -52570,7 +52529,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha })] }), actionBar] }); - } + }); process.env.NODE_ENV !== "production" ? DesktopDateTimePickerLayout.propTypes = { // ----------------------------- Warning -------------------------------- // | These PropTypes are generated from the TypeScript type definitions | @@ -60334,40 +60293,40 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha })); }; const MRT_Default_Icons = { - ArrowDownwardIcon: default_1$x, - ArrowRightIcon: default_1$w, - CancelIcon: default_1$v, - ChevronLeftIcon: default_1$u, - ChevronRightIcon: default_1$t, - ClearAllIcon: default_1$s, - CloseIcon: default_1$r, - ContentCopy: default_1$q, - DensityLargeIcon: default_1$p, - DensityMediumIcon: default_1$o, - DensitySmallIcon: default_1$n, - DragHandleIcon: default_1$m, - DynamicFeedIcon: default_1$l, - EditIcon: default_1$k, - ExpandMoreIcon: default_1$j, - FilterAltIcon: default_1$i, - FilterListIcon: default_1$h, - FilterListOffIcon: default_1$g, - FirstPageIcon: default_1$f, - FullscreenExitIcon: default_1$d, - FullscreenIcon: default_1$e, - KeyboardDoubleArrowDownIcon: default_1$c, - LastPageIcon: default_1$b, - MoreHorizIcon: default_1$a, - MoreVertIcon: default_1$9, - PushPinIcon: default_1$8, - RestartAltIcon: default_1$7, - SaveIcon: default_1$6, - SearchIcon: default_1$5, - SearchOffIcon: default_1$4, - SortIcon: default_1$3, - SyncAltIcon: default_1$2, - ViewColumnIcon: default_1$1, - VisibilityOffIcon: default_1 + ArrowDownwardIcon: default_1$y, + ArrowRightIcon: default_1$x, + CancelIcon: default_1$w, + ChevronLeftIcon: default_1$v, + ChevronRightIcon: default_1$u, + ClearAllIcon: default_1$t, + CloseIcon: default_1$s, + ContentCopy: default_1$r, + DensityLargeIcon: default_1$q, + DensityMediumIcon: default_1$p, + DensitySmallIcon: default_1$o, + DragHandleIcon: default_1$n, + DynamicFeedIcon: default_1$m, + EditIcon: default_1$l, + ExpandMoreIcon: default_1$k, + FilterAltIcon: default_1$j, + FilterListIcon: default_1$i, + FilterListOffIcon: default_1$h, + FirstPageIcon: default_1$g, + FullscreenExitIcon: default_1$e, + FullscreenIcon: default_1$f, + KeyboardDoubleArrowDownIcon: default_1$d, + LastPageIcon: default_1$c, + MoreHorizIcon: default_1$b, + MoreVertIcon: default_1$a, + PushPinIcon: default_1$9, + RestartAltIcon: default_1$8, + SaveIcon: default_1$7, + SearchIcon: default_1$6, + SearchOffIcon: default_1$5, + SortIcon: default_1$4, + SyncAltIcon: default_1$3, + ViewColumnIcon: default_1$2, + VisibilityOffIcon: default_1$1 }; const MRT_Localization_EN = { actions: "Actions", @@ -62822,17 +62781,17 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } return jsxRuntimeExports.jsx(MRT_TablePaper, { table }); }; - const { Open: Open$7, Child: Child$4 } = gubu_minExports.Gubu; - const Shape$2 = gubu_minExports.Gubu(Open$7({ + const { Open: Open$n, Child: Child$5 } = gubu_minExports.Gubu; + const Shape$3 = gubu_minExports.Gubu(Open$n({ name: String, prefix: String, ent: String, order: [String], - field: Child$4({}, {}) + field: Child$5({}, {}) }), { name: "BasicEntityList" }); function VxgBasicEntityListPlugin(options) { const seneca = this; - const spec = Shape$2(options.spec); + const spec = Shape$3(options.spec); const slot = spec.prefix + spec.name; const columns = spec.order.reduce((a, fn) => { const field = spec.field[fn]; @@ -62868,7 +62827,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } }); Object.defineProperty(VxgBasicEntityListPlugin, "name", { value: "VxgBasicEntityListPlugin" }); - const CMPNAME$9 = "BasicEntityList"; + const CMPNAME$o = "BasicEntityList"; function BasicEntityList(props) { const { ctx } = props; const { seneca } = ctx(); @@ -64788,32 +64747,369 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha _formControl.current.formState = getProxyFormState(formState, control); return _formControl.current; } - const CMPNAME$8 = "BasicEntityField"; - const { Open: Open$6 } = gubu_minExports.Gubu; - const BasicEntityFieldSpecShape = gubu_minExports.Gubu(Open$6({}), { name: CMPNAME$8 }); - const fieldMap = { - Text: BasicEntityTextField, - TextBox: BasicEntityTextBoxField, - Date: BasicEntityDateField, - DateTime: BasicEntityDateTimeField, - Time: BasicEntityTimeField - }; - function BasicEntityField(props) { - const { ctx, spec } = props; - const basicEntityFieldSpec = BasicEntityFieldSpecShape(spec); - const field = basicEntityFieldSpec.field; - const Field = fieldMap[field.ux.kind]; - return /* @__PURE__ */ jsxRuntimeExports.jsx(Field, { ctx, spec }); - } function BasicEntityFieldError(props) { const { err } = props; return err ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicEntityFieldError-active", children: err.message }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "vxg-BasicEntityFieldError-none" }); } + const CMPNAME$n = "BasicEntitySliderField"; + const { Open: Open$m } = gubu_minExports.Gubu; + const BasicEntityCheckboxFieldSpecShape = gubu_minExports.Gubu( + Open$m({ + field: Open$m({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$m({ + kind: gubu_minExports.Exact("Checkbox"), + edit: gubu_minExports.Default(true), + props: Open$m({}) + }) + }) + }), + { name: CMPNAME$n } + ); + function BasicEntityCheckboxField(props) { + const { spec } = props; + const basicEntityCheckboxField = BasicEntityCheckboxFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntityCheckboxField; + const val = getValues(field.name); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.FormControlLabel, + { + control: /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Checkbox, + __spreadValues({ + id: field.id, + checked: controllerField.value, + onChange: controllerField.onChange, + disabled: !field.ux.edit + }, field.ux.props) + ), + label: field.label + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); + } + const CMPNAME$m = "BasicEntityAutocompleteField"; + const { Open: Open$l } = gubu_minExports.Gubu; + const BasicEntityAutocompleteFieldSpecShape = gubu_minExports.Gubu( + Open$l({ + field: Open$l({ + id: String, + label: String, + kind: String, + name: String, + cat: Open$l({ + default: String, + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$l({}) + }), + ux: Open$l({ + kind: gubu_minExports.Exact("Autocomplete"), + edit: gubu_minExports.Default(true) + }) + }) + }), + { name: CMPNAME$m } + ); + function BasicEntityAutocompleteField(props) { + const { spec } = props; + const basicEntityAutocompleteField = BasicEntityAutocompleteFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntityAutocompleteField; + const defaultAlternative = field.cat.multiple === 1 ? {} : []; + const defaultValues = getValues(`${field.name}_default$`) || defaultAlternative; + const categories = getValues(`${field.name}_cat$`) || []; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Autocomplete, + __spreadValues({ + freeSolo: true, + forcePopupIcon: true, + multiple: field.cat.multiple !== 1, + options: categories, + isOptionEqualToValue: (opt, val) => opt === val || (opt == null ? void 0 : opt.id) != null && (val == null ? void 0 : val.id) != null && opt.id === val.id || (opt == null ? void 0 : opt.key) != null && (val == null ? void 0 : val.key) != null && opt.key === val.key, + getOptionLabel: (option) => (option == null ? void 0 : option.title) || "", + value: controllerField.value, + disabled: !field.ux.edit, + onChange: (_2, v) => { + console.log("v", v); + setValue( + field.name, + Array.isArray(v) ? v.map((val) => val.key).join(",") : v == null ? void 0 : v.key + ); + controllerField.onChange(v); + }, + renderInput: (params) => /* @__PURE__ */ jsxRuntimeExports.jsx(material.TextField, __spreadProps(__spreadValues({}, params), { label: field.label })) + }, field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); + } + const CMPNAME$l = "BasicEntitySliderField"; + const { Open: Open$k } = gubu_minExports.Gubu; + const BasicEntitySliderFieldSpecShape = gubu_minExports.Gubu( + Open$k({ + field: Open$k({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$k({ + kind: gubu_minExports.Exact("Slider"), + edit: gubu_minExports.Default(true), + step: gubu_minExports.Default(1), + min: gubu_minExports.Default(0), + max: gubu_minExports.Default(100), + props: Open$k({ + marks: gubu_minExports.Default({}), + valueLabelDisplay: gubu_minExports.Exact("on", "auto", "off").Default("auto"), + direction: gubu_minExports.Exact("horizontal", "vertical").Default("horizontal"), + track: gubu_minExports.Exact("normal", "inverted", "disabled").Default("normal") + }) + }) + }) + }), + { name: CMPNAME$l } + ); + function BasicEntitySliderField(props) { + const { spec } = props; + const basicEntityAutocompleteField = BasicEntitySliderFieldSpecShape(spec); + const { control, field, getValues, setValue, errors } = basicEntityAutocompleteField; + const fieldName = field.name; + const val = getValues(`${fieldName}_uival$`); + const marks = getValues(`${fieldName}_marks$`); + const err = errors[fieldName]; + const { field: controllerField } = useController({ + name: `${fieldName}_uival$`, + control, + defaultValue: val || field.ux.min + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.FormLabel, { children: field.label }, `${field.id}-label`), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Slider, + { + step: field.ux.step, + marks, + min: field.ux.min, + max: field.ux.max, + value: controllerField.value, + onChange: (_2, newVal) => { + setValue(field.name, newVal * 60); + controllerField.onChange(newVal); + }, + disabled: !field.ux.edit, + orientation: field.ux.direction, + track: field.ux.track, + valueLabelDisplay: field.ux.props.valueLabelDisplay + }, + `${field.id}-slider` + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }); + } + const CMPNAME$k = "BasicEntitySliderField"; + const { Open: Open$j } = gubu_minExports.Gubu; + const BasicEntityRadioGroupFieldSpecShape = gubu_minExports.Gubu( + Open$j({ + field: Open$j({ + id: String, + name: String, + kind: "", + llabel: "", + ux: Open$j({ + kind: gubu_minExports.Exact("RadioGroup"), + edit: gubu_minExports.Default(true), + direction: gubu_minExports.Exact("row", "column").Default("row") + }), + cat: Open$j({ + default: "", + title: String, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$j({}) + }) + }) + }), + { name: CMPNAME$k } + ); + function BasicEntityRadioGroupField(props) { + const { spec } = props; + const basicEntityRadioGroupField = BasicEntityRadioGroupFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntityRadioGroupField; + const defaultValues = getValues(`${field.name}_default$`) || ""; + const categories = getValues(`${field.name}_cat$`) || []; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.FormLabel, { children: field.label }, `${field.id}-label`), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.RadioGroup, + __spreadProps(__spreadValues({ + value: controllerField.value, + onChange: controllerField.onChange, + row: "row" === field.ux.direction, + disabled: !field.ux.edit + }, field.ux.props), { + children: categories.map((option) => /* @__PURE__ */ jsxRuntimeExports.jsx( + material.FormControlLabel, + { + value: option.key, + control: /* @__PURE__ */ jsxRuntimeExports.jsx(material.Radio, { disabled: !field.ux.edit }), + label: option.title + }, + `${option.key}-option` + )) + }), + field.id + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }); + } + const CMPNAME$j = "BasicEntityTextBoxField"; + const { Open: Open$i } = gubu_minExports.Gubu; + const BasicEntityTextBoxFieldSpecShape = gubu_minExports.Gubu( + Open$i({ + field: Open$i({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$i({ + kind: gubu_minExports.Exact("TextBox"), + edit: gubu_minExports.Default(true), + props: Open$i({}) + }) + }) + }), + { name: CMPNAME$j } + ); + function BasicEntityTextBoxField(props) { + const { spec } = props; + const basicEntityTextBoxField = BasicEntityTextBoxFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTextBoxField; + const val = getValues(field.name); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.TextField, + __spreadValues(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + variant: "outlined", + fullWidth: true, + multiline: true, + rows: field.ux.rows, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 }, + disabled: !field.ux.edit + }, field.ux.props), register(field.name)) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.name); + } + const CMPNAME$i = "BasicEntityTextField"; + const { Open: Open$h } = gubu_minExports.Gubu; + const BasicEntityTextFieldSpecShape = gubu_minExports.Gubu( + Open$h({ + field: Open$h({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$h({ + kind: gubu_minExports.Exact("Text"), + edit: gubu_minExports.Default(true), + props: Open$h({}) + }) + }) + }), + { name: CMPNAME$i } + ); function BasicEntityTextField(props) { const { spec } = props; - const { field, register, getValues, errors } = spec; + const basicEntityTextBoxField = BasicEntityTextFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTextBoxField; + const val = getValues(field.name); const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.TextField, + __spreadValues(__spreadProps(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)), { + disabled: !field.ux.edit + }), field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); + } + const CMPNAME$h = "BasicEntityDateField"; + const { Open: Open$g } = gubu_minExports.Gubu; + const BasicEntityDateFieldSpecShape = gubu_minExports.Gubu( + Open$g({ + field: Open$g({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$g({ + kind: gubu_minExports.Exact("Date"), + edit: gubu_minExports.Default(true), + props: Open$g({}) + }) + }) + }), + { name: CMPNAME$h } + ); + function BasicEntityDateField(props) { + const { spec } = props; + const basicEntityDateField = BasicEntityDateFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityDateField; const val = getValues(field.name); + const err = errors[field.name]; return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ /* @__PURE__ */ jsxRuntimeExports.jsx( material.TextField, @@ -64823,97 +65119,731 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha label: field.label, fullWidth: true, variant: "outlined", + type: "date", + disabled: !field.ux.edit, InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } }, register(field.name)) ), /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) ] }, field.id); } - function BasicEntityTextBoxField(props) { + const CMPNAME$g = "BasicEntityTimeField"; + const { Open: Open$f } = gubu_minExports.Gubu; + const BasicEntityTimeFieldSpecShape = gubu_minExports.Gubu( + Open$f({ + field: Open$f({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$f({ + kind: gubu_minExports.Exact("Time"), + edit: gubu_minExports.Default(true), + props: Open$f({}) + }) + }) + }), + { name: CMPNAME$g } + ); + function BasicEntityTimeField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityTimeField = BasicEntityTimeFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityTimeField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - material.TextField, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - variant: "outlined", - fullWidth: true, - multiline: true, - rows: 3, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.name); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.TextField, + __spreadValues(__spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + type: "time", + disabled: !field.ux.edit, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)), field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); } - function BasicEntityDateField(props) { + const CMPNAME$f = "BasicEntityDateTimeField"; + const { Open: Open$e } = gubu_minExports.Gubu; + const BasicEntityDateTimeFieldSpecShape = gubu_minExports.Gubu( + Open$e({ + field: Open$e({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$e({ + kind: gubu_minExports.Exact("DateTime"), + edit: gubu_minExports.Default(true), + props: Open$e({}) + }) + }) + }), + { name: CMPNAME$f } + ); + function BasicEntityDateTimeField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityDateTimeField = BasicEntityDateTimeFieldSpecShape(spec); + const { field, getValues, register, errors } = basicEntityDateTimeField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - material.TextField, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "date", - disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); + const err = errors[field.name]; + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.TextField, + __spreadValues({ + id: field.id, + name: field.name, + label: field.label, + fullWidth: true, + variant: "outlined", + type: "datetime-local", + disabled: !field.ux.edit, + InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } + }, register(field.name)) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, field.id); } - function BasicEntityTimeField(props) { + const CMPNAME$e = "BasicEntitySliderField"; + const { Open: Open$d } = gubu_minExports.Gubu; + const BasicEntityRatingFieldSpecShape = gubu_minExports.Gubu( + Open$d({ + field: Open$d({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$d({ + kind: gubu_minExports.Exact("Rating"), + edit: gubu_minExports.Default(true), + precision: 1, + props: Open$d({}) + }) + }) + }), + { name: CMPNAME$e } + ); + function BasicEntityRatingField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntityRatingField = BasicEntityRatingFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntityRatingField; const val = getValues(field.name); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val || 0 + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.FormLabel, { component: "legend", children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Rating, + __spreadValues({ + name: field.name, + value: controllerField.value, + precision: field.ux.precision, + onChange: (_2, newValue) => controllerField.onChange(newValue), + disabled: !field.ux.edit + }, field.ux.props) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-div`); + } + const CMPNAME$d = "BasicEntitySliderField"; + const { Open: Open$c } = gubu_minExports.Gubu; + const BasicEntityButtonFieldSpecShape = gubu_minExports.Gubu( + Open$c({ + field: Open$c({ + id: String, + name: String, + kind: "", + label: String, + ux: Open$c({ + kind: gubu_minExports.Exact("Button"), + edit: true, + variant: "contained", + props: Open$c({}) + }) + }) + }), + { name: CMPNAME$d } + ); + function BasicEntityButtonField(props) { + const { spec } = props; + const basicEntityButtonField = BasicEntityButtonFieldSpecShape(spec); + const { field } = basicEntityButtonField; return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - material.TextField, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "time", + material.Button, + __spreadProps(__spreadValues({ + variant: field.ux.variant, disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); - } - function BasicEntityDateTimeField(props) { + onClick: () => { + console.log("Button clicked"); + } + }, field.ux.props), { + children: field.label + }) + ) }, `${field.id}-div`); + } + const CMPNAME$c = "BasicEntitySliderField"; + const { Open: Open$b } = gubu_minExports.Gubu; + const BasicEntityButtonGroupFieldSpecShape = gubu_minExports.Gubu( + Open$b({ + field: Open$b({ + id: String, + name: String, + kind: "", + label: "", + options: Open$b({ + label: { field: "label" }, + value: { field: "value" }, + ents: Open$b({}) + }), + ux: Open$b({ + kind: gubu_minExports.Exact("ButtonGroup"), + edit: gubu_minExports.Default(true), + props: Open$b({}) + }) + }) + }), + { name: CMPNAME$c } + ); + function BasicEntityButtonGroupField(props) { + const { spec } = props; + const basicEntityButtonGroupField = BasicEntityButtonGroupFieldSpecShape(spec); + const { field } = basicEntityButtonGroupField; + return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx(material.ButtonGroup, __spreadProps(__spreadValues({ disabled: !field.ux.edit }, field.ux.props), { children: Object.entries(field.options.ents).map(([key, val]) => /* @__PURE__ */ jsxRuntimeExports.jsx(material.Button, { onClick: () => { + }, children: val == null ? void 0 : val[field.options.label.field] }, `${field.id}-${key}`)) })) }, `${field.id}-div`); + } + const CMPNAME$b = "BasicEntitySelectField"; + const { Open: Open$a } = gubu_minExports.Gubu; + const BasicEntitySelectFieldSpecShape = gubu_minExports.Gubu( + Open$a({ + field: Open$a({ + id: String, + name: String, + kind: "", + label: "", + cat: Open$a({ + default: "", + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$a({}) + }), + ux: Open$a({ + kind: gubu_minExports.Exact("Select"), + edit: gubu_minExports.Default(true) + }) + }) + }), + { name: CMPNAME$b } + ); + function BasicEntitySelectField(props) { + const { spec } = props; + const basicEntitySelectField = BasicEntitySelectFieldSpecShape(spec); + const { control, field, errors, getValues, setValue } = basicEntitySelectField; + const err = errors[field.name]; + const defaultValues = getValues(field.name + "_default$") || (field.cat.multiple === 1 ? "" : []); + const categories = getValues(field.name + "_cat$") || []; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name + "_uival$", + control, + defaultValue: defaultValues + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsxs(material.FormControl, { fullWidth: true, children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.InputLabel, { id: `${field.id}-label`, children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Select, + __spreadProps(__spreadValues({ + labelId: `${field.id}-label`, + id: `${field.id}-select`, + value: controllerField.value, + multiple: field.cat.multiple !== 1, + label: field.name, + onChange: (event) => { + const { value } = event.target; + setValue(field.name, Array.isArray(value) ? value.join(",") : value); + controllerField.onChange(value); + }, + disabled: !field.ux.edit + }, field.ux.props), { + children: categories.map((opt) => /* @__PURE__ */ jsxRuntimeExports.jsx(material.MenuItem, { value: opt.key, children: opt.title }, opt.key)) + }) + ) + ] }), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); + } + const CMPNAME$a = "BasicEntitySliderField"; + const { Open: Open$9 } = gubu_minExports.Gubu; + const BasicEntitySwitchFieldSpecShape = gubu_minExports.Gubu( + Open$9({ + field: Open$9({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$9({ + kind: gubu_minExports.Exact("Switch"), + edit: gubu_minExports.Default(true), + props: Open$9({}) + }) + }) + }), + { name: CMPNAME$a } + ); + function BasicEntitySwitchField(props) { const { spec } = props; - const { field, register, getValues } = spec; + const basicEntitySwitchField = BasicEntitySwitchFieldSpecShape(spec); + const { control, field, getValues, errors } = basicEntitySwitchField; const val = getValues(field.name); - return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx( - material.TextField, - __spreadValues({ - id: field.id, - name: field.name, - label: field.label, - fullWidth: true, - variant: "outlined", - type: "datetime-local", - disabled: !field.ux.edit, - InputLabelProps: { shrink: (val == null ? void 0 : val.length) > 0 } - }, register(field.name)) - ) }, field.id); + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control, + defaultValue: !!val + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.FormControlLabel, + { + control: /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Switch, + __spreadValues({ + id: field.id, + checked: controllerField.value, + onChange: controllerField.onChange, + disabled: !field.ux.edit + }, field.ux.props) + ), + label: field.label + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); + } + const CMPNAME$9 = "BasicEntitySliderField"; + const { Open: Open$8 } = gubu_minExports.Gubu; + const BasicEntityToggleButtonFieldSpecShape = gubu_minExports.Gubu( + Open$8({ + field: Open$8({ + id: String, + name: String, + kind: "", + label: "", + cat: Open$8({ + default: "", + title: String, + multiple: Number, + order: { + sort: "", + exclude: "", + include: "" + }, + item: Open$8({}) + }), + ux: Open$8({ + kind: gubu_minExports.Exact("ToggleButton"), + edit: gubu_minExports.Default(true), + props: Open$8({}) + }) + }) + }), + { name: CMPNAME$9 } + ); + function BasicEntityToggleButtonField(props) { + const { spec } = props; + const basicEntityToggleButtonField = BasicEntityToggleButtonFieldSpecShape(spec); + const { control, field, errors } = basicEntityToggleButtonField; + const err = errors[field.name]; + const { + field: controllerField, + fieldState: { error } + } = useController({ + name: field.name, + control + }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.FormLabel, { component: "legend", children: field.label }), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.ToggleButtonGroup, + __spreadProps(__spreadValues({ + value: controllerField.value, + exclusive: field.cat.multiple === 1 ? true : false, + onChange: (_2, v) => { + field.cat.multiple === 1 ? controllerField.onChange(v) : controllerField.onChange([v]); + }, + disabled: !field.ux.edit + }, field.ux.props), { + children: Object.entries(field.cat.item).map(([key, val]) => /* @__PURE__ */ jsxRuntimeExports.jsx(material.ToggleButton, { value: key, children: val == null ? void 0 : val.title }, `${field.id}-${key}`)) + }) + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityFieldError, { err }) + ] }, `${field.id}-box`); + } + const { Open: Open$7, Child: Child$4 } = gubu_minExports.Gubu; + const Shape$2 = gubu_minExports.Gubu( + Open$7({ + field: {} + }), + { name: "BasicEntityField" } + ); + function VxgBasicEntityFieldPlugin(options) { + const seneca = this; + const spec = Shape$2(options.spec); + options.setPlugin(true); + return { + exports: { + handle: {} + } + }; + } + Object.assign(VxgBasicEntityFieldPlugin, { + defaults: { + spec: {}, + setPlugin: Function + } + }); + Object.defineProperty(VxgBasicEntityFieldPlugin, "name", { + value: "VxgBasicEntityFieldPlugin" + }); + const CMPNAME$8 = "BasicEntityField"; + const { Open: Open$6 } = gubu_minExports.Gubu; + const BasicEntityFieldSpecShape = gubu_minExports.Gubu( + Open$6({ + cid: String, + field: Open$6({ + id: String, + name: String, + kind: "", + label: "", + ux: Open$6({ + kind: gubu_minExports.Exact( + "Text", + "TextBox", + "Date", + "DateTime", + "Time", + "Checkbox", + "Autocomplete", + "Slider", + "RadioGroup", + "Rating", + "Button", + "ButtonGroup", + "Select", + "Switch", + "ToggleButton", + "custom" + ), + edit: gubu_minExports.Default(true), + rows: gubu_minExports.Default(3), + props: Open$6({}) + }) + }) + }), + { name: CMPNAME$8 } + ); + const fieldMap = { + Text: BasicEntityTextField, + TextBox: BasicEntityTextBoxField, + Date: BasicEntityDateField, + DateTime: BasicEntityDateTimeField, + Time: BasicEntityTimeField, + Checkbox: BasicEntityCheckboxField, + Autocomplete: BasicEntityAutocompleteField, + Slider: BasicEntitySliderField, + RadioGroup: BasicEntityRadioGroupField, + Rating: BasicEntityRatingField, + Button: BasicEntityButtonField, + ButtonGroup: BasicEntityButtonGroupField, + Select: BasicEntitySelectField, + Switch: BasicEntitySwitchField, + ToggleButton: BasicEntityToggleButtonField + }; + function BasicEntityField(props) { + const { ctx, spec } = props; + const { seneca, cmp } = ctx(); + const basicEntityField = BasicEntityFieldSpecShape(spec); + const [plugin, setPlugin] = React$1.useState(false); + const cid = basicEntityField.cid + "-" + basicEntityField.field.name; + React$1.useEffect(() => { + if (!plugin) { + seneca.use({ + tag: cid, + define: VxgBasicEntityFieldPlugin, + options: { + spec: { + field: basicEntityField.field + }, + setPlugin + } + }); + } + }, []); + const field = spec.field; + const Field = "custom" === field.ux.kind ? cmp[field.ux.cmp] : fieldMap[field.ux.kind]; + return Field ? /* @__PURE__ */ jsxRuntimeExports.jsx(Field, { ctx, spec: basicEntityField }) : /* @__PURE__ */ jsxRuntimeExports.jsx("div", {}); } const { Open: Open$5, Child: Child$3 } = gubu_minExports.Gubu; - const Shape$1 = gubu_minExports.Gubu(Open$5({ - name: String, - prefix: String, - ent: String, - order: [String], - field: Child$3({}, {}) - }), { name: "BasicEntityEdit" }); + const Shape$1 = gubu_minExports.Gubu( + Open$5({ + name: String, + prefix: String, + ent: String, + order: [String], + field: Child$3({}, {}) + }), + { name: "BasicEntityEdit" } + ); function VxgBasicEntityEditPlugin(options) { const seneca = this; const spec = Shape$1(options.spec); const slot = spec.prefix + spec.name; - const fields = spec.order.reduce((a, fn) => (fixField(fn, spec.field[fn], spec), a.push(spec.field[fn]), a), []); + console.log("VxgBasicEntityEditPlugin", "slot", slot, "spec.name", spec.name); + const fields = spec.order.reduce( + (a, fn) => (fixField(fn, spec.field[fn], spec), a.push(spec.field[fn]), a), + [] + ); + for (const field of fields) { + if ("Date" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Date(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.locald; + console.log("modify_edit_Date", item[field.name]); + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Date(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("Time" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Time(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.localt; + console.log("modify_edit_Time", item[field.name]); + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Time(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("DateTime" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Datetime(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + const dt = util$1.dateTimeFromUTC(item[field.name]); + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_udm$"] = dt.udm; + item[field.name] = dt.locald + "T" + dt.localt; + } + return item; + }); + } + ).add( + "aim:app,on:BasicLed,modify:save", + { view: spec.name }, + function modify_save_Datetime(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + const dt = util$1.localDateTimeToUTC(item[field.name]); + item[field.name] = dt; + return item; + }); + } + ); + } else if ("Slider" === field.ux.kind) { + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Slider(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_uival$"] = Number(item[field.name]) / 60; + item[field.name + "_marks$"] = util$1.resolveMarks( + field.ux.props.marks + ); + } + return item; + }); + } + ); + } else if ("Select" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "Select", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Select(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = resdefault( + field.cat, + (val) => val + ); + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val) => val + ); + } + return item; + }); + } + ); + } else if ("Autocomplete" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "Autocomplete", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_Autocomplete(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = resdefault( + field.cat, + (val, item2) => ({ + key: val, + title: item2.title + }) + ); + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val, item2) => ({ + key: val, + title: item2.title + }) + ); + } + return item; + }); + } + ); + } else if ("RadioGroup" === field.ux.kind) { + console.log("VxgBasicEntityEditPlugin", "RadioGroup", field.name); + seneca.add( + "aim:app,on:BasicLed,modify:edit", + { view: spec.name }, + function modify_edit_RadioGroup(msg) { + return __async(this, null, function* () { + const out = yield this.prior(msg); + let item = __spreadValues({}, out); + if (!item[field.name + "_orig$"]) { + item[field.name + "_orig$"] = item[field.name]; + item[field.name + "_default$"] = field.cat.default; + item[field.name + "_cat$"] = Object.keys(field.cat.item).map( + (key) => { + var _a, _b; + return { + title: (_b = (_a = field.cat.item) == null ? void 0 : _a[key]) == null ? void 0 : _b.title, + key + }; + } + ); + item[field.name + "_uival$"] = resvalue( + item[field.name], + field.cat, + (val) => val + ); + } + return item; + }); + } + ); + } + } options.setPlugin(true); return { exports: { @@ -64921,7 +65851,8 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha spec, slot, fields - } + }, + util: util$1 } }; } @@ -64931,46 +65862,135 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha field.ux = field.ux || {}; field.ux.size = null == field.ux.size ? 4 : parseInt(field.ux.size, 10); } + const util$1 = { + resolveMarks: (marks) => { + if (!marks || typeof marks === "object" && !Object.keys(marks).length) + return false; + return typeof marks === "object" ? Object.entries(marks).map(([key, value]) => ({ + label: value, + value: +key + })) : marks; + }, + dateTimeFromUTC: (utc, tz) => { + const date = new Date(utc); + const iso = date.toISOString(); + const isod = iso.split("T")[0]; + const isot = iso.split("T")[1].split(".")[0]; + const udm = date.getUTCHours() * 60 * 60 * 1e3 + date.getUTCMinutes() * 60 * 1e3 + date.getUTCSeconds() * 1e3 + date.getUTCMilliseconds(); + let out = { + utc, + date, + isod, + isot, + udm + }; + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const dateFormatter = new Intl.DateTimeFormat("en-GB", { + timeZone: tz, + year: "numeric", + month: "2-digit", + day: "2-digit" + }); + const timeFormatter = new Intl.DateTimeFormat("en-GB", { + timeZone: tz, + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + hour12: false + }); + const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); + const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); + out.locald = `${year}-${month}-${day}`; + out.localt = `${hour}:${minute}:${second}`; + return out; + }, + localTimeToUTC: (timeString, tz) => { + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; + const now = /* @__PURE__ */ new Date(); + const [hours, minutes, seconds] = timeString.split(":").map(Number); + const localDate = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate(), + hours, + minutes, + seconds + ); + const utcTimestamp = Date.UTC( + localDate.getFullYear(), + localDate.getMonth(), + localDate.getDate(), + localDate.getHours(), + localDate.getMinutes(), + localDate.getSeconds() + ); + const tzOffset = new Date(utcTimestamp).getTimezoneOffset() * 6e4; + return utcTimestamp - tzOffset; + }, + localDateTimeToUTC: (dateOrDateTimeString, tz) => { + const date = new Date(dateOrDateTimeString); + if (isNaN(date.getTime())) { + throw new Error("Invalid date or datetime string"); + } + if (tz) { + const tzDate = new Date(date.toLocaleString("en-GB", { timeZone: tz })); + const offset2 = date.getTime() - tzDate.getTime(); + return date.getTime() + offset2; + } + return date.getTime(); + } + }; Object.assign(VxgBasicEntityEditPlugin, { defaults: { spec: {}, setPlugin: Function } }); - Object.defineProperty(VxgBasicEntityEditPlugin, "name", { value: "VxgBasicEntityEditPlugin" }); + Object.defineProperty(VxgBasicEntityEditPlugin, "name", { + value: "VxgBasicEntityEditPlugin" + }); const CMPNAME$7 = "BasicEntityEdit"; - const makeResolver = (seneca, spec) => React$1.useCallback((data) => __async(this, null, function* () { - const { ent, name } = spec; - const view = name; - let entity = seneca.entity(ent); - entity = entity.make$().data$(data); - let errors = entity.valid$({ errors: true }); - seneca.act("aim:app,on:BasicLed,entity:valid", { - view, - entity, - errors - }); - const errmsg = seneca.context.errmsg; - errors = errors.map((e) => (e.tag_kind = "ent", e)).reduce((a, e, _2) => (a[e.key] = { - type: e.type, - message: errmsg ? (_2 = errmsg.find(e)) ? _2.text : e.text : e.text - }, a), {}); - const values2 = entity.data$(false); - const out = { - values: values2, - errors - }; - return out; - }), [spec.ent]); + const makeResolver = (seneca, spec) => React$1.useCallback( + (data) => __async(this, null, function* () { + const { ent, name } = spec; + const view = name; + let entity = seneca.entity(ent); + entity = entity.make$().data$(data); + let errors = entity.valid$({ errors: true }); + seneca.act("aim:app,on:BasicLed,entity:valid", { + view, + entity, + errors + }); + const errmsg = seneca.context.errmsg; + errors = errors.map((e) => (e.tag_kind = "ent", e)).reduce( + (a, e, _2) => (a[e.key] = { + type: e.type, + message: errmsg ? (_2 = errmsg.find(e)) ? _2.text : e.text : e.text + }, a), + {} + ); + const values2 = entity.data$(false); + const out = { + values: values2, + errors + }; + console.log("makeResolver", "out", out); + return out; + }), + [spec.ent] + ); function BasicEntityEdit(props) { const { ctx } = props; const { seneca } = ctx(); const [plugin, setPlugin] = React$1.useState(false); const [ready, setReady] = React$1.useState(false); + const cmpId = useSanitizedId(); + const cid = props.spec.name + "-" + cmpId; React$1.useEffect(() => { if (!plugin) { seneca.use({ - tag: props.spec.name, + tag: cid, define: VxgBasicEntityEditPlugin, options: { spec: props.spec, @@ -64979,7 +65999,9 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha }); } }, []); - const { spec, slot, fields } = seneca.export("VxgBasicEntityEditPlugin/handle") || { spec: {}, slot: null, fields: [] }; + const { spec, slot, fields } = seneca.export( + "VxgBasicEntityEditPlugin$" + cid + "/handle" + ) || { spec: {}, slot: null, fields: [] }; const { ent, name } = spec; if (plugin && !ready) { seneca.act("aim:app,on:BasicLed,ready:edit", { view: name, setReady }); @@ -64987,13 +66009,23 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const slotSelectors = seneca.export("Redux/slotSelectors"); let { selectItem, selectList, selectMeta } = slotSelectors(slot); let item = reactRedux.useSelector((state) => selectItem(state)); - if (item && name) { - item = seneca.direct("aim:app,on:BasicLed,modify:edit", { - view: name, - item, - fields + React$1.useEffect(() => { + const modifyEdit = () => __async(this, null, function* () { + console.log("BEE", "effect", "modify:edit", "init", "view", name); + console.log("BEE", "effect", "modify:edit", "init", "item", item); + if (item && name) { + console.log("BEE", "effect", "modify:edit", "seneca.direct"); + item = yield seneca.direct("aim:app,on:BasicLed,modify:edit", { + view: name, + item, + fields + }); + console.log("BEE", "effect", "resetting", item); + reset(item); + } }); - } + modifyEdit(); + }, [item, name]); const params = reactRouterDom.useParams(); React$1.useEffect(() => { if (ready) { @@ -65004,7 +66036,6 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha item_id: params.item }); } - reset(item); } }, [null == item, ready]); const resolver = makeResolver(seneca, spec); @@ -65012,60 +66043,94 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha register, handleSubmit, getValues, + setValue, reset, + control, formState: { errors } } = useForm({ mode: "onChange", resolver }); - const onSubmit = (data) => { - seneca.act("aim:app,on:BasicLed,save:item", { view: name, data }); - }; + const onSubmit = (data) => __async(this, null, function* () { + console.log("BasicEntityEdit", "onSubmit", "data", data); + const modifiedData = yield seneca.direct( + "aim:app,on:BasicLed,modify:save", + { + view: name, + data, + fields + } + ); + seneca.act("aim:app,on:BasicLed,save:item", { + view: name, + data: modifiedData + }); + }); return /* @__PURE__ */ jsxRuntimeExports.jsx(material.Box, { className: "vxg-BasicEntityEdit", children: item ? /* @__PURE__ */ jsxRuntimeExports.jsxs( "form", { className: "vxg-BasicEntityEdit-form", onSubmit: handleSubmit(onSubmit), children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx(material.Grid, { container: true, spacing: 2, children: fields.map( - (field) => /* @__PURE__ */ jsxRuntimeExports.jsx( - material.Grid, - { - item: true, - xs: field.ux.size, - children: /* @__PURE__ */ jsxRuntimeExports.jsx( - BasicEntityField, - { - ctx, - spec: { - field, - register, - getValues, - errors - } - } - ) - }, - field.id - ) - ) }), + /* @__PURE__ */ jsxRuntimeExports.jsx(material.Grid, { container: true, spacing: 2, children: fields.map((field) => /* @__PURE__ */ jsxRuntimeExports.jsx(material.Grid, { item: true, xs: field.ux.size, children: /* @__PURE__ */ jsxRuntimeExports.jsx( + BasicEntityField, + { + ctx, + spec: { + cid, + field, + register, + getValues, + setValue, + control, + errors + } + } + ) }, field.id)) }), /* @__PURE__ */ jsxRuntimeExports.jsx(material.Toolbar, { className: "vxg-BasicEntityEdit-toolbar-foot", children: /* @__PURE__ */ jsxRuntimeExports.jsx(material.Button, { type: "submit", variant: "contained", children: "Save" }) }) ] } ) : /* @__PURE__ */ jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, {}) }); } + var Check = {}; + "use strict"; + "use client"; + var _interopRequireDefault = interopRequireDefaultExports; + Object.defineProperty(Check, "__esModule", { + value: true + }); + var default_1 = Check.default = void 0; + var _createSvgIcon = _interopRequireDefault(requireCreateSvgIcon()); + var _jsxRuntime = requireJsxRuntime(); + var _default = default_1 = Check.default = (0, _createSvgIcon.default)(/* @__PURE__ */ (0, _jsxRuntime.jsx)("path", { + d: "M9 16.17 4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z" + }), "Check"); + function BasicAlert({ + children, + severity + }) { + return /* @__PURE__ */ jsxRuntimeExports.jsx(Alert, { icon: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1, { fontSize: "inherit" }), severity, children }); + } const CMPNAME$6 = "BasicLedHead"; const { Open: Open$4, Child: Child$2 } = gubu_minExports.Gubu; - const BasicLedHeadSpecShape = gubu_minExports.Gubu(Open$4({ - tool: Child$2({ - id: String, - kind: String, - custom: "" - }, {}), - mui: Open$4({ - Toolbar: Open$4({}) - }) - }), { name: CMPNAME$6 }); + const BasicLedHeadSpecShape = gubu_minExports.Gubu( + Open$4({ + tool: Child$2( + { + id: String, + kind: String, + custom: "" + }, + {} + ), + ux: Open$4({ + props: { + Toolbar: Open$4({}) + } + }) + }), + { name: CMPNAME$6 } + ); function BasicLedHead(props) { const { ctx, spec } = props; const { seneca, custom } = ctx(); @@ -65082,46 +66147,40 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const state = { item, view: viewState, navigate }; const subview = "/view/" + viewName === loc.pathname ? "list" : "edit"; const customButtons = Object.values(spec.tool || {}).filter((t) => "button" === t.kind).map((t) => (custom.BasicLedHead || {})[t.custom]).filter((t) => null != t); - return /* @__PURE__ */ jsxRuntimeExports.jsx(material.Box, { className: "bxg-BasicLedHead", children: /* @__PURE__ */ jsxRuntimeExports.jsxs( - material.Toolbar, - { - className: "vxg-BasicLedHead-toolbar", - variant: "dense", - children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - material.Button, - { - color: "inherit", - onClick: () => navigate(-1), - disabled: "list" === subview, - children: "Back" - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx( - material.Button, - { - color: "inherit", - onClick: () => seneca.act("aim:app,on:view,add:item", { view: viewName }), - disabled: "edit" === subview, - children: "Add" - } - ), - customButtons.map( - (cb) => /* @__PURE__ */ jsxRuntimeExports.jsx( - material.Button, - __spreadProps(__spreadValues({ - color: "inherit", - onClick: () => seneca.act(cb.msg(state, spec, ctx)), - disabled: cb.disabled(state, spec, ctx) - }, cb.attr(state, spec, ctx)), { - children: cb.title(state, spec, ctx) - }), - cb.id - ) - ) - ] - } - ) }); + return /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { className: "bxg-BasicLedHead", children: [ + /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Toolbar, { className: "vxg-BasicLedHead-toolbar", variant: "dense", children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Button, + { + color: "inherit", + onClick: () => navigate(-1), + disabled: "list" === subview, + children: "Back" + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Button, + { + color: "inherit", + onClick: () => seneca.act("aim:app,on:view,add:item", { view: viewName }), + disabled: "edit" === subview, + children: "Add" + } + ), + customButtons.map((cb) => /* @__PURE__ */ jsxRuntimeExports.jsx( + material.Button, + __spreadProps(__spreadValues({ + color: "inherit", + onClick: () => seneca.act(cb.msg(state, spec, ctx)), + disabled: cb.disabled(state, spec, ctx) + }, cb.attr(state, spec, ctx)), { + children: cb.title(state, spec, ctx) + }), + cb.id + )) + ] }), + viewState.alert.active ? /* @__PURE__ */ jsxRuntimeExports.jsx(BasicAlert, { severity: viewState.alert.level, children: viewState.alert.message }) : null + ] }); } const CMPNAME$5 = "BasicLedFoot"; const { Open: Open$3 } = gubu_minExports.Gubu; @@ -65138,27 +66197,30 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: /* @__PURE__ */ jsxRuntimeExports.jsx("h3", { children: "Loading..." }) }); } const { Open: Open$2 } = gubu_minExports.Gubu; - const Shape = gubu_minExports.Gubu({ - name: String, - title: String, - active: Boolean, - kind: String, - def: { - ent: String, - head: Open$2({ - active: false - }), - list: Open$2({ - active: false - }), - edit: Open$2({ - active: false - }), - foot: Open$2({ - active: false - }) - } - }, { name: "BasicLed" }); + const Shape = gubu_minExports.Gubu( + { + name: String, + title: String, + active: Boolean, + kind: String, + def: { + ent: String, + head: Open$2({ + active: false + }), + list: Open$2({ + active: false + }), + edit: Open$2({ + active: false + }), + foot: Open$2({ + active: false + }) + } + }, + { name: "BasicLed" } + ); function VxgBasicLedPlugin(options) { const seneca = this; const spec = Shape(options.spec); @@ -65197,34 +66259,17 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha setReady(true); reply(); } - ).add( - "aim:app,on:BasicLed,modify:edit", - function(msg) { - let item = msg.item; - let fields = msg.fields; - if (null == item) return item; - item = __spreadValues({}, item); - for (const field of fields) { - if ("Date" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.locald; - } else if ("Time" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.localt; - } else if ("DateTime" === field.ux.kind) { - const dt = util$1.dateTimeFromUTC(item[field.name]); - item[field.name + "_orig$"] = item[field.name]; - item[field.name + "_udm$"] = dt.udm; - item[field.name] = dt.locald + "T" + dt.localt; - } - } - return item; - } - ).message( + ).add("aim:app,on:BasicLed,modify:edit", function modify_edit(msg) { + let item = msg.item; + if (null == item) return item; + item = __spreadValues({}, item); + return item; + }).add("aim:app,on:BasicLed,modify:save", function modify_save(msg) { + let item = msg.data; + if (null == item) return item; + item = __spreadValues({}, item); + return item; + }).message( "aim:app,on:BasicLed,edit:item,redux$:true", { item_id: String }, function(msg, meta) { @@ -65253,7 +66298,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } ).message( "aim:app,on:BasicLed,save:item", - function(msg) { + function(msg, meta) { return __async(this, null, function* () { const data = Object.entries(spec.def.edit.field).filter((n) => false !== n[1].ux.edit).reduce((a, n) => (a[n[0]] = msg.data[n[0]], a), {}); const item = yield seneca.entity(entCanon).save$(data); @@ -65282,46 +66327,10 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha edit: editSpec, head: headSpec, foot: footSpec - }, - util: util$1 + } } }; } - const util$1 = { - dateTimeFromUTC: (utc, tz) => { - const date = new Date(utc); - const iso = date.toISOString(); - const isod = iso.split("T")[0]; - const isot = iso.split("T")[1].split(".")[0]; - const udm = date.getUTCHours() * 60 * 60 * 1e3 + date.getUTCMinutes() * 60 * 1e3 + date.getUTCSeconds() * 1e3 + date.getUTCMilliseconds(); - let out = { - utc, - date, - isod, - isot, - udm - }; - tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone; - const dateFormatter = new Intl.DateTimeFormat("en-GB", { - timeZone: tz, - year: "numeric", - month: "2-digit", - day: "2-digit" - }); - const timeFormatter = new Intl.DateTimeFormat("en-GB", { - timeZone: tz, - hour: "2-digit", - minute: "2-digit", - second: "2-digit", - hour12: false - }); - const [{ value: day }, , { value: month }, , { value: year }] = dateFormatter.formatToParts(date); - const [{ value: hour }, , { value: minute }, , { value: second }] = timeFormatter.formatToParts(date); - out.locald = `${year}-${month}-${day}`; - out.localt = `${hour}:${minute}:${second}`; - return out; - } - }; VxgBasicLedPlugin.defaults = { spec: {}, navigate: Function @@ -65332,12 +66341,14 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const { ctx } = props; const { seneca } = ctx(); const name = props.spec.name; + const uniqueIdRef = React$1.useRef(seneca.util.Nid()); + const cid = name; const navigate = reactRouterDom.useNavigate(); const led = reactRedux.useSelector((state) => state.main.view[name]); const ready = true === (led == null ? void 0 : led.ready); if (!ready) { seneca.use({ - tag: name, + tag: cid, define: VxgBasicLedPlugin, options: { spec: props.spec, @@ -65345,13 +66356,25 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha } }); } - const { head, list, edit, foot } = seneca.export("VxgBasicLedPlugin$" + name + "/spec") || {}; + const { head, list, edit, foot } = seneca.export("VxgBasicLedPlugin$" + cid + "/spec") || {}; return ready ? /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { className: "vxg-BasicLed", children: [ head.active && /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLedHead, { ctx, spec: head }), /* @__PURE__ */ jsxRuntimeExports.jsxs(reactRouterDom.Routes, { children: [ /* @__PURE__ */ jsxRuntimeExports.jsx(reactRouterDom.Route, { path: "/", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityList, { ctx, spec: list }) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(reactRouterDom.Route, { path: "/edit/:item", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(reactRouterDom.Route, { path: "/add", element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) }) + /* @__PURE__ */ jsxRuntimeExports.jsx( + reactRouterDom.Route, + { + path: "/edit/:item", + element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx( + reactRouterDom.Route, + { + path: "/add", + element: /* @__PURE__ */ jsxRuntimeExports.jsx(BasicEntityEdit, { ctx, spec: edit }) + } + ) ] }), foot.active && /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLedFoot, { ctx, spec: foot }) ] }) : /* @__PURE__ */ jsxRuntimeExports.jsx(BasicLoading, {}); @@ -65366,12 +66389,16 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha default: String } }, - view: Child$1(Open$1({ - kind: String - })), - mui: { - Box: {}, - Container: {} + view: Child$1( + Open$1({ + kind: String + }) + ), + ux: { + props: { + Box: {}, + Container: {} + } } }); function BasicMain(props) { @@ -65397,7 +66424,7 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha material.Box, __spreadProps(__spreadValues({ className: "vxg-BasicMain" - }, basicMainSpec.mui.Box), { + }, basicMainSpec.ux.props.Box), { sx: (theme) => ({ // TODO: should use actual toolbar height; 16 should be from standard spacing marginTop: theme.mixins.toolbar.minHeight + 38 + "px", @@ -65405,30 +66432,33 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha marginBottom: 0, marginRight: 0 }), - children: /* @__PURE__ */ jsxRuntimeExports.jsx( - material.Container, - __spreadProps(__spreadValues({}, basicMainSpec.mui.Container), { - children: View && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { ctx, spec: viewSpec }) - }) - ) + children: /* @__PURE__ */ jsxRuntimeExports.jsx(material.Container, __spreadProps(__spreadValues({}, basicMainSpec.ux.props.Container), { children: View && /* @__PURE__ */ jsxRuntimeExports.jsx(View, { ctx, spec: viewSpec }) })) }) ); } const CMPNAME$1 = "BasicSide"; const { Child, Open, Required } = gubu_minExports.Gubu; - const BasicSideSpecShape = gubu_minExports.Gubu({ - side: { - name: String, - active: Boolean + const BasicSideSpecShape = gubu_minExports.Gubu( + { + side: { + name: String, + active: Boolean + }, + view: Child( + Open({ + title: String + }), + Required({}) + ), + // Set MUI component props directly + ux: { + props: { + Drawer: {} + } + } }, - view: Child(Open({ - title: String - }), Required({})), - // Set MUI component props directly - mui: { - Drawer: {} - } - }, { name: CMPNAME$1 }); + { name: CMPNAME$1 } + ); function BasicSide(props) { const { spec, ctx } = props; const basicSideSpec = BasicSideSpecShape(spec); @@ -65449,7 +66479,10 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha }) }) }); - const selectView = React$1.useCallback((view) => navigate("/view/" + view), []); + const selectView = React$1.useCallback( + (view) => navigate("/view/" + view), + [] + ); return /* @__PURE__ */ jsxRuntimeExports.jsx( material.Drawer, __spreadProps(__spreadValues({ @@ -65464,54 +66497,47 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha width: "var(--vxg-side-width)" } }) - }, spec.mui.Drawer), { - children: sections.map( - (section) => /* @__PURE__ */ jsxRuntimeExports.jsxs(React$1.Fragment, { children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx( - material.List, - { - className: "vxg-BasicSide-section", - "data-vxg-basicside-section": section.name, - children: section.items.map( - (item) => /* @__PURE__ */ jsxRuntimeExports.jsx( - material.ListItem, - { - disablePadding: true, - className: "vxg-BasicSide-section-item", - "data-vxg-basicside-section-item": item.name, - children: /* @__PURE__ */ jsxRuntimeExports.jsxs( - material.ListItemButton, - { - onClick: () => selectView(item.view), - children: [ - /* @__PURE__ */ jsxRuntimeExports.jsx(material.ListItemIcon, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1$u, {}) }), - /* @__PURE__ */ jsxRuntimeExports.jsx(material.ListItemText, { primary: item.title }) - ] - } - ) - }, - item.name - ) - ) - } - ), - /* @__PURE__ */ jsxRuntimeExports.jsx(material.Divider, {}) - ] }, section.name) - ) + }, spec.ux.props.Drawer), { + children: sections.map((section) => /* @__PURE__ */ jsxRuntimeExports.jsxs(React$1.Fragment, { children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx( + material.List, + { + className: "vxg-BasicSide-section", + "data-vxg-basicside-section": section.name, + children: section.items.map((item) => /* @__PURE__ */ jsxRuntimeExports.jsx( + material.ListItem, + { + disablePadding: true, + className: "vxg-BasicSide-section-item", + "data-vxg-basicside-section-item": item.name, + children: /* @__PURE__ */ jsxRuntimeExports.jsxs(material.ListItemButton, { onClick: () => selectView(item.view), children: [ + /* @__PURE__ */ jsxRuntimeExports.jsx(material.ListItemIcon, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(default_1$v, {}) }), + /* @__PURE__ */ jsxRuntimeExports.jsx(material.ListItemText, { primary: item.title }) + ] }) + }, + item.name + )) + } + ), + /* @__PURE__ */ jsxRuntimeExports.jsx(material.Divider, {}) + ] }, section.name)) }) ); } const CMPNAME = "BasicAdmin"; - const BasicAdminSpecShape = gubu_minExports.Gubu({ - frame: { - name: String, - kind: String, - part: {}, - view: {}, - nav: {}, - tool: {} - } - }, { name: CMPNAME }); + const BasicAdminSpecShape = gubu_minExports.Gubu( + { + frame: { + name: String, + kind: String, + part: {}, + view: {}, + nav: {}, + tool: {} + } + }, + { name: CMPNAME } + ); function Loading() { return /* @__PURE__ */ jsxRuntimeExports.jsx(material.Container, { children: "LOADING" }); } @@ -65533,23 +66559,29 @@ To suppress this warning, you need to explicitly provide the \`palette.${key}Cha const headSpec = { head, tool: model.app.web.frame.private.tool, - mui: { - // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ - AppBar: { style: { zIndex: 4e3 } } + ux: { + props: { + // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ + AppBar: { style: { zIndex: 4e3 } } + } } }; const sideSpec = { side, view: model.app.web.frame.private.view, - mui: { - Drawer: { style: { zIndex: 3e3 } } + ux: { + props: { + Drawer: { style: { zIndex: 3e3 } } + } } }; const mainSpec = { main: main2, view: model.app.web.frame.private.view, - mui: { - Container: { style: { zIndex: 1e3 } } + ux: { + props: { + Container: { style: { zIndex: 1e3 } } + } } }; return "done" === ready ? /* @__PURE__ */ jsxRuntimeExports.jsxs(material.Box, { className: "vxg-BasicAdmin", children: [ diff --git a/dist/vxg-util.d.ts b/dist/vxg-util.d.ts index 22c3ccc..591a2c5 100644 --- a/dist/vxg-util.d.ts +++ b/dist/vxg-util.d.ts @@ -11,4 +11,22 @@ declare namespace vmap { var KEY: (_: any, p: any) => any; } declare function searchParamsToObject(searchParams: URLSearchParams): any; -export { cmap, vmap, searchParamsToObject, }; +declare function resvalue(value: object | any[] | string, cat: { + multiple: number; + item: Record; +}, mapFn: (val: string, item: { + title: string; +}) => any): any; +declare function resdefault(cat: { + multiple: number; + item: Record; + default: string; +}, mapFn: (val: string, item: { + title: string; +}) => any): any; +declare function useSanitizedId(): string; +export { cmap, vmap, searchParamsToObject, resvalue, resdefault, useSanitizedId, }; diff --git a/src/lib/BasicAdmin.tsx b/src/lib/BasicAdmin.tsx index 4262e61..179ca04 100644 --- a/src/lib/BasicAdmin.tsx +++ b/src/lib/BasicAdmin.tsx @@ -16,115 +16,109 @@ import { BasicMain } from './BasicMain' import { BasicSide } from './BasicSide' //import { BasicFoot } from './BasicFoot' - - const CMPNAME = 'BasicAdmin' - - -const BasicAdminSpecShape = Gubu({ - frame: { - name: String, - kind: String, - part: {}, - view: {}, - nav: {}, - tool: {}, - } -}, {name: CMPNAME}) - +const BasicAdminSpecShape = Gubu( + { + frame: { + name: String, + kind: String, + part: {}, + view: {}, + nav: {}, + tool: {}, + }, + }, + { name: CMPNAME } +) // TODO: need a BasicLoadingSplash -function Loading() { +function Loading () { return LOADING } - function BasicAdmin (props: BasicProps) { const { ctx, spec } = props const ctxval = ctx() const { model } = ctxval - + const [ready, setReady] = useState('init') - - useEffect(()=>{ - if('init' !== ready) { + + useEffect(() => { + if ('init' !== ready) { return } - init(ctxval, ()=>{ + init(ctxval, () => { setReady('done') }) - },[]) + }, []) - const basicAdminSpec: Spec = BasicAdminSpecShape(spec) const { head, side, main, foot } = basicAdminSpec.frame.part - // TODO: Review source of mui styles // NOTE: keep separate from frontend part definitions as implementation const headSpec = { head, tool: model.app.web.frame.private.tool, - mui: { - // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ - AppBar: { style: { zIndex: 4000 } } - } + ux: { + props: { + // TODO: set in theme: https://mui.com/material-ui/customization/z-index/ + AppBar: { style: { zIndex: 4000 } }, + }, + }, } const sideSpec = { side, view: model.app.web.frame.private.view, - mui: { - Drawer: { style: { zIndex: 3000 } } - } + ux: { + props: { + Drawer: { style: { zIndex: 3000 } }, + }, + }, } - + const mainSpec = { main, view: model.app.web.frame.private.view, - mui: { - Container: { style: { zIndex: 1000 } } - } + ux: { + props: { + Container: { style: { zIndex: 1000 } }, + }, + }, } - return ( - 'done' === ready ? + return 'done' === ready ? ( - { head?.active && } - { side?.active && } - { main?.active && } + {head?.active && } + {side?.active && } + {main?.active && } - : + ) : ( + ) } - - - -async function init(ctx: any, done: any) { +async function init (ctx: any, done: any) { const { seneca, router } = ctx - - seneca.context.vxg = (seneca.context.vxg || {}) - seneca.context.vxg.BasicAdmin = (seneca.context.vxg.BasicAdmin || {}) + + seneca.context.vxg = seneca.context.vxg || {} + seneca.context.vxg.BasicAdmin = seneca.context.vxg.BasicAdmin || {} // Only setup Seneca once - if(!seneca.context.vxg.BasicAdmin.preparing) { + if (!seneca.context.vxg.BasicAdmin.preparing) { seneca.context.vxg.BasicAdmin.preparing = true - - seneca - .use(VxgBasicAdminPlugin) + + seneca.use(VxgBasicAdminPlugin) // await seneca.ready(done) await seneca.ready() return done() } } -export { - BasicAdmin -} - +export { BasicAdmin } /* diff --git a/src/lib/BasicAlert.tsx b/src/lib/BasicAlert.tsx new file mode 100644 index 0000000..bacc773 --- /dev/null +++ b/src/lib/BasicAlert.tsx @@ -0,0 +1,19 @@ +import React from 'react' +import Alert from '@mui/material/Alert' +import CheckIcon from '@mui/icons-material/Check' + +export default function BasicAlert ({ + children, + severity, +}: { + children: any + severity: 'success' | 'error' | 'warning' | 'info' +}) { + return ( + } severity={severity}> + {children} + + ) +} + +export { BasicAlert } diff --git a/src/lib/BasicEntityAutocompleteField.tsx b/src/lib/BasicEntityAutocompleteField.tsx new file mode 100644 index 0000000..3def515 --- /dev/null +++ b/src/lib/BasicEntityAutocompleteField.tsx @@ -0,0 +1,99 @@ +import React from 'react' + +import { TextField, Autocomplete, Box } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityAutocompleteField' + +const { Open } = Gubu +const BasicEntityAutocompleteFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + label: String, + kind: String, + name: String, + cat: Open({ + default: String, + title: String, + multiple: Number, + order: { + sort: '', + exclude: '', + include: '', + }, + item: Open({}), + }), + ux: Open({ + kind: Exact('Autocomplete'), + edit: Default(true), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityAutocompleteField (props: any) { + const { spec } = props + + const basicEntityAutocompleteField: Spec = + BasicEntityAutocompleteFieldSpecShape(spec) + const { control, field, errors, getValues, setValue } = + basicEntityAutocompleteField + + // console.log('BERF', 'multiple', field.cat.multiple) + + const defaultAlternative = field.cat.multiple === 1 ? {} : [] + const defaultValues = + getValues(`${field.name}_default$`) || defaultAlternative + const categories = getValues(`${field.name}_cat$`) || [] + + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name + '_uival$', + control, + defaultValue: defaultValues, + }) + + return ( + + + opt === val || + (opt?.id != null && val?.id != null && opt.id === val.id) || + (opt?.key != null && val?.key != null && opt.key === val.key) + } + getOptionLabel={(option: any) => option?.title || ''} + value={controllerField.value} + disabled={!field.ux.edit} + onChange={(_, v: any) => { + console.log('v', v) + setValue( + field.name, + Array.isArray(v) ? v.map((val) => val.key).join(',') : v?.key + ) + controllerField.onChange(v) + }} + renderInput={(params: any) => ( + + )} + {...field.ux.props} + /> + + + ) +} + +export { BasicEntityAutocompleteField } diff --git a/src/lib/BasicEntityButtonField.tsx b/src/lib/BasicEntityButtonField.tsx new file mode 100644 index 0000000..8754bb3 --- /dev/null +++ b/src/lib/BasicEntityButtonField.tsx @@ -0,0 +1,52 @@ +import React from 'react' + +import { Button } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu, Skip } from 'gubu' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityButtonFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: String, + ux: Open({ + kind: Exact('Button'), + edit: true, + variant: 'contained', + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityButtonField (props: any) { + const { spec } = props + + const basicEntityButtonField: Spec = BasicEntityButtonFieldSpecShape(spec) + const { field } = basicEntityButtonField + + return ( +
+ +
+ ) +} + +export { BasicEntityButtonField } diff --git a/src/lib/BasicEntityButtonGroupField.tsx b/src/lib/BasicEntityButtonGroupField.tsx new file mode 100644 index 0000000..40fe8da --- /dev/null +++ b/src/lib/BasicEntityButtonGroupField.tsx @@ -0,0 +1,88 @@ +import React from 'react' + +import { Button, ButtonGroup } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityButtonGroupFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + options: Open({ + label: { field: 'label' }, + value: { field: 'value' }, + ents: Open({}), + }), + ux: Open({ + kind: Exact('ButtonGroup'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityButtonGroupField (props: any) { + const { spec } = props + + const basicEntityButtonGroupField: Spec = + BasicEntityButtonGroupFieldSpecShape(spec) + const { field } = basicEntityButtonGroupField + + return ( +
+ + {Object.entries(field.options.ents).map(([key, val]: [any, any]) => ( + + ))} + +
+ ) +} + +// function BasicEntityButtonGroupField(props: any) { +// const { spec } = props + +// const basicEntityButtonGroupField: Spec = +// BasicEntityButtonGroupFieldSpecShape(spec) +// const { control, field } = basicEntityButtonGroupField +// // const val = getValues(field.name) + +// return ( +//
+// ( +// +// {Object.entries(field.options.ents).map( +// ([key, val]: [any, any]) => ( +// +// ) +// )} +// +// )} +// /> +//
+// ) +// } + +export { BasicEntityButtonGroupField } diff --git a/src/lib/BasicEntityCheckboxField.tsx b/src/lib/BasicEntityCheckboxField.tsx new file mode 100644 index 0000000..53b1fc1 --- /dev/null +++ b/src/lib/BasicEntityCheckboxField.tsx @@ -0,0 +1,104 @@ +import React from 'react' + +import { FormControlLabel, Checkbox, Box } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu, Skip } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityCheckboxFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Checkbox'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityCheckboxField (props: any) { + const { spec } = props + + const basicEntityCheckboxField: Spec = BasicEntityCheckboxFieldSpecShape(spec) + const { control, field, getValues, errors } = basicEntityCheckboxField + const val = getValues(field.name) + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name, + control, + defaultValue: !!val, + }) + + // TODO: Style wrapper box + return ( + + + } + label={field.label} + /> + + + ) +} + +// function BasicEntityCheckboxField (props: any) { +// const { spec } = props + +// const basicEntityCheckboxField: Spec = BasicEntityCheckboxFieldSpecShape(spec) +// const { control, field, getValues, errors } = basicEntityCheckboxField +// const val = getValues(field.name) + +// const err = errors[field.name] + +// // TODO: Style wrapper box +// return ( +// +// ( +// +// )} +// /> +// } +// label={field.label} +// /> +// +// +// ) +// } + +export { BasicEntityCheckboxField } diff --git a/src/lib/BasicEntityDateField.tsx b/src/lib/BasicEntityDateField.tsx new file mode 100644 index 0000000..cac8084 --- /dev/null +++ b/src/lib/BasicEntityDateField.tsx @@ -0,0 +1,55 @@ +import React from 'react' +import { TextField } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu, Skip } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityDateField' + +const { Open } = Gubu +const BasicEntityDateFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Date'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityDateField (props: any) { + const { spec } = props + + const basicEntityDateField: Spec = BasicEntityDateFieldSpecShape(spec) + const { field, getValues, register, errors } = basicEntityDateField + const val = getValues(field.name) + + const err = errors[field.name] + + return ( +
+ 0 }} + {...register(field.name)} + /> + +
+ ) +} + +export { BasicEntityDateField } diff --git a/src/lib/BasicEntityDateTimeField.tsx b/src/lib/BasicEntityDateTimeField.tsx new file mode 100644 index 0000000..e1606d0 --- /dev/null +++ b/src/lib/BasicEntityDateTimeField.tsx @@ -0,0 +1,56 @@ +import React from 'react' +import { TextField } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityDateTimeField' + +const { Open } = Gubu +const BasicEntityDateTimeFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('DateTime'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityDateTimeField (props: any) { + const { spec } = props + + const basicEntityDateTimeField: Spec = BasicEntityDateTimeFieldSpecShape(spec) + const { field, getValues, register, errors } = basicEntityDateTimeField + + const val = getValues(field.name) + + const err = errors[field.name] + + return ( +
+ 0 }} + {...register(field.name)} + /> + +
+ ) +} + +export { BasicEntityDateTimeField } diff --git a/src/lib/BasicEntityEdit.tsx b/src/lib/BasicEntityEdit.tsx index 2672714..ee8f975 100644 --- a/src/lib/BasicEntityEdit.tsx +++ b/src/lib/BasicEntityEdit.tsx @@ -1,128 +1,159 @@ import React, { useEffect, useState, useCallback } from 'react' - import { useSelector } from 'react-redux' - import { useParams } from 'react-router-dom' - -import { - Box, - Grid, - Button, - Toolbar, -} from '@mui/material' +import { Box, Grid, Button, Toolbar } from '@mui/material' import { useForm } from 'react-hook-form' - import { BasicEntityField } from './BasicEntityField' - import { VxgBasicEntityEditPlugin } from './VxgBasicEntityEditPlugin' +import { useSanitizedId } from './vxg-util' const CMPNAME = 'BasicEntityEdit' - // TODO: make this debuggable // Resolver for react-hook-form -const makeResolver = (seneca:any, spec:any) => useCallback(async (data:any) => { - const { ent, name } = spec - - const view = name - let entity = seneca.entity(ent) - - entity = entity.make$().data$(data) - let errors = entity.valid$({errors:true}) - - // Emit a seneca message to provide errors for other uses - debugging etc. - // To listen for these, use seneca.sub('aim:app,on:BasicLed,entity:valid,view:VIEW', listener) - // Also useful for introspecting the error details for gubu-errmsg patterns - seneca.act('aim:app,on:BasicLed,entity:valid',{ - view, - entity, - errors, - }) - - // TODO: need a better way to access this; also namespaced! - // NOTE: uses gubu-errmsg - const errmsg = seneca.context.errmsg - - // Convert to react-hook-form errors - errors = errors - .map((e:any)=>(e.tag_kind='ent',e)) - .reduce((a:any,e:any,_:any)=>(a[e.key]={ - type: e.type, - message: errmsg ? ((_=errmsg.find(e))?_.text:e.text) : e.text - },a),{}) - - const values = entity.data$(false) - const out = { - values, - errors, - } +const makeResolver = (seneca: any, spec: any) => + useCallback( + async (data: any) => { + const { ent, name } = spec + + const view = name + let entity = seneca.entity(ent) + + entity = entity.make$().data$(data) + let errors = entity.valid$({ errors: true }) + + // Emit a seneca message to provide errors for other uses - debugging etc. + // To listen for these, use seneca.sub('aim:app,on:BasicLed,entity:valid,view:VIEW', listener) + // Also useful for introspecting the error details for gubu-errmsg patterns + seneca.act('aim:app,on:BasicLed,entity:valid', { + view, + entity, + errors, + }) - return out -},[spec.ent]) + // TODO: need a better way to access this; also namespaced! + // NOTE: uses gubu-errmsg + const errmsg = seneca.context.errmsg + + // Convert to react-hook-form errors + errors = errors + .map((e: any) => ((e.tag_kind = 'ent'), e)) + .reduce( + (a: any, e: any, _: any) => ( + (a[e.key] = { + type: e.type, + message: errmsg + ? (_ = errmsg.find(e)) + ? _.text + : e.text + : e.text, + }), + a + ), + {} + ) + + const values = entity.data$(false) + const out = { + values, + errors, + } + console.log('makeResolver', 'out', out) + + return out + }, + [spec.ent] + ) function BasicEntityEdit (props: any) { const { ctx } = props const { seneca } = ctx() - const [plugin,setPlugin] = useState(false) + const [plugin, setPlugin] = useState(false) const [ready, setReady] = useState(false) - - useEffect(()=>{ - if(!plugin) { + + const cmpId = useSanitizedId() + const cid = props.spec.name + '-' + cmpId + // console.log('BasicEntityEdit', 'cid', cid) + + useEffect(() => { + if (!plugin) { seneca.use({ - tag: props.spec.name, + tag: cid, define: VxgBasicEntityEditPlugin, options: { spec: props.spec, setPlugin, - } + }, }) } - },[]) + }, []) - - const { spec, slot, fields } = - seneca.export('VxgBasicEntityEditPlugin/handle') || - { spec: {}, slot: null, fields: [] } + const { spec, slot, fields } = seneca.export( + 'VxgBasicEntityEditPlugin$' + cid + '/handle' + ) || { spec: {}, slot: null, fields: [] } const { ent, name } = spec - if(plugin && !ready) { - seneca.act('aim:app,on:BasicLed,ready:edit',{view:name,setReady}) + if (plugin && !ready) { + // console.log('BasicEntityEdit', 'useEffect', 'ready:edit') + seneca.act('aim:app,on:BasicLed,ready:edit', { view: name, setReady }) } const slotSelectors = seneca.export('Redux/slotSelectors') let { selectItem, selectList, selectMeta } = slotSelectors(slot) - let item = useSelector((state:any)=>selectItem(state)) + let item = useSelector((state: any) => selectItem(state)) + + // if (item && name) { + // console.log('BasicEntityEdit', 'useEffect', 'modify:edit') + // item = seneca.direct('aim:app,on:BasicLed,modify:edit', { + // view: name, + // item, + // fields, + // }) + // } + + useEffect(() => { + const modifyEdit = async () => { + console.log('BEE', 'effect', 'modify:edit', 'init', 'view', name) + console.log('BEE', 'effect', 'modify:edit', 'init', 'item', item) + if (item && name) { + console.log('BEE', 'effect', 'modify:edit', 'seneca.direct') + item = await seneca.direct('aim:app,on:BasicLed,modify:edit', { + view: name, + item, + fields, + }) + console.log('BEE', 'effect', 'resetting', item) + reset(item) + } + } - if(item && name) { - item = - seneca.direct('aim:app,on:BasicLed,modify:edit', { - view:name, item, fields - }) - } + modifyEdit() + }, [item, name]) const params: any = useParams() - useEffect(()=>{ - if(ready) { - if(null == item && null != params.item) { + useEffect(() => { + if (ready) { + // console.log('BasicEntityEdit', 'useEffect', 'ready') + if (null == item && null != params.item) { + // console.log('BasicEntityEdit', 'useEffect', 'edit:item') seneca.act('aim:app,on:BasicLed,edit:item', { view: name, fields, - item_id: params.item + item_id: params.item, }) } - reset(item) } - },[null==item,ready]) + }, [null == item, ready]) const resolver = makeResolver(seneca, spec) @@ -130,55 +161,69 @@ function BasicEntityEdit (props: any) { register, handleSubmit, getValues, + setValue, reset, + control, formState: { errors }, } = useForm({ mode: 'onChange', resolver, }) - const onSubmit = (data:any) => { - seneca.act('aim:app,on:BasicLed,save:item',{view:name,data}) + const onSubmit = async (data: any) => { + console.log('BasicEntityEdit', 'onSubmit', 'data', data) + const modifiedData = await seneca.direct( + 'aim:app,on:BasicLed,modify:save', + { + view: name, + data, + fields, + } + ) + // console.log('BasicEntityEdit', 'onSubmit', 'modifiedData', modifiedData) + seneca.act('aim:app,on:BasicLed,save:item', { + view: name, + data: modifiedData, + }) } - + return ( - { item ? -
- - - { fields.map((field:any)=> - - - - - )} - - - - - -
- : <> } + {item ? ( +
+ + {fields.map((field: any) => ( + + + + ))} + + + + + +
+ ) : ( + <> + )}
) } - - -export { - BasicEntityEdit -} +export { BasicEntityEdit } diff --git a/src/lib/BasicEntityField.tsx b/src/lib/BasicEntityField.tsx index 2de5bb8..4321367 100644 --- a/src/lib/BasicEntityField.tsx +++ b/src/lib/BasicEntityField.tsx @@ -1,24 +1,64 @@ -import React, { useEffect, forwardRef } from 'react' - -import { - TextField, - FormControl, - FormLabel, -} from '@mui/material' - +import React, { useEffect, useRef, useState } from 'react' + +import { BasicEntityCheckboxField } from './BasicEntityCheckboxField' +import { BasicEntityAutocompleteField } from './BasicEntityAutocompleteField' +import { BasicEntitySliderField } from './BasicEntitySliderField' +import { BasicEntityRadioGroupField } from './BasicEntityRadioGroupField' +import { BasicEntityTextBoxField } from './BasicEntityTextBoxField' +import { BasicEntityTextField } from './BasicEntityTextField' +import { BasicEntityDateField } from './BasicEntityDateField' +import { BasicEntityTimeField } from './BasicEntityTimeField' +import { BasicEntityDateTimeField } from './BasicEntityDateTimeField' +import { BasicEntityRatingField } from './BasicEntityRatingField' +import { BasicEntityButtonField } from './BasicEntityButtonField' +import { BasicEntityButtonGroupField } from './BasicEntityButtonGroupField' +import { BasicEntitySelectField } from './BasicEntitySelectField' +import { BasicEntitySwitchField } from './BasicEntitySwitchField' +import { BasicEntityToggleButtonField } from './BasicEntityToggleButtonField' import type { Spec } from './basic-types' -import { Gubu } from 'gubu' +import { Default, Exact, Gubu, Skip } from 'gubu' +import { VxgBasicEntityFieldPlugin } from './VxgBasicEntityFieldPlugin' const CMPNAME = 'BasicEntityField' const { Open } = Gubu -const BasicEntityFieldSpecShape = Gubu(Open({ - -}), {name: CMPNAME}) - - +const BasicEntityFieldSpecShape = Gubu( + Open({ + cid: String, + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact( + 'Text', + 'TextBox', + 'Date', + 'DateTime', + 'Time', + 'Checkbox', + 'Autocomplete', + 'Slider', + 'RadioGroup', + 'Rating', + 'Button', + 'ButtonGroup', + 'Select', + 'Switch', + 'ToggleButton', + 'custom' + ), + edit: Default(true), + rows: Default(3), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) const fieldMap: any = { Text: BasicEntityTextField, @@ -26,156 +66,97 @@ const fieldMap: any = { Date: BasicEntityDateField, DateTime: BasicEntityDateTimeField, Time: BasicEntityTimeField, + Checkbox: BasicEntityCheckboxField, + Autocomplete: BasicEntityAutocompleteField, + Slider: BasicEntitySliderField, + RadioGroup: BasicEntityRadioGroupField, + Rating: BasicEntityRatingField, + Button: BasicEntityButtonField, + ButtonGroup: BasicEntityButtonGroupField, + Select: BasicEntitySelectField, + Switch: BasicEntitySwitchField, + ToggleButton: BasicEntityToggleButtonField, } - function BasicEntityField (props: any) { const { ctx, spec } = props - - const basicEntityFieldSpec: Spec = BasicEntityFieldSpecShape(spec) - const field: any = basicEntityFieldSpec.field - const Field: any = fieldMap[field.ux.kind] - - return + const { seneca, cmp } = ctx() + + const basicEntityField: Spec = BasicEntityFieldSpecShape(spec) + const [plugin, setPlugin] = useState(false) + const cid = basicEntityField.cid + '-' + basicEntityField.field.name + + // console.log('BasicEntityField', 'cid', cid) + + useEffect(() => { + if (!plugin) { + seneca.use({ + tag: cid, + define: VxgBasicEntityFieldPlugin, + options: { + spec: { + field: basicEntityField.field, + }, + setPlugin, + }, + }) + } + }, []) + + // const { Field } = seneca.export( + // 'VxgBasicEntityFieldPlugin$' + spec.field.name + '/handle' + // ) || { Field: null } + + const field: any = spec.field + const Field: any = + 'custom' === field.ux.kind ? cmp[field.ux.cmp] : fieldMap[field.ux.kind] + + return Field ? :
} - -function BasicEntityFieldError (props: any) { - const { err } = props - return err ? -
{err.message}
: -
-} - - -function BasicEntityTextField (props: any) { - const { spec } = props - - const { field, register, getValues, errors } = spec - - const err = errors[field.name] - - const val = getValues(field.name) - - return ( -
- 0 }} - {...register(field.name)} - /> - -
- ) -} - - -function BasicEntityTextBoxField (props: any) { - const { spec } = props - - const { field, register, getValues } = spec - - const val = getValues(field.name) - - return ( -
- 0 }} - {...register(field.name)} - /> -
- ) -} - - -function BasicEntityDateField (props: any) { - const { spec } = props - - const { field, register, getValues } = spec - - const val = getValues(field.name) - - return ( -
- 0 }} - {...register(field.name)} - /> -
- ) -} - - -function BasicEntityTimeField (props: any) { - const { spec } = props - - const { field, register, getValues } = spec - - const val = getValues(field.name) - - return ( -
- 0 }} - {...register(field.name)} - /> -
- ) -} - - +/* function BasicEntityDateTimeField (props: any) { const { spec } = props - const { field, register, getValues } = spec - - const val = getValues(field.name) + const field = spec.field + const register = spec.register return ( -
- 0 }} - {...register(field.name)} - /> -
+ +
+ + +
+ ), + }} + /> ) } - - - - +*/ /* Notes @@ -188,8 +169,4 @@ https://mui.com/material-ui/react-grid/ */ - - -export { - BasicEntityField -} +export { BasicEntityField } diff --git a/src/lib/BasicEntityFieldError.tsx b/src/lib/BasicEntityFieldError.tsx new file mode 100644 index 0000000..3fa4a47 --- /dev/null +++ b/src/lib/BasicEntityFieldError.tsx @@ -0,0 +1,12 @@ +import React from 'react' + +function BasicEntityFieldError(props: any) { + const { err } = props + return err ? ( +
{err.message}
+ ) : ( +
+ ) +} + +export { BasicEntityFieldError } diff --git a/src/lib/BasicEntityRadioGroupField.tsx b/src/lib/BasicEntityRadioGroupField.tsx new file mode 100644 index 0000000..3d86ab1 --- /dev/null +++ b/src/lib/BasicEntityRadioGroupField.tsx @@ -0,0 +1,86 @@ +import React from 'react' + +import { FormControlLabel, RadioGroup, Radio, FormLabel } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityRadioGroupFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + llabel: '', + ux: Open({ + kind: Exact('RadioGroup'), + edit: Default(true), + direction: Exact('row', 'column').Default('row'), + }), + cat: Open({ + default: '', + title: String, + order: { + sort: '', + exclude: '', + include: '', + }, + item: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityRadioGroupField (props: any) { + const { spec } = props + + const basicEntityRadioGroupField: Spec = + BasicEntityRadioGroupFieldSpecShape(spec) + const { control, field, errors, getValues, setValue } = + basicEntityRadioGroupField + + const defaultValues = getValues(`${field.name}_default$`) || '' + const categories = getValues(`${field.name}_cat$`) || [] + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name + '_uival$', + control, + defaultValue: defaultValues, + }) + + return ( + <> + {field.label} + + {categories.map((option: any) => ( + } + label={option.title} + /> + ))} + + + + ) +} + +export { BasicEntityRadioGroupField } diff --git a/src/lib/BasicEntityRatingField.tsx b/src/lib/BasicEntityRatingField.tsx new file mode 100644 index 0000000..f015f26 --- /dev/null +++ b/src/lib/BasicEntityRatingField.tsx @@ -0,0 +1,97 @@ +import React from 'react' + +import { Rating, FormLabel } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityRatingFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Rating'), + edit: Default(true), + precision: 1, + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityRatingField (props: any) { + const { spec } = props + + const basicEntityRatingField: Spec = BasicEntityRatingFieldSpecShape(spec) + const { control, field, getValues, errors } = basicEntityRatingField + const val = getValues(field.name) + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name, + control, + defaultValue: !!val || 0, + }) + + return ( +
+ {field.label} + controllerField.onChange(newValue)} + disabled={!field.ux.edit} + {...field.ux.props} + /> + +
+ ) +} + +// function BasicEntityRatingField (props: any) { +// const { spec } = props + +// const basicEntityRatingField: Spec = BasicEntityRatingFieldSpecShape(spec) +// const { control, field, getValues, errors } = basicEntityRatingField +// const val = getValues(field.name) + +// const err = errors[field.name] + +// return ( +//
+// {field.label} +// ( +// onChange(newValue)} +// disabled={!field.ux.edit} +// {...field.ux.props} +// /> +// )} +// /> +// +//
+// ) +// } + +export { BasicEntityRatingField } diff --git a/src/lib/BasicEntitySelectField.tsx b/src/lib/BasicEntitySelectField.tsx new file mode 100644 index 0000000..4ea5ccc --- /dev/null +++ b/src/lib/BasicEntitySelectField.tsx @@ -0,0 +1,91 @@ +import React from 'react' + +import { FormControl, InputLabel, Select, MenuItem, Box } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySelectField' + +const { Open } = Gubu +const BasicEntitySelectFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + cat: Open({ + default: '', + title: String, + multiple: Number, + order: { + sort: '', + exclude: '', + include: '', + }, + item: Open({}), + }), + ux: Open({ + kind: Exact('Select'), + edit: Default(true), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntitySelectField (props: any) { + const { spec } = props + + const basicEntitySelectField: Spec = BasicEntitySelectFieldSpecShape(spec) + const { control, field, errors, getValues, setValue } = basicEntitySelectField + const err = errors[field.name] + + const defaultValues = + getValues(field.name + '_default$') || (field.cat.multiple === 1 ? '' : []) + const categories = getValues(field.name + '_cat$') || [] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name + '_uival$', + control, + defaultValue: defaultValues, + }) + + return ( + + + {field.label} + + + + + ) +} + +export { BasicEntitySelectField } diff --git a/src/lib/BasicEntitySliderField.tsx b/src/lib/BasicEntitySliderField.tsx new file mode 100644 index 0000000..8e66463 --- /dev/null +++ b/src/lib/BasicEntitySliderField.tsx @@ -0,0 +1,82 @@ +import React from 'react' + +import { FormLabel, Slider } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntitySliderFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Slider'), + edit: Default(true), + step: Default(1), + min: Default(0), + max: Default(100), + props: Open({ + marks: Default({}), + valueLabelDisplay: Exact('on', 'auto', 'off').Default('auto'), + direction: Exact('horizontal', 'vertical').Default('horizontal'), + track: Exact('normal', 'inverted', 'disabled').Default('normal'), + }), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntitySliderField (props: any) { + const { spec } = props + + const basicEntityAutocompleteField: Spec = + BasicEntitySliderFieldSpecShape(spec) + const { control, field, getValues, setValue, errors } = + basicEntityAutocompleteField + + const fieldName = field.name + const val = getValues(`${fieldName}_uival$`) + const marks = getValues(`${fieldName}_marks$`) + const err = errors[fieldName] + + const { field: controllerField } = useController({ + name: `${fieldName}_uival$`, + control, + defaultValue: val || field.ux.min, + }) + + return ( +
+ {field.label} + { + // FIXME: this should be elsewhere, and flexible + setValue(field.name, newVal * 60) + controllerField.onChange(newVal) + }} + disabled={!field.ux.edit} + orientation={field.ux.direction} + track={field.ux.track} + valueLabelDisplay={field.ux.props.valueLabelDisplay} + /> + +
+ ) +} + +export { BasicEntitySliderField } diff --git a/src/lib/BasicEntitySwitchField.tsx b/src/lib/BasicEntitySwitchField.tsx new file mode 100644 index 0000000..b9e6249 --- /dev/null +++ b/src/lib/BasicEntitySwitchField.tsx @@ -0,0 +1,103 @@ +import React from 'react' + +import { FormControlLabel, Box, Switch } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntitySwitchFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Switch'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntitySwitchField (props: any) { + const { spec } = props + + const basicEntitySwitchField: Spec = BasicEntitySwitchFieldSpecShape(spec) + const { control, field, getValues, errors } = basicEntitySwitchField + const val = getValues(field.name) + + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name, + control, + defaultValue: !!val, + }) + + return ( + + + } + label={field.label} + /> + + + ) +} + +// function BasicEntitySwitchField (props: any) { +// const { spec } = props + +// const basicEntitySwitchField: Spec = BasicEntitySwitchFieldSpecShape(spec) +// const { control, field, getValues, errors } = basicEntitySwitchField +// const val = getValues(field.name) + +// const err = errors[field.name] + +// return ( +// +// ( +// +// )} +// /> +// } +// label={field.label} +// /> +// +// +// ) +// } + +export { BasicEntitySwitchField } diff --git a/src/lib/BasicEntityTextBoxField.tsx b/src/lib/BasicEntityTextBoxField.tsx new file mode 100644 index 0000000..1b90b3e --- /dev/null +++ b/src/lib/BasicEntityTextBoxField.tsx @@ -0,0 +1,58 @@ +import React from 'react' +import { TextField } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu, Skip } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityTextBoxField' + +const { Open } = Gubu +const BasicEntityTextBoxFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('TextBox'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +// TODO: Decide on naming convention for TextBox +function BasicEntityTextBoxField (props: any) { + const { spec } = props + + const basicEntityTextBoxField: Spec = BasicEntityTextBoxFieldSpecShape(spec) + const { field, getValues, register, errors } = basicEntityTextBoxField + const val = getValues(field.name) + + const err = errors[field.name] + + return ( +
+ 0 }} + disabled={!field.ux.edit} + {...field.ux.props} + {...register(field.name)} + /> + +
+ ) +} + +export { BasicEntityTextBoxField } diff --git a/src/lib/BasicEntityTextField.tsx b/src/lib/BasicEntityTextField.tsx new file mode 100644 index 0000000..5b19773 --- /dev/null +++ b/src/lib/BasicEntityTextField.tsx @@ -0,0 +1,56 @@ +import React from 'react' +import { TextField } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu, Skip } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityTextField' + +const { Open } = Gubu +const BasicEntityTextFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Text'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityTextField (props: any) { + const { spec } = props + + const basicEntityTextBoxField: Spec = BasicEntityTextFieldSpecShape(spec) + const { field, getValues, register, errors } = basicEntityTextBoxField + const val = getValues(field.name) + + const err = errors[field.name] + // console.log('BET', err, field.name, errors) + + return ( +
+ 0 }} + {...register(field.name)} + disabled={!field.ux.edit} + {...field.ux.props} + /> + +
+ ) +} + +export { BasicEntityTextField } diff --git a/src/lib/BasicEntityTimeField.tsx b/src/lib/BasicEntityTimeField.tsx new file mode 100644 index 0000000..11cd0bd --- /dev/null +++ b/src/lib/BasicEntityTimeField.tsx @@ -0,0 +1,57 @@ +import React from 'react' +import { TextField } from '@mui/material' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntityTimeField' + +const { Open } = Gubu +const BasicEntityTimeFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + ux: Open({ + kind: Exact('Time'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityTimeField (props: any) { + const { spec } = props + + const basicEntityTimeField: Spec = BasicEntityTimeFieldSpecShape(spec) + const { field, getValues, register, errors } = basicEntityTimeField + + const val = getValues(field.name) + + const err = errors[field.name] + + return ( +
+ 0 }} + {...register(field.name)} + {...field.ux.props} + /> + +
+ ) +} + +export { BasicEntityTimeField } diff --git a/src/lib/BasicEntityToggleButtonField.tsx b/src/lib/BasicEntityToggleButtonField.tsx new file mode 100644 index 0000000..c14eb85 --- /dev/null +++ b/src/lib/BasicEntityToggleButtonField.tsx @@ -0,0 +1,122 @@ +import React from 'react' + +import { FormLabel, ToggleButton, ToggleButtonGroup } from '@mui/material' +import { useController } from 'react-hook-form' + +import type { Spec } from './basic-types' + +import { Default, Exact, Gubu } from 'gubu' +import { BasicEntityFieldError } from './BasicEntityFieldError' +const CMPNAME = 'BasicEntitySliderField' + +const { Open } = Gubu +const BasicEntityToggleButtonFieldSpecShape = Gubu( + Open({ + field: Open({ + id: String, + name: String, + kind: '', + label: '', + cat: Open({ + default: '', + title: String, + multiple: Number, + order: { + sort: '', + exclude: '', + include: '', + }, + item: Open({}), + }), + ux: Open({ + kind: Exact('ToggleButton'), + edit: Default(true), + props: Open({}), + }), + }), + }), + { name: CMPNAME } +) + +function BasicEntityToggleButtonField (props: any) { + const { spec } = props + + const basicEntityToggleButtonField: Spec = + BasicEntityToggleButtonFieldSpecShape(spec) + const { control, field, errors } = basicEntityToggleButtonField + + const err = errors[field.name] + + const { + field: controllerField, + fieldState: { error }, + } = useController({ + name: field.name, + control, + }) + + return ( +
+ {field.label} + { + field.cat.multiple === 1 + ? controllerField.onChange(v) + : controllerField.onChange([v]) + }} + disabled={!field.ux.edit} + {...field.ux.props} + > + {Object.entries(field.cat.item).map(([key, val]: [any, any]) => ( + + {val?.title} + + ))} + + +
+ ) +} + +// function BasicEntityToggleButtonField (props: any) { +// const { spec } = props + +// const basicEntityToggleButtonField: Spec = +// BasicEntityToggleButtonFieldSpecShape(spec) +// const { control, field, errors } = basicEntityToggleButtonField + +// const err = errors[field.name] + +// return ( +//
+// {field.label} +// ( +// { +// field.cat.multiple === 1 ? onChange(v) : onChange([v]) +// }} +// disabled={!field.ux.edit} +// {...field.ux.props} +// > +// {Object.entries(field.cat.item).map(([key, val]: [any, any]) => ( +// +// {val?.title} +// +// ))} +// +// )} +// /> +// +//
+// ) +// } + +export { BasicEntityToggleButtonField } diff --git a/src/lib/BasicHead.tsx b/src/lib/BasicHead.tsx index 660653a..66f4387 100644 --- a/src/lib/BasicHead.tsx +++ b/src/lib/BasicHead.tsx @@ -9,74 +9,77 @@ import type { BasicProps, Spec } from './basic-types' import { BasicHeadTool } from './BasicHeadTool' - const CMPNAME = 'BasicHead' const { Child, Exact, Open, Required } = Gubu -const BasicHeadSpecShape = Gubu({ - head: { - name: String, - active: Boolean, - - tool: Child(Open({ - align: Exact('left','right'), - })), - }, +const BasicHeadSpecShape = Gubu( + { + head: { + name: String, + active: Boolean, - tool: Required({}), - - // Set MUI component props directly - mui: { - AppBar: {}, - ToolBar: {}, - } - -}, {name: CMPNAME}) + tool: Child( + Open({ + align: Exact('left', 'right'), + }) + ), + }, + tool: Required({}), + + // Set MUI component props directly + ux: { + props: { + AppBar: {}, + ToolBar: {}, + }, + }, + }, + { name: CMPNAME } +) function BasicHead (props: BasicProps) { const { ctx, spec } = props const { seneca } = ctx() const { vmap } = seneca.context - + const basicHeadSpec: Spec = BasicHeadSpecShape(spec) - const { head } = (basicHeadSpec as any) + const { head } = basicHeadSpec as any - const tools = vmap(head.tool,{ + const tools = vmap(head.tool, { active: vmap.FILTER, - name: vmap.FILTER((_:any,p:any)=>[basicHeadSpec.tool[p.key]?.active, p.key]), + name: vmap.FILTER((_: any, p: any) => [ + basicHeadSpec.tool[p.key]?.active, + p.key, + ]), align: vmap.COPY, - }) - .map((t:any)=>({ - ...basicHeadSpec.tool[t.name], - ...t, - })) + }).map((t: any) => ({ + ...basicHeadSpec.tool[t.name], + ...t, + })) - const leftTools: Spec[] = tools.filter((t:Spec)=>'left'===t.align) - const rightTools: Spec[] = tools.filter((t:Spec)=>'right'===t.align) + const leftTools: Spec[] = tools.filter((t: Spec) => 'left' === t.align) + const rightTools: Spec[] = tools.filter((t: Spec) => 'right' === t.align) return ( - - -
- { leftTools.map(t=>) } + + +
+ {leftTools.map((t) => ( + + ))}
- { rightTools.map(t=>) } + {rightTools.map((t) => ( + + ))}
-
-
+ + ) } -export { - BasicHead -} +export { BasicHead } diff --git a/src/lib/BasicLed.tsx b/src/lib/BasicLed.tsx index 189c079..6ebbafb 100644 --- a/src/lib/BasicLed.tsx +++ b/src/lib/BasicLed.tsx @@ -1,11 +1,11 @@ -import React, { useState, useEffect } from 'react' +import React, { useState, useEffect, useRef } from 'react' import { useSelector } from 'react-redux' import { useNavigate, useParams, Routes, Route } from 'react-router-dom' -import { Box } from '@mui/material' +import { Alert, Box } from '@mui/material' +import CheckIcon from '@mui/icons-material/Check' import { Gubu } from 'gubu' - import type { BasicProps, Spec } from './basic-types' import { BasicEntityList } from './BasicEntityList' @@ -16,50 +16,56 @@ import { BasicLoading } from './BasicLoading' import { VxgBasicLedPlugin } from './VxgBasicLedPlugin' - const CMPNAME = 'BasicLed' - // BasicLed renders a list of entities (with BasicList) or a form to edit them (with BasicEdit) function BasicLed (props: any) { const { ctx } = props const { seneca } = ctx() const name = props.spec.name + const uniqueIdRef = useRef(seneca.util.Nid()) + // TODO: use uniqueIdRef.current to avoid name clashes but sort out store issues + const cid = name // + '-' + uniqueIdRef.current + // TODO: look into custom hook implementation useComponentId() const navigate = useNavigate() - - const led = useSelector((state:any)=>state.main.view[name]) + + const led = useSelector((state: any) => state.main.view[name]) const ready = true === led?.ready - - if(!ready) { + + if (!ready) { seneca.use({ - tag: name, + tag: cid, define: VxgBasicLedPlugin, - options:{ + options: { spec: props.spec, navigate, - } + }, }) } - const { head, list, edit, foot } = seneca.export('VxgBasicLedPlugin$'+name+'/spec') || {} + const { head, list, edit, foot } = + seneca.export('VxgBasicLedPlugin$' + cid + '/spec') || {} - return ( - ready ? - - { head.active && } + return ready ? ( + + {head.active && } - } /> - } /> - } /> + } /> + } + /> + } + /> - { foot.active && } + {foot.active && } - : - + ) : ( + ) } -export { - BasicLed -} +export { BasicLed } diff --git a/src/lib/BasicLedHead.tsx b/src/lib/BasicLedHead.tsx index f185dd6..c529fdb 100644 --- a/src/lib/BasicLedHead.tsx +++ b/src/lib/BasicLedHead.tsx @@ -4,31 +4,34 @@ import { useSelector } from 'react-redux' import { useNavigate, useLocation } from 'react-router-dom' - -import { - Box, - Toolbar, - Button, -} from '@mui/material' +import { Box, Toolbar, Button, Alert } from '@mui/material' import type { Spec } from './basic-types' import { Gubu } from 'gubu' +import BasicAlert from './BasicAlert' const CMPNAME = 'BasicLedHead' const { Open, Child } = Gubu -const BasicLedHeadSpecShape = Gubu(Open({ - tool: Child({ - id: String, - kind: String, - custom: '', - },{}), - mui: Open({ - Toolbar: Open({}) - }) -}), {name: CMPNAME}) - +const BasicLedHeadSpecShape = Gubu( + Open({ + tool: Child( + { + id: String, + kind: String, + custom: '', + }, + {} + ), + ux: Open({ + props: { + Toolbar: Open({}), + }, + }), + }), + { name: CMPNAME } +) function BasicLedHead (props: any) { const { ctx, spec } = props @@ -39,57 +42,64 @@ function BasicLedHead (props: any) { const BasicEntityHeadSpec: Spec = BasicLedHeadSpecShape(spec) const viewName = BasicEntityHeadSpec.name - + const name = spec.name - const slotName = spec.prefix+spec.name + const slotName = spec.prefix + spec.name const slotSelectors = seneca.export('Redux/slotSelectors') const { selectItem, selectMeta } = slotSelectors(slotName) - const item = useSelector((state:any)=>selectItem(state)) - const viewState = useSelector((state:any)=>state.main.view[viewName]) + const item = useSelector((state: any) => selectItem(state)) + const viewState = useSelector((state: any) => state.main.view[viewName]) + + const state = { item, view: viewState, navigate } - const state = { item, view:viewState, navigate } - - const subview = '/view/'+viewName === loc.pathname ? 'list' : 'edit' + const subview = '/view/' + viewName === loc.pathname ? 'list' : 'edit' const customButtons = Object.values(spec.tool || {}) - .filter((t:any)=>'button'===t.kind) - .map((t:any)=>(custom.BasicLedHead||{})[t.custom]) - .filter((t:any)=>null!=t) - + .filter((t: any) => 'button' === t.kind) + .map((t: any) => (custom.BasicLedHead || {})[t.custom]) + .filter((t: any) => null != t) + return ( - - + + + color='inherit' + onClick={() => navigate(-1)} + disabled={'list' === subview} + > + Back + - - { customButtons.map(cb=> + color='inherit' + onClick={() => + seneca.act('aim:app,on:view,add:item', { view: viewName }) + } + disabled={'edit' === subview} + > + Add + + + {customButtons.map((cb) => ( - ) } - + color='inherit' + onClick={() => seneca.act(cb.msg(state, spec, ctx))} + disabled={cb.disabled(state, spec, ctx)} + {...cb.attr(state, spec, ctx)} + > + {cb.title(state, spec, ctx)} + + ))} + {viewState.alert.active ? ( + + {viewState.alert.message} + + ) : null} ) } -export { - BasicLedHead -} +export { BasicLedHead } diff --git a/src/lib/BasicMain.tsx b/src/lib/BasicMain.tsx index 0680931..8a0a839 100644 --- a/src/lib/BasicMain.tsx +++ b/src/lib/BasicMain.tsx @@ -2,10 +2,7 @@ import React, { useState } from 'react' import { useSelector } from 'react-redux' import { useParams, useSearchParams, useLocation } from 'react-router-dom' -import { - Box, - Container -} from '@mui/material' +import { Box, Container } from '@mui/material' import { Gubu } from 'gubu' @@ -13,32 +10,32 @@ import { BasicLed } from './BasicLed' import { searchParamsToObject } from './vxg-util' - const CMPNAME = 'BasicSide' - const { Child, Open } = Gubu const BasicMainSpecShape = Gubu({ main: { name: String, active: Boolean, - + view: { - default: String - } + default: String, + }, }, - view: Child(Open({ - kind: String - })), - - mui: { - Box: {}, - Container: {}, - } -}) - + view: Child( + Open({ + kind: String, + }) + ), + ux: { + props: { + Box: {}, + Container: {}, + }, + }, +}) function BasicMain (props: any) { const { ctx, spec } = props @@ -46,14 +43,14 @@ function BasicMain (props: any) { const basicMainSpec = BasicMainSpecShape(spec) - const mode = useSelector((state:any)=>state.main.nav.mode) - const view = useSelector((state:any)=>state.main.current.view) + const mode = useSelector((state: any) => state.main.nav.mode) + const view = useSelector((state: any) => state.main.current.view) const params: any = useParams() const [searchParams] = useSearchParams() const loc: any = useLocation() - - if(view.name !== params.view) { + + if (view.name !== params.view) { seneca.act('aim:app,sync:view', { name: params.view, query: searchParamsToObject(searchParams), @@ -66,32 +63,29 @@ function BasicMain (props: any) { const kind = viewSpec?.kind const View = - 'custom' === kind ? cmp[viewSpec.cmp] : - 'led' === kind ? BasicLed : - ()=>
LOADING
- - + 'custom' === kind + ? cmp[viewSpec.cmp] + : 'led' === kind + ? BasicLed + : () =>
LOADING
+ return ( ({ + {...basicMainSpec.ux.props.Box} + sx={(theme: any) => ({ // TODO: should use actual toolbar height; 16 should be from standard spacing - marginTop: (theme.mixins.toolbar.minHeight+38)+'px', + marginTop: theme.mixins.toolbar.minHeight + 38 + 'px', marginLeft: 'shown' === mode ? 'var(--vxg-side-width)' : 0, marginBottom: 0, marginRight: 0, })} > - - { View && } + + {View && } ) } -export { - BasicMain -} +export { BasicMain } diff --git a/src/lib/BasicSide.tsx b/src/lib/BasicSide.tsx index 12e46e4..82bd542 100644 --- a/src/lib/BasicSide.tsx +++ b/src/lib/BasicSide.tsx @@ -21,25 +21,30 @@ import { vmap, cmap } from './vxg-util' const CMPNAME = 'BasicSide' - const { Child, Open, Required } = Gubu -const BasicSideSpecShape = Gubu({ - side: { - name: String, - active: Boolean, +const BasicSideSpecShape = Gubu( + { + side: { + name: String, + active: Boolean, + }, + + view: Child( + Open({ + title: String, + }), + Required({}) + ), + + // Set MUI component props directly + ux: { + props: { + Drawer: {}, + }, + }, }, - - view: Child(Open({ - title: String - }), Required({})), - - // Set MUI component props directly - mui: { - Drawer: {}, - } -}, {name: CMPNAME}) - - + { name: CMPNAME } +) function BasicSide (props: any) { const { spec, ctx } = props @@ -49,72 +54,70 @@ function BasicSide (props: any) { // const theme = useTheme() const navigate = useNavigate() - const nav = useSelector((state:any)=>state.main.nav) + const nav = useSelector((state: any) => state.main.nav) const viewMap = basicSideSpec.view const mode = nav.mode - - const sections = vmap(nav.section,{ + + const sections = vmap(nav.section, { active: vmap.FILTER, name: vmap.COPY, - items: (_:any,p:any)=>vmap(p.self.item,{ - active: vmap.FILTER, - name: vmap.COPY, - view: vmap.COPY, - title: vmap.FILTER((_:any,p:any)=>viewMap[p.self.view]?.title) - }) + items: (_: any, p: any) => + vmap(p.self.item, { + active: vmap.FILTER, + name: vmap.COPY, + view: vmap.COPY, + title: vmap.FILTER((_: any, p: any) => viewMap[p.self.view]?.title), + }), }) - const selectView = useCallback((view:string)=>navigate('/view/'+view),[]) + const selectView = useCallback( + (view: string) => navigate('/view/' + view), + [] + ) - return ( ({ + className='vxg-BasicSide' + sx={(theme: any) => ({ '& .MuiDrawer-paper': { // TODO: should use actual toolbar height; 16 should be from standard spacing - paddingTop: (theme.mixins.toolbar.minHeight+16)+'px', - width: 'var(--vxg-side-width)' + paddingTop: theme.mixins.toolbar.minHeight + 16 + 'px', + width: 'var(--vxg-side-width)', }, })} - {...spec.mui.Drawer} + {...spec.ux.props.Drawer} > - - { sections.map((section:any) => + {sections.map((section: any) => ( - { section.items.map((item:any) => + {section.items.map((item: any) => ( - selectView(item.view)} - > + selectView(item.view)}> - )} + ))} - )} + ))} ) } -export { - BasicSide -} +export { BasicSide } diff --git a/src/lib/VxgBasicAdminPlugin.ts b/src/lib/VxgBasicAdminPlugin.ts index 22d5595..3cca34f 100644 --- a/src/lib/VxgBasicAdminPlugin.ts +++ b/src/lib/VxgBasicAdminPlugin.ts @@ -1,8 +1,6 @@ - import { vmap, cmap } from './vxg-util' - -function VxgBasicAdminPlugin(this: any) { +function VxgBasicAdminPlugin (this: any) { const seneca = this const { Exact, Default } = seneca.valid @@ -24,42 +22,39 @@ function VxgBasicAdminPlugin(this: any) { setMode ) - .message( 'aim:app,on:nav,set:path', { navigate: Function, view: String }, setPath ) - - .prepare(async function(this: any) { + .prepare(async function (this: any) { await this.post('aim:app,prepare:app') }) - - async function setPath(msg: any, meta: any) { - const q = Object.entries(msg.query) - .reduce((s: any, n: any) => - (s + ('' === s ? '?' : '') + - (encodeURIComponent(n[0]) + '=' + encodeURIComponent(n[1]))), '') + async function setPath (msg: any, meta: any) { + const q = Object.entries(msg.query).reduce( + (s: any, n: any) => + s + + ('' === s ? '?' : '') + + (encodeURIComponent(n[0]) + '=' + encodeURIComponent(n[1])), + '' + ) const path = '/view/' + msg.view + q msg.navigate(path) } - - async function setMode(msg: any, meta: any) { + async function setMode (msg: any, meta: any) { meta.custom.state().nav.mode = msg.mode } - - async function syncView(msg: any, meta: any) { + async function syncView (msg: any, meta: any) { meta.custom.state().current.view.name = msg.name meta.custom.state().current.view.query = msg.query meta.custom.state().current.view.hash = msg.hash } - - async function prepareApp(_msg: any, meta: any) { + async function prepareApp (_msg: any, meta: any) { let state = meta.custom.state() let model = seneca.context.model @@ -72,13 +67,18 @@ function VxgBasicAdminPlugin(this: any) { view: { name: '', query: {}, - hash: '' - } + hash: '', + }, } const viewState = cmap(viewMap, { name: cmap.COPY, active: cmap.FILTER, + alert: { + active: false, + message: '', + level: 'info', + }, }) state.view = viewState @@ -87,20 +87,15 @@ function VxgBasicAdminPlugin(this: any) { section: cmap(sectionMap, { name: cmap.COPY, active: cmap.FILTER, - item: (x: any) => cmap(x, { - active: cmap.FILTER, - view: cmap.COPY, - name: cmap.COPY, - }) - }) + item: (x: any) => + cmap(x, { + active: cmap.FILTER, + view: cmap.COPY, + name: cmap.COPY, + }), + }), } } - } - - - -export { - VxgBasicAdminPlugin, -} +export { VxgBasicAdminPlugin } diff --git a/src/lib/VxgBasicEntityEditPlugin.ts b/src/lib/VxgBasicEntityEditPlugin.ts index 2508340..d482417 100644 --- a/src/lib/VxgBasicEntityEditPlugin.ts +++ b/src/lib/VxgBasicEntityEditPlugin.ts @@ -1,28 +1,274 @@ - import type { Spec } from './basic-types' import { Gubu } from 'gubu' +import { resdefault, resvalue } from './vxg-util' const { Open, Child } = Gubu -const Shape = Gubu(Open({ - name: String, - prefix: String, - ent: String, - order: [String], - field: Child({}, {}) -}), { name: 'BasicEntityEdit' }) - +const Shape = Gubu( + Open({ + name: String, + prefix: String, + ent: String, + order: [String], + field: Child({}, {}), + }), + { name: 'BasicEntityEdit' } +) -function VxgBasicEntityEditPlugin(this: any, options: any) { +function VxgBasicEntityEditPlugin (this: any, options: any) { const seneca = this const spec = Shape(options.spec) const slot = spec.prefix + spec.name - const fields = spec.order.reduce((a: any, fn: any) => - (fixField(fn, spec.field[fn], spec), a.push(spec.field[fn]), a), []) + console.log('VxgBasicEntityEditPlugin', 'slot', slot, 'spec.name', spec.name) + + const fields = spec.order.reduce( + (a: any, fn: any) => ( + fixField(fn, spec.field[fn], spec), a.push(spec.field[fn]), a + ), + [] + ) + + for (const field of fields) { + if ('Date' === field.ux.kind) { + seneca + .add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Date (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]) + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_udm$'] = dt.udm + item[field.name] = dt.locald + console.log('modify_edit_Date', item[field.name]) + } + + return item + } + ) + + .add( + 'aim:app,on:BasicLed,modify:save', + { view: spec.name }, + async function modify_save_Date (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + const dt = util.localDateTimeToUTC(item[field.name]) + item[field.name] = dt + + return item + } + ) + } else if ('Time' === field.ux.kind) { + seneca + .add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Time (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]) + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_udm$'] = dt.udm + item[field.name] = dt.localt + console.log('modify_edit_Time', item[field.name]) + } + + return item + } + ) + + .add( + 'aim:app,on:BasicLed,modify:save', + { view: spec.name }, + async function modify_save_Time (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + const dt = util.localTimeToUTC(item[field.name]) + item[field.name] = dt + + return item + } + ) + } else if ('DateTime' === field.ux.kind) { + seneca + .add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Datetime (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + const dt = util.dateTimeFromUTC(item[field.name]) + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_udm$'] = dt.udm + item[field.name] = dt.locald + 'T' + dt.localt + } + + return item + } + ) + + .add( + 'aim:app,on:BasicLed,modify:save', + { view: spec.name }, + async function modify_save_Datetime (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + const dt = util.localDateTimeToUTC(item[field.name]) + item[field.name] = dt + + return item + } + ) + } else if ('Slider' === field.ux.kind) { + // console.log('VxgBasicEntityEditPlugin', 'Slider') + seneca.add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Slider (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_uival$'] = Number(item[field.name]) / 60 + item[field.name + '_marks$'] = util.resolveMarks( + field.ux.props.marks + ) + } + + return item + } + ) + } else if ('Select' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'Select', field.name) + seneca.add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Select (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_default$'] = resdefault( + field.cat, + (val: string) => val + ) + item[field.name + '_cat$'] = Object.keys(field.cat.item).map( + (key) => ({ + title: field.cat.item?.[key]?.title, + key: key, + }) + ) + item[field.name + '_uival$'] = resvalue( + item[field.name], + field.cat, + (val: string) => val + ) + } + + return item + } + ) + } else if ('Autocomplete' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'Autocomplete', field.name) + seneca.add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_Autocomplete (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name] + item[field.name + '_default$'] = resdefault( + field.cat, + (val: string, item: { title: string }) => ({ + key: val, + title: item.title, + }) + ) + item[field.name + '_cat$'] = Object.keys(field.cat.item).map( + (key) => ({ + title: field.cat.item?.[key]?.title, + key: key, + }) + ) + item[field.name + '_uival$'] = resvalue( + item[field.name], + field.cat, + (val: string, item: { title: string }) => ({ + key: val, + title: item.title, + }) + ) + } + + // console.log('modify_edit_Autocomplete', item) + + return item + } + ) + } else if ('RadioGroup' === field.ux.kind) { + console.log('VxgBasicEntityEditPlugin', 'RadioGroup', field.name) + seneca.add( + 'aim:app,on:BasicLed,modify:edit', + { view: spec.name }, + async function modify_edit_RadioGroup (this: any, msg: any) { + const out = await this.prior(msg) + + let item = { ...out } + + if (!item[field.name + '_orig$']) { + item[field.name + '_orig$'] = item[field.name] + + item[field.name + '_default$'] = field.cat.default + + item[field.name + '_cat$'] = Object.keys(field.cat.item).map( + (key) => ({ + title: field.cat.item?.[key]?.title, + key: key, + }) + ) + + item[field.name + '_uival$'] = resvalue( + item[field.name], + field.cat, + (val: string) => val + ) + } + + // console.log('modify_edit_RadioGroup', item) + + return item + } + ) + } + } options.setPlugin(true) @@ -32,33 +278,134 @@ function VxgBasicEntityEditPlugin(this: any, options: any) { spec, slot, fields, - } - } + }, + util, + }, } } - - -function fixField(name: string, field: any, spec: any) { +function fixField (name: string, field: any, spec: any) { field.id = 'vxg-field-' + spec.name + '-' + name field.name = name field.ux = field.ux || {} field.ux.size = null == field.ux.size ? 4 : parseInt(field.ux.size, 10) } +const util = { + resolveMarks: (marks: any) => { + if (!marks || (typeof marks === 'object' && !Object.keys(marks).length)) + return false + return typeof marks === 'object' + ? Object.entries(marks).map(([key, value]) => ({ + label: value, + value: +key, + })) + : marks + }, + dateTimeFromUTC: (utc: number, tz?: string) => { + const date = new Date(utc) + const iso = date.toISOString() + const isod = iso.split('T')[0] + const isot = iso.split('T')[1].split('.')[0] + + // UTC millis into day (since midnight) + const udm = + date.getUTCHours() * 60 * 60 * 1000 + + date.getUTCMinutes() * 60 * 1000 + + date.getUTCSeconds() * 1000 + + date.getUTCMilliseconds() + + let out: any = { + utc, + date, + isod, + isot, + udm, + } + + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone + const dateFormatter = new Intl.DateTimeFormat('en-GB', { + timeZone: tz, + year: 'numeric', + month: '2-digit', + day: '2-digit', + }) + const timeFormatter = new Intl.DateTimeFormat('en-GB', { + timeZone: tz, + hour: '2-digit', + minute: '2-digit', + second: '2-digit', + hour12: false, + }) + const [{ value: day }, , { value: month }, , { value: year }] = + dateFormatter.formatToParts(date) + const [{ value: hour }, , { value: minute }, , { value: second }] = + timeFormatter.formatToParts(date) + + out.locald = `${year}-${month}-${day}` + out.localt = `${hour}:${minute}:${second}` + + return out + }, + localTimeToUTC: (timeString: string, tz?: string) => { + tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone + const now = new Date() + + const [hours, minutes, seconds] = timeString.split(':').map(Number) + + const localDate = new Date( + now.getFullYear(), + now.getMonth(), + now.getDate(), + hours, + minutes, + seconds + ) + + const utcTimestamp = Date.UTC( + localDate.getFullYear(), + localDate.getMonth(), + localDate.getDate(), + localDate.getHours(), + localDate.getMinutes(), + localDate.getSeconds() + ) + + const tzOffset = new Date(utcTimestamp).getTimezoneOffset() * 60000 + + return utcTimestamp - tzOffset + }, + localDateTimeToUTC: (dateOrDateTimeString: string, tz?: string) => { + const date = new Date(dateOrDateTimeString) + + // Check if the date is valid + if (isNaN(date.getTime())) { + throw new Error('Invalid date or datetime string') + } + + // If a timezone is provided, adjust the date + if (tz) { + const tzDate = new Date(date.toLocaleString('en-GB', { timeZone: tz })) + const offset = date.getTime() - tzDate.getTime() + return date.getTime() + offset + } + + // If no timezone is provided, assume the input is already in local time + return date.getTime() + }, +} Object.assign(VxgBasicEntityEditPlugin, { defaults: { spec: {}, setPlugin: Function, - } + }, }) +Object.defineProperty(VxgBasicEntityEditPlugin, 'name', { + value: 'VxgBasicEntityEditPlugin', +}) -Object.defineProperty(VxgBasicEntityEditPlugin, 'name', { value: 'VxgBasicEntityEditPlugin' }) - -export { - VxgBasicEntityEditPlugin -} +export { VxgBasicEntityEditPlugin } diff --git a/src/lib/VxgBasicEntityFieldPlugin.ts b/src/lib/VxgBasicEntityFieldPlugin.ts new file mode 100644 index 0000000..305cdf5 --- /dev/null +++ b/src/lib/VxgBasicEntityFieldPlugin.ts @@ -0,0 +1,37 @@ +import { Gubu } from 'gubu' + +const { Open, Child } = Gubu + +const Shape = Gubu( + Open({ + field: {}, + }), + { name: 'BasicEntityField' } +) + +function VxgBasicEntityFieldPlugin (this: any, options: any) { + const seneca = this + + const spec = Shape(options.spec) + + options.setPlugin(true) + + return { + exports: { + handle: {}, + }, + } +} + +Object.assign(VxgBasicEntityFieldPlugin, { + defaults: { + spec: {}, + setPlugin: Function, + }, +}) + +Object.defineProperty(VxgBasicEntityFieldPlugin, 'name', { + value: 'VxgBasicEntityFieldPlugin', +}) + +export { VxgBasicEntityFieldPlugin } diff --git a/src/lib/VxgBasicLedPlugin.ts b/src/lib/VxgBasicLedPlugin.ts index ecde40b..9af9b46 100644 --- a/src/lib/VxgBasicLedPlugin.ts +++ b/src/lib/VxgBasicLedPlugin.ts @@ -1,35 +1,35 @@ - import type { Spec } from './basic-types' import { Gubu } from 'gubu' const { Open } = Gubu -const Shape = Gubu({ - name: String, - title: String, - active: Boolean, - kind: String, - def: { - ent: String, - head: Open({ - active: false, - }), - list: Open({ - active: false, - }), - edit: Open({ - active: false, - }), - foot: Open({ - active: false, - }), +const Shape = Gubu( + { + name: String, + title: String, + active: Boolean, + kind: String, + def: { + ent: String, + head: Open({ + active: false, + }), + list: Open({ + active: false, + }), + edit: Open({ + active: false, + }), + foot: Open({ + active: false, + }), + }, }, -}, { name: 'BasicLed' }) - - + { name: 'BasicLed' } +) -function VxgBasicLedPlugin(this: any, options: any) { +function VxgBasicLedPlugin (this: any, options: any) { const seneca = this const spec = Shape(options.spec) @@ -39,13 +39,16 @@ function VxgBasicLedPlugin(this: any, options: any) { const entCanon = spec.def.ent const slotName = 'BasicLed_' + name + // console.log('VxgBasicLedPlugin', 'name', name, 'init') + seneca .add('on:BasicLed') .fix({ view: name }) - .add('aim:app,on:view,init:state,redux$:true', - function(this: any, _msg: any, reply: any, meta: any) { + .add( + 'aim:app,on:view,init:state,redux$:true', + function (this: any, _msg: any, reply: any, meta: any) { const state = meta.custom.state() let view = state.view[name] @@ -55,10 +58,12 @@ function VxgBasicLedPlugin(this: any, options: any) { this.export('Redux/entityPrepare')(state, slotName) reply() - }) + } + ) - .add('aim:app,on:BasicLed,ready:list,redux$:true', - function(this: any, msg: any, reply: any, meta: any) { + .add( + 'aim:app,on:BasicLed,ready:list,redux$:true', + function (this: any, msg: any, reply: any, meta: any) { const setReady = msg.setReady const view = meta.custom.state().view[name] @@ -67,57 +72,49 @@ function VxgBasicLedPlugin(this: any, options: any) { setReady(true) reply() - }) + } + ) - .add('aim:app,on:BasicLed,ready:edit,redux$:true', - function(msg: any, reply: any, meta: any) { + .add( + 'aim:app,on:BasicLed,ready:edit,redux$:true', + function (msg: any, reply: any, meta: any) { const setReady = msg.setReady - const view = meta.custom.state().view[name] + // Update the view state + const view = meta.custom.state().view[name] view.mode = 'edit' view.status = 'edit-item' setReady(true) reply() - }) - - .add('aim:app,on:BasicLed,modify:edit', - function(msg: any) { - let item = msg.item - let fields = msg.fields - - if (null == item) return item; - - item = { ...item } - - // This code does not belong here - for (const field of fields) { - if ('Date' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]) - item[field.name + '_orig$'] = item[field.name] - item[field.name + '_udm$'] = dt.udm - item[field.name] = dt.locald - } - else if ('Time' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]) - item[field.name + '_orig$'] = item[field.name] - item[field.name + '_udm$'] = dt.udm - item[field.name] = dt.localt - } - else if ('DateTime' === field.ux.kind) { - const dt = util.dateTimeFromUTC(item[field.name]) - item[field.name + '_orig$'] = item[field.name] - item[field.name + '_udm$'] = dt.udm - item[field.name] = dt.locald + 'T' + dt.localt - } - } + } + ) - return item - }) + .add('aim:app,on:BasicLed,modify:edit', function modify_edit (msg: any) { + let item = msg.item + // let fields = msg.fields + + if (null == item) return item + + item = { ...item } + + return item + }) + + .add('aim:app,on:BasicLed,modify:save', function modify_save (msg: any) { + let item = msg.data + + if (null == item) return item + + item = { ...item } + + return item + }) - .message('aim:app,on:BasicLed,edit:item,redux$:true', + .message( + 'aim:app,on:BasicLed,edit:item,redux$:true', { item_id: String }, - async function(this: any, msg: any, meta: any) { + async function (this: any, msg: any, meta: any) { const state = meta.custom.state() let view = state.view[name] const { item_id } = msg @@ -132,32 +129,36 @@ function VxgBasicLedPlugin(this: any, options: any) { }) return item - }) - + } + ) - .message('aim:app,on:BasicLed,add:item', - async function(this: any, _msg: any) { + .message( + 'aim:app,on:BasicLed,add:item', + async function (this: any, _msg: any) { await seneca.entity(entCanon).save$({ add$: true, slot$: slotName }) navigate('/view/' + name + '/add') - }) - + } + ) - .message('aim:app,on:BasicLed,save:item', - async function(this: any, msg: any) { + .message( + 'aim:app,on:BasicLed,save:item', + async function (this: any, msg: any, meta: any) { const data = Object.entries(spec.def.edit.field) .filter((n: any[]) => false !== n[1].ux.edit) - .reduce((a: any, n: any[]) => (a[n[0]] = msg.data[n[0]], a), {}) + .reduce((a: any, n: any[]) => ((a[n[0]] = msg.data[n[0]]), a), {}) + + // const state = meta.custom.state() + // let view = state.view[name] + // view.alert = { active: true, message: 'Saved', level: 'success' } const item = await seneca.entity(entCanon).save$(data) navigate('/view/' + name + '/edit/' + item.id) - }) - - - seneca - .prepare(async function(this: any) { - this.act('aim:app,on:view,init:state,direct$:true', { view: name }) - }) + } + ) + seneca.prepare(async function (this: any) { + this.act('aim:app,on:view,init:state,direct$:true', { view: name }) + }) const sharedSpec = { name, @@ -165,7 +166,6 @@ function VxgBasicLedPlugin(this: any, options: any) { prefix: 'BasicLed_', } - const listSpec = { ...spec.def.list, ...sharedSpec, @@ -174,7 +174,6 @@ function VxgBasicLedPlugin(this: any, options: any) { const editSpec = { ...spec.def.edit, ...sharedSpec, - } const headSpec = { @@ -187,7 +186,6 @@ function VxgBasicLedPlugin(this: any, options: any) { ...sharedSpec, } - return { exports: { spec: { @@ -196,71 +194,15 @@ function VxgBasicLedPlugin(this: any, options: any) { head: headSpec, foot: footSpec, }, - util, - } + }, } } - -const util = { - dateTimeFromUTC: (utc: number, tz?: string) => { - const date = new Date(utc) - const iso = date.toISOString() - const isod = iso.split('T')[0] - const isot = iso.split('T')[1].split('.')[0] - - // UTC millis into day (since midnight) - const udm = - (date.getUTCHours() * 60 * 60 * 1000) + - (date.getUTCMinutes() * 60 * 1000) + - (date.getUTCSeconds() * 1000) + - date.getUTCMilliseconds() - - let out: any = { - utc, - date, - isod, - isot, - udm, - } - - tz = tz || Intl.DateTimeFormat().resolvedOptions().timeZone - const dateFormatter = new Intl.DateTimeFormat('en-GB', { - timeZone: tz, - year: 'numeric', - month: '2-digit', - day: '2-digit' - }) - - const timeFormatter = new Intl.DateTimeFormat('en-GB', { - timeZone: tz, - hour: '2-digit', - minute: '2-digit', - second: '2-digit', - hour12: false - }) - - const [{ value: day }, , { value: month }, , { value: year }] = - dateFormatter.formatToParts(date) - const [{ value: hour }, , { value: minute }, , { value: second }] = - timeFormatter.formatToParts(date) - - out.locald = `${year}-${month}-${day}` - out.localt = `${hour}:${minute}:${second}` - - return out - }, -} - - VxgBasicLedPlugin.defaults = { spec: {}, navigate: Function, } - Object.defineProperty(VxgBasicLedPlugin, 'name', { value: 'VxgBasicLedPlugin' }) -export { - VxgBasicLedPlugin -} +export { VxgBasicLedPlugin } diff --git a/src/lib/vxg-util.ts b/src/lib/vxg-util.ts index a6bf093..a7b9d39 100644 --- a/src/lib/vxg-util.ts +++ b/src/lib/vxg-util.ts @@ -1,53 +1,87 @@ - - // TODO: cmap,vmap probably belong in @voxgig/model utils +import { useId } from 'react' + // Map child objects to new child objects -function cmap(o: any, p: any) { - return Object - .entries(o) - .reduce((r: any, n: any, _: any) => (_ = Object - .entries(p) - .reduce((s: any, m: any) => (cmap.FILTER === s ? s : (s[m[0]] = ( - // transfom(val,key,current,parentkey,parent) - 'function' === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], self: n[1], key: n[0], parent: o - }) : m[1] - ), (cmap.FILTER === s[m[0]] ? cmap.FILTER : s))), {}) - , (cmap.FILTER === _ ? 0 : r[n[0]] = _), r), {}) +function cmap (o: any, p: any) { + return Object.entries(o).reduce( + (r: any, n: any, _: any) => ( + (_ = Object.entries(p).reduce( + (s: any, m: any) => + cmap.FILTER === s + ? s + : ((s[m[0]] = + // transfom(val,key,current,parentkey,parent) + 'function' === typeof m[1] + ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o, + }) + : m[1]), + cmap.FILTER === s[m[0]] ? cmap.FILTER : s), + {} + )), + cmap.FILTER === _ ? 0 : (r[n[0]] = _), + r + ), + {} + ) } cmap.COPY = (x: any) => x // keep self if x is truthy, or function returning truthy-new-value or [truthy,new-value] -cmap.FILTER = (x: any) => 'function' === typeof x ? ((y: any, p: any, _: any) => - (_ = x(y, p), Array.isArray(_) ? !_[0] ? _[1] : cmap.FILTER : _)) : (x ? x : cmap.FILTER) +cmap.FILTER = (x: any) => + 'function' === typeof x + ? (y: any, p: any, _: any) => ( + (_ = x(y, p)), Array.isArray(_) ? (!_[0] ? _[1] : cmap.FILTER) : _ + ) + : x + ? x + : cmap.FILTER cmap.KEY = (_: any, p: any) => p.key - // Map child objects to a list of child objects -function vmap(o: any, p: any) { - return Object - .entries(o) - .reduce((r: any, n: any, _: any) => (_ = Object - .entries(p) - .reduce((s: any, m: any) => (vmap.FILTER === s ? s : (s[m[0]] = ( - // transfom(val,key,current,parentkey,parent) - // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] - 'function' === typeof m[1] ? m[1](n[1][m[0]], { - skey: m[0], self: n[1], key: n[0], parent: o - }) : m[1] - ), (vmap.FILTER === s[m[0]] ? vmap.FILTER : s))), {}) - , (vmap.FILTER === _ ? 0 : r.push(_)), r), []) - +function vmap (o: any, p: any) { + return Object.entries(o).reduce( + (r: any, n: any, _: any) => ( + (_ = Object.entries(p).reduce( + (s: any, m: any) => + vmap.FILTER === s + ? s + : ((s[m[0]] = + // transfom(val,key,current,parentkey,parent) + // 'function' === typeof m[1] ? m[1](n[1][m[0]], m[0], n[1], n[0], o) : m[1] + 'function' === typeof m[1] + ? m[1](n[1][m[0]], { + skey: m[0], + self: n[1], + key: n[0], + parent: o, + }) + : m[1]), + vmap.FILTER === s[m[0]] ? vmap.FILTER : s), + {} + )), + vmap.FILTER === _ ? 0 : r.push(_), + r + ), + [] + ) } vmap.COPY = (x: any) => x -vmap.FILTER = (x: any) => 'function' === typeof x ? ((y: any, p: any, _: any) => - (_ = x(y, p), Array.isArray(_) ? !_[0] ? _[1] : vmap.FILTER : _)) : (x ? x : vmap.FILTER) +vmap.FILTER = (x: any) => + 'function' === typeof x + ? (y: any, p: any, _: any) => ( + (_ = x(y, p)), Array.isArray(_) ? (!_[0] ? _[1] : vmap.FILTER) : _ + ) + : x + ? x + : vmap.FILTER vmap.KEY = (_: any, p: any) => p.key - - -function searchParamsToObject(searchParams: URLSearchParams) { +function searchParamsToObject (searchParams: URLSearchParams) { let params: any = Object.create(null) for (let [key, value] of searchParams.entries()) { params[key] = value @@ -55,10 +89,93 @@ function searchParamsToObject(searchParams: URLSearchParams) { return params } +// Map a value (object, array, or string) to a value or array of values using a map function +// TODO: possibly not the best place for this, maybe in a plugin? +function resvalue ( + value: object | any[] | string, + cat: { multiple: number; item: Record }, + mapFn: (val: string, item: { title: string }) => any +) { + const { item: items, multiple } = cat + + if (!value) { + return multiple === 1 ? '' : [] + } + + if (Object.keys(items).length === 0) { + return multiple === 1 ? '' : [] + } + + if (Array.isArray(value)) { + return multiple === 1 && value[0] ? value[0] : value.slice(0, multiple) + } + + if (typeof value === 'object') { + return multiple === 1 ? value : [value] + } + const splitValue = value.split(',') + + const mapValue = (val: string) => + items[val] ? mapFn(val, items[val]) : undefined + + switch (multiple) { + case 1: + return mapValue(splitValue[0]) || '' + case -1: + return splitValue.map(mapValue).filter(Boolean) || [] + default: + return splitValue.slice(0, multiple).map(mapValue).filter(Boolean) + } +} + +// Map a string to a value or array of values using a map function +// TODO: possibly not the best place for this, maybe in a plugin? +function resdefault ( + cat: { + multiple: number + item: Record + default: string + }, + mapFn: (val: string, item: { title: string }) => any +) { + const { multiple, item: items, default: defaultValues } = cat + + if (Object.keys(items).length === 0) { + return multiple === 1 ? '' : [] + } + + const defaultItems = defaultValues.split(',') + + const mapResolvedDefault = (list: string[]) => + list.map((val: string) => (items[val] ? mapFn(val, items[val]) : undefined)) + + switch (multiple) { + case 1: + return defaultItems[0] + ? mapFn(defaultItems[0], items[defaultItems[0]]) + : '' + case -1: + return mapResolvedDefault(defaultItems).filter(Boolean) || [] + default: + return ( + mapResolvedDefault(defaultItems.slice(0, multiple)).filter(Boolean) || + [] + ) + } +} + +function useSanitizedId () { + const id = useId() + const sanitizedId = id.replace(/[^a-zA-Z0-9_]/g, 'x') + return sanitizedId +} export { cmap, vmap, searchParamsToObject, + resvalue, + resdefault, + useSanitizedId, } diff --git a/test-plain/VxgBasicAdminPlugin.test.js b/test-plain/VxgBasicAdminPlugin.test.js new file mode 100644 index 0000000..d269653 --- /dev/null +++ b/test-plain/VxgBasicAdminPlugin.test.js @@ -0,0 +1,144 @@ +require('ts-node') + +const { test, describe } = require('node:test') + +const { expect } = require('@hapi/code') + +const Seneca = require('seneca') + +const { VxgBasicAdminPlugin } = require('../dist-plain/lib/VxgBasicAdminPlugin') + +describe('VxgBasicAdminPlugin', () => { + test('load-plugin', async () => { + const seneca = await makeSeneca() + console.log('seneca.context', seneca.context.model) + expect(seneca.find_plugin('VxgBasicAdminPlugin$foo')).exist() + await seneca.close() + }) +}) + +async function makeSeneca (opts) { + const { deep } = Seneca.util + const seneca = Seneca({ legacy: false }) + .test() + .use('promisify') + .use('entity') + .use('redux', { + name: 'main', + state: { + view: { + foo: {}, + }, + }, + }) + + // TODO: move to json + seneca.context.model = { + app: { + web: { + frame: { + public: { + kind: 'basic', + part: { + main: { + view: { + default: 'dash', + }, + }, + }, + page: { + auth: { + title: 'Sign In', + img: { + logo: '/logo.png', + }, + signin: { + debug: false, + view: 'dash', + }, + }, + }, + name: 'public', + nav: { + section: {}, + }, + }, + private: { + kind: 'basic', + nav: { + section: { + one: { + name: 'one', + item: { + dash: { + name: 'dash', + view: 'dash', + active: true, + }, + }, + active: true, + }, + }, + }, + tool: { + logo: { + name: 'logo', + kind: 'logo', + attr: { + img: '/logo.png', + }, + }, + }, + part: { + head: { + tool: { + logo: { + active: true, + align: 'left', + }, + }, + name: 'head', + active: true, + }, + side: { + name: 'side', + active: true, + }, + main: { + view: { + default: 'dash', + }, + name: 'main', + active: true, + }, + foot: { + name: 'foot', + active: true, + }, + }, + view: { + dash: { + title: 'Dashboard', + active: true, + kind: 'custom', + cmp: 'Dash', + def: {}, + name: 'dash', + }, + }, + name: 'private', + }, + }, + }, + }, + } + + seneca + .use({ + name: 'VxgBasicAdminPlugin$foo', + define: VxgBasicAdminPlugin, + }) + .ready() + + return seneca +} diff --git a/test-plain/VxgBasicAuthPlugin.test.js b/test-plain/VxgBasicAuthPlugin.test.js new file mode 100644 index 0000000..0594e9a --- /dev/null +++ b/test-plain/VxgBasicAuthPlugin.test.js @@ -0,0 +1,148 @@ +require('ts-node') + +const { test, describe } = require('node:test') + +const { expect } = require('@hapi/code') + +const Seneca = require('seneca') + +const { VxgBasicAuthPlugin } = require('../dist-plain/lib/VxgBasicAuthPlugin') + +describe('VxgBasicAuthPlugin', () => { + test('load-plugin', async () => { + const seneca = await makeSeneca() + expect(seneca.find_plugin('VxgBasicAuthPlugin$foo')).exist() + await seneca.close() + }) +}) + +async function makeSeneca (opts) { + const { deep } = Seneca.util + const seneca = Seneca({ legacy: false }) + .test() + .use('promisify') + .use('entity') + .use('redux', { + name: 'main', + state: { + view: { + foo: {}, + }, + }, + }) + + seneca.context.model = { + app: { + web: { + frame: { + public: { + kind: 'basic', + part: { + main: { + view: { + default: 'dash', + }, + }, + }, + page: { + auth: { + title: 'Sign In', + img: { + logo: '/logo.png', + }, + signin: { + debug: false, + view: 'dash', + }, + }, + }, + name: 'public', + nav: { + section: {}, + }, + }, + private: { + kind: 'basic', + nav: { + section: { + one: { + name: 'one', + item: { + dash: { + name: 'dash', + view: 'dash', + active: true, + }, + }, + active: true, + }, + }, + }, + tool: { + logo: { + name: 'logo', + kind: 'logo', + attr: { + img: '/logo.png', + }, + }, + }, + part: { + head: { + tool: { + logo: { + active: true, + align: 'left', + }, + }, + name: 'head', + active: true, + }, + side: { + name: 'side', + active: true, + }, + main: { + view: { + default: 'dash', + }, + name: 'main', + active: true, + }, + foot: { + name: 'foot', + active: true, + }, + }, + view: { + dash: { + title: 'Dashboard', + active: true, + kind: 'custom', + cmp: 'Dash', + def: {}, + name: 'dash', + }, + }, + name: 'private', + }, + }, + }, + }, + } + + seneca + .use({ + name: 'VxgBasicAuthPlugin$foo', + define: VxgBasicAuthPlugin, + options: deep( + { + setReady: () => null, + }, + opts + ), + }) + .ready() + + return seneca +} diff --git a/test-plain/VxgBasicEntityEditPlugin.test.js b/test-plain/VxgBasicEntityEditPlugin.test.js new file mode 100644 index 0000000..bd0da6a --- /dev/null +++ b/test-plain/VxgBasicEntityEditPlugin.test.js @@ -0,0 +1,85 @@ +require('ts-node') + +const { test, describe } = require('node:test') + +const { expect } = require('@hapi/code') + +const Seneca = require('seneca') + +const { + VxgBasicEntityEditPlugin, +} = require('../dist-plain/lib/VxgBasicEntityEditPlugin') + +describe('VxgBasicEntityEditPlugin', () => { + test('load-plugin', async () => { + const seneca = await makeSeneca() + expect(seneca.find_plugin('VxgBasicEntityEditPlugin$foo')).exist() + await seneca.close() + }) + + test('util-datetime', async () => { + const seneca = await makeSeneca() + const { dateTimeFromUTC } = seneca.export('VxgBasicEntityEditPlugin/util') + const d0 = new Date(1717173005742) + const o0 = dateTimeFromUTC(d0, 'Europe/Dublin') + // console.log(new Date(d0), o0) + expect(o0).contains({ + udm: 59405742, + isod: '2024-05-31', + isot: '16:30:05', + locald: '2024-05-31', + localt: '17:30:05', + }) + await seneca.close() + }) +}) + +async function makeSeneca (opts) { + const { deep } = Seneca.util + return Seneca({ legacy: false }) + .test() + .use('promisify') + .use('entity') + .use('redux', { + name: 'main', + state: { + view: { + foo: {}, + }, + }, + }) + .use({ + name: 'VxgBasicEntityEditPlugin$foo', + define: VxgBasicEntityEditPlugin, + options: deep( + { + setPlugin: () => null, + spec: { + active: false, + name: 'foo', + prefix: 'BasicLed_', + ent: 'foo/bar', + order: ['title'], + field: { + title: { + label: 'Title', + kind: 'String', + valid: 'Min(2).Max(1111)', + ux: { + kind: 'Text', + edit: true, + rows: 3, + size: 4, + props: {}, + }, + id: 'vxg-field-podcast-title', + name: 'title', + }, + }, + }, + }, + opts + ), + }) + .ready() +} diff --git a/test-plain/VxgBasicEntityFieldPlugin.test.js b/test-plain/VxgBasicEntityFieldPlugin.test.js new file mode 100644 index 0000000..a1211aa --- /dev/null +++ b/test-plain/VxgBasicEntityFieldPlugin.test.js @@ -0,0 +1,69 @@ +require('ts-node') + +const { test, describe } = require('node:test') + +const { expect } = require('@hapi/code') + +const Seneca = require('seneca') + +const { + VxgBasicEntityFieldPlugin, +} = require('../dist-plain/lib/VxgBasicEntityFieldPlugin') + +describe('VxgBasicEntityFieldPlugin', () => { + test('load-plugin', async () => { + const seneca = await makeSeneca() + expect(seneca.find_plugin('VxgBasicEntityFieldPlugin$foo')).exist() + await seneca.close() + }) +}) + +async function makeSeneca (opts) { + const { deep } = Seneca.util + return Seneca({ legacy: false }) + .test() + .use('promisify') + .use('entity') + .use('redux', { + name: 'main', + state: { + view: { + foo: {}, + }, + }, + }) + .use({ + name: 'VxgBasicEntityFieldPlugin$foo', + define: VxgBasicEntityFieldPlugin, + options: deep( + { + setPlugin: () => null, + spec: { + active: false, + name: 'foo', + prefix: 'BasicLed_', + ent: 'foo/bar', + order: ['title'], + field: { + title: { + label: 'Title', + kind: 'String', + valid: 'Min(2).Max(1111)', + ux: { + kind: 'Text', + edit: true, + rows: 3, + size: 4, + props: {}, + }, + id: 'vxg-field-podcast-title', + name: 'title', + }, + }, + }, + }, + opts + ), + }) + .ready() +} diff --git a/test-plain/VxgBasicEntityListPlugin.test.js b/test-plain/VxgBasicEntityListPlugin.test.js new file mode 100644 index 0000000..9c566d5 --- /dev/null +++ b/test-plain/VxgBasicEntityListPlugin.test.js @@ -0,0 +1,69 @@ +require('ts-node') + +const { test, describe } = require('node:test') + +const { expect } = require('@hapi/code') + +const Seneca = require('seneca') + +const { + VxgBasicEntityListPlugin, +} = require('../dist-plain/lib/VxgBasicEntityListPlugin') + +describe('VxgBasicEntityListPlugin', () => { + test('load-plugin', async () => { + const seneca = await makeSeneca() + expect(seneca.find_plugin('VxgBasicEntityListPlugin$foo')).exist() + await seneca.close() + }) +}) + +async function makeSeneca (opts) { + const { deep } = Seneca.util + return Seneca({ legacy: false }) + .test() + .use('promisify') + .use('entity') + .use('redux', { + name: 'main', + state: { + view: { + foo: {}, + }, + }, + }) + .use({ + name: 'VxgBasicEntityListPlugin$foo', + define: VxgBasicEntityListPlugin, + options: deep( + { + setPlugin: () => null, + spec: { + active: false, + name: 'foo', + prefix: 'BasicLed_', + ent: 'foo/bar', + order: ['title'], + field: { + title: { + label: 'Title', + kind: 'String', + valid: 'Min(2).Max(1111)', + ux: { + kind: 'Text', + edit: true, + rows: 3, + size: 4, + props: {}, + }, + id: 'vxg-field-podcast-title', + name: 'title', + }, + }, + }, + }, + opts + ), + }) + .ready() +} diff --git a/test-plain/VxgBasicLedPlugin.test.js b/test-plain/VxgBasicLedPlugin.test.js index 87fbf86..6a79f52 100644 --- a/test-plain/VxgBasicLedPlugin.test.js +++ b/test-plain/VxgBasicLedPlugin.test.js @@ -1,4 +1,3 @@ - require('ts-node') const { test, describe } = require('node:test') @@ -9,8 +8,6 @@ const Seneca = require('seneca') const { VxgBasicLedPlugin } = require('../dist-plain/lib/VxgBasicLedPlugin') - - describe('VxgBasicLedPlugin', () => { test('load-plugin', async () => { const seneca = await makeSeneca() @@ -18,97 +15,110 @@ describe('VxgBasicLedPlugin', () => { await seneca.close() }) - test('ready-list', async () => { const seneca = await makeSeneca() const store = seneca.export('Redux/store') - expect(store.getState().main.view.foo) - .equal({ mode: 'list', status: 'init', ready: true }) + expect(store.getState().main.view.foo).equal({ + mode: 'list', + status: 'init', + ready: true, + }) - await seneca.post('aim:app,on:BasicLed,ready:list,view:foo',{setReady:()=>null}) - expect(store.getState().main.view.foo) - .equal({ mode: 'list', status: 'list-item', ready: true }) + await seneca.post('aim:app,on:BasicLed,ready:list,view:foo', { + setReady: () => null, + }) + expect(store.getState().main.view.foo).equal({ + mode: 'list', + status: 'list-item', + ready: true, + }) await seneca.close() }) - test('ready-edit', async () => { const seneca = await makeSeneca() const store = seneca.export('Redux/store') - expect(store.getState().main.view.foo) - .equal({ mode: 'list', status: 'init', ready: true }) + expect(store.getState().main.view.foo).equal({ + mode: 'list', + status: 'init', + ready: true, + }) - await seneca.post('aim:app,on:BasicLed,ready:edit,view:foo',{setReady:()=>null}) - expect(store.getState().main.view.foo) - .equal({ mode: 'edit', status: 'edit-item', ready: true }) + await seneca.post('aim:app,on:BasicLed,ready:edit,view:foo', { + setReady: () => null, + }) + expect(store.getState().main.view.foo).equal({ + mode: 'edit', + status: 'edit-item', + ready: true, + }) await seneca.close() }) + // test('util-datetime', async () => { + // const seneca = await makeSeneca() + // const { dateTimeFromUTC } = seneca.export('VxgBasicLedPlugin/util') - test('util-datetime', async () => { - const seneca = await makeSeneca() - const { dateTimeFromUTC } = seneca.export('VxgBasicLedPlugin/util') - - const d0 = new Date(1717173005742) - const o0 = dateTimeFromUTC(d0,'Europe/Dublin') + // const d0 = new Date(1717173005742) + // const o0 = dateTimeFromUTC(d0,'Europe/Dublin') - // console.log(new Date(d0), o0) - expect(o0).contains({ - udm: 59405742, - isod: '2024-05-31', - isot: '16:30:05', - locald: '2024-05-31', - localt: '17:30:05' - }) + // // console.log(new Date(d0), o0) + // expect(o0).contains({ + // udm: 59405742, + // isod: '2024-05-31', + // isot: '16:30:05', + // locald: '2024-05-31', + // localt: '17:30:05' + // }) - - await seneca.close() - }) - + // await seneca.close() + // }) }) - -async function makeSeneca(opts) { +async function makeSeneca (opts) { const { deep } = Seneca.util - return Seneca({legacy:false}) + return Seneca({ legacy: false }) .test() .use('promisify') .use('entity') - .use('redux',{ + .use('redux', { name: 'main', state: { view: { - foo: {} - } + foo: {}, + }, }, }) .use({ name: 'VxgBasicLedPlugin$foo', define: VxgBasicLedPlugin, - options: deep({ - navigate: ()=>null, - spec: { - name: 'foo', - title: 'title', - active: true, - kind: 'led', - def: { - ent: 'foo', - head: { - active: true, - }, - list: { - active: true, - }, - edit: { - active: true, - }, - foot: { - active: true, + options: deep( + { + navigate: () => null, + spec: { + name: 'foo', + title: 'title', + active: true, + kind: 'led', + def: { + ent: 'foo', + head: { + active: true, + }, + list: { + active: true, + }, + edit: { + active: true, + }, + foot: { + active: true, + }, }, - } - } - }, opts) + }, + }, + opts + ), }) .ready() } diff --git a/test/BasicEntityAutocompleteField.test.tsx b/test/BasicEntityAutocompleteField.test.tsx new file mode 100644 index 0000000..0a1bd63 --- /dev/null +++ b/test/BasicEntityAutocompleteField.test.tsx @@ -0,0 +1,173 @@ +import { describe, it, expect, beforeEach } from 'vitest' + +import { resolveCategories, resolveDefault, resolveValue } from '../src/lib/BasicEntityAutocompleteField' + +describe('resolveValue', () => { + let value: any + let cat: any + + beforeEach(() => { + value = 'code,tech' + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns empty string for unmatched values when multiple is 1', () => { + value = 'foo,bar' + expect(resolveValue(value, cat)).toEqual('') + }) + + it('returns object of matched values when multiple is 1', () => { + cat.multiple = 1 + expect(resolveValue(value, cat)).toEqual({ key: 'code', title: 'Coding' }) + }) + + it('returns empty array for unmatched values when multiple is 2', () => { + value = 'foo,bar' + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns empty array for unmatched values when multiple is 2', () => { + value = 'foo' + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns array of matched values when multiple is 2', () => { + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + ]) + }) + + it('returns empty array for unmatched values when multiple is -1', () => { + value = 'foo,bar' + cat.multiple = -1 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns array of matched values when multiple is -1', () => { + cat.multiple = -1 + expect(resolveValue(value, cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + ]) + }) +}) + +describe('resolveDefault', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns object of matched values when multiple is 1', () => { + expect(resolveDefault(cat)).toEqual({ key: 'code', title: 'Coding' }) + }) + + it('returns object of matched value when multiple is 1', () => { + cat.default = 'code,tech,devr' + expect(resolveDefault(cat)).toEqual({ key: 'code', title: 'Coding' }) + }) + + it('returns empty string when item is empty and multiple is 1', () => { + cat.default = 'code,tech,devr' + cat.item = {} + expect(resolveDefault(cat)).toEqual('') + }) + + it('returns array of matched values when multiple is 2', () => { + cat.default = 'code,tech,devr' + cat.multiple = 2 + expect(resolveDefault(cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + ]) + }) + + it('returns empty array when item is empty and multiple is 2', () => { + cat.default = 'code,tech,devr' + cat.item = {} + cat.multiple = 2 + expect(resolveDefault(cat)).toEqual([]) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.multiple = -1 + expect(resolveDefault(cat)).toEqual([{ key: 'code', title: 'Coding' }]) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.multiple = -1 + cat.default = 'code,tech,devr' + expect(resolveDefault(cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + { key: 'devr', title: 'Developer Relations' }, + ]) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.default = 'code,tech,devr' + cat.item = {} + cat.multiple = -1 + expect(resolveDefault(cat)).toEqual([]) + }) +}) + +describe('resolveCategories', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns array of matched values when multiple is 1', () => { + expect(resolveCategories(cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + { key: 'devr', title: 'Developer Relations' }, + ]) + }) +}) diff --git a/test/BasicEntityRadioGroupField.test.tsx b/test/BasicEntityRadioGroupField.test.tsx new file mode 100644 index 0000000..c658766 --- /dev/null +++ b/test/BasicEntityRadioGroupField.test.tsx @@ -0,0 +1,56 @@ +import { describe, it, expect, beforeEach } from 'vitest' + +import { resolveCategories, resolveDefault } from '../src/lib/BasicEntityRadioGroupField' + +describe('resolveDefault', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns empty string when default is empty', () => { + expect(resolveDefault(cat)).toEqual('code') + }) +}) + +describe('resolveCategories', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns array of matched values when multiple is 1', () => { + expect(resolveCategories(cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + { key: 'devr', title: 'Developer Relations' }, + ]) + }) +}) diff --git a/test/BasicEntitySelectField.test.tsx b/test/BasicEntitySelectField.test.tsx new file mode 100644 index 0000000..1d66b56 --- /dev/null +++ b/test/BasicEntitySelectField.test.tsx @@ -0,0 +1,164 @@ +import { describe, it, expect, beforeEach } from 'vitest' + +import { + resolveCategories, + resolveDefault, + resolveValue, +} from '../src/lib/BasicEntitySelectField' + +describe('resolveValue', () => { + let value: any + let cat: any + + beforeEach(() => { + value = 'code,tech' + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns empty string for unmatched values when multiple is 1', () => { + value = 'foo,bar' + expect(resolveValue(value, cat)).toEqual('') + }) + + it('returns object of matched values when multiple is 1', () => { + cat.multiple = 1 + expect(resolveValue(value, cat)).toEqual('code') + }) + + it('returns empty array for unmatched values when multiple is 2', () => { + value = 'foo,bar' + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns empty array for unmatched values when multiple is 2', () => { + value = 'foo' + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns array of matched values when multiple is 2', () => { + cat.multiple = 2 + expect(resolveValue(value, cat)).toEqual(['code', 'tech']) + }) + + it('returns empty array for unmatched values when multiple is -1', () => { + value = 'foo,bar' + cat.multiple = -1 + expect(resolveValue(value, cat)).toEqual([]) + }) + + it('returns array of matched values when multiple is -1', () => { + cat.multiple = -1 + expect(resolveValue(value, cat)).toEqual(['code', 'tech']) + }) +}) + +describe('resolveDefault', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns object of matched values when multiple is 1', () => { + expect(resolveDefault(cat)).toEqual('code') + }) + + it('returns object of matched value when multiple is 1', () => { + cat.default = 'code,tech,devr' + expect(resolveDefault(cat)).toEqual('code') + }) + + it('returns empty string when item is empty and multiple is 1', () => { + cat.default = 'code,tech,devr' + cat.item = {} + expect(resolveDefault(cat)).toEqual('') + }) + + it('returns array of matched values when multiple is 2', () => { + cat.default = 'code,tech,devr' + cat.multiple = 2 + expect(resolveDefault(cat)).toEqual(['code', 'tech']) + }) + + it('returns empty array when item is empty and multiple is 2', () => { + cat.default = 'code,tech,devr' + cat.item = {} + cat.multiple = 2 + expect(resolveDefault(cat)).toEqual([]) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.multiple = -1 + expect(resolveDefault(cat)).toEqual(['code']) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.multiple = -1 + cat.default = 'code,tech,devr' + expect(resolveDefault(cat)).toEqual(['code', 'tech', 'devr']) + }) + + it('returns empty array when item is empty and multiple is -1', () => { + cat.default = 'code,tech,devr' + cat.item = {} + cat.multiple = -1 + expect(resolveDefault(cat)).toEqual([]) + }) +}) + +describe('resolveCategories', () => { + let cat: any + + beforeEach(() => { + cat = { + default: 'code', + multiple: 1, + order: { + sort: 'human$', + exclude: '', + include: '', + }, + item: { + code: { title: 'Coding' }, + tech: { title: 'Technology' }, + devr: { title: 'Developer Relations' }, + }, + } + }) + + it('returns array of matched values when multiple is 1', () => { + expect(resolveCategories(cat)).toEqual([ + { key: 'code', title: 'Coding' }, + { key: 'tech', title: 'Technology' }, + { key: 'devr', title: 'Developer Relations' }, + ]) + }) +})