@vielzeug/orbit 1.0.3

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 (134) hide show
  1. package/README.md +77 -0
  2. package/dist/_dev.cjs +2 -0
  3. package/dist/_dev.cjs.map +1 -0
  4. package/dist/_dev.d.ts +2 -0
  5. package/dist/_dev.d.ts.map +1 -0
  6. package/dist/_dev.js +2 -0
  7. package/dist/_dev.js.map +1 -0
  8. package/dist/auto-update.cjs +2 -0
  9. package/dist/auto-update.cjs.map +1 -0
  10. package/dist/auto-update.d.ts +53 -0
  11. package/dist/auto-update.d.ts.map +1 -0
  12. package/dist/auto-update.js +2 -0
  13. package/dist/auto-update.js.map +1 -0
  14. package/dist/compose.cjs +2 -0
  15. package/dist/compose.cjs.map +1 -0
  16. package/dist/compose.d.ts +25 -0
  17. package/dist/compose.d.ts.map +1 -0
  18. package/dist/compose.js +2 -0
  19. package/dist/compose.js.map +1 -0
  20. package/dist/core.cjs +2 -0
  21. package/dist/core.cjs.map +1 -0
  22. package/dist/core.d.ts +43 -0
  23. package/dist/core.d.ts.map +1 -0
  24. package/dist/core.js +2 -0
  25. package/dist/core.js.map +1 -0
  26. package/dist/devtools.cjs +2 -0
  27. package/dist/devtools.cjs.map +1 -0
  28. package/dist/devtools.d.ts +36 -0
  29. package/dist/devtools.d.ts.map +1 -0
  30. package/dist/devtools.js +2 -0
  31. package/dist/devtools.js.map +1 -0
  32. package/dist/errors.cjs +2 -0
  33. package/dist/errors.cjs.map +1 -0
  34. package/dist/errors.d.ts +9 -0
  35. package/dist/errors.d.ts.map +1 -0
  36. package/dist/errors.js +2 -0
  37. package/dist/errors.js.map +1 -0
  38. package/dist/float.cjs +2 -0
  39. package/dist/float.cjs.map +1 -0
  40. package/dist/float.d.ts +73 -0
  41. package/dist/float.d.ts.map +1 -0
  42. package/dist/float.js +2 -0
  43. package/dist/float.js.map +1 -0
  44. package/dist/index.cjs +1 -0
  45. package/dist/index.d.ts +28 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +1 -0
  48. package/dist/inline.cjs +2 -0
  49. package/dist/inline.cjs.map +1 -0
  50. package/dist/inline.d.ts +35 -0
  51. package/dist/inline.d.ts.map +1 -0
  52. package/dist/inline.js +2 -0
  53. package/dist/inline.js.map +1 -0
  54. package/dist/middleware/arrow.cjs +2 -0
  55. package/dist/middleware/arrow.cjs.map +1 -0
  56. package/dist/middleware/arrow.d.ts +25 -0
  57. package/dist/middleware/arrow.d.ts.map +1 -0
  58. package/dist/middleware/arrow.js +2 -0
  59. package/dist/middleware/arrow.js.map +1 -0
  60. package/dist/middleware/auto-placement.cjs +2 -0
  61. package/dist/middleware/auto-placement.cjs.map +1 -0
  62. package/dist/middleware/auto-placement.d.ts +28 -0
  63. package/dist/middleware/auto-placement.d.ts.map +1 -0
  64. package/dist/middleware/auto-placement.js +2 -0
  65. package/dist/middleware/auto-placement.js.map +1 -0
  66. package/dist/middleware/flip.cjs +2 -0
  67. package/dist/middleware/flip.cjs.map +1 -0
  68. package/dist/middleware/flip.d.ts +14 -0
  69. package/dist/middleware/flip.d.ts.map +1 -0
  70. package/dist/middleware/flip.js +2 -0
  71. package/dist/middleware/flip.js.map +1 -0
  72. package/dist/middleware/hide.cjs +2 -0
  73. package/dist/middleware/hide.cjs.map +1 -0
  74. package/dist/middleware/hide.d.ts +17 -0
  75. package/dist/middleware/hide.d.ts.map +1 -0
  76. package/dist/middleware/hide.js +2 -0
  77. package/dist/middleware/hide.js.map +1 -0
  78. package/dist/middleware/offset.cjs +2 -0
  79. package/dist/middleware/offset.cjs.map +1 -0
  80. package/dist/middleware/offset.d.ts +16 -0
  81. package/dist/middleware/offset.d.ts.map +1 -0
  82. package/dist/middleware/offset.js +2 -0
  83. package/dist/middleware/offset.js.map +1 -0
  84. package/dist/middleware/shift.cjs +2 -0
  85. package/dist/middleware/shift.cjs.map +1 -0
  86. package/dist/middleware/shift.d.ts +69 -0
  87. package/dist/middleware/shift.d.ts.map +1 -0
  88. package/dist/middleware/shift.js +2 -0
  89. package/dist/middleware/shift.js.map +1 -0
  90. package/dist/middleware/size.cjs +2 -0
  91. package/dist/middleware/size.cjs.map +1 -0
  92. package/dist/middleware/size.d.ts +22 -0
  93. package/dist/middleware/size.d.ts.map +1 -0
  94. package/dist/middleware/size.js +2 -0
  95. package/dist/middleware/size.js.map +1 -0
  96. package/dist/orbit.cjs +2 -0
  97. package/dist/orbit.cjs.map +1 -0
  98. package/dist/orbit.iife.js +2 -0
  99. package/dist/orbit.iife.js.map +1 -0
  100. package/dist/orbit.js +2 -0
  101. package/dist/orbit.js.map +1 -0
  102. package/dist/overflow.cjs +2 -0
  103. package/dist/overflow.cjs.map +1 -0
  104. package/dist/overflow.d.ts +32 -0
  105. package/dist/overflow.d.ts.map +1 -0
  106. package/dist/overflow.js +2 -0
  107. package/dist/overflow.js.map +1 -0
  108. package/dist/presets.cjs +2 -0
  109. package/dist/presets.cjs.map +1 -0
  110. package/dist/presets.d.ts +65 -0
  111. package/dist/presets.d.ts.map +1 -0
  112. package/dist/presets.js +2 -0
  113. package/dist/presets.js.map +1 -0
  114. package/dist/reactive.cjs +2 -0
  115. package/dist/reactive.cjs.map +1 -0
  116. package/dist/reactive.d.ts +47 -0
  117. package/dist/reactive.d.ts.map +1 -0
  118. package/dist/reactive.js +2 -0
  119. package/dist/reactive.js.map +1 -0
  120. package/dist/ssr.cjs +2 -0
  121. package/dist/ssr.cjs.map +1 -0
  122. package/dist/ssr.d.ts +41 -0
  123. package/dist/ssr.d.ts.map +1 -0
  124. package/dist/ssr.js +2 -0
  125. package/dist/ssr.js.map +1 -0
  126. package/dist/types.d.ts +166 -0
  127. package/dist/types.d.ts.map +1 -0
  128. package/dist/utils.cjs +2 -0
  129. package/dist/utils.cjs.map +1 -0
  130. package/dist/utils.d.ts +9 -0
  131. package/dist/utils.d.ts.map +1 -0
  132. package/dist/utils.js +2 -0
  133. package/dist/utils.js.map +1 -0
  134. package/package.json +67 -0
