@reykjavik/hanna-react 0.10.55 → 0.10.56

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 (592) hide show
  1. package/AccordionList.jsx +61 -0
  2. package/ActionCards.jsx +15 -0
  3. package/Alert.jsx +123 -0
  4. package/ArticleCarousel/_ArticleCarouselCard.d.ts +1 -1
  5. package/ArticleCarousel/_ArticleCarouselCard.jsx +32 -0
  6. package/ArticleCarousel.jsx +13 -0
  7. package/ArticleMeta.jsx +42 -0
  8. package/Attention.jsx +9 -0
  9. package/BasicTable.jsx +35 -0
  10. package/Bling.jsx +49 -0
  11. package/BlockBreak.jsx +11 -0
  12. package/BlockQuote.jsx +9 -0
  13. package/BreadCrumbs.jsx +36 -0
  14. package/ButtonBack.jsx +9 -0
  15. package/ButtonBar.jsx +23 -0
  16. package/ButtonPrimary.jsx +9 -0
  17. package/ButtonSecondary.jsx +9 -0
  18. package/ButtonTertiary.jsx +20 -0
  19. package/CHANGELOG.md +13 -5
  20. package/Carousel.jsx +9 -0
  21. package/CarouselStepper.jsx +9 -0
  22. package/CenterColumn.jsx +14 -0
  23. package/Checkbox.jsx +9 -0
  24. package/CheckboxButtonsGroup.jsx +19 -0
  25. package/CheckboxGroup.jsx +12 -0
  26. package/CityBlock.jsx +23 -0
  27. package/ContactBubble.jsx +192 -0
  28. package/ContentArticle.jsx +29 -0
  29. package/ContentImage.jsx +18 -0
  30. package/Datepicker.jsx +92 -0
  31. package/ExtraLinks.jsx +47 -0
  32. package/FeatureList.jsx +28 -0
  33. package/FieldGroup.jsx +15 -0
  34. package/FileInput.jsx +185 -0
  35. package/Foonote.jsx +12 -0
  36. package/FooterBadges.jsx +21 -0
  37. package/FooterInfo.jsx +19 -0
  38. package/Footnote.jsx +8 -0
  39. package/Form.jsx +17 -0
  40. package/FormField.jsx +121 -0
  41. package/Gallery/_GalleryItem.jsx +59 -0
  42. package/Gallery/_GalleryModal.jsx +86 -0
  43. package/Gallery/_GalleryModalContext.js +8 -0
  44. package/Gallery/_GalleryModalItem.jsx +29 -0
  45. package/Gallery.jsx +56 -0
  46. package/GridBlocks.jsx +40 -0
  47. package/Heading.jsx +24 -0
  48. package/HeroBlock.jsx +27 -0
  49. package/IframeBlock.jsx +31 -0
  50. package/Illustration.jsx +13 -0
  51. package/ImageCards.jsx +28 -0
  52. package/InfoBlock.jsx +23 -0
  53. package/InfoHero.jsx +93 -0
  54. package/IslandBlock.jsx +21 -0
  55. package/IslandPageBlock.jsx +21 -0
  56. package/LabeledTextBlock.jsx +21 -0
  57. package/Layout.jsx +69 -0
  58. package/MainMenu/_Auxiliary.jsx +26 -0
  59. package/MainMenu/_PrimaryPanel.jsx +37 -0
  60. package/MainMenu.d.ts +1 -1
  61. package/MainMenu.jsx +178 -0
  62. package/MiniMetrics.jsx +16 -0
  63. package/Modal.jsx +21 -0
  64. package/NameCard.jsx +92 -0
  65. package/NameCards.jsx +14 -0
  66. package/NewsHero.jsx +93 -0
  67. package/PageFilter.jsx +21 -0
  68. package/PageHeading.jsx +19 -0
  69. package/ProcessOverview.jsx +25 -0
  70. package/PullQuote.jsx +9 -0
  71. package/RadioButtonsGroup.jsx +19 -0
  72. package/RadioGroup.jsx +12 -0
  73. package/RelatedLinks.jsx +35 -0
  74. package/RowBlock.jsx +16 -0
  75. package/RowBlockColumn.jsx +18 -0
  76. package/SearchInput.jsx +63 -0
  77. package/SearchResults/_SearchResultsItem.jsx +24 -0
  78. package/SearchResults.jsx +146 -0
  79. package/SeenEffect.jsx +24 -0
  80. package/Selectbox.jsx +74 -0
  81. package/ShareButtons.jsx +82 -0
  82. package/Sharpie.jsx +27 -0
  83. package/SiteSearchAutocomplete.jsx +89 -0
  84. package/SiteSearchCurtain.jsx +65 -0
  85. package/SiteSearchInput.d.ts +1 -1
  86. package/SiteSearchInput.jsx +70 -0
  87. package/Skeleton.jsx +35 -0
  88. package/SubHeading.jsx +20 -0
  89. package/Tabs.jsx +122 -0
  90. package/TagPill.jsx +53 -0
  91. package/TextBlock.jsx +22 -0
  92. package/TextButton.jsx +14 -0
  93. package/TextInput.jsx +63 -0
  94. package/VSpacer.jsx +46 -0
  95. package/VerticalTabsTOC.jsx +96 -0
  96. package/WizardLayout.jsx +44 -0
  97. package/WizardLayoutClose.jsx +9 -0
  98. package/WizardStepper.jsx +34 -0
  99. package/_abstract/Button.jsx +56 -0
  100. package/_abstract/CardList.jsx +46 -0
  101. package/_abstract/Image.jsx +34 -0
  102. package/_abstract/Link.jsx +31 -0
  103. package/_abstract/TogglerGroup.jsx +36 -0
  104. package/_abstract/TogglerGroupField.jsx +27 -0
  105. package/_abstract/TogglerInput.jsx +40 -0
  106. package/_abstract/_AbstractCarousel.jsx +161 -0
  107. package/_abstract/_Blings.jsx +19 -0
  108. package/_abstract/_Block.jsx +32 -0
  109. package/_abstract/_Quote.jsx +18 -0
  110. package/_abstract/breakOnNL.jsx +13 -0
  111. package/assets.js +51 -0
  112. package/constants.js +25 -0
  113. package/esm/AccordionList.d.ts +17 -0
  114. package/esm/AccordionList.jsx +33 -0
  115. package/esm/ActionCards.d.ts +5 -0
  116. package/esm/ActionCards.jsx +10 -0
  117. package/esm/Alert.d.ts +49 -0
  118. package/esm/Alert.jsx +94 -0
  119. package/esm/ArticleCarousel/_ArticleCarouselCard.d.ts +27 -0
  120. package/esm/ArticleCarousel/_ArticleCarouselCard.jsx +25 -0
  121. package/esm/ArticleCarousel.d.ts +12 -0
  122. package/esm/ArticleCarousel.jsx +8 -0
  123. package/esm/ArticleMeta.d.ts +9 -0
  124. package/esm/ArticleMeta.jsx +17 -0
  125. package/esm/Attention.d.ts +7 -0
  126. package/esm/Attention.jsx +4 -0
  127. package/esm/BasicTable.d.ts +12 -0
  128. package/esm/BasicTable.jsx +30 -0
  129. package/esm/Bling.d.ts +81 -0
  130. package/esm/Bling.jsx +44 -0
  131. package/esm/BlockBreak.d.ts +2 -0
  132. package/esm/BlockBreak.jsx +6 -0
  133. package/esm/BlockQuote.d.ts +4 -0
  134. package/esm/BlockQuote.jsx +4 -0
  135. package/esm/BreadCrumbs.d.ts +11 -0
  136. package/esm/BreadCrumbs.jsx +31 -0
  137. package/esm/ButtonBack.d.ts +7 -0
  138. package/esm/ButtonBack.jsx +4 -0
  139. package/esm/ButtonBar.d.ts +16 -0
  140. package/esm/ButtonBar.jsx +16 -0
  141. package/esm/ButtonPrimary.d.ts +7 -0
  142. package/esm/ButtonPrimary.jsx +4 -0
  143. package/esm/ButtonSecondary.d.ts +7 -0
  144. package/esm/ButtonSecondary.jsx +4 -0
  145. package/esm/ButtonTertiary.d.ts +12 -0
  146. package/esm/ButtonTertiary.jsx +15 -0
  147. package/esm/Carousel.d.ts +4 -0
  148. package/esm/Carousel.jsx +4 -0
  149. package/esm/CarouselStepper.d.ts +4 -0
  150. package/esm/CarouselStepper.jsx +4 -0
  151. package/esm/CenterColumn.d.ts +7 -0
  152. package/esm/CenterColumn.jsx +9 -0
  153. package/esm/Checkbox.d.ts +4 -0
  154. package/esm/Checkbox.jsx +4 -0
  155. package/esm/CheckboxButtonsGroup.d.ts +11 -0
  156. package/esm/CheckboxButtonsGroup.jsx +14 -0
  157. package/esm/CheckboxGroup.d.ts +9 -0
  158. package/esm/CheckboxGroup.jsx +7 -0
  159. package/esm/CityBlock.d.ts +23 -0
  160. package/esm/CityBlock.jsx +18 -0
  161. package/esm/ContactBubble.d.ts +58 -0
  162. package/esm/ContactBubble.jsx +162 -0
  163. package/esm/ContentArticle.d.ts +15 -0
  164. package/esm/ContentArticle.jsx +24 -0
  165. package/esm/ContentImage.d.ts +8 -0
  166. package/esm/ContentImage.jsx +13 -0
  167. package/esm/Datepicker.d.ts +39 -0
  168. package/esm/Datepicker.jsx +64 -0
  169. package/esm/ExtraLinks.d.ts +18 -0
  170. package/esm/ExtraLinks.jsx +42 -0
  171. package/esm/FeatureList.d.ts +12 -0
  172. package/esm/FeatureList.jsx +23 -0
  173. package/esm/FieldGroup.d.ts +9 -0
  174. package/esm/FieldGroup.jsx +10 -0
  175. package/esm/FileInput.d.ts +17 -0
  176. package/esm/FileInput.jsx +157 -0
  177. package/esm/Foonote.d.ts +12 -0
  178. package/esm/Foonote.jsx +7 -0
  179. package/esm/FooterBadges.d.ts +9 -0
  180. package/esm/FooterBadges.jsx +16 -0
  181. package/esm/FooterInfo.d.ts +18 -0
  182. package/esm/FooterInfo.jsx +14 -0
  183. package/esm/Footnote.d.ts +6 -0
  184. package/esm/Footnote.jsx +3 -0
  185. package/esm/Form.d.ts +7 -0
  186. package/esm/Form.jsx +12 -0
  187. package/esm/FormField.d.ts +65 -0
  188. package/esm/FormField.jsx +93 -0
  189. package/esm/Gallery/_GalleryItem.d.ts +8 -0
  190. package/esm/Gallery/_GalleryItem.jsx +31 -0
  191. package/esm/Gallery/_GalleryModal.d.ts +6 -0
  192. package/esm/Gallery/_GalleryModal.jsx +58 -0
  193. package/esm/Gallery/_GalleryModalContext.d.ts +9 -0
  194. package/esm/Gallery/_GalleryModalContext.js +3 -0
  195. package/esm/Gallery/_GalleryModalItem.d.ts +3 -0
  196. package/esm/Gallery/_GalleryModalItem.jsx +24 -0
  197. package/esm/Gallery.d.ts +17 -0
  198. package/esm/Gallery.jsx +28 -0
  199. package/esm/GridBlocks.d.ts +26 -0
  200. package/esm/GridBlocks.jsx +35 -0
  201. package/esm/Heading.d.ts +16 -0
  202. package/esm/Heading.jsx +19 -0
  203. package/esm/HeroBlock.d.ts +19 -0
  204. package/esm/HeroBlock.jsx +22 -0
  205. package/esm/IframeBlock.d.ts +23 -0
  206. package/esm/IframeBlock.jsx +26 -0
  207. package/esm/Illustration.d.ts +13 -0
  208. package/esm/Illustration.jsx +8 -0
  209. package/esm/ImageCards.d.ts +8 -0
  210. package/esm/ImageCards.jsx +23 -0
  211. package/esm/InfoBlock.d.ts +17 -0
  212. package/esm/InfoBlock.jsx +18 -0
  213. package/esm/InfoHero.d.ts +17 -0
  214. package/esm/InfoHero.jsx +88 -0
  215. package/esm/IslandBlock.d.ts +25 -0
  216. package/esm/IslandBlock.jsx +16 -0
  217. package/esm/IslandPageBlock.d.ts +24 -0
  218. package/esm/IslandPageBlock.jsx +16 -0
  219. package/esm/LabeledTextBlock.d.ts +11 -0
  220. package/esm/LabeledTextBlock.jsx +16 -0
  221. package/esm/Layout.d.ts +33 -0
  222. package/esm/Layout.jsx +63 -0
  223. package/esm/MainMenu/_Auxiliary.d.ts +6 -0
  224. package/esm/MainMenu/_Auxiliary.jsx +19 -0
  225. package/esm/MainMenu/_PrimaryPanel.d.ts +13 -0
  226. package/esm/MainMenu/_PrimaryPanel.jsx +30 -0
  227. package/esm/MainMenu.d.ts +48 -0
  228. package/esm/MainMenu.jsx +149 -0
  229. package/esm/MiniMetrics.d.ts +8 -0
  230. package/esm/MiniMetrics.jsx +11 -0
  231. package/esm/Modal.d.ts +10 -0
  232. package/esm/Modal.jsx +16 -0
  233. package/esm/NameCard.d.ts +64 -0
  234. package/esm/NameCard.jsx +87 -0
  235. package/esm/NameCards.d.ts +6 -0
  236. package/esm/NameCards.jsx +9 -0
  237. package/esm/NewsHero.d.ts +14 -0
  238. package/esm/NewsHero.jsx +88 -0
  239. package/esm/PageFilter.d.ts +17 -0
  240. package/esm/PageFilter.jsx +16 -0
  241. package/esm/PageHeading.d.ts +10 -0
  242. package/esm/PageHeading.jsx +14 -0
  243. package/esm/ProcessOverview.d.ts +13 -0
  244. package/esm/ProcessOverview.jsx +20 -0
  245. package/esm/PullQuote.d.ts +4 -0
  246. package/esm/PullQuote.jsx +4 -0
  247. package/esm/RadioButtonsGroup.d.ts +11 -0
  248. package/esm/RadioButtonsGroup.jsx +14 -0
  249. package/esm/RadioGroup.d.ts +13 -0
  250. package/esm/RadioGroup.jsx +7 -0
  251. package/esm/RelatedLinks.d.ts +20 -0
  252. package/esm/RelatedLinks.jsx +30 -0
  253. package/esm/RowBlock.d.ts +12 -0
  254. package/esm/RowBlock.jsx +11 -0
  255. package/esm/RowBlockColumn.d.ts +8 -0
  256. package/esm/RowBlockColumn.jsx +13 -0
  257. package/esm/SearchInput.d.ts +18 -0
  258. package/esm/SearchInput.jsx +35 -0
  259. package/esm/SearchResults/_SearchResultsItem.d.ts +18 -0
  260. package/esm/SearchResults/_SearchResultsItem.jsx +19 -0
  261. package/esm/SearchResults.d.ts +33 -0
  262. package/esm/SearchResults.jsx +118 -0
  263. package/esm/SeenEffect.d.ts +4 -0
  264. package/esm/SeenEffect.jsx +19 -0
  265. package/esm/Selectbox.d.ts +8 -0
  266. package/esm/Selectbox.jsx +46 -0
  267. package/esm/ShareButtons.d.ts +9 -0
  268. package/esm/ShareButtons.jsx +57 -0
  269. package/esm/Sharpie.d.ts +23 -0
  270. package/esm/Sharpie.jsx +22 -0
  271. package/esm/SiteSearchAutocomplete.d.ts +40 -0
  272. package/esm/SiteSearchAutocomplete.jsx +60 -0
  273. package/esm/SiteSearchCurtain.d.ts +6 -0
  274. package/esm/SiteSearchCurtain.jsx +37 -0
  275. package/esm/SiteSearchInput.d.ts +24 -0
  276. package/esm/SiteSearchInput.jsx +42 -0
  277. package/esm/Skeleton.d.ts +25 -0
  278. package/esm/Skeleton.jsx +30 -0
  279. package/esm/SubHeading.d.ts +10 -0
  280. package/esm/SubHeading.jsx +15 -0
  281. package/esm/Tabs.d.ts +35 -0
  282. package/esm/Tabs.jsx +94 -0
  283. package/esm/TagPill.d.ts +27 -0
  284. package/esm/TagPill.jsx +48 -0
  285. package/esm/TextBlock.d.ts +15 -0
  286. package/esm/TextBlock.jsx +17 -0
  287. package/esm/TextButton.d.ts +9 -0
  288. package/esm/TextButton.jsx +9 -0
  289. package/esm/TextInput.d.ts +16 -0
  290. package/esm/TextInput.jsx +35 -0
  291. package/esm/VSpacer.d.ts +24 -0
  292. package/esm/VSpacer.jsx +41 -0
  293. package/esm/VerticalTabsTOC.d.ts +14 -0
  294. package/esm/VerticalTabsTOC.jsx +68 -0
  295. package/esm/WizardLayout.d.ts +15 -0
  296. package/esm/WizardLayout.jsx +39 -0
  297. package/esm/WizardLayoutClose.d.ts +3 -0
  298. package/esm/WizardLayoutClose.jsx +4 -0
  299. package/esm/WizardStepper.d.ts +36 -0
  300. package/esm/WizardStepper.jsx +29 -0
  301. package/esm/_abstract/Button.d.ts +40 -0
  302. package/esm/_abstract/Button.jsx +51 -0
  303. package/esm/_abstract/CardList.d.ts +29 -0
  304. package/esm/_abstract/CardList.jsx +39 -0
  305. package/esm/_abstract/Image.d.ts +32 -0
  306. package/esm/_abstract/Image.jsx +29 -0
  307. package/esm/_abstract/Link.d.ts +27 -0
  308. package/esm/_abstract/Link.jsx +24 -0
  309. package/esm/_abstract/TogglerGroup.d.ts +31 -0
  310. package/esm/_abstract/TogglerGroup.jsx +31 -0
  311. package/esm/_abstract/TogglerGroupField.d.ts +17 -0
  312. package/esm/_abstract/TogglerGroupField.jsx +22 -0
  313. package/esm/_abstract/TogglerInput.d.ts +22 -0
  314. package/esm/_abstract/TogglerInput.jsx +35 -0
  315. package/esm/_abstract/_AbstractCarousel.d.ts +25 -0
  316. package/esm/_abstract/_AbstractCarousel.jsx +133 -0
  317. package/esm/_abstract/_Blings.d.ts +11 -0
  318. package/esm/_abstract/_Blings.jsx +14 -0
  319. package/esm/_abstract/_Block.d.ts +22 -0
  320. package/esm/_abstract/_Block.jsx +27 -0
  321. package/esm/_abstract/_Quote.d.ts +9 -0
  322. package/esm/_abstract/_Quote.jsx +11 -0
  323. package/esm/_abstract/breakOnNL.d.ts +2 -0
  324. package/esm/_abstract/breakOnNL.jsx +8 -0
  325. package/esm/assets.d.ts +42 -0
  326. package/esm/assets.js +56 -0
  327. package/esm/constants.d.ts +39 -0
  328. package/esm/constants.js +22 -0
  329. package/esm/focus-visible.d.ts +1 -0
  330. package/esm/focus-visible.js +1 -0
  331. package/esm/package.json +1 -0
  332. package/esm/utils/env.d.ts +1 -0
  333. package/esm/utils/env.js +8 -0
  334. package/esm/utils/seenEffect.d.ts +28 -0
  335. package/esm/utils/seenEffect.js +73 -0
  336. package/esm/utils/useFormatMonitor.d.ts +38 -0
  337. package/esm/utils/useFormatMonitor.js +41 -0
  338. package/esm/utils/useGetSVGtext.d.ts +6 -0
  339. package/esm/utils/useGetSVGtext.js +19 -0
  340. package/esm/utils/useMenuToggling.d.ts +8 -0
  341. package/esm/utils/useMenuToggling.js +62 -0
  342. package/esm/utils/useScrollbarWidthCSSVar.d.ts +1 -0
  343. package/esm/utils/useScrollbarWidthCSSVar.js +3 -0
  344. package/esm/utils.d.ts +2 -0
  345. package/esm/utils.js +2 -0
  346. package/focus-visible.js +3 -0
  347. package/package.json +183 -184
  348. package/utils/env.js +14 -0
  349. package/utils/seenEffect.js +81 -0
  350. package/utils/useFormatMonitor.js +44 -0
  351. package/utils/useGetSVGtext.js +23 -0
  352. package/utils/useMenuToggling.js +66 -0
  353. package/utils/useScrollbarWidthCSSVar.js +10 -0
  354. package/utils.js +18 -0
  355. package/AccordionList.cjs +0 -91
  356. package/AccordionList.mjs +0 -69
  357. package/ActionCards.cjs +0 -57
  358. package/ActionCards.mjs +0 -35
  359. package/Alert.cjs +0 -159
  360. package/Alert.mjs +0 -139
  361. package/ArticleCarousel/_ArticleCarouselCard.cjs +0 -75
  362. package/ArticleCarousel/_ArticleCarouselCard.mjs +0 -51
  363. package/ArticleCarousel.cjs +0 -43
  364. package/ArticleCarousel.mjs +0 -21
  365. package/ArticleMeta.cjs +0 -46
  366. package/ArticleMeta.mjs +0 -22
  367. package/Attention.cjs +0 -33
  368. package/Attention.mjs +0 -9
  369. package/BasicTable.cjs +0 -72
  370. package/BasicTable.mjs +0 -50
  371. package/Bling.cjs +0 -76
  372. package/Bling.mjs +0 -52
  373. package/BlockBreak.cjs +0 -32
  374. package/BlockBreak.mjs +0 -8
  375. package/BlockQuote.cjs +0 -47
  376. package/BlockQuote.mjs +0 -25
  377. package/BreadCrumbs.cjs +0 -67
  378. package/BreadCrumbs.mjs +0 -43
  379. package/ButtonBack.cjs +0 -47
  380. package/ButtonBack.mjs +0 -25
  381. package/ButtonBar.cjs +0 -45
  382. package/ButtonBar.mjs +0 -18
  383. package/ButtonPrimary.cjs +0 -47
  384. package/ButtonPrimary.mjs +0 -25
  385. package/ButtonSecondary.cjs +0 -47
  386. package/ButtonSecondary.mjs +0 -25
  387. package/ButtonTertiary.cjs +0 -64
  388. package/ButtonTertiary.mjs +0 -42
  389. package/Carousel.cjs +0 -52
  390. package/Carousel.mjs +0 -30
  391. package/CarouselStepper.cjs +0 -51
  392. package/CarouselStepper.mjs +0 -29
  393. package/CenterColumn.cjs +0 -40
  394. package/CenterColumn.mjs +0 -16
  395. package/Checkbox.cjs +0 -52
  396. package/Checkbox.mjs +0 -30
  397. package/CheckboxButtonsGroup.cjs +0 -65
  398. package/CheckboxButtonsGroup.mjs +0 -43
  399. package/CheckboxGroup.cjs +0 -55
  400. package/CheckboxGroup.mjs +0 -33
  401. package/CityBlock.cjs +0 -49
  402. package/CityBlock.mjs +0 -25
  403. package/ContactBubble.cjs +0 -200
  404. package/ContactBubble.mjs +0 -173
  405. package/ContentArticle.cjs +0 -63
  406. package/ContentArticle.mjs +0 -41
  407. package/ContentImage.cjs +0 -58
  408. package/ContentImage.mjs +0 -36
  409. package/Datepicker.cjs +0 -164
  410. package/Datepicker.mjs +0 -142
  411. package/ExtraLinks.cjs +0 -96
  412. package/ExtraLinks.mjs +0 -74
  413. package/FeatureList.cjs +0 -53
  414. package/FeatureList.mjs +0 -29
  415. package/FieldGroup.cjs +0 -40
  416. package/FieldGroup.mjs +0 -16
  417. package/FileInput.cjs +0 -256
  418. package/FileInput.mjs +0 -234
  419. package/Foonote.cjs +0 -30
  420. package/Foonote.mjs +0 -6
  421. package/FooterBadges.cjs +0 -49
  422. package/FooterBadges.mjs +0 -25
  423. package/FooterInfo.cjs +0 -47
  424. package/FooterInfo.mjs +0 -23
  425. package/Footnote.cjs +0 -32
  426. package/Footnote.mjs +0 -8
  427. package/Form.cjs +0 -56
  428. package/Form.mjs +0 -34
  429. package/FormField.cjs +0 -153
  430. package/FormField.mjs +0 -131
  431. package/Gallery/_GalleryItem.cjs +0 -83
  432. package/Gallery/_GalleryItem.mjs +0 -61
  433. package/Gallery/_GalleryModal.cjs +0 -104
  434. package/Gallery/_GalleryModal.mjs +0 -82
  435. package/Gallery/_GalleryModalContext.cjs +0 -30
  436. package/Gallery/_GalleryModalContext.mjs +0 -6
  437. package/Gallery/_GalleryModalItem.cjs +0 -59
  438. package/Gallery/_GalleryModalItem.mjs +0 -36
  439. package/Gallery.cjs +0 -79
  440. package/Gallery.mjs +0 -57
  441. package/GridBlocks.cjs +0 -81
  442. package/GridBlocks.mjs +0 -59
  443. package/Heading.cjs +0 -45
  444. package/Heading.mjs +0 -21
  445. package/HeroBlock.cjs +0 -74
  446. package/HeroBlock.mjs +0 -52
  447. package/IframeBlock.cjs +0 -48
  448. package/IframeBlock.mjs +0 -24
  449. package/Illustration.cjs +0 -51
  450. package/Illustration.mjs +0 -31
  451. package/ImageCards.cjs +0 -72
  452. package/ImageCards.mjs +0 -52
  453. package/InfoBlock.cjs +0 -51
  454. package/InfoBlock.mjs +0 -27
  455. package/InfoHero.cjs +0 -150
  456. package/InfoHero.mjs +0 -128
  457. package/IslandBlock.cjs +0 -63
  458. package/IslandBlock.mjs +0 -41
  459. package/IslandPageBlock.cjs +0 -49
  460. package/IslandPageBlock.mjs +0 -25
  461. package/LabeledTextBlock.cjs +0 -60
  462. package/LabeledTextBlock.mjs +0 -38
  463. package/Layout.cjs +0 -113
  464. package/Layout.mjs +0 -87
  465. package/MainMenu/_Auxiliary.cjs +0 -54
  466. package/MainMenu/_Auxiliary.mjs +0 -28
  467. package/MainMenu/_PrimaryPanel.cjs +0 -74
  468. package/MainMenu/_PrimaryPanel.mjs +0 -48
  469. package/MainMenu.cjs +0 -209
  470. package/MainMenu.mjs +0 -187
  471. package/MiniMetrics.cjs +0 -56
  472. package/MiniMetrics.mjs +0 -34
  473. package/Modal.cjs +0 -70
  474. package/Modal.mjs +0 -48
  475. package/NameCard.cjs +0 -115
  476. package/NameCard.mjs +0 -91
  477. package/NameCards.cjs +0 -52
  478. package/NameCards.mjs +0 -30
  479. package/NewsHero.cjs +0 -136
  480. package/NewsHero.mjs +0 -114
  481. package/PageFilter.cjs +0 -48
  482. package/PageFilter.mjs +0 -24
  483. package/PageHeading.cjs +0 -42
  484. package/PageHeading.mjs +0 -18
  485. package/ProcessOverview.cjs +0 -52
  486. package/ProcessOverview.mjs +0 -28
  487. package/PullQuote.cjs +0 -47
  488. package/PullQuote.mjs +0 -25
  489. package/RadioButtonsGroup.cjs +0 -64
  490. package/RadioButtonsGroup.mjs +0 -42
  491. package/RadioGroup.cjs +0 -58
  492. package/RadioGroup.mjs +0 -36
  493. package/RelatedLinks.cjs +0 -61
  494. package/RelatedLinks.mjs +0 -37
  495. package/RowBlock.cjs +0 -39
  496. package/RowBlock.mjs +0 -15
  497. package/RowBlockColumn.cjs +0 -40
  498. package/RowBlockColumn.mjs +0 -16
  499. package/SearchInput.cjs +0 -136
  500. package/SearchInput.mjs +0 -114
  501. package/SearchResults/_SearchResultsItem.cjs +0 -54
  502. package/SearchResults/_SearchResultsItem.mjs +0 -30
  503. package/SearchResults.cjs +0 -172
  504. package/SearchResults.mjs +0 -150
  505. package/SeenEffect.cjs +0 -66
  506. package/SeenEffect.mjs +0 -44
  507. package/Selectbox.cjs +0 -144
  508. package/Selectbox.mjs +0 -122
  509. package/ShareButtons.cjs +0 -101
  510. package/ShareButtons.mjs +0 -83
  511. package/Sharpie.cjs +0 -51
  512. package/Sharpie.mjs +0 -27
  513. package/SiteSearchAutocomplete.cjs +0 -150
  514. package/SiteSearchAutocomplete.mjs +0 -126
  515. package/SiteSearchCurtain.cjs +0 -78
  516. package/SiteSearchCurtain.mjs +0 -56
  517. package/SiteSearchInput.cjs +0 -119
  518. package/SiteSearchInput.mjs +0 -97
  519. package/Skeleton.cjs +0 -63
  520. package/Skeleton.mjs +0 -39
  521. package/SubHeading.cjs +0 -43
  522. package/SubHeading.mjs +0 -19
  523. package/Tabs.cjs +0 -166
  524. package/Tabs.mjs +0 -144
  525. package/TagPill.cjs +0 -113
  526. package/TagPill.mjs +0 -91
  527. package/TextBlock.cjs +0 -45
  528. package/TextBlock.mjs +0 -21
  529. package/TextButton.cjs +0 -55
  530. package/TextButton.mjs +0 -33
  531. package/TextInput.cjs +0 -136
  532. package/TextInput.mjs +0 -114
  533. package/VSpacer.cjs +0 -70
  534. package/VSpacer.mjs +0 -46
  535. package/VerticalTabsTOC.cjs +0 -123
  536. package/VerticalTabsTOC.mjs +0 -101
  537. package/WizardLayout.cjs +0 -79
  538. package/WizardLayout.mjs +0 -55
  539. package/WizardLayoutClose.cjs +0 -47
  540. package/WizardLayoutClose.mjs +0 -25
  541. package/WizardStepper.cjs +0 -55
  542. package/WizardStepper.mjs +0 -31
  543. package/_abstract/Button.cjs +0 -114
  544. package/_abstract/Button.mjs +0 -92
  545. package/_abstract/CardList.cjs +0 -100
  546. package/_abstract/CardList.mjs +0 -76
  547. package/_abstract/Image.cjs +0 -75
  548. package/_abstract/Image.mjs +0 -51
  549. package/_abstract/Link.cjs +0 -37
  550. package/_abstract/Link.mjs +0 -10
  551. package/_abstract/TogglerGroup.cjs +0 -92
  552. package/_abstract/TogglerGroup.mjs +0 -70
  553. package/_abstract/TogglerGroupField.cjs +0 -121
  554. package/_abstract/TogglerGroupField.mjs +0 -99
  555. package/_abstract/TogglerInput.cjs +0 -105
  556. package/_abstract/TogglerInput.mjs +0 -83
  557. package/_abstract/_AbstractCarousel.cjs +0 -170
  558. package/_abstract/_AbstractCarousel.mjs +0 -152
  559. package/_abstract/_Blings.cjs +0 -47
  560. package/_abstract/_Blings.mjs +0 -23
  561. package/_abstract/_Block.cjs +0 -73
  562. package/_abstract/_Block.mjs +0 -51
  563. package/_abstract/_Quote.cjs +0 -43
  564. package/_abstract/_Quote.mjs +0 -17
  565. package/_abstract/breakOnNL.cjs +0 -30
  566. package/_abstract/breakOnNL.mjs +0 -6
  567. package/assets.cjs +0 -77
  568. package/assets.mjs +0 -53
  569. package/constants.cjs +0 -49
  570. package/constants.mjs +0 -24
  571. package/focus-visible.cjs +0 -1
  572. package/focus-visible.mjs +0 -1
  573. package/utils/config.cjs +0 -27
  574. package/utils/config.d.ts +0 -2
  575. package/utils/config.mjs +0 -4
  576. package/utils/detectEdgeScroll.cjs +0 -95
  577. package/utils/detectEdgeScroll.d.ts +0 -52
  578. package/utils/detectEdgeScroll.mjs +0 -71
  579. package/utils/env.cjs +0 -31
  580. package/utils/env.mjs +0 -5
  581. package/utils/seenEffect.cjs +0 -93
  582. package/utils/seenEffect.mjs +0 -65
  583. package/utils/useFormatMonitor.cjs +0 -29
  584. package/utils/useFormatMonitor.mjs +0 -6
  585. package/utils/useGetSVGtext.cjs +0 -44
  586. package/utils/useGetSVGtext.mjs +0 -21
  587. package/utils/useMenuToggling.cjs +0 -83
  588. package/utils/useMenuToggling.mjs +0 -60
  589. package/utils/useScrollbarWidthCSSVar.cjs +0 -32
  590. package/utils/useScrollbarWidthCSSVar.mjs +0 -6
  591. package/utils.cjs +0 -18
  592. package/utils.mjs +0 -2
