@endora-commerce/page-builder-core 0.100.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +51 -0
  3. package/dist/block-name.d.ts +48 -0
  4. package/dist/block-name.d.ts.map +1 -0
  5. package/dist/block-name.js +79 -0
  6. package/dist/block-name.js.map +1 -0
  7. package/dist/block-tree.d.ts +44 -0
  8. package/dist/block-tree.d.ts.map +1 -0
  9. package/dist/block-tree.js +120 -0
  10. package/dist/block-tree.js.map +1 -0
  11. package/dist/client.d.ts +3 -0
  12. package/dist/client.d.ts.map +1 -0
  13. package/dist/client.js +4 -0
  14. package/dist/client.js.map +1 -0
  15. package/dist/color-palette/context.d.ts +18 -0
  16. package/dist/color-palette/context.d.ts.map +1 -0
  17. package/dist/color-palette/context.js +11 -0
  18. package/dist/color-palette/context.js.map +1 -0
  19. package/dist/define-component.d.ts +47 -0
  20. package/dist/define-component.d.ts.map +1 -0
  21. package/dist/define-component.js +74 -0
  22. package/dist/define-component.js.map +1 -0
  23. package/dist/editor/editor-carousel-preview-ui.d.ts +7 -0
  24. package/dist/editor/editor-carousel-preview-ui.d.ts.map +1 -0
  25. package/dist/editor/editor-carousel-preview-ui.js +11 -0
  26. package/dist/editor/editor-carousel-preview-ui.js.map +1 -0
  27. package/dist/editor/editor-carousel-preview.d.ts +31 -0
  28. package/dist/editor/editor-carousel-preview.d.ts.map +1 -0
  29. package/dist/editor/editor-carousel-preview.js +109 -0
  30. package/dist/editor/editor-carousel-preview.js.map +1 -0
  31. package/dist/editor/enhance-component-config.d.ts +7 -0
  32. package/dist/editor/enhance-component-config.d.ts.map +1 -0
  33. package/dist/editor/enhance-component-config.js +55 -0
  34. package/dist/editor/enhance-component-config.js.map +1 -0
  35. package/dist/editor/field-tabs.d.ts +7 -0
  36. package/dist/editor/field-tabs.d.ts.map +1 -0
  37. package/dist/editor/field-tabs.js +29 -0
  38. package/dist/editor/field-tabs.js.map +1 -0
  39. package/dist/editor/fields-tab-panel.d.ts +9 -0
  40. package/dist/editor/fields-tab-panel.d.ts.map +1 -0
  41. package/dist/editor/fields-tab-panel.js +132 -0
  42. package/dist/editor/fields-tab-panel.js.map +1 -0
  43. package/dist/editor/format-outline-label.d.ts +2 -0
  44. package/dist/editor/format-outline-label.d.ts.map +1 -0
  45. package/dist/editor/format-outline-label.js +10 -0
  46. package/dist/editor/format-outline-label.js.map +1 -0
  47. package/dist/editor/outline-data.d.ts +13 -0
  48. package/dist/editor/outline-data.d.ts.map +1 -0
  49. package/dist/editor/outline-data.js +73 -0
  50. package/dist/editor/outline-data.js.map +1 -0
  51. package/dist/editor/outline-dnd.d.ts +15 -0
  52. package/dist/editor/outline-dnd.d.ts.map +1 -0
  53. package/dist/editor/outline-dnd.js +55 -0
  54. package/dist/editor/outline-dnd.js.map +1 -0
  55. package/dist/editor/page-builder-component-overlay.d.ts +13 -0
  56. package/dist/editor/page-builder-component-overlay.d.ts.map +1 -0
  57. package/dist/editor/page-builder-component-overlay.js +14 -0
  58. package/dist/editor/page-builder-component-overlay.js.map +1 -0
  59. package/dist/editor/page-builder-outline.d.ts +10 -0
  60. package/dist/editor/page-builder-outline.d.ts.map +1 -0
  61. package/dist/editor/page-builder-outline.js +133 -0
  62. package/dist/editor/page-builder-outline.js.map +1 -0
  63. package/dist/editor/page-builder-plugin.d.ts +6 -0
  64. package/dist/editor/page-builder-plugin.d.ts.map +1 -0
  65. package/dist/editor/page-builder-plugin.js +31 -0
  66. package/dist/editor/page-builder-plugin.js.map +1 -0
  67. package/dist/editor/preview-viewport-bridge.d.ts +9 -0
  68. package/dist/editor/preview-viewport-bridge.d.ts.map +1 -0
  69. package/dist/editor/preview-viewport-bridge.js +19 -0
  70. package/dist/editor/preview-viewport-bridge.js.map +1 -0
  71. package/dist/editor/preview-viewport-store.d.ts +4 -0
  72. package/dist/editor/preview-viewport-store.d.ts.map +1 -0
  73. package/dist/editor/preview-viewport-store.js +24 -0
  74. package/dist/editor/preview-viewport-store.js.map +1 -0
  75. package/dist/editor/puck-action-guards.d.ts +46 -0
  76. package/dist/editor/puck-action-guards.d.ts.map +1 -0
  77. package/dist/editor/puck-action-guards.js +232 -0
  78. package/dist/editor/puck-action-guards.js.map +1 -0
  79. package/dist/editor/puck-dnd-element.d.ts +3 -0
  80. package/dist/editor/puck-dnd-element.d.ts.map +1 -0
  81. package/dist/editor/puck-dnd-element.js +20 -0
  82. package/dist/editor/puck-dnd-element.js.map +1 -0
  83. package/dist/editor/settings-scope-context.d.ts +13 -0
  84. package/dist/editor/settings-scope-context.d.ts.map +1 -0
  85. package/dist/editor/settings-scope-context.js +30 -0
  86. package/dist/editor/settings-scope-context.js.map +1 -0
  87. package/dist/editor/settings-scope-store.d.ts +5 -0
  88. package/dist/editor/settings-scope-store.d.ts.map +1 -0
  89. package/dist/editor/settings-scope-store.js +22 -0
  90. package/dist/editor/settings-scope-store.js.map +1 -0
  91. package/dist/editor/settings-tab-store.d.ts +5 -0
  92. package/dist/editor/settings-tab-store.d.ts.map +1 -0
  93. package/dist/editor/settings-tab-store.js +22 -0
  94. package/dist/editor/settings-tab-store.js.map +1 -0
  95. package/dist/editor/use-component-scope.d.ts +4 -0
  96. package/dist/editor/use-component-scope.d.ts.map +1 -0
  97. package/dist/editor/use-component-scope.js +15 -0
  98. package/dist/editor/use-component-scope.js.map +1 -0
  99. package/dist/editor/use-page-builder-puck.d.ts +4 -0
  100. package/dist/editor/use-page-builder-puck.d.ts.map +1 -0
  101. package/dist/editor/use-page-builder-puck.js +4 -0
  102. package/dist/editor/use-page-builder-puck.js.map +1 -0
  103. package/dist/editor/use-preview-breakpoint-tier.d.ts +10 -0
  104. package/dist/editor/use-preview-breakpoint-tier.d.ts.map +1 -0
  105. package/dist/editor/use-preview-breakpoint-tier.js +40 -0
  106. package/dist/editor/use-preview-breakpoint-tier.js.map +1 -0
  107. package/dist/editor.d.ts +15 -0
  108. package/dist/editor.d.ts.map +1 -0
  109. package/dist/editor.js +16 -0
  110. package/dist/editor.js.map +1 -0
  111. package/dist/fields/background-field.d.ts +14 -0
  112. package/dist/fields/background-field.d.ts.map +1 -0
  113. package/dist/fields/background-field.js +38 -0
  114. package/dist/fields/background-field.js.map +1 -0
  115. package/dist/fields/border-field.d.ts +5 -0
  116. package/dist/fields/border-field.d.ts.map +1 -0
  117. package/dist/fields/border-field.js +85 -0
  118. package/dist/fields/border-field.js.map +1 -0
  119. package/dist/fields/color-field-utils.d.ts +16 -0
  120. package/dist/fields/color-field-utils.d.ts.map +1 -0
  121. package/dist/fields/color-field-utils.js +45 -0
  122. package/dist/fields/color-field-utils.js.map +1 -0
  123. package/dist/fields/color-field.d.ts +5 -0
  124. package/dist/fields/color-field.d.ts.map +1 -0
  125. package/dist/fields/color-field.js +74 -0
  126. package/dist/fields/color-field.js.map +1 -0
  127. package/dist/fields/color-input-debounce.d.ts +6 -0
  128. package/dist/fields/color-input-debounce.d.ts.map +1 -0
  129. package/dist/fields/color-input-debounce.js +24 -0
  130. package/dist/fields/color-input-debounce.js.map +1 -0
  131. package/dist/fields/editor-name-field.d.ts +3 -0
  132. package/dist/fields/editor-name-field.d.ts.map +1 -0
  133. package/dist/fields/editor-name-field.js +12 -0
  134. package/dist/fields/editor-name-field.js.map +1 -0
  135. package/dist/fields/hide-on-field.d.ts +4 -0
  136. package/dist/fields/hide-on-field.d.ts.map +1 -0
  137. package/dist/fields/hide-on-field.js +26 -0
  138. package/dist/fields/hide-on-field.js.map +1 -0
  139. package/dist/fields/native-color-input.d.ts +12 -0
  140. package/dist/fields/native-color-input.d.ts.map +1 -0
  141. package/dist/fields/native-color-input.js +51 -0
  142. package/dist/fields/native-color-input.js.map +1 -0
  143. package/dist/fields/puck-field-label.d.ts +8 -0
  144. package/dist/fields/puck-field-label.d.ts.map +1 -0
  145. package/dist/fields/puck-field-label.js +8 -0
  146. package/dist/fields/puck-field-label.js.map +1 -0
  147. package/dist/fields/responsive-field-types.d.ts +21 -0
  148. package/dist/fields/responsive-field-types.d.ts.map +1 -0
  149. package/dist/fields/responsive-field-types.js +97 -0
  150. package/dist/fields/responsive-field-types.js.map +1 -0
  151. package/dist/fields/scoped-field.d.ts +19 -0
  152. package/dist/fields/scoped-field.d.ts.map +1 -0
  153. package/dist/fields/scoped-field.js +67 -0
  154. package/dist/fields/scoped-field.js.map +1 -0
  155. package/dist/fields/spacing-field.d.ts +14 -0
  156. package/dist/fields/spacing-field.d.ts.map +1 -0
  157. package/dist/fields/spacing-field.js +71 -0
  158. package/dist/fields/spacing-field.js.map +1 -0
  159. package/dist/index.d.ts +18 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +36 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/migration/frozen-block-renames.d.ts +14 -0
  164. package/dist/migration/frozen-block-renames.d.ts.map +1 -0
  165. package/dist/migration/frozen-block-renames.js +132 -0
  166. package/dist/migration/frozen-block-renames.js.map +1 -0
  167. package/dist/migration/index.d.ts +4 -0
  168. package/dist/migration/index.d.ts.map +1 -0
  169. package/dist/migration/index.js +22 -0
  170. package/dist/migration/index.js.map +1 -0
  171. package/dist/migration/rename-block-names-sql.d.ts +28 -0
  172. package/dist/migration/rename-block-names-sql.d.ts.map +1 -0
  173. package/dist/migration/rename-block-names-sql.js +117 -0
  174. package/dist/migration/rename-block-names-sql.js.map +1 -0
  175. package/dist/palette.d.ts +47 -0
  176. package/dist/palette.d.ts.map +1 -0
  177. package/dist/palette.js +84 -0
  178. package/dist/palette.js.map +1 -0
  179. package/dist/render/responsive-styles.d.ts +19 -0
  180. package/dist/render/responsive-styles.d.ts.map +1 -0
  181. package/dist/render/responsive-styles.js +91 -0
  182. package/dist/render/responsive-styles.js.map +1 -0
  183. package/dist/types/background.d.ts +26 -0
  184. package/dist/types/background.d.ts.map +1 -0
  185. package/dist/types/background.js +76 -0
  186. package/dist/types/background.js.map +1 -0
  187. package/dist/types/box-styles.d.ts +67 -0
  188. package/dist/types/box-styles.d.ts.map +1 -0
  189. package/dist/types/box-styles.js +217 -0
  190. package/dist/types/box-styles.js.map +1 -0
  191. package/dist/types/editor-chrome.d.ts +15 -0
  192. package/dist/types/editor-chrome.d.ts.map +1 -0
  193. package/dist/types/editor-chrome.js +8 -0
  194. package/dist/types/editor-chrome.js.map +1 -0
  195. package/dist/types/hide-on.d.ts +6 -0
  196. package/dist/types/hide-on.d.ts.map +1 -0
  197. package/dist/types/hide-on.js +2 -0
  198. package/dist/types/hide-on.js.map +1 -0
  199. package/dist/types/responsive.d.ts +70 -0
  200. package/dist/types/responsive.d.ts.map +1 -0
  201. package/dist/types/responsive.js +91 -0
  202. package/dist/types/responsive.js.map +1 -0
  203. package/dist/visibility/with-hide-on.d.ts +12 -0
  204. package/dist/visibility/with-hide-on.d.ts.map +1 -0
  205. package/dist/visibility/with-hide-on.js +28 -0
  206. package/dist/visibility/with-hide-on.js.map +1 -0
  207. package/package.json +96 -0
  208. package/tailwind.css +14 -0
