@datawire-ai/busyfile-design-library 1.35.4 → 1.36.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 (267) hide show
  1. package/README.md +74 -31
  2. package/dist/index100.js +5 -5
  3. package/dist/index101.js +134 -14
  4. package/dist/index102.js +13 -134
  5. package/dist/index103.js +15 -10
  6. package/dist/index104.js +8 -219
  7. package/dist/index105.js +50 -15
  8. package/dist/index106.js +180 -48
  9. package/dist/index107.js +8 -9
  10. package/dist/index108.js +13 -650
  11. package/dist/index109.js +226 -29
  12. package/dist/index110.js +218 -13
  13. package/dist/index111.js +30 -11
  14. package/dist/index112.js +11 -4
  15. package/dist/index113.js +4 -13
  16. package/dist/index114.js +12 -3
  17. package/dist/index115.js +3 -46
  18. package/dist/index116.js +46 -24
  19. package/dist/index117.js +650 -21
  20. package/dist/index118.js +15 -39
  21. package/dist/index119.js +18 -11
  22. package/dist/index120.js +22 -14
  23. package/dist/index121.js +39 -227
  24. package/dist/index122.js +18 -12
  25. package/dist/index123.js +10 -204
  26. package/dist/index124.js +204 -20
  27. package/dist/index125.js +21 -399
  28. package/dist/index126.js +400 -6
  29. package/dist/index127.js +6 -25
  30. package/dist/index128.js +24 -28
  31. package/dist/index129.js +29 -5
  32. package/dist/index130.js +5 -2
  33. package/dist/index131.js +2 -53
  34. package/dist/index132.js +41 -53
  35. package/dist/index133.js +65 -5
  36. package/dist/index134.js +52 -3
  37. package/dist/index135.js +4 -23
  38. package/dist/index136.js +4 -109
  39. package/dist/index137.js +15 -15
  40. package/dist/index138.js +5 -524
  41. package/dist/index139.js +8 -127
  42. package/dist/index140.js +15 -132
  43. package/dist/index141.js +5 -2
  44. package/dist/index142.js +5 -2
  45. package/dist/index143.js +6 -69
  46. package/dist/index144.js +6 -9
  47. package/dist/index145.js +5 -14
  48. package/dist/index146.js +5 -66
  49. package/dist/index147.js +6 -64
  50. package/dist/index148.js +25 -52
  51. package/dist/index149.js +6 -4
  52. package/dist/index150.js +4 -4
  53. package/dist/index151.js +5 -14
  54. package/dist/index152.js +3 -3
  55. package/dist/index153.js +4 -8
  56. package/dist/index154.js +5 -16
  57. package/dist/index155.js +3 -3
  58. package/dist/index156.js +8 -4
  59. package/dist/index157.js +5 -5
  60. package/dist/index158.js +4 -5
  61. package/dist/index159.js +4 -4
  62. package/dist/index160.js +6 -4
  63. package/dist/index161.js +58 -6
  64. package/dist/index162.js +66 -24
  65. package/dist/index163.js +240 -6
  66. package/dist/index164.js +39 -4
  67. package/dist/index165.js +4 -6
  68. package/dist/index166.js +7 -5
  69. package/dist/index167.js +13 -4
  70. package/dist/index168.js +7 -5
  71. package/dist/index169.js +10 -4
  72. package/dist/index170.js +10 -8
  73. package/dist/index171.js +8 -5
  74. package/dist/index172.js +16 -4
  75. package/dist/index173.js +24 -5
  76. package/dist/index174.js +20 -7
  77. package/dist/index175.js +53 -58
  78. package/dist/index176.js +41 -66
  79. package/dist/index177.js +9 -240
  80. package/dist/index178.js +18 -37
  81. package/dist/index179.js +16 -4
  82. package/dist/index180.js +6 -7
  83. package/dist/index181.js +23 -13
  84. package/dist/index182.js +19 -8
  85. package/dist/index183.js +16 -11
  86. package/dist/index184.js +6 -10
  87. package/dist/index185.js +4 -8
  88. package/dist/index186.js +4 -16
  89. package/dist/index187.js +5 -24
  90. package/dist/index188.js +5 -20
  91. package/dist/index189.js +3 -53
  92. package/dist/index190.js +6 -41
  93. package/dist/index191.js +7 -9
  94. package/dist/index192.js +6 -20
  95. package/dist/index193.js +5 -16
  96. package/dist/index194.js +3 -6
  97. package/dist/index195.js +3 -23
  98. package/dist/index196.js +4 -19
  99. package/dist/index197.js +4 -16
  100. package/dist/index198.js +4 -6
  101. package/dist/index199.js +3 -4
  102. package/dist/index200.js +3 -4
  103. package/dist/index201.js +3 -4
  104. package/dist/index202.js +5 -5
  105. package/dist/index203.js +3 -4
  106. package/dist/index204.js +23 -6
  107. package/dist/index205.js +109 -7
  108. package/dist/index206.js +15 -6
  109. package/dist/index207.js +524 -5
  110. package/dist/index208.js +127 -3
  111. package/dist/index209.js +133 -3
  112. package/dist/index210.js +2 -4
  113. package/dist/index211.js +2 -4
  114. package/dist/index212.js +8 -4
  115. package/dist/index213.js +19 -3
  116. package/dist/index214.js +16 -3
  117. package/dist/index215.js +5 -3
  118. package/dist/index216.js +5 -3
  119. package/dist/index217.js +6 -22
  120. package/dist/index218.js +4 -8
  121. package/dist/index219.js +7 -19
  122. package/dist/index220.js +17 -16
  123. package/dist/index221.js +5 -5
  124. package/dist/index222.js +5 -5
  125. package/dist/index223.js +13 -6
  126. package/dist/index224.js +10 -4
  127. package/dist/index225.js +14 -7
  128. package/dist/index226.js +5 -17
  129. package/dist/index227.js +6 -5
  130. package/dist/index228.js +8 -5
  131. package/dist/index229.js +6 -13
  132. package/dist/index230.js +56 -10
  133. package/dist/index231.js +9 -14
  134. package/dist/index232.js +3 -3
  135. package/dist/index233.js +5 -6
  136. package/dist/index234.js +9 -8
  137. package/dist/index235.js +4 -5
  138. package/dist/index236.js +5 -56
  139. package/dist/index237.js +4 -9
  140. package/dist/index238.js +11 -5
  141. package/dist/index239.js +10 -5
  142. package/dist/index240.js +10 -9
  143. package/dist/index241.js +11 -5
  144. package/dist/index242.js +11 -5
  145. package/dist/index243.js +10 -4
  146. package/dist/index244.js +7 -11
  147. package/dist/index245.js +6 -10
  148. package/dist/index246.js +4 -9
  149. package/dist/index247.js +6 -11
  150. package/dist/index248.js +8 -11
  151. package/dist/index249.js +6 -10
  152. package/dist/index250.js +23 -7
  153. package/dist/index251.js +18 -6
  154. package/dist/index252.js +7 -5
  155. package/dist/index253.js +10 -6
  156. package/dist/index254.js +10 -8
  157. package/dist/index255.js +21 -6
  158. package/dist/index256.js +10 -23
  159. package/dist/index257.js +9 -18
  160. package/dist/index258.js +9 -7
  161. package/dist/index259.js +4 -10
  162. package/dist/index260.js +5 -10
  163. package/dist/index261.js +16 -21
  164. package/dist/index262.js +9 -10
  165. package/dist/index263.js +18 -9
  166. package/dist/index264.js +15 -9
  167. package/dist/index265.js +12 -4
  168. package/dist/index266.js +29 -5
  169. package/dist/index267.js +11 -15
  170. package/dist/index268.js +25 -9
  171. package/dist/index269.js +5 -18
  172. package/dist/index270.js +69 -16
  173. package/dist/index271.js +8 -12
  174. package/dist/index272.js +13 -29
  175. package/dist/index273.js +65 -12
  176. package/dist/index274.js +63 -24
  177. package/dist/index275.js +68 -6
  178. package/dist/index276.js +30 -12
  179. package/dist/index277.js +9 -28
  180. package/dist/index278.js +152 -4
  181. package/dist/index279.js +107 -22
  182. package/dist/index280.js +5 -68
  183. package/dist/index281.js +13 -31
  184. package/dist/index282.js +4 -9
  185. package/dist/index283.js +23 -153
  186. package/dist/index284.js +7 -108
  187. package/dist/index285.js +15 -4
  188. package/dist/index286.js +28 -12
  189. package/dist/index287.js +12 -5
  190. package/dist/index288.js +5 -5
  191. package/dist/index289.js +6 -4
  192. package/dist/index29.js +208 -44
  193. package/dist/index290.js +4 -16
  194. package/dist/index291.js +14 -7
  195. package/dist/index292.js +8 -5
  196. package/dist/index293.js +5 -4
  197. package/dist/index294.js +4 -512
  198. package/dist/index295.js +511 -48
  199. package/dist/index296.js +50 -18
  200. package/dist/index297.js +17 -6
  201. package/dist/index298.js +6 -8
  202. package/dist/index299.js +8 -7
  203. package/dist/index30.js +2 -2
  204. package/dist/index300.js +7 -8
  205. package/dist/index301.js +8 -12
  206. package/dist/index302.js +12 -10
  207. package/dist/index303.js +10 -14
  208. package/dist/index304.js +14 -6
  209. package/dist/index305.js +12 -15
  210. package/dist/index306.js +25 -26
  211. package/dist/index307.js +5 -13
  212. package/dist/index308.js +23 -5
  213. package/dist/index309.js +5 -57
  214. package/dist/index310.js +59 -0
  215. package/dist/index33.js +3 -3
  216. package/dist/index34.js +1 -1
  217. package/dist/index35.js +1 -1
  218. package/dist/index36.js +2 -2
  219. package/dist/index42.js +1 -1
  220. package/dist/index44.js +6 -6
  221. package/dist/index46.js +8 -8
  222. package/dist/index48.js +6 -6
  223. package/dist/index50.js +1 -1
  224. package/dist/index51.js +10 -10
  225. package/dist/index52.js +1 -1
  226. package/dist/index54.js +8 -8
  227. package/dist/index55.js +1 -1
  228. package/dist/index56.js +1 -1
  229. package/dist/index57.js +1 -1
  230. package/dist/index58.js +1 -1
  231. package/dist/index60.js +4 -4
  232. package/dist/index62.js +1 -1
  233. package/dist/index63.js +1 -1
  234. package/dist/index64.js +1 -1
  235. package/dist/index66.js +1 -1
  236. package/dist/index67.js +1 -1
  237. package/dist/index68.js +1 -1
  238. package/dist/index69.js +1 -1
  239. package/dist/index71.js +1 -1
  240. package/dist/index72.js +1 -1
  241. package/dist/index74.js +1 -1
  242. package/dist/index76.js +6 -6
  243. package/dist/index77.js +2 -2
  244. package/dist/index79.js +1 -1
  245. package/dist/index80.js +8 -7
  246. package/dist/index81.js +17 -174
  247. package/dist/index82.js +176 -10
  248. package/dist/index83.js +10 -862
  249. package/dist/index84.js +856 -16
  250. package/dist/index85.js +22 -10
  251. package/dist/index86.js +10 -243
  252. package/dist/index87.js +230 -298
  253. package/dist/index88.js +300 -216
  254. package/dist/index89.js +227 -10
  255. package/dist/index90.js +10 -27
  256. package/dist/index91.js +25 -5
  257. package/dist/index93.js +6 -51
  258. package/dist/index94.js +51 -5
  259. package/dist/index95.js +5 -24
  260. package/dist/index96.js +24 -33
  261. package/dist/index97.js +2 -2
  262. package/dist/index98.js +33 -181
  263. package/dist/index99.js +10 -7
  264. package/dist/style.css +1 -1
  265. package/dist/theme.css +1 -1
  266. package/dist/types/index.d.ts +32 -1
  267. package/package.json +1 -1
