@arctura/atomics 0.0.1

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 (87) hide show
  1. package/dist/hooks.cjs +1 -0
  2. package/dist/hooks.js +2 -0
  3. package/dist/index.cjs +1 -0
  4. package/dist/index.js +1980 -0
  5. package/dist/lib/hooks.d.ts +5 -0
  6. package/dist/lib/hooks.d.ts.map +1 -0
  7. package/dist/lib/index.d.ts +6 -0
  8. package/dist/lib/index.d.ts.map +1 -0
  9. package/dist/lib/useBreakpoints.d.ts +48 -0
  10. package/dist/lib/useBreakpoints.d.ts.map +1 -0
  11. package/dist/lib/useControlled.d.ts +38 -0
  12. package/dist/lib/useControlled.d.ts.map +1 -0
  13. package/dist/src/badge/Badge.d.ts +116 -0
  14. package/dist/src/badge/Badge.d.ts.map +1 -0
  15. package/dist/src/badge/index.d.ts +3 -0
  16. package/dist/src/badge/index.d.ts.map +1 -0
  17. package/dist/src/buttons/Button.d.ts +126 -0
  18. package/dist/src/buttons/Button.d.ts.map +1 -0
  19. package/dist/src/buttons/Fab.d.ts +114 -0
  20. package/dist/src/buttons/Fab.d.ts.map +1 -0
  21. package/dist/src/buttons/IconButton.d.ts +105 -0
  22. package/dist/src/buttons/IconButton.d.ts.map +1 -0
  23. package/dist/src/buttons/index.d.ts +9 -0
  24. package/dist/src/buttons/index.d.ts.map +1 -0
  25. package/dist/src/card/Card.d.ts +35 -0
  26. package/dist/src/card/Card.d.ts.map +1 -0
  27. package/dist/src/card/Footer.d.ts +67 -0
  28. package/dist/src/card/Footer.d.ts.map +1 -0
  29. package/dist/src/card/Header.d.ts +56 -0
  30. package/dist/src/card/Header.d.ts.map +1 -0
  31. package/dist/src/card/Media.d.ts +65 -0
  32. package/dist/src/card/Media.d.ts.map +1 -0
  33. package/dist/src/card/index.d.ts +11 -0
  34. package/dist/src/card/index.d.ts.map +1 -0
  35. package/dist/src/carousel/Carousel.d.ts +124 -0
  36. package/dist/src/carousel/Carousel.d.ts.map +1 -0
  37. package/dist/src/carousel/Hero.d.ts +156 -0
  38. package/dist/src/carousel/Hero.d.ts.map +1 -0
  39. package/dist/src/carousel/index.d.ts +4 -0
  40. package/dist/src/carousel/index.d.ts.map +1 -0
  41. package/dist/src/drawer/Drawer.d.ts +40 -0
  42. package/dist/src/drawer/Drawer.d.ts.map +1 -0
  43. package/dist/src/drawer/index.d.ts +5 -0
  44. package/dist/src/drawer/index.d.ts.map +1 -0
  45. package/dist/src/form/Form.d.ts +168 -0
  46. package/dist/src/form/Form.d.ts.map +1 -0
  47. package/dist/src/form/TextArea.d.ts +266 -0
  48. package/dist/src/form/TextArea.d.ts.map +1 -0
  49. package/dist/src/form/TextInput.d.ts +200 -0
  50. package/dist/src/form/TextInput.d.ts.map +1 -0
  51. package/dist/src/form/index.d.ts +7 -0
  52. package/dist/src/form/index.d.ts.map +1 -0
  53. package/dist/src/index.d.ts +21 -0
  54. package/dist/src/index.d.ts.map +1 -0
  55. package/dist/src/list/List.d.ts +122 -0
  56. package/dist/src/list/List.d.ts.map +1 -0
  57. package/dist/src/list/ListItem.d.ts +157 -0
  58. package/dist/src/list/ListItem.d.ts.map +1 -0
  59. package/dist/src/list/index.d.ts +6 -0
  60. package/dist/src/list/index.d.ts.map +1 -0
  61. package/dist/src/progress-stepper/Connector.d.ts +48 -0
  62. package/dist/src/progress-stepper/Connector.d.ts.map +1 -0
  63. package/dist/src/progress-stepper/Node.d.ts +75 -0
  64. package/dist/src/progress-stepper/Node.d.ts.map +1 -0
  65. package/dist/src/progress-stepper/ProgressStepper.d.ts +108 -0
  66. package/dist/src/progress-stepper/ProgressStepper.d.ts.map +1 -0
  67. package/dist/src/progress-stepper/Step.d.ts +93 -0
  68. package/dist/src/progress-stepper/Step.d.ts.map +1 -0
  69. package/dist/src/progress-stepper/index.d.ts +10 -0
  70. package/dist/src/progress-stepper/index.d.ts.map +1 -0
  71. package/dist/src/select/Select.d.ts +98 -0
  72. package/dist/src/select/Select.d.ts.map +1 -0
  73. package/dist/src/select/index.d.ts +5 -0
  74. package/dist/src/select/index.d.ts.map +1 -0
  75. package/dist/src/typography/Link.d.ts +86 -0
  76. package/dist/src/typography/Link.d.ts.map +1 -0
  77. package/dist/src/typography/Typography.d.ts +148 -0
  78. package/dist/src/typography/Typography.d.ts.map +1 -0
  79. package/dist/src/typography/index.d.ts +7 -0
  80. package/dist/src/typography/index.d.ts.map +1 -0
  81. package/dist/src/utils/capitalize.d.ts +3 -0
  82. package/dist/src/utils/capitalize.d.ts.map +1 -0
  83. package/dist/src/utils/index.d.ts +2 -0
  84. package/dist/src/utils/index.d.ts.map +1 -0
  85. package/dist/useBreakpoints-CXOalIdM.js +37 -0
  86. package/dist/useBreakpoints-nd-Blu7O.cjs +1 -0
  87. package/package.json +67 -0
