@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,68 @@
1
+ # Getting Started
2
+
3
+ ## Installation
4
+
5
+ Install the package
6
+
7
+ ```sh
8
+ npm i @puckeditor/core --save
9
+ ```
10
+
11
+ Or set up Puck and Puck Cloud in a new or existing Next.js, React Router, TanStack Start, vinext, Vite or Astro app, or a Hono or Express server using the [CLI](/docs/cli)
12
+
13
+ ```sh
14
+ npx @puckeditor/cli init
15
+ ```
16
+
17
+ Or generate a Puck application using a [recipe](https://github.com/puckeditor/puck#recipes)
18
+
19
+ ```sh
20
+ npx create-puck-app my-app
21
+ ```
22
+
23
+ ## Render the editor
24
+
25
+ File: `Editor.jsx`
26
+
27
+ ```jsx
28
+ import { Puck } from "@puckeditor/core";
29
+
30
+ // Create Puck component config
31
+ const config = {
32
+ components: {
33
+ HeadingBlock: {
34
+ fields: {
35
+ children: {
36
+ type: "text",
37
+ },
38
+ },
39
+ render: ({ children }) => {
40
+ return <h1>{children}</h1>;
41
+ },
42
+ },
43
+ },
44
+ };
45
+
46
+ // Describe the initial data
47
+ const initialData = {};
48
+
49
+ // Save the data to your database
50
+ const save = (data) => {};
51
+
52
+ // Render Puck editor
53
+ export function Editor() {
54
+ return <Puck config={config} data={initialData} onPublish={save} />;
55
+ }
56
+ ```
57
+
58
+ ## Render the page
59
+
60
+ File: `Page.jsx`
61
+
62
+ ```jsx
63
+ import { Render } from "@puckeditor/core";
64
+
65
+ export function Page() {
66
+ return <Render config={config} data={data} />;
67
+ }
68
+ ```
@@ -0,0 +1,138 @@
1
+ # How to migrate from DropZones to Slots
2
+
3
+ This guide will help you migrate from [`DropZones`](/docs/api-reference/components/drop-zone) to [Slots](/docs/api-reference/fields/slot).
4
+
5
+ ---
6
+
7
+ [Slot fields](/docs/api-reference/fields/slot) replace the [`<DropZone>` component](/docs/api-reference/components/drop-zone), introducing an inline data model that supports [`defaultProps`](/docs/api-reference/configuration/component-config#defaultprops), [`resolveData`](/docs/api-reference/configuration/component-config#resolvedatadata-params) and [Server Components](/docs/integrating-puck/server-components) out-of-the-box.
8
+
9
+ ## Replace DropZone instances
10
+
11
+ Replace your `<DropZone>` instances with [slot fields](/docs/api-reference/fields/slot) and the slot [render function](/docs/api-reference/fields/slot#render-function).
12
+
13
+ **Before**
14
+
15
+ ```tsx
16
+ const config = {
17
+ components: {
18
+ Example: {
19
+ render: () => {
20
+ return <DropZone zone="items" allow={["HeadingBlock"]} />;
21
+ },
22
+ },
23
+ },
24
+ };
25
+ ```
26
+
27
+ **After**
28
+
29
+ ```tsx
30
+ const config = {
31
+ components: {
32
+ Example: {
33
+ fields: {
34
+ items: {
35
+ type: "slot",
36
+ },
37
+ },
38
+ defaultProps: {
39
+ items: [], // Slots support defaultProps and other APIs like resolveData
40
+ },
41
+ render: ({ items: Items }) => {
42
+ return <Items allow={["HeadingBlock"]} />; // Slots support most DropZone APIs
43
+ },
44
+ },
45
+ },
46
+ };
47
+ ```
48
+
49
+ ## The data model
50
+
51
+ The slot data model is inline and recursive. This means that instead of storing data in a global `zones` object, data is stored as arrays of [ComponentData](/docs/api-reference/data-model/component-data) as a prop.
52
+
53
+ **Before**
54
+
55
+ ```json
56
+ {
57
+ "content": [
58
+ {
59
+ "type": "Grid",
60
+ "props": {
61
+ "id": "Grid-12345"
62
+ }
63
+ }
64
+ ],
65
+ "zones": {
66
+ "Grid-12345:items": [
67
+ {
68
+ "type": "HeadingBlock",
69
+ "props": {
70
+ "id": "Heading-12345",
71
+ "title": "Hello, world"
72
+ }
73
+ }
74
+ ]
75
+ }
76
+ }
77
+ ```
78
+
79
+ **After**
80
+
81
+ ```json
82
+ {
83
+ "content": [
84
+ {
85
+ "type": "Grid",
86
+ "props": {
87
+ "id": "Grid-12345",
88
+ "items": [
89
+ {
90
+ "type": "HeadingBlock",
91
+ "props": {
92
+ "id": "Heading-12345",
93
+ "title": "Hello, world"
94
+ }
95
+ }
96
+ ]
97
+ }
98
+ }
99
+ ]
100
+ }
101
+ ```
102
+
103
+ ### Migrating legacy data
104
+
105
+ For new slots, you don't need to do anything. If you're migrating existing DropZones to slots, you will need to migrate your the data accordingly. Puck provides the [`migrate()` helper](/docs/api-reference/functions/migrate) to help with this:
106
+
107
+ ```tsx
108
+ import { migrate } from "@puckeditor/core";
109
+ import config from "puck.config.tsx";
110
+
111
+ const newData = migrate(legacyData, config);
112
+ ```
113
+
114
+ This will migrate any existing zone in `zones` where you have defined a `slot` with the same name.
115
+
116
+ ### Migrating dynamic zones to slots
117
+
118
+ To migrate DropZone data with dynamic zone names (e.g., those generated when rendering DropZones in a loop), use the [`migrateDynamicZonesForComponent`](/docs/api-reference/functions/migrate#migratedynamiczonesforcomponent) option in the [`migrate()` helper](/docs/api-reference/functions/migrate).
119
+
120
+ ```tsx
121
+ const newData = migrate(legacyData, config, {
122
+ migrateDynamicZonesForComponent: {
123
+ Columns: (props, zones) => {
124
+ return {
125
+ ...props,
126
+ columns: Object.values(zones).map((zone) => ({
127
+ column: zone,
128
+ })),
129
+ };
130
+ },
131
+ },
132
+ });
133
+ ```
134
+
135
+ ## Further reading
136
+
137
+ - [The `slot` field API](/docs/api-reference/fields/slot)
138
+ - [The `DropZone` component](/docs/api-reference/components/drop-zone)
@@ -0,0 +1,466 @@
1
+ [
2
+ {
3
+ "path": "index",
4
+ "title": "Introduction"
5
+ },
6
+ {
7
+ "path": "getting-started",
8
+ "title": "Getting Started"
9
+ },
10
+ {
11
+ "path": "cli",
12
+ "title": "CLI"
13
+ },
14
+ {
15
+ "path": "integrating-puck/component-configuration",
16
+ "title": "Component Configuration"
17
+ },
18
+ {
19
+ "path": "integrating-puck/root-configuration",
20
+ "title": "Root Configuration"
21
+ },
22
+ {
23
+ "path": "integrating-puck/multi-column-layouts",
24
+ "title": "Multi-column Layouts"
25
+ },
26
+ {
27
+ "path": "integrating-puck/categories",
28
+ "title": "Categories"
29
+ },
30
+ {
31
+ "path": "integrating-puck/rich-text-editing",
32
+ "title": "Rich Text Editing"
33
+ },
34
+ {
35
+ "path": "integrating-puck/dynamic-props",
36
+ "title": "Dynamic Props"
37
+ },
38
+ {
39
+ "path": "integrating-puck/dynamic-fields",
40
+ "title": "Dynamic Fields"
41
+ },
42
+ {
43
+ "path": "integrating-puck/external-data-sources",
44
+ "title": "External Data Sources"
45
+ },
46
+ {
47
+ "path": "integrating-puck/server-components",
48
+ "title": "React Server Components"
49
+ },
50
+ {
51
+ "path": "integrating-puck/data-migration",
52
+ "title": "Data Migration"
53
+ },
54
+ {
55
+ "path": "integrating-puck/styling",
56
+ "title": "Styling"
57
+ },
58
+ {
59
+ "path": "integrating-puck/viewports",
60
+ "title": "Viewports"
61
+ },
62
+ {
63
+ "path": "integrating-puck/localization",
64
+ "title": "Localization"
65
+ },
66
+ {
67
+ "path": "integrating-puck/feature-toggling",
68
+ "title": "Feature Toggling"
69
+ },
70
+ {
71
+ "path": "integrating-puck/overlay-portals",
72
+ "title": "Overlay Portals"
73
+ },
74
+ {
75
+ "path": "extending-puck/composition",
76
+ "title": "Composition"
77
+ },
78
+ {
79
+ "path": "extending-puck/custom-fields",
80
+ "title": "Custom Fields"
81
+ },
82
+ {
83
+ "path": "extending-puck/field-transforms",
84
+ "title": "Field Transforms"
85
+ },
86
+ {
87
+ "path": "extending-puck/internal-puck-api",
88
+ "title": "Internal Puck API"
89
+ },
90
+ {
91
+ "path": "extending-puck/theming",
92
+ "title": "Theming"
93
+ },
94
+ {
95
+ "path": "extending-puck/plugins",
96
+ "title": "Plugin API"
97
+ },
98
+ {
99
+ "path": "extending-puck/ui-overrides",
100
+ "title": "UI overrides"
101
+ },
102
+ {
103
+ "path": "api-reference/components",
104
+ "title": "Components"
105
+ },
106
+ {
107
+ "path": "api-reference/components/action-bar",
108
+ "title": "<ActionBar>"
109
+ },
110
+ {
111
+ "path": "api-reference/components/action-bar-action",
112
+ "title": "<ActionBar.Action>"
113
+ },
114
+ {
115
+ "path": "api-reference/components/action-bar-group",
116
+ "title": "<ActionBar.Group>"
117
+ },
118
+ {
119
+ "path": "api-reference/components/action-bar-label",
120
+ "title": "<ActionBar.Label>"
121
+ },
122
+ {
123
+ "path": "api-reference/components/action-bar-separator",
124
+ "title": "<ActionBar.Separator>"
125
+ },
126
+ {
127
+ "path": "api-reference/components/auto-field",
128
+ "title": "<AutoField>"
129
+ },
130
+ {
131
+ "path": "api-reference/components/drawer",
132
+ "title": "<Drawer>"
133
+ },
134
+ {
135
+ "path": "api-reference/components/drawer-item",
136
+ "title": "<Drawer.Item>"
137
+ },
138
+ {
139
+ "path": "api-reference/components/drop-zone",
140
+ "title": "<DropZone>"
141
+ },
142
+ {
143
+ "path": "api-reference/components/field-label",
144
+ "title": "<FieldLabel>"
145
+ },
146
+ {
147
+ "path": "api-reference/components/inline-text-field",
148
+ "title": "<InlineTextField>"
149
+ },
150
+ {
151
+ "path": "api-reference/components/puck",
152
+ "title": "<Puck>"
153
+ },
154
+ {
155
+ "path": "api-reference/components/puck-components",
156
+ "title": "<Puck.Components>"
157
+ },
158
+ {
159
+ "path": "api-reference/components/puck-fields",
160
+ "title": "<Puck.Fields>"
161
+ },
162
+ {
163
+ "path": "api-reference/components/puck-layout",
164
+ "title": "<Puck.Layout>"
165
+ },
166
+ {
167
+ "path": "api-reference/components/puck-outline",
168
+ "title": "<Puck.Outline>"
169
+ },
170
+ {
171
+ "path": "api-reference/components/puck-preview",
172
+ "title": "<Puck.Preview>"
173
+ },
174
+ {
175
+ "path": "api-reference/components/render",
176
+ "title": "<Render>"
177
+ },
178
+ {
179
+ "path": "api-reference/components/rich-text-menu",
180
+ "title": "<RichTextMenu>"
181
+ },
182
+ {
183
+ "path": "api-reference/components/rich-text-menu-group",
184
+ "title": "<RichTextMenu.Group>"
185
+ },
186
+ {
187
+ "path": "api-reference/components/rich-text-menu-control",
188
+ "title": "<RichTextMenu.Control>"
189
+ },
190
+ {
191
+ "path": "api-reference/configuration",
192
+ "title": "Configuration"
193
+ },
194
+ {
195
+ "path": "api-reference/configuration/config",
196
+ "title": "Config"
197
+ },
198
+ {
199
+ "path": "api-reference/configuration/component-config",
200
+ "title": "ComponentConfig"
201
+ },
202
+ {
203
+ "path": "api-reference/data-model",
204
+ "title": "Data Model"
205
+ },
206
+ {
207
+ "path": "api-reference/data-model/app-state",
208
+ "title": "AppState"
209
+ },
210
+ {
211
+ "path": "api-reference/data-model/component-data",
212
+ "title": "ComponentData"
213
+ },
214
+ {
215
+ "path": "api-reference/data-model/data",
216
+ "title": "Data"
217
+ },
218
+ {
219
+ "path": "api-reference/data-model/item-selector",
220
+ "title": "ItemSelector"
221
+ },
222
+ {
223
+ "path": "api-reference/data-model/root-data",
224
+ "title": "RootData"
225
+ },
226
+ {
227
+ "path": "api-reference/fields",
228
+ "title": "Fields"
229
+ },
230
+ {
231
+ "path": "api-reference/fields/base",
232
+ "title": "Base"
233
+ },
234
+ {
235
+ "path": "api-reference/fields/array",
236
+ "title": "Array"
237
+ },
238
+ {
239
+ "path": "api-reference/fields/custom",
240
+ "title": "Custom"
241
+ },
242
+ {
243
+ "path": "api-reference/fields/external",
244
+ "title": "External"
245
+ },
246
+ {
247
+ "path": "api-reference/fields/number",
248
+ "title": "Number"
249
+ },
250
+ {
251
+ "path": "api-reference/fields/object",
252
+ "title": "Object"
253
+ },
254
+ {
255
+ "path": "api-reference/fields/radio",
256
+ "title": "Radio"
257
+ },
258
+ {
259
+ "path": "api-reference/fields/richtext",
260
+ "title": "Richtext"
261
+ },
262
+ {
263
+ "path": "api-reference/fields/select",
264
+ "title": "Select"
265
+ },
266
+ {
267
+ "path": "api-reference/fields/slot",
268
+ "title": "Slot"
269
+ },
270
+ {
271
+ "path": "api-reference/fields/text",
272
+ "title": "Text"
273
+ },
274
+ {
275
+ "path": "api-reference/fields/textarea",
276
+ "title": "Textarea"
277
+ },
278
+ {
279
+ "path": "api-reference/functions",
280
+ "title": "Functions"
281
+ },
282
+ {
283
+ "path": "api-reference/functions/migrate",
284
+ "title": "migrate"
285
+ },
286
+ {
287
+ "path": "api-reference/functions/register-overlay-portal",
288
+ "title": "registerOverlayPortal"
289
+ },
290
+ {
291
+ "path": "api-reference/functions/resolve-all-data",
292
+ "title": "resolveAllData"
293
+ },
294
+ {
295
+ "path": "api-reference/functions/set-deep",
296
+ "title": "setDeep"
297
+ },
298
+ {
299
+ "path": "api-reference/functions/transform-props",
300
+ "title": "transformProps"
301
+ },
302
+ {
303
+ "path": "api-reference/functions/use-get-puck",
304
+ "title": "useGetPuck"
305
+ },
306
+ {
307
+ "path": "api-reference/functions/use-puck",
308
+ "title": "usePuck"
309
+ },
310
+ {
311
+ "path": "api-reference/functions/walk-tree",
312
+ "title": "walkTree"
313
+ },
314
+ {
315
+ "path": "api-reference/overrides",
316
+ "title": "Overrides"
317
+ },
318
+ {
319
+ "path": "api-reference/overrides/action-bar",
320
+ "title": "actionBar"
321
+ },
322
+ {
323
+ "path": "api-reference/overrides/component-overlay",
324
+ "title": "componentOverlay"
325
+ },
326
+ {
327
+ "path": "api-reference/overrides/drawer",
328
+ "title": "drawer"
329
+ },
330
+ {
331
+ "path": "api-reference/overrides/drawer-item",
332
+ "title": "drawerItem"
333
+ },
334
+ {
335
+ "path": "api-reference/overrides/field-label",
336
+ "title": "fieldLabel"
337
+ },
338
+ {
339
+ "path": "api-reference/overrides/field-types",
340
+ "title": "fieldTypes"
341
+ },
342
+ {
343
+ "path": "api-reference/overrides/fields",
344
+ "title": "fields"
345
+ },
346
+ {
347
+ "path": "api-reference/overrides/header",
348
+ "title": "header"
349
+ },
350
+ {
351
+ "path": "api-reference/overrides/header-actions",
352
+ "title": "headerActions"
353
+ },
354
+ {
355
+ "path": "api-reference/overrides/iframe",
356
+ "title": "iframe"
357
+ },
358
+ {
359
+ "path": "api-reference/overrides/outline",
360
+ "title": "outline"
361
+ },
362
+ {
363
+ "path": "api-reference/overrides/preview",
364
+ "title": "preview"
365
+ },
366
+ {
367
+ "path": "api-reference/overrides/puck",
368
+ "title": "puck"
369
+ },
370
+ {
371
+ "path": "api-reference/plugins/blocks-plugin",
372
+ "title": "blocksPlugin"
373
+ },
374
+ {
375
+ "path": "api-reference/plugins/fields-plugin",
376
+ "title": "fieldsPlugin"
377
+ },
378
+ {
379
+ "path": "api-reference/plugins/legacy-side-bar-plugin",
380
+ "title": "legacySideBarPlugin"
381
+ },
382
+ {
383
+ "path": "api-reference/plugins/outline-plugin",
384
+ "title": "outlinePlugin"
385
+ },
386
+ {
387
+ "path": "api-reference/theming/global",
388
+ "title": "Global theming"
389
+ },
390
+ {
391
+ "path": "api-reference/theming/action-bar",
392
+ "title": "Action bar"
393
+ },
394
+ {
395
+ "path": "api-reference/theming/button",
396
+ "title": "Button"
397
+ },
398
+ {
399
+ "path": "api-reference/theming/canvas",
400
+ "title": "Canvas"
401
+ },
402
+ {
403
+ "path": "api-reference/theming/drawer",
404
+ "title": "Drawer"
405
+ },
406
+ {
407
+ "path": "api-reference/theming/fields",
408
+ "title": "Fields"
409
+ },
410
+ {
411
+ "path": "api-reference/theming/header",
412
+ "title": "Header"
413
+ },
414
+ {
415
+ "path": "api-reference/theming/icon-button",
416
+ "title": "Icon button"
417
+ },
418
+ {
419
+ "path": "api-reference/theming/outline",
420
+ "title": "Outline"
421
+ },
422
+ {
423
+ "path": "api-reference/theming/plugin-bar",
424
+ "title": "Plugin bar"
425
+ },
426
+ {
427
+ "path": "api-reference/theming/sidebar",
428
+ "title": "Sidebar"
429
+ },
430
+ {
431
+ "path": "api-reference/theming/slot",
432
+ "title": "Slot"
433
+ },
434
+ {
435
+ "path": "api-reference/theming/computed-values",
436
+ "title": "Computed values"
437
+ },
438
+ {
439
+ "path": "api-reference/actions",
440
+ "title": "Actions"
441
+ },
442
+ {
443
+ "path": "api-reference/dictionary",
444
+ "title": "Dictionary"
445
+ },
446
+ {
447
+ "path": "api-reference/field-transforms",
448
+ "title": "FieldTransforms"
449
+ },
450
+ {
451
+ "path": "api-reference/permissions",
452
+ "title": "Permissions"
453
+ },
454
+ {
455
+ "path": "api-reference/plugin",
456
+ "title": "Plugin"
457
+ },
458
+ {
459
+ "path": "api-reference/puck-api",
460
+ "title": "PuckApi"
461
+ },
462
+ {
463
+ "path": "guides/migrations/dropzones-to-slots",
464
+ "title": "Migrating - DropZones to Slots"
465
+ }
466
+ ]
@@ -0,0 +1,37 @@
1
+ # Introduction
2
+
3
+ Welcome to the Puck documentation!
4
+
5
+ ## What is Puck?
6
+
7
+ Puck is a modular, open-source visual editor for React.js. You can use Puck to build custom drag-and-drop experiences with your own application and React components.
8
+
9
+ Because Puck is just a React component, it plays well with all React.js environments, including Next.js. You own your data and there's no vendor lock-in.
10
+
11
+ Puck is also licensed under MIT, making it suitable for both internal systems and commercial applications.
12
+
13
+ ## Main Features
14
+
15
+ | Feature | Description |
16
+ | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
17
+ | [Component Configuration](/docs/integrating-puck/component-configuration) | Integrate your own components with Puck by providing render functions and configuring fields that map to your props. |
18
+ | [Root Configuration](/docs/integrating-puck/root-configuration) | Customize the root component that wraps all other Puck components. |
19
+ | [Multi-column Layouts](/docs/integrating-puck/multi-column-layouts) | Create multi-column layouts using nested components. Now supports advanced CSS layouts. |
20
+ | [Categories](/docs/integrating-puck/categories) | Group your components in the side bar. |
21
+ | [Dynamic Props](/docs/integrating-puck/dynamic-props) | Dynamically set props after user input and mark fields as read-only |
22
+ | [Dynamic Fields](/docs/integrating-puck/dynamic-fields) | Dynamically set fields based on user input |
23
+ | [External Data Sources](/docs/integrating-puck/external-data-sources) | Load content from a third-party CMS or other data source |
24
+ | [Server Components](/docs/integrating-puck/server-components) | Opt-in support for React Server Components |
25
+ | [Data Migration](/docs/integrating-puck/data-migration) | Migrate between breaking Puck releases and your own breaking prop changes |
26
+ | [Viewports](/docs/integrating-puck/viewports) | Preview and edit your content in a same-origin iframe to simulate different viewports |
27
+ | [Feature Toggling](/docs/integrating-puck/feature-toggling) | Toggle Puck features, like duplication or deletion, via the permissions API. |
28
+
29
+ ## Get Support
30
+
31
+ If you have any questions about Puck, please open a [GitHub issue](https://github.com/puckeditor/puck/issues) or join us on [Discord](https://discord.gg/D9e4E3MQVZ).
32
+
33
+ Or [book a discovery call](https://app.cal.com/chrisvxd/puck-enquiry/) for hands-on support and consultancy.
34
+
35
+ ## License
36
+
37
+ Puck is licensed under MIT.