package/README.md CHANGED
@@ -269,20 +269,20 @@ These tokens can be used directly as Tailwind utility classes like bg-primary-30
269
269
 
270
270
  ### Neutral Colors
271
271
 
272
- | Token | Hex | Example Class |
273
- | -------------------- | --------- | --------------- |
274
- | `--color-neutral-0` | `#0a0a0a` | `bg-neutral-0` |
275
- | `--color-neutral-10` | `#1f1f1f` | `bg-neutral-10` |
276
- | `--color-neutral-20` | `#333333` | `bg-neutral-20` |
277
- | `--color-neutral-30` | `#474747` | `bg-neutral-30` |
278
- | `--color-neutral-40` | `#5c5c5c` | `bg-neutral-40` |
279
- | `--color-neutral-50` | `#707070` | `bg-neutral-50` |
280
- | `--color-neutral-60` | `#858585` | `bg-neutral-60` |
281
- | `--color-neutral-70` | `#999999` | `bg-neutral-70` |
282
- | `--color-neutral-80` | `#adadad` | `bg-neutral-80` |
283
- | `--color-neutral-90` | `#c2c2c2` | `bg-neutral-90` |
284
- | `--color-neutral-95` | `#d6d6d6` | `bg-neutral-95` |
285
- | `--color-neutral-99` | `#f1f1f1` | `bg-neutral-99` |
272
+ | Token | Hex | Example Class |
273
+ | -------------------------- | --------- | --------------------- |
274
+ | `--color-neutral-0` | `#0a0a0a` | `bg-neutral-0` |
275
+ | `--color-neutral-10` | `#1f1f1f` | `bg-neutral-10` |
276
+ | `--color-neutral-20` | `#333333` | `bg-neutral-20` |
277
+ | `--color-neutral-30` | `#474747` | `bg-neutral-30` |
278
+ | `--color-neutral-40` | `#5c5c5c` | `bg-neutral-40` |
279
+ | `--color-neutral-50` | `#707070` | `bg-neutral-50` |
280
+ | `--color-neutral-60` | `#858585` | `bg-neutral-60` |
281
+ | `--color-neutral-70` | `#999999` | `bg-neutral-70` |
282
+ | `--color-neutral-80` | `#adadad` | `bg-neutral-80` |
283
+ | `--color-neutral-90` | `#c2c2c2` | `bg-neutral-90` |
284
+ | `--color-neutral-95` | `#d6d6d6` | `bg-neutral-95` |
285
+ | `--color-neutral-99` | `#f1f1f1` | `bg-neutral-99` |
286
286
  | `--color-neutral-gray-50` | `#FAFAFA` | `bg-neutral-gray-50` |
