@orizm/cli 3.1.0 → 3.3.0-beta.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.
- package/README.md +27 -1
- package/dist/agent-Kf8iuW2I.mjs +14 -0
- package/dist/agent-Kf8iuW2I.mjs.map +1 -0
- package/dist/agent-UZZtdOZS.cjs +14 -0
- package/dist/agent-UZZtdOZS.cjs.map +1 -0
- package/dist/auth-BnXPHgBU.cjs +18 -0
- package/dist/{auth-CNbONZuf.cjs.map → auth-BnXPHgBU.cjs.map} +1 -1
- package/dist/{auth-BGW072BP.mjs → auth-DHVtM0sF.mjs} +4 -4
- package/dist/{auth-BGW072BP.mjs.map → auth-DHVtM0sF.mjs.map} +1 -1
- package/dist/{bucket-mg5QQORh.cjs → bucket-CFaYmimY.cjs} +3 -3
- package/dist/{bucket-mg5QQORh.cjs.map → bucket-CFaYmimY.cjs.map} +1 -1
- package/dist/{bucket-DqW-WEYb.mjs → bucket-D-lu1xgZ.mjs} +3 -3
- package/dist/{bucket-DqW-WEYb.mjs.map → bucket-D-lu1xgZ.mjs.map} +1 -1
- package/dist/cli/main.cjs +14 -12
- package/dist/cli/main.cjs.map +1 -1
- package/dist/cli/main.mjs +14 -13
- package/dist/cli/main.mjs.map +1 -1
- package/dist/{cms-BJnovGYT.mjs → cms-8XZhxwsM.mjs} +8 -5
- package/dist/cms-8XZhxwsM.mjs.map +1 -0
- package/dist/{cms-Cnx-lDGu.cjs → cms-C4zEtppZ.cjs} +8 -5
- package/dist/cms-C4zEtppZ.cjs.map +1 -0
- package/dist/{codegen-BF5b-u46.cjs → codegen-Cypg4O3L.cjs} +3 -3
- package/dist/{codegen-BF5b-u46.cjs.map → codegen-Cypg4O3L.cjs.map} +1 -1
- package/dist/{codegen-DZOB4ttR.mjs → codegen-Dnjv7zfm.mjs} +3 -3
- package/dist/{codegen-DZOB4ttR.mjs.map → codegen-Dnjv7zfm.mjs.map} +1 -1
- package/dist/config/index.cjs +4 -2
- package/dist/config/index.cjs.map +1 -1
- package/dist/config/index.d.mts +8 -1
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +4 -2
- package/dist/config/index.mjs.map +1 -1
- package/dist/{config-loader-D8x32gEU.cjs → config-loader-CZfANHBf.cjs} +2 -2
- package/dist/config-loader-CZfANHBf.cjs.map +1 -0
- package/dist/{config-loader-BEgS869e.mjs → config-loader-CtbZOGjc.mjs} +3 -3
- package/dist/config-loader-CtbZOGjc.mjs.map +1 -0
- package/dist/{confirm-delete-B9o73U7B.cjs → confirm-delete-BX8bJrXZ.cjs} +3 -3
- package/dist/{confirm-delete-B9o73U7B.cjs.map → confirm-delete-BX8bJrXZ.cjs.map} +1 -1
- package/dist/{confirm-delete-CsWkW69-.mjs → confirm-delete-CcKLYuCB.mjs} +2 -2
- package/dist/{confirm-delete-CsWkW69-.mjs.map → confirm-delete-CcKLYuCB.mjs.map} +1 -1
- package/dist/{consumer-C4WiGHWG.mjs → consumer-BAM3E_68.mjs} +4 -4
- package/dist/{consumer-C4WiGHWG.mjs.map → consumer-BAM3E_68.mjs.map} +1 -1
- package/dist/{consumer-OF6Z_eTP.cjs → consumer-BSgriLn0.cjs} +4 -4
- package/dist/consumer-BSgriLn0.cjs.map +1 -0
- package/dist/consumer-D-Y6KJ8a.cjs +18 -0
- package/dist/{consumer-l-8wUK8E.cjs.map → consumer-D-Y6KJ8a.cjs.map} +1 -1
- package/dist/{consumer-pU2HyiyA.mjs → consumer-s8LnLw4e.mjs} +4 -4
- package/dist/consumer-s8LnLw4e.mjs.map +1 -0
- package/dist/content-ClRuLcGq.cjs +20 -0
- package/dist/{content-DMjSwor1.cjs.map → content-ClRuLcGq.cjs.map} +1 -1
- package/dist/content-DWnYo6ad.mjs +20 -0
- package/dist/{content-BOb6NC8M.mjs.map → content-DWnYo6ad.mjs.map} +1 -1
- package/dist/{create-DJY71sp9.cjs → create-B3d4CDel.cjs} +2 -2
- package/dist/{create-DJY71sp9.cjs.map → create-B3d4CDel.cjs.map} +1 -1
- package/dist/{create-CC814ixh.mjs → create-BD6iS4n6.mjs} +2 -2
- package/dist/{create-CC814ixh.mjs.map → create-BD6iS4n6.mjs.map} +1 -1
- package/dist/{create-B-PAOor6.mjs → create-BGV3F44O.mjs} +3 -3
- package/dist/{create-B-PAOor6.mjs.map → create-BGV3F44O.mjs.map} +1 -1
- package/dist/{create-Z-z3LXNW.cjs → create-BYDbsUvw.cjs} +3 -3
- package/dist/{create-Z-z3LXNW.cjs.map → create-BYDbsUvw.cjs.map} +1 -1
- package/dist/{create-Belwettw.mjs → create-BtuS23L3.mjs} +2 -2
- package/dist/{create-Belwettw.mjs.map → create-BtuS23L3.mjs.map} +1 -1
- package/dist/{create-CCsn7yp5.cjs → create-CNDCTpi0.cjs} +3 -3
- package/dist/{create-CCsn7yp5.cjs.map → create-CNDCTpi0.cjs.map} +1 -1
- package/dist/{create-BNYWcyuQ.cjs → create-DzRMGpm_.cjs} +2 -2
- package/dist/{create-BNYWcyuQ.cjs.map → create-DzRMGpm_.cjs.map} +1 -1
- package/dist/{create-B1ZBOqcV.mjs → create-fweRd0UB.mjs} +2 -2
- package/dist/{create-B1ZBOqcV.mjs.map → create-fweRd0UB.mjs.map} +1 -1
- package/dist/{create-D5suBd3J.mjs → create-m5fNBqQE.mjs} +3 -3
- package/dist/{create-D5suBd3J.mjs.map → create-m5fNBqQE.mjs.map} +1 -1
- package/dist/{create-CmOriwGo.cjs → create-tWGEtI3t.cjs} +2 -2
- package/dist/{create-CmOriwGo.cjs.map → create-tWGEtI3t.cjs.map} +1 -1
- package/dist/{delete-DhSU-Lx2.mjs → delete-B8VlzzCj.mjs} +3 -3
- package/dist/{delete-DhSU-Lx2.mjs.map → delete-B8VlzzCj.mjs.map} +1 -1
- package/dist/{delete-DVrafka1.cjs → delete-B9j8c8ln.cjs} +3 -3
- package/dist/{delete-DVrafka1.cjs.map → delete-B9j8c8ln.cjs.map} +1 -1
- package/dist/{delete-ZIifaG0i.mjs → delete-BhJK-8vE.mjs} +3 -3
- package/dist/{delete-ZIifaG0i.mjs.map → delete-BhJK-8vE.mjs.map} +1 -1
- package/dist/{delete-YYh_0khQ.mjs → delete-Bi6UhAhS.mjs} +3 -3
- package/dist/{delete-YYh_0khQ.mjs.map → delete-Bi6UhAhS.mjs.map} +1 -1
- package/dist/{delete-CCTiCYIL.cjs → delete-C_oxZa_p.cjs} +3 -3
- package/dist/{delete-CCTiCYIL.cjs.map → delete-C_oxZa_p.cjs.map} +1 -1
- package/dist/{delete-CSs5Czlo.mjs → delete-Ci7cq3mU.mjs} +3 -3
- package/dist/{delete-CSs5Czlo.mjs.map → delete-Ci7cq3mU.mjs.map} +1 -1
- package/dist/{delete-XWJRhBFs.mjs → delete-CiWkGnog.mjs} +3 -3
- package/dist/{delete-XWJRhBFs.mjs.map → delete-CiWkGnog.mjs.map} +1 -1
- package/dist/{delete-DozSxZQ7.cjs → delete-Cmk80aqF.cjs} +3 -3
- package/dist/{delete-DozSxZQ7.cjs.map → delete-Cmk80aqF.cjs.map} +1 -1
- package/dist/{delete-8yZ3j0vX.cjs → delete-CvtvB2Cr.cjs} +3 -3
- package/dist/{delete-8yZ3j0vX.cjs.map → delete-CvtvB2Cr.cjs.map} +1 -1
- package/dist/{delete-CIYY59v_.cjs → delete-DG825UwK.cjs} +4 -3
- package/dist/{delete-CIYY59v_.cjs.map → delete-DG825UwK.cjs.map} +1 -1
- package/dist/{delete-WpMIIvjj.cjs → delete-DGrSMqOt.cjs} +3 -3
- package/dist/{delete-WpMIIvjj.cjs.map → delete-DGrSMqOt.cjs.map} +1 -1
- package/dist/{delete-BOUObrDw.mjs → delete-Datr3Kqq.mjs} +3 -2
- package/dist/{delete-BOUObrDw.mjs.map → delete-Datr3Kqq.mjs.map} +1 -1
- package/dist/{delete-D4r1ve4v.cjs → delete-TTF4pIKw.cjs} +3 -3
- package/dist/{delete-D4r1ve4v.cjs.map → delete-TTF4pIKw.cjs.map} +1 -1
- package/dist/{delete-BSLIXrAh.mjs → delete-X8iVsETw.mjs} +3 -3
- package/dist/{delete-BSLIXrAh.mjs.map → delete-X8iVsETw.mjs.map} +1 -1
- package/dist/docs/features/cli/authentication.md +93 -0
- package/dist/docs/features/cli/commands/agent.md +49 -0
- package/dist/docs/features/cli/commands/auth.md +36 -0
- package/dist/docs/features/cli/commands/bucket.md +120 -0
- package/dist/docs/features/cli/commands/codegen.md +51 -0
- package/dist/docs/features/cli/commands/content.md +117 -0
- package/dist/docs/features/cli/commands/key.md +155 -0
- package/dist/docs/features/cli/commands/link.md +21 -0
- package/dist/docs/features/cli/commands/org.md +18 -0
- package/dist/docs/features/cli/commands/project-user.md +108 -0
- package/dist/docs/features/cli/commands/project.md +106 -0
- package/dist/docs/features/cli/commands/schema.md +108 -0
- package/dist/docs/features/cli/commands/webhook.md +110 -0
- package/dist/docs/features/cli/commands.md +110 -0
- package/dist/docs/features/cli/configuration.md +70 -0
- package/dist/docs/features/cli/output.md +53 -0
- package/dist/docs/features/cli/project-linking.md +58 -0
- package/dist/docs/features/cli/quickstart.md +83 -0
- package/dist/docs/features/cli.md +56 -0
- package/dist/docs/features/cms-sdk/account.md +122 -0
- package/dist/docs/features/cms-sdk/auth.md +122 -0
- package/dist/docs/features/cms-sdk/bucket.md +113 -0
- package/dist/docs/features/cms-sdk/cli.md +104 -0
- package/dist/docs/features/cms-sdk/fetch-contents.md +608 -0
- package/dist/docs/features/cms-sdk/install.md +98 -0
- package/dist/docs/features/cms-sdk/management-user.md +244 -0
- package/dist/docs/features/cms-sdk/migrate-to-v2.md +152 -0
- package/dist/docs/features/cms-sdk/mutation-contents.md +190 -0
- package/dist/docs/features/console/audit-logs.md +55 -0
- package/dist/docs/features/console/bucket.md +70 -0
- package/dist/docs/features/console/create-project.md +103 -0
- package/dist/docs/features/console/generate-api-key.md +103 -0
- package/dist/docs/features/console/invite-project-users.md +70 -0
- package/dist/docs/features/console/management-tables.md +131 -0
- package/dist/docs/features/console/organization-member-management.md +78 -0
- package/dist/docs/features/console/schema-history.md +29 -0
- package/dist/docs/features/console.md +15 -0
- package/dist/docs/features/consumer-sdk/cli.md +60 -0
- package/dist/docs/features/consumer-sdk/fetch-contents.md +603 -0
- package/dist/docs/features/consumer-sdk/install.md +90 -0
- package/dist/docs/features/consumer-sdk/migrate-to-v2.md +43 -0
- package/dist/docs/features/design-editor/about.md +36 -0
- package/dist/docs/features/design-editor/getting-started.md +244 -0
- package/dist/docs/features/design-editor/install.md +17 -0
- package/dist/docs/features/design-editor/prop-editor.md +83 -0
- package/dist/docs/features/design-editor/schema.md +279 -0
- package/dist/docs/features/dictionary.md +265 -0
- package/dist/docs/features/draft.md +241 -0
- package/dist/docs/features/form/about.md +83 -0
- package/dist/docs/features/form/editor.md +410 -0
- package/dist/docs/features/form/submission.md +94 -0
- package/dist/docs/features/full-text-search.md +114 -0
- package/dist/docs/features/history.md +152 -0
- package/dist/docs/features/schema/about.md +215 -0
- package/dist/docs/features/schema/authority.md +456 -0
- package/dist/docs/features/schema/bucket.md +142 -0
- package/dist/docs/features/schema/database.md +419 -0
- package/dist/docs/features/schema/table-module.md +140 -0
- package/dist/docs/features/webhook/revalidate-nextjs.md +185 -0
- package/dist/docs/features/webhook.md +295 -0
- package/dist/docs/get-started/add-model-starter.md +124 -0
- package/dist/docs/get-started/get-started-with-starter.md +218 -0
- package/dist/docs/index.md +89 -0
- package/dist/docs/introduction.md +140 -0
- package/dist/docs/manifest.json +6 -0
- package/dist/docs/resources/cli-migration-guide.md +82 -0
- package/dist/docs/resources/cli-v2-to-v3-migration-guide.md +138 -0
- package/dist/docs/resources/deploy-to-vercel.md +62 -0
- package/dist/docs/resources/limits.md +24 -0
- package/dist/docs/resources/private-registry.md +23 -0
- package/dist/docs/resources/status.md +22 -0
- package/dist/docs/resources/user-model.md +38 -0
- package/dist/{download-ogGbb3FU.cjs → download-BkzmfQXD.cjs} +2 -2
- package/dist/{download-ogGbb3FU.cjs.map → download-BkzmfQXD.cjs.map} +1 -1
- package/dist/{download-oFGzg30E.mjs → download-Dx1oyrMg.mjs} +2 -2
- package/dist/{download-oFGzg30E.mjs.map → download-Dx1oyrMg.mjs.map} +1 -1
- package/dist/{erd-zDoF6I_y.mjs → erd-BihhEfZ_.mjs} +3 -3
- package/dist/{erd-zDoF6I_y.mjs.map → erd-BihhEfZ_.mjs.map} +1 -1
- package/dist/{erd-lKC5NB2l.cjs → erd-DmnB1v2c.cjs} +3 -3
- package/dist/{erd-lKC5NB2l.cjs.map → erd-DmnB1v2c.cjs.map} +1 -1
- package/dist/{get-CgEgETQa.mjs → get-1TtxSEoT.mjs} +2 -2
- package/dist/{get-CgEgETQa.mjs.map → get-1TtxSEoT.mjs.map} +1 -1
- package/dist/{get-DjRyK0hJ.cjs → get-B5S1GfjR.cjs} +2 -2
- package/dist/{get-DjRyK0hJ.cjs.map → get-B5S1GfjR.cjs.map} +1 -1
- package/dist/{get-DDB89cOs.mjs → get-BLDHE_Zl.mjs} +2 -2
- package/dist/{get-DDB89cOs.mjs.map → get-BLDHE_Zl.mjs.map} +1 -1
- package/dist/{get-KdWfYINc.cjs → get-C5OH05Ka.cjs} +2 -2
- package/dist/{get-KdWfYINc.cjs.map → get-C5OH05Ka.cjs.map} +1 -1
- package/dist/{get-DwtzBjGV.cjs → get-CKZPn669.cjs} +2 -2
- package/dist/{get-DwtzBjGV.cjs.map → get-CKZPn669.cjs.map} +1 -1
- package/dist/{get-IOU__2RP.cjs → get-CdDZkUXV.cjs} +2 -2
- package/dist/{get-IOU__2RP.cjs.map → get-CdDZkUXV.cjs.map} +1 -1
- package/dist/{get-DB80UNSR.mjs → get-Cw4Dw5NG.mjs} +2 -2
- package/dist/{get-DB80UNSR.mjs.map → get-Cw4Dw5NG.mjs.map} +1 -1
- package/dist/{get-C7dKoSIc.mjs → get-Dy3AD4il.mjs} +2 -2
- package/dist/{get-C7dKoSIc.mjs.map → get-Dy3AD4il.mjs.map} +1 -1
- package/dist/{get-BBOKSXkh.cjs → get-PVsUGHBR.cjs} +2 -2
- package/dist/{get-BBOKSXkh.cjs.map → get-PVsUGHBR.cjs.map} +1 -1
- package/dist/{get-B6vBaq_D.mjs → get-Vo3yr12d.mjs} +2 -2
- package/dist/{get-B6vBaq_D.mjs.map → get-Vo3yr12d.mjs.map} +1 -1
- package/dist/{get-jwXRlIBJ.cjs → get-jaN2o0XY.cjs} +2 -2
- package/dist/{get-jwXRlIBJ.cjs.map → get-jaN2o0XY.cjs.map} +1 -1
- package/dist/{get-DBxhbN1G.mjs → get-qOKYAc46.mjs} +2 -2
- package/dist/{get-DBxhbN1G.mjs.map → get-qOKYAc46.mjs.map} +1 -1
- package/dist/init-BpKpTQ0z.mjs +425 -0
- package/dist/init-BpKpTQ0z.mjs.map +1 -0
- package/dist/init-BrZCChEG.cjs +427 -0
- package/dist/init-BrZCChEG.cjs.map +1 -0
- package/dist/{invite-DPygtCoO.cjs → invite-Tw3SMV0Q.cjs} +2 -2
- package/dist/{invite-DPygtCoO.cjs.map → invite-Tw3SMV0Q.cjs.map} +1 -1
- package/dist/{invite-D66DSMvq.mjs → invite-vzajkU2u.mjs} +2 -2
- package/dist/{invite-D66DSMvq.mjs.map → invite-vzajkU2u.mjs.map} +1 -1
- package/dist/{key-C71Ffll9.mjs → key-CyVxu3Uk.mjs} +3 -3
- package/dist/{key-C71Ffll9.mjs.map → key-CyVxu3Uk.mjs.map} +1 -1
- package/dist/{key-DQr7qRL2.cjs → key-tRYRqYNo.cjs} +3 -3
- package/dist/{key-DQr7qRL2.cjs.map → key-tRYRqYNo.cjs.map} +1 -1
- package/dist/{link-BluFyxEL.mjs → link-Bd55x5Zf.mjs} +2 -2
- package/dist/{link-BluFyxEL.mjs.map → link-Bd55x5Zf.mjs.map} +1 -1
- package/dist/{link-DYu1Vjlw.cjs → link-Cz7MX02S.cjs} +2 -2
- package/dist/{link-DYu1Vjlw.cjs.map → link-Cz7MX02S.cjs.map} +1 -1
- package/dist/{list-D5PSDMWw.mjs → list-2otVufvs.mjs} +3 -3
- package/dist/{list-D5PSDMWw.mjs.map → list-2otVufvs.mjs.map} +1 -1
- package/dist/{list-sQk00GV5.mjs → list-BMnBuZMr.mjs} +2 -2
- package/dist/{list-sQk00GV5.mjs.map → list-BMnBuZMr.mjs.map} +1 -1
- package/dist/{list-BwfpuhmJ.cjs → list-Bo8IMFd0.cjs} +2 -2
- package/dist/{list-BwfpuhmJ.cjs.map → list-Bo8IMFd0.cjs.map} +1 -1
- package/dist/{list-B0N4-Q-5.mjs → list-BtgAAUKm.mjs} +2 -2
- package/dist/{list-B0N4-Q-5.mjs.map → list-BtgAAUKm.mjs.map} +1 -1
- package/dist/{list-vbMaOiza.mjs → list-C0lq-gBZ.mjs} +2 -2
- package/dist/{list-vbMaOiza.mjs.map → list-C0lq-gBZ.mjs.map} +1 -1
- package/dist/{list-BsYYq9wT.mjs → list-CGZ3iT6J.mjs} +2 -2
- package/dist/{list-BsYYq9wT.mjs.map → list-CGZ3iT6J.mjs.map} +1 -1
- package/dist/{list-CFwW0G9f.cjs → list-CMWXO4nB.cjs} +2 -2
- package/dist/{list-CFwW0G9f.cjs.map → list-CMWXO4nB.cjs.map} +1 -1
- package/dist/{list-rAn3uOA7.mjs → list-Ccaec0cs.mjs} +2 -2
- package/dist/{list-rAn3uOA7.mjs.map → list-Ccaec0cs.mjs.map} +1 -1
- package/dist/{list-CU42ERNY.cjs → list-Cp_mHwbN.cjs} +2 -2
- package/dist/{list-CU42ERNY.cjs.map → list-Cp_mHwbN.cjs.map} +1 -1
- package/dist/{list-D0-QrWmn.cjs → list-Cs7kbAAi.cjs} +3 -3
- package/dist/{list-D0-QrWmn.cjs.map → list-Cs7kbAAi.cjs.map} +1 -1
- package/dist/{list-DlJssPwy.cjs → list-D5IaYurn.cjs} +2 -2
- package/dist/{list-DlJssPwy.cjs.map → list-D5IaYurn.cjs.map} +1 -1
- package/dist/{list-CbvEh7eA.mjs → list-DcIBInNA.mjs} +2 -2
- package/dist/{list-CbvEh7eA.mjs.map → list-DcIBInNA.mjs.map} +1 -1
- package/dist/{list-BzLraBnA.cjs → list-Dd3veD9Z.cjs} +2 -2
- package/dist/{list-BzLraBnA.cjs.map → list-Dd3veD9Z.cjs.map} +1 -1
- package/dist/{list-DexBclfb.cjs → list-DdVKKaDN.cjs} +2 -2
- package/dist/{list-DexBclfb.cjs.map → list-DdVKKaDN.cjs.map} +1 -1
- package/dist/{list-Br6Cmi9S.cjs → list-E1sjTZLe.cjs} +2 -2
- package/dist/{list-Br6Cmi9S.cjs.map → list-E1sjTZLe.cjs.map} +1 -1
- package/dist/{list-BRh59EqI.cjs → list-KI-7REC_.cjs} +2 -2
- package/dist/{list-BRh59EqI.cjs.map → list-KI-7REC_.cjs.map} +1 -1
- package/dist/{list-ocfd7631.mjs → list-MWD4huKP.mjs} +2 -2
- package/dist/{list-ocfd7631.mjs.map → list-MWD4huKP.mjs.map} +1 -1
- package/dist/{list-57TUfNFd.mjs → list-Pf5aAoaN.mjs} +2 -2
- package/dist/{list-57TUfNFd.mjs.map → list-Pf5aAoaN.mjs.map} +1 -1
- package/dist/{list-BHvURTWd.cjs → list-fG4zo8zz.cjs} +2 -2
- package/dist/{list-BHvURTWd.cjs.map → list-fG4zo8zz.cjs.map} +1 -1
- package/dist/{list-DrZYlidZ.mjs → list-r2UPz1zW.mjs} +2 -2
- package/dist/{list-DrZYlidZ.mjs.map → list-r2UPz1zW.mjs.map} +1 -1
- package/dist/{login-FE_dbWMo.mjs → login-Dq2L3bI7.mjs} +2 -2
- package/dist/{login-FE_dbWMo.mjs.map → login-Dq2L3bI7.mjs.map} +1 -1
- package/dist/{login-2XcHd4wn.cjs → login-M1IF2MdC.cjs} +2 -2
- package/dist/{login-2XcHd4wn.cjs.map → login-M1IF2MdC.cjs.map} +1 -1
- package/dist/{logout-DC5TMJ5_.cjs → logout-BCSfFgPz.cjs} +2 -2
- package/dist/{logout-DC5TMJ5_.cjs.map → logout-BCSfFgPz.cjs.map} +1 -1
- package/dist/{logout-BDbWrGBm.mjs → logout-DFzQCQKe.mjs} +2 -2
- package/dist/{logout-BDbWrGBm.mjs.map → logout-DFzQCQKe.mjs.map} +1 -1
- package/dist/management-C1p-Hm2Z.cjs +19 -0
- package/dist/{management-BGYcZB4c.cjs.map → management-C1p-Hm2Z.cjs.map} +1 -1
- package/dist/{management-DDACMgbU.mjs → management-h4yE09a6.mjs} +5 -5
- package/dist/{management-DDACMgbU.mjs.map → management-h4yE09a6.mjs.map} +1 -1
- package/dist/object-CZDLoc9L.cjs +20 -0
- package/dist/{object-DVqidsEc.cjs.map → object-CZDLoc9L.cjs.map} +1 -1
- package/dist/object-CqMsEkh9.mjs +20 -0
- package/dist/{object-qdBdEghr.mjs.map → object-CqMsEkh9.mjs.map} +1 -1
- package/dist/{org-CPhTRTks.mjs → org-Co-rjfr-.mjs} +2 -2
- package/dist/{org-CPhTRTks.mjs.map → org-Co-rjfr-.mjs.map} +1 -1
- package/dist/{org-C4cVovOM.cjs → org-Drj3VqIm.cjs} +2 -2
- package/dist/{org-C4cVovOM.cjs.map → org-Drj3VqIm.cjs.map} +1 -1
- package/dist/{org-context-Bewx2NEW.cjs → org-context-DKFnPH_o.cjs} +2 -2
- package/dist/{org-context-Bewx2NEW.cjs.map → org-context-DKFnPH_o.cjs.map} +1 -1
- package/dist/{org-context-D0dwWC2M.mjs → org-context-Df5McOiK.mjs} +2 -2
- package/dist/{org-context-D0dwWC2M.mjs.map → org-context-Df5McOiK.mjs.map} +1 -1
- package/dist/project-C7qWFjMV.mjs +20 -0
- package/dist/{project-CaXD3QBs.mjs.map → project-C7qWFjMV.mjs.map} +1 -1
- package/dist/project-Dm7nr5NV.cjs +20 -0
- package/dist/{project-BX7zvWB1.cjs.map → project-Dm7nr5NV.cjs.map} +1 -1
- package/dist/project-user-D9h_QBc0.mjs +20 -0
- package/dist/{project-user-Cp7i6orv.mjs.map → project-user-D9h_QBc0.mjs.map} +1 -1
- package/dist/project-user-wLFnHFwB.cjs +20 -0
- package/dist/{project-user-Dm0qR-sh.cjs.map → project-user-wLFnHFwB.cjs.map} +1 -1
- package/dist/prompt-C-XNDSNE.cjs +42 -0
- package/dist/prompt-C-XNDSNE.cjs.map +1 -0
- package/dist/prompt-Dr2Rkxun.mjs +25 -0
- package/dist/prompt-Dr2Rkxun.mjs.map +1 -0
- package/dist/{push-0u6PDz4E.cjs → push-BggkrD0g.cjs} +31 -12
- package/dist/push-BggkrD0g.cjs.map +1 -0
- package/dist/{push-D7co0keA.mjs → push-xWnD9oov.mjs} +30 -11
- package/dist/push-xWnD9oov.mjs.map +1 -0
- package/dist/{run-codegen-Ceeosw5x.cjs → run-codegen-B-90rvjk.cjs} +4 -4
- package/dist/run-codegen-B-90rvjk.cjs.map +1 -0
- package/dist/{run-codegen-DgaFaIQ1.mjs → run-codegen-CrO08jJT.mjs} +4 -4
- package/dist/run-codegen-CrO08jJT.mjs.map +1 -0
- package/dist/{run-with-context-CVhmzAFZ.mjs → run-with-context-B4DyI8Wo.mjs} +6 -26
- package/dist/run-with-context-B4DyI8Wo.mjs.map +1 -0
- package/dist/{run-with-context-DJNnEigg.cjs → run-with-context-D8pSrqD_.cjs} +7 -39
- package/dist/run-with-context-D8pSrqD_.cjs.map +1 -0
- package/dist/schema-CUVTXrHk.cjs +20 -0
- package/dist/{schema-B3iRqvYK.cjs.map → schema-CUVTXrHk.cjs.map} +1 -1
- package/dist/schema-DlUWHV_t.mjs +20 -0
- package/dist/{schema-exG250MU.mjs.map → schema-DlUWHV_t.mjs.map} +1 -1
- package/dist/{status-Dq_NJE71.cjs → status-CqPJTxeK.cjs} +2 -2
- package/dist/{status-Dq_NJE71.cjs.map → status-CqPJTxeK.cjs.map} +1 -1
- package/dist/{status-fWqXzV0P.mjs → status-D7nOW3R3.mjs} +2 -2
- package/dist/{status-fWqXzV0P.mjs.map → status-D7nOW3R3.mjs.map} +1 -1
- package/dist/{token-store--9GYVL7N.cjs → token-store-BgWGhqq0.cjs} +3 -3
- package/dist/{token-store--9GYVL7N.cjs.map → token-store-BgWGhqq0.cjs.map} +1 -1
- package/dist/{token-store-reCGF86F.mjs → token-store-C2r7cFA-.mjs} +2 -2
- package/dist/{token-store-reCGF86F.mjs.map → token-store-C2r7cFA-.mjs.map} +1 -1
- package/dist/{update-B4lv4dAz.mjs → update-8-sHFvNB.mjs} +2 -2
- package/dist/{update-B4lv4dAz.mjs.map → update-8-sHFvNB.mjs.map} +1 -1
- package/dist/{update-Dyo4vuZs.mjs → update-B5hKKw0K.mjs} +3 -3
- package/dist/{update-Dyo4vuZs.mjs.map → update-B5hKKw0K.mjs.map} +1 -1
- package/dist/{update-Do9HHWzs.cjs → update-BVaqURWE.cjs} +2 -2
- package/dist/{update-Do9HHWzs.cjs.map → update-BVaqURWE.cjs.map} +1 -1
- package/dist/{update-DRnN1kiu.cjs → update-BlUwNhLA.cjs} +2 -2
- package/dist/{update-DRnN1kiu.cjs.map → update-BlUwNhLA.cjs.map} +1 -1
- package/dist/{update-Cx_2GkQj.cjs → update-BqhLwuP7.cjs} +2 -2
- package/dist/{update-Cx_2GkQj.cjs.map → update-BqhLwuP7.cjs.map} +1 -1
- package/dist/{update-mEmULIau.mjs → update-DaYjh5VN.mjs} +2 -2
- package/dist/{update-mEmULIau.mjs.map → update-DaYjh5VN.mjs.map} +1 -1
- package/dist/{update-CJgEmSWJ.cjs → update-DcTzR54Z.cjs} +3 -3
- package/dist/{update-CJgEmSWJ.cjs.map → update-DcTzR54Z.cjs.map} +1 -1
- package/dist/{update-CIH6sSVk.cjs → update-Dne7g_0s.cjs} +2 -2
- package/dist/{update-CIH6sSVk.cjs.map → update-Dne7g_0s.cjs.map} +1 -1
- package/dist/{update-CQ4n4Xuf.mjs → update-Dy1BOnTB.mjs} +2 -2
- package/dist/{update-CQ4n4Xuf.mjs.map → update-Dy1BOnTB.mjs.map} +1 -1
- package/dist/{update-rzij1b_o.mjs → update-slz_X0mG.mjs} +2 -2
- package/dist/{update-rzij1b_o.mjs.map → update-slz_X0mG.mjs.map} +1 -1
- package/dist/{upload-DGgJ1TQk.mjs → upload-CDtzV9Wx.mjs} +3 -3
- package/dist/{upload-DGgJ1TQk.mjs.map → upload-CDtzV9Wx.mjs.map} +1 -1
- package/dist/{upload-C43ZXxyb.cjs → upload-DIln1QDA.cjs} +3 -3
- package/dist/{upload-C43ZXxyb.cjs.map → upload-DIln1QDA.cjs.map} +1 -1
- package/dist/{validate-BpxZ8LTl.cjs → validate-BH8jqdqq.cjs} +2 -2
- package/dist/{validate-BpxZ8LTl.cjs.map → validate-BH8jqdqq.cjs.map} +1 -1
- package/dist/{validate-Ca0CRo16.mjs → validate-COS4bfr0.mjs} +2 -2
- package/dist/{validate-Ca0CRo16.mjs.map → validate-COS4bfr0.mjs.map} +1 -1
- package/dist/webhook-BT3cHrq5.mjs +20 -0
- package/dist/{webhook-CpZ1-Ho5.mjs.map → webhook-BT3cHrq5.mjs.map} +1 -1
- package/dist/webhook-CQeuAqec.cjs +20 -0
- package/dist/{webhook-CbL4QaR5.cjs.map → webhook-CQeuAqec.cjs.map} +1 -1
- package/package.json +10 -9
- package/dist/auth-CNbONZuf.cjs +0 -18
- package/dist/cms-BJnovGYT.mjs.map +0 -1
- package/dist/cms-Cnx-lDGu.cjs.map +0 -1
- package/dist/config-loader-BEgS869e.mjs.map +0 -1
- package/dist/config-loader-D8x32gEU.cjs.map +0 -1
- package/dist/consumer-OF6Z_eTP.cjs.map +0 -1
- package/dist/consumer-l-8wUK8E.cjs +0 -18
- package/dist/consumer-pU2HyiyA.mjs.map +0 -1
- package/dist/content-BOb6NC8M.mjs +0 -20
- package/dist/content-DMjSwor1.cjs +0 -20
- package/dist/management-BGYcZB4c.cjs +0 -19
- package/dist/object-DVqidsEc.cjs +0 -20
- package/dist/object-qdBdEghr.mjs +0 -20
- package/dist/project-BX7zvWB1.cjs +0 -20
- package/dist/project-CaXD3QBs.mjs +0 -20
- package/dist/project-user-Cp7i6orv.mjs +0 -20
- package/dist/project-user-Dm0qR-sh.cjs +0 -20
- package/dist/push-0u6PDz4E.cjs.map +0 -1
- package/dist/push-D7co0keA.mjs.map +0 -1
- package/dist/run-codegen-Ceeosw5x.cjs.map +0 -1
- package/dist/run-codegen-DgaFaIQ1.mjs.map +0 -1
- package/dist/run-with-context-CVhmzAFZ.mjs.map +0 -1
- package/dist/run-with-context-DJNnEigg.cjs.map +0 -1
- package/dist/schema-B3iRqvYK.cjs +0 -20
- package/dist/schema-exG250MU.mjs +0 -20
- package/dist/webhook-CbL4QaR5.cjs +0 -20
- package/dist/webhook-CpZ1-Ho5.mjs +0 -20
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
<!-- source: docs/src/app/features/form/editor/page.mdx -->
|
|
2
|
+
|
|
3
|
+
# フォームエディター
|
|
4
|
+
|
|
5
|
+
フォームエディターは、フォームを直感的に編集するためのツールです。フォームのパーツをドラッグ&ドロップで配置し、設定をカスタマイズできます。編集画面上で実際のフォームをプレビューしながらフォームを作成できます。
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
フォーム管理機能を使うには、フォームエディターを導入する必要があります。
|
|
10
|
+
|
|
11
|
+
## インストール
|
|
12
|
+
|
|
13
|
+
フォームエディターを導入するには `@orizm-private/orizm-form-editor` パッケージをインストールします。
|
|
14
|
+
|
|
15
|
+
このパッケージは一般公開されておらず、アクセスするには一定の手順が必要です。インストールを実行する前に [プライベートレジストリ](../../resources/private-registry.md) を参照し、アクセスできるように設定してください。
|
|
16
|
+
|
|
17
|
+
スターターでプロジェクトを開始する場合は最初からインストールされています。既存プロジェクトに導入する場合は、以下の手順でインストールしてください。エディターを提供するCMSと、ページを表示するWebサイトの両方でインストールする必要があります。
|
|
18
|
+
|
|
19
|
+
以下のコマンドでパッケージをインストールします。
|
|
20
|
+
|
|
21
|
+
```sh copy
|
|
22
|
+
pnpm add @orizm-private/orizm-form-editor @orizm-private/orizm-editor
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## 使い方
|
|
26
|
+
|
|
27
|
+
ここでは Next.js 15 App Router
|
|
28
|
+
を使用したアプリケーションを例に、フォームエディターをアプリケーションに組み込む方法を説明します。
|
|
29
|
+
|
|
30
|
+
フォームエディターは、CMSとConsumerの両方に組み込む必要があります。CMSにはフォームを編集するためのエディターを実装し、Consumerにはフォームを表示するページを実装します。
|
|
31
|
+
|
|
32
|
+
> [!WARNING]
|
|
33
|
+
> CMS上のエディターでは、Consumer上のフォームをリアルタイムにプレビューしながら編集できます。プレビューは、CMS上にConsumerのプレビューページを
|
|
34
|
+
> iframeで埋め込むことで実現します。そのため、Consumerが**iframeによる表示を許可**している必要があります。
|
|
35
|
+
|
|
36
|
+
### CMSの実装
|
|
37
|
+
|
|
38
|
+
CMSにフォームを編集するエディターを実装します。
|
|
39
|
+
|
|
40
|
+
#### FormEditorコンポーネントの実装例
|
|
41
|
+
|
|
42
|
+
`<OrizmFormEditorComposer>` コンポーネントを使用して、エディターを実装します。`previewSiteURL` プロパティに、ConsumerのプレビューページのURLを指定します。
|
|
43
|
+
|
|
44
|
+
```tsx copy filename="components/form-editor.tsx"
|
|
45
|
+
"use client";
|
|
46
|
+
|
|
47
|
+
import "@orizm-private/orizm-editor/editor.css";
|
|
48
|
+
import { type Block, isBlocks } from "@orizm-private/orizm-editor/common";
|
|
49
|
+
import {
|
|
50
|
+
FormEditor as OrizmFormEditor,
|
|
51
|
+
OrizmFormEditorComposer,
|
|
52
|
+
} from "@orizm-private/orizm-form-editor";
|
|
53
|
+
import type { FormValidationRules } from "@orizm-private/orizm-form-editor/rules";
|
|
54
|
+
import { useCallback, useState } from "react";
|
|
55
|
+
import type { Form } from "@/orizm/cms";
|
|
56
|
+
import { cmsClient } from "@/lib/cms-client";
|
|
57
|
+
|
|
58
|
+
type Props = {
|
|
59
|
+
form: Form;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
export function FormEditor(props: Props) {
|
|
63
|
+
const { id, key, displayName, body, formSchema } = props.form;
|
|
64
|
+
|
|
65
|
+
const [formState, setFormState] = useState<{
|
|
66
|
+
blocks: Block[];
|
|
67
|
+
rules: FormValidationRules;
|
|
68
|
+
}>(() => {
|
|
69
|
+
const blocksData = (body as { blocks: unknown } | null)?.blocks;
|
|
70
|
+
const blocks = isBlocks(blocksData) ? blocksData : [];
|
|
71
|
+
return {
|
|
72
|
+
blocks,
|
|
73
|
+
rules: formSchema,
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
// このハンドラ関数を OrizmFormEditorComposer の onChange プロパティに渡します
|
|
78
|
+
// フォームエディター上での変更を受け取り、stateを更新します
|
|
79
|
+
const onChangeEditor = useCallback(
|
|
80
|
+
(blocks: Block[], rules: FormValidationRules) => {
|
|
81
|
+
setFormState({ blocks, rules });
|
|
82
|
+
},
|
|
83
|
+
[],
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const onClickSave = useCallback(async () => {
|
|
87
|
+
// CMS SDKを使用してフォームの構造をデータベースに保存します
|
|
88
|
+
await cmsClient.tables.form.update(id, {
|
|
89
|
+
formSchema: formState.rules,
|
|
90
|
+
body: { blocks: formState.blocks },
|
|
91
|
+
});
|
|
92
|
+
}, [id, formState]);
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<>
|
|
96
|
+
<button onClick={onClickSave}>フォームを保存</button>
|
|
97
|
+
<OrizmFormEditorComposer
|
|
98
|
+
initialBlocks={formState.blocks}
|
|
99
|
+
onChange={onChangeEditor}
|
|
100
|
+
pageSlug={key}
|
|
101
|
+
pageTitle={displayName}
|
|
102
|
+
previewSiteURL="https://consumer.example.com/form-preview"
|
|
103
|
+
>
|
|
104
|
+
<OrizmFormEditor />
|
|
105
|
+
</OrizmFormEditorComposer>
|
|
106
|
+
</>
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
#### フォーム編集ページの実装例
|
|
112
|
+
|
|
113
|
+
先に実装した `<FormEditor>` コンポーネントを使用して、フォームを編集するページを実装します。
|
|
114
|
+
|
|
115
|
+
```tsx copy filename="page.tsx"
|
|
116
|
+
import { notFound } from "next/navigation";
|
|
117
|
+
import { FormEditor } from "@/components/form-editor";
|
|
118
|
+
import { cmsClient } from "@/lib/cms-client";
|
|
119
|
+
|
|
120
|
+
type Params = {
|
|
121
|
+
params: Promise<{
|
|
122
|
+
form_id: string;
|
|
123
|
+
}>;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export default async function FormEditPage(props: Params) {
|
|
127
|
+
const { form_id } = await props.params;
|
|
128
|
+
|
|
129
|
+
const form = await cmsClient.tables.form.get(form_id).catch(() => null);
|
|
130
|
+
|
|
131
|
+
if (!form) {
|
|
132
|
+
return notFound();
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return <FormEditor form={form} />;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Consumerの実装
|
|
140
|
+
|
|
141
|
+
Consumerにフォームをレンダリングするページを実装します。
|
|
142
|
+
|
|
143
|
+
#### 本番ページの実装例
|
|
144
|
+
|
|
145
|
+
`<FormComposer>` コンポーネントを使用して、フォームを表示します。`action` プロパティに、フォーム送信時のエンドポイントを指定します。
|
|
146
|
+
|
|
147
|
+
```tsx copy filename="app/contact/page.tsx"
|
|
148
|
+
import "@orizm-private/orizm-form-editor/forms.css";
|
|
149
|
+
import { isBlocks } from "@orizm-private/orizm-editor/common";
|
|
150
|
+
import {
|
|
151
|
+
Form,
|
|
152
|
+
FormComponentRenderer,
|
|
153
|
+
FormComposer,
|
|
154
|
+
SubmitButton,
|
|
155
|
+
} from "@orizm-private/orizm-form-editor/renderer";
|
|
156
|
+
import { notFound } from "next/navigation";
|
|
157
|
+
import { cmsClient } from "@/lib/cms-client";
|
|
158
|
+
|
|
159
|
+
export default async function ContactPage() {
|
|
160
|
+
// Consumer SDKを使用してフォームの構造を取得します
|
|
161
|
+
const form = await consumerClient.tables
|
|
162
|
+
.form({ key: "contact" })
|
|
163
|
+
.catch(() => null);
|
|
164
|
+
|
|
165
|
+
if (!form) {
|
|
166
|
+
return notFound();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
const blocksData = (form.body as { blocks: unknown } | null)?.blocks;
|
|
170
|
+
const blocks = isBlocks(blocksData) ? blocksData : [];
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
<FormComposer
|
|
174
|
+
formId={form.key}
|
|
175
|
+
blocks={blocks}
|
|
176
|
+
validationRules={form.formSchema}
|
|
177
|
+
isPreview={false}
|
|
178
|
+
hasConfirmation={false}
|
|
179
|
+
action="/contact/submit"
|
|
180
|
+
>
|
|
181
|
+
<Form>
|
|
182
|
+
<FormComponentRenderer />
|
|
183
|
+
</Form>
|
|
184
|
+
<SubmitButton>送信する</SubmitButton>
|
|
185
|
+
</FormComposer>
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
#### プレビューページの実装例
|
|
191
|
+
|
|
192
|
+
プレビューページは、CMSのフォームエディター上でプレビューを表示するために使用します。
|
|
193
|
+
|
|
194
|
+
プレビューでは `<FormPreviewRenderer>` コンポーネントで `<FormComposer>` コンポーネントをラップします。`editorOrigin` プロパティに、CMSのオリジンを指定します。
|
|
195
|
+
|
|
196
|
+
```tsx copy filename="app/form-preview/page.tsx"
|
|
197
|
+
import "@orizm-private/orizm-form-editor/forms.css";
|
|
198
|
+
|
|
199
|
+
import { blocksToRules } from "@orizm-private/orizm-form-editor/common";
|
|
200
|
+
import { FormPreviewRenderer } from "@orizm-private/orizm-form-editor/preview";
|
|
201
|
+
import {
|
|
202
|
+
Form,
|
|
203
|
+
FormComposer,
|
|
204
|
+
FormComponentRenderer,
|
|
205
|
+
SubmitButton,
|
|
206
|
+
} from "@orizm-private/orizm-form-editor/renderer";
|
|
207
|
+
|
|
208
|
+
export default function PreviewPage() {
|
|
209
|
+
return (
|
|
210
|
+
<FormPreviewRenderer
|
|
211
|
+
editorOrigin="https://cms.example.com"
|
|
212
|
+
initialBlocks={[]}
|
|
213
|
+
renderForm={(blocks) => (
|
|
214
|
+
<FormComposer
|
|
215
|
+
formId="preview"
|
|
216
|
+
blocks={blocks}
|
|
217
|
+
validationRules={blocksToRules(blocks)}
|
|
218
|
+
isPreview
|
|
219
|
+
action="/contact/submit"
|
|
220
|
+
>
|
|
221
|
+
<Form>
|
|
222
|
+
<FormComponentRenderer />
|
|
223
|
+
</Form>
|
|
224
|
+
<SubmitButton>送信する</SubmitButton>
|
|
225
|
+
</FormComposer>
|
|
226
|
+
)}
|
|
227
|
+
/>
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
#### 送信処理の実装例
|
|
233
|
+
|
|
234
|
+
フォームの送信処理を行うAPIを実装します。リクエストは `POST` メソッドで受け取る必要があります。
|
|
235
|
+
|
|
236
|
+
```tsx copy filename="app/contact/submit/route.ts"
|
|
237
|
+
import { cmsClient } from "@/lib/cms-client";
|
|
238
|
+
|
|
239
|
+
export async function POST(request: Request): Promise<Response> {
|
|
240
|
+
try {
|
|
241
|
+
const [formData, form] = await Promise.all([
|
|
242
|
+
request.formData(),
|
|
243
|
+
cmsClient.tables.form.getByUnique({ key: "contact" }),
|
|
244
|
+
]);
|
|
245
|
+
|
|
246
|
+
// CMS SDKを使用して submitForm() でフォームデータを送信します
|
|
247
|
+
await cmsClient.tables.form.submitForm(form.id, formData);
|
|
248
|
+
|
|
249
|
+
// ここで必要に応じて送信者に送信完了メールを送ったり、問い合わせ先に通知する処理を実装します
|
|
250
|
+
|
|
251
|
+
return new Response("Success", { status: 200 });
|
|
252
|
+
} catch (error) {
|
|
253
|
+
console.error(error);
|
|
254
|
+
return new Response("Failed to submit", { status: 500 });
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
## ブロック一覧
|
|
260
|
+
|
|
261
|
+
フォームエディタでは、以下のブロックを使用してフォームを構築できます。
|
|
262
|
+
|
|
263
|
+
- テキスト
|
|
264
|
+
- 複数行テキスト
|
|
265
|
+
- メールアドレス
|
|
266
|
+
- 電話番号
|
|
267
|
+
- URL
|
|
268
|
+
- 数値
|
|
269
|
+
- チェックボックス(複数選択)
|
|
270
|
+
- チェックボックス(単一選択)
|
|
271
|
+
- ドロップダウンリスト
|
|
272
|
+
- 日付
|
|
273
|
+
- 日時
|
|
274
|
+
- 時刻
|
|
275
|
+
- ラジオボタン
|
|
276
|
+
- ファイル
|
|
277
|
+
|
|
278
|
+
## ブロックのスタイル
|
|
279
|
+
|
|
280
|
+
フォームエディタのブロックにはデフォルトのスタイルが適用されているため、そのまま使い始めることができます。もしくは、Webサイトのデザインに合わせてスタイルをカスタマイズできます。
|
|
281
|
+
|
|
282
|
+
カスタマイズするには、 [コンシューマーの実装](#consumerの実装) で使用する `<FormComponentRenderer>` コンポーネントの `components` プロパティにカスタムコンポーネントを指定します。
|
|
283
|
+
|
|
284
|
+
カスタムコンポーネントは必ず `<ComponentMarker>` コンポーネントでラップしてください。ラップしない場合、フォームエディタのプレビュー上でブロックを操作できません。
|
|
285
|
+
|
|
286
|
+
```tsx copy filename="app/contact/page.tsx" {40-51}
|
|
287
|
+
import "@orizm-private/orizm-form-editor/forms.css";
|
|
288
|
+
|
|
289
|
+
import { isBlocks } from "@orizm-private/orizm-editor/common";
|
|
290
|
+
import {
|
|
291
|
+
Form,
|
|
292
|
+
FormComponentRenderer,
|
|
293
|
+
FormComposer,
|
|
294
|
+
FormErrorMessage,
|
|
295
|
+
FormHelperText,
|
|
296
|
+
FormLabel,
|
|
297
|
+
FormTextInput,
|
|
298
|
+
SubmitButton,
|
|
299
|
+
} from "@orizm-private/orizm-form-editor/renderer";
|
|
300
|
+
import { notFound } from "next/navigation";
|
|
301
|
+
import { cmsClient } from "@/lib/cms-client";
|
|
302
|
+
|
|
303
|
+
export default async function ContactPage() {
|
|
304
|
+
const form = await consumerClient.tables
|
|
305
|
+
.form({ key: "contact" })
|
|
306
|
+
.catch(() => null);
|
|
307
|
+
|
|
308
|
+
if (!form) {
|
|
309
|
+
return notFound();
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
const blocksData = (form.body as { blocks: unknown } | null)?.blocks;
|
|
313
|
+
const blocks = isBlocks(blocksData) ? blocksData : [];
|
|
314
|
+
|
|
315
|
+
return (
|
|
316
|
+
<FormComposer
|
|
317
|
+
formId={form.key}
|
|
318
|
+
blocks={blocks}
|
|
319
|
+
validationRules={form.formSchema}
|
|
320
|
+
isPreview={false}
|
|
321
|
+
hasConfirmation={false}
|
|
322
|
+
action="/contact/submit"
|
|
323
|
+
>
|
|
324
|
+
<Form>
|
|
325
|
+
<FormComponentRenderer
|
|
326
|
+
components={{
|
|
327
|
+
TextInput: (
|
|
328
|
+
<ComponentMarker>
|
|
329
|
+
<div>
|
|
330
|
+
<FormLabel />
|
|
331
|
+
<FormTextInput />
|
|
332
|
+
<FormHelperText />
|
|
333
|
+
<FormErrorMessage />
|
|
334
|
+
</div>
|
|
335
|
+
</ComponentMarker>
|
|
336
|
+
),
|
|
337
|
+
}}
|
|
338
|
+
/>
|
|
339
|
+
</Form>
|
|
340
|
+
<SubmitButton>送信する</SubmitButton>
|
|
341
|
+
</FormComposer>
|
|
342
|
+
);
|
|
343
|
+
}
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
## 確認ページを実装する
|
|
347
|
+
|
|
348
|
+
フォームでデータを送信する前に、確認ページを表示してユーザーに入力内容を確認させることができます。
|
|
349
|
+
|
|
350
|
+
`<FormComposer>` コンポーネントを以下のように設定します。
|
|
351
|
+
|
|
352
|
+
- `hasConfirmation` プロパティに `true` を設定
|
|
353
|
+
- `afterSubmit` プロパティに、確認ページへの遷移処理を設定
|
|
354
|
+
|
|
355
|
+
```tsx copy {3-4}
|
|
356
|
+
// その他のpropsは省略しています
|
|
357
|
+
<FormComposer
|
|
358
|
+
hasConfirmation
|
|
359
|
+
afterSubmit={() => router.push("/contact/confirm")}
|
|
360
|
+
>
|
|
361
|
+
<Form>
|
|
362
|
+
<FormComponentRenderer />
|
|
363
|
+
</Form>
|
|
364
|
+
<SubmitButton>送信する</SubmitButton>
|
|
365
|
+
</FormComposer>
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
次に、確認ページを実装します。
|
|
369
|
+
|
|
370
|
+
`useSavedFormData()` フックを使用して、フォームの入力内容を取得します。
|
|
371
|
+
|
|
372
|
+
`<SubmitTemporaryDataButton>` コンポーネントを使用して、フォームの入力内容を送信します。`action` プロパティに送信処理を行うエンドポイントを指定します。`afterSubmit` プロパティを使用すると、サンクスページへの遷移を実装することも可能です。
|
|
373
|
+
|
|
374
|
+
```tsx copy filename="app/contact/confirm/page.tsx"
|
|
375
|
+
"use client";
|
|
376
|
+
|
|
377
|
+
import {
|
|
378
|
+
SubmitTemporaryDataButton,
|
|
379
|
+
useSavedFormData,
|
|
380
|
+
} from "@orizm-private/orizm-form-editor/renderer";
|
|
381
|
+
import { redirect, useRouter } from "next/navigation";
|
|
382
|
+
|
|
383
|
+
export default function ConfirmPage() {
|
|
384
|
+
const formId = "contact";
|
|
385
|
+
|
|
386
|
+
const router = useRouter();
|
|
387
|
+
const savedData = useSavedFormData(formId);
|
|
388
|
+
|
|
389
|
+
if (savedData.isLoading) {
|
|
390
|
+
return <div>Loading...</div>;
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
if (savedData.data == null) {
|
|
394
|
+
redirect("/contact");
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
return (
|
|
398
|
+
<div>
|
|
399
|
+
<pre>{JSON.stringify(savedData, null, 2)}</pre>
|
|
400
|
+
<SubmitTemporaryDataButton
|
|
401
|
+
formId={formId}
|
|
402
|
+
action="/contact/submit"
|
|
403
|
+
afterSubmit={() => router.push("/contact/thanks")}
|
|
404
|
+
>
|
|
405
|
+
送信する
|
|
406
|
+
</SubmitTemporaryDataButton>
|
|
407
|
+
</div>
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
```
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
<!-- source: docs/src/app/features/form/submission/page.mdx -->
|
|
2
|
+
|
|
3
|
+
# 受信データの管理
|
|
4
|
+
|
|
5
|
+
フォーム管理機能では、フォームから送信されたデータ(以下、受信データ)を管理できます。
|
|
6
|
+
|
|
7
|
+
## 受信データのリスト取得
|
|
8
|
+
|
|
9
|
+
受信データのリストを取得するにはCMS SDKを使用します。
|
|
10
|
+
|
|
11
|
+
フォーム管理機能が有効なテーブルに対して `submissions()` メソッドを呼び出します。これにより、そのフォームに紐づく受信データを扱うクライアントメソッドが使用できます。次に `list()` や `get()` メソッドを呼び出すことで、受信データのリストを取得できます。
|
|
12
|
+
|
|
13
|
+
```ts copy
|
|
14
|
+
const submissions = await cmsClient.tables.form.submissions(formId).list({
|
|
15
|
+
order: { createdAt: "desc" },
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
console.log(submissions);
|
|
19
|
+
// {
|
|
20
|
+
// "contents": [
|
|
21
|
+
// {
|
|
22
|
+
// "id": "M3nIwgo21UAsZToo",
|
|
23
|
+
// "updatedAt": "2025-01-01T00:00:00.000Z",
|
|
24
|
+
// "createdAt": "2025-01-01T00:00:00.000Z",
|
|
25
|
+
// "_formId": "A8CE7NflEFVT70cK",
|
|
26
|
+
// "_content": {
|
|
27
|
+
// "lastName": "John",
|
|
28
|
+
// "firstName": "Doe",
|
|
29
|
+
// "email": "john.doe@example.com",
|
|
30
|
+
// "body": "This is a test message."
|
|
31
|
+
// },
|
|
32
|
+
// "_formSchema": {
|
|
33
|
+
// "lastName": {
|
|
34
|
+
// "type": "text",
|
|
35
|
+
// "required": true
|
|
36
|
+
// },
|
|
37
|
+
// "firstName": {
|
|
38
|
+
// "type": "text",
|
|
39
|
+
// "required": true
|
|
40
|
+
// },
|
|
41
|
+
// "email": {
|
|
42
|
+
// "type": "text",
|
|
43
|
+
// "required": true
|
|
44
|
+
// },
|
|
45
|
+
// "body": {
|
|
46
|
+
// "type": "textarea",
|
|
47
|
+
// "required": true
|
|
48
|
+
// }
|
|
49
|
+
// },
|
|
50
|
+
// "_attachments": [],
|
|
51
|
+
// "status": "in_progress",
|
|
52
|
+
// "memo": "This is a memo."
|
|
53
|
+
// }
|
|
54
|
+
// ],
|
|
55
|
+
// "totalCount": 1
|
|
56
|
+
// }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
以下、重要なプロパティを示します。
|
|
60
|
+
|
|
61
|
+
### \_content
|
|
62
|
+
|
|
63
|
+
受信データの内容です。書き換えることはできません。
|
|
64
|
+
|
|
65
|
+
### \_formSchema
|
|
66
|
+
|
|
67
|
+
受信時点でのフォームのスキーマです。書き換えることはできません。
|
|
68
|
+
|
|
69
|
+
### \_attachments
|
|
70
|
+
|
|
71
|
+
受信データに紐づく添付ファイルの情報です。書き換えることはできません。
|
|
72
|
+
|
|
73
|
+
[storage型](../schema/database.md#storage) のデータです。ファイルにアクセスするためのURLが含まれています。
|
|
74
|
+
|
|
75
|
+
## 受信データの更新
|
|
76
|
+
|
|
77
|
+
受信データを更新するには、`update()` メソッドを使用します。
|
|
78
|
+
|
|
79
|
+
スキーマの [submissionColumns](./about.md#submissioncolumns) で定義したカラムのみ更新できます。
|
|
80
|
+
|
|
81
|
+
```ts copy
|
|
82
|
+
await cmsClient.tables.form.submissions(formId).update(submissionId, {
|
|
83
|
+
status: "closed",
|
|
84
|
+
memo: "updated memo text",
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## 受信データの削除
|
|
89
|
+
|
|
90
|
+
受信データを削除するには、`delete()` メソッドを使用します。
|
|
91
|
+
|
|
92
|
+
```ts copy
|
|
93
|
+
await cmsClient.tables.form.submissions(formId).delete(submissionId);
|
|
94
|
+
```
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
<!-- source: docs/src/app/features/full-text-search/page.mdx -->
|
|
2
|
+
|
|
3
|
+
# 全文検索
|
|
4
|
+
|
|
5
|
+
全文検索機能を使用すると、[テーブル](./schema/database.md#テーブル) 上のコンテンツに対してキーワード検索ができます。大量のテキストデータの中から、キーワードに関連するコンテンツを効率的に検索できます。
|
|
6
|
+
|
|
7
|
+
全文検索機能の特徴は以下の通りです。
|
|
8
|
+
|
|
9
|
+
- 日本語に対応
|
|
10
|
+
- テーブルのデータをキーワードで検索
|
|
11
|
+
- 複数キーワードでの検索に対応
|
|
12
|
+
- Consumer向けの公開データのみを対象とした検索
|
|
13
|
+
- CMS向けの下書きデータを含む検索
|
|
14
|
+
|
|
15
|
+
## ユースケース例
|
|
16
|
+
|
|
17
|
+
例えば、求人情報の検索に活用できます。「東京 エンジニア リモートワーク」のように地域名、職種、働き方などのキーワードで検索できます。求職者は希望条件に合った求人情報を直感的に探せます。
|
|
18
|
+
|
|
19
|
+
他にも、ブログ記事や製品カタログの検索に活用できます。
|
|
20
|
+
|
|
21
|
+
## 機能の有効化
|
|
22
|
+
|
|
23
|
+
スキーマで [テーブル](./schema/database.md) ごとに有効化できます。`enableSearch` プロパティを `true` に設定します。
|
|
24
|
+
|
|
25
|
+
```ts copy filename="orizm.config.ts" showLineNumbers {7}
|
|
26
|
+
import { defineConfig } from "@orizm/cli/config";
|
|
27
|
+
|
|
28
|
+
export default defineConfig({
|
|
29
|
+
tables: {
|
|
30
|
+
blog: {
|
|
31
|
+
columns: {},
|
|
32
|
+
enableSearch: true,
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 検索可能なデータ型
|
|
39
|
+
|
|
40
|
+
以下のデータ型のカラムに対して全文検索が可能です。
|
|
41
|
+
|
|
42
|
+
- [string](./schema/database.md#string)
|
|
43
|
+
- [json](./schema/database.md#json)
|
|
44
|
+
- [module](./schema/database.md#module)
|
|
45
|
+
- [module-array](./schema/database.md#module-array)
|
|
46
|
+
|
|
47
|
+
## キーワードで検索する
|
|
48
|
+
|
|
49
|
+
キーワード検索にはSDKの `search()` メソッドを使用します。
|
|
50
|
+
|
|
51
|
+
`query` プロパティに検索キーワードを指定します。複数キーワードの場合は、スペースで区切ります。
|
|
52
|
+
|
|
53
|
+
```ts copy
|
|
54
|
+
await cmsClient.tables.blog.search({ query: "キーワード1 キーワード2" });
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> [!NOTE]
|
|
58
|
+
> `search()` では `filter` パラメータを使用した絞り込みに制約があります。`group`
|
|
59
|
+
> による絞り込みのみ対応しています。
|
|
60
|
+
|
|
61
|
+
このメソッドはCMS SDK、Consumer SDKのどちらでも利用できます。
|
|
62
|
+
|
|
63
|
+
- **Consumer SDK**: 公開データのみ検索可能
|
|
64
|
+
- **CMS SDK**: 下書きデータも検索可能(主にCMS上での管理用途)
|
|
65
|
+
|
|
66
|
+
## 検索モード(セマンティック検索)
|
|
67
|
+
|
|
68
|
+
`search()` の `mode` パラメータで検索方式を選択できます。
|
|
69
|
+
|
|
70
|
+
| mode | 説明 |
|
|
71
|
+
| ----------------- | ----------------------------------------------------------------- |
|
|
72
|
+
| `keyword`(既定) | 従来の全文検索。`mode` を省略した場合もこの方式です |
|
|
73
|
+
| `semantic` | 意味検索。クエリとコンテンツの埋め込みベクトルの近さで検索します |
|
|
74
|
+
| `hybrid` | keyword と semantic の融合(RRF)。字面一致と意味の両方を拾います |
|
|
75
|
+
|
|
76
|
+
```ts copy
|
|
77
|
+
await cmsClient.tables.blog.search({ query: "経費の精算", mode: "hybrid" });
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`semantic` / `hybrid` はプロジェクトでセマンティック検索が有効な場合のみ利用できます(無効なプロジェクトではエラーになります)。有効化は `orizm.config.ts` に `semanticSearch: { enabled: true }` を宣言して `orizm schema push` で反映します(無効に戻すときは `enabled: false` を明示します。宣言を省略した定義は現状維持です)。有効化の直後はベクトルインデックスの構築が完了するまで `semantic` / `hybrid` が 403 になります(構築が終わり次第利用できます)。`semantic` / `hybrid` で検索した場合は、検索結果の各行に `_semantic`(スコア・ヒットに寄与したチャンク・レーン別順位)が付与されます(`keyword` では付きません)。
|
|
81
|
+
|
|
82
|
+
> [!WARNING]
|
|
83
|
+
> セマンティック検索を利用できるかどうかは、プロジェクトの設定に加えてシステム側の設定でも決まります。システム側で有効になっていない環境では、`semanticSearch: { enabled: true }` の push は成功しますが `semantic` / `hybrid` の検索は利用できません(ベクトルインデックスが作られていない場合は 403 になり、過去に作られたインデックスが残っている場合は `keyword` の結果に劣化します)。利用中の環境で使えるかは管理者に確認してください。
|
|
84
|
+
|
|
85
|
+
CMS SDK の `semantic` / `hybrid` では、プロジェクトの [検索辞書](./dictionary.md) に説明を付けた有効なエントリがあれば、検索結果に辞書のヒット(`_dictionary`)も付与されます(説明付きのエントリが無いプロジェクトではキー自体が付きません)。検索辞書に同義語を登録しておくと、`hybrid` の検索クエリに表記の言い換えが足され、社内の俗称や型番の表記ゆれでも目的のコンテンツに当たるようになります。
|
|
86
|
+
|
|
87
|
+
フォーム投稿(submissions)の検索は `keyword` のみ対応です(`semantic` / `hybrid` を指定すると 403 になります)。
|
|
88
|
+
|
|
89
|
+
ページングの制約は mode ごとに異なります(超過はいずれも 400 になります)。
|
|
90
|
+
|
|
91
|
+
| mode | `offset + limit` | `limit: 0`(件数だけ取る) |
|
|
92
|
+
| ---------- | ---------------- | -------------------------------- |
|
|
93
|
+
| `keyword` | 10000 まで | 使えます(正確な件数が返ります) |
|
|
94
|
+
| `semantic` | 100 まで | 使えません |
|
|
95
|
+
| `hybrid` | 100 まで | 使えません |
|
|
96
|
+
|
|
97
|
+
`semantic` / `hybrid` の上限が小さいのは、`semantic` では近傍探索(ANN)の候補プールが深い窓を安定して裏付けられない(加えて窓の各行にチャンク本文を付けて返す)ため、`hybrid` では融合(RRF)が固定ランク窓の中でだけページ間の順序を安定して定義できるためです。深いページングや件数だけの取得が必要な場合は `keyword` を使ってください。`limit` / `offset` は mode を問わず整数かつ 0 以上のみ受け付けます。
|
|
98
|
+
|
|
99
|
+
`query` は mode を問わず 512 文字までです(超過は 400 になります)。空文字や空白だけの `query` は検索せず、0 件(`contents: []`, `totalCount: 0`)を返します。
|
|
100
|
+
|
|
101
|
+
> [!WARNING]
|
|
102
|
+
> `semantic` / `hybrid` の `totalCount`
|
|
103
|
+
> は正確な件数ではなく、**ページ数の計算には使えません**。 `semantic` の
|
|
104
|
+
> `totalCount` は近傍探索(ANN)の候補プールの大きさで、`offset + limit`
|
|
105
|
+
> に応じて増えます(ページを進めるほど値が大きくなります)。該当するコンテンツが無いクエリでも
|
|
106
|
+
> 0 にはなりません(ANN は常に最も近いものを返すため)。`hybrid` の `totalCount`
|
|
107
|
+
> は下界(2 レーンの大きい方。返した行数を下回ることはありません)です。`limit:
|
|
108
|
+
> 0` が `keyword` 専用なのも同じ理由です。正確な件数やページ数が必要な場合は
|
|
109
|
+
> `keyword` を使ってください。
|
|
110
|
+
|
|
111
|
+
> [!NOTE]
|
|
112
|
+
> 埋め込み基盤の一時的な障害時は、検索を失敗させる代わりに `keyword`
|
|
113
|
+
> の結果に劣化して応答します(このとき `_semantic` と `_dictionary`
|
|
114
|
+
> は付かず、`hybrid` で効いていた検索辞書によるクエリの言い換えも外れます)。
|