@nascentdigital/funnel-ui 4.5.6 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/client/fields/LazyVideo.js +2 -2
  2. package/dist/client/hooks/index.d.ts +1 -0
  3. package/dist/client/hooks/index.js +1 -0
  4. package/dist/client/hooks/useTrackedValue.d.ts +2 -0
  5. package/dist/client/hooks/useTrackedValue.js +23 -0
  6. package/dist/client/interaction/Carousel.js +13 -0
  7. package/dist/server/HTMLContainer.d.ts +289 -0
  8. package/dist/server/HTMLContainer.js +20 -0
  9. package/dist/server/Page.js +1 -1
  10. package/dist/server/blocks/Block.d.ts +17 -8
  11. package/dist/server/blocks/Block.js +21 -24
  12. package/dist/server/blocks/MediaLayout.d.ts +4 -4
  13. package/dist/server/blocks/MediaLayout.js +20 -23
  14. package/dist/server/blocks/Message.d.ts +1 -1
  15. package/dist/server/blocks/RelatedPages.d.ts +3 -3
  16. package/dist/server/blocks/RelatedPages.js +2 -4
  17. package/dist/server/blocks/index.d.ts +0 -9
  18. package/dist/server/blocks/index.js +0 -9
  19. package/dist/server/fields/Visual.js +7 -3
  20. package/dist/server/index.d.ts +1 -1
  21. package/dist/server/index.js +1 -1
  22. package/dist/server/panels/BlockPanel.js +4 -3
  23. package/dist/server/panels/ListPanel.d.ts +1 -1
  24. package/dist/server/panels/ListPanel.js +1 -1
  25. package/dist/server/panels/index.d.ts +0 -1
  26. package/dist/server/panels/index.js +0 -1
  27. package/dist/server/schema/ListPanelLayout.js +6 -6
  28. package/dist/server/schema/index.d.ts +0 -1
  29. package/dist/server/schema/index.js +0 -1
  30. package/dist/styles/blocks/_index.css +1 -9
  31. package/dist/styles/components/Carousel.css +1 -0
  32. package/dist/styles/entities/_index.css +1 -5
  33. package/dist/styles/fields/Visual.css +16 -15
  34. package/dist/styles/layouts/Layout.css +8 -0
  35. package/dist/styles/layouts/MasonryLayout.css +2 -10
  36. package/dist/styles/layouts/_index.css +1 -0
  37. package/dist/styles/panels/VisualPanel.css +17 -19
  38. package/dist/styles/panels/_index.css +0 -1
  39. package/package.json +2 -2
  40. package/dist/server/blocks/Clients.d.ts +0 -25
  41. package/dist/server/blocks/Clients.js +0 -38
  42. package/dist/server/blocks/Outcome.d.ts +0 -25
  43. package/dist/server/blocks/Outcome.js +0 -35
  44. package/dist/server/blocks/OutcomeDetail.d.ts +0 -306
  45. package/dist/server/blocks/OutcomeDetail.js +0 -63
  46. package/dist/server/blocks/Projects.d.ts +0 -35
  47. package/dist/server/blocks/Projects.js +0 -38
  48. package/dist/server/blocks/Stat.d.ts +0 -325
  49. package/dist/server/blocks/Stat.js +0 -107
  50. package/dist/server/blocks/Stats.d.ts +0 -24
  51. package/dist/server/blocks/Stats.js +0 -35
  52. package/dist/server/blocks/Testimonial.d.ts +0 -95
  53. package/dist/server/blocks/Testimonial.js +0 -103
  54. package/dist/server/blocks/Testimonials.d.ts +0 -41
  55. package/dist/server/blocks/Testimonials.js +0 -45
  56. package/dist/server/blocks/ValueProp.d.ts +0 -25
  57. package/dist/server/blocks/ValueProp.js +0 -39
  58. package/dist/server/blocks/summary/Statement.d.ts +0 -304
  59. package/dist/server/blocks/summary/Statement.js +0 -52
  60. package/dist/server/blocks/summary/Summary.d.ts +0 -19
  61. package/dist/server/blocks/summary/Summary.js +0 -34
  62. package/dist/server/blocks/summary/index.d.ts +0 -1
  63. package/dist/server/blocks/summary/index.js +0 -17
  64. package/dist/server/entities/Client.d.ts +0 -327
  65. package/dist/server/entities/Client.js +0 -118
  66. package/dist/server/entities/ClientBadge.d.ts +0 -293
  67. package/dist/server/entities/ClientBadge.js +0 -37
  68. package/dist/server/entities/Person.d.ts +0 -339
  69. package/dist/server/entities/Person.js +0 -148
  70. package/dist/server/entities/Project.d.ts +0 -329
  71. package/dist/server/entities/Project.js +0 -112
  72. package/dist/server/entities/UniqueSellingPoint.d.ts +0 -327
  73. package/dist/server/entities/UniqueSellingPoint.js +0 -119
  74. package/dist/server/entities/index.d.ts +0 -6
  75. package/dist/server/entities/index.js +0 -22
  76. package/dist/server/entities/previews/MessagePreview.d.ts +0 -299
  77. package/dist/server/entities/previews/MessagePreview.js +0 -41
  78. package/dist/server/entities/previews/PagePreview.d.ts +0 -10
  79. package/dist/server/entities/previews/PagePreview.js +0 -42
  80. package/dist/server/entities/previews/index.d.ts +0 -2
  81. package/dist/server/entities/previews/index.js +0 -18
  82. package/dist/server/panels/TestimonialPanel.d.ts +0 -73
  83. package/dist/server/panels/TestimonialPanel.js +0 -96
  84. package/dist/server/schema/CollectionSchema.d.ts +0 -4
  85. package/dist/server/schema/CollectionSchema.js +0 -15
  86. package/dist/styles/blocks/Clients.css +0 -9
  87. package/dist/styles/blocks/Outcome.css +0 -46
  88. package/dist/styles/blocks/Projects.css +0 -9
  89. package/dist/styles/blocks/RelatedPages.css +0 -13
  90. package/dist/styles/blocks/Stat.css +0 -45
  91. package/dist/styles/blocks/Stats.css +0 -9
  92. package/dist/styles/blocks/Summary.css +0 -15
  93. package/dist/styles/blocks/Testimonial.css +0 -6
  94. package/dist/styles/blocks/ValueProp.css +0 -9
  95. package/dist/styles/entities/ClientBadge.css +0 -14
  96. package/dist/styles/entities/Person.css +0 -76
  97. package/dist/styles/entities/Project.css +0 -50
  98. package/dist/styles/entities/UniqueSellingPoint.css +0 -54
  99. package/dist/styles/panels/TestimonialPanel.css +0 -68
