@recursica/mui-adapter 0.5.0 → 0.6.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 (159) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/mui-adapter.cjs +74 -1
  3. package/dist/mui-adapter.cjs.map +1 -1
  4. package/dist/mui-adapter.css +1 -1
  5. package/dist/mui-adapter.js +6652 -204
  6. package/dist/mui-adapter.js.map +1 -1
  7. package/dist/src/components/Accordion/Accordion.d.ts +63 -2
  8. package/dist/src/components/AssistiveElement/AssistiveElement.d.ts +9 -2
  9. package/dist/src/components/Autocomplete/Autocomplete.d.ts +16 -2
  10. package/dist/src/components/Avatar/Avatar.d.ts +14 -2
  11. package/dist/src/components/Badge/Badge.d.ts +13 -3
  12. package/dist/src/components/Breadcrumb/Breadcrumb.d.ts +10 -3
  13. package/dist/src/components/Button/Button.d.ts +1 -1
  14. package/dist/src/components/Card/Card.d.ts +40 -3
  15. package/dist/src/components/Checkbox/Checkbox.d.ts +15 -2
  16. package/dist/src/components/Checkbox/CheckboxGroup.d.ts +16 -0
  17. package/dist/src/components/Checkbox/index.d.ts +5 -1
  18. package/dist/src/components/Chip/Chip.d.ts +18 -2
  19. package/dist/src/components/Dropdown/Dropdown.d.ts +23 -3
  20. package/dist/src/components/FormControlLayout/FormControlLayout.d.ts +10 -2
  21. package/dist/src/components/FormControlWrapper/FormControlWrapper.d.ts +24 -2
  22. package/dist/src/components/HoverCard/HoverCard.d.ts +55 -3
  23. package/dist/src/components/Label/Label.d.ts +13 -2
  24. package/dist/src/components/Link/Link.d.ts +1 -1
  25. package/dist/src/components/Menu/Menu.d.ts +99 -3
  26. package/dist/src/components/Modal/Modal.d.ts +36 -2
  27. package/dist/src/components/NumberInput/NumberInput.d.ts +14 -2
  28. package/dist/src/components/Pagination/Pagination.d.ts +44 -2
  29. package/dist/src/components/Pagination/Pagination.icons.d.ts +8 -0
  30. package/dist/src/components/Panel/Panel.d.ts +65 -3
  31. package/dist/src/components/Radio/Radio.d.ts +13 -3
  32. package/dist/src/components/Radio/RadioGroup.d.ts +13 -0
  33. package/dist/src/components/ReadOnlyField/ReadOnlyBooleanField.d.ts +5 -0
  34. package/dist/src/components/ReadOnlyField/ReadOnlyField.d.ts +7 -2
  35. package/dist/src/components/ReadOnlyField/ReadOnlySwitchField.d.ts +5 -0
  36. package/dist/src/components/ReadOnlyField/ReadOnlyTextField.d.ts +8 -0
  37. package/dist/src/components/ReadOnlyField/WithReadOnlyWrapper.d.ts +28 -0
  38. package/dist/src/components/ReadOnlyField/index.d.ts +1 -0
  39. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +31 -3
  40. package/dist/src/components/Slider/Slider.d.ts +28 -2
  41. package/dist/src/components/Stepper/Stepper.d.ts +21 -2
  42. package/dist/src/components/Switch/Switch.d.ts +10 -3
  43. package/dist/src/components/Switch/SwitchGroup.d.ts +13 -0
  44. package/dist/src/components/Tabs/Tabs.d.ts +35 -3
  45. package/dist/src/components/Text/Text.d.ts +1 -1
  46. package/dist/src/components/TextArea/TextArea.d.ts +18 -2
  47. package/dist/src/components/TextField/TextField.d.ts +16 -2
  48. package/dist/src/components/Timeline/Timeline.d.ts +14 -2
  49. package/dist/src/components/Timeline/TimelineItem.d.ts +29 -0
  50. package/dist/src/components/Title/Title.d.ts +1 -1
  51. package/dist/src/components/Toast/Toast.d.ts +25 -2
  52. package/dist/src/components/Tooltip/Tooltip.d.ts +42 -3
  53. package/dist/src/components/Typography/Typography.d.ts +1 -1
  54. package/package.json +9 -2
  55. package/src/components/Accordion/Accordion.module.css +295 -56
  56. package/src/components/Accordion/Accordion.stories.tsx +149 -21
  57. package/src/components/Accordion/Accordion.tsx +264 -5
  58. package/src/components/AssistiveElement/AssistiveElement.module.css +111 -20
  59. package/src/components/AssistiveElement/AssistiveElement.stories.tsx +76 -19
  60. package/src/components/AssistiveElement/AssistiveElement.tsx +85 -5
  61. package/src/components/Autocomplete/Autocomplete.module.css +320 -42
  62. package/src/components/Autocomplete/Autocomplete.stories.tsx +180 -19
  63. package/src/components/Autocomplete/Autocomplete.tsx +199 -6
  64. package/src/components/Avatar/Avatar.module.css +343 -73
  65. package/src/components/Avatar/Avatar.stories.tsx +94 -22
  66. package/src/components/Avatar/Avatar.tsx +110 -6
  67. package/src/components/Badge/Badge.module.css +127 -29
  68. package/src/components/Badge/Badge.stories.tsx +65 -22
  69. package/src/components/Badge/Badge.tsx +70 -6
  70. package/src/components/Breadcrumb/Breadcrumb.module.css +25 -5
  71. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +57 -22
  72. package/src/components/Breadcrumb/Breadcrumb.tsx +62 -6
  73. package/src/components/Button/Button.module.css +3 -3
  74. package/src/components/Card/Card.module.css +118 -38
  75. package/src/components/Card/Card.stories.tsx +117 -19
  76. package/src/components/Card/Card.tsx +179 -5
  77. package/src/components/Checkbox/Checkbox.module.css +232 -39
  78. package/src/components/Checkbox/Checkbox.stories.tsx +81 -19
  79. package/src/components/Checkbox/Checkbox.tsx +146 -5
  80. package/src/components/Checkbox/CheckboxGroup.tsx +117 -0
  81. package/src/components/Checkbox/index.ts +6 -1
  82. package/src/components/Chip/Chip.module.css +228 -43
  83. package/src/components/Chip/Chip.stories.tsx +101 -21
  84. package/src/components/Chip/Chip.tsx +138 -6
  85. package/src/components/Dropdown/Dropdown.module.css +291 -41
  86. package/src/components/Dropdown/Dropdown.stories.tsx +80 -21
  87. package/src/components/Dropdown/Dropdown.tsx +182 -6
  88. package/src/components/FormControlLayout/FormControlLayout.module.css +92 -0
  89. package/src/components/FormControlLayout/FormControlLayout.stories.tsx +74 -19
  90. package/src/components/FormControlLayout/FormControlLayout.tsx +58 -4
  91. package/src/components/FormControlWrapper/FormControlWrapper.module.css +96 -0
  92. package/src/components/FormControlWrapper/FormControlWrapper.stories.tsx +122 -19
  93. package/src/components/FormControlWrapper/FormControlWrapper.tsx +145 -6
  94. package/src/components/HoverCard/HoverCard.module.css +90 -22
  95. package/src/components/HoverCard/HoverCard.stories.tsx +158 -21
  96. package/src/components/HoverCard/HoverCard.tsx +150 -5
  97. package/src/components/Label/Label.module.css +136 -35
  98. package/src/components/Label/Label.stories.tsx +98 -17
  99. package/src/components/Label/Label.tsx +88 -5
  100. package/src/components/Menu/Menu.module.css +285 -51
  101. package/src/components/Menu/Menu.stories.tsx +307 -21
  102. package/src/components/Menu/Menu.tsx +318 -5
  103. package/src/components/Modal/Modal.module.css +171 -35
  104. package/src/components/Modal/Modal.stories.tsx +66 -22
  105. package/src/components/Modal/Modal.tsx +216 -4
  106. package/src/components/NumberInput/NumberInput.module.css +276 -42
  107. package/src/components/NumberInput/NumberInput.stories.tsx +83 -20
  108. package/src/components/NumberInput/NumberInput.tsx +148 -6
  109. package/src/components/Pagination/Pagination.icons.tsx +66 -0
  110. package/src/components/Pagination/Pagination.module.css +246 -20
  111. package/src/components/Pagination/Pagination.stories.tsx +42 -21
  112. package/src/components/Pagination/Pagination.tsx +193 -5
  113. package/src/components/Panel/Panel.module.css +206 -38
  114. package/src/components/Panel/Panel.stories.tsx +214 -22
  115. package/src/components/Panel/Panel.tsx +153 -5
  116. package/src/components/Radio/Radio.module.css +220 -37
  117. package/src/components/Radio/Radio.stories.tsx +77 -19
  118. package/src/components/Radio/Radio.tsx +178 -5
  119. package/src/components/Radio/RadioGroup.tsx +111 -0
  120. package/src/components/ReadOnlyField/ReadOnlyBooleanField.tsx +21 -0
  121. package/src/components/ReadOnlyField/ReadOnlyField.module.css +53 -15
  122. package/src/components/ReadOnlyField/ReadOnlyField.stories.tsx +175 -16
  123. package/src/components/ReadOnlyField/ReadOnlyField.tsx +109 -5
  124. package/src/components/ReadOnlyField/ReadOnlySwitchField.tsx +21 -0
  125. package/src/components/ReadOnlyField/ReadOnlyTextField.tsx +48 -0
  126. package/src/components/ReadOnlyField/WithReadOnlyWrapper.tsx +93 -0
  127. package/src/components/ReadOnlyField/index.ts +1 -0
  128. package/src/components/SegmentedControl/SegmentedControl.module.css +203 -47
  129. package/src/components/SegmentedControl/SegmentedControl.stories.tsx +102 -20
  130. package/src/components/SegmentedControl/SegmentedControl.tsx +110 -6
  131. package/src/components/Slider/Slider.module.css +542 -86
  132. package/src/components/Slider/Slider.stories.tsx +157 -19
  133. package/src/components/Slider/Slider.tsx +282 -5
  134. package/src/components/Stepper/Stepper.module.css +410 -71
  135. package/src/components/Stepper/Stepper.stories.tsx +132 -19
  136. package/src/components/Stepper/Stepper.tsx +145 -6
  137. package/src/components/Switch/Switch.module.css +238 -39
  138. package/src/components/Switch/Switch.stories.tsx +98 -19
  139. package/src/components/Switch/Switch.tsx +153 -6
  140. package/src/components/Switch/SwitchGroup.tsx +111 -0
  141. package/src/components/Tabs/Tabs.module.css +422 -79
  142. package/src/components/Tabs/Tabs.stories.tsx +138 -19
  143. package/src/components/Tabs/Tabs.tsx +103 -6
  144. package/src/components/TextArea/TextArea.module.css +155 -32
  145. package/src/components/TextArea/TextArea.stories.tsx +80 -21
  146. package/src/components/TextArea/TextArea.tsx +156 -6
  147. package/src/components/TextField/TextField.module.css +261 -42
  148. package/src/components/TextField/TextField.stories.tsx +168 -15
  149. package/src/components/TextField/TextField.tsx +171 -6
  150. package/src/components/Timeline/Timeline.module.css +365 -76
  151. package/src/components/Timeline/Timeline.stories.tsx +114 -21
  152. package/src/components/Timeline/Timeline.tsx +80 -5
  153. package/src/components/Timeline/TimelineItem.tsx +101 -0
  154. package/src/components/Toast/Toast.module.css +166 -28
  155. package/src/components/Toast/Toast.stories.tsx +54 -22
  156. package/src/components/Toast/Toast.tsx +90 -5
  157. package/src/components/Tooltip/Tooltip.module.css +89 -24
  158. package/src/components/Tooltip/Tooltip.stories.tsx +152 -22
  159. package/src/components/Tooltip/Tooltip.tsx +114 -5
