@orioncactuscorp/ui 1.13.0 → 1.15.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 (158) hide show
  1. package/CHANGELOG.md +155 -0
  2. package/README.md +133 -36
  3. package/dist/components/BackgroundIconButton/BackgroundIconButton.css +1 -1
  4. package/dist/components/Button/Button.css +1 -1
  5. package/dist/components/CheckMark/CheckMark.js +19 -17
  6. package/dist/components/Checkbox/Checkbox.css +1 -1
  7. package/dist/components/Checkbox/Checkbox.js +38 -36
  8. package/dist/components/FloatingWindow/FloatingWindow.css +1 -0
  9. package/dist/components/FloatingWindow/FloatingWindow.js +693 -0
  10. package/dist/components/FloatingWindow/FloatingWindow.module.scss.js +17 -0
  11. package/dist/components/FloatingWindow/FloatingWindowManager.js +36 -0
  12. package/dist/components/FloatingWindow/contexts.js +25 -0
  13. package/dist/components/FloatingWindow/geometry.js +222 -0
  14. package/dist/components/FloatingWindow/stack.js +31 -0
  15. package/dist/components/FloatingWindow.d.ts +6 -0
  16. package/dist/components/FloatingWindow.js +18 -0
  17. package/dist/components/Interaction/Interaction.css +1 -1
  18. package/dist/components/Menu/Menu.css +1 -1
  19. package/dist/components/Menu/Menu.js +95 -87
  20. package/dist/components/Modal/Modal.css +1 -1
  21. package/dist/components/Modal/Modal.js +558 -723
  22. package/dist/components/Modal/Modal.module.scss.js +69 -60
  23. package/dist/components/Modal/initialFocus.js +11 -0
  24. package/dist/components/Modal/keyboardSession.js +104 -0
  25. package/dist/components/Modal/snapPoints.js +95 -82
  26. package/dist/components/Modal/useModalDrag.js +730 -762
  27. package/dist/components/Modal/useModalKeyboardAvoidance.js +159 -0
  28. package/dist/components/Modal/useModalViewportGeometry.js +36 -0
  29. package/dist/components/PositionSnap/PositionSnap.css +1 -0
  30. package/dist/components/PositionSnap/PositionSnap.js +330 -0
  31. package/dist/components/PositionSnap/PositionSnap.module.scss.js +9 -0
  32. package/dist/components/PositionSnap/contexts.js +12 -0
  33. package/dist/components/PositionSnap/geometry.js +75 -0
  34. package/dist/components/PositionSnap/gesture.js +7 -0
  35. package/dist/components/PositionSnap/policy.js +60 -0
  36. package/dist/components/PositionSnap.d.ts +6 -0
  37. package/dist/components/PositionSnap.js +7 -0
  38. package/dist/components/ProgressIndicator/ProgressIndicator.css +1 -0
  39. package/dist/components/ProgressIndicator/ProgressIndicator.js +45 -0
  40. package/dist/components/ProgressIndicator/ProgressIndicator.module.scss.js +13 -0
  41. package/dist/components/ProgressIndicator.d.ts +6 -0
  42. package/dist/components/ProgressIndicator.js +4 -0
  43. package/dist/components/Radio/Radio.css +1 -1
  44. package/dist/components/Radio/Radio.js +26 -24
  45. package/dist/components/Switch/Switch.css +1 -1
  46. package/dist/components/Switch/Switch.js +18 -16
  47. package/dist/components/Tabs/Tabs.css +1 -1
  48. package/dist/components/Tooltip/Tooltip.css +1 -1
  49. package/dist/components/Tooltip/Tooltip.js +59 -56
  50. package/dist/components/Tooltip/Tooltip.module.scss.js +6 -4
  51. package/dist/components/internal/ModalPresentation.js +361 -0
  52. package/dist/components/internal/OverlayPortalContext.js +20 -0
  53. package/dist/index.js +135 -112
  54. package/dist/styles.css +13 -10
  55. package/dist/ui/src/components/CheckMark/CheckMark.d.ts +1 -1
  56. package/dist/ui/src/components/CheckMark/CheckMark.d.ts.map +1 -1
  57. package/dist/ui/src/components/CheckMark/types.d.ts +2 -1
  58. package/dist/ui/src/components/CheckMark/types.d.ts.map +1 -1
  59. package/dist/ui/src/components/Checkbox/Checkbox.d.ts +1 -1
  60. package/dist/ui/src/components/Checkbox/Checkbox.d.ts.map +1 -1
  61. package/dist/ui/src/components/Checkbox/types.d.ts +2 -1
  62. package/dist/ui/src/components/Checkbox/types.d.ts.map +1 -1
  63. package/dist/ui/src/components/FloatingWindow/FloatingWindow.d.ts +32 -0
  64. package/dist/ui/src/components/FloatingWindow/FloatingWindow.d.ts.map +1 -0
  65. package/dist/ui/src/components/FloatingWindow/FloatingWindowManager.d.ts +4 -0
  66. package/dist/ui/src/components/FloatingWindow/FloatingWindowManager.d.ts.map +1 -0
  67. package/dist/ui/src/components/FloatingWindow/contexts.d.ts +36 -0
  68. package/dist/ui/src/components/FloatingWindow/contexts.d.ts.map +1 -0
  69. package/dist/ui/src/components/FloatingWindow/geometry.d.ts +31 -0
  70. package/dist/ui/src/components/FloatingWindow/geometry.d.ts.map +1 -0
  71. package/dist/ui/src/components/FloatingWindow/index.d.ts +4 -0
  72. package/dist/ui/src/components/FloatingWindow/index.d.ts.map +1 -0
  73. package/dist/ui/src/components/FloatingWindow/stack.d.ts +9 -0
  74. package/dist/ui/src/components/FloatingWindow/stack.d.ts.map +1 -0
  75. package/dist/ui/src/components/FloatingWindow/types.d.ts +121 -0
  76. package/dist/ui/src/components/FloatingWindow/types.d.ts.map +1 -0
  77. package/dist/ui/src/components/Interaction/index.d.ts +1 -1
  78. package/dist/ui/src/components/Interaction/index.d.ts.map +1 -1
  79. package/dist/ui/src/components/Interaction/types.d.ts +9 -1
  80. package/dist/ui/src/components/Interaction/types.d.ts.map +1 -1
  81. package/dist/ui/src/components/Menu/Menu.d.ts +2 -2
  82. package/dist/ui/src/components/Menu/Menu.d.ts.map +1 -1
  83. package/dist/ui/src/components/Menu/types.d.ts +9 -2
  84. package/dist/ui/src/components/Menu/types.d.ts.map +1 -1
  85. package/dist/ui/src/components/Modal/Modal.d.ts +2 -2
  86. package/dist/ui/src/components/Modal/Modal.d.ts.map +1 -1
  87. package/dist/ui/src/components/Modal/contexts.d.ts +3 -0
  88. package/dist/ui/src/components/Modal/contexts.d.ts.map +1 -1
  89. package/dist/ui/src/components/Modal/initialFocus.d.ts +18 -0
  90. package/dist/ui/src/components/Modal/initialFocus.d.ts.map +1 -0
  91. package/dist/ui/src/components/Modal/keyboardSession.d.ts +46 -0
  92. package/dist/ui/src/components/Modal/keyboardSession.d.ts.map +1 -0
  93. package/dist/ui/src/components/Modal/snapPoints.d.ts.map +1 -1
  94. package/dist/ui/src/components/Modal/types.d.ts +17 -2
  95. package/dist/ui/src/components/Modal/types.d.ts.map +1 -1
  96. package/dist/ui/src/components/Modal/useModalDrag.d.ts.map +1 -1
  97. package/dist/ui/src/components/Modal/useModalKeyboardAvoidance.d.ts +17 -0
  98. package/dist/ui/src/components/Modal/useModalKeyboardAvoidance.d.ts.map +1 -0
  99. package/dist/ui/src/components/Modal/useModalViewportGeometry.d.ts +9 -0
  100. package/dist/ui/src/components/Modal/useModalViewportGeometry.d.ts.map +1 -0
  101. package/dist/ui/src/components/PositionSnap/PositionSnap.d.ts +11 -0
  102. package/dist/ui/src/components/PositionSnap/PositionSnap.d.ts.map +1 -0
  103. package/dist/ui/src/components/PositionSnap/contexts.d.ts +17 -0
  104. package/dist/ui/src/components/PositionSnap/contexts.d.ts.map +1 -0
  105. package/dist/ui/src/components/PositionSnap/geometry.d.ts +31 -0
  106. package/dist/ui/src/components/PositionSnap/geometry.d.ts.map +1 -0
  107. package/dist/ui/src/components/PositionSnap/gesture.d.ts +2 -0
  108. package/dist/ui/src/components/PositionSnap/gesture.d.ts.map +1 -0
  109. package/dist/ui/src/components/PositionSnap/index.d.ts +3 -0
  110. package/dist/ui/src/components/PositionSnap/index.d.ts.map +1 -0
  111. package/dist/ui/src/components/PositionSnap/policy.d.ts +24 -0
  112. package/dist/ui/src/components/PositionSnap/policy.d.ts.map +1 -0
  113. package/dist/ui/src/components/PositionSnap/types.d.ts +31 -0
  114. package/dist/ui/src/components/PositionSnap/types.d.ts.map +1 -0
  115. package/dist/ui/src/components/ProgressIndicator/ProgressIndicator.d.ts +4 -0
  116. package/dist/ui/src/components/ProgressIndicator/ProgressIndicator.d.ts.map +1 -0
  117. package/dist/ui/src/components/ProgressIndicator/index.d.ts +3 -0
  118. package/dist/ui/src/components/ProgressIndicator/index.d.ts.map +1 -0
  119. package/dist/ui/src/components/ProgressIndicator/types.d.ts +17 -0
  120. package/dist/ui/src/components/ProgressIndicator/types.d.ts.map +1 -0
  121. package/dist/ui/src/components/Radio/Radio.d.ts +1 -1
  122. package/dist/ui/src/components/Radio/Radio.d.ts.map +1 -1
  123. package/dist/ui/src/components/Radio/types.d.ts +2 -1
  124. package/dist/ui/src/components/Radio/types.d.ts.map +1 -1
  125. package/dist/ui/src/components/Switch/Switch.d.ts +1 -1
  126. package/dist/ui/src/components/Switch/Switch.d.ts.map +1 -1
  127. package/dist/ui/src/components/Switch/types.d.ts +2 -1
  128. package/dist/ui/src/components/Switch/types.d.ts.map +1 -1
  129. package/dist/ui/src/components/Tooltip/Tooltip.d.ts +1 -1
  130. package/dist/ui/src/components/Tooltip/Tooltip.d.ts.map +1 -1
  131. package/dist/ui/src/components/Tooltip/types.d.ts +6 -0
  132. package/dist/ui/src/components/Tooltip/types.d.ts.map +1 -1
  133. package/dist/ui/src/components/internal/ModalPresentation.d.ts +62 -0
  134. package/dist/ui/src/components/internal/ModalPresentation.d.ts.map +1 -0
  135. package/dist/ui/src/components/internal/OverlayPortalContext.d.ts +10 -0
  136. package/dist/ui/src/components/internal/OverlayPortalContext.d.ts.map +1 -0
  137. package/dist/ui/src/index.d.ts +7 -1
  138. package/dist/ui/src/index.d.ts.map +1 -1
  139. package/dist/ui/src/utils/motion.d.ts.map +1 -1
  140. package/dist/utils/motion.js +194 -135
  141. package/docs/api-conventions.md +4 -0
  142. package/docs/motion.md +4 -0
  143. package/docs/overlay-stacking.md +48 -0
  144. package/docs/responsive-foundation-profile.md +1 -1
  145. package/docs/scss-helpers.md +110 -5
  146. package/docs/selector-contract.md +126 -2
  147. package/docs/tokens.md +2 -0
  148. package/package.json +1 -1
  149. package/src/scss/foundations/atomic.scss +9 -8
  150. package/src/scss/index.scss +2 -0
  151. package/src/scss/mixins/_fluid.scss +57 -0
  152. package/src/scss/mixins/_fluid.test.ts +87 -0
  153. package/src/scss/mixins/_gradient.scss +99 -0
  154. package/src/scss/mixins/_gradient.test.ts +111 -0
  155. package/src/scss/mixins/_responsive.scss +2 -1
  156. package/src/scss/mixins/_typo.scss +2 -1
  157. package/src/scss/mixins/_units.scss +14 -0
  158. package/src/scss/mixins/_utils.scss +3 -22
