@nsaa/core 0.1.0-alpha.2 → 0.1.0-alpha.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 (60) hide show
  1. package/README.md +30 -8
  2. package/dist/_virtual/_rolldown/runtime.js +13 -0
  3. package/dist/alert/alert.d.ts +3 -2
  4. package/dist/alert/alert.js +7 -2
  5. package/dist/alert-dialog/alert-dialog.js +13 -7
  6. package/dist/dialog/dialog.js +13 -7
  7. package/dist/index.d.ts +2 -1
  8. package/dist/index.js +2 -1
  9. package/dist/lib/opener.js +29 -0
  10. package/dist/sound/lazy-uisfx.d.ts +20 -0
  11. package/dist/sound/lazy-uisfx.js +68 -0
  12. package/dist/sound/sound-map.d.ts +2 -0
  13. package/dist/sound/sound-map.js +5 -1
  14. package/dist/sound/uisfx.d.ts +5 -1
  15. package/dist/sources/accordion.css +3 -0
  16. package/dist/sources/alert-dialog.css +26 -0
  17. package/dist/sources/alert.css +8 -0
  18. package/dist/sources/avatar.css +3 -0
  19. package/dist/sources/badge.css +3 -0
  20. package/dist/sources/button.css +24 -0
  21. package/dist/sources/calendar.css +25 -0
  22. package/dist/sources/card.css +3 -0
  23. package/dist/sources/checkbox.css +6 -0
  24. package/dist/sources/collapsible.css +2 -0
  25. package/dist/sources/combobox.css +28 -0
  26. package/dist/sources/command.css +30 -0
  27. package/dist/sources/context-menu.css +6 -0
  28. package/dist/sources/dialog.css +26 -0
  29. package/dist/sources/drawer.css +6 -0
  30. package/dist/sources/dropdown-menu.css +6 -0
  31. package/dist/sources/empty.css +3 -0
  32. package/dist/sources/field.css +5 -0
  33. package/dist/sources/input-group.css +27 -0
  34. package/dist/sources/input-otp.css +8 -0
  35. package/dist/sources/input.css +3 -0
  36. package/dist/sources/kbd.css +3 -0
  37. package/dist/sources/label.css +3 -0
  38. package/dist/sources/loaders-text.css +8 -0
  39. package/dist/sources/loaders.css +40 -0
  40. package/dist/sources/native-select.css +3 -0
  41. package/dist/sources/pagination.css +25 -0
  42. package/dist/sources/popover.css +3 -0
  43. package/dist/sources/radio-group.css +6 -0
  44. package/dist/sources/select.css +6 -0
  45. package/dist/sources/separator.css +3 -0
  46. package/dist/sources/skeleton.css +3 -0
  47. package/dist/sources/slider.css +6 -0
  48. package/dist/sources/spinner.css +20 -0
  49. package/dist/sources/switch.css +6 -0
  50. package/dist/sources/table.css +3 -0
  51. package/dist/sources/tabs.css +3 -0
  52. package/dist/sources/textarea.css +3 -0
  53. package/dist/sources/toast.css +25 -0
  54. package/dist/sources/toggle-group.css +32 -0
  55. package/dist/sources/toolbar.css +34 -0
  56. package/dist/sources/tooltip.css +3 -0
  57. package/package.json +7 -4
  58. package/src/feel.css +52 -0
  59. package/src/styles-base.css +142 -0
  60. package/src/styles.css +3 -133
package/README.md CHANGED
@@ -17,7 +17,20 @@ import { Button, SoundProvider } from "@nsaa/core";
17
17
  ```
18
18
 
19
19
  Fonts are yours to load: the tokens name Geist (body), Newsreader (the editorial theme) and Geist
20
- Mono, and fall back to the system sans. For example, in your HTML `<head>`:
20
+ Mono, and fall back to the system sans. Self-host them with Fontsource (works under a strict CSP such
21
+ as `font-src 'self'`; the tokens list the Fontsource names first, so no `@font-face` is needed):
22
+
23
+ ```sh
24
+ pnpm add @fontsource-variable/geist @fontsource-variable/geist-mono @fontsource-variable/newsreader
25
+ ```
26
+
27
+ ```css
28
+ @import "@fontsource-variable/geist";
29
+ @import "@fontsource-variable/geist-mono";
30
+ @import "@fontsource-variable/newsreader"; /* editorial theme only */
31
+ ```
32
+
33
+ Or link Google Fonts in your HTML `<head>`:
21
34
 
22
35
  ```html
