@rytass/bpm-core-react 0.13.3 → 0.13.4

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 (148) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +1 -0
  3. package/dist/chunks/{FormBuilderView-D4xIuPYB.js → FormBuilderView-BYLN6W-P.js} +2 -2
  4. package/dist/chunks/{FormBuilderView-D4xIuPYB.js.map → FormBuilderView-BYLN6W-P.js.map} +1 -1
  5. package/dist/chunks/{FormBuilderView-CLFlfDGe.cjs → FormBuilderView-VmdPVbg7.cjs} +2 -2
  6. package/dist/chunks/{FormBuilderView-CLFlfDGe.cjs.map → FormBuilderView-VmdPVbg7.cjs.map} +1 -1
  7. package/dist/chunks/FormRendererView-Bs8lTb4k.cjs +2 -0
  8. package/dist/chunks/{FormRendererView-BxGT16z0.cjs.map → FormRendererView-Bs8lTb4k.cjs.map} +1 -1
  9. package/dist/chunks/{FormRendererView-DUceSOXe.js → FormRendererView-UPowZZgw.js} +3 -3
  10. package/dist/chunks/{FormRendererView-DUceSOXe.js.map → FormRendererView-UPowZZgw.js.map} +1 -1
  11. package/dist/chunks/{approval-instance-list-page-BjX2kaoF.js → approval-instance-list-page-CPXMP3PL.js} +2 -2
  12. package/dist/chunks/{approval-instance-list-page-BjX2kaoF.js.map → approval-instance-list-page-CPXMP3PL.js.map} +1 -1
  13. package/dist/chunks/{approval-instance-list-page-CWiQvnfE.cjs → approval-instance-list-page-ax0pm8bt.cjs} +2 -2
  14. package/dist/chunks/{approval-instance-list-page-CWiQvnfE.cjs.map → approval-instance-list-page-ax0pm8bt.cjs.map} +1 -1
  15. package/dist/chunks/{compose-Bb-REfoB.js → compose-6P64PO1i.js} +5 -5
  16. package/dist/chunks/{compose-Bb-REfoB.js.map → compose-6P64PO1i.js.map} +1 -1
  17. package/dist/chunks/{compose-DzRYZcqe.cjs → compose-BnSRL4ml.cjs} +2 -2
  18. package/dist/chunks/{compose-DzRYZcqe.cjs.map → compose-BnSRL4ml.cjs.map} +1 -1
  19. package/dist/chunks/{dashboard-page-DJ9vOPga.js → dashboard-page-CeCLV1tp.js} +2 -2
  20. package/dist/chunks/{dashboard-page-DJ9vOPga.js.map → dashboard-page-CeCLV1tp.js.map} +1 -1
  21. package/dist/chunks/{dashboard-page-CH87L5nx.cjs → dashboard-page-DooFJsxM.cjs} +2 -2
  22. package/dist/chunks/{dashboard-page-CH87L5nx.cjs.map → dashboard-page-DooFJsxM.cjs.map} +1 -1
  23. package/dist/chunks/{delegations-vpLtus9g.cjs → delegations-8LsxcQM4.cjs} +2 -2
  24. package/dist/chunks/{delegations-vpLtus9g.cjs.map → delegations-8LsxcQM4.cjs.map} +1 -1
  25. package/dist/chunks/{delegations-0MbJ7CWj.js → delegations-B8gLSt0i.js} +4 -5
  26. package/dist/chunks/{delegations-0MbJ7CWj.js.map → delegations-B8gLSt0i.js.map} +1 -1
  27. package/dist/chunks/{delegations-DyMGIDpp.js → delegations-DRupxJ4_.js} +4 -5
  28. package/dist/chunks/{delegations-DyMGIDpp.js.map → delegations-DRupxJ4_.js.map} +1 -1
  29. package/dist/chunks/{delegations-Bc9psOZ3.cjs → delegations-DlYwMiAW.cjs} +2 -2
  30. package/dist/chunks/{delegations-Bc9psOZ3.cjs.map → delegations-DlYwMiAW.cjs.map} +1 -1
  31. package/dist/chunks/{designer-C6oIO9Kq.js → designer-C3s2kSna.js} +1342 -841
  32. package/dist/chunks/designer-C3s2kSna.js.map +1 -0
  33. package/dist/chunks/designer-_g58R6rQ.cjs +65 -0
  34. package/dist/chunks/designer-_g58R6rQ.cjs.map +1 -0
  35. package/dist/chunks/detail-Db-UOELp.cjs +2 -0
  36. package/dist/chunks/detail-Db-UOELp.cjs.map +1 -0
  37. package/dist/chunks/detail-pYEIk-jW.js +2325 -0
  38. package/dist/chunks/detail-pYEIk-jW.js.map +1 -0
  39. package/dist/chunks/{login-9bCXyjbX.cjs → login-AtVxZBsC.cjs} +2 -2
  40. package/dist/chunks/{login-9bCXyjbX.cjs.map → login-AtVxZBsC.cjs.map} +1 -1
  41. package/dist/chunks/{login-BKxpLibd.js → login-C6qlTC6F.js} +2 -2
  42. package/dist/chunks/{login-BKxpLibd.js.map → login-C6qlTC6F.js.map} +1 -1
  43. package/dist/chunks/{orgs-Cr_7zsAD.js → orgs-BpqVu5ka.js} +2 -2
  44. package/dist/chunks/{orgs-Cr_7zsAD.js.map → orgs-BpqVu5ka.js.map} +1 -1
  45. package/dist/chunks/orgs-D0-5BaHT.cjs +2 -0
  46. package/dist/chunks/{orgs-Bz8hBMoQ.cjs.map → orgs-D0-5BaHT.cjs.map} +1 -1
  47. package/dist/chunks/providers-DHtDZFNA.cjs +2 -0
  48. package/dist/chunks/{providers-BsEn3ikK.cjs.map → providers-DHtDZFNA.cjs.map} +1 -1
  49. package/dist/chunks/{providers-DjLh4oLY.js → providers-J5eyByQj.js} +7 -7
  50. package/dist/chunks/{providers-DjLh4oLY.js.map → providers-J5eyByQj.js.map} +1 -1
  51. package/dist/chunks/{routes-config-fDVHmvXi.cjs → routes-config-C1j_vFKo.cjs} +2 -2
  52. package/dist/chunks/routes-config-C1j_vFKo.cjs.map +1 -0
  53. package/dist/chunks/{routes-config-RBYQtUd0.js → routes-config-yZbESPlw.js} +3 -2
  54. package/dist/chunks/routes-config-yZbESPlw.js.map +1 -0
  55. package/dist/chunks/use-bpm-member-D57LKe_u.js +20 -0
  56. package/dist/chunks/use-bpm-member-D57LKe_u.js.map +1 -0
  57. package/dist/chunks/use-bpm-member-DpNAQtNC.cjs +2 -0
  58. package/dist/chunks/use-bpm-member-DpNAQtNC.cjs.map +1 -0
  59. package/dist/index.cjs +1 -1
  60. package/dist/index.cjs.map +1 -1
  61. package/dist/index.js +19 -24
  62. package/dist/index.js.map +1 -1
  63. package/dist/lib/routes-config.d.ts +2 -0
  64. package/dist/lib/use-bpm-member.d.ts +6 -0
  65. package/dist/next/index.cjs +1 -1
  66. package/dist/next/index.js +2 -2
  67. package/dist/pages/admin/delegations/index.cjs +1 -1
  68. package/dist/pages/admin/delegations/index.js +1 -1
  69. package/dist/pages/admin/orgs/index.cjs +1 -1
  70. package/dist/pages/admin/orgs/index.js +1 -1
  71. package/dist/pages/admin/webhook-endpoints/index.cjs +2 -0
  72. package/dist/pages/admin/webhook-endpoints/index.cjs.map +1 -0
  73. package/dist/pages/admin/webhook-endpoints/index.d.ts +4 -0
  74. package/dist/pages/admin/webhook-endpoints/index.js +14 -0
  75. package/dist/pages/admin/webhook-endpoints/index.js.map +1 -0
  76. package/dist/pages/delegations/index.cjs +1 -1
  77. package/dist/pages/delegations/index.js +1 -1
  78. package/dist/pages/instances/detail/index.cjs +1 -1
  79. package/dist/pages/instances/detail/index.js +1 -1
  80. package/dist/pages/login/index.cjs +1 -1
  81. package/dist/pages/login/index.js +1 -1
  82. package/dist/pages/templates/compose/index.cjs +1 -1
  83. package/dist/pages/templates/compose/index.js +1 -1
  84. package/dist/pages/templates/designer/index.cjs +1 -1
  85. package/dist/pages/templates/designer/index.js +1 -1
  86. package/dist/style.css +1 -1
  87. package/dist/views/admin/delegations/index.cjs +1 -1
  88. package/dist/views/admin/delegations/index.js +1 -1
  89. package/dist/views/admin/index.cjs +1 -1
  90. package/dist/views/admin/index.d.ts +1 -0
  91. package/dist/views/admin/index.js +4 -3
  92. package/dist/views/admin/orgs/index.cjs +1 -1
  93. package/dist/views/admin/orgs/index.js +1 -1
  94. package/dist/views/admin/webhook-endpoints/AdminWebhookEndpointsView.d.ts +8 -0
  95. package/dist/views/admin/webhook-endpoints/index.cjs +2 -0
  96. package/dist/views/admin/webhook-endpoints/index.cjs.map +1 -0
  97. package/dist/views/admin/webhook-endpoints/index.d.ts +1 -0
  98. package/dist/views/admin/webhook-endpoints/index.js +729 -0
  99. package/dist/views/admin/webhook-endpoints/index.js.map +1 -0
  100. package/dist/views/cc/index.cjs +1 -1
  101. package/dist/views/cc/index.js +1 -1
  102. package/dist/views/dashboard/index.cjs +1 -1
  103. package/dist/views/dashboard/index.js +1 -1
  104. package/dist/views/delegations/index.cjs +1 -1
  105. package/dist/views/delegations/index.js +1 -1
  106. package/dist/views/forms/builder/index.cjs +1 -1
  107. package/dist/views/forms/builder/index.js +1 -1
  108. package/dist/views/forms/renderer/index.cjs +1 -1
  109. package/dist/views/forms/renderer/index.js +1 -1
  110. package/dist/views/inbox/index.cjs +1 -1
  111. package/dist/views/inbox/index.js +1 -1
  112. package/dist/views/instances/detail/InstanceDetailView.d.ts +6 -1
  113. package/dist/views/instances/detail/index.cjs +1 -1
  114. package/dist/views/instances/detail/index.d.ts +1 -0
  115. package/dist/views/instances/detail/index.js +2 -2
  116. package/dist/views/instances/detail/sections/InstanceWebhookDeliveriesSection.d.ts +20 -0
  117. package/dist/views/instances/detail/sections/shared.d.ts +37 -4
  118. package/dist/views/instances/new/index.cjs +1 -1
  119. package/dist/views/instances/new/index.js +2 -2
  120. package/dist/views/login/index.cjs +1 -1
  121. package/dist/views/login/index.js +1 -1
  122. package/dist/views/search/index.cjs +1 -1
  123. package/dist/views/search/index.js +1 -1
  124. package/dist/views/sent/index.cjs +1 -1
  125. package/dist/views/sent/index.js +1 -1
  126. package/dist/views/templates/compose/index.cjs +1 -1
  127. package/dist/views/templates/compose/index.js +1 -1
  128. package/dist/views/templates/designer/NotifyWebhookTargetsEditor.d.ts +20 -0
  129. package/dist/views/templates/designer/index.cjs +1 -1
  130. package/dist/views/templates/designer/index.js +1 -1
  131. package/dist/views/templates/designer/notify-webhook-designer.d.ts +74 -0
  132. package/dist/views/templates/index.cjs +1 -1
  133. package/dist/views/templates/index.js +1 -1
  134. package/dist/views/templates/versions/index.cjs +1 -1
  135. package/dist/views/templates/versions/index.js +1 -1
  136. package/package.json +13 -3
  137. package/dist/chunks/FormRendererView-BxGT16z0.cjs +0 -2
  138. package/dist/chunks/designer-C6oIO9Kq.js.map +0 -1
  139. package/dist/chunks/designer-gFUdImeZ.cjs +0 -65
  140. package/dist/chunks/designer-gFUdImeZ.cjs.map +0 -1
  141. package/dist/chunks/detail-BgKgMvYx.js +0 -2044
  142. package/dist/chunks/detail-BgKgMvYx.js.map +0 -1
  143. package/dist/chunks/detail-Dnz5aaI-.cjs +0 -2
  144. package/dist/chunks/detail-Dnz5aaI-.cjs.map +0 -1
  145. package/dist/chunks/orgs-Bz8hBMoQ.cjs +0 -2
  146. package/dist/chunks/providers-BsEn3ikK.cjs +0 -2
  147. package/dist/chunks/routes-config-RBYQtUd0.js.map +0 -1
  148. package/dist/chunks/routes-config-fDVHmvXi.cjs.map +0 -1
