@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,152 @@
1
+ import * as React from 'react';
2
+ import { clsx } from 'clsx';
3
+ import { tv, cnBase } from 'tailwind-variants';
4
+ import { jsx, jsxs } from 'react/jsx-runtime';
5
+
6
+ // src/components/sections/faq-section/faq-section.tsx
7
+ function cn(...inputs) {
8
+ return cnBase(clsx(inputs));
9
+ }
10
+ var twoColumnSectionVariants = tv({
11
+ // Base styles - responsive padding using primitive spacing tokens
12
+ base: [
13
+ "w-full",
14
+ // Small (mobile): 20px x, 56px top, 20px bottom
15
+ "px-20 pt-56 pb-20",
16
+ // Medium (tablet): 56px x, 56px y
17
+ "md:px-56 md:py-56",
18
+ // Large (desktop): 72px x, 72px top, 112px bottom
19
+ "lg:px-72 lg:pt-72 lg:pb-112"
20
+ ],
21
+ variants: {
22
+ colorScheme: {
23
+ dark: "bg-gray-1200",
24
+ light: "bg-white"
25
+ },
26
+ layout: {
27
+ asymmetric: "",
28
+ equal: ""
29
+ }
30
+ },
31
+ defaultVariants: {
32
+ colorScheme: "dark",
33
+ layout: "asymmetric"
34
+ }
35
+ });
36
+ var TwoColumnSection = React.forwardRef(
37
+ ({
38
+ className,
39
+ colorScheme = "dark",
40
+ layout,
41
+ title,
42
+ lead,
43
+ children,
44
+ ...props
45
+ }, ref) => {
46
+ return /* @__PURE__ */ jsx(
47
+ "section",
48
+ {
49
+ ref,
50
+ className: twoColumnSectionVariants({
51
+ colorScheme,
52
+ layout,
53
+ class: className
54
+ }),
55
+ ...props,
56
+ children: /* @__PURE__ */ jsxs(
57
+ "div",
58
+ {
59
+ className: cn(
60
+ "border-t pt-36",
61
+ colorScheme === "dark" ? "border-gray-700" : "border-gray-300",
62
+ // Grid layout - uses primitive spacing tokens
63
+ "grid grid-cols-1 gap-56",
64
+ layout === "equal" ? "md:grid-cols-2" : "lg:grid-cols-24 lg:gap-56"
65
+ ),
66
+ children: [
67
+ /* @__PURE__ */ jsx(
68
+ "h2",
69
+ {
70
+ className: cn(
71
+ "typography-subheading-medium",
72
+ colorScheme === "dark" ? "text-gray-100" : "text-gray-900",
73
+ // Column span based on layout
74
+ layout !== "equal" && "lg:col-span-9"
75
+ ),
76
+ children: title
77
+ }
78
+ ),
79
+ /* @__PURE__ */ jsxs(
80
+ "div",
81
+ {
82
+ className: cn(
83
+ "flex flex-col gap-56",
84
+ layout !== "equal" && "lg:col-span-15"
85
+ ),
86
+ children: [
87
+ lead && /* @__PURE__ */ jsx(
88
+ "div",
89
+ {
90
+ className: cn(
91
+ "typography-body-large",
92
+ colorScheme === "dark" ? "text-gray-100" : "text-gray-900"
93
+ ),
94
+ children: typeof lead === "string" ? /* @__PURE__ */ jsx("p", { children: lead }) : lead
95
+ }
96
+ ),
97
+ /* @__PURE__ */ jsx(
98
+ "div",
99
+ {
100
+ className: cn(
101
+ "typography-body-medium flex flex-col gap-[1em]",
102
+ colorScheme === "dark" ? "text-gray-400" : "text-gray-600"
103
+ ),
104
+ children
105
+ }
106
+ )
107
+ ]
108
+ }
109
+ )
110
+ ]
111
+ }
112
+ )
113
+ }
114
+ );
115
+ }
116
+ );
117
+ TwoColumnSection.displayName = "TwoColumnSection";
118
+ var FaqSection = React.forwardRef(
119
+ ({
120
+ className,
121
+ colorScheme = "light",
122
+ title = "Frequently Asked Questions",
123
+ children,
124
+ layout,
125
+ ...props
126
+ }, ref) => {
127
+ return /* @__PURE__ */ jsx(
128
+ TwoColumnSection,
129
+ {
130
+ ref,
131
+ colorScheme,
132
+ layout: layout ?? void 0,
133
+ title,
134
+ className: cn(
135
+ // Override title typography to be larger
136
+ "[&_h2]:typography-h4",
137
+ // Accordion typography overrides
138
+ "[&_button]:typography-body-large [&_button]:md:typography-h5",
139
+ "[&_[data-accordion-panel]]:typography-body-medium [&_[data-accordion-panel]]:md:typography-body-large",
140
+ className
141
+ ),
142
+ ...props,
143
+ children
144
+ }
145
+ );
146
+ }
147
+ );
148
+ FaqSection.displayName = "FaqSection";
149
+
150
+ export { FaqSection };
151
+ //# sourceMappingURL=index.js.map
152
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/components/sections/two-column-section/two-column-section.tsx","../../src/components/sections/faq-section/faq-section.tsx"],"names":["twMerge","React2","jsx"],"mappings":";;;;;;AAKO,SAAS,MAAM,MAAA,EAAsB;AAC3C,EAAA,OAAOA,MAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC5B;ACMA,IAAM,2BAA2B,EAAA,CAAG;AAAA;AAAA,EAEnC,IAAA,EAAM;AAAA,IACL,QAAA;AAAA;AAAA,IAEA,mBAAA;AAAA;AAAA,IAEA,mBAAA;AAAA;AAAA,IAEA;AAAA,GACD;AAAA,EACA,QAAA,EAAU;AAAA,IACT,WAAA,EAAa;AAAA,MACZ,IAAA,EAAM,cAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACR;AAAA,IACA,MAAA,EAAQ;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,KAAA,EAAO;AAAA;AACR,GACD;AAAA,EACA,eAAA,EAAiB;AAAA,IAChB,WAAA,EAAa,MAAA;AAAA,IACb,MAAA,EAAQ;AAAA;AAEV,CAAC,CAAA;AA8CD,IAAM,gBAAA,GAAyB,KAAA,CAAA,UAAA;AAAA,EAC9B,CACC;AAAA,IACC,SAAA;AAAA,IACA,WAAA,GAAc,MAAA;AAAA,IACd,MAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAG;AAAA,KAEJ,GAAA,KACI;AACJ,IAAA,uBACC,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAW,wBAAA,CAAyB;AAAA,UACnC,WAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA,EAAO;AAAA,SACP,CAAA;AAAA,QACA,GAAG,KAAA;AAAA,QAGJ,QAAA,kBAAA,IAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACA,SAAA,EAAW,EAAA;AAAA,cACV,gBAAA;AAAA,cACA,WAAA,KAAgB,SAAS,iBAAA,GAAoB,iBAAA;AAAA;AAAA,cAE7C,yBAAA;AAAA,cACA,MAAA,KAAW,UAAU,gBAAA,GAAmB;AAAA,aACzC;AAAA,YAGA,QAAA,EAAA;AAAA,8BAAA,GAAA;AAAA,gBAAC,IAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAW,EAAA;AAAA,oBACV,8BAAA;AAAA,oBACA,WAAA,KAAgB,SAAS,eAAA,GAAkB,eAAA;AAAA;AAAA,oBAE3C,WAAW,OAAA,IAAW;AAAA,mBACvB;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA,eACF;AAAA,8BAGA,IAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACA,SAAA,EAAW,EAAA;AAAA,oBACV,sBAAA;AAAA,oBACA,WAAW,OAAA,IAAW;AAAA,mBACvB;AAAA,kBAGC,QAAA,EAAA;AAAA,oBAAA,IAAA,oBACA,GAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACA,SAAA,EAAW,EAAA;AAAA,0BACV,uBAAA;AAAA,0BACA,WAAA,KAAgB,SAAS,eAAA,GAAkB;AAAA,yBAC5C;AAAA,wBAEC,iBAAO,IAAA,KAAS,QAAA,mBAAW,GAAA,CAAC,GAAA,EAAA,EAAG,gBAAK,CAAA,GAAO;AAAA;AAAA,qBAC7C;AAAA,oCAID,GAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACA,SAAA,EAAW,EAAA;AAAA,0BACV,gDAAA;AAAA,0BACA,WAAA,KAAgB,SAAS,eAAA,GAAkB;AAAA,yBAC5C;AAAA,wBAEC;AAAA;AAAA;AACF;AAAA;AAAA;AACD;AAAA;AAAA;AACD;AAAA,KACD;AAAA,EAEF;AACD,CAAA;AACA,gBAAA,CAAiB,WAAA,GAAc,kBAAA;ACnH/B,IAAM,UAAA,GAAmBC,KAAA,CAAA,UAAA;AAAA,EACxB,CACC;AAAA,IACC,SAAA;AAAA,IACA,WAAA,GAAc,OAAA;AAAA,IACd,KAAA,GAAQ,4BAAA;AAAA,IACR,QAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAG;AAAA,KAEJ,GAAA,KACI;AACJ,IAAA,uBACCC,GAAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACA,GAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAQ,MAAA,IAAU,MAAA;AAAA,QAClB,KAAA;AAAA,QACA,SAAA,EAAW,EAAA;AAAA;AAAA,UAEV,sBAAA;AAAA;AAAA,UAEA,8DAAA;AAAA,UACA,uGAAA;AAAA,UACA;AAAA,SACD;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACF;AAAA,EAEF;AACD;AACA,UAAA,CAAW,WAAA,GAAc,YAAA","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 { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\n\n/**\n * TwoColumnSection component for text-heavy content sections\n *\n * Layout:\n * - Desktop (lg+): Title left, content right with border-top divider\n * - Mobile/Tablet: Stacked vertically\n *\n * Uses the 24-column grid system.\n */\nconst twoColumnSectionVariants = tv({\n\t// Base styles - responsive padding using primitive spacing tokens\n\tbase: [\n\t\t\"w-full\",\n\t\t// Small (mobile): 20px x, 56px top, 20px bottom\n\t\t\"px-20 pt-56 pb-20\",\n\t\t// Medium (tablet): 56px x, 56px y\n\t\t\"md:px-56 md:py-56\",\n\t\t// Large (desktop): 72px x, 72px top, 112px bottom\n\t\t\"lg:px-72 lg:pt-72 lg:pb-112\",\n\t],\n\tvariants: {\n\t\tcolorScheme: {\n\t\t\tdark: \"bg-gray-1200\",\n\t\t\tlight: \"bg-white\",\n\t\t},\n\t\tlayout: {\n\t\t\tasymmetric: \"\",\n\t\t\tequal: \"\",\n\t\t},\n\t},\n\tdefaultVariants: {\n\t\tcolorScheme: \"dark\",\n\t\tlayout: \"asymmetric\",\n\t},\n});\n\nexport interface TwoColumnSectionProps\n\textends React.HTMLAttributes<HTMLElement>,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t */\n\ttitle: string;\n\t/**\n\t * Lead content - prominently styled (brighter text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tlead?: React.ReactNode;\n\t/**\n\t * Body content - secondary styled (muted text)\n\t * Can be a string or ReactNode for rich content\n\t */\n\tchildren: React.ReactNode;\n\t/**\n\t * Layout style for the columns\n\t * - \"asymmetric\" (default): Uses 24-column grid with ~40/60 split (title: 9, content: 15)\n\t * - \"equal\": Simple 2-column equal-width layout at md+ breakpoints\n\t */\n\tlayout?: \"asymmetric\" | \"equal\";\n}\n\n/**\n * TwoColumnSection component for text-heavy content with title/content split.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), Content right (~60%)\n *\n * @example\n * ```tsx\n * <TwoColumnSection\n * title=\"US Tech Force\"\n * lead=\"The US Tech Force is recruiting an elite corps of engineers...\"\n * variant=\"dark\"\n * >\n * <p>Through a two-year program, participants will work...</p>\n * <p>Upon completing the program, engineers can seek...</p>\n * </TwoColumnSection>\n * ```\n */\nconst TwoColumnSection = React.forwardRef<HTMLElement, TwoColumnSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"dark\",\n\t\t\tlayout,\n\t\t\ttitle,\n\t\t\tlead,\n\t\t\tchildren,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<section\n\t\t\t\tref={ref}\n\t\t\t\tclassName={twoColumnSectionVariants({\n\t\t\t\t\tcolorScheme,\n\t\t\t\t\tlayout,\n\t\t\t\t\tclass: className,\n\t\t\t\t})}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{/* Inner container with border-top - uses primitive spacing tokens */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"border-t pt-36\",\n\t\t\t\t\t\tcolorScheme === \"dark\" ? \"border-gray-700\" : \"border-gray-300\",\n\t\t\t\t\t\t// Grid layout - uses primitive spacing tokens\n\t\t\t\t\t\t\"grid grid-cols-1 gap-56\",\n\t\t\t\t\t\tlayout === \"equal\" ? \"md:grid-cols-2\" : \"lg:grid-cols-24 lg:gap-56\",\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{/* Title column */}\n\t\t\t\t\t<h2\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"typography-subheading-medium\",\n\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t// Column span based on layout\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-9\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</h2>\n\n\t\t\t\t\t{/* Content column - uses primitive spacing tokens */}\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 gap-56\",\n\t\t\t\t\t\t\tlayout !== \"equal\" && \"lg:col-span-15\",\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{/* Lead content - brighter/prominent */}\n\t\t\t\t\t\t{lead && (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"typography-body-large\",\n\t\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-100\" : \"text-gray-900\",\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{typeof lead === \"string\" ? <p>{lead}</p> : lead}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t{/* Body content - muted */}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"typography-body-medium flex flex-col gap-[1em]\",\n\t\t\t\t\t\t\t\tcolorScheme === \"dark\" ? \"text-gray-400\" : \"text-gray-600\",\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</section>\n\t\t);\n\t},\n);\nTwoColumnSection.displayName = \"TwoColumnSection\";\n\nexport { TwoColumnSection, twoColumnSectionVariants };\n","import * as React from \"react\";\nimport type { VariantProps } from \"tailwind-variants\";\nimport { cn } from \"@/lib/utils\";\nimport { TwoColumnSection } from \"../two-column-section\";\nimport type { twoColumnSectionVariants } from \"../two-column-section/two-column-section\";\n\nexport interface FaqSectionProps\n\textends Omit<React.HTMLAttributes<HTMLElement>, \"title\">,\n\t\tVariantProps<typeof twoColumnSectionVariants> {\n\t/**\n\t * The title text displayed in the left column\n\t * @default \"Frequently Asked Questions\"\n\t */\n\ttitle?: string;\n\t/**\n\t * The FAQ content - typically an Accordion with AccordionItems\n\t */\n\tchildren: React.ReactNode;\n}\n\n/**\n * FaqSection component for displaying FAQ content in a two-column layout.\n *\n * Wraps TwoColumnSection with FAQ-specific defaults and typography.\n *\n * Layout:\n * - Mobile/Tablet: Stacked (title above content)\n * - Desktop (lg+): Title left (~40%), FAQ content right (~60%)\n *\n * @example\n * ```tsx\n * <FaqSection>\n * <Accordion defaultExpanded=\"faq-1\">\n * <AccordionItem id=\"faq-1\" title=\"What is the US Tech Force?\">\n * Tech Force will be an elite group of technology specialists...\n * </AccordionItem>\n * <AccordionItem id=\"faq-2\" title=\"What skills are required?\">\n * We're looking for expertise in software engineering...\n * </AccordionItem>\n * </Accordion>\n * </FaqSection>\n *\n * // With custom title\n * <FaqSection title=\"Common Questions\" colorScheme=\"light\">\n * ...\n * </FaqSection>\n * ```\n */\nconst FaqSection = React.forwardRef<HTMLElement, FaqSectionProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tcolorScheme = \"light\",\n\t\t\ttitle = \"Frequently Asked Questions\",\n\t\t\tchildren,\n\t\t\tlayout,\n\t\t\t...props\n\t\t},\n\t\tref,\n\t) => {\n\t\treturn (\n\t\t\t<TwoColumnSection\n\t\t\t\tref={ref}\n\t\t\t\tcolorScheme={colorScheme}\n\t\t\t\tlayout={layout ?? undefined}\n\t\t\t\ttitle={title}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t// Override title typography to be larger\n\t\t\t\t\t\"[&_h2]:typography-h4\",\n\t\t\t\t\t// Accordion typography overrides\n\t\t\t\t\t\"[&_button]:typography-body-large [&_button]:md:typography-h5\",\n\t\t\t\t\t\"[&_[data-accordion-panel]]:typography-body-medium [&_[data-accordion-panel]]:md:typography-body-large\",\n\t\t\t\t\tclassName,\n\t\t\t\t)}\n\t\t\t\t{...props}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</TwoColumnSection>\n\t\t);\n\t},\n);\nFaqSection.displayName = \"FaqSection\";\n\nexport { FaqSection };\n"]}
@@ -0,0 +1,10 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+
3
+ interface GridOverlayProps {
4
+ columnOpacity?: number;
5
+ borderOpacity?: number;
6
+ visible?: boolean;
7
+ }
8
+ declare function GridOverlay({ columnOpacity, borderOpacity, visible, }: GridOverlayProps): react_jsx_runtime.JSX.Element;
9
+
10
+ export { GridOverlay, type GridOverlayProps };
@@ -0,0 +1,38 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+
3
+ // src/components/dev-tools/grid-overlay/grid-overlay.tsx
4
+ function GridOverlay({
5
+ columnOpacity = 0.15,
6
+ borderOpacity = 0.3,
7
+ visible = true
8
+ }) {
9
+ const columns = Array.from({ length: 24 }, (_, i) => i);
10
+ return /* @__PURE__ */ jsx(
11
+ "div",
12
+ {
13
+ className: `
14
+ fixed inset-0 z-[9998] pointer-events-none overflow-hidden
15
+ transition-opacity duration-300 ease-out
16
+ ${visible ? "opacity-100" : "opacity-0"}
17
+ `,
18
+ "aria-hidden": "true",
19
+ "data-testid": "grid-overlay",
20
+ children: /* @__PURE__ */ jsx("div", { className: "h-full w-full max-w-[90rem] mx-auto px-[var(--spatial-grid-small-margin)] md:px-[var(--spatial-grid-medium-margin)] lg:px-[var(--spatial-grid-large-margin)]", children: /* @__PURE__ */ jsx("div", { className: "h-full grid grid-cols-4 md:grid-cols-12 lg:grid-cols-24 gap-[var(--spatial-grid-small-gutter)] md:gap-[var(--spatial-grid-medium-gutter)] lg:gap-[var(--spatial-grid-large-gutter)]", children: columns.map((index) => /* @__PURE__ */ jsx(
21
+ "div",
22
+ {
23
+ className: "h-full border border-red-500",
24
+ style: {
25
+ backgroundColor: `rgb(239 68 68 / ${columnOpacity})`,
26
+ borderColor: `rgb(239 68 68 / ${borderOpacity})`
27
+ },
28
+ "data-column": index + 1
29
+ },
30
+ index
31
+ )) }) })
32
+ }
33
+ );
34
+ }
35
+
36
+ export { GridOverlay };
37
+ //# sourceMappingURL=index.js.map
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/dev-tools/grid-overlay/grid-overlay.tsx"],"names":[],"mappings":";;;AAMO,SAAS,WAAA,CAAY;AAAA,EAC3B,aAAA,GAAgB,IAAA;AAAA,EAChB,aAAA,GAAgB,GAAA;AAAA,EAChB,OAAA,GAAU;AACX,CAAA,EAAqB;AACpB,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAG,EAAG,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA;AAEtD,EAAA,uBACC,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACA,SAAA,EAAW;AAAA;AAAA;AAAA,IAAA,EAGR,OAAA,GAAU,gBAAgB,WAAW;AAAA,GAAA,CAAA;AAAA,MAExC,aAAA,EAAY,MAAA;AAAA,MACZ,aAAA,EAAY,cAAA;AAAA,MAEZ,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8JAAA,EACd,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qLAAA,EACb,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,KAAA,qBACb,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UAEA,SAAA,EAAU,8BAAA;AAAA,UACV,KAAA,EAAO;AAAA,YACN,eAAA,EAAiB,mBAAmB,aAAa,CAAA,CAAA,CAAA;AAAA,YACjD,WAAA,EAAa,mBAAmB,aAAa,CAAA,CAAA;AAAA,WAC9C;AAAA,UACA,eAAa,KAAA,GAAQ;AAAA,SAAA;AAAA,QANhB;AAAA,OAQN,GACF,CAAA,EACD;AAAA;AAAA,GACD;AAEF","file":"index.js","sourcesContent":["export interface GridOverlayProps {\n\tcolumnOpacity?: number;\n\tborderOpacity?: number;\n\tvisible?: boolean;\n}\n\nexport function GridOverlay({\n\tcolumnOpacity = 0.15,\n\tborderOpacity = 0.3,\n\tvisible = true,\n}: GridOverlayProps) {\n\tconst columns = Array.from({ length: 24 }, (_, i) => i);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`\n\t\t\t\tfixed inset-0 z-[9998] pointer-events-none overflow-hidden\n\t\t\t\ttransition-opacity duration-300 ease-out\n\t\t\t\t${visible ? \"opacity-100\" : \"opacity-0\"}\n\t\t\t`}\n\t\t\taria-hidden=\"true\"\n\t\t\tdata-testid=\"grid-overlay\"\n\t\t>\n\t\t\t<div className=\"h-full w-full max-w-[90rem] mx-auto px-[var(--spatial-grid-small-margin)] md:px-[var(--spatial-grid-medium-margin)] lg:px-[var(--spatial-grid-large-margin)]\">\n\t\t\t\t<div className=\"h-full grid grid-cols-4 md:grid-cols-12 lg:grid-cols-24 gap-[var(--spatial-grid-small-gutter)] md:gap-[var(--spatial-grid-medium-gutter)] lg:gap-[var(--spatial-grid-large-gutter)]\">\n\t\t\t\t\t{columns.map((index) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName=\"h-full border border-red-500\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tbackgroundColor: `rgb(239 68 68 / ${columnOpacity})`,\n\t\t\t\t\t\t\t\tborderColor: `rgb(239 68 68 / ${borderOpacity})`,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tdata-column={index + 1}\n\t\t\t\t\t\t/>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n}\n"]}
@@ -0,0 +1,462 @@
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
+ import { a as ComponentTheme } from '../theme-CzBPUlh_.js';
6
+ export { Background as HeroBackground, BackgroundImage as HeroBackgroundImage, BackgroundImageProps as HeroBackgroundImageProps, BackgroundStream as HeroBackgroundStream, BackgroundStreamProps as HeroBackgroundStreamProps, BackgroundVideo as HeroBackgroundVideo, BackgroundVideoProps as HeroBackgroundVideoProps, BackgroundGradient as HeroGradient, BackgroundGradientProps as HeroGradientProps, BackgroundOverlay as HeroOverlay, BackgroundOverlayProps as HeroOverlayProps } from '../background/index.js';
7
+ import 'react/jsx-runtime';
8
+ import '@base-ui-components/react/use-render';
9
+
10
+ declare const DEFAULT_TITLE_TYPOGRAPHY = "typography-h1-display";
11
+ declare const heroVariants: tailwind_variants.TVReturnType<{
12
+ variant: {
13
+ A1: {
14
+ root: string;
15
+ content: string[];
16
+ };
17
+ A2: {
18
+ root: string;
19
+ content: string[];
20
+ };
21
+ A3: {
22
+ root: string;
23
+ content: string[];
24
+ };
25
+ };
26
+ /**
27
+ * Vertical alignment of content within the hero.
28
+ * Provides a simpler API than variant for basic alignment needs.
29
+ */
30
+ contentAlign: {
31
+ top: {
32
+ content: string;
33
+ };
34
+ center: {
35
+ content: string;
36
+ };
37
+ bottom: {
38
+ content: string;
39
+ };
40
+ };
41
+ colorScheme: {
42
+ dark: {
43
+ root: string;
44
+ title: string;
45
+ };
46
+ light: {
47
+ root: string;
48
+ title: string;
49
+ };
50
+ };
51
+ hasBackground: {
52
+ true: {
53
+ root: string;
54
+ };
55
+ };
56
+ }, {
57
+ root: string;
58
+ top: string;
59
+ content: string[];
60
+ title: string;
61
+ indicator: string;
62
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
63
+ variant: {
64
+ A1: {
65
+ root: string;
66
+ content: string[];
67
+ };
68
+ A2: {
69
+ root: string;
70
+ content: string[];
71
+ };
72
+ A3: {
73
+ root: string;
74
+ content: string[];
75
+ };
76
+ };
77
+ /**
78
+ * Vertical alignment of content within the hero.
79
+ * Provides a simpler API than variant for basic alignment needs.
80
+ */
81
+ contentAlign: {
82
+ top: {
83
+ content: string;
84
+ };
85
+ center: {
86
+ content: string;
87
+ };
88
+ bottom: {
89
+ content: string;
90
+ };
91
+ };
92
+ colorScheme: {
93
+ dark: {
94
+ root: string;
95
+ title: string;
96
+ };
97
+ light: {
98
+ root: string;
99
+ title: string;
100
+ };
101
+ };
102
+ hasBackground: {
103
+ true: {
104
+ root: string;
105
+ };
106
+ };
107
+ }, {
108
+ variant: {
109
+ A1: {
110
+ root: string;
111
+ content: string[];
112
+ };
113
+ A2: {
114
+ root: string;
115
+ content: string[];
116
+ };
117
+ A3: {
118
+ root: string;
119
+ content: string[];
120
+ };
121
+ };
122
+ /**
123
+ * Vertical alignment of content within the hero.
124
+ * Provides a simpler API than variant for basic alignment needs.
125
+ */
126
+ contentAlign: {
127
+ top: {
128
+ content: string;
129
+ };
130
+ center: {
131
+ content: string;
132
+ };
133
+ bottom: {
134
+ content: string;
135
+ };
136
+ };
137
+ colorScheme: {
138
+ dark: {
139
+ root: string;
140
+ title: string;
141
+ };
142
+ light: {
143
+ root: string;
144
+ title: string;
145
+ };
146
+ };
147
+ hasBackground: {
148
+ true: {
149
+ root: string;
150
+ };
151
+ };
152
+ }>, {
153
+ variant: {
154
+ A1: {
155
+ root: string;
156
+ content: string[];
157
+ };
158
+ A2: {
159
+ root: string;
160
+ content: string[];
161
+ };
162
+ A3: {
163
+ root: string;
164
+ content: string[];
165
+ };
166
+ };
167
+ /**
168
+ * Vertical alignment of content within the hero.
169
+ * Provides a simpler API than variant for basic alignment needs.
170
+ */
171
+ contentAlign: {
172
+ top: {
173
+ content: string;
174
+ };
175
+ center: {
176
+ content: string;
177
+ };
178
+ bottom: {
179
+ content: string;
180
+ };
181
+ };
182
+ colorScheme: {
183
+ dark: {
184
+ root: string;
185
+ title: string;
186
+ };
187
+ light: {
188
+ root: string;
189
+ title: string;
190
+ };
191
+ };
192
+ hasBackground: {
193
+ true: {
194
+ root: string;
195
+ };
196
+ };
197
+ }, {
198
+ root: string;
199
+ top: string;
200
+ content: string[];
201
+ title: string;
202
+ indicator: string;
203
+ }, tailwind_variants.TVReturnType<{
204
+ variant: {
205
+ A1: {
206
+ root: string;
207
+ content: string[];
208
+ };
209
+ A2: {
210
+ root: string;
211
+ content: string[];
212
+ };
213
+ A3: {
214
+ root: string;
215
+ content: string[];
216
+ };
217
+ };
218
+ /**
219
+ * Vertical alignment of content within the hero.
220
+ * Provides a simpler API than variant for basic alignment needs.
221
+ */
222
+ contentAlign: {
223
+ top: {
224
+ content: string;
225
+ };
226
+ center: {
227
+ content: string;
228
+ };
229
+ bottom: {
230
+ content: string;
231
+ };
232
+ };
233
+ colorScheme: {
234
+ dark: {
235
+ root: string;
236
+ title: string;
237
+ };
238
+ light: {
239
+ root: string;
240
+ title: string;
241
+ };
242
+ };
243
+ hasBackground: {
244
+ true: {
245
+ root: string;
246
+ };
247
+ };
248
+ }, {
249
+ root: string;
250
+ top: string;
251
+ content: string[];
252
+ title: string;
253
+ indicator: string;
254
+ }, undefined, tailwind_variants_dist_config_js.TVConfig<{
255
+ variant: {
256
+ A1: {
257
+ root: string;
258
+ content: string[];
259
+ };
260
+ A2: {
261
+ root: string;
262
+ content: string[];
263
+ };
264
+ A3: {
265
+ root: string;
266
+ content: string[];
267
+ };
268
+ };
269
+ /**
270
+ * Vertical alignment of content within the hero.
271
+ * Provides a simpler API than variant for basic alignment needs.
272
+ */
273
+ contentAlign: {
274
+ top: {
275
+ content: string;
276
+ };
277
+ center: {
278
+ content: string;
279
+ };
280
+ bottom: {
281
+ content: string;
282
+ };
283
+ };
284
+ colorScheme: {
285
+ dark: {
286
+ root: string;
287
+ title: string;
288
+ };
289
+ light: {
290
+ root: string;
291
+ title: string;
292
+ };
293
+ };
294
+ hasBackground: {
295
+ true: {
296
+ root: string;
297
+ };
298
+ };
299
+ }, {
300
+ variant: {
301
+ A1: {
302
+ root: string;
303
+ content: string[];
304
+ };
305
+ A2: {
306
+ root: string;
307
+ content: string[];
308
+ };
309
+ A3: {
310
+ root: string;
311
+ content: string[];
312
+ };
313
+ };
314
+ /**
315
+ * Vertical alignment of content within the hero.
316
+ * Provides a simpler API than variant for basic alignment needs.
317
+ */
318
+ contentAlign: {
319
+ top: {
320
+ content: string;
321
+ };
322
+ center: {
323
+ content: string;
324
+ };
325
+ bottom: {
326
+ content: string;
327
+ };
328
+ };
329
+ colorScheme: {
330
+ dark: {
331
+ root: string;
332
+ title: string;
333
+ };
334
+ light: {
335
+ root: string;
336
+ title: string;
337
+ };
338
+ };
339
+ hasBackground: {
340
+ true: {
341
+ root: string;
342
+ };
343
+ };
344
+ }>, unknown, unknown, undefined>>;
345
+ declare const heroHeaderVariants: tailwind_variants.TVReturnType<{} | {} | {}, undefined, "relative z-10 w-full", tailwind_variants_dist_config_js.TVConfig<unknown, {} | {}>, {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, "relative z-10 w-full", tailwind_variants_dist_config_js.TVConfig<unknown, {} | {}>, unknown, unknown, undefined>>;
346
+ declare const heroContentVariants: tailwind_variants.TVReturnType<{} | {} | {}, undefined, string[], tailwind_variants_dist_config_js.TVConfig<unknown, {} | {}>, {} | {}, undefined, tailwind_variants.TVReturnType<unknown, undefined, string[], tailwind_variants_dist_config_js.TVConfig<unknown, {} | {}>, unknown, unknown, undefined>>;
347
+ interface HeroHeaderProps extends React.HTMLAttributes<HTMLDivElement> {
348
+ }
349
+ /**
350
+ * Header slot for Hero - used for navigation, gov banners, etc.
351
+ * Full-width with no padding, sits at the top of the hero.
352
+ */
353
+ declare const HeroHeader: React.ForwardRefExoticComponent<HeroHeaderProps & React.RefAttributes<HTMLDivElement>>;
354
+ interface HeroContentProps extends React.HTMLAttributes<HTMLDivElement> {
355
+ }
356
+ /**
357
+ * Content container for Hero - use for main content.
358
+ * Has padding and sits above backgrounds with z-10.
359
+ */
360
+ declare const HeroContent: React.ForwardRefExoticComponent<HeroContentProps & React.RefAttributes<HTMLDivElement>>;
361
+ interface HeroProps extends Omit<React.HTMLAttributes<HTMLElement>, "title">, VariantProps<typeof heroVariants> {
362
+ /**
363
+ * The title text displayed in the hero.
364
+ * If provided, renders an h1 with default typography.
365
+ * Omit to use children for custom content composition.
366
+ */
367
+ title?: string;
368
+ /**
369
+ * Custom typography class for the title using primitive tokens.
370
+ * Default: "typography-h1-display"
371
+ */
372
+ titleClassName?: string;
373
+ /**
374
+ * Color scheme for text content.
375
+ * - dark: Dark text for use on light backgrounds (default)
376
+ * - light: Light text for use on dark backgrounds
377
+ */
378
+ colorScheme?: "dark" | "light";
379
+ /**
380
+ * Content for the top slot (full-width, no padding).
381
+ * Use for USGovBanner, Navigation, etc.
382
+ */
383
+ top?: React.ReactNode;
384
+ /**
385
+ * Indicator slot for scroll hints, arrows, or other visual cues.
386
+ * Rendered at the bottom of the hero, below the main content.
387
+ * @example
388
+ * ```tsx
389
+ * <Hero indicator={<ChevronDown className="animate-bounce" />}>
390
+ * <h1>Welcome</h1>
391
+ * </Hero>
392
+ * ```
393
+ */
394
+ indicator?: React.ReactNode;
395
+ /**
396
+ * Background for the hero. Can be:
397
+ * - A color string (hex, rgb, etc.) for solid backgrounds
398
+ * - A ReactNode (use HeroBackground.Image, HeroBackground.Video, or HeroBackground.Stream)
399
+ */
400
+ background?: React.ReactNode | string;
401
+ /**
402
+ * Opacity of the overlay (0-1, default: 0)
403
+ * Only applies when using a background slot
404
+ */
405
+ overlayOpacity?: number;
406
+ /**
407
+ * Color of the overlay (default: "black")
408
+ */
409
+ overlayColor?: string;
410
+ /**
411
+ * Border radius for the hero container
412
+ * Useful for designs with rounded bottom corners
413
+ */
414
+ borderRadius?: string;
415
+ /**
416
+ * Theme overrides for component styling via CSS custom properties
417
+ */
418
+ theme?: ComponentTheme;
419
+ }
420
+ /**
421
+ * Hero component for page headers with large display typography.
422
+ *
423
+ * Slots:
424
+ * - `top`: Full-width slot at top for USGovBanner, Navigation (no padding)
425
+ * - `children`: Main content slot with padding and alignment
426
+ *
427
+ * The `title` prop is a convenience for simple heroes - it renders an h1 with
428
+ * responsive typography. Children are always rendered, so you can use both
429
+ * or just children for full control.
430
+ *
431
+ * Variants:
432
+ * - A1: Content at bottom (default)
433
+ * - A2: Content at top
434
+ * - A3: Content centered
435
+ *
436
+ * @example
437
+ * ```tsx
438
+ * // Simple - just title and background
439
+ * <Hero title="Welcome" background="#1a1a1a" />
440
+ *
441
+ * // With top slot for banner/nav
442
+ * <Hero
443
+ * variant="A1"
444
+ * background={<HeroBackground.Image src="/hero.jpg" />}
445
+ * top={
446
+ * <>
447
+ * <USGovBanner variant="inverted" />
448
+ * <Navigation />
449
+ * </>
450
+ * }
451
+ * >
452
+ * <h1>Board of Peace</h1>
453
+ * <p>Subtitle goes here</p>
454
+ * </Hero>
455
+ * ```
456
+ */
457
+ declare const Hero: React.ForwardRefExoticComponent<HeroProps & React.RefAttributes<HTMLElement>> & {
458
+ Header: typeof HeroHeader;
459
+ Content: typeof HeroContent;
460
+ };
461
+
462
+ export { DEFAULT_TITLE_TYPOGRAPHY, Hero, HeroContent, type HeroContentProps, HeroHeader, type HeroHeaderProps, type HeroProps, heroContentVariants, heroHeaderVariants, heroVariants };