@allxsmith/bestax-bulma 5.27.0 → 5.27.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 (316) hide show
  1. package/dist/bestax.css +1 -1
  2. package/dist/bestax.css.map +1 -1
  3. package/dist/esm/columns/Column.js +48 -0
  4. package/dist/esm/columns/Column.js.map +1 -0
  5. package/dist/esm/columns/Columns.js +53 -0
  6. package/dist/esm/columns/Columns.js.map +1 -0
  7. package/dist/esm/components/Avatar.js +299 -0
  8. package/dist/esm/components/Avatar.js.map +1 -0
  9. package/dist/esm/components/Avatars.js +81 -0
  10. package/dist/esm/components/Avatars.js.map +1 -0
  11. package/dist/esm/components/Badge.js +105 -0
  12. package/dist/esm/components/Badge.js.map +1 -0
  13. package/dist/esm/components/Breadcrumb.js +36 -0
  14. package/dist/esm/components/Breadcrumb.js.map +1 -0
  15. package/dist/esm/components/Card.js +252 -0
  16. package/dist/esm/components/Card.js.map +1 -0
  17. package/dist/esm/components/Carousel.js +351 -0
  18. package/dist/esm/components/Carousel.js.map +1 -0
  19. package/dist/esm/components/Collapse.js +193 -0
  20. package/dist/esm/components/Collapse.js.map +1 -0
  21. package/dist/esm/components/Collapses.js +99 -0
  22. package/dist/esm/components/Collapses.js.map +1 -0
  23. package/dist/esm/components/Dialog.js +230 -0
  24. package/dist/esm/components/Dialog.js.map +1 -0
  25. package/dist/esm/components/Dropdown.js +362 -0
  26. package/dist/esm/components/Dropdown.js.map +1 -0
  27. package/dist/esm/components/Loading.js +87 -0
  28. package/dist/esm/components/Loading.js.map +1 -0
  29. package/dist/esm/components/Menu.js +117 -0
  30. package/dist/esm/components/Menu.js.map +1 -0
  31. package/dist/esm/components/Message.js +56 -0
  32. package/dist/esm/components/Message.js.map +1 -0
  33. package/dist/esm/components/Modal.js +354 -0
  34. package/dist/esm/components/Modal.js.map +1 -0
  35. package/dist/esm/components/Navbar.js +287 -0
  36. package/dist/esm/components/Navbar.js.map +1 -0
  37. package/dist/esm/components/Pagination.js +191 -0
  38. package/dist/esm/components/Pagination.js.map +1 -0
  39. package/dist/esm/components/Panel.js +100 -0
  40. package/dist/esm/components/Panel.js.map +1 -0
  41. package/dist/esm/components/Popover.js +298 -0
  42. package/dist/esm/components/Popover.js.map +1 -0
  43. package/dist/esm/components/Reveal.js +157 -0
  44. package/dist/esm/components/Reveal.js.map +1 -0
  45. package/dist/esm/components/Sidebar.js +209 -0
  46. package/dist/esm/components/Sidebar.js.map +1 -0
  47. package/dist/esm/components/Steps.js +128 -0
  48. package/dist/esm/components/Steps.js.map +1 -0
  49. package/dist/esm/components/Tabs.js +335 -0
  50. package/dist/esm/components/Tabs.js.map +1 -0
  51. package/dist/esm/components/Toast.js +322 -0
  52. package/dist/esm/components/Toast.js.map +1 -0
  53. package/dist/esm/components/Tooltip.js +202 -0
  54. package/dist/esm/components/Tooltip.js.map +1 -0
  55. package/dist/esm/components/collapsesContext.js +12 -0
  56. package/dist/esm/components/collapsesContext.js.map +1 -0
  57. package/dist/esm/elements/Block.js +29 -0
  58. package/dist/esm/elements/Block.js.map +1 -0
  59. package/dist/esm/elements/Box.js +32 -0
  60. package/dist/esm/elements/Box.js.map +1 -0
  61. package/dist/esm/elements/Button.js +139 -0
  62. package/dist/esm/elements/Button.js.map +1 -0
  63. package/dist/esm/elements/Buttons.js +42 -0
  64. package/dist/esm/elements/Buttons.js.map +1 -0
  65. package/dist/esm/elements/Code.js +25 -0
  66. package/dist/esm/elements/Code.js.map +1 -0
  67. package/dist/esm/elements/Content.js +33 -0
  68. package/dist/esm/elements/Content.js.map +1 -0
  69. package/dist/esm/elements/Delete.js +35 -0
  70. package/dist/esm/elements/Delete.js.map +1 -0
  71. package/dist/esm/elements/Divider.js +27 -0
  72. package/dist/esm/elements/Divider.js.map +1 -0
  73. package/dist/esm/elements/Emphasis.js +25 -0
  74. package/dist/esm/elements/Emphasis.js.map +1 -0
  75. package/dist/esm/elements/Figure.js +58 -0
  76. package/dist/esm/elements/Figure.js.map +1 -0
  77. package/dist/esm/elements/Icon.js +256 -0
  78. package/dist/esm/elements/Icon.js.map +1 -0
  79. package/dist/esm/elements/IconText.js +36 -0
  80. package/dist/esm/elements/IconText.js.map +1 -0
  81. package/dist/esm/elements/Image.js +46 -0
  82. package/dist/esm/elements/Image.js.map +1 -0
  83. package/dist/esm/elements/Link.js +36 -0
  84. package/dist/esm/elements/Link.js.map +1 -0
  85. package/dist/esm/elements/LinkButton.js +37 -0
  86. package/dist/esm/elements/LinkButton.js.map +1 -0
  87. package/dist/esm/elements/ListItem.js +28 -0
  88. package/dist/esm/elements/ListItem.js.map +1 -0
  89. package/dist/esm/elements/Loader.js +37 -0
  90. package/dist/esm/elements/Loader.js.map +1 -0
  91. package/dist/esm/elements/Notification.js +316 -0
  92. package/dist/esm/elements/Notification.js.map +1 -0
  93. package/dist/esm/elements/OrderedList.js +31 -0
  94. package/dist/esm/elements/OrderedList.js.map +1 -0
  95. package/dist/esm/elements/Paragraph.js +28 -0
  96. package/dist/esm/elements/Paragraph.js.map +1 -0
  97. package/dist/esm/elements/Pre.js +25 -0
  98. package/dist/esm/elements/Pre.js.map +1 -0
  99. package/dist/esm/elements/Progress.js +33 -0
  100. package/dist/esm/elements/Progress.js.map +1 -0
  101. package/dist/esm/elements/Skeleton.js +30 -0
  102. package/dist/esm/elements/Skeleton.js.map +1 -0
  103. package/dist/esm/elements/Span.js +28 -0
  104. package/dist/esm/elements/Span.js.map +1 -0
  105. package/dist/esm/elements/Strong.js +25 -0
  106. package/dist/esm/elements/Strong.js.map +1 -0
  107. package/dist/esm/elements/SubTitle.js +51 -0
  108. package/dist/esm/elements/SubTitle.js.map +1 -0
  109. package/dist/esm/elements/Table.js +51 -0
  110. package/dist/esm/elements/Table.js.map +1 -0
  111. package/dist/esm/elements/Tag.js +49 -0
  112. package/dist/esm/elements/Tag.js.map +1 -0
  113. package/dist/esm/elements/Tags.js +34 -0
  114. package/dist/esm/elements/Tags.js.map +1 -0
  115. package/dist/esm/elements/Tbody.js +26 -0
  116. package/dist/esm/elements/Tbody.js.map +1 -0
  117. package/dist/esm/elements/Td.js +61 -0
  118. package/dist/esm/elements/Td.js.map +1 -0
  119. package/dist/esm/elements/Tfoot.js +26 -0
  120. package/dist/esm/elements/Tfoot.js.map +1 -0
  121. package/dist/esm/elements/Th.js +34 -0
  122. package/dist/esm/elements/Th.js.map +1 -0
  123. package/dist/esm/elements/Thead.js +26 -0
  124. package/dist/esm/elements/Thead.js.map +1 -0
  125. package/dist/esm/elements/Title.js +44 -0
  126. package/dist/esm/elements/Title.js.map +1 -0
  127. package/dist/esm/elements/Tr.js +31 -0
  128. package/dist/esm/elements/Tr.js.map +1 -0
  129. package/dist/esm/elements/UnorderedList.js +31 -0
  130. package/dist/esm/elements/UnorderedList.js.map +1 -0
  131. package/dist/esm/elements/iconProps.js +49 -0
  132. package/dist/esm/elements/iconProps.js.map +1 -0
  133. package/dist/esm/form/Autocomplete.js +279 -0
  134. package/dist/esm/form/Autocomplete.js.map +1 -0
  135. package/dist/esm/form/Checkbox.js +111 -0
  136. package/dist/esm/form/Checkbox.js.map +1 -0
  137. package/dist/esm/form/Checkboxes.js +89 -0
  138. package/dist/esm/form/Checkboxes.js.map +1 -0
  139. package/dist/esm/form/Control.js +79 -0
  140. package/dist/esm/form/Control.js.map +1 -0
  141. package/dist/esm/form/DateInput.js +87 -0
  142. package/dist/esm/form/DateInput.js.map +1 -0
  143. package/dist/esm/form/DateInputBase.js +263 -0
  144. package/dist/esm/form/DateInputBase.js.map +1 -0
  145. package/dist/esm/form/DateRangeInput.js +76 -0
  146. package/dist/esm/form/DateRangeInput.js.map +1 -0
  147. package/dist/esm/form/DateRangeInputBase.js +301 -0
  148. package/dist/esm/form/DateRangeInputBase.js.map +1 -0
  149. package/dist/esm/form/DateTimeInput.js +87 -0
  150. package/dist/esm/form/DateTimeInput.js.map +1 -0
  151. package/dist/esm/form/DateTimeInputBase.js +333 -0
  152. package/dist/esm/form/DateTimeInputBase.js.map +1 -0
  153. package/dist/esm/form/Field.js +153 -0
  154. package/dist/esm/form/Field.js.map +1 -0
  155. package/dist/esm/form/File.js +109 -0
  156. package/dist/esm/form/File.js.map +1 -0
  157. package/dist/esm/form/FormContext.js +170 -0
  158. package/dist/esm/form/FormContext.js.map +1 -0
  159. package/dist/esm/form/Input.js +88 -0
  160. package/dist/esm/form/Input.js.map +1 -0
  161. package/dist/esm/form/InputBase.js +40 -0
  162. package/dist/esm/form/InputBase.js.map +1 -0
  163. package/dist/esm/form/Numberinput.js +199 -0
  164. package/dist/esm/form/Numberinput.js.map +1 -0
  165. package/dist/esm/form/Radio.js +108 -0
  166. package/dist/esm/form/Radio.js.map +1 -0
  167. package/dist/esm/form/Radios.js +91 -0
  168. package/dist/esm/form/Radios.js.map +1 -0
  169. package/dist/esm/form/Rate.js +279 -0
  170. package/dist/esm/form/Rate.js.map +1 -0
  171. package/dist/esm/form/Select.js +81 -0
  172. package/dist/esm/form/Select.js.map +1 -0
  173. package/dist/esm/form/SelectBase.js +54 -0
  174. package/dist/esm/form/SelectBase.js.map +1 -0
  175. package/dist/esm/form/Slider.js +459 -0
  176. package/dist/esm/form/Slider.js.map +1 -0
  177. package/dist/esm/form/Switch.js +96 -0
  178. package/dist/esm/form/Switch.js.map +1 -0
  179. package/dist/esm/form/Taginput.js +352 -0
  180. package/dist/esm/form/Taginput.js.map +1 -0
  181. package/dist/esm/form/TextArea.js +77 -0
  182. package/dist/esm/form/TextArea.js.map +1 -0
  183. package/dist/esm/form/TextAreaBase.js +45 -0
  184. package/dist/esm/form/TextAreaBase.js.map +1 -0
  185. package/dist/esm/form/TimeInput.js +83 -0
  186. package/dist/esm/form/TimeInput.js.map +1 -0
  187. package/dist/esm/form/TimeInputBase.js +246 -0
  188. package/dist/esm/form/TimeInputBase.js.map +1 -0
  189. package/dist/esm/form/_pickerInternals/Calendar.js +760 -0
  190. package/dist/esm/form/_pickerInternals/Calendar.js.map +1 -0
  191. package/dist/esm/form/_pickerInternals/PickerPopover.js +95 -0
  192. package/dist/esm/form/_pickerInternals/PickerPopover.js.map +1 -0
  193. package/dist/esm/form/_pickerInternals/TimeWheels.js +721 -0
  194. package/dist/esm/form/_pickerInternals/TimeWheels.js.map +1 -0
  195. package/dist/esm/form/_pickerInternals/audioTick.js +109 -0
  196. package/dist/esm/form/_pickerInternals/audioTick.js.map +1 -0
  197. package/dist/esm/form/_pickerInternals/dateUtils.js +267 -0
  198. package/dist/esm/form/_pickerInternals/dateUtils.js.map +1 -0
  199. package/dist/esm/form/_pickerInternals/formatters.js +322 -0
  200. package/dist/esm/form/_pickerInternals/formatters.js.map +1 -0
  201. package/dist/esm/form/_pickerInternals/haptics.js +38 -0
  202. package/dist/esm/form/_pickerInternals/haptics.js.map +1 -0
  203. package/dist/esm/form/_pickerInternals/nativeInputSupport.js +25 -0
  204. package/dist/esm/form/_pickerInternals/nativeInputSupport.js.map +1 -0
  205. package/dist/esm/form/_pickerInternals/pickerTypes.js +50 -0
  206. package/dist/esm/form/_pickerInternals/pickerTypes.js.map +1 -0
  207. package/dist/esm/form/_pickerInternals/segmentMap.js +315 -0
  208. package/dist/esm/form/_pickerInternals/segmentMap.js.map +1 -0
  209. package/dist/esm/form/_pickerInternals/useNativeMobilePicker.js +49 -0
  210. package/dist/esm/form/_pickerInternals/useNativeMobilePicker.js.map +1 -0
  211. package/dist/esm/form/_pickerInternals/useSegmentedEntry.js +427 -0
  212. package/dist/esm/form/_pickerInternals/useSegmentedEntry.js.map +1 -0
  213. package/dist/esm/form/controlLoading.js +18 -0
  214. package/dist/esm/form/controlLoading.js.map +1 -0
  215. package/dist/esm/form/useAutoLabelId.js +54 -0
  216. package/dist/esm/form/useAutoLabelId.js.map +1 -0
  217. package/dist/esm/grid/Cell.js +35 -0
  218. package/dist/esm/grid/Cell.js.map +1 -0
  219. package/dist/esm/grid/Grid.js +51 -0
  220. package/dist/esm/grid/Grid.js.map +1 -0
  221. package/dist/esm/helpers/ClientOnly.js +33 -0
  222. package/dist/esm/helpers/ClientOnly.js.map +1 -0
  223. package/dist/esm/helpers/Config.js +60 -0
  224. package/dist/esm/helpers/Config.js.map +1 -0
  225. package/dist/esm/helpers/Theme.js +947 -0
  226. package/dist/esm/helpers/Theme.js.map +1 -0
  227. package/dist/esm/helpers/anchorAttrs.js +72 -0
  228. package/dist/esm/helpers/anchorAttrs.js.map +1 -0
  229. package/dist/esm/helpers/bulmaClassHelpers.js +415 -0
  230. package/dist/esm/helpers/bulmaClassHelpers.js.map +1 -0
  231. package/dist/esm/helpers/buttonType.js +24 -0
  232. package/dist/esm/helpers/buttonType.js.map +1 -0
  233. package/dist/esm/helpers/classNames.js +137 -0
  234. package/dist/esm/helpers/classNames.js.map +1 -0
  235. package/dist/esm/helpers/colorDeprecations.js +50 -0
  236. package/dist/esm/helpers/colorDeprecations.js.map +1 -0
  237. package/dist/esm/helpers/devWarnings.js +27 -0
  238. package/dist/esm/helpers/devWarnings.js.map +1 -0
  239. package/dist/esm/helpers/inertProps.js +27 -0
  240. package/dist/esm/helpers/inertProps.js.map +1 -0
  241. package/dist/esm/helpers/mergeBulmaStyles.js +20 -0
  242. package/dist/esm/helpers/mergeBulmaStyles.js.map +1 -0
  243. package/dist/esm/helpers/polymorphic.js +18 -0
  244. package/dist/esm/helpers/polymorphic.js.map +1 -0
  245. package/dist/esm/helpers/portal.js +76 -0
  246. package/dist/esm/helpers/portal.js.map +1 -0
  247. package/dist/esm/helpers/positionStacks.js +45 -0
  248. package/dist/esm/helpers/positionStacks.js.map +1 -0
  249. package/dist/esm/helpers/scrollLock.js +38 -0
  250. package/dist/esm/helpers/scrollLock.js.map +1 -0
  251. package/dist/esm/helpers/shadowDom.js +71 -0
  252. package/dist/esm/helpers/shadowDom.js.map +1 -0
  253. package/dist/esm/helpers/statusRegion.js +282 -0
  254. package/dist/esm/helpers/statusRegion.js.map +1 -0
  255. package/dist/esm/helpers/useAnchoredPosition.js +86 -0
  256. package/dist/esm/helpers/useAnchoredPosition.js.map +1 -0
  257. package/dist/esm/helpers/useBulmaClasses.js +158 -0
  258. package/dist/esm/helpers/useBulmaClasses.js.map +1 -0
  259. package/dist/esm/helpers/useClientLayoutEffect.js +13 -0
  260. package/dist/esm/helpers/useClientLayoutEffect.js.map +1 -0
  261. package/dist/esm/helpers/useColorClasses.js +84 -0
  262. package/dist/esm/helpers/useColorClasses.js.map +1 -0
  263. package/dist/esm/helpers/useFlexboxClasses.js +92 -0
  264. package/dist/esm/helpers/useFlexboxClasses.js.map +1 -0
  265. package/dist/esm/helpers/useFocusTrap.js +470 -0
  266. package/dist/esm/helpers/useFocusTrap.js.map +1 -0
  267. package/dist/esm/helpers/useIsHydrated.js +31 -0
  268. package/dist/esm/helpers/useIsHydrated.js.map +1 -0
  269. package/dist/esm/helpers/useOtherClasses.js +115 -0
  270. package/dist/esm/helpers/useOtherClasses.js.map +1 -0
  271. package/dist/esm/helpers/useSpacingClasses.js +82 -0
  272. package/dist/esm/helpers/useSpacingClasses.js.map +1 -0
  273. package/dist/esm/helpers/useTypographyClasses.js +93 -0
  274. package/dist/esm/helpers/useTypographyClasses.js.map +1 -0
  275. package/dist/esm/helpers/useVisibilityClasses.js +134 -0
  276. package/dist/esm/helpers/useVisibilityClasses.js.map +1 -0
  277. package/dist/esm/helpers/withSubComponents.js +24 -0
  278. package/dist/esm/helpers/withSubComponents.js.map +1 -0
  279. package/dist/esm/layout/Container.js +48 -0
  280. package/dist/esm/layout/Container.js.map +1 -0
  281. package/dist/esm/layout/Footer.js +33 -0
  282. package/dist/esm/layout/Footer.js.map +1 -0
  283. package/dist/esm/layout/Hero.js +90 -0
  284. package/dist/esm/layout/Hero.js.map +1 -0
  285. package/dist/esm/layout/Level.js +110 -0
  286. package/dist/esm/layout/Level.js.map +1 -0
  287. package/dist/esm/layout/Media.js +86 -0
  288. package/dist/esm/layout/Media.js.map +1 -0
  289. package/dist/esm/layout/Section.js +30 -0
  290. package/dist/esm/layout/Section.js.map +1 -0
  291. package/dist/extras.css +1 -1
  292. package/dist/extras.css.map +1 -1
  293. package/dist/index.cjs +75 -29
  294. package/dist/index.cjs.map +1 -1
  295. package/dist/index.esm.js +115 -17516
  296. package/dist/index.esm.js.map +1 -1
  297. package/dist/types/elements/Icon.d.ts +10 -7
  298. package/dist/types/form/DateInputBase.d.ts +3 -4
  299. package/dist/types/form/DateTimeInputBase.d.ts +3 -4
  300. package/dist/types/form/File.d.ts +3 -3
  301. package/dist/types-cjs/elements/Icon.d.ts +10 -7
  302. package/dist/types-cjs/form/DateInputBase.d.ts +3 -4
  303. package/dist/types-cjs/form/DateTimeInputBase.d.ts +3 -4
  304. package/dist/types-cjs/form/File.d.ts +3 -3
  305. package/dist/versions/bestax-no-dark-mode.css +1 -1
  306. package/dist/versions/bestax-no-dark-mode.css.map +1 -1
  307. package/dist/versions/bestax-no-helpers-prefixed.css +1 -1
  308. package/dist/versions/bestax-no-helpers-prefixed.css.map +1 -1
  309. package/dist/versions/bestax-no-helpers.css +1 -1
  310. package/dist/versions/bestax-no-helpers.css.map +1 -1
  311. package/dist/versions/bestax-prefixed.css +1 -1
  312. package/dist/versions/bestax-prefixed.css.map +1 -1
  313. package/package.json +1 -1
  314. package/src/scss/form/_dateinput.scss +37 -6
  315. package/src/scss/form/_datetimeinput.scss +7 -2
  316. package/src/scss/form/_picker-popover.scss +1 -4