@@ -0,0 +1,93 @@
1
+ import type { HTMLAttributes, FC, MouseEvent, ReactNode, Ref } from 'react';
2
+ import type { IconDefinition } from '@fortawesome/free-solid-svg-icons';
3
+ import type { FabClasses } from '@/src/buttons';
4
+ import type { NodeClasses } from '@/src/progress-stepper/Node';
5
+ /**
6
+ * Class name overrides for the `Step` component parts.
7
+ */
8
+ interface StepClasses {
9
+ /** Classes applied to the description wrapper. */
10
+ descriptionContainer?: string;
11
+ /** Classes applied to the step body content. */
12
+ body?: string;
13
+ /** Class overrides passed to the node or fab used for the step marker. */
14
+ node?: FabClasses | NodeClasses;
15
+ /** Classes applied to the node container wrapper. */
16
+ nodeContainer?: string;
17
+ /** Classes applied to the root step container. */
18
+ root?: string;
19
+ /** Classes applied to the step title. */
20
+ title?: string;
21
+ }
22
+ /**
23
+ * @description Allowed color variants for the step/node components.
24
+ * - `primary`: Uses the primary color from the theme.
25
+ * - `secondary`: Uses the secondary color from the theme.
26
+ * - `accent`: Uses the accent color from the theme.
27
+ * - `error`: Uses the error color from the theme.
28
+ * - `info`: Uses the info color from the theme.
29
+ * - `warning`: Uses the warning color from the theme.
30
+ */
31
+ type StepColor = 'primary' | 'secondary' | 'accent' | 'error' | 'info' | 'warning';
32
+ /**
33
+ * @interface StepProps
34
+ * @extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick'>
35
+ * @description Props accepted by the `Step` component.
36
+ */
37
+ interface StepProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onClick' | 'className'> {
38
+ /** Whether the step is currently active (shows expanded content). */
39
+ active?: boolean;
40
+ /** Optional class overrides for the step container, node, and content. */
41
+ classes?: StepClasses;
42
+ /** Color variant for the step node. */
43
+ color?: StepColor;
44
+ /** Whether the step is marked as completed. */
45
+ completed?: boolean;
46
+ /** Optional descriptive content displayed when the step is active. */
47
+ description?: ReactNode;
48
+ /** Optional FontAwesome icon rendered inside the node. */
49
+ icon?: IconDefinition;
50
+ /** Zero-based index assigned by the parent stepper. */
51
+ index?: number;
52
+ /** Optional label displayed when step is active. */
53
+ label?: string;
54
+ /** When true, stepper enforces linear progression; when false the step is interactive. */
55
+ linear?: boolean;
56
+ /** Click handler for interactive (non-linear) steps. */
57
+ onClick?: (event: MouseEvent<HTMLButtonElement>) => void;
58
+ /** Layout orientation for the step content. */
59
+ orientation?: 'horizontal' | 'vertical';
60
+ /** Ref forwarded to the step container element. */
61
+ ref?: Ref<HTMLDivElement>;
62
+ /** Title displayed when the step is active. */
63
+ title?: string;
64
+ }
65
+ /**
66
+ * @component Step
67
+ * @description
68
+ * Renders a single step node used by `ProgressStepper`.
69
+ * - When `linear` is `true`, renders a static `Node`; when `false`, renders an interactive `Fab`.
70
+ * - When `active` is `true`, the step displays its `title` and `description`.
71
+ *
72
+ * @param {StepProps} props - Props for configuring appearance and behavior.
73
+ * @returns {JSX.Element} The rendered step element.
74
+ *
75
+ * @example
76
+ * ```tsx
77
+ * import { Step } from '@/src';
78
+ *
79
+ * const MyStep = () => (
80
+ * <Step
81
+ * active={true}
82
+ * color="primary"
83
+ * title="Step Title"
84
+ * description="Detailed description of the step content."
85
+ * icon={faMugHot}
86
+ * />
87
+ * );
88
+ * ```
89
+ */
90
+ declare const Step: FC<StepProps>;
91
+ export { Step };
92
+ export type { StepClasses };
93
+ //# sourceMappingURL=Step.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Step.d.ts","sourceRoot":"","sources":["../../../src/progress-stepper/Step.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,cAAc,EACd,EAAE,EACF,UAAU,EACV,SAAS,EAET,GAAG,EACJ,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI/D;;GAEG;AACH,UAAU,WAAW;IACnB,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,IAAI,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAChC,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,KAAK,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnF;;;;GAIG;AACH,UAAU,SAAU,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC;IACvF,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,uCAAuC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wDAAwD;IACxD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,+CAA+C;IAC/C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC,mDAAmD;IACnD,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqCD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,QAAA,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CA8FvB,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Connector } from './Connector';
2
+ import type { ConnectorClasses } from './Connector';
3
+ import { ProgressStepper } from './ProgressStepper';
4
+ import type { ProgressStepperClasses } from './ProgressStepper';
5
+ import { Step } from './Step';
6
+ import type { StepClasses } from './Step';
7
+ import type { StepType } from './ProgressStepper';
8
+ export { Connector, ProgressStepper, Step };
9
+ export type { ConnectorClasses, ProgressStepperClasses, StepClasses, StepType };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/progress-stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { FC, HTMLAttributes, MouseEvent, Ref } from 'react';
2
+ import type { IconDefinition } from '@fortawesome/free-solid-svg-icons';
3
+ /** Option data consumed by the Select component. */
4
+ interface Option {
5
+ /** Value used for selection state and form submission. */
6
+ value: string;
7
+ /** Visible label shown in the dropdown. */
8
+ label: string;
9
+ /** Optional icon rendered alongside the label. */
10
+ icon?: IconDefinition;
11
+ }
12
+ /** Optional class name hooks for the Select component internals. */
13
+ interface SelectClasses {
14
+ /** Class names applied to the outer container. */
15
+ container?: string;
16
+ /** Class names applied to the chevron icon. */
17
+ icon?: string;
18
+ /** Class names applied to the icon wrapper. */
19
+ iconContainer?: string;
20
+ /** Class names applied to the label above the control. */
21
+ label?: string;
22
+ /** Class names applied to the placeholder value. */
23
+ placeholder?: string;
24
+ /** Class names applied to the option row and option icon. */
25
+ option?: {
26
+ root?: string;
27
+ icon?: string;
28
+ };
29
+ /** Class names applied to the dropdown list container. */
30
+ optionsContainer?: string;
31
+ /** Class names applied to the root wrapper. */
32
+ root?: string;
33
+ }
34
+ /** Props for the Select component. */
35
+ interface SelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'className'> {
36
+ /** Class name hooks for the internal elements. */
37
+ classes?: SelectClasses;
38
+ /** Initial value used when the component is uncontrolled. */
39
+ defaultValue?: string;
40
+ /** Whether the select is disabled. */
41
+ disabled?: boolean;
42
+ /** Label rendered above the select trigger. */
43
+ label?: string;
44
+ /** Name applied to the hidden input for form integration. */
45
+ name?: string;
46
+ /** Callback fired when an option is selected. */
47
+ onChange?: (event: MouseEvent<HTMLLIElement>) => void;
48
+ /** Available options to display in the dropdown. */
49
+ options?: Option[];
50
+ /** Placeholder shown when no selection is active. */
51
+ placeholder?: string;
52
+ /** Ref forwarded to the root wrapper. */
53
+ ref?: Ref<HTMLDivElement>;
54
+ /** Keyboard tab index for the select trigger and options. */
55
+ tabIndex?: number;
56
+ /** Visual treatment for the dropdown. */
57
+ variant?: 'outline' | 'filled';
58
+ /** Controlled selected value. */
59
+ value?: string;
60
+ }
61
+ /**
62
+ * Select dropdown component.
63
+ *
64
+ * Renders a styled dropdown menu for selecting an option from a list.
65
+ * Supports both controlled and uncontrolled usage, keyboard navigation, and optional icons for options.
66
+ *
67
+ * - Controlled: Provide `value` and `onChange` props to manage selection state externally.
68
+ * - Uncontrolled: Provide `defaultValue` for initial selection and let the component manage state internally.
69
+ *
70
+ * @param {SelectProps} props - The props for the Select component.
71
+ * @returns {JSX.Element} The rendered select dropdown.
72
+ *
73
+ * @example
74
+ * ```tsx
75
+ * import { Select } from '@/src/select/Select';
76
+ *
77
+ * function App() {
78
+ * const options = [
79
+ * { value: 'option1', label: 'Option 1' },
80
+ * { value: 'option2', label: 'Option 2', icon: faStar },
81
+ * ];
82
+ *
83
+ * return (
84
+ * <Select
85
+ * label="Choose an option"
86
+ * options={options}
87
+ * placeholder="Select an option"
88
+ * />
89
+ * );
90
+ * ```
91
+ *
92
+ * @see Option
93
+ * @see SelectProps
94
+ */
95
+ declare const Select: FC<SelectProps>;
96
+ export { Select };
97
+ export type { SelectClasses };
98
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../src/select/Select.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,cAAc,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAIjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAMxE,oDAAoD;AACpD,UAAU,MAAM;IACd,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,IAAI,CAAC,EAAE,cAAc,CAAC;CACvB;AAED,oEAAoE;AACpE,UAAU,aAAa;IACrB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+CAA+C;IAC/C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,sCAAsC;AACtC,UAAU,WAAY,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAC1F,kDAAkD;IAClD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,6DAA6D;IAC7D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;IACtD,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,qDAAqD;IACrD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,GAAG,CAAC,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC;IAC1B,6DAA6D;IAC7D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CA6J3B,CAAC;AAIF,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Select } from './Select';
2
+ import type { SelectClasses } from './Select';
3
+ export { Select };
4
+ export type { SelectClasses };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/select/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,86 @@
1
+ import type { AnchorHTMLAttributes, FC, MouseEvent, ReactNode, Ref } from 'react';
2
+ import type { TypographyColor, TypographyProps as TypographyComponentProps, TypographyVariant } from '@/src/typography/Typography';
3
+ /**
4
+ * Optional class name overrides for the anchor wrapper and Typography content.
5
+ */
6
+ interface LinkClasses {
7
+ /** Extra classes applied to the outer anchor element. */
8
+ anchor?: string;
9
+ /** Extra classes applied to the inner Typography element. */
10
+ typography?: string;
11
+ }
12
+ /**
13
+ * Typography props allowed through Link after excluding anchor-specific fields.
14
+ */
15
+ type TypographyProps = Omit<TypographyComponentProps, 'className' | 'color' | 'ref' | 'variant' | 'target' | 'href' | 'onClick'>;
16
+ /**
17
+ * Props for the Link component, combining anchor behavior with Typography styling.
18
+ */
19
+ interface LinkProps extends TypographyProps {
20
+ /** Additional props forwarded to the anchor element. */
21
+ anchorProps?: AnchorHTMLAttributes<HTMLAnchorElement>;
22
+ /** Ref for the outer anchor element. */
23
+ anchorRef?: Ref<HTMLAnchorElement>;
24
+ /** Content rendered inside the link. */
25
+ children?: ReactNode;
26
+ /** Class overrides for the anchor and Typography elements. */
27
+ classes?: LinkClasses;
28
+ /** Typography color variant applied to the inner text. */
29
+ color?: TypographyColor;
30
+ /** Destination URL for the link. */
31
+ href?: string;
32
+ /** Click handler attached to the anchor element. */
33
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
34
+ /** Target browsing context for the anchor element. */
35
+ target?: string;
36
+ /** Typography variant used to choose the rendered text style. */
37
+ variant?: TypographyVariant;
38
+ }
39
+ /**
40
+ * Link component that pairs a native anchor with the Typography system.
41
+ *
42
+ * Use this when you want link behavior, theme-aware text styling, and the
43
+ * same variant handling used throughout the typography atoms. The component
44
+ * keeps anchor concerns on the outer element and typography concerns on the
45
+ * inner text, so you can style each layer independently.
46
+ *
47
+ * @example
48
+ * ```tsx
49
+ * import { Link } from '@/src/typography';
50
+ *
51
+ * export function ContactLinks() {
52
+ * return (
53
+ * <div className="mg:flex mg:flex-col mg:gap-3">
54
+ * <Link
55
+ * href="mailto:hello@example.com"
56
+ * variant="h3"
57
+ * color="primary"
58
+ * classes={{
59
+ * anchor: 'mg:inline-flex',
60
+ * typography: 'mg:font-semibold',
61
+ * }}
62
+ * >
63
+ * hello@example.com
64
+ * </Link>
65
+ *
66
+ * <Link
67
+ * href="https://example.com/projects"
68
+ * target="_blank"
69
+ * rel="noreferrer"
70
+ * variant="base"
71
+ * color="secondary"
72
+ * anchorProps={{
73
+ * 'aria-label': 'Open projects page in a new tab',
74
+ * }}
75
+ * >
76
+ * View projects
77
+ * </Link>
78
+ * </div>
79
+ * );
80
+ * }
81
+ * ```
82
+ */
83
+ declare const Link: FC<LinkProps>;
84
+ export { Link };
85
+ export type { LinkClasses };
86
+ //# sourceMappingURL=Link.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.d.ts","sourceRoot":"","sources":["../../../src/typography/Link.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAElF,OAAO,KAAK,EAGV,eAAe,EACf,eAAe,IAAI,wBAAwB,EAC3C,iBAAiB,EAClB,MAAM,6BAA6B,CAAC;AAarC;;GAEG;AACH,UAAU,WAAW;IACnB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,KAAK,eAAe,GAAG,IAAI,CACzB,wBAAwB,EACxB,WAAW,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAC1E,CAAC;AAEF;;GAEG;AACH,UAAU,SAAU,SAAQ,eAAe;IACzC,wDAAwD;IACxD,WAAW,CAAC,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,CAAC;IACtD,wCAAwC;IACxC,SAAS,CAAC,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,oCAAoC;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IACzD,sDAAsD;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,QAAA,MAAM,IAAI,EAAE,EAAE,CAAC,SAAS,CAgEvB,CAAC;AAIF,OAAO,EAAE,IAAI,EAAE,CAAC;AAChB,YAAY,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,148 @@
1
+ import type { HTMLAttributes, JSX, ReactNode, Ref } from 'react';
2
+ /**
3
+ * Number of lines to clamp text to.
4
+ * Used for truncating text with CSS line clamping utilities.
5
+ * Valid values: 1 to 10.
6
+ */
7
+ type ClampLine = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
8
+ /**
9
+ * TypographyColor options for Typography text.
10
+ * Determines the text color utility class applied.
11
+ *
12
+ * - 'black': Solid black color
13
+ * - 'primary': Main foreground color
14
+ * - 'secondary': Secondary color
15
+ * - 'accent': Accent color
16
+ * - 'subtle': Subtle/less prominent color
17
+ * - 'inverse': For use on dark backgrounds
18
+ * - 'white': Solid white color
19
+ */
20
+ type TypographyColor = 'active' | 'black' | 'primary' | 'secondary' | 'accent' | 'subtle' | 'inverse' | 'white';
21
+ /**
22
+ * Heading tag variants for Typography.
23
+ * Determines which HTML heading element is rendered.
24
+ * Valid values: 'h1' through 'h6'.
25
+ */
26
+ type HeadingVariant = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
27
+ /**
28
+ * List of all valid heading variants for Typography.
29
+ * Used internally for type checks and rendering.
30
+ * @see HeadingVariant
31
+ */
32
+ declare const headingVariants: HeadingVariant[];
33
+ /**
34
+ * Paragraph style variants for Typography.
35
+ * Determines the text size and style for paragraphs and spans.
36
+ * Valid values: 'base', 'small', 'large'.
37
+ */
38
+ type ParagraphVariant = 'base' | 'small' | 'large';
39
+ /**
40
+ * Combined heading and paragraph variants supported by Typography.
41
+ * Used internally for responsive text sizing and variant lookups.
42
+ */
43
+ type TypographyVariant = HeadingVariant | ParagraphVariant;
44
+ /**
45
+ * List of all valid paragraph variants for Typography.
46
+ * Used internally for type checks and rendering.
47
+ * @see ParagraphVariant
48
+ */
49
+ declare const paragraphVariants: ParagraphVariant[];
50
+ /**
51
+ * Common base props for Typography components.
52
+ */
53
+ interface BaseProps {
54
+ /** Text alignment. */
55
+ align?: 'left' | 'center' | 'right' | 'justify';
56
+ /** Whether to use bold font weight. */
57
+ bold?: boolean;
58
+ /** Additional CSS classes to apply. */
59
+ className?: string;
60
+ /** Text color variant. */
61
+ color?: TypographyColor;
62
+ /** Number of lines to clamp, truncating overflow. */
63
+ clamp?: ClampLine;
64
+ /** Content to render inside the component. */
65
+ children?: ReactNode;
66
+ /** Removes the default vertical padding when true. */
67
+ removePadding?: boolean;
68
+ /** Renders the content as a `span` instead of a heading or paragraph. */
69
+ span?: boolean;
70
+ /** Truncates text with an ellipsis when it overflows. */
71
+ truncate?: boolean;
72
+ /** Underlines the text. */
73
+ underline?: boolean;
74
+ }
75
+ /**
76
+ * Props for heading elements (h1-h6) in Typography.
77
+ */
78
+ interface HeadingProps extends HTMLAttributes<HTMLHeadingElement> {
79
+ /** React ref for the heading element. */
80
+ ref?: Ref<HTMLHeadingElement>;
81
+ /** Specifies which heading tag to render (`h1`-`h6`). */
82
+ variant?: HeadingVariant;
83
+ }
84
+ /**
85
+ * Props for paragraph elements in Typography.
86
+ */
87
+ interface ParagraphProps extends HTMLAttributes<HTMLParagraphElement> {
88
+ /** React ref for the paragraph element. */
89
+ ref?: Ref<HTMLParagraphElement>;
90
+ /** Paragraph style variant (`base`, `small`, or `large`). */
91
+ variant?: ParagraphVariant;
92
+ }
93
+ /**
94
+ * Props for span elements in Typography.
95
+ */
96
+ interface SpanProps extends HTMLAttributes<HTMLSpanElement> {
97
+ /** React ref for the span element. */
98
+ ref?: Ref<HTMLSpanElement>;
99
+ /** Span style variant (`base`, `small`, or `large`). */
100
+ variant?: ParagraphVariant;
101
+ }
102
+ /**
103
+ * All valid props for the Typography component.
104
+ *
105
+ * Combines base props with props for headings, paragraphs, and spans.
106
+ *
107
+ * @see BaseProps
108
+ * @see HeadingProps
109
+ * @see ParagraphProps
110
+ * @see SpanProps
111
+ */
112
+ type TypographyProps = BaseProps & (HeadingProps | ParagraphProps | SpanProps);
113
+ /**
114
+ * Typography component for rendering headings, paragraphs, or spans with flexible styling.
115
+ *
116
+ * Renders the appropriate HTML element (h1-h6, p, or span) based on the `variant` and `span` props.
117
+ * Applies utility classes for alignment, color, font weight, truncation, underline, and line clamping.
118
+ *
119
+ * @param {TypographyProps} props - Props for controlling typography style and element type.
120
+ * @returns {JSX.Element} The rendered typography element.
121
+ *
122
+ * @example
123
+ * ```tsx
124
+ * import { Typography } from './Typography';
125
+ *
126
+ * function MyComponent() {
127
+ * return (
128
+ * <div>
129
+ * <Typography variant="h1" color="primary" bold>
130
+ * Heading 1
131
+ * </Typography>
132
+ * <Typography variant="base" color="secondary" clamp={3}>
133
+ * This is a paragraph that will be clamped to 3 lines if it exceeds the limit.
134
+ * </Typography>
135
+ * </div>
136
+ * );
137
+ * }
138
+ * ```
139
+ */
140
+ declare function Typography(props: HeadingProps & BaseProps): JSX.Element;
141
+ declare function Typography(props: ParagraphProps & BaseProps): JSX.Element;
142
+ declare function Typography(props: SpanProps & BaseProps): JSX.Element;
143
+ declare namespace Typography {
144
+ var displayName: string;
145
+ }
146
+ export { headingVariants, paragraphVariants, Typography };
147
+ export type { HeadingVariant, ParagraphVariant, TypographyColor, TypographyProps, TypographyVariant, };
148
+ //# sourceMappingURL=Typography.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.d.ts","sourceRoot":"","sources":["../../../src/typography/Typography.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Typography } from './Typography';
2
+ import type { HeadingVariant, ParagraphVariant, TypographyVariant, TypographyColor } from './Typography';
3
+ import { Link } from './Link';
4
+ import type { LinkClasses } from './Link';
5
+ export { Link, Typography };
6
+ export type { HeadingVariant, LinkClasses, ParagraphVariant, TypographyColor, TypographyVariant };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/typography/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;AAC5B,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare function capitalize(value: string): string;
2
+ export { capitalize };
3
+ //# sourceMappingURL=capitalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capitalize.d.ts","sourceRoot":"","sources":["../../../src/utils/capitalize.ts"],"names":[],"mappings":"AAAA,iBAAS,UAAU,CAAC,KAAK,EAAE,MAAM,UAIhC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { capitalize } from './capitalize';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { useSyncExternalStore as e } from "react";
2
+ //#endregion
3
+ //#region lib/useBreakpoints.ts
4
+ var t = { theme: { breakpoints: {
5
+ xs: "30rem",
6
+ sm: "40rem",
7
+ md: "48rem",
8
+ lg: "64rem",
9
+ xl: "80rem",
10
+ "2xl": "96rem"
11
+ } } }.theme.breakpoints, n = Object.keys(t), r = n[0];
12
+ function i(e) {
13
+ return Number(e.replace("rem", "")) * Number.parseFloat(getComputedStyle(document.documentElement).fontSize);
14
+ }
15
+ function a() {
16
+ if (typeof window > "u") return r;
17
+ let e = r;
18
+ return Object.entries(t).forEach(([t, n]) => {
19
+ window.innerWidth >= i(n) && (e = t);
20
+ }), e;
21
+ }
22
+ function o(e) {
23
+ return window.addEventListener("resize", e), window.addEventListener("orientationchange", e), window.visualViewport?.addEventListener("resize", e), () => {
24
+ window.removeEventListener("resize", e), window.removeEventListener("orientationchange", e), window.visualViewport?.removeEventListener("resize", e);
25
+ };
26
+ }
27
+ function s() {
28
+ let i = e(o, a, () => r), s = n.indexOf(i);
29
+ return {
30
+ breakpoint: i,
31
+ breakpoints: t,
32
+ isAtLeast: (e) => s >= n.indexOf(e),
33
+ isBelow: (e) => s < n.indexOf(e)
34
+ };
35
+ }
36
+ //#endregion
37
+ export { s as t };
@@ -0,0 +1 @@
1
+ let e=require("react");var t={theme:{breakpoints:{xs:`30rem`,sm:`40rem`,md:`48rem`,lg:`64rem`,xl:`80rem`,"2xl":`96rem`}}}.theme.breakpoints,n=Object.keys(t),r=n[0];function i(e){return Number(e.replace(`rem`,``))*Number.parseFloat(getComputedStyle(document.documentElement).fontSize)}function a(){if(typeof window>`u`)return r;let e=r;return Object.entries(t).forEach(([t,n])=>{window.innerWidth>=i(n)&&(e=t)}),e}function o(e){return window.addEventListener(`resize`,e),window.addEventListener(`orientationchange`,e),window.visualViewport?.addEventListener(`resize`,e),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`orientationchange`,e),window.visualViewport?.removeEventListener(`resize`,e)}}function s(){let i=(0,e.useSyncExternalStore)(o,a,()=>r),s=n.indexOf(i);return{breakpoint:i,breakpoints:t,isAtLeast:e=>s>=n.indexOf(e),isBelow:e=>s<n.indexOf(e)}}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return s}});
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@arctura/atomics",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "packageManager": "yarn@4.11.0",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "repository": {
10
+ "url": "https://github.com/marcomg-byte/arctura"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js",
16
+ "require": "./dist/index.cjs"
17
+ },
18
+ "./hooks": {
19
+ "types": "./dist/lib/hooks.d.ts",
20
+ "import": "./dist/hooks.js",
21
+ "require": "./dist/hooks.cjs"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "sideEffects": false,
28
+ "scripts": {
29
+ "build": "vite build && tsc -p tsconfig.json",
30
+ "clean": "rimraf dist",
31
+ "lint": "eslint .",
32
+ "lint:fix": "eslint . --fix",
33
+ "test": "vitest run",
34
+ "test:cov": "vitest run --coverage",
35
+ "test:debug": "vitest --inspect-brk --no-file-parallelism",
36
+ "test:ui": "vitest --ui",
37
+ "test:watch": "vitest watch",
38
+ "typecheck": "tsc -p tsconfig.eslint.json"
39
+ },
40
+ "dependencies": {
41
+ "@fortawesome/fontawesome-svg-core": "^7.1.0",
42
+ "@fortawesome/free-solid-svg-icons": "^7.1.0",
43
+ "@fortawesome/react-fontawesome": "^3.1.0",
44
+ "classnames": "^2.5.1",
45
+ "embla-carousel": "^8.6.0",
46
+ "embla-carousel-fade": "^8.6.0",
47
+ "embla-carousel-react": "^8.6.0",
48
+ "react": "^19.2.7",
49
+ "react-dom": "^19.2.7",
50
+ "tailwind-merge": "^3.4.0"
51
+ },
52
+ "devDependencies": {
53
+ "@testing-library/dom": "^10.4.1",
54
+ "@testing-library/react": "^16.3.2",
55
+ "@types/node": "^25.9.3",
56
+ "@types/react": "^19.2.14",
57
+ "@types/react-dom": "^19",
58
+ "@vitejs/plugin-react": "^6.0.2",
59
+ "@vitest/coverage-v8": "4.1.8",
60
+ "eslint": "^9.39.1",
61
+ "jsdom": "^29.1.1",
62
+ "rimraf": "^6.1.3",
63
+ "typescript": "^6.0.3",
64
+ "vite": "^8.0.12",
65
+ "vitest": "4.1.8"
66
+ }
67
+ }