23
36
  <link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -28,12 +41,21 @@ Mono, and fall back to the system sans. For example, in your HTML `<head>`:
28
41
  />
29
42
  ```
30
43
 
31
- | Entry | What |
32
- | ------------------------- | ----------------------------------------------------------------------------- |
33
- | `@nsaa/core` | components, `SoundProvider`, `LoaderProvider`, `Spinner` (featured 8 loaders) |
34
- | `@nsaa/core/loaders` | all 29 loading.dev loaders, `registerLoaders` |
35
- | `@nsaa/core/loaders/text` | text and AI loaders (ShimmerText, Typing, …) |
36
- | `@nsaa/core/sound-uisfx` | the UISFX sound engine for `SoundProvider` |
37
- | `@nsaa/core/styles.css` | tokens, the shadcn alias layer and the feel layer |
44
+ Sound: `lazyUisfxPlayer()` (recommended) loads the UISFX engine on the first interaction;
45
+ `createUisfxPlayer()` from `@nsaa/core/sound-uisfx` loads it up front.
46
+
47
+ ```tsx
48
+ const player = lazyUisfxPlayer();
49
+ <SoundProvider player={player}>…</SoundProvider>;
50
+ ```
51
+
52
+ | Entry | What |
53
+ | ---------------------------- | ------------------------------------------------------------------------------------ |
54
+ | `@nsaa/core` | components, `SoundProvider`, `lazyUisfxPlayer`, `LoaderProvider`, `Spinner` |
55
+ | `@nsaa/core/loaders` | all 29 loading.dev loaders, `registerLoaders` |
56
+ | `@nsaa/core/loaders/text` | text and AI loaders (ShimmerText, Typing, …) |
57
+ | `@nsaa/core/sound-uisfx` | the UISFX sound engine for `SoundProvider` |
58
+ | `@nsaa/core/styles.css` | tokens, the shadcn alias layer, the feel layer, every component's sources |
59
+ | `@nsaa/core/styles-base.css` | the same without Tailwind sources; add `@nsaa/core/sources/<name>.css` per component |
38
60
 
39
61
  Peer dependencies: `react` and `react-dom` 19. MIT; third-party notices in `NOTICE`.
@@ -0,0 +1,13 @@
1
+ "use client";
2
+ // \0rolldown/runtime.js
3
+ var __defProp = Object.defineProperty;
4
+ var __exportAll = (all, no_symbols) => {
5
+ let target = {};
6
+ for (var name in all) __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
11
+ return target;
12
+ };
13
+ export { __exportAll };
@@ -2,13 +2,14 @@
2
2
  import { VariantProps } from "class-variance-authority";
3
3
  import * as React from "react";
4
4
  declare const alertVariants: (props?: ({
5
- variant?: "default" | "destructive" | null | undefined;
5
+ variant?: "success" | "warning" | "default" | "destructive" | "info" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  declare function Alert({ className, variant, announce, ...props }: React.ComponentProps<"div"> & VariantProps<typeof alertVariants> & {
8
8
  /**
9
9
  * The error sound (feedback.error) when the Alert appears (#114). Left unset it's automatic: a
10
10
  * destructive Alert plays it when a person's action caused it (within the browser's transient
11
- * activation window), never on load. `true` always plays it, `false` never does.
11
+ * activation window), never on load. `true` always plays it, `false` never does. Success and
12
+ * warning are silent unless `announce` is set, then play feedback.success / feedback.warning.
12
13
  */
13
14
  announce?: boolean;
14
15
  }): React.JSX.Element;
@@ -9,15 +9,20 @@ import * as React from "react";
9
9
  const alertVariants = cva("group/alert relative grid w-full gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4", {
10
10
  variants: { variant: {
11
11
  default: "bg-card text-card-foreground",
12
- destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current"
12
+ destructive: "bg-card text-destructive *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current",
13
+ success: "border-positive-subtle-active bg-positive-subtle text-on-positive-subtle-foreground *:data-[slot=alert-description]:text-on-positive-subtle-foreground",
14
+ warning: "border-warning-subtle-active bg-warning-subtle text-on-warning-subtle-foreground *:data-[slot=alert-description]:text-on-warning-subtle-foreground",
15
+ info: "border-info-subtle-active bg-info-subtle text-on-info-subtle-foreground *:data-[slot=alert-description]:text-on-info-subtle-foreground"
13
16
  } },
14
17
  defaultVariants: { variant: "default" }
15
18
  });
16
19
  function Alert({ className, variant, announce, ...props }) {
17
20
  const cue = useCue("alert");
18
21
  const destructive = variant === "destructive";
22
+ const announceCue = variant === "success" || variant === "warning" ? variant : "destructive";
19
23
  const appear = React.useEffectEvent(() => {
20
- if (announce === true || destructive && recentUserAction()) cue("destructive");
24
+ if (variant === "info") return;
25
+ if (announce === true || destructive && recentUserAction()) cue(announceCue);
21
26
  });
22
27
  React.useEffect(() => {
23
28
  if (announce !== false && (destructive || announce)) appear();
@@ -3,18 +3,23 @@
3
3
  import { cn } from "../lib/cn.js";
4
4
  import { useCue } from "../sound/sound-map.js";
5
5
  import { Button } from "../button/button.js";
6
+ import { OpenerContext, useFinalFocus, useOpener } from "../lib/opener.js";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import { AlertDialog } from "@base-ui/react/alert-dialog";
8
9
  // src/alert-dialog/alert-dialog.tsx
9
10
  function AlertDialog$1({ onOpenChange, ...props }) {
10
11
  const cue = useCue("alert-dialog");
11
- return /* @__PURE__ */ jsx(AlertDialog.Root, {
12
- "data-slot": "alert-dialog",
13
- onOpenChange: (open, details) => {
14
- onOpenChange?.(open, details);
15
- if (!details.isCanceled) cue(open ? "open" : "close");
16
- },
17
- ...props
12
+ const opener = useOpener(props.open);
13
+ return /* @__PURE__ */ jsx(OpenerContext.Provider, {
14
+ value: opener,
15
+ children: /* @__PURE__ */ jsx(AlertDialog.Root, {
16
+ "data-slot": "alert-dialog",
17
+ onOpenChange: (open, details) => {
18
+ onOpenChange?.(open, details);
19
+ if (!details.isCanceled) cue(open ? "open" : "close");
20
+ },
21
+ ...props
22
+ })
18
23
  });
19
24
  }
20
25
  function AlertDialogTrigger({ ...props }) {
@@ -37,6 +42,7 @@ function AlertDialogOverlay({ className, ...props }) {
37
42
  });
38
43
  }
39
44
  function AlertDialogContent({ className, size = "default", ...props }) {
45
+ props.finalFocus = useFinalFocus(props.finalFocus);
40
46
  return /* @__PURE__ */ jsxs(AlertDialogPortal, { children: [/* @__PURE__ */ jsx(AlertDialogOverlay, {}), /* @__PURE__ */ jsx(AlertDialog.Popup, {
41
47
  "data-slot": "alert-dialog-content",
42
48
  "data-size": size,
@@ -3,18 +3,23 @@
3
3
  import { cn } from "../lib/cn.js";
4
4
  import { useCue } from "../sound/sound-map.js";
5
5
  import { Button } from "../button/button.js";
6
+ import { OpenerContext, useFinalFocus, useOpener } from "../lib/opener.js";
6
7
  import { jsx, jsxs } from "react/jsx-runtime";
7
8
  import { Dialog } from "@base-ui/react/dialog";
8
9
  // src/dialog/dialog.tsx
9
10
  function Dialog$1({ onOpenChange, ...props }) {
10
11
  const cue = useCue("dialog");
11
- return /* @__PURE__ */ jsx(Dialog.Root, {
12
- "data-slot": "dialog",
13
- onOpenChange: (open, details) => {
14
- onOpenChange?.(open, details);
15
- if (!details.isCanceled) cue(open ? "open" : "close");
16
- },
17
- ...props
12
+ const opener = useOpener(props.open);
13
+ return /* @__PURE__ */ jsx(OpenerContext.Provider, {
14
+ value: opener,
15
+ children: /* @__PURE__ */ jsx(Dialog.Root, {
16
+ "data-slot": "dialog",
17
+ onOpenChange: (open, details) => {
18
+ onOpenChange?.(open, details);
19
+ if (!details.isCanceled) cue(open ? "open" : "close");
20
+ },
21
+ ...props
22
+ })
18
23
  });
19
24
  }
20
25
  function DialogTrigger({ ...props }) {
@@ -43,6 +48,7 @@ function DialogOverlay({ className, ...props }) {
43
48
  });
44
49
  }
45
50
  function DialogContent({ className, children, showCloseButton = true, ...props }) {
51
+ props.finalFocus = useFinalFocus(props.finalFocus);
46
52
  return /* @__PURE__ */ jsxs(DialogPortal, { children: [/* @__PURE__ */ jsx(DialogOverlay, {}), /* @__PURE__ */ jsxs(Dialog.Popup, {
47
53
  "data-slot": "dialog-content",
48
54
  className: cn("fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className),
package/dist/index.d.ts CHANGED
@@ -65,6 +65,7 @@ import "./skeleton/index.js";
65
65
  import { Slider } from "./slider/slider.js";
66
66
  import "./slider/index.js";
67
67
  import { SoundCue, SoundPlayer, SoundProvider, SoundProviderProps, useSound } from "./sound/sound.js";
68
+ import { lazyUisfxPlayer } from "./sound/lazy-uisfx.js";
68
69
  import { SOUND_MAP, SoundComponent } from "./sound/sound-map.js";
69
70
  import { LoaderProvider, LoaderProviderProps } from "./spinner/loader-provider.js";
70
71
  import { LoaderComponent, registerLoader, registerLoaders } from "./spinner/registry.js";
@@ -87,4 +88,4 @@ import "./toolbar/index.js";
87
88
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip/tooltip.js";
88
89
  import "./tooltip/index.js";
89
90
  import "./lib/track-input-modality.js";
90
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, type EmptyIllustrationOptions, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, IconSwap, type IconSwapProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, KbdGroup, Label, type LoaderComponent, LoaderProvider, type LoaderProviderProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, RadioGroup, RadioGroupItem, SOUND_MAP, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, SkeletonContent, Slider, type SoundComponent, type SoundCue, type SoundPlayer, SoundProvider, type SoundProviderProps, Spinner, type SpinnerProps, type SpinnerVariant, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, ToggleGroup, type ToggleGroupItemProps, type ToggleGroupMultipleProps, type ToggleGroupProps, type ToggleGroupSingleProps, type ToggleGroupSize, type ToggleGroupVariant, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarInputProps, type ToolbarLinkProps, type ToolbarProps, type ToolbarSize, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, createToastManager, registerLoader, registerLoaders, tabsListVariants, toast, useComboboxAnchor, useEmptyIllustration, useSound, useToastManager };
91
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, type EmptyIllustrationOptions, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, IconSwap, type IconSwapProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, KbdGroup, Label, type LoaderComponent, LoaderProvider, type LoaderProviderProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, RadioGroup, RadioGroupItem, SOUND_MAP, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, SkeletonContent, Slider, type SoundComponent, type SoundCue, type SoundPlayer, SoundProvider, type SoundProviderProps, Spinner, type SpinnerProps, type SpinnerVariant, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, ToggleGroup, type ToggleGroupItemProps, type ToggleGroupMultipleProps, type ToggleGroupProps, type ToggleGroupSingleProps, type ToggleGroupSize, type ToggleGroupVariant, Toolbar, type ToolbarButtonProps, type ToolbarGroupProps, type ToolbarInputProps, type ToolbarLinkProps, type ToolbarProps, type ToolbarSize, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, createToastManager, lazyUisfxPlayer, registerLoader, registerLoaders, tabsListVariants, toast, useComboboxAnchor, useEmptyIllustration, useSound, useToastManager };
package/dist/index.js CHANGED
@@ -39,6 +39,7 @@ import { RadioGroup, RadioGroupItem } from "./radio-group/radio-group.js";
39
39
  import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue } from "./select/select.js";
40
40
  import { Skeleton, SkeletonContent } from "./skeleton/skeleton.js";
41
41
  import { Slider } from "./slider/slider.js";
42
+ import { lazyUisfxPlayer } from "./sound/lazy-uisfx.js";
42
43
  import { Switch } from "./switch/switch.js";
43
44
  import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./table/table.js";
44
45
  import { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants } from "./tabs/tabs.js";
@@ -47,4 +48,4 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tool
47
48
  import { ToggleGroup } from "./toggle-group/toggle-group.js";
48
49
  import { Toolbar } from "./toolbar/toolbar.js";
49
50
  import "./lib/track-input-modality.js";
50
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, IconSwap, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, KbdGroup, Label, LoaderProvider, NativeSelect, NativeSelectOptGroup, NativeSelectOption, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, RadioGroup, RadioGroupItem, SOUND_MAP, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, SkeletonContent, Slider, SoundProvider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, ToggleGroup, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, createToastManager, registerLoader, registerLoaders, tabsListVariants, toast, useComboboxAnchor, useEmptyIllustration, useSound, useToastManager };
51
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Button, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, IconSwap, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, KbdGroup, Label, LoaderProvider, NativeSelect, NativeSelectOptGroup, NativeSelectOption, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, RadioGroup, RadioGroupItem, SOUND_MAP, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Skeleton, SkeletonContent, Slider, SoundProvider, Spinner, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, Toast, ToastAction, ToastClose, ToastContent, ToastDescription, ToastPortal, ToastProvider, ToastTitle, ToastViewport, Toaster, ToggleGroup, Toolbar, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonVariants, cn, createToastManager, lazyUisfxPlayer, registerLoader, registerLoaders, tabsListVariants, toast, useComboboxAnchor, useEmptyIllustration, useSound, useToastManager };
@@ -0,0 +1,29 @@
1
+ "use client";
2
+ import { createContext, useContext, useState } from "react";
3
+ // src/lib/opener.ts
4
+ /**
5
+ * The element that had focus as a controlled dialog opened, recorded during render (#144). React
6
+ * focuses an `autoFocus` field inside the popup on mount, before Base UI records the opener, so
7
+ * with no Trigger focus would fall to `body` on close. (React's "store information from previous
8
+ * renders" pattern: the state update re-renders before anything inside the popup mounts.)
9
+ */
10
+ function useOpener(open) {
11
+ const [wasOpen, setWasOpen] = useState(false);
12
+ const [opener, setOpener] = useState(null);
13
+ if (!!open !== wasOpen) {
14
+ setWasOpen(!!open);
15
+ if (open && typeof document !== "undefined") {
16
+ const active = document.activeElement;
17
+ setOpener(active instanceof HTMLElement && active !== document.body ? active : null);
18
+ }
19
+ }
20
+ return opener;
21
+ }
22
+ const OpenerContext = createContext(null);
23
+ /** The popup's `finalFocus`: the app's own, else the recorded opener while it is still in the page. */
24
+ function useFinalFocus(own) {
25
+ const opener = useContext(OpenerContext);
26
+ if (own !== void 0 || !opener) return own;
27
+ return () => opener.isConnected ? opener : true;
28
+ }
29
+ export { OpenerContext, useFinalFocus, useOpener };
@@ -0,0 +1,20 @@
1
+
2
+ import { UisfxPlayerOptions, UisfxSoundPlayer, uisfx_d_exports } from "./uisfx.js";
3
+ type Engine = typeof uisfx_d_exports;
4
+ /**
5
+ * The recommended sound setup (#144): a `SoundPlayer` that loads the UISFX engine on first use, so
6
+ * it stays out of the app's first load. The first trusted pointer or key action starts the import
7
+ * (cues before it finishes are skipped, as they would be before unlocking anyway). If the import
8
+ * fails, say offline, it stays silent and tries again on the next interaction; a cue never throws.
9
+ *
10
+ * Create one per app, at module scope:
11
+ *
12
+ * ```tsx
13
+ * const player = lazyUisfxPlayer();
14
+ * <SoundProvider player={player}>…</SoundProvider>
15
+ * ```
16
+ */
17
+ export declare function lazyUisfxPlayer(options?: UisfxPlayerOptions,
18
+ /** @internal Tests swap the import. */
19
+ importEngine?: () => Promise<Engine>): UisfxSoundPlayer;
20
+ export {};
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { sound } from "../tokens/dist/motion.js";
3
+ // src/sound/lazy-uisfx.ts
4
+ const GESTURES = ["pointerdown", "keydown"];
5
+ /**
6
+ * The recommended sound setup (#144): a `SoundPlayer` that loads the UISFX engine on first use, so
7
+ * it stays out of the app's first load. The first trusted pointer or key action starts the import
8
+ * (cues before it finishes are skipped, as they would be before unlocking anyway). If the import
9
+ * fails, say offline, it stays silent and tries again on the next interaction; a cue never throws.
10
+ *
11
+ * Create one per app, at module scope:
12
+ *
13
+ * ```tsx
14
+ * const player = lazyUisfxPlayer();
15
+ * <SoundProvider player={player}>…</SoundProvider>
16
+ * ```
17
+ */
18
+ function lazyUisfxPlayer(options = {}, importEngine = () => import("./uisfx.js")) {
19
+ let engine = null;
20
+ let loading = false;
21
+ let pack = options.pack;
22
+ let gestured = false;
23
+ const listenOn = options.target ?? (typeof window === "undefined" ? void 0 : window);
24
+ const stopListening = () => {
25
+ for (const type of GESTURES) listenOn?.removeEventListener(type, onGesture, true);
26
+ };
27
+ const load = () => {
28
+ if (engine || loading) return;
29
+ loading = true;
30
+ importEngine().then(({ createUisfxPlayer }) => {
31
+ engine = createUisfxPlayer({
32
+ ...options,
33
+ pack
34
+ });
35
+ stopListening();
36
+ if (gestured) engine.unlock();
37
+ }).catch(() => {}).finally(() => {
38
+ loading = false;
39
+ });
40
+ };
41
+ function onGesture(event) {
42
+ if (!event.isTrusted) return;
43
+ gestured = true;
44
+ load();
45
+ }
46
+ for (const type of GESTURES) listenOn?.addEventListener(type, onGesture, true);
47
+ const play = ((cue, playOptions) => {
48
+ if (engine) return engine(cue, playOptions);
49
+ load();
50
+ });
51
+ play.setPack = (next) => {
52
+ pack = next;
53
+ engine?.setPack(next);
54
+ };
55
+ play.getPack = () => engine?.getPack() ?? pack ?? sound.feel;
56
+ play.isUnlocked = () => engine?.isUnlocked() ?? false;
57
+ play.unlock = () => {
58
+ gestured = true;
59
+ if (engine) engine.unlock();
60
+ else load();
61
+ };
62
+ play.destroy = async () => {
63
+ stopListening();
64
+ await engine?.destroy();
65
+ };
66
+ return play;
67
+ }
68
+ export { lazyUisfxPlayer };
@@ -30,6 +30,8 @@ export declare const SOUND_MAP: {
30
30
  };
31
31
  readonly alert: {
32
32
  readonly destructive: "feedback.error";
33
+ readonly success: "feedback.success";
34
+ readonly warning: "feedback.warning";
33
35
  };
34
36
  readonly dialog: {
35
37
  readonly open: "navigation.open";
@@ -21,7 +21,11 @@ const SOUND_MAP = {
21
21
  },
22
22
  slider: { commit: "movement.snap" },
23
23
  "input-otp": { invalid: "feedback.error" },
24
- alert: { destructive: "feedback.error" },
24
+ alert: {
25
+ destructive: "feedback.error",
26
+ success: "feedback.success",
27
+ warning: "feedback.warning"
28
+ },
25
29
  dialog: {
26
30
  open: "navigation.open",
27
31
  close: "navigation.close"
@@ -1,6 +1,9 @@
1
1
 
2
2
  import { SoundPlayer } from "./sound.js";
3
3
  import { PackName } from "uisfx";
4
+ declare namespace uisfx_d_exports {
5
+ export { SoundPack, UisfxPlayerOptions, UisfxSoundPlayer, createUisfxPlayer, soundPacks };
6
+ }
4
7
  export type SoundPack = PackName;
5
8
  /** Every UISFX pack, for pickers. */
6
9
  export declare const soundPacks: readonly SoundPack[];
@@ -34,4 +37,5 @@ export interface UisfxSoundPlayer extends SoundPlayer {
34
37
  * <SoundProvider player={player}>…</SoundProvider>
35
38
  * ```
