ui-foundations 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +259 -0
  2. package/dist/assets/fonts/README.md +5 -0
  3. package/dist/assets/icons/location-roundtrip.svg +5 -0
  4. package/dist/assets/icons/location-track.svg +4 -0
  5. package/dist/assets/icons/location.svg +4 -0
  6. package/dist/assets/icons/lock-checkmark.svg +4 -0
  7. package/dist/assets/icons/lock-close.svg +4 -0
  8. package/dist/assets/icons/lock-open.svg +5 -0
  9. package/dist/assets/icons/login.svg +4 -0
  10. package/dist/assets/icons/logout.svg +3 -0
  11. package/dist/assets/icons/loudspeaker.svg +3 -0
  12. package/dist/assets/icons/lounge-chair.svg +5 -0
  13. package/dist/assets/icons/luggage-backpack.svg +4 -0
  14. package/dist/assets/icons/luggage-backpacker.svg +4 -0
  15. package/dist/assets/icons/luggage-box.svg +5 -0
  16. package/dist/assets/icons/luggage-extra.svg +4 -0
  17. package/dist/assets/icons/luggage-golf.svg +4 -0
  18. package/dist/assets/icons/luggage-hand-plus.svg +5 -0
  19. package/dist/assets/icons/luggage-hand.svg +4 -0
  20. package/dist/assets/icons/luggage-liquids.svg +6 -0
  21. package/dist/assets/icons/luggage-notincluded.svg +3 -0
  22. package/dist/assets/icons/luggage-plus.svg +5 -0
  23. package/dist/assets/icons/luggage-sport.svg +4 -0
  24. package/dist/assets/icons/luggage-suitcase-extra.svg +5 -0
  25. package/dist/assets/icons/luggage-suitcase.svg +4 -0
  26. package/dist/assets/icons/luggage-trolley-extra.svg +5 -0
  27. package/dist/assets/icons/luggage-trolley.svg +3 -0
  28. package/dist/assets/icons/luggage-weekender.svg +4 -0
  29. package/dist/assets/icons/luggage.svg +3 -0
  30. package/dist/assets/icons/lying-chair.svg +4 -0
  31. package/dist/assets/icons/magnet.svg +3 -0
  32. package/dist/assets/icons/mail.svg +4 -0
  33. package/dist/assets/icons/map.svg +3 -0
  34. package/dist/assets/icons/meal-serving-plate.svg +5 -0
  35. package/dist/assets/icons/meal.svg +5 -0
  36. package/dist/assets/icons/medal.svg +4 -0
  37. package/dist/assets/icons/megaphone.svg +5 -0
  38. package/dist/assets/icons/menu-filter.svg +3 -0
  39. package/dist/assets/icons/menu.svg +3 -0
  40. package/dist/assets/icons/message-alert.svg +3 -0
  41. package/dist/assets/icons/message-info.svg +4 -0
  42. package/dist/assets/icons/message-love.svg +4 -0
  43. package/dist/assets/icons/message-push.svg +4 -0
  44. package/dist/assets/icons/message-text.svg +4 -0
  45. package/dist/assets/icons/message.svg +3 -0
  46. package/dist/assets/icons/mic.svg +4 -0
  47. package/dist/assets/icons/miniclub.svg +5 -0
  48. package/dist/assets/icons/minimize.svg +3 -0
  49. package/dist/assets/icons/minus-circled.svg +4 -0
  50. package/dist/assets/icons/minus-heavy.svg +3 -0
  51. package/dist/assets/icons/minus.svg +3 -0
  52. package/dist/assets/icons/moon.svg +3 -0
  53. package/dist/assets/icons/moose.svg +5 -0
  54. package/dist/assets/icons/mountain.svg +4 -0
  55. package/dist/assets/icons/mouth.svg +3 -0
  56. package/dist/assets/icons/muffin.svg +4 -0
  57. package/dist/assets/icons/museum.svg +3 -0
  58. package/dist/assets/icons/mustache.svg +3 -0
  59. package/dist/assets/icons/network.svg +3 -0
  60. package/dist/assets/icons/newsletter.svg +6 -0
  61. package/dist/assets/icons/none.svg +3 -0
  62. package/dist/assets/icons/nordic-walking.svg +3 -0
  63. package/dist/assets/icons/notepad.svg +3 -0
  64. package/dist/assets/icons/number.svg +3 -0
  65. package/dist/assets/icons/on-board-meals.svg +4 -0
  66. package/dist/assets/icons/paperjet.svg +4 -0
  67. package/dist/assets/icons/parasol.svg +4 -0
  68. package/dist/assets/icons/parking-garage.svg +4 -0
  69. package/dist/assets/icons/parking-time.svg +4 -0
  70. package/dist/assets/icons/pass-boarding.svg +4 -0
  71. package/dist/assets/icons/paw.svg +3 -0
  72. package/dist/assets/icons/pencil.svg +3 -0
  73. package/dist/assets/icons/pharmacy.svg +4 -0
  74. package/dist/assets/icons/phone-checkin.svg +4 -0
  75. package/dist/assets/icons/phone-push.svg +5 -0
  76. package/dist/assets/icons/phone.svg +3 -0
  77. package/dist/assets/icons/picture-mountain.svg +5 -0
  78. package/dist/assets/icons/picture-stack.svg +5 -0
  79. package/dist/assets/icons/picture-sunset.svg +4 -0
  80. package/dist/assets/icons/picture.svg +3 -0
  81. package/dist/assets/icons/piggy-bank.svg +5 -0
  82. package/dist/assets/icons/pin.svg +3 -0
  83. package/dist/assets/icons/play-circled.svg +4 -0
  84. package/dist/assets/icons/play-next.svg +3 -0
  85. package/dist/assets/icons/play-pause.svg +3 -0
  86. package/dist/assets/icons/play-prev.svg +3 -0
  87. package/dist/assets/icons/play-stop-circled.svg +4 -0
  88. package/dist/assets/icons/play-stop.svg +3 -0
  89. package/dist/assets/icons/play.svg +3 -0
  90. package/dist/assets/icons/plug.svg +3 -0
  91. package/dist/assets/icons/plus-circled.svg +4 -0
  92. package/dist/assets/icons/plus-heavy.svg +3 -0
  93. package/dist/assets/icons/plus.svg +3 -0
  94. package/dist/assets/icons/popsicle.svg +3 -0
  95. package/dist/assets/icons/postit.svg +4 -0
  96. package/dist/assets/icons/pricetag.svg +4 -0
  97. package/dist/assets/icons/printer.svg +5 -0
  98. package/dist/assets/icons/projector-canvas.svg +3 -0
  99. package/dist/assets/icons/puzzle.svg +3 -0
  100. package/dist/assets/icons/question-mark-bold.svg +4 -0
  101. package/dist/assets/icons/question-mark-circled.svg +4 -0
  102. package/dist/assets/icons/question-mark-ultrabold.svg +4 -0
  103. package/dist/assets/icons/question-mark.svg +3 -0
  104. package/dist/assets/icons/rainbow.svg +5 -0
  105. package/dist/assets/icons/reduced-circled.svg +4 -0
  106. package/dist/assets/icons/reduced.svg +3 -0
  107. package/dist/assets/icons/relax.svg +4 -0
  108. package/dist/assets/icons/resize.svg +4 -0
  109. package/dist/assets/icons/robot-smile.svg +16 -0
  110. package/dist/assets/icons/robot.svg +8 -0
  111. package/dist/assets/icons/room-location.svg +5 -0
  112. package/dist/assets/icons/room-selection.svg +5 -0
  113. package/dist/assets/icons/room-upgrade.svg +5 -0
  114. package/dist/assets/icons/running-shoe.svg +4 -0
  115. package/dist/assets/icons/sail.svg +3 -0
  116. package/dist/assets/icons/sailboat.svg +4 -0
  117. package/dist/assets/icons/sailing-yawl.svg +3 -0
  118. package/dist/assets/icons/save.svg +4 -0
  119. package/dist/assets/icons/scan-code.svg +5 -0
  120. package/dist/assets/icons/scissors.svg +4 -0
  121. package/dist/assets/icons/seal.svg +4 -0
  122. package/dist/assets/icons/search-heart.svg +4 -0
  123. package/dist/assets/icons/search-list.svg +4 -0
  124. package/dist/assets/icons/search.svg +4 -0
  125. package/dist/assets/icons/seat-check.svg +3 -0
  126. package/dist/assets/icons/seat-child.svg +4 -0
  127. package/dist/assets/icons/seat-comfort.svg +3 -0
  128. package/dist/assets/icons/seat-extra-legroom.svg +5 -0
  129. package/dist/assets/icons/seat-extra-space.svg +5 -0
  130. package/dist/assets/icons/seat-extra.svg +5 -0
  131. package/dist/assets/icons/seat-plus.svg +3 -0
  132. package/dist/assets/icons/seat-premium.svg +4 -0
  133. package/dist/assets/icons/seat-selection.svg +10 -0
  134. package/dist/assets/icons/seat-star.svg +3 -0
  135. package/dist/assets/icons/seat-top-booked.svg +5 -0
  136. package/dist/assets/icons/seat-top.svg +4 -0
  137. package/dist/assets/icons/seat.svg +3 -0
  138. package/dist/assets/icons/security-check.svg +7 -0
  139. package/dist/assets/icons/select.svg +3 -0
  140. package/dist/assets/icons/send.svg +3 -0
  141. package/dist/assets/icons/service-bell.svg +3 -0
  142. package/dist/assets/icons/serving-trolley.svg +6 -0
  143. package/dist/assets/icons/settings.svg +4 -0
  144. package/dist/assets/icons/sex-diversity.svg +3 -0
  145. package/dist/assets/icons/sex-female.svg +3 -0
  146. package/dist/assets/icons/sex-male.svg +3 -0
  147. package/dist/assets/icons/share-box.svg +4 -0
  148. package/dist/assets/icons/share.svg +6 -0
  149. package/dist/assets/icons/shield-check.svg +4 -0
  150. package/dist/assets/icons/shield-flex.svg +6 -0
  151. package/dist/assets/icons/shield-warning.svg +3 -0
  152. package/dist/assets/icons/shield.svg +3 -0
  153. package/dist/assets/icons/ship-river.svg +4 -0
  154. package/dist/assets/icons/ship.svg +5 -0
  155. package/dist/assets/icons/shoe.svg +3 -0
  156. package/dist/assets/icons/shop.svg +4 -0
  157. package/dist/assets/icons/shopping-bag-tui.svg +4 -0
  158. package/dist/assets/icons/shopping-bag.svg +4 -0
  159. package/dist/assets/icons/shoppingcart.svg +6 -0
  160. package/dist/assets/icons/shower-rain.svg +3 -0
  161. package/dist/assets/icons/shower.svg +3 -0
  162. package/dist/assets/icons/sign-airport.svg +4 -0
  163. package/dist/assets/icons/sign-bio.svg +5 -0
  164. package/dist/assets/icons/sign-directions.svg +12 -0
  165. package/dist/assets/icons/sign-first-aid.svg +4 -0
  166. package/dist/assets/icons/sign-gluten-free.svg +7 -0
  167. package/dist/assets/icons/sign-hotel.svg +3 -0
  168. package/dist/assets/icons/sign-info.svg +5 -0
  169. package/dist/assets/icons/sign-parking.svg +4 -0
  170. package/dist/assets/icons/sign-vegan.svg +4 -0
  171. package/dist/assets/icons/sign-vegetarian.svg +5 -0
  172. package/dist/assets/icons/signpost-direction.svg +3 -0
  173. package/dist/assets/icons/signpost-directions.svg +3 -0
  174. package/dist/assets/icons/signpost-hotel.svg +3 -0
  175. package/dist/assets/icons/ski-crosscountry.svg +4 -0
  176. package/dist/assets/icons/ski-mountain.svg +3 -0
  177. package/dist/assets/icons/snow.svg +3 -0
  178. package/dist/assets/icons/social-distancing.svg +5 -0
  179. package/dist/assets/icons/sort.svg +3 -0
  180. package/dist/assets/icons/square.svg +3 -0
  181. package/dist/assets/icons/star-circled.svg +4 -0
  182. package/dist/assets/icons/star-half.svg +3 -0
  183. package/dist/assets/icons/star.svg +3 -0
  184. package/dist/assets/icons/stats-bar.svg +3 -0
  185. package/dist/assets/icons/stats-growth.svg +4 -0
  186. package/dist/assets/icons/stats-pie.svg +4 -0
  187. package/dist/assets/icons/stats-rise.svg +3 -0
  188. package/dist/assets/icons/steering-wheel.svg +7 -0
  189. package/dist/assets/icons/steering.svg +3 -0
  190. package/dist/assets/icons/stewardess.svg +5 -0
  191. package/dist/assets/icons/suitcase-purchase.svg +5 -0
  192. package/dist/assets/icons/sum.svg +3 -0
  193. package/dist/assets/icons/sun-circled.svg +4 -0
  194. package/dist/assets/icons/sun-hours.svg +5 -0
  195. package/dist/assets/icons/sun-set.svg +3 -0
  196. package/dist/assets/icons/sun-tui-half.svg +4 -0
  197. package/dist/assets/icons/sun-tui.svg +4 -0
  198. package/dist/assets/icons/sun.svg +4 -0
  199. package/dist/assets/icons/surfing.svg +4 -0
  200. package/dist/assets/icons/swimming-bath.svg +3 -0
  201. package/dist/assets/icons/swimming-pool.svg +3 -0
  202. package/dist/assets/icons/sync-failed.svg +4 -0
  203. package/dist/assets/icons/sync.svg +4 -0
  204. package/dist/assets/icons/tape-measure.svg +4 -0
  205. package/dist/assets/icons/target-blank.svg +3 -0
  206. package/dist/assets/icons/target.svg +5 -0
  207. package/dist/assets/icons/teddy.svg +5 -0
  208. package/dist/assets/icons/temp-air.svg +5 -0
  209. package/dist/assets/icons/temp-low.svg +4 -0
  210. package/dist/assets/icons/temp-time.svg +7 -0
  211. package/dist/assets/icons/temp-water.svg +5 -0
  212. package/dist/assets/icons/temp.svg +4 -0
  213. package/dist/assets/icons/tennis-ball.svg +4 -0
  214. package/dist/assets/icons/tennis.svg +5 -0
  215. package/dist/assets/icons/tent.svg +4 -0
  216. package/dist/assets/icons/thumbnails.svg +3 -0
  217. package/dist/assets/icons/thumbs-up--down.svg +3 -0
  218. package/dist/assets/icons/thumbs-up.svg +3 -0
  219. package/dist/assets/icons/thunder.svg +3 -0
  220. package/dist/assets/icons/ticket-coins.svg +5 -0
  221. package/dist/assets/icons/ticket-envelope.svg +5 -0
  222. package/dist/assets/icons/ticket.svg +3 -0
  223. package/dist/assets/icons/tickets.svg +3 -0
  224. package/dist/assets/icons/tipi.svg +4 -0
  225. package/dist/assets/icons/toilet-paper.svg +5 -0
  226. package/dist/assets/icons/toilet.svg +3 -0
  227. package/dist/assets/icons/toolkit-cases-open.svg +3 -0
  228. package/dist/assets/icons/toolkit-cases.svg +3 -0
  229. package/dist/assets/icons/toolkit.svg +4 -0
  230. package/dist/assets/icons/towel.svg +3 -0
  231. package/dist/assets/icons/track.svg +3 -0
  232. package/dist/assets/icons/train.svg +4 -0
  233. package/dist/assets/icons/transfer-private.svg +5 -0
  234. package/dist/assets/icons/transfer-taxi.svg +4 -0
  235. package/dist/assets/icons/transfers-coach.svg +6 -0
  236. package/dist/assets/icons/transfers-train.svg +4 -0
  237. package/dist/assets/icons/trash-crossed.svg +3 -0
  238. package/dist/assets/icons/trash.svg +4 -0
  239. package/dist/assets/icons/travel-documents.svg +6 -0
  240. package/dist/assets/icons/travel-guide.svg +5 -0
  241. package/dist/assets/icons/travel-money.svg +4 -0
  242. package/dist/assets/icons/treats-in-flight.svg +4 -0
  243. package/dist/assets/icons/trolley-purchase.svg +5 -0
  244. package/dist/assets/icons/tub.svg +5 -0
  245. package/dist/assets/icons/tui-card.svg +4 -0
  246. package/dist/assets/icons/tui-chat.svg +5 -0
  247. package/dist/assets/icons/tui-cloud.svg +3 -0
  248. package/dist/assets/icons/tui-extras.svg +4 -0
  249. package/dist/assets/icons/typography.svg +3 -0
  250. package/dist/assets/icons/ui-banner.svg +4 -0
  251. package/dist/assets/icons/umbrella.svg +5 -0
  252. package/dist/assets/icons/undo.svg +4 -0
  253. package/dist/assets/icons/upload.svg +3 -0
  254. package/dist/assets/icons/user-business.svg +4 -0
  255. package/dist/assets/icons/user-casual.svg +4 -0
  256. package/dist/assets/icons/user-chat.svg +4 -0
  257. package/dist/assets/icons/user-circled.svg +4 -0
  258. package/dist/assets/icons/user-couple.svg +3 -0
  259. package/dist/assets/icons/user-driver.svg +6 -0
  260. package/dist/assets/icons/user-drivers.svg +4 -0
  261. package/dist/assets/icons/user-expert.svg +4 -0
  262. package/dist/assets/icons/user-family.svg +4 -0
  263. package/dist/assets/icons/user-friends.svg +3 -0
  264. package/dist/assets/icons/user-group.svg +4 -0
  265. package/dist/assets/icons/user-passport.svg +5 -0
  266. package/dist/assets/icons/user-plus.svg +3 -0
  267. package/dist/assets/icons/user-skipass.svg +4 -0
  268. package/dist/assets/icons/user-visa.svg +6 -0
  269. package/dist/assets/icons/user.svg +3 -0
  270. package/dist/assets/icons/users.svg +4 -0
  271. package/dist/assets/icons/view-hidden.svg +4 -0
  272. package/dist/assets/icons/view.svg +4 -0
  273. package/dist/assets/icons/villa.svg +4 -0
  274. package/dist/assets/icons/virtualtour.svg +4 -0
  275. package/dist/assets/icons/warehouse.svg +3 -0
  276. package/dist/assets/icons/wash-hands.svg +3 -0
  277. package/dist/assets/icons/watch.svg +3 -0
  278. package/dist/assets/icons/water-boiler.svg +4 -0
  279. package/dist/assets/icons/water-slide.svg +4 -0
  280. package/dist/assets/icons/water.svg +3 -0
  281. package/dist/assets/icons/welcome-pack.svg +3 -0
  282. package/dist/assets/icons/wellness.svg +6 -0
  283. package/dist/assets/icons/whatsapp.svg +4 -0
  284. package/dist/assets/icons/wheel.svg +6 -0
  285. package/dist/assets/icons/wheelchair.svg +4 -0
  286. package/dist/assets/icons/wifi.svg +3 -0
  287. package/dist/assets/icons/wind-surfing.svg +3 -0
  288. package/dist/assets/icons/world-globe.svg +4 -0
  289. package/dist/assets/icons/world-travel.svg +5 -0
  290. package/dist/assets/icons/world.svg +5 -0
  291. package/dist/core/base/base.css +13 -0
  292. package/dist/core/base/fonts.css +1 -0
  293. package/dist/core/base/reset.css +48 -0
  294. package/dist/core/base/typography.css +119 -0
  295. package/dist/core/index.css +12 -0
  296. package/dist/core/recipes/layout.css +24 -0
  297. package/dist/core/themes/mode.css +5 -0
  298. package/dist/main.css +1044 -0
  299. package/dist/react/button.js +95 -0
  300. package/dist/react/checkbox.js +43 -0
  301. package/dist/react/icon.js +50 -0
  302. package/dist/react/index.js +5 -0
  303. package/dist/react/input.js +12 -0
  304. package/dist/react/label.js +125 -0
  305. package/dist/tokens/css/brand-a.tokens.css +22 -0
  306. package/dist/tokens/css/brand-b.tokens.css +22 -0
  307. package/dist/tokens/css/color.dark.tokens.css +32 -0
  308. package/dist/tokens/css/color.light.tokens.css +32 -0
  309. package/dist/tokens/css/component.tokens.css +103 -0
  310. package/dist/tokens/css/primitives.tokens.css +127 -0
  311. package/dist/tokens/css/semantic.tokens.css +35 -0
  312. package/dist/tokens/json/brand-a.tokens.json +192 -0
  313. package/dist/tokens/json/brand-b.tokens.json +192 -0
  314. package/dist/tokens/json/color.dark.tokens.json +364 -0
  315. package/dist/tokens/json/color.light.tokens.json +364 -0
  316. package/dist/tokens/json/component.tokens.json +1101 -0
  317. package/dist/tokens/json/primitives.tokens.json +1077 -0
  318. package/dist/tokens/json/semantic.tokens.json +206 -0
  319. package/dist/tokens/tokens.yaml +4400 -0
  320. package/dist/tokens/ts/brand-a.tokens.ts +32 -0
  321. package/dist/tokens/ts/brand-b.tokens.ts +32 -0
  322. package/dist/tokens/ts/color.dark.tokens.ts +36 -0
  323. package/dist/tokens/ts/color.light.tokens.ts +36 -0
  324. package/dist/tokens/ts/component.tokens.ts +107 -0
  325. package/dist/tokens/ts/primitives.tokens.ts +152 -0
  326. package/dist/tokens/ts/semantic.tokens.ts +42 -0
  327. package/dist/ui/index.css +5 -0
  328. package/dist/ui/patterns/button.css +241 -0
  329. package/dist/ui/patterns/checkbox.css +97 -0
  330. package/dist/ui/patterns/icon.css +20 -0
  331. package/dist/ui/patterns/input.css +76 -0
  332. package/dist/ui/patterns/label.css +49 -0
  333. package/docs/foundations/foundation-001-token-layering.md +27 -0
  334. package/docs/foundations/foundation-002-naming-and-grouping.md +38 -0
  335. package/docs/foundations/foundation-003-color-semantics-and-status.md +35 -0
  336. package/docs/foundations/foundation-004-typography-scale-and-line-height.md +39 -0
  337. package/docs/foundations/foundation-005-responsive-breakpoints-and-containers.md +23 -0
  338. package/docs/foundations/foundation-006-z-index-layering.md +31 -0
  339. package/docs/foundations/foundation-007-typography-selectors-and-specificity.md +24 -0
  340. package/docs/foundations/foundation-008-mode-activation-and-consumer-control.md +27 -0
  341. package/docs/foundations/foundation-009-component-boundaries-and-utility.md +30 -0
  342. package/package.json +64 -0
