@rytass/bpm-core-react 0.20.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +1 -1
  3. package/dist/approval-instance-list-page.css +1 -1
  4. package/dist/chunks/FormBuilderView-DjPGrOJ2.cjs +4 -0
  5. package/dist/chunks/FormBuilderView-DjPGrOJ2.cjs.map +1 -0
  6. package/dist/chunks/{FormBuilderView-CFRiw04B.js → FormBuilderView-WtC2iW5f.js} +667 -584
  7. package/dist/chunks/FormBuilderView-WtC2iW5f.js.map +1 -0
  8. package/dist/chunks/{FormRendererView-lYSaR8CQ.cjs → FormRendererView-B-xycC9S.cjs} +3 -3
  9. package/dist/chunks/{FormRendererView-lYSaR8CQ.cjs.map → FormRendererView-B-xycC9S.cjs.map} +1 -1
  10. package/dist/chunks/{FormRendererView-GfbVWEGa.js → FormRendererView-BcQKUi1A.js} +238 -238
  11. package/dist/chunks/{FormRendererView-GfbVWEGa.js.map → FormRendererView-BcQKUi1A.js.map} +1 -1
  12. package/dist/chunks/approval-instance-list-page-Bth7Raya.js +724 -0
  13. package/dist/chunks/approval-instance-list-page-Bth7Raya.js.map +1 -0
  14. package/dist/chunks/approval-instance-list-page-Dcvo6TrT.cjs +2 -0
  15. package/dist/chunks/approval-instance-list-page-Dcvo6TrT.cjs.map +1 -0
  16. package/dist/chunks/{categories-DQUtVEiV.cjs → categories-CyyqG6wG.cjs} +2 -2
  17. package/dist/chunks/{categories-DQUtVEiV.cjs.map → categories-CyyqG6wG.cjs.map} +1 -1
  18. package/dist/chunks/{categories-BAdxjNSA.js → categories-f7E-RJEc.js} +9 -9
  19. package/dist/chunks/{categories-BAdxjNSA.js.map → categories-f7E-RJEc.js.map} +1 -1
  20. package/dist/chunks/{compose-Bb5bUVFd.cjs → compose-BKUTsB2W.cjs} +2 -2
  21. package/dist/chunks/{compose-Bb5bUVFd.cjs.map → compose-BKUTsB2W.cjs.map} +1 -1
  22. package/dist/chunks/{compose-egQlRjuZ.js → compose-DZvIspW3.js} +4 -4
  23. package/dist/chunks/{compose-egQlRjuZ.js.map → compose-DZvIspW3.js.map} +1 -1
  24. package/dist/chunks/{delegations-CVmtpkRn.cjs → delegations-ClRCwD1I.cjs} +2 -2
  25. package/dist/chunks/{delegations-CVmtpkRn.cjs.map → delegations-ClRCwD1I.cjs.map} +1 -1
  26. package/dist/chunks/{delegations-9-yvWWws.js → delegations-CqND-Qtz.js} +5 -5
  27. package/dist/chunks/{delegations-9-yvWWws.js.map → delegations-CqND-Qtz.js.map} +1 -1
  28. package/dist/chunks/{delegations-CrfjsH94.cjs → delegations-D43VDSz1.cjs} +2 -2
  29. package/dist/chunks/{delegations-CrfjsH94.cjs.map → delegations-D43VDSz1.cjs.map} +1 -1
  30. package/dist/chunks/{delegations-CxnNvTCc.js → delegations-zisffLwk.js} +5 -5
  31. package/dist/chunks/{delegations-CxnNvTCc.js.map → delegations-zisffLwk.js.map} +1 -1
  32. package/dist/chunks/{designer-CZDlQ9Nf.js → designer-CWubIE69.js} +1425 -1412
  33. package/dist/chunks/designer-CWubIE69.js.map +1 -0
  34. package/dist/chunks/designer-C_m8DmMl.cjs +69 -0
  35. package/dist/chunks/designer-C_m8DmMl.cjs.map +1 -0
  36. package/dist/chunks/{detail-ByZV1XaI.js → detail-Bv90gvy0.js} +578 -577
  37. package/dist/chunks/detail-Bv90gvy0.js.map +1 -0
  38. package/dist/chunks/detail-DNzqesdI.cjs +5 -0
  39. package/dist/chunks/detail-DNzqesdI.cjs.map +1 -0
  40. package/dist/chunks/instance-error-message-BW464LRQ.cjs +2 -0
  41. package/dist/chunks/instance-error-message-BW464LRQ.cjs.map +1 -0
  42. package/dist/chunks/instance-error-message-CAP1vJhX.js +204 -0
  43. package/dist/chunks/instance-error-message-CAP1vJhX.js.map +1 -0
  44. package/dist/components/approval-instance-field-filter-controls.d.cts +12 -0
  45. package/dist/components/approval-instance-field-filter-controls.d.ts +12 -0
  46. package/dist/components/approval-instance-field-filters.d.cts +86 -0
  47. package/dist/components/approval-instance-field-filters.d.ts +86 -0
  48. package/dist/components/approval-instance-list-page.d.cts +4 -0
  49. package/dist/components/approval-instance-list-page.d.ts +4 -0
  50. package/dist/index.cjs +1 -1
  51. package/dist/index.js +1 -1
  52. package/dist/next/workflow-chat-route.cjs +2 -2
  53. package/dist/next/workflow-chat-route.cjs.map +1 -1
  54. package/dist/next/workflow-chat-route.js +13 -13
  55. package/dist/pages/admin/delegations/index.cjs +1 -1
  56. package/dist/pages/admin/delegations/index.js +1 -1
  57. package/dist/pages/delegations/index.cjs +1 -1
  58. package/dist/pages/delegations/index.js +1 -1
  59. package/dist/pages/instances/detail/index.cjs +1 -1
  60. package/dist/pages/instances/detail/index.js +1 -1
  61. package/dist/pages/templates/categories/index.cjs +1 -1
  62. package/dist/pages/templates/categories/index.js +1 -1
  63. package/dist/pages/templates/compose/index.cjs +1 -1
  64. package/dist/pages/templates/compose/index.js +1 -1
  65. package/dist/pages/templates/designer/index.cjs +1 -1
  66. package/dist/pages/templates/designer/index.js +1 -1
  67. package/dist/views/admin/delegations/index.cjs +1 -1
  68. package/dist/views/admin/delegations/index.js +1 -1
  69. package/dist/views/admin/index.cjs +1 -1
  70. package/dist/views/admin/index.js +1 -1
  71. package/dist/views/admin/webhook-endpoints/index.cjs +1 -1
  72. package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -1
  73. package/dist/views/admin/webhook-endpoints/index.js +60 -60
  74. package/dist/views/admin/webhook-endpoints/index.js.map +1 -1
  75. package/dist/views/cc/index.cjs +1 -1
  76. package/dist/views/cc/index.js +1 -1
  77. package/dist/views/delegations/index.cjs +1 -1
  78. package/dist/views/delegations/index.js +1 -1
  79. package/dist/views/forms/builder/FormBuilderView.d.cts +8 -1
  80. package/dist/views/forms/builder/FormBuilderView.d.ts +8 -1
  81. package/dist/views/forms/builder/index.cjs +1 -1
  82. package/dist/views/forms/builder/index.js +1 -1
  83. package/dist/views/forms/renderer/index.cjs +1 -1
  84. package/dist/views/forms/renderer/index.js +1 -1
  85. package/dist/views/instances/approver-filled-form.d.cts +8 -5
  86. package/dist/views/instances/approver-filled-form.d.ts +8 -5
  87. package/dist/views/instances/detail/index.cjs +1 -1
  88. package/dist/views/instances/detail/index.js +1 -1
  89. package/dist/views/instances/detail/sections/InstanceTasksSection.d.cts +2 -1
  90. package/dist/views/instances/detail/sections/InstanceTasksSection.d.ts +2 -1
  91. package/dist/views/instances/new/index.cjs +1 -1
  92. package/dist/views/instances/new/index.cjs.map +1 -1
  93. package/dist/views/instances/new/index.js +8 -8
  94. package/dist/views/instances/new/index.js.map +1 -1
  95. package/dist/views/search/index.cjs +1 -1
  96. package/dist/views/search/index.js +1 -1
  97. package/dist/views/sent/index.cjs +1 -1
  98. package/dist/views/sent/index.js +1 -1
  99. package/dist/views/templates/categories/index.cjs +1 -1
  100. package/dist/views/templates/categories/index.js +1 -1
  101. package/dist/views/templates/compose/index.cjs +1 -1
  102. package/dist/views/templates/compose/index.js +1 -1
  103. package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.cts +2 -0
  104. package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.ts +2 -0
  105. package/dist/views/templates/designer/index.cjs +1 -1
  106. package/dist/views/templates/designer/index.js +1 -1
  107. package/dist/views/templates/index.cjs +1 -1
  108. package/dist/views/templates/index.cjs.map +1 -1
  109. package/dist/views/templates/index.js +7 -7
  110. package/package.json +3 -3
  111. package/dist/chunks/FormBuilderView-CFRiw04B.js.map +0 -1
  112. package/dist/chunks/FormBuilderView-CpUgbSbt.cjs +0 -3
  113. package/dist/chunks/FormBuilderView-CpUgbSbt.cjs.map +0 -1
  114. package/dist/chunks/approval-instance-list-page-BnI4t5mD.js +0 -279
  115. package/dist/chunks/approval-instance-list-page-BnI4t5mD.js.map +0 -1
  116. package/dist/chunks/approval-instance-list-page-fqvmkBlg.cjs +0 -2
  117. package/dist/chunks/approval-instance-list-page-fqvmkBlg.cjs.map +0 -1
  118. package/dist/chunks/designer-CX9bhYJS.cjs +0 -69
  119. package/dist/chunks/designer-CX9bhYJS.cjs.map +0 -1
  120. package/dist/chunks/designer-CZDlQ9Nf.js.map +0 -1
  121. package/dist/chunks/detail-ByZV1XaI.js.map +0 -1
  122. package/dist/chunks/detail-ChseSF55.cjs +0 -5
  123. package/dist/chunks/detail-ChseSF55.cjs.map +0 -1
  124. package/dist/chunks/instance-error-message-DTARGbGo.cjs +0 -2
  125. package/dist/chunks/instance-error-message-DTARGbGo.cjs.map +0 -1
  126. package/dist/chunks/instance-error-message-q6gy5evy.js +0 -120
  127. package/dist/chunks/instance-error-message-q6gy5evy.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,37 @@