@@ -0,0 +1,166 @@
1
+ /** @vielzeug/orbit — shared public type definitions. */
2
+ export type Side = 'top' | 'bottom' | 'left' | 'right';
3
+ export type Alignment = 'start' | 'end';
4
+ export type Placement = Side | `${Side}-${Alignment}`;
5
+ export interface Rect {
6
+ x: number;
7
+ y: number;
8
+ width: number;
9
+ height: number;
10
+ }
11
+ export interface VirtualReference {
12
+ getBoundingClientRect: () => DOMRect | Rect;
13
+ getClientRects?: () => DOMRectList | DOMRect[];
14
+ }
15
+ export type ReferenceElement = Element | VirtualReference;
16
+ export interface SideObject {
17
+ top: number;
18
+ right: number;
19
+ bottom: number;
20
+ left: number;
21
+ }
22
+ export type Padding = number | Partial<SideObject>;
23
+ export interface ArrowData {
24
+ x?: number;
25
+ y?: number;
26
+ centerOffset: number;
27
+ /** `true` when the arrow was clamped away from its ideal center position (e.g. floating element shifted by `shift()`). */
28
+ constrained: boolean;
29
+ }
30
+ export interface FlipData {
31
+ /** Placements that were evaluated and overflowed before the winning placement was chosen. */
32
+ skippedPlacements: Placement[];
33
+ }
34
+ export interface ShiftData {
35
+ /** Amount shifted on the x axis in pixels. */
36
+ x: number;
37
+ /** Amount shifted on the y axis in pixels. */
38
+ y: number;
39
+ }
40
+ export interface HideData {
41
+ escaped?: boolean;
42
+ escapedOffsets?: SideObject;
43
+ referenceHidden?: boolean;
44
+ referenceHiddenOffsets?: SideObject;
45
+ }
46
+ export interface SizeData {
47
+ availableWidth: number;
48
+ availableHeight: number;
49
+ }
50
+ export interface MiddlewareData {
51
+ arrow?: ArrowData;
52
+ flip?: FlipData;
53
+ hide?: HideData;
54
+ shift?: ShiftData;
55
+ size?: SizeData;
56
+ [key: string]: unknown;
57
+ }
58
+ export interface MiddlewareState {
59
+ x: number;
60
+ y: number;
61
+ initialPlacement: Placement;
62
+ placement: Placement;
63
+ rects: {
64
+ floating: Rect;
65
+ reference: Rect;
66
+ };
67
+ elements: {
68
+ floating: HTMLElement;
69
+ reference: ReferenceElement;
70
+ };
71
+ middlewareData: MiddlewareData;
72
+ /** Global default boundary for overflow detection. Per-middleware `boundary` takes precedence. */
73
+ boundary?: Element | Rect;
74
+ /** Global default padding for overflow detection. Per-middleware `padding` takes precedence. */
75
+ padding?: Padding;
76
+ }
77
+ /**
78
+ * Signal that the middleware pipeline should re-run.
79
+ *
80
+ * Use `{}` for a bare restart (same rects and placement). Optionally:
81
+ * - `remeasure: true` — re-read both rects from the DOM before restarting.
82
+ * - `rects: { floating, reference }` — restart using the provided rects directly.
83
+ * - `placement` — override the placement for the next pass.
84
+ *
85
+ * **Precedence:** `remeasure` takes priority over `rects`. When both are set,
86
+ * `remeasure` triggers a fresh DOM read and `rects` is ignored.
87
+ */
88
+ export type MiddlewareReset = {
89
+ placement?: Placement;
90
+ /** Provide explicit rects to use for the next pass instead of re-reading the DOM. */
91
+ rects?: MiddlewareState['rects'];
92
+ /** Re-read both element rects from the DOM before restarting the pipeline. */
93
+ remeasure?: boolean;
94
+ };
95
+ export interface MiddlewareResult {
96
+ x?: number;
97
+ y?: number;
98
+ placement?: Placement;
99
+ data?: MiddlewareData;
100
+ reset?: MiddlewareReset;
101
+ }
102
+ export type Middleware = (state: MiddlewareState) => MiddlewareResult | void;
103
+ /**
104
+ * A middleware branded with the key it writes to `middlewareData`.
105
+ * Built-in middleware return this type. Custom middleware can cast to it if needed.
106
+ */
107
+ export type TypedMiddleware<K extends string, D> = Middleware & {};
108
+ export interface ComputePositionResult {
109
+ x: number;
110
+ y: number;
111
+ placement: Placement;
112
+ middlewareData: MiddlewareData;
113
+ }
114
+ export interface ComputePositionOptions {
115
+ /** Middleware pipeline to run. Falsy entries are ignored. */
116
+ middleware?: Array<Middleware | null | undefined | false>;
117
+ /** Initial placement. Defaults to `'bottom'`. */
118
+ placement?: Placement;
119
+ /**
120
+ * The containing block element for `position: absolute` floating elements.
121
+ * Provide the floating element's `offsetParent` to convert viewport-relative
122
+ * coordinates to containing-block-relative coordinates.
123
+ *
124
+ * Without this option, coordinates are viewport-relative (correct for `position: fixed`).
125
+ */
126
+ containingBlock?: Element | null;
127
+ /**
128
+ * Default boundary for all overflow-aware middleware (`flip`, `shift`, `autoPlacement`, `size`, `hide`).
129
+ * Per-middleware `boundary` takes precedence. Defaults to the visual viewport when omitted.
130
+ */
131
+ boundary?: Element | Rect;
132
+ /**
133
+ * Default padding for all overflow-aware middleware.
134
+ * Per-middleware `padding` takes precedence. Defaults to `0` when omitted.
135
+ */
136
+ padding?: Padding;
137
+ }
138
+ /**
139
+ * Handle returned by `float()`.
140
+ *
141
+ * - `dispose()` — removes all event listeners and observers. Always call this on teardown.
142
+ * - `update()` — manually trigger a position recalculation.
143
+ * - `getPosition()` — returns the most recently computed position.
144
+ * - When `autoUpdate: false`, the position is computed synchronously during `float()`, so
145
+ * `getPosition()` is **never `null`** immediately after `float()` returns.
146
+ * - When using the `autoUpdate` loop (default), `getPosition()` returns `null` only before
147
+ * the very first update fires, which happens synchronously on construction.
148
+ * - Always returns `null` in SSR environments (via `@vielzeug/orbit/ssr`).
149
+ */
150
+ export interface FloatHandle {
151
+ /** `AbortSignal` aborted when `dispose()` is called. Use to tie external lifetimes to this handle. */
152
+ readonly disposalSignal: AbortSignal;
153
+ dispose(): void;
154
+ /** `true` after `dispose()` has been called. */
155
+ readonly disposed: boolean;
156
+ getPosition(): ComputePositionResult | null;
157
+ update(): void;
158
+ [Symbol.dispose](): void;
159
+ }
160
+ export interface DetectOverflowOptions {
161
+ /** Boundary element or rect. Defaults to the visual viewport. */
162
+ boundary?: Element | Rect;
163
+ /** Inset padding inside the boundary that the floating element must respect. */
164
+ padding?: Padding;
165
+ }
166
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/utils.cjs ADDED
@@ -0,0 +1,2 @@
1
+ const e=require("./errors.cjs");require("@vielzeug/arsenal");var t={bottom:`top`,left:`right`,right:`left`,top:`bottom`};function n(e){return e.split(`-`)[0]}function r(e){return e.split(`-`)[1]??null}function i(e,t){return t?`${e}-${t}`:e}function a({height:e,width:t,x:n,y:r}){return{height:e,width:t,x:n,y:r}}function o(e=0){return typeof e==`number`?{bottom:e,left:e,right:e,top:e}:{bottom:e.bottom??0,left:e.left??0,right:e.right??0,top:e.top??0}}function s(e){return typeof Element<`u`&&e instanceof Element}var c=[[`arrow`,`flip`],[`arrow`,`shift`],[`arrow`,`autoPlacement`],[`flip`,`inline`],[`shift`,`inline`],[`autoPlacement`,`inline`],[`size`,`flip`],[`size`,`autoPlacement`]];function l(t){for(let[n,r]of c){let i=t.indexOf(n),a=t.indexOf(r);if(i!==-1&&a!==-1&&i<a)throw new e.OrbitConfigError(`"${n}" must come after "${r}" in the middleware pipeline. Recommended order: inline → offset → flip/autoPlacement → shift → size → arrow.`)}if(t.includes(`flip`)&&t.includes(`autoPlacement`))throw new e.OrbitConfigError(`use either flip() or autoPlacement() in the middleware pipeline, not both.`)}var u=Symbol.for(`@vielzeug/orbit/name`);function d(e,t){return e[u]=t,e}function f(e,t,n,r){return e===`start`?t:e===`end`?t+n-r:t+(n-r)/2}function p(e,t,i){let a=n(e),o=r(e);switch(a){case`bottom`:return{x:f(o,t.x,t.width,i.width),y:t.y+t.height};case`left`:return{x:t.x-i.width,y:f(o,t.y,t.height,i.height)};case`right`:return{x:t.x+t.width,y:f(o,t.y,t.height,i.height)};case`top`:return{x:f(o,t.x,t.width,i.width),y:t.y-i.height}}}exports.MIDDLEWARE_NAME=u,exports.MIDDLEWARE_ORDER_RULES=c,exports.OPPOSITE=t,exports.baseCoords=p,exports.getAlignment=r,exports.getSide=n,exports.isElement=s,exports.tagMiddleware=d,exports.toRect=a,exports.toSideObject=o,exports.validateMiddlewareNames=l,exports.withPlacement=i;
2
+ //# sourceMappingURL=utils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.cjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import { clamp } from '@vielzeug/arsenal';\n\nimport type { Alignment, Middleware, Padding, Placement, Rect, Side, SideObject, TypedMiddleware } from './types';\n\nimport { OrbitConfigError } from './errors';\n\nexport { clamp };\n\nexport const OPPOSITE: Record<Side, Side> = { bottom: 'top', left: 'right', right: 'left', top: 'bottom' };\n\n/** Returns the primary side of a placement (`'top' | 'bottom' | 'left' | 'right'`). */\nexport function getSide(p: Placement): Side {\n return p.split('-')[0] as Side;\n}\n\n/** Returns the alignment of a placement (`'start' | 'end'`), or `null` for center placements. */\nexport function getAlignment(p: Placement): Alignment | null {\n return (p.split('-')[1] as Alignment) ?? null;\n}\n\n/** @internal */\nexport function withPlacement(side: Side, align: Alignment | null): Placement {\n return (align ? `${side}-${align}` : side) as Placement;\n}\n\n/** @internal */\nexport function toRect({ height, width, x, y }: DOMRect | Rect): Rect {\n return { height, width, x, y };\n}\n\n/** @internal */\nexport function toSideObject(padding: Padding = 0): SideObject {\n if (typeof padding === 'number') {\n return { bottom: padding, left: padding, right: padding, top: padding };\n }\n\n return {\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n right: padding.right ?? 0,\n top: padding.top ?? 0,\n };\n}\n\n/** @internal */\nexport function isElement(value: unknown): value is Element {\n return typeof Element !== 'undefined' && value instanceof Element;\n}\n\n// ── Middleware helpers ────────────────────────────────────────────────────────\n\n/**\n * Ordering rules for dev-mode middleware validation.\n * Each tuple is `[mustFollow, mustPrecede]` — `mustFollow` must appear **after** `mustPrecede`\n * in the pipeline. Validation throws if `mustFollow` is found at a lower index than `mustPrecede`.\n * @internal\n */\nexport const MIDDLEWARE_ORDER_RULES: Array<[mustFollow: string, mustPrecede: string]> = [\n ['arrow', 'flip'],\n ['arrow', 'shift'],\n ['arrow', 'autoPlacement'],\n ['flip', 'inline'],\n ['shift', 'inline'],\n ['autoPlacement', 'inline'],\n ['size', 'flip'],\n ['size', 'autoPlacement'],\n];\n\n/**\n * Validates a list of middleware names for known-bad orderings.\n * Throws a descriptive error in dev mode if an invalid ordering is detected.\n * @internal\n */\nexport function validateMiddlewareNames(names: Array<string | null>): void {\n for (const [mustFollow, mustPrecede] of MIDDLEWARE_ORDER_RULES) {\n const followIdx = names.indexOf(mustFollow);\n const precedeIdx = names.indexOf(mustPrecede);\n\n if (followIdx !== -1 && precedeIdx !== -1 && followIdx < precedeIdx) {\n throw new OrbitConfigError(\n `\"${mustFollow}\" must come after \"${mustPrecede}\" in the middleware pipeline. ` +\n `Recommended order: inline → offset → flip/autoPlacement → shift → size → arrow.`,\n );\n }\n }\n\n if (names.includes('flip') && names.includes('autoPlacement')) {\n throw new OrbitConfigError('use either flip() or autoPlacement() in the middleware pipeline, not both.');\n }\n}\n\n/**\n * Unique symbol used to tag middleware with a name for dev-mode ordering validation.\n * Using a Symbol avoids collisions with any `__name` property set by transpilers or wrappers.\n * @internal\n */\nexport const MIDDLEWARE_NAME = Symbol.for('@vielzeug/orbit/name');\n\n/**\n * Tags a middleware function with a name for dev-mode ordering validation and brands it\n * as a `TypedMiddleware<K, D>` for compile-time `middlewareData` inference.\n * @internal\n */\nexport function tagMiddleware<K extends string, D, F extends Middleware>(fn: F, name: K): F & TypedMiddleware<K, D> {\n (fn as Record<symbol, unknown>)[MIDDLEWARE_NAME] = name;\n\n return fn as F & TypedMiddleware<K, D>;\n}\n\n// ── Geometry ──────────────────────────────────────────────────────────────────\n\nfunction alignedOffset(align: Alignment | null, refStart: number, refSize: number, floatSize: number): number {\n if (align === 'start') return refStart;\n\n if (align === 'end') return refStart + refSize - floatSize;\n\n return refStart + (refSize - floatSize) / 2;\n}\n\n/**\n * Computes the base (un-shifted) x/y coordinates for a floating element\n * given the placement and the reference/floating rects.\n * @internal\n */\nexport function baseCoords(placement: Placement, ref: Rect, float: Rect): { x: number; y: number } {\n const side = getSide(placement);\n const align = getAlignment(placement);\n\n switch (side) {\n case 'bottom':\n return { x: alignedOffset(align, ref.x, ref.width, float.width), y: ref.y + ref.height };\n case 'left':\n return { x: ref.x - float.width, y: alignedOffset(align, ref.y, ref.height, float.height) };\n case 'right':\n return { x: ref.x + ref.width, y: alignedOffset(align, ref.y, ref.height, float.height) };\n case 'top':\n return { x: alignedOffset(align, ref.x, ref.width, float.width), y: ref.y - float.height };\n }\n}\n"],"mappings":"6DAQA,IAAa,EAA+B,CAAE,OAAQ,MAAO,KAAM,QAAS,MAAO,OAAQ,IAAK,QAAS,EAGzG,SAAgB,EAAQ,EAAoB,CAC1C,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EACtB,CAGA,SAAgB,EAAa,EAAgC,CAC3D,OAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,IAAoB,IAC3C,CAGA,SAAgB,EAAc,EAAY,EAAoC,CAC5E,OAAQ,EAAQ,GAAG,EAAK,GAAG,IAAU,CACvC,CAGA,SAAgB,EAAO,CAAE,SAAQ,QAAO,IAAG,KAA2B,CACpE,MAAO,CAAE,SAAQ,QAAO,IAAG,GAAE,CAC/B,CAGA,SAAgB,EAAa,EAAmB,EAAe,CAK7D,OAJI,OAAO,GAAY,SACd,CAAE,OAAQ,EAAS,KAAM,EAAS,MAAO,EAAS,IAAK,CAAQ,EAGjE,CACL,OAAQ,EAAQ,QAAU,EAC1B,KAAM,EAAQ,MAAQ,EACtB,MAAO,EAAQ,OAAS,EACxB,IAAK,EAAQ,KAAO,CACtB,CACF,CAGA,SAAgB,EAAU,EAAkC,CAC1D,OAAO,OAAO,QAAY,KAAe,aAAiB,OAC5D,CAUA,IAAa,EAA2E,CACtF,CAAC,QAAS,MAAM,EAChB,CAAC,QAAS,OAAO,EACjB,CAAC,QAAS,eAAe,EACzB,CAAC,OAAQ,QAAQ,EACjB,CAAC,QAAS,QAAQ,EAClB,CAAC,gBAAiB,QAAQ,EAC1B,CAAC,OAAQ,MAAM,EACf,CAAC,OAAQ,eAAe,CAC1B,EAOA,SAAgB,EAAwB,EAAmC,CACzE,IAAK,GAAM,CAAC,EAAY,KAAgB,EAAwB,CAC9D,IAAM,EAAY,EAAM,QAAQ,CAAU,EACpC,EAAa,EAAM,QAAQ,CAAW,EAE5C,GAAI,IAAc,IAAM,IAAe,IAAM,EAAY,EACvD,MAAM,IAAI,EAAA,iBACR,IAAI,EAAW,qBAAqB,EAAY,8GAElD,CAEJ,CAEA,GAAI,EAAM,SAAS,MAAM,GAAK,EAAM,SAAS,eAAe,EAC1D,MAAM,IAAI,EAAA,iBAAiB,4EAA4E,CAE3G,CAOA,IAAa,EAAkB,OAAO,IAAI,sBAAsB,EAOhE,SAAgB,EAAyD,EAAO,EAAoC,CAGlH,MAFA,GAAgC,GAAmB,EAE5C,CACT,CAIA,SAAS,EAAc,EAAyB,EAAkB,EAAiB,EAA2B,CAK5G,OAJI,IAAU,QAAgB,EAE1B,IAAU,MAAc,EAAW,EAAU,EAE1C,GAAY,EAAU,GAAa,CAC5C,CAOA,SAAgB,EAAW,EAAsB,EAAW,EAAuC,CACjG,IAAM,EAAO,EAAQ,CAAS,EACxB,EAAQ,EAAa,CAAS,EAEpC,OAAQ,EAAR,CACE,IAAK,SACH,MAAO,CAAE,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,MAAO,EAAM,KAAK,EAAG,EAAG,EAAI,EAAI,EAAI,MAAO,EACzF,IAAK,OACH,MAAO,CAAE,EAAG,EAAI,EAAI,EAAM,MAAO,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,OAAQ,EAAM,MAAM,CAAE,EAC5F,IAAK,QACH,MAAO,CAAE,EAAG,EAAI,EAAI,EAAI,MAAO,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,OAAQ,EAAM,MAAM,CAAE,EAC1F,IAAK,MACH,MAAO,CAAE,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,MAAO,EAAM,KAAK,EAAG,EAAG,EAAI,EAAI,EAAM,MAAO,CAC7F,CACF"}
@@ -0,0 +1,9 @@
1
+ import { clamp } from '@vielzeug/arsenal';
2
+ import type { Alignment, Placement, Side } from './types';
3
+ export { clamp };
4
+ export declare const OPPOSITE: Record<Side, Side>;
5
+ /** Returns the primary side of a placement (`'top' | 'bottom' | 'left' | 'right'`). */
6
+ export declare function getSide(p: Placement): Side;
7
+ /** Returns the alignment of a placement (`'start' | 'end'`), or `null` for center placements. */
8
+ export declare function getAlignment(p: Placement): Alignment | null;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,KAAK,EAAE,SAAS,EAAuB,SAAS,EAAQ,IAAI,EAA+B,MAAM,SAAS,CAAC;AAIlH,OAAO,EAAE,KAAK,EAAE,CAAC;AAEjB,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAkE,CAAC;AAE3G,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,CAAC,EAAE,SAAS,GAAG,IAAI,CAE1C;AAED,iGAAiG;AACjG,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CAE3D"}
package/dist/utils.js ADDED
@@ -0,0 +1,2 @@
1
+ import{OrbitConfigError as e}from"./errors.js";import{clamp as t}from"@vielzeug/arsenal";var n={bottom:`top`,left:`right`,right:`left`,top:`bottom`};function r(e){return e.split(`-`)[0]}function i(e){return e.split(`-`)[1]??null}function a(e,t){return t?`${e}-${t}`:e}function o({height:e,width:t,x:n,y:r}){return{height:e,width:t,x:n,y:r}}function s(e=0){return typeof e==`number`?{bottom:e,left:e,right:e,top:e}:{bottom:e.bottom??0,left:e.left??0,right:e.right??0,top:e.top??0}}function c(e){return typeof Element<`u`&&e instanceof Element}var l=[[`arrow`,`flip`],[`arrow`,`shift`],[`arrow`,`autoPlacement`],[`flip`,`inline`],[`shift`,`inline`],[`autoPlacement`,`inline`],[`size`,`flip`],[`size`,`autoPlacement`]];function u(t){for(let[n,r]of l){let i=t.indexOf(n),a=t.indexOf(r);if(i!==-1&&a!==-1&&i<a)throw new e(`"${n}" must come after "${r}" in the middleware pipeline. Recommended order: inline → offset → flip/autoPlacement → shift → size → arrow.`)}if(t.includes(`flip`)&&t.includes(`autoPlacement`))throw new e(`use either flip() or autoPlacement() in the middleware pipeline, not both.`)}var d=Symbol.for(`@vielzeug/orbit/name`);function f(e,t){return e[d]=t,e}function p(e,t,n,r){return e===`start`?t:e===`end`?t+n-r:t+(n-r)/2}function m(e,t,n){let a=r(e),o=i(e);switch(a){case`bottom`:return{x:p(o,t.x,t.width,n.width),y:t.y+t.height};case`left`:return{x:t.x-n.width,y:p(o,t.y,t.height,n.height)};case`right`:return{x:t.x+t.width,y:p(o,t.y,t.height,n.height)};case`top`:return{x:p(o,t.x,t.width,n.width),y:t.y-n.height}}}export{d as MIDDLEWARE_NAME,l as MIDDLEWARE_ORDER_RULES,n as OPPOSITE,m as baseCoords,t as clamp,i as getAlignment,r as getSide,c as isElement,f as tagMiddleware,o as toRect,s as toSideObject,u as validateMiddlewareNames,a as withPlacement};
2
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import { clamp } from '@vielzeug/arsenal';\n\nimport type { Alignment, Middleware, Padding, Placement, Rect, Side, SideObject, TypedMiddleware } from './types';\n\nimport { OrbitConfigError } from './errors';\n\nexport { clamp };\n\nexport const OPPOSITE: Record<Side, Side> = { bottom: 'top', left: 'right', right: 'left', top: 'bottom' };\n\n/** Returns the primary side of a placement (`'top' | 'bottom' | 'left' | 'right'`). */\nexport function getSide(p: Placement): Side {\n return p.split('-')[0] as Side;\n}\n\n/** Returns the alignment of a placement (`'start' | 'end'`), or `null` for center placements. */\nexport function getAlignment(p: Placement): Alignment | null {\n return (p.split('-')[1] as Alignment) ?? null;\n}\n\n/** @internal */\nexport function withPlacement(side: Side, align: Alignment | null): Placement {\n return (align ? `${side}-${align}` : side) as Placement;\n}\n\n/** @internal */\nexport function toRect({ height, width, x, y }: DOMRect | Rect): Rect {\n return { height, width, x, y };\n}\n\n/** @internal */\nexport function toSideObject(padding: Padding = 0): SideObject {\n if (typeof padding === 'number') {\n return { bottom: padding, left: padding, right: padding, top: padding };\n }\n\n return {\n bottom: padding.bottom ?? 0,\n left: padding.left ?? 0,\n right: padding.right ?? 0,\n top: padding.top ?? 0,\n };\n}\n\n/** @internal */\nexport function isElement(value: unknown): value is Element {\n return typeof Element !== 'undefined' && value instanceof Element;\n}\n\n// ── Middleware helpers ────────────────────────────────────────────────────────\n\n/**\n * Ordering rules for dev-mode middleware validation.\n * Each tuple is `[mustFollow, mustPrecede]` — `mustFollow` must appear **after** `mustPrecede`\n * in the pipeline. Validation throws if `mustFollow` is found at a lower index than `mustPrecede`.\n * @internal\n */\nexport const MIDDLEWARE_ORDER_RULES: Array<[mustFollow: string, mustPrecede: string]> = [\n ['arrow', 'flip'],\n ['arrow', 'shift'],\n ['arrow', 'autoPlacement'],\n ['flip', 'inline'],\n ['shift', 'inline'],\n ['autoPlacement', 'inline'],\n ['size', 'flip'],\n ['size', 'autoPlacement'],\n];\n\n/**\n * Validates a list of middleware names for known-bad orderings.\n * Throws a descriptive error in dev mode if an invalid ordering is detected.\n * @internal\n */\nexport function validateMiddlewareNames(names: Array<string | null>): void {\n for (const [mustFollow, mustPrecede] of MIDDLEWARE_ORDER_RULES) {\n const followIdx = names.indexOf(mustFollow);\n const precedeIdx = names.indexOf(mustPrecede);\n\n if (followIdx !== -1 && precedeIdx !== -1 && followIdx < precedeIdx) {\n throw new OrbitConfigError(\n `\"${mustFollow}\" must come after \"${mustPrecede}\" in the middleware pipeline. ` +\n `Recommended order: inline → offset → flip/autoPlacement → shift → size → arrow.`,\n );\n }\n }\n\n if (names.includes('flip') && names.includes('autoPlacement')) {\n throw new OrbitConfigError('use either flip() or autoPlacement() in the middleware pipeline, not both.');\n }\n}\n\n/**\n * Unique symbol used to tag middleware with a name for dev-mode ordering validation.\n * Using a Symbol avoids collisions with any `__name` property set by transpilers or wrappers.\n * @internal\n */\nexport const MIDDLEWARE_NAME = Symbol.for('@vielzeug/orbit/name');\n\n/**\n * Tags a middleware function with a name for dev-mode ordering validation and brands it\n * as a `TypedMiddleware<K, D>` for compile-time `middlewareData` inference.\n * @internal\n */\nexport function tagMiddleware<K extends string, D, F extends Middleware>(fn: F, name: K): F & TypedMiddleware<K, D> {\n (fn as Record<symbol, unknown>)[MIDDLEWARE_NAME] = name;\n\n return fn as F & TypedMiddleware<K, D>;\n}\n\n// ── Geometry ──────────────────────────────────────────────────────────────────\n\nfunction alignedOffset(align: Alignment | null, refStart: number, refSize: number, floatSize: number): number {\n if (align === 'start') return refStart;\n\n if (align === 'end') return refStart + refSize - floatSize;\n\n return refStart + (refSize - floatSize) / 2;\n}\n\n/**\n * Computes the base (un-shifted) x/y coordinates for a floating element\n * given the placement and the reference/floating rects.\n * @internal\n */\nexport function baseCoords(placement: Placement, ref: Rect, float: Rect): { x: number; y: number } {\n const side = getSide(placement);\n const align = getAlignment(placement);\n\n switch (side) {\n case 'bottom':\n return { x: alignedOffset(align, ref.x, ref.width, float.width), y: ref.y + ref.height };\n case 'left':\n return { x: ref.x - float.width, y: alignedOffset(align, ref.y, ref.height, float.height) };\n case 'right':\n return { x: ref.x + ref.width, y: alignedOffset(align, ref.y, ref.height, float.height) };\n case 'top':\n return { x: alignedOffset(align, ref.x, ref.width, float.width), y: ref.y - float.height };\n }\n}\n"],"mappings":"yFAQA,IAAa,EAA+B,CAAE,OAAQ,MAAO,KAAM,QAAS,MAAO,OAAQ,IAAK,QAAS,EAGzG,SAAgB,EAAQ,EAAoB,CAC1C,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EACtB,CAGA,SAAgB,EAAa,EAAgC,CAC3D,OAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,IAAoB,IAC3C,CAGA,SAAgB,EAAc,EAAY,EAAoC,CAC5E,OAAQ,EAAQ,GAAG,EAAK,GAAG,IAAU,CACvC,CAGA,SAAgB,EAAO,CAAE,SAAQ,QAAO,IAAG,KAA2B,CACpE,MAAO,CAAE,SAAQ,QAAO,IAAG,GAAE,CAC/B,CAGA,SAAgB,EAAa,EAAmB,EAAe,CAK7D,OAJI,OAAO,GAAY,SACd,CAAE,OAAQ,EAAS,KAAM,EAAS,MAAO,EAAS,IAAK,CAAQ,EAGjE,CACL,OAAQ,EAAQ,QAAU,EAC1B,KAAM,EAAQ,MAAQ,EACtB,MAAO,EAAQ,OAAS,EACxB,IAAK,EAAQ,KAAO,CACtB,CACF,CAGA,SAAgB,EAAU,EAAkC,CAC1D,OAAO,OAAO,QAAY,KAAe,aAAiB,OAC5D,CAUA,IAAa,EAA2E,CACtF,CAAC,QAAS,MAAM,EAChB,CAAC,QAAS,OAAO,EACjB,CAAC,QAAS,eAAe,EACzB,CAAC,OAAQ,QAAQ,EACjB,CAAC,QAAS,QAAQ,EAClB,CAAC,gBAAiB,QAAQ,EAC1B,CAAC,OAAQ,MAAM,EACf,CAAC,OAAQ,eAAe,CAC1B,EAOA,SAAgB,EAAwB,EAAmC,CACzE,IAAK,GAAM,CAAC,EAAY,KAAgB,EAAwB,CAC9D,IAAM,EAAY,EAAM,QAAQ,CAAU,EACpC,EAAa,EAAM,QAAQ,CAAW,EAE5C,GAAI,IAAc,IAAM,IAAe,IAAM,EAAY,EACvD,MAAM,IAAI,EACR,IAAI,EAAW,qBAAqB,EAAY,8GAElD,CAEJ,CAEA,GAAI,EAAM,SAAS,MAAM,GAAK,EAAM,SAAS,eAAe,EAC1D,MAAM,IAAI,EAAiB,4EAA4E,CAE3G,CAOA,IAAa,EAAkB,OAAO,IAAI,sBAAsB,EAOhE,SAAgB,EAAyD,EAAO,EAAoC,CAGlH,MAFA,GAAgC,GAAmB,EAE5C,CACT,CAIA,SAAS,EAAc,EAAyB,EAAkB,EAAiB,EAA2B,CAK5G,OAJI,IAAU,QAAgB,EAE1B,IAAU,MAAc,EAAW,EAAU,EAE1C,GAAY,EAAU,GAAa,CAC5C,CAOA,SAAgB,EAAW,EAAsB,EAAW,EAAuC,CACjG,IAAM,EAAO,EAAQ,CAAS,EACxB,EAAQ,EAAa,CAAS,EAEpC,OAAQ,EAAR,CACE,IAAK,SACH,MAAO,CAAE,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,MAAO,EAAM,KAAK,EAAG,EAAG,EAAI,EAAI,EAAI,MAAO,EACzF,IAAK,OACH,MAAO,CAAE,EAAG,EAAI,EAAI,EAAM,MAAO,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,OAAQ,EAAM,MAAM,CAAE,EAC5F,IAAK,QACH,MAAO,CAAE,EAAG,EAAI,EAAI,EAAI,MAAO,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,OAAQ,EAAM,MAAM,CAAE,EAC1F,IAAK,MACH,MAAO,CAAE,EAAG,EAAc,EAAO,EAAI,EAAG,EAAI,MAAO,EAAM,KAAK,EAAG,EAAG,EAAI,EAAI,EAAM,MAAO,CAC7F,CACF"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@vielzeug/orbit",
3
+ "version": "1.0.3",
4
+ "description": "Floating element positioning — tooltip, dropdown, popover, and menu placement with middleware",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "./dist/index.cjs",
10
+ "module": "./dist/index.js",
11
+ "types": "dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "source": "./src/index.ts",
15
+ "types": "./dist/index.d.ts",
16
+ "import": "./dist/index.js",
17
+ "require": "./dist/index.cjs"
18
+ },
19
+ "./devtools": {
20
+ "source": "./src/devtools.ts",
21
+ "types": "./dist/devtools.d.ts",
22
+ "import": "./dist/devtools.js",
23
+ "require": "./dist/devtools.cjs"
24
+ },
25
+ "./presets": {
26
+ "source": "./src/presets.ts",
27
+ "types": "./dist/presets.d.ts",
28
+ "import": "./dist/presets.js",
29
+ "require": "./dist/presets.cjs"
30
+ },
31
+ "./reactive": {
32
+ "source": "./src/reactive.ts",
33
+ "types": "./dist/reactive.d.ts",
34
+ "import": "./dist/reactive.js",
35
+ "require": "./dist/reactive.cjs"
36
+ },
37
+ "./ssr": {
38
+ "source": "./src/ssr.ts",
39
+ "types": "./dist/ssr.d.ts",
40
+ "import": "./dist/ssr.js",
41
+ "require": "./dist/ssr.cjs"
42
+ }
43
+ },
44
+ "scripts": {
45
+ "build": "vite build && pnpm run build:bundle && pnpm run build:types",
46
+ "build:types": "tsc -p tsconfig.declarations.json",
47
+ "fix": "eslint --fix src",
48
+ "lint": "eslint src",
49
+ "prepublishOnly": "pnpm run build",
50
+ "test": "vitest",
51
+ "build:bundle": "vite build --config vite.bundle.config.ts"
52
+ },
53
+ "publishConfig": {
54
+ "access": "public",
55
+ "registry": "https://registry.npmjs.org/"
56
+ },
57
+ "dependencies": {
58
+ "@vielzeug/arsenal": "workspace:*",
59
+ "@vielzeug/ripple": "workspace:*"
60
+ },
61
+ "devDependencies": {
62
+ "@types/node": "^26.1.0",
63
+ "typescript": "~6.0.3",
64
+ "vite": "^8.1.3",
65
+ "vitest": "^4.1.9"
66
+ }
67
+ }