@@ -0,0 +1,95 @@
1
+ import React from "react";
2
+ import { LabelContent } from "./label.js";
3
+
4
+ function normalizeOrientation(value) {
5
+ return value === "vertical" ? "vertical" : "horizontal";
6
+ }
7
+
8
+ function normalizeJustify(value) {
9
+ return value === "stretch" ? "stretch" : "start";
10
+ }
11
+
12
+ export function Button({
13
+ variant = "solid",
14
+ className = "",
15
+ type = "button",
16
+ label,
17
+ startIcon,
18
+ endIcon,
19
+ iconOnly,
20
+ ariaLabel,
21
+ children,
22
+ ...props
23
+ }) {
24
+ const classes = ["button"];
25
+
26
+ if (variant === "outline") classes.push("outline");
27
+ if (variant === "ghost") classes.push("ghost");
28
+ if (className) classes.push(className);
29
+
30
+ const content = children ?? label;
31
+ const hasReadableLabel =
32
+ typeof content === "string"
33
+ ? content.trim().length > 0
34
+ : content !== null && content !== undefined && content !== false;
35
+ const resolvedIconOnly = iconOnly ?? !hasReadableLabel;
36
+ const iconStart = resolvedIconOnly ? startIcon || endIcon : startIcon;
37
+ const iconEnd = resolvedIconOnly ? undefined : endIcon;
38
+
39
+ if (resolvedIconOnly) classes.push("button--icon-only");
40
+
41
+ const buttonProps = {
42
+ type,
43
+ className: classes.join(" "),
44
+ ...props,
45
+ };
46
+
47
+ if (resolvedIconOnly && !buttonProps["aria-label"] && ariaLabel) {
48
+ buttonProps["aria-label"] = ariaLabel;
49
+ }
50
+
51
+ if (resolvedIconOnly && !buttonProps["aria-label"]) {
52
+ console.warn(
53
+ "[ui-foundations] iconOnly Button should include `ariaLabel` or `aria-label`.",
54
+ );
55
+ }
56
+
57
+ return React.createElement(
58
+ "button",
59
+ buttonProps,
60
+ React.createElement(
61
+ LabelContent,
62
+ {
63
+ startIcon: iconStart,
64
+ endIcon: iconEnd,
65
+ iconOnly: resolvedIconOnly,
66
+ },
67
+ content,
68
+ ),
69
+ );
70
+ }
71
+
72
+ export function ButtonGroup({
73
+ className = "",
74
+ orientation = "horizontal",
75
+ attached = false,
76
+ justify = "start",
77
+ children,
78
+ ...props
79
+ }) {
80
+ const classes = ["button-group"];
81
+ if (className) classes.push(className);
82
+
83
+ return React.createElement(
84
+ "div",
85
+ {
86
+ role: "group",
87
+ className: classes.join(" "),
88
+ "data-orientation": normalizeOrientation(orientation),
89
+ "data-attached": attached ? "true" : "false",
90
+ "data-justify": normalizeJustify(justify),
91
+ ...props,
92
+ },
93
+ children,
94
+ );
95
+ }
@@ -0,0 +1,43 @@
1
+ import React from "react";
2
+
3
+ function hasLabelContent(value) {
4
+ if (value === null || value === undefined || value === false) return false;
5
+ if (typeof value === "string") return value.trim().length > 0;
6
+ if (Array.isArray(value)) return value.some(hasLabelContent);
7
+ return true;
8
+ }
9
+
10
+ export function Checkbox({
11
+ className = "",
12
+ wrapperClassName = "",
13
+ label,
14
+ children,
15
+ ...props
16
+ }) {
17
+ const classes = ["checkbox"];
18
+ if (className) classes.push(className);
19
+
20
+ const content = children ?? label;
21
+ const hasLabel = hasLabelContent(content);
22
+ const disabled = Boolean(props.disabled);
23
+ const input = React.createElement("input", {
24
+ type: "checkbox",
25
+ className: classes.join(" "),
26
+ ...props,
27
+ });
28
+
29
+ if (!hasLabel) return input;
30
+
31
+ const wrapperClasses = ["checkbox-field"];
32
+ if (disabled) wrapperClasses.push("is-disabled");
33
+ if (wrapperClassName) wrapperClasses.push(wrapperClassName);
34
+
35
+ return React.createElement(
36
+ "label",
37
+ {
38
+ className: wrapperClasses.join(" "),
39
+ },
40
+ input,
41
+ React.createElement("span", { className: "checkbox-field__text" }, content),
42
+ );
43
+ }
@@ -0,0 +1,50 @@
1
+ import React from "react";
2
+
3
+ function resolveIconUrl(name, folder, src) {
4
+ if (src) return src;
5
+ return new URL(`../assets/${folder}/${name}.svg`, import.meta.url).href;
6
+ }
7
+
8
+ function humanizeName(name) {
9
+ return String(name || "")
10
+ .replace(/[-_]+/g, " ")
11
+ .trim();
12
+ }
13
+
14
+ export function Icon({
15
+ name,
16
+ src,
17
+ label,
18
+ folder = "icons",
19
+ decorative,
20
+ className = "",
21
+ style,
22
+ ...props
23
+ }) {
24
+ if (!name && !src) return null;
25
+
26
+ const iconUrl = resolveIconUrl(name, folder, src);
27
+ const isDecorative = decorative ?? !label;
28
+ const classes = ["icon"];
29
+ if (className) classes.push(className);
30
+
31
+ const mergedStyle = {
32
+ "--icon-src": `url(${JSON.stringify(iconUrl)})`,
33
+ ...style,
34
+ };
35
+
36
+ const accessibilityProps = {};
37
+ if (isDecorative) {
38
+ accessibilityProps["aria-hidden"] = true;
39
+ } else {
40
+ accessibilityProps.role = "img";
41
+ accessibilityProps["aria-label"] = label || humanizeName(name);
42
+ }
43
+
44
+ return React.createElement("span", {
45
+ className: classes.join(" "),
46
+ style: mergedStyle,
47
+ ...accessibilityProps,
48
+ ...props,
49
+ });
50
+ }
@@ -0,0 +1,5 @@
1
+ export { Button, ButtonGroup } from "./button.js";
2
+ export { Checkbox } from "./checkbox.js";
3
+ export { Icon } from "./icon.js";
4
+ export { Input } from "./input.js";
5
+ export { LabelContent, FieldLabel } from "./label.js";
@@ -0,0 +1,12 @@
1
+ import React from "react";
2
+
3
+ export function Input({ className = "", type = "text", ...props }) {
4
+ const classes = ["input"];
5
+ if (className) classes.push(className);
6
+
7
+ return React.createElement("input", {
8
+ type,
9
+ className: classes.join(" "),
10
+ ...props,
11
+ });
12
+ }
@@ -0,0 +1,125 @@
1
+ import React from "react";
2
+ import { Icon } from "./icon.js";
3
+
4
+ function hasTextContent(value) {
5
+ if (value === null || value === undefined || value === false) return false;
6
+ if (typeof value === "string") return value.trim().length > 0;
7
+ if (Array.isArray(value)) return value.some(hasTextContent);
8
+ return true;
9
+ }
10
+
11
+ function renderIcon(icon, position) {
12
+ if (!icon) return null;
13
+
14
+ if (React.isValidElement(icon)) {
15
+ return React.cloneElement(icon, {
16
+ "data-slot": position,
17
+ });
18
+ }
19
+
20
+ if (typeof icon === "string") {
21
+ return React.createElement(Icon, {
22
+ name: icon,
23
+ decorative: true,
24
+ "data-slot": position,
25
+ });
26
+ }
27
+
28
+ if (typeof icon === "object") {
29
+ const iconProps = { ...icon };
30
+ if (iconProps.decorative === undefined) {
31
+ iconProps.decorative = true;
32
+ }
33
+ iconProps["data-slot"] = position;
34
+ return React.createElement(Icon, iconProps);
35
+ }
36
+
37
+ return null;
38
+ }
39
+
40
+ export function LabelContent({
41
+ children,
42
+ text,
43
+ startIcon,
44
+ endIcon,
45
+ iconOnly,
46
+ className = "",
47
+ ...props
48
+ }) {
49
+ const content = children ?? text;
50
+ const resolvedIconOnly = iconOnly ?? !hasTextContent(content);
51
+ const classes = ["label-content"];
52
+
53
+ if (resolvedIconOnly) classes.push("is-icon-only");
54
+ if (className) classes.push(className);
55
+
56
+ const textNode = hasTextContent(content)
57
+ ? React.createElement("span", { className: "label-content__text" }, content)
58
+ : null;
59
+
60
+ return React.createElement(
61
+ "span",
62
+ {
63
+ className: classes.join(" "),
64
+ ...props,
65
+ },
66
+ renderIcon(startIcon, "start"),
67
+ textNode,
68
+ renderIcon(endIcon, "end"),
69
+ );
70
+ }
71
+
72
+ export function FieldLabel({
73
+ htmlFor,
74
+ required = false,
75
+ requiredText = "required",
76
+ className = "",
77
+ children,
78
+ text,
79
+ startIcon,
80
+ endIcon,
81
+ iconOnly,
82
+ ...props
83
+ }) {
84
+ const classes = ["field-label"];
85
+ if (className) classes.push(className);
86
+
87
+ const requiredBadge = required
88
+ ? React.createElement(
89
+ "span",
90
+ {
91
+ className: "field-label__required",
92
+ "aria-hidden": true,
93
+ },
94
+ "*",
95
+ )
96
+ : null;
97
+
98
+ const requiredA11yText = required
99
+ ? React.createElement(
100
+ "span",
101
+ { className: "field-label__required-text" },
102
+ ` (${requiredText})`,
103
+ )
104
+ : null;
105
+
106
+ return React.createElement(
107
+ "label",
108
+ {
109
+ htmlFor,
110
+ className: classes.join(" "),
111
+ ...props,
112
+ },
113
+ React.createElement(
114
+ LabelContent,
115
+ {
116
+ startIcon,
117
+ endIcon,
118
+ iconOnly,
119
+ },
120
+ children ?? text,
121
+ ),
122
+ requiredBadge,
123
+ requiredA11yText,
124
+ );
125
+ }
@@ -0,0 +1,22 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.061Z */
3
+
4
+ :root[data-brand="a"] {
5
+ --brand-color-primary: var(--color-brand-a-purple-600);
6
+ --brand-color-primary-dark: var(--color-brand-a-purple-800);
7
+ --brand-color-accent: var(--color-brand-a-blue-500);
8
+ --brand-color-subtle: var(--color-neutral-500);
9
+ --brand-color-subtle-light: var(--color-neutral-200);
10
+ --brand-color-subtle-dark: var(--color-neutral-800);
11
+ --brand-color-accent-dark: var(--color-brand-a-blue-700);
12
+ --brand-color-functional-base: var(--color-brand-a-blue-700);
13
+ --brand-color-functional-base-dark: var(--color-brand-a-blue-800);
14
+ --brand-color-functional-success: var(--color-brand-a-green);
15
+ --brand-color-functional-danger: var(--color-brand-a-red);
16
+ --brand-font-lead: var(--font-family-serif);
17
+ --brand-font-base: var(--font-family-sans);
18
+ --brand-corner-button: var(--size-radius-full);
19
+ --brand-corner-input: var(--size-radius-200);
20
+ --brand-corner-card: var(--size-radius-200);
21
+ --brand-corner-modal: var(--size-radius-400);
22
+ }
@@ -0,0 +1,22 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.063Z */
3
+
4
+ :root[data-brand="b"] {
5
+ --brand-color-primary: var(--color-brand-b-blue-500);
6
+ --brand-color-primary-dark: var(--color-brand-b-blue-700);
7
+ --brand-color-accent: var(--color-brand-b-purple-600);
8
+ --brand-color-subtle: var(--color-neutral-500);
9
+ --brand-color-subtle-light: var(--color-neutral-200);
10
+ --brand-color-subtle-dark: var(--color-neutral-800);
11
+ --brand-color-accent-dark: var(--color-brand-b-purple-800);
12
+ --brand-color-functional-base: var(--color-brand-b-purple-600);
13
+ --brand-color-functional-base-dark: var(--color-brand-b-purple-800);
14
+ --brand-color-functional-success: var(--color-brand-b-green);
15
+ --brand-color-functional-danger: var(--color-brand-b-red);
16
+ --brand-font-lead: var(--font-family-serif);
17
+ --brand-font-base: var(--font-family-sans);
18
+ --brand-corner-button: var(--size-radius-000);
19
+ --brand-corner-input: var(--size-radius-000);
20
+ --brand-corner-card: var(--size-radius-100);
21
+ --brand-corner-modal: var(--size-radius-200);
22
+ }
@@ -0,0 +1,32 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.068Z */
3
+
4
+ :root[data-mode="dark"] {
5
+ --color-focus: var(--brand-color-primary-dark);
6
+ --color-text-default: var(--color-neutral-800);
7
+ --color-text-inverse: var(--color-neutral-1000);
8
+ --color-text-disabled: var(--color-neutral-600);
9
+ --color-text-brand: var(--brand-color-primary-dark);
10
+ --color-text-subtle: var(--brand-color-subtle-dark);
11
+ --color-text-strong: var(--color-neutral-1000);
12
+ --color-text-danger: var(--brand-color-functional-danger);
13
+ --color-text-success: var(--brand-color-functional-success);
14
+ --color-fill-surface: var(--color-neutral-1000);
15
+ --color-fill-disabled: var(--color-neutral-300);
16
+ --color-fill-hover: var(--color-neutral-alpha-500);
17
+ --color-fill-brand: var(--brand-color-primary);
18
+ --color-fill-subtle: var(--brand-color-subtle);
19
+ --color-fill-active: var(--brand-color-accent);
20
+ --color-fill-danger: var(--brand-color-functional-danger);
21
+ --color-fill-success: var(--brand-color-functional-success);
22
+ --color-border-default: var(--color-neutral-800);
23
+ --color-border-subtle: var(--brand-color-subtle-dark);
24
+ --color-border-strong: var(--color-neutral-1000);
25
+ --color-border-brand: var(--brand-color-primary);
26
+ --color-border-disabled: var(--color-neutral-500);
27
+ --color-border-danger: var(--brand-color-functional-danger);
28
+ --color-overlay-backdrop: var(--color-neutral-alpha-400);
29
+ --color-overlay-hover: var(--color-neutral-alpha-200);
30
+ --color-overlay-active: var(--color-neutral-alpha-400);
31
+ --color-overlay-selected: var(--color-neutral-alpha-600);
32
+ }
@@ -0,0 +1,32 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.069Z */
3
+
4
+ :root {
5
+ --color-focus: var(--brand-color-primary);
6
+ --color-text-default: var(--color-neutral-800);
7
+ --color-text-inverse: var(--color-neutral-000);
8
+ --color-text-disabled: var(--color-neutral-600);
9
+ --color-text-brand: var(--brand-color-primary);
10
+ --color-text-subtle: var(--brand-color-subtle);
11
+ --color-text-strong: var(--color-neutral-1000);
12
+ --color-text-danger: var(--brand-color-functional-danger);
13
+ --color-text-success: var(--brand-color-functional-success);
14
+ --color-fill-surface: var(--color-neutral-000);
15
+ --color-fill-disabled: var(--color-neutral-300);
16
+ --color-fill-hover: var(--color-neutral-alpha-500);
17
+ --color-fill-brand: var(--brand-color-primary);
18
+ --color-fill-subtle: var(--brand-color-subtle-light);
19
+ --color-fill-active: var(--brand-color-accent);
20
+ --color-fill-danger: var(--brand-color-functional-danger);
21
+ --color-fill-success: var(--brand-color-functional-success);
22
+ --color-border-default: var(--color-neutral-800);
23
+ --color-border-subtle: var(--brand-color-subtle);
24
+ --color-border-strong: var(--color-neutral-1000);
25
+ --color-border-brand: var(--brand-color-primary);
26
+ --color-border-disabled: var(--color-neutral-500);
27
+ --color-border-danger: var(--brand-color-functional-danger);
28
+ --color-overlay-backdrop: var(--color-neutral-alpha-400);
29
+ --color-overlay-hover: var(--color-neutral-alpha-200);
30
+ --color-overlay-active: var(--color-neutral-alpha-400);
31
+ --color-overlay-selected: var(--color-neutral-alpha-600);
32
+ }
@@ -0,0 +1,103 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.066Z */
3
+
4
+ :root {
5
+ --button-font-family: var(--brand-font-lead);
6
+ --button-font-weight: var(--typography-label-font-weight);
7
+ --button-font-size: var(--typography-label-font-size);
8
+ --button-line-height: var(--typography-label-line-height);
9
+ --button-border-size-default: var(--size-border-000);
10
+ --button-border-size-hover: var(--size-border-100);
11
+ --button-border-size-active: var(--size-border-200);
12
+ --button-border-radius: var(--brand-corner-button);
13
+ --button-padding-inline: var(--size-spacing-400);
14
+ --button-padding-inline-icon-only: var(--size-spacing-200);
15
+ --button-padding-block: var(--size-spacing-200);
16
+ --button-gap: var(--size-spacing-200);
17
+ --button-text-color-disabled: var(--color-text-disabled);
18
+ --button-border-color-disabled: var(--color-border-disabled);
19
+ --button-container-background-disabled: var(--color-fill-disabled);
20
+ --button-overlay-hover: var(--color-overlay-hover);
21
+ --button-overlay-active: var(--color-overlay-active);
22
+ --button-height: 2.5rem;
23
+ --button-solid-text-color-default: var(--color-text-inverse);
24
+ --button-solid-text-color-hover: var(--color-text-inverse);
25
+ --button-solid-text-color-active: var(--color-text-inverse);
26
+ --button-solid-border-color-default: var(--color-border-brand);
27
+ --button-solid-border-color-hover: var(--color-border-brand);
28
+ --button-solid-border-color-focus: var(--color-border-brand);
29
+ --button-solid-border-color-active: var(--color-border-brand);
30
+ --button-solid-container-background-default: var(--color-fill-brand);
31
+ --button-solid-container-background-hover: var(--color-fill-brand);
32
+ --button-solid-container-background-focus: var(--color-fill-brand);
33
+ --button-solid-container-background-active: var(--color-fill-brand);
34
+ --button-outline-text-color-default: var(--color-text-brand);
35
+ --button-outline-text-color-hover: var(--color-text-brand);
36
+ --button-outline-text-color-active: var(--color-text-brand);
37
+ --button-outline-border-color-default: var(--color-border-brand);
38
+ --button-outline-border-color-hover: var(--color-border-brand);
39
+ --button-outline-border-color-active: var(--color-border-brand);
40
+ --button-outline-border-color-focus: var(--color-border-brand);
41
+ --button-outline-container-background-default: var(--color-fill-surface);
42
+ --button-outline-container-background-hover: var(--color-fill-surface);
43
+ --button-outline-container-background-focus: var(--color-fill-surface);
44
+ --button-outline-container-background-active: var(--color-fill-surface);
45
+ --button-ghost-text-color-default: var(--color-text-brand);
46
+ --button-ghost-text-color-hover: var(--color-text-brand);
47
+ --button-ghost-text-color-active: var(--color-text-brand);
48
+ --button-ghost-border-color-default: var(--color-transparent);
49
+ --button-ghost-border-color-hover: var(--color-transparent);
50
+ --button-ghost-border-color-focus: var(--color-transparent);
51
+ --button-ghost-border-color-active: var(--color-transparent);
52
+ --button-ghost-container-background-default: var(--color-fill-surface);
53
+ --button-ghost-container-background-hover: var(--color-fill-surface);
54
+ --button-ghost-container-background-focus: var(--color-fill-surface);
55
+ --button-ghost-container-background-active: var(--color-fill-surface);
56
+ --modal-backdrop-color: var(--color-overlay-backdrop);
57
+ --modal-surface-color: var(--color-fill-surface);
58
+ --modal-surface-border-radius: var(--brand-corner-modal);
59
+ --input-font-family: var(--brand-font-base);
60
+ --input-font-weight: var(--typography-body-font-weight);
61
+ --input-font-size: var(--typography-label-font-size);
62
+ --input-line-height: var(--typography-body-line-height);
63
+ --input-border-size-default: var(--size-border-100);
64
+ --input-border-size-hover: var(--size-border-100);
65
+ --input-border-size-active: var(--size-border-200);
66
+ --input-border-radius: var(--brand-corner-input);
67
+ --input-padding-inline: var(--size-spacing-200);
68
+ --input-padding-inline-icon-only: var(--size-spacing-200);
69
+ --input-padding-block: var(--size-spacing-200);
70
+ --input-gap: var(--size-spacing-200);
71
+ --input-text-color-disabled: var(--color-text-disabled);
72
+ --input-border-color-disabled: var(--color-border-disabled);
73
+ --input-container-background-disabled: var(--color-fill-disabled);
74
+ --input-overlay-hover: var(--color-transparent);
75
+ --input-overlay-active: var(--color-transparent);
76
+ --input-height: 2.5rem;
77
+ --input-text-text-color-placeholder: var(--color-text-subtle);
78
+ --input-text-text-color-default: var(--color-text-default);
79
+ --input-text-text-color-hover: var(--color-text-default);
80
+ --input-text-text-color-active: var(--color-text-default);
81
+ --input-text-border-color-default: var(--color-border-default);
82
+ --input-text-border-color-hover: var(--color-border-brand);
83
+ --input-text-border-color-active: var(--color-border-brand);
84
+ --input-text-border-color-focus: var(--color-border-brand);
85
+ --input-text-border-color-invalid: var(--color-border-danger);
86
+ --input-text-border-color-valid: var(--color-border-strong);
87
+ --input-text-container-background-default: var(--color-fill-surface);
88
+ --input-text-container-background-hover: var(--color-fill-surface);
89
+ --input-text-container-background-focus: var(--color-fill-surface);
90
+ --input-text-container-background-active: var(--color-fill-surface);
91
+ --form-gap: var(--size-spacing-400);
92
+ --form-padding-inline: var(--size-spacing-400);
93
+ --form-padding-block: var(--size-spacing-400);
94
+ --form-border-radius: var(--brand-corner-card);
95
+ --form-border-size: var(--size-border-100);
96
+ --form-container-background: var(--color-fill-surface);
97
+ --form-container-border-color: var(--color-border-subtle);
98
+ --form-group-gap: var(--size-spacing-400);
99
+ --form-group-title-color: var(--color-text-default);
100
+ --form-field-gap: var(--size-spacing-200);
101
+ --form-field-helper-text-color-default: var(--color-text-subtle);
102
+ --form-field-helper-text-color-invalid: var(--color-text-danger);
103
+ }
@@ -0,0 +1,127 @@
1
+ /* Auto-generated design tokens from Figma */
2
+ /* Generated on 2026-03-04T20:50:34.071Z */
3
+
4
+ :root {
5
+ --color-transparent: rgba(0 0 0 / 0);
6
+ --color-neutral-100: rgb(230 230 230);
7
+ --color-neutral-200: rgb(204 204 204);
8
+ --color-neutral-300: rgb(179 179 179);
9
+ --color-neutral-400: rgb(128 128 128);
10
+ --color-neutral-500: rgb(128 128 128);
11
+ --color-neutral-600: rgb(102 102 102);
12
+ --color-neutral-700: rgb(77 77 77);
13
+ --color-neutral-800: rgb(51 51 51);
14
+ --color-neutral-900: rgb(26 26 26);
15
+ --color-neutral-1000: rgb(0 0 0);
16
+ --color-neutral-000: rgb(255 255 255);
17
+ --color-neutral-alpha-100: rgba(0 0 0 / 0.1);
18
+ --color-neutral-alpha-200: rgba(0 0 0 / 0.2);
19
+ --color-neutral-alpha-300: rgba(0 0 0 / 0.3);
20
+ --color-neutral-alpha-400: rgba(0 0 0 / 0.4);
21
+ --color-neutral-alpha-500: rgba(0 0 0 / 0.5);
22
+ --color-neutral-alpha-600: rgba(0 0 0 / 0.6);
23
+ --color-neutral-alpha-700: rgba(0 0 0 / 0.7);
24
+ --color-neutral-alpha-800: rgba(0 0 0 / 0.8);
25
+ --color-neutral-alpha-900: rgba(0 0 0 / 0.9);
26
+ --color-neutral-alpha-000: rgba(0 0 0 / 0);
27
+ --color-brand-a-red: rgb(255 0 0);
28
+ --color-brand-a-green: rgb(19 174 92);
29
+ --color-brand-a-purple-200: rgb(222 192 255);
30
+ --color-brand-a-purple-600: rgb(151 71 255);
31
+ --color-brand-a-purple-800: rgb(85 26 139);
32
+ --color-brand-a-blue-200: rgb(226 244 253);
33
+ --color-brand-a-blue-500: rgb(112 203 244);
34
+ --color-brand-a-blue-700: rgb(12 75 243);
35
+ --color-brand-a-blue-800: rgb(27 17 92);
36
+ --color-brand-b-red: rgb(204 0 0);
37
+ --color-brand-b-green: rgb(14 129 68);
38
+ --color-brand-b-purple-200: rgb(196 143 255);
39
+ --color-brand-b-purple-600: rgb(122 20 255);
40
+ --color-brand-b-purple-800: rgb(58 18 95);
41
+ --color-brand-b-blue-200: rgb(179 226 250);
42
+ --color-brand-b-blue-500: rgb(66 186 240);
43
+ --color-brand-b-blue-700: rgb(10 60 194);
44
+ --color-brand-b-blue-800: rgb(14 9 47);
45
+ --font-size-xs: .75rem;
46
+ --font-size-sm: .875rem;
47
+ --font-size-md: 1rem;
48
+ --font-size-lg: 1.25rem;
49
+ --font-size-xl: 1.5rem;
50
+ --font-size-xxl: 2rem;
51
+ --font-size-xxxl: 2.5rem;
52
+ --font-weight-100: 100;
53
+ --font-weight-200: 200;
54
+ --font-weight-300: 300;
55
+ --font-weight-400: 400;
56
+ --font-weight-500: 500;
57
+ --font-weight-600: 600;
58
+ --font-weight-700: 700;
59
+ --font-weight-800: 800;
60
+ --font-weight-900: 900;
61
+ --font-family-sans: Inter;
62
+ --font-family-serif: Rokkitt;
63
+ --font-family-mono: SFMono-Regular;
64
+ --line-height-xs: 1rem;
65
+ --line-height-sm: 1.25rem;
66
+ --line-height-md: 1.5rem;
67
+ --line-height-lg: 1.75rem;
68
+ --line-height-xl: 2rem;
69
+ --line-height-xxl: 2.75rem;
70
+ --line-height-xxxl: 3.5rem;
71
+ --size-spacing-100: .25rem;
72
+ --size-spacing-200: .5rem;
73
+ --size-spacing-300: .75rem;
74
+ --size-spacing-400: 1rem;
75
+ --size-spacing-500: 1.25rem;
76
+ --size-spacing-600: 1.5rem;
77
+ --size-spacing-700: 2rem;
78
+ --size-spacing-800: 2.5rem;
79
+ --size-spacing-900: 3rem;
80
+ --size-spacing-1000: 4rem;
81
+ --size-spacing-000: 0;
82
+ --size-radius-100: .125rem;
83
+ --size-radius-200: .25rem;
84
+ --size-radius-300: .375rem;
85
+ --size-radius-400: .5rem;
86
+ --size-radius-500: .75rem;
87
+ --size-radius-600: 1rem;
88
+ --size-radius-700: 1.25rem;
89
+ --size-radius-800: 1.5rem;
90
+ --size-radius-900: 2rem;
91
+ --size-radius-000: 0;
92
+ --size-radius-full: 625rem;
93
+ --shadow-focus: .5rem;
94
+ --breakpoint-100: 580px;
95
+ --breakpoint-200: 760px;
96
+ --breakpoint-300: 960px;
97
+ --breakpoint-400: 1200px;
98
+ --breakpoint-500: 1440px;
99
+ --breakpoint-600: 1920px;
100
+ --container-100: 192px;
101
+ --container-200: 384px;
102
+ --container-300: 576px;
103
+ --container-400: 768px;
104
+ --container-500: 960px;
105
+ --container-600: 1152px;
106
+ --layout-base-grid: .25rem;
107
+ --layout-columns: 12;
108
+ --layout-gutter: 1rem;
109
+ --layout-max-width: 1236px;
110
+ --layout-column-max-width: 412px;
111
+ --layout-float-breakpoint: 1220px;
112
+ --size-border-100: .0625rem;
113
+ --size-border-200: .125rem;
114
+ --size-border-300: .1875rem;
115
+ --size-border-000: 0;
116
+ --zindex-hidden: -1;
117
+ --zindex-base: 0;
118
+ --zindex-raised: 1;
119
+ --zindex-dropdown-base: 900;
120
+ --zindex-dropdown: 1000;
121
+ --zindex-sticky: 1020;
122
+ --zindex-fixed: 1030;
123
+ --zindex-modal-overlay: 1040;
124
+ --zindex-modal: 1050;
125
+ --zindex-popover: 1060;
126
+ --zindex-tooltip: 1070;
127
+ }