@nascentdigital/funnel-ui 4.5.0 → 4.5.1

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.
@@ -14,10 +14,10 @@ export declare namespace Block {
14
14
  className?: string;
15
15
  panel: BlockLayout.Panel;
16
16
  };
17
- function create<TMessage extends boolean | undefined = undefined, TVisual extends boolean | undefined = undefined, TList extends Schema.ListField | undefined = undefined, TExtend extends Schema.Block.Config = Schema.Block.Config>(args: Create.Args<TMessage, TVisual, TList, TExtend>): Create.Result<TMessage, TVisual, TList, TExtend>;
17
+ function create<TBlockId extends string, TMessage extends boolean | undefined = undefined, TVisual extends boolean | undefined = undefined, TList extends Schema.ListField | undefined = undefined, TExtend extends Schema.Block.Config = Schema.Block.Config, TItemProps = any>(args: Create.Args<TBlockId, TMessage, TVisual, TList, TExtend, TItemProps>): Create.Result<TBlockId, TMessage, TVisual, TList, TExtend, TItemProps>;
18
18
  namespace Create {
19
- type Args<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config> = {
20
- id: string;
19
+ type Args<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
20
+ id: TBlockId;
21
21
  name: string;
22
22
  version: number;
23
23
  className?: string;
@@ -25,30 +25,30 @@ export declare namespace Block {
25
25
  visual?: TVisual;
26
26
  list?: {
27
27
  schema: TList;
28
- itemRenderer: TList extends Schema.ListField<infer TContent> ? (item: Schema.ListField.LinkedValue.ForItem<TContent>, itemProps: any) => ReactNode : never;
28
+ itemRenderer: TList extends Schema.ListField<infer TContent> ? (item: Schema.ListField.LinkedValue.ForItem<TContent>, itemProps: TItemProps) => ReactNode : never;
29
29
  };
30
30
  extendConfigSchema?: TExtend;
31
31
  };
32
- type Result<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config> = {
33
- Component: FunctionComponent<Result.Component<TMessage, TVisual, TList, TExtend>>;
34
- schema: Result.Schema<TMessage, TVisual, TList, TExtend>;
32
+ type Result<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
33
+ Component: FunctionComponent<Result.Component<TBlockId, TMessage, TVisual, TList, TExtend, TItemProps>>;
34
+ schema: Result.Schema<TBlockId, TMessage, TVisual, TList, TExtend>;
35
35
  };
36
36
  namespace Result {
37
37
  type FieldsSchema<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined> = ((TMessage extends true ? typeof MessagePanel.Fields.all : {}) & (TVisual extends true ? typeof VisualPanel.Fields.all : {}) & (TList extends Schema.ListField ? {
38
38
  list: TList;
39
39
  } : {}));
40
40
  type ConfigSchema<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TFields extends FieldsSchema<TMessage, TVisual, TList> = FieldsSchema<TMessage, TVisual, TList>> = BlockPanel.GetConfigSchema.Result<TFields, TMessage extends true ? 'message' : undefined, TVisual extends true ? 'visual' extends Schema.Fields.AssetFields.Keys<TFields> ? 'visual' : undefined : undefined, TList extends Schema.ListField ? 'list' extends Schema.Fields.ListFields.Keys<TFields> ? 'list' : undefined : undefined, TExtend>;
41
- type Schema<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config> = Schema.Block<string, FieldsSchema<TMessage, TVisual, TList>, ConfigSchema<TMessage, TVisual, TList, TExtend>>;
42
- type Component<TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config> = {
41
+ type Schema<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config> = Schema.Block<TBlockId, FieldsSchema<TMessage, TVisual, TList>, ConfigSchema<TMessage, TVisual, TList, TExtend>>;
42
+ type Component<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
43
43
  className?: string;
44
- model: Schema.Block.LinkedData<Schema<TMessage, TVisual, TList, TExtend>>;
44
+ model: Schema.Block.LinkedData<Schema<TBlockId, TMessage, TVisual, TList, TExtend>>;
45
45
  } & ((TMessage extends true ? {
46
46
  messagePanelProps?: MessagePanel.Props.Configuration;
47
47
  } : {}) & (TVisual extends true ? {
48
48
  visualPanelProps?: VisualPanel.Props.Configuration;
49
49
  } : {}) & (TList extends Schema.ListField ? {
50
50
  listPanelProps?: ListPanel.Props.Configuration & {
51
- itemProps: any;
51
+ itemProps: TItemProps;
52
52
  };
53
53
  } : {}));
54
54
  }
@@ -1,9 +1,10 @@
1
1
  import { Schema } from '@nascentdigital/funnel-core';
2
2
  import { ComponentProps } from 'react';
3
+ import { Client } from '../entities';
3
4
  import { Block } from './Block';
4
5
  export declare function Clients(props: ComponentProps<typeof Clients.Component>): import("react/jsx-runtime").JSX.Element;
5
6
  export declare namespace Clients {
6
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<true, undefined, Schema.ListField<{
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-clients", true, undefined, Schema.ListField<{
7
8
  item: Schema.CollectionField<Schema.Collection<{
8
9
  division: Schema.Optional<Schema.TextField>;
9
10
  location: Schema.Optional<Schema.TextField>;
@@ -11,7 +12,7 @@ export declare namespace Clients {
11
12
  badge: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Image>>;
12
13
  badgeText: Schema.Optional<Schema.TextField>;
13
14
  }>>;
14
- }>, Schema.Block.Config>>, schema: Block.Create.Result.Schema<true, undefined, Schema.ListField<{
15
+ }>, Schema.Block.Config, Client.Props.Configuration>>, schema: Block.Create.Result.Schema<"_nd-clients", true, undefined, Schema.ListField<{
15
16
  item: Schema.CollectionField<Schema.Collection<{
16
17
  division: Schema.Optional<Schema.TextField>;
17
18
  location: Schema.Optional<Schema.TextField>;
@@ -1,314 +1,18 @@
1
1
  import { Schema } from '@nascentdigital/funnel-core';
2
- import { HTMLAttributes, JSXElementConstructor } from 'react';
2
+ import { ComponentProps, JSXElementConstructor } from 'react';
3
3
  import { EmbeddedVideo } from '../../client/refs';
4
- import { HTMLElements } from '../../types';
5
- import { BlockPanel } from '../panels';
6
- export declare function MediaLayout<T extends MediaLayout.Tag>({ className, as, EmbeddedVideoElement, layout, ...props }: MediaLayout.Props<T>): import("react").DetailedReactHTMLElement<{
7
- prefix?: string | undefined | undefined;
8
- content?: string | undefined | undefined;
9
- translate?: "yes" | "no" | undefined | undefined;
10
- color?: string | undefined | undefined;
11
- id?: string | undefined | undefined;
12
- onClick?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
13
- slot?: string | undefined | undefined;
14
- style?: import("react").CSSProperties | undefined;
15
- title?: string | undefined | undefined;
16
- onAnimationStart?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
17
- onDragStart?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
18
- onDragEnd?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
19
- onDrag?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
20
- defaultChecked?: boolean | undefined | undefined;
21
- defaultValue?: string | number | readonly string[] | undefined;
22
- suppressContentEditableWarning?: boolean | undefined | undefined;
23
- suppressHydrationWarning?: boolean | undefined | undefined;
24
- accessKey?: string | undefined | undefined;
25
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
26
- autoFocus?: boolean | undefined | undefined;
27
- contentEditable?: "inherit" | (boolean | "true" | "false") | "plaintext-only" | undefined;
28
- contextMenu?: string | undefined | undefined;
29
- dir?: string | undefined | undefined;
30
- draggable?: (boolean | "true" | "false") | undefined;
31
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
32
- hidden?: boolean | undefined | undefined;
33
- lang?: string | undefined | undefined;
34
- nonce?: string | undefined | undefined;
35
- spellCheck?: (boolean | "true" | "false") | undefined;
36
- tabIndex?: number | undefined | undefined;
37
- radioGroup?: string | undefined | undefined;
38
- role?: import("react").AriaRole | undefined;
39
- about?: string | undefined | undefined;
40
- datatype?: string | undefined | undefined;
41
- inlist?: any;
42
- property?: string | undefined | undefined;
43
- rel?: string | undefined | undefined;
44
- resource?: string | undefined | undefined;
45
- rev?: string | undefined | undefined;
46
- typeof?: string | undefined | undefined;
47
- vocab?: string | undefined | undefined;
48
- autoCorrect?: string | undefined | undefined;
49
- autoSave?: string | undefined | undefined;
50
- itemProp?: string | undefined | undefined;
51
- itemScope?: boolean | undefined | undefined;
52
- itemType?: string | undefined | undefined;
53
- itemID?: string | undefined | undefined;
54
- itemRef?: string | undefined | undefined;
55
- results?: number | undefined | undefined;
56
- security?: string | undefined | undefined;
57
- unselectable?: "on" | "off" | undefined | undefined;
58
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
59
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
60
- popoverTarget?: string | undefined | undefined;
61
- inert?: boolean | undefined | undefined;
62
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
63
- is?: string | undefined | undefined;
64
- exportparts?: string | undefined | undefined;
65
- part?: string | undefined | undefined;
66
- "aria-activedescendant"?: string | undefined | undefined;
67
- "aria-atomic"?: (boolean | "true" | "false") | undefined;
68
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
69
- "aria-braillelabel"?: string | undefined | undefined;
70
- "aria-brailleroledescription"?: string | undefined | undefined;
71
- "aria-busy"?: (boolean | "true" | "false") | undefined;
72
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
73
- "aria-colcount"?: number | undefined | undefined;
74
- "aria-colindex"?: number | undefined | undefined;
75
- "aria-colindextext"?: string | undefined | undefined;
76
- "aria-colspan"?: number | undefined | undefined;
77
- "aria-controls"?: string | undefined | undefined;
78
- "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
79
- "aria-describedby"?: string | undefined | undefined;
80
- "aria-description"?: string | undefined | undefined;
81
- "aria-details"?: string | undefined | undefined;
82
- "aria-disabled"?: (boolean | "true" | "false") | undefined;
83
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
84
- "aria-errormessage"?: string | undefined | undefined;
85
- "aria-expanded"?: (boolean | "true" | "false") | undefined;
86
- "aria-flowto"?: string | undefined | undefined;
87
- "aria-grabbed"?: (boolean | "true" | "false") | undefined;
88
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
89
- "aria-hidden"?: (boolean | "true" | "false") | undefined;
90
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
91
- "aria-keyshortcuts"?: string | undefined | undefined;
92
- "aria-label"?: string | undefined | undefined;
93
- "aria-labelledby"?: string | undefined | undefined;
94
- "aria-level"?: number | undefined | undefined;
95
- "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
96
- "aria-modal"?: (boolean | "true" | "false") | undefined;
97
- "aria-multiline"?: (boolean | "true" | "false") | undefined;
98
- "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
99
- "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
100
- "aria-owns"?: string | undefined | undefined;
101
- "aria-placeholder"?: string | undefined | undefined;
102
- "aria-posinset"?: number | undefined | undefined;
103
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
104
- "aria-readonly"?: (boolean | "true" | "false") | undefined;
105
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
106
- "aria-required"?: (boolean | "true" | "false") | undefined;
107
- "aria-roledescription"?: string | undefined | undefined;
108
- "aria-rowcount"?: number | undefined | undefined;
109
- "aria-rowindex"?: number | undefined | undefined;
110
- "aria-rowindextext"?: string | undefined | undefined;
111
- "aria-rowspan"?: number | undefined | undefined;
112
- "aria-selected"?: (boolean | "true" | "false") | undefined;
113
- "aria-setsize"?: number | undefined | undefined;
114
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
115
- "aria-valuemax"?: number | undefined | undefined;
116
- "aria-valuemin"?: number | undefined | undefined;
117
- "aria-valuenow"?: number | undefined | undefined;
118
- "aria-valuetext"?: string | undefined | undefined;
119
- dangerouslySetInnerHTML?: {
120
- __html: string | TrustedHTML;
121
- } | undefined | undefined;
122
- onCopy?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
123
- onCopyCapture?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
124
- onCut?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
125
- onCutCapture?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
126
- onPaste?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
127
- onPasteCapture?: import("react").ClipboardEventHandler<HTMLElements.Standard[T]> | undefined;
128
- onCompositionEnd?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
129
- onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
130
- onCompositionStart?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
131
- onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
132
- onCompositionUpdate?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
133
- onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLElements.Standard[T]> | undefined;
134
- onFocus?: import("react").FocusEventHandler<HTMLElements.Standard[T]> | undefined;
135
- onFocusCapture?: import("react").FocusEventHandler<HTMLElements.Standard[T]> | undefined;
136
- onBlur?: import("react").FocusEventHandler<HTMLElements.Standard[T]> | undefined;
137
- onBlurCapture?: import("react").FocusEventHandler<HTMLElements.Standard[T]> | undefined;
138
- onChange?: import("react").ChangeEventHandler<HTMLElements.Standard[T], Element> | undefined;
139
- onChangeCapture?: import("react").ChangeEventHandler<HTMLElements.Standard[T], Element> | undefined;
140
- onBeforeInput?: import("react").InputEventHandler<HTMLElements.Standard[T]> | undefined;
141
- onBeforeInputCapture?: import("react").InputEventHandler<HTMLElements.Standard[T]> | undefined;
142
- onInput?: import("react").InputEventHandler<HTMLElements.Standard[T]> | undefined;
143
- onInputCapture?: import("react").InputEventHandler<HTMLElements.Standard[T]> | undefined;
144
- onReset?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
145
- onResetCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
146
- onSubmit?: import("react").SubmitEventHandler<HTMLElements.Standard[T]> | undefined;
147
- onSubmitCapture?: import("react").SubmitEventHandler<HTMLElements.Standard[T]> | undefined;
148
- onInvalid?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
149
- onInvalidCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
150
- onLoad?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
151
- onLoadCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
152
- onError?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
153
- onErrorCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
154
- onKeyDown?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
155
- onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
156
- onKeyPress?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
157
- onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
158
- onKeyUp?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
159
- onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLElements.Standard[T]> | undefined;
160
- onAbort?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
161
- onAbortCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
162
- onCanPlay?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
163
- onCanPlayCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
164
- onCanPlayThrough?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
165
- onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
166
- onDurationChange?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
167
- onDurationChangeCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
168
- onEmptied?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
169
- onEmptiedCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
170
- onEncrypted?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
171
- onEncryptedCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
172
- onEnded?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
173
- onEndedCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
174
- onLoadedData?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
175
- onLoadedDataCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
176
- onLoadedMetadata?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
177
- onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
178
- onLoadStart?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
179
- onLoadStartCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
180
- onPause?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
181
- onPauseCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
182
- onPlay?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
183
- onPlayCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
184
- onPlaying?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
185
- onPlayingCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
186
- onProgress?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
187
- onProgressCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
188
- onRateChange?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
189
- onRateChangeCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
190
- onSeeked?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
191
- onSeekedCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
192
- onSeeking?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
193
- onSeekingCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
194
- onStalled?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
195
- onStalledCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
196
- onSuspend?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
197
- onSuspendCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
198
- onTimeUpdate?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
199
- onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
200
- onVolumeChange?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
201
- onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
202
- onWaiting?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
203
- onWaitingCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
204
- onAuxClick?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
205
- onAuxClickCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
206
- onClickCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
207
- onContextMenu?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
208
- onContextMenuCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
209
- onDoubleClick?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
210
- onDoubleClickCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
211
- onDragCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
212
- onDragEndCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
213
- onDragEnter?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
214
- onDragEnterCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
215
- onDragExit?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
216
- onDragExitCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
217
- onDragLeave?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
218
- onDragLeaveCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
219
- onDragOver?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
220
- onDragOverCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
221
- onDragStartCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
222
- onDrop?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
223
- onDropCapture?: import("react").DragEventHandler<HTMLElements.Standard[T]> | undefined;
224
- onMouseDown?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
225
- onMouseDownCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
226
- onMouseEnter?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
227
- onMouseLeave?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
228
- onMouseMove?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
229
- onMouseMoveCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
230
- onMouseOut?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
231
- onMouseOutCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
232
- onMouseOver?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
233
- onMouseOverCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
234
- onMouseUp?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
235
- onMouseUpCapture?: import("react").MouseEventHandler<HTMLElements.Standard[T]> | undefined;
236
- onSelect?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
237
- onSelectCapture?: import("react").ReactEventHandler<HTMLElements.Standard[T]> | undefined;
238
- onTouchCancel?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
239
- onTouchCancelCapture?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
240
- onTouchEnd?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
241
- onTouchEndCapture?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
242
- onTouchMove?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
243
- onTouchMoveCapture?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
244
- onTouchStart?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
245
- onTouchStartCapture?: import("react").TouchEventHandler<HTMLElements.Standard[T]> | undefined;
246
- onPointerDown?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
247
- onPointerDownCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
248
- onPointerMove?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
249
- onPointerMoveCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
250
- onPointerUp?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
251
- onPointerUpCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
252
- onPointerCancel?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
253
- onPointerCancelCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
254
- onPointerEnter?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
255
- onPointerLeave?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
256
- onPointerOver?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
257
- onPointerOverCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
258
- onPointerOut?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
259
- onPointerOutCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
260
- onGotPointerCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
261
- onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
262
- onLostPointerCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
263
- onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElements.Standard[T]> | undefined;
264
- onScroll?: import("react").UIEventHandler<HTMLElements.Standard[T]> | undefined;
265
- onScrollCapture?: import("react").UIEventHandler<HTMLElements.Standard[T]> | undefined;
266
- onScrollEnd?: import("react").UIEventHandler<HTMLElements.Standard[T]> | undefined;
267
- onScrollEndCapture?: import("react").UIEventHandler<HTMLElements.Standard[T]> | undefined;
268
- onWheel?: import("react").WheelEventHandler<HTMLElements.Standard[T]> | undefined;
269
- onWheelCapture?: import("react").WheelEventHandler<HTMLElements.Standard[T]> | undefined;
270
- onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
271
- onAnimationEnd?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
272
- onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
273
- onAnimationIteration?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
274
- onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLElements.Standard[T]> | undefined;
275
- onToggle?: import("react").ToggleEventHandler<HTMLElements.Standard[T]> | undefined;
276
- onBeforeToggle?: import("react").ToggleEventHandler<HTMLElements.Standard[T]> | undefined;
277
- onTransitionCancel?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
278
- onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
279
- onTransitionEnd?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
280
- onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
281
- onTransitionRun?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
282
- onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
283
- onTransitionStart?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
284
- onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLElements.Standard[T]> | undefined;
285
- className: string;
286
- }, HTMLElement> | null;
4
+ import { Block } from './Block';
5
+ export declare function MediaLayout({ EmbeddedVideoElement, listPanelProps, ...props }: MediaLayout.Props): import("react/jsx-runtime").JSX.Element;
287
6
  export declare namespace MediaLayout {
288
- type Layout = 'poster' | '1col' | '2col' | 'brick' | 'brickAlt';
289
- namespace Layout {
290
- const Enum: Schema.EnumField.Options<Layout>;
291
- const schema: Schema.EnumField<Schema.EnumField.Options<Layout>>;
292
- function getClassName(layout?: Layout): string;
293
- }
294
- const schema: Schema.Block<"_nd-mediaLayout", {
295
- list: Schema.ListField<{
296
- visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
297
- embedded: Schema.EmbeddedVideoField;
298
- }>;
299
- }, BlockPanel.GetConfigSchema.Result<{
300
- list: Schema.ListField<{
301
- visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
302
- embedded: Schema.EmbeddedVideoField;
303
- }>;
304
- }, undefined, undefined, "list", {
305
- mediaLayout: Schema.EnumField<Schema.EnumField.Options<Layout>>;
306
- }>>;
307
- type Props<T extends Tag> = Omit<HTMLAttributes<HTMLElements.Standard[T]>, 'children'> & {
308
- as: T;
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-mediaLayout", true, undefined, Schema.ListField<{
8
+ visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
9
+ embedded: Schema.EmbeddedVideoField;
10
+ }>, Schema.Block.Config, any>>, schema: Block.Create.Result.Schema<"_nd-mediaLayout", true, undefined, Schema.ListField<{
11
+ visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
12
+ embedded: Schema.EmbeddedVideoField;
13
+ }>, Schema.Block.Config>;
14
+ type Props = ComponentProps<typeof Component> & {
309
15
  EmbeddedVideoElement?: JSXElementConstructor<EmbeddedVideo.Props>;
310
- layout: Model;
311
16
  };
312
- type Tag = Exclude<HTMLElements.Standard.Container, 'ul' | 'ol' | 'li'>;
313
17
  type Model = Schema.Block.LinkedData<typeof schema>;
314
18
  }
@@ -10,115 +10,50 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  }
11
11
  return t;
12
12
  };
13
- var __importDefault = (this && this.__importDefault) || function (mod) {
14
- return (mod && mod.__esModule) ? mod : { "default": mod };
15
- };
16
13
  Object.defineProperty(exports, "__esModule", { value: true });
17
14
  exports.MediaLayout = MediaLayout;
18
15
  const jsx_runtime_1 = require("react/jsx-runtime");
19
16
  const funnel_core_1 = require("@nascentdigital/funnel-core");
20
- const classnames_1 = __importDefault(require("classnames"));
21
- const react_1 = require("react");
22
17
  const refs_1 = require("../../client/refs");
23
18
  const fields_1 = require("../fields");
24
19
  const panels_1 = require("../panels");
25
- const schema_1 = require("../schema");
20
+ const Block_1 = require("./Block");
26
21
  // block
27
22
  function MediaLayout(_a) {
28
- var _b, _c;
29
- var { className, as, EmbeddedVideoElement = refs_1.EmbeddedVideo, layout } = _a, props = __rest(_a, ["className", "as", "EmbeddedVideoElement", "layout"]);
30
- // dont render if missing model
31
- const { config, fields } = layout !== null && layout !== void 0 ? layout : {};
32
- const items = (_c = (_b = fields === null || fields === void 0 ? void 0 : fields.list) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : [];
33
- if (!layout) {
34
- console.warn('[MediaLayout] attempted to render without items model');
35
- return null;
36
- }
23
+ var { EmbeddedVideoElement = refs_1.EmbeddedVideo, listPanelProps } = _a, props = __rest(_a, ["EmbeddedVideoElement", "listPanelProps"]);
37
24
  // render
38
- return (0, react_1.createElement)(as, Object.assign({ className: (0, classnames_1.default)(className, 'nd-MediaLayout nd-Block-fullbleed',
39
- // MediaLayout.Layout.getClassName(config?.layout?.value),
40
- schema_1.BlockConfig.Presets.ThemeOnly.getClassName(config)) }, props), (0, jsx_runtime_1.jsx)("div", { className: "nd-MediaLayout-content", children: items.map(({ schema, id, value: item }) => (0, jsx_runtime_1.jsx)("div", { className: "nd-MediaLayout-itemWrap", children: funnel_core_1.Schema.EmbeddedVideoField.Value.filter(item)
41
- ?
42
- (0, jsx_runtime_1.jsx)(EmbeddedVideoElement, { className: "nd-MediaLayout-item", video: item })
43
- :
44
- (0, jsx_runtime_1.jsx)(fields_1.Visual, { className: "nd-MediaLayout-item", visual: item }) }, id)) }));
25
+ return ((0, jsx_runtime_1.jsx)(MediaLayout.Component, Object.assign({ listPanelProps: Object.assign(Object.assign({}, listPanelProps), { itemProps: { EmbeddedVideoElement } }) }, props)));
45
26
  }
46
27
  // extension
47
28
  (function (MediaLayout) {
48
- let Layout;
49
- (function (Layout) {
50
- // enum
51
- Layout.Enum = {
52
- poster: { name: 'Poster', hint: 'A large/prominent presentation.' },
53
- '1col': { name: '1 Column', hint: 'All visuals are put into a single column.' },
54
- '2col': { name: '2 Column', hint: 'Split into 2 columns on larger screens.' },
55
- brick: { name: 'Brick', hint: 'A masonry pattern.' },
56
- brickAlt: { name: 'Brick (Flipped)', hint: 'An alternate masonary pattern (reversed direction).' }
57
- };
58
- // schema
59
- Layout.schema = funnel_core_1.Schema.Field.enumeration({
60
- name: 'Layout',
61
- hint: 'Select a media layout',
62
- description: 'Determine how your assets will be presented.',
63
- options: Layout.Enum,
64
- defaultOption: '1col'
65
- });
66
- // helpers
67
- function getClassName(layout) {
68
- switch (layout) {
69
- case 'poster':
70
- return 'nd-MediaLayout-layout-poster';
71
- case '1col':
72
- return 'nd-MediaLayout-layout-1col';
73
- case '2col':
74
- return 'nd-MediaLayout-layout-2col';
75
- case 'brick':
76
- return 'nd-MediaLayout-layout-brick';
77
- case 'brickAlt':
78
- return 'nd-MediaLayout-layout-brickAlt';
79
- default:
80
- console.warn('[MediaLayout] unrecognized layout:', layout);
81
- return 'nd-MediaLayout-layout-poster';
82
- }
83
- }
84
- Layout.getClassName = getClassName;
85
- })(Layout = MediaLayout.Layout || (MediaLayout.Layout = {}));
86
- const fieldsSchema = {
87
- list: funnel_core_1.Schema.Field.list({
88
- name: 'Assets',
89
- description: 'Add one or more assets and then configure the layout.',
90
- itemTypes: {
91
- visual: panels_1.VisualPanel.Fields.visual.unwrap(),
92
- embedded: funnel_core_1.Schema.Field.embeddedVideo({
93
- name: 'Embedded Video',
94
- description: 'A remote streaming video (e.g. YouTube)',
95
- allowMuting: true
96
- })
97
- },
98
- min: 1,
99
- max: 20
100
- })
101
- };
102
- const configSchema = panels_1.BlockPanel.getConfigSchema({
103
- fields: fieldsSchema,
104
- listKey: 'list',
105
- extend: {
106
- mediaLayout: Layout.schema
107
- }
108
- });
109
- MediaLayout.schema = funnel_core_1.Schema.Block.create({
29
+ var _a;
30
+ // factory
31
+ _a = Block_1.Block.create({
110
32
  id: '_nd-mediaLayout',
111
33
  name: 'MediaLayout',
112
34
  version: 1,
113
- config: configSchema,
114
- fields: fieldsSchema,
115
- getConfig: args => panels_1.BlockPanel.getConfig({
116
- args,
117
- listKey: 'list'
118
- }),
119
- getLayout: args => panels_1.BlockPanel.getLayout({
120
- args,
121
- listKey: 'list'
122
- })
123
- });
35
+ className: 'nd-MediaLayout',
36
+ message: true,
37
+ list: {
38
+ schema: funnel_core_1.Schema.Field.list({
39
+ name: 'Assets',
40
+ description: 'Add one or more assets and then configure the layout.',
41
+ itemTypes: {
42
+ visual: panels_1.VisualPanel.Fields.visual.unwrap(),
43
+ embedded: funnel_core_1.Schema.Field.embeddedVideo({
44
+ name: 'Embedded Video',
45
+ description: 'A remote streaming video (e.g. YouTube)',
46
+ allowMuting: true
47
+ })
48
+ },
49
+ min: 1,
50
+ max: 20
51
+ }),
52
+ itemRenderer: (item, { EmbeddedVideoElement }) => ((0, jsx_runtime_1.jsx)("div", { className: "nd-MediaLayout-itemWrap", children: funnel_core_1.Schema.EmbeddedVideoField.Value.filter(item.value)
53
+ ?
54
+ (0, jsx_runtime_1.jsx)(EmbeddedVideoElement, { className: "nd-MediaLayout-item", video: item.value })
55
+ :
56
+ (0, jsx_runtime_1.jsx)(fields_1.Visual, { className: "nd-MediaLayout-item", visual: item.value }) }))
57
+ }
58
+ }), MediaLayout.Component = _a.Component, MediaLayout.schema = _a.schema;
124
59
  })(MediaLayout || (exports.MediaLayout = MediaLayout = {}));
@@ -9,9 +9,9 @@ export declare namespace Message {
9
9
  const schema: Schema.EnumField<Schema.EnumField.Options<Variant>>;
10
10
  function getClassName(variant?: Variant): string;
11
11
  }
12
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<true, true, undefined, {
12
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-message", true, true, undefined, {
13
13
  variant: Schema.EnumField<Schema.EnumField.Options<Variant>>;
14
- }>>, schema: Block.Create.Result.Schema<true, true, undefined, {
14
+ }, any>>, schema: Block.Create.Result.Schema<"_nd-message", true, true, undefined, {
15
15
  variant: Schema.EnumField<Schema.EnumField.Options<Variant>>;
16
16
  }>;
17
17
  type Model = Schema.Block.LinkedData<typeof schema>;
@@ -1,9 +1,10 @@
1
1
  import { Schema } from '@nascentdigital/funnel-core';
2
2
  import { ComponentProps } from 'react';
3
3
  import { Block } from './Block';
4
+ import { OutcomeDetail } from './OutcomeDetail';
4
5
  export declare function Outcome(props: ComponentProps<typeof Outcome.Component>): import("react/jsx-runtime").JSX.Element;
5
6
  export declare namespace Outcome {
6
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<true, true, Schema.ListField<{
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-outcome", true, true, Schema.ListField<{
7
8
  detail: Schema.ObjectField<{
8
9
  title: Schema.Optional<Schema.TextField>;
9
10
  headline: Schema.RichTextField;
@@ -11,7 +12,7 @@ export declare namespace Outcome {
11
12
  icon: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
12
13
  link: Schema.Optional<Schema.LinkField>;
13
14
  }>;
14
- }>, Schema.Block.Config>>, schema: Block.Create.Result.Schema<true, true, Schema.ListField<{
15
+ }>, Schema.Block.Config, OutcomeDetail.Props.Configuration>>, schema: Block.Create.Result.Schema<"_nd-outcome", true, true, Schema.ListField<{
15
16
  detail: Schema.ObjectField<{
16
17
  title: Schema.Optional<Schema.TextField>;
17
18
  headline: Schema.RichTextField;
@@ -291,8 +291,6 @@ export declare namespace OutcomeDetail {
291
291
  icon: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
292
292
  link: Schema.Optional<Schema.LinkField>;
293
293
  }>;
294
- type Model = Schema.Field.LinkedData<typeof schema>;
295
- type Tag = HTMLElements.Standard.Container;
296
294
  type Props<T extends Tag> = Omit<HTMLAttributes<HTMLElements.Standard[T]>, 'children'> & {
297
295
  as: T;
298
296
  titleTag?: Title.Tag;
@@ -300,4 +298,9 @@ export declare namespace OutcomeDetail {
300
298
  captionTag?: Caption.Tag;
301
299
  detail: Model;
302
300
  };
301
+ namespace Props {
302
+ type Configuration = Pick<Partial<Props<Tag>>, 'as' | 'titleTag' | 'headlineTag' | 'captionTag'>;
303
+ }
304
+ type Model = Schema.Field.LinkedData<typeof schema>;
305
+ type Tag = HTMLElements.Standard.Container;
303
306
  }
@@ -1,9 +1,10 @@
1
1
  import { Schema } from '@nascentdigital/funnel-core';
2
2
  import { ComponentProps } from 'react';
3
+ import { UniqueSellingPoint } from '../entities';
3
4
  import { Block } from './Block';
4
5
  export declare function ValueProp(props: ComponentProps<typeof ValueProp.Component>): import("react/jsx-runtime").JSX.Element;
5
6
  export declare namespace ValueProp {
6
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<true, true, Schema.ListField<{
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-valueProp", true, true, Schema.ListField<{
7
8
  item: Schema.CollectionField<Schema.Collection<{
8
9
  icon: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
9
10
  image: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
@@ -11,7 +12,7 @@ export declare namespace ValueProp {
11
12
  caption: Schema.Optional<Schema.RichTextField>;
12
13
  link: Schema.Optional<Schema.LinkField>;
13
14
  }>>;
14
- }>, Schema.Block.Config>>, schema: Block.Create.Result.Schema<true, true, Schema.ListField<{
15
+ }>, Schema.Block.Config, UniqueSellingPoint.Props.Configuration>>, schema: Block.Create.Result.Schema<"_nd-valueProp", true, true, Schema.ListField<{
15
16
  item: Schema.CollectionField<Schema.Collection<{
16
17
  icon: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
17
18
  image: Schema.Optional<Schema.AssetField<Schema.AssetField.LinkedValue.Visual>>;
@@ -297,7 +297,7 @@ export declare namespace Statement {
297
297
  statement: Model;
298
298
  };
299
299
  namespace Props {
300
- type Configuration = Pick<Props<Tag>, 'headlineTag' | 'captionTag'>;
300
+ type Configuration = Pick<Partial<Props<Tag>>, 'as' | 'headlineTag' | 'captionTag'>;
301
301
  }
302
302
  type Tag = HTMLElements.Standard.Container;
303
303
  type Model = Schema.Field.LinkedData<typeof schema>;
@@ -1,14 +1,15 @@
1
1
  import { Schema } from '@nascentdigital/funnel-core';
2
2
  import { ComponentProps } from 'react';
3
3
  import { Block } from '../Block';
4
+ import { Statement } from './Statement';
4
5
  export declare function Summary(props: ComponentProps<typeof Summary.Component>): import("react/jsx-runtime").JSX.Element;
5
6
  export declare namespace Summary {
6
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<true, undefined, Schema.ListField<{
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd_summary", true, undefined, Schema.ListField<{
7
8
  statement: Schema.ObjectField<{
8
9
  headline: Schema.RichTextField;
9
10
  caption: Schema.RichTextField;
10
11
  }>;
11
- }>, Schema.Block.Config>>, schema: Block.Create.Result.Schema<true, undefined, Schema.ListField<{
12
+ }>, Schema.Block.Config, Statement.Props.Configuration>>, schema: Block.Create.Result.Schema<"_nd_summary", true, undefined, Schema.ListField<{
12
13
  statement: Schema.ObjectField<{
13
14
  headline: Schema.RichTextField;
14
15
  caption: Schema.RichTextField;
@@ -307,7 +307,7 @@ export declare namespace Client {
307
307
  displayFields?: ReadonlyArray<DisplayFields.Id>;
308
308
  };
309
309
  namespace Props {
310
- type Configuration = Pick<Props<Tag>, 'nameTag' | 'divisionTag' | 'locationTag' | 'displayFields'>;
310
+ type Configuration = Pick<Partial<Props<Tag>>, 'as' | 'nameTag' | 'divisionTag' | 'locationTag' | 'displayFields'>;
311
311
  }
312
312
  type Value = Schema.Collection.LinkedData<typeof schema>;
313
313
  type Tag = HTMLElements.Standard.Container;
@@ -300,7 +300,7 @@ export declare namespace UniqueSellingPoint {
300
300
  usp: Model;
301
301
  };
302
302
  namespace Props {
303
- type Configuration = Pick<Props<Tag>, 'nameTag' | 'headlineTag' | 'captionTag' | 'displayFields'>;
303
+ type Configuration = Pick<Partial<Props<Tag>>, 'as' | 'nameTag' | 'headlineTag' | 'captionTag' | 'displayFields'>;
304
304
  }
305
305
  type Tag = HTMLElements.Standard.Container;
306
306
  type Model = Schema.Collection.LinkedData<typeof schema>;
@@ -90,4 +90,20 @@ export declare namespace BlockPanel {
90
90
  listKey?: TListKey;
91
91
  };
92
92
  function getLayout<TConfig extends Schema.Block.Config, TFields extends Schema.Fields, TMessageFieldKeys extends Partial<MessagePanel.Fields.Keys> | undefined, TMessageKey extends string, TVisualKey extends Schema.Fields.AssetFields.Keys<TFields>, TListKey extends Schema.Fields.ListFields.Keys<TFields>>({ args, messageFieldKeys, messageKey, visualKey, listKey }: GetLayoutArgs<TConfig, TFields, TMessageFieldKeys, TMessageKey, TVisualKey, TListKey>): BlockLayout;
93
+ namespace GetActivePanels {
94
+ type Args<TFields extends Schema.Fields, TMessageFieldKeys extends Partial<MessagePanel.Fields.Keys> | undefined, TMessageKey extends string | undefined, TVisualKey extends Schema.Fields.AssetFields.Keys<TFields>, TListKey extends Schema.Fields.ListFields.Keys<TFields>> = {
95
+ fields: Partial<Schema.Block.Data.ForFields<TFields>> | Partial<Schema.Block.LinkedData.ForFields<TFields>>;
96
+ messageFieldKeys?: TMessageFieldKeys;
97
+ messageKey?: TMessageKey;
98
+ visualKey?: TVisualKey;
99
+ listKey?: TListKey;
100
+ };
101
+ type Result = {
102
+ message: PanelStatus;
103
+ visual: PanelStatus;
104
+ list: PanelStatus;
105
+ };
106
+ type PanelStatus = 'valid' | 'invalid' | false;
107
+ }
108
+ function getActivePanels<TFields extends Schema.Fields, TMessageFieldKeys extends Partial<MessagePanel.Fields.Keys> | undefined, TMessageKey extends string | undefined, TVisualKey extends Schema.Fields.AssetFields.Keys<TFields>, TListKey extends Schema.Fields.ListFields.Keys<TFields>>({ fields: fieldsRaw, messageFieldKeys, messageKey, visualKey, listKey }: GetActivePanels.Args<TFields, TMessageFieldKeys, TMessageKey, TVisualKey, TListKey>): GetActivePanels.Result;
93
109
  }
@@ -329,16 +329,6 @@ var BlockPanel;
329
329
  .Horizontal.schema.rename(`${visualLabel} ${schema_1.ItemAlignment.Horizontal.schema.name}`)
330
330
  .optional();
331
331
  }
332
- // add message vertical alignment if message and visual is available
333
- // if (messageKey && visualKey) {
334
- // const keys = MessagePanel.Config.getKeys(messageKey)
335
- // configSchema[keys.verticalAlign] = ItemAlignment.Vertical.schema.rename(`${messageLabel} ${ItemAlignment.Vertical.schema.name}`).optional()
336
- // }
337
- // add list vertical alignment if list and visual is available
338
- // if (listKey && visualKey) {
339
- // const keys = ListPanel.Config.getKeys(listKey)
340
- // configSchema[keys.verticalAlign] = ItemAlignment.Vertical.schema.rename(keys.verticalAlign).optional()
341
- // }
342
332
  // add content alignment if there are more than 2 panels
343
333
  if (panelCount > 1) {
344
334
  configSchema['contentAlign'] = schema_1.ItemAlignment.Vertical.schema.rename('Content Alignment').optional();
@@ -349,7 +339,7 @@ var BlockPanel;
349
339
  }
350
340
  BlockPanel.getConfigSchema = getConfigSchema;
351
341
  function getConfig({ args, messageFieldKeys, messageKey, visualKey, listKey }) {
352
- var _a, _b, _c, _d, _e;
342
+ var _a, _b, _c, _d;
353
343
  // throw if there are not enough panels
354
344
  const panelCount = [messageKey, visualKey, listKey].filter(funnel_core_1.Value.isDefined).length;
355
345
  if (panelCount === 0) {
@@ -374,24 +364,23 @@ var BlockPanel;
374
364
  ...Object.values(listKeys)
375
365
  ];
376
366
  // current config helpers
377
- const hasMessage = MessagePanel_1.MessagePanel.Fields.exists(fields, messageFieldKeys);
378
367
  const visual = visualKey
379
368
  ? fields[visualKey]
380
369
  : undefined;
381
- const hasVisual = (visual === null || visual === void 0 ? void 0 : visual.value) !== undefined;
382
- const list = listKey
383
- ? fields[listKey]
384
- : undefined;
385
- const hasList = !!((_a = list === null || list === void 0 ? void 0 : list.value) === null || _a === void 0 ? void 0 : _a.length);
370
+ const panelInfo = getActivePanels({ fields: args.fields, messageFieldKeys, messageKey, visualKey, listKey });
371
+ const activePanels = {
372
+ message: panelInfo.message !== false,
373
+ visual: panelInfo.visual !== false,
374
+ list: panelInfo.list !== false,
375
+ };
386
376
  // get layout schema
387
- const activePanels = { message: hasMessage, visual: hasVisual, list: hasList };
388
377
  const layoutSchema = schema_1.PanelLayout.schemaForPanels(activePanels);
389
- let layout = ((_c = (_b = config.layout) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 'solo');
378
+ let layout = ((_b = (_a = config.layout) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'solo');
390
379
  layout = layoutSchema.isValidOption(layout)
391
380
  ? layout
392
381
  : layoutSchema.defaultOption;
393
382
  const slotVariationSchema = schema_1.SlotVariation.schemaForLayout(layout);
394
- let slotVariation = ((_e = (_d = config.slotVariation) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : 'v1');
383
+ let slotVariation = ((_d = (_c = config.slotVariation) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : 'v1');
395
384
  slotVariation = slotVariationSchema.isValidOption(slotVariation)
396
385
  ? slotVariation
397
386
  : slotVariationSchema.defaultOption;
@@ -403,7 +392,7 @@ var BlockPanel;
403
392
  const flexDirections = Slots.getFlexDirections({ layout, items });
404
393
  // extract message config
405
394
  let messageConfig = undefined;
406
- if (messageKey && hasMessage) {
395
+ if (messageKey && activePanels.message) {
407
396
  messageConfig = MessagePanel_1.MessagePanel.getConfig({
408
397
  messageKey,
409
398
  config: config,
@@ -413,7 +402,7 @@ var BlockPanel;
413
402
  }
414
403
  // extract visual config (if any)
415
404
  let visualConfig = undefined;
416
- if (visualKey && hasVisual) {
405
+ if (visualKey && activePanels.visual) {
417
406
  visualConfig = VisualPanel_1.VisualPanel.getConfig({
418
407
  visualKey,
419
408
  visual,
@@ -423,7 +412,7 @@ var BlockPanel;
423
412
  }
424
413
  // extract list config (if any)
425
414
  let listConfig = undefined;
426
- if (listKey && hasList) {
415
+ if (listKey && activePanels.list) {
427
416
  listConfig = ListPanel_1.ListPanel.getConfig({
428
417
  listKey,
429
418
  config: config,
@@ -460,7 +449,7 @@ var BlockPanel;
460
449
  }
461
450
  BlockPanel.getConfig = getConfig;
462
451
  function getLayout({ args, messageFieldKeys, messageKey, visualKey, listKey }) {
463
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
452
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
464
453
  // throw if there are not enough panels
465
454
  const panelCount = [messageKey, visualKey, listKey].filter(funnel_core_1.Value.isDefined).length;
466
455
  if (panelCount === 0) {
@@ -479,36 +468,40 @@ var BlockPanel;
479
468
  ? ListPanel_1.ListPanel.Config.getKeys(listKey)
480
469
  : {};
481
470
  // current config helpers
482
- const hasMessage = MessagePanel_1.MessagePanel.Fields.exists(fields, messageFieldKeys);
483
- const visual = visualKey
484
- ? fields[visualKey]
485
- : undefined;
486
- const hasVisual = (visual === null || visual === void 0 ? void 0 : visual.value) !== undefined;
487
- const list = listKey
488
- ? fields[listKey]
489
- : undefined;
490
- const hasList = !!((_a = list === null || list === void 0 ? void 0 : list.value) === null || _a === void 0 ? void 0 : _a.length);
471
+ const panelInfo = getActivePanels({ fields: args.fields, messageFieldKeys, messageKey, visualKey, listKey });
472
+ const activePanels = {
473
+ message: panelInfo.message !== false,
474
+ visual: panelInfo.visual !== false,
475
+ list: panelInfo.list !== false,
476
+ };
491
477
  // get layout schema
492
- const activePanels = { message: hasMessage, visual: hasVisual, list: hasList };
493
- const layout = ((_c = (_b = config.layout) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 'solo');
494
- const slotVariation = ((_e = (_d = config.slotVariation) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : 'v1');
478
+ const layout = ((_b = (_a = config.layout) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 'solo');
479
+ const slotVariation = ((_d = (_c = config.slotVariation) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : 'v1');
495
480
  const items = Slots.Items.compute({
496
481
  panels: activePanels,
497
482
  layout,
498
483
  variation: slotVariation
499
484
  });
500
- const contentAlign = (_g = (_f = config.contentAlign) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : 'start';
501
- const messageTextAlign = (_j = (_h = config[messageKeys.textAlign]) === null || _h === void 0 ? void 0 : _h.value) !== null && _j !== void 0 ? _j : 'left';
502
- const messageWidth = (_l = (_k = config[messageKeys.width]) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : 'full';
485
+ // compute content alignment config
486
+ const contentAlign = (_f = (_e = config.contentAlign) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : 'start';
487
+ // compute message config
488
+ const messageWidthRaw = (_g = config[messageKeys.width]) === null || _g === void 0 ? void 0 : _g.value;
489
+ const isMessageFullBleed = messageWidthRaw === 'fullBleed';
490
+ const messageWidth = isMessageFullBleed ? 'full' : (_j = (_h = config[messageKeys.width]) === null || _h === void 0 ? void 0 : _h.value) !== null && _j !== void 0 ? _j : 'full';
491
+ const messageTextAlign = (_l = (_k = config[messageKeys.textAlign]) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : 'left';
503
492
  const messageHorizontalAlign = (_o = (_m = config[messageKeys.horizontalAlign]) === null || _m === void 0 ? void 0 : _m.value) !== null && _o !== void 0 ? _o : 'start';
504
493
  const messageVerticalAlign = (_q = (_p = config[messageKeys.verticalAlign]) === null || _p === void 0 ? void 0 : _p.value) !== null && _q !== void 0 ? _q : 'start';
494
+ // compute visual config
505
495
  const visualAspect = (_s = (_r = config[visualKeys.aspect]) === null || _r === void 0 ? void 0 : _r.value) !== null && _s !== void 0 ? _s : 'auto';
506
496
  const visualWidth = ((_u = (_t = config[visualKeys.width]) === null || _t === void 0 ? void 0 : _t.value) !== null && _u !== void 0 ? _u : 'full');
507
497
  const visualHorizontalAlign = (_w = (_v = config[visualKeys.horizontalAlign]) === null || _v === void 0 ? void 0 : _v.value) !== null && _w !== void 0 ? _w : 'start';
508
498
  const isVisualFullBleed = visualWidth === 'fullBleed';
509
- const listWidth = (_y = (_x = config[listKeys.width]) === null || _x === void 0 ? void 0 : _x.value) !== null && _y !== void 0 ? _y : 'full';
510
- const listHorizontalAlign = (_0 = (_z = config[listKeys.horizontalAlign]) === null || _z === void 0 ? void 0 : _z.value) !== null && _0 !== void 0 ? _0 : 'start';
511
- const listVerticalAlign = (_2 = (_1 = config[listKeys.verticalAlign]) === null || _1 === void 0 ? void 0 : _1.value) !== null && _2 !== void 0 ? _2 : 'start';
499
+ // compute list config
500
+ const listWidthRaw = (_x = config[listKeys.width]) === null || _x === void 0 ? void 0 : _x.value;
501
+ const isListFullBleed = listWidthRaw === 'fullBleed';
502
+ const listWidth = isListFullBleed ? 'full' : (_z = (_y = config[listKeys.width]) === null || _y === void 0 ? void 0 : _y.value) !== null && _z !== void 0 ? _z : 'full';
503
+ const listHorizontalAlign = (_1 = (_0 = config[listKeys.horizontalAlign]) === null || _0 === void 0 ? void 0 : _0.value) !== null && _1 !== void 0 ? _1 : 'start';
504
+ const listVerticalAlign = (_3 = (_2 = config[listKeys.verticalAlign]) === null || _2 === void 0 ? void 0 : _2.value) !== null && _3 !== void 0 ? _3 : 'start';
512
505
  // create visual if we have one
513
506
  let visualSlot = undefined;
514
507
  if (items.includes('V') || schema_1.PanelLayout.isNested(layout)) {
@@ -533,6 +526,7 @@ var BlockPanel;
533
526
  xmlns="nd:block"
534
527
  textAlign="${messageTextAlign}"
535
528
  size="${messageWidth}"
529
+ fullBleed="${isMessageFullBleed}"
536
530
  alignX="${messageHorizontalAlign}"
537
531
  alignY="${messageVerticalAlign}"
538
532
  />
@@ -551,6 +545,7 @@ var BlockPanel;
551
545
  size="${listWidth}"
552
546
  alignX="${listHorizontalAlign}"
553
547
  alignY="${listVerticalAlign}"
548
+ fullBleed="${isListFullBleed}"
554
549
  itemCount="2"
555
550
  />
556
551
  `);
@@ -884,4 +879,34 @@ var BlockPanel;
884
879
  return funnel_core_1.BlockLayout.parse(blockLayout);
885
880
  }
886
881
  BlockPanel.getLayout = getLayout;
882
+ function getActivePanels({ fields: fieldsRaw, messageFieldKeys, messageKey, visualKey, listKey }) {
883
+ var _a;
884
+ // prepare values
885
+ const fields = fieldsRaw;
886
+ const visual = visualKey
887
+ ? fields[visualKey]
888
+ : undefined;
889
+ const list = listKey
890
+ ? fields[listKey]
891
+ : undefined;
892
+ // return result
893
+ return {
894
+ message: messageKey && MessagePanel_1.MessagePanel.Fields.exists(fields, messageFieldKeys)
895
+ ? MessagePanel_1.MessagePanel.Fields.isEmpty(fields, messageFieldKeys)
896
+ ? 'invalid'
897
+ : 'valid'
898
+ : false,
899
+ visual: visual
900
+ ? visual.value
901
+ ? 'valid'
902
+ : 'invalid'
903
+ : false,
904
+ list: list
905
+ ? ((_a = list.value) !== null && _a !== void 0 ? _a : []).length === 0
906
+ ? 'valid'
907
+ : 'invalid'
908
+ : false
909
+ };
910
+ }
911
+ BlockPanel.getActivePanels = getActivePanels;
887
912
  })(BlockPanel || (exports.BlockPanel = BlockPanel = {}));
@@ -3,7 +3,7 @@ import { ReactNode } from 'react';
3
3
  import { HTMLElements } from '../../types';
4
4
  import { ItemAlignment, ItemSize, ListPanelLayout } from '../schema';
5
5
  import { BlockPanel } from './BlockPanel';
6
- export declare function ListPanel<TItem extends ListPanel.Item>({ as, className, panel, layout, items, overrides, children }: ListPanel.Props<TItem>): import("react/jsx-runtime").JSX.Element | undefined;
6
+ export declare function ListPanel<TItem extends ListPanel.Item>({ as, className, panel, layout, items, overrides, children }: ListPanel.Props<TItem>): import("react/jsx-runtime").JSX.Element;
7
7
  export declare namespace ListPanel {
8
8
  namespace Config {
9
9
  type Key<TPrefix extends string = string> = Key.HorizontalAlign<TPrefix> | Key.VerticalAlign<TPrefix> | Key.Width<TPrefix>;
@@ -59,4 +59,5 @@ export declare namespace ListPanel {
59
59
  };
60
60
  }
61
61
  function getConfig<TPrefix extends string>({ listKey, config, flexDirection }: GetConfig.Args<TPrefix>): GetConfig.Result<TPrefix>;
62
+ function ItemPlaceholder(): import("react/jsx-runtime").JSX.Element;
62
63
  }
@@ -13,12 +13,12 @@ const schema_1 = require("../schema");
13
13
  const BlockPanel_1 = require("./BlockPanel");
14
14
  // component
15
15
  function ListPanel({ as = 'ul', className, panel, layout, items, overrides = {}, children }) {
16
- // skip if there's no items
17
- if (items.length === 0) {
18
- return undefined;
19
- }
20
- // render items
21
- const itemsComponent = items.map(item => (0, jsx_runtime_1.jsx)(react_1.Fragment, { children: children(item) }, item.id));
16
+ // render items (or placeholder)
17
+ const itemsComponent = items.length > 0
18
+ ?
19
+ items.map(item => (0, jsx_runtime_1.jsx)(react_1.Fragment, { children: children(item) }, item.id))
20
+ :
21
+ funnel_core_1.ArrayUtils.series(panel.itemCount.base - 1).map(num => (0, jsx_runtime_1.jsx)(ListPanel.ItemPlaceholder, {}, num));
22
22
  // build layout options
23
23
  const { brick, brickFlipped, card, flexWrap, grid, horizontalStack, verticalStack, } = overrides;
24
24
  // render layout
@@ -97,14 +97,11 @@ function ListPanel({ as = 'ul', className, panel, layout, items, overrides = {},
97
97
  const defaultLayout = 'card';
98
98
  const layout = (_b = (_a = config[keys.layout]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : defaultLayout;
99
99
  const defaultWidth = 'md';
100
- const width = (_d = (_c = config[keys.width]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : defaultWidth;
100
+ let width = (_d = (_c = config[keys.width]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : defaultWidth;
101
101
  const defaultHorizontalAlign = 'start';
102
102
  const horizontalAlign = (_f = (_e = config[keys.horizontalAlign]) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : defaultHorizontalAlign;
103
103
  const defaultVerticalAlign = 'start';
104
104
  const verticalAlign = (_h = (_g = config[keys.verticalAlign]) === null || _g === void 0 ? void 0 : _g.value) !== null && _h !== void 0 ? _h : defaultVerticalAlign;
105
- if (width === 'full') {
106
- delete configSchema[keys.horizontalAlign];
107
- }
108
105
  if (flexDirection === 'x') {
109
106
  delete configSchema[keys.verticalAlign];
110
107
  }
@@ -113,10 +110,18 @@ function ListPanel({ as = 'ul', className, panel, layout, items, overrides = {},
113
110
  delete configSchema[keys.horizontalAlign];
114
111
  }
115
112
  else if (flexDirection === 'none') {
116
- delete configSchema[keys.width];
113
+ // update options for width
114
+ const newWidthSchema = schema_1.ItemSize.schema.keepOptions('full', 'fullBleed');
115
+ configSchema[keys.width] = newWidthSchema;
116
+ newWidthSchema.isValidOption(width);
117
+ width = newWidthSchema.isValidOption(width) ? width : 'full';
118
+ // drop unnecessary config
117
119
  delete configSchema[keys.horizontalAlign];
118
120
  delete configSchema[keys.verticalAlign];
119
121
  }
122
+ if (width === 'full' || width === 'fullBleed') {
123
+ delete configSchema[keys.horizontalAlign];
124
+ }
120
125
  return {
121
126
  configSchema,
122
127
  config: {
@@ -134,4 +139,9 @@ function ListPanel({ as = 'ul', className, panel, layout, items, overrides = {},
134
139
  };
135
140
  }
136
141
  ListPanel.getConfig = getConfig;
142
+ // item placeholder
143
+ function ItemPlaceholder() {
144
+ return ((0, jsx_runtime_1.jsx)("div", { className: "nd-ListPanel-itemPlaceholder", children: "No items" }));
145
+ }
146
+ ListPanel.ItemPlaceholder = ItemPlaceholder;
137
147
  })(ListPanel || (exports.ListPanel = ListPanel = {}));
@@ -3,7 +3,7 @@ import { ReactNode } from 'react';
3
3
  import { Caption, Headline, Title } from '../fields';
4
4
  import { ItemAlignment, ItemSize, TextAlignment } from '../schema';
5
5
  import { BlockPanel } from './BlockPanel';
6
- export declare function MessagePanel({ className, panel, titleTag, title, headlineTag, headline, captionTag, caption, ctas: ctasRaw, textAlign, alignX, alignY, size, fullbleed, mobileOrder, decorator }: MessagePanel.Props): import("react/jsx-runtime").JSX.Element | null;
6
+ export declare function MessagePanel({ className, panel, titleTag, title, headlineTag, headline, captionTag, caption, ctas: ctasRaw, textAlign, alignX, alignY, size, fullbleed, mobileOrder, decorator }: MessagePanel.Props): import("react/jsx-runtime").JSX.Element;
7
7
  export declare namespace MessagePanel {
8
8
  type Props = BlockPanel.Props & {
9
9
  className?: string;
@@ -74,6 +74,7 @@ export declare namespace MessagePanel {
74
74
  }
75
75
  function getSchema<TitleKey extends string | undefined, HeadlineKey extends string | undefined, CaptionKey extends string | undefined, CtasKey extends string | undefined>(keys?: Partial<Keys<TitleKey, HeadlineKey, CaptionKey, CtasKey>>): GetSchema.Result<Keys<TitleKey, HeadlineKey, CaptionKey, CtasKey>>;
76
76
  function exists(fields: Record<string, Schema.Field.Data | Schema.Field.LinkedData>, keys?: Partial<Keys>): boolean;
77
+ function isEmpty(fields: Record<string, Schema.Field.Data | Schema.Field.LinkedData>, keys?: Partial<Keys>): boolean;
77
78
  }
78
79
  namespace GetConfig {
79
80
  type ConfigSchema<TPrefix extends string> = Record<Config.Key.TextAlign<TPrefix>, TextAlignment.Schema> & Record<Config.Key.Width<TPrefix>, ItemSize.Schema> & Record<Config.Key.HorizontalAlign<TPrefix>, ItemAlignment.Horizontal.Schema> & Record<Config.Key.VerticalAlign<TPrefix>, ItemAlignment.Vertical.Schema>;
@@ -92,4 +93,5 @@ export declare namespace MessagePanel {
92
93
  };
93
94
  }
94
95
  function getConfig<TPrefix extends string, TFields extends Schema.Fields = Schema.Fields>({ messageKey, config, flexDirection }: GetConfig.Args<TPrefix, TFields>): GetConfig.Result<TPrefix>;
96
+ function Placeholder(): import("react/jsx-runtime").JSX.Element;
95
97
  }
@@ -27,10 +27,6 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
27
27
  }
28
28
  ];
29
29
  }
30
- // don't render if no fields are active
31
- if (!title && !headline && !caption && ctas.length === 0) {
32
- return null;
33
- }
34
30
  // render
35
31
  return ((0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)(className, 'nd-MessagePanel',
36
32
  // base layout
@@ -59,7 +55,8 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
59
55
  center: 'lg:nd-MessagePanel-textCenter',
60
56
  right: 'lg:nd-MessagePanel-textEnd'
61
57
  }
62
- })), children: (0, jsx_runtime_1.jsxs)("div", { className: "nd-BlockPanel-content nd-MessagePanel-content", children: [title &&
58
+ })), children: (0, jsx_runtime_1.jsxs)("div", { className: "nd-BlockPanel-content nd-MessagePanel-content", children: [!title && !headline && !caption && ctas.length === 0 &&
59
+ (0, jsx_runtime_1.jsx)(MessagePanel.Placeholder, {}), title &&
63
60
  (0, jsx_runtime_1.jsx)(fields_1.Title, { className: "nd-MessagePanel-title", as: titleTag, title: title }), headline &&
64
61
  (0, jsx_runtime_1.jsx)(fields_1.Headline, { className: "nd-MessagePanel-headline", as: headlineTag, headline: headline }), caption &&
65
62
  (0, jsx_runtime_1.jsx)(fields_1.Caption, { className: "nd-MessagePanel-caption", as: captionTag, caption: caption }), ctas.length > 0 &&
@@ -146,6 +143,27 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
146
143
  || !!fields[((_d = keys.ctas) !== null && _d !== void 0 ? _d : 'ctas')];
147
144
  }
148
145
  Fields.exists = exists;
146
+ // exists
147
+ function isEmpty(fields, keys = {}) {
148
+ var _a, _b, _c, _d;
149
+ // helper
150
+ const isEmptyText = (key) => {
151
+ var _a;
152
+ const data = fields[key];
153
+ return !data || ((_a = funnel_core_1.Schema.Field.Data.getText(data)) !== null && _a !== void 0 ? _a : '').trim().length === 0;
154
+ };
155
+ const isEmptyList = (key) => {
156
+ var _a;
157
+ const data = fields[key];
158
+ return !data || ((_a = data.value) !== null && _a !== void 0 ? _a : []).length === 0;
159
+ };
160
+ // evaluate
161
+ return isEmptyText((_a = keys.title) !== null && _a !== void 0 ? _a : 'title')
162
+ && isEmptyText((_b = keys.headline) !== null && _b !== void 0 ? _b : 'headline')
163
+ && isEmptyText((_c = keys.caption) !== null && _c !== void 0 ? _c : 'caption')
164
+ && isEmptyList((_d = keys.ctas) !== null && _d !== void 0 ? _d : 'ctas');
165
+ }
166
+ Fields.isEmpty = isEmpty;
149
167
  })(Fields = MessagePanel.Fields || (MessagePanel.Fields = {}));
150
168
  function getConfig({ messageKey, config = {}, flexDirection }) {
151
169
  var _a, _b, _c, _d, _e, _f, _g, _h;
@@ -153,7 +171,7 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
153
171
  const keys = Config.getKeys(messageKey);
154
172
  const configSchema = {
155
173
  [keys.textAlign]: schema_1.TextAlignment.schema,
156
- [keys.width]: schema_1.ItemSize.schema.removeOption('fullBleed'),
174
+ [keys.width]: schema_1.ItemSize.schema,
157
175
  [keys.horizontalAlign]: schema_1.ItemAlignment.Horizontal.schema,
158
176
  [keys.verticalAlign]: schema_1.ItemAlignment.Vertical.schema
159
177
  };
@@ -161,14 +179,11 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
161
179
  const defaultTextAlign = 'left';
162
180
  const textAlign = (_b = (_a = config[keys.textAlign]) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : defaultTextAlign;
163
181
  const defaultWidth = 'full';
164
- const width = (_d = (_c = config[keys.width]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : defaultWidth;
182
+ let width = (_d = (_c = config[keys.width]) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : defaultWidth;
165
183
  const defaultHorizontalAlign = 'start';
166
184
  const horizontalAlign = (_f = (_e = config[keys.horizontalAlign]) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : defaultHorizontalAlign;
167
185
  const defaultVerticalAlign = 'start';
168
186
  const verticalAlign = (_h = (_g = config[keys.verticalAlign]) === null || _g === void 0 ? void 0 : _g.value) !== null && _h !== void 0 ? _h : defaultVerticalAlign;
169
- if (width === 'full') {
170
- delete configSchema[keys.horizontalAlign];
171
- }
172
187
  if (flexDirection === 'x') {
173
188
  delete configSchema[keys.verticalAlign];
174
189
  }
@@ -178,11 +193,20 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
178
193
  delete configSchema[keys.horizontalAlign];
179
194
  }
180
195
  else if (flexDirection === 'none') {
196
+ // update options for width
197
+ const newWidthSchema = schema_1.ItemSize.schema.keepOptions('full', 'fullBleed');
198
+ configSchema[keys.width] = newWidthSchema;
199
+ newWidthSchema.isValidOption(width);
200
+ width = newWidthSchema.isValidOption(width) ? width : 'full';
201
+ // drop unnecessary config
202
+ // drop unnecessary config
181
203
  delete configSchema[keys.textAlign];
182
- delete configSchema[keys.width];
183
204
  delete configSchema[keys.horizontalAlign];
184
205
  delete configSchema[keys.verticalAlign];
185
206
  }
207
+ if (width === 'full' || width === 'fullBleed') {
208
+ delete configSchema[keys.horizontalAlign];
209
+ }
186
210
  // return result
187
211
  return {
188
212
  configSchema,
@@ -201,4 +225,9 @@ function MessagePanel({ className, panel, titleTag = 'span', title, headlineTag
201
225
  };
202
226
  }
203
227
  MessagePanel.getConfig = getConfig;
228
+ // placeholder
229
+ function Placeholder() {
230
+ return ((0, jsx_runtime_1.jsx)("div", { className: "nd-BlockPanel-placeholder nd-MessagePanel-placeholder", children: "No message content" }));
231
+ }
232
+ MessagePanel.Placeholder = Placeholder;
204
233
  })(MessagePanel || (exports.MessagePanel = MessagePanel = {}));
@@ -65,4 +65,5 @@ export declare namespace VisualPanel {
65
65
  };
66
66
  }
67
67
  function getConfig<TPrefix extends string>({ visualKey, visual: visualData, config, flexDirection }: GetConfig.Args<TPrefix>): GetConfig.Result<TPrefix>;
68
+ function Placeholder(): import("react/jsx-runtime").JSX.Element;
68
69
  }
@@ -60,7 +60,11 @@ function VisualPanel({ className, panel, visual, visualDecorator, visualLoading,
60
60
  'nd-VisualPanel-anchor-bottom': anchor === 'bottom',
61
61
  'nd-VisualPanel-anchor-left': anchor === 'left',
62
62
  'nd-VisualPanel-anchor-right': anchor === 'right'
63
- }), children: (0, jsx_runtime_1.jsxs)("div", { className: "nd-BlockPanel-content nd-VisualPanel-content", children: [(0, jsx_runtime_1.jsx)(fields_1.Visual, { className: "nd-VisualPanel-visual", visual: visual, loading: visualLoading }), visualDecorator &&
63
+ }), children: (0, jsx_runtime_1.jsxs)("div", { className: "nd-BlockPanel-content nd-VisualPanel-content", children: [visual
64
+ ?
65
+ (0, jsx_runtime_1.jsx)(fields_1.Visual, { className: "nd-VisualPanel-visual", visual: visual, loading: visualLoading })
66
+ :
67
+ (0, jsx_runtime_1.jsx)(VisualPanel.Placeholder, {}), visualDecorator &&
64
68
  (0, jsx_runtime_1.jsx)("div", { className: "nd-VisualPanel-decorator", children: visualDecorator })] }) }));
65
69
  }
66
70
  // extension
@@ -199,4 +203,9 @@ function VisualPanel({ className, panel, visual, visualDecorator, visualLoading,
199
203
  };
200
204
  }
201
205
  VisualPanel.getConfig = getConfig;
206
+ // placeholder
207
+ function Placeholder() {
208
+ return ((0, jsx_runtime_1.jsx)("div", { className: "nd-BlockPanel-placeholder nd-VisualPanel-placeholder", children: "No visual content" }));
209
+ }
210
+ VisualPanel.Placeholder = Placeholder;
202
211
  })(VisualPanel || (exports.VisualPanel = VisualPanel = {}));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nascentdigital/funnel-ui",
3
3
  "description": "UI components for funnel",
4
- "version": "4.5.0",
4
+ "version": "4.5.1",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/",
7
7
  "access": "restricted"
@@ -70,5 +70,5 @@
70
70
  "react-dom": "^19",
71
71
  "ts-jest": "^29.3.2"
72
72
  },
73
- "gitHead": "09e92177c535f933fe19944aec48a33aadb6e62d"
73
+ "gitHead": "3348c90ff56f3dd931ab564f8a6ad13d454a4ca1"
74
74
  }