@@ -92,8 +92,8 @@ function LazyVideo(_a) {
92
92
  'nd-LazyVideo-loading': videoVisible && !videoReady,
93
93
  'nd-LazyVideo-ready': videoReady
94
94
  }), style: {
95
- '--nd-visual-width': width ? `${width}` : '1',
96
- '--nd-visual-height': height ? `${height}` : '1'
95
+ '--_nd-visual-native-width': width ? `${width}` : '1',
96
+ '--_nd-visual-native-height': height ? `${height}` : '1'
97
97
  }, children: (0, jsx_runtime_1.jsxs)("div", { className: "nd-LazyVideo-content", children: [blurHash &&
98
98
  (0, jsx_runtime_1.jsx)("canvas", { ref: blurCanvasRef, className: "nd-LazyVideo-blurHash", width: 32, height: 32, draggable: false }), (0, jsx_runtime_1.jsxs)("video", { ref: videoRef, className: (0, classnames_1.default)('nd-LazyVideo-video'), preload: "none", autoPlay: true, muted: true, loop: true, playsInline: true, children: [state !== 'uninitialized' &&
99
99
  (0, jsx_runtime_1.jsx)("source", { src: url, type: type }), "Your browser does not support the video content."] })] }) })));
@@ -22,5 +22,6 @@ export * from './useResponsiveValue';
22
22
  export * from './useRouter';
23
23
  export * from './useSafeLayoutEffect';
24
24
  export * from './useTouch';
25
+ export * from './useTrackedValue';
25
26
  export * from './useViewportSize';
26
27
  export * from './useWindowScrolled';
@@ -38,5 +38,6 @@ __exportStar(require("./useResponsiveValue"), exports);
38
38
  __exportStar(require("./useRouter"), exports);
39
39
  __exportStar(require("./useSafeLayoutEffect"), exports);
40
40
  __exportStar(require("./useTouch"), exports);
41
+ __exportStar(require("./useTrackedValue"), exports);
41
42
  __exportStar(require("./useViewportSize"), exports);
42
43
  __exportStar(require("./useWindowScrolled"), exports);
