@k8o/arte-odyssey 10.2.0 → 10.4.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 (54) hide show
  1. package/dist/components/buttons/icon-button/icon-button.d.mts +1 -1
  2. package/dist/components/buttons/icon-button/icon-button.mjs +1 -1
  3. package/dist/components/feedback/toast/toast.mjs +2 -2
  4. package/dist/components/form/autocomplete/autocomplete.mjs +20 -28
  5. package/dist/components/form/checkbox/checkbox.mjs +1 -1
  6. package/dist/components/form/checkbox-card/checkbox-card.mjs +1 -1
  7. package/dist/components/form/checkbox-group/index.d.mts +3 -3
  8. package/dist/components/form/file-field/file-field.mjs +1 -1
  9. package/dist/components/form/number-field/number-field.mjs +1 -1
  10. package/dist/components/icons/index.d.mts +2 -2
  11. package/dist/components/icons/index.mjs +2 -2
  12. package/dist/components/icons/lucide-deep.d.mts +9 -0
  13. package/dist/components/icons/lucide-imports.d.mts +62 -0
  14. package/dist/components/icons/lucide-imports.mjs +62 -0
  15. package/dist/components/icons/lucide.d.mts +5 -1
  16. package/dist/components/icons/lucide.mjs +18 -2
  17. package/dist/components/index.d.mts +2 -2
  18. package/dist/components/index.mjs +11 -11
  19. package/dist/components/navigation/tabs/tabs.mjs +1 -1
  20. package/dist/components/overlays/_internal/use-list-navigation.d.mts +40 -0
  21. package/dist/components/overlays/_internal/use-list-navigation.mjs +95 -0
  22. package/dist/components/overlays/dialog/dialog.mjs +1 -1
  23. package/dist/components/overlays/drawer/drawer.mjs +1 -1
  24. package/dist/components/overlays/dropdown-menu/dropdown-menu.d.mts +2 -1
  25. package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +39 -52
  26. package/dist/components/overlays/dropdown-menu/hooks.d.mts +14 -294
  27. package/dist/components/overlays/dropdown-menu/hooks.mjs +7 -18
  28. package/dist/components/overlays/list-box/hooks.d.mts +12 -292
  29. package/dist/components/overlays/list-box/hooks.mjs +7 -16
  30. package/dist/components/overlays/list-box/list-box.d.mts +1 -1
  31. package/dist/components/overlays/list-box/list-box.mjs +25 -32
  32. package/dist/components/overlays/popover/anchor-positioning.d.mts +26 -0
  33. package/dist/components/overlays/popover/anchor-positioning.mjs +44 -0
  34. package/dist/components/overlays/popover/hooks.d.mts +10 -13
  35. package/dist/components/overlays/popover/hooks.mjs +7 -14
  36. package/dist/components/overlays/popover/popover.d.mts +2 -3
  37. package/dist/components/overlays/popover/popover.mjs +31 -59
  38. package/dist/components/overlays/tooltip/tooltip.d.mts +1 -1
  39. package/dist/components/overlays/tooltip/tooltip.mjs +2 -23
  40. package/dist/helpers/index.mjs +2 -2
  41. package/dist/hooks/focus-trap/index.d.mts +19 -0
  42. package/dist/hooks/focus-trap/index.mjs +51 -0
  43. package/dist/hooks/index.mjs +4 -4
  44. package/dist/index.d.mts +3 -3
  45. package/dist/index.mjs +34 -34
  46. package/dist/integrations/_shared/renderers.mjs +6 -6
  47. package/dist/integrations/_shared/schemas.d.mts +31 -31
  48. package/dist/integrations/json-render/catalog.d.mts +25 -30
  49. package/dist/integrations/openui/form-views.d.mts +0 -9
  50. package/dist/integrations/openui/form-views.mjs +0 -9
  51. package/dist/styles/base.css +39 -1
  52. package/dist/styles/tokens.css +0 -1
  53. package/dist/types/variables.d.mts +6 -1
  54. package/package.json +4 -4
@@ -1,316 +1,36 @@
1
- import { HTMLAttributes, HTMLProps, RefObject } from "react";
1
+ import { ListNavigation } from "../_internal/use-list-navigation.mjs";
2
2
 
3
3
  //#region src/components/overlays/list-box/hooks.d.ts
4
4
  type Option = {
5
5
  key: string;
6
6
  label: string;
7
7
  };
