@measured/puck-plugin-heading-analyzer 0.20.0-canary.3da831b0 → 0.20.0-canary.5cc56415

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.css CHANGED
@@ -12,151 +12,6 @@
12
12
  color: var(--puck-color-red-04);
13
13
  }
14
14
 
15
- /* css-module:/home/runner/work/puck/puck/packages/core/components/SidebarSection/styles.module.css/#css-module-data */
16
- ._SidebarSection_8boj8_1 {
17
- display: flex;
18
- position: relative;
19
- flex-direction: column;
20
- color: var(--puck-color-black);
21
- }
22
- ._SidebarSection_8boj8_1:last-of-type {
23
- flex-grow: 1;
24
- }
25
- ._SidebarSection-title_8boj8_12 {
26
- background: var(--puck-color-white);
27
- padding: 16px;
28
- border-bottom: 1px solid var(--puck-color-grey-09);
29
- border-top: 1px solid var(--puck-color-grey-09);
30
- overflow-x: auto;
31
- }
32
- ._SidebarSection--noBorderTop_8boj8_20 > ._SidebarSection-title_8boj8_12 {
33
- border-top: 0px;
34
- }
35
- ._SidebarSection-content_8boj8_24 {
36
- padding: 16px;
37
- }
38
- ._SidebarSection--noPadding_8boj8_28 > ._SidebarSection-content_8boj8_24 {
39
- padding: 0px;
40
- }
41
- ._SidebarSection--noPadding_8boj8_28 > ._SidebarSection-content_8boj8_24:last-child {
42
- padding-bottom: 4px;
43
- }
44
- ._SidebarSection_8boj8_1:last-of-type ._SidebarSection-content_8boj8_24 {
45
- border-bottom: none;
46
- flex-grow: 1;
47
- }
48
- ._SidebarSection-breadcrumbLabel_8boj8_41 {
49
- background: none;
50
- border: 0;
51
- border-radius: 2px;
52
- color: var(--puck-color-azure-04);
53
- cursor: pointer;
54
- font: inherit;
55
- flex-shrink: 0;
56
- padding: 0;
57
- transition: color 50ms ease-in;
58
- }
59
- ._SidebarSection-breadcrumbLabel_8boj8_41:focus-visible {
60
- outline: 2px solid var(--puck-color-azure-05);
61
- outline-offset: 2px;
62
- }
63
- @media (hover: hover) and (pointer: fine) {
64
- ._SidebarSection-breadcrumbLabel_8boj8_41:hover {
65
- color: var(--puck-color-azure-03);
66
- transition: none;
67
- }
68
- }
69
- ._SidebarSection-breadcrumbLabel_8boj8_41:active {
70
- color: var(--puck-color-azure-02);
71
- transition: none;
72
- }
73
- ._SidebarSection-breadcrumbs_8boj8_70 {
74
- align-items: center;
75
- display: flex;
76
- gap: 4px;
77
- }
78
- ._SidebarSection-breadcrumb_8boj8_41 {
79
- align-items: center;
80
- display: flex;
81
- gap: 4px;
82
- }
83
- ._SidebarSection-heading_8boj8_82 {
84
- padding-inline-end: 16px;
85
- }
86
- ._SidebarSection-loadingOverlay_8boj8_86 {
87
- background: var(--puck-color-white);
88
- display: flex;
89
- justify-content: center;
90
- align-items: center;
91
- height: 100%;
92
- width: 100%;
93
- top: 0;
94
- position: absolute;
95
- z-index: 1;
96
- pointer-events: all;
97
- box-sizing: border-box;
98
- opacity: 0.8;
99
- }
100
-
101
- /* css-module:/home/runner/work/puck/puck/packages/core/components/Heading/styles.module.css/#css-module-data */
102
- ._Heading_qxrry_1 {
103
- display: block;
104
- color: var(--puck-color-black);
105
- font-weight: 700;
106
- margin: 0;
107
- }
108
- ._Heading_qxrry_1 b {
109
- font-weight: 700;
110
- }
111
- ._Heading--xxxxl_qxrry_12 {
112
- font-size: var(--puck-font-size-xxxxl);
113
- letter-spacing: 0.08ch;
114
- font-weight: 800;
115
- }
116
- ._Heading--xxxl_qxrry_18 {
117
- font-size: var(--puck-font-size-xxxl);
118
- }
119
- ._Heading--xxl_qxrry_22 {
120
- font-size: var(--puck-font-size-xxl);
121
- }
122
- ._Heading--xl_qxrry_26 {
123
- font-size: var(--puck-font-size-xl);
124
- }
125
- ._Heading--l_qxrry_30 {
126
- font-size: var(--puck-font-size-l);
127
- }
128
- ._Heading--m_qxrry_34 {
129
- font-size: var(--puck-font-size-m);
130
- }
131
- ._Heading--s_qxrry_38 {
132
- font-size: var(--puck-font-size-s);
133
- }
134
- ._Heading--xs_qxrry_42 {
135
- font-size: var(--puck-font-size-xs);
136
- }
137
-
138
- /* css-module:/home/runner/work/puck/puck/packages/core/components/Loader/styles.module.css/#css-module-data */
139
- @keyframes _loader-animation_nacdm_1 {
140
- 0% {
141
- transform: rotate(0deg) scale(1);
142
- }
143
- 50% {
144
- transform: rotate(180deg) scale(0.8);
145
- }
146
- 100% {
147
- transform: rotate(360deg) scale(1);
148
- }
149
- }
150
- ._Loader_nacdm_13 {
151
- background: transparent;
152
- border-radius: 100%;
153
- border: 2px solid currentColor;
154
- border-bottom-color: transparent;
155
- display: inline-block;
156
- animation: _loader-animation_nacdm_1 1s 0s infinite linear;
157
- animation-fill-mode: both;
158
- }
159
-
160
15
  /* css-module:/home/runner/work/puck/puck/packages/core/components/OutlineList/styles.module.css/#css-module-data */
