@dmsi/wedgekit-react 0.0.2

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 (263) hide show
  1. package/README.md +35 -0
  2. package/dist/chunk-27KIIUAR.js +59 -0
  3. package/dist/chunk-2G2E2JMA.js +123 -0
  4. package/dist/chunk-4C66DLIJ.js +51 -0
  5. package/dist/chunk-4RD5ZF2V.js +55 -0
  6. package/dist/chunk-4RJKB7LC.js +14 -0
  7. package/dist/chunk-4T7F5BZZ.js +26 -0
  8. package/dist/chunk-5GOBP2JS.js +53 -0
  9. package/dist/chunk-6ZY524ID.js +42 -0
  10. package/dist/chunk-AWQSSKCK.js +32 -0
  11. package/dist/chunk-BNHSAFMP.js +93 -0
  12. package/dist/chunk-BWRHL2AG.js +439 -0
  13. package/dist/chunk-DKKYR6DS.js +132 -0
  14. package/dist/chunk-E5ALT5W7.js +182 -0
  15. package/dist/chunk-FY7PTP6E.js +322 -0
  16. package/dist/chunk-GTCSRHPF.js +119 -0
  17. package/dist/chunk-I2UVVKQI.js +12 -0
  18. package/dist/chunk-IGQVA7SC.js +41 -0
  19. package/dist/chunk-K3IKUSZW.js +59 -0
  20. package/dist/chunk-KENSVWOY.js +151 -0
  21. package/dist/chunk-KX3O6GJ6.js +138 -0
  22. package/dist/chunk-L4UM372R.js +253 -0
  23. package/dist/chunk-ORMEWXMH.js +37 -0
  24. package/dist/chunk-Q3FKEKIN.js +23 -0
  25. package/dist/chunk-SEKKGFM6.js +28 -0
  26. package/dist/chunk-SY3HT54E.js +91 -0
  27. package/dist/chunk-TAW5ZZ4Z.js +346 -0
  28. package/dist/chunk-TRUPPHBQ.js +109 -0
  29. package/dist/chunk-TU55CHXU.js +30 -0
  30. package/dist/chunk-TWZZB4WO.js +114 -0
  31. package/dist/chunk-TYI74BSP.js +62 -0
  32. package/dist/chunk-U42SKNR6.js +104 -0
  33. package/dist/chunk-UU3FA6LV.js +72 -0
  34. package/dist/chunk-WVUIIBRR.js +51 -0
  35. package/dist/chunk-XUIPGYP5.js +39 -0
  36. package/dist/chunk-Z4UCFUF7.js +299 -0
  37. package/dist/components/Breadcrumbs.cjs +376 -0
  38. package/dist/components/Breadcrumbs.js +90 -0
  39. package/dist/components/Button.cjs +319 -0
  40. package/dist/components/Button.js +8 -0
  41. package/dist/components/CalendarRange.cjs +520 -0
  42. package/dist/components/CalendarRange.js +13 -0
  43. package/dist/components/Caption.cjs +283 -0
  44. package/dist/components/Caption.js +80 -0
  45. package/dist/components/Checkbox.cjs +378 -0
  46. package/dist/components/Checkbox.js +11 -0
  47. package/dist/components/ContentTab.cjs +382 -0
  48. package/dist/components/ContentTab.js +10 -0
  49. package/dist/components/ContentTabs.cjs +472 -0
  50. package/dist/components/ContentTabs.js +98 -0
  51. package/dist/components/DMSiLogo.cjs +79 -0
  52. package/dist/components/DMSiLogo.js +56 -0
  53. package/dist/components/DataGrid.cjs +3113 -0
  54. package/dist/components/DataGrid.js +758 -0
  55. package/dist/components/DataGridCell.cjs +1907 -0
  56. package/dist/components/DataGridCell.js +24 -0
  57. package/dist/components/DataTable.cjs +791 -0
  58. package/dist/components/DataTable.js +720 -0
  59. package/dist/components/DateInput.cjs +1130 -0
  60. package/dist/components/DateInput.js +170 -0
  61. package/dist/components/DateRangeInput.cjs +1131 -0
  62. package/dist/components/DateRangeInput.js +171 -0
  63. package/dist/components/DebugJson.cjs +50 -0
  64. package/dist/components/DebugJson.js +27 -0
  65. package/dist/components/Display.cjs +234 -0
  66. package/dist/components/Display.js +12 -0
  67. package/dist/components/EditingContext.cjs +73 -0
  68. package/dist/components/EditingContext.js +35 -0
  69. package/dist/components/FilterGroup.cjs +1431 -0
  70. package/dist/components/FilterGroup.js +231 -0
  71. package/dist/components/FullViewportBox.cjs +35 -0
  72. package/dist/components/FullViewportBox.js +12 -0
  73. package/dist/components/Grid.cjs +69 -0
  74. package/dist/components/Grid.js +36 -0
  75. package/dist/components/GridContainer.cjs +125 -0
  76. package/dist/components/GridContainer.js +92 -0
  77. package/dist/components/Heading.cjs +238 -0
  78. package/dist/components/Heading.js +14 -0
  79. package/dist/components/HorizontalDivider.cjs +33 -0
  80. package/dist/components/HorizontalDivider.js +10 -0
  81. package/dist/components/Icon.cjs +98 -0
  82. package/dist/components/Icon.js +7 -0
  83. package/dist/components/Input.cjs +672 -0
  84. package/dist/components/Input.js +21 -0
  85. package/dist/components/InputGroup.cjs +270 -0
  86. package/dist/components/InputGroup.js +60 -0
  87. package/dist/components/Label.cjs +223 -0
  88. package/dist/components/Label.js +8 -0
  89. package/dist/components/Link.cjs +262 -0
  90. package/dist/components/Link.js +8 -0
  91. package/dist/components/List.cjs +37 -0
  92. package/dist/components/List.js +14 -0
  93. package/dist/components/LiveChatComponent.cjs +63 -0
  94. package/dist/components/LiveChatComponent.js +40 -0
  95. package/dist/components/LogoAgilityTopBar.cjs +115 -0
  96. package/dist/components/LogoAgilityTopBar.js +92 -0
  97. package/dist/components/LogoDMSiTopBar.cjs +79 -0
  98. package/dist/components/LogoDMSiTopBar.js +7 -0
  99. package/dist/components/LogoMillworkTopBar.cjs +221 -0
  100. package/dist/components/LogoMillworkTopBar.js +198 -0
  101. package/dist/components/MainBar.cjs +211 -0
  102. package/dist/components/MainBar.js +65 -0
  103. package/dist/components/Menu.cjs +437 -0
  104. package/dist/components/Menu.js +11 -0
  105. package/dist/components/MenuOption.cjs +483 -0
  106. package/dist/components/MenuOption.js +13 -0
  107. package/dist/components/MobileDataGrid.cjs +658 -0
  108. package/dist/components/MobileDataGrid.js +125 -0
  109. package/dist/components/Modal.cjs +783 -0
  110. package/dist/components/Modal.js +245 -0
  111. package/dist/components/ModalButtons.cjs +385 -0
  112. package/dist/components/ModalButtons.js +10 -0
  113. package/dist/components/ModalContent.cjs +57 -0
  114. package/dist/components/ModalContent.js +7 -0
  115. package/dist/components/ModalHeader.cjs +426 -0
  116. package/dist/components/ModalHeader.js +11 -0
  117. package/dist/components/ModalScrim.cjs +64 -0
  118. package/dist/components/ModalScrim.js +7 -0
  119. package/dist/components/NavigationTab.cjs +431 -0
  120. package/dist/components/NavigationTab.js +10 -0
  121. package/dist/components/NavigationTabs.cjs +477 -0
  122. package/dist/components/NavigationTabs.js +56 -0
  123. package/dist/components/Notification.cjs +640 -0
  124. package/dist/components/Notification.js +117 -0
  125. package/dist/components/OptionPill.cjs +478 -0
  126. package/dist/components/OptionPill.js +11 -0
  127. package/dist/components/Paragraph.cjs +231 -0
  128. package/dist/components/Paragraph.js +8 -0
  129. package/dist/components/Password.cjs +700 -0
  130. package/dist/components/Password.js +53 -0
  131. package/dist/components/ProjectBar.cjs +242 -0
  132. package/dist/components/ProjectBar.js +63 -0
  133. package/dist/components/Radio.cjs +349 -0
  134. package/dist/components/Radio.js +131 -0
  135. package/dist/components/Search.cjs +767 -0
  136. package/dist/components/Search.js +12 -0
  137. package/dist/components/Select.cjs +758 -0
  138. package/dist/components/Select.js +12 -0
  139. package/dist/components/SideMenu.cjs +54 -0
  140. package/dist/components/SideMenu.js +21 -0
  141. package/dist/components/SideMenuGroup.cjs +422 -0
  142. package/dist/components/SideMenuGroup.js +83 -0
  143. package/dist/components/SideMenuItem.cjs +388 -0
  144. package/dist/components/SideMenuItem.js +70 -0
  145. package/dist/components/Stack.cjs +138 -0
  146. package/dist/components/Stack.js +7 -0
  147. package/dist/components/StatusPill.cjs +265 -0
  148. package/dist/components/StatusPill.js +52 -0
  149. package/dist/components/Stepper.cjs +885 -0
  150. package/dist/components/Stepper.js +105 -0
  151. package/dist/components/Subheader.cjs +226 -0
  152. package/dist/components/Subheader.js +8 -0
  153. package/dist/components/Surface.cjs +98 -0
  154. package/dist/components/Surface.js +40 -0
  155. package/dist/components/Swatch.cjs +1728 -0
  156. package/dist/components/Swatch.js +1319 -0
  157. package/dist/components/Textarea.cjs +269 -0
  158. package/dist/components/Textarea.js +96 -0
  159. package/dist/components/Theme.cjs +36 -0
  160. package/dist/components/Theme.js +7 -0
  161. package/dist/components/Time.cjs +1118 -0
  162. package/dist/components/Time.js +353 -0
  163. package/dist/components/Toast.cjs +644 -0
  164. package/dist/components/Toast.js +218 -0
  165. package/dist/components/Tooltip.cjs +273 -0
  166. package/dist/components/Tooltip.js +9 -0
  167. package/dist/components/TopBar.cjs +352 -0
  168. package/dist/components/TopBar.js +132 -0
  169. package/dist/components/useInfiniteScroll.cjs +57 -0
  170. package/dist/components/useInfiniteScroll.js +8 -0
  171. package/dist/components/useMatchesMedia.cjs +53 -0
  172. package/dist/components/useMatchesMedia.js +9 -0
  173. package/dist/components/useMenuSystem.cjs +358 -0
  174. package/dist/components/useMenuSystem.js +11 -0
  175. package/dist/components/useMounted.cjs +39 -0
  176. package/dist/components/useMounted.js +8 -0
  177. package/dist/fonts.css +21 -0
  178. package/dist/icons-light[FILL]-PPZXOLWS.woff2 +0 -0
  179. package/dist/icons-normal[FILL]-PPZXOLWS.woff2 +0 -0
  180. package/dist/index.css +4401 -0
  181. package/dist/open-sans-55T6A4JE.woff2 +0 -0
  182. package/dist/types.cjs +18 -0
  183. package/dist/types.js +0 -0
  184. package/package.json +66 -0
  185. package/src/brand.css +125 -0
  186. package/src/classNames.ts +144 -0
  187. package/src/components/Breadcrumbs.tsx +116 -0
  188. package/src/components/Button.tsx +210 -0
  189. package/src/components/CalendarRange.tsx +429 -0
  190. package/src/components/Caption.tsx +101 -0
  191. package/src/components/Checkbox.tsx +196 -0
  192. package/src/components/ContentTab.tsx +66 -0
  193. package/src/components/ContentTabs.tsx +103 -0
  194. package/src/components/DMSiLogo.tsx +32 -0
  195. package/src/components/DataGrid.tsx +948 -0
  196. package/src/components/DataGridCell.tsx +384 -0
  197. package/src/components/DataTable.tsx +835 -0
  198. package/src/components/DateInput.tsx +188 -0
  199. package/src/components/DateRangeInput.tsx +179 -0
  200. package/src/components/DebugJson.tsx +24 -0
  201. package/src/components/Display.tsx +60 -0
  202. package/src/components/EditingContext.tsx +40 -0
  203. package/src/components/FilterGroup.tsx +234 -0
  204. package/src/components/FullViewportBox.tsx +11 -0
  205. package/src/components/Grid.tsx +75 -0
  206. package/src/components/GridContainer.tsx +124 -0
  207. package/src/components/Heading.tsx +66 -0
  208. package/src/components/HorizontalDivider.tsx +3 -0
  209. package/src/components/Icon.tsx +36 -0
  210. package/src/components/Input.tsx +511 -0
  211. package/src/components/InputGroup.tsx +51 -0
  212. package/src/components/Label.tsx +40 -0
  213. package/src/components/Link.tsx +106 -0
  214. package/src/components/List.tsx +10 -0
  215. package/src/components/LiveChatComponent.tsx +56 -0
  216. package/src/components/LogoAgilityTopBar.tsx +53 -0
  217. package/src/components/LogoDMSiTopBar.tsx +32 -0
  218. package/src/components/LogoMillworkTopBar.tsx +118 -0
  219. package/src/components/MainBar.tsx +83 -0
  220. package/src/components/Menu.tsx +286 -0
  221. package/src/components/MenuOption.tsx +275 -0
  222. package/src/components/MobileDataGrid.tsx +135 -0
  223. package/src/components/Modal.tsx +271 -0
  224. package/src/components/ModalButtons.tsx +44 -0
  225. package/src/components/ModalContent.tsx +23 -0
  226. package/src/components/ModalHeader.tsx +41 -0
  227. package/src/components/ModalScrim.tsx +35 -0
  228. package/src/components/NavigationTab.tsx +89 -0
  229. package/src/components/NavigationTabs.tsx +63 -0
  230. package/src/components/Notification.tsx +120 -0
  231. package/src/components/OptionPill.tsx +114 -0
  232. package/src/components/Paragraph.tsx +49 -0
  233. package/src/components/Password.tsx +46 -0
  234. package/src/components/ProjectBar.tsx +76 -0
  235. package/src/components/Radio.tsx +140 -0
  236. package/src/components/Search.tsx +129 -0
  237. package/src/components/Select.tsx +104 -0
  238. package/src/components/SideMenu.tsx +21 -0
  239. package/src/components/SideMenuGroup.tsx +81 -0
  240. package/src/components/SideMenuItem.tsx +90 -0
  241. package/src/components/Stack.tsx +179 -0
  242. package/src/components/StatusPill.tsx +51 -0
  243. package/src/components/Stepper.tsx +91 -0
  244. package/src/components/Subheader.tsx +44 -0
  245. package/src/components/Surface.tsx +34 -0
  246. package/src/components/Swatch.tsx +1066 -0
  247. package/src/components/Textarea.tsx +101 -0
  248. package/src/components/Theme.tsx +13 -0
  249. package/src/components/Time.tsx +438 -0
  250. package/src/components/Toast.tsx +244 -0
  251. package/src/components/Tooltip.tsx +137 -0
  252. package/src/components/TopBar.tsx +124 -0
  253. package/src/components/useInfiniteScroll.tsx +40 -0
  254. package/src/components/useMatchesMedia.tsx +28 -0
  255. package/src/components/useMenuSystem.tsx +367 -0
  256. package/src/components/useMounted.tsx +14 -0
  257. package/src/darkmode.css +140 -0
  258. package/src/fonts.css +23 -0
  259. package/src/index.css +509 -0
  260. package/src/index.tsx +2 -0
  261. package/src/types.ts +149 -0
  262. package/src/utils/formatting.tsx +81 -0
  263. package/src/utils.ts +23 -0