287
287
  | `--color-neutral-gray-100` | `#F5F5F5` | `bg-neutral-gray-100` |
288
288
 
@@ -334,16 +334,16 @@ export function Example() {
334
334
  );
335
335
  }
336
336
  ```
337
+
337
338
  | Prop | Type | Default | Description |
338
- | ------------- | ----------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
339
- | `variant` | `"widget-1"` | `"widget-2"` | `"widget-1"` | Determines the visual style of the card. |
339
+ | ------------- | ----------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |
340
+ | `variant` | `"widget-1"` | `"widget-2"` | `"widget-1"` | Determines the visual style of the card. |
340
341
  | `shadowColor` | `string` | `undefined` | Optional. Accepts either a **HEX value** (e.g. `#3649EA`) or a **theme color variable** (e.g. `var(--color-primary-1)`) to customize the inner shadow color for `widget-1`. |
341
342
  | `asChild` | `boolean` | `false` | If true, renders the component as a child element using Radix’s `<Slot>` for better composition. |
342
343
  | `className` | `string` | `undefined` | Adds custom class names for additional styling. |
343
344
  | `children` | `React.ReactNode` | — | Content inside the card. |
344
345
  | `...props` | `React.HTMLAttributes<HTMLElement>` | — | Additional HTML attributes are spread onto the root element. |
