@threadlabs/looma 0.2.19 → 0.3.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 (51) hide show
  1. package/dist/{chunk-A5MSXQ7Y.js → chunk-3NVMCHGR.js} +2225 -1255
  2. package/dist/chunk-XDNZIKNI.js +2721 -0
  3. package/dist/declarative-generated.cjs +93 -79
  4. package/dist/declarative-generated.d.cts +7 -1
  5. package/dist/declarative-generated.d.ts +7 -1
  6. package/dist/declarative-generated.js +91 -78
  7. package/dist/declarative.cjs +1499 -1702
  8. package/dist/declarative.d.cts +77 -3
  9. package/dist/declarative.d.ts +77 -3
  10. package/dist/declarative.js +5 -3
  11. package/dist/index.cjs +3732 -3025
  12. package/dist/index.d.cts +211 -35
  13. package/dist/index.d.ts +211 -35
  14. package/dist/index.js +6 -61
  15. package/dist/loader.cjs +3725 -2962
  16. package/dist/loader.js +2 -2
  17. package/editor/{chunk-WI7ZA44X.js → chunk-U36XNFJN.js} +111 -77
  18. package/editor/extensions/index.d.ts +272 -27
  19. package/editor/index.d.ts +1 -1
  20. package/editor/index.js +1 -1
  21. package/editor/{table-overlay-DoiLie4h.d.ts → table-overlay-DZFGHQDt.d.ts} +48 -6
  22. package/editor/ui.d.ts +15 -11
  23. package/editor/ui.js +1 -1
  24. package/layout/index.cjs +197 -340
  25. package/layout/index.d.cts +11 -0
  26. package/layout/index.d.ts +11 -0
  27. package/layout/index.js +197 -340
  28. package/layout.css +31 -134
  29. package/package.json +24 -11
  30. package/react/index.d.ts +1276 -0
  31. package/react/index.js +1526 -0
  32. package/styles.css +5 -10
  33. package/svelte/index.d.ts +204 -0
  34. package/svelte/index.js +1881 -0
  35. package/theme-dark.css +81 -2
  36. package/theme-high-contrast.css +14 -0
  37. package/theme-light.css +30 -1
  38. package/tokens.css +45 -1
  39. package/vue/chunk-UZMTYDP6.js +4355 -0
  40. package/vue/editor/index.d.ts +78 -8
  41. package/vue/editor/index.js +59 -49
  42. package/vue/index.d.ts +67 -78
  43. package/vue/index.js +3 -9
  44. package/dist/chunk-ECJQ4YGC.js +0 -2925
  45. package/dist/valibot.cjs +0 -31
  46. package/dist/valibot.d.cts +0 -10
  47. package/dist/valibot.d.ts +0 -10
  48. package/dist/valibot.js +0 -9
  49. package/dist/validation-bxcou-l-.d.cts +0 -58
  50. package/dist/validation-bxcou-l-.d.ts +0 -58
  51. package/vue/chunk-P7BZ2KJZ.js +0 -3559
package/dist/index.d.cts CHANGED
@@ -1,10 +1,29 @@
1
1
  import { IconNode } from 'lucide';
2
- import { F as FieldValidation, a as FieldFormatter, b as FieldIssue } from './validation-bxcou-l-.cjs';
3
- export { c as FieldFormat, d as FieldRequest, e as FieldResult, f as FieldSchema, g as FieldSchemaResult, h as FieldSelection, i as formatEditingValue, v as validateField } from './validation-bxcou-l-.cjs';
4
- export { ComponentDefinition, LoomaAdoptionRecord, LoomaControllerModule, attachLoomaComponent, controllerFor, manageComponentLifecycle, registerLoomaPackage } from './declarative.cjs';
2
+ export { ComponentDefinition, LoomaAdoptionRecord, LoomaControllerModule, attachLoomaComponent, controllerFor, manageComponentLifecycle, registerLoomaPackage, updateComponentProps } from './declarative.cjs';
5
3
 
4
+ /**
5
+ * Module-wide coordination for dismissible surfaces in one browser realm.
6
+ *
7
+ * Individual components own rendering and open state. This module owns only
8
+ * the cross-component invariants: Escape/light-dismiss target the most recently
9
+ * opened surface, document listeners exist only while needed, and scroll stays
10
+ * locked until the last modal closes. A component must therefore close its
11
+ * record during teardown even if its DOM node has already disconnected.
12
+ */
13
+ /** Why an overlay was asked to close; this describes intent, not state ownership. */
6
14
  type OverlayCloseReason = "programmatic" | "light-dismiss" | "escape" | "action";
