@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,30 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { Link } from '../_abstract/Link';
4
+ export const PrimaryPanel = (props) => {
5
+ const { setActivePanel, panel, isParent, isActive, isBrowser, texts } = props;
6
+ const { items } = panel;
7
+ return (<li ref={isActive ? props.activeRef : undefined} className={getBemClass('PrimaryPanel', [
8
+ isParent && 'parent',
9
+ isActive && 'active',
10
+ items.length > 5 && 'twocol', // TODO: allow setting twocol manually?
11
+ ])} id={panel.id}>
12
+ <h3 className="PrimaryPanel__title">
13
+ {' '}
14
+ {isBrowser && !isActive ? (<button className="MainMenu__mega__title-toggler" aria-controls={panel.id} onClick={() => setActivePanel(panel, false)} aria-pressed={isActive} type="button">
15
+ {panel.title}
16
+ </button>) : (panel.title)}
17
+ </h3>
18
+ <ul className="PrimaryPanel__items">
19
+ {items.map((item, i) => (<li key={i} className="PrimaryPanel__item" aria-current={item.current || undefined}>
20
+ <Link className="PrimaryPanel__link" href={item.href} target={item.target} lang={item.lang}>
21
+ <span className="PrimaryPanel__linkTitle">{item.label}</span>{' '}
22
+ <small className="PrimaryPanel__summary">{item.summary}</small>{' '}
23
+ </Link>
24
+ </li>))}
25
+ </ul>
26
+ {isBrowser && isActive && (<button className="MainMenu__megapanel__backtomenu" aria-controls={panel.id} aria-label={texts.backToMenuLong} onClick={() => setActivePanel(undefined)} type="button">
27
+ {texts.backToMenu}
28
+ </button>)}
29
+ </li>);
30
+ };
@@ -0,0 +1,48 @@
1
+ import { SSRSupport } from '@hugsmidjan/react/hooks';
2
+ import { DefaultTexts } from '@reykjavik/hanna-utils/i18n';
3
+ import { AuxilaryPanelIllustration, AuxiliaryPanelProps } from './MainMenu/_Auxiliary';
4
+ export declare type MainMenuI18n = {
5
+ lang?: string;
6
+ backToMenu: string;
7
+ backToMenuLong?: string;
8
+ };
9
+ export declare const defaultMainMenuTexts: DefaultTexts<MainMenuI18n>;
10
+ export type { AuxilaryPanelIllustration, AuxiliaryPanelProps };
11
+ export declare type MainMenuItem = {
12
+ label: string;
13
+ labelLong?: string;
14
+ lang?: string;
15
+ modifier?: string;
16
+ current?: boolean;
17
+ href?: string;
18
+ onClick?: (index: number, item: MainMenuItem) => void;
19
+ controlsId?: string;
20
+ };
21
+ export declare type MainMenuSeparator = '---';
22
+ export declare type MainMenuItemList = Array<MainMenuItem | MainMenuSeparator>;
23
+ export declare type MegaMenuItem = {
24
+ label: string;
25
+ summary?: string;
26
+ href: string;
27
+ lang?: string;
28
+ current?: boolean;
29
+ target?: string;
30
+ };
31
+ export declare type MegaMenuPanel = {
32
+ title: string;
33
+ items: Array<MegaMenuItem>;
34
+ id: string;
35
+ };
36
+ export declare type MainMenuProps = {
37
+ title: string;
38
+ items: MainMenuItemList;
39
+ megaPanels?: Array<MegaMenuPanel>;
40
+ auxiliaryPanel?: AuxiliaryPanelProps;
41
+ onItemClick?: (index: number, item: MainMenuItem) => void;
42
+ activePanelId?: string;
43
+ texts?: MainMenuI18n;
44
+ lang?: string;
45
+ ssr?: SSRSupport;
46
+ };
47
+ declare const MainMenu: (props: MainMenuProps) => JSX.Element | null;
48
+ export default MainMenu;
@@ -0,0 +1,149 @@
1
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+ import focusElm from '@hugsmidjan/qj/focusElm';
3
+ import { useIsBrowserSide } from '@hugsmidjan/react/hooks';
4
+ import useShortState from '@hugsmidjan/react/hooks/useShortState';
5
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
6
+ import { getPageScrollElm } from '@reykjavik/hanna-utils';
7
+ import { getTexts } from '@reykjavik/hanna-utils/i18n';
8
+ import { Link } from './_abstract/Link';
9
+ import { AuxiliaryPanel, } from './MainMenu/_Auxiliary';
10
+ import { PrimaryPanel } from './MainMenu/_PrimaryPanel';
11
+ import { useFormatMonitor } from './utils/useFormatMonitor';
12
+ const findActivePanel = (megaPanels, activeId) => activeId ? megaPanels.find((panel) => activeId === panel.id) : undefined;
13
+ export const defaultMainMenuTexts = {
14
+ is: { lang: 'is', backToMenu: 'Loka', backToMenuLong: 'Til baka í valmynd' },
15
+ en: { lang: 'en', backToMenu: 'Close', backToMenuLong: 'Close and return to menu' },
16
+ };
17
+ const MainMenu = (props) => {
18
+ const { title, megaPanels = [], onItemClick, ssr, auxiliaryPanel } = props;
19
+ const isBrowser = useIsBrowserSide(ssr);
20
+ const menuElmRef = useRef(null);
21
+ const pressedLinkRef = useRef(null);
22
+ const activePanelRef = useRef(null);
23
+ const [activePanel, _setActivePanel] = useState(() => isBrowser && findActivePanel(megaPanels, props.activePanelId));
24
+ const [laggyActivePanel, setLaggyActivePanel] = useShortState();
25
+ const setActivePanel = useCallback((newActive, setFocus = true) => {
26
+ const htmlElmDataset = document.documentElement.dataset;
27
+ // const menuElm = menuElmRef.current as HTMLElement;
28
+ _setActivePanel((activePanel) => {
29
+ const scrollElm = getPageScrollElm();
30
+ if (!newActive) {
31
+ activePanel && setLaggyActivePanel(activePanel, 1000);
32
+ scrollElm.scrollTop = parseInt(htmlElmDataset.scrollTop || '') || 0;
33
+ delete htmlElmDataset.scrollTop;
34
+ delete htmlElmDataset.megaPanelActive;
35
+ }
36
+ else {
37
+ setLaggyActivePanel(undefined, 0);
38
+ htmlElmDataset.scrollTop = String(scrollElm.scrollTop);
39
+ scrollElm.scrollTop = 0;
40
+ htmlElmDataset.megaPanelActive = '';
41
+ }
42
+ if (setFocus) {
43
+ const pressedLinkElm = pressedLinkRef.current; // pressedLinkElm will be undefined when setTimeout fires
44
+ setTimeout(() => {
45
+ if (!newActive) {
46
+ // const buttonElm = menuElm.querySelector<HTMLButtonElement>(
47
+ // 'button.MainMenu__link[aria-pressed="true"]'
48
+ // );
49
+ focusElm(pressedLinkElm);
50
+ }
51
+ else if (newActive !== activePanel) {
52
+ // const panelElm = menuElm.querySelector<HTMLButtonElement>(
53
+ // '.PrimaryPanel--active'
54
+ // );
55
+ focusElm(activePanelRef.current);
56
+ }
57
+ }, 100);
58
+ }
59
+ return newActive;
60
+ });
61
+ }, [setLaggyActivePanel]);
62
+ useFormatMonitor((media) => {
63
+ if (media.leftTopmenu) {
64
+ setActivePanel(undefined);
65
+ }
66
+ });
67
+ const hasActivePanel = !!activePanel;
68
+ const menuItems = useMemo(() => props.items.map((item) => {
69
+ if (item === '---') {
70
+ return item;
71
+ }
72
+ const href = item.href;
73
+ const controlsId = item.controlsId || (href && /^#/.test(href) && href.slice(1)) || undefined;
74
+ return Object.assign(Object.assign({}, item), { controlsId, megaPanel: controlsId && megaPanels.find((panel) => panel.id === controlsId) });
75
+ }), [props.items, megaPanels]);
76
+ useEffect(() => {
77
+ setActivePanel(findActivePanel(megaPanels, props.activePanelId));
78
+ }, [props.activePanelId, megaPanels, setActivePanel]);
79
+ useEffect(() => {
80
+ const menuElm = menuElmRef.current;
81
+ if (!hasActivePanel || !menuElm) {
82
+ return;
83
+ }
84
+ const escHandler = (e) => {
85
+ if (e.key === 'Escape') {
86
+ setActivePanel(undefined);
87
+ }
88
+ };
89
+ const clickHandler = (e) => {
90
+ if (!menuElm.contains(e.target)) {
91
+ setActivePanel(undefined);
92
+ }
93
+ };
94
+ document.addEventListener('keydown', escHandler);
95
+ document.addEventListener('click', clickHandler, true);
96
+ return () => {
97
+ document.removeEventListener('keydown', escHandler);
98
+ document.removeEventListener('click', clickHandler, true);
99
+ };
100
+ }, [hasActivePanel, setActivePanel]);
101
+ if (menuItems.length === 0) {
102
+ return null;
103
+ }
104
+ return (<nav className="MainMenu" aria-label={title} data-sprinkled={isBrowser} ref={menuElmRef}>
105
+ <h2 className="MainMenu__title">{title}</h2>
106
+ <ul className="MainMenu__items">
107
+ {menuItems.map((item, i) => {
108
+ if (item === '---') {
109
+ return <li key={i} className="MainMenu__separator" aria-hidden="true"/>;
110
+ }
111
+ const { label, labelLong, lang, controlsId, onClick } = item;
112
+ const pressed = (activePanel && controlsId === activePanel.id) || undefined;
113
+ return (<li key={i} className={getBemClass('MainMenu__item', item.modifier)} aria-current={item.current || undefined}>
114
+ {onClick || (!!item.megaPanel && (isBrowser || item.href != null)) ? (
115
+ // only print script-driven buttons in the browser
116
+ <button className="MainMenu__link" onClick={() => {
117
+ item.megaPanel && setActivePanel(item.megaPanel);
118
+ onClick && onClick(i, item);
119
+ onItemClick && onItemClick(i, item);
120
+ }} ref={pressed && pressedLinkRef} aria-pressed={pressed} aria-controls={controlsId} aria-label={labelLong} title={labelLong} // For auto-tooltips on desktop
121
+ lang={lang} type="button">
122
+ {label}
123
+ </button>) : item.href != null ? (
124
+ // always render links server-side
125
+ <Link className="MainMenu__link" href={item.href} aria-label={labelLong} title={labelLong} // For auto-tooltips on desktop
126
+ onClick={onItemClick && (() => onItemClick(i, item))} lang={lang}>
127
+ {label}
128
+ </Link>) : undefined // skip rendering non-link menu items server side
129
+ }
130
+ </li>);
131
+ })}
132
+ </ul>
133
+ {'\n\n'}
134
+ {megaPanels.length > 0 && (<div className={getBemClass('MainMenu__panelsWrap', [activePanel && 'active'])}>
135
+ <ul className="MainMenu__panels">
136
+ {megaPanels.map((panel, i) => {
137
+ if (!panel.items.length) {
138
+ return;
139
+ }
140
+ const isActive = activePanel === panel || laggyActivePanel === panel || undefined;
141
+ const isParent = !!panel.items.find((item) => item.current);
142
+ return (<PrimaryPanel key={i} isParent={isParent} isActive={isActive} panel={panel} isBrowser={isBrowser} setActivePanel={setActivePanel} texts={getTexts(props, defaultMainMenuTexts)} activeRef={activePanelRef}/>);
143
+ })}
144
+ {auxiliaryPanel && <AuxiliaryPanel {...auxiliaryPanel}/>}
145
+ </ul>
146
+ </div>)}
147
+ </nav>);
148
+ };
149
+ export default MainMenu;
@@ -0,0 +1,8 @@
1
+ import { ButtonProps } from './_abstract/Button';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ export declare type MiniMetricsProps = {
4
+ text: string;
5
+ moreButton: ButtonProps;
6
+ } & SeenProp;
7
+ declare const MiniMetrics: (props: MiniMetricsProps) => JSX.Element;
8
+ export default MiniMetrics;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import Button from './_abstract/Button';
3
+ import SeenEffect from './SeenEffect';
4
+ const MiniMetrics = (props) => {
5
+ const { text, moreButton, startSeen } = props;
6
+ return (<SeenEffect className="MiniMetrics" startSeen={startSeen}>
7
+ <strong className="MiniMetrics__text">{text}</strong> {'\n'}
8
+ <Button bem="MiniMetrics__more" {...moreButton}/>
9
+ </SeenEffect>);
10
+ };
11
+ export default MiniMetrics;
package/esm/Modal.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { ReactElement } from 'react';
2
+ import { ModalProps as _ModalProps } from '@hugsmidjan/react/Modal';
3
+ export declare type ModalProps = _ModalProps & {
4
+ bem?: never;
5
+ bodyWrap?: never;
6
+ modifier?: 'w6' | 'w8' | 'w10';
7
+ bling?: ReactElement;
8
+ };
9
+ declare const Modal: (props: ModalProps) => JSX.Element;
10
+ export default Modal;
package/esm/Modal.jsx ADDED
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import _Modal from '@hugsmidjan/react/Modal';
3
+ const Modal = (props) => {
4
+ const { closeDelay = 500, texts = {
5
+ closeButton: 'Loka ',
6
+ }, bling, children, render = () => children, } = props;
7
+ return (<_Modal {...props} bodyWrap={false} bem="Modal" closeDelay={closeDelay} texts={texts} render={(args) => bling ? (<>
8
+ {render(args)}
9
+ <div className="Modal__blings">
10
+ <div className="Modal__blings__inner">{bling}</div>
11
+ </div>
12
+ </>) : (render(args))}
13
+ // eslint-disable-next-line react/no-children-prop
14
+ children={undefined}/>);
15
+ };
16
+ export default Modal;
@@ -0,0 +1,64 @@
1
+ export declare type NameCardI18n = {
2
+ updatedLabel: string;
3
+ availableLabel: string;
4
+ unavailableLabel: string;
5
+ /** @deprecated Use availableLabel instead (will be removed in v0.11) */
6
+ vacancyLabel?: string;
7
+ /** @deprecated Use unavailableLabel instead (will be removed in v0.11) */
8
+ noVacancyLabel?: string;
9
+ /** @deprecated Not used anymore (will be rmoved in v0.11) */
10
+ telLabel?: string;
11
+ };
12
+ declare type ContactInfo = {
13
+ href: string;
14
+ label: string;
15
+ longLabel?: string;
16
+ };
17
+ /** @deprecated use label and longLabel props instead (Will be removed in v0.11) */
18
+ declare type DeprecatedContactInfo = {
19
+ href: string;
20
+ value: string;
21
+ label?: string;
22
+ };
23
+ export declare type NameCardProps = {
24
+ name: string;
25
+ /** Phone numbers, e-mail addresses, etc. */
26
+ contactInfo?: Array<string | ContactInfo | DeprecatedContactInfo>;
27
+ /** Address/location info
28
+ *
29
+ * Special handling of string:
30
+ * Inserts `<br/>`s on `\n`. Collapses multiple `\n`s.
31
+ *
32
+ * Only simple, inline element HTML allowed
33
+ */
34
+ location?: string | JSX.Element;
35
+ /** Misc info such as opening-hours, etc.
36
+ *
37
+ * Special handling of string:
38
+ * Inserts `<br/>`s on `\n`. Collapses multiple `\n`s.
39
+ *
40
+ * Only simple, inline element HTML allowed
41
+ */
42
+ aboutText?: string | JSX.Element;
43
+ /**
44
+ * Designated for info about working/opening hours
45
+ *
46
+ * Special handling of string:
47
+ * Inserts `<br/>`s on `\n`. Collapses multiple `\n`s.
48
+ *
49
+ * Only simple, inline element HTML allowed
50
+ */
51
+ hours?: string | JSX.Element;
52
+ /** Displays "active" indicator. Use for vacancies, inline-status, etc. */
53
+ available?: boolean;
54
+ /** Meta data about freshness status, etc. */
55
+ updated?: string | Date;
56
+ lang?: string;
57
+ texts?: NameCardI18n;
58
+ /** @deprecated Use `available` instead (will be removed in v0.11) */
59
+ vacancy?: boolean;
60
+ /** @deprecated Use `contactInfo` instead (will be removed in v0.11) */
61
+ tel?: string | Array<string>;
62
+ };
63
+ declare const NameCard: (props: NameCardProps) => JSX.Element;
64
+ export default NameCard;
@@ -0,0 +1,87 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { getTexts } from '@reykjavik/hanna-utils/i18n';
4
+ import breakOnNL from './_abstract/breakOnNL';
5
+ import Button from './_abstract/Button';
6
+ const formatDate = (date) => {
7
+ return typeof date === 'string'
8
+ ? date
9
+ : date.toISOString().slice(0, 10).replace(/-/g, '.');
10
+ };
11
+ const _telToContactInfo = (tel) => {
12
+ if (!tel) {
13
+ return;
14
+ }
15
+ tel = typeof tel === 'string' ? [tel] : tel;
16
+ return tel.map((tel) => ({
17
+ href: 'tel:' + tel,
18
+ value: tel,
19
+ }));
20
+ };
21
+ const renderContent = (content) => typeof content === 'string' ? breakOnNL(content) : content;
22
+ const defaultTexts = {
23
+ en: {
24
+ updatedLabel: 'Updated on',
25
+ availableLabel: '',
26
+ unavailableLabel: '',
27
+ vacancyLabel: 'Vacancy',
28
+ noVacancyLabel: 'No vacancy',
29
+ },
30
+ is: {
31
+ updatedLabel: 'Uppfært síðast',
32
+ availableLabel: '',
33
+ unavailableLabel: '',
34
+ vacancyLabel: 'Laus pláss',
35
+ noVacancyLabel: 'Ekki laus pláss',
36
+ },
37
+ };
38
+ const NameCard = (props) => {
39
+ const { name, location, hours, aboutText, available = props.vacancy, updated } = props;
40
+ const renderMeta = () => {
41
+ if (available == null && !updated) {
42
+ return;
43
+ }
44
+ const texts = getTexts(props, defaultTexts);
45
+ const { updatedLabel, availableLabel, unavailableLabel } = texts;
46
+ return (<div className="NameCard__meta">
47
+ {available != null && (<span className={getBemClass('NameCard__availability', available && 'available')}>
48
+ {available
49
+ ? availableLabel || texts.vacancyLabel
50
+ : unavailableLabel || texts.noVacancyLabel}{' '}
51
+ </span>)}
52
+ {updated != null && (<span className="NameCard__updated">
53
+ {updatedLabel} {formatDate(updated)}
54
+ </span>)}
55
+ </div>);
56
+ };
57
+ let contactInfo = props.contactInfo;
58
+ if (!contactInfo) {
59
+ contactInfo = _telToContactInfo(props.tel) || [];
60
+ }
61
+ // Remove/map @deprecated contactinfo items
62
+ const cleanContactInfo = contactInfo.map((item) => {
63
+ if (typeof item !== 'string' && 'value' in item) {
64
+ return {
65
+ href: item.href,
66
+ label: item.value,
67
+ longLabel: item.label,
68
+ };
69
+ }
70
+ return item;
71
+ });
72
+ return (<div className="NameCard">
73
+ <div className="NameCard__name">{name}</div>
74
+ {contactInfo.length > 0 && (<p className="NameCard__contactinfo">
75
+ {cleanContactInfo.map((item, i) => (<>
76
+ {typeof item === 'string' ? (<span className="NameCard__contactinfo__item">{item}</span>) : (<Button key={i} bem="NameCard__contactinfo__item" href={item.href} aria-label={item.longLabel} title={item.longLabel}>
77
+ {item.label}
78
+ </Button>)}{' '}
79
+ </>))}
80
+ </p>)}
81
+ {location && <p className="NameCard__location">{renderContent(location)}</p>}
82
+ {hours && <p className="NameCard__hours">{renderContent(hours)}</p>}
83
+ {aboutText && <p className="NameCard__abouttext">{renderContent(aboutText)}</p>}
84
+ {renderMeta()}
85
+ </div>);
86
+ };
87
+ export default NameCard;
@@ -0,0 +1,6 @@
1
+ import { NameCardProps } from './NameCard';
2
+ declare type NameCardsProps = {
3
+ items: Array<NameCardProps>;
4
+ };
5
+ declare const NameCards: (props: NameCardsProps) => JSX.Element;
6
+ export default NameCards;
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import NameCard from './NameCard';
3
+ const NameCards = (props) => {
4
+ const { items } = props;
5
+ return (<div className="NameCards">
6
+ {items.map((item, i) => (<NameCard key={i} {...item}/>))}
7
+ </div>);
8
+ };
9
+ export default NameCards;
@@ -0,0 +1,14 @@
1
+ import { ImageProps } from './_abstract/Image';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ declare type BlingOptions = 'interesting' | 'snake' | 'pentagon' | 'dome' | 'balls-small' | 'balls-large';
4
+ export declare type NewsHeroProps = {
5
+ title: string;
6
+ meta?: string;
7
+ summary?: string | JSX.Element;
8
+ /** For custom sharing component */
9
+ sharing?: boolean | (() => JSX.Element);
10
+ image?: ImageProps;
11
+ blingType?: BlingOptions;
12
+ } & SeenProp;
13
+ declare const NewsHero: (props: NewsHeroProps) => JSX.Element;
14
+ export default NewsHero;
@@ -0,0 +1,88 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { getStableRandomItem } from '@reykjavik/hanna-utils';
4
+ import Blings from './_abstract/_Blings';
5
+ import Image from './_abstract/Image';
6
+ import { useSeenEffect } from './utils/seenEffect';
7
+ import ShareButtons from './ShareButtons';
8
+ const blingOptions = {
9
+ interesting: [
10
+ {
11
+ type: 'circle-xlarge',
12
+ parent: 'center',
13
+ },
14
+ {
15
+ type: 'loops-small',
16
+ color: 'secondary',
17
+ align: 'left-ish',
18
+ vertical: 'down-ish',
19
+ parent: 'center',
20
+ },
21
+ ],
22
+ snake: [
23
+ {
24
+ type: 'snake-large',
25
+ align: 'left',
26
+ parent: 'top',
27
+ vertical: 'down',
28
+ },
29
+ ],
30
+ pentagon: [
31
+ {
32
+ type: 'pentagon-large',
33
+ align: 'left',
34
+ parent: 'center',
35
+ },
36
+ ],
37
+ dome: [
38
+ {
39
+ type: 'dome-large',
40
+ align: 'left-ish',
41
+ parent: 'top',
42
+ vertical: 'down',
43
+ },
44
+ ],
45
+ 'balls-small': [
46
+ {
47
+ type: 'circle-large',
48
+ align: 'left',
49
+ parent: 'center',
50
+ },
51
+ {
52
+ type: 'circle-small',
53
+ color: 'secondary',
54
+ align: 'right',
55
+ parent: 'bottom',
56
+ vertical: 'down',
57
+ },
58
+ ],
59
+ 'balls-large': [
60
+ {
61
+ type: 'halfcircle-down-large',
62
+ align: 'left',
63
+ parent: 'bottom',
64
+ vertical: 'up',
65
+ },
66
+ {
67
+ type: 'circle-medium',
68
+ color: 'secondary',
69
+ align: 'left-center',
70
+ parent: 'bottom',
71
+ },
72
+ ],
73
+ };
74
+ const NewsHero = (props) => {
75
+ const { title, sharing = true, meta, summary, image, blingType, startSeen } = props;
76
+ const [ref] = useSeenEffect(startSeen);
77
+ const blings = (blingType && blingOptions[blingType]) || getStableRandomItem(blingOptions, title);
78
+ return (<div className={getBemClass('NewsHero', [!image && 'align--right'])} ref={ref}>
79
+ <div className="NewsHero__content">
80
+ <h1 className="NewsHero__title">{title}</h1>
81
+ {meta && <span className="NewsHero__meta">{meta}</span>}
82
+ <div className="NewsHero__summary">{summary}</div>
83
+ {sharing === true ? <ShareButtons /> : sharing && sharing()}
84
+ </div>
85
+ {image ? (<Image className="NewsHero__image" {...image}/>) : (<Blings blings={blings}/>)}
86
+ </div>);
87
+ };
88
+ export default NewsHero;
@@ -0,0 +1,17 @@
1
+ import React from 'react';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ export declare type PageFilterProps = {
4
+ title: string;
5
+ summary?: React.ReactNode;
6
+ footnote?: React.ReactNode;
7
+ buttonRow?: React.ReactNode;
8
+ underlap?: boolean;
9
+ } & ({
10
+ filters: React.ReactNode;
11
+ children?: never;
12
+ } | {
13
+ filters?: never;
14
+ children: React.ReactNode;
15
+ }) & SeenProp;
16
+ declare const PageFilter: (props: PageFilterProps) => JSX.Element;
17
+ export default PageFilter;
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { useSeenEffect } from './utils/seenEffect';
4
+ import Footnote from './Footnote';
5
+ const PageFilter = (props) => {
6
+ const { title, summary, footnote, filters, children, buttonRow, underlap, startSeen } = props;
7
+ const [ref] = useSeenEffect(startSeen);
8
+ return (<div className={getBemClass('PageFilter', underlap && 'underlap')} ref={ref}>
9
+ <h2 className="PageFilter__title">{title}</h2>
10
+ {summary && <div className="PageFilter__summary">{summary}</div>}
11
+ <div className="PageFilter__filters">{filters || children}</div>
12
+ <div className="PageFilter__buttons">{buttonRow}</div>
13
+ {footnote && <Footnote>{footnote}</Footnote>}
14
+ </div>);
15
+ };
16
+ export default PageFilter;
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from 'react';
2
+ import { SeenProp } from './utils/seenEffect';
3
+ export declare type PageHeadingProps = {
4
+ Tag?: 'h1' | 'h2';
5
+ align?: 'right';
6
+ small?: boolean;
7
+ children: ReactNode;
8
+ } & SeenProp;
9
+ declare const PageHeading: (props: PageHeadingProps) => JSX.Element;
10
+ export default PageHeading;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ import { useSeenEffect } from './utils/seenEffect';
4
+ const PageHeading = (props) => {
5
+ const { Tag = 'h1', align, small, children, startSeen } = props;
6
+ const [ref] = useSeenEffect(startSeen);
7
+ return (<Tag className={getBemClass('PageHeading', [
8
+ small && 'small',
9
+ align === 'right' && 'align--' + align,
10
+ ])} ref={ref}>
11
+ {children}
12
+ </Tag>);
13
+ };
14
+ export default PageHeading;
@@ -0,0 +1,13 @@
1
+ export declare type ProcessOverviewItemProps = {
2
+ title: string;
3
+ content: string | JSX.Element;
4
+ };
5
+ export declare type ProcessOverviewProps = {
6
+ title: string;
7
+ items: Array<ProcessOverviewItemProps>;
8
+ attention?: string | JSX.Element;
9
+ transparent?: boolean;
10
+ narrow?: boolean;
11
+ };
12
+ declare const ProcessOverview: (props: ProcessOverviewProps) => JSX.Element;
13
+ export default ProcessOverview;
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
+ const ProcessOverview = (props) => {
4
+ const { title, items, attention, transparent, narrow } = props;
5
+ return (<div className={getBemClass('ProcessOverview', [
6
+ transparent && 'transparent',
7
+ narrow && 'narrow',
8
+ ])}>
9
+ <h2 className="ProcessOverview__title">{title}</h2>
10
+ {items.map(({ title, content }, i) => {
11
+ return (<div key={i} className="ProcessOverview__item">
12
+ <h3 className="ProcessOverview__item__title">{title}</h3>
13
+ <div className="ProcessOverview__item__content">{content}</div>
14
+ </div>);
15
+ })}
16
+
17
+ {attention && <div className="ProcessOverview__attention">{attention}</div>}
18
+ </div>);
19
+ };
20
+ export default ProcessOverview;
@@ -0,0 +1,4 @@
1
+ import { QuoteProps } from './_abstract/_Quote';
2
+ export declare type PullQuoteProps = QuoteProps;
3
+ declare const PullQuote: (props: PullQuoteProps) => JSX.Element;
4
+ export default PullQuote;
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { _Quote } from './_abstract/_Quote';
3
+ const PullQuote = (props) => <_Quote bem="PullQuote" {...props}/>;
4
+ export default PullQuote;