@ohhwells/bridge 0.1.38 → 0.1.39-next.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -1
- package/dist/index.cjs +3059 -666
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +98 -6
- package/dist/index.d.ts +98 -6
- package/dist/index.js +3044 -654
- package/dist/index.js.map +1 -1
- package/dist/styles.css +169 -34
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -27,6 +27,7 @@ type LinkModalProps = {
|
|
|
27
27
|
onClose: () => void;
|
|
28
28
|
onSubmit: (target: string) => void;
|
|
29
29
|
};
|
|
30
|
+
type LinkModalStep = 'input' | 'sectionPicker' | 'confirmed';
|
|
30
31
|
type SelectedPage = {
|
|
31
32
|
path: string;
|
|
32
33
|
title: string;
|
|
@@ -42,10 +43,55 @@ type LinkPopoverProps = LinkModalProps & {
|
|
|
42
43
|
portalContainer?: HTMLElement | null;
|
|
43
44
|
};
|
|
44
45
|
/** Centered link editor dialog (shadcn Dialog + Radix). */
|
|
45
|
-
declare function LinkPopover({ open, panelRef, portalContainer, onClose,
|
|
46
|
+
declare function LinkPopover({ open, panelRef, portalContainer, onClose, mode, pages, sections, sectionsByPath, initialTarget, existingTargets, onSubmit, }: LinkPopoverProps): react_jsx_runtime.JSX.Element;
|
|
46
47
|
|
|
48
|
+
type UseLinkModalStateParams = {
|
|
49
|
+
open: boolean;
|
|
50
|
+
mode: LinkModalMode;
|
|
51
|
+
pages: LinkPage[];
|
|
52
|
+
sections: LinkSection[];
|
|
53
|
+
sectionsByPath?: Record<string, LinkSection[]>;
|
|
54
|
+
initialTarget?: string;
|
|
55
|
+
existingTargets: string[];
|
|
56
|
+
onClose: () => void;
|
|
57
|
+
onSubmit: (target: string) => void;
|
|
58
|
+
};
|
|
59
|
+
declare function useLinkModalState({ open, mode, pages, sections: _sections, sectionsByPath, initialTarget, existingTargets: _existingTargets, onClose, onSubmit, }: UseLinkModalStateParams): {
|
|
60
|
+
title: string;
|
|
61
|
+
submitLabel: string;
|
|
62
|
+
secondaryLabel: string;
|
|
63
|
+
searchValue: string;
|
|
64
|
+
selectedPage: SelectedPage | null;
|
|
65
|
+
selectedSection: SelectedSection | null;
|
|
66
|
+
step: LinkModalStep;
|
|
67
|
+
dropdownOpen: boolean;
|
|
68
|
+
setDropdownOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
69
|
+
urlError: string;
|
|
70
|
+
filteredPages: LinkPage[];
|
|
71
|
+
showBreadcrumb: false | SelectedSection | null;
|
|
72
|
+
showSectionPicker: false | SelectedPage | null;
|
|
73
|
+
showChooseSection: boolean | null;
|
|
74
|
+
showSectionRow: boolean | null;
|
|
75
|
+
isValid: boolean;
|
|
76
|
+
activeSections: LinkSection[];
|
|
77
|
+
handleInputChange: (value: string) => void;
|
|
78
|
+
handlePageSelect: (page: LinkPage) => void;
|
|
79
|
+
handleChooseSection: () => void;
|
|
80
|
+
handleSectionSelect: (section: LinkSection) => void;
|
|
81
|
+
handleBackToSections: () => void;
|
|
82
|
+
handleSectionPickerBack: () => void;
|
|
83
|
+
handleClose: () => void;
|
|
84
|
+
handleSecondary: () => void;
|
|
85
|
+
handleSubmit: () => void;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
type LinkModalState = ReturnType<typeof useLinkModalState>;
|
|
89
|
+
type LinkEditorPanelProps = {
|
|
90
|
+
state: LinkModalState;
|
|
91
|
+
onClose: () => void;
|
|
92
|
+
};
|
|
47
93
|
/** Link destination editor body — Figma node 8365:7616 / 8382:4161 */
|
|
48
|
-
declare function LinkEditorPanel({
|
|
94
|
+
declare function LinkEditorPanel({ state, onClose }: LinkEditorPanelProps): react_jsx_runtime.JSX.Element;
|
|
49
95
|
|
|
50
96
|
declare function parseTarget(target: string | null | undefined): {
|
|
51
97
|
pageRoute: string;
|
|
@@ -86,6 +132,26 @@ declare function SchedulingWidget({ notifyOnConnect, initialScheduleId, insertAf
|
|
|
86
132
|
|
|
87
133
|
declare const DragHandle: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
|
|
88
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Visual drop-gap line for navbar / footer / repeater reorder.
|
|
137
|
+
* Figma: Custom/Drop Indicator (8140:1731) — CSS class `.ov-gap-line`
|
|
138
|
+
*
|
|
139
|
+
* Opacity (Figma docs):
|
|
140
|
+
* - default: 0 (hidden)
|
|
141
|
+
* - hover: 1
|
|
142
|
+
* - dragIdle: 0.4
|
|
143
|
+
* - dragActive: 1
|
|
144
|
+
*/
|
|
145
|
+
declare const dropIndicatorVariants: (props?: ({
|
|
146
|
+
direction?: "horizontal" | "vertical" | null | undefined;
|
|
147
|
+
state?: "default" | "hover" | "dragIdle" | "dragActive" | null | undefined;
|
|
148
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
149
|
+
type DropIndicatorProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof dropIndicatorVariants>;
|
|
150
|
+
declare const DropIndicator: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
151
|
+
direction?: "horizontal" | "vertical" | null | undefined;
|
|
152
|
+
state?: "default" | "hover" | "dragIdle" | "dragActive" | null | undefined;
|
|
153
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
|
|
154
|
+
|
|
89
155
|
declare const CustomToolbar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
90
156
|
declare function CustomToolbarDivider({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
91
157
|
declare const CustomToolbarButton: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
@@ -96,30 +162,35 @@ type ItemActionToolbarProps = {
|
|
|
96
162
|
onEditLink?: () => void;
|
|
97
163
|
onAddItem?: () => void;
|
|
98
164
|
onMore?: () => void;
|
|
165
|
+
editLinkDisabled?: boolean;
|
|
99
166
|
addItemDisabled?: boolean;
|
|
100
167
|
moreDisabled?: boolean;
|
|
101
168
|
/** Tooltip placement relative to each icon — Figma uses bottom. */
|
|
102
169
|
tooltipSide?: 'top' | 'bottom' | 'left' | 'right';
|
|
103
170
|
};
|
|
104
171
|
/** Item-action fill for Custom/Toolbar — Edit link / Add item / More. */
|
|
105
|
-
declare function ItemActionToolbar({ onEditLink, onAddItem, onMore, addItemDisabled, moreDisabled, tooltipSide, }: ItemActionToolbarProps): react_jsx_runtime.JSX.Element;
|
|
172
|
+
declare function ItemActionToolbar({ onEditLink, onAddItem, onMore, editLinkDisabled, addItemDisabled, moreDisabled, tooltipSide, }: ItemActionToolbarProps): react_jsx_runtime.JSX.Element;
|
|
106
173
|
|
|
107
174
|
type ItemInteractionState = 'default' | 'hover' | 'sibling-hint' | 'active-top' | 'active-bottom' | 'dragging';
|
|
108
175
|
type ItemInteractionLayerProps = {
|
|
109
176
|
rect: DOMRect;
|
|
110
177
|
state: ItemInteractionState;
|
|
111
178
|
elRef?: React.Ref<HTMLDivElement>;
|
|
112
|
-
/** Slotted Custom/Toolbar instance (item-action or other fill).
|
|
179
|
+
/** Slotted Custom/Toolbar instance (item-action or other fill). */
|
|
113
180
|
toolbar?: React.ReactNode;
|
|
114
181
|
showHandle?: boolean;
|
|
115
182
|
dragDisabled?: boolean;
|
|
116
183
|
dragHandleLabel?: string;
|
|
117
184
|
onDragHandleDragStart?: (e: React.DragEvent<HTMLButtonElement>) => void;
|
|
118
185
|
onDragHandleDragEnd?: (e: React.DragEvent<HTMLButtonElement>) => void;
|
|
186
|
+
/** Press on the item chrome (not handle/toolbar) — starts press-to-drag. */
|
|
187
|
+
onItemPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;
|
|
188
|
+
/** Click on chrome without a drag — typically enter text edit. */
|
|
189
|
+
onItemClick?: (clientX: number, clientY: number) => void;
|
|
119
190
|
chromeGap?: number;
|
|
120
191
|
className?: string;
|
|
121
192
|
};
|
|
122
|
-
declare function ItemInteractionLayer({ rect, state, elRef, toolbar, showHandle, dragDisabled, dragHandleLabel, onDragHandleDragStart, onDragHandleDragEnd, chromeGap, className, }: ItemInteractionLayerProps): react_jsx_runtime.JSX.Element | null;
|
|
193
|
+
declare function ItemInteractionLayer({ rect, state, elRef, toolbar, showHandle, dragDisabled, dragHandleLabel, onDragHandleDragStart, onDragHandleDragEnd, onItemPointerDown, onItemClick, chromeGap, className, }: ItemInteractionLayerProps): react_jsx_runtime.JSX.Element | null;
|
|
123
194
|
|
|
124
195
|
declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime.JSX.Element;
|
|
125
196
|
declare function Tooltip({ ...props }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime.JSX.Element;
|
|
@@ -128,4 +199,25 @@ declare function TooltipContent({ className, sideOffset, side, children, ...prop
|
|
|
128
199
|
|
|
129
200
|
declare function isEditSessionActive(): boolean;
|
|
130
201
|
|
|
131
|
-
|
|
202
|
+
type CarouselSlide = {
|
|
203
|
+
src: string;
|
|
204
|
+
alt: string;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Template hook. Owns the slide array in React state, stamps the DOM contract via `bind`, and
|
|
208
|
+
* listens for the bridge's change event so replace/add/delete re-render the component.
|
|
209
|
+
*
|
|
210
|
+
* `bind` is plain data attributes (no ref), so it spreads onto any element type without type
|
|
211
|
+
* friction; the hook finds its own container by key. Slides inside still need
|
|
212
|
+
* `data-ohw-carousel-slide={i}`.
|
|
213
|
+
*
|
|
214
|
+
* const { images, bind } = useOhwCarousel('hero-carousel', content.images)
|
|
215
|
+
* <div {...bind}>{images.map((img, i) => <Slide data-ohw-carousel-slide={i} … />)}</div>
|
|
216
|
+
*/
|
|
217
|
+
declare function useOhwCarousel(key: string, initial: CarouselSlide[]): {
|
|
218
|
+
images: CarouselSlide[];
|
|
219
|
+
setImages: React.Dispatch<React.SetStateAction<CarouselSlide[]>>;
|
|
220
|
+
bind: Record<string, string>;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export { type CarouselSlide, CustomToolbar, CustomToolbarButton, CustomToolbarDivider, DragHandle, DropIndicator, type DropIndicatorProps, ItemActionToolbar, type ItemActionToolbarProps, ItemInteractionLayer, type ItemInteractionLayerProps, type ItemInteractionState, LinkEditorPanel, type LinkModalMode, type LinkModalProps, type LinkPage, LinkPopover, type LinkSection, OhhwellsBridge, SchedulingWidget, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, buildTarget, dropIndicatorVariants, filterAvailablePages, getEditModeInitialState, isEditSessionActive, isValidUrl, parseTarget, toggleVariants, useOhwCarousel, validateUrlInput };
|
package/dist/index.d.ts
CHANGED
|
@@ -27,6 +27,7 @@ type LinkModalProps = {
|
|
|
27
27
|
onClose: () => void;
|
|
28
28
|
onSubmit: (target: string) => void;
|
|
29
29
|
};
|
|
30
|
+
type LinkModalStep = 'input' | 'sectionPicker' | 'confirmed';
|
|
30
31
|
type SelectedPage = {
|
|
31
32
|
path: string;
|
|
32
33
|
title: string;
|
|
@@ -42,10 +43,55 @@ type LinkPopoverProps = LinkModalProps & {
|
|
|
42
43
|
portalContainer?: HTMLElement | null;
|
|
43
44
|
};
|
|
44
45
|
/** Centered link editor dialog (shadcn Dialog + Radix). */
|
|
45
|
-
declare function LinkPopover({ open, panelRef, portalContainer, onClose,
|
|
46
|
+
declare function LinkPopover({ open, panelRef, portalContainer, onClose, mode, pages, sections, sectionsByPath, initialTarget, existingTargets, onSubmit, }: LinkPopoverProps): react_jsx_runtime.JSX.Element;
|
|
46
47
|
|
|
48
|
+
type UseLinkModalStateParams = {
|
|
49
|
+
open: boolean;
|
|
50
|
+
mode: LinkModalMode;
|
|
51
|
+
pages: LinkPage[];
|
|
52
|
+
sections: LinkSection[];
|
|
53
|
+
sectionsByPath?: Record<string, LinkSection[]>;
|
|
54
|
+
initialTarget?: string;
|
|
55
|
+
existingTargets: string[];
|
|
56
|
+
onClose: () => void;
|
|
57
|
+
onSubmit: (target: string) => void;
|
|
58
|
+
};
|
|
59
|
+
declare function useLinkModalState({ open, mode, pages, sections: _sections, sectionsByPath, initialTarget, existingTargets: _existingTargets, onClose, onSubmit, }: UseLinkModalStateParams): {
|
|
60
|
+
title: string;
|
|
61
|
+
submitLabel: string;
|
|
62
|
+
secondaryLabel: string;
|
|
63
|
+
searchValue: string;
|
|
64
|
+
selectedPage: SelectedPage | null;
|
|
65
|
+
selectedSection: SelectedSection | null;
|
|
66
|
+
step: LinkModalStep;
|
|
67
|
+
dropdownOpen: boolean;
|
|
68
|
+
setDropdownOpen: React.Dispatch<React.SetStateAction<boolean>>;
|
|
69
|
+
urlError: string;
|
|
70
|
+
filteredPages: LinkPage[];
|
|
71
|
+
showBreadcrumb: false | SelectedSection | null;
|
|
72
|
+
showSectionPicker: false | SelectedPage | null;
|
|
73
|
+
showChooseSection: boolean | null;
|
|
74
|
+
showSectionRow: boolean | null;
|
|
75
|
+
isValid: boolean;
|
|
76
|
+
activeSections: LinkSection[];
|
|
77
|
+
handleInputChange: (value: string) => void;
|
|
78
|
+
handlePageSelect: (page: LinkPage) => void;
|
|
79
|
+
handleChooseSection: () => void;
|
|
80
|
+
handleSectionSelect: (section: LinkSection) => void;
|
|
81
|
+
handleBackToSections: () => void;
|
|
82
|
+
handleSectionPickerBack: () => void;
|
|
83
|
+
handleClose: () => void;
|
|
84
|
+
handleSecondary: () => void;
|
|
85
|
+
handleSubmit: () => void;
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
type LinkModalState = ReturnType<typeof useLinkModalState>;
|
|
89
|
+
type LinkEditorPanelProps = {
|
|
90
|
+
state: LinkModalState;
|
|
91
|
+
onClose: () => void;
|
|
92
|
+
};
|
|
47
93
|
/** Link destination editor body — Figma node 8365:7616 / 8382:4161 */
|
|
48
|
-
declare function LinkEditorPanel({
|
|
94
|
+
declare function LinkEditorPanel({ state, onClose }: LinkEditorPanelProps): react_jsx_runtime.JSX.Element;
|
|
49
95
|
|
|
50
96
|
declare function parseTarget(target: string | null | undefined): {
|
|
51
97
|
pageRoute: string;
|
|
@@ -86,6 +132,26 @@ declare function SchedulingWidget({ notifyOnConnect, initialScheduleId, insertAf
|
|
|
86
132
|
|
|
87
133
|
declare const DragHandle: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & React.RefAttributes<HTMLButtonElement>>;
|
|
88
134
|
|
|
135
|
+
/**
|
|
136
|
+
* Visual drop-gap line for navbar / footer / repeater reorder.
|
|
137
|
+
* Figma: Custom/Drop Indicator (8140:1731) — CSS class `.ov-gap-line`
|
|
138
|
+
*
|
|
139
|
+
* Opacity (Figma docs):
|
|
140
|
+
* - default: 0 (hidden)
|
|
141
|
+
* - hover: 1
|
|
142
|
+
* - dragIdle: 0.4
|
|
143
|
+
* - dragActive: 1
|
|
144
|
+
*/
|
|
145
|
+
declare const dropIndicatorVariants: (props?: ({
|
|
146
|
+
direction?: "horizontal" | "vertical" | null | undefined;
|
|
147
|
+
state?: "default" | "hover" | "dragIdle" | "dragActive" | null | undefined;
|
|
148
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
149
|
+
type DropIndicatorProps = React.HTMLAttributes<HTMLDivElement> & VariantProps<typeof dropIndicatorVariants>;
|
|
150
|
+
declare const DropIndicator: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
|
|
151
|
+
direction?: "horizontal" | "vertical" | null | undefined;
|
|
152
|
+
state?: "default" | "hover" | "dragIdle" | "dragActive" | null | undefined;
|
|
153
|
+
} & class_variance_authority_types.ClassProp) | undefined) => string> & React.RefAttributes<HTMLDivElement>>;
|
|
154
|
+
|
|
89
155
|
declare const CustomToolbar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
|
|
90
156
|
declare function CustomToolbarDivider({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): react_jsx_runtime.JSX.Element;
|
|
91
157
|
declare const CustomToolbarButton: React.ForwardRefExoticComponent<React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
@@ -96,30 +162,35 @@ type ItemActionToolbarProps = {
|
|
|
96
162
|
onEditLink?: () => void;
|
|
97
163
|
onAddItem?: () => void;
|
|
98
164
|
onMore?: () => void;
|
|
165
|
+
editLinkDisabled?: boolean;
|
|
99
166
|
addItemDisabled?: boolean;
|
|
100
167
|
moreDisabled?: boolean;
|
|
101
168
|
/** Tooltip placement relative to each icon — Figma uses bottom. */
|
|
102
169
|
tooltipSide?: 'top' | 'bottom' | 'left' | 'right';
|
|
103
170
|
};
|
|
104
171
|
/** Item-action fill for Custom/Toolbar — Edit link / Add item / More. */
|
|
105
|
-
declare function ItemActionToolbar({ onEditLink, onAddItem, onMore, addItemDisabled, moreDisabled, tooltipSide, }: ItemActionToolbarProps): react_jsx_runtime.JSX.Element;
|
|
172
|
+
declare function ItemActionToolbar({ onEditLink, onAddItem, onMore, editLinkDisabled, addItemDisabled, moreDisabled, tooltipSide, }: ItemActionToolbarProps): react_jsx_runtime.JSX.Element;
|
|
106
173
|
|
|
107
174
|
type ItemInteractionState = 'default' | 'hover' | 'sibling-hint' | 'active-top' | 'active-bottom' | 'dragging';
|
|
108
175
|
type ItemInteractionLayerProps = {
|
|
109
176
|
rect: DOMRect;
|
|
110
177
|
state: ItemInteractionState;
|
|
111
178
|
elRef?: React.Ref<HTMLDivElement>;
|
|
112
|
-
/** Slotted Custom/Toolbar instance (item-action or other fill).
|
|
179
|
+
/** Slotted Custom/Toolbar instance (item-action or other fill). */
|
|
113
180
|
toolbar?: React.ReactNode;
|
|
114
181
|
showHandle?: boolean;
|
|
115
182
|
dragDisabled?: boolean;
|
|
116
183
|
dragHandleLabel?: string;
|
|
117
184
|
onDragHandleDragStart?: (e: React.DragEvent<HTMLButtonElement>) => void;
|
|
118
185
|
onDragHandleDragEnd?: (e: React.DragEvent<HTMLButtonElement>) => void;
|
|
186
|
+
/** Press on the item chrome (not handle/toolbar) — starts press-to-drag. */
|
|
187
|
+
onItemPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;
|
|
188
|
+
/** Click on chrome without a drag — typically enter text edit. */
|
|
189
|
+
onItemClick?: (clientX: number, clientY: number) => void;
|
|
119
190
|
chromeGap?: number;
|
|
120
191
|
className?: string;
|
|
121
192
|
};
|
|
122
|
-
declare function ItemInteractionLayer({ rect, state, elRef, toolbar, showHandle, dragDisabled, dragHandleLabel, onDragHandleDragStart, onDragHandleDragEnd, chromeGap, className, }: ItemInteractionLayerProps): react_jsx_runtime.JSX.Element | null;
|
|
193
|
+
declare function ItemInteractionLayer({ rect, state, elRef, toolbar, showHandle, dragDisabled, dragHandleLabel, onDragHandleDragStart, onDragHandleDragEnd, onItemPointerDown, onItemClick, chromeGap, className, }: ItemInteractionLayerProps): react_jsx_runtime.JSX.Element | null;
|
|
123
194
|
|
|
124
195
|
declare function TooltipProvider({ delayDuration, ...props }: React.ComponentProps<typeof Tooltip$1.Provider>): react_jsx_runtime.JSX.Element;
|
|
125
196
|
declare function Tooltip({ ...props }: React.ComponentProps<typeof Tooltip$1.Root>): react_jsx_runtime.JSX.Element;
|
|
@@ -128,4 +199,25 @@ declare function TooltipContent({ className, sideOffset, side, children, ...prop
|
|
|
128
199
|
|
|
129
200
|
declare function isEditSessionActive(): boolean;
|
|
130
201
|
|
|
131
|
-
|
|
202
|
+
type CarouselSlide = {
|
|
203
|
+
src: string;
|
|
204
|
+
alt: string;
|
|
205
|
+
};
|
|
206
|
+
/**
|
|
207
|
+
* Template hook. Owns the slide array in React state, stamps the DOM contract via `bind`, and
|
|
208
|
+
* listens for the bridge's change event so replace/add/delete re-render the component.
|
|
209
|
+
*
|
|
210
|
+
* `bind` is plain data attributes (no ref), so it spreads onto any element type without type
|
|
211
|
+
* friction; the hook finds its own container by key. Slides inside still need
|
|
212
|
+
* `data-ohw-carousel-slide={i}`.
|
|
213
|
+
*
|
|
214
|
+
* const { images, bind } = useOhwCarousel('hero-carousel', content.images)
|
|
215
|
+
* <div {...bind}>{images.map((img, i) => <Slide data-ohw-carousel-slide={i} … />)}</div>
|
|
216
|
+
*/
|
|
217
|
+
declare function useOhwCarousel(key: string, initial: CarouselSlide[]): {
|
|
218
|
+
images: CarouselSlide[];
|
|
219
|
+
setImages: React.Dispatch<React.SetStateAction<CarouselSlide[]>>;
|
|
220
|
+
bind: Record<string, string>;
|
|
221
|
+
};
|
|
222
|
+
|
|
223
|
+
export { type CarouselSlide, CustomToolbar, CustomToolbarButton, CustomToolbarDivider, DragHandle, DropIndicator, type DropIndicatorProps, ItemActionToolbar, type ItemActionToolbarProps, ItemInteractionLayer, type ItemInteractionLayerProps, type ItemInteractionState, LinkEditorPanel, type LinkModalMode, type LinkModalProps, type LinkPage, LinkPopover, type LinkSection, OhhwellsBridge, SchedulingWidget, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, buildTarget, dropIndicatorVariants, filterAvailablePages, getEditModeInitialState, isEditSessionActive, isValidUrl, parseTarget, toggleVariants, useOhwCarousel, validateUrlInput };
|