@thecb/components 12.0.0-beta.0 → 12.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. package/README.md +33 -11
  2. package/ai-docs/architecture.md +71 -0
  3. package/ai-docs/components.md +167 -0
  4. package/ai-docs/conventions.md +162 -0
  5. package/ai-docs/figma-mcp.md +66 -0
  6. package/ai-docs/integration-guidelines.md +142 -0
  7. package/dist/index.cjs.js +27495 -25464
  8. package/dist/index.cjs.js.map +1 -1
  9. package/dist/index.d.ts +286 -12
  10. package/dist/index.esm.js +26593 -24592
  11. package/dist/index.esm.js.map +1 -1
  12. package/package.json +17 -8
  13. package/src/components/atoms/alert/Alert.js +10 -1
  14. package/src/components/atoms/alert/Alert.mdx +19 -0
  15. package/src/components/atoms/alert/Alert.stories.js +150 -0
  16. package/src/components/atoms/badge/Badge.js +39 -25
  17. package/src/components/atoms/badge/Badge.mdx +27 -0
  18. package/src/components/atoms/badge/Badge.stories.js +168 -0
  19. package/src/components/atoms/badge/Badge.theme.js +49 -1
  20. package/src/components/atoms/badge/index.d.ts +11 -0
  21. package/src/components/atoms/breadcrumb/Breadcrumb.mdx +21 -0
  22. package/src/components/atoms/breadcrumb/Breadcrumb.stories.js +47 -0
  23. package/src/components/atoms/button-with-action/ButtonWithAction.js +3 -29
  24. package/src/components/atoms/button-with-action/ButtonWithAction.stories.js +14 -1
  25. package/src/components/atoms/button-with-action/ButtonWithAction.theme.js +97 -56
  26. package/src/components/atoms/button-with-action/index.d.ts +1 -0
  27. package/src/components/atoms/button-with-link/ButtonWithLink.mdx +21 -0
  28. package/src/components/atoms/button-with-link/ButtonWithLink.stories.js +161 -0
  29. package/src/components/atoms/card/Card.js +22 -1
  30. package/src/components/atoms/card/Card.mdx +41 -0
  31. package/src/components/atoms/card/Card.stories.js +360 -0
  32. package/src/components/atoms/card/Card.theme.js +2 -0
  33. package/src/components/atoms/card/CardText.js +39 -11
  34. package/src/components/atoms/card/index.d.ts +8 -1
  35. package/src/components/atoms/card-type/CardType.js +55 -0
  36. package/src/components/atoms/card-type/CardType.stories.js +86 -0
  37. package/src/components/atoms/card-type/index.js +3 -0
  38. package/src/components/atoms/checkbox/Checkbox.js +121 -93
  39. package/src/components/atoms/checkbox/Checkbox.mdx +15 -0
  40. package/src/components/atoms/checkbox/Checkbox.oldstories.js +17 -13
  41. package/src/components/atoms/checkbox/Checkbox.stories.js +149 -0
  42. package/src/components/atoms/checkbox/Checkbox.theme.js +6 -2
  43. package/src/components/atoms/country-dropdown/CountryDropdown.mdx +36 -0
  44. package/src/components/atoms/country-dropdown/CountryDropdown.stories.js +76 -0
  45. package/src/components/atoms/detail/Detail.js +0 -26
  46. package/src/components/atoms/detail/Detail.mdx +32 -0
  47. package/src/components/atoms/detail/Detail.stories.js +156 -0
  48. package/src/components/atoms/display-box/DisplayBox.mdx +11 -0
  49. package/src/components/atoms/display-box/DisplayBox.stories.js +69 -0
  50. package/src/components/atoms/dropdown/Dropdown.js +17 -5
  51. package/src/components/atoms/dropdown/Dropdown.mdx +65 -0
  52. package/src/components/atoms/dropdown/Dropdown.stories.js +128 -0
  53. package/src/components/atoms/dropdown/Dropdown.theme.js +6 -6
  54. package/src/components/atoms/dropdown/DropdownIcon.js +1 -0
  55. package/src/components/atoms/dropdown/DropdownIconV2.js +50 -0
  56. package/src/components/atoms/dropdown/index.d.ts +59 -0
  57. package/src/components/atoms/form-layouts/FormInput.js +105 -61
  58. package/src/components/atoms/form-layouts/FormInput.mdx +38 -0
  59. package/src/components/atoms/form-layouts/FormInput.stories.js +219 -0
  60. package/src/components/atoms/form-layouts/FormTextarea.js +207 -0
  61. package/src/components/atoms/form-layouts/FormTextarea.mdx +48 -0
  62. package/src/components/atoms/form-layouts/FormTextarea.stories.js +265 -0
  63. package/src/components/atoms/form-layouts/index.d.ts +34 -1
  64. package/src/components/atoms/form-layouts/index.js +3 -1
  65. package/src/components/atoms/form-select/FormSelect.js +5 -3
  66. package/src/components/atoms/form-select/FormSelect.mdx +42 -0
  67. package/src/components/atoms/form-select/FormSelect.stories.js +76 -0
  68. package/src/components/atoms/form-select/FormSelect.styled.js +2 -2
  69. package/src/components/atoms/form-select/FormSelect.theme.js +6 -3
  70. package/src/components/atoms/form-select/index.d.ts +3 -0
  71. package/src/components/atoms/formatted-address/FormattedAddress.mdx +13 -0
  72. package/src/components/atoms/formatted-address/FormattedAddress.stories.js +138 -0
  73. package/src/components/atoms/formatted-bank-account/FormattedBankAccount.js +2 -2
  74. package/src/components/atoms/formatted-bank-account/FormattedBankAccount.mdx +17 -0
  75. package/src/components/atoms/formatted-bank-account/FormattedBankAccount.stories.js +57 -0
  76. package/src/components/atoms/formatted-bank-account/FormattedBankAccount.theme.js +2 -2
  77. package/src/components/atoms/formatted-credit-card/FormattedCreditCard.js +14 -10
  78. package/src/components/atoms/formatted-credit-card/FormattedCreditCard.mdx +40 -0
  79. package/src/components/atoms/formatted-credit-card/FormattedCreditCard.stories.js +74 -0
  80. package/src/components/atoms/formatted-credit-card/FormattedCreditCard.theme.js +2 -2
  81. package/src/components/atoms/icons/AgencyIcon.js +24 -0
  82. package/src/components/atoms/icons/AmExLargeIcon.js +54 -0
  83. package/src/components/atoms/icons/AmExSmallIcon.js +54 -0
  84. package/src/components/atoms/icons/AutopayIcon.js +9 -1
  85. package/src/components/atoms/icons/BankGenericSmallIcon.js +48 -0
  86. package/src/components/atoms/icons/CaretArrowDown.d.ts +9 -0
  87. package/src/components/atoms/icons/CaretArrowDown.js +22 -0
  88. package/src/components/atoms/icons/CaretArrowUp.d.ts +9 -0
  89. package/src/components/atoms/icons/CaretArrowUp.js +22 -0
  90. package/src/components/atoms/icons/CarrotIcon.js +2 -0
  91. package/src/components/atoms/icons/CashSmallIcon.js +21 -0
  92. package/src/components/atoms/icons/CashieringImage.d.ts +1 -0
  93. package/src/components/atoms/icons/CashieringImage.js +254 -0
  94. package/src/components/atoms/icons/CheckboxCheckmarkIcon.js +45 -0
  95. package/src/components/atoms/icons/CustomerSearchIcon.js +30 -79
  96. package/src/components/atoms/icons/DiscoverLargeIcon.js +137 -0
  97. package/src/components/atoms/icons/DiscoverSmallIcon.js +137 -0
  98. package/src/components/atoms/icons/ExternalLinkIcon.js +10 -2
  99. package/src/components/atoms/icons/GenericCardLarge.js +1 -1
  100. package/src/components/atoms/icons/GenericSmallIcon.js +27 -0
  101. package/src/components/atoms/icons/GuidedCheckoutImage.js +105 -26
  102. package/src/components/atoms/icons/IconAdd.js +2 -2
  103. package/src/components/atoms/icons/Icons.mdx +40 -0
  104. package/src/components/atoms/icons/Icons.stories.js +343 -0
  105. package/src/components/atoms/icons/KioskImage.js +223 -338
  106. package/src/components/atoms/icons/MasterCardLargeIcon.js +35 -0
  107. package/src/components/atoms/icons/MasterCardSmallIcon.js +35 -0
  108. package/src/components/atoms/icons/{NoCustomerResultsIcon.js → NoResultsIcon.js} +10 -6
  109. package/src/components/atoms/icons/NotFoundIcon.js +70 -333
  110. package/src/components/atoms/icons/OverageIcon.js +27 -0
  111. package/src/components/atoms/icons/PaydotImage.d.ts +1 -0
  112. package/src/components/atoms/icons/PaydotImage.js +46 -0
  113. package/src/components/atoms/icons/PaymentSearchIcon.js +7 -42
  114. package/src/components/atoms/icons/PaymentStatusIcon.d.ts +1 -0
  115. package/src/components/atoms/icons/PaymentStatusIcon.js +28 -0
  116. package/src/components/atoms/icons/PeriscopeFailedIcon.js +2 -2
  117. package/src/components/atoms/icons/PersonIcon.d.ts +1 -0
  118. package/src/components/atoms/icons/PersonIcon.js +28 -0
  119. package/src/components/atoms/icons/ProfileImage.js +58 -37
  120. package/src/components/atoms/icons/RevenueManagementImage.js +138 -393
  121. package/src/components/atoms/icons/ReversalNeededIcon.js +27 -0
  122. package/src/components/atoms/icons/SearchIcon.js +4 -3
  123. package/src/components/atoms/icons/ShortageIcon.js +21 -0
  124. package/src/components/atoms/icons/StandardCheckoutImage.js +105 -336
  125. package/src/components/atoms/icons/SuccessfulIconMedium.js +3 -2
  126. package/src/components/atoms/icons/VisaLargeIcon.js +40 -0
  127. package/src/components/atoms/icons/VisaSmallIcon.js +40 -0
  128. package/src/components/atoms/icons/WireSmallIcon.js +22 -0
  129. package/src/components/atoms/icons/icons.oldstories.js +47 -31
  130. package/src/components/atoms/icons/index.d.ts +4 -1
  131. package/src/components/atoms/icons/index.js +47 -7
  132. package/src/components/atoms/index.d.ts +4 -0
  133. package/src/components/atoms/index.js +3 -1
  134. package/src/components/atoms/jumbo/Jumbo.js +18 -3
  135. package/src/components/atoms/labeled-amount/LabeledAmount.mdx +23 -0
  136. package/src/components/atoms/labeled-amount/LabeledAmount.stories.js +118 -0
  137. package/src/components/atoms/layouts/Box.styled.js +34 -22
  138. package/src/components/atoms/layouts/Center.styled.js +2 -0
  139. package/src/components/atoms/layouts/Motion.js +25 -6
  140. package/src/components/atoms/layouts/Motion.styled.js +36 -0
  141. package/src/components/atoms/layouts/Stack.js +2 -0
  142. package/src/components/atoms/layouts/Stack.styled.js +2 -0
  143. package/src/components/atoms/line-item/LineItem.mdx +28 -0
  144. package/src/components/atoms/line-item/LineItem.stories.js +95 -0
  145. package/src/components/atoms/link/ExternalLink.d.ts +1 -0
  146. package/src/components/atoms/link/ExternalLink.js +37 -19
  147. package/src/components/atoms/link/ExternalLink.styled.js +2 -0
  148. package/src/components/atoms/link/InternalLink.js +11 -1
  149. package/src/components/atoms/link/InternalLink.styled.js +22 -2
  150. package/src/components/atoms/link/Link.mdx +19 -0
  151. package/src/components/atoms/link/Link.stories.js +183 -0
  152. package/src/components/atoms/loading/Loading.mdx +13 -0
  153. package/src/components/atoms/loading/Loading.stories.js +22 -0
  154. package/src/components/atoms/loading-line/LoadingLine.js +23 -11
  155. package/src/components/atoms/loading-line/LoadingLine.mdx +15 -0
  156. package/src/components/atoms/loading-line/LoadingLine.stories.js +132 -0
  157. package/src/components/atoms/loading-line/LoadingPill.styled.js +7 -6
  158. package/src/components/atoms/nav-footer/NavFooter.mdx +15 -0
  159. package/src/components/atoms/nav-footer/NavFooter.stories.js +244 -0
  160. package/src/components/atoms/nav-header/NavHeader.mdx +13 -0
  161. package/src/components/atoms/nav-header/NavHeader.stories.js +130 -0
  162. package/src/components/atoms/nav-tabs/NavTabs.mdx +30 -0
  163. package/src/components/atoms/nav-tabs/NavTabs.stories.js +49 -0
  164. package/src/components/atoms/password-requirements/PasswordRequirements.js +3 -3
  165. package/src/components/atoms/password-requirements/PasswordRequirements.mdx +39 -0
  166. package/src/components/atoms/password-requirements/PasswordRequirements.stories.js +139 -0
  167. package/src/components/atoms/placeholder/Placeholder.mdx +19 -0
  168. package/src/components/atoms/placeholder/Placeholder.stories.js +170 -0
  169. package/src/components/atoms/radio-button-with-label/RadioButtonWithLabel.js +13 -7
  170. package/src/components/atoms/radio-button-with-label/RadioButtonWithLabel.theme.js +9 -3
  171. package/src/components/atoms/search/Search.js +123 -0
  172. package/src/components/atoms/search/Search.oldstories.js +58 -0
  173. package/src/components/atoms/search/Search.theme.js +9 -0
  174. package/src/components/atoms/search/index.d.ts +27 -0
  175. package/src/components/atoms/search/index.js +3 -0
  176. package/src/components/atoms/searchable-select/SearchableSelect.mdx +44 -0
  177. package/src/components/atoms/searchable-select/SearchableSelect.stories.js +137 -0
  178. package/src/components/atoms/sortable-table-heading/SortableTableHeading.js +47 -0
  179. package/src/components/atoms/sortable-table-heading/SortableTableHeading.oldstories.js +19 -0
  180. package/src/components/atoms/sortable-table-heading/SortableTableHeading.theme.js +9 -0
  181. package/src/components/atoms/sortable-table-heading/index.d.ts +15 -0
  182. package/src/components/atoms/sortable-table-heading/index.js +3 -0
  183. package/src/components/atoms/spinner/Spinner.js +2 -1
  184. package/src/components/atoms/state-province-dropdown/StateProvinceDropdown.mdx +36 -0
  185. package/src/components/atoms/state-province-dropdown/StateProvinceDropdown.stories.js +78 -0
  186. package/src/components/atoms/state-province-dropdown/options.js +4 -1
  187. package/src/components/atoms/tab/Tab.js +2 -2
  188. package/src/components/atoms/table/Table.mdx +71 -0
  189. package/src/components/atoms/table/Table.oldstories.js +84 -0
  190. package/src/components/atoms/table/Table.stories.js +65 -0
  191. package/src/components/atoms/table/TableRow.js +1 -0
  192. package/src/components/atoms/title/Title.js +0 -23
  193. package/src/components/atoms/title/Title.mdx +26 -0
  194. package/src/components/atoms/title/Title.stories.js +144 -0
  195. package/src/components/atoms/title/Title.theme.js +3 -0
  196. package/src/components/atoms/toggle-switch/ToggleSwitch.js +66 -48
  197. package/src/components/atoms/toggle-switch/ToggleSwitch.mdx +17 -0
  198. package/src/components/atoms/toggle-switch/ToggleSwitch.stories.js +111 -0
  199. package/src/components/atoms/toggle-switch/ToggleSwitch.theme.js +8 -5
  200. package/src/components/atoms/typeahead-input/TypeaheadInput.mdx +13 -0
  201. package/src/components/atoms/typeahead-input/TypeaheadInput.stories.js +63 -0
  202. package/src/components/atoms/wallet-name/WalletName.js +6 -4
  203. package/src/components/atoms/wallet-name/WalletName.oldstories.js +26 -1
  204. package/src/components/atoms/wallet-name/index.d.ts +2 -0
  205. package/src/components/molecules/address-form/AddressForm.mdx +18 -0
  206. package/src/components/molecules/address-form/AddressForm.stories.js +224 -0
  207. package/src/components/molecules/banner/Banner.mdx +23 -0
  208. package/src/components/molecules/banner/Banner.stories.js +125 -0
  209. package/src/components/molecules/change-password-form/ChangePasswordForm.mdx +15 -0
  210. package/src/components/molecules/change-password-form/ChangePasswordForm.stories.js +206 -0
  211. package/src/components/molecules/collapsible-section/CollapsibleSection.js +1 -1
  212. package/src/components/molecules/collapsible-section/CollapsibleSection.mdx +15 -0
  213. package/src/components/molecules/collapsible-section/CollapsibleSection.stories.js +217 -0
  214. package/src/components/molecules/collapsible-section/index.d.ts +2 -2
  215. package/src/components/molecules/contact-card/ContactCard.js +157 -0
  216. package/src/components/molecules/contact-card/ContactCard.stories.js +80 -0
  217. package/src/components/molecules/contact-card/ContactCard.styled.js +44 -0
  218. package/src/components/molecules/contact-card/index.d.ts +16 -0
  219. package/src/components/molecules/contact-card/index.js +3 -0
  220. package/src/components/molecules/edit-name-form/EditNameForm.mdx +13 -0
  221. package/src/components/molecules/edit-name-form/EditNameForm.stories.js +117 -0
  222. package/src/components/molecules/editable-list/EditableList.js +6 -1
  223. package/src/components/molecules/email-form/EmailForm.js +9 -1
  224. package/src/components/molecules/email-form/EmailForm.state.js +1 -1
  225. package/src/components/molecules/email-form/EmailForm.stories.js +210 -0
  226. package/src/components/molecules/forgot-password-form/ForgotPasswordForm.js +2 -1
  227. package/src/components/molecules/hero-image/HeroImage.js +135 -0
  228. package/src/components/molecules/hero-image/HeroImage.mdx +15 -0
  229. package/src/components/molecules/hero-image/HeroImage.stories.js +149 -0
  230. package/src/components/molecules/hero-image/HeroImage.styled.js +83 -0
  231. package/src/components/molecules/hero-image/HeroImage.theme.js +109 -0
  232. package/src/components/molecules/hero-image/index.js +3 -0
  233. package/src/components/molecules/idle-modal/IdleModal.js +101 -0
  234. package/src/components/molecules/idle-modal/IdleModal.mdx +17 -0
  235. package/src/components/molecules/idle-modal/IdleModal.stories.js +180 -0
  236. package/src/components/molecules/idle-modal/index.d.ts +16 -0
  237. package/src/components/molecules/idle-modal/index.js +3 -0
  238. package/src/components/molecules/index.d.ts +1 -0
  239. package/src/components/molecules/index.js +7 -0
  240. package/src/components/molecules/link-card/LinkCard.js +32 -16
  241. package/src/components/molecules/link-card/LinkCard.mdx +17 -0
  242. package/src/components/molecules/link-card/LinkCard.stories.js +372 -0
  243. package/src/components/molecules/link-card/LinkCard.styled.js +28 -18
  244. package/src/components/molecules/link-card/LinkCard.theme.js +6 -4
  245. package/src/components/molecules/link-card/index.d.ts +3 -1
  246. package/src/components/molecules/login-form/LoginForm.js +2 -1
  247. package/src/components/molecules/login-form/LoginForm.mdx +16 -0
  248. package/src/components/molecules/login-form/LoginForm.stories.js +120 -0
  249. package/src/components/molecules/modal/Modal.mdx +17 -0
  250. package/src/components/molecules/modal/Modal.stories.js +362 -0
  251. package/src/components/molecules/modal/ModalControlV1.js +3 -0
  252. package/src/components/molecules/modal/ModalControlV2.js +2 -0
  253. package/src/components/molecules/modal/__private__/CloseButton.js +2 -1
  254. package/src/components/molecules/module/Module.mdx +17 -0
  255. package/src/components/molecules/module/Module.stories.js +273 -0
  256. package/src/components/molecules/multiple-select-filter/MultipleSelectFilter.js +229 -0
  257. package/src/components/molecules/multiple-select-filter/MultipleSelectFilter.oldstories.js +74 -0
  258. package/src/components/molecules/multiple-select-filter/MultipleSelectFilter.styled.js +65 -0
  259. package/src/components/molecules/multiple-select-filter/MultipleSelectFilter.theme.js +13 -0
  260. package/src/components/molecules/multiple-select-filter/__private__/ActionLinkButton.js +27 -0
  261. package/src/components/molecules/multiple-select-filter/__private__/FilterButton.js +97 -0
  262. package/src/components/molecules/multiple-select-filter/__private__/FilterDropdown.js +27 -0
  263. package/src/components/molecules/multiple-select-filter/__private__/FilterableList.js +146 -0
  264. package/src/components/molecules/multiple-select-filter/__private__/FilterableListItem.js +78 -0
  265. package/src/components/molecules/multiple-select-filter/__private__/SearchBox.js +41 -0
  266. package/src/components/molecules/multiple-select-filter/__private__/useKeyboardNavigation.js +84 -0
  267. package/src/components/molecules/multiple-select-filter/__private__/util.js +44 -0
  268. package/src/components/molecules/multiple-select-filter/index.d.ts +34 -0
  269. package/src/components/molecules/multiple-select-filter/index.js +3 -0
  270. package/src/components/molecules/nav-menu/NavMenuMobile.js +27 -29
  271. package/src/components/molecules/nav-menu/NavMenuMobile.mdx +21 -0
  272. package/src/components/molecules/nav-menu/NavMenuMobile.stories.js +100 -0
  273. package/src/components/molecules/obligation/Obligation.js +141 -3
  274. package/src/components/molecules/obligation/Obligation.mdx +23 -0
  275. package/src/components/molecules/obligation/Obligation.stories.js +642 -0
  276. package/src/components/molecules/obligation/icons/PropertyBusinessIcon.js +2 -2
  277. package/src/components/molecules/obligation/icons/PropertyCarIcon.js +2 -2
  278. package/src/components/molecules/obligation/icons/PropertyCommercialVehicleIcon.js +2 -2
  279. package/src/components/molecules/obligation/icons/PropertyGarageIcon.js +2 -2
  280. package/src/components/molecules/obligation/icons/PropertyLandIcon.js +2 -2
  281. package/src/components/molecules/obligation/icons/PropertyMotorcycleIcon.js +2 -2
  282. package/src/components/molecules/obligation/icons/PropertyPersonalIcon.js +2 -2
  283. package/src/components/molecules/obligation/icons/PropertyStorefrontIcon.js +2 -2
  284. package/src/components/molecules/obligation/modules/AmountModule.js +64 -38
  285. package/src/components/molecules/obligation/modules/AutopayModalModule.js +37 -12
  286. package/src/components/molecules/obligation/modules/InactiveControlsModule.js +56 -12
  287. package/src/components/molecules/obligation/modules/InactiveTitleModule.js +1 -1
  288. package/src/components/molecules/obligation/modules/PaymentDetailsActions.js +42 -10
  289. package/src/components/molecules/obligation/modules/RemoveAccountModalModule.js +4 -1
  290. package/src/components/molecules/pagination/Pagination.mdx +15 -0
  291. package/src/components/molecules/pagination/Pagination.stories.js +181 -0
  292. package/src/components/molecules/partial-amount-form/PartialAmountField.js +68 -29
  293. package/src/components/molecules/partial-amount-form/PartialAmountField.theme.js +7 -0
  294. package/src/components/molecules/payment-button-bar/PaymentButtonBar.js +15 -8
  295. package/src/components/molecules/payment-details/PaymentDetails.js +1 -2
  296. package/src/components/molecules/payment-details/PaymentDetails.oldstories.js +0 -1
  297. package/src/components/molecules/payment-form-ach/PaymentFormACH.js +2 -0
  298. package/src/components/molecules/payment-form-ach/PaymentFormACH.state.js +2 -2
  299. package/src/components/molecules/payment-form-card/PaymentFormCard.js +6 -2
  300. package/src/components/molecules/payment-form-card/PaymentFormCard.state.js +2 -1
  301. package/src/components/molecules/phone-form/PhoneForm.js +7 -1
  302. package/src/components/molecules/phone-form/PhoneForm.state.js +1 -1
  303. package/src/components/molecules/popover/Popover.js +1 -15
  304. package/src/components/molecules/popover/Popover.mdx +15 -0
  305. package/src/components/molecules/popover/Popover.stories.js +220 -0
  306. package/src/components/molecules/radio-group/RadioGroup.js +8 -3
  307. package/src/components/molecules/radio-group/index.d.ts +1 -0
  308. package/src/components/molecules/radio-section/InnerRadioSection.js +3 -3
  309. package/src/components/molecules/radio-section/RadioSection.js +87 -44
  310. package/src/components/molecules/radio-section/RadioSection.stories.js +142 -0
  311. package/src/components/molecules/radio-section/radio-button/RadioButton.js +9 -5
  312. package/src/components/molecules/registration-banner/RegistrationBanner.js +115 -0
  313. package/src/components/molecules/registration-banner/RegistrationBanner.mdx +15 -0
  314. package/src/components/molecules/registration-banner/RegistrationBanner.stories.js +80 -0
  315. package/src/components/molecules/registration-banner/RegistrationBanner.styled.js +46 -0
  316. package/src/components/molecules/registration-banner/RegistrationBanner.theme.js +6 -0
  317. package/src/components/molecules/registration-banner/index.d.ts +15 -0
  318. package/src/components/molecules/registration-banner/index.js +3 -0
  319. package/src/components/molecules/registration-form/RegistrationForm.js +2 -1
  320. package/src/components/molecules/tab-sidebar/TabSidebar.js +5 -3
  321. package/src/components/molecules/tabs/Tabs.js +25 -9
  322. package/src/components/molecules/tabs/Tabs.mdx +17 -0
  323. package/src/components/molecules/tabs/Tabs.stories.js +149 -0
  324. package/src/components/molecules/tabs/index.d.ts +21 -0
  325. package/src/components/molecules/terms-and-conditions-modal/TermsAndConditionsModal.js +1 -1
  326. package/src/components/molecules/terms-and-conditions-modal/TermsAndConditionsModal.stories.js +110 -0
  327. package/src/components/molecules/toast-notification/Toast.mdx +15 -0
  328. package/src/components/molecules/toast-notification/Toast.stories.js +183 -0
  329. package/src/components/molecules/toast-notification/ToastNotification.js +74 -43
  330. package/src/components/molecules/tooltip/Tooltip.js +269 -0
  331. package/src/components/molecules/tooltip/Tooltip.mdx +25 -0
  332. package/src/components/molecules/tooltip/Tooltip.stories.js +287 -0
  333. package/src/components/molecules/tooltip/Tooltip.theme.js +18 -0
  334. package/src/components/molecules/tooltip/index.d.ts +34 -0
  335. package/src/components/molecules/tooltip/index.js +3 -0
  336. package/src/components/molecules/turnstile-widget/TurnstileWidget.js +183 -0
  337. package/src/components/molecules/turnstile-widget/index.js +3 -0
  338. package/src/components/templates/sidebar-stack-content/SidebarStackContent.js +1 -1
  339. package/src/constants/colors.d.ts +4 -0
  340. package/src/constants/colors.js +8 -1
  341. package/src/constants/regex_constants.js +1 -1
  342. package/src/constants/style_constants.js +13 -0
  343. package/src/deprecated/spinner/Spinner.js +8 -20
  344. package/src/hooks/index.js +2 -0
  345. package/src/hooks/use-conditionally-add-validator/index.js +20 -0
  346. package/src/hooks/use-outside-click/index.js +4 -5
  347. package/src/hooks/use-turnstile-script/index.js +49 -0
  348. package/src/util/formats.js +6 -3
  349. package/src/util/general.js +67 -4
  350. package/src/util/idleTimerUtils.js +36 -0
  351. package/src/util/index.js +3 -1
  352. package/src/util/themeUtils.js +24 -14
  353. package/src/.DS_Store +0 -0
  354. package/src/components/.DS_Store +0 -0
  355. package/src/components/atoms/alert/Alert.oldstories.js +0 -28
  356. package/src/components/atoms/badge/Badge.oldstories.js +0 -33
  357. package/src/components/atoms/breadcrumb/Breadcrumb.oldstories.js +0 -38
  358. package/src/components/atoms/button-with-action/ButtonWithAction.oldstories.js +0 -56
  359. package/src/components/atoms/button-with-link/ButtonWithLink.oldstories.js +0 -32
  360. package/src/components/atoms/country-dropdown/CountryDropdown.oldstories.js +0 -42
  361. package/src/components/atoms/display-box/DisplayBox.oldstories.js +0 -25
  362. package/src/components/atoms/display-card/DisplayCard.js +0 -88
  363. package/src/components/atoms/display-card/DisplayCard.oldstories.js +0 -24
  364. package/src/components/atoms/display-card/index.js +0 -3
  365. package/src/components/atoms/dropdown/Dropdown.oldstories.js +0 -47
  366. package/src/components/atoms/form-select/FormSelect.oldstories.js +0 -50
  367. package/src/components/atoms/formatted-address/FormattedAddress.oldstories.js +0 -32
  368. package/src/components/atoms/icons/NoPaymentResultsIcon.js +0 -54
  369. package/src/components/atoms/icons/PointOfSaleImage.d.ts +0 -1
  370. package/src/components/atoms/icons/PointOfSaleImage.js +0 -439
  371. package/src/components/atoms/labeled-amount/LabeledAmount.oldstories.js +0 -42
  372. package/src/components/atoms/line-item/LineItem.oldstories.js +0 -28
  373. package/src/components/atoms/link/Link.oldstories.js +0 -57
  374. package/src/components/atoms/loading-line/LoadingLine.oldstories.js +0 -28
  375. package/src/components/atoms/nav-footer/NavFooter.oldstories.js +0 -31
  376. package/src/components/atoms/nav-header/NavHeader.oldstories.js +0 -29
  377. package/src/components/atoms/password-requirements/PasswordRequirements.oldstories.js +0 -75
  378. package/src/components/atoms/placeholder/Placeholder.oldstories.js +0 -42
  379. package/src/components/atoms/searchable-select/SearchableSelect.oldstories.js +0 -62
  380. package/src/components/atoms/state-province-dropdown/StateProvinceDropdown.oldstories.js +0 -53
  381. package/src/components/atoms/toggle-switch/ToggleSwitch.oldstories.js +0 -28
  382. package/src/components/molecules/.DS_Store +0 -0
  383. package/src/components/molecules/address-form/AddressForm.oldstories.js +0 -21
  384. package/src/components/molecules/banner/Banner.oldstories.js +0 -29
  385. package/src/components/molecules/change-password-form/ChangePasswordForm.oldstories.js +0 -22
  386. package/src/components/molecules/collapsible-section/CollapsibleSection.oldstories.js +0 -68
  387. package/src/components/molecules/edit-name-form/EdidNameForm.oldstories.js +0 -24
  388. package/src/components/molecules/link-card/LinkCard.oldstories.js +0 -87
  389. package/src/components/molecules/login-form/LoginForm.oldstories.js +0 -24
  390. package/src/components/molecules/modal/Modal.oldstories.js +0 -139
  391. package/src/components/molecules/module/Module.oldstories.js +0 -31
  392. package/src/components/molecules/obligation/.DS_Store +0 -0
  393. package/src/components/molecules/pagination/Pagination.oldstories.js +0 -32
  394. package/src/components/molecules/tabs/Tabs.oldstories.js +0 -241
  395. package/src/components/molecules/toast-notification/ToastNotification.oldstories.js +0 -105
  396. package/src/stories/Button.stories.ts +0 -53
  397. package/src/stories/Button.tsx +0 -48
  398. package/src/stories/Configure.mdx +0 -364
  399. package/src/stories/Header.stories.ts +0 -33
  400. package/src/stories/Header.tsx +0 -56
  401. package/src/stories/Page.stories.ts +0 -32
  402. package/src/stories/Page.tsx +0 -73
  403. package/src/stories/assets/accessibility.png +0 -0
  404. package/src/stories/assets/accessibility.svg +0 -5
  405. package/src/stories/assets/addon-library.png +0 -0
  406. package/src/stories/assets/assets.png +0 -0
  407. package/src/stories/assets/avif-test-image.avif +0 -0
  408. package/src/stories/assets/context.png +0 -0
  409. package/src/stories/assets/discord.svg +0 -15
  410. package/src/stories/assets/docs.png +0 -0
  411. package/src/stories/assets/figma-plugin.png +0 -0
  412. package/src/stories/assets/github.svg +0 -3
  413. package/src/stories/assets/share.png +0 -0
  414. package/src/stories/assets/styling.png +0 -0
  415. package/src/stories/assets/testing.png +0 -0
  416. package/src/stories/assets/theming.png +0 -0
  417. package/src/stories/assets/tutorials.svg +0 -12
  418. package/src/stories/assets/youtube.svg +0 -4
  419. package/src/stories/button.css +0 -30
  420. package/src/stories/header.css +0 -32
  421. package/src/stories/page.css +0 -69
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # CityBase Components
2
2
 