@@ -0,0 +1,31 @@
1
+ type CarouselPageWriter = (carouselId: string, page: number) => void;
2
+ export declare function registerEditorCarouselPageWriter(writer: CarouselPageWriter | null): void;
3
+ export declare function isEditorCarouselPreviewLocked(carouselId: string): boolean;
4
+ export declare function getEditorCarouselPreviewFrozenSelectedId(carouselId: string): string | null;
5
+ export declare function getEditorCarouselLastSeenSelectedId(carouselId: string): string | null;
6
+ export declare function clearEditorCarouselPreviewLock(carouselId: string): void;
7
+ /** Remember selection without changing the preview page (updates freeze when locked). */
8
+ export declare function rememberEditorCarouselSelectedId(carouselId: string, selectedId: string | null): void;
9
+ /**
10
+ * Sets the editor preview page.
11
+ * Default `lock: true` so selection sync cannot snap the page back after arrow/dot nav.
12
+ */
13
+ export declare function setEditorCarouselPage(carouselId: string, page: number, options?: {
14
+ lock?: boolean;
15
+ frozenSelectedId?: string | null;
16
+ }): void;
17
+ export declare function clampEditorCarouselPage(carouselId: string, pageCount: number): void;
18
+ /** @deprecated Prefer {@link useEditorCarouselPage}. */
19
+ export declare function getEditorCarouselPage(carouselId: string): number;
20
+ /** Active carousel page — stored on Puck `appState.ui` (shared by canvas + action bar). */
21
+ export declare function useEditorCarouselPage(carouselId: string | undefined): number;
22
+ /** Registers the Puck writer used by `setEditorCarouselPage` — mount inside `<Puck>`. */
23
+ export declare function EditorCarouselPreviewBridge(): null;
24
+ /** @deprecated Slide counts come from Puck data in the action bar. */
25
+ export declare function setEditorCarouselSlideCount(_carouselId: string, _slideCount: number): void;
26
+ /** @deprecated Slide counts come from Puck data in the action bar. */
27
+ export declare function getEditorCarouselSlideCount(_carouselId: string): number | undefined;
28
+ /** @deprecated */
29
+ export declare function subscribeEditorCarouselPreview(_listener: () => void): () => void;
30
+ export { carouselEditorPageCount, getEditorCarouselPageFromUi, readEditorCarouselPages, type EditorCarouselPreviewUi, } from './editor-carousel-preview-ui.js';
31
+ //# sourceMappingURL=editor-carousel-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-carousel-preview.d.ts","sourceRoot":"","sources":["../../src/editor/editor-carousel-preview.ts"],"names":[],"mappings":"AAWA,KAAK,kBAAkB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAerE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAExF;AAED,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEzE;AAED,wBAAgB,wCAAwC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE1F;AAED,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAErF;AAED,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAEvE;AAED,yFAAyF;AACzF,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC7D,IAAI,CAoBN;AAED,wBAAgB,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAGnF;AAED,wDAAwD;AACxD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM5E;AAED,yFAAyF;AACzF,wBAAgB,2BAA2B,IAAI,IAAI,CAsBlD;AAED,sEAAsE;AACtE,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAG;AAE9F,sEAAsE;AACtE,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEnF;AAED,kBAAkB;AAClB,wBAAgB,8BAA8B,CAAC,SAAS,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAEhF;AAED,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,KAAK,uBAAuB,GAC7B,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,109 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import { useGetPuck } from '@measured/puck';
4
+ import { usePageBuilderPuck } from './use-page-builder-puck.js';
5
+ import { getEditorCarouselPageFromUi, readEditorCarouselPages, } from './editor-carousel-preview-ui.js';
6
+ let carouselPageWriter = null;
7
+ const previewPageLocks = new Map();
8
+ const lastSeenSelectedIdByCarousel = new Map();
9
+ export function registerEditorCarouselPageWriter(writer) {
10
+ carouselPageWriter = writer;
11
+ }
12
+ export function isEditorCarouselPreviewLocked(carouselId) {
13
+ return previewPageLocks.has(carouselId);
14
+ }
15
+ export function getEditorCarouselPreviewFrozenSelectedId(carouselId) {
16
+ return previewPageLocks.get(carouselId)?.frozenSelectedId ?? null;
17
+ }
18
+ export function getEditorCarouselLastSeenSelectedId(carouselId) {
19
+ return lastSeenSelectedIdByCarousel.get(carouselId) ?? null;
20
+ }
21
+ export function clearEditorCarouselPreviewLock(carouselId) {
22
+ previewPageLocks.delete(carouselId);
23
+ }
24
+ /** Remember selection without changing the preview page (updates freeze when locked). */
25
+ export function rememberEditorCarouselSelectedId(carouselId, selectedId) {
26
+ lastSeenSelectedIdByCarousel.set(carouselId, selectedId);
27
+ const lock = previewPageLocks.get(carouselId);
28
+ if (lock) {
29
+ previewPageLocks.set(carouselId, { frozenSelectedId: selectedId });
30
+ }
31
+ }
32
+ /**
33
+ * Sets the editor preview page.
34
+ * Default `lock: true` so selection sync cannot snap the page back after arrow/dot nav.
35
+ */
36
+ export function setEditorCarouselPage(carouselId, page, options) {
37
+ const next = Math.max(0, Math.trunc(page));
38
+ const shouldLock = options?.lock !== false;
39
+ if (shouldLock) {
40
+ const prev = previewPageLocks.get(carouselId);
41
+ const frozen = options?.frozenSelectedId !== undefined
42
+ ? options.frozenSelectedId
43
+ : (prev?.frozenSelectedId ?? lastSeenSelectedIdByCarousel.get(carouselId) ?? null);
44
+ previewPageLocks.set(carouselId, { frozenSelectedId: frozen });
45
+ if (options?.frozenSelectedId !== undefined) {
46
+ lastSeenSelectedIdByCarousel.set(carouselId, options.frozenSelectedId);
47
+ }
48
+ }
49
+ else {
50
+ previewPageLocks.delete(carouselId);
51
+ if (options?.frozenSelectedId !== undefined) {
52
+ lastSeenSelectedIdByCarousel.set(carouselId, options.frozenSelectedId);
53
+ }
54
+ }
55
+ carouselPageWriter?.(carouselId, next);
56
+ }
57
+ export function clampEditorCarouselPage(carouselId, pageCount) {
58
+ void carouselId;
59
+ void pageCount;
60
+ }
61
+ /** @deprecated Prefer {@link useEditorCarouselPage}. */
62
+ export function getEditorCarouselPage(carouselId) {
63
+ void carouselId;
64
+ return 0;
65
+ }
66
+ /** Active carousel page — stored on Puck `appState.ui` (shared by canvas + action bar). */
67
+ export function useEditorCarouselPage(carouselId) {
68
+ return usePageBuilderPuck((state) => {
69
+ if (!carouselId)
70
+ return 0;
71
+ const ui = state.appState.ui;
72
+ return getEditorCarouselPageFromUi(ui, carouselId);
73
+ });
74
+ }
75
+ /** Registers the Puck writer used by `setEditorCarouselPage` — mount inside `<Puck>`. */
76
+ export function EditorCarouselPreviewBridge() {
77
+ const dispatch = usePageBuilderPuck((s) => s.dispatch);
78
+ const getPuck = useGetPuck();
79
+ useEffect(() => {
80
+ registerEditorCarouselPageWriter((carouselId, page) => {
81
+ const ui = getPuck().appState.ui;
82
+ const pages = readEditorCarouselPages(ui);
83
+ if ((pages[carouselId] ?? 0) === page)
84
+ return;
85
+ dispatch({
86
+ type: 'setUi',
87
+ // Custom key — not on Puck's UiState type; stored alongside built-in UI state.
88
+ ui: {
89
+ carouselPreviewPages: { ...pages, [carouselId]: page },
90
+ },
91
+ recordHistory: false,
92
+ });
93
+ });
94
+ return () => registerEditorCarouselPageWriter(null);
95
+ }, [dispatch, getPuck]);
96
+ return null;
97
+ }
98
+ /** @deprecated Slide counts come from Puck data in the action bar. */
99
+ export function setEditorCarouselSlideCount(_carouselId, _slideCount) { }
100
+ /** @deprecated Slide counts come from Puck data in the action bar. */
101
+ export function getEditorCarouselSlideCount(_carouselId) {
102
+ return undefined;
103
+ }
104
+ /** @deprecated */
105
+ export function subscribeEditorCarouselPreview(_listener) {
106
+ return () => { };
107
+ }
108
+ export { carouselEditorPageCount, getEditorCarouselPageFromUi, readEditorCarouselPages, } from './editor-carousel-preview-ui.js';
109
+ //# sourceMappingURL=editor-carousel-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor-carousel-preview.js","sourceRoot":"","sources":["../../src/editor/editor-carousel-preview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ComponentConfig } from '@measured/puck';
2
+ import type { ComponentContextMeta } from '../define-component.js';
3
+ /**
4
+ * Adds editor chrome (Name field) and orders fields for the tabbed sidebar.
5
+ */
6
+ export declare function enhancePageBuilderComponent(config: ComponentConfig & ComponentContextMeta): ComponentConfig & ComponentContextMeta;
7
+ //# sourceMappingURL=enhance-component-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhance-component-config.d.ts","sourceRoot":"","sources":["../../src/editor/enhance-component-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,gBAAgB,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAiCnE;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,eAAe,GAAG,oBAAoB,GAC7C,eAAe,GAAG,oBAAoB,CA8BxC"}
@@ -0,0 +1,55 @@
1
+ import { createEditorNameField } from '../fields/editor-name-field.js';
2
+ import { EDITOR_NAME_FIELD_KEY } from '../types/editor-chrome.js';
3
+ import { isResponsiveField } from '../types/responsive.js';
4
+ /** Stable field instances — must not be recreated (breaks input focus). */
5
+ const EDITOR_NAME_FIELD = createEditorNameField();
6
+ function orderFields(fields) {
7
+ const ordered = {};
8
+ const keys = Object.keys(fields);
9
+ const generalKeys = keys.filter((key) => key !== EDITOR_NAME_FIELD_KEY && key !== 'hideOn' && !isResponsiveField(fields[key]));
10
+ const responsiveKeys = keys.filter((key) => isResponsiveField(fields[key]));
11
+ if (EDITOR_NAME_FIELD_KEY in fields) {
12
+ ordered[EDITOR_NAME_FIELD_KEY] = fields[EDITOR_NAME_FIELD_KEY];
13
+ }
14
+ if ('hideOn' in fields) {
15
+ ordered.hideOn = fields.hideOn;
16
+ }
17
+ for (const key of generalKeys) {
18
+ ordered[key] = fields[key];
19
+ }
20
+ for (const key of responsiveKeys) {
21
+ ordered[key] = fields[key];
22
+ }
23
+ return ordered;
24
+ }
25
+ /**
26
+ * Adds editor chrome (Name field) and orders fields for the tabbed sidebar.
27
+ */
28
+ export function enhancePageBuilderComponent(config) {
29
+ const baseFields = config.fields ?? {};
30
+ const mergedFields = {
31
+ ...(EDITOR_NAME_FIELD_KEY in baseFields ? {} : { [EDITOR_NAME_FIELD_KEY]: EDITOR_NAME_FIELD }),
32
+ ...baseFields,
33
+ };
34
+ const orderedFields = orderFields(mergedFields);
35
+ const previousResolveFields = config.resolveFields;
36
+ const next = {
37
+ ...config,
38
+ fields: orderedFields,
39
+ defaultProps: {
40
+ ...(config.defaultProps ?? {}),
41
+ },
42
+ };
43
+ if (previousResolveFields) {
44
+ next.resolveFields = (data, params) => {
45
+ const resolved = previousResolveFields(data, params);
46
+ const merged = {
47
+ ...(EDITOR_NAME_FIELD_KEY in resolved ? {} : { [EDITOR_NAME_FIELD_KEY]: EDITOR_NAME_FIELD }),
48
+ ...resolved,
49
+ };
50
+ return orderFields(merged);
51
+ };
52
+ }
53
+ return next;
54
+ }
55
+ //# sourceMappingURL=enhance-component-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhance-component-config.js","sourceRoot":"","sources":["../../src/editor/enhance-component-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,2EAA2E;AAC3E,MAAM,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;AAElD,SAAS,WAAW,CAAC,MAAc;IACjC,MAAM,OAAO,GAAW,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,qBAAqB,IAAI,GAAG,KAAK,QAAQ,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC;IAChI,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAE,CAAC,CAAC,CAAC;IAE7E,IAAI,qBAAqB,IAAI,MAAM,EAAE,CAAC;QACpC,OAAO,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAE,CAAC;IAClE,CAAC;IAED,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAO,CAAC;IAClC,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;IAC9B,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAE,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAA8C;IAE9C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IACvC,MAAM,YAAY,GAAG;QACnB,GAAG,CAAC,qBAAqB,IAAI,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC9F,GAAG,UAAU;KACJ,CAAC;IAEZ,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,qBAAqB,GAAG,MAAM,CAAC,aAAa,CAAC;IAEnD,MAAM,IAAI,GAA2C;QACnD,GAAG,MAAM;QACT,MAAM,EAAE,aAAa;QACrB,YAAY,EAAE;YACZ,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,EAAE,CAAC;SAC/B;KACF,CAAC;IAEF,IAAI,qBAAqB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACpC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG;gBACb,GAAG,CAAC,qBAAqB,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,iBAAiB,EAAE,CAAC;gBAC5F,GAAG,QAAQ;aACF,CAAC;YACZ,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Field, Fields } from '@measured/puck';
2
+ import type { SettingsTab } from './settings-tab-store.js';
3
+ export declare function fieldTabForName(fieldName: string, field: Field | undefined): SettingsTab;
4
+ export declare function componentHasResponsiveFields(fields: Fields | undefined): boolean;
5
+ export declare function componentHasDataFields(fields: Fields | undefined): boolean;
6
+ export declare function componentHasItemsFields(fields: Fields | undefined): boolean;
7
+ //# sourceMappingURL=field-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-tabs.d.ts","sourceRoot":"","sources":["../../src/editor/field-tabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAGpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,WAAW,CAMxF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGhF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG3E"}
@@ -0,0 +1,29 @@
1
+ import { EDITOR_NAME_FIELD_KEY } from '../types/editor-chrome.js';
2
+ import { isDataField, isItemsField, isResponsiveField } from '../types/responsive.js';
3
+ export function fieldTabForName(fieldName, field) {
4
+ if (fieldName === EDITOR_NAME_FIELD_KEY || fieldName === 'hideOn')
5
+ return 'general';
6
+ if (field && isItemsField(field))
7
+ return 'items';
8
+ if (field && isDataField(field))
9
+ return 'data';
10
+ if (field && isResponsiveField(field))
11
+ return 'responsive';
12
+ return 'general';
13
+ }
14
+ export function componentHasResponsiveFields(fields) {
15
+ if (!fields)
16
+ return false;
17
+ return Object.entries(fields).some(([name, field]) => fieldTabForName(name, field) === 'responsive');
18
+ }
19
+ export function componentHasDataFields(fields) {
20
+ if (!fields)
21
+ return false;
22
+ return Object.entries(fields).some(([name, field]) => fieldTabForName(name, field) === 'data');
23
+ }
24
+ export function componentHasItemsFields(fields) {
25
+ if (!fields)
26
+ return false;
27
+ return Object.entries(fields).some(([name, field]) => fieldTabForName(name, field) === 'items');
28
+ }
29
+ //# sourceMappingURL=field-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"field-tabs.js","sourceRoot":"","sources":["../../src/editor/field-tabs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAGtF,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,KAAwB;IACzE,IAAI,SAAS,KAAK,qBAAqB,IAAI,SAAS,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACpF,IAAI,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IACjD,IAAI,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/C,IAAI,KAAK,IAAI,iBAAiB,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC;IAC3D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAA0B;IACrE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,YAAY,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAC/D,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AAClG,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type ReactElement, type ReactNode } from 'react';
2
+ declare function FieldsTabPanelInner({ children, }: {
3
+ children: ReactNode;
4
+ isLoading: boolean;
5
+ itemSelector?: unknown;
6
+ }): ReactElement;
7
+ export declare const FieldsTabPanel: import("react").MemoExoticComponent<typeof FieldsTabPanelInner>;
8
+ export {};
9
+ //# sourceMappingURL=fields-tab-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields-tab-panel.d.ts","sourceRoot":"","sources":["../../src/editor/fields-tab-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAoJf,iBAAS,mBAAmB,CAAC,EAC3B,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,YAAY,CAuDf;AAED,eAAO,MAAM,cAAc,iEAA4B,CAAC"}
@@ -0,0 +1,132 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Children, isValidElement, memo, useEffect, useMemo, useState, } from 'react';
4
+ import { FieldLabel } from '@measured/puck';
5
+ import { SETTINGS_SCOPE_LABELS } from '../types/responsive.js';
6
+ import { fieldTabForName, componentHasDataFields, componentHasItemsFields, componentHasResponsiveFields } from './field-tabs.js';
7
+ import { setStoredScope } from './settings-scope-store.js';
8
+ import { getStoredSettingsTab, setStoredSettingsTab, subscribeSettingsTab, } from './settings-tab-store.js';
9
+ import { useComponentScope } from './use-component-scope.js';
10
+ import { usePageBuilderPuck } from './use-page-builder-puck.js';
11
+ const SCOPE_OPTIONS = ['base', 'tablet', 'desktop'];
12
+ const TAB_LABELS = {
13
+ general: 'General',
14
+ data: 'Data',
15
+ items: 'Items',
16
+ responsive: 'Responsive',
17
+ };
18
+ function visibleTabs(hasData, hasItems, hasResponsive) {
19
+ const tabs = ['general'];
20
+ if (hasData)
21
+ tabs.push('data');
22
+ if (hasItems)
23
+ tabs.push('items');
24
+ if (hasResponsive)
25
+ tabs.push('responsive');
26
+ return tabs;
27
+ }
28
+ const tabBarStyle = {
29
+ display: 'flex',
30
+ alignItems: 'center',
31
+ gap: '6px',
32
+ overflowX: 'auto',
33
+ flexShrink: 0,
34
+ paddingTop: '8px',
35
+ paddingBottom: '8px',
36
+ marginBottom: '8px',
37
+ borderBottom: '1px solid var(--puck-color-grey-09, #dce3ea)',
38
+ WebkitOverflowScrolling: 'touch',
39
+ };
40
+ const panelStyle = {
41
+ display: 'flex',
42
+ flexDirection: 'column',
43
+ minHeight: 0,
44
+ height: '100%',
45
+ };
46
+ const scrollStyle = {
47
+ flex: 1,
48
+ minHeight: 0,
49
+ overflowY: 'auto',
50
+ };
51
+ const scopePanelStyle = {
52
+ marginInline: '16px',
53
+ marginBottom: '16px',
54
+ paddingBlock: '14px',
55
+ paddingInline: '16px',
56
+ borderRadius: '8px',
57
+ background: 'var(--puck-color-grey-12, #f6f8fa)',
58
+ border: '1px solid var(--puck-color-grey-09, #dce3ea)',
59
+ };
60
+ function tabButtonStyle(active) {
61
+ return {
62
+ flexShrink: 0,
63
+ border: 'none',
64
+ borderRadius: '6px',
65
+ padding: '6px 12px',
66
+ fontSize: '12px',
67
+ fontWeight: active ? 600 : 500,
68
+ cursor: 'pointer',
69
+ background: active ? 'var(--puck-color-grey-11, #eef2f6)' : 'transparent',
70
+ color: active ? 'var(--puck-color-black, #000)' : 'var(--puck-color-grey-04, #5a6b7d)',
71
+ };
72
+ }
73
+ function ScopeSelectorControl() {
74
+ const componentId = usePageBuilderPuck((s) => s.selectedItem?.props.id);
75
+ const scope = useComponentScope(componentId);
76
+ return (_jsxs("div", { style: scopePanelStyle, children: [_jsx(FieldLabel, { label: "Scope settings" }), _jsx("select", { id: "pb-settings-scope", "aria-label": "Scope settings", className: "_Input-input_bsxfo_26", style: { width: '100%', boxSizing: 'border-box', marginTop: '4px' }, value: scope, onChange: (e) => {
77
+ setStoredScope(componentId, e.target.value);
78
+ }, children: SCOPE_OPTIONS.map((option) => (_jsx("option", { value: option, children: SETTINGS_SCOPE_LABELS[option] }, option))) }), _jsx("p", { style: { margin: '8px 0 0', paddingInline: '2px', fontSize: '12px', color: 'var(--puck-color-grey-04, #5a6b7d)' }, children: "Fields below apply to the selected scope. Switch Puck viewports (Mobile / Tablet / Desktop) to preview each breakpoint." })] }));
79
+ }
80
+ function useSettingsTab(componentId, hasData, hasItems, hasResponsive) {
81
+ const hasTabs = hasData || hasItems || hasResponsive;
82
+ const tabs = visibleTabs(hasData, hasItems, hasResponsive);
83
+ const [tab, setTab] = useState(() => {
84
+ const stored = getStoredSettingsTab(componentId);
85
+ return tabs.includes(stored) ? stored : 'general';
86
+ });
87
+ useEffect(() => {
88
+ const stored = getStoredSettingsTab(componentId);
89
+ const allowed = visibleTabs(hasData, hasItems, hasResponsive);
90
+ setTab(hasTabs && allowed.includes(stored) ? stored : 'general');
91
+ }, [componentId, hasData, hasItems, hasResponsive, hasTabs]);
92
+ useEffect(() => {
93
+ return subscribeSettingsTab(() => {
94
+ const stored = getStoredSettingsTab(componentId);
95
+ const allowed = visibleTabs(hasData, hasItems, hasResponsive);
96
+ setTab(hasTabs && allowed.includes(stored) ? stored : 'general');
97
+ });
98
+ }, [componentId, hasData, hasItems, hasResponsive, hasTabs]);
99
+ return hasTabs ? tab : 'general';
100
+ }
101
+ function childFieldName(child) {
102
+ if (!isValidElement(child))
103
+ return null;
104
+ const props = child.props;
105
+ return typeof props.fieldName === 'string' ? props.fieldName : null;
106
+ }
107
+ function FieldsTabPanelInner({ children, }) {
108
+ const componentId = usePageBuilderPuck((s) => s.selectedItem?.props.id);
109
+ const itemType = usePageBuilderPuck((s) => s.selectedItem?.type);
110
+ const config = usePageBuilderPuck((s) => s.config);
111
+ const fields = itemType ? config.components[itemType]?.fields : undefined;
112
+ const hasResponsive = componentHasResponsiveFields(fields);
113
+ const hasData = componentHasDataFields(fields);
114
+ const hasItems = componentHasItemsFields(fields);
115
+ const hasTabs = hasResponsive || hasData || hasItems;
116
+ const activeTab = useSettingsTab(componentId, hasData, hasItems, hasResponsive);
117
+ const tabs = visibleTabs(hasData, hasItems, hasResponsive);
118
+ const childEntries = useMemo(() => Children.toArray(children).map((child) => ({
119
+ child,
120
+ fieldName: childFieldName(child),
121
+ })), [children]);
122
+ return (_jsxs("div", { style: panelStyle, children: [hasTabs ? (_jsx("div", { style: { ...tabBarStyle, paddingInline: '16px' }, role: "tablist", "aria-label": "Component settings", children: tabs.map((tab) => (_jsx("button", { type: "button", role: "tab", "aria-selected": activeTab === tab, style: tabButtonStyle(activeTab === tab), onClick: () => setStoredSettingsTab(componentId, tab), children: TAB_LABELS[tab] }, tab))) })) : null, _jsxs("div", { style: scrollStyle, children: [hasResponsive && activeTab === 'responsive' ? _jsx(ScopeSelectorControl, {}) : null, childEntries.map(({ child, fieldName }) => {
123
+ if (!fieldName)
124
+ return _jsx("div", { children: child }, "pb-field-unknown");
125
+ const field = fields?.[fieldName];
126
+ const tab = fieldTabForName(fieldName, field);
127
+ const visible = !hasTabs || tab === activeTab;
128
+ return (_jsx("div", { style: { display: visible ? 'block' : 'none' }, children: child }, fieldName));
129
+ })] })] }));
130
+ }
131
+ export const FieldsTabPanel = memo(FieldsTabPanelInner);
132
+ //# sourceMappingURL=fields-tab-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields-tab-panel.js","sourceRoot":"","sources":["../../src/editor/fields-tab-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function formatOutlineLabel(componentType: string, props: Record<string, unknown> | undefined, typeLabel?: string): string;
2
+ //# sourceMappingURL=format-outline-label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-outline-label.d.ts","sourceRoot":"","sources":["../../src/editor/format-outline-label.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAOR"}
@@ -0,0 +1,10 @@
1
+ import { EDITOR_NAME_FIELD_KEY } from '../types/editor-chrome.js';
2
+ export function formatOutlineLabel(componentType, props, typeLabel) {
3
+ const base = typeLabel ?? componentType;
4
+ const name = props?.[EDITOR_NAME_FIELD_KEY];
5
+ if (typeof name === 'string' && name.trim().length > 0) {
6
+ return `${base} - ${name.trim()}`;
7
+ }
8
+ return base;
9
+ }
10
+ //# sourceMappingURL=format-outline-label.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-outline-label.js","sourceRoot":"","sources":["../../src/editor/format-outline-label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,KAA0C,EAC1C,SAAkB;IAElB,MAAM,IAAI,GAAG,SAAS,IAAI,aAAa,CAAC;IACxC,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,qBAAqB,CAAC,CAAC;IAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvD,OAAO,GAAG,IAAI,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,13 @@
1
+ export type PuckItem = {
2
+ type: string;
3
+ props: Record<string, unknown>;
4
+ };
5
+ export declare function normalizePuckItem(value: unknown): PuckItem | null;
6
+ export declare function isPuckItem(value: unknown): value is PuckItem;
7
+ export declare function toPuckItemArray(value: unknown): PuckItem[];
8
+ export declare function isPuckItemArray(value: unknown): value is PuckItem[];
9
+ /** Normalize Puck root content from app state — always returns an array. */
10
+ export declare function extractRootContent(data: unknown): PuckItem[];
11
+ /** Collect nested slot/component arrays from props (Row content, Columns columnItems, etc.). */
12
+ export declare function collectChildItems(props: Record<string, unknown>): PuckItem[];
13
+ //# sourceMappingURL=outline-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-data.d.ts","sourceRoot":"","sources":["../../src/editor/outline-data.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAcjE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,EAAE,CAQ1D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,EAAE,CAEnE;AAED,4EAA4E;AAC5E,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,CA+B5D;AAED,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,EAAE,CAgB5E"}
@@ -0,0 +1,73 @@
1
+ export function normalizePuckItem(value) {
2
+ if (!value || typeof value !== 'object')
3
+ return null;
4
+ const record = value;
5
+ if (typeof record.type === 'string' && record.props && typeof record.props === 'object') {
6
+ return { type: record.type, props: record.props };
7
+ }
8
+ if (typeof record.type === 'string') {
9
+ const { type, ...rest } = record;
10
+ return { type, props: rest };
11
+ }
12
+ return null;
13
+ }
14
+ export function isPuckItem(value) {
15
+ return normalizePuckItem(value) !== null;
16
+ }
17
+ export function toPuckItemArray(value) {
18
+ if (!Array.isArray(value))
19
+ return [];
20
+ const items = [];
21
+ for (const entry of value) {
22
+ const normalized = normalizePuckItem(entry);
23
+ if (normalized)
24
+ items.push(normalized);
25
+ }
26
+ return items;
27
+ }
28
+ export function isPuckItemArray(value) {
29
+ return toPuckItemArray(value).length > 0;
30
+ }
31
+ /** Normalize Puck root content from app state — always returns an array. */
32
+ export function extractRootContent(data) {
33
+ if (Array.isArray(data)) {
34
+ return toPuckItemArray(data);
35
+ }
36
+ if (!data || typeof data !== 'object') {
37
+ return [];
38
+ }
39
+ const tree = data;
40
+ const content = tree['content'];
41
+ if (Array.isArray(content)) {
42
+ const items = toPuckItemArray(content);
43
+ if (items.length > 0) {
44
+ return items;
45
+ }
46
+ }
47
+ const zones = tree['zones'];
48
+ if (zones && typeof zones === 'object') {
49
+ const zoneMap = zones;
50
+ const rootZone = zoneMap['root:default-zone'] ??
51
+ zoneMap['root:content'] ??
52
+ Object.entries(zoneMap).find(([key]) => key.startsWith('root:'))?.[1];
53
+ return toPuckItemArray(rootZone);
54
+ }
55
+ return [];
56
+ }
57
+ /** Collect nested slot/component arrays from props (Row content, Columns columnItems, etc.). */
58
+ export function collectChildItems(props) {
59
+ const children = [];
60
+ for (const value of Object.values(props)) {
61
+ children.push(...toPuckItemArray(value));
62
+ if (!Array.isArray(value))
63
+ continue;
64
+ for (const entry of value) {
65
+ if (!entry || typeof entry !== 'object')
66
+ continue;
67
+ const record = entry;
68
+ children.push(...toPuckItemArray(record['content']));
69
+ }
70
+ }
71
+ return children;
72
+ }
73
+ //# sourceMappingURL=outline-data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-data.js","sourceRoot":"","sources":["../../src/editor/outline-data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { Data, PuckAction } from '@measured/puck';
2
+ export interface OutlineDropPayload {
3
+ itemId: string;
4
+ sourceZone: string;
5
+ sourceIndex: number;
6
+ }
7
+ export declare function canOutlineDrop(payload: OutlineDropPayload, targetItemId: string, targetZone: string, targetIndex: number, data: Data): boolean;
8
+ /** Move one position up/down within the same zone (outline arrow buttons). */
9
+ export declare function outlineStepReorder(payload: OutlineDropPayload, zone: string, direction: -1 | 1, siblingCount: number): PuckAction | null;
10
+ /** Drop dragged outline item before the target row (HTML5 DnD). */
11
+ export declare function outlineDropBeforeTarget(payload: OutlineDropPayload, targetZone: string, targetIndex: number): PuckAction;
12
+ /** @deprecated Use outlineDropBeforeTarget or outlineStepReorder */
13
+ export declare function outlineReorderAction(payload: OutlineDropPayload, targetZone: string, targetIndex: number): PuckAction;
14
+ export declare function outlineSiblingCount(data: Data, zone: string): number;
15
+ //# sourceMappingURL=outline-dnd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outline-dnd.d.ts","sourceRoot":"","sources":["../../src/editor/outline-dnd.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGvD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,kBAAkB,EAC3B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,IAAI,GACT,OAAO,CAYT;AAED,8EAA8E;AAC9E,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,EACjB,YAAY,EAAE,MAAM,GACnB,UAAU,GAAG,IAAI,CAUnB;AAED,mEAAmE;AACnE,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,UAAU,CAqBZ;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,kBAAkB,EAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAClB,UAAU,CAEZ;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEpE"}