@nocobase/client 2.0.0-alpha.69 → 2.0.0-alpha.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.dumirc.ts +4 -0
- package/es/index.mjs +57 -24
- package/lib/index.js +2 -2
- package/package.json +6 -6
package/.dumirc.ts
CHANGED
package/es/index.mjs
CHANGED
|
@@ -9722,7 +9722,7 @@ function addAppVersion(e, t) {
|
|
|
9722
9722
|
addAppVersion((n = e.properties) == null ? void 0 : n[o], t);
|
|
9723
9723
|
}), e;
|
|
9724
9724
|
}
|
|
9725
|
-
const name = "@nocobase/client", version = "2.0.0-alpha.
|
|
9725
|
+
const name = "@nocobase/client", version = "2.0.0-alpha.70", license = "AGPL-3.0", main = "lib/index.js", module = "es/index.mjs", types = "es/index.d.ts", dependencies = {
|
|
9726
9726
|
"@ahooksjs/use-url-state": "3.5.1",
|
|
9727
9727
|
"@ant-design/cssinjs": "^1.11.1",
|
|
9728
9728
|
"@ant-design/icons": "^5.6.1",
|
|
@@ -9745,10 +9745,10 @@ const name = "@nocobase/client", version = "2.0.0-alpha.69", license = "AGPL-3.0
|
|
|
9745
9745
|
"@formily/reactive-react": "^2.2.27",
|
|
9746
9746
|
"@formily/shared": "^2.2.27",
|
|
9747
9747
|
"@formily/validator": "^2.2.27",
|
|
9748
|
-
"@nocobase/evaluators": "2.0.0-alpha.
|
|
9749
|
-
"@nocobase/flow-engine": "2.0.0-alpha.
|
|
9750
|
-
"@nocobase/sdk": "2.0.0-alpha.
|
|
9751
|
-
"@nocobase/utils": "2.0.0-alpha.
|
|
9748
|
+
"@nocobase/evaluators": "2.0.0-alpha.70",
|
|
9749
|
+
"@nocobase/flow-engine": "2.0.0-alpha.70",
|
|
9750
|
+
"@nocobase/sdk": "2.0.0-alpha.70",
|
|
9751
|
+
"@nocobase/utils": "2.0.0-alpha.70",
|
|
9752
9752
|
"@tanstack/react-table": "^8.21.3",
|
|
9753
9753
|
"@types/tabulator-tables": "^6.2.6",
|
|
9754
9754
|
"acorn-jsx": "^5.3.2",
|
|
@@ -66439,7 +66439,21 @@ function ensureOptionsFromUiSchemaEnumIfAbsent(e, t) {
|
|
|
66439
66439
|
const a = normalizeUiSchemaEnumToOptions(i);
|
|
66440
66440
|
return a.length ? (e.setProps({ options: a }), !0) : !1;
|
|
66441
66441
|
}
|
|
66442
|
-
const
|
|
66442
|
+
const stripTimeFromFormat$1 = (e) => e && e.replace(/\s*HH?:mm(?::ss)?(?:\.SSS)?/g, "").trim(), parseDateValue$1 = (e, t) => {
|
|
66443
|
+
if (!e)
|
|
66444
|
+
return null;
|
|
66445
|
+
if (dayjs$1.isDayjs(e))
|
|
66446
|
+
return e;
|
|
66447
|
+
if (typeof e == "string" && e.endsWith("Z")) {
|
|
66448
|
+
const r = dayjs$1(e).format(t), i = dayjs$1(r, t);
|
|
66449
|
+
return i.isValid() ? i : dayjs$1(e);
|
|
66450
|
+
}
|
|
66451
|
+
const o = dayjs$1(e, t);
|
|
66452
|
+
if (o.isValid())
|
|
66453
|
+
return o;
|
|
66454
|
+
const n = dayjs$1(e);
|
|
66455
|
+
return n.isValid() ? n : null;
|
|
66456
|
+
}, FilterRangePicker = (e) => {
|
|
66443
66457
|
const { value: t, picker: o = "date", format: n, showTime: r, timeFormat: i } = e, a = useFlowEngine(), l = a.translate.bind(a), c = getDateRanges(), u = [
|
|
66444
66458
|
{ label: l("Today"), value: c.today },
|
|
66445
66459
|
{ label: l("Last week"), value: c.lastWeek },
|
|
@@ -66460,25 +66474,45 @@ const FilterRangePicker = (e) => {
|
|
|
66460
66474
|
{ label: l("Next 30 days"), value: c.next30Days },
|
|
66461
66475
|
{ label: l("Last 90 days"), value: c.last90Days },
|
|
66462
66476
|
{ label: l("Next 90 days"), value: c.next90Days }
|
|
66463
|
-
], d = t ? inferPickerType(t == null ? void 0 : t[0], o) : o, p = n
|
|
66477
|
+
], d = t ? inferPickerType(t == null ? void 0 : t[0], o) : o, p = d === o && n ? n : getPickerFormat(d), m = d === "date" ? stripTimeFromFormat$1(p) : p, h = getDateTimeFormat(d, m, r, i), g = k(f({
|
|
66464
66478
|
utc: !0,
|
|
66465
66479
|
presets: u
|
|
66466
66480
|
}, e), {
|
|
66467
|
-
format:
|
|
66481
|
+
format: h,
|
|
66468
66482
|
picker: d,
|
|
66469
66483
|
showTime: r ? { defaultValue: [dayjs$1("00:00:00", "HH:mm:ss"), dayjs$1("23:59:59", "HH:mm:ss")] } : !1
|
|
66470
|
-
}),
|
|
66471
|
-
return /* @__PURE__ */ jsx(DatePicker$1.RangePicker, k(f({},
|
|
66484
|
+
}), x = useMemo(() => _.castArray(e.value).map((b) => parseDateValue$1(b, h)), [e.value, h]);
|
|
66485
|
+
return /* @__PURE__ */ jsx(DatePicker$1.RangePicker, k(f({}, g), { style: f({ flex: 1 }, g == null ? void 0 : g.style), value: x }));
|
|
66486
|
+
}, stripTimeFromFormat = (e) => e && e.replace(/\s*HH?:mm(?::ss)?(?:\.SSS)?/g, "").trim(), parseDateValue = (e, t) => {
|
|
66487
|
+
if (!e)
|
|
66488
|
+
return null;
|
|
66489
|
+
if (dayjs$1.isDayjs(e))
|
|
66490
|
+
return e;
|
|
66491
|
+
if (typeof e == "string" && e.endsWith("Z")) {
|
|
66492
|
+
const r = dayjs$1(e).format(t), i = dayjs$1(r, t);
|
|
66493
|
+
return i.isValid() ? i : dayjs$1(e);
|
|
66494
|
+
}
|
|
66495
|
+
const o = dayjs$1(e, t);
|
|
66496
|
+
if (o.isValid())
|
|
66497
|
+
return o;
|
|
66498
|
+
const n = dayjs$1(e);
|
|
66499
|
+
return n.isValid() ? n : null;
|
|
66472
66500
|
}, FilterDatePicker = (e) => {
|
|
66473
|
-
const { picker: t = "date", format: o, showTime: n, timeFormat: r, onChange: i } = e, a = useFlowContext(), l = Array.isArray(e.value) ? e.value[0] : e.value, c = l ? inferPickerType(l, t) : t, [u, d] = useState(c), p =
|
|
66501
|
+
const { picker: t = "date", format: o, showTime: n, timeFormat: r, onChange: i } = e, a = useFlowContext(), l = Array.isArray(e.value) ? e.value[0] : e.value, c = l ? inferPickerType(l, t) : t, [u, d] = useState(c), p = a.model.translate.bind(a.model), m = (b) => {
|
|
66502
|
+
const y = b === t && o ? o : getPickerFormat(b), S = b === "date" ? stripTimeFromFormat(y) : y;
|
|
66503
|
+
return getDateTimeFormat(b, S, n, r);
|
|
66504
|
+
}, h = useMemo(
|
|
66505
|
+
() => m(u),
|
|
66506
|
+
[o, t, n, u, r]
|
|
66507
|
+
), g = useMemo(() => parseDateValue(l, h), [l, h]), x = k(f({
|
|
66474
66508
|
utc: !0,
|
|
66475
66509
|
inputReadOnly: a.isMobileLayout
|
|
66476
66510
|
}, e), {
|
|
66477
66511
|
underFilter: !0,
|
|
66478
66512
|
showTime: n ? { defaultValue: dayjs$1("00:00:00", "HH:mm:ss") } : !1,
|
|
66479
|
-
format:
|
|
66513
|
+
format: h,
|
|
66480
66514
|
picker: u
|
|
66481
|
-
})
|
|
66515
|
+
});
|
|
66482
66516
|
return /* @__PURE__ */ jsxs(Space$1.Compact, { style: { width: "100%" }, children: [
|
|
66483
66517
|
/* @__PURE__ */ jsx(
|
|
66484
66518
|
Select$1,
|
|
@@ -66488,33 +66522,32 @@ const FilterRangePicker = (e) => {
|
|
|
66488
66522
|
value: u,
|
|
66489
66523
|
options: [
|
|
66490
66524
|
{
|
|
66491
|
-
label:
|
|
66525
|
+
label: p("Date"),
|
|
66492
66526
|
value: "date"
|
|
66493
66527
|
},
|
|
66494
66528
|
{
|
|
66495
|
-
label:
|
|
66529
|
+
label: p("Month"),
|
|
66496
66530
|
value: "month"
|
|
66497
66531
|
},
|
|
66498
66532
|
{
|
|
66499
|
-
label:
|
|
66533
|
+
label: p("Quarter"),
|
|
66500
66534
|
value: "quarter"
|
|
66501
66535
|
},
|
|
66502
66536
|
{
|
|
66503
|
-
label:
|
|
66537
|
+
label: p("Year"),
|
|
66504
66538
|
value: "year"
|
|
66505
66539
|
}
|
|
66506
66540
|
],
|
|
66507
|
-
onChange: (
|
|
66508
|
-
|
|
66509
|
-
|
|
66510
|
-
if (h.picker = y, h.format = v, x(h), !l || !i)
|
|
66541
|
+
onChange: (b) => {
|
|
66542
|
+
const y = m(b), S = h;
|
|
66543
|
+
if (d(b), !l || !i)
|
|
66511
66544
|
return;
|
|
66512
|
-
const
|
|
66513
|
-
|
|
66545
|
+
const v = parseDateValue(l, S);
|
|
66546
|
+
!v || !v.isValid() || i(v, v.format(y));
|
|
66514
66547
|
}
|
|
66515
66548
|
}
|
|
66516
66549
|
),
|
|
66517
|
-
/* @__PURE__ */ jsx(DatePicker$1, k(f({},
|
|
66550
|
+
/* @__PURE__ */ jsx(DatePicker$1, k(f({}, x), { style: f({ flex: 1 }, x == null ? void 0 : x.style), value: g }))
|
|
66518
66551
|
] });
|
|
66519
66552
|
}, getOptions = (e) => [
|
|
66520
66553
|
{
|
package/lib/index.js
CHANGED
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
width: 100%;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
`,items:a},n))})},SchemaInitializerSubMenu=e=>{var t;const o=e,{children:r,items:i,title:n,name:l,onOpenChange:a,icon:c}=o,u=Y(o,["children","items","title","name","onOpenChange","icon"]),d=useCompile(),m=useSchemaInitializerItem(),p=(0,import_react2.useMemo)(()=>l||(m==null?void 0:m.name)||(0,import_shared.uid)(),[l,m]),h=(t=i||r)==null?void 0:t.filter(_=>_.useVisible?_.useVisible():!0),g=useSchemaInitializerMenuItems(h,l),x=(0,import_react2.useMemo)(()=>[k(f({},u),{key:p,label:d(n),icon:typeof c=="string"?(0,import_jsx_runtime.jsx)(import_icons.default,{type:c}):c,children:g})],[g,d,c,p,u,n]);return(0,import_jsx_runtime.jsx)(SchemaInitializerMenu,{onOpenChange:a,items:x})},SchemaInitializerSubMenuInternal=()=>{const e=useSchemaInitializerItem();return(0,import_jsx_runtime.jsx)(SchemaInitializerSubMenu,f({},e))},useAriaAttributeOfMenuItem=()=>{const{isInMenu:e}=useSchemaInitializerSubMenuContext();return{attribute:(0,import_react2.useMemo)(()=>e?{}:{role:"menuitem"},[e])}},{Paragraph:Paragraph$1,Text:Text$2}=import_antd.Typography,ErrorFallbackModal=e=>{const[t,o]=import_react2.default.useState(!1),r=(0,import_jsx_runtime.jsx)(Paragraph$1,{style:{display:"flex",marginBottom:0},copyable:{text:e.error.message},children:(0,import_jsx_runtime.jsxs)(Text$2,{type:"danger",style:{whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",display:"inline-block",maxWidth:"200px"},children:["Error: ",e.error.message]})});return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)("div",{onMouseOver:()=>o(!0),children:e.children||r}),(0,import_jsx_runtime.jsx)(import_antd.Modal,{zIndex:1e4,open:t,footer:null,onCancel:()=>o(!1),width:"60%",children:(0,import_jsx_runtime.jsx)(ErrorFallback,f({},e))})]})},{Paragraph,Text:Text$1,Link}=import_antd.Typography,useDownloadLogs=(e,t={})=>{const o=useLocationNoUpdate(),[r,i]=import_react2.default.useState(!1),n=useAPIClient();return{loading:r,download:()=>O(void 0,null,function*(){i(!0);try{const l=yield n.request({url:"logger:collect",method:"post",responseType:"blob",data:f({error:{message:e.message,stack:e.stack},location:o},t)}),a=window.URL.createObjectURL(new Blob([l.data],{type:"application/gzip"})),c=document.createElement("a");c.setAttribute("href",a),c.setAttribute("download","logs.tar.gz"),c.click(),c.remove()}catch(l){console.log(l)}i(!1)})}},ErrorFallback=({error:e})=>{const t=(0,import_react.useFieldSchema)(),{t:o}=(0,import_react_i18next.useTranslation)(),{loading:r,download:i}=useDownloadLogs(e,{schema:t}),n=(0,import_jsx_runtime.jsxs)(import_react_i18next.Trans,{children:["This is likely a NocoBase internals bug. Please open an issue at ",(0,import_jsx_runtime.jsx)(Link,{href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:"here"})]});return(0,import_jsx_runtime.jsx)("div",{style:{backgroundColor:"white"},children:(0,import_jsx_runtime.jsx)(import_antd.Result,{style:{maxWidth:"60vw",margin:"auto"},status:"error",title:o("Render Failed"),subTitle:n,extra:[(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:o("Feedback")},"feedback"),(0,import_jsx_runtime.jsx)(import_antd.Button,{loading:r,onClick:i,children:o("Download logs")},"log")],children:(0,import_jsx_runtime.jsx)(Paragraph,{copyable:{text:e.stack},children:(0,import_jsx_runtime.jsx)(Text$1,{type:"danger",style:{whiteSpace:"pre-line",textAlign:"center"},children:e.stack})})})})};ErrorFallback.Modal=ErrorFallbackModal;const AppNotFound=()=>{const e=(0,import_react_router_dom.useNavigate)(),{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(import_antd.Result,{status:"404",title:"404",subTitle:t("Sorry, the page you visited does not exist."),extra:(0,import_jsx_runtime.jsx)(import_antd.Button,{onClick:()=>e("/",{replace:!0}),type:"primary",children:"Back Home"})})};class Plugin{constructor(t,o){this.options=t,this.app=o,this.options=t,this.app=o}get pluginManager(){return this.app.pluginManager}get context(){return this.app.context}get flowEngine(){return this.app.flowEngine}get engine(){return this.app.flowEngine}get pm(){return this.app.pm}get router(){return this.app.router}get pluginSettingsManager(){return this.app.pluginSettingsManager}get pluginSettingsRouter(){return this.app.pluginSettingsManager}get schemaInitializerManager(){return this.app.schemaInitializerManager}get schemaSettingsManager(){return this.app.schemaSettingsManager}get dataSourceManager(){return this.app.dataSourceManager}afterAdd(){return O(this,null,function*(){})}beforeLoad(){return O(this,null,function*(){})}load(){return O(this,null,function*(){})}t(t,o={}){var r;return this.app.i18n.t(t,f({ns:(r=this.options)==null?void 0:r.packageName},o))}}const titleWrapperStyle={display:"flex",alignItems:"center",gap:4},withTooltipComponent=e=>t=>{const{tooltip:o}=t;return o?(0,import_jsx_runtime.jsxs)("div",{style:titleWrapperStyle,children:[(0,import_jsx_runtime.jsx)(e,f({},t)),(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:o,children:(0,import_jsx_runtime.jsx)(import_icons.QuestionCircleOutlined,{style:{zIndex:1}})})]}):(0,import_jsx_runtime.jsx)(e,f({},t))},{evaluate}=import_client4.evaluators.get("formula.js"),useEvaluatedExpression=e=>{const t=useVariables$1(),o=useLocalVariables$1(),[r,i]=(0,import_react2.useState)();return(0,import_react2.useEffect)(()=>{O(void 0,null,function*(){if(e==null||e===""){i(void 0);return}const{exp:n,scope:l}=yield replaceVariables(e,{variables:t,localVariables:o});try{const a=evaluate(n,f({now:()=>new Date().toString()},l));i(a)}catch(a){console.error(a)}})},[t.parseVariable,e,o]),r};class SchemaInitializer{constructor(t){I(this,"options"),I(this,"name"),this.options=Object.assign({items:[]},t),this.name=t.name}get items(){return this.options.items}add(t,o){const r=t.split("."),i=r[r.length-1],n=k(f({},o),{name:i}),l=(u,d)=>{const m=this.items.findIndex(p=>p.name===u);m===-1?this.items.push(d):this.items[m]=d};if(r.length===1){l(i,n);return}const a=r.slice(0,-1).join("."),c=this.get(a);if(c){c.children||(c.children=[]);const u=t.replace(`${c.name}.`,""),d=c.children.findIndex(m=>m.name===u);d===-1?c.children.push(n):c.children[d]=n}else l(i,n)}get(t){var o;if(!t)return;const r=t.split(".");let i={children:this.items};for(let n=0;n<r.length;n++){const l=r[n],a=(o=i.children)==null?void 0:o.find(c=>c.name===l);if(a&&(i=a),n===r.length-1)return a}}remove(t){const o=t.split(".");if(o.length===1){const i=this.items.findIndex(n=>n.name===o[0]);i!==-1&&this.items.splice(i,1);return}const r=this.get(o.slice(0,-1).join("."));if(r&&r.children){const i=o[o.length-1],n=r.children.findIndex(l=>l.name===i);n!==-1&&r.children.splice(n,1)}}}var NocoBaseDesktopRouteType=(e=>(e.group="group",e.page="page",e.flowRoute="flowRoute",e.link="link",e.tabs="tabs",e.flowPage="flowPage",e))(NocoBaseDesktopRouteType||{});const useStyles$h=genStyleHook("nb-menu-item",e=>{const{componentCls:t}=e;return{[t]:{paddingLeft:`${e.padding}px !important`,paddingRight:`${e.padding}px !important`}}}),useInsertFlowPageSchema=()=>{const e=useAPIClient();return(0,import_react2.useCallback)(t=>O(void 0,null,function*(){yield e.request({method:"POST",url:"/uiSchemas:insert",data:t})}),[e])},FlowPageMenuItem=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),{theme:o}=useGlobalTheme(),{componentCls:r,hashId:i}=useStyles$h(),n=useParentRoute(),{createRoute:l}=useNocoBaseRoutes(),a=useInsertFlowPageSchema(),c=(0,import_react2.useCallback)(()=>O(void 0,null,function*(){const u=yield FormDialog(e("Add page"),()=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{scope:t.scope,components:f({},t.components),children:(0,import_jsx_runtime.jsx)(import_antd_v5.FormLayout,{layout:"vertical",children:(0,import_jsx_runtime.jsx)(zIndexContext.Provider,{value:ICON_POPUP_Z_INDEX,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:{properties:{title:{title:e("Menu item title"),required:!0,"x-component":"Input","x-decorator":"FormItem"},icon:{title:e("Icon"),"x-component":"IconPicker","x-decorator":"FormItem"}}}})})})}),o).open({initialValues:{}}),d=(0,import_shared.uid)(),m=(0,import_shared.uid)(),p=(0,import_shared.uid)(),h=(0,import_shared.uid)();yield l({type:NocoBaseDesktopRouteType.flowPage,title:u.title,icon:u.icon,parentId:n==null?void 0:n.id,schemaUid:m,menuSchemaUid:d,enableTabs:!1,children:[{type:NocoBaseDesktopRouteType.tabs,schemaUid:p,tabSchemaName:h,hidden:!0}]}),a(getFlowPageMenuSchema({pageSchemaUid:m}))}),[l,a,t==null?void 0:t.components,t==null?void 0:t.scope,n==null?void 0:n.id,e,o]);return(0,import_jsx_runtime.jsx)(SchemaInitializerItem,{title:e("Modern page (v2)"),onClick:c,className:`${r} ${i}`})};function getFlowPageMenuSchema({pageSchemaUid:e}){return{type:"void","x-component":"FlowRoute","x-uid":e}}const GroupItem$1=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),{theme:o}=useGlobalTheme(),{componentCls:r,hashId:i}=useStyles$h(),n=useParentRoute(),{createRoute:l}=useNocoBaseRoutes(),a=(0,import_react2.useCallback)(()=>O(void 0,null,function*(){const c=yield FormDialog(e("Add group"),()=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{scope:t.scope,components:f({},t.components),children:(0,import_jsx_runtime.jsx)(import_antd_v5.FormLayout,{layout:"vertical",children:(0,import_jsx_runtime.jsx)(zIndexContext.Provider,{value:ICON_POPUP_Z_INDEX,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:{properties:{title:{title:e("Menu item title"),"x-component":"Input","x-decorator":"FormItem",required:!0},icon:{title:e("Icon"),"x-component":"IconPicker","x-decorator":"FormItem"}}}})})})}),o).open({initialValues:{}}),{title:u,icon:d}=c,m=(0,import_shared.uid)();yield l({type:NocoBaseDesktopRouteType.group,title:u,icon:d,parentId:n==null?void 0:n.id,schemaUid:m})}),[t.components,t.scope,e,o]);return(0,import_jsx_runtime.jsx)(SchemaInitializerItem,{title:e("Group"),onClick:a,className:`${r} ${i}`})},useAttach=e=>{const t=(0,import_react2.useRef)(null);return(0,import_react2.useEffect)(()=>(t.current&&e!==t.current&&t.current.onUnmount(),t.current=e,e.onMount(),()=>{e.onUnmount()}),[e]),e},compileCache={},hasVariable=e=>/{{.*?}}/g.test(e),useCompile=({noCache:e}={noCache:!1})=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext);return(r,i)=>{let n=!1,l;if(typeof r=="string"&&r.startsWith("{{")&&(n=!0,l=r),r&&typeof r=="object"&&!(0,import_react2.isValidElement)(r)){try{l=JSON.stringify(r)}catch(a){return console.warn("Failed to stringify:",a),r}if(compileCache[l])return compileCache[l];n=hasVariable(l)}if(Array.isArray(r)){try{l=JSON.stringify(r)}catch(a){return console.warn("Failed to stringify:",a),r}if(compileCache[l])return compileCache[l];n=hasVariable(l)}if(n){const a=f(f(f({},t==null?void 0:t.scope),o),i);if(!l)return import_react.Schema.compile(r,a);try{return e?import_react.Schema.compile(r,a):(compileCache[l]=compileCache[l]||import_react.Schema.compile(r,a),compileCache[l])}catch(c){return console.log("useCompile error",r,c),import_react.Schema.compile(r,a)}}return r}},useComponent=(e,t)=>{const{components:o}=(0,import_react2.useContext)(import_react.SchemaOptionsContext);return e?typeof e!="string"?e:(0,import_lodash.get)(o,e)||t:t},LAZY_COMPONENT_KEY=Symbol("LAZY_COMPONENT_KEY");function lazy(e,...t){if(t.length===0){const o=(0,import_react2.lazy)(()=>e().then(i=>{const n=i.default;return r[LAZY_COMPONENT_KEY]=n,{default:n}})),r=i=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(o,f({},i))});return r}return t.reduce((o,r)=>{const i=(0,import_react2.lazy)(()=>e().then(n=>{const l=(0,import_lodash.get)(n,r);return o[r][LAZY_COMPONENT_KEY]=l,{default:l}}));return o[r]=n=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(i,f({},n))}),o},{})}function useLazy(e,t){const o=typeof t=="function"?t:i=>i[t],r=(0,import_react_imported_component.loadableResource)(e);if(!r.payload)throw new Promise((i,n)=>{r.loadIfNeeded(),r.resolution.then(i).catch(n)});return o(r.payload)}function addAppVersion(e,t){if(e)return e["x-app-version"]||(e["x-app-version"]=t),Object.keys(e.properties||{}).forEach(o=>{var r;addAppVersion((r=e.properties)==null?void 0:r[o],t)}),e}const name="@nocobase/client",version="2.0.0-alpha.69",license="AGPL-3.0",main="lib/index.js",module$1="es/index.mjs",types="es/index.d.ts",dependencies={"@ahooksjs/use-url-state":"3.5.1","@ant-design/cssinjs":"^1.11.1","@ant-design/icons":"^5.6.1","@ant-design/pro-layout":"^7.22.1","@antv/g2plot":"^2.4.18","@budibase/handlebars-helpers":"0.14.0","@codemirror/lang-html":"^6.4.10","@codemirror/theme-one-dark":"^6.1.3","@ctrl/tinycolor":"^3.6.0","@dnd-kit/core":"^6.0.0","@dnd-kit/sortable":"^7.0.0","@emotion/css":"^11.7.1","@formily/antd-v5":"1.2.3","@formily/core":"^2.2.27","@formily/grid":"^2.2.27","@formily/json-schema":"^2.2.27","@formily/path":"^2.2.27","@formily/react":"^2.2.27","@formily/reactive":"^2.2.27","@formily/reactive-react":"^2.2.27","@formily/shared":"^2.2.27","@formily/validator":"^2.2.27","@nocobase/evaluators":"2.0.0-alpha.69","@nocobase/flow-engine":"2.0.0-alpha.69","@nocobase/sdk":"2.0.0-alpha.69","@nocobase/utils":"2.0.0-alpha.69","@tanstack/react-table":"^8.21.3","@types/tabulator-tables":"^6.2.6","acorn-jsx":"^5.3.2",ahooks:"^3.7.2",antd:"5.24.2","antd-mobile":"^5.41.1","antd-mobile-icons":"^0.3.0","antd-style":"3.7.1",axios:"^1.7.0","bignumber.js":"^9.1.2",classnames:"^2.3.1",codemirror:"^6.0.2",cronstrue:"^2.11.0","file-saver":"^2.0.5",filesize:"9.0.11",flat:"^5.0.2","html5-qrcode":"^2.3.8",i18next:"^22.4.9","i18next-http-backend":"^2.1.1",ignore:"^5.2.0",json5:"^2.2.3",liquidjs:"^10.0.0",lodash:"4.17.21","lru-cache":"6.0.0","markdown-it":"14.1.0","markdown-it-highlightjs":"3.3.1",mathjs:"^15.1.0",mermaid:"9.4.3",mime:"^4.0.4","mime-match":"^1.0.2","quill-image-resize-module-react":"^3.0.0","react-beautiful-dnd":"^13.1.0","react-device-detect":"2.2.3","react-drag-listview":"^0.1.9","react-error-boundary":"^4.0.10","react-helmet":"^6.1.0","react-hotkeys-hook":"^3.4.7","react-i18next":"^11.15.1","react-iframe":"~1.8.5","react-image-lightbox":"^5.1.4","react-intersection-observer":"9.14.0","react-js-cron":"^3.1.0","react-quill":"^2.0.0","react-router-dom":"^6.30.1","react-to-print":"^2.14.7","sanitize-html":"2.13.0","tabulator-tables":"^6.3.1","use-deep-compare-effect":"^1.8.1",vditor:"^3.10.3"},peerDependencies={react:">=18.0.0","react-dom":">=18.0.0","react-is":">=18.0.0"},devDependencies={"@testing-library/react":"^14.0.0","@types/markdown-it":"14.1.1","@types/markdown-it-highlightjs":"3.3.1","@types/react-big-calendar":"^1.6.4","axios-mock-adapter":"^1.20.0",dumi:"2.2.14","dumi-theme-nocobase":"^0.2.32"},clientPkg={name,version,license,main,module:module$1,types,dependencies,peerDependencies,devDependencies};function createDesignable(e){return new Designable(e)}const generateUid=e=>{e&&(e["x-uid"]||(e["x-uid"]=(0,import_shared.uid)()),Object.keys(e.properties||{}).forEach(t=>{generateUid(e.properties[t])}))},defaultWrap=e=>e,matchSchema=(e,t)=>{if(!(!e||!t)){for(const o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&t[o]!==(e==null?void 0:e[o]))return!1;return!0}},splitWrapSchema=(e,t)=>{if(e["x-uid"]&&e["x-uid"]===t["x-uid"])return[null,e.toJSON()];const o=e.toJSON(),r=k(f({},o),{properties:{}});let i=null;const n=(l,a)=>{Object.keys(l||{}).forEach(c=>{const u=l[c];if(u["x-uid"]===t["x-uid"]){i=l[c];return}else a.properties[c]=k(f({},u),{properties:{}}),n(u==null?void 0:u.properties,a.properties[c])})};return n(o.properties,r),[r,i]},translate=e=>e;class Designable{constructor(t){I(this,"current"),I(this,"options"),I(this,"appVersion"),I(this,"events",{}),this.options=t,this.current=t.current,this.appVersion=t.appVersion}get model(){return this.options.model}get query(){return this.options.query}loadAPIClientEvents(){const{api:t,t:o=translate}=this.options;if(!t)return;const r=i=>{if(!i)return[];const n=Object.values(i.properties).length,l=[];return i.mapProperties(a=>{a["x-component-props"]=a["x-component-props"]||{},a["x-component-props"].width=100/n,a["x-uid"]&&l.push({"x-uid":a["x-uid"],"x-component-props":a["x-component-props"]})}),i["x-uid"]&&l.length?l:[]};this.on("insertAdjacent",i=>O(this,[i],function*({onSuccess:n,current:l,position:a,schema:c,wrap:u,wrapped:d,removed:m}){var p;let h=[];if((d==null?void 0:d["x-component"])==="Grid.Col"&&(h=h.concat(r(d.parent))),(m==null?void 0:m["x-component"])==="Grid.Col"&&(h=h.concat(r(m.parent))),this.refresh(),!l["x-uid"])return;const g=yield t.request({url:`/uiSchemas:insertAdjacent/${l["x-uid"]}?position=${a}`,method:"post",data:{schema:addAppVersion(c,this.appVersion),wrap:u}});h.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:h})),m!=null&&m["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${m["x-uid"]}`,method:"post"})),n==null||n((p=g==null?void 0:g.data)==null?void 0:p.data),import_antd.message.success(o("Saved successfully"),.2)})),this.on("patch",i=>O(this,[i],function*({schema:n}){this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:patch",method:"post",data:f({},n)}),import_antd.message.success(o("Saved successfully"),.2))})),this.on("initializeActionContext",i=>O(this,[i],function*({schema:n}){n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:initializeActionContext",method:"post",data:f({},n)}))})),this.on("batchPatch",i=>O(this,[i],function*({schemas:n}){this.refresh(),yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:n}),import_antd.message.success(o("Saved successfully"),.2)})),this.on("remove",i=>O(this,[i],function*({removed:n}){let l=[];(n==null?void 0:n["x-component"])==="Grid.Col"&&(l=r(n.parent)),this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${n["x-uid"]}`,method:"post"}),l.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:l})),import_antd.message.success(o("Saved successfully"),.2))}))}prepareProperty(t){t.type||(t.type="void"),t.name||(t.name=(0,import_shared.uid)()),this.current["x-uid"]&&generateUid(t)}on(t,o){this.events[t]||(this.events[t]=[]),this.events[t].push(o)}emit(t,...o){return O(this,null,function*(){if(!this.events[t])return;const[r,...i]=o;return Promise.all(this.events[t].map(n=>n.bind(this)(f({current:this.current},r),...i)))})}parentsIn(t){if(!t||!import_react.Schema.isSchemaInstance(t))return!1;let o=this.current;for(;o!=null&&o.parent;){if(o.parent===t)return!0;o=o.parent}return!1}refresh(t){const{refresh:o}=this.options;return o==null?void 0:o(t)}deepMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly"},r={"x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(i=>{o[i]?(this.current[i]=t[i],this.updateModel(o[i],t[i])):r[i]?Object.keys(t[i]).forEach(n=>{(0,import_set.default)(this.current,[i,n],t[i][n]),this.updateModel([r[i],n],t[i][n])}):this.current[i]=t[i]}),this.emit("patch",{schema:t})}getSchemaAttribute(t,o){return(0,import_get.default)(this.current,t,o)}shallowMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly","x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(r=>{this.current[r]=t[r],o[r]&&this.updateModel(o[r],t[r])}),this.emit("patch",{schema:t})}updateModel(t,o){const r=i=>{(0,import_set.default)(i,t,o)};this.model&&r(this.model),this.query&&this.query.take(r)}insertAdjacent(t,o,r={}){switch(t){case"beforeBegin":return this.insertBeforeBegin(o,r);case"afterBegin":return this.insertAfterBegin(o,r);case"beforeEnd":return this.insertBeforeEnd(o,r);case"afterEnd":return this.insertAfterEnd(o,r)}}recursiveRemoveIfNoChildren(t,o){if(!t)return;let r=t,i;const n=o==null?void 0:o.breakRemoveOn;for(;r;){if(typeof n=="function"){if(n(r))break}else if(matchSchema(r,n))break;if(Object.keys(r.properties||{}).length>0)break;r.parent&&(i=r.parent.removeProperty(r.name)),r=r.parent}return i}remove(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let l=n.parent.removeProperty(n.name);if(i){const a=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});a&&(l=a)}return this.emit("remove",{removed:l})}removeWithoutEmit(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let l=n.parent.removeProperty(n.name);if(i){const a=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});a&&(l=a)}return l}insertBeforeBeginOrAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current)||!import_react.Schema.isSchemaInstance(t)||this.current.parent!==t.parent)return;let r=0,i=0;return this.current.parent.mapProperties((n,l,a)=>{this.current.name===l&&(i=a),t.name===l&&(r=a)}),r>i?this.insertBeforeBegin(t,o):this.insertAfterEnd(t,o)}insertBeforeBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const a={};let c=!1,u=0,d=0;this.current.parent.mapProperties((x,_)=>{_===this.current.name&&(d=u,c=!0,++u),x["x-index"]=u,++u,c&&(a[_]=x,this.current.parent.removeProperty(_))}),this.prepareProperty(t);const m=i(t),p=this.current.parent.addProperty(m.name||(0,import_shared.uid)(),m);p["x-index"]=d,p.parent=this.current.parent,this.current.parent.setProperties(a);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",f({position:"beforeBegin",schema:g,wrapped:m,wrap:h},r))}insertAfterBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const a={};let c=1;this.current.mapProperties((h,g)=>{h["x-index"]=c,++c,a[g]=h}),this.current.properties={},this.prepareProperty(t);const u=i(t),d=this.current.addProperty(u.name||(0,import_shared.uid)(),u);d["x-index"]=0,d.parent=this.current,this.current.setProperties(a);const[m,p]=splitWrapSchema(d,t);this.emit("insertAdjacent",f({position:"afterBegin",schema:p,wrap:m,wrapped:u},r))}insertBeforeEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;delete t["x-index"];const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const a=i(t),c=this.current.addProperty(a.name||(0,import_shared.uid)(),a);c.parent=this.current;const[u,d]=splitWrapSchema(c,t);return this.emit("insertAdjacent",f({position:"beforeEnd",schema:d,wrap:u,wrapped:a},r))}insertAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o==null?void 0:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;let a=0,c=0,u=!1;const d={};if(this.current.parent.mapProperties((x,_)=>{x["x-index"]=a,_===this.current.name&&(++a,c=a,u=!0),++a,u&&_!==this.current.name&&(d[_]=x,this.current.parent.removeProperty(_))}),import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n})),t.parent=null}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const m=i(t),p=this.current.parent.addProperty(m.name||(0,import_shared.uid)(),m);p.parent=this.current.parent,p["x-index"]=c,this.current.parent.setProperties(d);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",f({position:"afterEnd",schema:g,wrap:h,wrapped:m},r))}}function useFindComponent(){const e=(0,import_react2.useContext)(import_react.SchemaOptionsContext),t=(0,import_react2.useMemo)(()=>(e==null?void 0:e.components)||{},[e]);return o=>{if(!o)return null;if(typeof o!="string")return o;const r=(0,import_get.default)(t,o);return r||console.error(`[nocobase]: Component "${o}" not found`),r}}function useDesignable(){const{designable:e,setDesignable:t,refresh:o,reset:r}=(0,import_react2.useContext)(SchemaComponentContext),i=(0,import_react2.useContext)(import_react.SchemaOptionsContext),n=(0,import_react2.useMemo)(()=>(i==null?void 0:i.components)||{},[i]),l=(0,import_react2.useMemo)(()=>()=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{}),[]),a=(0,import_ahooks.useUpdate)(),c=useRefreshFieldSchema(),u=useRefreshComponent(),d=(0,import_react2.useCallback)(v=>{o==null||o(),a(),c==null||c(v),u==null||u()},[o,a,c,u]),m=(0,import_react.useField)(),p=(0,import_react.useFieldSchema)(),h=useAPIClient(),{t:g}=(0,import_react_i18next.useTranslation)(),x=(0,import_react2.useMemo)(()=>createDesignable({t:g,api:h,refresh:d,current:p,model:m,appVersion:clientPkg.version}),[g,h,d,p,m]);(0,import_react2.useEffect)(()=>{x.loadAPIClientEvents()},[x]);const{isMobileLayout:_}=useMobileLayout();return{dn:x,designable:_?!1:e,reset:r,refresh:d,setDesignable:t,DesignableBar:l,findComponent:(0,import_react2.useCallback)(v=>{var y;if(!v)return null;if(typeof v!="string")return v;const S=(0,import_get.default)(n,v);return(y=S==null?void 0:S[LAZY_COMPONENT_KEY])!=null?y:S},[import_get.default]),on:x.on.bind(x),patch:(0,import_react2.useCallback)((v,y)=>{const S=b=>{Object.keys(b).forEach(C=>{const F=b[C];C==="title"&&(m.title=F,p.title=F),C==="x-decorator-props"&&(m.decoratorProps||(m.decoratorProps={}),p["x-decorator-props"]||(p["x-decorator-props"]={}),Object.keys(F).forEach(j=>{m.decoratorProps[j]=F[j],p["x-decorator-props"][j]=F[j]})),C==="x-component-props"&&(m.componentProps||(m.componentProps={}),p["x-component-props"]||(p["x-component-props"]={}),Object.keys(F).forEach(j=>{m.componentProps[j]=F[j],p["x-component-props"][j]=F[j]}))})};if(typeof v=="string"){const b={};return(0,import_set.default)(b,v,y),S(b)}S(v),d()},[x]),shallowMerge:(0,import_react2.useCallback)(v=>{x.shallowMerge(v)},[x]),deepMerge:(0,import_react2.useCallback)(v=>{x.deepMerge(v)},[x]),remove:(0,import_react2.useCallback)((v,y)=>{x.remove(v,y)},[x]),insertAdjacent:(0,import_react2.useCallback)((v,y,S)=>{x.insertAdjacent(v,y,S)},[x]),insertBeforeBegin:(0,import_react2.useCallback)(v=>{x.insertBeforeBegin(v)},[x]),insertAfterBegin:(0,import_react2.useCallback)(v=>{x.insertAfterBegin(v)},[x]),insertBeforeEnd:(0,import_react2.useCallback)(v=>{x.insertBeforeEnd(v)},[x]),insertAfterEnd:(0,import_react2.useCallback)(v=>{x.insertAfterEnd(v)},[x])}}const DefaultSchemaToolbar=()=>null;DefaultSchemaToolbar.isNullComponent=!0;const useDesigner=()=>{const{designable:e}=useDesignable(),t=(0,import_react.useFieldSchema)(),o=(0,import_react2.useMemo)(()=>t["x-designer"]||t["x-toolbar"]?t["x-designer"]||t["x-toolbar"]:t["x-settings"]?SchemaToolbar:DefaultSchemaToolbar,[t]),r=useComponent(o);return e&&r||DefaultSchemaToolbar},useFieldProps$1=e=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext),r=(0,import_react2.useRef)();return r.current=o,e.toFieldProps(k(f({},t),{get scope(){return f(f({},t.scope),r.current)}}))};function useSchemaComponentContext(){return(0,import_react2.useContext)(SchemaComponentContext)}const useFieldComponentOptions=()=>{var e;const{getCollectionJoinField:t,getCollection:o}=useCollectionManager_deprecated(),r=(0,import_react.useFieldSchema)(),{getField:i}=useCollection_deprecated(),n=i(r.name)||t(r["x-collection-field"]),{t:l}=(0,import_react_i18next.useTranslation)(),{label:a}=((e=r["x-component-props"])==null?void 0:e.fieldNames)||{};return(0,import_react2.useMemo)(()=>{if(!n||!(n!=null&&n.interface)||!["o2o","oho","obo","o2m","linkTo","m2o","m2m"].includes(n.interface))return;const c=o(n.target);if((c==null?void 0:c.template)==="file")return[{label:l("Record picker"),value:"CollectionField"},{label:l("Select"),value:"AssociationSelect"}];switch(n.interface){case"o2m":return[{label:l("Record picker"),value:"CollectionField"},{label:l("Subtable"),value:"TableField"},{label:l("Select"),value:"AssociationSelect"}];case"m2o":case"m2m":case"linkTo":return[{label:l("Record picker"),value:"CollectionField"},{label:l("Select"),value:"AssociationSelect"}];default:return[{label:l("Record picker"),value:"CollectionField"},{label:l("Subform"),value:"FormField"},{label:l("Select"),value:"AssociationSelect"}]}},[l,n==null?void 0:n.interface,a])},useFieldTitle=()=>{var e;const t=(0,import_react.useField)(),o=(0,import_react.useFieldSchema)(),r=useCollection(),i=useCollectionManager(),n=(r==null?void 0:r.getField(o.name))||(i==null?void 0:i.getCollectionField(o["x-collection-field"])),l=useCompile();(0,import_react2.useEffect)(()=>{var a;t!=null&&t.title||(t.title=l((a=n==null?void 0:n.uiSchema)==null?void 0:a.title))},[(e=n==null?void 0:n.uiSchema)==null?void 0:e.title])},useDef$4=()=>({}),useProps=(e={})=>{const t=e,{useProps:o=useDef$4}=t,r=Y(t,["useProps"]);let i=o;typeof o!="function"&&(i=useDef$4);const n=i();return f(f({},r),n)};function useParsedFilter({filterOption:e,onFilterChange:t}){const{parseFilter:o,findVariable:r}=useParseDataScopeFilter(),[i,n]=(0,import_react2.useState)({}),[l,a]=(0,import_react2.useState)(!!e);return(0,import_react2.useEffect)(()=>{if(!e)return;const c=()=>O(this,null,function*(){a(!0);const d=yield o(e);a(!1),n(d),t==null||t(d)});c();const u=import_lodash.default.debounce(c,DEBOUNCE_WAIT);(0,import_reactive.reaction)(()=>(0,import_client.flatten)(e,{breakOn({key:d}){return d.startsWith("$")&&d!=="$and"&&d!=="$or"},transformValue(d){if(!isVariable$1(d))return d;const m=getVariableName(d),p=r(m);let h=null;const g=getPath(d).split(".");return g.forEach((x,_)=>{const v=g.slice(0,_+1).join("."),y=(0,import_client.getValuesByPath)({[m]:(p==null?void 0:p.ctx)||{}},v);import_lodash.default.isEmpty(y)||(h=y)}),h}}),u,{equals:import_lodash.default.isEqual})},[JSON.stringify(e),o,r]),{filter:i,parseVariableLoading:l}}const useParentRecordCommon=e=>{const t=useCollectionRecordData();if(e)return t},useTableBlockDecoratorProps=e=>{var t;const{params:o,parseVariableLoading:r}=useTableBlockParams(e),i=useParentRecordCommon(e.association),n=(t=useDataSourceManager().getDataSource(e.dataSource))==null?void 0:t.collectionManager.getCollection(e.collection);return{params:o,parentRecord:i,parseVariableLoading:r,rowKey:(n==null?void 0:n.filterTargetKey)||"id"}};function useTableBlockParams(e){var t;const o=(0,import_react.useFieldSchema)(),{filter:r,parseVariableLoading:i}=useParsedFilter({filterOption:(t=e.params)==null?void 0:t.filter});return{params:(0,import_react2.useMemo)(()=>{const n=e.params||{},{dragSortBy:l}=(o==null?void 0:o["x-decorator-props"])||{};return e.dragSort&&l&&(n.sort=l),k(f({},n),{filter:r})},[o,r,e.dragSort,e.params]),parseVariableLoading:i}}const key="__isNewRecord__",isNewRecord=e=>(0,import_reactive.untracked)(()=>!!(e!=null&&e[key])),markRecordAsNew=e=>{if(!(0,import_lodash.isObject)(e))throw new Error("markRecordAsNew: record must be an object");return e[key]=!0,e},useDefaultLoading=()=>{var e;return!!((e=useDataBlockRequest())!=null&&e.loading)},withSkeletonComponent=(e,t)=>{const{useLoading:o=useDefaultLoading,displayName:r,SkeletonComponent:i=import_antd.Skeleton}=t||{},n=import_react2.default.memo(l=>{const a=o(),c=(0,import_react2.useRef)(!1),u=(0,import_react2.useDeferredValue)(a);return!c.current&&u?(0,import_jsx_runtime.jsx)(i,{}):(c.current=!0,(0,import_jsx_runtime.jsx)(e,f({},l)))});return n.displayName=r||`${e.displayName}(withSkeletonComponent)`||`${e.name}(withSkeletonComponent)`,n},getActionValue=(e,t)=>{const o=r=>(r==null?void 0:r.mode)==="constant"?r.value:null;switch(!0){case[ActionType.Color,ActionType.BackgroundColor,ActionType.TextAlign,ActionType.FontSize,ActionType.FontWeight,ActionType.FontStyle].includes(e):return o(t);default:return null}},getSatisfiedActions=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield Promise.all(o.filter(l=>!l.disabled).map(l=>O(void 0,null,function*(){return(yield conditionAnalyses({ruleGroup:l.condition,variables:r,localVariables:i,conditionType:l.conditionType},n))?l:null})))).filter(Boolean).map(l=>l.actions).flat()}),getSatisfiedValues=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedActions({rules:o,variables:r,localVariables:i},n)).map(l=>k(f({},l),{value:getActionValue(l.operator,l.value)}))}),getSatisfiedValueMap=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedValues({rules:o,variables:r,localVariables:i},n)).reduce((l,a)=>k(f({},l),{[a.operator]:a.value}),{})});function useSatisfiedActionValues({formValues:e,category:t="default",rules:o,schema:r,form:i}){const[n,l]=(0,import_react2.useState)({}),a=(0,import_react.useFieldSchema)(),c=useVariables$1(),u=useLocalVariables$1({currentForm:{values:e}}),d=r??a,m=o??(d[LinkageRuleDataKeyMap[t]]||(d==null?void 0:d.parent[LinkageRuleDataKeyMap[t]])),p=useApp(),h=(0,import_react2.useCallback)(()=>{m&&e&&getSatisfiedValueMap({rules:m,variables:c,localVariables:u},p.jsonLogic).then(g=>{(0,import_lodash.isEmpty)(g)?l({}):l(g)}).catch(g=>{throw new Error(g.message)})},[c,u,m,e]);return(0,import_react2.useEffect)(()=>{if(h(),i){const g=(0,import_shared.uid)();return i.addEffects(g,()=>{(0,import_core.onFormValuesChange)(()=>{h()})}),()=>{i.removeEffects(g)}}},[i,h,e]),{valueMap:n}}const GetStyleRules=import_react2.default.memo(({record:e,schema:t,onStyleChange:o})=>{const{valueMap:r}=useSatisfiedActionValues({formValues:e,category:"style",schema:t});return(0,import_react2.useEffect)(()=>{o(r)},[o,r]),null});GetStyleRules.displayName="GetStyleRules";const opacityStyle={opacity:.5},containerStyle={position:"relative"},spinStyle={display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",left:0,right:0,height:"100%",maxHeight:400,zIndex:1e3},displayNone$3={display:"none"},HighPerformanceSpin=import_react2.default.memo(e=>(0,import_jsx_runtime.jsxs)("div",{style:containerStyle,children:[(0,import_jsx_runtime.jsx)(import_antd.Spin,k(f({},import_lodash.default.omit(e,"children")),{style:e.spinning?spinStyle:displayNone$3})),(0,import_jsx_runtime.jsx)("div",{style:e.spinning?opacityStyle:null,children:e.children})]}));HighPerformanceSpin.displayName="HighPerformanceSpin";var FilterBlockType=(e=>(e[e.FORM=0]="FORM",e[e.TABLE=1]="TABLE",e[e.TREE=2]="TREE",e[e.COLLAPSE=3]="COLLAPSE",e))(FilterBlockType||{});const mergeFilter=(e,t="$and")=>{const o=e.filter(r=>{if(r&&typeof r=="object"&&!Array.isArray(r))return Object.values(r).filter(i=>i!==void 0).length});return o.length===0?{}:o.length===1?o[0]:{[t]:o}},getSupportFieldsByAssociation=(e,t)=>{var o;return(o=t.associatedFields)==null?void 0:o.filter(r=>e==null?void 0:e.some(i=>i===r.target))},getSupportFieldsByForeignKey=(e,t)=>{var o;return(o=t.foreignKeyFields)==null?void 0:o.filter(r=>e.fields.some(i=>i.type!=="belongsTo"&&i.foreignKey===r.name&&i.target===r.collectionName))},useSupportedBlocks=e=>{const{getDataBlocks:t}=useFilterBlock(),o=(0,import_react.useFieldSchema)(),r=useCollection(),{getAllCollectionsInheritChain:i}=useAllCollectionsInheritChainGetter();if(e===0||e===3)return t().filter(n=>isSameCollection(n.collection,r));if(e===1||e===2)return t().filter(n=>{var l,a;return o["x-uid"]!==n.uid&&(isSameCollection(n.collection,r)||((l=getSupportFieldsByAssociation(i(r.name,r.dataSource),n))==null?void 0:l.length)||((a=getSupportFieldsByForeignKey(r,n))==null?void 0:a.length))})},transformToFilter=(e,t,o,r)=>(e=(0,import_client.flatten)(e,{breakOn({value:i,path:n}){if(["$match","$notMatch","$anyOf","$noneOf","$childIn","$childNotIn","$dateBetween","$in","$notIn"].includes(t[n]))return!0;const l=o(`${r}.${n}`);if(["datetime","datetimeNoTz","date","unixTimestamp","createdAt","updatedAt"].includes(l==null?void 0:l.interface))return!0;if(l!=null&&l.target){if(Array.isArray(i))return!0;const a=l.targetKey||"id";if(i&&i[a]!=null)return!0}return!1}}),{$and:Object.keys(e).map(i=>{let n=import_lodash.default.get(e,i);const l=o(`${r}.${i}`);return l!=null&&l.target&&["hasOne","hasMany","belongsTo","belongsToMany","belongsToArray"].includes(l.type)&&(n=(0,import_client.getValuesByPath)(n,l.targetKey||"id"),i=`${i}.${l.targetKey||"id"}`,(l==null?void 0:l.interface)==="chinaRegion"&&(n=import_lodash.default.last(n))),!n&&n!==0&&n!==!1?null:{[i]:{[t[i]||"$eq"]:n}}}).filter(Boolean)}),useAssociatedFields=()=>{var e;return((e=useCollection())==null?void 0:e.fields.filter(t=>isAssocField(t)))||[]},isAssocField=e=>["o2o","oho","obo","m2o","createdBy","updatedBy","o2m","m2m","linkTo","chinaRegion","mbm"].includes(e==null?void 0:e.interface),isSameCollection=(e,t)=>e.name===t.name&&e.dataSource===t.dataSource,useFilterAPI=()=>{const e=(0,import_react.useFieldSchema)(),{getDataBlocks:t}=useFilterBlock(),{targets:o,uid:r}=findFilterTargets(e),i=t(),[n,l]=(0,import_react2.useState)(()=>o&&o.some(u=>i.some(d=>d.uid===u.uid))),a=Object.keys(o||{});(0,import_react2.useEffect)(()=>{l(o&&o.some(u=>i.some(d=>d.uid===u.uid)))},[a.length,o,i]);const c=(0,import_react2.useCallback)((u,d="id",m="$eq")=>{const p=i.find(h=>h.uid===e.parent["x-uid"]);i.forEach(h=>{var g,x,_,v;let y=d;const S=o.find(j=>j.uid===h.uid);if(!S)return;import_lodash.default.isFunction(u)&&(u=u(S,h,getSourceKey$1(p,S.field))),import_lodash.default.isFunction(d)&&(y=d(S,h)),import_lodash.default.isFunction(m)&&(m=m(S));const b=((g=h.service.params)==null?void 0:g[0])||{},C=((_=(x=h.service.params)==null?void 0:x[1])==null?void 0:_.filters)||{};if(u!=null)C[r]={$and:[{[y]:{[m]:u}}]};else if((v=h.clearSelection)==null||v.call(h),delete C[r],h.dataLoadingMode==="manual")return h.clearData();const F=mergeFilter([...Object.values(C).map(j=>removeNullCondition(j)),h.defaultFilter]);h.doFilter(k(f({},b),{page:1,filter:F}),{filters:C})})},[i,o,r,e]);return{isConnected:n,doFilter:c}},isInFilterFormBlock=e=>{for(;e;){if(e["x-filter-targets"])return e["x-decorator"]==="FilterFormBlockProvider";e=e.parent}return!1};function getSourceKey$1(e,t){var o,r,i;const n=(o=e==null?void 0:e.associatedFields)==null?void 0:o.find(l=>l.foreignKey===t);return(n==null?void 0:n.sourceKey)||((i=(r=t==null?void 0:t.split)==null?void 0:r.call(t,"."))==null?void 0:i[1])}const AssociationFieldContext=(0,import_react2.createContext)({});AssociationFieldContext.displayName="AssociationFieldContext";const useInsertSchema$1=e=>{const t=(0,import_react.useFieldSchema)(),{insertAfterBegin:o}=useDesignable(),{isMobileLayout:r}=useMobileLayout();return(0,import_react2.useCallback)(i=>{r||t.reduceProperties((n,l)=>l["x-component"]==="AssociationField."+e?l:n,null)||o((0,import_cloneDeep.default)(i))},[e,t,o,r])};function useAssociationFieldContext(){return(0,import_react2.useContext)(AssociationFieldContext)}function useServiceOptions$1(e){var t,o,r,i,n,l,a,c,u,d;const{action:m="list",service:p,useOriginalFilter:h}=e,g=(0,import_react.useFieldSchema)(),x=(0,import_react.useField)(),{getField:_}=useCollection_deprecated(),{getCollectionJoinField:v}=useCollectionManager_deprecated(),y=useRecord(),{isNew:S}=useCollectionRecord()||{},b=((0,import_lodash.isString)((r=(o=(t=g==null?void 0:g["x-component-props"])==null?void 0:t.service)==null?void 0:o.params)==null?void 0:r.filter)?(l=(n=(i=x.componentProps)==null?void 0:i.service)==null?void 0:n.params)==null?void 0:l.filter:(u=(c=(a=g==null?void 0:g["x-component-props"])==null?void 0:a.service)==null?void 0:c.params)==null?void 0:u.filter)||((d=p==null?void 0:p.params)==null?void 0:d.filter),{filter:C}=useParsedFilter({filterOption:b,onFilterChange:()=>{S&&x.reset()}}),F=(0,import_react2.useMemo)(()=>_(g.name)||v(g==null?void 0:g["x-collection-field"]),[g]),j=y==null?void 0:y[F==null?void 0:F.sourceKey],P=(0,import_react2.useMemo)(()=>{const T=["oho","o2m"].includes(F==null?void 0:F.interface);return mergeFilter([mergeFilter([T&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$is:null}}:null,C]),T&&j!==void 0&&j!==null&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$eq:j}}:null],"$or")},[F==null?void 0:F.interface,F==null?void 0:F.foreignKey,g,C,j,h]);return(0,import_react2.useMemo)(()=>k(f({resource:F==null?void 0:F.target,action:m},p),{params:k(f({},p==null?void 0:p.params),{filter:P})}),[F==null?void 0:F.target,m,P,p])}const useFieldNames$1=(e={})=>{var t,o,r,i,n;const l=(0,import_react.useFieldSchema)(),a=((i=(r=(o=(t=l["x-component-props"])==null?void 0:t.field)==null?void 0:o.uiSchema)==null?void 0:r["x-component-props"])==null?void 0:i.fieldNames)||((n=l["x-component-props"])==null?void 0:n.fieldNames)||e.fieldNames;return f({label:"label",value:"value"},a)},SubFormContext=(0,import_react2.createContext)(null);SubFormContext.displayName="SubFormContext";const SubFormProvider=e=>{const t=(0,import_react2.useContext)(SubFormContext),{value:o,collection:r,fieldSchema:i,parent:n,skip:l}=e.value,a=(0,import_react2.useMemo)(()=>import_lodash.default.omitBy({value:o,collection:r,fieldSchema:i,skip:l,parent:n||(t!=null&&t.skip?t.parent:t)},import_lodash.default.isUndefined),[o,r,i,l,n,t]);return(0,import_jsx_runtime.jsx)(SubFormContext.Provider,{value:a,children:e.children})},useSubFormValue=()=>{const{value:e,collection:t,fieldSchema:o,parent:r}=(0,import_react2.useContext)(SubFormContext)||{};return{formValue:e,collection:t,fieldSchema:o,parent:r}},TableUidContext=(0,import_react2.createContext)(null),useColumnSettings=e=>{const{t}=(0,import_react_i18next.useTranslation)(),o=(0,import_react2.useContext)(TableUidContext),r=`nocobase_table_column_settings_${o}`,i=(0,import_react2.useCallback)(()=>{try{const a=localStorage.getItem(r);return a?JSON.parse(a):null}catch(a){return console.warn("Failed to parse table column settings from localStorage:",a),null}},[r]),n=(0,import_react2.useCallback)(a=>{try{const c=JSON.stringify(a);localStorage.setItem(r,c);const u=new CustomEvent("nocobase-table-settings-changed",{detail:{key:r,tableId:o,settings:a}});window.dispatchEvent(u)}catch(c){console.warn("Failed to save table column settings to localStorage:",c),import_antd.message.error(t("Failed to save table settings"))}},[r,o,t]),l=(0,import_react2.useCallback)(()=>{try{localStorage.removeItem(r);const a=new CustomEvent("nocobase-table-settings-changed",{detail:{key:r,tableId:o,settings:null}});window.dispatchEvent(a)}catch(a){console.warn("Failed to clear table column settings from localStorage:",a),import_antd.message.error(t("Failed to clear table settings"))}},[r,o,t]);return{getSettings:i,saveSettings:n,clearSettings:l}},useTableColumnIntegration=(e,t=!0)=>{const o=(0,import_react2.useContext)(TableUidContext),{getSettings:r}=useColumnSettings(),[i,n]=(0,import_react2.useState)(0);(0,import_react2.useEffect)(()=>{const a=c=>{const{key:u,tableId:d}=c.detail;(u.includes(o)||d===o)&&n(m=>m+1)};return window.addEventListener("nocobase-table-settings-changed",a),()=>{window.removeEventListener("nocobase-table-settings-changed",a)}},[o]);const l=(0,import_react2.useMemo)(()=>r(),[r,i]);return{columns:(0,import_react2.useMemo)(()=>{if(!t||!l||l.length===0)return e;const a=new Map;l.forEach(p=>{a.set(p.key,p)});const c=e.map(p=>{const h=a.get(p.key);if(h){const g=p.columnHidden||!h.visible,x=h.width||p.width,_=h.fixed||p.fixed;return k(f({},p),{columnHidden:g,fixed:_,width:x,_orderIndex:h.order})}return p}),u=[],d=[];c.forEach(p=>{p._orderIndex!==void 0?u.push(p):d.push(p)}),u.sort((p,h)=>(p._orderIndex||0)-(h._orderIndex||0));const m=[...u,...d];return m.forEach(p=>{delete p._orderIndex}),m},[e,l])}},TableSkeleton=({rows:e=5,columns:t=6})=>{const{token:o}=useToken$1(),r=o.controlHeight*2.06,i=o.controlHeight*1.75,n=(0,import_react2.useMemo)(()=>import_css.css`
|
|
65
|
+
`,items:a},n))})},SchemaInitializerSubMenu=e=>{var t;const o=e,{children:r,items:i,title:n,name:l,onOpenChange:a,icon:c}=o,u=Y(o,["children","items","title","name","onOpenChange","icon"]),d=useCompile(),m=useSchemaInitializerItem(),p=(0,import_react2.useMemo)(()=>l||(m==null?void 0:m.name)||(0,import_shared.uid)(),[l,m]),h=(t=i||r)==null?void 0:t.filter(_=>_.useVisible?_.useVisible():!0),g=useSchemaInitializerMenuItems(h,l),x=(0,import_react2.useMemo)(()=>[k(f({},u),{key:p,label:d(n),icon:typeof c=="string"?(0,import_jsx_runtime.jsx)(import_icons.default,{type:c}):c,children:g})],[g,d,c,p,u,n]);return(0,import_jsx_runtime.jsx)(SchemaInitializerMenu,{onOpenChange:a,items:x})},SchemaInitializerSubMenuInternal=()=>{const e=useSchemaInitializerItem();return(0,import_jsx_runtime.jsx)(SchemaInitializerSubMenu,f({},e))},useAriaAttributeOfMenuItem=()=>{const{isInMenu:e}=useSchemaInitializerSubMenuContext();return{attribute:(0,import_react2.useMemo)(()=>e?{}:{role:"menuitem"},[e])}},{Paragraph:Paragraph$1,Text:Text$2}=import_antd.Typography,ErrorFallbackModal=e=>{const[t,o]=import_react2.default.useState(!1),r=(0,import_jsx_runtime.jsx)(Paragraph$1,{style:{display:"flex",marginBottom:0},copyable:{text:e.error.message},children:(0,import_jsx_runtime.jsxs)(Text$2,{type:"danger",style:{whiteSpace:"nowrap",textOverflow:"ellipsis",overflow:"hidden",display:"inline-block",maxWidth:"200px"},children:["Error: ",e.error.message]})});return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)("div",{onMouseOver:()=>o(!0),children:e.children||r}),(0,import_jsx_runtime.jsx)(import_antd.Modal,{zIndex:1e4,open:t,footer:null,onCancel:()=>o(!1),width:"60%",children:(0,import_jsx_runtime.jsx)(ErrorFallback,f({},e))})]})},{Paragraph,Text:Text$1,Link}=import_antd.Typography,useDownloadLogs=(e,t={})=>{const o=useLocationNoUpdate(),[r,i]=import_react2.default.useState(!1),n=useAPIClient();return{loading:r,download:()=>O(void 0,null,function*(){i(!0);try{const l=yield n.request({url:"logger:collect",method:"post",responseType:"blob",data:f({error:{message:e.message,stack:e.stack},location:o},t)}),a=window.URL.createObjectURL(new Blob([l.data],{type:"application/gzip"})),c=document.createElement("a");c.setAttribute("href",a),c.setAttribute("download","logs.tar.gz"),c.click(),c.remove()}catch(l){console.log(l)}i(!1)})}},ErrorFallback=({error:e})=>{const t=(0,import_react.useFieldSchema)(),{t:o}=(0,import_react_i18next.useTranslation)(),{loading:r,download:i}=useDownloadLogs(e,{schema:t}),n=(0,import_jsx_runtime.jsxs)(import_react_i18next.Trans,{children:["This is likely a NocoBase internals bug. Please open an issue at ",(0,import_jsx_runtime.jsx)(Link,{href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:"here"})]});return(0,import_jsx_runtime.jsx)("div",{style:{backgroundColor:"white"},children:(0,import_jsx_runtime.jsx)(import_antd.Result,{style:{maxWidth:"60vw",margin:"auto"},status:"error",title:o("Render Failed"),subTitle:n,extra:[(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",href:"https://github.com/nocobase/nocobase/issues",target:"_blank",children:o("Feedback")},"feedback"),(0,import_jsx_runtime.jsx)(import_antd.Button,{loading:r,onClick:i,children:o("Download logs")},"log")],children:(0,import_jsx_runtime.jsx)(Paragraph,{copyable:{text:e.stack},children:(0,import_jsx_runtime.jsx)(Text$1,{type:"danger",style:{whiteSpace:"pre-line",textAlign:"center"},children:e.stack})})})})};ErrorFallback.Modal=ErrorFallbackModal;const AppNotFound=()=>{const e=(0,import_react_router_dom.useNavigate)(),{t}=(0,import_react_i18next.useTranslation)();return(0,import_jsx_runtime.jsx)(import_antd.Result,{status:"404",title:"404",subTitle:t("Sorry, the page you visited does not exist."),extra:(0,import_jsx_runtime.jsx)(import_antd.Button,{onClick:()=>e("/",{replace:!0}),type:"primary",children:"Back Home"})})};class Plugin{constructor(t,o){this.options=t,this.app=o,this.options=t,this.app=o}get pluginManager(){return this.app.pluginManager}get context(){return this.app.context}get flowEngine(){return this.app.flowEngine}get engine(){return this.app.flowEngine}get pm(){return this.app.pm}get router(){return this.app.router}get pluginSettingsManager(){return this.app.pluginSettingsManager}get pluginSettingsRouter(){return this.app.pluginSettingsManager}get schemaInitializerManager(){return this.app.schemaInitializerManager}get schemaSettingsManager(){return this.app.schemaSettingsManager}get dataSourceManager(){return this.app.dataSourceManager}afterAdd(){return O(this,null,function*(){})}beforeLoad(){return O(this,null,function*(){})}load(){return O(this,null,function*(){})}t(t,o={}){var r;return this.app.i18n.t(t,f({ns:(r=this.options)==null?void 0:r.packageName},o))}}const titleWrapperStyle={display:"flex",alignItems:"center",gap:4},withTooltipComponent=e=>t=>{const{tooltip:o}=t;return o?(0,import_jsx_runtime.jsxs)("div",{style:titleWrapperStyle,children:[(0,import_jsx_runtime.jsx)(e,f({},t)),(0,import_jsx_runtime.jsx)(import_antd.Tooltip,{title:o,children:(0,import_jsx_runtime.jsx)(import_icons.QuestionCircleOutlined,{style:{zIndex:1}})})]}):(0,import_jsx_runtime.jsx)(e,f({},t))},{evaluate}=import_client4.evaluators.get("formula.js"),useEvaluatedExpression=e=>{const t=useVariables$1(),o=useLocalVariables$1(),[r,i]=(0,import_react2.useState)();return(0,import_react2.useEffect)(()=>{O(void 0,null,function*(){if(e==null||e===""){i(void 0);return}const{exp:n,scope:l}=yield replaceVariables(e,{variables:t,localVariables:o});try{const a=evaluate(n,f({now:()=>new Date().toString()},l));i(a)}catch(a){console.error(a)}})},[t.parseVariable,e,o]),r};class SchemaInitializer{constructor(t){I(this,"options"),I(this,"name"),this.options=Object.assign({items:[]},t),this.name=t.name}get items(){return this.options.items}add(t,o){const r=t.split("."),i=r[r.length-1],n=k(f({},o),{name:i}),l=(u,d)=>{const m=this.items.findIndex(p=>p.name===u);m===-1?this.items.push(d):this.items[m]=d};if(r.length===1){l(i,n);return}const a=r.slice(0,-1).join("."),c=this.get(a);if(c){c.children||(c.children=[]);const u=t.replace(`${c.name}.`,""),d=c.children.findIndex(m=>m.name===u);d===-1?c.children.push(n):c.children[d]=n}else l(i,n)}get(t){var o;if(!t)return;const r=t.split(".");let i={children:this.items};for(let n=0;n<r.length;n++){const l=r[n],a=(o=i.children)==null?void 0:o.find(c=>c.name===l);if(a&&(i=a),n===r.length-1)return a}}remove(t){const o=t.split(".");if(o.length===1){const i=this.items.findIndex(n=>n.name===o[0]);i!==-1&&this.items.splice(i,1);return}const r=this.get(o.slice(0,-1).join("."));if(r&&r.children){const i=o[o.length-1],n=r.children.findIndex(l=>l.name===i);n!==-1&&r.children.splice(n,1)}}}var NocoBaseDesktopRouteType=(e=>(e.group="group",e.page="page",e.flowRoute="flowRoute",e.link="link",e.tabs="tabs",e.flowPage="flowPage",e))(NocoBaseDesktopRouteType||{});const useStyles$h=genStyleHook("nb-menu-item",e=>{const{componentCls:t}=e;return{[t]:{paddingLeft:`${e.padding}px !important`,paddingRight:`${e.padding}px !important`}}}),useInsertFlowPageSchema=()=>{const e=useAPIClient();return(0,import_react2.useCallback)(t=>O(void 0,null,function*(){yield e.request({method:"POST",url:"/uiSchemas:insert",data:t})}),[e])},FlowPageMenuItem=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),{theme:o}=useGlobalTheme(),{componentCls:r,hashId:i}=useStyles$h(),n=useParentRoute(),{createRoute:l}=useNocoBaseRoutes(),a=useInsertFlowPageSchema(),c=(0,import_react2.useCallback)(()=>O(void 0,null,function*(){const u=yield FormDialog(e("Add page"),()=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{scope:t.scope,components:f({},t.components),children:(0,import_jsx_runtime.jsx)(import_antd_v5.FormLayout,{layout:"vertical",children:(0,import_jsx_runtime.jsx)(zIndexContext.Provider,{value:ICON_POPUP_Z_INDEX,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:{properties:{title:{title:e("Menu item title"),required:!0,"x-component":"Input","x-decorator":"FormItem"},icon:{title:e("Icon"),"x-component":"IconPicker","x-decorator":"FormItem"}}}})})})}),o).open({initialValues:{}}),d=(0,import_shared.uid)(),m=(0,import_shared.uid)(),p=(0,import_shared.uid)(),h=(0,import_shared.uid)();yield l({type:NocoBaseDesktopRouteType.flowPage,title:u.title,icon:u.icon,parentId:n==null?void 0:n.id,schemaUid:m,menuSchemaUid:d,enableTabs:!1,children:[{type:NocoBaseDesktopRouteType.tabs,schemaUid:p,tabSchemaName:h,hidden:!0}]}),a(getFlowPageMenuSchema({pageSchemaUid:m}))}),[l,a,t==null?void 0:t.components,t==null?void 0:t.scope,n==null?void 0:n.id,e,o]);return(0,import_jsx_runtime.jsx)(SchemaInitializerItem,{title:e("Modern page (v2)"),onClick:c,className:`${r} ${i}`})};function getFlowPageMenuSchema({pageSchemaUid:e}){return{type:"void","x-component":"FlowRoute","x-uid":e}}const GroupItem$1=()=>{const{t:e}=(0,import_react_i18next.useTranslation)(),t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),{theme:o}=useGlobalTheme(),{componentCls:r,hashId:i}=useStyles$h(),n=useParentRoute(),{createRoute:l}=useNocoBaseRoutes(),a=(0,import_react2.useCallback)(()=>O(void 0,null,function*(){const c=yield FormDialog(e("Add group"),()=>(0,import_jsx_runtime.jsx)(SchemaComponentOptions,{scope:t.scope,components:f({},t.components),children:(0,import_jsx_runtime.jsx)(import_antd_v5.FormLayout,{layout:"vertical",children:(0,import_jsx_runtime.jsx)(zIndexContext.Provider,{value:ICON_POPUP_Z_INDEX,children:(0,import_jsx_runtime.jsx)(SchemaComponent,{schema:{properties:{title:{title:e("Menu item title"),"x-component":"Input","x-decorator":"FormItem",required:!0},icon:{title:e("Icon"),"x-component":"IconPicker","x-decorator":"FormItem"}}}})})})}),o).open({initialValues:{}}),{title:u,icon:d}=c,m=(0,import_shared.uid)();yield l({type:NocoBaseDesktopRouteType.group,title:u,icon:d,parentId:n==null?void 0:n.id,schemaUid:m})}),[t.components,t.scope,e,o]);return(0,import_jsx_runtime.jsx)(SchemaInitializerItem,{title:e("Group"),onClick:a,className:`${r} ${i}`})},useAttach=e=>{const t=(0,import_react2.useRef)(null);return(0,import_react2.useEffect)(()=>(t.current&&e!==t.current&&t.current.onUnmount(),t.current=e,e.onMount(),()=>{e.onUnmount()}),[e]),e},compileCache={},hasVariable=e=>/{{.*?}}/g.test(e),useCompile=({noCache:e}={noCache:!1})=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext);return(r,i)=>{let n=!1,l;if(typeof r=="string"&&r.startsWith("{{")&&(n=!0,l=r),r&&typeof r=="object"&&!(0,import_react2.isValidElement)(r)){try{l=JSON.stringify(r)}catch(a){return console.warn("Failed to stringify:",a),r}if(compileCache[l])return compileCache[l];n=hasVariable(l)}if(Array.isArray(r)){try{l=JSON.stringify(r)}catch(a){return console.warn("Failed to stringify:",a),r}if(compileCache[l])return compileCache[l];n=hasVariable(l)}if(n){const a=f(f(f({},t==null?void 0:t.scope),o),i);if(!l)return import_react.Schema.compile(r,a);try{return e?import_react.Schema.compile(r,a):(compileCache[l]=compileCache[l]||import_react.Schema.compile(r,a),compileCache[l])}catch(c){return console.log("useCompile error",r,c),import_react.Schema.compile(r,a)}}return r}},useComponent=(e,t)=>{const{components:o}=(0,import_react2.useContext)(import_react.SchemaOptionsContext);return e?typeof e!="string"?e:(0,import_lodash.get)(o,e)||t:t},LAZY_COMPONENT_KEY=Symbol("LAZY_COMPONENT_KEY");function lazy(e,...t){if(t.length===0){const o=(0,import_react2.lazy)(()=>e().then(i=>{const n=i.default;return r[LAZY_COMPONENT_KEY]=n,{default:n}})),r=i=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(o,f({},i))});return r}return t.reduce((o,r)=>{const i=(0,import_react2.lazy)(()=>e().then(n=>{const l=(0,import_lodash.get)(n,r);return o[r][LAZY_COMPONENT_KEY]=l,{default:l}}));return o[r]=n=>(0,import_jsx_runtime.jsx)(import_react2.default.Suspense,{fallback:(0,import_jsx_runtime.jsx)(import_antd.Spin,{}),children:(0,import_jsx_runtime.jsx)(i,f({},n))}),o},{})}function useLazy(e,t){const o=typeof t=="function"?t:i=>i[t],r=(0,import_react_imported_component.loadableResource)(e);if(!r.payload)throw new Promise((i,n)=>{r.loadIfNeeded(),r.resolution.then(i).catch(n)});return o(r.payload)}function addAppVersion(e,t){if(e)return e["x-app-version"]||(e["x-app-version"]=t),Object.keys(e.properties||{}).forEach(o=>{var r;addAppVersion((r=e.properties)==null?void 0:r[o],t)}),e}const name="@nocobase/client",version="2.0.0-alpha.70",license="AGPL-3.0",main="lib/index.js",module$1="es/index.mjs",types="es/index.d.ts",dependencies={"@ahooksjs/use-url-state":"3.5.1","@ant-design/cssinjs":"^1.11.1","@ant-design/icons":"^5.6.1","@ant-design/pro-layout":"^7.22.1","@antv/g2plot":"^2.4.18","@budibase/handlebars-helpers":"0.14.0","@codemirror/lang-html":"^6.4.10","@codemirror/theme-one-dark":"^6.1.3","@ctrl/tinycolor":"^3.6.0","@dnd-kit/core":"^6.0.0","@dnd-kit/sortable":"^7.0.0","@emotion/css":"^11.7.1","@formily/antd-v5":"1.2.3","@formily/core":"^2.2.27","@formily/grid":"^2.2.27","@formily/json-schema":"^2.2.27","@formily/path":"^2.2.27","@formily/react":"^2.2.27","@formily/reactive":"^2.2.27","@formily/reactive-react":"^2.2.27","@formily/shared":"^2.2.27","@formily/validator":"^2.2.27","@nocobase/evaluators":"2.0.0-alpha.70","@nocobase/flow-engine":"2.0.0-alpha.70","@nocobase/sdk":"2.0.0-alpha.70","@nocobase/utils":"2.0.0-alpha.70","@tanstack/react-table":"^8.21.3","@types/tabulator-tables":"^6.2.6","acorn-jsx":"^5.3.2",ahooks:"^3.7.2",antd:"5.24.2","antd-mobile":"^5.41.1","antd-mobile-icons":"^0.3.0","antd-style":"3.7.1",axios:"^1.7.0","bignumber.js":"^9.1.2",classnames:"^2.3.1",codemirror:"^6.0.2",cronstrue:"^2.11.0","file-saver":"^2.0.5",filesize:"9.0.11",flat:"^5.0.2","html5-qrcode":"^2.3.8",i18next:"^22.4.9","i18next-http-backend":"^2.1.1",ignore:"^5.2.0",json5:"^2.2.3",liquidjs:"^10.0.0",lodash:"4.17.21","lru-cache":"6.0.0","markdown-it":"14.1.0","markdown-it-highlightjs":"3.3.1",mathjs:"^15.1.0",mermaid:"9.4.3",mime:"^4.0.4","mime-match":"^1.0.2","quill-image-resize-module-react":"^3.0.0","react-beautiful-dnd":"^13.1.0","react-device-detect":"2.2.3","react-drag-listview":"^0.1.9","react-error-boundary":"^4.0.10","react-helmet":"^6.1.0","react-hotkeys-hook":"^3.4.7","react-i18next":"^11.15.1","react-iframe":"~1.8.5","react-image-lightbox":"^5.1.4","react-intersection-observer":"9.14.0","react-js-cron":"^3.1.0","react-quill":"^2.0.0","react-router-dom":"^6.30.1","react-to-print":"^2.14.7","sanitize-html":"2.13.0","tabulator-tables":"^6.3.1","use-deep-compare-effect":"^1.8.1",vditor:"^3.10.3"},peerDependencies={react:">=18.0.0","react-dom":">=18.0.0","react-is":">=18.0.0"},devDependencies={"@testing-library/react":"^14.0.0","@types/markdown-it":"14.1.1","@types/markdown-it-highlightjs":"3.3.1","@types/react-big-calendar":"^1.6.4","axios-mock-adapter":"^1.20.0",dumi:"2.2.14","dumi-theme-nocobase":"^0.2.32"},clientPkg={name,version,license,main,module:module$1,types,dependencies,peerDependencies,devDependencies};function createDesignable(e){return new Designable(e)}const generateUid=e=>{e&&(e["x-uid"]||(e["x-uid"]=(0,import_shared.uid)()),Object.keys(e.properties||{}).forEach(t=>{generateUid(e.properties[t])}))},defaultWrap=e=>e,matchSchema=(e,t)=>{if(!(!e||!t)){for(const o in t)if(Object.prototype.hasOwnProperty.call(t,o)&&t[o]!==(e==null?void 0:e[o]))return!1;return!0}},splitWrapSchema=(e,t)=>{if(e["x-uid"]&&e["x-uid"]===t["x-uid"])return[null,e.toJSON()];const o=e.toJSON(),r=k(f({},o),{properties:{}});let i=null;const n=(l,a)=>{Object.keys(l||{}).forEach(c=>{const u=l[c];if(u["x-uid"]===t["x-uid"]){i=l[c];return}else a.properties[c]=k(f({},u),{properties:{}}),n(u==null?void 0:u.properties,a.properties[c])})};return n(o.properties,r),[r,i]},translate=e=>e;class Designable{constructor(t){I(this,"current"),I(this,"options"),I(this,"appVersion"),I(this,"events",{}),this.options=t,this.current=t.current,this.appVersion=t.appVersion}get model(){return this.options.model}get query(){return this.options.query}loadAPIClientEvents(){const{api:t,t:o=translate}=this.options;if(!t)return;const r=i=>{if(!i)return[];const n=Object.values(i.properties).length,l=[];return i.mapProperties(a=>{a["x-component-props"]=a["x-component-props"]||{},a["x-component-props"].width=100/n,a["x-uid"]&&l.push({"x-uid":a["x-uid"],"x-component-props":a["x-component-props"]})}),i["x-uid"]&&l.length?l:[]};this.on("insertAdjacent",i=>O(this,[i],function*({onSuccess:n,current:l,position:a,schema:c,wrap:u,wrapped:d,removed:m}){var p;let h=[];if((d==null?void 0:d["x-component"])==="Grid.Col"&&(h=h.concat(r(d.parent))),(m==null?void 0:m["x-component"])==="Grid.Col"&&(h=h.concat(r(m.parent))),this.refresh(),!l["x-uid"])return;const g=yield t.request({url:`/uiSchemas:insertAdjacent/${l["x-uid"]}?position=${a}`,method:"post",data:{schema:addAppVersion(c,this.appVersion),wrap:u}});h.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:h})),m!=null&&m["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${m["x-uid"]}`,method:"post"})),n==null||n((p=g==null?void 0:g.data)==null?void 0:p.data),import_antd.message.success(o("Saved successfully"),.2)})),this.on("patch",i=>O(this,[i],function*({schema:n}){this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:patch",method:"post",data:f({},n)}),import_antd.message.success(o("Saved successfully"),.2))})),this.on("initializeActionContext",i=>O(this,[i],function*({schema:n}){n!=null&&n["x-uid"]&&(yield t.request({url:"/uiSchemas:initializeActionContext",method:"post",data:f({},n)}))})),this.on("batchPatch",i=>O(this,[i],function*({schemas:n}){this.refresh(),yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:n}),import_antd.message.success(o("Saved successfully"),.2)})),this.on("remove",i=>O(this,[i],function*({removed:n}){let l=[];(n==null?void 0:n["x-component"])==="Grid.Col"&&(l=r(n.parent)),this.refresh(),n!=null&&n["x-uid"]&&(yield t.request({url:`/uiSchemas:remove/${n["x-uid"]}`,method:"post"}),l.length&&(yield t.request({url:"/uiSchemas:batchPatch",method:"post",data:l})),import_antd.message.success(o("Saved successfully"),.2))}))}prepareProperty(t){t.type||(t.type="void"),t.name||(t.name=(0,import_shared.uid)()),this.current["x-uid"]&&generateUid(t)}on(t,o){this.events[t]||(this.events[t]=[]),this.events[t].push(o)}emit(t,...o){return O(this,null,function*(){if(!this.events[t])return;const[r,...i]=o;return Promise.all(this.events[t].map(n=>n.bind(this)(f({current:this.current},r),...i)))})}parentsIn(t){if(!t||!import_react.Schema.isSchemaInstance(t))return!1;let o=this.current;for(;o!=null&&o.parent;){if(o.parent===t)return!0;o=o.parent}return!1}refresh(t){const{refresh:o}=this.options;return o==null?void 0:o(t)}deepMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly"},r={"x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(i=>{o[i]?(this.current[i]=t[i],this.updateModel(o[i],t[i])):r[i]?Object.keys(t[i]).forEach(n=>{(0,import_set.default)(this.current,[i,n],t[i][n]),this.updateModel([r[i],n],t[i][n])}):this.current[i]=t[i]}),this.emit("patch",{schema:t})}getSchemaAttribute(t,o){return(0,import_get.default)(this.current,t,o)}shallowMerge(t){const o={title:"title",description:"description",default:"initialValue",readOnly:"readOnly",writeOnly:"editable",enum:"dataSource","x-pattern":"pattern","x-display":"display","x-validator":"validator","x-decorator":"decorator","x-component":"component","x-reactions":"reactions","x-content":"content","x-visible":"visible","x-hidden":"hidden","x-disabled":"disabled","x-editable":"editable","x-read-only":"readOnly","x-decorator-props":"decoratorProps","x-component-props":"componentProps","x-data":"data"};Object.keys(t).forEach(r=>{this.current[r]=t[r],o[r]&&this.updateModel(o[r],t[r])}),this.emit("patch",{schema:t})}updateModel(t,o){const r=i=>{(0,import_set.default)(i,t,o)};this.model&&r(this.model),this.query&&this.query.take(r)}insertAdjacent(t,o,r={}){switch(t){case"beforeBegin":return this.insertBeforeBegin(o,r);case"afterBegin":return this.insertAfterBegin(o,r);case"beforeEnd":return this.insertBeforeEnd(o,r);case"afterEnd":return this.insertAfterEnd(o,r)}}recursiveRemoveIfNoChildren(t,o){if(!t)return;let r=t,i;const n=o==null?void 0:o.breakRemoveOn;for(;r;){if(typeof n=="function"){if(n(r))break}else if(matchSchema(r,n))break;if(Object.keys(r.properties||{}).length>0)break;r.parent&&(i=r.parent.removeProperty(r.name)),r=r.parent}return i}remove(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let l=n.parent.removeProperty(n.name);if(i){const a=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});a&&(l=a)}return this.emit("remove",{removed:l})}removeWithoutEmit(t,o={}){const{breakRemoveOn:r,removeParentsIfNoChildren:i}=o,n=t||this.current;let l=n.parent.removeProperty(n.name);if(i){const a=this.recursiveRemoveIfNoChildren(n.parent,{breakRemoveOn:r});a&&(l=a)}return l}insertBeforeBeginOrAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current)||!import_react.Schema.isSchemaInstance(t)||this.current.parent!==t.parent)return;let r=0,i=0;return this.current.parent.mapProperties((n,l,a)=>{this.current.name===l&&(i=a),t.name===l&&(r=a)}),r>i?this.insertBeforeBegin(t,o):this.insertAfterEnd(t,o)}insertBeforeBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const a={};let c=!1,u=0,d=0;this.current.parent.mapProperties((x,_)=>{_===this.current.name&&(d=u,c=!0,++u),x["x-index"]=u,++u,c&&(a[_]=x,this.current.parent.removeProperty(_))}),this.prepareProperty(t);const m=i(t),p=this.current.parent.addProperty(m.name||(0,import_shared.uid)(),m);p["x-index"]=d,p.parent=this.current.parent,this.current.parent.setProperties(a);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",f({position:"beforeBegin",schema:g,wrapped:m,wrap:h},r))}insertAfterBegin(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));const a={};let c=1;this.current.mapProperties((h,g)=>{h["x-index"]=c,++c,a[g]=h}),this.current.properties={},this.prepareProperty(t);const u=i(t),d=this.current.addProperty(u.name||(0,import_shared.uid)(),u);d["x-index"]=0,d.parent=this.current,this.current.setProperties(a);const[m,p]=splitWrapSchema(d,t);this.emit("insertAdjacent",f({position:"afterBegin",schema:p,wrap:m,wrapped:u},r))}insertBeforeEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;delete t["x-index"];const r={onSuccess:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;if(import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n}))}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const a=i(t),c=this.current.addProperty(a.name||(0,import_shared.uid)(),a);c.parent=this.current;const[u,d]=splitWrapSchema(c,t);return this.emit("insertAdjacent",f({position:"beforeEnd",schema:d,wrap:u,wrapped:a},r))}insertAfterEnd(t,o={}){if(!import_react.Schema.isSchemaInstance(this.current))return;const r={onSuccess:o==null?void 0:o.onSuccess},{wrap:i=defaultWrap,breakRemoveOn:n,removeParentsIfNoChildren:l}=o;let a=0,c=0,u=!1;const d={};if(this.current.parent.mapProperties((x,_)=>{x["x-index"]=a,_===this.current.name&&(++a,c=a,u=!0),++a,u&&_!==this.current.name&&(d[_]=x,this.current.parent.removeProperty(_))}),import_react.Schema.isSchemaInstance(t)){if(this.parentsIn(t)){this.emit("error",{code:"parent_is_not_allowed",schema:t});return}t.parent.removeProperty(t.name),l&&(r.removed=this.recursiveRemoveIfNoChildren(t.parent,{breakRemoveOn:n})),t.parent=null}else t&&(t=(0,import_cloneDeep.default)(t));this.prepareProperty(t);const m=i(t),p=this.current.parent.addProperty(m.name||(0,import_shared.uid)(),m);p.parent=this.current.parent,p["x-index"]=c,this.current.parent.setProperties(d);const[h,g]=splitWrapSchema(p,t);this.emit("insertAdjacent",f({position:"afterEnd",schema:g,wrap:h,wrapped:m},r))}}function useFindComponent(){const e=(0,import_react2.useContext)(import_react.SchemaOptionsContext),t=(0,import_react2.useMemo)(()=>(e==null?void 0:e.components)||{},[e]);return o=>{if(!o)return null;if(typeof o!="string")return o;const r=(0,import_get.default)(t,o);return r||console.error(`[nocobase]: Component "${o}" not found`),r}}function useDesignable(){const{designable:e,setDesignable:t,refresh:o,reset:r}=(0,import_react2.useContext)(SchemaComponentContext),i=(0,import_react2.useContext)(import_react.SchemaOptionsContext),n=(0,import_react2.useMemo)(()=>(i==null?void 0:i.components)||{},[i]),l=(0,import_react2.useMemo)(()=>()=>(0,import_jsx_runtime.jsx)(import_jsx_runtime.Fragment,{}),[]),a=(0,import_ahooks.useUpdate)(),c=useRefreshFieldSchema(),u=useRefreshComponent(),d=(0,import_react2.useCallback)(v=>{o==null||o(),a(),c==null||c(v),u==null||u()},[o,a,c,u]),m=(0,import_react.useField)(),p=(0,import_react.useFieldSchema)(),h=useAPIClient(),{t:g}=(0,import_react_i18next.useTranslation)(),x=(0,import_react2.useMemo)(()=>createDesignable({t:g,api:h,refresh:d,current:p,model:m,appVersion:clientPkg.version}),[g,h,d,p,m]);(0,import_react2.useEffect)(()=>{x.loadAPIClientEvents()},[x]);const{isMobileLayout:_}=useMobileLayout();return{dn:x,designable:_?!1:e,reset:r,refresh:d,setDesignable:t,DesignableBar:l,findComponent:(0,import_react2.useCallback)(v=>{var y;if(!v)return null;if(typeof v!="string")return v;const S=(0,import_get.default)(n,v);return(y=S==null?void 0:S[LAZY_COMPONENT_KEY])!=null?y:S},[import_get.default]),on:x.on.bind(x),patch:(0,import_react2.useCallback)((v,y)=>{const S=b=>{Object.keys(b).forEach(C=>{const F=b[C];C==="title"&&(m.title=F,p.title=F),C==="x-decorator-props"&&(m.decoratorProps||(m.decoratorProps={}),p["x-decorator-props"]||(p["x-decorator-props"]={}),Object.keys(F).forEach(j=>{m.decoratorProps[j]=F[j],p["x-decorator-props"][j]=F[j]})),C==="x-component-props"&&(m.componentProps||(m.componentProps={}),p["x-component-props"]||(p["x-component-props"]={}),Object.keys(F).forEach(j=>{m.componentProps[j]=F[j],p["x-component-props"][j]=F[j]}))})};if(typeof v=="string"){const b={};return(0,import_set.default)(b,v,y),S(b)}S(v),d()},[x]),shallowMerge:(0,import_react2.useCallback)(v=>{x.shallowMerge(v)},[x]),deepMerge:(0,import_react2.useCallback)(v=>{x.deepMerge(v)},[x]),remove:(0,import_react2.useCallback)((v,y)=>{x.remove(v,y)},[x]),insertAdjacent:(0,import_react2.useCallback)((v,y,S)=>{x.insertAdjacent(v,y,S)},[x]),insertBeforeBegin:(0,import_react2.useCallback)(v=>{x.insertBeforeBegin(v)},[x]),insertAfterBegin:(0,import_react2.useCallback)(v=>{x.insertAfterBegin(v)},[x]),insertBeforeEnd:(0,import_react2.useCallback)(v=>{x.insertBeforeEnd(v)},[x]),insertAfterEnd:(0,import_react2.useCallback)(v=>{x.insertAfterEnd(v)},[x])}}const DefaultSchemaToolbar=()=>null;DefaultSchemaToolbar.isNullComponent=!0;const useDesigner=()=>{const{designable:e}=useDesignable(),t=(0,import_react.useFieldSchema)(),o=(0,import_react2.useMemo)(()=>t["x-designer"]||t["x-toolbar"]?t["x-designer"]||t["x-toolbar"]:t["x-settings"]?SchemaToolbar:DefaultSchemaToolbar,[t]),r=useComponent(o);return e&&r||DefaultSchemaToolbar},useFieldProps$1=e=>{const t=(0,import_react2.useContext)(import_react.SchemaOptionsContext),o=(0,import_react2.useContext)(import_react.SchemaExpressionScopeContext),r=(0,import_react2.useRef)();return r.current=o,e.toFieldProps(k(f({},t),{get scope(){return f(f({},t.scope),r.current)}}))};function useSchemaComponentContext(){return(0,import_react2.useContext)(SchemaComponentContext)}const useFieldComponentOptions=()=>{var e;const{getCollectionJoinField:t,getCollection:o}=useCollectionManager_deprecated(),r=(0,import_react.useFieldSchema)(),{getField:i}=useCollection_deprecated(),n=i(r.name)||t(r["x-collection-field"]),{t:l}=(0,import_react_i18next.useTranslation)(),{label:a}=((e=r["x-component-props"])==null?void 0:e.fieldNames)||{};return(0,import_react2.useMemo)(()=>{if(!n||!(n!=null&&n.interface)||!["o2o","oho","obo","o2m","linkTo","m2o","m2m"].includes(n.interface))return;const c=o(n.target);if((c==null?void 0:c.template)==="file")return[{label:l("Record picker"),value:"CollectionField"},{label:l("Select"),value:"AssociationSelect"}];switch(n.interface){case"o2m":return[{label:l("Record picker"),value:"CollectionField"},{label:l("Subtable"),value:"TableField"},{label:l("Select"),value:"AssociationSelect"}];case"m2o":case"m2m":case"linkTo":return[{label:l("Record picker"),value:"CollectionField"},{label:l("Select"),value:"AssociationSelect"}];default:return[{label:l("Record picker"),value:"CollectionField"},{label:l("Subform"),value:"FormField"},{label:l("Select"),value:"AssociationSelect"}]}},[l,n==null?void 0:n.interface,a])},useFieldTitle=()=>{var e;const t=(0,import_react.useField)(),o=(0,import_react.useFieldSchema)(),r=useCollection(),i=useCollectionManager(),n=(r==null?void 0:r.getField(o.name))||(i==null?void 0:i.getCollectionField(o["x-collection-field"])),l=useCompile();(0,import_react2.useEffect)(()=>{var a;t!=null&&t.title||(t.title=l((a=n==null?void 0:n.uiSchema)==null?void 0:a.title))},[(e=n==null?void 0:n.uiSchema)==null?void 0:e.title])},useDef$4=()=>({}),useProps=(e={})=>{const t=e,{useProps:o=useDef$4}=t,r=Y(t,["useProps"]);let i=o;typeof o!="function"&&(i=useDef$4);const n=i();return f(f({},r),n)};function useParsedFilter({filterOption:e,onFilterChange:t}){const{parseFilter:o,findVariable:r}=useParseDataScopeFilter(),[i,n]=(0,import_react2.useState)({}),[l,a]=(0,import_react2.useState)(!!e);return(0,import_react2.useEffect)(()=>{if(!e)return;const c=()=>O(this,null,function*(){a(!0);const d=yield o(e);a(!1),n(d),t==null||t(d)});c();const u=import_lodash.default.debounce(c,DEBOUNCE_WAIT);(0,import_reactive.reaction)(()=>(0,import_client.flatten)(e,{breakOn({key:d}){return d.startsWith("$")&&d!=="$and"&&d!=="$or"},transformValue(d){if(!isVariable$1(d))return d;const m=getVariableName(d),p=r(m);let h=null;const g=getPath(d).split(".");return g.forEach((x,_)=>{const v=g.slice(0,_+1).join("."),y=(0,import_client.getValuesByPath)({[m]:(p==null?void 0:p.ctx)||{}},v);import_lodash.default.isEmpty(y)||(h=y)}),h}}),u,{equals:import_lodash.default.isEqual})},[JSON.stringify(e),o,r]),{filter:i,parseVariableLoading:l}}const useParentRecordCommon=e=>{const t=useCollectionRecordData();if(e)return t},useTableBlockDecoratorProps=e=>{var t;const{params:o,parseVariableLoading:r}=useTableBlockParams(e),i=useParentRecordCommon(e.association),n=(t=useDataSourceManager().getDataSource(e.dataSource))==null?void 0:t.collectionManager.getCollection(e.collection);return{params:o,parentRecord:i,parseVariableLoading:r,rowKey:(n==null?void 0:n.filterTargetKey)||"id"}};function useTableBlockParams(e){var t;const o=(0,import_react.useFieldSchema)(),{filter:r,parseVariableLoading:i}=useParsedFilter({filterOption:(t=e.params)==null?void 0:t.filter});return{params:(0,import_react2.useMemo)(()=>{const n=e.params||{},{dragSortBy:l}=(o==null?void 0:o["x-decorator-props"])||{};return e.dragSort&&l&&(n.sort=l),k(f({},n),{filter:r})},[o,r,e.dragSort,e.params]),parseVariableLoading:i}}const key="__isNewRecord__",isNewRecord=e=>(0,import_reactive.untracked)(()=>!!(e!=null&&e[key])),markRecordAsNew=e=>{if(!(0,import_lodash.isObject)(e))throw new Error("markRecordAsNew: record must be an object");return e[key]=!0,e},useDefaultLoading=()=>{var e;return!!((e=useDataBlockRequest())!=null&&e.loading)},withSkeletonComponent=(e,t)=>{const{useLoading:o=useDefaultLoading,displayName:r,SkeletonComponent:i=import_antd.Skeleton}=t||{},n=import_react2.default.memo(l=>{const a=o(),c=(0,import_react2.useRef)(!1),u=(0,import_react2.useDeferredValue)(a);return!c.current&&u?(0,import_jsx_runtime.jsx)(i,{}):(c.current=!0,(0,import_jsx_runtime.jsx)(e,f({},l)))});return n.displayName=r||`${e.displayName}(withSkeletonComponent)`||`${e.name}(withSkeletonComponent)`,n},getActionValue=(e,t)=>{const o=r=>(r==null?void 0:r.mode)==="constant"?r.value:null;switch(!0){case[ActionType.Color,ActionType.BackgroundColor,ActionType.TextAlign,ActionType.FontSize,ActionType.FontWeight,ActionType.FontStyle].includes(e):return o(t);default:return null}},getSatisfiedActions=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield Promise.all(o.filter(l=>!l.disabled).map(l=>O(void 0,null,function*(){return(yield conditionAnalyses({ruleGroup:l.condition,variables:r,localVariables:i,conditionType:l.conditionType},n))?l:null})))).filter(Boolean).map(l=>l.actions).flat()}),getSatisfiedValues=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedActions({rules:o,variables:r,localVariables:i},n)).map(l=>k(f({},l),{value:getActionValue(l.operator,l.value)}))}),getSatisfiedValueMap=(e,t)=>O(void 0,[e,t],function*({rules:o,variables:r,localVariables:i},n){return(yield getSatisfiedValues({rules:o,variables:r,localVariables:i},n)).reduce((l,a)=>k(f({},l),{[a.operator]:a.value}),{})});function useSatisfiedActionValues({formValues:e,category:t="default",rules:o,schema:r,form:i}){const[n,l]=(0,import_react2.useState)({}),a=(0,import_react.useFieldSchema)(),c=useVariables$1(),u=useLocalVariables$1({currentForm:{values:e}}),d=r??a,m=o??(d[LinkageRuleDataKeyMap[t]]||(d==null?void 0:d.parent[LinkageRuleDataKeyMap[t]])),p=useApp(),h=(0,import_react2.useCallback)(()=>{m&&e&&getSatisfiedValueMap({rules:m,variables:c,localVariables:u},p.jsonLogic).then(g=>{(0,import_lodash.isEmpty)(g)?l({}):l(g)}).catch(g=>{throw new Error(g.message)})},[c,u,m,e]);return(0,import_react2.useEffect)(()=>{if(h(),i){const g=(0,import_shared.uid)();return i.addEffects(g,()=>{(0,import_core.onFormValuesChange)(()=>{h()})}),()=>{i.removeEffects(g)}}},[i,h,e]),{valueMap:n}}const GetStyleRules=import_react2.default.memo(({record:e,schema:t,onStyleChange:o})=>{const{valueMap:r}=useSatisfiedActionValues({formValues:e,category:"style",schema:t});return(0,import_react2.useEffect)(()=>{o(r)},[o,r]),null});GetStyleRules.displayName="GetStyleRules";const opacityStyle={opacity:.5},containerStyle={position:"relative"},spinStyle={display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",left:0,right:0,height:"100%",maxHeight:400,zIndex:1e3},displayNone$3={display:"none"},HighPerformanceSpin=import_react2.default.memo(e=>(0,import_jsx_runtime.jsxs)("div",{style:containerStyle,children:[(0,import_jsx_runtime.jsx)(import_antd.Spin,k(f({},import_lodash.default.omit(e,"children")),{style:e.spinning?spinStyle:displayNone$3})),(0,import_jsx_runtime.jsx)("div",{style:e.spinning?opacityStyle:null,children:e.children})]}));HighPerformanceSpin.displayName="HighPerformanceSpin";var FilterBlockType=(e=>(e[e.FORM=0]="FORM",e[e.TABLE=1]="TABLE",e[e.TREE=2]="TREE",e[e.COLLAPSE=3]="COLLAPSE",e))(FilterBlockType||{});const mergeFilter=(e,t="$and")=>{const o=e.filter(r=>{if(r&&typeof r=="object"&&!Array.isArray(r))return Object.values(r).filter(i=>i!==void 0).length});return o.length===0?{}:o.length===1?o[0]:{[t]:o}},getSupportFieldsByAssociation=(e,t)=>{var o;return(o=t.associatedFields)==null?void 0:o.filter(r=>e==null?void 0:e.some(i=>i===r.target))},getSupportFieldsByForeignKey=(e,t)=>{var o;return(o=t.foreignKeyFields)==null?void 0:o.filter(r=>e.fields.some(i=>i.type!=="belongsTo"&&i.foreignKey===r.name&&i.target===r.collectionName))},useSupportedBlocks=e=>{const{getDataBlocks:t}=useFilterBlock(),o=(0,import_react.useFieldSchema)(),r=useCollection(),{getAllCollectionsInheritChain:i}=useAllCollectionsInheritChainGetter();if(e===0||e===3)return t().filter(n=>isSameCollection(n.collection,r));if(e===1||e===2)return t().filter(n=>{var l,a;return o["x-uid"]!==n.uid&&(isSameCollection(n.collection,r)||((l=getSupportFieldsByAssociation(i(r.name,r.dataSource),n))==null?void 0:l.length)||((a=getSupportFieldsByForeignKey(r,n))==null?void 0:a.length))})},transformToFilter=(e,t,o,r)=>(e=(0,import_client.flatten)(e,{breakOn({value:i,path:n}){if(["$match","$notMatch","$anyOf","$noneOf","$childIn","$childNotIn","$dateBetween","$in","$notIn"].includes(t[n]))return!0;const l=o(`${r}.${n}`);if(["datetime","datetimeNoTz","date","unixTimestamp","createdAt","updatedAt"].includes(l==null?void 0:l.interface))return!0;if(l!=null&&l.target){if(Array.isArray(i))return!0;const a=l.targetKey||"id";if(i&&i[a]!=null)return!0}return!1}}),{$and:Object.keys(e).map(i=>{let n=import_lodash.default.get(e,i);const l=o(`${r}.${i}`);return l!=null&&l.target&&["hasOne","hasMany","belongsTo","belongsToMany","belongsToArray"].includes(l.type)&&(n=(0,import_client.getValuesByPath)(n,l.targetKey||"id"),i=`${i}.${l.targetKey||"id"}`,(l==null?void 0:l.interface)==="chinaRegion"&&(n=import_lodash.default.last(n))),!n&&n!==0&&n!==!1?null:{[i]:{[t[i]||"$eq"]:n}}}).filter(Boolean)}),useAssociatedFields=()=>{var e;return((e=useCollection())==null?void 0:e.fields.filter(t=>isAssocField(t)))||[]},isAssocField=e=>["o2o","oho","obo","m2o","createdBy","updatedBy","o2m","m2m","linkTo","chinaRegion","mbm"].includes(e==null?void 0:e.interface),isSameCollection=(e,t)=>e.name===t.name&&e.dataSource===t.dataSource,useFilterAPI=()=>{const e=(0,import_react.useFieldSchema)(),{getDataBlocks:t}=useFilterBlock(),{targets:o,uid:r}=findFilterTargets(e),i=t(),[n,l]=(0,import_react2.useState)(()=>o&&o.some(u=>i.some(d=>d.uid===u.uid))),a=Object.keys(o||{});(0,import_react2.useEffect)(()=>{l(o&&o.some(u=>i.some(d=>d.uid===u.uid)))},[a.length,o,i]);const c=(0,import_react2.useCallback)((u,d="id",m="$eq")=>{const p=i.find(h=>h.uid===e.parent["x-uid"]);i.forEach(h=>{var g,x,_,v;let y=d;const S=o.find(j=>j.uid===h.uid);if(!S)return;import_lodash.default.isFunction(u)&&(u=u(S,h,getSourceKey$1(p,S.field))),import_lodash.default.isFunction(d)&&(y=d(S,h)),import_lodash.default.isFunction(m)&&(m=m(S));const b=((g=h.service.params)==null?void 0:g[0])||{},C=((_=(x=h.service.params)==null?void 0:x[1])==null?void 0:_.filters)||{};if(u!=null)C[r]={$and:[{[y]:{[m]:u}}]};else if((v=h.clearSelection)==null||v.call(h),delete C[r],h.dataLoadingMode==="manual")return h.clearData();const F=mergeFilter([...Object.values(C).map(j=>removeNullCondition(j)),h.defaultFilter]);h.doFilter(k(f({},b),{page:1,filter:F}),{filters:C})})},[i,o,r,e]);return{isConnected:n,doFilter:c}},isInFilterFormBlock=e=>{for(;e;){if(e["x-filter-targets"])return e["x-decorator"]==="FilterFormBlockProvider";e=e.parent}return!1};function getSourceKey$1(e,t){var o,r,i;const n=(o=e==null?void 0:e.associatedFields)==null?void 0:o.find(l=>l.foreignKey===t);return(n==null?void 0:n.sourceKey)||((i=(r=t==null?void 0:t.split)==null?void 0:r.call(t,"."))==null?void 0:i[1])}const AssociationFieldContext=(0,import_react2.createContext)({});AssociationFieldContext.displayName="AssociationFieldContext";const useInsertSchema$1=e=>{const t=(0,import_react.useFieldSchema)(),{insertAfterBegin:o}=useDesignable(),{isMobileLayout:r}=useMobileLayout();return(0,import_react2.useCallback)(i=>{r||t.reduceProperties((n,l)=>l["x-component"]==="AssociationField."+e?l:n,null)||o((0,import_cloneDeep.default)(i))},[e,t,o,r])};function useAssociationFieldContext(){return(0,import_react2.useContext)(AssociationFieldContext)}function useServiceOptions$1(e){var t,o,r,i,n,l,a,c,u,d;const{action:m="list",service:p,useOriginalFilter:h}=e,g=(0,import_react.useFieldSchema)(),x=(0,import_react.useField)(),{getField:_}=useCollection_deprecated(),{getCollectionJoinField:v}=useCollectionManager_deprecated(),y=useRecord(),{isNew:S}=useCollectionRecord()||{},b=((0,import_lodash.isString)((r=(o=(t=g==null?void 0:g["x-component-props"])==null?void 0:t.service)==null?void 0:o.params)==null?void 0:r.filter)?(l=(n=(i=x.componentProps)==null?void 0:i.service)==null?void 0:n.params)==null?void 0:l.filter:(u=(c=(a=g==null?void 0:g["x-component-props"])==null?void 0:a.service)==null?void 0:c.params)==null?void 0:u.filter)||((d=p==null?void 0:p.params)==null?void 0:d.filter),{filter:C}=useParsedFilter({filterOption:b,onFilterChange:()=>{S&&x.reset()}}),F=(0,import_react2.useMemo)(()=>_(g.name)||v(g==null?void 0:g["x-collection-field"]),[g]),j=y==null?void 0:y[F==null?void 0:F.sourceKey],P=(0,import_react2.useMemo)(()=>{const T=["oho","o2m"].includes(F==null?void 0:F.interface);return mergeFilter([mergeFilter([T&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$is:null}}:null,C]),T&&j!==void 0&&j!==null&&!isInFilterFormBlock(g)&&F!=null&&F.foreignKey&&!h?{[F.foreignKey]:{$eq:j}}:null],"$or")},[F==null?void 0:F.interface,F==null?void 0:F.foreignKey,g,C,j,h]);return(0,import_react2.useMemo)(()=>k(f({resource:F==null?void 0:F.target,action:m},p),{params:k(f({},p==null?void 0:p.params),{filter:P})}),[F==null?void 0:F.target,m,P,p])}const useFieldNames$1=(e={})=>{var t,o,r,i,n;const l=(0,import_react.useFieldSchema)(),a=((i=(r=(o=(t=l["x-component-props"])==null?void 0:t.field)==null?void 0:o.uiSchema)==null?void 0:r["x-component-props"])==null?void 0:i.fieldNames)||((n=l["x-component-props"])==null?void 0:n.fieldNames)||e.fieldNames;return f({label:"label",value:"value"},a)},SubFormContext=(0,import_react2.createContext)(null);SubFormContext.displayName="SubFormContext";const SubFormProvider=e=>{const t=(0,import_react2.useContext)(SubFormContext),{value:o,collection:r,fieldSchema:i,parent:n,skip:l}=e.value,a=(0,import_react2.useMemo)(()=>import_lodash.default.omitBy({value:o,collection:r,fieldSchema:i,skip:l,parent:n||(t!=null&&t.skip?t.parent:t)},import_lodash.default.isUndefined),[o,r,i,l,n,t]);return(0,import_jsx_runtime.jsx)(SubFormContext.Provider,{value:a,children:e.children})},useSubFormValue=()=>{const{value:e,collection:t,fieldSchema:o,parent:r}=(0,import_react2.useContext)(SubFormContext)||{};return{formValue:e,collection:t,fieldSchema:o,parent:r}},TableUidContext=(0,import_react2.createContext)(null),useColumnSettings=e=>{const{t}=(0,import_react_i18next.useTranslation)(),o=(0,import_react2.useContext)(TableUidContext),r=`nocobase_table_column_settings_${o}`,i=(0,import_react2.useCallback)(()=>{try{const a=localStorage.getItem(r);return a?JSON.parse(a):null}catch(a){return console.warn("Failed to parse table column settings from localStorage:",a),null}},[r]),n=(0,import_react2.useCallback)(a=>{try{const c=JSON.stringify(a);localStorage.setItem(r,c);const u=new CustomEvent("nocobase-table-settings-changed",{detail:{key:r,tableId:o,settings:a}});window.dispatchEvent(u)}catch(c){console.warn("Failed to save table column settings to localStorage:",c),import_antd.message.error(t("Failed to save table settings"))}},[r,o,t]),l=(0,import_react2.useCallback)(()=>{try{localStorage.removeItem(r);const a=new CustomEvent("nocobase-table-settings-changed",{detail:{key:r,tableId:o,settings:null}});window.dispatchEvent(a)}catch(a){console.warn("Failed to clear table column settings from localStorage:",a),import_antd.message.error(t("Failed to clear table settings"))}},[r,o,t]);return{getSettings:i,saveSettings:n,clearSettings:l}},useTableColumnIntegration=(e,t=!0)=>{const o=(0,import_react2.useContext)(TableUidContext),{getSettings:r}=useColumnSettings(),[i,n]=(0,import_react2.useState)(0);(0,import_react2.useEffect)(()=>{const a=c=>{const{key:u,tableId:d}=c.detail;(u.includes(o)||d===o)&&n(m=>m+1)};return window.addEventListener("nocobase-table-settings-changed",a),()=>{window.removeEventListener("nocobase-table-settings-changed",a)}},[o]);const l=(0,import_react2.useMemo)(()=>r(),[r,i]);return{columns:(0,import_react2.useMemo)(()=>{if(!t||!l||l.length===0)return e;const a=new Map;l.forEach(p=>{a.set(p.key,p)});const c=e.map(p=>{const h=a.get(p.key);if(h){const g=p.columnHidden||!h.visible,x=h.width||p.width,_=h.fixed||p.fixed;return k(f({},p),{columnHidden:g,fixed:_,width:x,_orderIndex:h.order})}return p}),u=[],d=[];c.forEach(p=>{p._orderIndex!==void 0?u.push(p):d.push(p)}),u.sort((p,h)=>(p._orderIndex||0)-(h._orderIndex||0));const m=[...u,...d];return m.forEach(p=>{delete p._orderIndex}),m},[e,l])}},TableSkeleton=({rows:e=5,columns:t=6})=>{const{token:o}=useToken$1(),r=o.controlHeight*2.06,i=o.controlHeight*1.75,n=(0,import_react2.useMemo)(()=>import_css.css`
|
|
66
66
|
&.skeleton-wrapper {
|
|
67
67
|
width: 100%;
|
|
68
68
|
background: ${o.colorBgContainer};
|
|
@@ -1721,7 +1721,7 @@ https://requirejs.org/docs/errors.html#`+e);return i.requireType=e,i.requireModu
|
|
|
1721
1721
|
border-top-color: transparent;
|
|
1722
1722
|
background-color: transparent;
|
|
1723
1723
|
}
|
|
1724
|
-
`,children:"x"})})})]})},confirm$1=(0,import_flow_engine.defineAction)({name:"confirm",title:(0,import_flow_engine.tExpr)("Confirmation"),uiSchema:{enable:{type:"boolean",title:(0,import_flow_engine.tExpr)("Enable secondary confirmation"),"x-decorator":"FormItem","x-component":"Switch"},title:{type:"string",title:(0,import_flow_engine.tExpr)("Title"),"x-decorator":"FormItem","x-component":TextAreaWithContextSelector,"x-component-props":{rows:2}},content:{type:"string",title:(0,import_flow_engine.tExpr)("Content"),"x-decorator":"FormItem","x-component":TextAreaWithContextSelector,"x-component-props":{rows:3}}},defaultParams:{enable:!1,title:(0,import_flow_engine.tExpr)("Please Confirm"),content:(0,import_flow_engine.tExpr)("Are you sure you want to perform the action?")},handler(e,t){return O(this,null,function*(){t.enable&&((yield e.modal.confirm({title:e.t(t.title),content:e.t(t.content),okText:e.t("Confirm"),cancelText:e.t("Cancel")}))||e.exit())})}}),itemKeyMap=new WeakMap;let itemKeyCounter=0;const getFilterItemKey=e=>{let t=itemKeyMap.get(e);return t||(itemKeyCounter+=1,t=`filter-item-${itemKeyCounter}`,itemKeyMap.set(e,t)),t},FilterGroup=(0,import_flow_engine.observer)(e=>{const{token:t}=import_antd.theme.useToken(),{value:o={logic:"$and",items:[]},FilterItem:r,showBorder:i=!1,onRemove:n,onChange:l,closeIcon:a=(0,import_jsx_runtime.jsx)(import_icons.CloseCircleOutlined,{style:{color:t.colorIcon}})}=e,{t:c}=(0,import_react_i18next.useTranslation)();o.logic||(o.logic="$and"),Array.isArray(o.items)||(o.items=[]);const{logic:u,items:d}=o,m=i?{position:"relative",border:`1px dashed ${t.colorBorder}`,padding:t.paddingSM,marginBottom:t.marginXS,borderRadius:t.borderRadius}:{position:"relative",marginBottom:t.marginXS},p=y=>{o.logic=y,l==null||l(o)},h=()=>{d.push({path:"",operator:"",value:""}),l==null||l(o)},g=()=>{d.push({logic:"$and",items:[]}),l==null||l(o)},x=y=>{d.splice(y,1),l==null||l(o)},_=y=>"path"in y||"operator"in y||"value"in y,v=y=>"logic"in y&&"items"in y;return(0,import_jsx_runtime.jsxs)("div",{style:m,children:[i&&n&&(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{position:"absolute",right:10,top:10,cursor:"pointer",background:"transparent",border:0,padding:0},onClick:n,children:a}),(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,color:t.colorText},children:(0,import_jsx_runtime.jsxs)("span",{children:[c("Meet")," ",(0,import_jsx_runtime.jsxs)(import_antd.Select,{"data-testid":"filter-select-all-or-any",style:{width:"auto"},value:u,onChange:p,children:[(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:"$and",children:c("All")}),(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:"$or",children:c("Any")})]})," ",c("conditions in the group")]})}),(0,import_jsx_runtime.jsx)("div",{children:d.map((y,S)=>v(y)?(0,import_jsx_runtime.jsx)(FilterGroup,{value:y,FilterItem:r,showBorder:!0,onRemove:()=>x(S),onChange:b=>{d[S]=b,l==null||l(o)}},getFilterItemKey(y)):_(y)?r?(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsx)(r,{value:y}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)):(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsxs)("span",{children:[y.path," ",y.operator," ",String(y.value)]}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)):(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsx)("span",{style:{color:t.colorTextTertiary},children:"Invalid filter item"}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)))}),(0,import_jsx_runtime.jsxs)(import_antd.Space,{size:16,style:{marginTop:8,marginBottom:8},children:[(0,import_jsx_runtime.jsx)(import_antd.Button,{style:{padding:0},type:"link",size:"small",icon:(0,import_jsx_runtime.jsx)(import_icons.PlusOutlined,{}),onClick:h,children:c("Add condition")}),(0,import_jsx_runtime.jsx)(import_antd.Button,{style:{padding:0},type:"link",size:"small",icon:(0,import_jsx_runtime.jsx)(import_icons.PlusOutlined,{}),onClick:g,children:c("Add condition group")})]})]})},{displayName:"FilterGroup"}),FilterContainer=(0,import_flow_engine.observer)(e=>{var t;const{value:o,FilterItem:r,ctx:i}=e;o.logic||(o.logic="$and"),Array.isArray(o.items)||(o.items=[]);const n=()=>{var c;(c=i==null?void 0:i.model)!=null&&c.dispatchEvent&&i.model.dispatchEvent("reset")},l=()=>{var c;(c=i==null?void 0:i.model)!=null&&c.dispatchEvent&&i.model.dispatchEvent("submit")},a=((t=i==null?void 0:i.model)==null?void 0:t.translate)||(c=>c);return(0,import_jsx_runtime.jsxs)("form",{onSubmit:c=>{c.preventDefault(),l()},children:[(0,import_jsx_runtime.jsx)(FilterGroup,{value:o,FilterItem:r}),(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:[(0,import_jsx_runtime.jsx)(import_antd.Button,{htmlType:"button",onClick:n,children:a("Reset")}),(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",htmlType:"submit",children:a("Submit")})]})]})},{displayName:"FilterContent"}),fieldsToOptions=(e,t,o,r)=>e.map(i=>field2option(i,t,o,r)).filter(Boolean),field2option=(e,t,o,r)=>{var i;if(o.length&&t===1&&o.includes(e.name)||!e.interface||e.filterable===!1)return;const n=e.getInterfaceOptions();if(!(n!=null&&n.filterable))return;const{nested:l,children:a,operators:c}=n.filterable,u={name:e.name,type:e.type,target:e.target,title:r(e.title),schema:e==null?void 0:e.uiSchema,operators:(((i=c==null?void 0:c.filter)==null?void 0:i.call(c,d=>!(d!=null&&d.visible)||d.visible(e)))||[]).map(d=>k(f({},d),{label:r(d.label)}))};if(!(e.target&&t>2)){if(t>2)return u;if(a!=null&&a.length&&(u.children=a),l){const d=e.getFields().filter(p=>p.target!=="attachments"&&p.interface!=="formula"),m=fieldsToOptions(d,t+1,o,r).filter(Boolean);u.children=u.children||[],u.children.push(...m)}return u}},FilterItem=(0,import_flow_engine.observer)(e=>{var t;const{path:o,operator:r,value:i}=e.value,n=e.model,l=((t=n.context.blockModel.collection)==null?void 0:t.getFields().filter(g=>g.target!=="attachments"))||[],a=getIgnoreFieldsNames(n.props.filterableFieldNames||[],l.map(g=>g.name)),c=n.translate,u=fieldsToOptions(l.filter(g=>g.target!=="attachments"&&g.interface!=="formula"&&!["belongsTo","belongsToMany","hasOne","hasMany","oho","obo","m2o","o2m","m2m"].includes(g.type)),1,e.noIgnore?[]:a,c).filter(Boolean),d=(0,import_react2.useMemo)(()=>{const g=u.find(x=>x.name===o);return(g==null?void 0:g.operators)||[]},[u,o]),m=g=>{var x;e.value.path=g;const _=u.find(v=>v.name===g);((x=_==null?void 0:_.operators)==null?void 0:x.length)>0?e.value.operator=_.operators[0].value:e.value.operator="",e.value.value=""},p=g=>{e.value.operator=g},h=g=>{e.value.value=g.target.value};return(0,import_jsx_runtime.jsxs)(import_antd.Space,{children:[(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:200},placeholder:c("Select field"),value:o||void 0,onChange:m,children:u.map(g=>(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:g.name,children:g.title},g.name))}),(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:120},placeholder:c("Select operator"),value:r||void 0,onChange:p,disabled:!o||d.length===0,children:d.map(g=>(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:g.value,children:g.label},g.value))}),(0,import_jsx_runtime.jsx)(import_antd.Input,{style:{width:200},placeholder:c("Enter value"),value:i,onChange:h})]})},{displayName:"FilterItem"});function getIgnoreFieldsNames(e,t){return t==null?void 0:t.filter(o=>!e.includes(o))}function normalizeUiSchemaEnumToOptions(e=[]){return Array.isArray(e)?e.map(t=>{var o;if(t&&typeof t=="object"&&!Array.isArray(t)){const r=t,i=typeof r.label<"u",n=typeof r.value<"u",l=i?r.label:String((o=r.value)!=null?o:""),a=n?r.value:l,c={label:l,value:a};return r.color&&(c.color=r.color),r.icon&&(c.icon=r.icon),c}return{label:String(t),value:t}}):[]}function translateOptions(e=[],t){return Array.isArray(e)?e.map(o=>typeof(o==null?void 0:o.label)=="string"?k(f({},o),{label:t(o.label)}):o):[]}function enumToOptions(e,t){if(!e||!Array.isArray(e)||e.length===0)return;const o=normalizeUiSchemaEnumToOptions(e);return translateOptions(o,t)}function ensureOptionsFromUiSchemaEnumIfAbsent(e,t){var o,r,i,n;const l=t==null?void 0:t.interface;if(!["radioGroup","checkboxGroup","select","multipleSelect"].includes(l)||Array.isArray((o=e.props)==null?void 0:o.options)&&((i=(r=e.props)==null?void 0:r.options)==null?void 0:i.length)>0)return!1;const a=(n=t.uiSchema)==null?void 0:n.enum;if(!Array.isArray(a)||a.length===0)return!1;const c=normalizeUiSchemaEnumToOptions(a);return c.length?(e.setProps({options:c}),!0):!1}const FilterRangePicker=e=>{const{value:t,picker:o="date",format:r,showTime:i,timeFormat:n}=e,l=(0,import_flow_engine.useFlowEngine)(),a=l.translate.bind(l),c=getDateRanges(),u=[{label:a("Today"),value:c.today},{label:a("Last week"),value:c.lastWeek},{label:a("This week"),value:c.thisWeek},{label:a("Next week"),value:c.nextWeek},{label:a("Last month"),value:c.lastMonth},{label:a("This month"),value:c.thisMonth},{label:a("Next month"),value:c.nextMonth},{label:a("Last quarter"),value:c.lastQuarter},{label:a("This quarter"),value:c.thisQuarter},{label:a("Next quarter"),value:c.nextQuarter},{label:a("Last year"),value:c.lastYear},{label:a("This year"),value:c.thisYear},{label:a("Next year"),value:c.nextYear},{label:a("Last 7 days"),value:c.last7Days},{label:a("Next 7 days"),value:c.next7Days},{label:a("Last 30 days"),value:c.last30Days},{label:a("Next 30 days"),value:c.next30Days},{label:a("Last 90 days"),value:c.last90Days},{label:a("Next 90 days"),value:c.next90Days}],d=t?inferPickerType(t==null?void 0:t[0],o):o,m=r||(0,import_client.getPickerFormat)(d),p=k(f({utc:!0,presets:u},e),{format:(0,import_client.getDateTimeFormat)(d,m,i,n),picker:d,showTime:i?{defaultValue:[(0,import_client.dayjs)("00:00:00","HH:mm:ss"),(0,import_client.dayjs)("23:59:59","HH:mm:ss")]}:!1}),h=(0,import_react2.useMemo)(()=>import_lodash.default.castArray(e.value).map(g=>g?(0,import_client.dayjs)(g):null),[e.value]);return(0,import_jsx_runtime.jsx)(import_antd.DatePicker.RangePicker,k(f({},p),{style:f({flex:1},p==null?void 0:p.style),value:h}))},FilterDatePicker=e=>{const{picker:t="date",format:o,showTime:r,timeFormat:i,onChange:n}=e,l=(0,import_flow_engine.useFlowContext)(),a=Array.isArray(e.value)?e.value[0]:e.value,c=a?inferPickerType(a,t):t,[u,d]=(0,import_react2.useState)(c),m=o||(0,import_client.getPickerFormat)(c),p=l.model.translate.bind(l.model),h=k(f({utc:!0,inputReadOnly:l.isMobileLayout},e),{underFilter:!0,showTime:r?{defaultValue:(0,import_client.dayjs)("00:00:00","HH:mm:ss")}:!1,format:(0,import_client.getDateTimeFormat)(u,m,r,i),picker:u}),[g,x]=(0,import_react2.useState)(h),_=(0,import_react2.useMemo)(()=>a?(0,import_client.dayjs)(a):null,[a]);return(0,import_jsx_runtime.jsxs)(import_antd.Space.Compact,{style:{width:"100%"},children:[(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:"100px"},popupMatchSelectWidth:!1,value:u,options:[{label:p("Date"),value:"date"},{label:p("Month"),value:"month"},{label:p("Quarter"),value:"quarter"},{label:p("Year"),value:"year"}],onChange:v=>{d(v);const y=o||(0,import_client.getPickerFormat)(v),S=(0,import_client.getDateTimeFormat)(v,y,r,i);if(h.picker=v,h.format=S,x(h),!a||!n)return;const b=(0,import_client.dayjs)(a);b.isValid()&&n(b.format(S))}}),(0,import_jsx_runtime.jsx)(import_antd.DatePicker,k(f({},g),{style:f({flex:1},g==null?void 0:g.style),value:_}))]})},getOptions=e=>[{value:"exact",label:e("Exact day")},{value:"past",label:e("Past")},{value:"next",label:e("Next")},{value:"today",label:e("Today")},{value:"yesterday",label:e("Yesterday")},{value:"tomorrow",label:e("Tomorrow")},{value:"thisWeek",label:e("This Week")},{value:"lastWeek",label:e("Last Week")},{value:"nextWeek",label:e("Next Week")},{value:"thisMonth",label:e("This Month")},{value:"lastMonth",label:e("Last Month")},{value:"nextMonth",label:e("Next Month")},{value:"thisQuarter",label:e("This Quarter")},{value:"lastQuarter",label:e("Last Quarter")},{value:"nextQuarter",label:e("Next Quarter")},{value:"thisYear",label:e("This Year")},{value:"lastYear",label:e("Last Year")},{value:"nextYear",label:e("Next Year")}],SmartDatePicker=e=>{const t=e,{isRange:o,defaultValue:r,onChange:i}=t,n=Y(t,["isRange","defaultValue","onChange"]),l=(0,import_react2.useCallback)((a,c)=>i(c),[i]);return o?(0,import_jsx_runtime.jsx)(FilterRangePicker,k(f({},n),{onChange:l})):(0,import_jsx_runtime.jsx)(FilterDatePicker,k(f({},n),{onChange:l}))},DateFilterDynamicComponent=e=>{const{value:t,onChange:o}=e,r=(0,import_flow_engine.useFlowEngine)(),i=r.translate.bind(r),{token:n}=import_antd.theme.useToken(),[l,a]=(0,import_react2.useState)(!1),c=(0,import_react2.useMemo)(()=>getOptions(i),[i]),u=m=>{if(a(!1),m==="exact")return o(void 0);const p={type:m};["past","next"].includes(m)&&(p.number=1,p.unit="day"),o(p)},d=()=>{const m=c.slice(0,3),p=c.slice(3),h=import_css.css`
|
|
1724
|
+
`,children:"x"})})})]})},confirm$1=(0,import_flow_engine.defineAction)({name:"confirm",title:(0,import_flow_engine.tExpr)("Confirmation"),uiSchema:{enable:{type:"boolean",title:(0,import_flow_engine.tExpr)("Enable secondary confirmation"),"x-decorator":"FormItem","x-component":"Switch"},title:{type:"string",title:(0,import_flow_engine.tExpr)("Title"),"x-decorator":"FormItem","x-component":TextAreaWithContextSelector,"x-component-props":{rows:2}},content:{type:"string",title:(0,import_flow_engine.tExpr)("Content"),"x-decorator":"FormItem","x-component":TextAreaWithContextSelector,"x-component-props":{rows:3}}},defaultParams:{enable:!1,title:(0,import_flow_engine.tExpr)("Please Confirm"),content:(0,import_flow_engine.tExpr)("Are you sure you want to perform the action?")},handler(e,t){return O(this,null,function*(){t.enable&&((yield e.modal.confirm({title:e.t(t.title),content:e.t(t.content),okText:e.t("Confirm"),cancelText:e.t("Cancel")}))||e.exit())})}}),itemKeyMap=new WeakMap;let itemKeyCounter=0;const getFilterItemKey=e=>{let t=itemKeyMap.get(e);return t||(itemKeyCounter+=1,t=`filter-item-${itemKeyCounter}`,itemKeyMap.set(e,t)),t},FilterGroup=(0,import_flow_engine.observer)(e=>{const{token:t}=import_antd.theme.useToken(),{value:o={logic:"$and",items:[]},FilterItem:r,showBorder:i=!1,onRemove:n,onChange:l,closeIcon:a=(0,import_jsx_runtime.jsx)(import_icons.CloseCircleOutlined,{style:{color:t.colorIcon}})}=e,{t:c}=(0,import_react_i18next.useTranslation)();o.logic||(o.logic="$and"),Array.isArray(o.items)||(o.items=[]);const{logic:u,items:d}=o,m=i?{position:"relative",border:`1px dashed ${t.colorBorder}`,padding:t.paddingSM,marginBottom:t.marginXS,borderRadius:t.borderRadius}:{position:"relative",marginBottom:t.marginXS},p=y=>{o.logic=y,l==null||l(o)},h=()=>{d.push({path:"",operator:"",value:""}),l==null||l(o)},g=()=>{d.push({logic:"$and",items:[]}),l==null||l(o)},x=y=>{d.splice(y,1),l==null||l(o)},_=y=>"path"in y||"operator"in y||"value"in y,v=y=>"logic"in y&&"items"in y;return(0,import_jsx_runtime.jsxs)("div",{style:m,children:[i&&n&&(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{position:"absolute",right:10,top:10,cursor:"pointer",background:"transparent",border:0,padding:0},onClick:n,children:a}),(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,color:t.colorText},children:(0,import_jsx_runtime.jsxs)("span",{children:[c("Meet")," ",(0,import_jsx_runtime.jsxs)(import_antd.Select,{"data-testid":"filter-select-all-or-any",style:{width:"auto"},value:u,onChange:p,children:[(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:"$and",children:c("All")}),(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:"$or",children:c("Any")})]})," ",c("conditions in the group")]})}),(0,import_jsx_runtime.jsx)("div",{children:d.map((y,S)=>v(y)?(0,import_jsx_runtime.jsx)(FilterGroup,{value:y,FilterItem:r,showBorder:!0,onRemove:()=>x(S),onChange:b=>{d[S]=b,l==null||l(o)}},getFilterItemKey(y)):_(y)?r?(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsx)(r,{value:y}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)):(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsxs)("span",{children:[y.path," ",y.operator," ",String(y.value)]}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)):(0,import_jsx_runtime.jsx)("div",{style:{marginBottom:8,display:"flex",alignItems:"flex-end"},children:(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{flex:1,minWidth:0},children:[(0,import_jsx_runtime.jsx)("span",{style:{color:t.colorTextTertiary},children:"Invalid filter item"}),(0,import_jsx_runtime.jsx)("button",{type:"button","aria-label":"icon-close",style:{marginLeft:8,marginRight:8,flex:"0 0 auto",cursor:"pointer",background:"transparent",border:0,padding:0},onClick:()=>x(S),children:a})]})},getFilterItemKey(y)))}),(0,import_jsx_runtime.jsxs)(import_antd.Space,{size:16,style:{marginTop:8,marginBottom:8},children:[(0,import_jsx_runtime.jsx)(import_antd.Button,{style:{padding:0},type:"link",size:"small",icon:(0,import_jsx_runtime.jsx)(import_icons.PlusOutlined,{}),onClick:h,children:c("Add condition")}),(0,import_jsx_runtime.jsx)(import_antd.Button,{style:{padding:0},type:"link",size:"small",icon:(0,import_jsx_runtime.jsx)(import_icons.PlusOutlined,{}),onClick:g,children:c("Add condition group")})]})]})},{displayName:"FilterGroup"}),FilterContainer=(0,import_flow_engine.observer)(e=>{var t;const{value:o,FilterItem:r,ctx:i}=e;o.logic||(o.logic="$and"),Array.isArray(o.items)||(o.items=[]);const n=()=>{var c;(c=i==null?void 0:i.model)!=null&&c.dispatchEvent&&i.model.dispatchEvent("reset")},l=()=>{var c;(c=i==null?void 0:i.model)!=null&&c.dispatchEvent&&i.model.dispatchEvent("submit")},a=((t=i==null?void 0:i.model)==null?void 0:t.translate)||(c=>c);return(0,import_jsx_runtime.jsxs)("form",{onSubmit:c=>{c.preventDefault(),l()},children:[(0,import_jsx_runtime.jsx)(FilterGroup,{value:o,FilterItem:r}),(0,import_jsx_runtime.jsxs)(import_antd.Space,{style:{width:"100%",display:"flex",justifyContent:"flex-end"},children:[(0,import_jsx_runtime.jsx)(import_antd.Button,{htmlType:"button",onClick:n,children:a("Reset")}),(0,import_jsx_runtime.jsx)(import_antd.Button,{type:"primary",htmlType:"submit",children:a("Submit")})]})]})},{displayName:"FilterContent"}),fieldsToOptions=(e,t,o,r)=>e.map(i=>field2option(i,t,o,r)).filter(Boolean),field2option=(e,t,o,r)=>{var i;if(o.length&&t===1&&o.includes(e.name)||!e.interface||e.filterable===!1)return;const n=e.getInterfaceOptions();if(!(n!=null&&n.filterable))return;const{nested:l,children:a,operators:c}=n.filterable,u={name:e.name,type:e.type,target:e.target,title:r(e.title),schema:e==null?void 0:e.uiSchema,operators:(((i=c==null?void 0:c.filter)==null?void 0:i.call(c,d=>!(d!=null&&d.visible)||d.visible(e)))||[]).map(d=>k(f({},d),{label:r(d.label)}))};if(!(e.target&&t>2)){if(t>2)return u;if(a!=null&&a.length&&(u.children=a),l){const d=e.getFields().filter(p=>p.target!=="attachments"&&p.interface!=="formula"),m=fieldsToOptions(d,t+1,o,r).filter(Boolean);u.children=u.children||[],u.children.push(...m)}return u}},FilterItem=(0,import_flow_engine.observer)(e=>{var t;const{path:o,operator:r,value:i}=e.value,n=e.model,l=((t=n.context.blockModel.collection)==null?void 0:t.getFields().filter(g=>g.target!=="attachments"))||[],a=getIgnoreFieldsNames(n.props.filterableFieldNames||[],l.map(g=>g.name)),c=n.translate,u=fieldsToOptions(l.filter(g=>g.target!=="attachments"&&g.interface!=="formula"&&!["belongsTo","belongsToMany","hasOne","hasMany","oho","obo","m2o","o2m","m2m"].includes(g.type)),1,e.noIgnore?[]:a,c).filter(Boolean),d=(0,import_react2.useMemo)(()=>{const g=u.find(x=>x.name===o);return(g==null?void 0:g.operators)||[]},[u,o]),m=g=>{var x;e.value.path=g;const _=u.find(v=>v.name===g);((x=_==null?void 0:_.operators)==null?void 0:x.length)>0?e.value.operator=_.operators[0].value:e.value.operator="",e.value.value=""},p=g=>{e.value.operator=g},h=g=>{e.value.value=g.target.value};return(0,import_jsx_runtime.jsxs)(import_antd.Space,{children:[(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:200},placeholder:c("Select field"),value:o||void 0,onChange:m,children:u.map(g=>(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:g.name,children:g.title},g.name))}),(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:120},placeholder:c("Select operator"),value:r||void 0,onChange:p,disabled:!o||d.length===0,children:d.map(g=>(0,import_jsx_runtime.jsx)(import_antd.Select.Option,{value:g.value,children:g.label},g.value))}),(0,import_jsx_runtime.jsx)(import_antd.Input,{style:{width:200},placeholder:c("Enter value"),value:i,onChange:h})]})},{displayName:"FilterItem"});function getIgnoreFieldsNames(e,t){return t==null?void 0:t.filter(o=>!e.includes(o))}function normalizeUiSchemaEnumToOptions(e=[]){return Array.isArray(e)?e.map(t=>{var o;if(t&&typeof t=="object"&&!Array.isArray(t)){const r=t,i=typeof r.label<"u",n=typeof r.value<"u",l=i?r.label:String((o=r.value)!=null?o:""),a=n?r.value:l,c={label:l,value:a};return r.color&&(c.color=r.color),r.icon&&(c.icon=r.icon),c}return{label:String(t),value:t}}):[]}function translateOptions(e=[],t){return Array.isArray(e)?e.map(o=>typeof(o==null?void 0:o.label)=="string"?k(f({},o),{label:t(o.label)}):o):[]}function enumToOptions(e,t){if(!e||!Array.isArray(e)||e.length===0)return;const o=normalizeUiSchemaEnumToOptions(e);return translateOptions(o,t)}function ensureOptionsFromUiSchemaEnumIfAbsent(e,t){var o,r,i,n;const l=t==null?void 0:t.interface;if(!["radioGroup","checkboxGroup","select","multipleSelect"].includes(l)||Array.isArray((o=e.props)==null?void 0:o.options)&&((i=(r=e.props)==null?void 0:r.options)==null?void 0:i.length)>0)return!1;const a=(n=t.uiSchema)==null?void 0:n.enum;if(!Array.isArray(a)||a.length===0)return!1;const c=normalizeUiSchemaEnumToOptions(a);return c.length?(e.setProps({options:c}),!0):!1}const stripTimeFromFormat$1=e=>e&&e.replace(/\s*HH?:mm(?::ss)?(?:\.SSS)?/g,"").trim(),parseDateValue$1=(e,t)=>{if(!e)return null;if(import_client.dayjs.isDayjs(e))return e;if(typeof e=="string"&&e.endsWith("Z")){const i=(0,import_client.dayjs)(e).format(t),n=(0,import_client.dayjs)(i,t);return n.isValid()?n:(0,import_client.dayjs)(e)}const o=(0,import_client.dayjs)(e,t);if(o.isValid())return o;const r=(0,import_client.dayjs)(e);return r.isValid()?r:null},FilterRangePicker=e=>{const{value:t,picker:o="date",format:r,showTime:i,timeFormat:n}=e,l=(0,import_flow_engine.useFlowEngine)(),a=l.translate.bind(l),c=getDateRanges(),u=[{label:a("Today"),value:c.today},{label:a("Last week"),value:c.lastWeek},{label:a("This week"),value:c.thisWeek},{label:a("Next week"),value:c.nextWeek},{label:a("Last month"),value:c.lastMonth},{label:a("This month"),value:c.thisMonth},{label:a("Next month"),value:c.nextMonth},{label:a("Last quarter"),value:c.lastQuarter},{label:a("This quarter"),value:c.thisQuarter},{label:a("Next quarter"),value:c.nextQuarter},{label:a("Last year"),value:c.lastYear},{label:a("This year"),value:c.thisYear},{label:a("Next year"),value:c.nextYear},{label:a("Last 7 days"),value:c.last7Days},{label:a("Next 7 days"),value:c.next7Days},{label:a("Last 30 days"),value:c.last30Days},{label:a("Next 30 days"),value:c.next30Days},{label:a("Last 90 days"),value:c.last90Days},{label:a("Next 90 days"),value:c.next90Days}],d=t?inferPickerType(t==null?void 0:t[0],o):o,m=d===o&&r?r:(0,import_client.getPickerFormat)(d),p=d==="date"?stripTimeFromFormat$1(m):m,h=(0,import_client.getDateTimeFormat)(d,p,i,n),g=k(f({utc:!0,presets:u},e),{format:h,picker:d,showTime:i?{defaultValue:[(0,import_client.dayjs)("00:00:00","HH:mm:ss"),(0,import_client.dayjs)("23:59:59","HH:mm:ss")]}:!1}),x=(0,import_react2.useMemo)(()=>import_lodash.default.castArray(e.value).map(_=>parseDateValue$1(_,h)),[e.value,h]);return(0,import_jsx_runtime.jsx)(import_antd.DatePicker.RangePicker,k(f({},g),{style:f({flex:1},g==null?void 0:g.style),value:x}))},stripTimeFromFormat=e=>e&&e.replace(/\s*HH?:mm(?::ss)?(?:\.SSS)?/g,"").trim(),parseDateValue=(e,t)=>{if(!e)return null;if(import_client.dayjs.isDayjs(e))return e;if(typeof e=="string"&&e.endsWith("Z")){const i=(0,import_client.dayjs)(e).format(t),n=(0,import_client.dayjs)(i,t);return n.isValid()?n:(0,import_client.dayjs)(e)}const o=(0,import_client.dayjs)(e,t);if(o.isValid())return o;const r=(0,import_client.dayjs)(e);return r.isValid()?r:null},FilterDatePicker=e=>{const{picker:t="date",format:o,showTime:r,timeFormat:i,onChange:n}=e,l=(0,import_flow_engine.useFlowContext)(),a=Array.isArray(e.value)?e.value[0]:e.value,c=a?inferPickerType(a,t):t,[u,d]=(0,import_react2.useState)(c),m=l.model.translate.bind(l.model),p=_=>{const v=_===t&&o?o:(0,import_client.getPickerFormat)(_),y=_==="date"?stripTimeFromFormat(v):v;return(0,import_client.getDateTimeFormat)(_,y,r,i)},h=(0,import_react2.useMemo)(()=>p(u),[o,t,r,u,i]),g=(0,import_react2.useMemo)(()=>parseDateValue(a,h),[a,h]),x=k(f({utc:!0,inputReadOnly:l.isMobileLayout},e),{underFilter:!0,showTime:r?{defaultValue:(0,import_client.dayjs)("00:00:00","HH:mm:ss")}:!1,format:h,picker:u});return(0,import_jsx_runtime.jsxs)(import_antd.Space.Compact,{style:{width:"100%"},children:[(0,import_jsx_runtime.jsx)(import_antd.Select,{style:{width:"100px"},popupMatchSelectWidth:!1,value:u,options:[{label:m("Date"),value:"date"},{label:m("Month"),value:"month"},{label:m("Quarter"),value:"quarter"},{label:m("Year"),value:"year"}],onChange:_=>{const v=p(_),y=h;if(d(_),!a||!n)return;const S=parseDateValue(a,y);!S||!S.isValid()||n(S,S.format(v))}}),(0,import_jsx_runtime.jsx)(import_antd.DatePicker,k(f({},x),{style:f({flex:1},x==null?void 0:x.style),value:g}))]})},getOptions=e=>[{value:"exact",label:e("Exact day")},{value:"past",label:e("Past")},{value:"next",label:e("Next")},{value:"today",label:e("Today")},{value:"yesterday",label:e("Yesterday")},{value:"tomorrow",label:e("Tomorrow")},{value:"thisWeek",label:e("This Week")},{value:"lastWeek",label:e("Last Week")},{value:"nextWeek",label:e("Next Week")},{value:"thisMonth",label:e("This Month")},{value:"lastMonth",label:e("Last Month")},{value:"nextMonth",label:e("Next Month")},{value:"thisQuarter",label:e("This Quarter")},{value:"lastQuarter",label:e("Last Quarter")},{value:"nextQuarter",label:e("Next Quarter")},{value:"thisYear",label:e("This Year")},{value:"lastYear",label:e("Last Year")},{value:"nextYear",label:e("Next Year")}],SmartDatePicker=e=>{const t=e,{isRange:o,defaultValue:r,onChange:i}=t,n=Y(t,["isRange","defaultValue","onChange"]),l=(0,import_react2.useCallback)((a,c)=>i(c),[i]);return o?(0,import_jsx_runtime.jsx)(FilterRangePicker,k(f({},n),{onChange:l})):(0,import_jsx_runtime.jsx)(FilterDatePicker,k(f({},n),{onChange:l}))},DateFilterDynamicComponent=e=>{const{value:t,onChange:o}=e,r=(0,import_flow_engine.useFlowEngine)(),i=r.translate.bind(r),{token:n}=import_antd.theme.useToken(),[l,a]=(0,import_react2.useState)(!1),c=(0,import_react2.useMemo)(()=>getOptions(i),[i]),u=m=>{if(a(!1),m==="exact")return o(void 0);const p={type:m};["past","next"].includes(m)&&(p.number=1,p.unit="day"),o(p)},d=()=>{const m=c.slice(0,3),p=c.slice(3),h=import_css.css`
|
|
1725
1725
|
padding: 3px 10px;
|
|
1726
1726
|
cursor: pointer;
|
|
1727
1727
|
white-space: nowrap;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nocobase/client",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.70",
|
|
4
4
|
"license": "AGPL-3.0",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.mjs",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"@formily/reactive-react": "^2.2.27",
|
|
29
29
|
"@formily/shared": "^2.2.27",
|
|
30
30
|
"@formily/validator": "^2.2.27",
|
|
31
|
-
"@nocobase/evaluators": "2.0.0-alpha.
|
|
32
|
-
"@nocobase/flow-engine": "2.0.0-alpha.
|
|
33
|
-
"@nocobase/sdk": "2.0.0-alpha.
|
|
34
|
-
"@nocobase/utils": "2.0.0-alpha.
|
|
31
|
+
"@nocobase/evaluators": "2.0.0-alpha.70",
|
|
32
|
+
"@nocobase/flow-engine": "2.0.0-alpha.70",
|
|
33
|
+
"@nocobase/sdk": "2.0.0-alpha.70",
|
|
34
|
+
"@nocobase/utils": "2.0.0-alpha.70",
|
|
35
35
|
"@tanstack/react-table": "^8.21.3",
|
|
36
36
|
"@types/tabulator-tables": "^6.2.6",
|
|
37
37
|
"acorn-jsx": "^5.3.2",
|
|
@@ -96,5 +96,5 @@
|
|
|
96
96
|
"dumi": "2.2.14",
|
|
97
97
|
"dumi-theme-nocobase": "^0.2.32"
|
|
98
98
|
},
|
|
99
|
-
"gitHead": "
|
|
99
|
+
"gitHead": "42556ed4b29d8410e104ffd8af4fa72c9b1bae7f"
|
|
100
100
|
}
|