345
346
 
346
-
347
347
  # Toggle Button
348
348
 
349
349
  A customizable and accessible `toggle button` (switch) component. Supports both controlled (Toggle) and uncontrolled/stateful (StatefulToggle) usage.
@@ -504,20 +504,20 @@ These tokens can be used directly as Tailwind utility classes like bg-primary-30
504
504
 
505
505
  ### Neutral Colors
506
506
 
507
- | Token | Hex | Example Class |
508
- | -------------------- | --------- | --------------- |
509
- | `--color-neutral-0` | `#0a0a0a` | `bg-neutral-0` |
510
- | `--color-neutral-10` | `#1f1f1f` | `bg-neutral-10` |
511
- | `--color-neutral-20` | `#333333` | `bg-neutral-20` |
512
- | `--color-neutral-30` | `#474747` | `bg-neutral-30` |
513
- | `--color-neutral-40` | `#5c5c5c` | `bg-neutral-40` |
514
- | `--color-neutral-50` | `#707070` | `bg-neutral-50` |
515
- | `--color-neutral-60` | `#858585` | `bg-neutral-60` |
516
- | `--color-neutral-70` | `#999999` | `bg-neutral-70` |
517
- | `--color-neutral-80` | `#adadad` | `bg-neutral-80` |
518
- | `--color-neutral-90` | `#c2c2c2` | `bg-neutral-90` |
519
- | `--color-neutral-95` | `#d6d6d6` | `bg-neutral-95` |
520
- | `--color-neutral-99` | `#f1f1f1` | `bg-neutral-99` |
507
+ | Token | Hex | Example Class |
508
+ | -------------------------- | --------- | --------------------- |
509
+ | `--color-neutral-0` | `#0a0a0a` | `bg-neutral-0` |
510
+ | `--color-neutral-10` | `#1f1f1f` | `bg-neutral-10` |
511
+ | `--color-neutral-20` | `#333333` | `bg-neutral-20` |
512
+ | `--color-neutral-30` | `#474747` | `bg-neutral-30` |
513
+ | `--color-neutral-40` | `#5c5c5c` | `bg-neutral-40` |
514
+ | `--color-neutral-50` | `#707070` | `bg-neutral-50` |
515
+ | `--color-neutral-60` | `#858585` | `bg-neutral-60` |
516
+ | `--color-neutral-70` | `#999999` | `bg-neutral-70` |
517
+ | `--color-neutral-80` | `#adadad` | `bg-neutral-80` |
518
+ | `--color-neutral-90` | `#c2c2c2` | `bg-neutral-90` |
519
+ | `--color-neutral-95` | `#d6d6d6` | `bg-neutral-95` |
520
+ | `--color-neutral-99` | `#f1f1f1` | `bg-neutral-99` |
521
521
  | `--color-neutral-gray-50` | `#FAFAFA` | `bg-neutral-gray-50` |