161
16
  ._OutlineList_w4lzv_1 {
162
17
  color: var(--puck-color-grey-03);
package/dist/index.d.mts CHANGED
@@ -7,7 +7,7 @@ type ItemSelector = {
7
7
 
8
8
  type FieldOption = {
9
9
  label: string;
10
- value: string | number | boolean;
10
+ value: string | number | boolean | undefined | null | object;
11
11
  };
12
12
  type FieldOptions = Array<FieldOption> | ReadonlyArray<FieldOption>;
13
13
  type BaseField = {
@@ -19,6 +19,7 @@ type BaseField = {
19
19
  type TextField = BaseField & {
20
20
  type: "text";
21
21
  placeholder?: string;
22
+ contentEditable?: boolean;
22
23
  };
23
24
  type NumberField = BaseField & {
24
25
  type: "number";
@@ -30,6 +31,7 @@ type NumberField = BaseField & {
30
31
  type TextareaField = BaseField & {
31
32
  type: "textarea";
32
33
  placeholder?: string;
34
+ contentEditable?: boolean;
33
35
  };
34
36
  type SelectField = BaseField & {
35
37
  type: "select";
@@ -39,11 +41,11 @@ type RadioField = BaseField & {
39
41
  type: "radio";
40
42
  options: FieldOptions;
41
43
  };
42
- type ArrayField<Props extends {
44
+ type ArrayField<Props extends any = {
43
45
  [key: string]: any;
44
- } = {
46
+ }> = Props extends {
45
47
  [key: string]: any;
46
- }> = BaseField & {
48
+ } ? BaseField & {
47
49
  type: "array";
48
50
  arrayFields: {
49
51
  [SubPropName in keyof Props[0]]: Field<Props[0][SubPropName]>;
@@ -52,14 +54,12 @@ type ArrayField<Props extends {
52
54
  getItemSummary?: (item: Props[0], index?: number) => string;
53
55
  max?: number;
54
56
  min?: number;
55
- };
56
- type ObjectField<Props extends {
57
- [key: string]: any;
58
- } = {
57
+ } : never;
58
+ type ObjectField<Props extends any = {
59
59
  [key: string]: any;
60
60
  }> = BaseField & {
61
61
  type: "object";
62
- objectFields: Props extends any[] ? never : {
62
+ objectFields: {
63
63
  [SubPropName in keyof Props]: Field<Props[SubPropName]>;
64
64
  };
65
65
  };
@@ -68,20 +68,17 @@ type Adaptor<AdaptorParams = {}, TableShape extends Record<string, any> = {}, Pr
68
68
  fetchList: (adaptorParams?: AdaptorParams) => Promise<TableShape[] | null>;
69
69
  mapProp?: (value: TableShape) => PropShape;
70
70
  };
71
- type ExternalFieldWithAdaptor<Props extends {
72
- [key: string]: any;
73
- } = {
71
+ type NotUndefined<T> = T extends undefined ? Record<string, any> : T;
72
+ type ExternalFieldWithAdaptor<Props extends any = {
74
73
  [key: string]: any;
75
74
  }> = BaseField & {
76
75
  type: "external";
77
76
  placeholder?: string;
78
77
  adaptor: Adaptor<any, any, Props>;
79
78
  adaptorParams?: object;
80
- getItemSummary: (item: Props, index?: number) => string;
79
+ getItemSummary: (item: NotUndefined<Props>, index?: number) => string;
81
80
  };
82
- type ExternalField<Props extends {
83
- [key: string]: any;
84
- } = {
81
+ type ExternalField<Props extends any = {
85
82
  [key: string]: any;
86
83
  }> = BaseField & {
87
84
  type: "external";
@@ -92,7 +89,7 @@ type ExternalField<Props extends {
92
89
  }) => Promise<any[] | null>;
93
90
  mapProp?: (value: any) => Props;
94
91
  mapRow?: (value: any) => Record<string, string | number | ReactElement>;
95
- getItemSummary?: (item: Props, index?: number) => string;
92
+ getItemSummary?: (item: NotUndefined<Props>, index?: number) => string;
96
93
  showSearch?: boolean;
97
94
  renderFooter?: (props: {
98
95
  items: any[];
@@ -112,21 +109,14 @@ type CustomFieldRender<Value extends any> = (props: {
112
109
  type CustomField<Value extends any> = BaseField & {
113
110
  type: "custom";
114
111
  render: CustomFieldRender<Value>;
112
+ contentEditable?: boolean;
115
113
  };
116
114
  type SlotField = BaseField & {
117
115
  type: "slot";
118
116
  allow?: string[];
119
117
  disallow?: string[];
120
118
  };
121
- type Field<Props extends any = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<Props extends {
122
- [key: string]: any;
123
- } ? Props : any> | ObjectField<Props extends {
124
- [key: string]: any;
125
- } ? Props : any> | ExternalField<Props extends {
126
- [key: string]: any;
127
- } ? Props : any> | ExternalFieldWithAdaptor<Props extends {
128
- [key: string]: any;
129
- } ? Props : any> | CustomField<Props> | SlotField;
119
+ type Field<ValueType = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<ValueType> | ObjectField<ValueType> | ExternalField<ValueType> | ExternalFieldWithAdaptor<ValueType> | CustomField<ValueType> | SlotField;
130
120
  type FieldProps<F = Field<any>, ValueType = any> = {
131
121
  field: F;
132
122
  value: ValueType;
@@ -135,6 +125,10 @@ type FieldProps<F = Field<any>, ValueType = any> = {
135
125
  readOnly?: boolean;
136
126
  };
137
127
 
128
+ type ExtractField<T extends Field["type"]> = Extract<Field, {
129
+ type: T;
130
+ }>;
131
+
138
132
  type Metadata = {
139
133
  [key: string]: any;
140
134
  };
@@ -142,6 +136,7 @@ type Metadata = {
142
136
  type ItemWithId = {
143
137
  _arrayId: string;
144
138
  _originalIndex: number;
139
+ _currentIndex: number;
145
140
  };
146
141
  type ArrayState = {
147
142
  items: ItemWithId[];
@@ -150,6 +145,8 @@ type ArrayState = {
150
145
  type UiState = {
151
146
  leftSideBarVisible: boolean;
152
147
  rightSideBarVisible: boolean;
148
+ leftSideBarWidth?: number | null;
149
+ rightSideBarWidth?: number | null;
153
150
  itemSelector: ItemSelector | null;
154
151
  arrayState: Record<string, ArrayState | undefined>;
155
152
  previewMode: "interactive" | "edit";
@@ -178,7 +175,25 @@ type RenderFunc<Props extends {
178
175
  } = {
179
176
  children: ReactNode;
180
177
  }> = (props: Props) => ReactElement;
181
- declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "components", "componentItem", "outline", "puck", "preview"];
178
+
179
+ type MapFnParams<ThisField = Field> = {
180
+ value: any;
181
+ parentId: string;
182
+ propName: string;
183
+ field: ThisField;
184
+ propPath: string;
185
+ };
186
+
187
+ type FieldTransformFnParams<T> = Omit<MapFnParams<T>, "parentId"> & {
188
+ isReadOnly: boolean;
189
+ componentId: string;
190
+ };
191
+ type FieldTransformFn<T = any> = (params: FieldTransformFnParams<T>) => any;
192
+ type FieldTransforms = Partial<{
193
+ [FieldType in Field["type"]]: FieldTransformFn<ExtractField<FieldType>>;
194
+ }>;
195
+
196
+ declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "drawer", "drawerItem", "componentOverlay", "outline", "puck", "preview"];
182
197
  type OverrideKey = (typeof overrideKeys)[number];
183
198
  type OverridesGeneric<Shape extends {
184
199
  [key in OverrideKey]: any;
@@ -216,11 +231,23 @@ type Overrides = OverridesGeneric<{
216
231
  children: ReactNode;
217
232
  name: string;
218
233
  }>;
234
+ drawer: RenderFunc;
235
+ drawerItem: RenderFunc<{
236
+ children: ReactNode;
237
+ name: string;
238
+ }>;
219
239
  iframe: RenderFunc<{
220
240
  children: ReactNode;
221
241
  document?: Document;
222
242
  }>;
223
243
  outline: RenderFunc;
244
+ componentOverlay: RenderFunc<{
245
+ children: ReactNode;
246
+ hover: boolean;
247
+ isSelected: boolean;
248
+ componentId: string;
249
+ componentType: string;
250
+ }>;
224
251
  puck: RenderFunc;
225
252
  }>;
226
253
  type FieldRenderFunctions = Omit<{
@@ -246,7 +273,12 @@ type Viewport = {
246
273
  };
247
274
 
248
275
  type Plugin = {
249
- overrides: Partial<Overrides>;
276
+ name?: string;
277
+ label?: string;
278
+ icon?: ReactNode;
279
+ render?: () => ReactElement;
280
+ overrides?: Partial<Overrides>;
281
+ fieldTransforms?: FieldTransforms;
250
282
  };
251
283
 
252
284
  declare const headingAnalyzer: Plugin;
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ type ItemSelector = {
7
7
 
8
8
  type FieldOption = {
9
9
  label: string;
10
- value: string | number | boolean;
10
+ value: string | number | boolean | undefined | null | object;
11
11
  };
12
12
  type FieldOptions = Array<FieldOption> | ReadonlyArray<FieldOption>;
13
13
  type BaseField = {
@@ -19,6 +19,7 @@ type BaseField = {
19
19
  type TextField = BaseField & {
20
20
  type: "text";
21
21
  placeholder?: string;
22
+ contentEditable?: boolean;
22
23
  };
23
24
  type NumberField = BaseField & {
24
25
  type: "number";
@@ -30,6 +31,7 @@ type NumberField = BaseField & {
30
31
  type TextareaField = BaseField & {
31
32
  type: "textarea";
32
33
  placeholder?: string;
34
+ contentEditable?: boolean;
33
35
  };
34
36
  type SelectField = BaseField & {
35
37
  type: "select";
@@ -39,11 +41,11 @@ type RadioField = BaseField & {
39
41
  type: "radio";
40
42
  options: FieldOptions;
41
43
  };
42
- type ArrayField<Props extends {
44
+ type ArrayField<Props extends any = {
43
45
  [key: string]: any;
44
- } = {
46
+ }> = Props extends {
45
47
  [key: string]: any;
46
- }> = BaseField & {
48
+ } ? BaseField & {
47
49
  type: "array";
48
50
  arrayFields: {
49
51
  [SubPropName in keyof Props[0]]: Field<Props[0][SubPropName]>;
@@ -52,14 +54,12 @@ type ArrayField<Props extends {
52
54
  getItemSummary?: (item: Props[0], index?: number) => string;
53
55
  max?: number;
54
56
  min?: number;
55
- };
56
- type ObjectField<Props extends {
57
- [key: string]: any;
58
- } = {
57
+ } : never;
58
+ type ObjectField<Props extends any = {
59
59
  [key: string]: any;
60
60
  }> = BaseField & {
61
61
  type: "object";
62
- objectFields: Props extends any[] ? never : {
62
+ objectFields: {
63
63
  [SubPropName in keyof Props]: Field<Props[SubPropName]>;
64
64
  };
65
65
  };
@@ -68,20 +68,17 @@ type Adaptor<AdaptorParams = {}, TableShape extends Record<string, any> = {}, Pr
68
68
  fetchList: (adaptorParams?: AdaptorParams) => Promise<TableShape[] | null>;
69
69
  mapProp?: (value: TableShape) => PropShape;
70
70
  };
71
- type ExternalFieldWithAdaptor<Props extends {
72
- [key: string]: any;
73
- } = {
71
+ type NotUndefined<T> = T extends undefined ? Record<string, any> : T;
72
+ type ExternalFieldWithAdaptor<Props extends any = {
74
73
  [key: string]: any;
75
74
  }> = BaseField & {
76
75
  type: "external";
77
76
  placeholder?: string;
78
77
  adaptor: Adaptor<any, any, Props>;
79
78
  adaptorParams?: object;
80
- getItemSummary: (item: Props, index?: number) => string;
79
+ getItemSummary: (item: NotUndefined<Props>, index?: number) => string;
81
80
  };
82
- type ExternalField<Props extends {
83
- [key: string]: any;
84
- } = {
81
+ type ExternalField<Props extends any = {
85
82
  [key: string]: any;
86
83
  }> = BaseField & {
87
84
  type: "external";
@@ -92,7 +89,7 @@ type ExternalField<Props extends {
92
89
  }) => Promise<any[] | null>;
93
90
  mapProp?: (value: any) => Props;
94
91
  mapRow?: (value: any) => Record<string, string | number | ReactElement>;
95
- getItemSummary?: (item: Props, index?: number) => string;
92
+ getItemSummary?: (item: NotUndefined<Props>, index?: number) => string;
96
93
  showSearch?: boolean;
97
94
  renderFooter?: (props: {
98
95
  items: any[];
@@ -112,21 +109,14 @@ type CustomFieldRender<Value extends any> = (props: {
112
109
  type CustomField<Value extends any> = BaseField & {
113
110
  type: "custom";
114
111
  render: CustomFieldRender<Value>;
112
+ contentEditable?: boolean;
115
113
  };
116
114
  type SlotField = BaseField & {
117
115
  type: "slot";
118
116
  allow?: string[];
119
117
  disallow?: string[];
120
118
  };
121
- type Field<Props extends any = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<Props extends {
122
- [key: string]: any;
123
- } ? Props : any> | ObjectField<Props extends {
124
- [key: string]: any;
125
- } ? Props : any> | ExternalField<Props extends {
126
- [key: string]: any;
127
- } ? Props : any> | ExternalFieldWithAdaptor<Props extends {
128
- [key: string]: any;
129
- } ? Props : any> | CustomField<Props> | SlotField;
119
+ type Field<ValueType = any> = TextField | NumberField | TextareaField | SelectField | RadioField | ArrayField<ValueType> | ObjectField<ValueType> | ExternalField<ValueType> | ExternalFieldWithAdaptor<ValueType> | CustomField<ValueType> | SlotField;
130
120
  type FieldProps<F = Field<any>, ValueType = any> = {
131
121
  field: F;
132
122
  value: ValueType;
@@ -135,6 +125,10 @@ type FieldProps<F = Field<any>, ValueType = any> = {
135
125
  readOnly?: boolean;
136
126
  };
137
127
 
128
+ type ExtractField<T extends Field["type"]> = Extract<Field, {
129
+ type: T;
130
+ }>;
131
+
138
132
  type Metadata = {
139
133
  [key: string]: any;
140
134
  };
@@ -142,6 +136,7 @@ type Metadata = {
142
136
  type ItemWithId = {
143
137
  _arrayId: string;
144
138
  _originalIndex: number;
139
+ _currentIndex: number;
145
140
  };
146
141
  type ArrayState = {
147
142
  items: ItemWithId[];
@@ -150,6 +145,8 @@ type ArrayState = {
150
145
  type UiState = {
151
146
  leftSideBarVisible: boolean;
152
147
  rightSideBarVisible: boolean;
148
+ leftSideBarWidth?: number | null;
149
+ rightSideBarWidth?: number | null;
153
150
  itemSelector: ItemSelector | null;
154
151
  arrayState: Record<string, ArrayState | undefined>;
155
152
  previewMode: "interactive" | "edit";
@@ -178,7 +175,25 @@ type RenderFunc<Props extends {
178
175
  } = {
179
176
  children: ReactNode;
180
177
  }> = (props: Props) => ReactElement;
181
- declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "components", "componentItem", "outline", "puck", "preview"];
178
+
179
+ type MapFnParams<ThisField = Field> = {
180
+ value: any;
181
+ parentId: string;
182
+ propName: string;
183
+ field: ThisField;
184
+ propPath: string;
185
+ };
186
+
187
+ type FieldTransformFnParams<T> = Omit<MapFnParams<T>, "parentId"> & {
188
+ isReadOnly: boolean;
189
+ componentId: string;
190
+ };
191
+ type FieldTransformFn<T = any> = (params: FieldTransformFnParams<T>) => any;
192
+ type FieldTransforms = Partial<{
193
+ [FieldType in Field["type"]]: FieldTransformFn<ExtractField<FieldType>>;
194
+ }>;
195
+
196
+ declare const overrideKeys: readonly ["header", "headerActions", "fields", "fieldLabel", "drawer", "drawerItem", "componentOverlay", "outline", "puck", "preview"];
182
197
  type OverrideKey = (typeof overrideKeys)[number];
183
198
  type OverridesGeneric<Shape extends {
184
199
  [key in OverrideKey]: any;
@@ -216,11 +231,23 @@ type Overrides = OverridesGeneric<{
216
231
  children: ReactNode;
217
232
  name: string;
218
233
  }>;
234
+ drawer: RenderFunc;
235
+ drawerItem: RenderFunc<{
236
+ children: ReactNode;
237
+ name: string;
238
+ }>;
219
239
  iframe: RenderFunc<{
220
240
  children: ReactNode;
221
241
  document?: Document;
222
242
  }>;
223
243
  outline: RenderFunc;
244
+ componentOverlay: RenderFunc<{
245
+ children: ReactNode;
246
+ hover: boolean;
247
+ isSelected: boolean;
248
+ componentId: string;
249
+ componentType: string;
250
+ }>;
224
251
  puck: RenderFunc;
225
252
  }>;
226
253
  type FieldRenderFunctions = Omit<{
@@ -246,7 +273,12 @@ type Viewport = {
246
273
  };
247
274
 
248
275
  type Plugin = {
249
- overrides: Partial<Overrides>;
276
+ name?: string;
277
+ label?: string;
278
+ icon?: ReactNode;
279
+ render?: () => ReactElement;
280
+ overrides?: Partial<Overrides>;
281
+ fieldTransforms?: FieldTransforms;
250
282
  };
251
283
 
252
284
  declare const headingAnalyzer: Plugin;