8
- type MenuContext = {
8
+ type MenuContext = ListNavigation & {
9
9
  options: Option[];
10
- activeIndex: number | null;
11
- selectedIndex: number | null;
10
+ selectedIndex: number;
12
11
  handleSelect: (index: number) => void;
13
- itemElementsRef: RefObject<Array<HTMLElement | null>>;
14
- getTriggerProps: (userProps?: HTMLProps<HTMLElement>) => Omit<HTMLAttributes<HTMLElement>, 'color'>;
15
- getContentProps: (userProps?: HTMLProps<HTMLElement>) => HTMLAttributes<HTMLElement>;
16
- getItemProps: (userProps?: Omit<HTMLProps<HTMLElement>, 'selected' | 'active'>) => HTMLAttributes<HTMLElement>;
17
12
  };
18
13
  declare const MenuContextProvider: import("react").Context<MenuContext | null>;
19
14
  declare const useMenuContent: () => {
20
15
  options: Option[];
21
- selectedIndex: number | null;
22
- contentProps: HTMLAttributes<HTMLElement>;
23
- itemElementsRef: RefObject<(HTMLElement | null)[]>;
16
+ selectedIndex: number;
17
+ contentProps: {
18
+ onKeyDown: (event: import("react").KeyboardEvent<HTMLElement>) => void;
19
+ };
24
20
  };
25
21
  declare const useMenuItem: (index: number) => {
26
22
  selected: boolean;
27
23
  props: {
28
- defaultChecked?: boolean | undefined;
29
- defaultValue?: string | number | readonly string[] | undefined;
30
- suppressContentEditableWarning?: boolean | undefined;
31
- suppressHydrationWarning?: boolean | undefined;
32
- accessKey?: string | undefined;
33
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {});
34
- autoFocus?: boolean | undefined;
35
- className?: string | undefined;
36
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
37
- contextMenu?: string | undefined;
38
- dir?: string | undefined;
39
- draggable?: (boolean | "true" | "false") | undefined;
40
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined;
41
- hidden?: boolean | undefined;
42
- id?: string | undefined;
43
- lang?: string | undefined;
44
- nonce?: string | undefined;
45
- slot?: string | undefined;
46
- spellCheck?: (boolean | "true" | "false") | undefined;
47
- style?: import("react").CSSProperties | undefined;
48
- tabIndex: number;
49
- title?: string | undefined;
50
- translate?: "yes" | "no" | undefined;
51
- radioGroup?: string | undefined;
52
- role: string;
53
- about?: string | undefined;
54
- content?: string | undefined;
55
- datatype?: string | undefined;
56
- inlist?: any;
57
- prefix?: string | undefined;
58
- property?: string | undefined;
59
- rel?: string | undefined;
60
- resource?: string | undefined;
61
- rev?: string | undefined;
62
- typeof?: string | undefined;
63
- vocab?: string | undefined;
64
- autoCorrect?: string | undefined;
65
- autoSave?: string | undefined;
66
- color?: string | undefined;
67
- itemProp?: string | undefined;
68
- itemScope?: boolean | undefined;
69
- itemType?: string | undefined;
70
- itemID?: string | undefined;
71
- itemRef?: string | undefined;
72
- results?: number | undefined;
73
- security?: string | undefined;
74
- unselectable?: "on" | "off" | undefined;
75
- popover?: "" | "auto" | "manual" | "hint" | undefined;
76
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined;
77
- popoverTarget?: string | undefined;
78
- inert?: boolean | undefined;
79
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined;
80
- is?: string | undefined;
81
- exportparts?: string | undefined;
82
- part?: string | undefined;
83
- "aria-activedescendant"?: string | undefined;
84
- "aria-atomic"?: (boolean | "true" | "false") | undefined;
85
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined;
86
- "aria-braillelabel"?: string | undefined;
87
- "aria-brailleroledescription"?: string | undefined;
88
- "aria-busy"?: (boolean | "true" | "false") | undefined;
89
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined;
90
- "aria-colcount"?: number | undefined;
91
- "aria-colindex"?: number | undefined;
92
- "aria-colindextext"?: string | undefined;
93
- "aria-colspan"?: number | undefined;
94
- "aria-controls"?: string | undefined;
95
- "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined;
96
- "aria-describedby"?: string | undefined;
97
- "aria-description"?: string | undefined;
98
- "aria-details"?: string | undefined;
99
- "aria-disabled"?: (boolean | "true" | "false") | undefined;
100
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined;
101
- "aria-errormessage"?: string | undefined;
102
- "aria-expanded"?: (boolean | "true" | "false") | undefined;
103
- "aria-flowto"?: string | undefined;
104
- "aria-grabbed"?: (boolean | "true" | "false") | undefined;
105
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined;
106
- "aria-hidden"?: (boolean | "true" | "false") | undefined;
107
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined;
108
- "aria-keyshortcuts"?: string | undefined;
109
- "aria-label"?: string | undefined;
110
- "aria-labelledby"?: string | undefined;
111
- "aria-level"?: number | undefined;
112
- "aria-live"?: "off" | "assertive" | "polite" | undefined;
113
- "aria-modal"?: (boolean | "true" | "false") | undefined;
114
- "aria-multiline"?: (boolean | "true" | "false") | undefined;
115
- "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
116
- "aria-orientation"?: "horizontal" | "vertical" | undefined;
117
- "aria-owns"?: string | undefined;
118
- "aria-placeholder"?: string | undefined;
119
- "aria-posinset"?: number | undefined;
120
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined;
121
- "aria-readonly"?: (boolean | "true" | "false") | undefined;
122
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined;
123
- "aria-required"?: (boolean | "true" | "false") | undefined;
124
- "aria-roledescription"?: string | undefined;
125
- "aria-rowcount"?: number | undefined;
126
- "aria-rowindex"?: number | undefined;
127
- "aria-rowindextext"?: string | undefined;
128
- "aria-rowspan"?: number | undefined;
129
- "aria-selected": boolean | "true" | "false";
130
- "aria-setsize"?: number | undefined;
131
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined;
132
- "aria-valuemax"?: number | undefined;
133
- "aria-valuemin"?: number | undefined;
134
- "aria-valuenow"?: number | undefined;
135
- "aria-valuetext"?: string | undefined;
136
- children?: import("react").ReactNode | undefined;
137
- dangerouslySetInnerHTML?: {
138
- __html: string | TrustedHTML;
139
- } | undefined;
140
- onCopy?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
141
- onCopyCapture?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
142
- onCut?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
143
- onCutCapture?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
144
- onPaste?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
145
- onPasteCapture?: import("react").ClipboardEventHandler<HTMLElement> | undefined;
146
- onCompositionEnd?: import("react").CompositionEventHandler<HTMLElement> | undefined;
147
- onCompositionEndCapture?: import("react").CompositionEventHandler<HTMLElement> | undefined;
148
- onCompositionStart?: import("react").CompositionEventHandler<HTMLElement> | undefined;
149
- onCompositionStartCapture?: import("react").CompositionEventHandler<HTMLElement> | undefined;
150
- onCompositionUpdate?: import("react").CompositionEventHandler<HTMLElement> | undefined;
151
- onCompositionUpdateCapture?: import("react").CompositionEventHandler<HTMLElement> | undefined;
152
- onFocus?: import("react").FocusEventHandler<HTMLElement> | undefined;
153
- onFocusCapture?: import("react").FocusEventHandler<HTMLElement> | undefined;
154
- onBlur?: import("react").FocusEventHandler<HTMLElement> | undefined;
155
- onBlurCapture?: import("react").FocusEventHandler<HTMLElement> | undefined;
156
- onChange?: import("react").ChangeEventHandler<HTMLElement, Element> | undefined;
157
- onChangeCapture?: import("react").ChangeEventHandler<HTMLElement, Element> | undefined;
158
- onBeforeInput?: import("react").InputEventHandler<HTMLElement> | undefined;
159
- onBeforeInputCapture?: import("react").InputEventHandler<HTMLElement> | undefined;
160
- onInput?: import("react").InputEventHandler<HTMLElement> | undefined;
161
- onInputCapture?: import("react").InputEventHandler<HTMLElement> | undefined;
162
- onReset?: import("react").ReactEventHandler<HTMLElement> | undefined;
163
- onResetCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
164
- onSubmit?: import("react").SubmitEventHandler<HTMLElement> | undefined;
165
- onSubmitCapture?: import("react").SubmitEventHandler<HTMLElement> | undefined;
166
- onInvalid?: import("react").ReactEventHandler<HTMLElement> | undefined;
167
- onInvalidCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
168
- onLoad?: import("react").ReactEventHandler<HTMLElement> | undefined;
169
- onLoadCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
170
- onError?: import("react").ReactEventHandler<HTMLElement> | undefined;
171
- onErrorCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
172
- onKeyDown?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
173
- onKeyDownCapture?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
174
- onKeyPress?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
175
- onKeyPressCapture?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
176
- onKeyUp?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
177
- onKeyUpCapture?: import("react").KeyboardEventHandler<HTMLElement> | undefined;
178
- onAbort?: import("react").ReactEventHandler<HTMLElement> | undefined;
179
- onAbortCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
180
- onCanPlay?: import("react").ReactEventHandler<HTMLElement> | undefined;
181
- onCanPlayCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
182
- onCanPlayThrough?: import("react").ReactEventHandler<HTMLElement> | undefined;
183
- onCanPlayThroughCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
184
- onDurationChange?: import("react").ReactEventHandler<HTMLElement> | undefined;
185
- onDurationChangeCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
186
- onEmptied?: import("react").ReactEventHandler<HTMLElement> | undefined;
187
- onEmptiedCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
188
- onEncrypted?: import("react").ReactEventHandler<HTMLElement> | undefined;
189
- onEncryptedCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
190
- onEnded?: import("react").ReactEventHandler<HTMLElement> | undefined;
191
- onEndedCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
192
- onLoadedData?: import("react").ReactEventHandler<HTMLElement> | undefined;
193
- onLoadedDataCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
194
- onLoadedMetadata?: import("react").ReactEventHandler<HTMLElement> | undefined;
195
- onLoadedMetadataCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
196
- onLoadStart?: import("react").ReactEventHandler<HTMLElement> | undefined;
197
- onLoadStartCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
198
- onPause?: import("react").ReactEventHandler<HTMLElement> | undefined;
199
- onPauseCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
200
- onPlay?: import("react").ReactEventHandler<HTMLElement> | undefined;
201
- onPlayCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
202
- onPlaying?: import("react").ReactEventHandler<HTMLElement> | undefined;
203
- onPlayingCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
204
- onProgress?: import("react").ReactEventHandler<HTMLElement> | undefined;
205
- onProgressCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
206
- onRateChange?: import("react").ReactEventHandler<HTMLElement> | undefined;
207
- onRateChangeCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
208
- onSeeked?: import("react").ReactEventHandler<HTMLElement> | undefined;
209
- onSeekedCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
210
- onSeeking?: import("react").ReactEventHandler<HTMLElement> | undefined;
211
- onSeekingCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
212
- onStalled?: import("react").ReactEventHandler<HTMLElement> | undefined;
213
- onStalledCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
214
- onSuspend?: import("react").ReactEventHandler<HTMLElement> | undefined;
215
- onSuspendCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
216
- onTimeUpdate?: import("react").ReactEventHandler<HTMLElement> | undefined;
217
- onTimeUpdateCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
218
- onVolumeChange?: import("react").ReactEventHandler<HTMLElement> | undefined;
219
- onVolumeChangeCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
220
- onWaiting?: import("react").ReactEventHandler<HTMLElement> | undefined;
221
- onWaitingCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
222
- onAuxClick?: import("react").MouseEventHandler<HTMLElement> | undefined;
223
- onAuxClickCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
224
- onClick?: import("react").MouseEventHandler<HTMLElement> | undefined;
225
- onClickCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
226
- onContextMenu?: import("react").MouseEventHandler<HTMLElement> | undefined;
227
- onContextMenuCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
228
- onDoubleClick?: import("react").MouseEventHandler<HTMLElement> | undefined;
229
- onDoubleClickCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
230
- onDrag?: import("react").DragEventHandler<HTMLElement> | undefined;
231
- onDragCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
232
- onDragEnd?: import("react").DragEventHandler<HTMLElement> | undefined;
233
- onDragEndCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
234
- onDragEnter?: import("react").DragEventHandler<HTMLElement> | undefined;
235
- onDragEnterCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
236
- onDragExit?: import("react").DragEventHandler<HTMLElement> | undefined;
237
- onDragExitCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
238
- onDragLeave?: import("react").DragEventHandler<HTMLElement> | undefined;
239
- onDragLeaveCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
240
- onDragOver?: import("react").DragEventHandler<HTMLElement> | undefined;
241
- onDragOverCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
242
- onDragStart?: import("react").DragEventHandler<HTMLElement> | undefined;
243
- onDragStartCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
244
- onDrop?: import("react").DragEventHandler<HTMLElement> | undefined;
245
- onDropCapture?: import("react").DragEventHandler<HTMLElement> | undefined;
246
- onMouseDown?: import("react").MouseEventHandler<HTMLElement> | undefined;
247
- onMouseDownCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
248
- onMouseEnter?: import("react").MouseEventHandler<HTMLElement> | undefined;
249
- onMouseLeave?: import("react").MouseEventHandler<HTMLElement> | undefined;
250
- onMouseMove?: import("react").MouseEventHandler<HTMLElement> | undefined;
251
- onMouseMoveCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
252
- onMouseOut?: import("react").MouseEventHandler<HTMLElement> | undefined;
253
- onMouseOutCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
254
- onMouseOver?: import("react").MouseEventHandler<HTMLElement> | undefined;
255
- onMouseOverCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
256
- onMouseUp?: import("react").MouseEventHandler<HTMLElement> | undefined;
257
- onMouseUpCapture?: import("react").MouseEventHandler<HTMLElement> | undefined;
258
- onSelect?: import("react").ReactEventHandler<HTMLElement> | undefined;
259
- onSelectCapture?: import("react").ReactEventHandler<HTMLElement> | undefined;
260
- onTouchCancel?: import("react").TouchEventHandler<HTMLElement> | undefined;
261
- onTouchCancelCapture?: import("react").TouchEventHandler<HTMLElement> | undefined;
262
- onTouchEnd?: import("react").TouchEventHandler<HTMLElement> | undefined;
263
- onTouchEndCapture?: import("react").TouchEventHandler<HTMLElement> | undefined;
264
- onTouchMove?: import("react").TouchEventHandler<HTMLElement> | undefined;
265
- onTouchMoveCapture?: import("react").TouchEventHandler<HTMLElement> | undefined;
266
- onTouchStart?: import("react").TouchEventHandler<HTMLElement> | undefined;
267
- onTouchStartCapture?: import("react").TouchEventHandler<HTMLElement> | undefined;
268
- onPointerDown?: import("react").PointerEventHandler<HTMLElement> | undefined;
269
- onPointerDownCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
270
- onPointerMove?: import("react").PointerEventHandler<HTMLElement> | undefined;
271
- onPointerMoveCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
272
- onPointerUp?: import("react").PointerEventHandler<HTMLElement> | undefined;
273
- onPointerUpCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
274
- onPointerCancel?: import("react").PointerEventHandler<HTMLElement> | undefined;
275
- onPointerCancelCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
276
- onPointerEnter?: import("react").PointerEventHandler<HTMLElement> | undefined;
277
- onPointerLeave?: import("react").PointerEventHandler<HTMLElement> | undefined;
278
- onPointerOver?: import("react").PointerEventHandler<HTMLElement> | undefined;
279
- onPointerOverCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
280
- onPointerOut?: import("react").PointerEventHandler<HTMLElement> | undefined;
281
- onPointerOutCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
282
- onGotPointerCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
283
- onGotPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
284
- onLostPointerCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
285
- onLostPointerCaptureCapture?: import("react").PointerEventHandler<HTMLElement> | undefined;
286
- onScroll?: import("react").UIEventHandler<HTMLElement> | undefined;
287
- onScrollCapture?: import("react").UIEventHandler<HTMLElement> | undefined;
288
- onScrollEnd?: import("react").UIEventHandler<HTMLElement> | undefined;
289
- onScrollEndCapture?: import("react").UIEventHandler<HTMLElement> | undefined;
290
- onWheel?: import("react").WheelEventHandler<HTMLElement> | undefined;
291
- onWheelCapture?: import("react").WheelEventHandler<HTMLElement> | undefined;
292
- onAnimationStart?: import("react").AnimationEventHandler<HTMLElement> | undefined;
293
- onAnimationStartCapture?: import("react").AnimationEventHandler<HTMLElement> | undefined;
294
- onAnimationEnd?: import("react").AnimationEventHandler<HTMLElement> | undefined;
295
- onAnimationEndCapture?: import("react").AnimationEventHandler<HTMLElement> | undefined;
296
- onAnimationIteration?: import("react").AnimationEventHandler<HTMLElement> | undefined;
297
- onAnimationIterationCapture?: import("react").AnimationEventHandler<HTMLElement> | undefined;
298
- onToggle?: import("react").ToggleEventHandler<HTMLElement> | undefined;
299
- onBeforeToggle?: import("react").ToggleEventHandler<HTMLElement> | undefined;
300
- onTransitionCancel?: import("react").TransitionEventHandler<HTMLElement> | undefined;
301
- onTransitionCancelCapture?: import("react").TransitionEventHandler<HTMLElement> | undefined;
302
- onTransitionEnd?: import("react").TransitionEventHandler<HTMLElement> | undefined;
303
- onTransitionEndCapture?: import("react").TransitionEventHandler<HTMLElement> | undefined;
304
- onTransitionRun?: import("react").TransitionEventHandler<HTMLElement> | undefined;
305
- onTransitionRunCapture?: import("react").TransitionEventHandler<HTMLElement> | undefined;
306
- onTransitionStart?: import("react").TransitionEventHandler<HTMLElement> | undefined;
307
- onTransitionStartCapture?: import("react").TransitionEventHandler<HTMLElement> | undefined;
24
+ onClick: () => void;
308
25
  ref: (node: HTMLElement | null) => void;
26
+ tabIndex: number;
27
+ onFocus: () => void;
28
+ role: "option";
29
+ 'aria-selected': boolean;
309
30
  };
310
31
  };