522
522
  | `--color-neutral-gray-100` | `#F5F5F5` | `bg-neutral-gray-100` |
523
523
 
@@ -668,6 +668,48 @@ The `Button` component is a core interactive element in the design system. It su
668
668
  <Button size="icon"><Icon /></Button>
669
669
  ```
670
670
 
671
+ ## Notification
672
+
673
+ Use `NotificationContent` when you want to show updates, alerts, or account activity in a clean notification panel.
674
+
675
+ ### Usage
676
+
677
+ ```tsx
678
+ import { NotificationContent } from '@datawire-ai/busyfile-design-library';
679
+
680
+ export function NotificationsExample() {
681
+ return (
682
+ <NotificationContent.Root>
683
+ <NotificationContent.Header
684
+ title="Notifications"
685
+ count={2}
686
+ onMarkAllRead={() => console.log('Marked all as read')}
687
+ />
688
+
689
+ <NotificationContent.Body>
690
+ <NotificationContent.Card
691
+ heading="Project updated"
692
+ description="Website redesign files were uploaded."
693
+ timestamp="2 minutes ago"
694
+ />
695
+
696
+ <NotificationContent.Card
697
+ heading="Weekly report"
698
+ description="Your activity summary is ready to review."
699
+ timestamp="Yesterday"
700
+ read
701
+ />
702
+ </NotificationContent.Body>
703
+ </NotificationContent.Root>
704
+ );
705
+ }
706
+ ```
707
+
708
+ You can also use:
709
+ - `NotificationContent.Loading` while data is loading
710
+ - `NotificationContent.Empty` when there are no notifications
711
+ - `NotificationContent.Error` if something fails
712
+
671
713
  ## Badge
672
714
 
673
715
  The `Badge` component is used to display small status indicators, tags, or labels.
@@ -898,3 +940,4 @@ pnpm build-storybook
898
940
  ```
899
941
 
900
942
  Made with ❤️ by the BusyFile team
943
+ ````
package/dist/index100.js CHANGED
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import * as n from "react";
3
- import { composeEventHandlers as m } from "./index91.js";
4
- import { Primitive as g, dispatchDiscreteCustomEvent as k } from "./index96.js";
5
- import { useComposedRefs as R } from "./index90.js";
6
- import { useCallbackRef as w } from "./index111.js";
7
- import { useEscapeKeydown as U } from "./index122.js";
3
+ import { composeEventHandlers as m } from "./index93.js";
4
+ import { Primitive as g, dispatchDiscreteCustomEvent as k } from "./index98.js";
5
+ import { useComposedRefs as R } from "./index91.js";
6
+ import { useCallbackRef as w } from "./index112.js";
7
+ import { useEscapeKeydown as U } from "./index123.js";
8
8
  import { jsx as T } from "react/jsx-runtime";
