fulldev-ui 0.11.0 → 0.12.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 (75) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/package.json +24 -20
  3. package/public/r/accordion.json +2 -2
  4. package/public/r/alert-dialog.json +2 -2
  5. package/public/r/banner-2.json +1 -1
  6. package/public/r/banner.json +1 -5
  7. package/public/r/blocks-1.json +1 -1
  8. package/public/r/button.json +1 -1
  9. package/public/r/collapsible.json +2 -2
  10. package/public/r/combobox.json +4 -3
  11. package/public/r/command.json +5 -4
  12. package/public/r/contact-1.json +1 -1
  13. package/public/r/contact-2.json +1 -1
  14. package/public/r/contact-3.json +1 -1
  15. package/public/r/dialog.json +2 -2
  16. package/public/r/doc-1.json +1 -1
  17. package/public/r/dropdown-menu.json +4 -4
  18. package/public/r/hover-card.json +4 -4
  19. package/public/r/input-group.json +0 -1
  20. package/public/r/layout.json +3 -0
  21. package/public/r/navigation-menu.json +3 -3
  22. package/public/r/popover.json +3 -3
  23. package/public/r/radio-group.json +2 -2
  24. package/public/r/registry.json +26 -26
  25. package/public/r/select.json +3 -3
  26. package/public/r/sheet.json +2 -2
  27. package/public/r/sidebar-1.json +1 -1
  28. package/public/r/sidebar.json +1 -1
  29. package/public/r/slider.json +2 -2
  30. package/public/r/switch.json +2 -2
  31. package/public/r/tabs.json +4 -4
  32. package/public/r/toggle.json +2 -2
  33. package/public/r/tooltip.json +3 -3
  34. package/public/r/typography.json +1 -1
  35. package/registry.json +31 -21
  36. package/src/components/blocks/banner-2.astro +7 -4
  37. package/src/components/blocks/blocks-1.astro +23 -23
  38. package/src/components/blocks/contact-1.astro +2 -1
  39. package/src/components/blocks/contact-2.astro +2 -1
  40. package/src/components/blocks/contact-3.astro +2 -1
  41. package/src/components/blocks/doc-1.astro +40 -26
  42. package/src/components/blocks/sidebar-1.astro +48 -46
  43. package/src/components/ui/accordion/accordion.astro +8 -2
  44. package/src/components/ui/alert-dialog/alert-dialog.astro +8 -2
  45. package/src/components/ui/banner/banner.astro +23 -41
  46. package/src/components/ui/button/button.astro +4 -1
  47. package/src/components/ui/collapsible/collapsible.astro +8 -2
  48. package/src/components/ui/combobox/combobox-content.astro +1 -1
  49. package/src/components/ui/combobox/combobox.astro +9 -17
  50. package/src/components/ui/command/command-dialog.astro +1 -0
  51. package/src/components/ui/command/command.astro +40 -25
  52. package/src/components/ui/dialog/dialog.astro +8 -2
  53. package/src/components/ui/dropdown-menu/dropdown-menu-content.astro +1 -1
  54. package/src/components/ui/dropdown-menu/dropdown-menu-item.astro +40 -9
  55. package/src/components/ui/dropdown-menu/dropdown-menu.astro +8 -2
  56. package/src/components/ui/hover-card/hover-card-content.astro +1 -1
  57. package/src/components/ui/hover-card/hover-card.astro +15 -4
  58. package/src/components/ui/navigation-menu/navigation-menu-positioner.astro +1 -1
  59. package/src/components/ui/navigation-menu/navigation-menu.astro +11 -2
  60. package/src/components/ui/popover/popover-content.astro +2 -1
  61. package/src/components/ui/popover/popover.astro +9 -2
  62. package/src/components/ui/radio-group/radio-group.astro +8 -2
  63. package/src/components/ui/select/select-content.astro +2 -2
  64. package/src/components/ui/select/select.astro +11 -7
  65. package/src/components/ui/sheet/sheet.astro +8 -2
  66. package/src/components/ui/slider/slider.astro +10 -4
  67. package/src/components/ui/switch/switch.astro +8 -2
  68. package/src/components/ui/tabs/tabs-content.astro +1 -1
  69. package/src/components/ui/tabs/tabs-trigger.astro +3 -2
  70. package/src/components/ui/tabs/tabs.astro +8 -2
  71. package/src/components/ui/toggle/toggle.astro +8 -2
  72. package/src/components/ui/tooltip/tooltip-content.astro +1 -1
  73. package/src/components/ui/tooltip/tooltip.astro +11 -2
  74. package/src/components/ui/typography/typography.astro +1 -1
  75. package/src/styles/global.css +2 -2