@@ -1,8 +1,150 @@
1
- import React from "react";
2
- import "./NumberInput.module.css";
1
+ import React, { forwardRef } from "react";
2
+ import {
3
+ TextField as MuiNumberInput,
4
+ type TextFieldProps as MuiNumberInputProps,
5
+ } from "@mui/material";
6
+ import { type ReadOnlyControlProps } from "@recursica/adapter-common";
7
+ import {
8
+ filterStylingProps,
9
+ type RecursicaOverStyled,
10
+ } from "../../utils/filterStylingProps";
11
+ import { type RecursicaFormControlWrapperProps } from "../FormControlWrapper/FormControlWrapper";
12
+ import { WithReadOnlyWrapper } from "../ReadOnlyField/WithReadOnlyWrapper";
13
+ import styles from "./NumberInput.module.css";
3
14
 
4
- export type NumberInputProps = React.HTMLAttributes<HTMLDivElement>;
15
+ export interface RecursicaNumberInputProps
16
+ extends Omit<
17
+ MuiNumberInputProps,
18
+ "size" | "variant" | "radius" | "wrapperProps" | "classNames" | "styles"
19
+ >,
20
+ Pick<
21
+ RecursicaFormControlWrapperProps,
22
+ | "assistiveText"
23
+ | "assistiveWithIcon"
24
+ | "formLayout"
25
+ | "labelSize"
26
+ | "labelAlignment"
27
+ | "labelOptionalText"
28
+ | "labelWithEditIcon"
29
+ | "onLabelEditClick"
30
+ >,
31
+ ReadOnlyControlProps {
32
+ /** Enables/disables the controls to increment and decrement the value */
33
+ hideControls?: boolean;
34
+ }
5
35
 
