@sixthshift/design-system 0.1.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 (236) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +222 -0
  3. package/dist/styles.css +2 -0
  4. package/dist/theme.generated.css +438 -0
  5. package/package.json +238 -0
  6. package/src/components/Avatar/Avatar.tsx +19 -0
  7. package/src/components/Avatar/index.ts +1 -0
  8. package/src/components/Badge/Badge.tsx +59 -0
  9. package/src/components/Badge/index.ts +1 -0
  10. package/src/components/BarChart/BarChart.tsx +51 -0
  11. package/src/components/BarChart/index.ts +1 -0
  12. package/src/components/Breadcrumb/Breadcrumb.tsx +47 -0
  13. package/src/components/Breadcrumb/index.ts +5 -0
  14. package/src/components/Button/Button.tsx +157 -0
  15. package/src/components/Button/index.ts +1 -0
  16. package/src/components/Calendar/Calendar.tsx +433 -0
  17. package/src/components/Calendar/calendar.hooks.ts +329 -0
  18. package/src/components/Calendar/calendar.types.ts +117 -0
  19. package/src/components/Calendar/index.ts +28 -0
  20. package/src/components/Card/Card.tsx +47 -0
  21. package/src/components/Card/index.ts +1 -0
  22. package/src/components/Checkbox/Checkbox.tsx +144 -0
  23. package/src/components/Checkbox/index.ts +1 -0
  24. package/src/components/CheckboxGroup/CheckboxGroup.tsx +173 -0
  25. package/src/components/CheckboxGroup/index.ts +5 -0
  26. package/src/components/Code/Editor/Editor.tsx +161 -0
  27. package/src/components/Code/Editor/index.ts +2 -0
  28. package/src/components/Code/Editor/semanticTokenProvider.ts +69 -0
  29. package/src/components/Code/Editor/themes.ts +112 -0
  30. package/src/components/Code/ValidationStatus/ValidationStatus.tsx +81 -0
  31. package/src/components/Code/ValidationStatus/index.ts +1 -0
  32. package/src/components/Code/Workspace/StatusBar.tsx +47 -0
  33. package/src/components/Code/Workspace/Toolbar.tsx +47 -0
  34. package/src/components/Code/Workspace/Workspace.tsx +109 -0
  35. package/src/components/Code/Workspace/index.ts +3 -0
  36. package/src/components/ColorDot/ColorDot.tsx +50 -0
  37. package/src/components/ColorDot/index.ts +1 -0
  38. package/src/components/DatePicker/DatePicker.tsx +236 -0
  39. package/src/components/DatePicker/datepicker.hooks.ts +381 -0
  40. package/src/components/DatePicker/datepicker.types.ts +140 -0
  41. package/src/components/DatePicker/index.ts +12 -0
  42. package/src/components/DateRangePicker/DateRangePicker.tsx +127 -0
  43. package/src/components/DateRangePicker/daterangepicker.types.ts +53 -0
  44. package/src/components/DateRangePicker/index.ts +2 -0
  45. package/src/components/DateTimePicker/DateTimePicker.tsx +399 -0
  46. package/src/components/DateTimePicker/datetimepicker.types.ts +48 -0
  47. package/src/components/DateTimePicker/index.ts +2 -0
  48. package/src/components/DateTimeRangePicker/DateTimeRangePicker.tsx +679 -0
  49. package/src/components/DateTimeRangePicker/datetimerangepicker.types.ts +62 -0
  50. package/src/components/DateTimeRangePicker/index.ts +2 -0
  51. package/src/components/EmptyState/EmptyState.tsx +29 -0
  52. package/src/components/EmptyState/index.ts +1 -0
  53. package/src/components/Field/Field.tsx +60 -0
  54. package/src/components/Field/index.ts +1 -0
  55. package/src/components/FormField/FormField.tsx +55 -0
  56. package/src/components/FormField/index.ts +2 -0
  57. package/src/components/HeatMap/HeatMapCalendar.tsx +127 -0
  58. package/src/components/HeatMap/HeatMapMatrix.tsx +75 -0
  59. package/src/components/HeatMap/heat-map.utils.ts +15 -0
  60. package/src/components/HeatMap/index.ts +3 -0
  61. package/src/components/HoverCard/HoverCard.tsx +83 -0
  62. package/src/components/HoverCard/components/HoverCardContent.tsx +30 -0
  63. package/src/components/HoverCard/components/HoverCardContext.tsx +22 -0
  64. package/src/components/HoverCard/components/HoverCardTrigger.tsx +32 -0
  65. package/src/components/HoverCard/index.ts +3 -0
  66. package/src/components/Input/Input.tsx +48 -0
  67. package/src/components/Input/index.ts +1 -0
  68. package/src/components/LineChart/LineChart.tsx +251 -0
  69. package/src/components/LineChart/index.ts +1 -0
  70. package/src/components/Markdown/Markdown.tsx +40 -0
  71. package/src/components/Markdown/index.ts +1 -0
  72. package/src/components/Message/Message.tsx +59 -0
  73. package/src/components/Message/components/MessageBody.tsx +9 -0
  74. package/src/components/Message/components/MessageDescription.tsx +9 -0
  75. package/src/components/Message/components/MessageIcon.tsx +13 -0
  76. package/src/components/Message/components/MessageTitle.tsx +9 -0
  77. package/src/components/Message/index.ts +10 -0
  78. package/src/components/MetricList/MetricList.tsx +13 -0
  79. package/src/components/MetricList/MetricRow.tsx +30 -0
  80. package/src/components/MetricList/index.ts +2 -0
  81. package/src/components/Modal/Modal.tsx +146 -0
  82. package/src/components/Modal/components/ModalBody.tsx +9 -0
  83. package/src/components/Modal/components/ModalContext.tsx +27 -0
  84. package/src/components/Modal/components/ModalFooter.tsx +9 -0
  85. package/src/components/Modal/components/ModalHeader.tsx +29 -0
  86. package/src/components/Modal/components/index.ts +9 -0
  87. package/src/components/Modal/index.ts +13 -0
  88. package/src/components/NavBottom/NavBottom.tsx +53 -0
  89. package/src/components/NavBottom/index.ts +3 -0
  90. package/src/components/NavSide/NavItem.tsx +39 -0
  91. package/src/components/NavSide/NavSide.tsx +40 -0
  92. package/src/components/NavSide/index.ts +2 -0
  93. package/src/components/NavSide/types.ts +36 -0
  94. package/src/components/Pagination/Pagination.tsx +86 -0
  95. package/src/components/Pagination/index.ts +2 -0
  96. package/src/components/Popover/Popover.tsx +68 -0
  97. package/src/components/Popover/components/PopoverBody.tsx +32 -0
  98. package/src/components/Popover/components/PopoverClose.tsx +26 -0
  99. package/src/components/Popover/components/PopoverContext.tsx +24 -0
  100. package/src/components/Popover/components/PopoverTrigger.tsx +31 -0
  101. package/src/components/Popover/index.ts +10 -0
  102. package/src/components/ProgressBar/ProgressBar.tsx +42 -0
  103. package/src/components/ProgressBar/index.ts +1 -0
  104. package/src/components/RadioButton/RadioButton.tsx +89 -0
  105. package/src/components/RadioButton/index.ts +1 -0
  106. package/src/components/RadioButtonGroup/RadioButtonGroup.tsx +193 -0
  107. package/src/components/RadioButtonGroup/index.ts +5 -0
  108. package/src/components/SearchInput/SearchInput.tsx +45 -0
  109. package/src/components/SearchInput/index.ts +2 -0
  110. package/src/components/Select/Select.tsx +289 -0
  111. package/src/components/Select/SelectDropdown.tsx +90 -0
  112. package/src/components/Select/SelectTrigger.tsx +130 -0
  113. package/src/components/Select/index.ts +3 -0
  114. package/src/components/Select/useSelectKeyboard.ts +111 -0
  115. package/src/components/Separator/Separator.tsx +20 -0
  116. package/src/components/Separator/index.ts +1 -0
  117. package/src/components/Sheet/Sheet.tsx +136 -0
  118. package/src/components/Sheet/components/SheetBody.tsx +9 -0
  119. package/src/components/Sheet/components/SheetContext.tsx +23 -0
  120. package/src/components/Sheet/components/SheetFooter.tsx +9 -0
  121. package/src/components/Sheet/components/SheetHeader.tsx +29 -0
  122. package/src/components/Sheet/components/index.ts +9 -0
  123. package/src/components/Sheet/index.ts +13 -0
  124. package/src/components/Skeleton/Skeleton.tsx +7 -0
  125. package/src/components/Skeleton/index.ts +1 -0
  126. package/src/components/Sparkline/Sparkline.tsx +93 -0
  127. package/src/components/Sparkline/index.ts +1 -0
  128. package/src/components/Spinner/Spinner.tsx +41 -0
  129. package/src/components/Spinner/index.ts +1 -0
  130. package/src/components/StatsCard/StatsCard.tsx +40 -0
  131. package/src/components/StatsCard/index.ts +1 -0
  132. package/src/components/Switch/Switch.tsx +128 -0
  133. package/src/components/Switch/index.ts +1 -0
  134. package/src/components/Tabs/Tabs.tsx +49 -0
  135. package/src/components/Tabs/components/TabsContext.tsx +35 -0
  136. package/src/components/Tabs/components/TabsList.tsx +98 -0
  137. package/src/components/Tabs/components/TabsPanels.tsx +26 -0
  138. package/src/components/Tabs/components/TabsTrigger.tsx +69 -0
  139. package/src/components/Tabs/index.ts +3 -0
  140. package/src/components/TagChip/TagChip.tsx +46 -0
  141. package/src/components/TagChip/index.ts +1 -0
  142. package/src/components/TagInput/TagInput.tsx +60 -0
  143. package/src/components/TagInput/index.ts +1 -0
  144. package/src/components/Text/Text.tsx +35 -0
  145. package/src/components/Text/index.ts +1 -0
  146. package/src/components/TextInline/TextInline.tsx +35 -0
  147. package/src/components/TextInline/index.ts +1 -0
  148. package/src/components/Textarea/Textarea.tsx +20 -0
  149. package/src/components/Textarea/index.ts +1 -0
  150. package/src/components/TimePicker/PeriodSelector.tsx +28 -0
  151. package/src/components/TimePicker/TimeColumn.tsx +62 -0
  152. package/src/components/TimePicker/TimePicker.tsx +323 -0
  153. package/src/components/TimePicker/index.ts +7 -0
  154. package/src/components/TimePicker/timepicker.hooks.ts +173 -0
  155. package/src/components/TimePicker/timepicker.types.ts +101 -0
  156. package/src/components/Toast/Toast.tsx +111 -0
  157. package/src/components/Toast/index.ts +1 -0
  158. package/src/components/Toggle/Toggle.tsx +72 -0
  159. package/src/components/Toggle/index.ts +1 -0
  160. package/src/components/ToggleGroup/ToggleGroup.tsx +14 -0
  161. package/src/components/ToggleGroup/ToggleGroupContainer.tsx +19 -0
  162. package/src/components/ToggleGroup/ToggleGroupItem.tsx +51 -0
  163. package/src/components/ToggleGroup/ToggleGroupMultiple.tsx +61 -0
  164. package/src/components/ToggleGroup/ToggleGroupSingle.tsx +105 -0
  165. package/src/components/ToggleGroup/index.ts +2 -0
  166. package/src/components/ToggleGroup/toggleGroup.types.ts +55 -0
  167. package/src/components/Tooltip/Tooltip.tsx +66 -0
  168. package/src/components/Tooltip/components/TooltipBody.tsx +30 -0
  169. package/src/components/Tooltip/components/TooltipContext.tsx +22 -0
  170. package/src/components/Tooltip/components/TooltipTrigger.tsx +27 -0
  171. package/src/components/Tooltip/index.ts +9 -0
  172. package/src/date-time/arithmetic.ts +101 -0
  173. package/src/date-time/boundaries.ts +91 -0
  174. package/src/date-time/compare.ts +85 -0
  175. package/src/date-time/duration.ts +63 -0
  176. package/src/date-time/elapsed.ts +18 -0
  177. package/src/date-time/format.ts +722 -0
  178. package/src/date-time/index.ts +279 -0
  179. package/src/date-time/now.ts +70 -0
  180. package/src/date-time/parse.ts +170 -0
  181. package/src/date-time/serialize.ts +90 -0
  182. package/src/date-time/timezone.ts +47 -0
  183. package/src/date-time/validate.ts +278 -0
  184. package/src/hooks/index.ts +10 -0
  185. package/src/hooks/useCollapsible.ts +16 -0
  186. package/src/hooks/useControllableState.ts +54 -0
  187. package/src/hooks/useDebouncedCallback.ts +21 -0
  188. package/src/hooks/useDebouncedState.ts +20 -0
  189. package/src/hooks/useDeviceFormFactor.ts +49 -0
  190. package/src/hooks/useLocalStorage.ts +67 -0
  191. package/src/hooks/useMergedFloatingRef.ts +29 -0
  192. package/src/hooks/usePresence.ts +127 -0
  193. package/src/hooks/useStack.ts +99 -0
  194. package/src/hooks/useTheme.ts +105 -0
  195. package/src/internal/Slot.tsx +79 -0
  196. package/src/internal/index.ts +2 -0
  197. package/src/internal/rovingFocus.ts +39 -0
  198. package/src/internal/types.ts +10 -0
  199. package/src/lib/EmptyBoundary.tsx +12 -0
  200. package/src/lib/ErrorBoundary.tsx +48 -0
  201. package/src/lib/contexts/ComponentsContext/ComponentsContext.tsx +34 -0
  202. package/src/lib/contexts/ComponentsContext/index.ts +1 -0
  203. package/src/lib/contexts/OverlayContext/OverlayContext.tsx +93 -0
  204. package/src/lib/contexts/OverlayContext/hooks/useModal.tsx +125 -0
  205. package/src/lib/contexts/OverlayContext/hooks/useToast.ts +80 -0
  206. package/src/lib/contexts/OverlayContext/index.ts +6 -0
  207. package/src/lib/format.ts +51 -0
  208. package/src/lib/utils.ts +10 -0
  209. package/src/lib/withEmpty.tsx +14 -0
  210. package/src/lib/withErrorBoundary.tsx +16 -0
  211. package/src/lib/withSuspense.tsx +16 -0
  212. package/src/lib/withSuspenseAndErrorBoundary.tsx +26 -0
  213. package/src/styles/base.css +41 -0
  214. package/src/theme/index.ts +37 -0
  215. package/src/theme/palette.json +100 -0
  216. package/src/theme/palette.schema.json +40 -0
  217. package/src/theme/schema.ts +122 -0
  218. package/src/theme/theme.json +349 -0
  219. package/src/theme/theme.schema.json +876 -0
  220. package/src/theme/typography.json +7 -0
  221. package/src/theme/typography.schema.json +36 -0
  222. package/src/typography/Body.tsx +8 -0
  223. package/src/typography/Caption.tsx +8 -0
  224. package/src/typography/Code.tsx +8 -0
  225. package/src/typography/Display.tsx +8 -0
  226. package/src/typography/Emphasis.tsx +8 -0
  227. package/src/typography/Heading.tsx +23 -0
  228. package/src/typography/Label.tsx +10 -0
  229. package/src/typography/Lead.tsx +8 -0
  230. package/src/typography/Mono.tsx +8 -0
  231. package/src/typography/Muted.tsx +8 -0
  232. package/src/typography/SectionTitle.tsx +8 -0
  233. package/src/typography/Subtitle.tsx +8 -0
  234. package/src/typography/Timestamp.tsx +8 -0
  235. package/src/typography/index.ts +10 -0
  236. package/tailwind.config.ts +261 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "./typography.schema.json",