311
32
  declare const useMenuTrigger: () => {
312
33
  label: string;
313
- getTriggerProps: (userProps?: HTMLProps<HTMLElement>) => Omit<HTMLAttributes<HTMLElement>, "color">;
314
34
  };
315
35
  //#endregion
316
36
  export { MenuContextProvider, Option, useMenuContent, useMenuItem, useMenuTrigger };
@@ -2,7 +2,6 @@
2
2
  import { createSafeContext } from "../../../helpers/create-safe-context.mjs";
3
3
  import { useOpenContext } from "../popover/hooks.mjs";
4
4
  import { useMemo } from "react";
5
- import { useListItem } from "@floating-ui/react";
6
5
  //#region src/components/overlays/list-box/hooks.ts
7
6
  const [MenuContextProvider, useMenuContext] = createSafeContext("useMenuContext must be used within a ListBox.Root");
8
7
  const useMenuContent = () => {
@@ -10,30 +9,25 @@ const useMenuContent = () => {
10
9
  return useMemo(() => ({
11
10
  options: menu.options,
12
11
  selectedIndex: menu.selectedIndex,
13
- contentProps: menu.getContentProps(),
14
- itemElementsRef: menu.itemElementsRef
12
+ contentProps: menu.getContentProps()
15
13
  }), [menu]);
16
14
  };
17
15
  const useMenuItem = (index) => {
18
16
  const menu = useMenuContext();
19
17
  const { onClose } = useOpenContext();
20
- const item = useListItem();
21
18
  return useMemo(() => ({
22
19
  selected: menu.selectedIndex === index,
23
20
  props: {
24
- ref: item.ref,
25
- "aria-selected": menu.selectedIndex === index,
26
21
  role: "option",
27
- tabIndex: menu.activeIndex === item.index ? 0 : -1,
28
- ...menu.getItemProps({ onClick: () => {
22
+ "aria-selected": menu.selectedIndex === index,
23
+ ...menu.getItemProps(index),
24
+ onClick: () => {
29
25
  menu.handleSelect(index);
30
26
  onClose();
31
- } })
27
+ }
32
28
  }
33
29
  }), [
34
30
  index,
35
- item.index,
36
- item.ref,
37
31
  menu,
38
32
  onClose
39
33
  ]);
@@ -41,11 +35,8 @@ const useMenuItem = (index) => {
41
35
  const useMenuTrigger = () => {
42
36
  const menu = useMenuContext();
43
37
  const defaultLabel = "選択してください";
44
- const label = menu.selectedIndex === null ? defaultLabel : menu.options[menu.selectedIndex]?.label ?? defaultLabel;
45
- return useMemo(() => ({
46
- label,
47
- getTriggerProps: menu.getTriggerProps
48
- }), [label, menu.getTriggerProps]);
38
+ const label = menu.selectedIndex < 0 ? defaultLabel : menu.options[menu.selectedIndex]?.label ?? defaultLabel;
39
+ return useMemo(() => ({ label }), [label]);
49
40
  };
50
41
  //#endregion
51
42
  export { MenuContextProvider, useMenuContent, useMenuItem, useMenuTrigger };
@@ -1,7 +1,7 @@
1
1
  import { Button } from "../../buttons/button/button.mjs";
2
+ import { Placement } from "../../../types/variables.mjs";
2
3
  import { Option } from "./hooks.mjs";
3
4
  import { ComponentProps, FC, PropsWithChildren, ReactElement } from "react";
4
- import { Placement } from "@floating-ui/react";
5
5
 
6
6
  //#region src/components/overlays/list-box/list-box.d.ts
7
7
  declare const ListBox: {
@@ -1,14 +1,14 @@
1
1
  "use client";
2
2
  import { cn } from "../../../helpers/cn.mjs";
3
3
  import { Button } from "../../buttons/button/button.mjs";
4
- import { CheckIcon, ChevronIcon } from "../../icons/lucide.mjs";
5
- import { useFloatingUIContext } from "../popover/hooks.mjs";
4
+ import { useOpenContext } from "../popover/hooks.mjs";
6
5
  import { Popover } from "../popover/popover.mjs";
7
6
  import { IconButton } from "../../buttons/icon-button/icon-button.mjs";
7
+ import { CheckIcon, ChevronIcon } from "../../icons/lucide.mjs";
8
+ import { useListNavigation } from "../_internal/use-list-navigation.mjs";
8
9
  import { MenuContextProvider, useMenuContent, useMenuItem, useMenuTrigger } from "./hooks.mjs";
9
- import { useRef, useState } from "react";
10
+ import { useState } from "react";
10
11
  import { jsx, jsxs } from "react/jsx-runtime";
11
- import { FloatingList, useInteractions, useListNavigation } from "@floating-ui/react";
12
12
  //#region src/components/overlays/list-box/list-box.tsx
13
13
  const Root = ({ children, placement = "bottom", options, value, onChange }) => /* @__PURE__ */ jsx(Popover.Root, {
14
14
  flipDisabled: true,
@@ -22,48 +22,41 @@ const Root = ({ children, placement = "bottom", options, value, onChange }) => /
22
22
  })
23
23
  });
24
24
  const MenuProvider = ({ children, options, onChange, value }) => {
25
+ const { isOpen } = useOpenContext();
25
26
  const selectedIndex = options.findIndex((option) => option.key === value);
26
27
  const [activeIndex, setActiveIndex] = useState(null);
27
- const itemElementsRef = useRef([]);
28
- const { getReferenceProps, getFloatingProps, getItemProps } = useInteractions([useListNavigation(useFloatingUIContext(), {
29
- listRef: itemElementsRef,
28
+ const nav = useListNavigation({
29
+ open: isOpen,
30
30
  activeIndex,
31
+ setActiveIndex,
31
32
  selectedIndex,
32
- onNavigate: setActiveIndex,
33
33
  loop: true
34
- })]);
34
+ });
35
35
  const handleSelect = (index) => {
36
36
  const key = options[index]?.key;
37
37
  if (key !== void 0 && key !== "") onChange(key);
38
38
  };
39
39
  return /* @__PURE__ */ jsx(MenuContextProvider, {
40
40
  value: {
41
+ ...nav,
41
42
  options,
42
- activeIndex,
43
43
  selectedIndex,
44
- handleSelect,
45
- itemElementsRef,
46
- getTriggerProps: getReferenceProps,
47
- getContentProps: getFloatingProps,
48
- getItemProps
44
+ handleSelect
49
45
  },
50
46
  children
51
47
  });
52
48
  };
53
49
  const Content = ({ helpContent }) => {
54
- const { options, contentProps, itemElementsRef } = useMenuContent();
55
- return /* @__PURE__ */ jsx(FloatingList, {
56
- elementsRef: itemElementsRef,
57
- children: /* @__PURE__ */ jsx(Popover.Content, { renderItem: (props) => /* @__PURE__ */ jsxs("div", {
58
- ...props,
59
- ...contentProps,
60
- className: "bg-bg-raised vertical:max-h-none vertical:min-w-0 vertical:max-w-48 vertical:min-h-40 vertical:overflow-x-auto vertical:overflow-y-visible flex max-h-48 min-w-40 flex-col overflow-y-auto rounded-lg py-2 shadow-md",
61
- children: [helpContent, options.map(({ key, label }, idx) => /* @__PURE__ */ jsx(Item, {
62
- index: idx,
63
- label
64
- }, key))]
65
- }) })
66
- });
50
+ const { options, contentProps } = useMenuContent();
51
+ return /* @__PURE__ */ jsx(Popover.Content, { renderItem: (props) => /* @__PURE__ */ jsxs("div", {
52
+ ...props,
53
+ ...contentProps,
54
+ className: "bg-bg-raised vertical:max-h-none vertical:min-w-0 vertical:max-w-48 vertical:min-h-40 vertical:overflow-x-auto vertical:overflow-y-visible flex max-h-48 min-w-40 flex-col overflow-y-auto rounded-lg py-2 shadow-md",
55
+ children: [helpContent, options.map(({ key, label }, idx) => /* @__PURE__ */ jsx(Item, {
56
+ index: idx,
57
+ label
58
+ }, key))]
59
+ }) });
67
60
  };
68
61
  const Item = ({ label, index }) => {
69
62
  const { props, selected } = useMenuItem(index);
@@ -78,9 +71,9 @@ const Item = ({ label, index }) => {
78
71
  });
79
72
  };
80
73
  const Trigger = ({ size = "md" }) => {
81
- const { label, getTriggerProps } = useMenuTrigger();
74
+ const { label } = useMenuTrigger();
82
75
  return /* @__PURE__ */ jsx(Popover.Trigger, { renderItem: (props) => /* @__PURE__ */ jsx(Button, {
83
- ...getTriggerProps(props),
76
+ ...props,
84
77
  "aria-label": label,
85
78
  color: "gray",
86
79
  endIcon: /* @__PURE__ */ jsx(ChevronIcon, { direction: "down" }),
@@ -92,12 +85,12 @@ const Trigger = ({ size = "md" }) => {
92
85
  }) });
93
86
  };
94
87
  const TriggerIcon = ({ size = "md", icon }) => {
95
- const { label, getTriggerProps } = useMenuTrigger();
88
+ const { label } = useMenuTrigger();
96
89
  return /* @__PURE__ */ jsx(Popover.Trigger, { renderItem: (props) => /* @__PURE__ */ jsx(IconButton, {
97
90
  label,
98
91
  size,
99
92
  tooltipDisabled: true,
100
- ...getTriggerProps(props),
93
+ ...props,
101
94
  children: icon
102
95
  }) });
103
96
  };
@@ -0,0 +1,26 @@
1
+ import { Placement } from "../../../types/variables.mjs";
2
+ import { CSSProperties } from "react";
3
+
4
+ //#region src/components/overlays/popover/anchor-positioning.d.ts
5
+ /**
6
+ * CSS Anchor Positioning による配置ヘルパー。
7
+ *
8
+ * placement を position-area / position-try-fallbacks / 対向辺マージン(offset 相当)へ
9
+ * 変換する。旧 floating-ui のミドルウェア(offset / flip / autoUpdate)の置き換え。
10
+ *
11
+ * 注意: CSS Anchor Positioning は Baseline newly available(2026-01)で、
12
+ * 縦書き / RTL のインライン軸補正にエンジン差(既知の interop バグ)がある。
13
+ */
14
+ type AnchorCSSProperties = CSSProperties & {
15
+ positionAnchor?: string;
16
+ positionArea?: string;
17
+ positionTryFallbacks?: string;
18
+ };
19
+ declare const toAnchorName: (id: string) => string;
20
+ /**
21
+ * Popover content(位置決め対象)に適用する style。
22
+ * `flipDisabled` のときは position-try-fallbacks を付けず、はみ出しても反転しない。
23
+ */
24
+ declare const getContentAnchorStyle: (anchorName: string, placement: Placement, flipDisabled: boolean) => AnchorCSSProperties;
25
+ //#endregion
26
+ export { getContentAnchorStyle, toAnchorName };
@@ -0,0 +1,44 @@
1
+ //#region src/components/overlays/popover/anchor-positioning.ts
2
+ const POSITION_AREA = {
3
+ top: "top",
4
+ "top-start": "top span-right",
5
+ "top-end": "top span-left",
6
+ bottom: "bottom",
7
+ "bottom-start": "bottom span-right",
8
+ "bottom-end": "bottom span-left",
9
+ left: "left",
10
+ "left-start": "left span-bottom",
11
+ "left-end": "left span-top",
12
+ right: "right",
13
+ "right-start": "right span-bottom",
14
+ "right-end": "right span-top"
15
+ };
16
+ const GAP = "8px";
17
+ const sideGap = (side) => {
18
+ switch (side) {
19
+ case "top": return { marginBottom: GAP };
20
+ case "bottom": return { marginTop: GAP };
21
+ case "left": return { marginRight: GAP };
22
+ case "right": return { marginLeft: GAP };
23
+ default: return {};
24
+ }
25
+ };
26
+ const toAnchorName = (id) => `--ao-popover-${id.replaceAll(/[^a-zA-Z0-9_-]/gu, "")}`;
27
+ /**
28
+ * Popover content(位置決め対象)に適用する style。
29
+ * `flipDisabled` のときは position-try-fallbacks を付けず、はみ出しても反転しない。
30
+ */
31
+ const getContentAnchorStyle = (anchorName, placement, flipDisabled) => {
32
+ return {
33
+ position: "fixed",
34
+ inset: "auto",
35
+ margin: 0,
36
+ overflow: "visible",
37
+ ...sideGap(placement.split("-")[0] ?? "bottom"),
38
+ positionAnchor: anchorName,
39
+ positionArea: POSITION_AREA[placement],
40
+ ...flipDisabled ? {} : { positionTryFallbacks: "flip-block, flip-inline, flip-block flip-inline" }
41
+ };
42
+ };
43
+ //#endregion
44
+ export { getContentAnchorStyle, toAnchorName };
@@ -1,5 +1,5 @@
1
- import { CSSProperties, KeyboardEventHandler, MouseEventHandler, RefCallback, RefObject } from "react";
2
- import { FloatingContext, Placement, ReferenceType } from "@floating-ui/react";
1
+ import { Placement } from "../../../types/variables.mjs";
2
+ import { KeyboardEventHandler, MouseEventHandler, RefCallback, RefObject } from "react";
3
3
 
4
4
  //#region src/components/overlays/popover/hooks.d.ts
5
5
  type PopoverContext = {
@@ -11,16 +11,13 @@ type PopoverContext = {
11
11
  toggleOpen: () => void;
12
12
  onOpen: () => void;
13
13
  onClose: () => void;
14
- context: FloatingContext;
15
14
  placement: Placement;
16
- triggerRef: RefObject<Element | null>;
17
- setTriggerRef: (node: ReferenceType | null) => void;
18
- setContentRef: (node: HTMLElement | null) => void;
19
- contentStyles: CSSProperties;
15
+ anchorName: string;
16
+ flipDisabled: boolean;
17
+ triggerRef: RefObject<HTMLElement | null>;
18
+ setTriggerRef: (node: HTMLElement | null) => void;
20
19
  };
21
20
  declare const PopoverProvider: import("react").Context<PopoverContext | null>, usePopoverContext: () => PopoverContext;
22
- declare const useFloatingUIContext: () => FloatingContext;
23
- declare const usePlacement: () => Placement;
24
21
  declare const useOpenContext: () => {
25
22
  isOpen: boolean;
26
23
  onOpen: () => void;
@@ -38,9 +35,9 @@ declare const usePopoverContent: () => {
38
35
  ref: RefObject<HTMLDivElement | null>;
39
36
  isOpen: boolean;
40
37
  trapFocus: boolean;
41
- context: FloatingContext;
42
- setContentRef: (node: HTMLElement | null) => void;
43
- contentStyles: CSSProperties;
38
+ anchorName: string;
39
+ placement: Placement;
40
+ flipDisabled: boolean;
44
41
  itemProps: PopoverContentProps;
45
42
  };
46
43
  type PopoverTriggerProps = {
@@ -54,4 +51,4 @@ type PopoverTriggerProps = {
54
51
  };
55
52
  declare const usePopoverTrigger: () => PopoverTriggerProps;
56
53
  //#endregion
57
- export { PopoverContentProps, PopoverProvider, PopoverTriggerProps, useFloatingUIContext, useOpenContext, usePlacement, usePopoverContent, usePopoverContext, usePopoverTrigger };
54
+ export { PopoverContentProps, PopoverProvider, PopoverTriggerProps, useOpenContext, usePopoverContent, usePopoverContext, usePopoverTrigger };