9
9
  var z = "DismissableLayer", y = "dismissableLayer.update", H = "dismissableLayer.pointerDownOutside", M = "dismissableLayer.focusOutside", L, B = n.createContext({
10
10
  layers: /* @__PURE__ */ new Set(),
package/dist/index101.js CHANGED
@@ -1,18 +1,138 @@
1
1
  "use client";
2
- import * as r from "react";
3
- var t = 0;
4
- function a() {
5
- r.useEffect(() => {
6
- const e = document.querySelectorAll("[data-radix-focus-guard]");
7
- return document.body.insertAdjacentElement("afterbegin", e[0] ?? n()), document.body.insertAdjacentElement("beforeend", e[1] ?? n()), t++, () => {
8
- t === 1 && document.querySelectorAll("[data-radix-focus-guard]").forEach((o) => o.remove()), t--;
9
- };
10
- }, []);
11
- }
12
- function n() {
13
- const e = document.createElement("span");
14
- return e.setAttribute("data-radix-focus-guard", ""), e.tabIndex = 0, e.style.outline = "none", e.style.opacity = "0", e.style.position = "fixed", e.style.pointerEvents = "none", e;
2
+ import * as d from "react";
3
+ import { useComposedRefs as R } from "./index91.js";
4
+ import { Primitive as M } from "./index98.js";
5
+ import { useCallbackRef as y } from "./index112.js";
6
+ import { jsx as _ } from "react/jsx-runtime";
7
+ var F = "focusScope.autoFocusOnMount", T = "focusScope.autoFocusOnUnmount", N = { bubbles: !1, cancelable: !0 }, K = "FocusScope", k = d.forwardRef((e, n) => {
8
+ const {
9
+ loop: t = !1,
10
+ trapped: u = !1,
11
+ onMountAutoFocus: p,
12
+ onUnmountAutoFocus: L,
13
+ ...g
14
+ } = e, [o, U] = d.useState(null), E = y(p), v = y(L), b = d.useRef(null), A = R(n, (s) => U(s)), a = d.useRef({
15
+ paused: !1,
16
+ pause() {
17
+ this.paused = !0;
18
+ },
19
+ resume() {
20
+ this.paused = !1;
21
+ }
22
+ }).current;
23
+ d.useEffect(() => {
24
+ if (u) {
25
+ let s = function(i) {
26
+ if (a.paused || !o) return;
27
+ const c = i.target;
28
+ o.contains(c) ? b.current = c : f(b.current, { select: !0 });
29
+ }, l = function(i) {
30
+ if (a.paused || !o) return;
31
+ const c = i.relatedTarget;
32
+ c !== null && (o.contains(c) || f(b.current, { select: !0 }));
33
+ }, r = function(i) {
34
+ if (document.activeElement === document.body)
35
+ for (const h of i)
36
+ h.removedNodes.length > 0 && f(o);
37
+ };
38
+ document.addEventListener("focusin", s), document.addEventListener("focusout", l);
39
+ const m = new MutationObserver(r);
40
+ return o && m.observe(o, { childList: !0, subtree: !0 }), () => {
41
+ document.removeEventListener("focusin", s), document.removeEventListener("focusout", l), m.disconnect();
42
+ };
43
+ }
44
+ }, [u, o, a.paused]), d.useEffect(() => {
45
+ if (o) {
46
+ S.add(a);
47
+ const s = document.activeElement;
48
+ if (!o.contains(s)) {
49
+ const r = new CustomEvent(F, N);
50
+ o.addEventListener(F, E), o.dispatchEvent(r), r.defaultPrevented || (w(W(I(o)), { select: !0 }), document.activeElement === s && f(o));
51
+ }
52
+ return () => {
53
+ o.removeEventListener(F, E), setTimeout(() => {
54
+ const r = new CustomEvent(T, N);
55
+ o.addEventListener(T, v), o.dispatchEvent(r), r.defaultPrevented || f(s ?? document.body, { select: !0 }), o.removeEventListener(T, v), S.remove(a);
56
+ }, 0);
57
+ };
58
+ }
59
+ }, [o, E, v, a]);
60
+ const P = d.useCallback(
61
+ (s) => {
62
+ if (!t && !u || a.paused) return;
63
+ const l = s.key === "Tab" && !s.altKey && !s.ctrlKey && !s.metaKey, r = document.activeElement;
64
+ if (l && r) {
65
+ const m = s.currentTarget, [i, c] = x(m);
66
+ i && c ? !s.shiftKey && r === c ? (s.preventDefault(), t && f(i, { select: !0 })) : s.shiftKey && r === i && (s.preventDefault(), t && f(c, { select: !0 })) : r === m && s.preventDefault();
67
+ }
68
+ },
69
+ [t, u, a.paused]
70
+ );
71
+ return /* @__PURE__ */ _(M.div, { tabIndex: -1, ...g, ref: A, onKeyDown: P });
72
+ });
73
+ k.displayName = K;
74
+ function w(e, { select: n = !1 } = {}) {
75
+ const t = document.activeElement;
76
+ for (const u of e)
77
+ if (f(u, { select: n }), document.activeElement !== t) return;
78
+ }
79
+ function x(e) {
80
+ const n = I(e), t = O(n, e), u = O(n.reverse(), e);
81
+ return [t, u];
82
+ }
83
+ function I(e) {
84
+ const n = [], t = document.createTreeWalker(e, NodeFilter.SHOW_ELEMENT, {
85
+ acceptNode: (u) => {
86
+ const p = u.tagName === "INPUT" && u.type === "hidden";
87
+ return u.disabled || u.hidden || p ? NodeFilter.FILTER_SKIP : u.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
88
+ }
89
+ });
90
+ for (; t.nextNode(); ) n.push(t.currentNode);
91
+ return n;
92
+ }
93
+ function O(e, n) {
94
+ for (const t of e)
95
+ if (!D(t, { upTo: n })) return t;
96
+ }
97
+ function D(e, { upTo: n }) {
98
+ if (getComputedStyle(e).visibility === "hidden") return !0;
99
+ for (; e; ) {
100
+ if (n !== void 0 && e === n) return !1;
101
+ if (getComputedStyle(e).display === "none") return !0;
102
+ e = e.parentElement;
103
+ }
104
+ return !1;
105
+ }
106
+ function H(e) {
107
+ return e instanceof HTMLInputElement && "select" in e;
108
+ }
109
+ function f(e, { select: n = !1 } = {}) {
110
+ if (e && e.focus) {
111
+ const t = document.activeElement;
112
+ e.focus({ preventScroll: !0 }), e !== t && H(e) && n && e.select();
113
+ }
114
+ }
115
+ var S = V();
116
+ function V() {
117
+ let e = [];
118
+ return {
119
+ add(n) {
120
+ const t = e[0];
121
+ n !== t && (t == null || t.pause()), e = C(e, n), e.unshift(n);
122
+ },
123
+ remove(n) {
124
+ var t;
125
+ e = C(e, n), (t = e[0]) == null || t.resume();
126
+ }
127
+ };
128
+ }
129
+ function C(e, n) {
130
+ const t = [...e], u = t.indexOf(n);
131
+ return u !== -1 && t.splice(u, 1), t;
132
+ }
133
+ function W(e) {
134
+ return e.filter((n) => n.tagName !== "A");
15
135
  }
16
136
  export {
17
- a as useFocusGuards
137
+ k as FocusScope
18
138
  };
package/dist/index102.js CHANGED
@@ -1,138 +1,17 @@
1
1
  "use client";
2
- import * as d from "react";
3
- import { useComposedRefs as R } from "./index90.js";
4
- import { Primitive as M } from "./index96.js";
5
- import { useCallbackRef as y } from "./index111.js";
6
- import { jsx as _ } from "react/jsx-runtime";
7
- var F = "focusScope.autoFocusOnMount", T = "focusScope.autoFocusOnUnmount", N = { bubbles: !1, cancelable: !0 }, K = "FocusScope", k = d.forwardRef((e, n) => {
8
- const {
9
- loop: t = !1,
10
- trapped: u = !1,
11
- onMountAutoFocus: p,
12
- onUnmountAutoFocus: L,
13
- ...g
14
- } = e, [o, U] = d.useState(null), E = y(p), v = y(L), b = d.useRef(null), A = R(n, (s) => U(s)), a = d.useRef({
15
- paused: !1,
16
- pause() {
17
- this.paused = !0;
18
- },
19
- resume() {
20
- this.paused = !1;
21
- }
22
- }).current;
23
- d.useEffect(() => {
24
- if (u) {
25
- let s = function(i) {
26
- if (a.paused || !o) return;
27
- const c = i.target;
28
- o.contains(c) ? b.current = c : f(b.current, { select: !0 });
29
- }, l = function(i) {
30
- if (a.paused || !o) return;
31
- const c = i.relatedTarget;
32
- c !== null && (o.contains(c) || f(b.current, { select: !0 }));
33
- }, r = function(i) {
34
- if (document.activeElement === document.body)
35
- for (const h of i)
36
- h.removedNodes.length > 0 && f(o);
37
- };
38
- document.addEventListener("focusin", s), document.addEventListener("focusout", l);
39
- const m = new MutationObserver(r);
40
- return o && m.observe(o, { childList: !0, subtree: !0 }), () => {
41
- document.removeEventListener("focusin", s), document.removeEventListener("focusout", l), m.disconnect();
42
- };
43
- }
44
- }, [u, o, a.paused]), d.useEffect(() => {
45
- if (o) {
46
- S.add(a);
47
- const s = document.activeElement;
48
- if (!o.contains(s)) {
49
- const r = new CustomEvent(F, N);
50
- o.addEventListener(F, E), o.dispatchEvent(r), r.defaultPrevented || (w(W(I(o)), { select: !0 }), document.activeElement === s && f(o));
51
- }
52
- return () => {
53
- o.removeEventListener(F, E), setTimeout(() => {
54
- const r = new CustomEvent(T, N);
55
- o.addEventListener(T, v), o.dispatchEvent(r), r.defaultPrevented || f(s ?? document.body, { select: !0 }), o.removeEventListener(T, v), S.remove(a);
56
- }, 0);
57
- };
58
- }
59
- }, [o, E, v, a]);
60
- const P = d.useCallback(
61
- (s) => {
62
- if (!t && !u || a.paused) return;
63
- const l = s.key === "Tab" && !s.altKey && !s.ctrlKey && !s.metaKey, r = document.activeElement;
64
- if (l && r) {
65
- const m = s.currentTarget, [i, c] = x(m);
66
- i && c ? !s.shiftKey && r === c ? (s.preventDefault(), t && f(i, { select: !0 })) : s.shiftKey && r === i && (s.preventDefault(), t && f(c, { select: !0 })) : r === m && s.preventDefault();
67
- }
68
- },
69
- [t, u, a.paused]
70
- );
71
- return /* @__PURE__ */ _(M.div, { tabIndex: -1, ...g, ref: A, onKeyDown: P });
2
+ import * as r from "react";
3
+ import s from "react-dom";
4
+ import { Primitive as c } from "./index98.js";
5
+ import { useLayoutEffect as u } from "./index113.js";
6
+ import { jsx as l } from "react/jsx-runtime";
7
+ var p = "Portal", d = r.forwardRef((e, a) => {
8
+ var o;
9
+ const { container: f, ...i } = e, [m, n] = r.useState(!1);
10
+ u(() => n(!0), []);
11
+ const t = f || m && ((o = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : o.body);
12
+ return t ? s.createPortal(/* @__PURE__ */ l(c.div, { ...i, ref: a }), t) : null;
72
13
  });
73
- k.displayName = K;
74
- function w(e, { select: n = !1 } = {}) {
75
- const t = document.activeElement;
76
- for (const u of e)
77
- if (f(u, { select: n }), document.activeElement !== t) return;
78
- }
79
- function x(e) {
80
- const n = I(e), t = O(n, e), u = O(n.reverse(), e);
81
- return [t, u];
82
- }
83
- function I(e) {
84
- const n = [], t = document.createTreeWalker(e, NodeFilter.SHOW_ELEMENT, {
85
- acceptNode: (u) => {
86
- const p = u.tagName === "INPUT" && u.type === "hidden";
87
- return u.disabled || u.hidden || p ? NodeFilter.FILTER_SKIP : u.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
88
- }
89
- });
90
- for (; t.nextNode(); ) n.push(t.currentNode);
91
- return n;
92
- }
93
- function O(e, n) {
94
- for (const t of e)
95
- if (!D(t, { upTo: n })) return t;
96
- }
97
- function D(e, { upTo: n }) {
98
- if (getComputedStyle(e).visibility === "hidden") return !0;
99
- for (; e; ) {
100
- if (n !== void 0 && e === n) return !1;
101
- if (getComputedStyle(e).display === "none") return !0;
102
- e = e.parentElement;
103
- }
104
- return !1;
105
- }
106
- function H(e) {
107
- return e instanceof HTMLInputElement && "select" in e;
108
- }
109
- function f(e, { select: n = !1 } = {}) {
110
- if (e && e.focus) {
111
- const t = document.activeElement;
112
- e.focus({ preventScroll: !0 }), e !== t && H(e) && n && e.select();
113
- }
114
- }
115
- var S = V();
116
- function V() {
117
- let e = [];
118
- return {
119
- add(n) {
120
- const t = e[0];
121
- n !== t && (t == null || t.pause()), e = C(e, n), e.unshift(n);
122
- },
123
- remove(n) {
124
- var t;
125
- e = C(e, n), (t = e[0]) == null || t.resume();
126
- }
127
- };
128
- }
129
- function C(e, n) {
130
- const t = [...e], u = t.indexOf(n);
131
- return u !== -1 && t.splice(u, 1), t;
132
- }
133
- function W(e) {
134
- return e.filter((n) => n.tagName !== "A");
135
- }
14
+ d.displayName = p;
136
15
  export {
137
- k as FocusScope
16
+ d as Portal
138
17
  };
package/dist/index103.js CHANGED
@@ -1,13 +1,18 @@
1
- import * as e from "react";
2
- import { useLayoutEffect as a } from "./index112.js";
3
- var s = e[" useId ".trim().toString()] || (() => {
4
- }), i = 0;
5
- function d(r) {
6
- const [t, o] = e.useState(s());
7
- return a(() => {
8
- o((u) => u ?? String(i++));
9
- }, [r]), t ? `radix-${t}` : "";
1
+ "use client";
2
+ import * as r from "react";
3
+ var t = 0;
4
+ function a() {
5
+ r.useEffect(() => {
6
+ const e = document.querySelectorAll("[data-radix-focus-guard]");
7
+ return document.body.insertAdjacentElement("afterbegin", e[0] ?? n()), document.body.insertAdjacentElement("beforeend", e[1] ?? n()), t++, () => {
8
+ t === 1 && document.querySelectorAll("[data-radix-focus-guard]").forEach((o) => o.remove()), t--;
9
+ };
10
+ }, []);
11
+ }
12
+ function n() {
13
+ const e = document.createElement("span");
14
+ return e.setAttribute("data-radix-focus-guard", ""), e.tabIndex = 0, e.style.outline = "none", e.style.opacity = "0", e.style.position = "fixed", e.style.pointerEvents = "none", e;
10
15
  }
11
16
  export {
12
- d as useId
17
+ a as useFocusGuards
13
18
  };