@@ -0,0 +1,158 @@
1
+ /* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
2
+ import { useMemo } from 'react';
3
+ import { classNames } from './classNames.js';
4
+ import { useColorClasses, useColorStyles } from './useColorClasses.js';
5
+ import { useSpacingClasses } from './useSpacingClasses.js';
6
+ import { useTypographyClasses } from './useTypographyClasses.js';
7
+ import { useVisibilityClasses } from './useVisibilityClasses.js';
8
+ import { useFlexboxClasses } from './useFlexboxClasses.js';
9
+ import { useOtherClasses } from './useOtherClasses.js';
10
+ export { validAlignContents, validAlignItems, validAlignSelfs, validAlignments, validAspectRatios, validAxisOverflows, validColorShades, validColors, validCursors, validDisplays, validFlexDirections, validFlexGrowShrink, validFlexWraps, validFloats, validFontFamilies, validGaps, validInteractions, validJustifyContents, validOverflows, validPositions, validRadii, validResponsives, validSchemeColors, validShadows, validSizes, validTextSizes, validTextTransforms, validTextWeights, validViewports, validVisibilities } from './bulmaClassHelpers.js';
11
+
12
+ /**
13
+ * A hook that generates Bulma helper classes from props and separates unhandled props.
14
+ *
15
+ * Composed from the per-concern mini hooks (useColorClasses, useSpacingClasses,
16
+ * useTypographyClasses, useVisibilityClasses, useFlexboxClasses, and
17
+ * useOtherClasses), which can also be used individually.
18
+ *
19
+ * Scheme background values (`backgroundColor: 'scheme-main-bis'`, …) emit no
20
+ * class; they are returned as `bulmaHelperStyles` — a dark-mode-safe inline
21
+ * `background-color: var(--bulma-scheme-*)` style (`undefined` for all other
22
+ * inputs). Merge it with a user `style` prop via `mergeBulmaStyles`.
23
+ *
24
+ * @function useBulmaClasses
25
+ * @param props - Combination of BulmaClassesPropsWithScheme and additional props.
26
+ * @returns An object containing the Bulma helper classes, optional helper
27
+ * styles, and unhandled props.
28
+ * @example
29
+ * const { bulmaHelperClasses, bulmaHelperStyles, rest } = useBulmaClasses({
30
+ * color: 'primary',
31
+ * backgroundColor: 'scheme-main-bis',
32
+ * className: 'custom-class'
33
+ * });
34
+ * // bulmaHelperClasses: 'has-text-primary'
35
+ * // bulmaHelperStyles: { backgroundColor: 'var(--bulma-scheme-main-bis)' }
36
+ * // rest: { className: 'custom-class' }
37
+ */
38
+ const useBulmaClasses = (props) => {
39
+ const { color, backgroundColor, colorShade, backgroundColorShade, m, mt, mr, mb, ml, mx, my, p, pt, pr, pb, pl, px, py, gap, columnGap, rowGap, gapless, textSize, textAlign, textTransform, textWeight, fontFamily, display, visibility, flexDirection, flexWrap, justifyContent, alignContent, alignItems, alignSelf, flexGrow, flexShrink, float, overflow, overflowX, overflowY, overlay, interaction, cursor, radius, shadow, responsive, viewport, displayMobile, displayTablet, displayTabletOnly, displayTouch, displayDesktop, displayDesktopOnly, displayWidescreen, displayWidescreenOnly, displayFullhd, textSizeMobile, textSizeTablet, textSizeDesktop, textSizeWidescreen, textSizeFullhd, textAlignMobile, textAlignTablet, textAlignDesktop, textAlignWidescreen, textAlignFullhd, visibilityMobile, visibilityTablet, visibilityTabletOnly, visibilityTouch, visibilityDesktop, visibilityDesktopOnly, visibilityWidescreen, visibilityWidescreenOnly, visibilityFullhd, skeleton, clearfix, pos, relative, fullHeight, aspectRatio, ...rest } = props;
40
+ const colorClasses = useColorClasses({
41
+ color,
42
+ colorShade,
43
+ backgroundColor,
44
+ backgroundColorShade,
45
+ });
46
+ const bulmaHelperStyles = useColorStyles({ backgroundColor });
47
+ const spacingClasses = useSpacingClasses({
48
+ m,
49
+ mt,
50
+ mr,
51
+ mb,
52
+ ml,
53
+ mx,
54
+ my,
55
+ p,
56
+ pt,
57
+ pr,
58
+ pb,
59
+ pl,
60
+ px,
61
+ py,
62
+ gap,
63
+ columnGap,
64
+ rowGap,
65
+ gapless,
66
+ });
67
+ const typographyClasses = useTypographyClasses({
68
+ textSize,
69
+ textAlign,
70
+ textTransform,
71
+ textWeight,
72
+ fontFamily,
73
+ viewport,
74
+ textSizeMobile,
75
+ textSizeTablet,
76
+ textSizeDesktop,
77
+ textSizeWidescreen,
78
+ textSizeFullhd,
79
+ textAlignMobile,
80
+ textAlignTablet,
81
+ textAlignDesktop,
82
+ textAlignWidescreen,
83
+ textAlignFullhd,
84
+ });
85
+ const visibilityClasses = useVisibilityClasses({
86
+ visibility,
87
+ visibilityMobile,
88
+ visibilityTablet,
89
+ visibilityTabletOnly,
90
+ visibilityTouch,
91
+ visibilityDesktop,
92
+ visibilityDesktopOnly,
93
+ visibilityWidescreen,
94
+ visibilityWidescreenOnly,
95
+ visibilityFullhd,
96
+ display,
97
+ displayMobile,
98
+ displayTablet,
99
+ displayTabletOnly,
100
+ displayTouch,
101
+ displayDesktop,
102
+ displayDesktopOnly,
103
+ displayWidescreen,
104
+ displayWidescreenOnly,
105
+ displayFullhd,
106
+ viewport,
107
+ });
108
+ const flexboxClasses = useFlexboxClasses({
109
+ flexDirection,
110
+ flexWrap,
111
+ justifyContent,
112
+ alignContent,
113
+ alignItems,
114
+ alignSelf,
115
+ flexGrow,
116
+ flexShrink,
117
+ display,
118
+ displayMobile,
119
+ displayTablet,
120
+ displayTabletOnly,
121
+ displayTouch,
122
+ displayDesktop,
123
+ displayDesktopOnly,
124
+ displayWidescreen,
125
+ displayWidescreenOnly,
126
+ displayFullhd,
127
+ });
128
+ const otherClasses = useOtherClasses({
129
+ float,
130
+ overflow,
131
+ overflowX,
132
+ overflowY,
133
+ overlay,
134
+ interaction,
135
+ cursor,
136
+ radius,
137
+ shadow,
138
+ responsive,
139
+ skeleton,
140
+ clearfix,
141
+ pos,
142
+ relative,
143
+ fullHeight,
144
+ aspectRatio,
145
+ });
146
+ const bulmaHelperClasses = useMemo(() => classNames(colorClasses, spacingClasses, typographyClasses, visibilityClasses, flexboxClasses, otherClasses), [
147
+ colorClasses,
148
+ spacingClasses,
149
+ typographyClasses,
150
+ visibilityClasses,
151
+ flexboxClasses,
152
+ otherClasses,
153
+ ]);
154
+ return { bulmaHelperClasses, bulmaHelperStyles, rest };
155
+ };
156
+
157
+ export { useBulmaClasses, useColorClasses, useColorStyles, useFlexboxClasses, useOtherClasses, useSpacingClasses, useTypographyClasses, useVisibilityClasses };
158
+ //# sourceMappingURL=useBulmaClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useBulmaClasses.js","sources":["../../../src/helpers/useBulmaClasses.tsx"],"sourcesContent":["import { useMemo, type CSSProperties } from 'react';\nimport { classNames } from '../helpers/classNames';\nimport {\n BulmaDisplayProps,\n BulmaViewportProps,\n type BulmaGapStep,\n} from './bulmaClassHelpers';\nimport {\n useColorClasses,\n useColorStyles,\n BulmaColorProps,\n BulmaColorPropsWithScheme,\n} from './useColorClasses';\nimport { useSpacingClasses, BulmaSpacingProps } from './useSpacingClasses';\nimport {\n useTypographyClasses,\n BulmaTypographyProps,\n} from './useTypographyClasses';\nimport {\n useVisibilityClasses,\n BulmaVisibilityProps,\n} from './useVisibilityClasses';\nimport { useFlexboxClasses, BulmaFlexboxProps } from './useFlexboxClasses';\nimport { useOtherClasses, BulmaOtherProps } from './useOtherClasses';\n\n/**\n * Props for applying Bulma helper classes to components.\n */\nexport interface BulmaClassesProps\n extends\n BulmaColorProps,\n BulmaSpacingProps,\n BulmaTypographyProps,\n BulmaVisibilityProps,\n BulmaFlexboxProps,\n BulmaOtherProps {}\n\n/**\n * {@link BulmaClassesProps} with `backgroundColor` widened to also accept the\n * scheme color names from `validSchemeColors` (see\n * {@link BulmaColorPropsWithScheme}). This is the input type of\n * `useBulmaClasses`; scheme values surface as the `bulmaHelperStyles` return\n * member instead of a class.\n */\nexport type BulmaClassesPropsWithScheme = Omit<\n BulmaClassesProps,\n keyof BulmaColorProps\n> &\n BulmaColorPropsWithScheme;\n\n/**\n * A hook that generates Bulma helper classes from props and separates unhandled props.\n *\n * Composed from the per-concern mini hooks (useColorClasses, useSpacingClasses,\n * useTypographyClasses, useVisibilityClasses, useFlexboxClasses, and\n * useOtherClasses), which can also be used individually.\n *\n * Scheme background values (`backgroundColor: 'scheme-main-bis'`, …) emit no\n * class; they are returned as `bulmaHelperStyles` — a dark-mode-safe inline\n * `background-color: var(--bulma-scheme-*)` style (`undefined` for all other\n * inputs). Merge it with a user `style` prop via `mergeBulmaStyles`.\n *\n * @function useBulmaClasses\n * @param props - Combination of BulmaClassesPropsWithScheme and additional props.\n * @returns An object containing the Bulma helper classes, optional helper\n * styles, and unhandled props.\n * @example\n * const { bulmaHelperClasses, bulmaHelperStyles, rest } = useBulmaClasses({\n * color: 'primary',\n * backgroundColor: 'scheme-main-bis',\n * className: 'custom-class'\n * });\n * // bulmaHelperClasses: 'has-text-primary'\n * // bulmaHelperStyles: { backgroundColor: 'var(--bulma-scheme-main-bis)' }\n * // rest: { className: 'custom-class' }\n */\nexport const useBulmaClasses = <T extends object>(\n props: BulmaClassesPropsWithScheme & T\n): {\n bulmaHelperClasses: string;\n bulmaHelperStyles?: CSSProperties;\n rest: Omit<T, keyof BulmaClassesProps>;\n} => {\n const {\n color,\n backgroundColor,\n colorShade,\n backgroundColorShade,\n m,\n mt,\n mr,\n mb,\n ml,\n mx,\n my,\n p,\n pt,\n pr,\n pb,\n pl,\n px,\n py,\n gap,\n columnGap,\n rowGap,\n gapless,\n textSize,\n textAlign,\n textTransform,\n textWeight,\n fontFamily,\n display,\n visibility,\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n flexGrow,\n flexShrink,\n float,\n overflow,\n overflowX,\n overflowY,\n overlay,\n interaction,\n cursor,\n radius,\n shadow,\n responsive,\n viewport,\n displayMobile,\n displayTablet,\n displayTabletOnly,\n displayTouch,\n displayDesktop,\n displayDesktopOnly,\n displayWidescreen,\n displayWidescreenOnly,\n displayFullhd,\n textSizeMobile,\n textSizeTablet,\n textSizeDesktop,\n textSizeWidescreen,\n textSizeFullhd,\n textAlignMobile,\n textAlignTablet,\n textAlignDesktop,\n textAlignWidescreen,\n textAlignFullhd,\n visibilityMobile,\n visibilityTablet,\n visibilityTabletOnly,\n visibilityTouch,\n visibilityDesktop,\n visibilityDesktopOnly,\n visibilityWidescreen,\n visibilityWidescreenOnly,\n visibilityFullhd,\n skeleton,\n clearfix,\n pos,\n relative,\n fullHeight,\n aspectRatio,\n ...rest\n } = props;\n\n const colorClasses = useColorClasses({\n color,\n colorShade,\n backgroundColor,\n backgroundColorShade,\n });\n\n const bulmaHelperStyles = useColorStyles({ backgroundColor });\n\n const spacingClasses = useSpacingClasses({\n m,\n mt,\n mr,\n mb,\n ml,\n mx,\n my,\n p,\n pt,\n pr,\n pb,\n pl,\n px,\n py,\n gap,\n columnGap,\n rowGap,\n gapless,\n });\n\n const typographyClasses = useTypographyClasses({\n textSize,\n textAlign,\n textTransform,\n textWeight,\n fontFamily,\n viewport,\n textSizeMobile,\n textSizeTablet,\n textSizeDesktop,\n textSizeWidescreen,\n textSizeFullhd,\n textAlignMobile,\n textAlignTablet,\n textAlignDesktop,\n textAlignWidescreen,\n textAlignFullhd,\n });\n\n const visibilityClasses = useVisibilityClasses({\n visibility,\n visibilityMobile,\n visibilityTablet,\n visibilityTabletOnly,\n visibilityTouch,\n visibilityDesktop,\n visibilityDesktopOnly,\n visibilityWidescreen,\n visibilityWidescreenOnly,\n visibilityFullhd,\n display,\n displayMobile,\n displayTablet,\n displayTabletOnly,\n displayTouch,\n displayDesktop,\n displayDesktopOnly,\n displayWidescreen,\n displayWidescreenOnly,\n displayFullhd,\n viewport,\n });\n\n const flexboxClasses = useFlexboxClasses({\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n flexGrow,\n flexShrink,\n display,\n displayMobile,\n displayTablet,\n displayTabletOnly,\n displayTouch,\n displayDesktop,\n displayDesktopOnly,\n displayWidescreen,\n displayWidescreenOnly,\n displayFullhd,\n });\n\n const otherClasses = useOtherClasses({\n float,\n overflow,\n overflowX,\n overflowY,\n overlay,\n interaction,\n cursor,\n radius,\n shadow,\n responsive,\n skeleton,\n clearfix,\n pos,\n relative,\n fullHeight,\n aspectRatio,\n });\n\n const bulmaHelperClasses = useMemo(\n () =>\n classNames(\n colorClasses,\n spacingClasses,\n typographyClasses,\n visibilityClasses,\n flexboxClasses,\n otherClasses\n ),\n [\n colorClasses,\n spacingClasses,\n typographyClasses,\n visibilityClasses,\n flexboxClasses,\n otherClasses,\n ]\n );\n\n return { bulmaHelperClasses, bulmaHelperStyles, rest };\n};\n\nexport {\n validColors,\n validColorShades,\n validSchemeColors,\n validSizes,\n validGaps,\n validTextSizes,\n validAlignments,\n validTextTransforms,\n validTextWeights,\n validFontFamilies,\n validDisplays,\n validVisibilities,\n validFlexDirections,\n validFlexWraps,\n validJustifyContents,\n validAlignContents,\n validAlignItems,\n validAlignSelfs,\n validFlexGrowShrink,\n validViewports,\n validFloats,\n validOverflows,\n validAxisOverflows,\n validInteractions,\n validCursors,\n validRadii,\n validShadows,\n validResponsives,\n validPositions,\n validAspectRatios,\n} from './bulmaClassHelpers';\nexport type { BulmaViewportProps, BulmaDisplayProps, BulmaGapStep };\nexport * from './useColorClasses';\nexport * from './useSpacingClasses';\nexport * from './useTypographyClasses';\nexport * from './useVisibilityClasses';\nexport * from './useFlexboxClasses';\nexport * from './useOtherClasses';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
2
+ import { useEffect, useLayoutEffect } from 'react';
3
+
4
+ // INTERNAL: deliberately not exported from src/index.ts.
5
+ /**
6
+ * `useLayoutEffect` in the browser, `useEffect` on the server. A server
7
+ * render runs neither, and React 18 warns about a layout effect there, so the
8
+ * server is handed the plain one.
9
+ */
10
+ const useClientLayoutEffect = typeof document === 'undefined' ? useEffect : useLayoutEffect;
11
+
12
+ export { useClientLayoutEffect };
13
+ //# sourceMappingURL=useClientLayoutEffect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClientLayoutEffect.js","sources":["../../../src/helpers/useClientLayoutEffect.ts"],"sourcesContent":["// INTERNAL: deliberately not exported from src/index.ts.\nimport { useEffect, useLayoutEffect } from 'react';\n\n/**\n * `useLayoutEffect` in the browser, `useEffect` on the server. A server\n * render runs neither, and React 18 warns about a layout effect there, so the\n * server is handed the plain one.\n */\nexport const useClientLayoutEffect =\n typeof document === 'undefined' ? useEffect : useLayoutEffect;\n"],"names":[],"mappings":";;;AAAA;AAGA;;;;AAIG;AACI,MAAM,qBAAqB,GAChC,OAAO,QAAQ,KAAK,WAAW,GAAG,SAAS,GAAG;;"}
@@ -0,0 +1,84 @@
1
+ /* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
2
+ import { useMemo } from 'react';
3
+ import { classNames } from './classNames.js';
4
+ import { useConfig } from './Config.js';
5
+ import { validSchemeColors, validColors, validColorShades, createBulmaClassHelpers } from './bulmaClassHelpers.js';
6
+
7
+ /**
8
+ * A hook that generates Bulma text and background color helper classes.
9
+ *
10
+ * Scheme background values (`scheme-main`, `scheme-main-bis`, …) are dropped
11
+ * from class emission — Bulma ships no `has-background-scheme-*` classes; use
12
+ * {@link useColorStyles} to render them as an inline style.
13
+ *
14
+ * @function useColorClasses
15
+ * @param props - Color-related Bulma helper props.
16
+ * @returns A space-separated string of color helper classes.
17
+ * @example
18
+ * const colorClasses = useColorClasses({
19
+ * color: 'primary',
20
+ * backgroundColor: 'info',
21
+ * });
22
+ * // colorClasses: 'has-text-primary has-background-info'
23
+ */
24
+ const useColorClasses = (props) => {
25
+ const { classPrefix } = useConfig();
26
+ const { color, colorShade, backgroundColor, backgroundColorShade } = props;
27
+ return useMemo(() => {
28
+ const { classes, addPrefixedClass, addClass } = createBulmaClassHelpers(classPrefix);
29
+ // Color handling
30
+ const addColorClass = (prefix, value, shade) => {
31
+ if (!value || ![...validColors, 'inherit', 'current'].includes(value))
32
+ return;
33
+ if (shade && validColorShades.includes(shade)) {
34
+ // Color shades never support viewport modifiers in Bulma
35
+ const className = `${prefix}-${value}-${shade}`;
36
+ addPrefixedClass(className);
37
+ }
38
+ else {
39
+ // Color classes never support viewport modifiers in Bulma
40
+ addClass(prefix, value, [...validColors, 'inherit', 'current'], false // supportsViewport = false for all color classes
41
+ );
42
+ }
43
+ };
44
+ // Color
45
+ addColorClass('has-text', color, colorShade);
46
+ addColorClass('has-background', backgroundColor, backgroundColorShade);
47
+ return classNames(classes);
48
+ }, [classPrefix, color, colorShade, backgroundColor, backgroundColorShade]);
49
+ };
50
+ /**
51
+ * A hook that generates inline styles for scheme-aware color props.
52
+ *
53
+ * When `backgroundColor` is one of the scheme color names in
54
+ * `validSchemeColors`, returns `{ backgroundColor: 'var(--bulma-<value>)' }` —
55
+ * an inline style that tracks Bulma's scheme CSS variables, so it adapts to
56
+ * light/dark mode with no bestax-shipped CSS. For every other input it
57
+ * returns `undefined` (never `{}`), so components that don't use scheme
58
+ * values produce identical DOM to before.
59
+ *
60
+ * `backgroundColorShade` is ignored for scheme values — Bulma defines no
61
+ * shaded scheme variables. Only the background is set: the `scheme-invert*`
62
+ * values do not change text color, so pair them with a contrasting
63
+ * foreground.
64
+ *
65
+ * @function useColorStyles
66
+ * @param props - Color-related Bulma helper props (scheme-aware).
67
+ * @returns An inline style object for scheme backgrounds, or `undefined`.
68
+ * @example
69
+ * const colorStyles = useColorStyles({ backgroundColor: 'scheme-main-bis' });
70
+ * // colorStyles: { backgroundColor: 'var(--bulma-scheme-main-bis)' }
71
+ */
72
+ const useColorStyles = (props) => {
73
+ const { backgroundColor } = props;
74
+ return useMemo(() => {
75
+ if (backgroundColor &&
76
+ validSchemeColors.includes(backgroundColor)) {
77
+ return { backgroundColor: `var(--bulma-${backgroundColor})` };
78
+ }
79
+ return undefined;
80
+ }, [backgroundColor]);
81
+ };
82
+
83
+ export { useColorClasses, useColorStyles };
84
+ //# sourceMappingURL=useColorClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useColorClasses.js","sources":["../../../src/helpers/useColorClasses.tsx"],"sourcesContent":["import { useMemo, type CSSProperties } from 'react';\nimport { classNames } from './classNames';\nimport { useConfig } from './Config';\nimport {\n createBulmaClassHelpers,\n validColors,\n validColorShades,\n validSchemeColors,\n} from './bulmaClassHelpers';\n\n/**\n * Props for applying Bulma text and background color helper classes.\n */\nexport interface BulmaColorProps {\n /** Text color class (e.g., 'primary', 'info'). */\n color?: (typeof validColors)[number] | 'inherit' | 'current';\n /** Text color shade suffix (e.g., '00', 'invert'). */\n colorShade?: (typeof validColorShades)[number];\n /** Background color class (e.g., 'primary', 'info'). */\n backgroundColor?: (typeof validColors)[number] | 'inherit' | 'current';\n /** Background color shade suffix (e.g., '00', 'invert'). */\n backgroundColorShade?: (typeof validColorShades)[number];\n}\n\n/**\n * {@link BulmaColorProps} with `backgroundColor` widened to also accept the\n * scheme color names from `validSchemeColors` (e.g., 'scheme-main-bis').\n *\n * Scheme values never emit a `has-background-*` class — pass them through\n * {@link useColorStyles} (or `useBulmaClasses`' `bulmaHelperStyles` return) to\n * get the dark-mode-safe inline `background-color: var(--bulma-scheme-*)`\n * style instead.\n */\nexport type BulmaColorPropsWithScheme = Omit<\n BulmaColorProps,\n 'backgroundColor'\n> & {\n /** Background color: a Bulma color class name or a scheme color name. */\n backgroundColor?:\n BulmaColorProps['backgroundColor'] | (typeof validSchemeColors)[number];\n};\n\n/**\n * A hook that generates Bulma text and background color helper classes.\n *\n * Scheme background values (`scheme-main`, `scheme-main-bis`, …) are dropped\n * from class emission — Bulma ships no `has-background-scheme-*` classes; use\n * {@link useColorStyles} to render them as an inline style.\n *\n * @function useColorClasses\n * @param props - Color-related Bulma helper props.\n * @returns A space-separated string of color helper classes.\n * @example\n * const colorClasses = useColorClasses({\n * color: 'primary',\n * backgroundColor: 'info',\n * });\n * // colorClasses: 'has-text-primary has-background-info'\n */\nexport const useColorClasses = (props: BulmaColorPropsWithScheme): string => {\n const { classPrefix } = useConfig();\n\n const { color, colorShade, backgroundColor, backgroundColorShade } = props;\n\n return useMemo(() => {\n const { classes, addPrefixedClass, addClass } =\n createBulmaClassHelpers(classPrefix);\n\n // Color handling\n const addColorClass = (\n prefix: 'has-text' | 'has-background',\n value: string | undefined,\n shade: (typeof validColorShades)[number] | undefined\n ) => {\n if (!value || ![...validColors, 'inherit', 'current'].includes(value))\n return;\n if (shade && validColorShades.includes(shade)) {\n // Color shades never support viewport modifiers in Bulma\n const className = `${prefix}-${value}-${shade}`;\n addPrefixedClass(className);\n } else {\n // Color classes never support viewport modifiers in Bulma\n addClass(\n prefix,\n value,\n [...validColors, 'inherit', 'current'],\n false // supportsViewport = false for all color classes\n );\n }\n };\n\n // Color\n addColorClass('has-text', color, colorShade);\n addColorClass('has-background', backgroundColor, backgroundColorShade);\n\n return classNames(classes);\n }, [classPrefix, color, colorShade, backgroundColor, backgroundColorShade]);\n};\n\n/**\n * A hook that generates inline styles for scheme-aware color props.\n *\n * When `backgroundColor` is one of the scheme color names in\n * `validSchemeColors`, returns `{ backgroundColor: 'var(--bulma-<value>)' }` —\n * an inline style that tracks Bulma's scheme CSS variables, so it adapts to\n * light/dark mode with no bestax-shipped CSS. For every other input it\n * returns `undefined` (never `{}`), so components that don't use scheme\n * values produce identical DOM to before.\n *\n * `backgroundColorShade` is ignored for scheme values — Bulma defines no\n * shaded scheme variables. Only the background is set: the `scheme-invert*`\n * values do not change text color, so pair them with a contrasting\n * foreground.\n *\n * @function useColorStyles\n * @param props - Color-related Bulma helper props (scheme-aware).\n * @returns An inline style object for scheme backgrounds, or `undefined`.\n * @example\n * const colorStyles = useColorStyles({ backgroundColor: 'scheme-main-bis' });\n * // colorStyles: { backgroundColor: 'var(--bulma-scheme-main-bis)' }\n */\nexport const useColorStyles = (\n props: BulmaColorPropsWithScheme\n): CSSProperties | undefined => {\n const { backgroundColor } = props;\n\n return useMemo(() => {\n if (\n backgroundColor &&\n (validSchemeColors as readonly string[]).includes(backgroundColor)\n ) {\n return { backgroundColor: `var(--bulma-${backgroundColor})` };\n }\n return undefined;\n }, [backgroundColor]);\n};\n"],"names":[],"mappings":";;;;;;AA0CA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,eAAe,GAAG,CAAC,KAAgC,KAAY;AAC1E,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE;IAEnC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,EAAE,GAAG,KAAK;IAE1E,OAAO,OAAO,CAAC,MAAK;AAClB,QAAA,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAC3C,uBAAuB,CAAC,WAAW,CAAC;;QAGtC,MAAM,aAAa,GAAG,CACpB,MAAqC,EACrC,KAAyB,EACzB,KAAoD,KAClD;AACF,YAAA,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACnE;YACF,IAAI,KAAK,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;;gBAE7C,MAAM,SAAS,GAAG,CAAA,EAAG,MAAM,IAAI,KAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE;gBAC/C,gBAAgB,CAAC,SAAS,CAAC;YAC7B;iBAAO;;AAEL,gBAAA,QAAQ,CACN,MAAM,EACN,KAAK,EACL,CAAC,GAAG,WAAW,EAAE,SAAS,EAAE,SAAS,CAAC,EACtC,KAAK;iBACN;YACH;AACF,QAAA,CAAC;;AAGD,QAAA,aAAa,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC;AAC5C,QAAA,aAAa,CAAC,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,CAAC;AAEtE,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,IAAA,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,oBAAoB,CAAC,CAAC;AAC7E;AAEA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,cAAc,GAAG,CAC5B,KAAgC,KACH;AAC7B,IAAA,MAAM,EAAE,eAAe,EAAE,GAAG,KAAK;IAEjC,OAAO,OAAO,CAAC,MAAK;AAClB,QAAA,IACE,eAAe;AACd,YAAA,iBAAuC,CAAC,QAAQ,CAAC,eAAe,CAAC,EAClE;AACA,YAAA,OAAO,EAAE,eAAe,EAAE,eAAe,eAAe,CAAA,CAAA,CAAG,EAAE;QAC/D;AACA,QAAA,OAAO,SAAS;AAClB,IAAA,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;AACvB;;"}
@@ -0,0 +1,92 @@
1
+ /* @allxsmith/bestax-bulma — AI agents: see AGENTS.md in the package root, or https://bestax.io/llms.txt */
2
+ import { useMemo } from 'react';
3
+ import { classNames } from './classNames.js';
4
+ import { useConfig } from './Config.js';
5
+ import { validFlexDirections, validFlexWraps, validJustifyContents, validAlignContents, validAlignItems, validAlignSelfs, validFlexGrowShrink, createBulmaClassHelpers } from './bulmaClassHelpers.js';
6
+
7
+ /**
8
+ * A hook that generates Bulma flexbox helper classes. Flex container helpers
9
+ * (direction, wrap, justify/align content, align items) are only emitted when
10
+ * one of the display props indicates a flex display; flex item helpers
11
+ * (align self, grow, shrink) are always emitted.
12
+ *
13
+ * Note: this hook reads the display props purely as a gate and never emits
14
+ * display classes — `is-flex` and friends come from useVisibilityClasses (or
15
+ * the useBulmaClasses aggregate).
16
+ *
17
+ * @function useFlexboxClasses
18
+ * @param props - Flexbox-related Bulma helper props.
19
+ * @returns A space-separated string of flexbox helper classes.
20
+ * @example
21
+ * const flexboxClasses = useFlexboxClasses({
22
+ * display: 'flex', // gates the container helpers, but emits no 'is-flex'
23
+ * justifyContent: 'center',
24
+ * });
25
+ * // flexboxClasses: 'is-justify-content-center'
26
+ * // ('is-flex' itself comes from useVisibilityClasses/useBulmaClasses)
27
+ */
28
+ const useFlexboxClasses = (props) => {
29
+ const { classPrefix } = useConfig();
30
+ const { flexDirection, flexWrap, justifyContent, alignContent, alignItems, alignSelf, flexGrow, flexShrink, display, displayMobile, displayTablet, displayTabletOnly, displayTouch, displayDesktop, displayDesktopOnly, displayWidescreen, displayWidescreenOnly, displayFullhd, } = props;
31
+ return useMemo(() => {
32
+ const { classes, addClassNoViewport } = createBulmaClassHelpers(classPrefix);
33
+ // Flexbox
34
+ const hasFlexDisplay = display === 'flex' ||
35
+ display === 'inline-flex' ||
36
+ displayMobile === 'flex' ||
37
+ displayMobile === 'inline-flex' ||
38
+ displayTablet === 'flex' ||
39
+ displayTablet === 'inline-flex' ||
40
+ displayTabletOnly === 'flex' ||
41
+ displayTabletOnly === 'inline-flex' ||
42
+ displayTouch === 'flex' ||
43
+ displayTouch === 'inline-flex' ||
44
+ displayDesktop === 'flex' ||
45
+ displayDesktop === 'inline-flex' ||
46
+ displayDesktopOnly === 'flex' ||
47
+ displayDesktopOnly === 'inline-flex' ||
48
+ displayWidescreen === 'flex' ||
49
+ displayWidescreen === 'inline-flex' ||
50
+ displayWidescreenOnly === 'flex' ||
51
+ displayWidescreenOnly === 'inline-flex' ||
52
+ displayFullhd === 'flex' ||
53
+ displayFullhd === 'inline-flex';
54
+ if (hasFlexDisplay) {
55
+ // Flexbox container properties do not support viewport modifiers in Bulma
56
+ addClassNoViewport('is-flex-direction', flexDirection, validFlexDirections);
57
+ addClassNoViewport('is-flex-wrap', flexWrap, validFlexWraps);
58
+ addClassNoViewport('is-justify-content', justifyContent, validJustifyContents);
59
+ addClassNoViewport('is-align-content', alignContent, validAlignContents);
60
+ addClassNoViewport('is-align-items', alignItems, validAlignItems);
61
+ }
62
+ // Flex item properties (can be applied to any element that is a flex item)
63
+ // These don't require the element itself to have display: flex
64
+ addClassNoViewport('is-align-self', alignSelf, validAlignSelfs);
65
+ addClassNoViewport('is-flex-grow', flexGrow, validFlexGrowShrink);
66
+ addClassNoViewport('is-flex-shrink', flexShrink, validFlexGrowShrink);
67
+ return classNames(classes);
68
+ }, [
69
+ classPrefix,
70
+ flexDirection,
71
+ flexWrap,
72
+ justifyContent,
73
+ alignContent,
74
+ alignItems,
75
+ alignSelf,
76
+ flexGrow,
77
+ flexShrink,
78
+ display,
79
+ displayMobile,
80
+ displayTablet,
81
+ displayTabletOnly,
82
+ displayTouch,
83
+ displayDesktop,
84
+ displayDesktopOnly,
85
+ displayWidescreen,
86
+ displayWidescreenOnly,
87
+ displayFullhd,
88
+ ]);
89
+ };
90
+
91
+ export { useFlexboxClasses };
92
+ //# sourceMappingURL=useFlexboxClasses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFlexboxClasses.js","sources":["../../../src/helpers/useFlexboxClasses.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { classNames } from './classNames';\nimport { useConfig } from './Config';\nimport {\n createBulmaClassHelpers,\n validFlexDirections,\n validFlexWraps,\n validJustifyContents,\n validAlignContents,\n validAlignItems,\n validAlignSelfs,\n validFlexGrowShrink,\n BulmaDisplayProps,\n} from './bulmaClassHelpers';\n\n/**\n * Props for applying Bulma flexbox helper classes. The display props are read\n * only to gate the flex container helpers; this hook never emits display\n * classes itself.\n */\nexport interface BulmaFlexboxProps extends BulmaDisplayProps {\n /** Flex direction (e.g., 'row', 'column'). */\n flexDirection?: (typeof validFlexDirections)[number];\n /** Flex wrap (e.g., 'wrap', 'nowrap'). */\n flexWrap?: (typeof validFlexWraps)[number];\n /** Justify content (e.g., 'center', 'space-between'). */\n justifyContent?: (typeof validJustifyContents)[number];\n /** Align content (e.g., 'center', 'stretch'). */\n alignContent?: (typeof validAlignContents)[number];\n /** Align items (e.g., 'center', 'flex-start'). */\n alignItems?: (typeof validAlignItems)[number];\n /** Align self (e.g., 'auto', 'center'). */\n alignSelf?: (typeof validAlignSelfs)[number];\n /** Flex grow value (e.g., '0', '1', '2', '3', '4', '5'). */\n flexGrow?: (typeof validFlexGrowShrink)[number];\n /** Flex shrink value (e.g., '0', '1', '2', '3', '4', '5'). */\n flexShrink?: (typeof validFlexGrowShrink)[number];\n}\n\n/**\n * A hook that generates Bulma flexbox helper classes. Flex container helpers\n * (direction, wrap, justify/align content, align items) are only emitted when\n * one of the display props indicates a flex display; flex item helpers\n * (align self, grow, shrink) are always emitted.\n *\n * Note: this hook reads the display props purely as a gate and never emits\n * display classes — `is-flex` and friends come from useVisibilityClasses (or\n * the useBulmaClasses aggregate).\n *\n * @function useFlexboxClasses\n * @param props - Flexbox-related Bulma helper props.\n * @returns A space-separated string of flexbox helper classes.\n * @example\n * const flexboxClasses = useFlexboxClasses({\n * display: 'flex', // gates the container helpers, but emits no 'is-flex'\n * justifyContent: 'center',\n * });\n * // flexboxClasses: 'is-justify-content-center'\n * // ('is-flex' itself comes from useVisibilityClasses/useBulmaClasses)\n */\nexport const useFlexboxClasses = (props: BulmaFlexboxProps): string => {\n const { classPrefix } = useConfig();\n\n const {\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n flexGrow,\n flexShrink,\n display,\n displayMobile,\n displayTablet,\n displayTabletOnly,\n displayTouch,\n displayDesktop,\n displayDesktopOnly,\n displayWidescreen,\n displayWidescreenOnly,\n displayFullhd,\n } = props;\n\n return useMemo(() => {\n const { classes, addClassNoViewport } =\n createBulmaClassHelpers(classPrefix);\n\n // Flexbox\n const hasFlexDisplay =\n display === 'flex' ||\n display === 'inline-flex' ||\n displayMobile === 'flex' ||\n displayMobile === 'inline-flex' ||\n displayTablet === 'flex' ||\n displayTablet === 'inline-flex' ||\n displayTabletOnly === 'flex' ||\n displayTabletOnly === 'inline-flex' ||\n displayTouch === 'flex' ||\n displayTouch === 'inline-flex' ||\n displayDesktop === 'flex' ||\n displayDesktop === 'inline-flex' ||\n displayDesktopOnly === 'flex' ||\n displayDesktopOnly === 'inline-flex' ||\n displayWidescreen === 'flex' ||\n displayWidescreen === 'inline-flex' ||\n displayWidescreenOnly === 'flex' ||\n displayWidescreenOnly === 'inline-flex' ||\n displayFullhd === 'flex' ||\n displayFullhd === 'inline-flex';\n\n if (hasFlexDisplay) {\n // Flexbox container properties do not support viewport modifiers in Bulma\n addClassNoViewport(\n 'is-flex-direction',\n flexDirection,\n validFlexDirections\n );\n addClassNoViewport('is-flex-wrap', flexWrap, validFlexWraps);\n addClassNoViewport(\n 'is-justify-content',\n justifyContent,\n validJustifyContents\n );\n addClassNoViewport('is-align-content', alignContent, validAlignContents);\n addClassNoViewport('is-align-items', alignItems, validAlignItems);\n }\n\n // Flex item properties (can be applied to any element that is a flex item)\n // These don't require the element itself to have display: flex\n addClassNoViewport('is-align-self', alignSelf, validAlignSelfs);\n addClassNoViewport('is-flex-grow', flexGrow, validFlexGrowShrink);\n addClassNoViewport('is-flex-shrink', flexShrink, validFlexGrowShrink);\n\n return classNames(classes);\n }, [\n classPrefix,\n flexDirection,\n flexWrap,\n justifyContent,\n alignContent,\n alignItems,\n alignSelf,\n flexGrow,\n flexShrink,\n display,\n displayMobile,\n displayTablet,\n displayTabletOnly,\n displayTouch,\n displayDesktop,\n displayDesktopOnly,\n displayWidescreen,\n displayWidescreenOnly,\n displayFullhd,\n ]);\n};\n"],"names":[],"mappings":";;;;;;AAuCA;;;;;;;;;;;;;;;;;;;;AAoBG;AACI,MAAM,iBAAiB,GAAG,CAAC,KAAwB,KAAY;AACpE,IAAA,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE;AAEnC,IAAA,MAAM,EACJ,aAAa,EACb,QAAQ,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,GACd,GAAG,KAAK;IAET,OAAO,OAAO,CAAC,MAAK;QAClB,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,GACnC,uBAAuB,CAAC,WAAW,CAAC;;AAGtC,QAAA,MAAM,cAAc,GAClB,OAAO,KAAK,MAAM;AAClB,YAAA,OAAO,KAAK,aAAa;AACzB,YAAA,aAAa,KAAK,MAAM;AACxB,YAAA,aAAa,KAAK,aAAa;AAC/B,YAAA,aAAa,KAAK,MAAM;AACxB,YAAA,aAAa,KAAK,aAAa;AAC/B,YAAA,iBAAiB,KAAK,MAAM;AAC5B,YAAA,iBAAiB,KAAK,aAAa;AACnC,YAAA,YAAY,KAAK,MAAM;AACvB,YAAA,YAAY,KAAK,aAAa;AAC9B,YAAA,cAAc,KAAK,MAAM;AACzB,YAAA,cAAc,KAAK,aAAa;AAChC,YAAA,kBAAkB,KAAK,MAAM;AAC7B,YAAA,kBAAkB,KAAK,aAAa;AACpC,YAAA,iBAAiB,KAAK,MAAM;AAC5B,YAAA,iBAAiB,KAAK,aAAa;AACnC,YAAA,qBAAqB,KAAK,MAAM;AAChC,YAAA,qBAAqB,KAAK,aAAa;AACvC,YAAA,aAAa,KAAK,MAAM;YACxB,aAAa,KAAK,aAAa;QAEjC,IAAI,cAAc,EAAE;;AAElB,YAAA,kBAAkB,CAChB,mBAAmB,EACnB,aAAa,EACb,mBAAmB,CACpB;AACD,YAAA,kBAAkB,CAAC,cAAc,EAAE,QAAQ,EAAE,cAAc,CAAC;AAC5D,YAAA,kBAAkB,CAChB,oBAAoB,EACpB,cAAc,EACd,oBAAoB,CACrB;AACD,YAAA,kBAAkB,CAAC,kBAAkB,EAAE,YAAY,EAAE,kBAAkB,CAAC;AACxE,YAAA,kBAAkB,CAAC,gBAAgB,EAAE,UAAU,EAAE,eAAe,CAAC;QACnE;;;AAIA,QAAA,kBAAkB,CAAC,eAAe,EAAE,SAAS,EAAE,eAAe,CAAC;AAC/D,QAAA,kBAAkB,CAAC,cAAc,EAAE,QAAQ,EAAE,mBAAmB,CAAC;AACjE,QAAA,kBAAkB,CAAC,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,CAAC;AAErE,QAAA,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,IAAA,CAAC,EAAE;QACD,WAAW;QACX,aAAa;QACb,QAAQ;QACR,cAAc;QACd,YAAY;QACZ,UAAU;QACV,SAAS;QACT,QAAQ;QACR,UAAU;QACV,OAAO;QACP,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,YAAY;QACZ,cAAc;QACd,kBAAkB;QAClB,iBAAiB;QACjB,qBAAqB;QACrB,aAAa;AACd,KAAA,CAAC;AACJ;;"}