1
+ ## 0.21.0 (2026-11-11)
2
+
3
+ ### 🚀 Features
4
+
5
+ - **bpm-core-react:** place refused fill values on their fields by path ([0f26687](https://github.com/Rytass/BPMCore/commit/0f26687))
6
+ - **bpm-core-client:** expose refused form values on request errors ([3a5d406](https://github.com/Rytass/BPMCore/commit/3a5d406))
7
+ - **shared:** add structured form data issue contract ([827e26d](https://github.com/Rytass/BPMCore/commit/827e26d))
8
+ - **client:** add a filterable expense example list built on field filters ([3d624fb](https://github.com/Rytass/BPMCore/commit/3d624fb))
9
+ - **react:** filterable toggle in the form builder and list field filters ([e8d58bf](https://github.com/Rytass/BPMCore/commit/e8d58bf))
10
+ - **client:** pass field filters and sort to the approval-instance list ([bbfd789](https://github.com/Rytass/BPMCore/commit/bbfd789))
11
+ - **workflow-engine:** filter and sort approval instances by form fields ([6e4a98f](https://github.com/Rytass/BPMCore/commit/6e4a98f))
12
+ - **template:** refuse to enable a filterable field over conflicting history ([42628b4](https://github.com/Rytass/BPMCore/commit/42628b4))
13
+ - **shared:** declare filterable form fields and the field filter contract ([166389e](https://github.com/Rytass/BPMCore/commit/166389e))
14
+ - **designer:** explain an empty webhook catalog instead of hiding it ([61cb7bf](https://github.com/Rytass/BPMCore/commit/61cb7bf))
15
+ - **api:** add a staging notify webhook showcase pushed over SSE ([0cb3ea5](https://github.com/Rytass/BPMCore/commit/0cb3ea5))
16
+
17
+ ### 🩹 Fixes
18
+
19
+ - **client:** read form data issues all or nothing ([c0e4281](https://github.com/Rytass/BPMCore/commit/c0e4281))
20
+ - **react:** map Chinese fill errors back onto the fields they name ([23e1db8](https://github.com/Rytass/BPMCore/commit/23e1db8))
21
+ - **shared:** name the table, not a column, for a malformed filterable table ([c4b0420](https://github.com/Rytass/BPMCore/commit/c4b0420))
22
+ - **shared:** describe filterable value mismatches in Chinese ([afd27a7](https://github.com/Rytass/BPMCore/commit/afd27a7))
23
+ - **client:** name data-source values in case titles from the option snapshot ([14ade77](https://github.com/Rytass/BPMCore/commit/14ade77))
24
+ - **react:** name org units, not members, in an org-unit field filter ([0909d1b](https://github.com/Rytass/BPMCore/commit/0909d1b))
25
+ - **react:** skip the filterable-field check for a form without filterable fields ([1afd9a3](https://github.com/Rytass/BPMCore/commit/1afd9a3))
26
+
27
+ ### 🔥 Performance
28
+
29
+ - **template:** scan instances only for fields a publish newly makes filterable ([b18dda2](https://github.com/Rytass/BPMCore/commit/b18dda2))
30
+
31
+ ### ❤️ Thank You
32
+
33
+ - Chia Yu Pai @fantasywind
34
+
1
35
  ## 0.20.1 (2026-11-10)
2
36
 
3
37
  ### 🩹 Fixes
package/README.md CHANGED
@@ -233,7 +233,7 @@ mounted, provided the backend module is up to date. The standalone
233
233
 
234
234
  ### Mounting BPM under a non-root URL prefix
235
235
 
236
- If your host already owns the `/` namespace (Shuttle, an existing
236
+ If your host already owns the `/` namespace (an ERP, an existing
237
237
  admin console, etc.), wrap the BPM tree in `<BPMRoutesProvider>` and
238
238
  override every internal cross-link to a prefixed path. The full
239
239
  `BPMRoutes` contract has **19 entries** — overriding only some leaves
@@ -1 +1 @@
1
- .bpm_instanceFilterArea_qpvJq .mzn-filter-area__actions,.bpm_instanceFilterArea_qpvJq .mzn-form-field__label-area{display:none}.bpm_instanceFilterArea_qpvJq .mzn-form-field__control-field-slot--main{width:100%;min-width:0}
1
+ .bpm_instanceFilterArea_qpvJq .mzn-form-field__label-area{display:none}.bpm_instanceFilterArea_qpvJq .mzn-form-field__control-field-slot--main{width:100%;min-width:0}
@@ -0,0 +1,4 @@
1
+ "use client";const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./bpm-form-field-Bc6k4ZEO.cjs"),n=require("./FormRendererView-B-xycC9S.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("react/jsx-runtime"),o=require("@rytass/bpm-core-client/workflow"),s=require("@mezzanine-ui/core/form"),c=require("@rytass/bpm-core-client/template"),l=require("@rytass/bpm-core-shared"),u=require("@rytass/bpm-core-client/form"),d=require("@mezzanine-ui/icons"),f=require("@rytass/bpm-core-shared/form"),p=require("@hello-pangea/dnd"),m=require("next/dynamic");m=e.t(m,1);let h=require("@codemirror/lang-json"),g=require("@codemirror/view");var ee={alignItems:`center`,border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:4,color:`var(--mzn-color-text-neutral)`,display:`flex`,minHeight:160,padding:12,width:`100%`},te=[(0,h.json)(),g.EditorView.lineWrapping,g.EditorView.theme({"&":{border:`1px solid var(--mzn-color-border-neutral)`,borderRadius:`4px`,fontSize:`13px`,width:`100%`},"&.cm-focused":{outline:`1px solid var(--mzn-color-border-primary)`},".cm-content":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`,minHeight:`100%`},".cm-editor":{width:`100%`},".cm-gutters":{borderRight:`1px solid var(--mzn-color-border-neutral)`},".cm-scroller":{fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace`}})],_=(0,m.default)(()=>import(`@uiw/react-codemirror`),{loading:()=>(0,a.jsx)(`div`,{style:ee,children:`載入 JSON 編輯器`}),ssr:!1});function ne({disabled:e=!1,height:t,name:n,onChange:r,placeholder:i,value:o}){return(0,a.jsx)(_,{"aria-label":n,basicSetup:{autocompletion:!0,bracketMatching:!0,closeBrackets:!0,defaultKeymap:!0,foldGutter:!0,highlightActiveLine:!0,highlightSelectionMatches:!0,lineNumbers:!0,syntaxHighlighting:!0},editable:!e,extensions:[...te],height:t,indentWithTab:!1,onChange:r,placeholder:i,readOnly:e,theme:`light`,value:o,width:`100%`})}var re=[{description:`單行文字、姓名、編號`,icon:d.AlignLeftIcon,label:`文字`,type:`text`},{description:`多行補充內容`,icon:d.FileIcon,label:`長文字`,type:`textarea`},{description:`金額、數量、分數`,icon:d.CurrencyDollarIcon,label:`數字`,type:`number`},{description:`金額與費用`,icon:d.CurrencyDollarIcon,label:`金額`,type:`money`},{description:`日期或到期日`,icon:d.CalendarIcon,label:`日期`,type:`date`},{description:`日期與時間`,icon:d.CalendarIcon,label:`日期時間`,type:`datetime`},{description:`是 / 否狀態`,icon:d.CheckedIcon,label:`開關`,type:`boolean`},{description:`固定選項擇一`,icon:d.ListIcon,label:`下拉選單`,type:`select`},{description:`可搜尋的固定選項`,icon:d.ListIcon,label:`自動完成`,type:`autocomplete`},{description:`固定選項單選`,icon:d.DotGridIcon,label:`單選`,type:`radio`},{description:`固定選項複選`,icon:d.CheckedOutlineIcon,label:`複選`,type:`checkbox`},{description:`附件或佐證資料`,icon:d.FileAttachmentIcon,label:`附件`,type:`file_upload`},{description:`從成員名單挑選一或多位人員`,icon:d.UserIcon,label:`人員選擇`,type:`member`},{description:`從組織圖挑選一個組織`,icon:d.FolderIcon,label:`組織選擇`,type:`org_unit`},{description:`多列多欄明細`,icon:d.DotGridIcon,label:`表格`,type:`table`}],v=re.filter(e=>(0,f.isTableColumnFieldType)(e.type)).map(e=>({id:e.type,name:e.label})),ie={alignItems:`start`,display:`flex`,flexWrap:`wrap`,gap:16},ae={flex:`0.55 1 300px`,minWidth:0},oe={flex:`1.45 1 720px`,minWidth:620,paddingBottom:260},se=240,ce={BOOLEAN:`開關`,NUMBER:`數字`,STRING:`文字或選單`,STRING_ARRAY:`多選`},le=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings missing required parameter: (.+)$/u,ue=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings unknown parameter: (.+)$/u,y={display:`grid`,gap:12},de={display:`flex`,flexWrap:`wrap`,gap:6},fe={flex:`0 0 auto`,whiteSpace:`nowrap`},pe={display:`grid`,gap:8},me={alignItems:`center`,cursor:`grab`,display:`flex`,gap:12,touchAction:`none`},he={display:`grid`,flex:`1 1 auto`,gap:2,minWidth:0},ge={alignItems:`center`,display:`flex`,flex:`0 0 auto`,gap:4},_e={alignItems:`center`,display:`flex`,gap:6},ve={cursor:`pointer`,userSelect:`none`},ye={filter:`drop-shadow(0 8px 18px rgba(0, 0, 0, 0.12))`},be={backgroundColor:`color-mix(in srgb, var(--mzn-color-primary) 8%, var(--mzn-color-bg-surface))`,boxShadow:`inset 0 0 0 1px var(--mzn-color-border-primary)`},xe={alignItems:`center`,border:`1px dashed var(--mzn-color-border-neutral)`,borderRadius:6,display:`grid`,gap:12,minHeight:240,padding:32,textAlign:`center`},Se={display:`flex`,gap:8,justifyContent:`center`},Ce={display:`grid`,gap:14},we={display:`grid`,columnGap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 360px))`,justifyContent:`start`,maxWidth:736,rowGap:8},Te={gridColumn:`1 / -1`},Ee={alignItems:`center`,display:`flex`,gap:8,gridColumn:`1 / -1`,justifyContent:`flex-end`},b={gridColumn:`1 / -1`},De={alignItems:`start`,display:`block`,width:`100%`},Oe={...De,gridColumn:`1 / -1`},ke={minWidth:0,width:`100%`},Ae={minWidth:`100%`,width:`100%`},je={display:`grid`,gap:14},Me={alignItems:`start`,display:`block`,width:`100%`},Ne={minWidth:0,width:`100%`},Pe={gridColumn:`2 / -1`},Fe={display:`grid`,gap:10,width:`100%`},Ie={display:`grid`,gap:8,gridTemplateColumns:`repeat(auto-fit, minmax(160px, 1fr))`},Le={display:`inline-flex`},Re={display:`grid`,gap:16},ze={display:`grid`,gap:8},Be={display:`flex`,justifyContent:`flex-end`},Ve={color:`var(--mzn-color-text-error)`,fontSize:`0.72em`,lineHeight:0,marginLeft:2,verticalAlign:`super`},He={display:`grid`,gap:10,gridColumn:`1 / -1`},Ue={display:`grid`,gap:2},x={display:`grid`,gap:8},We={display:`flex`,justifyContent:`flex-start`},Ge={display:`flex`,flexWrap:`wrap`,gap:4},Ke={backgroundColor:`var(--mzn-color-bg-surface-secondary)`,borderRadius:6,display:`grid`,gap:4,padding:10},qe={...we,gridTemplateColumns:`minmax(280px, 520px)`,padding:`4px 0 8px`},Je={display:`grid`,gap:8,gridColumn:`1 / -1`},Ye={alignItems:`center`,display:`flex`,gap:12,justifyContent:`space-between`},Xe={alignItems:`baseline`,display:`flex`,gap:2},Ze={display:`grid`,gap:4};function Qe(e){e&&(e.style.width=`100%`)}var $e={fields:[],schemaVersion:1},et={layout:[],schemaVersion:1},S=`__STATIC_OPTIONS__`,C=`__CONSTANT__`,w=`__EXPRESSION__`,T=`__UNSUPPORTED__`,tt=`__ROW_FIELD__:`,nt=`__UNBOUND__`,rt=[{id:S,name:`靜態選項`}],it=[{id:`single`,name:`單選`},{id:`multiple`,name:`複選`}],at=[{id:`unset`,name:`不預設`},{id:`true`,name:`是`},{id:`false`,name:`否`}],ot=[{id:`true`,name:`是`},{id:`false`,name:`否`}],st=[{label:`顯示`,name:`fieldVisibleWhen`,supportingText:`符合條件時才顯示這個欄位。`,target:`visibleWhen`},{label:`必填`,name:`fieldRequiredWhen`,supportingText:`符合條件時才要求填寫這個欄位。`,target:`requiredWhen`},{label:`唯讀`,name:`fieldReadonlyWhen`,supportingText:`符合條件時不允許修改這個欄位。`,target:`readonlyWhen`}],ct={whiteSpace:`pre-line`},lt=`勾選後,此欄位的 key 與型別在之後的版本不能再改。HIDE/hidden 不是保密手段。`;function E({formDefinitionId:e,onChange:m,templateId:h,value:g}){let ee=g?.schema??$e,te=g?.uiSchema??et,[_,E]=(0,r.useState)(ee),[D,O]=(0,r.useState)(te),[k,A]=(0,r.useState)(M(ee)),[Mt,Pt]=(0,r.useState)(M(te)),[Ft,It]=(0,r.useState)({}),[Lt,N]=(0,r.useState)(null),[P,Rt]=(0,r.useState)([]),[zt,Bt]=(0,r.useState)(null);(0,r.useEffect)(()=>{if(!h&&!e||(0,l.readFilterableFieldPaths)(_).length===0)return Rt([]),Bt(null),()=>void 0;let t=!1,n=setTimeout(()=>{(0,o.listFilterableFieldIssues)({formDefinitionId:e,schemaJson:M(_),templateId:h}).then(e=>{t||(Rt(e),Bt(null))}).catch(e=>{t||(Rt([]),Bt(e instanceof Error?e.message:`無法檢查可篩選欄位。`))})},400);return()=>{t=!0,clearTimeout(n)}},[e,_,h]);let Vt=(0,r.useMemo)(()=>new Map(P.map(e=>[e.path,e.message])),[P]),[F,Ht]=(0,r.useState)(`design`),[I,L]=(0,r.useState)(null),[R,Ut]=(0,r.useState)([]),[Wt,Gt]=(0,r.useState)(null),[Kt,qt]=(0,r.useState)(`loading`),[Jt,z]=(0,r.useState)(null),[Yt,Xt]=(0,r.useState)(!1),[B,V]=(0,r.useState)(null),[Zt,H]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=!0;return(0,u.listFormDataSources)().then(t=>{e&&(Ut(t),Gt(null),qt(`ready`))}).catch(t=>{e&&(Ut([]),Gt(`目前無法載入 DataSource Catalog,請稍後重試。`),qt(`unavailable`))}),()=>{e=!1}},[]),(0,r.useEffect)(()=>{_.fields.some(e=>e.fieldKey===I)||L(_.fields[0]?.fieldKey??null)},[_.fields,I]),(0,r.useEffect)(()=>{It(e=>(0,u.buildFormRendererValues)(_.fields,e))},[_.fields]),(0,r.useEffect)(()=>{F!==`advanced`&&(A(M(_)),Pt(M(D)))},[F,_,D]);let U=(0,r.useMemo)(()=>_.fields.find(e=>e.fieldKey===I)??_.fields[0]??null,[_.fields,I]);(0,r.useEffect)(()=>{m?.({schema:_,uiSchema:D})},[_,D]);function Qt(e){let t=_.fields.length+1,n=(0,u.createFieldDefinition)(e,t);E({..._,fields:[..._.fields,n]}),O({...D,layout:[...D.layout,{fieldKey:n.fieldKey,width:e===`textarea`||e===`file_upload`||e===`table`?`FULL`:`HALF`}]}),L(n.fieldKey),Ht(`design`),N(null)}function $t(e){let t=e;t===`advanced`&&F!==`advanced`&&(A(M(_)),Pt(M(D))),Ht(t)}function en(e){let t=_.fields.flatMap(t=>(0,f.isTableFieldDefinition)(t)?t.columns.flatMap(n=>(0,f.isFormDataSourceFieldDefinition)(n)&&(0,u.readFormDataSourceFieldDependencyKeys)(n).includes(e)?[`${t.fieldKey}.${n.fieldKey}`]:[]):(0,f.isFormDataSourceFieldDefinition)(t)&&(0,u.readFormDataSourceFieldDependencyKeys)(t).includes(e)?[t.fieldKey]:[]);t.length>0?V({affectedFieldKeys:t,fieldKey:e,kind:`remove-field`}):tn(e)}function tn(e){let t=_.fields.filter(t=>t.fieldKey!==e);E({..._,fields:t}),O({...D,layout:D.layout.filter(t=>t.fieldKey!==e)}),L(I===e?t[0]?.fieldKey??null:I),N(null),z(null)}function nn(e){let t=e.destination;t&&e.source.index!==t.index&&(E(n=>({...n,fields:Nt(n.fields,e.source.index,t.index)})),O(n=>({...n,layout:Nt(n.layout,e.source.index,t.index)})),N(null))}function W(e){G(t=>({...t,...e}))}function G(e){if(!U)return;let t=U.fieldKey,n=e(U),r=n.fieldKey,i={..._,fields:_.fields.map(e=>e.fieldKey===t?n:e)},a=t===r?i:(0,u.renameFormDataSourceFieldBindings)(i,t,r);E(a),O({...D,layout:D.layout.map(e=>e.fieldKey===t?{...e,fieldKey:r}:e)}),L(r),N(null),z(null)}function rn(e){G(()=>e)}function K(e,t){E(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e&&(0,f.isTableFieldDefinition)(n)?t(n):n)})),N(null),z(null)}function q(e,t,n){let r=e.columns[t]?.fieldKey;K(e.fieldKey,e=>{let i={...e,columns:e.columns.map((e,r)=>r===t?n:e)};return typeof r==`string`&&r!==n.fieldKey?(0,u.renameFormTableColumnBindings)(i,r,n.fieldKey):i})}function an(e){let t=(0,u.createTableColumnDefinition)(e.columns,`text`);K(e.fieldKey,e=>({...e,columns:[...e.columns,t]})),H(e.columns.length)}function on(e,t){K(e,e=>({...e,columns:e.columns.filter((e,n)=>n!==t)})),H(e=>e===null||e<t?e:e===t?null:e-1)}function sn(e,t,n){K(e.fieldKey,e=>({...e,columns:Nt(e.columns,t,n)})),H(e=>e===null?e:e===t?n:e>t&&e<=n?e-1:e<t&&e>=n?e+1:e)}function cn(e,t,n){if(e.type!==`select`&&e.type!==`autocomplete`||(0,f.readFormFieldSelectionMode)(e)===t)return;let r=e.defaultValue,i=t===`multiple`?typeof r==`string`?[r]:r:Array.isArray(r)?r[0]:r;n(e,{...e,defaultValue:i,mode:t},`選擇模式變更可能轉換或捨棄既有預設值。`)}function ln(e,t,n=`此變更會替換目前選項來源;既有 options、dynamic reference 或 bindings 可能失效。`){JSON.stringify(e)!==JSON.stringify(t)&&V({fieldKey:e.fieldKey,impact:n,kind:`replace-field`,nextField:t})}function un(e,t,n){if(!t)return;if(t===S){if(!(0,f.isFormDataSourceFieldDefinition)(e))return;let{dataSource:t,defaultValue:r,...i}=e;n({...i,options:[]});return}let r=R.find(e=>dt(e)===t);if(!r)return;if((0,f.isFormDataSourceFieldDefinition)(e)){let t=new Set(r.parameters.map(e=>e.key)),i=e.dataSource.bindings.filter(e=>t.has(e.parameter));n({...e,dataSource:{bindings:i,key:r.key,version:r.version}});return}let{options:i,defaultValue:a,...o}=e;n({...o,dataSource:{bindings:[],key:r.key,version:r.version}})}function dn(){B&&(fn(B),V(null))}function fn(e){e.kind===`remove-field`?tn(e.fieldKey):e.kind===`remove-column`?on(e.fieldKey,e.columnIndex):e.kind===`replace-column`?(K(e.fieldKey,t=>({...t,columns:t.columns.map(t=>t.fieldKey===e.columnKey?e.nextColumn:t)})),H(e.columnIndex)):(E({..._,fields:_.fields.map(t=>t.fieldKey===e.fieldKey?e.nextField:t)}),N(null),z(null))}async function pn(){Xt(!0);try{let e=await(0,u.lintFormSchema)(_,D);z(e.errors.map(mn))}catch{z([`目前無法完成 DataSource schema 驗證。`])}finally{Xt(!1)}}function mn(e){let t=le.exec(e);if(t?.[1]&&t[3])return`${hn(t[1],t[2])}尚未指定必要參數「${gn(t[1],t[2],t[3])}」的來源`;let n=(0,c.parseFormBindingExpressionLintLine)(e);if(n){let e=String(n.fieldIndex),t=n.columnIndex===null?void 0:String(n.columnIndex),r=_.fields[n.fieldIndex],i=r?J(r,t):void 0,a=_n(e,t,String(n.bindingIndex))??``;return(0,c.readFormBindingExpressionLintMessage)({code:n.code,columnLabel:i?i.label||i.fieldKey:null,fieldLabel:r?r.label||r.fieldKey:``,parameterLabel:gn(e,t,a),subject:n.subject})}let r=ue.exec(e);return r?.[1]&&r[3]?`${hn(r[1],r[2])}綁定了來源沒有的參數「${r[3]}」`:(0,u.readFormSchemaLintMessage)(e)}function hn(e,t){let n=_.fields[Number(e)];if(!n)return``;let r=n.label||n.fieldKey,i=J(n,t);return i?`「${r}」表格的「${i.label||i.fieldKey}」欄`:`「${r}」欄位`}function gn(e,t,n){let r=_.fields[Number(e)];if(!r)return n;let i=J(r,t)??r,a=(0,f.isFormDataSourceFieldDefinition)(i)?i.dataSource:null;return(a?R.find(e=>e.key===a.key&&e.version===a.version):void 0)?.parameters.find(e=>e.key===n)?.label||n}function _n(e,t,n){let r=_.fields[Number(e)],i=r?J(r,t)??r:null;return i&&(0,f.isFormDataSourceFieldDefinition)(i)?i.dataSource.bindings[Number(n)]?.parameter??null:null}function J(e,t){return typeof t==`string`&&(0,f.isTableFieldDefinition)(e)?e.columns[Number(t)]:void 0}function vn(e){It(e)}function yn(e,t){E(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e?{...n,required:t}:n)})),N(null)}function bn(e){A(e);try{E(JSON.parse(e)),N(null)}catch{N(`Form Schema JSON 格式不正確`)}}function xn(e){Pt(e);try{O(JSON.parse(e)),N(null)}catch{N(`UI Schema JSON 格式不正確`)}}return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsxs)(a.Fragment,{children:[zt?(0,a.jsx)(i.InlineMessage,{content:zt,severity:`warning`}):null,P.length>0?(0,a.jsx)(i.Typography,{color:`text-error`,style:ct,variant:`body`,children:P.map(e=>e.message).join(`
2
+ `)}):null,(0,a.jsx)(i.SectionGroup,{children:(0,a.jsx)(i.Section,{children:(0,a.jsxs)(`div`,{style:Re,children:[(0,a.jsxs)(i.Tab,{activeKey:F,onChange:$t,size:`sub`,children:[(0,a.jsx)(i.TabItem,{children:`設計`},`design`),(0,a.jsx)(i.TabItem,{children:`預覽`},`preview`),(0,a.jsx)(i.TabItem,{children:`進階`},`advanced`)]}),F===`design`?Sn():null,F===`preview`?cr():null,F===`advanced`?lr():null]})})})]}),B?(0,a.jsx)(i.Modal,{cancelText:`返回`,confirmText:`確認變更`,modalType:`standard`,onCancel:()=>V(null),onClose:()=>V(null),onConfirm:dn,open:!0,showModalFooter:!0,showModalHeader:!0,title:_t(B),children:B.kind===`remove-field`?(0,a.jsxs)(`div`,{style:ze,children:[(0,a.jsx)(i.Typography,{variant:`body`,children:`此欄位仍被下列 DataSource binding 使用;移除後請重新設定這些欄位。`}),(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:B.affectedFieldKeys.join(`、`)})]}):B.kind===`remove-column`?(0,a.jsxs)(i.Typography,{variant:`body`,children:[`移除欄「`,B.columnKey,`」後,既有案件仍保留原本的表單版本,但新版本的這一欄資料將不再被填寫。`]}):(0,a.jsx)(i.Typography,{variant:`body`,children:B.impact})}):null]});function Sn(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsxs)(`div`,{style:pe,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`新增欄位`}),(0,a.jsx)(`div`,{style:de,children:re.map(e=>(0,a.jsx)(i.Button,{icon:e.icon,iconType:`leading`,onClick:()=>Qt(e.type),size:`sub`,style:fe,type:`button`,variant:`base-secondary`,children:e.label},e.type))})]}),(0,a.jsxs)(`div`,{style:ie,children:[(0,a.jsxs)(`div`,{style:{...y,...ae},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`表單畫布`}),_.fields.length>0?(0,a.jsx)(p.DragDropContext,{onDragEnd:nn,children:(0,a.jsx)(p.Droppable,{droppableId:`form-builder-fields`,children:e=>(0,a.jsxs)(`div`,{...e.droppableProps,ref:e.innerRef,style:y,children:[_.fields.map((e,t)=>(0,a.jsx)(p.Draggable,{draggableId:e.fieldKey,index:t,children:(t,n)=>or(e,t,n.isDragging)},e.fieldKey)),e.placeholder]})})}):(0,a.jsxs)(`div`,{style:xe,children:[(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsx)(i.Typography,{component:`h3`,variant:`h3`,children:`尚未建立欄位`}),(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`從上方新增第一個欄位,或直接建立常用文字欄位開始設計。`})]}),(0,a.jsxs)(`div`,{style:Se,children:[(0,a.jsx)(i.Button,{onClick:()=>Qt(`text`),variant:`base-primary`,children:`新增文字欄位`}),(0,a.jsx)(i.Button,{onClick:()=>Qt(`textarea`),variant:`base-secondary`,children:`新增長文字`})]})]})]}),(0,a.jsxs)(`div`,{style:{...y,...oe},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`欄位設定`}),U?Cn(U):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`請先新增或選取欄位。`})]})]})]})}function Cn(e){return(0,a.jsxs)(`div`,{style:Ce,children:[wn(e),(0,f.isTableFieldDefinition)(e)?On(e):null,Tn(e)]})}function wn(e){return(0,a.jsxs)(`div`,{style:we,children:[(0,a.jsx)(`div`,{style:Ee,children:(0,a.jsx)(i.Badge,{size:`main`,text:ut(e.type),variant:`text-info`})}),$(`標題`,`fieldLabel`,(0,a.jsx)(i.Input,{onChange:e=>W({label:e.target.value}),placeholder:`例如:申請金額`,value:e.label,variant:`base`})),$(`欄位 Key`,`fieldKey`,(0,a.jsx)(i.Input,{onChange:e=>W({fieldKey:e.target.value}),placeholder:`例如:amount`,value:e.fieldKey,variant:`base`})),(0,f.isTableFieldDefinition)(e)?null:$(`提示文字`,`fieldPlaceholder`,(0,a.jsx)(i.Input,{onChange:e=>W({placeholder:e.target.value||void 0}),placeholder:`例如:請輸入申請金額`,value:e.placeholder??``,variant:`base`})),En(e,rn,ln),j(e)?$(`以連結顯示`,`fieldDisplayAsLink`,(0,a.jsx)(i.Toggle,{checked:e.displayAs===`link`,onChange:e=>G(t=>e.target.checked?j(t)?{...t,displayAs:`link`}:t:wt(t,`displayAs`))})):null,$(`可篩選`,`fieldFilterable`,(0,a.jsx)(i.Toggle,{checked:e.filterable===!0,onChange:e=>G(t=>e.target.checked?{...t,filterable:!0}:wt(t,`filterable`))})),e.filterable===!0?(0,a.jsx)(i.Typography,{color:`text-neutral`,style:b,variant:`body`,children:lt}):null,Vt.has(e.fieldKey)?(0,a.jsx)(i.Typography,{color:`text-error`,style:b,variant:`body`,children:Vt.get(e.fieldKey)}):null,$(`只存不顯示(系統整合用)`,`fieldHidden`,(0,a.jsx)(i.Toggle,{checked:e.hidden===!0,onChange:e=>G(t=>e.target.checked?{...t,hidden:!0,required:!1}:wt(t,`hidden`))})),e.hidden===!0?(0,a.jsx)(i.Typography,{color:`text-neutral`,style:b,variant:`body`,children:`填寫、唯讀與重送畫面都不會顯示這個欄位,值仍會存下來; 透過 API 仍然讀得到這個值,不是權限控管。`}):null]})}function Tn(e){return(0,a.jsx)(i.Accordion,{defaultExpanded:Tt(e),size:`sub`,title:`進階設定`,children:(0,a.jsxs)(`div`,{style:we,children:[(0,a.jsx)(i.Typography,{component:`h3`,style:Te,variant:`label-primary`,children:`條件規則`}),(0,a.jsx)(i.Typography,{color:`text-neutral`,style:b,variant:`body`,children:`只有需要根據其他欄位改變顯示、必填或唯讀狀態時才需要設定。`}),tr(e)]})})}function En(e,t,n,r){return j(e)?Nn(e,t):(0,u.isNumberFieldDefinition)(e)?Pn(e,t):(0,u.isDateFieldDefinition)(e)?Fn(e,t):(0,f.isFormOptionFieldDefinition)(e)?In(e,t,n,r):e.type===`boolean`?Qn(e,t):e.type===`file_upload`?er(e,t):(0,f.isMemberFieldDefinition)(e)?$n(e,t):(0,f.isTableFieldDefinition)(e)?Dn(e):null}function Dn(e){let t=(0,u.readFormTableRowBounds)(e);return(0,a.jsxs)(a.Fragment,{children:[$(`最少列數`,`fieldMinRows`,Q(e.minRows,t=>K(e.fieldKey,e=>({...e,minRows:t})),`例如:1`,{max:t.maxRows,min:0})),$(`最多列數`,`fieldMaxRows`,Q(e.maxRows,t=>K(e.fieldKey,e=>({...e,maxRows:t})),`未設定即為 ${f.FORM_TABLE_MAX_ROWS}`,{max:f.FORM_TABLE_MAX_ROWS,min:Math.max(t.minRows,1)})),$(`新增列按鈕文字`,`fieldAddRowLabel`,(0,a.jsx)(i.Input,{onChange:t=>K(e.fieldKey,e=>({...e,addRowLabel:t.target.value||void 0})),placeholder:`預設為「新增一列」`,value:e.addRowLabel??``,variant:`base`}))]})}function On(e){return(0,a.jsxs)(`div`,{style:Je,children:[(0,a.jsxs)(`div`,{style:Ye,children:[(0,a.jsxs)(i.Typography,{component:`h3`,variant:`label-primary`,children:[`欄(`,e.columns.length,`)`]}),(0,a.jsx)(i.Button,{icon:d.PlusIcon,iconType:`leading`,onClick:()=>an(e),size:`sub`,type:`button`,variant:`base-secondary`,children:`新增欄`})]}),kn(e)]})}function kn(e){let t=e.columns.map((t,n)=>({fieldKey:t.fieldKey,index:n,key:`${e.fieldKey}-column-${n}`,label:t.label,type:t.type})),n=[{key:`label`,render:t=>(0,a.jsx)(i.Input,{fullWidth:!0,onChange:n=>q(e,t.index,{...Y(e,t.index),label:n.target.value}),placeholder:`例如:數量`,size:`sub`,value:t.label,variant:`base`}),title:`標題`},{key:`type`,render:t=>(0,a.jsx)(i.Select,{fullWidth:!0,clearable:!1,menuMaxHeight:se,onChange:n=>jn(e,t.index,n?.id),options:[...v],size:`sub`,value:(0,u.readSelectOption)(v,t.type)}),title:`型別`},{key:`required`,render:t=>(0,a.jsx)(i.Toggle,{checked:Y(e,t.index).required===!0,inputProps:{"aria-label":`${t.label||t.fieldKey} 必填`},onChange:n=>q(e,t.index,{...Y(e,t.index),required:n.target.checked}),size:`sub`}),title:`必填`},{key:`filterable`,render:t=>{let n=Y(e,t.index),r=Vt.get(`${e.fieldKey}.${n.fieldKey}`);return(0,a.jsxs)(`div`,{children:[(0,a.jsx)(i.Toggle,{checked:n.filterable===!0,inputProps:{"aria-label":`${t.label||t.fieldKey} 可篩選`},onChange:r=>q(e,t.index,{...n,filterable:r.target.checked}),size:`sub`}),n.filterable===!0?(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:lt}):null,r?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`caption`,children:r}):null]})},title:`可篩選`}],r={render:t=>[{disabled:()=>e.columns.length<=1,icon:d.TrashIcon,iconType:`leading`,name:`移除此欄`,onClick:()=>V({columnIndex:t.index,columnKey:t.fieldKey,fieldKey:e.fieldKey,kind:`remove-column`}),variant:`destructive-ghost`}],width:104},o=Zt===null?void 0:t[Zt]?.key;return(0,a.jsx)(i.Table,{actions:r,columns:n,dataSource:t,draggable:{enabled:!0,onDragEnd:(t,n)=>sn(e,n.fromIndex,n.toIndex)},expandable:{expandedRowKeys:o?[o]:[],expandedRowRender:t=>An(e,t.index),onExpand:(e,t)=>H(e?t.index:null)},fullWidth:!0,rowHeightPreset:`roomy`,showHeader:!0,size:`sub`})}function An(e,t){let n=e.columns[t];return n?(0,a.jsxs)(`div`,{style:qe,children:[$(`欄位 Key`,`columnFieldKey`,(0,a.jsx)(i.Input,{onChange:r=>q(e,t,{...n,fieldKey:r.target.value}),placeholder:`例如:qty`,value:n.fieldKey,variant:`base`})),$(`提示文字`,`columnPlaceholder`,(0,a.jsx)(i.Input,{onChange:r=>q(e,t,{...n,placeholder:r.target.value||void 0}),placeholder:`例如:請輸入數量`,value:n.placeholder??``,variant:`base`})),En(n,n=>{(0,f.isTableColumnFieldType)(n.type)&&q(e,t,n)},(n,r)=>{(0,f.isTableColumnFieldType)(r.type)&&q(e,t,r)},e.columns)]}):null}function jn(e,t,n){let r=e.columns[t],i=v.find(e=>e.id===n)?.id;if(!r||!i||r.type===i)return;let a=Ct(r,i),o=vt(r);o.length===0?(q(e,t,a),H(t)):V({columnIndex:t,columnKey:r.fieldKey,fieldKey:e.fieldKey,impact:`「${r.label||r.fieldKey}」改為${Mn(i)}後,這一欄的${o.join(`、`)}會被捨棄。`,kind:`replace-column`,nextColumn:a})}function Mn(e){return v.find(t=>t.id===e)?.name??e}function Y(e,t){let n=e.columns[t];if(!n)throw Error(`Table ${e.fieldKey} has no column at index ${t}.`);return n}function Nn(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`textarea`?Z({name:`fieldDefaultValue`,onChange:n=>t({...e,defaultValue:n||void 0}),placeholder:`輸入此欄位的預設文字`,rows:3,value:Dt(e.defaultValue)}):(0,a.jsx)(i.Input,{onChange:n=>t({...e,defaultValue:n.target.value||void 0}),placeholder:`輸入此欄位的預設文字`,value:Dt(e.defaultValue),variant:`base`})),$(`最小長度`,`fieldMinLength`,Q(e.minLength,n=>t({...e,minLength:n}),`例如:2`,{min:0})),$(`最大長度`,`fieldMaxLength`,Q(e.maxLength,n=>t({...e,maxLength:n}),`例如:100`,{min:1})),$(`格式(正規表示式)`,`fieldPattern`,(0,a.jsx)(i.Input,{onChange:n=>t(yt(e,n.target.value)),placeholder:`例如:[0-9]{8}`,value:e.pattern??``,variant:`base`}),!1,xt(e.pattern)),e.pattern?$(`格式錯誤訊息`,`fieldPatternErrorMessage`,(0,a.jsx)(i.Input,{onChange:n=>t(bt(e,n.target.value)),placeholder:`例如:統一編號為 8 位數字。`,value:e.patternErrorMessage??``,variant:`base`}),!1,St(e.patternErrorMessage)):null]})}function Pn(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,Q(typeof e.defaultValue==`number`?e.defaultValue:void 0,n=>t({...e,defaultValue:n}),e.type===`money`?`例如:1000`:`輸入預設數值`,{max:e.maximum,min:e.minimum})),$(`最小值`,`fieldMinimum`,Q(e.minimum,n=>t({...e,minimum:n}),`例如:0`)),$(`最大值`,`fieldMaximum`,Q(e.maximum,n=>t({...e,maximum:n}),`例如:999999`))]})}function Fn(e,t){return $(`預設值`,`fieldDefaultValue`,ir(e,Dt(e.defaultValue),n=>t({...e,defaultValue:n})))}function In(e,t,n,r){let o=(0,u.readCompatibleFormDataSourceDescriptors)(e.type,R),s={commit:e=>t(e),rowColumns:r},c=(0,f.isFormDataSourceFieldDefinition)(e)?dt(e.dataSource):S,l=(0,f.isFormDataSourceFieldDefinition)(e)?R.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version):null,d=l?o.some(e=>e.key===l.key&&e.version===l.version):!1,p=[...rt,...o.map(pt),...(0,f.isFormDataSourceFieldDefinition)(e)&&!d?[{id:c,name:`${e.dataSource.key} v${e.dataSource.version}(目前不可用或不支援)`}]:[]],m=(0,f.readFormFieldSelectionMode)(e);return(0,a.jsxs)(a.Fragment,{children:[e.type===`select`||e.type===`autocomplete`?$(`選擇模式`,`fieldSelectionMode`,(0,a.jsx)(i.Select,{clearable:!1,onChange:t=>{(t?.id===`single`||t?.id===`multiple`)&&cn(e,t.id,n)},options:[...it],value:(0,u.readSelectOption)(it,m)})):$(`選擇模式`,`fieldSelectionMode`,(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:m===`multiple`?`固定複選`:`固定單選`})),$(`選項來源`,`fieldOptionSource`,(0,a.jsx)(i.Select,{clearable:!1,disabled:Kt===`loading`&&!(0,f.isFormDataSourceFieldDefinition)(e),onChange:n=>un(e,n?.id,t),options:p,placeholder:`選擇選項來源`,value:(0,u.readSelectOption)(p,c)})),(0,f.isFormDataSourceFieldDefinition)(e)?Ln(e,o,s):Zn(e,t)]})}function Ln(e,t,n){let r=R.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version),o=r&&!(0,u.isFormDataSourceDescriptorCompatible)(r,e.type);return(0,a.jsxs)(`div`,{style:He,children:[Kt===`loading`?(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`正在載入可用的選項來源…`}):null,Wt?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:Wt}):null,r?null:(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`找不到目前設定的來源版本。設定會保留,但這張表單在來源恢復前無法發布。`}),o?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:`這個來源不支援目前的控制項,請改選其他來源。`}):null,r?Rn(r):null,r&&r.parameters.length>0?zn(e,r,n):null,t.length===0&&!Wt?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`沒有支援目前控制項的已註冊來源。`}):null,(0,a.jsx)(`div`,{style:We,children:(0,a.jsx)(i.Button,{disabled:Yt,loading:Yt,onClick:()=>void pn(),size:`sub`,type:`button`,variant:`base-secondary`,children:`檢查全部動態選項設定`})}),Jt?(0,a.jsx)(`div`,{style:Ue,children:Jt.length>0?Jt.map(e=>(0,a.jsx)(i.Typography,{color:`text-error`,variant:`caption`,children:e},e)):(0,a.jsx)(i.Typography,{color:`text-success`,variant:`caption`,children:`這張表單的動態選項設定都可以使用。`})}):null]})}function Rn(e){return(0,a.jsxs)(`div`,{style:Ke,children:[e.description?(0,a.jsx)(i.Typography,{variant:`body`,children:e.description}):null,(0,a.jsx)(`div`,{style:Ge,children:ft(e).map(e=>(0,a.jsx)(i.Tag,{label:e,readOnly:!0,size:`minor`},e))}),(0,a.jsxs)(i.Typography,{color:`text-neutral`,variant:`caption`,children:[`來源代號:`,e.key,` · v`,e.version]})]})}function zn(e,t,n){let r=t.parameters.map((e,t)=>({key:e.key,index:t,parameter:e}));return(0,a.jsxs)(`div`,{style:x,children:[(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`label-secondary`,children:`這個來源需要的條件`}),(0,a.jsx)(i.Table,{columns:[{key:`parameter`,render:e=>(0,a.jsxs)(`div`,{style:Xe,children:[(0,a.jsx)(i.Typography,{variant:`input`,children:e.parameter.label??e.parameter.key}),e.parameter.required?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`input`,children:`*`}):null]}),title:`條件`,width:100},{key:`binding`,width:268,render:t=>Hn(e,t.parameter,n),title:`值從哪裡來`},{key:`constant`,width:140,render:t=>{let r=(0,u.readFormDataSourceBindingValueKind)((0,u.readFormDataSourceBinding)(e,t.parameter.key));return r===`CONSTANT`?Kn(e,t.parameter.key,t.parameter.type,(0,u.readFormDataSourceBinding)(e,t.parameter.key),n):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:r===`EXPRESSION`?`見下方運算式`:`—`})},title:`固定值`},{key:`meaning`,render:t=>(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:Wn((0,u.readFormDataSourceBinding)(e,t.parameter.key),t.parameter,n,Vn(e,t.parameter,n))}),title:`填寫時的行為`}],dataSource:r,fullWidth:!0,showHeader:!0,size:`sub`}),Bn(e,t,n)]})}function Bn(e,t,n){let r=t.parameters.filter(t=>(0,u.readFormDataSourceBindingValueKind)((0,u.readFormDataSourceBinding)(e,t.key))===`EXPRESSION`);return r.length===0?null:(0,a.jsx)(`div`,{style:x,children:r.map(t=>{let r=`${t.label??t.key} 的運算式`;return(0,a.jsxs)(`div`,{"data-data-source-expression":t.key,style:x,children:[(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`label-secondary`,children:r}),Z({name:r,onChange:r=>Yn(e,t.key,r,n),placeholder:n.rowColumns?`例如:row.plant == "" ? form.plant : row.plant`:`例如:form.chargeTo == "OTHER" ? "TW02" : form.plant`,rows:2,value:(0,u.readFormDataSourceBindingExpression)(e,t.key)??``}),(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:n.rowColumns?`以 form.欄位代號 讀表單欄位、row.欄位代號 讀同列欄位;只能使用內建函式,結果須符合條件的型別。`:`以 form.欄位代號 讀表單欄位;只能使用內建函式,結果須符合條件的型別。`})]},t.key)})})}function Vn(e,t,n){return(0,u.readCompatibleFormDataSourceBindingFields)(t.type,_.fields,e.fieldKey).length+(n.rowColumns?(0,u.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).length:0)}function Hn(e,t,n){let r=mt((0,u.readFormDataSourceBinding)(e,t.key)),o=n.rowColumns?(0,u.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).map(e=>({id:`${tt}${e.id}`,name:`同列:${e.name}`})):[],s=[...t.required?[]:[{id:nt,name:`未綁定`}],...o,...(0,u.readCompatibleFormDataSourceBindingFields)(t.type,_.fields,e.fieldKey),...t.type===`STRING_ARRAY`?[]:[{id:C,name:`固定常數`},{id:w,name:`運算式`}],...r===T?[{id:T,name:`不支援的來源(請重新設定)`}]:[]];return(0,a.jsx)(`div`,{"data-data-source-parameter":t.key,style:Ze,children:(0,a.jsx)(i.Select,{clearable:!1,fullWidth:!0,inputProps:{"aria-label":`${t.label??t.key} 的值來源`,title:(0,u.readSelectOption)(s,r)?.name??``},onChange:r=>Jn(e,t.key,t.type,r?.id,n),options:s,placeholder:`選擇欄位或常數`,size:`sub`,value:(0,u.readSelectOption)(s,r)})})}function Un(e){return ce[e]}function Wn(e,t,n,r){let i=(0,u.readFormDataSourceBindingValueKind)(e);return i===`CONSTANT`?`固定值,不隨填寫變動`:i===`FIELD`?`隨欄位「${Gn(e,n)}」變動`:i===`ROW_FIELD`?`隨同列「${Gn(e,n)}」變動`:i===`EXPRESSION`?`由運算式計算,隨引用的欄位變動`:e?`這個來源目前的版本不支援,選項無法載入`:t.required?r>0?`尚未設定,選項無法載入`:`沒有相容的${Un(t.type)}欄位,請改用固定值`:`未設定,不做這層篩選`}function Gn(e,t){let n=e?.from;if(n?.kind===`FIELD`){let e=_.fields.find(e=>e.fieldKey===n.fieldKey);return e?e.label||e.fieldKey:``}if(n?.kind===`ROW_FIELD`){let e=t.rowColumns?.find(e=>e.fieldKey===n.columnKey);return e?e.label||e.fieldKey:``}return``}function Kn(e,t,n,r,i){return(0,a.jsx)(`div`,{"data-data-source-constant":t,children:qn(e,t,n,r,i)})}function qn(e,t,n,r,o){let s=(0,u.readFormDataSourceBindingValue)(e,t);if(n===`BOOLEAN`){let n=[{id:`true`,name:`是`},{id:`false`,name:`否`}];return(0,a.jsx)(i.Select,{clearable:!1,fullWidth:!0,onChange:n=>Xn(e,t,n?.id===`true`,o),options:n,size:`sub`,value:(0,u.readSelectOption)(n,s===!0?`true`:`false`)})}return n===`STRING_ARRAY`?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`caption`,children:`這個條件要收多個值,請綁定一個複選欄位;不接受固定值。`}):(0,a.jsx)(i.Input,{onChange:r=>Xn(e,t,n===`NUMBER`?(0,u.parseOptionalNumberInput)(r.target.value)??0:r.target.value,o),placeholder:n===`NUMBER`?`輸入數字`:`輸入固定值`,value:ht(r,n),variant:`base`})}function Jn(e,t,n,r,i){r!==T&&i.commit((0,u.upsertFormDataSourceFieldBinding)(e,t,gt(t,n,r)))}function Yn(e,t,n,r){r.commit((0,u.upsertFormDataSourceFieldBinding)(e,t,{from:{expression:n,kind:`EXPRESSION`},parameter:t}))}function Xn(e,t,n,r){r.commit((0,u.upsertFormDataSourceFieldBinding)(e,t,{from:{kind:`CONSTANT`,value:n},parameter:t}))}function Zn(e,t){let n=(0,f.readFormFieldSelectionMode)(e),r=Array.isArray(e.defaultValue)?e.defaultValue:[],o=e.options.map(u.readFieldOptionAsSelectOption),s=o.filter(e=>r.includes(e.id));return(0,a.jsxs)(a.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,n===`multiple`?(0,a.jsx)(i.Select,{clearable:!0,mode:`multiple`,onChange:n=>t({...e,defaultValue:n.length?n.map(e=>e.id):void 0}),options:o,placeholder:`選擇一或多個預設選項`,value:s}):(0,a.jsx)(i.Select,{clearable:!0,onChange:n=>t({...e,defaultValue:n?.id||void 0}),options:o,placeholder:`選擇預設選項`,value:typeof e.defaultValue==`string`?(0,u.readSelectOption)(o,e.defaultValue):null})),$(`選項`,`fieldOptions`,ar(e,t),!0)]})}function Qn(e,t){let n=typeof e.defaultValue==`boolean`?String(e.defaultValue):`unset`;return $(`預設值`,`fieldDefaultValue`,(0,a.jsx)(i.Select,{clearable:!1,onChange:n=>t({...e,defaultValue:n?.id===`true`||n?.id!==`false`&&void 0}),options:[...at],placeholder:`選擇預設狀態`,value:(0,u.readSelectOption)(at,n)}))}function $n(e,t){return $(`可複選`,`fieldMemberMultiple`,(0,a.jsx)(i.Toggle,{checked:e.multiple===!0,label:e.multiple===!0?`可選多位`:`只能選一位`,onChange:n=>t({...e,defaultValue:void 0,multiple:n.target.checked||void 0}),size:`sub`}))}function er(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`檔案數`,`fieldMaxFiles`,Q(e.maxFiles,n=>t({...e,maxFiles:n}),`例如:1`,{min:1})),$(`MIME`,`fieldAcceptedMimeTypes`,Z({name:`fieldAcceptedMimeTypes`,onChange:n=>t({...e,acceptedMimeTypes:Ot(n)}),placeholder:`每行一個 MIME type,例如:application/pdf`,rows:3,value:kt(e.acceptedMimeTypes)}),!1)]})}function tr(e){let t=_.fields.filter(t=>t.fieldKey!==e.fieldKey&&!(0,f.isMemberFieldDefinition)(t)&&!(0,f.isOrgUnitFieldDefinition)(t));return t.length?(0,a.jsx)(a.Fragment,{children:st.map(n=>nr(e,n,t))}):(0,a.jsx)(i.Typography,{color:`text-neutral`,style:b,variant:`body`,children:`目前沒有其他欄位可作為條件來源。新增更多欄位後即可設定條件規則。`})}function nr(e,t,n){let r=e[t.target],o=r?(0,u.parseConditionRule)(r):null,s=n.find(e=>e.fieldKey===o?.fieldKey),c=s??n[0],l=n.map(Et),d=(0,u.readConditionOperatorOptions)(c),f=o&&d.some(e=>e.id===o.operator)?o.operator:(0,u.readDefaultConditionOperator)(c),p=o?.value??(0,u.readDefaultConditionValue)(c),m=!!r,h=m&&(!o||!s);return $(t.label,t.name,(0,a.jsxs)(`div`,{style:Fe,children:[(0,a.jsx)(i.Toggle,{checked:m,label:m?`已啟用`:`不啟用`,onChange:e=>X(t.target,e.target.checked?(0,u.buildConditionExpression)(c,(0,u.readDefaultConditionOperator)(c),(0,u.readDefaultConditionValue)(c)):void 0),size:`sub`,supportingText:t.supportingText}),m?h?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`這個規則不是目前 UI 支援的格式。重新選擇條件後會取代既有規則。`}):(0,a.jsxs)(`div`,{style:Ie,children:[(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>{let r=n.find(t=>t.fieldKey===e?.id)??c;X(t.target,(0,u.buildConditionExpression)(r,(0,u.readDefaultConditionOperator)(r),(0,u.readDefaultConditionValue)(r)))},options:l,placeholder:`選擇欄位`,value:(0,u.readSelectOption)(l,c.fieldKey)}),(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>X(t.target,(0,u.buildConditionExpression)(c,(0,u.readConditionOperatorOption)(e?.id)??f,p)),options:[...d],placeholder:`判斷方式`,value:(0,u.readSelectOption)(d,f)}),rr(c,p,e=>X(t.target,(0,u.buildConditionExpression)(c,f,e)))]}):null]}),!0)}function X(e,t){W({[e]:t})}function rr(e,t,n){if(e.type===`boolean`)return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??`true`),options:[...ot],placeholder:`比較值`,value:(0,u.readSelectOption)(ot,t===`false`?`false`:`true`)});if((0,u.isSelectFieldDefinition)(e)){let r=e.options.map(u.readFieldOptionAsSelectOption);return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??r[0]?.id??``),options:r,placeholder:`比較值`,value:(0,u.readSelectOption)(r,t)})}return(0,u.isNumberFieldDefinition)(e)?Q((0,u.parseOptionalNumberInput)(t),e=>n(String(e??0)),`比較值`):(0,u.isDateFieldDefinition)(e)?ir(e,t,e=>n(e??``)):(0,a.jsx)(i.Input,{onChange:e=>n(e.target.value),placeholder:`比較值`,value:t,variant:`base`})}function Z({name:e,onChange:t,placeholder:n,rows:r,value:o}){return(0,a.jsx)(i.Textarea,{"aria-label":e,onChange:e=>t(e.target.value),placeholder:n,ref:Qe,resize:`vertical`,rows:r,style:Ae,value:o})}function Q(e,t,n,r={}){return(0,a.jsx)(i.Input,{max:r.max,min:r.min,onChange:e=>t((0,u.clampOptionalNumber)((0,u.parseOptionalNumberInput)(e.target.value),r)),placeholder:n,showSpinner:!0,step:r.step??1,value:typeof e==`number`?String(e):``,variant:`measure`})}function ir(e,t,n){return e.type===`datetime`?(0,a.jsx)(i.DateTimePicker,{formatDate:`YYYY-MM-DD`,formatTime:`HH:mm`,hideSecond:!0,onChange:e=>n((0,u.formatDateTimePickerValue)(e)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,value:(0,u.readDatePickerValue)(t)}):(0,a.jsx)(i.DatePicker,{format:`YYYY-MM-DD`,onChange:e=>n((0,u.formatDatePickerValue)(e)),placeholder:`選擇日期`,value:(0,u.readDatePickerValue)(t)})}function ar(e,t){let n=e.options.map((t,n)=>({index:n,key:`${e.fieldKey}-${n}`,label:t.label,value:t.value}));return(0,a.jsxs)(`div`,{style:ze,children:[(0,a.jsx)(i.Table,{actions:{render:n=>[{disabled:()=>e.options.length<=1,icon:d.TrashIcon,iconType:`icon-only`,name:`移除選項`,onClick:()=>t({...e,options:e.options.filter((e,t)=>t!==n.index)}),variant:`destructive-ghost`}],width:56},columns:[{key:`label`,render:n=>(0,a.jsx)(i.Input,{onChange:r=>t({...e,options:At(e.options,n.index,{label:r.target.value})}),placeholder:`例如:主管`,size:`sub`,value:n.label,variant:`base`}),title:`Label`},{key:`value`,render:n=>(0,a.jsx)(i.Input,{onChange:r=>t({...e,options:At(e.options,n.index,{value:r.target.value})}),placeholder:`例如:manager`,size:`sub`,value:n.value,variant:`base`}),title:`Value`}],dataSource:n,showHeader:!0,size:`sub`}),(0,a.jsx)(`div`,{style:Be,children:(0,a.jsx)(i.Button,{icon:d.PlusIcon,iconType:`leading`,onClick:()=>t({...e,options:[...e.options,jt(e.options)]}),variant:`base-secondary`,children:`新增選項`})})]})}function or(e,t,n){return(0,a.jsx)(`div`,{...t.draggableProps,"data-form-builder-field-key":e.fieldKey,ref:t.innerRef,style:{...ve,...n?ye:null,...t.draggableProps.style},children:(0,a.jsx)(i.BaseCard,{style:e.fieldKey===U?.fieldKey?be:void 0,children:sr(e,t,n)})})}function $(e,n,r,i=!1,o){return(0,a.jsx)(`div`,{style:i?Oe:De,children:(0,a.jsx)(`div`,{style:ke,children:(0,a.jsx)(t.t,{label:e,layout:i?s.FormFieldLayout.VERTICAL:s.FormFieldLayout.STRETCH,name:n,...o?{hintText:o.text,severity:o.severity}:{},children:r})})})}function sr(e,t,n){return(0,a.jsxs)(`div`,{...t.dragHandleProps??{},"aria-label":`選取或拖曳排序欄位`,onClick:()=>L(e.fieldKey),style:me,title:`點擊選取,拖曳排序`,children:[(0,a.jsx)(`span`,{"aria-label":`拖曳排序`,role:`img`,style:Le,title:`拖曳排序`,children:(0,a.jsx)(i.Icon,{icon:d.DotDragVerticalIcon,size:20})}),(0,a.jsxs)(`div`,{style:he,children:[(0,a.jsxs)(i.Typography,{component:`span`,ellipsis:!0,variant:`label-primary`,children:[e.label,e.required?(0,a.jsx)(`sup`,{"aria-label":`必填`,style:Ve,children:`*`}):null]}),(0,a.jsxs)(i.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,variant:`caption`,children:[ut(e.type),` ·`,e.required?` 必填`:` 選填`,` ·`,e.fieldKey,e.hidden?` · 只存不顯示`:null]})]}),(0,a.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:ge,children:[(0,a.jsx)(`div`,{style:_e,children:(0,a.jsx)(i.Toggle,{checked:!!e.required,disabled:n||e.hidden===!0,label:`必填`,onChange:t=>yn(e.fieldKey,t.target.checked)})}),(0,a.jsx)(i.Button,{disabled:n,icon:d.TrashIcon,iconType:`icon-only`,onClick:()=>en(e.fieldKey),variant:`destructive-ghost`,children:`移除欄位`})]})]})}function cr(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`h3`,children:`填寫預覽`}),(0,a.jsx)(n.t,{dataSourceContext:{kind:`preview`},onChange:vn,schema:_,uiSchema:D,value:Ft})]})}function lr(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`h3`,children:`Schema`}),(0,a.jsxs)(`div`,{style:je,children:[ur(`Form Schema`,`schemaJson`,(0,a.jsx)(ne,{height:`360px`,name:`schemaJson`,onChange:bn,placeholder:`輸入 Form Schema JSON`,value:k})),ur(`UI Schema`,`uiSchemaJson`,(0,a.jsx)(ne,{height:`240px`,name:`uiSchemaJson`,onChange:xn,placeholder:`輸入 UI Schema JSON`,value:Mt})),Lt?(0,a.jsx)(i.Typography,{color:`text-error`,style:Pe,variant:`body`,children:Lt}):null]})]})}function ur(e,n,r){return(0,a.jsx)(`div`,{style:Me,children:(0,a.jsx)(`div`,{style:Ne,children:(0,a.jsx)(t.t,{label:e,name:n,children:r})})})}}function ut(e){return re.find(t=>t.type===e)?.label??e}function dt(e){return`${e.key}@${e.version}`}function ft(e){return[e.supportsSearch?`可輸入關鍵字搜尋${e.minimumSearchLength>1?`(至少 ${e.minimumSearchLength} 字)`:``}`:`不支援搜尋`,e.paginationMode===`CURSOR`?`捲動載入更多(每次 ${e.pageSize} 筆)`:`一次載入完整清單(最多 ${e.maximumResultCount} 筆)`,e.revalidationPolicy===`ALWAYS`?`退回重送時一律重新確認`:`值與條件未變時沿用上次結果`]}function pt(e){return{id:dt(e),name:e.label}}function mt(e){if(!e)return nt;let t=e.from;switch(t.kind){case`FIELD`:return t.fieldKey;case`ROW_FIELD`:return`${tt}${t.columnKey}`;case`CONSTANT`:return C;case`EXPRESSION`:return w;default:return D(t)}}function D(e){return T}function O(e){switch(e){case`BOOLEAN`:return!1;case`NUMBER`:return 0;case`STRING_ARRAY`:return``;case`STRING`:return``;default:return``}}function ht(e,t){let n=e?.from.kind===`CONSTANT`?e.from.value:``;return t===`NUMBER`?typeof n==`number`?String(n):``:typeof n==`string`?n:``}function gt(e,t,n){return!n||n===nt?null:n===w?{from:{expression:``,kind:`EXPRESSION`},parameter:e}:n===C?{from:{kind:`CONSTANT`,value:O(t)},parameter:e}:n.startsWith(tt)?{from:{columnKey:n.slice(14),kind:`ROW_FIELD`},parameter:e}:{from:{fieldKey:n,kind:`FIELD`},parameter:e}}function _t(e){return e.kind===`remove-field`?`確認移除 dependency 欄位`:e.kind===`remove-column`?`確認移除表格欄`:e.kind===`replace-column`?`確認變更欄型別`:`確認變更選擇模式`}var k=[{label:`選項 A`,value:`option_a`},{label:`選項 B`,value:`option_b`}];function vt(e){let t=[];return e.defaultValue!==void 0&&t.push(`預設值`),e.type===`text`&&(typeof e.minLength==`number`||typeof e.maxLength==`number`)&&t.push(`長度限制`),e.type===`text`&&e.pattern&&t.push(`格式`),e.type!==`number`&&e.type!==`money`||typeof e.minimum!=`number`&&typeof e.maximum!=`number`||t.push(`數值範圍`),(0,f.isFormDataSourceFieldDefinition)(e)?t.push(`選項來源設定`):(0,f.isFormStaticOptionFieldDefinition)(e)&&!A(e.options)&&t.push(`${e.options.length} 個選項`),(e.type===`select`||e.type===`autocomplete`)&&e.mode===`multiple`&&t.push(`選擇模式`),t}function A(e){return e.length===k.length&&e.every((e,t)=>e.label===k[t]?.label&&e.value===k[t]?.value)}function yt(e,t){return t?{...e,pattern:t}:Object.fromEntries(Object.entries(e).filter(([e])=>e!==`pattern`&&e!==`patternErrorMessage`))}function bt(e,t){return t?{...e,patternErrorMessage:t}:Object.fromEntries(Object.entries(e).filter(([e])=>e!==`patternErrorMessage`))}function xt(e){return e&&!e.trim()?{severity:`error`,text:`格式不能只有空白,儲存時會被拒絕。`}:e&&e.length>f.TEXT_FIELD_PATTERN_MAX_LENGTH?{severity:`error`,text:`格式最多 ${f.TEXT_FIELD_PATTERN_MAX_LENGTH} 個字元,儲存時會被拒絕。`}:e&&!(0,f.compileTextFieldPattern)(e)?{severity:`error`,text:`這不是有效的正規表示式,儲存時會被拒絕。格式以 u 模式檢查,多餘的跳脫(例如在方括號 [ ] 外寫 \\-)也算錯誤。`}:e&&(0,f.hasRepeatedTextFieldPatternGroup)(e)?{severity:`error`,text:`格式裡的括號群組後面不能接重複次數(例如 (ab)+、(\\w|\\d)*、(ab){2}),填寫的內容可能讓系統卡住,儲存時會被拒絕。請把重複的部分直接寫出來,或改用 [ ] 字元集合加次數。`}:{severity:`info`,text:`填寫的內容要整段符合格式才能送出;留空表示不檢查格式。`}}function St(e){return e&&e.length>f.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH?{severity:`error`,text:`錯誤訊息最多 ${f.TEXT_FIELD_PATTERN_ERROR_MESSAGE_MAX_LENGTH} 個字元,儲存時會被拒絕。`}:void 0}function Ct(e,t){let n={fieldKey:e.fieldKey,label:e.label,required:e.required,...e.description?{description:e.description}:{},...e.placeholder?{placeholder:e.placeholder}:{}};return t===`select`||t===`autocomplete`?{...n,mode:`single`,options:[...k],type:t}:{...n,type:t}}function wt(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))}function Tt(e){return!!(e.visibleWhen||e.requiredWhen||e.readonlyWhen)}function Et(e){return{id:e.fieldKey,name:e.label}}function j(e){return e.type===`text`||e.type===`textarea`}function Dt(e){return typeof e==`string`?e:``}function Ot(e){let t=e.split(/[\n,]/u).map(e=>e.trim()).filter(Boolean);return t.length?t:void 0}function kt(e){return e?.join(`
3
+ `)??``}function M(e){return JSON.stringify(e,null,2)}function At(e,t,n){return e.map((e,r)=>r===t?{...e,...n}:e)}function jt(e){let t=e.length+1;return{label:`選項 ${t}`,value:Mt(e,t)}}function Mt(e,t){let n=`option_${t}`;return e.some(e=>e.value===n)?Mt(e,t+1):n}function Nt(e,t,n){let r=e[t];if(!r||t===n)return[...e];let i=e.filter((e,n)=>n!==t);return[...i.slice(0,n),r,...i.slice(n)]}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return E}});
4
+ //# sourceMappingURL=FormBuilderView-DjPGrOJ2.cjs.map