36
39
  */
37
- export declare function createUisfxPlayer({ pack, target }?: UisfxPlayerOptions): UisfxSoundPlayer;
40
+ export declare function createUisfxPlayer({ pack, target }?: UisfxPlayerOptions): UisfxSoundPlayer;
41
+ export { uisfx_d_exports };
@@ -0,0 +1,3 @@
1
+ /* @nsaa/core: Tailwind sources for accordion (generated). */
2
+ @source "../accordion/accordion.js";
3
+ @source "../lib/cn.js";
@@ -0,0 +1,26 @@
1
+ /* @nsaa/core: Tailwind sources for alert-dialog (generated). */
2
+ @source "../alert-dialog/alert-dialog.js";
3
+ @source "../button/button.js";
4
+ @source "../lib/cn.js";
5
+ @source "../lib/control-defaults.js";
6
+ @source "../lib/opener.js";
7
+ @source "../lib/use-press.js";
8
+ @source "../loaders/arc.js";
9
+ @source "../loaders/bouncing-dots.js";
10
+ @source "../loaders/cap.js";
11
+ @source "../loaders/circular-dots.js";
12
+ @source "../loaders/classic.js";
13
+ @source "../loaders/easing.js";
14
+ @source "../loaders/fade.js";
15
+ @source "../loaders/frame.js";
16
+ @source "../loaders/motion.js";
17
+ @source "../loaders/orbit.js";
18
+ @source "../loaders/pulse.js";
19
+ @source "../loaders/ring.js";
20
+ @source "../loaders/wave.js";
21
+ @source "../sound/sound-map.js";
22
+ @source "../sound/sound.js";
23
+ @source "../spinner/loader-provider.js";
24
+ @source "../spinner/registry.js";
25
+ @source "../spinner/spinner.js";
26
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,8 @@
1
+ /* @nsaa/core: Tailwind sources for alert (generated). */
2
+ @source "../alert/alert.js";
3
+ @source "../lib/cn.js";
4
+ @source "../lib/input-modality.js";
5
+ @source "../lib/user-action.js";
6
+ @source "../sound/sound-map.js";
7
+ @source "../sound/sound.js";
8
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,3 @@
1
+ /* @nsaa/core: Tailwind sources for avatar (generated). */
2
+ @source "../avatar/avatar.js";
3
+ @source "../lib/cn.js";
@@ -0,0 +1,3 @@
1
+ /* @nsaa/core: Tailwind sources for badge (generated). */
2
+ @source "../badge/badge.js";
3
+ @source "../lib/cn.js";
@@ -0,0 +1,24 @@
1
+ /* @nsaa/core: Tailwind sources for button (generated). */
2
+ @source "../button/button.js";
3
+ @source "../lib/cn.js";
4
+ @source "../lib/control-defaults.js";
5
+ @source "../lib/use-press.js";
6
+ @source "../loaders/arc.js";
7
+ @source "../loaders/bouncing-dots.js";
8
+ @source "../loaders/cap.js";
9
+ @source "../loaders/circular-dots.js";
10
+ @source "../loaders/classic.js";
11
+ @source "../loaders/easing.js";
12
+ @source "../loaders/fade.js";
13
+ @source "../loaders/frame.js";
14
+ @source "../loaders/motion.js";
15
+ @source "../loaders/orbit.js";
16
+ @source "../loaders/pulse.js";
17
+ @source "../loaders/ring.js";
18
+ @source "../loaders/wave.js";
19
+ @source "../sound/sound-map.js";
20
+ @source "../sound/sound.js";
21
+ @source "../spinner/loader-provider.js";
22
+ @source "../spinner/registry.js";
23
+ @source "../spinner/spinner.js";
24
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,25 @@
1
+ /* @nsaa/core: Tailwind sources for calendar (generated). */
2
+ @source "../button/button.js";
3
+ @source "../calendar/calendar.js";
4
+ @source "../lib/cn.js";
5
+ @source "../lib/control-defaults.js";
6
+ @source "../lib/use-press.js";
7
+ @source "../loaders/arc.js";
8
+ @source "../loaders/bouncing-dots.js";
9
+ @source "../loaders/cap.js";
10
+ @source "../loaders/circular-dots.js";
11
+ @source "../loaders/classic.js";
12
+ @source "../loaders/easing.js";
13
+ @source "../loaders/fade.js";
14
+ @source "../loaders/frame.js";
15
+ @source "../loaders/motion.js";
16
+ @source "../loaders/orbit.js";
17
+ @source "../loaders/pulse.js";
18
+ @source "../loaders/ring.js";
19
+ @source "../loaders/wave.js";
20
+ @source "../sound/sound-map.js";
21
+ @source "../sound/sound.js";
22
+ @source "../spinner/loader-provider.js";
23
+ @source "../spinner/registry.js";
24
+ @source "../spinner/spinner.js";
25
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,3 @@
1
+ /* @nsaa/core: Tailwind sources for card (generated). */
2
+ @source "../card/card.js";
3
+ @source "../lib/cn.js";
@@ -0,0 +1,6 @@
1
+ /* @nsaa/core: Tailwind sources for checkbox (generated). */
2
+ @source "../checkbox/checkbox.js";
3
+ @source "../lib/cn.js";
4
+ @source "../sound/sound-map.js";
5
+ @source "../sound/sound.js";
6
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,2 @@
1
+ /* @nsaa/core: Tailwind sources for collapsible (generated). */
2
+ @source "../collapsible/collapsible.js";
@@ -0,0 +1,28 @@
1
+ /* @nsaa/core: Tailwind sources for combobox (generated). */
2
+ @source "../button/button.js";
3
+ @source "../combobox/combobox.js";
4
+ @source "../input-group/input-group.js";
5
+ @source "../input/input.js";
6
+ @source "../lib/cn.js";
7
+ @source "../lib/control-defaults.js";
8
+ @source "../lib/use-press.js";
9
+ @source "../loaders/arc.js";
10
+ @source "../loaders/bouncing-dots.js";
11
+ @source "../loaders/cap.js";
12
+ @source "../loaders/circular-dots.js";
13
+ @source "../loaders/classic.js";
14
+ @source "../loaders/easing.js";
15
+ @source "../loaders/fade.js";
16
+ @source "../loaders/frame.js";
17
+ @source "../loaders/motion.js";
18
+ @source "../loaders/orbit.js";
19
+ @source "../loaders/pulse.js";
20
+ @source "../loaders/ring.js";
21
+ @source "../loaders/wave.js";
22
+ @source "../sound/sound-map.js";
23
+ @source "../sound/sound.js";
24
+ @source "../spinner/loader-provider.js";
25
+ @source "../spinner/registry.js";
26
+ @source "../spinner/spinner.js";
27
+ @source "../textarea/textarea.js";
28
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,30 @@
1
+ /* @nsaa/core: Tailwind sources for command (generated). */
2
+ @source "../button/button.js";
3
+ @source "../command/command.js";
4
+ @source "../dialog/dialog.js";
5
+ @source "../input-group/input-group.js";
6
+ @source "../input/input.js";
7
+ @source "../lib/cn.js";
8
+ @source "../lib/control-defaults.js";
9
+ @source "../lib/opener.js";
10
+ @source "../lib/use-press.js";
11
+ @source "../loaders/arc.js";
12
+ @source "../loaders/bouncing-dots.js";
13
+ @source "../loaders/cap.js";
14
+ @source "../loaders/circular-dots.js";
15
+ @source "../loaders/classic.js";
16
+ @source "../loaders/easing.js";
17
+ @source "../loaders/fade.js";
18
+ @source "../loaders/frame.js";
19
+ @source "../loaders/motion.js";
20
+ @source "../loaders/orbit.js";
21
+ @source "../loaders/pulse.js";
22
+ @source "../loaders/ring.js";
23
+ @source "../loaders/wave.js";
24
+ @source "../sound/sound-map.js";
25
+ @source "../sound/sound.js";
26
+ @source "../spinner/loader-provider.js";
27
+ @source "../spinner/registry.js";
28
+ @source "../spinner/spinner.js";
29
+ @source "../textarea/textarea.js";
30
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,6 @@
1
+ /* @nsaa/core: Tailwind sources for context-menu (generated). */
2
+ @source "../context-menu/context-menu.js";
3
+ @source "../lib/cn.js";
4
+ @source "../sound/sound-map.js";
5
+ @source "../sound/sound.js";
6
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,26 @@
1
+ /* @nsaa/core: Tailwind sources for dialog (generated). */
2
+ @source "../button/button.js";
3
+ @source "../dialog/dialog.js";
4
+ @source "../lib/cn.js";
5
+ @source "../lib/control-defaults.js";
6
+ @source "../lib/opener.js";
7
+ @source "../lib/use-press.js";
8
+ @source "../loaders/arc.js";
9
+ @source "../loaders/bouncing-dots.js";
10
+ @source "../loaders/cap.js";
11
+ @source "../loaders/circular-dots.js";
12
+ @source "../loaders/classic.js";
13
+ @source "../loaders/easing.js";
14
+ @source "../loaders/fade.js";
15
+ @source "../loaders/frame.js";
16
+ @source "../loaders/motion.js";
17
+ @source "../loaders/orbit.js";
18
+ @source "../loaders/pulse.js";
19
+ @source "../loaders/ring.js";
20
+ @source "../loaders/wave.js";
21
+ @source "../sound/sound-map.js";
22
+ @source "../sound/sound.js";
23
+ @source "../spinner/loader-provider.js";
24
+ @source "../spinner/registry.js";
25
+ @source "../spinner/spinner.js";
26
+ @source "../tokens/dist/motion.js";
@@ -0,0 +1,6 @@
1
+ /* @nsaa/core: Tailwind sources for drawer (generated). */
2
+ @source "../drawer/drawer.js";
3
+ @source "../lib/cn.js";
4
+ @source "../sound/sound-map.js";
5
+ @source "../sound/sound.js";
6
+ @source "../tokens/dist/motion.js";