@puckeditor/cli 0.24.0-canary.301a0304

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 (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +45 -0
  3. package/dist/bin.mjs +7304 -0
  4. package/dist/docs/api-reference/actions.md +63 -0
  5. package/dist/docs/api-reference/components/action-bar-action.md +35 -0
  6. package/dist/docs/api-reference/components/action-bar-group.md +24 -0
  7. package/dist/docs/api-reference/components/action-bar-label.md +25 -0
  8. package/dist/docs/api-reference/components/action-bar-separator.md +16 -0
  9. package/dist/docs/api-reference/components/action-bar.md +32 -0
  10. package/dist/docs/api-reference/components/auto-field.md +63 -0
  11. package/dist/docs/api-reference/components/drawer-item.md +75 -0
  12. package/dist/docs/api-reference/components/drawer.md +29 -0
  13. package/dist/docs/api-reference/components/drop-zone.md +232 -0
  14. package/dist/docs/api-reference/components/field-label.md +138 -0
  15. package/dist/docs/api-reference/components/inline-text-field.md +77 -0
  16. package/dist/docs/api-reference/components/puck-components.md +19 -0
  17. package/dist/docs/api-reference/components/puck-fields.md +39 -0
  18. package/dist/docs/api-reference/components/puck-layout.md +27 -0
  19. package/dist/docs/api-reference/components/puck-outline.md +19 -0
  20. package/dist/docs/api-reference/components/puck-preview.md +39 -0
  21. package/dist/docs/api-reference/components/puck.md +561 -0
  22. package/dist/docs/api-reference/components/render.md +94 -0
  23. package/dist/docs/api-reference/components/rich-text-menu-control.md +87 -0
  24. package/dist/docs/api-reference/components/rich-text-menu-group.md +27 -0
  25. package/dist/docs/api-reference/components/rich-text-menu.md +99 -0
  26. package/dist/docs/api-reference/components.md +32 -0
  27. package/dist/docs/api-reference/configuration/component-config.md +569 -0
  28. package/dist/docs/api-reference/configuration/config.md +108 -0
  29. package/dist/docs/api-reference/configuration.md +4 -0
  30. package/dist/docs/api-reference/data-model/app-state.md +168 -0
  31. package/dist/docs/api-reference/data-model/component-data.md +62 -0
  32. package/dist/docs/api-reference/data-model/data.md +95 -0
  33. package/dist/docs/api-reference/data-model/item-selector.md +34 -0
  34. package/dist/docs/api-reference/data-model/root-data.md +59 -0
  35. package/dist/docs/api-reference/data-model.md +8 -0
  36. package/dist/docs/api-reference/dictionary.md +172 -0
  37. package/dist/docs/api-reference/field-transforms.md +51 -0
  38. package/dist/docs/api-reference/fields/array.md +211 -0
  39. package/dist/docs/api-reference/fields/base.md +96 -0
  40. package/dist/docs/api-reference/fields/custom.md +193 -0
  41. package/dist/docs/api-reference/fields/external.md +413 -0
  42. package/dist/docs/api-reference/fields/number.md +132 -0
  43. package/dist/docs/api-reference/fields/object.md +78 -0
  44. package/dist/docs/api-reference/fields/radio.md +82 -0
  45. package/dist/docs/api-reference/fields/richtext.md +422 -0
  46. package/dist/docs/api-reference/fields/select.md +79 -0
  47. package/dist/docs/api-reference/fields/slot.md +302 -0
  48. package/dist/docs/api-reference/fields/text.md +93 -0
  49. package/dist/docs/api-reference/fields/textarea.md +93 -0
  50. package/dist/docs/api-reference/fields.md +16 -0
  51. package/dist/docs/api-reference/functions/migrate.md +204 -0
  52. package/dist/docs/api-reference/functions/register-overlay-portal.md +45 -0
  53. package/dist/docs/api-reference/functions/resolve-all-data.md +27 -0
  54. package/dist/docs/api-reference/functions/set-deep.md +55 -0
  55. package/dist/docs/api-reference/functions/transform-props.md +51 -0
  56. package/dist/docs/api-reference/functions/use-get-puck.md +24 -0
  57. package/dist/docs/api-reference/functions/use-puck.md +43 -0
  58. package/dist/docs/api-reference/functions/walk-tree.md +88 -0
  59. package/dist/docs/api-reference/functions.md +8 -0
  60. package/dist/docs/api-reference/overrides/action-bar.md +35 -0
  61. package/dist/docs/api-reference/overrides/component-overlay.md +41 -0
  62. package/dist/docs/api-reference/overrides/drawer-item.md +24 -0
  63. package/dist/docs/api-reference/overrides/drawer.md +19 -0
  64. package/dist/docs/api-reference/overrides/field-label.md +18 -0
  65. package/dist/docs/api-reference/overrides/field-types.md +51 -0
  66. package/dist/docs/api-reference/overrides/fields.md +19 -0
  67. package/dist/docs/api-reference/overrides/header-actions.md +24 -0
  68. package/dist/docs/api-reference/overrides/header.md +29 -0
  69. package/dist/docs/api-reference/overrides/iframe.md +32 -0
  70. package/dist/docs/api-reference/overrides/outline.md +19 -0
  71. package/dist/docs/api-reference/overrides/preview.md +19 -0
  72. package/dist/docs/api-reference/overrides/puck.md +19 -0
  73. package/dist/docs/api-reference/overrides.md +28 -0
  74. package/dist/docs/api-reference/permissions.md +55 -0
  75. package/dist/docs/api-reference/plugin.md +112 -0
  76. package/dist/docs/api-reference/plugins/blocks-plugin.md +57 -0
  77. package/dist/docs/api-reference/plugins/fields-plugin.md +68 -0
  78. package/dist/docs/api-reference/plugins/legacy-side-bar-plugin.md +54 -0
  79. package/dist/docs/api-reference/plugins/outline-plugin.md +57 -0
  80. package/dist/docs/api-reference/puck-api.md +278 -0
  81. package/dist/docs/api-reference/theming/action-bar.md +32 -0
  82. package/dist/docs/api-reference/theming/button.md +65 -0
  83. package/dist/docs/api-reference/theming/canvas.md +20 -0
  84. package/dist/docs/api-reference/theming/computed-values.md +194 -0
  85. package/dist/docs/api-reference/theming/drawer.md +34 -0
  86. package/dist/docs/api-reference/theming/fields.md +70 -0
  87. package/dist/docs/api-reference/theming/global.md +127 -0
  88. package/dist/docs/api-reference/theming/header.md +19 -0
  89. package/dist/docs/api-reference/theming/icon-button.md +28 -0
  90. package/dist/docs/api-reference/theming/outline.md +35 -0
  91. package/dist/docs/api-reference/theming/plugin-bar.md +24 -0
  92. package/dist/docs/api-reference/theming/sidebar.md +19 -0
  93. package/dist/docs/api-reference/theming/slot.md +27 -0
  94. package/dist/docs/cli.md +201 -0
  95. package/dist/docs/extending-puck/composition.md +54 -0
  96. package/dist/docs/extending-puck/custom-fields.md +133 -0
  97. package/dist/docs/extending-puck/field-transforms.md +89 -0
  98. package/dist/docs/extending-puck/internal-puck-api.md +96 -0
  99. package/dist/docs/extending-puck/plugins.md +159 -0
  100. package/dist/docs/extending-puck/theming.md +88 -0
  101. package/dist/docs/extending-puck/ui-overrides.md +134 -0
  102. package/dist/docs/getting-started.md +68 -0
  103. package/dist/docs/guides/migrations/dropzones-to-slots.md +138 -0
  104. package/dist/docs/index.json +466 -0
  105. package/dist/docs/index.md +37 -0
  106. package/dist/docs/integrating-puck/categories.md +92 -0
  107. package/dist/docs/integrating-puck/component-configuration.md +159 -0
  108. package/dist/docs/integrating-puck/data-migration.md +86 -0
  109. package/dist/docs/integrating-puck/dynamic-fields.md +86 -0
  110. package/dist/docs/integrating-puck/dynamic-props.md +137 -0
  111. package/dist/docs/integrating-puck/external-data-sources.md +149 -0
  112. package/dist/docs/integrating-puck/feature-toggling.md +121 -0
  113. package/dist/docs/integrating-puck/localization.md +228 -0
  114. package/dist/docs/integrating-puck/multi-column-layouts.md +226 -0
  115. package/dist/docs/integrating-puck/overlay-portals.md +25 -0
  116. package/dist/docs/integrating-puck/rich-text-editing.md +230 -0
  117. package/dist/docs/integrating-puck/root-configuration.md +171 -0
  118. package/dist/docs/integrating-puck/server-components.md +199 -0
  119. package/dist/docs/integrating-puck/styling.md +117 -0
  120. package/dist/docs/integrating-puck/viewports.md +75 -0
  121. package/dist/templates/astro/README.md +52 -0
  122. package/dist/templates/astro/_gitignore +24 -0
  123. package/dist/templates/astro/astro.config.mjs +14 -0
  124. package/dist/templates/astro/database.json +1 -0
  125. package/dist/templates/astro/package.json +25 -0
  126. package/dist/templates/astro/public/favicon.svg +9 -0
  127. package/dist/templates/astro/src/lib/pages.ts +21 -0
  128. package/dist/templates/astro/src/lib/resolve-puck-path.ts +19 -0
  129. package/dist/templates/astro/src/pages/[...puckPath].astro +25 -0
  130. package/dist/templates/astro/src/pages/api/pages.ts +18 -0
  131. package/dist/templates/astro/src/puck/editor.tsx +32 -0
  132. package/dist/templates/astro/src/puck/pages.ts +15 -0
  133. package/dist/templates/astro/src/puck/render.tsx +9 -0
  134. package/dist/templates/astro/src/puck.config.tsx +23 -0
  135. package/dist/templates/astro/tsconfig.json +14 -0
  136. package/dist/templates/astro-ai/README.md +64 -0
  137. package/dist/templates/astro-ai/_gitignore +24 -0
  138. package/dist/templates/astro-ai/astro.config.mjs +21 -0
  139. package/dist/templates/astro-ai/database.json +1 -0
  140. package/dist/templates/astro-ai/package.json +27 -0
  141. package/dist/templates/astro-ai/public/favicon.svg +9 -0
  142. package/dist/templates/astro-ai/src/lib/pages.ts +21 -0
  143. package/dist/templates/astro-ai/src/lib/resolve-puck-path.ts +19 -0
  144. package/dist/templates/astro-ai/src/pages/[...puckPath].astro +25 -0
  145. package/dist/templates/astro-ai/src/pages/api/pages.ts +18 -0
  146. package/dist/templates/astro-ai/src/pages/api/puck/[...all].ts +36 -0
  147. package/dist/templates/astro-ai/src/puck/editor.tsx +53 -0
  148. package/dist/templates/astro-ai/src/puck/pages.ts +15 -0
  149. package/dist/templates/astro-ai/src/puck/render.tsx +10 -0
  150. package/dist/templates/astro-ai/src/puck.config.tsx +23 -0
  151. package/dist/templates/astro-ai/tsconfig.json +14 -0
  152. package/dist/templates/express/README.md +66 -0
  153. package/dist/templates/express/_gitignore +16 -0
  154. package/dist/templates/express/database.json +1 -0
  155. package/dist/templates/express/package.json +20 -0
  156. package/dist/templates/express/src/index.ts +15 -0
  157. package/dist/templates/express/src/puck/pages.ts +39 -0
  158. package/dist/templates/express/tsconfig.json +12 -0
  159. package/dist/templates/express-ai/README.md +81 -0
  160. package/dist/templates/express-ai/_gitignore +16 -0
  161. package/dist/templates/express-ai/database.json +1 -0
  162. package/dist/templates/express-ai/package.json +22 -0
  163. package/dist/templates/express-ai/src/index.ts +17 -0
  164. package/dist/templates/express-ai/src/puck/cloud.ts +71 -0
  165. package/dist/templates/express-ai/src/puck/pages.ts +39 -0
  166. package/dist/templates/express-ai/tsconfig.json +12 -0
  167. package/dist/templates/hono/README.md +66 -0
  168. package/dist/templates/hono/_gitignore +32 -0
  169. package/dist/templates/hono/database.json +1 -0
  170. package/dist/templates/hono/package.json +20 -0
  171. package/dist/templates/hono/src/index.ts +21 -0
  172. package/dist/templates/hono/src/puck/pages.ts +32 -0
  173. package/dist/templates/hono/tsconfig.json +13 -0
  174. package/dist/templates/hono-ai/README.md +81 -0
  175. package/dist/templates/hono-ai/_gitignore +32 -0
  176. package/dist/templates/hono-ai/database.json +1 -0
  177. package/dist/templates/hono-ai/package.json +22 -0
  178. package/dist/templates/hono-ai/src/index.ts +23 -0
  179. package/dist/templates/hono-ai/src/puck/cloud.ts +30 -0
  180. package/dist/templates/hono-ai/src/puck/pages.ts +32 -0
  181. package/dist/templates/hono-ai/tsconfig.json +13 -0
  182. package/dist/templates/manifest.json +4 -0
  183. package/dist/templates/next/README.md +112 -0
  184. package/dist/templates/next/_gitignore +35 -0
  185. package/dist/templates/next/app/[...puckPath]/client.tsx +9 -0
  186. package/dist/templates/next/app/[...puckPath]/page.tsx +49 -0
  187. package/dist/templates/next/app/favicon.ico +0 -0
  188. package/dist/templates/next/app/layout.tsx +13 -0
  189. package/dist/templates/next/app/page.tsx +1 -0
  190. package/dist/templates/next/app/puck/[...puckPath]/client.tsx +20 -0
  191. package/dist/templates/next/app/puck/[...puckPath]/page.tsx +55 -0
  192. package/dist/templates/next/app/puck/api/route.ts +25 -0
  193. package/dist/templates/next/app/puck/page.tsx +3 -0
  194. package/dist/templates/next/app/styles.css +3 -0
  195. package/dist/templates/next/database.json +1 -0
  196. package/dist/templates/next/lib/get-page.ts +11 -0
  197. package/dist/templates/next/next.config.js +3 -0
  198. package/dist/templates/next/package.json +25 -0
  199. package/dist/templates/next/proxy.ts +27 -0
  200. package/dist/templates/next/puck.config.tsx +25 -0
  201. package/dist/templates/next/tsconfig/base.json +20 -0
  202. package/dist/templates/next/tsconfig/nextjs.json +21 -0
  203. package/dist/templates/next/tsconfig.json +8 -0
  204. package/dist/templates/next-ai/README.md +169 -0
  205. package/dist/templates/next-ai/_gitignore +35 -0
  206. package/dist/templates/next-ai/app/[...puckPath]/client.tsx +12 -0
  207. package/dist/templates/next-ai/app/[...puckPath]/page.tsx +49 -0
  208. package/dist/templates/next-ai/app/api/pages/route.ts +26 -0
  209. package/dist/templates/next-ai/app/api/puck/[...all]/route.ts +31 -0
  210. package/dist/templates/next-ai/app/layout.tsx +13 -0
  211. package/dist/templates/next-ai/app/page.tsx +1 -0
  212. package/dist/templates/next-ai/app/puck/[...puckPath]/client.tsx +38 -0
  213. package/dist/templates/next-ai/app/puck/[...puckPath]/page.tsx +57 -0
  214. package/dist/templates/next-ai/app/puck/page.tsx +3 -0
  215. package/dist/templates/next-ai/app/styles.css +3 -0
  216. package/dist/templates/next-ai/database.json +1 -0
  217. package/dist/templates/next-ai/lib/get-page.ts +11 -0
  218. package/dist/templates/next-ai/next.config.js +3 -0
  219. package/dist/templates/next-ai/package.json +27 -0
  220. package/dist/templates/next-ai/proxy.ts +27 -0
  221. package/dist/templates/next-ai/public/favicon.ico +0 -0
  222. package/dist/templates/next-ai/puck.config.tsx +25 -0
  223. package/dist/templates/next-ai/tsconfig/base.json +20 -0
  224. package/dist/templates/next-ai/tsconfig/nextjs.json +21 -0
  225. package/dist/templates/next-ai/tsconfig.json +8 -0
  226. package/dist/templates/react-router/README.md +113 -0
  227. package/dist/templates/react-router/_gitignore +6 -0
  228. package/dist/templates/react-router/app/components/puck-render.tsx +8 -0
  229. package/dist/templates/react-router/app/lib/pages.server.ts +29 -0
  230. package/dist/templates/react-router/app/lib/resolve-puck-path.server.ts +19 -0
  231. package/dist/templates/react-router/app/root.tsx +65 -0
  232. package/dist/templates/react-router/app/routes/_index.tsx +31 -0
  233. package/dist/templates/react-router/app/routes/puck-splat.tsx +95 -0
  234. package/dist/templates/react-router/app/routes.ts +7 -0
  235. package/dist/templates/react-router/database.json +1 -0
  236. package/dist/templates/react-router/package.json +33 -0
  237. package/dist/templates/react-router/public/favicon.ico +0 -0
  238. package/dist/templates/react-router/puck.config.tsx +23 -0
  239. package/dist/templates/react-router/react-router.config.ts +7 -0
  240. package/dist/templates/react-router/tsconfig.json +29 -0
  241. package/dist/templates/react-router/vite.config.ts +10 -0
  242. package/dist/templates/react-router-ai/README.md +172 -0
  243. package/dist/templates/react-router-ai/_gitignore +6 -0
  244. package/dist/templates/react-router-ai/app/components/puck-render.tsx +11 -0
  245. package/dist/templates/react-router-ai/app/lib/pages.server.ts +29 -0
  246. package/dist/templates/react-router-ai/app/lib/resolve-puck-path.server.ts +19 -0
  247. package/dist/templates/react-router-ai/app/root.tsx +65 -0
  248. package/dist/templates/react-router-ai/app/routes/_index.tsx +31 -0
  249. package/dist/templates/react-router-ai/app/routes/api.puck.ts +34 -0
  250. package/dist/templates/react-router-ai/app/routes/puck-splat.tsx +119 -0
  251. package/dist/templates/react-router-ai/app/routes.ts +8 -0
  252. package/dist/templates/react-router-ai/database.json +1 -0
  253. package/dist/templates/react-router-ai/package.json +35 -0
  254. package/dist/templates/react-router-ai/public/favicon.ico +0 -0
  255. package/dist/templates/react-router-ai/puck.config.tsx +25 -0
  256. package/dist/templates/react-router-ai/react-router.config.ts +7 -0
  257. package/dist/templates/react-router-ai/tsconfig.json +29 -0
  258. package/dist/templates/react-router-ai/vite.config.ts +10 -0
  259. package/dist/templates/tanstack-start/README.md +113 -0
  260. package/dist/templates/tanstack-start/_gitignore +12 -0
  261. package/dist/templates/tanstack-start/database.json +1 -0
  262. package/dist/templates/tanstack-start/package.json +26 -0
  263. package/dist/templates/tanstack-start/puck.config.tsx +23 -0
  264. package/dist/templates/tanstack-start/src/components/puck-render.tsx +8 -0
  265. package/dist/templates/tanstack-start/src/lib/pages.server.ts +26 -0
  266. package/dist/templates/tanstack-start/src/lib/pages.ts +39 -0
  267. package/dist/templates/tanstack-start/src/lib/resolve-puck-path.ts +19 -0
  268. package/dist/templates/tanstack-start/src/routeTree.gen.ts +86 -0
  269. package/dist/templates/tanstack-start/src/router.tsx +19 -0
  270. package/dist/templates/tanstack-start/src/routes/$.tsx +41 -0
  271. package/dist/templates/tanstack-start/src/routes/__root.tsx +42 -0
  272. package/dist/templates/tanstack-start/src/routes/index.tsx +18 -0
  273. package/dist/templates/tanstack-start/src/styles.css +13 -0
  274. package/dist/templates/tanstack-start/tsconfig.json +24 -0
  275. package/dist/templates/tanstack-start/vite.config.ts +15 -0
  276. package/dist/templates/tanstack-start-ai/README.md +171 -0
  277. package/dist/templates/tanstack-start-ai/_gitignore +12 -0
  278. package/dist/templates/tanstack-start-ai/database.json +1 -0
  279. package/dist/templates/tanstack-start-ai/package.json +28 -0
  280. package/dist/templates/tanstack-start-ai/puck.config.tsx +23 -0
  281. package/dist/templates/tanstack-start-ai/src/components/puck-render.tsx +11 -0
  282. package/dist/templates/tanstack-start-ai/src/lib/pages.server.ts +26 -0
  283. package/dist/templates/tanstack-start-ai/src/lib/pages.ts +39 -0
  284. package/dist/templates/tanstack-start-ai/src/lib/resolve-puck-path.ts +19 -0
  285. package/dist/templates/tanstack-start-ai/src/routeTree.gen.ts +104 -0
  286. package/dist/templates/tanstack-start-ai/src/router.tsx +19 -0
  287. package/dist/templates/tanstack-start-ai/src/routes/$.tsx +73 -0
  288. package/dist/templates/tanstack-start-ai/src/routes/__root.tsx +42 -0
  289. package/dist/templates/tanstack-start-ai/src/routes/api/puck/$.ts +39 -0
  290. package/dist/templates/tanstack-start-ai/src/routes/index.tsx +18 -0
  291. package/dist/templates/tanstack-start-ai/src/styles.css +13 -0
  292. package/dist/templates/tanstack-start-ai/tsconfig.json +24 -0
  293. package/dist/templates/tanstack-start-ai/vite.config.ts +15 -0
  294. package/dist/templates/vinext/README.md +112 -0
  295. package/dist/templates/vinext/_gitignore +33 -0
  296. package/dist/templates/vinext/app/[...puckPath]/client.tsx +9 -0
  297. package/dist/templates/vinext/app/[...puckPath]/page.tsx +49 -0
  298. package/dist/templates/vinext/app/favicon.ico +0 -0
  299. package/dist/templates/vinext/app/layout.tsx +13 -0
  300. package/dist/templates/vinext/app/page.tsx +1 -0
  301. package/dist/templates/vinext/app/puck/[...puckPath]/client.tsx +20 -0
  302. package/dist/templates/vinext/app/puck/[...puckPath]/page.tsx +55 -0
  303. package/dist/templates/vinext/app/puck/api/route.ts +25 -0
  304. package/dist/templates/vinext/app/puck/page.tsx +3 -0
  305. package/dist/templates/vinext/app/styles.css +3 -0
  306. package/dist/templates/vinext/database.json +1 -0
  307. package/dist/templates/vinext/lib/get-page.ts +11 -0
  308. package/dist/templates/vinext/package.json +30 -0
  309. package/dist/templates/vinext/proxy.ts +27 -0
  310. package/dist/templates/vinext/puck.config.tsx +25 -0
  311. package/dist/templates/vinext/tsconfig.json +30 -0
  312. package/dist/templates/vinext/vite.config.ts +6 -0
  313. package/dist/templates/vinext-ai/README.md +169 -0
  314. package/dist/templates/vinext-ai/_gitignore +33 -0
  315. package/dist/templates/vinext-ai/app/[...puckPath]/client.tsx +12 -0
  316. package/dist/templates/vinext-ai/app/[...puckPath]/page.tsx +49 -0
  317. package/dist/templates/vinext-ai/app/api/pages/route.ts +26 -0
  318. package/dist/templates/vinext-ai/app/api/puck/[...all]/route.ts +31 -0
  319. package/dist/templates/vinext-ai/app/layout.tsx +13 -0
  320. package/dist/templates/vinext-ai/app/page.tsx +1 -0
  321. package/dist/templates/vinext-ai/app/puck/[...puckPath]/client.tsx +38 -0
  322. package/dist/templates/vinext-ai/app/puck/[...puckPath]/page.tsx +57 -0
  323. package/dist/templates/vinext-ai/app/puck/page.tsx +3 -0
  324. package/dist/templates/vinext-ai/app/styles.css +3 -0
  325. package/dist/templates/vinext-ai/database.json +1 -0
  326. package/dist/templates/vinext-ai/lib/get-page.ts +11 -0
  327. package/dist/templates/vinext-ai/package.json +32 -0
  328. package/dist/templates/vinext-ai/proxy.ts +27 -0
  329. package/dist/templates/vinext-ai/public/favicon.ico +0 -0
  330. package/dist/templates/vinext-ai/puck.config.tsx +25 -0
  331. package/dist/templates/vinext-ai/tsconfig.json +30 -0
  332. package/dist/templates/vinext-ai/vite.config.ts +9 -0
  333. package/dist/templates/vite/README.md +56 -0
  334. package/dist/templates/vite/_gitignore +24 -0
  335. package/dist/templates/vite/database.json +1 -0
  336. package/dist/templates/vite/index.html +12 -0
  337. package/dist/templates/vite/package.json +29 -0
  338. package/dist/templates/vite/server/index.ts +13 -0
  339. package/dist/templates/vite/server/prod.ts +18 -0
  340. package/dist/templates/vite/server/puck/pages.ts +32 -0
  341. package/dist/templates/vite/src/App.tsx +11 -0
  342. package/dist/templates/vite/src/main.tsx +12 -0
  343. package/dist/templates/vite/src/puck/editor.tsx +28 -0
  344. package/dist/templates/vite/src/puck/page.tsx +27 -0
  345. package/dist/templates/vite/src/puck/pages.ts +15 -0
  346. package/dist/templates/vite/src/puck/root.tsx +27 -0
  347. package/dist/templates/vite/src/puck.config.tsx +23 -0
  348. package/dist/templates/vite/tsconfig.app.json +26 -0
  349. package/dist/templates/vite/tsconfig.json +7 -0
  350. package/dist/templates/vite/tsconfig.node.json +23 -0
  351. package/dist/templates/vite/vite.config.ts +14 -0
  352. package/dist/templates/vite-ai/README.md +67 -0
  353. package/dist/templates/vite-ai/_gitignore +24 -0
  354. package/dist/templates/vite-ai/database.json +1 -0
  355. package/dist/templates/vite-ai/index.html +12 -0
  356. package/dist/templates/vite-ai/package.json +31 -0
  357. package/dist/templates/vite-ai/server/index.ts +15 -0
  358. package/dist/templates/vite-ai/server/prod.ts +18 -0
  359. package/dist/templates/vite-ai/server/puck/cloud.ts +30 -0
  360. package/dist/templates/vite-ai/server/puck/pages.ts +32 -0
  361. package/dist/templates/vite-ai/src/App.tsx +11 -0
  362. package/dist/templates/vite-ai/src/main.tsx +12 -0
  363. package/dist/templates/vite-ai/src/puck/editor.tsx +49 -0
  364. package/dist/templates/vite-ai/src/puck/page.tsx +28 -0
  365. package/dist/templates/vite-ai/src/puck/pages.ts +15 -0
  366. package/dist/templates/vite-ai/src/puck/root.tsx +27 -0
  367. package/dist/templates/vite-ai/src/puck.config.tsx +23 -0
  368. package/dist/templates/vite-ai/tsconfig.app.json +26 -0
  369. package/dist/templates/vite-ai/tsconfig.json +7 -0
  370. package/dist/templates/vite-ai/tsconfig.node.json +23 -0
  371. package/dist/templates/vite-ai/vite.config.ts +14 -0
  372. package/package.json +51 -0
@@ -0,0 +1,121 @@
1
+ # Feature Toggling
2
+
3
+ Feature toggling is enabled by Puck's [Permissions API](/docs/api-reference/permissions). This enables you to toggle behavior like:
4
+
5
+ - Deletion
6
+ - Dragging
7
+ - Duplication
8
+ - Editing (setting all fields to read-only)
9
+ - etc
10
+
11
+ See the [supported permissions reference](/docs/api-reference/permissions#supported-permissions) for a complete list.
12
+
13
+ ## Toggling features globally
14
+
15
+ Toggling features across the entire Puck instance can be done with global permissions. These can be set by the [`permissions` prop](/docs/api-reference/components/puck#permissions) on the Puck component:
16
+
17
+ ```tsx
18
+ export function Editor() {
19
+ return (
20
+ <Puck
21
+ permissions={{
22
+ delete: false, // Disable delete function on all components
23
+ }}
24
+ // ...
25
+ />
26
+ );
27
+ }
28
+ ```
29
+
30
+ ## Toggling features per component
31
+
32
+ Toggling feature for all instance of a component can be done using component permissions. This is controlled by the [`permissions` parameter](/docs/api-reference/configuration/component-config#permissions) on the component config, and inherits the global permissions.
33
+
34
+ ```tsx
35
+ const config = {
36
+ components: {
37
+ HeadingBlock: {
38
+ permissions: {
39
+ delete: false, // Disable delete function on all HeadingBlock instances
40
+ },
41
+ // ...
42
+ },
43
+ },
44
+ };
45
+ ```
46
+
47
+ Component permissions can also be applied to the `root` config.
48
+
49
+ ## Toggling features dynamically
50
+
51
+ Dynamic permissions enable runtime calculation of permissions based on the component data, enabling instance-specific permissions. This is controlled by the [`resolvePermissions` parameter](/docs/api-reference/configuration/component-config#resolvepermissionsdata-params) on the component config.
52
+
53
+ ```tsx
54
+ const config = {
55
+ components: {
56
+ HeadingBlock: {
57
+ resolvePermissions: (data, { permissions }) => {
58
+ if (data.props.locked) {
59
+ return {
60
+ delete: false, // Disable delete function when HeadingBlock `locked` prop is set
61
+ };
62
+ }
63
+
64
+ return permissions; // Return inherited permissions (component or global)
65
+ },
66
+ // ...
67
+ },
68
+ },
69
+ };
70
+ ```
71
+
72
+ ### Asynchronous feature toggling
73
+
74
+ Permissions can be resolved asynchronously, enabling powerful patterns like querying permissions from an endpoint whenever the data changes.
75
+
76
+ ```tsx
77
+ const config = {
78
+ components: {
79
+ HeadingBlock: {
80
+ resolvePermissions: async (data) => {
81
+ const serverPermissions = await myPermissionsApi(data.props.id); // Query permissions from a server
82
+
83
+ return serverPermissions;
84
+ },
85
+ // ...
86
+ },
87
+ },
88
+ };
89
+ ```
90
+
91
+ ### Preventing duplicate calls
92
+
93
+ Permission resolvers are cached based on the component props. If none of the props change, then the resolver won't be called. This prevents duplicate calls to expensive asynchronous operations.
94
+
95
+ However, it's possible that you may want to avoid making an expensive operation unless a _specific_ prop has changed, rather than any prop.
96
+
97
+ This can be restricted by checking the [`changed` param](/docs/api-reference/configuration/component-config#paramschanged-2) before calling any expensive operations.
98
+
99
+ ```tsx
100
+ const config = {
101
+ components: {
102
+ HeadingBlock: {
103
+ // ...
104
+ resolvePermissions: async (data, { changed, lastPermissions }) => {
105
+ if (!changed.locked) return lastPermissions; // Return last permissions if `locked` hasn't changed
106
+
107
+ return await myExpensivePermissionsApi(data),
108
+ },
109
+ // ...
110
+ },
111
+ },
112
+ };
113
+ ```
114
+
115
+ ## Further reading
116
+
117
+ - [Permissions API reference](/docs/api-reference/permissions)
118
+ - [Supported permissions reference](/docs/api-reference/permissions#supported-permissions)
119
+ - [Global `permissions` prop API reference](/docs/api-reference/components/puck#permissions)
120
+ - [Component `permissions` param API reference](/docs/api-reference/configuration/component-config#permissions)
121
+ - [Component `resolvePermissions` param API reference](/docs/api-reference/configuration/component-config#resolvepermissionsdata-params)
@@ -0,0 +1,228 @@
1
+ # Localization
2
+
3
+ Puck's default UI uses US English. Use the [`dictionary`](/docs/api-reference/dictionary) prop to translate or reword Puck-owned strings.
4
+
5
+ See the [Dictionary API reference](/docs/api-reference/dictionary) for the full list of strings and their defaults.
6
+
7
+ ## Translating Puck strings
8
+
9
+ To translate strings, provide a dictionary object with the keys you want to change and their corresponding translations.
10
+
11
+ ```tsx
12
+ import { Puck } from "@puckeditor/core";
13
+
14
+ export function Editor() {
15
+ return (
16
+ <Puck
17
+ dictionary={{
18
+ "header-publish": "Publicar", // "Publish" button
19
+ "field-richtext-bold": "Negrita", // "Bold" rich text control
20
+ "viewport-switch": "Cambiar a {label}", // Viewport tooltip
21
+ }}
22
+ config={config}
23
+ data={data}
24
+ />
25
+ );
26
+ }
27
+ ```
28
+
29
+ ## Switching languages at runtime
30
+
31
+ Puck reacts to any changes in the `dictionary` prop, so you can swap the object at runtime to change the language of the UI.
32
+
33
+ ```tsx
34
+ import { useState } from "react";
35
+ import { Puck } from "@puckeditor/core";
36
+
37
+ const dictionaries = {
38
+ en: {},
39
+ es: { "header-publish": "Publicar" },
40
+ };
41
+
42
+ export function Editor() {
43
+ const [locale, setLocale] = useState<"en" | "es">("en");
44
+
45
+ return (
46
+ <>
47
+ <button onClick={() => setLocale(locale === "en" ? "es" : "en")}>
48
+ Toggle language
49
+ </button>
50
+ <Puck dictionary={dictionaries[locale]} config={config} data={data} />
51
+ </>
52
+ );
53
+ }
54
+ ```
55
+
56
+ If you already use a library like [`react-i18next`](https://react.i18next.com/) or [`next-intl`](https://next-intl.dev/), resolve your strings into a plain object and feed that object into `dictionary`.
57
+
58
+ ```tsx
59
+ import { useMemo } from "react";
60
+ import { useTranslation } from "react-i18next";
61
+
62
+ export function Editor() {
63
+ const { t } = useTranslation();
64
+
65
+ const dictionary = useMemo(
66
+ () => ({
67
+ "header-publish": t("header-publish"),
68
+ "field-richtext-bold": t("field-richtext-bold"),
69
+ }),
70
+ [t]
71
+ );
72
+
73
+ return <Puck dictionary={dictionary} config={config} data={data} />;
74
+ }
75
+ ```
76
+
77
+ ## Translating user-defined labels
78
+
79
+ The dictionary only covers strings owned by the editor. Labels defined by your app should be translated where they are configured:
80
+
81
+ - Custom plugin labels via the plugin [`label`](/docs/api-reference/plugin#label)
82
+ - Viewport labels via the [`viewports.label`](/docs/api-reference/components/puck#label) prop
83
+ - Component labels, root label, category titles and field labels via the [`config`](/docs/api-reference/components/puck#config) prop
84
+
85
+ ### Plugins
86
+
87
+ Your own plugins define their own [`label`](/docs/api-reference/plugin#label); translate it before passing the plugin to Puck.
88
+
89
+ ```tsx
90
+ import { useMemo } from "react";
91
+ import { Puck } from "@puckeditor/core";
92
+
93
+ export function Editor({ locale }) {
94
+ const labels = translations[locale];
95
+
96
+ const plugins = useMemo(
97
+ () => [
98
+ {
99
+ name: "my-plugin",
100
+ icon: <SomeIcon />,
101
+ label: labels.plugins.myPlugin,
102
+ render: () => <MyPanel />,
103
+ },
104
+ ],
105
+ [labels]
106
+ );
107
+
108
+ return <Puck config={config} data={data} plugins={plugins} />;
109
+ }
110
+ ```
111
+
112
+ ### Viewports
113
+
114
+ Viewport names are labels in the [`viewports`](/docs/api-reference/components/puck#viewports) prop.
115
+
116
+ ```tsx
117
+ import { useMemo } from "react";
118
+ import { Puck, type Viewports } from "@puckeditor/core";
119
+
120
+ export function Editor({ locale }) {
121
+ const labels = translations[locale];
122
+
123
+ const viewports: Viewports = useMemo(
124
+ () => [
125
+ { width: 360, icon: "Smartphone", label: labels.viewports.small },
126
+ { width: 768, icon: "Tablet", label: labels.viewports.medium },
127
+ { width: 1280, icon: "Monitor", label: labels.viewports.large },
128
+ ],
129
+ [labels]
130
+ );
131
+
132
+ return <Puck config={config} data={data} viewports={viewports} />;
133
+ }
134
+ ```
135
+
136
+ ### Config
137
+
138
+ Component labels, root label, category titles and field labels come from your [`config`](/docs/api-reference/components/puck#config) prop. Update the config when the locale changes, in the same way you update the dictionary.
139
+
140
+ ```tsx
141
+ import { useMemo } from "react";
142
+ import { Puck } from "@puckeditor/core";
143
+
144
+ export function Editor() {
145
+ const labels = translations["en"];
146
+
147
+ const localizedConfig = useMemo(
148
+ () => {
149
+ components: {
150
+ HeadingBlock: {
151
+ label: labels.components.HeadingBlock,
152
+ fields: {
153
+ title: { label: labels.fields.title },
154
+ },
155
+ render: (props) => <h1>{props.title}</h1>,
156
+ },
157
+ }
158
+ },
159
+ [labels]
160
+ );
161
+
162
+ return <Puck config={localizedConfig} data={data} />;
163
+ }
164
+ ```
165
+
166
+ ## Interpolating values
167
+
168
+ Some messages have dynamic values that can be interpolated into the string.
169
+
170
+ Use `{key}` in the string to interpolate a value supplied by Puck.
171
+
172
+ ```tsx
173
+ // Interpolates the viewport `label` value into the string.
174
+ <Puck dictionary={{ "viewport-switch": "Cambiar a {label}" }} />
175
+ ```
176
+
177
+ See the [Dictionary API reference](/docs/api-reference/dictionary) for the full list of strings that support interpolation and their corresponding keys.
178
+
179
+ ## Hiding a string
180
+
181
+ Set a key to an empty string to render nothing for that message.
182
+
183
+ ```tsx
184
+ // Hides the page label entirely.
185
+ <Puck dictionary={{ "label-page": "" }} />
186
+ ```
187
+
188
+ ## Custom strings
189
+
190
+ Puck supports adding your own keys to the dictionary to use them through the [internal Puck API](/docs/api-reference/puck-api#dictionary).
191
+
192
+ ```tsx
193
+ import { Puck, createUsePuck } from "@puckeditor/core";
194
+
195
+ const usePuck = createUsePuck();
196
+
197
+ const HeaderActions = ({ children }) => {
198
+ const savedMsg = usePuck((s) => s.dictionary["saved-state"]);
199
+
200
+ return (
201
+ <div>
202
+ <span>{savedMsg}</span>
203
+ {children}
204
+ </div>
205
+ );
206
+ };
207
+
208
+ export function Editor() {
209
+ return (
210
+ <Puck
211
+ dictionary={{ "saved-state": "Saved" }}
212
+ overrides={{
213
+ fieldTypes: {
214
+ headerActions: { render: HeaderActions },
215
+ },
216
+ }}
217
+ config={config}
218
+ data={data}
219
+ />
220
+ );
221
+ }
222
+ ```
223
+
224
+ ## Further reading
225
+
226
+ - [`Dictionary` API reference](/docs/api-reference/dictionary)
227
+ - [`dictionary` prop](/docs/api-reference/components/puck#dictionary)
228
+ - [`PuckApi.dictionary`](/docs/api-reference/puck-api#dictionary)
@@ -0,0 +1,226 @@
1
+ # Multi-column Layouts
2
+
3
+ Puck supports nested and multi-column layouts across any CSS layout using the [`slot` field](/docs/api-reference/fields/slot).
4
+
5
+ Slots replace the [`<DropZone>` component](/docs/api-reference/components/drop-zone) component, which will soon be deprecated and removed. For migration notes, see [these docs](/docs/guides/migrations/dropzones-to-slots).
6
+
7
+ ## Nested components
8
+
9
+ Add the [`slot`](/docs/api-reference/fields/slot) field to your component to create a zone that you can drop components into.
10
+
11
+ ```tsx
12
+ const config = {
13
+ components: {
14
+ Example: {
15
+ fields: {
16
+ content: {
17
+ type: "slot",
18
+ },
19
+ },
20
+ render: ({ content: Content }) => {
21
+ return <Content />;
22
+ },
23
+ },
24
+ Card: {
25
+ render: () => <div>Hello, world</div>,
26
+ },
27
+ },
28
+ };
29
+ ```
30
+
31
+ ## Fixed layouts
32
+
33
+ Combine multiple DropZones to achieve fixed layouts. By default, components inside a DropZone are arranged along the vertical (`block`) axis.
34
+
35
+ ```tsx
36
+ const config = {
37
+ components: {
38
+ Example: {
39
+ fields: {
40
+ leftColumn: {
41
+ type: "slot",
42
+ },
43
+ rightColumn: {
44
+ type: "slot",
45
+ },
46
+ },
47
+ render: ({ leftColumn: LeftColumn, rightColumn: RightColumn }) => {
48
+ return (
49
+ <div
50
+ style={{ display: "grid", gridTemplateColumns: "1fr 1fr", gap: 16 }}
51
+ >
52
+ <LeftColumn />
53
+ <RightColumn />
54
+ </div>
55
+ );
56
+ },
57
+ },
58
+ Card: {
59
+ render: ({ text }) => <div>{text}</div>,
60
+ },
61
+ },
62
+ };
63
+ ```
64
+
65
+ ## Fluid layouts
66
+
67
+ Apply the [CSS display](https://developer.mozilla.org/en-US/docs/Web/CSS/display) property to a slot via the [`style`](/docs/api-reference/components/drop-zone#style) or [`className`](/docs/api-reference/components/drop-zone#className) props to arrange your components in different layouts. Puck supports drag-and-drop for all `display` values, including `grid` and `flex`.
68
+
69
+ ```tsx
70
+ const config = {
71
+ components: {
72
+ Example: {
73
+ fields: {
74
+ content: {
75
+ type: "slot",
76
+ },
77
+ },
78
+ render: ({ content: Content }) => (
79
+ <Content
80
+ style={{
81
+ // Use CSS grid in this slot
82
+ display: "grid",
83
+ gridTemplateColumns: "2fr 1fr",
84
+ gap: 16,
85
+ }}
86
+ />
87
+ ),
88
+ },
89
+ Card: {
90
+ render: ({ text }) => <div>{text}</div>,
91
+ },
92
+ },
93
+ };
94
+ ```
95
+
96
+ ## Removing the wrapper
97
+
98
+ By default, Puck will wrap your components in a `div` element. For some layouts, you may need to eliminate the wrapping element and treat the child component as a direct descendant of its' parent slot.
99
+
100
+ For example, this is required if you wish to use CSS rules like `flex-grow`, `grid-column`, or `grid-row`.
101
+
102
+ Use the [`inline`](/docs/api-reference/configuration/component-config#inline) component parameter to remove the wrapping element. **When using this API, you must also specify which element is draggable by passing the [`puck.dragRef` prop](/docs/api-reference/configuration/component-config#puckdragref) to your element's `ref` prop.**
103
+
104
+ ```tsx
105
+ const config = {
106
+ components: {
107
+ Example: {
108
+ fields: {
109
+ content: {
110
+ type: "slot",
111
+ },
112
+ },
113
+ render: ({ content: Content }) => (
114
+ <Content
115
+ style={{
116
+ display: "grid",
117
+ gridTemplateColumns: "1fr 1fr 1fr 1fr",
118
+ gridTemplateRows: "1fr 1fr 1fr 1fr",
119
+ gap: 16,
120
+ }}
121
+ />
122
+ ),
123
+ },
124
+ Card: {
125
+ inline: true, // Enable inline mode, removing the Puck wrapper
126
+ render: ({ text, spanCol, spanRow, puck }) => (
127
+ <div
128
+ ref={puck.dragRef} // Let Puck know this element is draggable
129
+ style={{
130
+ gridColumn: `span ${spanCol}`,
131
+ gridRow: `span ${spanRow}`,
132
+ }}
133
+ >
134
+ {text}
135
+ </div>
136
+ ),
137
+ },
138
+ },
139
+ };
140
+ ```
141
+
142
+ ## Restricting components
143
+
144
+ Use the [`allow`](/docs/api-reference/fields/slot#allow) and [`disallow`](/docs/api-reference/fields/slot#disallow) parameters to restrict which components can be dragged into a slot.
145
+
146
+ ```tsx
147
+ const config = {
148
+ components: {
149
+ fields: {
150
+ content: {
151
+ type: "slot",
152
+ allow: ["Card"],
153
+ },
154
+ },
155
+ Example: {
156
+ render: ({ content: Content }) => {
157
+ return <Content />;
158
+ },
159
+ },
160
+ },
161
+ };
162
+ ```
163
+
164
+ Combine this with [categories](/docs/integrating-puck/categories) to restrict behavior based on your existing groups.
165
+
166
+ ```tsx
167
+ const config = {
168
+ categories: {
169
+ typography: {
170
+ components: ["Card"],
171
+ },
172
+ },
173
+ components: {
174
+ Example: {
175
+ fields: {
176
+ content: {
177
+ type: "slot",
178
+ allow: categories.typography.components,
179
+ },
180
+ },
181
+ render: ({ content: Content }) => {
182
+ return <Content />;
183
+ },
184
+ },
185
+ },
186
+ };
187
+ ```
188
+
189
+ Alternatively, you can provide `allow` and `disallow` [to your render function](/docs/api-reference/fields/slot#allow-1).
190
+
191
+ ## Setting default props
192
+
193
+ Use slots with [`defaultProps`](/docs/api-reference/configuration/component-config#defaultprops) to pre-populate it when the component is inserted with an array of [`ComponentData`](/docs/api-reference/data-model/component-data).
194
+
195
+ ```tsx
196
+ const config = {
197
+ components: {
198
+ Example: {
199
+ fields: {
200
+ content: {
201
+ type: "slot",
202
+ },
203
+ },
204
+ defaultProps: {
205
+ content: [
206
+ {
207
+ type: "Card",
208
+ props: {
209
+ text: "Pre-populated",
210
+ },
211
+ },
212
+ ],
213
+ },
214
+ render: ({ content: Content }) => <Content />,
215
+ },
216
+ Card: {
217
+ render: ({ text }) => <div>{text}</div>,
218
+ },
219
+ },
220
+ };
221
+ ```
222
+
223
+ ## Further reading
224
+
225
+ - [The `slot` field API](/docs/api-reference/fields/slot)
226
+ - [The `inline` component config](/docs/api-reference/configuration/component-config#inline)
@@ -0,0 +1,25 @@
1
+ # Overlay Portals
2
+
3
+ Overlay Portals enable you to disable the Puck overlay when hovering over specific elements, making them interactive in the editor.
4
+
5
+ Use the [`registerOverlayPortal` API](/docs/api-reference/functions/register-overlay-portal) to mark an element as a portal.
6
+
7
+ ```tsx
8
+ import { registerOverlayPortal } from "@puckeditor/core";
9
+
10
+ const Example = () => {
11
+ const ref = useRef<HTMLButtonElement>(null);
12
+
13
+ useEffect(() => registerOverlayPortal(ref.current), [ref.current]);
14
+
15
+ return (
16
+ <button ref={ref} onClick={() => alert("Click")}>
17
+ Clickable
18
+ </button>
19
+ );
20
+ };
21
+ ```
22
+
23
+ Portals can be used to create interactive functionality for previewing, such as to paginate through tabs, or combined with [`usePuck()`](/docs/extending-puck/internal-puck-api) to create an inline form input.
24
+
25
+ ## Example: Tabs