3
+ "fonts": {
4
+ "sans": "Inter Variable, ui-sans-serif, system-ui, sans-serif",
5
+ "mono": "JetBrains Mono Variable, ui-monospace, monospace"
6
+ }
7
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "title": "PA Typography",
4
+ "description": "Typography definition for Personal Assistant",
5
+ "type": "object",
6
+ "required": ["fonts"],
7
+ "properties": {
8
+ "$schema": {
9
+ "type": "string"
10
+ },
11
+ "fonts": {
12
+ "type": "object",
13
+ "description": "Font family definitions",
14
+ "properties": {
15
+ "sans": {
16
+ "type": "string",
17
+ "description": "Sans-serif font stack for body text and UI"
18
+ },
19
+ "mono": {
20
+ "type": "string",
21
+ "description": "Monospace font stack for code and technical content"
22
+ },
23
+ "serif": {
24
+ "type": "string",
25
+ "description": "Serif font stack for headings or special content"
26
+ }
27
+ },
28
+ "required": ["sans", "mono"],
29
+ "additionalProperties": {
30
+ "type": "string",
31
+ "description": "Additional font family definition"
32
+ }
33
+ }
34
+ },
35
+ "additionalProperties": false
36
+ }
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Body = React.forwardRef<HTMLElement, TextProps>(({ as = "p", className, ...props }, ref) => (
6
+ <Text ref={ref} as={as} className={cn("text-fg-normal text-sm", className)} {...props} />
7
+ ));
8
+ Body.displayName = "Body";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Caption = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("text-fg-subtle text-xs", className)} {...props} />
7
+ ));
8
+ Caption.displayName = "Caption";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Code = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} as="code" className={cn("rounded bg-bg-subtle px-1.5 py-0.5 font-mono text-sm", className)} {...props} />
7
+ ));
8
+ Code.displayName = "Code";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Display = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("font-bold text-3xl", className)} {...props} />
7
+ ));
8
+ Display.displayName = "Display";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Emphasis = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("font-medium text-sm", className)} {...props} />
7
+ ));
8
+ Emphasis.displayName = "Emphasis";
@@ -0,0 +1,23 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ const headingSizes = {
6
+ h1: "text-4xl",
7
+ h2: "text-3xl",
8
+ h3: "text-2xl",
9
+ h4: "text-xl",
10
+ h5: "text-lg",
11
+ h6: "text-base",
12
+ } as const;
13
+
14
+ type HeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
15
+
16
+ export type HeadingProps = Omit<TextProps, "as"> & {
17
+ as?: HeadingLevel;
18
+ };
19
+
20
+ export const Heading = React.forwardRef<HTMLElement, HeadingProps>(({ as = "h2", className, ...props }, ref) => (
21
+ <Text ref={ref} as={as} className={cn("font-semibold tracking-tight", headingSizes[as], className)} {...props} />
22
+ ));
23
+ Heading.displayName = "Heading";
@@ -0,0 +1,10 @@
1
+ import { cn } from "@sixthshift/design-system/utils";
2
+ import * as React from "react";
3
+
4
+ export type LabelProps = React.LabelHTMLAttributes<HTMLLabelElement>;
5
+
6
+ export const Label = React.forwardRef<HTMLLabelElement, LabelProps>(({ className, ...props }, ref) => (
7
+ // biome-ignore lint/a11y/noLabelWithoutControl: Generic label component can be used with or without controls via htmlFor prop
8
+ <label ref={ref} className={cn("font-medium text-sm", className)} {...props} />
9
+ ));
10
+ Label.displayName = "Label";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Lead = React.forwardRef<HTMLElement, TextProps>(({ as = "p", className, ...props }, ref) => (
6
+ <Text ref={ref} as={as} className={cn("text-fg-subtle text-lg leading-relaxed", className)} {...props} />
7
+ ));
8
+ Lead.displayName = "Lead";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Mono = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("font-mono text-fg-subtle text-sm", className)} {...props} />
7
+ ));
8
+ Mono.displayName = "Mono";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Muted = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("text-fg-subtle text-sm", className)} {...props} />
7
+ ));
8
+ Muted.displayName = "Muted";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const SectionTitle = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("font-medium text-fg-subtle text-sm uppercase tracking-wide", className)} {...props} />
7
+ ));
8
+ SectionTitle.displayName = "SectionTitle";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Subtitle = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("text-fg-subtle", className)} {...props} />
7
+ ));
8
+ Subtitle.displayName = "Subtitle";
@@ -0,0 +1,8 @@
1
+ import { Text, type TextProps } from "@sixthshift/design-system/text";
2
+ import { cn } from "@sixthshift/design-system/utils";
3
+ import * as React from "react";
4
+
5
+ export const Timestamp = React.forwardRef<HTMLElement, TextProps>(({ className, ...props }, ref) => (
6
+ <Text ref={ref} className={cn("font-mono text-fg-subtle text-xs", className)} {...props} />
7
+ ));
8
+ Timestamp.displayName = "Timestamp";
@@ -0,0 +1,10 @@
1
+ export { Body } from "./Body";
2
+ export { Caption } from "./Caption";
3
+ export { Code } from "./Code";
4
+ export { Display } from "./Display";
5
+ export { Emphasis } from "./Emphasis";
6
+ export { Heading, type HeadingProps } from "./Heading";
7
+ export { Label, type LabelProps } from "./Label";
8
+ export { Lead } from "./Lead";
9
+ export { Muted } from "./Muted";
10
+ export { SectionTitle } from "./SectionTitle";
@@ -0,0 +1,261 @@
1
+ import type { Config } from "tailwindcss";
2
+
3
+ const config: Config = {
4
+ darkMode: ["selector", '[data-theme="dark"]'],
5
+ content: ["./src/**/*.{ts,tsx}"],
6
+ theme: {
7
+ colors: {
8
+ transparent: "transparent",
9
+ current: "currentColor",
10
+ white: "#ffffff",
11
+ black: "#000000",
12
+ bg: {
13
+ overlay: "var(--bg-overlay)",
14
+ strong: "var(--bg-strong)",
15
+ "strong-hovered": "var(--bg-strong-hovered)",
16
+ "strong-pressed": "var(--bg-strong-pressed)",
17
+ "strong-disabled": "var(--bg-strong-disabled)",
18
+ normal: "var(--bg-normal)",
19
+ "normal-hovered": "var(--bg-normal-hovered)",
20
+ "normal-pressed": "var(--bg-normal-pressed)",
21
+ "normal-disabled": "var(--bg-normal-disabled)",
22
+ subtle: "var(--bg-subtle)",
23
+ "subtle-hovered": "var(--bg-subtle-hovered)",
24
+ "subtle-pressed": "var(--bg-subtle-pressed)",
25
+ "subtle-disabled": "var(--bg-subtle-disabled)",
26
+ "brand-subtle": "var(--bg-brand-subtle)",
27
+ "brand-subtle-hovered": "var(--bg-brand-subtle-hovered)",
28
+ "brand-subtle-pressed": "var(--bg-brand-subtle-pressed)",
29
+ "brand-subtle-disabled": "var(--bg-brand-subtle-disabled)",
30
+ brand: "var(--bg-brand)",
31
+ "brand-hovered": "var(--bg-brand-hovered)",
32
+ "brand-pressed": "var(--bg-brand-pressed)",
33
+ "brand-disabled": "var(--bg-brand-disabled)",
34
+ "brand-strong": "var(--bg-brand-strong)",
35
+ "brand-strong-hovered": "var(--bg-brand-strong-hovered)",
36
+ "brand-strong-pressed": "var(--bg-brand-strong-pressed)",
37
+ "brand-strong-disabled": "var(--bg-brand-strong-disabled)",
38
+ "success-subtle": "var(--bg-success-subtle)",
39
+ "success-subtle-hovered": "var(--bg-success-subtle-hovered)",
40
+ "success-subtle-pressed": "var(--bg-success-subtle-pressed)",
41
+ "success-subtle-disabled": "var(--bg-success-subtle-disabled)",
42
+ success: "var(--bg-success)",
43
+ "success-hovered": "var(--bg-success-hovered)",
44
+ "success-pressed": "var(--bg-success-pressed)",
45
+ "success-disabled": "var(--bg-success-disabled)",
46
+ "success-strong": "var(--bg-success-strong)",
47
+ "success-strong-hovered": "var(--bg-success-strong-hovered)",
48
+ "success-strong-pressed": "var(--bg-success-strong-pressed)",
49
+ "success-strong-disabled": "var(--bg-success-strong-disabled)",
50
+ "warning-subtle": "var(--bg-warning-subtle)",
51
+ "warning-subtle-hovered": "var(--bg-warning-subtle-hovered)",
52
+ "warning-subtle-pressed": "var(--bg-warning-subtle-pressed)",
53
+ "warning-subtle-disabled": "var(--bg-warning-subtle-disabled)",
54
+ warning: "var(--bg-warning)",
55
+ "warning-hovered": "var(--bg-warning-hovered)",
56
+ "warning-pressed": "var(--bg-warning-pressed)",
57
+ "warning-disabled": "var(--bg-warning-disabled)",
58
+ "warning-strong": "var(--bg-warning-strong)",
59
+ "warning-strong-hovered": "var(--bg-warning-strong-hovered)",
60
+ "warning-strong-pressed": "var(--bg-warning-strong-pressed)",
61
+ "warning-strong-disabled": "var(--bg-warning-strong-disabled)",
62
+ "danger-subtle": "var(--bg-danger-subtle)",
63
+ "danger-subtle-hovered": "var(--bg-danger-subtle-hovered)",
64
+ "danger-subtle-pressed": "var(--bg-danger-subtle-pressed)",
65
+ "danger-subtle-disabled": "var(--bg-danger-subtle-disabled)",
66
+ danger: "var(--bg-danger)",
67
+ "danger-hovered": "var(--bg-danger-hovered)",
68
+ "danger-pressed": "var(--bg-danger-pressed)",
69
+ "danger-disabled": "var(--bg-danger-disabled)",
70
+ "danger-strong": "var(--bg-danger-strong)",
71
+ "danger-strong-hovered": "var(--bg-danger-strong-hovered)",
72
+ "danger-strong-pressed": "var(--bg-danger-strong-pressed)",
73
+ "danger-strong-disabled": "var(--bg-danger-strong-disabled)",
74
+ },
75
+ fg: {
76
+ strong: "var(--fg-strong)",
77
+ "strong-hovered": "var(--fg-strong-hovered)",
78
+ "strong-pressed": "var(--fg-strong-pressed)",
79
+ "strong-disabled": "var(--fg-strong-disabled)",
80
+ "on-strong": "var(--fg-on-strong)",
81
+ "on-strong-hovered": "var(--fg-on-strong-hovered)",
82
+ "on-strong-pressed": "var(--fg-on-strong-pressed)",
83
+ "on-strong-disabled": "var(--fg-on-strong-disabled)",
84
+ normal: "var(--fg-normal)",
85
+ "normal-hovered": "var(--fg-normal-hovered)",
86
+ "normal-pressed": "var(--fg-normal-pressed)",
87
+ "normal-disabled": "var(--fg-normal-disabled)",
88
+ subtle: "var(--fg-subtle)",
89
+ "subtle-hovered": "var(--fg-subtle-hovered)",
90
+ "subtle-pressed": "var(--fg-subtle-pressed)",
91
+ "subtle-disabled": "var(--fg-subtle-disabled)",
92
+ brand: "var(--fg-brand)",
93
+ "brand-hovered": "var(--fg-brand-hovered)",
94
+ "brand-pressed": "var(--fg-brand-pressed)",
95
+ "brand-disabled": "var(--fg-brand-disabled)",
96
+ "on-brand-subtle": "var(--fg-on-brand-subtle)",
97
+ "on-brand-subtle-hovered": "var(--fg-on-brand-subtle-hovered)",
98
+ "on-brand-subtle-pressed": "var(--fg-on-brand-subtle-pressed)",
99
+ "on-brand-subtle-disabled": "var(--fg-on-brand-subtle-disabled)",
100
+ "on-brand": "var(--fg-on-brand)",
101
+ "on-brand-hovered": "var(--fg-on-brand-hovered)",
102
+ "on-brand-pressed": "var(--fg-on-brand-pressed)",
103
+ "on-brand-disabled": "var(--fg-on-brand-disabled)",
104
+ "on-brand-strong": "var(--fg-on-brand-strong)",
105
+ "on-brand-strong-hovered": "var(--fg-on-brand-strong-hovered)",
106
+ "on-brand-strong-pressed": "var(--fg-on-brand-strong-pressed)",
107
+ "on-brand-strong-disabled": "var(--fg-on-brand-strong-disabled)",
108
+ success: "var(--fg-success)",
109
+ "success-hovered": "var(--fg-success-hovered)",
110
+ "success-pressed": "var(--fg-success-pressed)",
111
+ "success-disabled": "var(--fg-success-disabled)",
112
+ "on-success-subtle": "var(--fg-on-success-subtle)",
113
+ "on-success-subtle-hovered": "var(--fg-on-success-subtle-hovered)",
114
+ "on-success-subtle-pressed": "var(--fg-on-success-subtle-pressed)",
115
+ "on-success-subtle-disabled": "var(--fg-on-success-subtle-disabled)",
116
+ "on-success": "var(--fg-on-success)",
117
+ "on-success-hovered": "var(--fg-on-success-hovered)",
118
+ "on-success-pressed": "var(--fg-on-success-pressed)",
119
+ "on-success-disabled": "var(--fg-on-success-disabled)",
120
+ warning: "var(--fg-warning)",
121
+ "warning-hovered": "var(--fg-warning-hovered)",
122
+ "warning-pressed": "var(--fg-warning-pressed)",
123
+ "warning-disabled": "var(--fg-warning-disabled)",
124
+ "on-warning-subtle": "var(--fg-on-warning-subtle)",
125
+ "on-warning-subtle-hovered": "var(--fg-on-warning-subtle-hovered)",
126
+ "on-warning-subtle-pressed": "var(--fg-on-warning-subtle-pressed)",
127
+ "on-warning-subtle-disabled": "var(--fg-on-warning-subtle-disabled)",
128
+ "on-warning": "var(--fg-on-warning)",
129
+ "on-warning-hovered": "var(--fg-on-warning-hovered)",
130
+ "on-warning-pressed": "var(--fg-on-warning-pressed)",
131
+ "on-warning-disabled": "var(--fg-on-warning-disabled)",
132
+ danger: "var(--fg-danger)",
133
+ "danger-hovered": "var(--fg-danger-hovered)",
134
+ "danger-pressed": "var(--fg-danger-pressed)",
135
+ "danger-disabled": "var(--fg-danger-disabled)",
136
+ "on-danger-subtle": "var(--fg-on-danger-subtle)",
137
+ "on-danger-subtle-hovered": "var(--fg-on-danger-subtle-hovered)",
138
+ "on-danger-subtle-pressed": "var(--fg-on-danger-subtle-pressed)",
139
+ "on-danger-subtle-disabled": "var(--fg-on-danger-subtle-disabled)",
140
+ "on-danger": "var(--fg-on-danger)",
141
+ "on-danger-hovered": "var(--fg-on-danger-hovered)",
142
+ "on-danger-pressed": "var(--fg-on-danger-pressed)",
143
+ "on-danger-disabled": "var(--fg-on-danger-disabled)",
144
+ },
145
+ border: {
146
+ strong: "var(--border-strong)",
147
+ "strong-hovered": "var(--border-strong-hovered)",
148
+ "strong-pressed": "var(--border-strong-pressed)",
149
+ "strong-disabled": "var(--border-strong-disabled)",
150
+ normal: "var(--border-normal)",
151
+ "normal-hovered": "var(--border-normal-hovered)",
152
+ "normal-pressed": "var(--border-normal-pressed)",
153
+ "normal-disabled": "var(--border-normal-disabled)",
154
+ subtle: "var(--border-subtle)",
155
+ "subtle-hovered": "var(--border-subtle-hovered)",
156
+ "subtle-pressed": "var(--border-subtle-pressed)",
157
+ "subtle-disabled": "var(--border-subtle-disabled)",
158
+ "brand-subtle": "var(--border-brand-subtle)",
159
+ "brand-subtle-hovered": "var(--border-brand-subtle-hovered)",
160
+ "brand-subtle-pressed": "var(--border-brand-subtle-pressed)",
161
+ "brand-subtle-disabled": "var(--border-brand-subtle-disabled)",
162
+ brand: "var(--border-brand)",
163
+ "brand-hovered": "var(--border-brand-hovered)",
164
+ "brand-pressed": "var(--border-brand-pressed)",
165
+ "brand-disabled": "var(--border-brand-disabled)",
166
+ "brand-strong": "var(--border-brand-strong)",
167
+ "brand-strong-hovered": "var(--border-brand-strong-hovered)",
168
+ "brand-strong-pressed": "var(--border-brand-strong-pressed)",
169
+ "brand-strong-disabled": "var(--border-brand-strong-disabled)",
170
+ success: "var(--border-success)",
171
+ "success-hovered": "var(--border-success-hovered)",
172
+ "success-pressed": "var(--border-success-pressed)",
173
+ "success-disabled": "var(--border-success-disabled)",
174
+ warning: "var(--border-warning)",
175
+ "warning-hovered": "var(--border-warning-hovered)",
176
+ "warning-pressed": "var(--border-warning-pressed)",
177
+ "warning-disabled": "var(--border-warning-disabled)",
178
+ danger: "var(--border-danger)",
179
+ "danger-hovered": "var(--border-danger-hovered)",
180
+ "danger-pressed": "var(--border-danger-pressed)",
181
+ "danger-disabled": "var(--border-danger-disabled)",
182
+ },
183
+ focus: {
184
+ ring: "var(--focus-ring)",
185
+ },
186
+ },
187
+ zIndex: {
188
+ auto: "auto",
189
+ "content-sticky": "10",
190
+ "app-bar": "30",
191
+ sheet: "50",
192
+ popover: "60",
193
+ modal: "70",
194
+ toast: "9999",
195
+ },
196
+ extend: {
197
+ keyframes: {
198
+ "fade-in": {
199
+ from: { opacity: "0" },
200
+ to: { opacity: "1" },
201
+ },
202
+ "fade-out": {
203
+ from: { opacity: "1" },
204
+ to: { opacity: "0" },
205
+ },
206
+ "slide-up-in": {
207
+ from: { transform: "translateY(100%)" },
208
+ to: { transform: "translateY(0)" },
209
+ },
210
+ "slide-up-out": {
211
+ from: { transform: "translateY(0)" },
212
+ to: { transform: "translateY(100%)" },
213
+ },
214
+ "slide-right-in": {
215
+ from: { transform: "translateX(100%)" },
216
+ to: { transform: "translateX(0)" },
217
+ },
218
+ "slide-right-out": {
219
+ from: { transform: "translateX(0)" },
220
+ to: { transform: "translateX(100%)" },
221
+ },
222
+ "slide-left-in": {
223
+ from: { transform: "translateX(-100%)" },
224
+ to: { transform: "translateX(0)" },
225
+ },
226
+ "slide-left-out": {
227
+ from: { transform: "translateX(0)" },
228
+ to: { transform: "translateX(-100%)" },
229
+ },
230
+ },
231
+ animation: {
232
+ "fade-in": "fade-in 200ms ease-out forwards",
233
+ "fade-out": "fade-out 200ms ease-out forwards",
234
+ "fade-in-slow": "fade-in 300ms ease-out forwards",
235
+ "fade-out-slow": "fade-out 300ms ease-out forwards",
236
+ "slide-up-in": "slide-up-in 200ms ease-out forwards",
237
+ "slide-up-out": "slide-up-out 200ms ease-out forwards",
238
+ "slide-right-in": "slide-right-in 200ms ease-out forwards",
239
+ "slide-right-out": "slide-right-out 200ms ease-out forwards",
240
+ "slide-left-in": "slide-left-in 200ms ease-out forwards",
241
+ "slide-left-out": "slide-left-out 200ms ease-out forwards",
242
+ },
243
+ },
244
+ },
245
+ plugins: [
246
+ // biome-ignore lint/suspicious/noExplicitAny: Tailwind plugin API accepts nested CSS-in-JS objects
247
+ ({ addBase }: { addBase: (styles: any) => void }) => {
248
+ addBase({
249
+ "@media (prefers-reduced-motion: reduce)": {
250
+ "*, *::before, *::after": {
251
+ "animation-duration": "0.01ms !important",
252
+ "animation-iteration-count": "1 !important",
253
+ "transition-duration": "0.01ms !important",
254
+ },
255
+ },
256
+ });
257
+ },
258
+ ],
259
+ };
260
+
261
+ export default config;