6
- export const NumberInput: React.FC<NumberInputProps> = (props) => {
7
- return <div {...props}>NumberInput</div>;
8
- };
36
+ export type NumberInputProps = RecursicaOverStyled<RecursicaNumberInputProps>;
37
+
38
+ export const NumberInput = forwardRef<HTMLInputElement, NumberInputProps>(
39
+ function NumberInput(props, ref) {
40
+ const {
41
+ overStyled = false,
42
+ formLayout = "stacked",
43
+
44
+ // Label & Wrapper Maps
45
+ labelSize,
46
+ labelAlignment,
47
+ labelOptionalText,
48
+ labelWithEditIcon,
49
+ onLabelEditClick,
50
+
51
+ label,
52
+ assistiveText,
53
+ assistiveWithIcon,
54
+ error,
55
+ required,
56
+ withAsterisk,
57
+ id,
58
+ className,
59
+ style,
60
+ disabled,
61
+ readOnly,
62
+ readOnlyComponent,
63
+ emptyValueComponent,
64
+ value,
65
+ defaultValue,
66
+ hideControls = false,
67
+ ...rest
68
+ } = props;
69
+
70
+ const sanitizedProps = filterStylingProps(rest, overStyled);
71
+ const restRecord = sanitizedProps as Record<string, unknown>;
72
+
73
+ // Delete prohibited sizing hooks from bypassing variables natively
74
+ delete restRecord["size"];
75
+ delete restRecord["variant"];
76
+ delete restRecord["radius"];
77
+
78
+ // Securely map core native blocks down ensuring nested CSS modules map precisely
79
+ const mergedClassNames: Partial<Record<string, string>> = {
80
+ wrapper: styles.root, // The nested Input internal relative wrapper bounding box
81
+ input: styles.input,
82
+ section: styles.section,
83
+ controls: styles.controls,
84
+ control: styles.control,
85
+ };
86
+
87
+ const wrapperClass = className
88
+ ? `${styles.layoutOverride} ${className}`
89
+ : styles.layoutOverride;
90
+
91
+ return (
92
+ <WithReadOnlyWrapper
93
+ className={wrapperClass}
94
+ style={style as React.CSSProperties}
95
+ controlMaxWidth="var(--recursica_ui-kit_components_number-input_properties_max-width)"
96
+ controlMinWidth="var(--recursica_ui-kit_components_number-input_properties_min-width)"
97
+ overStyled={overStyled as true}
98
+ formLayout={formLayout}
99
+ labelSize={labelSize}
100
+ labelAlignment={labelAlignment}
101
+ labelOptionalText={labelOptionalText}
102
+ labelWithEditIcon={labelWithEditIcon}
103
+ onLabelEditClick={onLabelEditClick}
104
+ label={label}
105
+ assistiveText={assistiveText}
106
+ assistiveWithIcon={assistiveWithIcon}
107
+ error={error}
108
+ required={required}
109
+ withAsterisk={withAsterisk}
110
+ id={id}
111
+ readOnly={readOnly}
112
+ readOnlyComponent={readOnlyComponent}
113
+ emptyValueComponent={emptyValueComponent}
114
+ readOnlyType="text"
115
+ readOnlyValue={
116
+ value !== undefined ? value?.toString() : defaultValue?.toString()
117
+ }
118
+ readOnlyNativeProps={props}
119
+ activeComponent={
120
+ /* Naked Input execution safely decoupled from Mui's macro Input.Wrapper DOM hooks */
121
+ <MuiNumberInput
122
+ ref={ref}
123
+ classes={mergedClassNames}
124
+ disabled={disabled}
125
+ value={value}
126
+ defaultValue={defaultValue}
127
+ hideControls={hideControls}
128
+ label={undefined}
129
+ description={undefined}
130
+ error={undefined}
131
+ required={undefined}
132
+ withAsterisk={undefined}
133
+ wrapperProps={{
134
+ "data-disabled": disabled ? "true" : undefined,
135
+ "data-error": error ? "true" : undefined,
136
+ "data-with-left-section": restRecord.leftSection
137
+ ? "true"
138
+ : undefined,
139
+ "data-with-right-section":
140
+ restRecord.rightSection || !hideControls ? "true" : undefined,
141
+ }}
142
+ {...(sanitizedProps as unknown as MuiNumberInputProps)}
143
+ />
144
+ }
145
+ />
146
+ );
147
+ },
148
+ );
149
+
150
+ NumberInput.displayName = "NumberInput";
@@ -0,0 +1,66 @@
1
+ import styles from "./Pagination.module.css";
2
+
3
+ const NextPath =
4
+ "M8.781 8l-3.3-3.3.943-.943L10.667 8l-4.243 4.243-.943-.943 3.3-3.3z";
5
+ const PrevPath =
6
+ "M7.219 8l3.3 3.3-.943.943L5.333 8l4.243-4.243.943.943-3.3 3.3z";
7
+ const FirstPath =
8
+ "M6.85355 3.85355C7.04882 3.65829 7.04882 3.34171 6.85355 3.14645C6.65829 2.95118 6.34171 2.95118 6.14645 3.14645L2.14645 7.14645C1.95118 7.34171 1.95118 7.65829 2.14645 7.85355L6.14645 11.8536C6.34171 12.0488 6.65829 12.0488 6.85355 11.8536C7.04882 11.6583 7.04882 11.3417 6.85355 11.1464L3.20711 7.5L6.85355 3.85355ZM12.8536 3.85355C13.0488 3.65829 13.0488 3.34171 12.8536 3.14645C12.6583 2.95118 12.3417 2.95118 12.1464 3.14645L8.14645 7.14645C7.95118 7.34171 7.95118 7.65829 8.14645 7.85355L12.1464 11.8536C12.3417 12.0488 12.6583 12.0488 12.8536 11.8536C13.0488 11.6583 13.0488 11.3417 12.8536 11.1464L9.20711 7.5L12.8536 3.85355Z";
9
+ const LastPath =
10
+ "M2.14645 11.1464C1.95118 11.3417 1.95118 11.6583 2.14645 11.8536C2.34171 12.0488 2.65829 12.0488 2.85355 11.8536L6.85355 7.85355C7.04882 7.65829 7.04882 7.34171 6.85355 7.14645L2.85355 3.14645C2.65829 2.95118 2.34171 2.95118 2.14645 3.14645C1.95118 3.34171 1.95118 3.65829 2.14645 3.85355L5.79289 7.5L2.14645 11.1464ZM8.14645 11.1464C7.95118 11.3417 7.95118 11.6583 8.14645 11.8536C8.34171 12.0488 8.65829 12.0488 8.85355 11.8536L12.8536 7.85355C13.0488 7.65829 13.0488 7.34171 12.8536 7.14645L8.85355 3.14645C8.65829 2.95118 8.34171 2.95118 8.14645 3.14645C7.95118 3.34171 7.95118 3.65829 8.14645 3.85355L11.7929 7.5L8.14645 11.1464Z";
11
+
12
+ export type PaginationIconType = "next" | "prev" | "first" | "last";
13
+
14
+ const paths: Record<PaginationIconType, string> = {
15
+ next: NextPath,
16
+ prev: PrevPath,
17
+ first: FirstPath,
18
+ last: LastPath,
19
+ };
20
+
21
+ export const PaginationIcon = ({
22
+ type,
23
+ className,
24
+ ...props
25
+ }: React.ComponentProps<"svg"> & { type: PaginationIconType }) => (
26
+ <svg
27
+ viewBox="0 0 16 16"
28
+ xmlns="http://www.w3.org/2000/svg"
29
+ className={`${styles.baseIcon} ${className || ""}`.trim()}
30
+ {...props}
31
+ >
32
+ <path d={paths[type as PaginationIconType]} fill="currentColor" />
33
+ </svg>
34
+ );
35
+
36
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
37
+ export const NextWithLabel = (props: any) => (
38
+ <div className={styles.iconWithLabel}>
39
+ <span>Next</span>
40
+ <PaginationIcon type="next" {...props} />
41
+ </div>
42
+ );
43
+
44
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
+ export const PrevWithLabel = (props: any) => (
46
+ <div className={styles.iconWithLabel}>
47
+ <PaginationIcon type="prev" {...props} />
48
+ <span>Prev</span>
49
+ </div>
50
+ );
51
+
52
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
53
+ export const FirstWithLabel = (props: any) => (
54
+ <div className={styles.iconWithLabel}>
55
+ <PaginationIcon type="first" {...props} />
56
+ <span>First</span>
57
+ </div>
58
+ );
59
+
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ export const LastWithLabel = (props: any) => (
62
+ <div className={styles.iconWithLabel}>
63
+ <span>Last</span>
64
+ <PaginationIcon type="last" {...props} />
65
+ </div>
66
+ );
@@ -1,13 +1,9 @@
1
1
  /* EXEMPTIONS:
2
- This component is a placeholder stub. Once fully implemented, its specific
3
- tokens will be fully wired up to direct styles. */
4
-
2
+ - All pagination subcomponent properties (active-pages, inactive-pages, navigation-controls) are ignored
3
+ because we are not implementing custom subcomponent styling for pagination. Instead, pagination items
4
+ directly inherit the unified, standard brand button components for complete UI/UX consistency, rendering
5
+ these generated subcomponent tokens redundant. */
5
6
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_border-size */
6
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_background */
7
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_border-color */
8
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_icon-color */
9
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_text */
10
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_text-hover */
11
7
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_disabled-opacity */
12
8
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_elevation */
13
9
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_height */
@@ -27,13 +23,12 @@
27
23
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_text_line-height */
28
24
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_text_text-decoration */
29
25
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_text_text-transform */
30
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_colors_dots-color */
26
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_background */
27
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_border-color */
28
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_icon-color */
29
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_text */
30
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_active-pages_subcomponent_colors_text-hover */
31
31
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_border-size */
32
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_background */
33
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_border-color */
34
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_icon-color */
35
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_text */
36
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_text-hover */
37
32
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_disabled-opacity */
38
33
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_elevation */
39
34
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_height */
@@ -53,13 +48,12 @@
53
48
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_text_line-height */
54
49
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_text_text-decoration */
55
50
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_text_text-transform */
56
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_item-gap */
51
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_background */
52
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_border-color */
53
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_icon-color */
54
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_text */
55
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_inactive-pages_subcomponent_colors_text-hover */
57
56
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_border-size */
58
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_background */
59
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_border-color */
60
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_icon-color */
61
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_text */
62
- /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_text-hover */
63
57
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_disabled-opacity */
64
58
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_elevation */
65
59
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_height */
@@ -79,3 +73,235 @@
79
73
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_text_line-height */
80
74
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_text_text-decoration */
81
75
  /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_text_text-transform */