@@ -34,7 +34,7 @@ const {
34
34
  data-align-offset={alignOffset}
35
35
  data-avoid-collisions={avoidCollisions}
36
36
  data-collision-padding={collisionPadding}
37
- class="isolate z-50"
37
+ class="isolate z-[1000]"
38
38
  >
39
39
  <div
40
40
  data-slot="hover-card-content"
@@ -4,6 +4,7 @@ import type { HTMLAttributes } from "astro/types"
4
4
  import { cn } from "@/lib/utils"
5
5
 
6
6
  type Props = HTMLAttributes<"div"> & {
7
+ mountStrategy?: "lazy" | "eager"
7
8
  defaultOpen?: boolean
8
9
  open?: boolean
9
10
  delay?: number
@@ -21,6 +22,7 @@ type Props = HTMLAttributes<"div"> & {
21
22
  }
22
23
 
23
24
  const {
25
+ mountStrategy,
24
26
  class: className,
25
27
  defaultOpen,
26
28
  open,
@@ -42,6 +44,7 @@ const {
42
44
 
43
45
  <div
44
46
  data-slot="hover-card"
47
+ data-mount-strategy={mountStrategy}
45
48
  data-default-open={defaultOpen}
46
49
  data-controlled-open={open}
47
50
  data-delay={delay}
@@ -63,14 +66,22 @@ const {
63
66
  </div>
64
67
 
65
68
  <script>
66
- import { getDataBool } from "@data-slot/core"
69
+ import { getDataBool, getRoots, hasRootBinding } from "@data-slot/core"
67
70
  import { createHoverCard } from "@data-slot/hover-card"
68
71
 
72
+ const controllers: ReturnType<typeof createHoverCard>[] = []
69
73
  const initialize = () => {
70
- document.querySelectorAll('[data-slot="hover-card"]').forEach((root) => {
71
- createHoverCard(root, { open: getDataBool(root, "controlledOpen") })
72
- })
74
+ for (const root of getRoots(document, "hover-card")) {
75
+ if (hasRootBinding(root, "@data-slot/hover-card")) continue
76
+ controllers.push(
77
+ createHoverCard(root, { open: getDataBool(root, "controlledOpen") })
78
+ )
79
+ }
73
80
  }
74
81
  initialize()
75
82
  document.addEventListener("astro:page-load", initialize)
83
+ document.addEventListener("astro:before-swap", () => {
84
+ for (const controller of controllers) controller.destroy()
85
+ controllers.length = 0
86
+ })
76
87
  </script>
@@ -29,7 +29,7 @@ const {
29
29
  data-align={align}
30
30
  data-align-offset={alignOffset}
31
31
  class={cn(
32
- "isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0",
32
+ "isolate z-[1000] h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) transition-[top,left,right,bottom] duration-[0.35s] ease-[cubic-bezier(0.22,1,0.36,1)] data-instant:transition-none data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0",
33
33
  className
34
34
  )}
35
35
  >
@@ -6,6 +6,7 @@ import { cn } from "@/lib/utils"
6
6
  import NavigationMenuPositioner from "./navigation-menu-positioner.astro"
7
7
 
8
8
  type Props = HTMLAttributes<"nav"> & {
9
+ mountStrategy?: "lazy" | "eager"
9
10
  delayOpen?: number
10
11
  delayClose?: number
11
12
  openOnFocus?: boolean
@@ -19,6 +20,7 @@ type Props = HTMLAttributes<"nav"> & {
19
20
  }
20
21
 
21
22
  const {
23
+ mountStrategy,
22
24
  class: className = "",
23
25
  delayOpen = 0,
24
26
  delayClose = 0,
@@ -37,6 +39,7 @@ const {
37
39
  <nav
38
40
  {...props}
39
41
  data-slot="navigation-menu"
42
+ data-mount-strategy={mountStrategy}
40
43
  data-delay-open={delayOpen}
41
44
  data-delay-close={delayClose}
42
45
  data-open-on-focus={openOnFocus}
@@ -59,6 +62,12 @@ const {
59
62
  <script>
60
63
  import { create } from "@data-slot/navigation-menu"
61
64
 
62
- create()
63
- document.addEventListener("astro:page-load", () => create())
65
+ const controllers: ReturnType<typeof create> = []
66
+ const initialize = () => controllers.push(...create())
67
+ initialize()
68
+ document.addEventListener("astro:page-load", initialize)
69
+ document.addEventListener("astro:before-swap", () => {
70
+ for (const controller of controllers) controller.destroy()
71
+ controllers.length = 0
72
+ })
64
73
  </script>
@@ -11,6 +11,7 @@ type Props = HTMLAttributes<"div"> & {
11
11
  alignOffset?: number
12
12
  avoidCollisions?: boolean
13
13
  collisionPadding?: number
14
+ /** Compatibility alias. Prefer `side`. */
14
15
  position?: PopoverSide
15
16
  }
16
17
 
@@ -38,7 +39,7 @@ const {
38
39
  data-avoid-collisions={avoidCollisions}
39
40
  data-collision-padding={collisionPadding}
40
41
  data-position={position}
41
- class="isolate z-50"
42
+ class="isolate z-[1000]"
42
43
  >
43
44
  <div
44
45
  data-slot="popover-content"
@@ -11,6 +11,7 @@ type Props = HTMLAttributes<"div"> & {
11
11
  avoidCollisions?: boolean
12
12
  collisionPadding?: number
13
13
  portal?: boolean
14
+ /** Compatibility alias. Prefer `side`. */
14
15
  position?: PopoverSide
15
16
  closeOnClickOutside?: boolean
16
17
  closeOnEscape?: boolean
@@ -55,6 +56,12 @@ const {
55
56
  <script>
56
57
  import { create } from "@data-slot/popover"
57
58
 
58
- create()
59
- document.addEventListener("astro:page-load", () => create())
59
+ const controllers: ReturnType<typeof create> = []
60
+ const initialize = () => controllers.push(...create())
61
+ initialize()
62
+ document.addEventListener("astro:page-load", initialize)
63
+ document.addEventListener("astro:before-swap", () => {
64
+ for (const controller of controllers) controller.destroy()
65
+ controllers.length = 0
66
+ })
60
67
  </script>
@@ -38,6 +38,12 @@ const {
38
38
  <script>
39
39
  import { create } from "@data-slot/radio-group"
40
40
 
41
- create()
42
- document.addEventListener("astro:page-load", () => create())
41
+ const controllers: ReturnType<typeof create> = []
42
+ const initialize = () => controllers.push(...create())
43
+ initialize()
44
+ document.addEventListener("astro:page-load", initialize)
45
+ document.addEventListener("astro:before-swap", () => {
46
+ for (const controller of controllers) controller.destroy()
47
+ controllers.length = 0
48
+ })
43
49
  </script>
@@ -38,7 +38,7 @@ const {
38
38
  data-align-offset={alignOffset}
39
39
  data-avoid-collisions={avoidCollisions}
40
40
  data-collision-padding={collisionPadding}
41
- class="isolate z-50"
41
+ class="isolate z-[1000]"
42
42
  >
43
43
  <div
44
44
  data-slot="select-content"
@@ -52,7 +52,7 @@ const {
52
52
  data-collision-padding={collisionPadding}
53
53
  hidden={hidden}
54
54
  class={cn(
55
- "bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 relative isolate z-50 max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md shadow-md ring-1 duration-100 outline-none data-[align-trigger=true]:animate-none",
55
+ "bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=inline-end]:slide-in-from-left-2 data-[side=inline-start]:slide-in-from-right-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 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 relative isolate z-[1000] max-h-(--available-height) w-(--anchor-width) min-w-36 origin-(--transform-origin) overflow-x-hidden overflow-y-auto rounded-md shadow-md ring-1 duration-100 outline-none data-[align-trigger=true]:animate-none",
56
56
  className
57
57
  )}
58
58
  {...props}
@@ -5,6 +5,7 @@ import type { Align, Position, Side } from "@data-slot/select"
5
5
  import { cn } from "@/lib/utils"
6
6
 
7
7
  type Props = HTMLAttributes<"div"> & {
8
+ mountStrategy?: "lazy" | "eager"
8
9
  defaultValue?: string
9
10
  defaultOpen?: boolean
10
11
  placeholder?: string
@@ -23,6 +24,7 @@ type Props = HTMLAttributes<"div"> & {
23
24
  }
24
25
 
25
26
  const {
27
+ mountStrategy,
26
28
  class: className,
27
29
  defaultValue,
28
30
  defaultOpen,
@@ -45,6 +47,7 @@ const {
45
47
 
46
48
  <div
47
49
  data-slot="select"
50
+ data-mount-strategy={mountStrategy}
48
51
  data-default-value={defaultValue}
49
52
  data-default-open={defaultOpen}
50
53
  data-placeholder={placeholder}
@@ -72,11 +75,12 @@ const {
72
75
  <script>
73
76
  import { create } from "@data-slot/select"
74
77
 
75
- const initSelect = () => {
76
- create()
77
- }
78
-
79
- initSelect()
80
-
81
- document.addEventListener("astro:page-load", initSelect)
78
+ const controllers: ReturnType<typeof create> = []
79
+ const initialize = () => controllers.push(...create())
80
+ initialize()
81
+ document.addEventListener("astro:page-load", initialize)
82
+ document.addEventListener("astro:before-swap", () => {
83
+ for (const controller of controllers) controller.destroy()
84
+ controllers.length = 0
85
+ })
82
86
  </script>
@@ -33,6 +33,12 @@ const {
33
33
  <script>
34
34
  import { create } from "@data-slot/dialog"
35
35
 
36
- create()
37
- document.addEventListener("astro:page-load", () => create())
36
+ const controllers: ReturnType<typeof create> = []
37
+ const initialize = () => controllers.push(...create())
38
+ initialize()
39
+ document.addEventListener("astro:page-load", initialize)
40
+ document.addEventListener("astro:before-swap", () => {
41
+ for (const controller of controllers) controller.destroy()
42
+ controllers.length = 0
43
+ })
38
44
  </script>
@@ -3,7 +3,7 @@ import type { HTMLAttributes } from "astro/types"
3
3
 
4
4
  import { cn } from "@/lib/utils"
5
5
 
6
- type SliderValue = number | [number, number] | string
6
+ type SliderValue = number | [number, number]
7
7
  type ThumbAlignment = "center" | "edge" | "edge-client-only"
8
8
 
9
9
  type Props = HTMLAttributes<"div"> & {
@@ -25,7 +25,7 @@ const {
25
25
  step,
26
26
  largeStep,
27
27
  orientation = "horizontal",
28
- thumbAlignment = "edge",
28
+ thumbAlignment = "center",
29
29
  disabled,
30
30
  ...props
31
31
  } = Astro.props
@@ -82,6 +82,12 @@ const thumbCount = String(serializedDefaultValue ?? "").includes(",") ? 2 : 1
82
82
  <script>
83
83
  import { create } from "@data-slot/slider"
84
84
 
85
- create()
86
- document.addEventListener("astro:page-load", () => create())
85
+ const controllers: ReturnType<typeof create> = []
86
+ const initialize = () => controllers.push(...create())
87
+ initialize()
88
+ document.addEventListener("astro:page-load", initialize)
89
+ document.addEventListener("astro:before-swap", () => {
90
+ for (const controller of controllers) controller.destroy()
91
+ controllers.length = 0
92
+ })
87
93
  </script>
@@ -69,6 +69,12 @@ const switchSizeStyle = {
69
69
  <script>
70
70
  import { create } from "@data-slot/switch"
71
71
 
72
- create()
73
- document.addEventListener("astro:page-load", () => create())
72
+ const controllers: ReturnType<typeof create> = []
73
+ const initialize = () => controllers.push(...create())
74
+ initialize()
75
+ document.addEventListener("astro:page-load", initialize)
76
+ document.addEventListener("astro:before-swap", () => {
77
+ for (const controller of controllers) controller.destroy()
78
+ controllers.length = 0
79
+ })
74
80
  </script>
@@ -4,7 +4,7 @@ import type { HTMLAttributes } from "astro/types"
4
4
  import { cn } from "@/lib/utils"
5
5
 
6
6
  type Props = HTMLAttributes<"div"> & {
7
- value?: string
7
+ value: string
8
8
  }
9
9
 
10
10
  const { class: className, hidden = true, value, ...props } = Astro.props
@@ -4,14 +4,15 @@ import type { HTMLAttributes } from "astro/types"
4
4
  import { cn } from "@/lib/utils"
5
5
 
6
6
  type Props = HTMLAttributes<"button"> & {
7
- value?: string
7
+ value: string
8
8
  }
9
9
 
10
- const { class: className, value, ...props } = Astro.props
10
+ const { class: className, value, type = "button", ...props } = Astro.props
11
11
  ---
12
12
 
13
13
  <button
14
14
  data-slot="tabs-trigger"
15
+ type={type}
15
16
  data-value={value}
16
17
  class={cn(
17
18
  "text-foreground/60 hover:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium whitespace-nowrap transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[variant=default]/tabs-list:data-[state=active]:shadow-sm group-data-[variant=line]/tabs-list:data-[state=active]:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -34,6 +34,12 @@ const {
34
34
  <script>
35
35
  import { create } from "@data-slot/tabs"
36
36
 
37
- create()
38
- document.addEventListener("astro:page-load", () => create())
37
+ const controllers: ReturnType<typeof create> = []
38
+ const initialize = () => controllers.push(...create())
39
+ initialize()
40
+ document.addEventListener("astro:page-load", initialize)
41
+ document.addEventListener("astro:before-swap", () => {
42
+ for (const controller of controllers) controller.destroy()
43
+ controllers.length = 0
44
+ })
39
45
  </script>
@@ -38,6 +38,12 @@ const {
38
38
  <script>
39
39
  import { create } from "@data-slot/toggle"
40
40
 
41
- create()
42
- document.addEventListener("astro:page-load", () => create())
41
+ const controllers: ReturnType<typeof create> = []
42
+ const initialize = () => controllers.push(...create())
43
+ initialize()
44
+ document.addEventListener("astro:page-load", initialize)
45
+ document.addEventListener("astro:before-swap", () => {
46
+ for (const controller of controllers) controller.destroy()
47
+ controllers.length = 0
48
+ })
43
49
  </script>
@@ -35,7 +35,7 @@ const {
35
35
  data-align-offset={alignOffset}
36
36
  data-avoid-collisions={avoidCollisions}
37
37
  data-collision-padding={collisionPadding}
38
- class="isolate z-50"
38
+ class="isolate z-[1000]"
39
39
  >
40
40
  <div
41
41
  data-slot="tooltip-content"
@@ -5,6 +5,7 @@ import type { TooltipAlign, TooltipSide } from "@data-slot/tooltip"
5
5
  import { cn } from "@/lib/utils"
6
6
 
7
7
  type Props = HTMLAttributes<"div"> & {
8
+ mountStrategy?: "lazy" | "eager"
8
9
  delay?: number
9
10
  skipDelayDuration?: number
10
11
  side?: TooltipSide
@@ -17,6 +18,7 @@ type Props = HTMLAttributes<"div"> & {
17
18
  }
18
19
 
19
20
  const {
21
+ mountStrategy,
20
22
  class: className,
21
23
  delay = 300,
22
24
  skipDelayDuration = 300,
@@ -33,6 +35,7 @@ const {
33
35
 
34
36
  <div
35
37
  data-slot="tooltip"
38
+ data-mount-strategy={mountStrategy}
36
39
  data-delay={delay}
37
40
  data-skip-delay-duration={skipDelayDuration}
38
41
  data-side={side}
@@ -51,6 +54,12 @@ const {
51
54
  <script>
52
55
  import { create } from "@data-slot/tooltip"
53
56
 
54
- create()
55
- document.addEventListener("astro:page-load", () => create())
57
+ const controllers: ReturnType<typeof create> = []
58
+ const initialize = () => controllers.push(...create())
59
+ initialize()
60
+ document.addEventListener("astro:page-load", initialize)
61
+ document.addEventListener("astro:before-swap", () => {
62
+ for (const controller of controllers) controller.destroy()
63
+ controllers.length = 0
64
+ })
56
65
  </script>
@@ -126,7 +126,7 @@ const {
126
126
  [data-slot="typography"]
127
127
  > :is(p, blockquote, ul, ol, dl, table)
128
128
  a:not([data-slot]) {
129
- @apply text-primary font-medium underline underline-offset-4;
129
+ @apply text-foreground font-medium underline underline-offset-4;
130
130
  }
131
131
 
132
132
  [data-slot="typography"] > blockquote {
@@ -68,7 +68,7 @@
68
68
  --popover: oklch(0.269 0 0);
69
69
  --popover-foreground: oklch(0.985 0 0);
70
70
  --primary: oklch(0.686 0.2105 41.139);
71
- --primary-foreground: oklch(1 0 0);
71
+ --primary-foreground: oklch(0.145 0 0);
72
72
  --secondary: oklch(0.269 0 0);
73
73
  --secondary-foreground: oklch(0.985 0 0);
74
74
  --muted: oklch(0.269 0 0);
@@ -88,7 +88,7 @@
88
88
  --sidebar: oklch(0.205 0 0);
89
89
  --sidebar-foreground: oklch(0.985 0 0);
90
90
  --sidebar-primary: oklch(0.686 0.2105 41.139);
91
- --sidebar-primary-foreground: oklch(1 0 0);
91
+ --sidebar-primary-foreground: oklch(0.145 0 0);
92
92
  --sidebar-accent: oklch(0.269 0 0);
93
93
  --sidebar-accent-foreground: oklch(0.985 0 0);
94
94
  --sidebar-border: oklch(0.275 0 0);