@@ -0,0 +1,234 @@
1
+ "use client";
2
+
3
+ import { ComponentProps, useState, Children, isValidElement } from "react";
4
+ import { Label } from "./Label";
5
+
6
+ import { Checkbox } from "./Checkbox";
7
+ import { OptionPill } from "./OptionPill";
8
+ import clsx from "clsx";
9
+ import { Link } from "./Link";
10
+ import { Search } from "./Search";
11
+ import {
12
+ baseTransition,
13
+ componentGap,
14
+ componentPaddingBottom,
15
+ componentPaddingY,
16
+ layoutGroupGap,
17
+ layoutPaddingBottom,
18
+ } from "../classNames";
19
+ import { Icon } from "./Icon";
20
+
21
+ type FilterGroupProps = {
22
+ label: string;
23
+ open?: boolean;
24
+ showMore?: boolean;
25
+ type?: "link" | "checkbox" | "summary";
26
+ onShowMore?: () => void;
27
+ onClearAll?: () => void;
28
+ } & (
29
+ | {
30
+ showSearchField: true;
31
+ searchValue: string;
32
+ onSearchChange: React.ChangeEventHandler<HTMLInputElement>;
33
+ }
34
+ | {
35
+ showSearchField?: false | undefined;
36
+ searchValue?: string;
37
+ onSearchChange?: React.ChangeEventHandler<HTMLInputElement>;
38
+ }
39
+ );
40
+
41
+ export const FilterGroup = ({
42
+ label,
43
+ type = "link",
44
+ open = false,
45
+ showMore = false,
46
+ onShowMore,
47
+ onClearAll,
48
+ children,
49
+ showSearchField = false,
50
+ searchValue,
51
+ onSearchChange,
52
+ ...props
53
+ }: ComponentProps<"div"> & FilterGroupProps) => {
54
+ const isSummary = type === "summary";
55
+ const [internalExpanded, setInternalExpanded] = useState(open);
56
+ const [showAllItems, setShowAllItems] = useState(false);
57
+ const isExpanded = open || internalExpanded;
58
+ const childArray = Children.toArray(children).filter(isValidElement);
59
+ const shouldShowAll = isSummary || showAllItems;
60
+ const visibleChildren = childArray.slice(
61
+ 0,
62
+ shouldShowAll ? childArray.length : 5,
63
+ );
64
+ const showShowMoreLink =
65
+ showMore &&
66
+ !isSummary &&
67
+ childArray.length > 5 &&
68
+ !showAllItems &&
69
+ isExpanded;
70
+
71
+ return (
72
+ <div
73
+ {...props}
74
+ className={clsx(
75
+ "border-b border-border-primary-normal",
76
+ isSummary ? layoutPaddingBottom : componentPaddingBottom,
77
+ )}
78
+ >
79
+ <div
80
+ className={clsx(
81
+ "flex items-center justify-between cursor-pointer",
82
+ layoutGroupGap,
83
+ )}
84
+ onClick={handleToggleExpanded}
85
+ >
86
+ <Label>{label}</Label>
87
+
88
+ {type !== "summary" ? (
89
+ <Icon
90
+ name="keyboard_arrow_down"
91
+ className={clsx(
92
+ baseTransition.replace(
93
+ "transition-colors",
94
+ "transition-transform",
95
+ ),
96
+ isExpanded && "rotate-180",
97
+ "text-icon-action-primary-normal",
98
+ )}
99
+ />
100
+ ) : (
101
+ <Link
102
+ className={clsx("block", componentPaddingY)}
103
+ onClick={handleClearAll}
104
+ >
105
+ Clear All
106
+ </Link>
107
+ )}
108
+ </div>
109
+
110
+ <div
111
+ className={clsx(
112
+ "grid",
113
+ baseTransition.replace(
114
+ "transition-colors",
115
+ "transition-[grid-template-rows]",
116
+ ),
117
+ isExpanded || isSummary ? "grid-rows-[1fr]" : "grid-rows-[0fr]",
118
+ )}
119
+ >
120
+ <div
121
+ className={clsx(
122
+ "overflow-hidden",
123
+ componentGap,
124
+ (isExpanded || isSummary || internalExpanded) &&
125
+ "mt-mobile-component-gap desktop:mt-desktop-component-gap compact:mt-desktop-compact-component-gap",
126
+ )}
127
+ >
128
+ {!isSummary && showSearchField && (
129
+ <Search
130
+ style={{ marginBottom: '2px' }}
131
+ onChange={onSearchChange}
132
+ value={searchValue}
133
+ />
134
+ )}
135
+
136
+ <div className={clsx(isSummary && `flex flex-col ${componentGap}`)}>
137
+ {visibleChildren}
138
+ </div>
139
+ {showShowMoreLink && (
140
+ <Link
141
+ className={clsx("block", "!items-start", componentPaddingY)}
142
+ onClick={handleOnShowMore}
143
+ >
144
+ Show More
145
+ </Link>
146
+ )}
147
+ </div>
148
+ </div>
149
+ </div>
150
+ );
151
+
152
+ function handleOnShowMore(e: React.MouseEvent<HTMLElement>) {
153
+ e.stopPropagation();
154
+ setShowAllItems(true);
155
+ onShowMore?.();
156
+ }
157
+
158
+ function handleToggleExpanded(e: React.MouseEvent<HTMLElement>) {
159
+ if (type === "summary") return;
160
+ e.stopPropagation();
161
+ setInternalExpanded(!internalExpanded);
162
+ }
163
+
164
+ function handleClearAll(e: React.MouseEvent<HTMLElement>) {
165
+ e.stopPropagation();
166
+ onClearAll?.();
167
+ }
168
+ };
169
+
170
+ type FilterGroupItemProps = {
171
+ count?: number;
172
+ type?: FilterGroupProps["type"];
173
+ };
174
+
175
+ export const FilterGroupItem = ({
176
+ type = "link",
177
+ children,
178
+ onClick,
179
+ ...props
180
+ }: ComponentProps<React.ElementType> & FilterGroupItemProps) => {
181
+ return (
182
+ <div
183
+ onClick={handleClick}
184
+ {...props}
185
+ className={clsx(
186
+ "flex items-center justify-between *:first:flex-1 cursor-pointer",
187
+ type !== "summary"
188
+ ? "*:first:py-mobile-component-padding *:first:desktop:py-desktop-component-padding *:first:compact:py-desktop-compact-component-padding"
189
+ : "",
190
+ )}
191
+ >
192
+ <FilterGroupItemChildComponent {...props} type={type} count={props.count}>
193
+ <span className="flex items-center justify-between w-full">
194
+ {children}
195
+
196
+ {type !== "summary" && props.count && <span>({props.count})</span>}
197
+ </span>
198
+ </FilterGroupItemChildComponent>
199
+ </div>
200
+ );
201
+
202
+ function handleClick(e: React.MouseEvent<HTMLElement>) {
203
+ e.stopPropagation();
204
+ onClick?.();
205
+ }
206
+ };
207
+
208
+ const FilterGroupItemChildComponent = ({
209
+ type = "link",
210
+ children,
211
+ ...props
212
+ }: ComponentProps<React.ElementType> & {
213
+ type: FilterGroupItemProps["type"];
214
+ }) => {
215
+ if (type === "checkbox") {
216
+ return <Checkbox paragraphClassName="w-full" label={children} {...props} />;
217
+ }
218
+
219
+ if (type === "summary") {
220
+ return (
221
+ <div>
222
+ <OptionPill removable {...props}>
223
+ {children}
224
+ </OptionPill>
225
+ </div>
226
+ );
227
+ }
228
+
229
+ return (
230
+ <Link variant="secondary" {...props}>
231
+ {children}
232
+ </Link>
233
+ );
234
+ };
@@ -0,0 +1,11 @@
1
+ export function FullViewportLayout({
2
+ children,
3
+ }: {
4
+ children: React.ReactNode;
5
+ }) {
6
+ return (
7
+ <div className="flex flex-col min-h-screen min-w-screen p-mobile-container-padding desktop:p-desktop-container-padding compact:p-desktop-compact-container-padding items-center justify-center bg-background-grouped-secondary-normal">
8
+ {children}
9
+ </div>
10
+ );
11
+ }
@@ -0,0 +1,75 @@
1
+ import clsx from "clsx";
2
+
3
+ type GridProps = {
4
+ children?: React.ReactNode;
5
+ columns?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
6
+ sizing?: "container" | "layout" | "layout-group" | "component";
7
+ padding?: boolean;
8
+ fullWidth?: boolean;
9
+ };
10
+ export function Grid({
11
+ children,
12
+ columns = 1,
13
+ sizing,
14
+ padding,
15
+ fullWidth = false,
16
+ }: GridProps) {
17
+ const gridClass =
18
+ columns === 1
19
+ ? "grid-cols-1"
20
+ : columns === 2
21
+ ? "grid-cols-2"
22
+ : columns === 3
23
+ ? "grid-cols-3"
24
+ : columns === 4
25
+ ? "grid-cols-4"
26
+ : columns === 5
27
+ ? "grid-cols-5"
28
+ : columns === 6
29
+ ? "grid-cols-6"
30
+ : columns === 7
31
+ ? "grid-cols-7"
32
+ : columns === 8
33
+ ? "grid-cols-8"
34
+ : columns === 9
35
+ ? "grid-cols-9"
36
+ : columns === 10
37
+ ? "grid-cols-10"
38
+ : columns === 11
39
+ ? "grid-cols-11"
40
+ : columns === 12
41
+ ? "grid-cols-12"
42
+ : "";
43
+
44
+ return (
45
+ <div
46
+ className={clsx(
47
+ "grid",
48
+ gridClass,
49
+ padding &&
50
+ sizing === "container" &&
51
+ "p-mobile-container-padding desktop:p-desktop-container-padding compact:p-desktop-compact-container-padding",
52
+ padding &&
53
+ sizing === "layout" &&
54
+ "p-mobile-layout-padding desktop:p-desktop-layout-padding compact:p-desktop-compact-layout-padding",
55
+ padding &&
56
+ sizing === "layout-group" &&
57
+ "p-mobile-layout-group-padding desktop:p-desktop-layout-group-padding compact:p-desktop-compact-layout-group-padding",
58
+ padding &&
59
+ sizing === "component" &&
60
+ "p-mobile-component-padding desktop:p-desktop-component-padding compact:p-desktop-compact-component-padding",
61
+ sizing === "container" &&
62
+ "gap-mobile-container-gap desktop:gap-desktop-container-gap compact:gap-desktop-compact-container-gap",
63
+ sizing === "layout" &&
64
+ "gap-mobile-layout-gap desktop:gap-desktop-layout-gap compact:gap-desktop-compact-layout-gap",
65
+ sizing === "layout-group" &&
66
+ "gap-mobile-layout-group-gap desktop:gap-desktop-layout-group-gap compact:gap-desktop-compact-layout-group-gap",
67
+ sizing === "component" &&
68
+ "gap-mobile-component-gap desktop:gap-desktop-component-gap compact:gap-desktop-compact-component-gap",
69
+ fullWidth && "w-full",
70
+ )}
71
+ >
72
+ {children}
73
+ </div>
74
+ );
75
+ }
@@ -0,0 +1,124 @@
1
+ import { ComponentProps, Children } from "react";
2
+ import { Sizing } from "../types";
3
+ import clsx from "clsx";
4
+
5
+ type GridContainerProps = {
6
+ children: React.ReactNode;
7
+ sizing?: Sizing;
8
+ padding?: boolean;
9
+ hasSideMenu?: boolean;
10
+ columns?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
11
+ } & Omit<ComponentProps<"div">, "className">;
12
+
13
+ // Grid class configuration maps for better maintainability
14
+ const COLUMNS_WITH_SIDE_MENU_MAP: Record<number, string> = {
15
+ 1: "grid-cols-1",
16
+ 2: "sm:grid-cols-2",
17
+ 3: "sm:grid-cols-2 md:grid-cols-3",
18
+ 4: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4",
19
+ 5: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4",
20
+ 6: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4",
21
+ 7: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6",
22
+ 8: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6",
23
+ 9: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6",
24
+ 10: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6",
25
+ 11: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-8",
26
+ 12: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-8",
27
+ };
28
+
29
+ const COLUMNS_WITHOUT_SIDE_MENU_MAP: Record<number, string> = {
30
+ 1: "grid-cols-1",
31
+ 2: "sm:grid-cols-2",
32
+ 3: "sm:grid-cols-2 md:grid-cols-3",
33
+ 4: "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4",
34
+ 5: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5",
35
+ 6: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6",
36
+ 7: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 2xl:grid-cols-7",
37
+ 8: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 2xl:grid-cols-8",
38
+ 9: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 2xl:grid-cols-9",
39
+ 10: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8 2xl:grid-cols-10",
40
+ 11: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8 2xl:grid-cols-11",
41
+ 12: "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8 2xl:grid-cols-12",
42
+ };
43
+
44
+ const getChildCountBasedClasses = (
45
+ childCount: number,
46
+ hasSideMenu: boolean,
47
+ ): string => {
48
+ if (hasSideMenu) {
49
+ if (childCount <= 1) return "grid-cols-1";
50
+ if (childCount <= 2) return "sm:grid-cols-2";
51
+ if (childCount === 3) return "sm:grid-cols-2 md:grid-cols-3";
52
+ if (childCount <= 5) return "sm:grid-cols-2 md:grid-cols-3";
53
+ return "sm:grid-cols-2 md:grid-cols-3 xl:grid-cols-4 2xl:grid-cols-6";
54
+ }
55
+
56
+ if (childCount <= 1) return "grid-cols-1";
57
+ if (childCount <= 2) return "sm:grid-cols-2";
58
+ if (childCount === 3) return "sm:grid-cols-2 md:grid-cols-3";
59
+ if (childCount <= 5) return "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4";
60
+ if (childCount <= 6)
61
+ return "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6";
62
+ if (childCount === 7)
63
+ return "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6";
64
+ if (childCount <= 11)
65
+ return "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 2xl:grid-cols-8";
66
+ return "sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-8 2xl:grid-cols-12";
67
+ };
68
+
69
+ const getGridClasses = (
70
+ childCount: number,
71
+ hasSideMenu?: boolean,
72
+ columns?: number,
73
+ ) => {
74
+ // If explicit columns are set, use the appropriate map
75
+ if (columns) {
76
+ const map = hasSideMenu
77
+ ? COLUMNS_WITH_SIDE_MENU_MAP
78
+ : COLUMNS_WITHOUT_SIDE_MENU_MAP;
79
+ return map[columns] ?? map[12]; // Fallback to 12 columns if invalid column count
80
+ }
81
+
82
+ // Otherwise, use child count based logic
83
+ return getChildCountBasedClasses(childCount, hasSideMenu ?? false);
84
+ };
85
+
86
+ export const GridContainer = ({
87
+ children,
88
+ sizing = "container",
89
+ padding,
90
+ hasSideMenu = false,
91
+ columns,
92
+ }: GridContainerProps) => {
93
+ const childCount = Children.count(children);
94
+ return (
95
+ <div
96
+ className={clsx(
97
+ padding &&
98
+ sizing === "container" &&
99
+ "p-mobile-container-padding desktop:p-desktop-container-padding compact:p-desktop-compact-container-padding",
100
+ padding &&
101
+ sizing === "layout" &&
102
+ "p-mobile-layout-padding desktop:p-desktop-layout-padding compact:p-desktop-compact-layout-padding",
103
+ padding &&
104
+ sizing === "layout-group" &&
105
+ "p-mobile-layout-group-padding desktop:p-desktop-layout-group-padding compact:p-desktop-compact-layout-group-padding",
106
+ padding &&
107
+ sizing === "component" &&
108
+ "p-mobile-component-padding desktop:p-desktop-component-padding compact:p-desktop-compact-component-padding",
109
+ sizing === "layout-group" &&
110
+ "gap-mobile-layout-group-gap desktop:gap-desktop-layout-group-gap compact:gap-compact-layout-group-gap",
111
+ sizing === "layout" &&
112
+ "gap-mobile-layout-gap desktop:gap-desktop-layout-gap compact:gap-compact-layout-gap",
113
+ sizing === "container" &&
114
+ "gap-mobile-container-gap desktop:gap-desktop-container-gap compact:gap-compact-container-gap",
115
+ sizing === "component" &&
116
+ "gap-mobile-component-gap desktop:gap-desktop-component-gap compact:gap-compact-component-gap",
117
+ "w-full grid",
118
+ getGridClasses(childCount, hasSideMenu, columns),
119
+ )}
120
+ >
121
+ {children}
122
+ </div>
123
+ );
124
+ };
@@ -0,0 +1,66 @@
1
+ import clsx from "clsx";
2
+ import { AsProps, TextAttributes, TypographyProps } from "../types";
3
+ import { typography } from "../classNames";
4
+
5
+ type Tags = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "span" | "p";
6
+
7
+ type HeadingVariant = "heading1" | "heading2" | "heading3";
8
+
9
+ type HeadingProps = {
10
+ as?: Tags;
11
+ variant?: HeadingVariant;
12
+ } & AsProps<Tags> &
13
+ TextAttributes &
14
+ TypographyProps;
15
+
16
+ export const Heading = ({
17
+ className,
18
+ children,
19
+ as,
20
+ color,
21
+ align,
22
+ variant = "heading1",
23
+ ...props
24
+ }: HeadingProps) => {
25
+ const defaultElement =
26
+ variant === "heading1" ? "h1" : variant === "heading2" ? "h2" : "h3";
27
+ const Element = as ?? defaultElement;
28
+
29
+ return (
30
+ <Element
31
+ className={clsx(
32
+ typography[variant],
33
+ className,
34
+ align === "left" && "text-left",
35
+ align === "center" && "text-center",
36
+ align === "right" && "text-right",
37
+ )}
38
+ style={{
39
+ ...props.style,
40
+ color: color ? `var(--color-${color})` : undefined,
41
+ }}
42
+ {...props}
43
+ >
44
+ {children}
45
+ </Element>
46
+ );
47
+ };
48
+
49
+ Heading.displayName = "Heading";
50
+
51
+ // Backward compatibility exports
52
+ export const Heading1 = (props: Omit<HeadingProps, "variant">) => (
53
+ <Heading {...props} variant="heading1" />
54
+ );
55
+
56
+ export const Heading2 = (props: Omit<HeadingProps, "variant">) => (
57
+ <Heading {...props} variant="heading2" />
58
+ );
59
+
60
+ export const Heading3 = (props: Omit<HeadingProps, "variant">) => (
61
+ <Heading {...props} variant="heading3" />
62
+ );
63
+
64
+ Heading1.displayName = "Heading1";
65
+ Heading2.displayName = "Heading2";
66
+ Heading3.displayName = "Heading3";
@@ -0,0 +1,3 @@
1
+ export function HorizontalDivider() {
2
+ return <hr className="w-full border-t border-border-primary-normal" />;
3
+ }
@@ -0,0 +1,36 @@
1
+ import clsx from "clsx";
2
+ import { IconSize } from "../types";
3
+ import { ComponentProps } from "react";
4
+
5
+ type IconProps = {
6
+ name: string;
7
+ size?: IconSize;
8
+ variant?: "outline" | "filled";
9
+ } & Omit<ComponentProps<"span">, "name">;
10
+
11
+ export function Icon({
12
+ name,
13
+ size = 24,
14
+ variant = "outline",
15
+ ...props
16
+ }: IconProps) {
17
+ const variantStyle = variant === "filled" ? '"FILL" 1' : '"FILL" 0';
18
+ const weightStyle = size === 16 ? '"wght" 400' : '"wght" 300';
19
+ return (
20
+ <span
21
+ {...props}
22
+ className={clsx(
23
+ "icon",
24
+ `icon-${size}`,
25
+ // size === 16 ? "font-normal" : "font-light", // size 16 font weight is not working as normal from before
26
+ props.className,
27
+ )}
28
+ style={{
29
+ fontVariationSettings: variantStyle + `, ${weightStyle}`,
30
+ ...props.style,
31
+ }}
32
+ >
33
+ {name}
34
+ </span>
35
+ );
36
+ }