76
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_background */
77
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_border-color */
78
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_icon-color */
79
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_text */
80
+ /* recursica-ignore: --recursica_ui-kit_components_pagination_properties_navigation-controls_subcomponent_colors_text-hover */
81
+
82
+ .root {
83
+ display: flex;
84
+ align-items: center;
85
+ gap: var(--recursica_ui-kit_components_pagination_properties_item-gap);
86
+ }
87
+
88
+ .control {
89
+ box-sizing: border-box;
90
+ margin: 0;
91
+ border-style: solid;
92
+ position: relative;
93
+ transition: all 0.2s ease;
94
+ overflow: hidden;
95
+ display: inline-flex;
96
+ align-items: center;
97
+ justify-content: center;
98
+
99
+ /* Typography */
100
+ font-family: var(
101
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-family,
102
+ var(--recursica_brand_fonts_primary)
103
+ );
104
+ font-size: var(
105
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-size,
106
+ var(--recursica_brand_dimensions_text-size_default)
107
+ );
108
+ font-style: var(
109
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-style,
110
+ normal
111
+ );
112
+ font-weight: var(
113
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_font-weight,
114
+ 500
115
+ );
116
+ letter-spacing: var(
117
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_letter-spacing,
118
+ 0
119
+ );
120
+ line-height: var(
121
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_line-height,
122
+ 1.5
123
+ );
124
+ text-decoration: var(
125
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_text-decoration,
126
+ none
127
+ );
128
+ text-transform: var(
129
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_text_text-transform,
130
+ none
131
+ );
132
+
133
+ /* Dimensions */
134
+ border-radius: var(
135
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_default_properties_border-radius,
136
+ 4px
137
+ );
138
+ height: var(
139
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_height
140
+ );
141
+ min-width: var(
142
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_min-width
143
+ );
144
+ padding: 0
145
+ var(
146
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding
147
+ );
148
+
149
+ /* Base Inactive Style: Outline */
150
+ border-width: var(
151
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_border-size
152
+ );
153
+ box-shadow: var(
154
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_elevation
155
+ );
156
+ background-color: var(
157
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_background
158
+ );
159
+ border-color: var(
160
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_border-color
161
+ );
162
+ color: var(
163
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_text
164
+ );
165
+ }
166
+
167
+ .control:disabled {
168
+ opacity: var(--recursica_brand_states_disabled);
169
+ cursor: not-allowed;
170
+ }
171
+
172
+ .control:hover:not(:disabled) {
173
+ color: var(
174
+ --recursica_ui-kit_components_button_variants_styles_outline_properties_colors_text-hover
175
+ );
176
+ }
177
+
178
+ /* Hover Overlay */
179
+ .control::after {
180
+ content: "";
181
+ position: absolute;
182
+ inset: 0;
183
+ border-radius: inherit;
184
+ z-index: 0;
185
+ pointer-events: none;
186
+ transition: opacity 150ms ease;
187
+ opacity: 0;
188
+ background-color: var(
189
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_hover-color
190
+ );
191
+ }
192
+
193
+ .control:hover:not(:disabled)::after {
194
+ opacity: var(
195
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_hover-opacity,
196
+ 0.1
197
+ );
198
+ }
199
+
200
+ /* Active Style: Solid */
201
+ .control[data-active] {
202
+ border-width: var(
203
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_border-size
204
+ );
205
+ box-shadow: var(
206
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_elevation
207
+ );
208
+ background-color: var(
209
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_background
210
+ );
211
+ border-color: var(
212
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_border-color
213
+ );
214
+ color: var(
215
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text
216
+ );
217
+ }
218
+
219
+ .control[data-active]:hover:not(:disabled) {
220
+ color: var(
221
+ --recursica_ui-kit_components_button_variants_styles_solid_properties_colors_text-hover
222
+ );
223
+ }
224
+
225
+ /* Navigation Style: Text */
226
+ .control[data-variant="text"] {
227
+ border-width: var(
228
+ --recursica_ui-kit_components_button_variants_styles_text_properties_border-size
229
+ );
230
+ box-shadow: var(
231
+ --recursica_ui-kit_components_button_variants_styles_text_properties_elevation
232
+ );
233
+ background-color: var(
234
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_background
235
+ );
236
+ border-color: var(
237
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_border-color
238
+ );
239
+ color: var(
240
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text
241
+ );
242
+
243
+ /* Also explicitly inherit navigation sizes incase they differ from pages */
244
+ border-radius: var(
245
+ --recursica_ui-kit_components_button_variants_content_icon-only_variants_sizes_default_properties_border-radius
246
+ );
247
+ height: var(
248
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_height
249
+ );
250
+ min-width: var(
251
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_min-width
252
+ );
253
+ padding: 0
254
+ var(
255
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_horizontal-padding
256
+ );
257
+ }
258
+
259
+ .control[data-variant="text"]:hover:not(:disabled) {
260
+ color: var(
261
+ --recursica_ui-kit_components_button_variants_styles_text_properties_colors_text-hover
262
+ );
263
+ }
264
+
265
+ /* Hover Overlay for Navigation */
266
+ .control[data-variant="text"]::after {
267
+ background-color: var(
268
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_hover-color
269
+ );
270
+ }
271
+ .control[data-variant="text"]:hover:not(:disabled)::after {
272
+ opacity: var(
273
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_hover-opacity,
274
+ 0.1
275
+ );
276
+ }
277
+
278
+ /* Dots */
279
+ .dots {
280
+ display: inline-flex;
281
+ align-items: center;
282
+ justify-content: center;
283
+ height: var(
284
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_height
285
+ );
286
+ min-width: var(
287
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_min-width
288
+ );
289
+ color: var(
290
+ --recursica_ui-kit_components_pagination_properties_colors_dots-color
291
+ );
292
+ }
293
+
294
+ /* Icon Styles */
295
+ .iconWithLabel {
296
+ display: flex;
297
+ align-items: center;
298
+ gap: var(
299
+ --recursica_ui-kit_components_button_variants_sizes_default_properties_icon-text-gap,
300
+ 4px
301
+ );
302
+ }
303
+
304
+ .baseIcon {
305
+ width: calc(var(--pagination-control-size) / 1.8);
306
+ height: calc(var(--pagination-control-size) / 1.8);
307
+ }
@@ -1,35 +1,56 @@
1
1
  import type { Meta, StoryObj } from "@storybook/react";