15
+ /** Input modality that initiated an overlay state transition. */
7
16
  type OverlayTrigger = "keyboard" | "pointer" | "programmatic";
17
+ /**
18
+ * A live entry in the overlay stack.
19
+ *
20
+ * `requestClose` is deliberately a request rather than a mutation. Controlled
21
+ * components notify their owner and may remain open; uncontrolled components
22
+ * may close immediately. The manager must not guess which mode is active.
23
+ *
24
+ * @ownership The component owns the element and open state. The manager borrows
25
+ * the record only to coordinate stack order, dismissal, and modal accounting.
26
+ */
8
27
  interface OverlayRecord {
9
28
  id: string;
10
29
  modal: boolean;
@@ -15,12 +34,37 @@ interface OverlayRecord {
15
34
  dismissible?: boolean;
16
35
  requestClose: (reason: OverlayCloseReason, trigger: OverlayTrigger) => void;
17
36
  }
37
+ /**
38
+ * Moves an overlay to the top of the interaction stack.
39
+ * Reopening an existing id replaces its record so modal accounting cannot be
40
+ * incremented twice and the newest callbacks/related elements take effect.
41
+ *
42
+ * @lifecycle The record remains active until its id is closed or replaced;
43
+ * callers must close it during teardown even after the element disconnects.
44
+ */
18
45
  declare function openOverlay(record: OverlayRecord): void;
46
+ /** Removes an overlay record and releases global resources when the stack empties. */
19
47
  declare function closeOverlay(id: string): void;
48
+ /** Returns the most recently opened live record without mutating stack order. */
20
49
  declare function getTopOverlay(): OverlayRecord | undefined;
50
+ /** Reports whether an id currently owns Escape and light-dismiss handling. */
21
51
  declare function isTopOverlay(id: string): boolean;
52
+ /**
53
+ * Routes a dismissal request to the topmost overlay only.
54
+ *
55
+ * Returning `true` means a request was delivered, not that the overlay closed;
56
+ * controlled owners decide whether and when the corresponding state changes.
57
+ */
22
58
  declare function requestTopOverlayClose(reason: OverlayCloseReason, trigger: OverlayTrigger): boolean;
23
59
 
60
+ /**
61
+ * Rectangle in CSS-pixel viewport coordinates.
62
+ *
63
+ * `left`/`top` are not assumed to be zero because the visual viewport can be
64
+ * offset inside the layout viewport during pinch zoom or when an on-screen
65
+ * keyboard is present. Values are compatible with fixed-position surfaces and
66
+ * `getBoundingClientRect()` measurements used by this module.
67
+ */
24
68
  interface ViewportRect {
25
69
  left: number;
26
70
  top: number;
@@ -29,51 +73,104 @@ interface ViewportRect {
29
73
  width: number;
30
74
  height: number;
31
75
  }
76
+ /** Geometry accepted from DOMRect or a framework-neutral measurement adapter. */
32
77
  interface RectLike extends ViewportRect {
33
78
  }
79
+ /** A point in the same CSS-pixel viewport coordinate space as `RectLike`. */
34
80
  interface Point {
35
81
  x: number;
36
82
  y: number;
37
83
  }
84
+ /** Scope-level policy for non-hit-testable anticipatory affordances. */
38
85
  interface ProximityCoordinatorOptions {
39
- /** Event surface for pointer tracking. Defaults to the interaction scope. */
86
+ /** Event surface for pointer tracking. Defaults to the scope's owning document. */
40
87
  pointerTarget?: EventTarget;
41
88
  /** Descendants participating in proximity. */
42
89
  anchorSelector?: string;
43
90
  /** Distance outside an anchor that activates its anticipatory state. */
44
91
  nearRadius?: number;
45
92
  }
93
+ /**
94
+ * Owns shared pointer tracking and reflected proximity state for one scope.
95
+ *
96
+ * @lifecycle `destroy` is terminal: it cancels pending measurement, removes its
97
+ * listeners, and clears only the attributes reflected by this coordinator.
98
+ */
46
99
  interface ProximityCoordinator {
47
- /** Refreshes the anchor list and its cached geometry after a layout change. */
100
+ /**
101
+ * Invalidates the anchor list and cached geometry after layout changes.
102
+ * Work is coalesced into the next animation frame; callers do not need to
103
+ * debounce resize, editor-transaction, or content-change notifications.
104
+ */
48
105
  refresh(): void;
49
- /** Removes the scope-level listeners and all reflected interaction state. */
106
+ /**
107
+ * Removes scope-level listeners, cancels scheduled work, and clears every
108
+ * `data-ui-proximity`/`data-ui-interaction` attribute owned by the coordinator.
109
+ */
50
110
  destroy(): void;
51
111
  }
112
+ /** Logical placement preference; collision handling may flip either axis. */
52
113
  type AnchoredPlacement = "bottom-start" | "bottom-end" | "top-start" | "top-end";
114
+ /**
115
+ * Policy for an anchored floating surface.
116
+ * Gaps are CSS pixels. `anchor` remains application-owned and may be replaced;
117
+ * the controller only borrows it to measure and temporarily extend
118
+ * `anchor-name` without erasing an existing author value.
119
+ */
53
120
  interface AnchoredSurfaceOptions {
54
121
  anchor?: HTMLElement | null;
55
122
  placement?: AnchoredPlacement;
56
123
  gap?: number;
57
124
  viewportGap?: number;
58
125
  }
126
+ /**
127
+ * Lifecycle controller for one application-owned floating element.
128
+ *
129
+ * `hide` keeps the current anchor binding for cheap reopening. `destroy` is the
130
+ * terminal operation: it hides the surface, releases listeners/observers and
131
+ * animation frames, and restores the anchor's original `anchor-name` style.
132
+ *
133
+ * @ownership The application owns both DOM nodes; the controller owns only its
134
+ * temporary anchor-name contribution and open-session browser resources.
135
+ */
59
136
  interface AnchoredSurface {
137
+ /** Rebinds ownership bookkeeping from the previous anchor to the next one. */
60
138
  setAnchor(anchor: HTMLElement | null): void;
139
+ /** Opens relative to the current element anchor. */
61
140
  show(): void;
141
+ /** Opens at a viewport-coordinate point, temporarily overriding the anchor. */
62
142
  showAtPoint(point: Point): void;
143
+ /** Closes the top-layer surface and active listeners but preserves its anchor binding. */
63
144
  hide(): void;
145
+ /** Requests a coalesced remeasurement while open; it is inert while hidden. */
64
146
  refresh(): void;
147
+ /** Performs terminal cleanup and restores styles borrowed from the anchor. */
65
148
  destroy(): void;
66
149
  }
150
+ /**
151
+ * Minimal lifecycle for unanchored top-layer UI such as toast regions.
152
+ * The caller owns the element and its viewport CSS; destruction only closes the
153
+ * top-layer participation and does not remove the node.
154
+ *
155
+ * @ownership The application retains the element; this controller owns only its
156
+ * participation in the browser's top layer.
157
+ */
67
158
  interface ViewportSurface {
68
159
  show(): void;
160
+ /** Closes the surface without removing the application-owned element. */
69
161
  hide(): void;
162
+ /** Terminal alias for closing; retained for a uniform controller lifecycle. */
70
163
  destroy(): void;
71
164
  }
165
+ /** Default pointer halo in CSS pixels; it never changes native hit targets. */
72
166
  declare const DEFAULT_AFFORDANCE_NEAR_RADIUS = 16;
73
167
  /**
74
168
  * Places unanchored floating UI, such as a toast region, in the browser top
75
169
  * layer. Its viewport position remains CSS-owned; the controller only provides
76
170
  * the native Popover API boundary and its no-Popover fallback.
171
+ *
172
+ * @ownership The caller owns the element and its CSS; this controller owns only
173
+ * top-layer participation and never removes the node.
77
174
  */
78
175
  declare function createViewportSurface(surface: HTMLElement): ViewportSurface;
79
176
  /**
@@ -81,10 +178,35 @@ declare function createViewportSurface(surface: HTMLElement): ViewportSurface;
81
178
  * Popover provides the top layer and CSS Anchor Positioning follows a named
82
179
  * element. Browsers without Anchor Positioning use the same flip/shift
83
180
  * geometry through scroll/resize listeners that exist only while open.
181
+ *
182
+ * @ownership The caller owns both DOM nodes. The controller temporarily owns
183
+ * its generated anchor name, observers, listeners, and scheduled frames.
184
+ * @lifecycle `hide` releases open-only work but preserves the anchor binding;
185
+ * `destroy` is terminal and restores the anchor's original inline style.
84
186
  */
85
187
  declare function createAnchoredSurface(surface: HTMLElement, options?: AnchoredSurfaceOptions): AnchoredSurface;
188
+ /**
189
+ * Returns the currently visible fixed-position viewport, not merely the layout
190
+ * viewport. This keeps menus inside the region left visible by zoom and virtual
191
+ * keyboards; browsers without Visual Viewport fall back to `innerWidth/Height`.
192
+ *
193
+ * @contract The returned edges and dimensions share CSS-pixel viewport
194
+ * coordinates with `getBoundingClientRect()` and fixed-position surfaces.
195
+ */
86
196
  declare function getVisualViewportRect(owner?: Window): ViewportRect;
197
+ /**
198
+ * Calculates the translation needed to contain a rectangle inside a viewport.
199
+ *
200
+ * The input is never mutated. If a surface is larger than the available area,
201
+ * its leading edge is pinned to the gutter rather than oscillating between two
202
+ * impossible edge constraints.
203
+ */
87
204
  declare function clampRectToViewport(rect: RectLike, viewport?: ViewportRect, gutter?: number): Point;
205
+ /**
206
+ * Measures Euclidean distance to the nearest rectangle edge, returning zero
207
+ * for points inside it. This lets anticipatory affordances share generous visual
208
+ * proximity without enlarging or overlapping their actual pointer hit targets.
209
+ */
88
210
  declare function distanceFromPointToRect(point: Point, rect: RectLike): number;
89
211
  /**
90
212
  * Coordinates anticipatory UI within one interaction scope.
@@ -93,6 +215,11 @@ declare function distanceFromPointToRect(point: Point, rect: RectLike): number;
93
215
  * update for the whole scope. Anchors remain the only hit-testable controls; the
94
216
  * reflected state is presentation-only, so overlapping near regions do not steal
95
217
  * pointer input from each other or from surrounding content.
218
+ *
219
+ * @ownership The coordinator owns every proximity attribute it reflects plus
220
+ * one abortable listener set; it never owns the anchors themselves.
221
+ * @lifecycle `refresh` coalesces geometry invalidation into one frame, while
222
+ * `destroy` cancels pending work, removes listeners, and clears reflected state.
96
223
  */
97
224
  declare function createProximityCoordinator(scope: HTMLElement, options?: ProximityCoordinatorOptions): ProximityCoordinator;
98
225
 
@@ -100,6 +227,9 @@ declare function createProximityCoordinator(scope: HTMLElement, options?: Proxim
100
227
  * Reflects real touch use instead of guessing from device capability media
101
228
  * queries. Hybrid devices therefore keep compact pointer affordances until the
102
229
  * user actually touches the interface.
230
+ *
231
+ * @lifecycle Initialization is idempotent per document. Its passive listeners
232
+ * live with that document, and touch modality is sticky once observed.
103
233
  */
104
234
  declare function initializeInputModality(owner?: Document): void;
105
235
 
@@ -151,12 +281,21 @@ declare const LOOMA_ICONS: {
151
281
  underline: IconNode;
152
282
  undo: IconNode;
153
283
  };
284
+ /** Stable key selecting an icon from Looma's shipped interaction vocabulary. */
154
285
  type LoomaIconName = keyof typeof LOOMA_ICONS;
286
+ /** Framework-neutral Lucide element tree used to produce Looma icon markup. */
155
287
  type LoomaIconNode = IconNode;
156
288
  /** Creates consistent, currentColor-driven SVG markup for framework-neutral components. */
157
289
  declare function loomaIconMarkup(name: LoomaIconName, className?: string): string;
158
290
 
291
+ /** Relative insertion target resolved from a pointer's vertical row position. */
159
292
  type DropPosition = 'before' | 'inside' | 'after';
293
+ /**
294
+ * Controls one replaceable delayed intent keyed by the hovered target.
295
+ *
296
+ * @lifecycle `cancel` clears pending work but permits reuse; `destroy` provides
297
+ * terminal cleanup for owners even though this controller holds no other state.
298
+ */
160
299
  interface HoverIntentController {
161
300
  schedule(key: string): void;
162
301
  cancel(): void;
@@ -167,49 +306,69 @@ interface HoverIntentController {
167
306
  * middle half for containment; leaf rows split cleanly at their midpoint.
168
307
  */
169
308
  declare function classifyDropPosition(rect: Pick<DOMRect, 'top' | 'bottom' | 'height'>, clientY: number, acceptsChildren: boolean): DropPosition;
170
- /** Use the rendered row—not the tiny handle—as the browser drag preview. */
309
+ /**
310
+ * Uses the rendered row—not the tiny handle—as the browser drag preview.
311
+ *
312
+ * @contract Missing or non-browser data-transfer implementations are a no-op;
313
+ * otherwise the preview is inset from the left and vertically centered.
314
+ */
171
315
  declare function setElementDragImage(dataTransfer: DataTransfer | null, element: HTMLElement): void;
172
- /** A keyed, replaceable hover timer suitable for expansion and disclosure intent. */
316
+ /**
317
+ * Creates a keyed, replaceable hover timer for expansion and disclosure intent.
318
+ *
319
+ * Scheduling the same pending key is idempotent; scheduling a different key
320
+ * cancels the prior intent so only the newest target can fire.
321
+ *
322
+ * @lifecycle Cancellation and destruction suppress pending callbacks. Once an
323
+ * intent fires, the controller returns to an idle reusable state.
324
+ */
173
325
  declare function createHoverIntent(delay: number, onIntent: (key: string) => void): HoverIntentController;
174
326
 
175
- interface ComboboxOption<Metadata = unknown> {
327
+ /**
328
+ * Renderable validation problem, optionally located within structured input.
329
+ * Warning severity preserves accepted output; omitted severity is an error.
330
+ */
331
+ interface FieldIssue {
332
+ readonly message: string;
333
+ readonly path?: ReadonlyArray<PropertyKey | {
334
+ readonly key: PropertyKey;
335
+ }>;
336
+ readonly severity?: 'error' | 'warning';
337
+ }
338
+
339
+ /**
340
+ * Canonical option shape at Looma's domain boundary.
341
+ *
342
+ * `id` is stable identity for rendering and selection bookkeeping; `value` is
343
+ * the form/domain value. They are separate so labels or backend identifiers can
344
+ * change without making list reconciliation or selected-option lookup ambiguous.
345
+ * Options are authored as `<option>`/`<optgroup>` children; selected items cross
346
+ * the attribute boundary as JSON in this shape.
347
+ */
348
+ interface ComboboxOption {
176
349
  id: string;
177
350
  value: string;
178
351
  label: string;
179
- description?: string;
180
- metadata?: Metadata;
181
352
  group?: string;
182
353
  disabled?: boolean;
183
354
  }
184
- interface ComboboxRequest<Context = unknown> {
185
- query: string;
186
- context: Context;
187
- signal: AbortSignal;
188
- reason: 'input' | 'disclosure' | 'context';
189
- }
190
- type ComboboxProvider = (request: ComboboxRequest) => readonly ComboboxOption[] | Promise<readonly ComboboxOption[]>;
191
- /** Map domain records at the boundary, preserving typed metadata for rich rows. */
192
- declare function mapComboboxOptions<T>(rows: readonly T[], map: (row: T) => Omit<ComboboxOption<T>, 'metadata'>): ComboboxOption<T>[];
193
- interface ComboboxConfig extends FieldValidation {
194
- options?: readonly ComboboxOption[];
195
- provider?: ComboboxProvider;
196
- filter?: (option: ComboboxOption, query: string, context: unknown) => boolean;
197
- context?: unknown;
198
- invalidation?: 'clear' | 'retain-query' | 'retain';
199
- debounce?: number;
200
- allowFreeText?: boolean;
201
- allowCreate?: boolean;
202
- format?: FieldFormatter;
203
- formatOn?: 'input' | 'blur';
204
- validateOn?: 'input' | 'blur' | 'submit';
205
- }
355
+ /**
356
+ * Semantic value transition emitted by the combobox.
357
+ * `kind` explains the state-machine path while `trigger` records user modality;
358
+ * consumers should not infer either from low-level input/click events.
359
+ */
206
360
  interface ComboboxChange {
207
361
  value: string | null;
208
362
  query: string;
209
363
  option: ComboboxOption | null;
210
- kind: 'selection' | 'clear' | 'free-entry' | 'create' | 'invalidation';
364
+ kind: 'selection' | 'clear' | 'free-entry' | 'create';
211
365
  trigger: 'keyboard' | 'pointer' | 'programmatic';
212
366
  }
367
+ /**
368
+ * Renderable validation snapshot. `output` is defined only when the current
369
+ * value passed all error-severity checks; warnings preserve output and remain
370
+ * visible.
371
+ */
213
372
  interface ComboboxValidationState {
214
373
  status: 'pristine' | 'pending' | 'valid' | 'warning' | 'error';
215
374
  touched: boolean;
@@ -218,21 +377,38 @@ interface ComboboxValidationState {
218
377
  output?: unknown;
219
378
  }
220
379
 
380
+ /**
381
+ * Semantic transition between display and editing modes.
382
+ *
383
+ * The reason identifies the state-machine path while the trigger records input
384
+ * modality, so consumers need not reconstruct intent from low-level events.
385
+ */
221
386
  interface EditableChange {
222
387
  edit: boolean;
223
388
  reason: 'activate' | 'light-dismiss' | 'escape' | 'programmatic';
224
389
  trigger: 'keyboard' | 'pointer' | 'programmatic';
225
390
  }
226
391
 
392
+ /** Canonical selected item; multiple mode retains the full option for chip rendering. */
227
393
  type MultiComboboxItem = ComboboxOption;
394
+ /**
395
+ * One item-list transition. The list itself is owner-controlled; `index`
396
+ * identifies the insertion position or the removed item's former position
397
+ * rather than authorizing Looma to mutate an application collection.
398
+ */
228
399
  interface MultiComboboxItemChange {
229
400
  item: MultiComboboxItem;
230
401
  index: number;
231
402
  trigger: 'keyboard' | 'pointer' | 'programmatic';
232
403
  }
404
+ /**
405
+ * Request to create an item from unmatched editing text.
406
+ * The application owns deduplication, persistence, and the eventual controlled
407
+ * item-list update.
408
+ */
233
409
  interface MultiComboboxCreate {
234
410
  query: string;
235
411
  trigger: 'keyboard' | 'pointer' | 'programmatic';
236
412
  }
237
413
 
238
- export { type AnchoredPlacement, type AnchoredSurface, type AnchoredSurfaceOptions, type ComboboxChange, type ComboboxConfig, type ComboboxOption, type ComboboxProvider, type ComboboxRequest, type ComboboxValidationState, DEFAULT_AFFORDANCE_NEAR_RADIUS, type DropPosition, type EditableChange, FieldFormatter, FieldIssue, FieldValidation, type HoverIntentController, LOOMA_ICONS, type LoomaIconName, type LoomaIconNode, type MultiComboboxCreate, type MultiComboboxItem, type MultiComboboxItemChange, type OverlayCloseReason, type OverlayRecord, type OverlayTrigger, type Point, type ProximityCoordinator, type ProximityCoordinatorOptions, type RectLike, type ViewportRect, type ViewportSurface, clampRectToViewport, classifyDropPosition, closeOverlay, createAnchoredSurface, createHoverIntent, createProximityCoordinator, createViewportSurface, distanceFromPointToRect, getTopOverlay, getVisualViewportRect, initializeInputModality, isTopOverlay, loomaIconMarkup, mapComboboxOptions, openOverlay, requestTopOverlayClose, setElementDragImage };
414
+ export { type AnchoredPlacement, type AnchoredSurface, type AnchoredSurfaceOptions, type ComboboxChange, type ComboboxOption, type ComboboxValidationState, DEFAULT_AFFORDANCE_NEAR_RADIUS, type DropPosition, type EditableChange, type FieldIssue, type HoverIntentController, LOOMA_ICONS, type LoomaIconName, type LoomaIconNode, type MultiComboboxCreate, type MultiComboboxItem, type MultiComboboxItemChange, type OverlayCloseReason, type OverlayRecord, type OverlayTrigger, type Point, type ProximityCoordinator, type ProximityCoordinatorOptions, type RectLike, type ViewportRect, type ViewportSurface, clampRectToViewport, classifyDropPosition, closeOverlay, createAnchoredSurface, createHoverIntent, createProximityCoordinator, createViewportSurface, distanceFromPointToRect, getTopOverlay, getVisualViewportRect, initializeInputModality, isTopOverlay, loomaIconMarkup, openOverlay, requestTopOverlayClose, setElementDragImage };