@@ -1,3 +1,3 @@
1
- "use client";const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./bpm-form-field-Bc6k4ZEO.cjs"),n=require("./FormRendererView-BxGT16z0.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("react/jsx-runtime"),o=require("@mezzanine-ui/core/form"),s=require("@mezzanine-ui/icons"),c=require("@rytass/bpm-core-client/form"),l=require("@rytass/bpm-core-shared/form"),u=require("@hello-pangea/dnd"),d=require("next/dynamic");d=e.t(d,1);let f=require("@codemirror/lang-json"),p=require("@codemirror/view");var m={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%`},h=[(0,f.json)(),p.EditorView.lineWrapping,p.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`}})],g=(0,d.default)(()=>import(`@uiw/react-codemirror`),{loading:()=>(0,a.jsx)(`div`,{style:m,children:`載入 JSON 編輯器`}),ssr:!1});function ee({disabled:e=!1,height:t,name:n,onChange:r,placeholder:i,value:o}){return(0,a.jsx)(g,{"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:[...h],height:t,indentWithTab:!1,onChange:r,placeholder:i,readOnly:e,theme:`light`,value:o,width:`100%`})}var _=[{description:`單行文字、姓名、編號`,icon:s.AlignLeftIcon,label:`文字`,type:`text`},{description:`多行補充內容`,icon:s.FileIcon,label:`長文字`,type:`textarea`},{description:`金額、數量、分數`,icon:s.CurrencyDollarIcon,label:`數字`,type:`number`},{description:`金額與費用`,icon:s.CurrencyDollarIcon,label:`金額`,type:`money`},{description:`日期或到期日`,icon:s.CalendarIcon,label:`日期`,type:`date`},{description:`日期與時間`,icon:s.CalendarIcon,label:`日期時間`,type:`datetime`},{description:`是 / 否狀態`,icon:s.CheckedIcon,label:`開關`,type:`boolean`},{description:`固定選項擇一`,icon:s.ListIcon,label:`下拉選單`,type:`select`},{description:`可搜尋的固定選項`,icon:s.ListIcon,label:`自動完成`,type:`autocomplete`},{description:`固定選項單選`,icon:s.DotGridIcon,label:`單選`,type:`radio`},{description:`固定選項複選`,icon:s.CheckedOutlineIcon,label:`複選`,type:`checkbox`},{description:`附件或佐證資料`,icon:s.FileAttachmentIcon,label:`附件`,type:`file_upload`},{description:`多列多欄明細`,icon:s.DotGridIcon,label:`表格`,type:`table`}],v=_.filter(e=>(0,l.isTableColumnFieldType)(e.type)).map(e=>({id:e.type,name:e.label})),te={alignItems:`start`,display:`flex`,flexWrap:`wrap`,gap:16},ne={flex:`0.55 1 300px`,minWidth:0},re={flex:`1.45 1 720px`,minWidth:620,paddingBottom:260},ie=240,ae={BOOLEAN:`開關`,NUMBER:`數字`,STRING:`文字或選單`,STRING_ARRAY:`多選`},oe=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings missing required parameter: (.+)$/u,se=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings unknown parameter: (.+)$/u,y={display:`grid`,gap:12},ce={display:`flex`,flexWrap:`wrap`,gap:6},le={flex:`0 0 auto`,whiteSpace:`nowrap`},ue={display:`grid`,gap:8},de={alignItems:`center`,cursor:`grab`,display:`flex`,gap:12,touchAction:`none`},fe={display:`grid`,flex:`1 1 auto`,gap:2,minWidth:0},pe={alignItems:`center`,display:`flex`,flex:`0 0 auto`,gap:4},me={alignItems:`center`,display:`flex`,gap:6},he={cursor:`pointer`,userSelect:`none`},ge={filter:`drop-shadow(0 8px 18px rgba(0, 0, 0, 0.12))`},_e={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)`},ve={alignItems:`center`,border:`1px dashed var(--mzn-color-border-neutral)`,borderRadius:6,display:`grid`,gap:12,minHeight:240,padding:32,textAlign:`center`},ye={display:`flex`,gap:8,justifyContent:`center`},be={display:`grid`,gap:14},b={display:`grid`,columnGap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 360px))`,justifyContent:`start`,maxWidth:736,rowGap:8},xe={gridColumn:`1 / -1`},Se={alignItems:`center`,display:`flex`,gap:8,gridColumn:`1 / -1`,justifyContent:`flex-end`},x={gridColumn:`1 / -1`},Ce={alignItems:`start`,display:`block`,width:`100%`},we={...Ce,gridColumn:`1 / -1`},Te={minWidth:0,width:`100%`},Ee={minWidth:`100%`,width:`100%`},De={display:`grid`,gap:14},Oe={alignItems:`start`,display:`block`,width:`100%`},ke={minWidth:0,width:`100%`},Ae={gridColumn:`2 / -1`},je={display:`grid`,gap:10,width:`100%`},Me={display:`grid`,gap:8,gridTemplateColumns:`repeat(auto-fit, minmax(160px, 1fr))`},Ne={display:`inline-flex`},Pe={display:`grid`,gap:16},Fe={display:`grid`,gap:8},Ie={display:`flex`,justifyContent:`flex-end`},Le={color:`var(--mzn-color-text-error)`,fontSize:`0.72em`,lineHeight:0,marginLeft:2,verticalAlign:`super`},Re={display:`grid`,gap:10,gridColumn:`1 / -1`},ze={display:`grid`,gap:2},Be={display:`grid`,gap:8},Ve={display:`flex`,justifyContent:`flex-start`},He={display:`flex`,flexWrap:`wrap`,gap:4},Ue={backgroundColor:`var(--mzn-color-bg-surface-secondary)`,borderRadius:6,display:`grid`,gap:4,padding:10},We={...b,gridTemplateColumns:`minmax(280px, 520px)`,padding:`4px 0 8px`},Ge={display:`grid`,gap:8,gridColumn:`1 / -1`},Ke={alignItems:`center`,display:`flex`,gap:12,justifyContent:`space-between`},qe={alignItems:`baseline`,display:`flex`,gap:2},Je={display:`grid`,gap:4};function Ye(e){e&&(e.style.width=`100%`)}var Xe={fields:[],schemaVersion:1},Ze={layout:[],schemaVersion:1},S=`__STATIC_OPTIONS__`,C=`__CONSTANT__`,w=`__ROW_FIELD__:`,T=`__UNBOUND__`,Qe=[{id:S,name:`靜態選項`}],$e=[{id:`single`,name:`單選`},{id:`multiple`,name:`複選`}],et=[{id:`unset`,name:`不預設`},{id:`true`,name:`是`},{id:`false`,name:`否`}],tt=[{id:`true`,name:`是`},{id:`false`,name:`否`}],nt=[{label:`顯示`,name:`fieldVisibleWhen`,supportingText:`符合條件時才顯示這個欄位。`,target:`visibleWhen`},{label:`必填`,name:`fieldRequiredWhen`,supportingText:`符合條件時才要求填寫這個欄位。`,target:`requiredWhen`},{label:`唯讀`,name:`fieldReadonlyWhen`,supportingText:`符合條件時不允許修改這個欄位。`,target:`readonlyWhen`}];function E({onChange:e,value:d}){let f=d?.schema??Xe,p=d?.uiSchema??Ze,[m,h]=(0,r.useState)(f),[g,E]=(0,r.useState)(p),[st,O]=(0,r.useState)(A(f)),[ft,j]=(0,r.useState)(A(p)),[xt,St]=(0,r.useState)({}),[Ct,N]=(0,r.useState)(null),[P,wt]=(0,r.useState)(`design`),[F,I]=(0,r.useState)(null),[L,Tt]=(0,r.useState)([]),[R,Et]=(0,r.useState)(null),[Dt,Ot]=(0,r.useState)(`loading`),[z,B]=(0,r.useState)(null),[kt,At]=(0,r.useState)(!1),[V,H]=(0,r.useState)(null),[jt,U]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=!0;return(0,c.listFormDataSources)().then(t=>{e&&(Tt(t),Et(null),Ot(`ready`))}).catch(t=>{e&&(Tt([]),Et(`目前無法載入 DataSource Catalog,請稍後重試。`),Ot(`unavailable`))}),()=>{e=!1}},[]),(0,r.useEffect)(()=>{m.fields.some(e=>e.fieldKey===F)||I(m.fields[0]?.fieldKey??null)},[m.fields,F]),(0,r.useEffect)(()=>{St(e=>(0,c.buildFormRendererValues)(m.fields,e))},[m.fields]),(0,r.useEffect)(()=>{P!==`advanced`&&(O(A(m)),j(A(g)))},[P,m,g]);let W=(0,r.useMemo)(()=>m.fields.find(e=>e.fieldKey===F)??m.fields[0]??null,[m.fields,F]);(0,r.useEffect)(()=>{e?.({schema:m,uiSchema:g})},[m,g]);function G(e){let t=m.fields.length+1,n=(0,c.createFieldDefinition)(e,t);h({...m,fields:[...m.fields,n]}),E({...g,layout:[...g.layout,{fieldKey:n.fieldKey,width:e===`textarea`||e===`file_upload`||e===`table`?`FULL`:`HALF`}]}),I(n.fieldKey),wt(`design`),N(null)}function Mt(e){let t=e;t===`advanced`&&P!==`advanced`&&(O(A(m)),j(A(g))),wt(t)}function Nt(e){let t=m.fields.flatMap(t=>(0,l.isTableFieldDefinition)(t)?t.columns.flatMap(n=>(0,l.isFormDataSourceFieldDefinition)(n)&&(0,c.readFormDataSourceFieldDependencyKeys)(n).includes(e)?[`${t.fieldKey}.${n.fieldKey}`]:[]):(0,l.isFormDataSourceFieldDefinition)(t)&&(0,c.readFormDataSourceFieldDependencyKeys)(t).includes(e)?[t.fieldKey]:[]);if(t.length>0){H({affectedFieldKeys:t,fieldKey:e,kind:`remove-field`});return}Pt(e)}function Pt(e){let t=m.fields.filter(t=>t.fieldKey!==e);h({...m,fields:t}),E({...g,layout:g.layout.filter(t=>t.fieldKey!==e)}),I(F===e?t[0]?.fieldKey??null:F),N(null),B(null)}function Ft(e){let t=e.destination;t&&e.source.index!==t.index&&(h(n=>({...n,fields:M(n.fields,e.source.index,t.index)})),E(n=>({...n,layout:M(n.layout,e.source.index,t.index)})),N(null))}function K(e){It(t=>({...t,...e}))}function It(e){if(!W)return;let t=W.fieldKey,n=e(W),r=n.fieldKey,i={...m,fields:m.fields.map(e=>e.fieldKey===t?n:e)},a=t===r?i:(0,c.renameFormDataSourceFieldBindings)(i,t,r);h(a),E({...g,layout:g.layout.map(e=>e.fieldKey===t?{...e,fieldKey:r}:e)}),I(r),N(null),B(null)}function Lt(e){It(()=>e)}function q(e,t){h(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e&&(0,l.isTableFieldDefinition)(n)?t(n):n)})),N(null),B(null)}function J(e,t,n){let r=e.columns[t]?.fieldKey;q(e.fieldKey,e=>{let i={...e,columns:e.columns.map((e,r)=>r===t?n:e)};return typeof r==`string`&&r!==n.fieldKey?(0,c.renameFormTableColumnBindings)(i,r,n.fieldKey):i})}function Rt(e){let t=(0,c.createTableColumnDefinition)(e.columns,`text`);q(e.fieldKey,e=>({...e,columns:[...e.columns,t]})),U(e.columns.length)}function zt(e,t){q(e,e=>({...e,columns:e.columns.filter((e,n)=>n!==t)})),U(e=>e===null||e<t?e:e===t?null:e-1)}function Bt(e,t,n){q(e.fieldKey,e=>({...e,columns:M(e.columns,t,n)})),U(e=>e===null?e:e===t?n:e>t&&e<=n?e-1:e<t&&e>=n?e+1:e)}function Vt(e,t,n){if(e.type!==`select`&&e.type!==`autocomplete`||(0,l.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 Ht(e,t,n=`此變更會替換目前選項來源;既有 options、dynamic reference 或 bindings 可能失效。`){JSON.stringify(e)!==JSON.stringify(t)&&H({fieldKey:e.fieldKey,impact:n,kind:`replace-field`,nextField:t})}function Ut(e,t,n){if(!t)return;if(t===S){if(!(0,l.isFormDataSourceFieldDefinition)(e))return;let{dataSource:t,defaultValue:r,...i}=e;n({...i,options:[]});return}let r=L.find(e=>D(e)===t);if(!r)return;if((0,l.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 Wt(){V&&(Gt(V),H(null))}function Gt(e){if(e.kind===`remove-field`){Pt(e.fieldKey);return}if(e.kind===`remove-column`){zt(e.fieldKey,e.columnIndex);return}if(e.kind===`replace-column`){q(e.fieldKey,t=>({...t,columns:t.columns.map(t=>t.fieldKey===e.columnKey?e.nextColumn:t)})),U(e.columnIndex);return}h({...m,fields:m.fields.map(t=>t.fieldKey===e.fieldKey?e.nextField:t)}),N(null),B(null)}async function Kt(){At(!0);try{let e=await(0,c.lintFormSchema)(m,g);B(e.errors.map(qt))}catch{B([`目前無法完成 DataSource schema 驗證。`])}finally{At(!1)}}function qt(e){let t=oe.exec(e);if(t?.[1]&&t[3])return`${Jt(t[1],t[2])}尚未指定必要參數「${Yt(t[1],t[2],t[3])}」的來源`;let n=se.exec(e);return n?.[1]&&n[3]?`${Jt(n[1],n[2])}綁定了來源沒有的參數「${n[3]}」`:(0,c.readFormSchemaLintMessage)(e)}function Jt(e,t){let n=m.fields[Number(e)];if(!n)return``;let r=n.label||n.fieldKey,i=Y(n,t);return i?`「${r}」表格的「${i.label||i.fieldKey}」欄`:`「${r}」欄位`}function Yt(e,t,n){let r=m.fields[Number(e)];if(!r)return n;let i=Y(r,t)??r,a=(0,l.isFormDataSourceFieldDefinition)(i)?i.dataSource:null;return(a?L.find(e=>e.key===a.key&&e.version===a.version):void 0)?.parameters.find(e=>e.key===n)?.label||n}function Y(e,t){return typeof t==`string`&&(0,l.isTableFieldDefinition)(e)?e.columns[Number(t)]:void 0}function Xt(e){St(e)}function Zt(e,t){h(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e?{...n,required:t}:n)})),N(null)}function Qt(e){O(e);try{h(JSON.parse(e)),N(null)}catch{N(`Form Schema JSON 格式不正確`)}}function $t(e){j(e);try{E(JSON.parse(e)),N(null)}catch{N(`UI Schema JSON 格式不正確`)}}return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(i.SectionGroup,{children:(0,a.jsx)(i.Section,{children:(0,a.jsxs)(`div`,{style:Pe,children:[(0,a.jsxs)(i.Tab,{activeKey:P,onChange:Mt,size:`sub`,children:[(0,a.jsx)(i.TabItem,{children:`設計`},`design`),(0,a.jsx)(i.TabItem,{children:`預覽`},`preview`),(0,a.jsx)(i.TabItem,{children:`進階`},`advanced`)]}),P===`design`?en():null,P===`preview`?zn():null,P===`advanced`?Bn():null]})})})}),V?(0,a.jsx)(i.Modal,{cancelText:`返回`,confirmText:`確認變更`,modalType:`standard`,onCancel:()=>H(null),onClose:()=>H(null),onConfirm:Wt,open:!0,showModalFooter:!0,showModalHeader:!0,title:ut(V),children:V.kind===`remove-field`?(0,a.jsxs)(`div`,{style:Fe,children:[(0,a.jsx)(i.Typography,{variant:`body`,children:`此欄位仍被下列 DataSource binding 使用;移除後請重新設定這些欄位。`}),(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:V.affectedFieldKeys.join(`、`)})]}):V.kind===`remove-column`?(0,a.jsxs)(i.Typography,{variant:`body`,children:[`移除欄「`,V.columnKey,`」後,既有案件仍保留原本的表單版本,但新版本的這一欄資料將不再被填寫。`]}):(0,a.jsx)(i.Typography,{variant:`body`,children:V.impact})}):null]});function en(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsxs)(`div`,{style:ue,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`新增欄位`}),(0,a.jsx)(`div`,{style:ce,children:_.map(e=>(0,a.jsx)(i.Button,{icon:e.icon,iconType:`leading`,onClick:()=>G(e.type),size:`sub`,style:le,type:`button`,variant:`base-secondary`,children:e.label},e.type))})]}),(0,a.jsxs)(`div`,{style:te,children:[(0,a.jsxs)(`div`,{style:{...y,...ne},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`表單畫布`}),m.fields.length>0?(0,a.jsx)(u.DragDropContext,{onDragEnd:Ft,children:(0,a.jsx)(u.Droppable,{droppableId:`form-builder-fields`,children:e=>(0,a.jsxs)(`div`,{...e.droppableProps,ref:e.innerRef,style:y,children:[m.fields.map((e,t)=>(0,a.jsx)(u.Draggable,{draggableId:e.fieldKey,index:t,children:(t,n)=>Ln(e,t,n.isDragging)},e.fieldKey)),e.placeholder]})})}):(0,a.jsxs)(`div`,{style:ve,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:ye,children:[(0,a.jsx)(i.Button,{onClick:()=>G(`text`),variant:`base-primary`,children:`新增文字欄位`}),(0,a.jsx)(i.Button,{onClick:()=>G(`textarea`),variant:`base-secondary`,children:`新增長文字`})]})]})]}),(0,a.jsxs)(`div`,{style:{...y,...re},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`欄位設定`}),W?tn(W):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`請先新增或選取欄位。`})]})]})]})}function tn(e){return(0,a.jsxs)(`div`,{style:be,children:[nn(e),(0,l.isTableFieldDefinition)(e)?sn(e):null,rn(e)]})}function nn(e){return(0,a.jsxs)(`div`,{style:b,children:[(0,a.jsx)(`div`,{style:Se,children:(0,a.jsx)(i.Badge,{size:`main`,text:rt(e.type),variant:`text-info`})}),$(`標題`,`fieldLabel`,(0,a.jsx)(i.Input,{onChange:e=>K({label:e.target.value}),placeholder:`例如:申請金額`,value:e.label,variant:`base`})),$(`欄位 Key`,`fieldKey`,(0,a.jsx)(i.Input,{onChange:e=>K({fieldKey:e.target.value}),placeholder:`例如:amount`,value:e.fieldKey,variant:`base`})),(0,l.isTableFieldDefinition)(e)?null:$(`提示文字`,`fieldPlaceholder`,(0,a.jsx)(i.Input,{onChange:e=>K({placeholder:e.target.value||void 0}),placeholder:`例如:請輸入申請金額`,value:e.placeholder??``,variant:`base`})),an(e,Lt,Ht)]})}function rn(e){return(0,a.jsx)(i.Accordion,{defaultExpanded:mt(e),size:`sub`,title:`進階設定`,children:(0,a.jsxs)(`div`,{style:b,children:[(0,a.jsx)(i.Typography,{component:`h3`,style:xe,variant:`label-primary`,children:`條件規則`}),(0,a.jsx)(i.Typography,{color:`text-neutral`,style:x,variant:`body`,children:`只有需要根據其他欄位改變顯示、必填或唯讀狀態時才需要設定。`}),jn(e)]})})}function an(e,t,n,r){return gt(e)?fn(e,t):(0,c.isNumberFieldDefinition)(e)?pn(e,t):(0,c.isDateFieldDefinition)(e)?mn(e,t):(0,l.isFormOptionFieldDefinition)(e)?hn(e,t,n,r):e.type===`boolean`?kn(e,t):e.type===`file_upload`?An(e,t):(0,l.isTableFieldDefinition)(e)?on(e):null}function on(e){let t=(0,c.readFormTableRowBounds)(e);return(0,a.jsxs)(a.Fragment,{children:[$(`最少列數`,`fieldMinRows`,Q(e.minRows,t=>q(e.fieldKey,e=>({...e,minRows:t})),`例如:1`,{max:t.maxRows,min:0})),$(`最多列數`,`fieldMaxRows`,Q(e.maxRows,t=>q(e.fieldKey,e=>({...e,maxRows:t})),`未設定即為 ${l.FORM_TABLE_MAX_ROWS}`,{max:l.FORM_TABLE_MAX_ROWS,min:Math.max(t.minRows,1)})),$(`新增列按鈕文字`,`fieldAddRowLabel`,(0,a.jsx)(i.Input,{onChange:t=>q(e.fieldKey,e=>({...e,addRowLabel:t.target.value||void 0})),placeholder:`預設為「新增一列」`,value:e.addRowLabel??``,variant:`base`}))]})}function sn(e){return(0,a.jsxs)(`div`,{style:Ge,children:[(0,a.jsxs)(`div`,{style:Ke,children:[(0,a.jsxs)(i.Typography,{component:`h3`,variant:`label-primary`,children:[`欄(`,e.columns.length,`)`]}),(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>Rt(e),size:`sub`,type:`button`,variant:`base-secondary`,children:`新增欄`})]}),cn(e)]})}function cn(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=>J(e,t.index,{...X(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:ie,onChange:n=>un(e,t.index,n?.id),options:[...v],size:`sub`,value:(0,c.readSelectOption)(v,t.type)}),title:`型別`},{key:`required`,render:t=>(0,a.jsx)(i.Toggle,{checked:X(e,t.index).required===!0,inputProps:{"aria-label":`${t.label||t.fieldKey} 必填`},onChange:n=>J(e,t.index,{...X(e,t.index),required:n.target.checked}),size:`sub`}),title:`必填`}],r={render:t=>[{disabled:()=>e.columns.length<=1,icon:s.TrashIcon,iconType:`leading`,name:`移除此欄`,onClick:()=>H({columnIndex:t.index,columnKey:t.fieldKey,fieldKey:e.fieldKey,kind:`remove-column`}),variant:`destructive-ghost`}],width:104},o=jt===null?void 0:t[jt]?.key;return(0,a.jsx)(i.Table,{actions:r,columns:n,dataSource:t,draggable:{enabled:!0,onDragEnd:(t,n)=>Bt(e,n.fromIndex,n.toIndex)},expandable:{expandedRowKeys:o?[o]:[],expandedRowRender:t=>ln(e,t.index),onExpand:(e,t)=>U(e?t.index:null)},fullWidth:!0,rowHeightPreset:`roomy`,showHeader:!0,size:`sub`})}function ln(e,t){let n=e.columns[t];return n?(0,a.jsxs)(`div`,{style:We,children:[$(`欄位 Key`,`columnFieldKey`,(0,a.jsx)(i.Input,{onChange:r=>J(e,t,{...n,fieldKey:r.target.value}),placeholder:`例如:qty`,value:n.fieldKey,variant:`base`})),$(`提示文字`,`columnPlaceholder`,(0,a.jsx)(i.Input,{onChange:r=>J(e,t,{...n,placeholder:r.target.value||void 0}),placeholder:`例如:請輸入數量`,value:n.placeholder??``,variant:`base`})),an(n,n=>{(0,l.isTableColumnFieldType)(n.type)&&J(e,t,n)},(n,r)=>{(0,l.isTableColumnFieldType)(r.type)&&J(e,t,r)},e.columns)]}):null}function un(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=pt(r,i),o=dt(r);if(o.length===0){J(e,t,a),U(t);return}H({columnIndex:t,columnKey:r.fieldKey,fieldKey:e.fieldKey,impact:`「${r.label||r.fieldKey}」改為${dn(i)}後,這一欄的${o.join(`、`)}會被捨棄。`,kind:`replace-column`,nextColumn:a})}function dn(e){return v.find(t=>t.id===e)?.name??e}function X(e,t){let n=e.columns[t];if(!n)throw Error(`Table ${e.fieldKey} has no column at index ${t}.`);return n}function fn(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`textarea`?Pn({name:`fieldDefaultValue`,onChange:n=>t({...e,defaultValue:n||void 0}),placeholder:`輸入此欄位的預設文字`,rows:3,value:k(e.defaultValue)}):(0,a.jsx)(i.Input,{onChange:n=>t({...e,defaultValue:n.target.value||void 0}),placeholder:`輸入此欄位的預設文字`,value:k(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}))]})}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 mn(e,t){return $(`預設值`,`fieldDefaultValue`,Fn(e,k(e.defaultValue),n=>t({...e,defaultValue:n})))}function hn(e,t,n,r){let o=(0,c.readCompatibleFormDataSourceDescriptors)(e.type,L),s={commit:e=>t(e),rowColumns:r},u=(0,l.isFormDataSourceFieldDefinition)(e)?D(e.dataSource):S,d=(0,l.isFormDataSourceFieldDefinition)(e)?L.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version):null,f=d?o.some(e=>e.key===d.key&&e.version===d.version):!1,p=[...Qe,...o.map(at),...(0,l.isFormDataSourceFieldDefinition)(e)&&!f?[{id:u,name:`${e.dataSource.key} v${e.dataSource.version}(目前不可用或不支援)`}]:[]],m=(0,l.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`)&&Vt(e,t.id,n)},options:[...$e],value:(0,c.readSelectOption)($e,m)})):$(`選擇模式`,`fieldSelectionMode`,(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:m===`multiple`?`固定複選`:`固定單選`})),$(`選項來源`,`fieldOptionSource`,(0,a.jsx)(i.Select,{clearable:!1,disabled:Dt===`loading`&&!(0,l.isFormDataSourceFieldDefinition)(e),onChange:n=>Ut(e,n?.id,t),options:p,placeholder:`選擇選項來源`,value:(0,c.readSelectOption)(p,u)})),(0,l.isFormDataSourceFieldDefinition)(e)?gn(e,o,s):On(e,t)]})}function gn(e,t,n){let r=L.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version),o=r&&!(0,c.isFormDataSourceDescriptorCompatible)(r,e.type);return(0,a.jsxs)(`div`,{style:Re,children:[Dt===`loading`?(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`正在載入可用的選項來源…`}):null,R?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:R}):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?_n(r):null,r&&r.parameters.length>0?vn(e,r,n):null,t.length===0&&!R?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`沒有支援目前控制項的已註冊來源。`}):null,(0,a.jsx)(`div`,{style:Ve,children:(0,a.jsx)(i.Button,{disabled:kt,loading:kt,onClick:()=>void Kt(),size:`sub`,type:`button`,variant:`base-secondary`,children:`檢查全部動態選項設定`})}),z?(0,a.jsx)(`div`,{style:ze,children:z.length>0?z.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 _n(e){return(0,a.jsxs)(`div`,{style:Ue,children:[e.description?(0,a.jsx)(i.Typography,{variant:`body`,children:e.description}):null,(0,a.jsx)(`div`,{style:He,children:it(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 vn(e,t,n){let r=t.parameters.map((e,t)=>({key:e.key,index:t,parameter:e}));return(0,a.jsxs)(`div`,{style:Be,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:qe,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=>bn(e,t.parameter,n),title:`值從哪裡來`},{key:`constant`,width:140,render:t=>(0,c.readFormDataSourceBindingValueKind)((0,c.readFormDataSourceBinding)(e,t.parameter.key))===`CONSTANT`?wn(e,t.parameter.key,t.parameter.type,(0,c.readFormDataSourceBinding)(e,t.parameter.key),n):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:`—`}),title:`固定值`},{key:`meaning`,render:t=>(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:Sn((0,c.readFormDataSourceBinding)(e,t.parameter.key),t.parameter,n,yn(e,t.parameter,n))}),title:`填寫時的行為`}],dataSource:r,fullWidth:!0,showHeader:!0,size:`sub`})]})}function yn(e,t,n){return(0,c.readCompatibleFormDataSourceBindingFields)(t.type,m.fields,e.fieldKey).length+(n.rowColumns?(0,c.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).length:0)}function bn(e,t,n){let r=ot((0,c.readFormDataSourceBinding)(e,t.key)),o=n.rowColumns?(0,c.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).map(e=>({id:`${w}${e.id}`,name:`同列:${e.name}`})):[],s=[...t.required?[]:[{id:T,name:`未綁定`}],...o,...(0,c.readCompatibleFormDataSourceBindingFields)(t.type,m.fields,e.fieldKey),...t.type===`STRING_ARRAY`?[]:[{id:C,name:`固定常數`}]];return(0,a.jsx)(`div`,{"data-data-source-parameter":t.key,style:Je,children:(0,a.jsx)(i.Select,{clearable:!1,fullWidth:!0,inputProps:{"aria-label":`${t.label??t.key} 的值來源`,title:(0,c.readSelectOption)(s,r)?.name??``},onChange:r=>En(e,t.key,t.type,r?.id,n),options:s,placeholder:`選擇欄位或常數`,size:`sub`,value:(0,c.readSelectOption)(s,r)})})}function xn(e){return ae[e]}function Sn(e,t,n,r){let i=(0,c.readFormDataSourceBindingValueKind)(e);return i===`CONSTANT`?`固定值,不隨填寫變動`:i===`FIELD`?`隨欄位「${Cn(e,n)}」變動`:i===`ROW_FIELD`?`隨同列「${Cn(e,n)}」變動`:t.required?r>0?`尚未設定,選項無法載入`:`沒有相容的${xn(t.type)}欄位,請改用固定值`:`未設定,不做這層篩選`}function Cn(e,t){let n=e?.from;if(n?.kind===`FIELD`){let e=m.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 wn(e,t,n,r,i){return(0,a.jsx)(`div`,{"data-data-source-constant":t,children:Tn(e,t,n,r,i)})}function Tn(e,t,n,r,o){let s=(0,c.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=>Dn(e,t,n?.id===`true`,o),options:n,size:`sub`,value:(0,c.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=>Dn(e,t,n===`NUMBER`?(0,c.parseOptionalNumberInput)(r.target.value)??0:r.target.value,o),placeholder:n===`NUMBER`?`輸入數字`:`輸入固定值`,value:ct(r,n),variant:`base`})}function En(e,t,n,r,i){i.commit((0,c.upsertFormDataSourceFieldBinding)(e,t,lt(t,n,r)))}function Dn(e,t,n,r){r.commit((0,c.upsertFormDataSourceFieldBinding)(e,t,{from:{kind:`CONSTANT`,value:n},parameter:t}))}function On(e,t){let n=(0,l.readFormFieldSelectionMode)(e),r=Array.isArray(e.defaultValue)?e.defaultValue:[],o=e.options.map(c.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,c.readSelectOption)(o,e.defaultValue):null})),$(`選項`,`fieldOptions`,In(e,t),!0)]})}function kn(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:[...et],placeholder:`選擇預設狀態`,value:(0,c.readSelectOption)(et,n)}))}function An(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`檔案數`,`fieldMaxFiles`,Q(e.maxFiles,n=>t({...e,maxFiles:n}),`例如:1`,{min:1})),$(`MIME`,`fieldAcceptedMimeTypes`,Pn({name:`fieldAcceptedMimeTypes`,onChange:n=>t({...e,acceptedMimeTypes:_t(n)}),placeholder:`每行一個 MIME type,例如:application/pdf`,rows:3,value:vt(e.acceptedMimeTypes)}),!1)]})}function jn(e){let t=m.fields.filter(t=>t.fieldKey!==e.fieldKey);return t.length?(0,a.jsx)(a.Fragment,{children:nt.map(n=>Mn(e,n,t))}):(0,a.jsx)(i.Typography,{color:`text-neutral`,style:x,variant:`body`,children:`目前沒有其他欄位可作為條件來源。新增更多欄位後即可設定條件規則。`})}function Mn(e,t,n){let r=e[t.target],o=r?(0,c.parseConditionRule)(r):null,s=n.find(e=>e.fieldKey===o?.fieldKey),l=s??n[0],u=n.map(ht),d=(0,c.readConditionOperatorOptions)(l),f=o&&d.some(e=>e.id===o.operator)?o.operator:(0,c.readDefaultConditionOperator)(l),p=o?.value??(0,c.readDefaultConditionValue)(l),m=!!r,h=m&&(!o||!s);return $(t.label,t.name,(0,a.jsxs)(`div`,{style:je,children:[(0,a.jsx)(i.Toggle,{checked:m,label:m?`已啟用`:`不啟用`,onChange:e=>Z(t.target,e.target.checked?(0,c.buildConditionExpression)(l,(0,c.readDefaultConditionOperator)(l),(0,c.readDefaultConditionValue)(l)):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:Me,children:[(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>{let r=n.find(t=>t.fieldKey===e?.id)??l;Z(t.target,(0,c.buildConditionExpression)(r,(0,c.readDefaultConditionOperator)(r),(0,c.readDefaultConditionValue)(r)))},options:u,placeholder:`選擇欄位`,value:(0,c.readSelectOption)(u,l.fieldKey)}),(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>Z(t.target,(0,c.buildConditionExpression)(l,(0,c.readConditionOperatorOption)(e?.id)??f,p)),options:[...d],placeholder:`判斷方式`,value:(0,c.readSelectOption)(d,f)}),Nn(l,p,e=>Z(t.target,(0,c.buildConditionExpression)(l,f,e)))]}):null]}),!0)}function Z(e,t){K({[e]:t})}function Nn(e,t,n){if(e.type===`boolean`)return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??`true`),options:[...tt],placeholder:`比較值`,value:(0,c.readSelectOption)(tt,t===`false`?`false`:`true`)});if((0,c.isSelectFieldDefinition)(e)){let r=e.options.map(c.readFieldOptionAsSelectOption);return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??r[0]?.id??``),options:r,placeholder:`比較值`,value:(0,c.readSelectOption)(r,t)})}return(0,c.isNumberFieldDefinition)(e)?Q((0,c.parseOptionalNumberInput)(t),e=>n(String(e??0)),`比較值`):(0,c.isDateFieldDefinition)(e)?Fn(e,t,e=>n(e??``)):(0,a.jsx)(i.Input,{onChange:e=>n(e.target.value),placeholder:`比較值`,value:t,variant:`base`})}function Pn({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:Ye,resize:`vertical`,rows:r,style:Ee,value:o})}function Q(e,t,n,r={}){return(0,a.jsx)(i.Input,{max:r.max,min:r.min,onChange:e=>t((0,c.clampOptionalNumber)((0,c.parseOptionalNumberInput)(e.target.value),r)),placeholder:n,showSpinner:!0,step:r.step??1,value:typeof e==`number`?String(e):``,variant:`measure`})}function Fn(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,c.formatDateTimePickerValue)(e)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,value:(0,c.readDatePickerValue)(t)}):(0,a.jsx)(i.DatePicker,{format:`YYYY-MM-DD`,onChange:e=>n((0,c.formatDatePickerValue)(e)),placeholder:`選擇日期`,value:(0,c.readDatePickerValue)(t)})}function In(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:Fe,children:[(0,a.jsx)(i.Table,{actions:{render:n=>[{disabled:()=>e.options.length<=1,icon:s.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:yt(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:yt(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:Ie,children:(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>t({...e,options:[...e.options,bt(e.options)]}),variant:`base-secondary`,children:`新增選項`})})]})}function Ln(e,t,n){return(0,a.jsx)(`div`,{...t.draggableProps,"data-form-builder-field-key":e.fieldKey,ref:t.innerRef,style:{...he,...n?ge:null,...t.draggableProps.style},children:(0,a.jsx)(i.BaseCard,{style:e.fieldKey===W?.fieldKey?_e:void 0,children:Rn(e,t,n)})})}function $(e,n,r,i=!1){return(0,a.jsx)(`div`,{style:i?we:Ce,children:(0,a.jsx)(`div`,{style:Te,children:(0,a.jsx)(t.t,{label:e,layout:i?o.FormFieldLayout.VERTICAL:o.FormFieldLayout.STRETCH,name:n,children:r})})})}function Rn(e,t,n){return(0,a.jsxs)(`div`,{...t.dragHandleProps??{},"aria-label":`選取或拖曳排序欄位`,onClick:()=>I(e.fieldKey),style:de,title:`點擊選取,拖曳排序`,children:[(0,a.jsx)(`span`,{"aria-label":`拖曳排序`,role:`img`,style:Ne,title:`拖曳排序`,children:(0,a.jsx)(i.Icon,{icon:s.DotDragVerticalIcon,size:20})}),(0,a.jsxs)(`div`,{style:fe,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:Le,children:`*`}):null]}),(0,a.jsxs)(i.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,variant:`caption`,children:[rt(e.type),` ·`,e.required?` 必填`:` 選填`,` ·`,e.fieldKey]})]}),(0,a.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:pe,children:[(0,a.jsx)(`div`,{style:me,children:(0,a.jsx)(i.Toggle,{checked:!!e.required,disabled:n,label:`必填`,onChange:t=>Zt(e.fieldKey,t.target.checked)})}),(0,a.jsx)(i.Button,{disabled:n,icon:s.TrashIcon,iconType:`icon-only`,onClick:()=>Nt(e.fieldKey),variant:`destructive-ghost`,children:`移除欄位`})]})]})}function zn(){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:Xt,schema:m,uiSchema:g,value:xt})]})}function Bn(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`h3`,children:`Schema`}),(0,a.jsxs)(`div`,{style:De,children:[Vn(`Form Schema`,`schemaJson`,(0,a.jsx)(ee,{height:`360px`,name:`schemaJson`,onChange:Qt,placeholder:`輸入 Form Schema JSON`,value:st})),Vn(`UI Schema`,`uiSchemaJson`,(0,a.jsx)(ee,{height:`240px`,name:`uiSchemaJson`,onChange:$t,placeholder:`輸入 UI Schema JSON`,value:ft})),Ct?(0,a.jsx)(i.Typography,{color:`text-error`,style:Ae,variant:`body`,children:Ct}):null]})]})}function Vn(e,n,r){return(0,a.jsx)(`div`,{style:Oe,children:(0,a.jsx)(`div`,{style:ke,children:(0,a.jsx)(t.t,{label:e,name:n,children:r})})})}}function rt(e){return _.find(t=>t.type===e)?.label??e}function D(e){return`${e.key}@${e.version}`}function it(e){return[e.supportsSearch?`可輸入關鍵字搜尋${e.minimumSearchLength>1?`(至少 ${e.minimumSearchLength} 字)`:``}`:`不支援搜尋`,e.paginationMode===`CURSOR`?`捲動載入更多(每次 ${e.pageSize} 筆)`:`一次載入完整清單(最多 ${e.maximumResultCount} 筆)`,e.revalidationPolicy===`ALWAYS`?`退回重送時一律重新確認`:`值與條件未變時沿用上次結果`]}function at(e){return{id:D(e),name:e.label}}function ot(e){return e?e.from.kind===`FIELD`?e.from.fieldKey:e.from.kind===`ROW_FIELD`?`${w}${e.from.columnKey}`:C:T}function st(e){switch(e){case`BOOLEAN`:return!1;case`NUMBER`:return 0;case`STRING_ARRAY`:return``;case`STRING`:return``;default:return``}}function ct(e,t){let n=e?.from.kind===`CONSTANT`?e.from.value:``;return t===`NUMBER`?typeof n==`number`?String(n):``:typeof n==`string`?n:``}function lt(e,t,n){return!n||n===T?null:n===C?{from:{kind:`CONSTANT`,value:st(t)},parameter:e}:n.startsWith(w)?{from:{columnKey:n.slice(14),kind:`ROW_FIELD`},parameter:e}:{from:{fieldKey:n,kind:`FIELD`},parameter:e}}function ut(e){return e.kind===`remove-field`?`確認移除 dependency 欄位`:e.kind===`remove-column`?`確認移除表格欄`:e.kind===`replace-column`?`確認變更欄型別`:`確認變更選擇模式`}var O=[{label:`選項 A`,value:`option_a`},{label:`選項 B`,value:`option_b`}];function dt(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===`number`||e.type===`money`)&&(typeof e.minimum==`number`||typeof e.maximum==`number`)&&t.push(`數值範圍`),(0,l.isFormDataSourceFieldDefinition)(e)?t.push(`選項來源設定`):(0,l.isFormStaticOptionFieldDefinition)(e)&&!ft(e.options)&&t.push(`${e.options.length} 個選項`),(e.type===`select`||e.type===`autocomplete`)&&e.mode===`multiple`&&t.push(`選擇模式`),t}function ft(e){return e.length===O.length&&e.every((e,t)=>e.label===O[t]?.label&&e.value===O[t]?.value)}function pt(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:[...O],type:t}:{...n,type:t}}function mt(e){return!!(e.visibleWhen||e.requiredWhen||e.readonlyWhen)}function ht(e){return{id:e.fieldKey,name:e.label}}function gt(e){return e.type===`text`||e.type===`textarea`}function k(e){return typeof e==`string`?e:``}function _t(e){let t=e.split(/[\n,]/u).map(e=>e.trim()).filter(Boolean);return t.length?t:void 0}function vt(e){return e?.join(`
1
+ "use client";const e=require("./rolldown-runtime-BocRIvOZ.cjs"),t=require("./bpm-form-field-Bc6k4ZEO.cjs"),n=require("./FormRendererView-Bs8lTb4k.cjs");let r=require("react"),i=require("@mezzanine-ui/react"),a=require("react/jsx-runtime"),o=require("@mezzanine-ui/core/form"),s=require("@mezzanine-ui/icons"),c=require("@rytass/bpm-core-client/form"),l=require("@rytass/bpm-core-shared/form"),u=require("@hello-pangea/dnd"),d=require("next/dynamic");d=e.t(d,1);let f=require("@codemirror/lang-json"),p=require("@codemirror/view");var m={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%`},h=[(0,f.json)(),p.EditorView.lineWrapping,p.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`}})],g=(0,d.default)(()=>import(`@uiw/react-codemirror`),{loading:()=>(0,a.jsx)(`div`,{style:m,children:`載入 JSON 編輯器`}),ssr:!1});function ee({disabled:e=!1,height:t,name:n,onChange:r,placeholder:i,value:o}){return(0,a.jsx)(g,{"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:[...h],height:t,indentWithTab:!1,onChange:r,placeholder:i,readOnly:e,theme:`light`,value:o,width:`100%`})}var _=[{description:`單行文字、姓名、編號`,icon:s.AlignLeftIcon,label:`文字`,type:`text`},{description:`多行補充內容`,icon:s.FileIcon,label:`長文字`,type:`textarea`},{description:`金額、數量、分數`,icon:s.CurrencyDollarIcon,label:`數字`,type:`number`},{description:`金額與費用`,icon:s.CurrencyDollarIcon,label:`金額`,type:`money`},{description:`日期或到期日`,icon:s.CalendarIcon,label:`日期`,type:`date`},{description:`日期與時間`,icon:s.CalendarIcon,label:`日期時間`,type:`datetime`},{description:`是 / 否狀態`,icon:s.CheckedIcon,label:`開關`,type:`boolean`},{description:`固定選項擇一`,icon:s.ListIcon,label:`下拉選單`,type:`select`},{description:`可搜尋的固定選項`,icon:s.ListIcon,label:`自動完成`,type:`autocomplete`},{description:`固定選項單選`,icon:s.DotGridIcon,label:`單選`,type:`radio`},{description:`固定選項複選`,icon:s.CheckedOutlineIcon,label:`複選`,type:`checkbox`},{description:`附件或佐證資料`,icon:s.FileAttachmentIcon,label:`附件`,type:`file_upload`},{description:`多列多欄明細`,icon:s.DotGridIcon,label:`表格`,type:`table`}],v=_.filter(e=>(0,l.isTableColumnFieldType)(e.type)).map(e=>({id:e.type,name:e.label})),te={alignItems:`start`,display:`flex`,flexWrap:`wrap`,gap:16},ne={flex:`0.55 1 300px`,minWidth:0},re={flex:`1.45 1 720px`,minWidth:620,paddingBottom:260},ie=240,ae={BOOLEAN:`開關`,NUMBER:`數字`,STRING:`文字或選單`,STRING_ARRAY:`多選`},oe=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings missing required parameter: (.+)$/u,se=/^schema\.fields\[(\d+)\](?:\.columns\[(\d+)\])?\.dataSource\.bindings unknown parameter: (.+)$/u,y={display:`grid`,gap:12},ce={display:`flex`,flexWrap:`wrap`,gap:6},le={flex:`0 0 auto`,whiteSpace:`nowrap`},ue={display:`grid`,gap:8},de={alignItems:`center`,cursor:`grab`,display:`flex`,gap:12,touchAction:`none`},fe={display:`grid`,flex:`1 1 auto`,gap:2,minWidth:0},pe={alignItems:`center`,display:`flex`,flex:`0 0 auto`,gap:4},me={alignItems:`center`,display:`flex`,gap:6},he={cursor:`pointer`,userSelect:`none`},ge={filter:`drop-shadow(0 8px 18px rgba(0, 0, 0, 0.12))`},_e={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)`},ve={alignItems:`center`,border:`1px dashed var(--mzn-color-border-neutral)`,borderRadius:6,display:`grid`,gap:12,minHeight:240,padding:32,textAlign:`center`},ye={display:`flex`,gap:8,justifyContent:`center`},be={display:`grid`,gap:14},b={display:`grid`,columnGap:16,gridTemplateColumns:`repeat(auto-fit, minmax(280px, 360px))`,justifyContent:`start`,maxWidth:736,rowGap:8},xe={gridColumn:`1 / -1`},Se={alignItems:`center`,display:`flex`,gap:8,gridColumn:`1 / -1`,justifyContent:`flex-end`},x={gridColumn:`1 / -1`},Ce={alignItems:`start`,display:`block`,width:`100%`},we={...Ce,gridColumn:`1 / -1`},Te={minWidth:0,width:`100%`},Ee={minWidth:`100%`,width:`100%`},De={display:`grid`,gap:14},Oe={alignItems:`start`,display:`block`,width:`100%`},ke={minWidth:0,width:`100%`},Ae={gridColumn:`2 / -1`},je={display:`grid`,gap:10,width:`100%`},Me={display:`grid`,gap:8,gridTemplateColumns:`repeat(auto-fit, minmax(160px, 1fr))`},Ne={display:`inline-flex`},Pe={display:`grid`,gap:16},Fe={display:`grid`,gap:8},Ie={display:`flex`,justifyContent:`flex-end`},Le={color:`var(--mzn-color-text-error)`,fontSize:`0.72em`,lineHeight:0,marginLeft:2,verticalAlign:`super`},Re={display:`grid`,gap:10,gridColumn:`1 / -1`},ze={display:`grid`,gap:2},Be={display:`grid`,gap:8},Ve={display:`flex`,justifyContent:`flex-start`},He={display:`flex`,flexWrap:`wrap`,gap:4},Ue={backgroundColor:`var(--mzn-color-bg-surface-secondary)`,borderRadius:6,display:`grid`,gap:4,padding:10},We={...b,gridTemplateColumns:`minmax(280px, 520px)`,padding:`4px 0 8px`},Ge={display:`grid`,gap:8,gridColumn:`1 / -1`},Ke={alignItems:`center`,display:`flex`,gap:12,justifyContent:`space-between`},qe={alignItems:`baseline`,display:`flex`,gap:2},Je={display:`grid`,gap:4};function Ye(e){e&&(e.style.width=`100%`)}var Xe={fields:[],schemaVersion:1},Ze={layout:[],schemaVersion:1},S=`__STATIC_OPTIONS__`,C=`__CONSTANT__`,w=`__ROW_FIELD__:`,T=`__UNBOUND__`,Qe=[{id:S,name:`靜態選項`}],$e=[{id:`single`,name:`單選`},{id:`multiple`,name:`複選`}],et=[{id:`unset`,name:`不預設`},{id:`true`,name:`是`},{id:`false`,name:`否`}],tt=[{id:`true`,name:`是`},{id:`false`,name:`否`}],nt=[{label:`顯示`,name:`fieldVisibleWhen`,supportingText:`符合條件時才顯示這個欄位。`,target:`visibleWhen`},{label:`必填`,name:`fieldRequiredWhen`,supportingText:`符合條件時才要求填寫這個欄位。`,target:`requiredWhen`},{label:`唯讀`,name:`fieldReadonlyWhen`,supportingText:`符合條件時不允許修改這個欄位。`,target:`readonlyWhen`}];function E({onChange:e,value:d}){let f=d?.schema??Xe,p=d?.uiSchema??Ze,[m,h]=(0,r.useState)(f),[g,E]=(0,r.useState)(p),[st,O]=(0,r.useState)(A(f)),[ft,j]=(0,r.useState)(A(p)),[xt,St]=(0,r.useState)({}),[Ct,N]=(0,r.useState)(null),[P,wt]=(0,r.useState)(`design`),[F,I]=(0,r.useState)(null),[L,Tt]=(0,r.useState)([]),[R,Et]=(0,r.useState)(null),[Dt,Ot]=(0,r.useState)(`loading`),[z,B]=(0,r.useState)(null),[kt,At]=(0,r.useState)(!1),[V,H]=(0,r.useState)(null),[jt,U]=(0,r.useState)(null);(0,r.useEffect)(()=>{let e=!0;return(0,c.listFormDataSources)().then(t=>{e&&(Tt(t),Et(null),Ot(`ready`))}).catch(t=>{e&&(Tt([]),Et(`目前無法載入 DataSource Catalog,請稍後重試。`),Ot(`unavailable`))}),()=>{e=!1}},[]),(0,r.useEffect)(()=>{m.fields.some(e=>e.fieldKey===F)||I(m.fields[0]?.fieldKey??null)},[m.fields,F]),(0,r.useEffect)(()=>{St(e=>(0,c.buildFormRendererValues)(m.fields,e))},[m.fields]),(0,r.useEffect)(()=>{P!==`advanced`&&(O(A(m)),j(A(g)))},[P,m,g]);let W=(0,r.useMemo)(()=>m.fields.find(e=>e.fieldKey===F)??m.fields[0]??null,[m.fields,F]);(0,r.useEffect)(()=>{e?.({schema:m,uiSchema:g})},[m,g]);function G(e){let t=m.fields.length+1,n=(0,c.createFieldDefinition)(e,t);h({...m,fields:[...m.fields,n]}),E({...g,layout:[...g.layout,{fieldKey:n.fieldKey,width:e===`textarea`||e===`file_upload`||e===`table`?`FULL`:`HALF`}]}),I(n.fieldKey),wt(`design`),N(null)}function Mt(e){let t=e;t===`advanced`&&P!==`advanced`&&(O(A(m)),j(A(g))),wt(t)}function Nt(e){let t=m.fields.flatMap(t=>(0,l.isTableFieldDefinition)(t)?t.columns.flatMap(n=>(0,l.isFormDataSourceFieldDefinition)(n)&&(0,c.readFormDataSourceFieldDependencyKeys)(n).includes(e)?[`${t.fieldKey}.${n.fieldKey}`]:[]):(0,l.isFormDataSourceFieldDefinition)(t)&&(0,c.readFormDataSourceFieldDependencyKeys)(t).includes(e)?[t.fieldKey]:[]);if(t.length>0){H({affectedFieldKeys:t,fieldKey:e,kind:`remove-field`});return}Pt(e)}function Pt(e){let t=m.fields.filter(t=>t.fieldKey!==e);h({...m,fields:t}),E({...g,layout:g.layout.filter(t=>t.fieldKey!==e)}),I(F===e?t[0]?.fieldKey??null:F),N(null),B(null)}function Ft(e){let t=e.destination;t&&e.source.index!==t.index&&(h(n=>({...n,fields:M(n.fields,e.source.index,t.index)})),E(n=>({...n,layout:M(n.layout,e.source.index,t.index)})),N(null))}function K(e){It(t=>({...t,...e}))}function It(e){if(!W)return;let t=W.fieldKey,n=e(W),r=n.fieldKey,i={...m,fields:m.fields.map(e=>e.fieldKey===t?n:e)},a=t===r?i:(0,c.renameFormDataSourceFieldBindings)(i,t,r);h(a),E({...g,layout:g.layout.map(e=>e.fieldKey===t?{...e,fieldKey:r}:e)}),I(r),N(null),B(null)}function Lt(e){It(()=>e)}function q(e,t){h(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e&&(0,l.isTableFieldDefinition)(n)?t(n):n)})),N(null),B(null)}function J(e,t,n){let r=e.columns[t]?.fieldKey;q(e.fieldKey,e=>{let i={...e,columns:e.columns.map((e,r)=>r===t?n:e)};return typeof r==`string`&&r!==n.fieldKey?(0,c.renameFormTableColumnBindings)(i,r,n.fieldKey):i})}function Rt(e){let t=(0,c.createTableColumnDefinition)(e.columns,`text`);q(e.fieldKey,e=>({...e,columns:[...e.columns,t]})),U(e.columns.length)}function zt(e,t){q(e,e=>({...e,columns:e.columns.filter((e,n)=>n!==t)})),U(e=>e===null||e<t?e:e===t?null:e-1)}function Bt(e,t,n){q(e.fieldKey,e=>({...e,columns:M(e.columns,t,n)})),U(e=>e===null?e:e===t?n:e>t&&e<=n?e-1:e<t&&e>=n?e+1:e)}function Vt(e,t,n){if(e.type!==`select`&&e.type!==`autocomplete`||(0,l.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 Ht(e,t,n=`此變更會替換目前選項來源;既有 options、dynamic reference 或 bindings 可能失效。`){JSON.stringify(e)!==JSON.stringify(t)&&H({fieldKey:e.fieldKey,impact:n,kind:`replace-field`,nextField:t})}function Ut(e,t,n){if(!t)return;if(t===S){if(!(0,l.isFormDataSourceFieldDefinition)(e))return;let{dataSource:t,defaultValue:r,...i}=e;n({...i,options:[]});return}let r=L.find(e=>D(e)===t);if(!r)return;if((0,l.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 Wt(){V&&(Gt(V),H(null))}function Gt(e){if(e.kind===`remove-field`){Pt(e.fieldKey);return}if(e.kind===`remove-column`){zt(e.fieldKey,e.columnIndex);return}if(e.kind===`replace-column`){q(e.fieldKey,t=>({...t,columns:t.columns.map(t=>t.fieldKey===e.columnKey?e.nextColumn:t)})),U(e.columnIndex);return}h({...m,fields:m.fields.map(t=>t.fieldKey===e.fieldKey?e.nextField:t)}),N(null),B(null)}async function Kt(){At(!0);try{let e=await(0,c.lintFormSchema)(m,g);B(e.errors.map(qt))}catch{B([`目前無法完成 DataSource schema 驗證。`])}finally{At(!1)}}function qt(e){let t=oe.exec(e);if(t?.[1]&&t[3])return`${Jt(t[1],t[2])}尚未指定必要參數「${Yt(t[1],t[2],t[3])}」的來源`;let n=se.exec(e);return n?.[1]&&n[3]?`${Jt(n[1],n[2])}綁定了來源沒有的參數「${n[3]}」`:(0,c.readFormSchemaLintMessage)(e)}function Jt(e,t){let n=m.fields[Number(e)];if(!n)return``;let r=n.label||n.fieldKey,i=Y(n,t);return i?`「${r}」表格的「${i.label||i.fieldKey}」欄`:`「${r}」欄位`}function Yt(e,t,n){let r=m.fields[Number(e)];if(!r)return n;let i=Y(r,t)??r,a=(0,l.isFormDataSourceFieldDefinition)(i)?i.dataSource:null;return(a?L.find(e=>e.key===a.key&&e.version===a.version):void 0)?.parameters.find(e=>e.key===n)?.label||n}function Y(e,t){return typeof t==`string`&&(0,l.isTableFieldDefinition)(e)?e.columns[Number(t)]:void 0}function Xt(e){St(e)}function Zt(e,t){h(n=>({...n,fields:n.fields.map(n=>n.fieldKey===e?{...n,required:t}:n)})),N(null)}function Qt(e){O(e);try{h(JSON.parse(e)),N(null)}catch{N(`Form Schema JSON 格式不正確`)}}function $t(e){j(e);try{E(JSON.parse(e)),N(null)}catch{N(`UI Schema JSON 格式不正確`)}}return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(a.Fragment,{children:(0,a.jsx)(i.SectionGroup,{children:(0,a.jsx)(i.Section,{children:(0,a.jsxs)(`div`,{style:Pe,children:[(0,a.jsxs)(i.Tab,{activeKey:P,onChange:Mt,size:`sub`,children:[(0,a.jsx)(i.TabItem,{children:`設計`},`design`),(0,a.jsx)(i.TabItem,{children:`預覽`},`preview`),(0,a.jsx)(i.TabItem,{children:`進階`},`advanced`)]}),P===`design`?en():null,P===`preview`?zn():null,P===`advanced`?Bn():null]})})})}),V?(0,a.jsx)(i.Modal,{cancelText:`返回`,confirmText:`確認變更`,modalType:`standard`,onCancel:()=>H(null),onClose:()=>H(null),onConfirm:Wt,open:!0,showModalFooter:!0,showModalHeader:!0,title:ut(V),children:V.kind===`remove-field`?(0,a.jsxs)(`div`,{style:Fe,children:[(0,a.jsx)(i.Typography,{variant:`body`,children:`此欄位仍被下列 DataSource binding 使用;移除後請重新設定這些欄位。`}),(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:V.affectedFieldKeys.join(`、`)})]}):V.kind===`remove-column`?(0,a.jsxs)(i.Typography,{variant:`body`,children:[`移除欄「`,V.columnKey,`」後,既有案件仍保留原本的表單版本,但新版本的這一欄資料將不再被填寫。`]}):(0,a.jsx)(i.Typography,{variant:`body`,children:V.impact})}):null]});function en(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsxs)(`div`,{style:ue,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`新增欄位`}),(0,a.jsx)(`div`,{style:ce,children:_.map(e=>(0,a.jsx)(i.Button,{icon:e.icon,iconType:`leading`,onClick:()=>G(e.type),size:`sub`,style:le,type:`button`,variant:`base-secondary`,children:e.label},e.type))})]}),(0,a.jsxs)(`div`,{style:te,children:[(0,a.jsxs)(`div`,{style:{...y,...ne},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`表單畫布`}),m.fields.length>0?(0,a.jsx)(u.DragDropContext,{onDragEnd:Ft,children:(0,a.jsx)(u.Droppable,{droppableId:`form-builder-fields`,children:e=>(0,a.jsxs)(`div`,{...e.droppableProps,ref:e.innerRef,style:y,children:[m.fields.map((e,t)=>(0,a.jsx)(u.Draggable,{draggableId:e.fieldKey,index:t,children:(t,n)=>Ln(e,t,n.isDragging)},e.fieldKey)),e.placeholder]})})}):(0,a.jsxs)(`div`,{style:ve,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:ye,children:[(0,a.jsx)(i.Button,{onClick:()=>G(`text`),variant:`base-primary`,children:`新增文字欄位`}),(0,a.jsx)(i.Button,{onClick:()=>G(`textarea`),variant:`base-secondary`,children:`新增長文字`})]})]})]}),(0,a.jsxs)(`div`,{style:{...y,...re},children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`label-primary`,children:`欄位設定`}),W?tn(W):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`請先新增或選取欄位。`})]})]})]})}function tn(e){return(0,a.jsxs)(`div`,{style:be,children:[nn(e),(0,l.isTableFieldDefinition)(e)?sn(e):null,rn(e)]})}function nn(e){return(0,a.jsxs)(`div`,{style:b,children:[(0,a.jsx)(`div`,{style:Se,children:(0,a.jsx)(i.Badge,{size:`main`,text:rt(e.type),variant:`text-info`})}),$(`標題`,`fieldLabel`,(0,a.jsx)(i.Input,{onChange:e=>K({label:e.target.value}),placeholder:`例如:申請金額`,value:e.label,variant:`base`})),$(`欄位 Key`,`fieldKey`,(0,a.jsx)(i.Input,{onChange:e=>K({fieldKey:e.target.value}),placeholder:`例如:amount`,value:e.fieldKey,variant:`base`})),(0,l.isTableFieldDefinition)(e)?null:$(`提示文字`,`fieldPlaceholder`,(0,a.jsx)(i.Input,{onChange:e=>K({placeholder:e.target.value||void 0}),placeholder:`例如:請輸入申請金額`,value:e.placeholder??``,variant:`base`})),an(e,Lt,Ht)]})}function rn(e){return(0,a.jsx)(i.Accordion,{defaultExpanded:mt(e),size:`sub`,title:`進階設定`,children:(0,a.jsxs)(`div`,{style:b,children:[(0,a.jsx)(i.Typography,{component:`h3`,style:xe,variant:`label-primary`,children:`條件規則`}),(0,a.jsx)(i.Typography,{color:`text-neutral`,style:x,variant:`body`,children:`只有需要根據其他欄位改變顯示、必填或唯讀狀態時才需要設定。`}),jn(e)]})})}function an(e,t,n,r){return gt(e)?fn(e,t):(0,c.isNumberFieldDefinition)(e)?pn(e,t):(0,c.isDateFieldDefinition)(e)?mn(e,t):(0,l.isFormOptionFieldDefinition)(e)?hn(e,t,n,r):e.type===`boolean`?kn(e,t):e.type===`file_upload`?An(e,t):(0,l.isTableFieldDefinition)(e)?on(e):null}function on(e){let t=(0,c.readFormTableRowBounds)(e);return(0,a.jsxs)(a.Fragment,{children:[$(`最少列數`,`fieldMinRows`,Q(e.minRows,t=>q(e.fieldKey,e=>({...e,minRows:t})),`例如:1`,{max:t.maxRows,min:0})),$(`最多列數`,`fieldMaxRows`,Q(e.maxRows,t=>q(e.fieldKey,e=>({...e,maxRows:t})),`未設定即為 ${l.FORM_TABLE_MAX_ROWS}`,{max:l.FORM_TABLE_MAX_ROWS,min:Math.max(t.minRows,1)})),$(`新增列按鈕文字`,`fieldAddRowLabel`,(0,a.jsx)(i.Input,{onChange:t=>q(e.fieldKey,e=>({...e,addRowLabel:t.target.value||void 0})),placeholder:`預設為「新增一列」`,value:e.addRowLabel??``,variant:`base`}))]})}function sn(e){return(0,a.jsxs)(`div`,{style:Ge,children:[(0,a.jsxs)(`div`,{style:Ke,children:[(0,a.jsxs)(i.Typography,{component:`h3`,variant:`label-primary`,children:[`欄(`,e.columns.length,`)`]}),(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>Rt(e),size:`sub`,type:`button`,variant:`base-secondary`,children:`新增欄`})]}),cn(e)]})}function cn(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=>J(e,t.index,{...X(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:ie,onChange:n=>un(e,t.index,n?.id),options:[...v],size:`sub`,value:(0,c.readSelectOption)(v,t.type)}),title:`型別`},{key:`required`,render:t=>(0,a.jsx)(i.Toggle,{checked:X(e,t.index).required===!0,inputProps:{"aria-label":`${t.label||t.fieldKey} 必填`},onChange:n=>J(e,t.index,{...X(e,t.index),required:n.target.checked}),size:`sub`}),title:`必填`}],r={render:t=>[{disabled:()=>e.columns.length<=1,icon:s.TrashIcon,iconType:`leading`,name:`移除此欄`,onClick:()=>H({columnIndex:t.index,columnKey:t.fieldKey,fieldKey:e.fieldKey,kind:`remove-column`}),variant:`destructive-ghost`}],width:104},o=jt===null?void 0:t[jt]?.key;return(0,a.jsx)(i.Table,{actions:r,columns:n,dataSource:t,draggable:{enabled:!0,onDragEnd:(t,n)=>Bt(e,n.fromIndex,n.toIndex)},expandable:{expandedRowKeys:o?[o]:[],expandedRowRender:t=>ln(e,t.index),onExpand:(e,t)=>U(e?t.index:null)},fullWidth:!0,rowHeightPreset:`roomy`,showHeader:!0,size:`sub`})}function ln(e,t){let n=e.columns[t];return n?(0,a.jsxs)(`div`,{style:We,children:[$(`欄位 Key`,`columnFieldKey`,(0,a.jsx)(i.Input,{onChange:r=>J(e,t,{...n,fieldKey:r.target.value}),placeholder:`例如:qty`,value:n.fieldKey,variant:`base`})),$(`提示文字`,`columnPlaceholder`,(0,a.jsx)(i.Input,{onChange:r=>J(e,t,{...n,placeholder:r.target.value||void 0}),placeholder:`例如:請輸入數量`,value:n.placeholder??``,variant:`base`})),an(n,n=>{(0,l.isTableColumnFieldType)(n.type)&&J(e,t,n)},(n,r)=>{(0,l.isTableColumnFieldType)(r.type)&&J(e,t,r)},e.columns)]}):null}function un(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=pt(r,i),o=dt(r);if(o.length===0){J(e,t,a),U(t);return}H({columnIndex:t,columnKey:r.fieldKey,fieldKey:e.fieldKey,impact:`「${r.label||r.fieldKey}」改為${dn(i)}後,這一欄的${o.join(`、`)}會被捨棄。`,kind:`replace-column`,nextColumn:a})}function dn(e){return v.find(t=>t.id===e)?.name??e}function X(e,t){let n=e.columns[t];if(!n)throw Error(`Table ${e.fieldKey} has no column at index ${t}.`);return n}function fn(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`預設值`,`fieldDefaultValue`,e.type===`textarea`?Pn({name:`fieldDefaultValue`,onChange:n=>t({...e,defaultValue:n||void 0}),placeholder:`輸入此欄位的預設文字`,rows:3,value:k(e.defaultValue)}):(0,a.jsx)(i.Input,{onChange:n=>t({...e,defaultValue:n.target.value||void 0}),placeholder:`輸入此欄位的預設文字`,value:k(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}))]})}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 mn(e,t){return $(`預設值`,`fieldDefaultValue`,Fn(e,k(e.defaultValue),n=>t({...e,defaultValue:n})))}function hn(e,t,n,r){let o=(0,c.readCompatibleFormDataSourceDescriptors)(e.type,L),s={commit:e=>t(e),rowColumns:r},u=(0,l.isFormDataSourceFieldDefinition)(e)?D(e.dataSource):S,d=(0,l.isFormDataSourceFieldDefinition)(e)?L.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version):null,f=d?o.some(e=>e.key===d.key&&e.version===d.version):!1,p=[...Qe,...o.map(at),...(0,l.isFormDataSourceFieldDefinition)(e)&&!f?[{id:u,name:`${e.dataSource.key} v${e.dataSource.version}(目前不可用或不支援)`}]:[]],m=(0,l.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`)&&Vt(e,t.id,n)},options:[...$e],value:(0,c.readSelectOption)($e,m)})):$(`選擇模式`,`fieldSelectionMode`,(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:m===`multiple`?`固定複選`:`固定單選`})),$(`選項來源`,`fieldOptionSource`,(0,a.jsx)(i.Select,{clearable:!1,disabled:Dt===`loading`&&!(0,l.isFormDataSourceFieldDefinition)(e),onChange:n=>Ut(e,n?.id,t),options:p,placeholder:`選擇選項來源`,value:(0,c.readSelectOption)(p,u)})),(0,l.isFormDataSourceFieldDefinition)(e)?gn(e,o,s):On(e,t)]})}function gn(e,t,n){let r=L.find(t=>t.key===e.dataSource.key&&t.version===e.dataSource.version),o=r&&!(0,c.isFormDataSourceDescriptorCompatible)(r,e.type);return(0,a.jsxs)(`div`,{style:Re,children:[Dt===`loading`?(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`body`,children:`正在載入可用的選項來源…`}):null,R?(0,a.jsx)(i.Typography,{color:`text-error`,variant:`body`,children:R}):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?_n(r):null,r&&r.parameters.length>0?vn(e,r,n):null,t.length===0&&!R?(0,a.jsx)(i.Typography,{color:`text-warning`,variant:`body`,children:`沒有支援目前控制項的已註冊來源。`}):null,(0,a.jsx)(`div`,{style:Ve,children:(0,a.jsx)(i.Button,{disabled:kt,loading:kt,onClick:()=>void Kt(),size:`sub`,type:`button`,variant:`base-secondary`,children:`檢查全部動態選項設定`})}),z?(0,a.jsx)(`div`,{style:ze,children:z.length>0?z.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 _n(e){return(0,a.jsxs)(`div`,{style:Ue,children:[e.description?(0,a.jsx)(i.Typography,{variant:`body`,children:e.description}):null,(0,a.jsx)(`div`,{style:He,children:it(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 vn(e,t,n){let r=t.parameters.map((e,t)=>({key:e.key,index:t,parameter:e}));return(0,a.jsxs)(`div`,{style:Be,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:qe,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=>bn(e,t.parameter,n),title:`值從哪裡來`},{key:`constant`,width:140,render:t=>(0,c.readFormDataSourceBindingValueKind)((0,c.readFormDataSourceBinding)(e,t.parameter.key))===`CONSTANT`?wn(e,t.parameter.key,t.parameter.type,(0,c.readFormDataSourceBinding)(e,t.parameter.key),n):(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:`—`}),title:`固定值`},{key:`meaning`,render:t=>(0,a.jsx)(i.Typography,{color:`text-neutral`,variant:`caption`,children:Sn((0,c.readFormDataSourceBinding)(e,t.parameter.key),t.parameter,n,yn(e,t.parameter,n))}),title:`填寫時的行為`}],dataSource:r,fullWidth:!0,showHeader:!0,size:`sub`})]})}function yn(e,t,n){return(0,c.readCompatibleFormDataSourceBindingFields)(t.type,m.fields,e.fieldKey).length+(n.rowColumns?(0,c.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).length:0)}function bn(e,t,n){let r=ot((0,c.readFormDataSourceBinding)(e,t.key)),o=n.rowColumns?(0,c.readCompatibleFormTableColumnBindingFields)(t.type,n.rowColumns,e.fieldKey).map(e=>({id:`${w}${e.id}`,name:`同列:${e.name}`})):[],s=[...t.required?[]:[{id:T,name:`未綁定`}],...o,...(0,c.readCompatibleFormDataSourceBindingFields)(t.type,m.fields,e.fieldKey),...t.type===`STRING_ARRAY`?[]:[{id:C,name:`固定常數`}]];return(0,a.jsx)(`div`,{"data-data-source-parameter":t.key,style:Je,children:(0,a.jsx)(i.Select,{clearable:!1,fullWidth:!0,inputProps:{"aria-label":`${t.label??t.key} 的值來源`,title:(0,c.readSelectOption)(s,r)?.name??``},onChange:r=>En(e,t.key,t.type,r?.id,n),options:s,placeholder:`選擇欄位或常數`,size:`sub`,value:(0,c.readSelectOption)(s,r)})})}function xn(e){return ae[e]}function Sn(e,t,n,r){let i=(0,c.readFormDataSourceBindingValueKind)(e);return i===`CONSTANT`?`固定值,不隨填寫變動`:i===`FIELD`?`隨欄位「${Cn(e,n)}」變動`:i===`ROW_FIELD`?`隨同列「${Cn(e,n)}」變動`:t.required?r>0?`尚未設定,選項無法載入`:`沒有相容的${xn(t.type)}欄位,請改用固定值`:`未設定,不做這層篩選`}function Cn(e,t){let n=e?.from;if(n?.kind===`FIELD`){let e=m.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 wn(e,t,n,r,i){return(0,a.jsx)(`div`,{"data-data-source-constant":t,children:Tn(e,t,n,r,i)})}function Tn(e,t,n,r,o){let s=(0,c.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=>Dn(e,t,n?.id===`true`,o),options:n,size:`sub`,value:(0,c.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=>Dn(e,t,n===`NUMBER`?(0,c.parseOptionalNumberInput)(r.target.value)??0:r.target.value,o),placeholder:n===`NUMBER`?`輸入數字`:`輸入固定值`,value:ct(r,n),variant:`base`})}function En(e,t,n,r,i){i.commit((0,c.upsertFormDataSourceFieldBinding)(e,t,lt(t,n,r)))}function Dn(e,t,n,r){r.commit((0,c.upsertFormDataSourceFieldBinding)(e,t,{from:{kind:`CONSTANT`,value:n},parameter:t}))}function On(e,t){let n=(0,l.readFormFieldSelectionMode)(e),r=Array.isArray(e.defaultValue)?e.defaultValue:[],o=e.options.map(c.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,c.readSelectOption)(o,e.defaultValue):null})),$(`選項`,`fieldOptions`,In(e,t),!0)]})}function kn(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:[...et],placeholder:`選擇預設狀態`,value:(0,c.readSelectOption)(et,n)}))}function An(e,t){return(0,a.jsxs)(a.Fragment,{children:[$(`檔案數`,`fieldMaxFiles`,Q(e.maxFiles,n=>t({...e,maxFiles:n}),`例如:1`,{min:1})),$(`MIME`,`fieldAcceptedMimeTypes`,Pn({name:`fieldAcceptedMimeTypes`,onChange:n=>t({...e,acceptedMimeTypes:_t(n)}),placeholder:`每行一個 MIME type,例如:application/pdf`,rows:3,value:vt(e.acceptedMimeTypes)}),!1)]})}function jn(e){let t=m.fields.filter(t=>t.fieldKey!==e.fieldKey);return t.length?(0,a.jsx)(a.Fragment,{children:nt.map(n=>Mn(e,n,t))}):(0,a.jsx)(i.Typography,{color:`text-neutral`,style:x,variant:`body`,children:`目前沒有其他欄位可作為條件來源。新增更多欄位後即可設定條件規則。`})}function Mn(e,t,n){let r=e[t.target],o=r?(0,c.parseConditionRule)(r):null,s=n.find(e=>e.fieldKey===o?.fieldKey),l=s??n[0],u=n.map(ht),d=(0,c.readConditionOperatorOptions)(l),f=o&&d.some(e=>e.id===o.operator)?o.operator:(0,c.readDefaultConditionOperator)(l),p=o?.value??(0,c.readDefaultConditionValue)(l),m=!!r,h=m&&(!o||!s);return $(t.label,t.name,(0,a.jsxs)(`div`,{style:je,children:[(0,a.jsx)(i.Toggle,{checked:m,label:m?`已啟用`:`不啟用`,onChange:e=>Z(t.target,e.target.checked?(0,c.buildConditionExpression)(l,(0,c.readDefaultConditionOperator)(l),(0,c.readDefaultConditionValue)(l)):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:Me,children:[(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>{let r=n.find(t=>t.fieldKey===e?.id)??l;Z(t.target,(0,c.buildConditionExpression)(r,(0,c.readDefaultConditionOperator)(r),(0,c.readDefaultConditionValue)(r)))},options:u,placeholder:`選擇欄位`,value:(0,c.readSelectOption)(u,l.fieldKey)}),(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>Z(t.target,(0,c.buildConditionExpression)(l,(0,c.readConditionOperatorOption)(e?.id)??f,p)),options:[...d],placeholder:`判斷方式`,value:(0,c.readSelectOption)(d,f)}),Nn(l,p,e=>Z(t.target,(0,c.buildConditionExpression)(l,f,e)))]}):null]}),!0)}function Z(e,t){K({[e]:t})}function Nn(e,t,n){if(e.type===`boolean`)return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??`true`),options:[...tt],placeholder:`比較值`,value:(0,c.readSelectOption)(tt,t===`false`?`false`:`true`)});if((0,c.isSelectFieldDefinition)(e)){let r=e.options.map(c.readFieldOptionAsSelectOption);return(0,a.jsx)(i.Select,{clearable:!1,onChange:e=>n(e?.id??r[0]?.id??``),options:r,placeholder:`比較值`,value:(0,c.readSelectOption)(r,t)})}return(0,c.isNumberFieldDefinition)(e)?Q((0,c.parseOptionalNumberInput)(t),e=>n(String(e??0)),`比較值`):(0,c.isDateFieldDefinition)(e)?Fn(e,t,e=>n(e??``)):(0,a.jsx)(i.Input,{onChange:e=>n(e.target.value),placeholder:`比較值`,value:t,variant:`base`})}function Pn({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:Ye,resize:`vertical`,rows:r,style:Ee,value:o})}function Q(e,t,n,r={}){return(0,a.jsx)(i.Input,{max:r.max,min:r.min,onChange:e=>t((0,c.clampOptionalNumber)((0,c.parseOptionalNumberInput)(e.target.value),r)),placeholder:n,showSpinner:!0,step:r.step??1,value:typeof e==`number`?String(e):``,variant:`measure`})}function Fn(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,c.formatDateTimePickerValue)(e)),placeholderLeft:`選擇日期`,placeholderRight:`選擇時間`,value:(0,c.readDatePickerValue)(t)}):(0,a.jsx)(i.DatePicker,{format:`YYYY-MM-DD`,onChange:e=>n((0,c.formatDatePickerValue)(e)),placeholder:`選擇日期`,value:(0,c.readDatePickerValue)(t)})}function In(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:Fe,children:[(0,a.jsx)(i.Table,{actions:{render:n=>[{disabled:()=>e.options.length<=1,icon:s.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:yt(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:yt(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:Ie,children:(0,a.jsx)(i.Button,{icon:s.PlusIcon,iconType:`leading`,onClick:()=>t({...e,options:[...e.options,bt(e.options)]}),variant:`base-secondary`,children:`新增選項`})})]})}function Ln(e,t,n){return(0,a.jsx)(`div`,{...t.draggableProps,"data-form-builder-field-key":e.fieldKey,ref:t.innerRef,style:{...he,...n?ge:null,...t.draggableProps.style},children:(0,a.jsx)(i.BaseCard,{style:e.fieldKey===W?.fieldKey?_e:void 0,children:Rn(e,t,n)})})}function $(e,n,r,i=!1){return(0,a.jsx)(`div`,{style:i?we:Ce,children:(0,a.jsx)(`div`,{style:Te,children:(0,a.jsx)(t.t,{label:e,layout:i?o.FormFieldLayout.VERTICAL:o.FormFieldLayout.STRETCH,name:n,children:r})})})}function Rn(e,t,n){return(0,a.jsxs)(`div`,{...t.dragHandleProps??{},"aria-label":`選取或拖曳排序欄位`,onClick:()=>I(e.fieldKey),style:de,title:`點擊選取,拖曳排序`,children:[(0,a.jsx)(`span`,{"aria-label":`拖曳排序`,role:`img`,style:Ne,title:`拖曳排序`,children:(0,a.jsx)(i.Icon,{icon:s.DotDragVerticalIcon,size:20})}),(0,a.jsxs)(`div`,{style:fe,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:Le,children:`*`}):null]}),(0,a.jsxs)(i.Typography,{color:`text-neutral`,component:`span`,ellipsis:!0,variant:`caption`,children:[rt(e.type),` ·`,e.required?` 必填`:` 選填`,` ·`,e.fieldKey]})]}),(0,a.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:pe,children:[(0,a.jsx)(`div`,{style:me,children:(0,a.jsx)(i.Toggle,{checked:!!e.required,disabled:n,label:`必填`,onChange:t=>Zt(e.fieldKey,t.target.checked)})}),(0,a.jsx)(i.Button,{disabled:n,icon:s.TrashIcon,iconType:`icon-only`,onClick:()=>Nt(e.fieldKey),variant:`destructive-ghost`,children:`移除欄位`})]})]})}function zn(){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:Xt,schema:m,uiSchema:g,value:xt})]})}function Bn(){return(0,a.jsxs)(`div`,{style:y,children:[(0,a.jsx)(i.Typography,{component:`h2`,variant:`h3`,children:`Schema`}),(0,a.jsxs)(`div`,{style:De,children:[Vn(`Form Schema`,`schemaJson`,(0,a.jsx)(ee,{height:`360px`,name:`schemaJson`,onChange:Qt,placeholder:`輸入 Form Schema JSON`,value:st})),Vn(`UI Schema`,`uiSchemaJson`,(0,a.jsx)(ee,{height:`240px`,name:`uiSchemaJson`,onChange:$t,placeholder:`輸入 UI Schema JSON`,value:ft})),Ct?(0,a.jsx)(i.Typography,{color:`text-error`,style:Ae,variant:`body`,children:Ct}):null]})]})}function Vn(e,n,r){return(0,a.jsx)(`div`,{style:Oe,children:(0,a.jsx)(`div`,{style:ke,children:(0,a.jsx)(t.t,{label:e,name:n,children:r})})})}}function rt(e){return _.find(t=>t.type===e)?.label??e}function D(e){return`${e.key}@${e.version}`}function it(e){return[e.supportsSearch?`可輸入關鍵字搜尋${e.minimumSearchLength>1?`(至少 ${e.minimumSearchLength} 字)`:``}`:`不支援搜尋`,e.paginationMode===`CURSOR`?`捲動載入更多(每次 ${e.pageSize} 筆)`:`一次載入完整清單(最多 ${e.maximumResultCount} 筆)`,e.revalidationPolicy===`ALWAYS`?`退回重送時一律重新確認`:`值與條件未變時沿用上次結果`]}function at(e){return{id:D(e),name:e.label}}function ot(e){return e?e.from.kind===`FIELD`?e.from.fieldKey:e.from.kind===`ROW_FIELD`?`${w}${e.from.columnKey}`:C:T}function st(e){switch(e){case`BOOLEAN`:return!1;case`NUMBER`:return 0;case`STRING_ARRAY`:return``;case`STRING`:return``;default:return``}}function ct(e,t){let n=e?.from.kind===`CONSTANT`?e.from.value:``;return t===`NUMBER`?typeof n==`number`?String(n):``:typeof n==`string`?n:``}function lt(e,t,n){return!n||n===T?null:n===C?{from:{kind:`CONSTANT`,value:st(t)},parameter:e}:n.startsWith(w)?{from:{columnKey:n.slice(14),kind:`ROW_FIELD`},parameter:e}:{from:{fieldKey:n,kind:`FIELD`},parameter:e}}function ut(e){return e.kind===`remove-field`?`確認移除 dependency 欄位`:e.kind===`remove-column`?`確認移除表格欄`:e.kind===`replace-column`?`確認變更欄型別`:`確認變更選擇模式`}var O=[{label:`選項 A`,value:`option_a`},{label:`選項 B`,value:`option_b`}];function dt(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===`number`||e.type===`money`)&&(typeof e.minimum==`number`||typeof e.maximum==`number`)&&t.push(`數值範圍`),(0,l.isFormDataSourceFieldDefinition)(e)?t.push(`選項來源設定`):(0,l.isFormStaticOptionFieldDefinition)(e)&&!ft(e.options)&&t.push(`${e.options.length} 個選項`),(e.type===`select`||e.type===`autocomplete`)&&e.mode===`multiple`&&t.push(`選擇模式`),t}function ft(e){return e.length===O.length&&e.every((e,t)=>e.label===O[t]?.label&&e.value===O[t]?.value)}function pt(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:[...O],type:t}:{...n,type:t}}function mt(e){return!!(e.visibleWhen||e.requiredWhen||e.readonlyWhen)}function ht(e){return{id:e.fieldKey,name:e.label}}function gt(e){return e.type===`text`||e.type===`textarea`}function k(e){return typeof e==`string`?e:``}function _t(e){let t=e.split(/[\n,]/u).map(e=>e.trim()).filter(Boolean);return t.length?t:void 0}function vt(e){return e?.join(`
2
2
  `)??``}function A(e){return JSON.stringify(e,null,2)}function yt(e,t,n){return e.map((e,r)=>r===t?{...e,...n}:e)}function bt(e){let t=e.length+1;return{label:`選項 ${t}`,value:j(e,t)}}function j(e,t){let n=`option_${t}`;return e.some(e=>e.value===n)?j(e,t+1):n}function M(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}});
3
- //# sourceMappingURL=FormBuilderView-CLFlfDGe.cjs.map
3
+ //# sourceMappingURL=FormBuilderView-VmdPVbg7.cjs.map