@nationaldesignstudio/react 0.6.0 → 0.7.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 (106) hide show
  1. package/dist/accordion/index.d.ts +95 -0
  2. package/dist/accordion/index.js +143 -0
  3. package/dist/accordion/index.js.map +1 -0
  4. package/dist/background/index.d.ts +149 -0
  5. package/dist/background/index.js +200 -0
  6. package/dist/background/index.js.map +1 -0
  7. package/dist/banner/index.d.ts +101 -0
  8. package/dist/banner/index.js +81 -0
  9. package/dist/banner/index.js.map +1 -0
  10. package/dist/blurred-video-backdrop/index.d.ts +233 -0
  11. package/dist/blurred-video-backdrop/index.js +266 -0
  12. package/dist/blurred-video-backdrop/index.js.map +1 -0
  13. package/dist/button/index.d.ts +180 -0
  14. package/dist/button/index.js +169 -0
  15. package/dist/button/index.js.map +1 -0
  16. package/dist/button-B2g5fH9b.d.ts +152 -0
  17. package/dist/card/index.d.ts +406 -0
  18. package/dist/card/index.js +219 -0
  19. package/dist/card/index.js.map +1 -0
  20. package/dist/card-grid/index.d.ts +90 -0
  21. package/dist/card-grid/index.js +74 -0
  22. package/dist/card-grid/index.js.map +1 -0
  23. package/dist/component-registry.md +136 -2
  24. package/dist/dev-toolbar/index.d.ts +8 -0
  25. package/dist/dev-toolbar/index.js +206 -0
  26. package/dist/dev-toolbar/index.js.map +1 -0
  27. package/dist/dialog/index.d.ts +268 -0
  28. package/dist/dialog/index.js +288 -0
  29. package/dist/dialog/index.js.map +1 -0
  30. package/dist/faq-section/index.d.ts +47 -0
  31. package/dist/faq-section/index.js +152 -0
  32. package/dist/faq-section/index.js.map +1 -0
  33. package/dist/grid-overlay/index.d.ts +10 -0
  34. package/dist/grid-overlay/index.js +38 -0
  35. package/dist/grid-overlay/index.js.map +1 -0
  36. package/dist/hero/index.d.ts +462 -0
  37. package/dist/hero/index.js +494 -0
  38. package/dist/hero/index.js.map +1 -0
  39. package/dist/hooks/index.d.ts +150 -0
  40. package/dist/hooks/index.js +339 -0
  41. package/dist/hooks/index.js.map +1 -0
  42. package/dist/index.d.ts +46 -5339
  43. package/dist/index.js +157 -4080
  44. package/dist/index.js.map +1 -1
  45. package/dist/input/index.d.ts +404 -0
  46. package/dist/input/index.js +393 -0
  47. package/dist/input/index.js.map +1 -0
  48. package/dist/navbar/index.d.ts +68 -0
  49. package/dist/navbar/index.js +227 -0
  50. package/dist/navbar/index.js.map +1 -0
  51. package/dist/ndstudio-footer/index.d.ts +32 -0
  52. package/dist/ndstudio-footer/index.js +35 -0
  53. package/dist/ndstudio-footer/index.js.map +1 -0
  54. package/dist/pager-control/index.d.ts +173 -0
  55. package/dist/pager-control/index.js +267 -0
  56. package/dist/pager-control/index.js.map +1 -0
  57. package/dist/popover/index.d.ts +200 -0
  58. package/dist/popover/index.js +290 -0
  59. package/dist/popover/index.js.map +1 -0
  60. package/dist/prose/index.d.ts +39 -0
  61. package/dist/prose/index.js +56 -0
  62. package/dist/prose/index.js.map +1 -0
  63. package/dist/quote-block/index.d.ts +156 -0
  64. package/dist/quote-block/index.js +321 -0
  65. package/dist/quote-block/index.js.map +1 -0
  66. package/dist/river/index.d.ts +100 -0
  67. package/dist/river/index.js +107 -0
  68. package/dist/river/index.js.map +1 -0
  69. package/dist/select/index.d.ts +188 -0
  70. package/dist/select/index.js +295 -0
  71. package/dist/select/index.js.map +1 -0
  72. package/dist/theme/index.d.ts +149 -0
  73. package/dist/theme/index.js +211 -0
  74. package/dist/theme/index.js.map +1 -0
  75. package/dist/theme-CzBPUlh_.d.ts +332 -0
  76. package/dist/tooltip/index.d.ts +166 -0
  77. package/dist/tooltip/index.js +200 -0
  78. package/dist/tooltip/index.js.map +1 -0
  79. package/dist/tout/index.d.ts +157 -0
  80. package/dist/tout/index.js +315 -0
  81. package/dist/tout/index.js.map +1 -0
  82. package/dist/two-column-section/index.d.ts +122 -0
  83. package/dist/two-column-section/index.js +121 -0
  84. package/dist/two-column-section/index.js.map +1 -0
  85. package/dist/us-gov-banner/index.d.ts +141 -0
  86. package/dist/us-gov-banner/index.js +74 -0
  87. package/dist/us-gov-banner/index.js.map +1 -0
  88. package/dist/use-captions-AkKlJhov.d.ts +71 -0
  89. package/dist/utils/index.d.ts +7 -0
  90. package/dist/utils/index.js +12 -0
  91. package/dist/utils/index.js.map +1 -0
  92. package/dist/video-dialog/index.d.ts +106 -0
  93. package/dist/video-dialog/index.js +1305 -0
  94. package/dist/video-dialog/index.js.map +1 -0
  95. package/dist/video-player/index.d.ts +115 -0
  96. package/dist/video-player/index.js +879 -0
  97. package/dist/video-player/index.js.map +1 -0
  98. package/dist/video-player-qxf-BURH.d.ts +236 -0
  99. package/dist/video-with-backdrop/index.d.ts +267 -0
  100. package/dist/video-with-backdrop/index.js +1284 -0
  101. package/dist/video-with-backdrop/index.js.map +1 -0
  102. package/package.json +13 -2
  103. package/src/components/organisms/us-gov-banner/us-gov-banner.tsx +5 -27
  104. package/src/theme/hooks.ts +2 -0
  105. package/src/theme/index.ts +2 -0
  106. package/src/theme/theme-provider.tsx +2 -0