@@ -0,0 +1,2 @@
1
+ import { TrackedValue } from '@nascentdigital/funnel-core';
2
+ export declare function useTrackedValue<TValue>(value: TValue): TrackedValue<TValue>;
@@ -0,0 +1,23 @@
1
+ 'use client';
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.useTrackedValue = useTrackedValue;
5
+ const funnel_core_1 = require("@nascentdigital/funnel-core");
6
+ const react_1 = require("react");
7
+ // hook
8
+ function useTrackedValue(value) {
9
+ // fetch prev value
10
+ const prevValueRef = (0, react_1.useRef)(value);
11
+ const prevValue = prevValueRef.current;
12
+ // determine if changed (replace if it did)
13
+ const changed = !(value === prevValue || funnel_core_1.Value.equals(value, prevValue));
14
+ if (changed) {
15
+ prevValueRef.current = value;
16
+ }
17
+ // return update
18
+ return {
19
+ changed,
20
+ previous: prevValue,
21
+ current: changed ? value : prevValue
22
+ };
23
+ }
@@ -36,6 +36,19 @@ function Carousel({ className, spacing = 0, infinite = false, autoplay = false,
36
36
  const uiLock = (0, hooks_1.useUILock)(container);
37
37
  const playButtonFocused = !!playButton && keyboardFocusElement === playButton;
38
38
  const childCount = children.length;
39
+ const gap = (0, react_2.useMemo)(() => {
40
+ if (!container) {
41
+ return;
42
+ }
43
+ const rawValue = getComputedStyle(container).getPropertyValue('--nd-carousel-gap');
44
+ if (rawValue.endsWith('px')) {
45
+ return Number.parseInt(rawValue.substring(0, rawValue.length - 2));
46
+ }
47
+ else {
48
+ return undefined;
49
+ }
50
+ }, [container]);
51
+ console.debug('>>> carousel', gap);
39
52
  const appConfig = (0, app_1.useAppConfig)();
40
53
  const autoplayInterval = (0, react_2.useMemo)(() => { var _a; return funnel_core_1.Duration.toMilliseconds((_a = autoplayIntervalRaw !== null && autoplayIntervalRaw !== void 0 ? autoplayIntervalRaw : appConfig.ui.carouselInterval) !== null && _a !== void 0 ? _a : '1s'); }, [autoplayIntervalRaw, appConfig]);
41
54
  const reduceMotion = (0, react_1.useReducedMotion)();
@@ -0,0 +1,289 @@
1
+ import { HTMLAttributes } from 'react';
2
+ import { HTMLElements } from '../types';
3
+ export declare function HTMLContainer<TTag extends HTMLContainer.Tag>({ tag, children, ...props }: HTMLContainer.Props<TTag>): import("react").DetailedReactHTMLElement<{
4
+ defaultChecked?: boolean | undefined;
5
+ defaultValue?: string | number | readonly string[] | undefined;
6
+ suppressContentEditableWarning?: boolean | undefined;
7
+ suppressHydrationWarning?: boolean | undefined;
8
+ accessKey?: string | undefined;
9
+ autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
10
+ autoFocus?: boolean | undefined;
11
+ className?: string | undefined;
12
+ contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
13
+ contextMenu?: string | undefined;
14
+ dir?: string | undefined;
15
+ draggable?: (boolean | "true" | "false") | undefined;
16
+ enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
17
+ hidden?: boolean | undefined;
18
+ id?: string | undefined;
19
+ lang?: string | undefined;
20
+ nonce?: string | undefined;
21
+ slot?: string | undefined;
22
+ spellCheck?: (boolean | "true" | "false") | undefined;
23
+ style?: import("react").CSSProperties | undefined;
24
+ tabIndex?: number | undefined;
25
+ title?: string | undefined;
26
+ translate?: "yes" | "no" | undefined;
27
+ radioGroup?: string | undefined;
28
+ role?: import("react").AriaRole | undefined;
29
+ about?: string | undefined;
30
+ content?: string | undefined;
31
+ datatype?: string | undefined;
32
+ inlist?: any;
33
+ prefix?: string | undefined;
34
+ property?: string | undefined;
35
+ rel?: string | undefined;
36
+ resource?: string | undefined;
37
+ rev?: string | undefined;
38
+ typeof?: string | undefined;
39
+ vocab?: string | undefined;
40
+ autoCorrect?: string | undefined;
41
+ autoSave?: string | undefined;
42
+ color?: string | undefined;
43
+ itemProp?: string | undefined;
44
+ itemScope?: boolean | undefined;
45
+ itemType?: string | undefined;
46
+ itemID?: string | undefined;
47
+ itemRef?: string | undefined;
48
+ results?: number | undefined;
49
+ security?: string | undefined;
50
+ unselectable?: "on" | "off" | undefined;
51
+ popover?: "" | "auto" | "manual" | "hint" | undefined;
52
+ popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
53
+ popoverTarget?: string | undefined;
54
+ inert?: boolean | undefined;
55
+ inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
56
+ is?: string | undefined;
57
+ exportparts?: string | undefined;
58
+ part?: string | undefined;
59
+ "aria-activedescendant"?: string | undefined;
60
+ "aria-atomic"?: (boolean | "true" | "false") | undefined;
61
+ "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
62
+ "aria-braillelabel"?: string | undefined;
63
+ "aria-brailleroledescription"?: string | undefined;
64
+ "aria-busy"?: (boolean | "true" | "false") | undefined;
65
+ "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
66
+ "aria-colcount"?: number | undefined;
67
+ "aria-colindex"?: number | undefined;
68
+ "aria-colindextext"?: string | undefined;
69
+ "aria-colspan"?: number | undefined;
70
+ "aria-controls"?: string | undefined;
71
+ "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
72
+ "aria-describedby"?: string | undefined;
73
+ "aria-description"?: string | undefined;
74
+ "aria-details"?: string | undefined;
75
+ "aria-disabled"?: (boolean | "true" | "false") | undefined;
76
+ "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
77
+ "aria-errormessage"?: string | undefined;
78
+ "aria-expanded"?: (boolean | "true" | "false") | undefined;
79
+ "aria-flowto"?: string | undefined;
80
+ "aria-grabbed"?: (boolean | "true" | "false") | undefined;
81
+ "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
82
+ "aria-hidden"?: (boolean | "true" | "false") | undefined;
83
+ "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
84
+ "aria-keyshortcuts"?: string | undefined;
85
+ "aria-label"?: string | undefined;
86
+ "aria-labelledby"?: string | undefined;
87
+ "aria-level"?: number | undefined;
88
+ "aria-live"?: "off" | "assertive" | "polite" | undefined;
89
+ "aria-modal"?: (boolean | "true" | "false") | undefined;
90
+ "aria-multiline"?: (boolean | "true" | "false") | undefined;
91
+ "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
92
+ "aria-orientation"?: "horizontal" | "vertical" | undefined;
93
+ "aria-owns"?: string | undefined;
94
+ "aria-placeholder"?: string | undefined;
95
+ "aria-posinset"?: number | undefined;
96
+ "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
97
+ "aria-readonly"?: (boolean | "true" | "false") | undefined;
98
+ "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
99
+ "aria-required"?: (boolean | "true" | "false") | undefined;
100
+ "aria-roledescription"?: string | undefined;
101
+ "aria-rowcount"?: number | undefined;
102
+ "aria-rowindex"?: number | undefined;
103
+ "aria-rowindextext"?: string | undefined;
104
+ "aria-rowspan"?: number | undefined;
105
+ "aria-selected"?: (boolean | "true" | "false") | undefined;
106
+ "aria-setsize"?: number | undefined;
107
+ "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
108
+ "aria-valuemax"?: number | undefined;
109
+ "aria-valuemin"?: number | undefined;
110
+ "aria-valuenow"?: number | undefined;
111
+ "aria-valuetext"?: string | undefined;
112
+ dangerouslySetInnerHTML?: {
113
+ __html: string | TrustedHTML;
114
+ } | undefined;
115
+ onCopy?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
116
+ onCopyCapture?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
117
+ onCut?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
118
+ onCutCapture?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
119
+ onPaste?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
120
+ onPasteCapture?: import("react").ClipboardEventHandler<HTMLElements[TTag]> | undefined;
121
+ onCompositionEnd?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
122
+ onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
123
+ onCompositionStart?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
124
+ onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
125
+ onCompositionUpdate?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
126
+ onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLElements[TTag]> | undefined;
127
+ onFocus?: import("react").FocusEventHandler<HTMLElements[TTag]> | undefined;
128
+ onFocusCapture?: import("react").FocusEventHandler<HTMLElements[TTag]> | undefined;
129
+ onBlur?: import("react").FocusEventHandler<HTMLElements[TTag]> | undefined;
130
+ onBlurCapture?: import("react").FocusEventHandler<HTMLElements[TTag]> | undefined;
131
+ onChange?: import("react").ChangeEventHandler<HTMLElements[TTag], Element> | undefined;
132
+ onChangeCapture?: import("react").ChangeEventHandler<HTMLElements[TTag], Element> | undefined;
133
+ onBeforeInput?: import("react").InputEventHandler<HTMLElements[TTag]> | undefined;
134
+ onBeforeInputCapture?: import("react").InputEventHandler<HTMLElements[TTag]> | undefined;
135
+ onInput?: import("react").InputEventHandler<HTMLElements[TTag]> | undefined;
136
+ onInputCapture?: import("react").InputEventHandler<HTMLElements[TTag]> | undefined;
137
+ onReset?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
138
+ onResetCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
139
+ onSubmit?: import("react").SubmitEventHandler<HTMLElements[TTag]> | undefined;
140
+ onSubmitCapture?: import("react").SubmitEventHandler<HTMLElements[TTag]> | undefined;
141
+ onInvalid?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
142
+ onInvalidCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
143
+ onLoad?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
144
+ onLoadCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
145
+ onError?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
146
+ onErrorCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
147
+ onKeyDown?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
148
+ onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
149
+ onKeyPress?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
150
+ onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
151
+ onKeyUp?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
152
+ onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLElements[TTag]> | undefined;
153
+ onAbort?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
154
+ onAbortCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
155
+ onCanPlay?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
156
+ onCanPlayCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
157
+ onCanPlayThrough?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
158
+ onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
159
+ onDurationChange?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
160
+ onDurationChangeCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
161
+ onEmptied?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
162
+ onEmptiedCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
163
+ onEncrypted?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
164
+ onEncryptedCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
165
+ onEnded?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
166
+ onEndedCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
167
+ onLoadedData?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
168
+ onLoadedDataCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
169
+ onLoadedMetadata?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
170
+ onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
171
+ onLoadStart?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
172
+ onLoadStartCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
173
+ onPause?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
174
+ onPauseCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
175
+ onPlay?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
176
+ onPlayCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
177
+ onPlaying?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
178
+ onPlayingCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
179
+ onProgress?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
180
+ onProgressCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
181
+ onRateChange?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
182
+ onRateChangeCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
183
+ onSeeked?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
184
+ onSeekedCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
185
+ onSeeking?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
186
+ onSeekingCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
187
+ onStalled?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
188
+ onStalledCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
189
+ onSuspend?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
190
+ onSuspendCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
191
+ onTimeUpdate?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
192
+ onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
193
+ onVolumeChange?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
194
+ onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
195
+ onWaiting?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
196
+ onWaitingCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
197
+ onAuxClick?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
198
+ onAuxClickCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
199
+ onClick?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
200
+ onClickCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
201
+ onContextMenu?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
202
+ onContextMenuCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
203
+ onDoubleClick?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
204
+ onDoubleClickCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
205
+ onDrag?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
206
+ onDragCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
207
+ onDragEnd?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
208
+ onDragEndCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
209
+ onDragEnter?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
210
+ onDragEnterCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
211
+ onDragExit?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
212
+ onDragExitCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
213
+ onDragLeave?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
214
+ onDragLeaveCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
215
+ onDragOver?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
216
+ onDragOverCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
217
+ onDragStart?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
218
+ onDragStartCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
219
+ onDrop?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
220
+ onDropCapture?: import("react").DragEventHandler<HTMLElements[TTag]> | undefined;
221
+ onMouseDown?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
222
+ onMouseDownCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
223
+ onMouseEnter?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
224
+ onMouseLeave?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
225
+ onMouseMove?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
226
+ onMouseMoveCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
227
+ onMouseOut?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
228
+ onMouseOutCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
229
+ onMouseOver?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
230
+ onMouseOverCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
231
+ onMouseUp?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
232
+ onMouseUpCapture?: import("react").MouseEventHandler<HTMLElements[TTag]> | undefined;
233
+ onSelect?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
234
+ onSelectCapture?: import("react").ReactEventHandler<HTMLElements[TTag]> | undefined;
235
+ onTouchCancel?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
236
+ onTouchCancelCapture?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
237
+ onTouchEnd?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
238
+ onTouchEndCapture?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
239
+ onTouchMove?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
240
+ onTouchMoveCapture?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
241
+ onTouchStart?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
242
+ onTouchStartCapture?: import("react").TouchEventHandler<HTMLElements[TTag]> | undefined;
243
+ onPointerDown?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
244
+ onPointerDownCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
245
+ onPointerMove?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
246
+ onPointerMoveCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
247
+ onPointerUp?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
248
+ onPointerUpCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
249
+ onPointerCancel?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
250
+ onPointerCancelCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
251
+ onPointerEnter?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
252
+ onPointerLeave?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
253
+ onPointerOver?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
254
+ onPointerOverCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
255
+ onPointerOut?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
256
+ onPointerOutCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
257
+ onGotPointerCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
258
+ onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
259
+ onLostPointerCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
260
+ onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElements[TTag]> | undefined;
261
+ onScroll?: import("react").UIEventHandler<HTMLElements[TTag]> | undefined;
262
+ onScrollCapture?: import("react").UIEventHandler<HTMLElements[TTag]> | undefined;
263
+ onScrollEnd?: import("react").UIEventHandler<HTMLElements[TTag]> | undefined;
264
+ onScrollEndCapture?: import("react").UIEventHandler<HTMLElements[TTag]> | undefined;
265
+ onWheel?: import("react").WheelEventHandler<HTMLElements[TTag]> | undefined;
266
+ onWheelCapture?: import("react").WheelEventHandler<HTMLElements[TTag]> | undefined;
267
+ onAnimationStart?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
268
+ onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
269
+ onAnimationEnd?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
270
+ onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
271
+ onAnimationIteration?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
272
+ onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLElements[TTag]> | undefined;
273
+ onToggle?: import("react").ToggleEventHandler<HTMLElements[TTag]> | undefined;
274
+ onBeforeToggle?: import("react").ToggleEventHandler<HTMLElements[TTag]> | undefined;
275
+ onTransitionCancel?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
276
+ onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
277
+ onTransitionEnd?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
278
+ onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
279
+ onTransitionRun?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
280
+ onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
281
+ onTransitionStart?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
282
+ onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLElements[TTag]> | undefined;
283
+ }, HTMLElement>;
284
+ export declare namespace HTMLContainer {
285
+ type Tag = HTMLElements.Standard.Container;
286
+ type Props<TTag extends Tag = 'div'> = HTMLAttributes<HTMLElements[TTag]> & {
287
+ tag: TTag;
288
+ };
289
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.HTMLContainer = HTMLContainer;
15
+ const react_1 = require("react");
16
+ // component
17
+ function HTMLContainer(_a) {
18
+ var { tag, children } = _a, props = __rest(_a, ["tag", "children"]);
19
+ return (0, react_1.createElement)(tag, props, children);
20
+ }
@@ -14,7 +14,7 @@ function Page({ className, children }) {
14
14
  const blocks = react_1.Children.toArray(children)
15
15
  .flatMap(element => element);
16
16
  const groupedBlocks = groupBlocks(blocks);
17
- console.debug('[Page] children', { groupedBlocks, blocks, children });
17
+ // console.debug('[Page] children', {groupedBlocks, blocks, children})
18
18
  // render
19
19
  return ((0, jsx_runtime_1.jsx)("main", { className: (0, classnames_1.default)(className, 'nd-Page'), children: groupedBlocks.map((blockGroup, index) => {
20
20
  var _a, _b, _c;
@@ -2,7 +2,7 @@ import { BlockLayout, Schema, Transform } from '@nascentdigital/funnel-core';
2
2
  import { FunctionComponent, ReactElement, ReactNode } from 'react';
3
3
  import { HTMLBlockElement } from '../../types';
4
4
  import { BlockPanel, ListPanel, MessagePanel, VisualPanel } from '../panels';
5
- import { BlockConfig } from '../schema';
5
+ import { BlockConfig, ListPanelLayout } from '../schema';
6
6
  export declare function Block({ className, config, layout, renderPanel, ...props }: Block.Props): import("react/jsx-runtime").JSX.Element;
7
7
  export declare namespace Block {
8
8
  type Props = HTMLBlockElement<'div'> & {
@@ -24,14 +24,11 @@ export declare namespace Block {
24
24
  className?: string;
25
25
  message?: TMessage;
26
26
  visual?: TVisual;
27
- list?: {
28
- schema: TList;
29
- itemRenderer: TList extends Schema.ListField<infer TContent> ? (item: Schema.ListField.LinkedValue.ForItem<TContent>, itemProps: TItemProps) => ReactNode : never;
30
- };
27
+ list?: TList;
31
28
  extendConfigSchema?: TExtend;
32
29
  };
33
30
  type Result<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
34
- Component: FunctionComponent<Result.Component<TBlockId, TMessage, TVisual, TList, TExtend, TItemProps>>;
31
+ Component: FunctionComponent<Result.ComponentProps<TBlockId, TMessage, TVisual, TList, TExtend, TItemProps>>;
35
32
  schema: Result.Schema<TBlockId, TMessage, TVisual, TList, TExtend>;
36
33
  };
37
34
  namespace Result {
@@ -40,7 +37,7 @@ export declare namespace Block {
40
37
  } : {}));
41
38
  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>;
42
39
  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>>;
43
- type Component<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
40
+ type ComponentProps<TBlockId extends string, TMessage extends boolean | undefined, TVisual extends boolean | undefined, TList extends Schema.ListField | undefined, TExtend extends Schema.Block.Config, TItemProps> = {
44
41
  className?: string;
45
42
  model: Schema.Block.LinkedData<Schema<TBlockId, TMessage, TVisual, TList, TExtend>>;
46
43
  } & ((TMessage extends true ? {
@@ -49,9 +46,21 @@ export declare namespace Block {
49
46
  visualPanelProps?: VisualPanel.Props.Configuration;
50
47
  } : {}) & (TList extends Schema.ListField ? {
51
48
  listPanelProps?: ListPanel.Props.Configuration & {
52
- itemProps: TItemProps;
49
+ itemProps?: TItemProps;
53
50
  };
51
+ children: TList extends Schema.ListField<infer TContent> ? (args: ComponentProps.RenderItemArgs<TContent, TItemProps>) => ReactNode : never;
54
52
  } : {})) & HTMLBlockElement<'div'>;
53
+ namespace ComponentProps {
54
+ type ForMessage = ComponentProps<string, true, undefined, undefined, {}, unknown>;
55
+ type ForVisual = ComponentProps<string, undefined, true, undefined, {}, unknown>;
56
+ type ForList = ComponentProps<string, undefined, undefined, Schema.ListField, {}, any>;
57
+ type RenderItemArgs<TItem extends Schema.ListField.Content, TItemProps> = {
58
+ item: Schema.ListField.LinkedValue.ForItem<TItem>;
59
+ itemProps: TItemProps;
60
+ listLayout: ListPanelLayout;
61
+ blockLayout: BlockLayout;
62
+ };
63
+ }
55
64
  }
56
65
  }
57
66
  function filterNode(node: ReactNode): node is ReactElement<Props>;
@@ -63,7 +63,7 @@ function Block(_a) {
63
63
  panelKeyMapping.visualKey = 'visual';
64
64
  }
65
65
  if (list) {
66
- fieldsSchema = Object.assign(Object.assign({}, fieldsSchema), { list: list.schema });
66
+ fieldsSchema = Object.assign(Object.assign({}, fieldsSchema), { list });
67
67
  panelKeyMapping.listKey = 'list';
68
68
  }
69
69
  // create config schema
@@ -89,44 +89,41 @@ function Block(_a) {
89
89
  // create schema
90
90
  const { schema, panelKeyMapping } = createSchema(args);
91
91
  // component
92
- const Component = (_a) => {
93
- var _b, _c;
94
- var { className, model } = _a, props = __rest(_a, ["className", "model"]);
92
+ const Component = (props) => {
93
+ var _a, _b;
95
94
  // skip if no model
96
- if (!model) {
95
+ if (!props.model) {
97
96
  console.warn('[Block] attempted to render block without model');
98
97
  return null;
99
98
  }
100
- // destructure
101
- const config = (_b = model.config) !== null && _b !== void 0 ? _b : {};
102
- const fields = (_c = model.fields) !== null && _c !== void 0 ? _c : {};
103
- // panel layout
104
- const layout = panels_1.BlockPanel.getLayout(Object.assign({ args: { fields, config } }, panelKeyMapping));
105
- // FIXME: internal typing of fields, props, and config need some work
99
+ // layout
100
+ const blockLayout = panels_1.BlockPanel.getLayout(Object.assign({ args: {
101
+ fields: (_a = props.model.fields) !== null && _a !== void 0 ? _a : {},
102
+ config: (_b = props.model.config) !== null && _b !== void 0 ? _b : {}
103
+ } }, panelKeyMapping));
106
104
  const getPanel = ({ className, panel }) => {
107
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
105
+ var _a, _b, _c, _d, _e, _f, _g, _h;
108
106
  switch (panel.type) {
109
107
  case 'message': {
110
- const messagePanelFields = fields;
111
- const _m = (_a = props === null || props === void 0 ? void 0 : props.messagePanelProps) !== null && _a !== void 0 ? _a : {}, { className: messagePanelClassname } = _m, messagePanelProps = __rest(_m, ["className"]);
112
- return ((0, jsx_runtime_1.jsx)(panels_1.MessagePanel, Object.assign({ className: (0, classnames_1.default)(className, messagePanelClassname), panel: panel, title: (_b = messagePanelFields.title) === null || _b === void 0 ? void 0 : _b.value, headline: (_c = messagePanelFields.headline) === null || _c === void 0 ? void 0 : _c.value, caption: (_d = messagePanelFields.caption) === null || _d === void 0 ? void 0 : _d.value, ctas: (_e = messagePanelFields.ctas) === null || _e === void 0 ? void 0 : _e.value }, messagePanelProps)));
108
+ const { model: { fields }, messagePanelProps } = props;
109
+ const _j = messagePanelProps !== null && messagePanelProps !== void 0 ? messagePanelProps : {}, { className: panelClassName } = _j, panelProps = __rest(_j, ["className"]);
110
+ return ((0, jsx_runtime_1.jsx)(panels_1.MessagePanel, Object.assign({ className: (0, classnames_1.default)(className, panelClassName), panel: panel, title: (_a = fields === null || fields === void 0 ? void 0 : fields.title) === null || _a === void 0 ? void 0 : _a.value, headline: (_b = fields === null || fields === void 0 ? void 0 : fields.headline) === null || _b === void 0 ? void 0 : _b.value, caption: (_c = fields === null || fields === void 0 ? void 0 : fields.caption) === null || _c === void 0 ? void 0 : _c.value, ctas: (_d = fields === null || fields === void 0 ? void 0 : fields.ctas) === null || _d === void 0 ? void 0 : _d.value }, panelProps)));
113
111
  }
114
112
  case 'visual': {
115
- const visualPanelFields = fields;
116
- const visualPanelConfig = config;
117
- const _o = (_f = props === null || props === void 0 ? void 0 : props.visualPanelProps) !== null && _f !== void 0 ? _f : {}, { className: visualPanelClassname } = _o, visualPanelProps = __rest(_o, ["className"]);
118
- return ((0, jsx_runtime_1.jsx)(panels_1.VisualPanel, Object.assign({ className: (0, classnames_1.default)(className, visualPanelClassname), panel: panel, visual: (_g = visualPanelFields.visual) === null || _g === void 0 ? void 0 : _g.value, anchor: (_h = funnel_core_1.Schema.EnumField.Value.fromData(visualPanelConfig.visualAnchor)) !== null && _h !== void 0 ? _h : 'center' }, visualPanelProps)));
113
+ const { model: { fields, config }, visualPanelProps } = props;
114
+ const _k = visualPanelProps !== null && visualPanelProps !== void 0 ? visualPanelProps : {}, { className: panelClassName } = _k, panelProps = __rest(_k, ["className"]);
115
+ return ((0, jsx_runtime_1.jsx)(panels_1.VisualPanel, Object.assign({ className: (0, classnames_1.default)(className, panelClassName), panel: panel, visual: (_e = fields === null || fields === void 0 ? void 0 : fields.visual) === null || _e === void 0 ? void 0 : _e.value, anchor: (_f = funnel_core_1.Schema.EnumField.Value.fromData(config === null || config === void 0 ? void 0 : config.visualAnchor)) !== null && _f !== void 0 ? _f : 'center' }, panelProps)));
119
116
  }
120
117
  case 'list': {
121
- const listPanelFields = fields;
122
- const listPanelConfig = config;
123
- const _p = (_j = props === null || props === void 0 ? void 0 : props.listPanelProps) !== null && _j !== void 0 ? _j : {}, { className: listPanelClassname, itemProps } = _p, listPanelProps = __rest(_p, ["className", "itemProps"]);
124
- return ((0, jsx_runtime_1.jsx)(panels_1.ListPanel, Object.assign({ className: (0, classnames_1.default)(className, listPanelClassname), panel: panel, layout: ((_k = funnel_core_1.Schema.EnumField.Value.fromData(listPanelConfig.listLayout)) !== null && _k !== void 0 ? _k : 'card'), items: (_l = listPanelFields.list) === null || _l === void 0 ? void 0 : _l.value }, listPanelProps, { children: item => { var _a; return (_a = args.list) === null || _a === void 0 ? void 0 : _a.itemRenderer(item, itemProps); } })));
118
+ const { model: { fields, config }, listPanelProps, children } = props;
119
+ const _l = listPanelProps !== null && listPanelProps !== void 0 ? listPanelProps : {}, { className: panelClassName, itemProps } = _l, panelProps = __rest(_l, ["className", "itemProps"]);
120
+ const listLayout = (_g = funnel_core_1.Schema.EnumField.Value.fromData(config === null || config === void 0 ? void 0 : config.listLayout)) !== null && _g !== void 0 ? _g : 'card';
121
+ return ((0, jsx_runtime_1.jsx)(panels_1.ListPanel, Object.assign({ className: (0, classnames_1.default)(className, panelClassName), panel: panel, layout: listLayout, items: (_h = fields === null || fields === void 0 ? void 0 : fields.list) === null || _h === void 0 ? void 0 : _h.value }, panelProps, { children: item => children({ item, itemProps, listLayout, blockLayout }) })));
125
122
  }
126
123
  }
127
124
  };
128
125
  // render block
129
- return ((0, jsx_runtime_1.jsx)(Block, { id: props.id, className: (0, classnames_1.default)(className, args.className), config: config, layout: layout, renderPanel: getPanel }));
126
+ return ((0, jsx_runtime_1.jsx)(Block, { id: props.id, className: (0, classnames_1.default)(props.className, args.className), config: props.model.config, layout: blockLayout, renderPanel: getPanel }));
130
127
  };
131
128
  // return
132
129
  return {
@@ -2,17 +2,17 @@ import { Schema } from '@nascentdigital/funnel-core';
2
2
  import { ComponentProps, JSXElementConstructor } from 'react';
3
3
  import { EmbeddedVideo } from '../../client/refs';
4
4
  import { Block } from './Block';
5
- export declare function MediaLayout({ EmbeddedVideoElement, listPanelProps, ...props }: MediaLayout.Props): import("react/jsx-runtime").JSX.Element;
5
+ export declare function MediaLayout({ EmbeddedVideoElement, ...props }: MediaLayout.Props): import("react/jsx-runtime").JSX.Element;
6
6
  export declare namespace MediaLayout {
7
- const Component: import("react").FunctionComponent<Block.Create.Result.Component<"_nd-mediaLayout", true, undefined, Schema.ListField<{
7
+ const Component: import("react").FunctionComponent<Block.Create.Result.ComponentProps<"_nd-mediaLayout", true, undefined, Schema.ListField<{
8
8
  visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
9
9
  embedded: Schema.EmbeddedVideoField;
10
10
  }>, Schema.Block.Config, any>>, schema: Block.Create.Result.Schema<"_nd-mediaLayout", true, undefined, Schema.ListField<{
11
11
  visual: Schema.AssetField<Schema.AssetField.LinkedValue.Visual>;
12
12
  embedded: Schema.EmbeddedVideoField;
13
13
  }>, Schema.Block.Config>;
14
- type Props = ComponentProps<typeof Component> & {
14
+ type Model = Schema.Block.LinkedData<typeof schema>;
15
+ type Props = Omit<ComponentProps<typeof Component>, 'children'> & {
15
16
  EmbeddedVideoElement?: JSXElementConstructor<EmbeddedVideo.Props>;
16
17
  };
17
- type Model = Schema.Block.LinkedData<typeof schema>;
18
18
  }