@@ -0,0 +1,693 @@
1
+ 'use client';
2
+ import { jsx as l, jsxs as Qe } from "react/jsx-runtime";
3
+ import { useRef as A, useState as R, useMemo as X, useCallback as L, useLayoutEffect as Ne, useEffect as oe } from "react";
4
+ import { Dialog as T } from "@base-ui-components/react/dialog";
5
+ import Ze from "@orioncactuscorp/icons/orioncactus/CloseThick";
6
+ import { mergeRefs as Ee } from "../../utils/mergeRefs.js";
7
+ import _e from "../BackgroundIconButton/BackgroundIconButton.js";
8
+ import H from "../Modal/Modal.module.scss.js";
9
+ import { resolveModalInitialFocus as et } from "../Modal/initialFocus.js";
10
+ import { useModalBodyScrollState as tt, ModalBodyFrame as ot, ModalSurfaceFrame as nt, resolveModalFooterBackground as rt, ModalFooterFrame as it, ModalHeaderFrame as at, ModalNavigationSectionFrame as dt, mergeModalClassName as ct } from "../internal/ModalPresentation.js";
11
+ import { OverlayPortalProvider as st } from "../internal/OverlayPortalContext.js";
12
+ import { useFloatingWindowContentContext as q, useFloatingWindowRootContext as Le, FloatingWindowContentContext as lt, useFloatingWindowManagerContext as ut, FloatingWindowRootContext as gt } from "./contexts.js";
13
+ import { constrainFloatingWindowPosition as ft, getFloatingWindowBoundaryRect as Re, resolveCenteredFloatingWindowPosition as Ce, resolveAnchoredFloatingWindowPosition as mt, getFloatingWindowRect as wt } from "./geometry.js";
14
+ import z from "./FloatingWindow.module.scss.js";
15
+ import { FloatingWindowManager as pt } from "./FloatingWindowManager.js";
16
+ const vt = {
17
+ topLeft: { side: "top", alignment: "start" },
18
+ top: { side: "top", alignment: "center" },
19
+ topRight: { side: "top", alignment: "end" },
20
+ rightTop: { side: "right", alignment: "start" },
21
+ right: { side: "right", alignment: "center" },
22
+ rightBottom: { side: "right", alignment: "end" },
23
+ bottomLeft: { side: "bottom", alignment: "start" },
24
+ bottom: { side: "bottom", alignment: "center" },
25
+ bottomRight: { side: "bottom", alignment: "end" },
26
+ leftTop: { side: "left", alignment: "start" },
27
+ left: { side: "left", alignment: "center" },
28
+ leftBottom: { side: "left", alignment: "end" }
29
+ }, ht = {
30
+ small: H.small,
31
+ medium: H.medium,
32
+ large: H.large
33
+ }, $ = ct;
34
+ function Se(e, o) {
35
+ return e?.x === o.x && e.y === o.y;
36
+ }
37
+ function Ft(e) {
38
+ return e instanceof Element && !!e.closest(
39
+ 'button, a, input, select, textarea, [contenteditable="true"], [data-oc-window-no-drag]'
40
+ );
41
+ }
42
+ function Me(e) {
43
+ return !(e instanceof Element && e.closest('[data-oc-part="close"]'));
44
+ }
45
+ function Te(e, o) {
46
+ return e ? typeof e == "function" ? e() : "current" in e ? e.current : e : o;
47
+ }
48
+ function bt(e, o) {
49
+ return e.x === o.x && e.y === o.y && e.width === o.width && e.height === o.height;
50
+ }
51
+ function yt(e, o) {
52
+ if (typeof IntersectionObserver > "u") return;
53
+ let s = null, n;
54
+ const r = () => {
55
+ n !== void 0 && window.clearTimeout(n), s?.disconnect(), s = null;
56
+ }, a = (w = !1, h = 1) => {
57
+ r();
58
+ const g = e.getBoundingClientRect(), u = e.ownerDocument.documentElement;
59
+ if (w && o(), !g.width || !g.height) return;
60
+ const p = Math.floor(g.top), F = Math.floor(
61
+ u.clientWidth - (g.left + g.width)
62
+ ), m = Math.floor(
63
+ u.clientHeight - (g.top + g.height)
64
+ ), b = Math.floor(g.left);
65
+ let C = !0;
66
+ s = new IntersectionObserver(
67
+ (x) => {
68
+ const E = x[0]?.intersectionRatio ?? 0, W = !bt(
69
+ g,
70
+ e.getBoundingClientRect()
71
+ );
72
+ if (W || E !== h) {
73
+ if (!C || W) {
74
+ a(!0);
75
+ return;
76
+ }
77
+ E ? a(!0, E) : n = window.setTimeout(() => a(!0, 1e-7), 1e3);
78
+ }
79
+ C = !1;
80
+ },
81
+ {
82
+ rootMargin: `${-p}px ${-F}px ${-m}px ${-b}px`,
83
+ threshold: Math.max(0, Math.min(1, h)) || 1
84
+ }
85
+ ), s.observe(e);
86
+ };
87
+ return a(), r;
88
+ }
89
+ function Ie({
90
+ children: e,
91
+ modal: o = !1,
92
+ defaultBackdrop: s,
93
+ presentation: n,
94
+ disablePointerDismissal: r = o !== !0,
95
+ windowId: a,
96
+ onActivate: w,
97
+ onOpenChange: h,
98
+ ...g
99
+ }) {
100
+ const u = ut(), [p, F] = R(null);
101
+ if (u && !a)
102
+ throw new Error(
103
+ "FloatingWindowRoot requires windowId inside FloatingWindowManager."
104
+ );
105
+ const m = u !== null && u.activeWindowId !== void 0 && u.activeWindowId !== a, b = m && o !== !1 ? !1 : o, C = m ? !0 : r, x = X(
106
+ () => ({
107
+ defaultBackdrop: s,
108
+ manager: u,
109
+ modal: o,
110
+ onActivate: w,
111
+ presentation: n,
112
+ setTriggerNode: F,
113
+ triggerNode: p,
114
+ windowId: a
115
+ }),
116
+ [
117
+ s,
118
+ u,
119
+ o,
120
+ w,
121
+ n,
122
+ p,
123
+ a
124
+ ]
125
+ ), E = L(
126
+ (W, v) => {
127
+ const Y = v && typeof v == "object" && "reason" in v ? v.reason : void 0;
128
+ if (!W && (Y === "escape-key" || Y === "outside-press") && u && a && u.activeWindowId !== a) {
129
+ v && typeof v == "object" && "cancel" in v && typeof v.cancel == "function" && v.cancel();
130
+ return;
131
+ }
132
+ h?.(W, v);
133
+ },
134
+ [u, h, a]
135
+ );
136
+ return /* @__PURE__ */ l(gt.Provider, { value: x, children: /* @__PURE__ */ l(
137
+ T.Root,
138
+ {
139
+ ...g,
140
+ modal: b,
141
+ disablePointerDismissal: C,
142
+ onOpenChange: E,
143
+ children: e
144
+ }
145
+ ) });
146
+ }
147
+ function xe(e) {
148
+ return /* @__PURE__ */ l(
149
+ Ie,
150
+ {
151
+ ...e,
152
+ defaultBackdrop: e.modal === !0 ? "visible" : "hidden",
153
+ presentation: "floating"
154
+ }
155
+ );
156
+ }
157
+ function Wt({
158
+ modal: e = !0,
159
+ ...o
160
+ }) {
161
+ return /* @__PURE__ */ l(
162
+ Ie,
163
+ {
164
+ ...o,
165
+ defaultBackdrop: "visible",
166
+ modal: e,
167
+ presentation: "modal"
168
+ }
169
+ );
170
+ }
171
+ function Nt({
172
+ children: e,
173
+ className: o = "",
174
+ render: s,
175
+ nativeButton: n,
176
+ ref: r
177
+ }) {
178
+ const a = Le("FloatingWindowTrigger"), w = X(
179
+ () => Ee(a.setTriggerNode, r),
180
+ [r, a.setTriggerNode]
181
+ );
182
+ return /* @__PURE__ */ l(
183
+ T.Trigger,
184
+ {
185
+ ref: w,
186
+ className: s ? void 0 : $(z.trigger, o),
187
+ render: s,
188
+ nativeButton: n,
189
+ "data-oc-component": "floating-window-trigger",
190
+ children: e
191
+ }
192
+ );
193
+ }
194
+ function Rt({
195
+ children: e,
196
+ className: o = "",
197
+ style: s,
198
+ position: n,
199
+ defaultPosition: r,
200
+ placement: a,
201
+ side: w = "bottom",
202
+ alignment: h = "center",
203
+ sideOffset: g = 12,
204
+ alignOffset: u = 0,
205
+ anchor: p,
206
+ onPositionChange: F,
207
+ onPositionCommit: m,
208
+ collisionBoundary: b = "viewport",
209
+ collisionPadding: C = 16,
210
+ collisionAvoidance: x,
211
+ dragHandleVisibility: E = 48,
212
+ draggable: W = !0,
213
+ backdrop: v = "auto",
214
+ size: Y = "medium",
215
+ resize: ne = "content",
216
+ container: Be,
217
+ initialFocus: De,
218
+ stackLevel: Ae = 0,
219
+ ...K
220
+ }) {
221
+ const c = Le("FloatingWindowContent"), I = A(null), re = A(null), ie = A(!1), [Q, ae] = R(null), [de, ze] = R(null), [Z, He] = R({
222
+ canScroll: !1,
223
+ scrolledFromTop: !1,
224
+ scrolledToBottom: !0
225
+ }), P = A(null), ce = n !== void 0 || r !== void 0, _ = A(ce), U = A(null), [y, $e] = R(
226
+ null
227
+ ), [se, le] = R(r ?? null), [ee, ue] = R(ce), [qe, G] = R(!1), [je, Oe] = R(w), [Ve, Xe] = R(h), Ye = c.windowId ? c.manager?.stackLevels.get(c.windowId) : void 0, te = c.manager?.registerWindow, ge = Ye ?? Ae, j = c.manager ? c.manager.activeWindowId === c.windowId : void 0, fe = a ? vt[a] : void 0, me = fe?.side ?? w, we = fe?.alignment ?? h, pe = X(
228
+ () => ({
229
+ side: x?.side ?? "flip",
230
+ alignment: x?.alignment ?? "shift"
231
+ }),
232
+ [x?.alignment, x?.side]
233
+ ), ve = v === "auto" ? c.defaultBackdrop : v, Ue = L(
234
+ (t) => {
235
+ const d = I.current !== null;
236
+ if (I.current = t, $e(t), !t) {
237
+ G(!1);
238
+ return;
239
+ }
240
+ !d && n === void 0 && r === void 0 && (P.current = null, _.current = !1, ue(!1), le(null));
241
+ },
242
+ [r, n]
243
+ ), he = L((t) => {
244
+ const d = I.current;
245
+ d && (P.current = t, d.style.setProperty("--oc-floating-window-x", `${t.x}px`), d.style.setProperty("--oc-floating-window-y", `${t.y}px`));
246
+ }, []), B = L(
247
+ (t) => {
248
+ const d = I.current;
249
+ if (!d) return t;
250
+ const i = d.getBoundingClientRect();
251
+ return ft({
252
+ boundary: Re(b),
253
+ dragHandleHeight: E,
254
+ padding: C,
255
+ position: t,
256
+ size: { width: i.width, height: i.height }
257
+ });
258
+ },
259
+ [b, C, E]
260
+ ), k = L(
261
+ (t) => {
262
+ const d = !Se(P.current, t);
263
+ he(t), d && F?.(t);
264
+ },
265
+ [he, F]
266
+ ), O = L(
267
+ (t, d) => {
268
+ const i = B(t);
269
+ return k(i), n === void 0 && le(
270
+ (f) => Se(f, i) ? f : i
271
+ ), d && m?.(i), i;
272
+ },
273
+ [B, k, m, n]
274
+ ), J = L(() => {
275
+ const t = y ?? I.current;
276
+ if (!t) return;
277
+ const d = t.getBoundingClientRect(), i = { width: d.width, height: d.height }, f = Re(b), S = n ?? se;
278
+ if (_.current || S) {
279
+ O(
280
+ S ?? P.current ?? Ce({
281
+ boundary: f,
282
+ size: i
283
+ }),
284
+ !1
285
+ ), G(!0);
286
+ return;
287
+ }
288
+ const D = Te(p, c.triggerNode);
289
+ if (!D) {
290
+ k(
291
+ B(
292
+ Ce({
293
+ boundary: f,
294
+ size: i
295
+ })
296
+ )
297
+ ), G(!0);
298
+ return;
299
+ }
300
+ const M = mt({
301
+ alignOffset: u,
302
+ alignment: we,
303
+ anchor: wt(D),
304
+ boundary: f,
305
+ collisionAvoidance: pe,
306
+ direction: window.getComputedStyle(D).direction === "rtl" ? "rtl" : "ltr",
307
+ padding: C,
308
+ side: me,
309
+ sideOffset: g,
310
+ size: i
311
+ });
312
+ k(M.position), Oe(
313
+ (N) => N === M.side ? N : M.side
314
+ ), Xe(
315
+ (N) => N === M.alignment ? N : M.alignment
316
+ ), G(!0);
317
+ }, [
318
+ u,
319
+ p,
320
+ b,
321
+ C,
322
+ O,
323
+ B,
324
+ se,
325
+ k,
326
+ n,
327
+ we,
328
+ me,
329
+ pe,
330
+ c.triggerNode,
331
+ g,
332
+ y
333
+ ]);
334
+ Ne(() => {
335
+ J();
336
+ }, [J]), oe(() => {
337
+ const t = I.current;
338
+ if (!t) return;
339
+ const d = Te(p, c.triggerNode), i = () => J(), f = typeof ResizeObserver > "u" ? void 0 : new ResizeObserver(i);
340
+ f?.observe(t), d && f?.observe(d), b !== "viewport" && f?.observe(b);
341
+ const S = d && !ee && n === void 0 && r === void 0 ? yt(d, i) : void 0;
342
+ return window.addEventListener("resize", i), window.addEventListener("scroll", i, !0), window.visualViewport?.addEventListener("resize", i), window.visualViewport?.addEventListener("scroll", i), () => {
343
+ S?.(), f?.disconnect(), window.removeEventListener("resize", i), window.removeEventListener("scroll", i, !0), window.visualViewport?.removeEventListener("resize", i), window.visualViewport?.removeEventListener("scroll", i);
344
+ };
345
+ }, [
346
+ p,
347
+ b,
348
+ r,
349
+ ee,
350
+ J,
351
+ n,
352
+ c.triggerNode
353
+ ]), oe(
354
+ () => () => {
355
+ U.current?.();
356
+ },
357
+ []
358
+ ), Ne(() => {
359
+ if (!(!y || !te || !c.windowId))
360
+ return te(c.windowId, c.modal);
361
+ }, [te, c.modal, c.windowId, y]), oe(() => {
362
+ const t = j === !0 && !ie.current;
363
+ if (ie.current = j === !0, !t || c.modal === !1 || !y) return;
364
+ const d = window.requestAnimationFrame(() => {
365
+ const i = re.current, f = i && y.contains(i) ? i : Q ?? y;
366
+ y.contains(document.activeElement) || f.focus({ preventScroll: !0 });
367
+ });
368
+ return () => window.cancelAnimationFrame(d);
369
+ }, [j, c.modal, Q, y]);
370
+ const Fe = L(
371
+ (t) => {
372
+ if (!W || !t.isPrimary || t.button !== 0 || Ft(t.target))
373
+ return;
374
+ const d = I.current;
375
+ if (!d) return;
376
+ t.preventDefault(), U.current?.(), _.current = !0, ue(!0);
377
+ const i = t.pointerId, f = { x: t.clientX, y: t.clientY }, S = P.current ?? { x: 0, y: 0 };
378
+ d.dataset.ocWindowDragging = "true";
379
+ const D = (V) => {
380
+ V.pointerId === i && k(
381
+ B({
382
+ x: S.x + V.clientX - f.x,
383
+ y: S.y + V.clientY - f.y
384
+ })
385
+ );
386
+ }, M = () => {
387
+ window.removeEventListener("pointermove", D), window.removeEventListener("pointerup", N), window.removeEventListener("pointercancel", N), window.removeEventListener("blur", We), delete d.dataset.ocWindowDragging, U.current = null;
388
+ }, N = (V) => {
389
+ V.pointerId === i && (M(), O(P.current ?? S, !0));
390
+ }, We = () => {
391
+ M(), O(P.current ?? S, !0);
392
+ };
393
+ U.current = M, window.addEventListener("pointermove", D), window.addEventListener("pointerup", N), window.addEventListener("pointercancel", N), window.addEventListener("blur", We);
394
+ },
395
+ [
396
+ O,
397
+ B,
398
+ W,
399
+ k
400
+ ]
401
+ ), Ge = X(
402
+ () => ({
403
+ bodyNode: de,
404
+ draggable: W,
405
+ scrollState: Z,
406
+ setBodyNode: ze,
407
+ setScrollState: He,
408
+ setTitleNode: ae,
409
+ startDrag: Fe
410
+ }),
411
+ [de, W, Z, ae, Fe]
412
+ ), Je = et({
413
+ contentNode: y,
414
+ initialFocus: De,
415
+ modal: c.modal,
416
+ titleNode: Q
417
+ }), be = {
418
+ "--oc-floating-window-stack-offset": ge * 2
419
+ }, Ke = {
420
+ ...s,
421
+ "--oc-floating-window-stack-offset": ge * 2
422
+ }, ye = () => {
423
+ c.windowId && c.manager?.activateWindow(c.windowId), c.onActivate?.(c.windowId);
424
+ };
425
+ return /* @__PURE__ */ Qe(T.Portal, { container: Be, children: [
426
+ ve === "visible" ? /* @__PURE__ */ l(
427
+ T.Backdrop,
428
+ {
429
+ className: z.backdrop,
430
+ "data-oc-component": "floating-window-backdrop",
431
+ "data-oc-part": "backdrop",
432
+ style: be
433
+ }
434
+ ) : null,
435
+ /* @__PURE__ */ l(
436
+ "div",
437
+ {
438
+ className: z.positioner,
439
+ "data-oc-component": "floating-window-positioner",
440
+ style: be,
441
+ children: /* @__PURE__ */ l(lt.Provider, { value: Ge, children: /* @__PURE__ */ l(
442
+ T.Popup,
443
+ {
444
+ ...K,
445
+ ref: Ue,
446
+ initialFocus: Je,
447
+ className: $(z.window, o),
448
+ "data-oc-alignment": Ve,
449
+ "data-oc-side": je,
450
+ "data-oc-component": "floating-window",
451
+ "data-oc-part": "window",
452
+ "data-oc-positioned": qe ? "true" : "false",
453
+ "data-oc-window-positioning": ee || n !== void 0 || r !== void 0 ? "free" : "anchored",
454
+ "data-oc-window-presentation": c.presentation,
455
+ "data-oc-window-modality": c.modal === !0 ? "modal" : c.modal === "trap-focus" ? "trap-focus" : "modeless",
456
+ "data-oc-window-active": j === void 0 ? void 0 : j ? "true" : "false",
457
+ onFocusCapture: (t) => {
458
+ K.onFocusCapture?.(t);
459
+ const d = Me(t.target);
460
+ d && t.target instanceof HTMLElement && (re.current = t.target), !t.defaultPrevented && d && ye();
461
+ },
462
+ onPointerDownCapture: (t) => {
463
+ K.onPointerDownCapture?.(t), !t.defaultPrevented && Me(t.target) && ye();
464
+ },
465
+ style: Ke,
466
+ children: /* @__PURE__ */ l(st, { container: y, children: /* @__PURE__ */ l(
467
+ "div",
468
+ {
469
+ className: $(
470
+ H.surfaceMotion,
471
+ z.presentationMotion,
472
+ ht[Y]
473
+ ),
474
+ "data-oc-modal-backdrop": ve,
475
+ "data-oc-modal-placement": "popup",
476
+ "data-oc-resize": ne,
477
+ "data-oc-part": "surface-motion",
478
+ children: /* @__PURE__ */ l(
479
+ nt,
480
+ {
481
+ contentTransition: "none",
482
+ placement: "popup",
483
+ resize: ne,
484
+ scrollable: Z.canScroll,
485
+ children: e
486
+ }
487
+ )
488
+ }
489
+ ) })
490
+ }
491
+ ) })
492
+ }
493
+ )
494
+ ] });
495
+ }
496
+ function Ct({
497
+ children: e,
498
+ className: o = "",
499
+ onPointerDown: s,
500
+ ...n
501
+ }) {
502
+ const r = q("FloatingWindowDragHandle");
503
+ return /* @__PURE__ */ l(
504
+ "div",
505
+ {
506
+ ...n,
507
+ className: $(z.dragHandle, o),
508
+ "data-oc-part": "drag-handle",
509
+ "data-oc-draggable": r.draggable ? "true" : "false",
510
+ onPointerDown: (a) => {
511
+ s?.(a), a.defaultPrevented || r.startDrag(a);
512
+ },
513
+ children: e
514
+ }
515
+ );
516
+ }
517
+ function St({
518
+ title: e,
519
+ leadingContent: o,
520
+ trailingContent: s,
521
+ closeButton: n = !0,
522
+ closeLabel: r = "닫기",
523
+ draggable: a = !0,
524
+ children: w,
525
+ className: h = "",
526
+ onPointerDown: g,
527
+ ref: u,
528
+ ...p
529
+ }) {
530
+ const F = q("FloatingWindowHeader");
531
+ return /* @__PURE__ */ l(
532
+ at,
533
+ {
534
+ ...p,
535
+ ref: u,
536
+ className: h,
537
+ closeContent: n ? /* @__PURE__ */ l(ke, { label: r }) : null,
538
+ dragEnabled: a && F.draggable,
539
+ leadingContent: o,
540
+ sticky: F.scrollState.scrolledFromTop,
541
+ titleContent: e ? /* @__PURE__ */ l(Pe, { children: e }) : void 0,
542
+ trailingContent: s,
543
+ onPointerDown: (m) => {
544
+ g?.(m), !m.defaultPrevented && a && F.startDrag(m);
545
+ },
546
+ children: w
547
+ }
548
+ );
549
+ }
550
+ function Mt({
551
+ handle: e = !0,
552
+ ...o
553
+ }) {
554
+ const s = q(
555
+ "FloatingWindowNavigationSection"
556
+ );
557
+ return /* @__PURE__ */ l(
558
+ dt,
559
+ {
560
+ ...o,
561
+ canRenderHandle: e && s.draggable,
562
+ handleProps: { onPointerDown: s.startDrag }
563
+ }
564
+ );
565
+ }
566
+ function Tt({
567
+ children: e,
568
+ className: o = "",
569
+ layout: s = "content",
570
+ containerClassName: n = "",
571
+ containerProps: r,
572
+ ref: a,
573
+ ...w
574
+ }) {
575
+ const { bodyNode: h, setBodyNode: g, setScrollState: u } = q("FloatingWindowBody"), { setBodyRef: p, updateScrollState: F } = tt({
576
+ bodyNode: h,
577
+ setBodyNode: g,
578
+ setScrollState: u
579
+ });
580
+ return /* @__PURE__ */ l(
581
+ ot,
582
+ {
583
+ bodyContainerProps: {
584
+ ...r,
585
+ ref: p,
586
+ onScroll: (m) => {
587
+ r?.onScroll?.(m), F(m.currentTarget);
588
+ }
589
+ },
590
+ bodyContentProps: { ...w, ref: a, className: n },
591
+ layout: s,
592
+ scrollAreaProps: { className: o },
593
+ children: e
594
+ }
595
+ );
596
+ }
597
+ function xt({
598
+ children: e,
599
+ className: o = "",
600
+ background: s = "auto",
601
+ ...n
602
+ }) {
603
+ const { scrollState: r } = q(
604
+ "FloatingWindowFooter"
605
+ ), a = rt(
606
+ s,
607
+ r
608
+ );
609
+ return /* @__PURE__ */ l(
610
+ it,
611
+ {
612
+ ...n,
613
+ backgroundActive: a,
614
+ className: o,
615
+ children: e
616
+ }
617
+ );
618
+ }
619
+ function Pe({
620
+ className: e = "",
621
+ ref: o,
622
+ ...s
623
+ }) {
624
+ const n = q("FloatingWindowTitle"), r = X(
625
+ () => Ee(n.setTitleNode, o),
626
+ [n.setTitleNode, o]
627
+ );
628
+ return /* @__PURE__ */ l(
629
+ T.Title,
630
+ {
631
+ ...s,
632
+ ref: r,
633
+ className: $(H.initialFocusTitle, e),
634
+ tabIndex: -1
635
+ }
636
+ );
637
+ }
638
+ function Et(e) {
639
+ return /* @__PURE__ */ l(T.Description, { ...e });
640
+ }
641
+ function ke(e) {
642
+ if (e.render !== void 0)
643
+ return /* @__PURE__ */ l(T.Close, { ...e });
644
+ const { className: o = "", label: s = "닫기", size: n = 24, ...r } = e;
645
+ return /* @__PURE__ */ l(
646
+ T.Close,
647
+ {
648
+ render: /* @__PURE__ */ l(
649
+ _e,
650
+ {
651
+ ...r,
652
+ className: $(H.close, o),
653
+ "aria-label": r["aria-label"] ?? s,
654
+ "data-oc-component": "modal-close",
655
+ "data-oc-part": "close",
656
+ size: n,
657
+ children: /* @__PURE__ */ l(Ze, {})
658
+ }
659
+ )
660
+ }
661
+ );
662
+ }
663
+ const Xt = Object.assign(xe, {
664
+ Manager: pt,
665
+ Root: xe,
666
+ ModalRoot: Wt,
667
+ Trigger: Nt,
668
+ Content: Rt,
669
+ DragHandle: Ct,
670
+ Header: St,
671
+ NavigationSection: Mt,
672
+ Body: Tt,
673
+ Footer: xt,
674
+ Title: Pe,
675
+ Description: Et,
676
+ Close: ke
677
+ });
678
+ export {
679
+ Tt as FloatingWindowBody,
680
+ ke as FloatingWindowClose,
681
+ Rt as FloatingWindowContent,
682
+ Et as FloatingWindowDescription,
683
+ Ct as FloatingWindowDragHandle,
684
+ xt as FloatingWindowFooter,
685
+ St as FloatingWindowHeader,
686
+ pt as FloatingWindowManager,
687
+ Mt as FloatingWindowNavigationSection,
688
+ xe as FloatingWindowRoot,
689
+ Pe as FloatingWindowTitle,
690
+ Nt as FloatingWindowTrigger,
691
+ Wt as ModalWindowRoot,
692
+ Xt as default
693
+ };
@@ -0,0 +1,17 @@
1
+ import './FloatingWindow.css';const o = "oc-FloatingWindow-module__trigger__qlrNq", n = "oc-FloatingWindow-module__backdrop__53p3-", t = "oc-FloatingWindow-module__positioner__yoopu", i = "oc-FloatingWindow-module__window__7l1n6", d = "oc-FloatingWindow-module__presentationMotion__DWXpt", e = "oc-FloatingWindow-module__dragHandle__MfwPD", _ = {
2
+ trigger: o,
3
+ backdrop: n,
4
+ positioner: t,
5
+ window: i,
6
+ presentationMotion: d,
7
+ dragHandle: e
8
+ };
9
+ export {
10
+ n as backdrop,
11
+ _ as default,
12
+ e as dragHandle,
13
+ t as positioner,
14
+ d as presentationMotion,
15
+ o as trigger,
16
+ i as window
17
+ };