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,24 @@
1
+ # Foundation-007: Typography Selectors and Specificity
2
+
3
+ ## Purpose
4
+
5
+ Provide a consistent typography API with low selector specificity and predictable overrides.
6
+
7
+ ## Rules
8
+
9
+ 1. Heading elements (`h1`..`h6`) define baseline heading styles.
10
+
11
+ 2. `.heading` mirrors heading baseline styles for non-heading elements.
12
+
13
+ 3. Size/scale classes define typography variants:
14
+ - Heading sizes: `.heading-xxxl` to `.heading-sm`
15
+ - Text scale: `.text-xs` to `.text-xxxl`
16
+
17
+ 4. Use `:where()` for zero-specificity size/scale selectors where possible.
18
+
19
+ 5. Reserve data attributes (for example `[data-theme]`, `[data-density]`) for context/state, not as primary styling API.
20
+
21
+ ## Implications
22
+
23
+ - Component styles can override typography defaults without `!important`.
24
+ - API remains clear between semantic element defaults and class-based variants.
@@ -0,0 +1,27 @@
1
+ # Foundation-008: Mode Activation and Consumer Control
2
+
3
+ ## Purpose
4
+
5
+ Support dark mode in a reusable way without forcing activation behavior on consumers.
6
+
7
+ ## Rules
8
+
9
+ 1. Token outputs are scope-ready, not runtime activation logic:
10
+ - Light tokens at `:root`
11
+ - Dark tokens at `:root[data-mode="dark"]`
12
+ - Brand tokens scoped by `data-brand`
13
+
14
+ 2. Core theme layer remains neutral:
15
+ - `src/core/themes/mode.css` keeps non-invasive base behavior (`color-scheme`)
16
+ - no hard-coded dark token overrides in core theme CSS
17
+
18
+ 3. Each consumer owns mode policy:
19
+ - whether dark mode is available
20
+ - how system preference is interpreted
21
+ - when/how `data-mode` is set/removed
22
+
23
+ ## Implications
24
+
25
+ - No unintended global dark overrides in downstream consumers.
26
+ - Clear separation between token definitions and runtime mode policy.
27
+ - Consumers can implement light-only, manual toggle, or system-following behavior.
@@ -0,0 +1,30 @@
1
+ # Foundation-009: Component Boundaries and Utility Test
2
+
3
+ ## Purpose
4
+
5
+ Ensure new UI building blocks are introduced only when they provide reusable system value, not one-off complexity.
6
+
7
+ ## Rules
8
+
9
+ 1. Run a boundary decision before creating any new component.
10
+ - First ask: can this be modeled as composition of an existing component family?
11
+ - Typical composition cases: grouping, layout wrappers, orchestration of existing parts.
12
+
13
+ 2. Promote to a standalone component only if at least one applies:
14
+ - distinct semantics/responsibility
15
+ - stable public API that is not just a thin wrapper
16
+ - independent lifecycle/behavior that needs dedicated ownership
17
+
18
+ 3. Apply the utility test ("Snowflake check"):
19
+ - If it solves only one local case, keep it local and avoid adding system-level surface.
20
+ - If it is reusable across products/contexts, model it at system level.
21
+
22
+ 4. Token work is independent from component boundaries.
23
+ - New tokens may be required in both paths.
24
+ - New tokens alone do not justify a new standalone component.
25
+
26
+ ## Implications
27
+
28
+ - The system surface stays smaller and easier to maintain.
29
+ - Documentation remains clearer by keeping compositions near their base component.
30
+ - Reusable patterns still scale when they pass the utility test.
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "ui-foundations",
3
+ "version": "0.1.0",
4
+ "description": "Token-first UI foundations with CSS, tokens, and React exports.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git@ssh.source.tui:Thomas.Bielich/ui-foundations.git"
9
+ },
10
+ "private": false,
11
+ "publishConfig": {
12
+ "access": "public",
13
+ "registry": "https://registry.npmjs.org/"
14
+ },
15
+ "files": [
16
+ "dist/**",
17
+ "README.md",
18
+ "docs/foundations/**"
19
+ ],
20
+ "exports": {
21
+ "./core.css": "./dist/core/index.css",
22
+ "./ui.css": "./dist/ui/index.css",
23
+ "./react": "./dist/react/index.js",
24
+ "./react/button": "./dist/react/button.js",
25
+ "./react/icon": "./dist/react/icon.js",
26
+ "./react/input": "./dist/react/input.js",
27
+ "./react/label": "./dist/react/label.js",
28
+ "./assets/*": "./dist/assets/*",
29
+ "./tokens/core.css": "./dist/tokens/css/core.tokens.css",
30
+ "./tokens/color.css": "./dist/tokens/css/color.light.tokens.css",
31
+ "./tokens/color-light.css": "./dist/tokens/css/color.light.tokens.css",
32
+ "./tokens/color-dark.css": "./dist/tokens/css/color.dark.tokens.css",
33
+ "./tokens/semantic.css": "./dist/tokens/css/semantic.tokens.css",
34
+ "./tokens/components.css": "./dist/tokens/css/component.tokens.css"
35
+ },
36
+ "scripts": {
37
+ "icons:generate-list": "node scripts/generate-icon-list.mjs",
38
+ "lint:js": "node scripts/lint-js.mjs",
39
+ "lint": "npm run lint:js",
40
+ "test:unit": "node --test tests/*.test.mjs",
41
+ "test": "npm run test:unit",
42
+ "smoke:check": "node scripts/smoke-check.mjs",
43
+ "tokens:generate": "node scripts/extract-tokens.js",
44
+ "tokens:validate": "node scripts/validate-tokens.mjs",
45
+ "tokens:build": "npm run tokens:generate",
46
+ "build:css": "node scripts/build-css.mjs",
47
+ "build:all": "npm run icons:generate-list && npm run tokens:generate && npm run build:css",
48
+ "build": "npm run build:all",
49
+ "pack:check": "npm pack --dry-run",
50
+ "release:check": "npm run ci:check && npm run pack:check",
51
+ "docs:build": "eleventy",
52
+ "docs:site": "npm run build:all && npm run docs:build",
53
+ "ci:check": "npm run lint && npm run test:unit && npm run build:all && npm run smoke:check && npm run tokens:validate && npm run docs:build",
54
+ "docs:dev": "npm run build:all && eleventy --serve"
55
+ },
56
+ "devDependencies": {
57
+ "@11ty/eleventy": "^3.1.2",
58
+ "@figma/code-connect": "^1.2.0",
59
+ "fast-glob": "^3.3.3",
60
+ "js-yaml": "^4.1.0",
61
+ "jsonc-parser": "^3.3.1",
62
+ "prismjs": "^1.30.0"
63
+ }
64
+ }