@@ -0,0 +1,60 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { createRef, useState } from 'react';
13
+ import Autosuggest from 'react-autosuggest';
14
+ import { getTexts } from '@reykjavik/hanna-utils/i18n';
15
+ import SiteSearchInput from './SiteSearchInput';
16
+ export const defaultSiteSearchACTexts = {
17
+ is: {
18
+ lang: 'is',
19
+ label: 'Leit á vefnum',
20
+ inputLabel: 'Leitarorð',
21
+ placeholder: 'Sláðu inn leitarorð',
22
+ suggestionsLabel: 'Tillögur',
23
+ },
24
+ en: {
25
+ lang: 'en',
26
+ label: 'Site search',
27
+ inputLabel: 'Search terms',
28
+ placeholder: 'Enter search terms',
29
+ suggestionsLabel: 'Suggestions',
30
+ },
31
+ };
32
+ const SiteSearchAutocomplete = (props) => {
33
+ const { suggestions, setSuggestions, renderSuggestion, getSuggestionValue, onSuggestionsFetchRequested, onSuggestionSelected, onSuggestionHighlighted, onSubmit, onButtonClick = onSubmit, bem = 'SiteSearchAutocomplete', } = props;
34
+ const [value, setValue] = useState('');
35
+ const inputRef = createRef();
36
+ const txt = getTexts(props, defaultSiteSearchACTexts);
37
+ return (<Autosuggest theme={{
38
+ container: bem,
39
+ containerOpen: bem + '--open',
40
+ suggestionsContainer: bem + '__container',
41
+ suggestionsContainerOpen: bem + '__container--open',
42
+ suggestionsList: bem + '__list',
43
+ suggestion: bem + '__item',
44
+ suggestionHighlighted: bem + '__item--highlighted',
45
+ }} focusInputOnSuggestionClick={true} suggestions={suggestions} onSuggestionsClearRequested={() => setSuggestions([])} onSuggestionsFetchRequested={onSuggestionsFetchRequested} getSuggestionValue={getSuggestionValue} onSuggestionSelected={onSuggestionSelected} onSuggestionHighlighted={onSuggestionHighlighted} renderSuggestion={renderSuggestion} containerProps={{ 'aria-label': txt.label }} renderSuggestionsContainer={({ containerProps, children }) => (<div {...containerProps} aria-label={txt.suggestionsLabel}>
46
+ {children}
47
+ </div>)} inputProps={{
48
+ ref: inputRef,
49
+ value: value,
50
+ onChange: (_, { newValue }) => {
51
+ setValue(newValue);
52
+ },
53
+ }} renderInputComponent={(inputProps) => {
54
+ /* prettier-ignore */
55
+ const { className, type, disabled, readOnly, required, children } = inputProps, //eslint-disable-line @typescript-eslint/no-unused-vars
56
+ siteSearchProps = __rest(inputProps, ["className", "type", "disabled", "readOnly", "required", "children"]);
57
+ return (<SiteSearchInput {...siteSearchProps} label={props.label || txt.inputLabel} placeholder={txt.placeholder} onSubmit={onSubmit && (() => onSubmit(value))} onButtonClick={onButtonClick && (() => onButtonClick(value))}/>);
58
+ }}/>);
59
+ };
60
+ export default SiteSearchAutocomplete;
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ export declare type SiteSearchCurtain = {
3
+ children: ReactNode;
4
+ };
5
+ declare const SiteSearchCurtain: (props: SiteSearchCurtain) => JSX.Element;
6
+ export default SiteSearchCurtain;
@@ -0,0 +1,37 @@
1
+ import React, { useState } from 'react';
2
+ import { useOnMount } from '@hugsmidjan/react/hooks';
3
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
4
+ import { isPreact } from './utils/env';
5
+ const SiteSearchCurtain = (props) => {
6
+ const [focused, setFocused] = useState(false);
7
+ let blurTimeout;
8
+ useOnMount(() => {
9
+ const closeSearch = (e) => {
10
+ if (e.key === 'Escape') {
11
+ setFocused(false);
12
+ }
13
+ };
14
+ document.addEventListener('keyup', closeSearch);
15
+ return () => {
16
+ document.removeEventListener('keyup', closeSearch);
17
+ };
18
+ });
19
+ const focusHandler = () => {
20
+ blurTimeout && clearTimeout(blurTimeout);
21
+ setFocused(true);
22
+ };
23
+ const blurHandler = (e) => {
24
+ if (!e.relatedTarget || !e.currentTarget.contains(e.relatedTarget)) {
25
+ blurTimeout = setTimeout(() => {
26
+ setFocused(false);
27
+ blurTimeout = undefined;
28
+ }, 100);
29
+ }
30
+ };
31
+ return (<div className={getBemClass('SiteSearchCurtain', [focused && 'focused'])} onFocus={focusHandler} onBlur={blurHandler}
32
+ // (Sneak this in as Preact does not bubble `FocusEvent`s)
33
+ {...(isPreact && { onfocusin: focusHandler, onfocusout: blurHandler })}>
34
+ {props.children}
35
+ </div>);
36
+ };
37
+ export default SiteSearchCurtain;
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { SSRSupport } from '@hugsmidjan/react/hooks';
3
+ import { FormFieldWrappingProps } from './FormField';
4
+ declare type InputElmProps = Omit<JSX.IntrinsicElements['input'], 'className' | 'type' | 'disabled' | 'readOnly' | 'required' | 'onSubmit'>;
5
+ declare type WrappingProps = Pick<FormFieldWrappingProps, 'id' | 'label'>;
6
+ export declare type SiteSearchInputProps = {
7
+ /** Triggered when user hits ENTER key with the focus inside the input field
8
+ *
9
+ * Return `true` to **allow** the browser's default submit hehavior
10
+ */
11
+ onSubmit?: () => boolean | void;
12
+ /** Custom action to perform when the user clicks the search button
13
+ *
14
+ * Return `true` to **allow** the browser's default submit hehavior
15
+ *
16
+ * Defaults to `onSearch`
17
+ */
18
+ onButtonClick?: () => boolean | void;
19
+ buttonText?: string;
20
+ children?: undefined;
21
+ ssr?: SSRSupport;
22
+ } & WrappingProps & InputElmProps;
23
+ declare const SiteSearchInput: React.ForwardRefExoticComponent<Pick<SiteSearchInputProps, "title" | "id" | "ssr" | "form" | "label" | "slot" | "style" | "pattern" | "children" | "hidden" | "onClick" | "dir" | "is" | "key" | "list" | "autoFocus" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "name" | "value" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "size" | "step" | "src" | "alt" | "multiple" | "width" | "accept" | "autoComplete" | "capture" | "checked" | "crossOrigin" | "height" | "max" | "maxLength" | "min" | "minLength" | "onButtonClick" | "buttonText"> & React.RefAttributes<HTMLInputElement>>;
24
+ export default SiteSearchInput;
@@ -0,0 +1,42 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { useState } from 'react';
13
+ import FormField from './FormField';
14
+ // ---------------------------------------------------------------------------
15
+ const SiteSearchInput = React.forwardRef((props, ref) => {
16
+ var _a;
17
+ const { label, id, onChange, placeholder = typeof label === 'string' ? label : undefined, buttonText = 'Leita', onSubmit, onButtonClick = onSubmit, onKeyDown, ssr } = props, inputElementProps = __rest(props, ["label", "id", "onChange", "placeholder", "buttonText", "onSubmit", "onButtonClick", "onKeyDown", "ssr"]);
18
+ const { value, defaultValue } = inputElementProps;
19
+ const [hasValue, setHasValue] = useState(undefined);
20
+ const filled = !!((_a = value !== null && value !== void 0 ? value : hasValue) !== null && _a !== void 0 ? _a : !!defaultValue);
21
+ const empty = !filled && !placeholder;
22
+ const _onChange = value != null
23
+ ? onChange
24
+ : (e) => {
25
+ setHasValue(!!e.target.value);
26
+ onChange && onChange(e);
27
+ };
28
+ return (<FormField className="SiteSearchInput" ssr={ssr} label={label} empty={empty} filled={filled} id={id} renderInput={(className, inputProps, addFocusProps) => (<div className={className.input} {...addFocusProps()}>
29
+ <input className="SiteSearchInput__input" onChange={_onChange} {...inputProps} placeholder={placeholder} onKeyDown={onSubmit
30
+ ? (e) => {
31
+ if (e.key === 'Enter' && onSubmit() !== true) {
32
+ e.preventDefault();
33
+ }
34
+ onKeyDown && onKeyDown(e);
35
+ }
36
+ : onKeyDown} {...inputElementProps} ref={ref}/>{' '}
37
+ <button className="SiteSearchInput__button" type="submit" onClick={onButtonClick && ((e) => !onButtonClick() && e.preventDefault())} title={buttonText}>
38
+ {buttonText}
39
+ </button>
40
+ </div>)}/>);
41
+ });
42
+ export default SiteSearchInput;
@@ -0,0 +1,25 @@
1
+ import { ReactElement } from 'react';
2
+ export declare type SkeletonProps = {
3
+ text?: boolean;
4
+ height?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;
5
+ items?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20;
6
+ gap?: 1 | 2 | 3 | 4 | 5;
7
+ };
8
+ declare const Skeleton: {
9
+ (props: SkeletonProps): JSX.Element;
10
+ /** Returns a single `<Skeleton height={X}/>` element of branded type `SkeletonBlock` */
11
+ block(height?: SkeletonProps['height']): SkeletonBlock;
12
+ /** Returns a single `<Skeleton text height={X}/>` element of branded type `SkeletonText` */
13
+ text(height?: SkeletonProps['height']): SkeletonText;
14
+ };
15
+ export default Skeleton;
16
+ declare const _SkeletonBlock__Brand: unique symbol;
17
+ /** The `<Skeleton height={X}/>` element returned by `Skeleton.block(X)` */
18
+ export declare type SkeletonBlock = ReactElement & {
19
+ [_SkeletonBlock__Brand]: true;
20
+ };
21
+ declare const _SkeletonText__Brand: unique symbol;
22
+ /** The `<Skeleton text height={X}/>` element returned by `Skeleton.text(X)` */
23
+ export declare type SkeletonText = ReactElement & {
24
+ [_SkeletonText__Brand]: true;
25
+ };
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import range from '@hugsmidjan/qj/range';
3
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
4
+ const makeRenderSkeleton = (props) => (key) => (<span key={key} className={getBemClass('Skeleton', [
5
+ props.text && 'text',
6
+ props.height && 'height--' + props.height,
7
+ props.gap && 'gap--' + props.gap,
8
+ ])}/>);
9
+ const minmax = (num = 0, max = 100, min = 1) => {
10
+ num = Math.min(Math.max(Math.round(num), min), max);
11
+ return num > min ? num : undefined;
12
+ };
13
+ const Skeleton = (props) => {
14
+ const height = minmax(props.height, 40);
15
+ const renderSkeleton = makeRenderSkeleton({
16
+ height,
17
+ text: props.text,
18
+ gap: minmax(props.gap, 5, 0),
19
+ });
20
+ const items = minmax(props.items, 20) || 1;
21
+ if (items > 1) {
22
+ return <>{range(1, items).map(renderSkeleton)}</>;
23
+ }
24
+ return renderSkeleton();
25
+ };
26
+ export default Skeleton;
27
+ /** Returns a single `<Skeleton height={X}/>` element of branded type `SkeletonBlock` */
28
+ Skeleton.block = (height) => (<Skeleton height={height}/>);
29
+ /** Returns a single `<Skeleton text height={X}/>` element of branded type `SkeletonText` */
30
+ Skeleton.text = (height) => (<Skeleton text height={height}/>);
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ import { ComponentLayoutProps } from './constants';
4
+ export declare type SubHeadingProps = {
5
+ Tag?: 'h2' | 'h3';
6
+ small?: boolean;
7
+ children: ReactNode;
8
+ } & ComponentLayoutProps & SeenProp;
9
+ declare const SubHeading: (props: SubHeadingProps) => JSX.Element;
10
+ export default SubHeading;
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { useSeenEffect } from './utils/seenEffect';
4
+ const SubHeading = (props) => {
5
+ const { small, Tag = 'h2', children, align, wide, startSeen } = props;
6
+ const [ref] = useSeenEffect(startSeen);
7
+ return (<Tag className={getBemClass('SubHeading', [
8
+ small && 'small',
9
+ align === 'right' && 'align--' + align,
10
+ !align && wide && 'wide',
11
+ ])} ref={ref}>
12
+ {children}
13
+ </Tag>);
14
+ };
15
+ export default SubHeading;
package/esm/Tabs.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ import { SSRSupport } from '@hugsmidjan/react/hooks';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ export declare type TabItemProps = {
4
+ label: string;
5
+ badge?: string | number;
6
+ longLabel?: string;
7
+ type?: 'button' | 'submit';
8
+ id?: string;
9
+ href?: string;
10
+ 'aria-controls'?: string;
11
+ onActivated?: () => void | false;
12
+ };
13
+ /** @deprecated Use `TabItemProps` instead (Will be removed in v0.11) */
14
+ export declare type TabProps = TabItemProps;
15
+ declare type BaseTabsProps<T extends TabItemProps = TabItemProps> = {
16
+ id?: string;
17
+ 'aria-label'?: string;
18
+ 'aria-labelledby'?: string;
19
+ tabs: Array<T>;
20
+ activeIdx?: number;
21
+ onSetActive?: (idx: number, tab: T) => void;
22
+ role?: 'tablist' | 'toc';
23
+ 'aria-controls'?: string;
24
+ activateOnFocus?: boolean;
25
+ ssr?: SSRSupport;
26
+ };
27
+ export declare type TabsProps<T extends TabItemProps = TabItemProps> = BaseTabsProps<T> & {
28
+ vertical?: boolean;
29
+ /** Optional <Tabs/> block connected to the currently active tab */
30
+ subTabs?: BaseTabsProps;
31
+ } & SeenProp;
32
+ /** @deprecated Use `TabsProps` instead (Will be removed in v0.11) */
33
+ export declare type TablistProps<T extends TabItemProps = TabItemProps> = TabsProps<T>;
34
+ declare const Tabs: (props: TabsProps) => JSX.Element;
35
+ export default Tabs;
package/esm/Tabs.jsx ADDED
@@ -0,0 +1,94 @@
1
+ import React, { useState } from 'react';
2
+ import { getFrag } from '@hugsmidjan/qj/frag';
3
+ import { useIsBrowserSide } from '@hugsmidjan/react/hooks';
4
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
5
+ import { useSeenEffect } from './utils/seenEffect';
6
+ const navKeyEffects = {
7
+ ArrowUp: -1,
8
+ ArrowLeft: -1,
9
+ ArrowDown: 1,
10
+ ArrowRight: 1,
11
+ };
12
+ // eslint-disable-next-line complexity
13
+ const renderTab = (tabProps, index, listProps) => {
14
+ const { label, badge, href, type, longLabel } = tabProps;
15
+ const { activeIdx, activateTab, focusedIdx, setFocusedIdx, tabRole, listAriaControls, isBrowser, } = listProps;
16
+ const handleClick = isBrowser &&
17
+ ((e) => {
18
+ e.preventDefault();
19
+ activateTab(index);
20
+ e.currentTarget.focus();
21
+ });
22
+ const handleFocus = isBrowser && (() => setFocusedIdx(index));
23
+ const isActive = activeIdx === index || undefined;
24
+ const Tag = href && !tabRole ? 'a' : 'button';
25
+ const tagProps = Tag === 'button'
26
+ ? {
27
+ role: tabRole,
28
+ type: type || 'button',
29
+ // 'aria-selected': tabRole && isActive,
30
+ tabIndex: tabRole ? (focusedIdx === index ? 0 : -1) : undefined,
31
+ 'aria-controls': tabProps['aria-controls'] || (tabRole && getFrag(href)) || listAriaControls,
32
+ }
33
+ : { href };
34
+ return [
35
+ <Tag key={index} className="Tabs__tab" data-active={isActive} {...tagProps} onClick={handleClick} onFocus={handleFocus} aria-label={longLabel} title={longLabel} // make custom aria-labels visible
36
+ >
37
+ {label} {badge != null && <small className="Tabs__tab__badge">({badge})</small>}
38
+ </Tag>,
39
+ ' ',
40
+ ];
41
+ };
42
+ // NOTE: This isBrowser tablist behavior is based on
43
+ // https://www.w3.org/TR/wai-aria-practices-1.1/examples/tabs/tabs-2/tabs.html
44
+ const Tabs = (props) => {
45
+ var _a, _b;
46
+ const { tabs, role, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy, 'aria-controls': listAriaControls, id, activeIdx, onSetActive, activateOnFocus, ssr, startSeen, vertical, subTabs, } = props;
47
+ const isBrowser = useIsBrowserSide(ssr);
48
+ const [focusedIdx, setFocusedIdx] = useState(activeIdx || 0);
49
+ const tabRole = isBrowser && role === 'tablist' ? 'tab' : undefined;
50
+ const activateTab = (index) => {
51
+ const tab = tabs[index];
52
+ if (index === activeIdx || !tab) {
53
+ return;
54
+ }
55
+ const ret = tab.onActivated && tab.onActivated.call(null);
56
+ if (onSetActive && ret !== false) {
57
+ onSetActive(index, tab);
58
+ }
59
+ };
60
+ const handleKeydown = tabRole &&
61
+ ((e) => {
62
+ var _a;
63
+ const delta = navKeyEffects[e.key];
64
+ if (delta) {
65
+ // prevent scolling +
66
+ // prevent bubbling to parent Tabs container
67
+ e.stopPropagation();
68
+ let nextIdx = (focusedIdx || 0) + delta;
69
+ const maxIdx = tabs.length - 1;
70
+ nextIdx = nextIdx < 0 ? maxIdx : nextIdx > maxIdx ? 0 : nextIdx;
71
+ (_a = e.currentTarget.querySelectorAll('.Tabs__tab')[nextIdx]) === null || _a === void 0 ? void 0 : _a.focus();
72
+ activateOnFocus && activateTab(nextIdx);
73
+ }
74
+ });
75
+ const [ref] = useSeenEffect(startSeen);
76
+ const listProps = {
77
+ activeIdx,
78
+ activateTab,
79
+ focusedIdx,
80
+ setFocusedIdx,
81
+ tabRole,
82
+ listAriaControls,
83
+ isBrowser,
84
+ };
85
+ return (<div className={getBemClass('Tabs', vertical && 'vertical')} role={tabRole && role} id={id}
86
+ // aria-owns={tabIdList.join(' ')}
87
+ aria-label={ariaLabel} aria-labelledby={ariaLabelledBy} onKeyDown={handleKeydown} data-sprinkled={isBrowser} ref={ref}>
88
+ {tabs.map((tabProps, index) => renderTab(tabProps, index, listProps))}
89
+ {subTabs && (<Tabs {...subTabs} role={'role' in subTabs ? subTabs.role : role} activateOnFocus={(_a = subTabs.activateOnFocus) !== null && _a !== void 0 ? _a : activateOnFocus} ssr={(_b = subTabs.ssr) !== null && _b !== void 0 ? _b : ssr} startSeen
90
+ // just to be sure
91
+ vertical={undefined} subTabs={undefined}/>)}
92
+ </div>);
93
+ };
94
+ export default Tabs;
@@ -0,0 +1,27 @@
1
+ import { ReactNode } from 'react';
2
+ import { ButtonProps } from './_abstract/Button';
3
+ declare const colors: {
4
+ readonly normal: "";
5
+ readonly green: "color--green";
6
+ readonly yellow: "color--yellow";
7
+ readonly orange: "color--orange";
8
+ readonly red: "color--red";
9
+ };
10
+ export declare type TagPillColor = keyof typeof colors;
11
+ export declare type TagPillProps = ButtonProps & {
12
+ children?: ReactNode;
13
+ large?: boolean;
14
+ color?: TagPillColor;
15
+ } & ({
16
+ removable?: false;
17
+ onRemove?: never;
18
+ removeLabel?: never;
19
+ removeLabelLong?: never;
20
+ } | {
21
+ removable: true;
22
+ onRemove?: () => void;
23
+ removeLabel?: string;
24
+ removeLabelLong?: string;
25
+ });
26
+ declare const TagPill: (props: TagPillProps) => JSX.Element;
27
+ export default TagPill;
@@ -0,0 +1,48 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React from 'react';
13
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
14
+ import Button from './_abstract/Button';
15
+ const colors = {
16
+ normal: '',
17
+ green: 'color--green',
18
+ yellow: 'color--yellow',
19
+ orange: 'color--orange',
20
+ red: 'color--red',
21
+ };
22
+ const TagPill = (props) => {
23
+ const { modifier, large, removable, onRemove, children, color = 'normal', label = children, removeLabel = 'x', removeLabelLong = removeLabel } = props, buttonProps = __rest(props, ["modifier", "large", "removable", "onRemove", "children", "color", "label", "removeLabel", "removeLabelLong"]);
24
+ const isStatic = !('href' in props || 'type' in props || props.onClick);
25
+ process.env.NODE_ENV !== 'production' &&
26
+ removable &&
27
+ isStatic &&
28
+ !onRemove &&
29
+ console.warn('static (non-button) `TagPill`s must not be removable');
30
+ const modifiers = [modifier, large && 'large', colors[color]];
31
+ const removeBtn = removable && (<button className="TagPill__remove" onClick={onRemove && (() => onRemove())} aria-label={removeLabelLong} type="button">
32
+ {removeLabel}
33
+ </button>);
34
+ return isStatic ? (<span className={getBemClass('TagPill', modifiers)}>
35
+ {label} {removeBtn}
36
+ </span>) : onRemove ? (<span className={getBemClass('TagPill', modifiers)}>
37
+ <Button bem="TagPill__button" {...buttonProps}>
38
+ {label}
39
+ </Button>{' '}
40
+ {removeBtn}
41
+ </span>) : (<Button bem="TagPill" {...buttonProps} modifier={modifiers}>
42
+ {label}{' '}
43
+ {removable && (<span className="TagPill__remove" aria-label={removeLabelLong}>
44
+ {removeLabel}
45
+ </span>)}
46
+ </Button>);
47
+ };
48
+ export default TagPill;
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from 'react';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ import { ComponentLayoutProps } from './constants';
4
+ export declare type TextBlockProps = ComponentLayoutProps & {
5
+ /** Make H2 headings float to the left
6
+ *
7
+ * Overrides the `align` and `wide` prop and automatically sets `align` to `right`
8
+ */
9
+ labelled?: boolean;
10
+ /** Sets a smaller text-size */
11
+ small?: boolean;
12
+ children: ReactNode;
13
+ } & SeenProp;
14
+ declare const TextBlock: (props: TextBlockProps) => JSX.Element;
15
+ export default TextBlock;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { useSeenEffect } from './utils/seenEffect';
4
+ const TextBlock = (props) => {
5
+ const { children, align, labelled, wide, small, startSeen } = props;
6
+ const rightAligned = align === 'right' || labelled;
7
+ const [ref] = useSeenEffect(startSeen);
8
+ return (<div className={getBemClass('TextBlock', [
9
+ labelled && 'labelled',
10
+ rightAligned && 'align--right',
11
+ wide && !rightAligned && 'wide',
12
+ small && !labelled && 'small',
13
+ ])} ref={ref}>
14
+ {children}
15
+ </div>);
16
+ };
17
+ export default TextBlock;
@@ -0,0 +1,9 @@
1
+ import { ReactNode } from 'react';
2
+ import { ButtonProps } from './_abstract/Button';
3
+ export declare type TextButtonProps = ButtonProps & {
4
+ disabled?: never;
5
+ };
6
+ declare const TextButton: (props: TextButtonProps & {
7
+ children?: ReactNode;
8
+ }) => JSX.Element;
9
+ export default TextButton;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import Button from './_abstract/Button';
3
+ const TextButton = (props) => {
4
+ if ('disabled' in props) {
5
+ props = Object.assign(Object.assign({}, props), { disabled: undefined });
6
+ }
7
+ return <Button bem="TextButton" {...props}/>;
8
+ };
9
+ export default TextButton;
@@ -0,0 +1,16 @@
1
+ import { RefObject } from 'react';
2
+ import { FormFieldWrappingProps } from './FormField';
3
+ declare type InputElmProps = JSX.IntrinsicElements['input'];
4
+ declare type TextareaElmProps = JSX.IntrinsicElements['textarea'];
5
+ export declare type TextInputProps = {
6
+ small?: boolean;
7
+ children?: undefined;
8
+ } & FormFieldWrappingProps & (({
9
+ type?: 'text' | 'email' | 'tel' | 'number' | 'date' | 'url' | 'password' | 'search';
10
+ inputRef?: RefObject<HTMLInputElement>;
11
+ } & InputElmProps) | ({
12
+ type: 'textarea';
13
+ inputRef?: RefObject<HTMLTextAreaElement>;
14
+ } & TextareaElmProps));
15
+ declare const TextInput: (props: TextInputProps) => JSX.Element;
16
+ export default TextInput;
@@ -0,0 +1,35 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import React, { useState } from 'react';
13
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
14
+ import FormField from './FormField';
15
+ const TextInput = (props) => {
16
+ var _a;
17
+ const { className, label, assistText, hideLabel, disabled, readOnly, invalid, errorMessage, required, reqText, id, onChange, small, type, ssr, inputRef } = props, inputElementProps = __rest(props, ["className", "label", "assistText", "hideLabel", "disabled", "readOnly", "invalid", "errorMessage", "required", "reqText", "id", "onChange", "small", "type", "ssr", "inputRef"]);
18
+ const { value, defaultValue, placeholder } = inputElementProps;
19
+ const [hasValue, setHasValue] = useState(undefined);
20
+ const filled = !!((_a = value !== null && value !== void 0 ? value : hasValue) !== null && _a !== void 0 ? _a : !!defaultValue);
21
+ const empty = !filled && !placeholder;
22
+ const multiline = type === 'textarea';
23
+ const modifiers = [multiline && 'multiline'];
24
+ const _onChange = value != null
25
+ ? onChange
26
+ : (e) => {
27
+ setHasValue(!!e.target.value);
28
+ onChange &&
29
+ onChange(
30
+ // TypeScript is silly sometimes.
31
+ e);
32
+ };
33
+ return (<FormField className={getBemClass('TextInput', modifiers, className)} ssr={ssr} small={small} label={label} empty={empty} filled={filled} assistText={assistText} hideLabel={hideLabel} disabled={disabled} readOnly={readOnly} invalid={invalid} errorMessage={errorMessage} required={required} reqText={reqText} id={id} renderInput={(className, inputProps, addFocusProps) => multiline ? (<textarea className={className.input} onChange={_onChange} {...inputProps} {...addFocusProps(inputElementProps)} ref={inputRef}/>) : (<input className={className.input} onChange={_onChange} type={type} {...inputProps} {...addFocusProps(inputElementProps)} ref={inputRef}/>)}/>);
34
+ };
35
+ export default TextInput;
@@ -0,0 +1,24 @@
1
+ import { ReactNode } from 'react';
2
+ declare const sizes: {
3
+ readonly none: "none";
4
+ readonly small: "small";
5
+ readonly default: "";
6
+ readonly medium: "";
7
+ readonly large: "large";
8
+ readonly xlarge: "xlarge";
9
+ };
10
+ declare type VSpacerSize = keyof typeof sizes;
11
+ declare type VSpacerSizePos = Exclude<VSpacerSize, 'none'>;
12
+ export declare type VSpacerProps = {
13
+ children?: never;
14
+ size?: VSpacerSizePos;
15
+ top?: never;
16
+ bottom?: never;
17
+ } | {
18
+ children: ReactNode;
19
+ size?: VSpacerSizePos;
20
+ top?: VSpacerSize;
21
+ bottom?: VSpacerSize;
22
+ };
23
+ declare const VSpacer: (props: VSpacerProps) => JSX.Element;
24
+ export default VSpacer;