@@ -0,0 +1,227 @@
1
+ "use client";
2
+ import { Dialog } from '@base-ui-components/react/dialog';
3
+ import { Slot } from '@radix-ui/react-slot';
4
+ import * as React from 'react';
5
+ import { clsx } from 'clsx';
6
+ import { cnBase } from 'tailwind-variants';
7
+ import { jsx, jsxs } from 'react/jsx-runtime';
8
+
9
+ // src/components/organisms/navbar/navbar.tsx
10
+ function cn(...inputs) {
11
+ return cnBase(clsx(inputs));
12
+ }
13
+ var NavbarContext = React.createContext({
14
+ isMobileMenuOpen: false,
15
+ setIsMobileMenuOpen: () => {
16
+ }
17
+ });
18
+ var Navbar = React.forwardRef(
19
+ ({ className, children, ...props }, ref) => {
20
+ const [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false);
21
+ const navRef = React.useRef(null);
22
+ React.useEffect(() => {
23
+ const updateHeight = () => {
24
+ if (navRef.current) {
25
+ const height = navRef.current.offsetHeight;
26
+ document.documentElement.style.setProperty(
27
+ "--navbar-height",
28
+ `${height}px`
29
+ );
30
+ }
31
+ };
32
+ updateHeight();
33
+ window.addEventListener("resize", updateHeight);
34
+ return () => window.removeEventListener("resize", updateHeight);
35
+ }, []);
36
+ const mergedRef = React.useCallback(
37
+ (node) => {
38
+ navRef.current = node;
39
+ if (typeof ref === "function") {
40
+ ref(node);
41
+ } else if (ref) {
42
+ ref.current = node;
43
+ }
44
+ },
45
+ [ref]
46
+ );
47
+ return /* @__PURE__ */ jsx(NavbarContext.Provider, { value: { isMobileMenuOpen, setIsMobileMenuOpen }, children: /* @__PURE__ */ jsx(
48
+ "nav",
49
+ {
50
+ ref: mergedRef,
51
+ className: cn("relative z-50 w-full bg-gray-50", className),
52
+ ...props,
53
+ children: /* @__PURE__ */ jsx(
54
+ "div",
55
+ {
56
+ className: cn(
57
+ "flex w-full items-center justify-between",
58
+ // Mobile
59
+ "px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-mobile",
60
+ // Tablet
61
+ "md:px-spatial-component-navbar-padding-x-tablet md:py-spatial-component-navbar-padding-y-tablet",
62
+ // Desktop
63
+ "xl:px-spatial-component-navbar-padding-x-desktop xl:py-spatial-component-navbar-padding-y-desktop"
64
+ ),
65
+ children
66
+ }
67
+ )
68
+ }
69
+ ) });
70
+ }
71
+ );
72
+ Navbar.displayName = "Navbar";
73
+ var NavbarBrand = React.forwardRef(
74
+ ({ className, asChild = false, ...props }, ref) => {
75
+ const Comp = asChild ? Slot : "div";
76
+ return /* @__PURE__ */ jsx(Comp, { ref, className: cn("shrink-0", className), ...props });
77
+ }
78
+ );
79
+ NavbarBrand.displayName = "NavbarBrand";
80
+ var NavbarLinks = React.forwardRef(
81
+ ({ className, ...props }, ref) => {
82
+ return /* @__PURE__ */ jsx(
83
+ "div",
84
+ {
85
+ ref,
86
+ className: cn(
87
+ "hidden items-center gap-spatial-component-navbar-gap-links md:flex",
88
+ className
89
+ ),
90
+ ...props
91
+ }
92
+ );
93
+ }
94
+ );
95
+ NavbarLinks.displayName = "NavbarLinks";
96
+ var NavbarLink = React.forwardRef(
97
+ ({ className, asChild = false, active, ...props }, ref) => {
98
+ const Comp = asChild ? Slot : "a";
99
+ return /* @__PURE__ */ jsx(
100
+ Comp,
101
+ {
102
+ ref,
103
+ className: cn(
104
+ "typography-body-small font-medium text-gray-900 transition-colors hover:text-gray-700",
105
+ active && "text-gray-1100",
106
+ className
107
+ ),
108
+ ...props
109
+ }
110
+ );
111
+ }
112
+ );
113
+ NavbarLink.displayName = "NavbarLink";
114
+ var NavbarActions = React.forwardRef(
115
+ ({ className, ...props }, ref) => {
116
+ return /* @__PURE__ */ jsx(
117
+ "div",
118
+ {
119
+ ref,
120
+ className: cn(
121
+ "flex items-center gap-spatial-component-navbar-gap-actions",
122
+ className
123
+ ),
124
+ ...props
125
+ }
126
+ );
127
+ }
128
+ );
129
+ NavbarActions.displayName = "NavbarActions";
130
+ var NavbarMobileMenu = React.forwardRef(({ className, children, ...props }, ref) => {
131
+ const { isMobileMenuOpen, setIsMobileMenuOpen } = React.useContext(NavbarContext);
132
+ return /* @__PURE__ */ jsx(Dialog.Root, { open: isMobileMenuOpen, onOpenChange: setIsMobileMenuOpen, children: /* @__PURE__ */ jsx(Dialog.Portal, { children: /* @__PURE__ */ jsxs(
133
+ Dialog.Popup,
134
+ {
135
+ ref,
136
+ className: cn(
137
+ "fixed inset-0 z-50 bg-gray-50 md:hidden",
138
+ // Position below navbar
139
+ "pt-[calc(var(--navbar-height,60px)+1px)]",
140
+ // Smooth transition
141
+ "transition-opacity duration-200",
142
+ className
143
+ ),
144
+ ...props,
145
+ children: [
146
+ /* @__PURE__ */ jsx(Dialog.Title, { className: "sr-only", children: "Navigation menu" }),
147
+ /* @__PURE__ */ jsx(
148
+ "div",
149
+ {
150
+ className: cn(
151
+ "flex flex-col",
152
+ // Padding matching navbar
153
+ "px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-tablet",
154
+ // Gap between links
155
+ "gap-spatial-component-navbar-gap-mobile-menu"
156
+ ),
157
+ children
158
+ }
159
+ )
160
+ ]
161
+ }
162
+ ) }) });
163
+ });
164
+ NavbarMobileMenu.displayName = "NavbarMobileMenu";
165
+ var NavbarMobileMenuButton = React.forwardRef(({ className, asChild = false, children, ...props }, ref) => {
166
+ const { isMobileMenuOpen, setIsMobileMenuOpen } = React.useContext(NavbarContext);
167
+ const handleClick = () => {
168
+ setIsMobileMenuOpen(!isMobileMenuOpen);
169
+ };
170
+ if (asChild) {
171
+ return /* @__PURE__ */ jsx(
172
+ Slot,
173
+ {
174
+ ref,
175
+ "aria-label": "Toggle navigation menu",
176
+ "aria-expanded": isMobileMenuOpen,
177
+ "aria-controls": "navbar-mobile-menu",
178
+ onClick: handleClick,
179
+ className,
180
+ ...props,
181
+ children
182
+ }
183
+ );
184
+ }
185
+ return /* @__PURE__ */ jsx(
186
+ "button",
187
+ {
188
+ ref,
189
+ type: "button",
190
+ "aria-label": "Toggle navigation menu",
191
+ "aria-expanded": isMobileMenuOpen,
192
+ "aria-controls": "navbar-mobile-menu",
193
+ onClick: handleClick,
194
+ className: cn("transition-colors", className),
195
+ ...props,
196
+ children
197
+ }
198
+ );
199
+ });
200
+ NavbarMobileMenuButton.displayName = "NavbarMobileMenuButton";
201
+ var NavbarMobileMenuLink = React.forwardRef(({ className, asChild = false, active, onClick, ...props }, ref) => {
202
+ const { setIsMobileMenuOpen } = React.useContext(NavbarContext);
203
+ const Comp = asChild ? Slot : "a";
204
+ const handleClick = (event) => {
205
+ setIsMobileMenuOpen(false);
206
+ onClick?.(event);
207
+ };
208
+ return /* @__PURE__ */ jsx(
209
+ Comp,
210
+ {
211
+ ref,
212
+ className: cn(
213
+ "typography-body-medium font-medium text-gray-900 transition-colors hover:text-gray-700",
214
+ "py-spatial-component-navbar-padding-y-mobile",
215
+ active && "text-gray-1100",
216
+ className
217
+ ),
218
+ onClick: handleClick,
219
+ ...props
220
+ }
221
+ );
222
+ });
223
+ NavbarMobileMenuLink.displayName = "NavbarMobileMenuLink";
224
+
225
+ export { Navbar, NavbarActions, NavbarBrand, NavbarLink, NavbarLinks, NavbarMobileMenu, NavbarMobileMenuButton, NavbarMobileMenuLink };
226
+ //# sourceMappingURL=index.js.map
227
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/components/organisms/navbar/navbar.tsx"],"names":["twMerge"],"mappings":"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","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { cnBase as twMerge } from \"tailwind-variants\";\n\nexport { twMerge };\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { Dialog } from \"@base-ui-components/react/dialog\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\n// Context for mobile menu state\nconst NavbarContext = React.createContext<{\n\tisMobileMenuOpen: boolean;\n\tsetIsMobileMenuOpen: (open: boolean) => void;\n}>({\n\tisMobileMenuOpen: false,\n\tsetIsMobileMenuOpen: () => {},\n});\n\nexport interface NavbarProps extends React.HTMLAttributes<HTMLElement> {}\n\n/**\n * Main navigation bar container.\n * Provides responsive layout for brand, links, and actions.\n */\nconst Navbar = React.forwardRef<HTMLElement, NavbarProps>(\n\t({ className, children, ...props }, ref) => {\n\t\tconst [isMobileMenuOpen, setIsMobileMenuOpen] = React.useState(false);\n\t\tconst navRef = React.useRef<HTMLElement>(null);\n\n\t\t// Set navbar height CSS variable for mobile menu positioning\n\t\tReact.useEffect(() => {\n\t\t\tconst updateHeight = () => {\n\t\t\t\tif (navRef.current) {\n\t\t\t\t\tconst height = navRef.current.offsetHeight;\n\t\t\t\t\tdocument.documentElement.style.setProperty(\n\t\t\t\t\t\t\"--navbar-height\",\n\t\t\t\t\t\t`${height}px`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tupdateHeight();\n\t\t\twindow.addEventListener(\"resize\", updateHeight);\n\t\t\treturn () => window.removeEventListener(\"resize\", updateHeight);\n\t\t}, []);\n\n\t\t// Merge refs\n\t\tconst mergedRef = React.useCallback(\n\t\t\t(node: HTMLElement | null) => {\n\t\t\t\t(navRef as React.MutableRefObject<HTMLElement | null>).current = node;\n\t\t\t\tif (typeof ref === \"function\") {\n\t\t\t\t\tref(node);\n\t\t\t\t} else if (ref) {\n\t\t\t\t\tref.current = node;\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ref],\n\t\t);\n\n\t\treturn (\n\t\t\t<NavbarContext.Provider value={{ isMobileMenuOpen, setIsMobileMenuOpen }}>\n\t\t\t\t<nav\n\t\t\t\t\tref={mergedRef}\n\t\t\t\t\tclassName={cn(\"relative z-50 w-full bg-gray-50\", className)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center justify-between\",\n\t\t\t\t\t\t\t// Mobile\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\t\t\t\t// Tablet\n\t\t\t\t\t\t\t\"md:px-spatial-component-navbar-padding-x-tablet md:py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Desktop\n\t\t\t\t\t\t\t\"xl:px-spatial-component-navbar-padding-x-desktop xl:py-spatial-component-navbar-padding-y-desktop\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</nav>\n\t\t\t</NavbarContext.Provider>\n\t\t);\n\t},\n);\nNavbar.displayName = \"Navbar\";\n\nexport interface NavbarBrandProps extends React.HTMLAttributes<HTMLDivElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Brand/logo area of the navbar.\n * Use asChild to render as a link.\n */\nconst NavbarBrand = React.forwardRef<HTMLDivElement, NavbarBrandProps>(\n\t({ className, asChild = false, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"div\";\n\t\treturn <Comp ref={ref} className={cn(\"shrink-0\", className)} {...props} />;\n\t},\n);\nNavbarBrand.displayName = \"NavbarBrand\";\n\nexport interface NavbarLinksProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navigation links.\n * Centers links on desktop, hidden on mobile (use NavbarMobileMenu instead).\n */\nconst NavbarLinks = React.forwardRef<HTMLDivElement, NavbarLinksProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"hidden items-center gap-spatial-component-navbar-gap-links md:flex\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLinks.displayName = \"NavbarLinks\";\n\nexport interface NavbarLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Individual navigation link.\n * Use asChild to render with a router Link component.\n */\nconst NavbarLink = React.forwardRef<HTMLAnchorElement, NavbarLinkProps>(\n\t({ className, asChild = false, active, ...props }, ref) => {\n\t\tconst Comp = asChild ? Slot : \"a\";\n\t\treturn (\n\t\t\t<Comp\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"typography-body-small font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarLink.displayName = \"NavbarLink\";\n\nexport interface NavbarActionsProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Container for navbar action items (search, menu button, etc).\n */\nconst NavbarActions = React.forwardRef<HTMLDivElement, NavbarActionsProps>(\n\t({ className, ...props }, ref) => {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tref={ref}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"flex items-center gap-spatial-component-navbar-gap-actions\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t);\n\t},\n);\nNavbarActions.displayName = \"NavbarActions\";\n\nexport interface NavbarMobileMenuProps\n\textends React.HTMLAttributes<HTMLDivElement> {}\n\n/**\n * Mobile menu container that displays navigation links on mobile devices.\n * Hidden on desktop (md and above). Should be used with NavbarMobileMenuButton.\n * Built on Base UI Dialog for accessibility (focus trap, escape key, click-outside).\n */\nconst NavbarMobileMenu = React.forwardRef<\n\tHTMLDivElement,\n\tNavbarMobileMenuProps\n>(({ className, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\treturn (\n\t\t<Dialog.Root open={isMobileMenuOpen} onOpenChange={setIsMobileMenuOpen}>\n\t\t\t<Dialog.Portal>\n\t\t\t\t<Dialog.Popup\n\t\t\t\t\tref={ref}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"fixed inset-0 z-50 bg-gray-50 md:hidden\",\n\t\t\t\t\t\t// Position below navbar\n\t\t\t\t\t\t\"pt-[calc(var(--navbar-height,60px)+1px)]\",\n\t\t\t\t\t\t// Smooth transition\n\t\t\t\t\t\t\"transition-opacity duration-200\",\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<Dialog.Title className=\"sr-only\">Navigation menu</Dialog.Title>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex flex-col\",\n\t\t\t\t\t\t\t// Padding matching navbar\n\t\t\t\t\t\t\t\"px-spatial-component-navbar-padding-x-mobile py-spatial-component-navbar-padding-y-tablet\",\n\t\t\t\t\t\t\t// Gap between links\n\t\t\t\t\t\t\t\"gap-spatial-component-navbar-gap-mobile-menu\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\t\t\t\t</Dialog.Popup>\n\t\t\t</Dialog.Portal>\n\t\t</Dialog.Root>\n\t);\n});\nNavbarMobileMenu.displayName = \"NavbarMobileMenu\";\n\nexport interface NavbarMobileMenuButtonProps\n\textends React.ButtonHTMLAttributes<HTMLButtonElement> {\n\tasChild?: boolean;\n}\n\n/**\n * Button to toggle the mobile menu.\n * Should be placed in NavbarActions on mobile.\n * Use asChild to render as a custom button component (e.g., IconButton).\n */\nconst NavbarMobileMenuButton = React.forwardRef<\n\tHTMLButtonElement,\n\tNavbarMobileMenuButtonProps\n>(({ className, asChild = false, children, ...props }, ref) => {\n\tconst { isMobileMenuOpen, setIsMobileMenuOpen } =\n\t\tReact.useContext(NavbarContext);\n\n\tconst handleClick = () => {\n\t\tsetIsMobileMenuOpen(!isMobileMenuOpen);\n\t};\n\n\tif (asChild) {\n\t\treturn (\n\t\t\t<Slot\n\t\t\t\tref={ref}\n\t\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\t\tonClick={handleClick}\n\t\t\t\tclassName={className}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</Slot>\n\t\t);\n\t}\n\n\treturn (\n\t\t<button\n\t\t\tref={ref}\n\t\t\ttype=\"button\"\n\t\t\taria-label=\"Toggle navigation menu\"\n\t\t\taria-expanded={isMobileMenuOpen}\n\t\t\taria-controls=\"navbar-mobile-menu\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\"transition-colors\", className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t</button>\n\t);\n});\nNavbarMobileMenuButton.displayName = \"NavbarMobileMenuButton\";\n\nexport interface NavbarMobileMenuLinkProps\n\textends React.AnchorHTMLAttributes<HTMLAnchorElement> {\n\tasChild?: boolean;\n\tactive?: boolean;\n}\n\n/**\n * Navigation link for the mobile menu.\n * Automatically closes the mobile menu when clicked.\n * Use asChild to render with a router Link component.\n */\nconst NavbarMobileMenuLink = React.forwardRef<\n\tHTMLAnchorElement,\n\tNavbarMobileMenuLinkProps\n>(({ className, asChild = false, active, onClick, ...props }, ref) => {\n\tconst { setIsMobileMenuOpen } = React.useContext(NavbarContext);\n\tconst Comp = asChild ? Slot : \"a\";\n\n\tconst handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n\t\tsetIsMobileMenuOpen(false);\n\t\tonClick?.(event);\n\t};\n\n\treturn (\n\t\t<Comp\n\t\t\tref={ref}\n\t\t\tclassName={cn(\n\t\t\t\t\"typography-body-medium font-medium text-gray-900 transition-colors hover:text-gray-700\",\n\t\t\t\t\"py-spatial-component-navbar-padding-y-mobile\",\n\t\t\t\tactive && \"text-gray-1100\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={handleClick}\n\t\t\t{...props}\n\t\t/>\n\t);\n});\nNavbarMobileMenuLink.displayName = \"NavbarMobileMenuLink\";\n\nexport {\n\tNavbar,\n\tNavbarBrand,\n\tNavbarLinks,\n\tNavbarLink,\n\tNavbarActions,\n\tNavbarMobileMenu,\n\tNavbarMobileMenuButton,\n\tNavbarMobileMenuLink,\n};\n"]}
@@ -0,0 +1,32 @@
1
+ import * as React from 'react';
2
+
3
+ interface NdstudioFooterProps extends React.HTMLAttributes<HTMLDivElement> {
4
+ /**
5
+ * The URL to link to
6
+ * @default "https://ndstudio.gov"
7
+ */
8
+ href?: string;
9
+ }
10
+ /**
11
+ * NdstudioFooter component displays a "Designed and Engineered in DC by National Design Studio" footer link.
12
+ *
13
+ * This component is designed to be used as a footer within other components like Tout,
14
+ * but can also be used standalone.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * // Used within a Tout component via footer slot
19
+ * <Tout
20
+ * headline="Feature Headline"
21
+ * primaryAction={<Button>Primary</Button>}
22
+ * backgroundMedia={<img src="/bg.jpg" alt="" />}
23
+ * footer={<NdstudioFooter />}
24
+ * />
25
+ *
26
+ * // Standalone usage
27
+ * <NdstudioFooter className="my-custom-class" />
28
+ * ```
29
+ */
30
+ declare const NdstudioFooter: React.ForwardRefExoticComponent<NdstudioFooterProps & React.RefAttributes<HTMLDivElement>>;
31
+
32
+ export { NdstudioFooter, type NdstudioFooterProps };
@@ -0,0 +1,35 @@
1
+ import * as React from 'react';
2
+ import { clsx } from 'clsx';
3
+ import { cnBase } from 'tailwind-variants';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/components/atoms/ndstudio-footer/ndstudio-footer.tsx
7
+ function cn(...inputs) {
8
+ return cnBase(clsx(inputs));
9
+ }
10
+ var NdstudioFooter = React.forwardRef(
11
+ ({ className, href = "https://ndstudio.gov", ...props }, ref) => {
12
+ return /* @__PURE__ */ jsx("div", { ref, className: cn("text-center", className), ...props, children: /* @__PURE__ */ jsxs("p", { className: "typography-label-large uppercase text-ivory-alpha-75", children: [
13
+ "Designed and Engineered in DC by",
14
+ " ",
15
+ /* @__PURE__ */ jsxs(
16
+ "a",
17
+ {
18
+ href,
19
+ target: "_blank",
20
+ rel: "noopener noreferrer",
21
+ className: "hover:underline",
22
+ children: [
23
+ "National Design Studio",
24
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: " (opens in new tab)" })
25
+ ]
26
+ }
27
+ )
28
+ ] }) });
29
+ }
30
+ );
31
+ NdstudioFooter.displayName = "NdstudioFooter";
32
+
33
+ export { NdstudioFooter };
34
+ //# sourceMappingURL=index.js.map
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/components/atoms/ndstudio-footer/ndstudio-footer.tsx"],"names":["twMerge"],"mappings":";;;;;;AAKO,SAAS,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAOA,MAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;ACyBA,IAAM,cAAA,GAAuB,KAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,EAAE,SAAA,EAAW,IAAA,GAAO,wBAAwB,GAAG,KAAA,IAAS,GAAA,KAAQ;AAChE,IAAA,uBACC,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,EAAA,CAAG,aAAA,EAAe,SAAS,CAAA,EAAI,GAAG,KAAA,EAC3D,QAAA,kBAAA,IAAA,CAAC,GAAA,EAAA,EAAE,WAAU,sDAAA,EAAuD,QAAA,EAAA;AAAA,MAAA,kCAAA;AAAA,MAClC,GAAA;AAAA,sBACjC,IAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACA,IAAA;AAAA,UACA,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,SAAA,EAAU,iBAAA;AAAA,UACV,QAAA,EAAA;AAAA,YAAA,wBAAA;AAAA,4BAEA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,QAAA,EAAA,qBAAA,EAAmB;AAAA;AAAA;AAAA;AAC9C,KAAA,EACD,CAAA,EACD,CAAA;AAAA,EAEF;AACD;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA","file":"index.js","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { cnBase as twMerge } from \"tailwind-variants\";\n\nexport { twMerge };\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","import * as React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface NdstudioFooterProps\n\textends React.HTMLAttributes<HTMLDivElement> {\n\t/**\n\t * The URL to link to\n\t * @default \"https://ndstudio.gov\"\n\t */\n\thref?: string;\n}\n\n/**\n * NdstudioFooter component displays a \"Designed and Engineered in DC by National Design Studio\" footer link.\n *\n * This component is designed to be used as a footer within other components like Tout,\n * but can also be used standalone.\n *\n * @example\n * ```tsx\n * // Used within a Tout component via footer slot\n * <Tout\n * headline=\"Feature Headline\"\n * primaryAction={<Button>Primary</Button>}\n * backgroundMedia={<img src=\"/bg.jpg\" alt=\"\" />}\n * footer={<NdstudioFooter />}\n * />\n *\n * // Standalone usage\n * <NdstudioFooter className=\"my-custom-class\" />\n * ```\n */\nconst NdstudioFooter = React.forwardRef<HTMLDivElement, NdstudioFooterProps>(\n\t({ className, href = \"https://ndstudio.gov\", ...props }, ref) => {\n\t\treturn (\n\t\t\t<div ref={ref} className={cn(\"text-center\", className)} {...props}>\n\t\t\t\t<p className=\"typography-label-large uppercase text-ivory-alpha-75\">\n\t\t\t\t\tDesigned and Engineered in DC by{\" \"}\n\t\t\t\t\t<a\n\t\t\t\t\t\thref={href}\n\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\tclassName=\"hover:underline\"\n\t\t\t\t\t>\n\t\t\t\t\t\tNational Design Studio\n\t\t\t\t\t\t<span className=\"sr-only\"> (opens in new tab)</span>\n\t\t\t\t\t</a>\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t);\n\t},\n);\nNdstudioFooter.displayName = \"NdstudioFooter\";\n\nexport { NdstudioFooter };\n"]}
@@ -0,0 +1,173 @@
1
+ import * as tailwind_variants from 'tailwind-variants';
2
+ import { VariantProps } from 'tailwind-variants';
3
+ import * as tailwind_variants_dist_config_js from 'tailwind-variants/dist/config.js';
4
+ import * as React from 'react';
5
+
6
+ declare const pagerControlVariants: tailwind_variants.TVReturnType<{
7
+ size: {
8
+ sm: string;
9
+ default: string;
10
+ lg: string;
11
+ };
12
+ }, undefined, "flex items-center", tailwind_variants_dist_config_js.TVConfig<{
13
+ size: {
14
+ sm: string;
15
+ default: string;
16
+ lg: string;
17
+ };
18
+ }, {
19
+ size: {
20
+ sm: string;
21
+ default: string;
22
+ lg: string;
23
+ };
24
+ }>, {
25
+ size: {
26
+ sm: string;
27
+ default: string;
28
+ lg: string;
29
+ };
30
+ }, undefined, tailwind_variants.TVReturnType<{
31
+ size: {
32
+ sm: string;
33
+ default: string;
34
+ lg: string;
35
+ };
36
+ }, undefined, "flex items-center", tailwind_variants_dist_config_js.TVConfig<{
37
+ size: {
38
+ sm: string;
39
+ default: string;
40
+ lg: string;
41
+ };
42
+ }, {
43
+ size: {
44
+ sm: string;
45
+ default: string;
46
+ lg: string;
47
+ };
48
+ }>, unknown, unknown, undefined>>;
49
+ declare const dotBaseVariants: tailwind_variants.TVReturnType<{
50
+ size: {
51
+ sm: string;
52
+ default: string;
53
+ lg: string;
54
+ };
55
+ variant: {
56
+ charcoal: string;
57
+ ivory: string;
58
+ };
59
+ }, undefined, "cursor-pointer rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]", tailwind_variants_dist_config_js.TVConfig<{
60
+ size: {
61
+ sm: string;
62
+ default: string;
63
+ lg: string;
64
+ };
65
+ variant: {
66
+ charcoal: string;
67
+ ivory: string;
68
+ };
69
+ }, {
70
+ size: {
71
+ sm: string;
72
+ default: string;
73
+ lg: string;
74
+ };
75
+ variant: {
76
+ charcoal: string;
77
+ ivory: string;
78
+ };
79
+ }>, {
80
+ size: {
81
+ sm: string;
82
+ default: string;
83
+ lg: string;
84
+ };
85
+ variant: {
86
+ charcoal: string;
87
+ ivory: string;
88
+ };
89
+ }, undefined, tailwind_variants.TVReturnType<{
90
+ size: {
91
+ sm: string;
92
+ default: string;
93
+ lg: string;
94
+ };
95
+ variant: {
96
+ charcoal: string;
97
+ ivory: string;
98
+ };
99
+ }, undefined, "cursor-pointer rounded-full transition-all duration-500 ease-[cubic-bezier(0.23,1,0.32,1)]", tailwind_variants_dist_config_js.TVConfig<{
100
+ size: {
101
+ sm: string;
102
+ default: string;
103
+ lg: string;
104
+ };
105
+ variant: {
106
+ charcoal: string;
107
+ ivory: string;
108
+ };
109
+ }, {
110
+ size: {
111
+ sm: string;
112
+ default: string;
113
+ lg: string;
114
+ };
115
+ variant: {
116
+ charcoal: string;
117
+ ivory: string;
118
+ };
119
+ }>, unknown, unknown, undefined>>;
120
+ interface PagerControlProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange">, VariantProps<typeof pagerControlVariants>, VariantProps<typeof dotBaseVariants> {
121
+ /**
122
+ * Total number of pages/items
123
+ */
124
+ count: number;
125
+ /**
126
+ * Current active page index (0-based)
127
+ */
128
+ activeIndex?: number;
129
+ /**
130
+ * Duration in milliseconds for each page before auto-advancing
131
+ * Set to 0 to disable auto-advance
132
+ * @default 5000
133
+ */
134
+ duration?: number;
135
+ /**
136
+ * Whether the pager should auto-advance
137
+ * @default true
138
+ */
139
+ autoPlay?: boolean;
140
+ /**
141
+ * Callback when the active page changes
142
+ */
143
+ onChange?: (index: number) => void;
144
+ /**
145
+ * Whether to pause auto-advance on hover
146
+ * @default true
147
+ */
148
+ pauseOnHover?: boolean;
149
+ /**
150
+ * Whether to loop back to the first page after the last
151
+ * @default true
152
+ */
153
+ loop?: boolean;
154
+ }
155
+ /**
156
+ * PagerControl component for indicating progress through a series of pages/slides.
157
+ *
158
+ * Features smooth width transitions when switching between dots and an animated
159
+ * progress fill on the active dot that shows time remaining before auto-advancing
160
+ * (similar to Apple's carousel indicators).
161
+ *
162
+ * Variants:
163
+ * - charcoal: Dark dots (for light backgrounds)
164
+ * - ivory: Light dots (for dark backgrounds)
165
+ *
166
+ * Sizes:
167
+ * - sm: Small dots (6px height)
168
+ * - default: Medium dots (10px height)
169
+ * - lg: Large dots (16px height)
170
+ */
171
+ declare const PagerControl: React.ForwardRefExoticComponent<PagerControlProps & React.RefAttributes<HTMLDivElement>>;
172
+
173
+ export { PagerControl, type PagerControlProps, pagerControlVariants };