2
2
  import { Pagination } from "./Pagination";
3
- import { ComingSoon } from "@recursica/storybook-template";
4
3
 
5
4
  const meta: Meta<typeof Pagination> = {
6
- title: "UI-Kit/🚧 Pagination",
5
+ title: "UI-Kit/Pagination",
7
6
  component: Pagination,
8
7
  tags: ["autodocs"],
9
- parameters: {
10
- controls: {
11
- include: [
12
- "layer",
13
- "withLayer",
14
- "children",
15
- "component",
16
- "variant",
17
- "size",
18
- "icon",
19
- "disabled",
20
- "href",
21
- "onClick",
22
- "onChange",
23
- "value",
24
- "checked",
25
- ],
8
+ argTypes: {
9
+ total: { control: "number" },
10
+ withEdges: { control: "boolean" },
11
+ withControls: { control: "boolean" },
12
+ disabled: { control: "boolean" },
13
+ withLabels: {
14
+ control: "boolean",
15
+ description: "Toggle text labels alongside icons",
26
16
  },
17
+ defaultChecked: { table: { disable: true } },
18
+ },
19
+ args: {
20
+ total: 10,
21
+ withEdges: false,
22
+ withControls: true,
23
+ withLabels: false,
24
+ },
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unused-vars
26
+ render: ({ withLayer, layer, ...args }: any) => {
27
+ return <Pagination {...args} />;
27
28
  },
28
29
  };
29
30
 
30
31
  export default meta;
32
+
31
33
  type Story = StoryObj<typeof Pagination>;
32
34
 
33
- export const Default: Story = {
34
- render: () => <ComingSoon componentName="Pagination" />,
35
+ export const Default: Story = {};
36
+
37
+ export const WithEdges: Story = {
38
+ args: {
39
+ withEdges: true,
40
+ },
41
+ };
42
+
43
+ export const Compositional: Story = {
44
+ render: () => (
45
+ <Pagination.Root total={10}>
46
+ <Pagination.Items />
47
+ </Pagination.Root>
48
+ ),
49
+ };
50
+
51
+ export const WithTextLabels: Story = {
52
+ args: {
53
+ withEdges: true,
54
+ withLabels: true,
55
+ },
35
56
  };