3
- This library contains CityBase React components for use across all current and future CB applications (NFE, RMD, Kiosk, POS).
3
+ This library contains CityBase React components for use across all current and future CB applications (NFE, RMD, POS).
4
4
 
5
5
  <!-- TOC -->
6
6
 
@@ -8,10 +8,9 @@ This library contains CityBase React components for use across all current and f
8
8
  - [Component styles](#component-styles)
9
9
  - [Storybook](#storybook)
10
10
  - [Storybook addons](#storybook-addons)
11
+ - [Storybook deployment](#storybook-deployment)
11
12
  - [Adding new components](#adding-new-components)
12
13
  - [Version bumping and publishing](#version-bumping-and-publishing)
13
- - [Version bumping](#version-bumping)
14
- - [Publishing new versions to NPM](#publishing-new-versions-to-npm)
15
14
  - [Consuming in your application](#consuming-in-your-application)
16
15
 
17
16
  - [Adding to existing application](#adding-to-existing-application)
@@ -43,18 +42,21 @@ The following statement will inheritly be called with `yarn`, but you can run it
43
42
 
44
43
  ## Storybook
45
44
 
46
- This repo uses [React Storybook](https://storybook.js.org/basics/guide-react/) for interactive component display.
47
-
48
- ### Storybook addons
49
-
50
- - [Actions](https://github.com/storybooks/storybook/tree/master/addons/actions)
51
- - [Knobs](https://github.com/storybooks/storybook/tree/master/addons/knobs)
45
+ This repo uses [React Storybook](https://storybook.js.org/basics/guide-react/) v8 for interactive component display.
52
46
 
53
47
  Please include new component stories as this library will also be a sandbox.
54
48
 
55
49
  - `yarn storybook`
56
50
  - open browser to localhost:9001
57
51
 
52
+ ### Storybook addons
53
+
54
+ The repo uses all of the standard addons that come with Storybook v8, including the box model visualizer, measuring tool, and themes. The themes are currently static themes derived from FCS output. For the time being, when changes are made to themes in FCS, those changes need to be replicated inside of the `.storybook/themes/` directory in order for component stories to pick up on them. Ideally in the future a script will dynamically pull FCS themes from UAT.
55
+
56
+ ### Storybook deployment
57
+
58
+ Storybook is deployed to GitHub Pages via a workflow action. This action will run on pushes to the master branch. When new PRs are merged to master the action should run on the merge commit and update the deployed version of Storybook. The deployed version lives here: [GH Pages Storybook](https://citybaseinc.github.io/cb-components/). The code for this action lives in `.github/workflows/deploy-github-pages.yml`.
59
+
58
60
  ## Adding new components
59
61
 
60
62
  - New components may be added to this library via pull request. Only components that are currently used in, or expected to be used in, more than one CB frontend should be present in this library. Very niche application specific components should be kept in the `components/atoms` and `components/molecules` directory of their parent application.
@@ -100,9 +102,15 @@ export * from "./button-with-action";
100
102
 
101
103
  ## Version bumping and publishing
102
104
 
103
- ### Version bumping and Publishing to NPM
105
+ Publishing to NPM is automated. When a PR is merged to master, the package will automatically be built and published to NPM using the version specified in `package.json`. **Developers no longer need to manually run `yarn build && yarn publish`.**
104
106
 
105
- - Authors of PRs are responsible for bumping the version of the package prior to merging an approved PR to master. Once your pending PR has been approved, before merging to master, run `yarn build && yarn publish` in the main directory to create and publish a new build to NPM. This step should happen immediately before you merge your PR to master, to minimize conflicts between built versions.
107
+ ### How it works
108
+
109
+ 1. Before merging your PR, bump the version in `package.json` to an appropriate new version following semantic versioning (see below).
110
+ 2. Ensure the version you set has **not already been published** to NPM. If you merge a PR with a version that has already been published, the automated publish will fail and you will need to create a follow-up PR that bumps the version to an unpublished one.
111
+ 3. Merge your PR to master. The CI pipeline will automatically build and publish the new version.
112
+
113
+ ### Semantic versioning
106
114
 
107
115
  - CB Components follows semantic versioning practices, which divides version upgrades into three categories: "Patch" (e.g., `6.0.1` -> `6.0.2`), "Minor" (e.g., `6.0.2` -> `6.1.0`), and "Major" (e.g., `6.1.0` -> `7.0.0`)
108
116
 
@@ -173,6 +181,20 @@ To import multiple components
173
181
 
174
182
  - `import { ButtonWithAction, LoginForm, Box, Stack, Cluster } from "@thecb/components";`
175
183
 
184
+ ### AI Documentation (`ai-docs/`)
185
+
186
+ The `ai-docs/` directory contains documentation specifically tailored for AI assistants:
187
+
188
+ - **Architecture Overview** (`architecture.md`): System design patterns, atomic design principles, theming architecture, and build system information
189
+ - **Component Structure** (`components.md`): Component hierarchy, layout primitives, form components, and usage patterns
190
+ - **Coding Conventions** (`conventions.md`): Development standards, naming conventions, and best practices for component development
191
+ - **Figma MCP Integration** (`figma-mcp.md`): Guidelines for using Figma MCP tools to generate components from designs
192
+ - **Integration Guidelines** (`integration-guidelines.md`): Step-by-step process for implementing @thecb/components in applications, including required examination of source code, TypeScript definitions, and usage patterns
193
+
176
194
  ```
177
195
 
178
196
  ```
197
+
198
+ ### Publishing Storybook to GitHub Pages
199
+
200
+ This is a test to see if the GH Actions publishing workflow is functional.
@@ -0,0 +1,71 @@
1
+ # Architecture Overview
2
+
3
+ ## Project Type
4
+
5
+ `@thecb/components` - React component library for CityBase apps (NFE, RMD, POS)
6
+
7
+ ## Core Patterns
8
+
9
+ ### Atomic Design
10
+
11
+ - **Atoms**: Layout primitives, form controls, display components
12
+ - **Molecules**: Composed components (forms, modals, navigation)
13
+ - **Templates**: Page-level layouts
14
+
15
+ ### Layout-First Architecture
16
+
17
+ - **Composition**: All components built using layout primitives (Box, Stack, Cluster, Center, Grid)
18
+ - **Prop-Based Styling**: Styling via props, not custom CSS
19
+ - **Layout Primitives**: Foundation atoms for all other components
20
+
21
+ ### Theming System
22
+
23
+ - **FCS Integration**: Dynamic theming via Frontend Configuration Service
24
+ - **Fallback Values**: `.theme.js` files with defaults
25
+ - **Variants**: primary, secondary, danger, ghost, link
26
+ - **Theme Context**: React Context + styled-components ThemeProvider
27
+ - **Client Customization**: Per-client theme overrides
28
+
29
+ ### Build System
30
+
31
+ - **Rollup**: Bundler outputting CommonJS + ES modules
32
+ - **Tree Shaking**: ES module support
33
+ - **TypeScript**: Declaration file generation
34
+ - **Storybook**: Development environment
35
+
36
+ ## Component Philosophy
37
+
38
+ - **Stateless**: Minimal internal state
39
+ - **Reusable**: Multi-application usage only
40
+ - **Separation**: Business logic in consuming apps
41
+ - **Composable**: Built from smaller atoms
42
+
43
+ ## Technical Stack
44
+
45
+ - **React**: Core framework
46
+ - **Styled Components**: CSS-in-JS styling
47
+ - **Redux-Freeform**: Form state management
48
+ - **TypeScript**: Type definitions
49
+ - **Rollup**: Build system
50
+ - **Storybook**: Documentation
51
+
52
+ ## Directory Structure
53
+
54
+ ```
55
+ src/
56
+ ├── components/ # Atoms, molecules, templates
57
+ ├── constants/ # Colors, styles, patterns
58
+ ├── hooks/ # React hooks
59
+ ├── types/ # TypeScript definitions
60
+ ├── util/ # Helper functions
61
+ └── index.js # Main export
62
+ ```
63
+
64
+ ## Key Decisions
65
+
66
+ - **CSS-in-JS**: No global CSS conflicts
67
+ - **Layout Primitives**: Standardized spacing/positioning
68
+ - **Theme Integration**: Dynamic configuration support
69
+ - **Semantic Versioning**: Manual version management
70
+ - **ES Modules**: Tree-shaking enabled
71
+ - **Accessibility**: ARIA support built-in
@@ -0,0 +1,167 @@
1
+ # Component Structure
2
+
3
+ ## Atomic Design Hierarchy
4
+
5
+ ### Atoms (`src/components/atoms/`)
6
+
7
+ #### Layout Primitives
8
+
9
+ Core atoms for all other components:
10
+
11
+ - **Box**: Container with padding, borders, styling
12
+ - **Stack**: Vertical/horizontal spacing with margins
13
+ - **Cluster**: Wrapping elements with consistent gaps
14
+ - **Center**: Horizontal centering with gutters
15
+ - **Grid**: Responsive auto-fill grid layout
16
+ - **Cover**: Full viewport with header/footer
17
+ - **Frame**: Aspect ratio container
18
+ - **Switcher**: Responsive horizontal/vertical layout
19
+
20
+ #### Form Components
21
+
22
+ - **FormInput**: Complete input with validation (see source code and TypeScript definitions)
23
+ - **FormSelect**: Dropdown with form integration (see source code and TypeScript definitions)
24
+ - **Dropdown**: Accessible combobox with search (see source code and TypeScript definitions)
25
+ - **ButtonWithAction**: Primary button (variants: primary, secondary, danger)
26
+ - **Checkbox**: Form checkbox with label
27
+ - **ToggleSwitch**: On/off toggle
28
+ - **TypeaheadInput**: Autocomplete input
29
+
30
+ #### Display Components
31
+
32
+ - **Table**: 6-component table system (see source code and TypeScript definitions)
33
+ - **Alert**: Notifications (variants: info, warning, error, success)
34
+ - **Badge**: Status indicators
35
+ - **Card**: Content containers
36
+ - **Text**: Typography component with variants
37
+ - **Title**: Responsive headings
38
+ - **Loading**: Spinners and skeletons
39
+
40
+ #### Navigation Components
41
+
42
+ - **Breadcrumb**: Navigation breadcrumbs
43
+ - **NavTabs**: Tab navigation
44
+ - **Search**: Search input
45
+
46
+ ### Molecules (Composed Components)
47
+
48
+ Located in `src/components/molecules/` - These combine multiple atoms to create more complex functionality.
49
+
50
+ #### Form Molecules
51
+
52
+ - **AddressForm**: Complete address input form
53
+ - **ChangePasswordForm**: Password change form
54
+ - **EditNameForm**: Name editing form
55
+ - **EmailForm**: Email input form
56
+ - **ForgotPasswordForm**: Password reset request form
57
+ - **LoginForm**: User login form
58
+ - **PhoneForm**: Phone number input form
59
+ - **RegistrationForm**: User registration form
60
+ - **ResetPasswordForm**: Password reset form
61
+ - **ResetConfirmationForm**: Password reset confirmation
62
+ - **ResetPasswordSuccess**: Success state for password reset
63
+
64
+ #### Payment Molecules
65
+
66
+ - **PaymentDetails**: Payment information display
67
+ - **PaymentFormACH**: ACH payment form
68
+ - **PaymentFormCard**: Credit card payment form
69
+ - **PaymentButtonBar**: Payment action buttons
70
+ - **PartialAmountForm**: Partial payment amount form
71
+
72
+ #### UI Molecules
73
+
74
+ - **Banner**: Page banner component
75
+ - **CollapsibleSection**: Expandable content section
76
+ - **Copyable**: Copy-to-clipboard component
77
+ - **EditableList**: List with inline editing
78
+ - **EditableTable**: Table with inline editing
79
+ - **HeroImage**: Hero image with overlay content
80
+ - **IdleModal**: Session timeout modal
81
+ - **LinkCard**: Card with link functionality
82
+ - **Modal**: Modal dialog component
83
+ - **Module**: Content section with title
84
+ - **Obligation**: User account display component
85
+ - **Pagination**: Page navigation
86
+ - **Popover**: Popup content
87
+ - **PopupMenu**: Context menu
88
+ - **RadioGroup**: Group of radio buttons
89
+ - **RadioSection**: Radio button section
90
+ - **Tabs**: Tabbed interface
91
+ - **TabSidebar**: Sidebar with tabs
92
+ - **ToastNotification**: Toast notification
93
+ - **WelcomeModule**: Welcome message component
94
+
95
+ #### Navigation Molecules
96
+
97
+ - **FooterWithSubfooter**: Footer with sub-footer
98
+ - **NavMenu**: Navigation menu
99
+ - **TabNavigation**: Tab-based navigation
100
+ - **TabSidebar**: Sidebar with tab navigation
101
+
102
+ #### Specialized Molecules
103
+
104
+ - **ContactCard**: Contact information display
105
+ - **MultipleSelectFilter**: Multi-select filter component
106
+ - **PeriscopeDashboardIframe**: Dashboard iframe embed
107
+ - **RegistrationBanner**: Registration promotion banner
108
+ - **TermsAndConditions**: Terms and conditions display
109
+ - **TermsAndConditionsModal**: Terms modal
110
+ - **Timeout**: Session timeout component
111
+ - **TurnstileWidget**: Cloudflare Turnstile widget
112
+ - **WorkflowTile**: Workflow step tile
113
+
114
+ ### Templates (Page Layouts)
115
+
116
+ Located in `src/components/templates/` - High-level page structure components.
117
+
118
+ - **CenterSingle**: Centered single column layout
119
+ - **CenterStack**: Centered stacked layout
120
+ - **DefaultPageTemplate**: Standard page template
121
+ - **SidebarSingleContent**: Sidebar with single content area
122
+ - **SidebarStackContent**: Sidebar with stacked content areas
123
+
124
+ ### Component Directory Structure
125
+
126
+ For detailed directory structure and file organization patterns, see [Coding Conventions](./conventions.md#directory-structure).
127
+
128
+ Each component follows a consistent directory structure:
129
+
130
+ ```
131
+ component-name/
132
+ ├── ComponentName.js # Main component file
133
+ ├── ComponentName.styled.js # Styled components
134
+ ├── ComponentName.theme.js # Theme configuration
135
+ ├── ComponentName.stories.js # Storybook stories
136
+ ├── ComponentName.mdx # Documentation
137
+ └── index.js # Export file
138
+ ```
139
+
140
+ ## Component Variants
141
+
142
+ Most components support variants for different use cases:
143
+
144
+ - **ButtonWithAction**: primary, secondary, danger, ghost, link
145
+ - **Alert**: info, warning, error, success
146
+ - **Badge**: danger, neutral, success, warning
147
+ - **Card**: default, elevated, outlined
148
+
149
+ ## Theme Integration
150
+
151
+ > **Note**: For comprehensive theming system details, see [Architecture Overview](./architecture.md#theming-system).
152
+
153
+ Each component includes:
154
+
155
+ - **Theme File**: `.theme.js` with fallback values
156
+ - **Theme Props**: `themeValues`, `variant`, `metadata` props
157
+ - **Styled Components**: Theme-aware styling
158
+ - **FCS Integration**: Dynamic theming via Frontend Configuration Service
159
+
160
+ ## Component Exports
161
+
162
+ Components are exported through index files:
163
+
164
+ - `src/components/atoms/index.js` - All atom exports
165
+ - `src/components/molecules/index.js` - All molecule exports
166
+ - `src/components/templates/index.js` - All template exports
167
+ - `src/index.js` - Main library export
@@ -0,0 +1,162 @@
1
+ # Coding Conventions
2
+
3
+ ## File Structure
4
+
5
+ ### Component Files (Required)
6
+
7
+ - `ComponentName.js` - Main component (PascalCase)
8
+ - `ComponentName.theme.js` - Theme configuration with fallbacks
9
+ - `ComponentName.stories.js` - Storybook stories
10
+ - `index.js` - Export file
11
+ - `index.d.ts` - TypeScript definitions
12
+ - Optional: `ComponentName.styled.js`, `ComponentName.mdx`
13
+
14
+ ### Directory Naming
15
+
16
+ - Component directories: `kebab-case` (e.g., `button-with-action/`)
17
+ - Files: `camelCase.js` for utilities, constants
18
+
19
+ ## Component Structure Pattern
20
+
21
+ ```javascript
22
+ import React, { forwardRef } from "react";
23
+ import { themeComponent } from "../../../util/themeUtils";
24
+ import { fallbackValues } from "./ComponentName.theme";
25
+ import { Box, Stack } from "../../atoms/layouts";
26
+
27
+ const ComponentName = forwardRef(
28
+ ({ variant = "default", children, ...props }, ref) => {
29
+ return (
30
+ <Box ref={ref} {...props}>
31
+ {children}
32
+ </Box>
33
+ );
34
+ }
35
+ );
36
+
37
+ export default themeComponent(
38
+ ComponentName,
39
+ "ComponentName",
40
+ fallbackValues,
41
+ "default"
42
+ );
43
+ ```
44
+
45
+ ### Required Imports Order
46
+
47
+ 1. React imports: `import React, { forwardRef } from "react"`
48
+ 2. Layout imports: `import { Box, Stack } from "../../atoms/layouts"`
49
+ 3. Utilities: `import { themeComponent } from "../../../util/themeUtils"`
50
+ 4. Constants: `import { PRIMARY_BLUE } from "../../../constants/colors"`
51
+ 5. Local: `import { fallbackValues } from "./ComponentName.theme"`
52
+
53
+ ## Theming Pattern
54
+
55
+ ```javascript
56
+ // ComponentName.theme.js
57
+ export const fallbackValues = {
58
+ backgroundColor: {
59
+ primary: "#0074D9",
60
+ secondary: "#6C757D",
61
+ danger: "#DC3545"
62
+ },
63
+ padding: { small: "0.5rem", medium: "1rem", large: "1.5rem" },
64
+ fontSize: "1rem"
65
+ };
66
+ ```
67
+
68
+ ### Styled Components (when needed)
69
+
70
+ ```javascript
71
+ // ComponentName.styled.js
72
+ import styled from "styled-components";
73
+
74
+ export const ComponentNameWrapper = styled.div`
75
+ padding: ${props => props.padding || "1rem"};
76
+ background-color: ${props => props.themeValues?.backgroundColor || "white"};
77
+ `;
78
+ ```
79
+
80
+ ## Component Props Convention
81
+
82
+ ### Base Props (Standard)
83
+
84
+ - `variant` - Component variant (primary, secondary, danger, ghost, link)
85
+ - `themeValues` - Theme overrides object
86
+ - `metadata` - Component metadata
87
+ - `children` - React children
88
+ - Layout props: `padding`, `margin`, `width`, `height`
89
+ - HTML props: Spread remaining props to DOM elements
90
+
91
+ ## TypeScript Pattern
92
+
93
+ ```typescript
94
+ // index.d.ts
95
+ import React from "react";
96
+ import Expand from "../../../util/expand";
97
+
98
+ export interface ComponentNameProps {
99
+ variant?: "primary" | "secondary" | "danger";
100
+ children?: React.ReactNode;
101
+ onClick?: () => void;
102
+ }
103
+
104
+ export const ComponentName: React.FC<Expand<ComponentNameProps> &
105
+ React.HTMLAttributes<HTMLElement>>;
106
+ ```
107
+
108
+ ## Storybook Stories Pattern
109
+
110
+ ```javascript
111
+ // ComponentName.stories.js
112
+ import ComponentName from "./ComponentName";
113
+
114
+ export default {
115
+ title: "Atoms/ComponentName",
116
+ component: ComponentName,
117
+ argTypes: {
118
+ variant: {
119
+ control: { type: "select" },
120
+ options: ["primary", "secondary", "danger"]
121
+ }
122
+ }
123
+ };
124
+
125
+ export const Primary = {
126
+ args: { variant: "primary", children: "Example" }
127
+ };
128
+ ```
129
+
130
+ ## Development Standards
131
+
132
+ ### Code Style
133
+
134
+ - Use modern JS (ES6+), functional components, destructuring
135
+ - Use `forwardRef` for ref passing
136
+ - Use `React.memo` for performance optimization
137
+ - Follow atomic design with layout primitives (Box, Stack, Cluster)
138
+
139
+ ### Git Conventions
140
+
141
+ - Commits: `type(scope): description` (feat, fix, docs, style, refactor, test, chore)
142
+ - Branches: `feature/component-name`, `fix/issue-description`
143
+
144
+ ### Testing & Quality
145
+
146
+ - Storybook stories for all variants
147
+ - Visual testing with Chromatic
148
+ - Accessibility testing with axe-playwright
149
+ - Cross-application integration testing
150
+
151
+ ### Performance
152
+
153
+ - ES modules for tree shaking
154
+ - Minimize external dependencies
155
+ - Use layout primitives instead of custom CSS
156
+
157
+ ### Accessibility Requirements
158
+
159
+ - Proper ARIA labels and roles
160
+ - Keyboard navigation support
161
+ - Semantic HTML elements
162
+ - Screen reader compatibility
@@ -0,0 +1,66 @@
1
+ # AI-Optimized Figma Integration Guide
2
+
3
+ **Quick Reference**: Essential workflow and patterns for converting Figma designs to CityBase Components.
4
+
5
+ ## Mandatory Workflow
6
+
7
+ 1. **`get_code`** → structured component representation
8
+ 2. **`get_screenshot`** → visual reference
9
+ 3. **Download assets** → icons, images if needed
10
+ 4. **Translate** → project conventions (layout primitives, theme tokens)
11
+ 5. **Validate** → 1:1 visual parity with Figma
12
+
13
+ ## Translation Rules
14
+
15
+ ### Code Conversion
16
+
17
+ - **Figma MCP output** = design reference only (ignore Tailwind classes)
18
+ - **Use layout primitives**: Box, Stack, Cluster (not custom CSS)
19
+ - **Map to existing components**: Text, Title, Detail, Button
20
+ - **Apply theme tokens**: colors, typography, spacing from constants
21
+
22
+ ### Design System Integration
23
+
24
+ ```javascript
25
+ // Colors
26
+ import { COLORS, ALERT_COLORS } from 'src/constants/colors.js';
27
+
28
+ // Typography
29
+ <Text variant="p"> // Use Text component variants
30
+ <Title level={2}> // Use Title for headings
31
+
32
+ // Spacing
33
+ <Box padding={SPACING.lg}> // Use SPACING constants
34
+ <Stack gap={SPACING.md}> // Apply through layout primitives
35
+ ```
36
+
37
+ ## Implementation Checklist
38
+
39
+ **Component Creation**:
40
+
41
+ - [ ] Main component with `themeComponent` wrapper
42
+ - [ ] `.theme.js` with fallback values
43
+ - [ ] `.stories.js` with all variants
44
+ - [ ] `index.d.ts` TypeScript definitions
45
+ - [ ] Export in appropriate index files
46
+
47
+ **Visual Validation**:
48
+
49
+ - [ ] 1:1 parity with Figma screenshot
50
+ - [ ] All interactive states work
51
+ - [ ] Responsive behavior correct
52
+ - [ ] Theme variants applied
53
+
54
+ **Icons**:
55
+
56
+ - [ ] SVG components in `src/components/atoms/icons/`
57
+ - [ ] Use theme colors directly in SVG
58
+ - [ ] Name as `[Descriptive]Icon`
59
+ - [ ] Export from icons index
60
+
61
+ ## Quick Reference Locations
62
+
63
+ **Constants**: `src/constants/colors.js`, `src/constants/style_constants.js`
64
+ **Layout Primitives**: `src/components/atoms/layouts/`
65
+ **Theme Utils**: `src/util/themeUtils.js`
66
+ **Component Pattern**: See source code and TypeScript definitions in component directories
@@ -0,0 +1,142 @@
1
+ # @thecb/components Integration Guidelines
2
+
3
+ ## Component Documentation
4
+
5
+ For detailed component implementation guidance, refer to the source code and TypeScript definitions:
6
+
7
+ - **Layout primitives**: `src/components/atoms/layouts/` - Box, Stack, Cluster, Center, Grid
8
+ - **Form components**: `src/components/atoms/form-layouts/`, `src/components/atoms/form-select/`, `src/components/atoms/dropdown/`
9
+ - **Display components**: `src/components/atoms/table/`, `src/components/molecules/modal/`
10
+
11
+ ## Implementation Process
12
+
13
+ 1. **Examine Source Code**: Review component implementation in source files
14
+ 2. **Verify Types**: Confirm TypeScript interface in `index.d.ts`
15
+ 3. **Check Themes**: Review `.theme.js` if component uses theming
16
+ 4. **Follow Patterns**: Use documented usage patterns and examples
17
+
18
+ ## Architecture Overview
19
+
20
+ ```
21
+ @thecb/components/
22
+ ├── atoms/
23
+ │ ├── layouts/ # Box, Stack, Cluster, Center, Grid
24
+ │ ├── form-layouts/ # FormInput
25
+ │ ├── form-select/ # FormSelect
26
+ │ ├── dropdown/ # Dropdown
27
+ │ └── table/ # Table system
28
+ ├── molecules/
29
+ │ └── modal/ # Modal
30
+ └── templates/ # Page layouts
31
+ ```
32
+
33
+ ## Core Patterns
34
+
35
+ ### Layout Primitives (No Theming)
36
+
37
+ - Box: Generic container with styling props
38
+ - Stack: Vertical/horizontal spacing with flexbox
39
+ - Cluster: Wrapping elements with consistent gaps
40
+ - Center: Horizontal centering with gutters
41
+ - Grid: Responsive auto-fill grid layout
42
+
43
+ ### Form Components (With Theming)
44
+
45
+ - FormInput: Complete input with validation
46
+ - FormSelect: Dropdown with form integration
47
+ - Dropdown: Accessible combobox with search
48
+
49
+ ### Display Components
50
+
51
+ - Table: 6-component table system
52
+ - Modal: Accessible dialog with versions
53
+
54
+ ## Integration Rules
55
+
56
+ ### Props
57
+
58
+ - All components accept `extraStyles` for custom CSS
59
+ - Themed components accept `themeValues` object
60
+ - Layout components use `children` prop
61
+ - Event handlers follow React naming (`onClick`, `onSelect`)
62
+
63
+ ### TypeScript
64
+
65
+ - Interfaces use `Expand` utility for prop merging
66
+ - All components extend `React.HTMLAttributes<HTMLElement>`
67
+ - Optional props use `?:` syntax
68
+
69
+ ### Theming
70
+
71
+ - Components using `themeComponent` wrapper have fallback values
72
+ - Theme files define color/style mappings
73
+ - Variants: "default", "primary", "secondary", "danger"
74
+
75
+ ### Accessibility
76
+
77
+ - Form components include ARIA labeling
78
+ - Dropdown/Modal use focus management
79
+ - Screen reader support via semantic HTML
80
+
81
+ ### Import Patterns
82
+
83
+ ```javascript
84
+ // Named imports
85
+ import { Box, Stack, FormInput } from "@thecb/components";
86
+
87
+ // Table system
88
+ import {
89
+ Table,
90
+ TableHead,
91
+ TableBody,
92
+ TableRow,
93
+ TableHeading,
94
+ TableCell
95
+ } from "@thecb/components";
96
+ ```
97
+
98
+ ## Form Field Integration
99
+
100
+ Form components expect field objects with:
101
+
102
+ - `rawValue`: Current value
103
+ - `hasErrors`: Boolean error state
104
+ - `errors`: Array of error keys
105
+ - `dirty`: Boolean touched state
106
+
107
+ Field actions expect:
108
+
109
+ - `set(value)`: Update field value
110
+
111
+ ## Common Anti-patterns
112
+
113
+ - Don't use Box for complex layouts (use Stack/Cluster/Grid)
114
+ - Don't bypass form field integration in FormInput/FormSelect
115
+ - Don't ignore accessibility props in interactive components
116
+ - Don't use layout primitives without understanding spacing behavior
117
+
118
+ ## Quick Reference
119
+
120
+ | Component | Purpose | Key Props | Theming |
121
+ | --------- | ---------- | ------------------------- | ------- |
122
+ | Box | Container | `padding`, `as`, `srOnly` | No |
123
+ | Stack | Spacing | `childGap`, `direction` | No |
124
+ | FormInput | Text input | `field`, `fieldActions` | Yes |
125
+ | Dropdown | Select | `options`, `onSelect` | Yes |
126
+ | Modal | Dialog | `modalOpen`, `hideModal` | No |
127
+
128
+ ## Example Implementation
129
+
130
+ ```javascript
131
+ // Examine source code and TypeScript definitions first, then implement:
132
+ import { FormInput } from "@thecb/components";
133
+
134
+ <FormInput
135
+ field={emailField}
136
+ fieldActions={emailFieldActions}
137
+ labelTextWhenNoError="Email Address"
138
+ type="email"
139
+ isRequired={true}
140
+ errorMessages={{ required: "Email is required" }}
141
+ />;
142
+ ```