@reykjavik/hanna-react 0.10.56 → 0.10.57

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 (275) hide show
  1. package/{AccordionList.jsx → AccordionList.js} +5 -14
  2. package/{ActionCards.jsx → ActionCards.js} +2 -3
  3. package/{Alert.jsx → Alert.js} +6 -8
  4. package/ArticleCarousel/_ArticleCarouselCard.js +31 -0
  5. package/{ArticleCarousel.jsx → ArticleCarousel.js} +1 -1
  6. package/{ArticleMeta.jsx → ArticleMeta.js} +9 -8
  7. package/{Attention.jsx → Attention.js} +1 -1
  8. package/{BasicTable.jsx → BasicTable.js} +11 -12
  9. package/{Bling.jsx → Bling.js} +2 -2
  10. package/{BlockBreak.jsx → BlockBreak.js} +1 -1
  11. package/{BlockQuote.jsx → BlockQuote.js} +1 -1
  12. package/BreadCrumbs.js +33 -0
  13. package/{ButtonBack.jsx → ButtonBack.js} +1 -1
  14. package/{ButtonBar.jsx → ButtonBar.js} +2 -4
  15. package/{ButtonPrimary.jsx → ButtonPrimary.js} +1 -1
  16. package/{ButtonSecondary.jsx → ButtonSecondary.js} +1 -1
  17. package/{ButtonTertiary.jsx → ButtonTertiary.js} +1 -1
  18. package/CHANGELOG.md +1 -1
  19. package/{Carousel.jsx → Carousel.js} +1 -1
  20. package/{CarouselStepper.jsx → CarouselStepper.js} +1 -1
  21. package/{CenterColumn.jsx → CenterColumn.js} +1 -3
  22. package/{Checkbox.jsx → Checkbox.js} +1 -1
  23. package/{CheckboxButtonsGroup.jsx → CheckboxButtonsGroup.js} +2 -2
  24. package/{CheckboxGroup.jsx → CheckboxGroup.js} +1 -1
  25. package/{CityBlock.jsx → CityBlock.js} +1 -1
  26. package/{ContactBubble.jsx → ContactBubble.js} +12 -26
  27. package/{ContentArticle.jsx → ContentArticle.js} +9 -12
  28. package/ContentImage.js +23 -0
  29. package/{Datepicker.jsx → Datepicker.js} +17 -18
  30. package/{ExtraLinks.jsx → ExtraLinks.js} +9 -17
  31. package/FeatureList.js +21 -0
  32. package/{FieldGroup.jsx → FieldGroup.js} +3 -4
  33. package/{FileInput.jsx → FileInput.js} +22 -25
  34. package/{Foonote.jsx → Foonote.js} +0 -0
  35. package/FooterBadges.js +17 -0
  36. package/FooterInfo.js +14 -0
  37. package/{Footnote.jsx → Footnote.js} +1 -1
  38. package/{Form.jsx → Form.js} +2 -4
  39. package/{FormField.jsx → FormField.js} +20 -22
  40. package/Gallery/{_GalleryItem.jsx → _GalleryItem.js} +8 -9
  41. package/Gallery/{_GalleryModal.jsx → _GalleryModal.js} +11 -15
  42. package/Gallery/{_GalleryModalItem.jsx → _GalleryModalItem.js} +5 -7
  43. package/{Gallery.jsx → Gallery.js} +3 -4
  44. package/GridBlocks.js +29 -0
  45. package/{Heading.jsx → Heading.js} +2 -4
  46. package/{HeroBlock.jsx → HeroBlock.js} +8 -9
  47. package/{IframeBlock.jsx → IframeBlock.js} +6 -6
  48. package/{Illustration.jsx → Illustration.js} +1 -1
  49. package/{ImageCards.jsx → ImageCards.js} +2 -3
  50. package/InfoBlock.js +18 -0
  51. package/{InfoHero.jsx → InfoHero.js} +9 -15
  52. package/{IslandBlock.jsx → IslandBlock.js} +1 -1
  53. package/{IslandPageBlock.jsx → IslandPageBlock.js} +1 -1
  54. package/{LabeledTextBlock.jsx → LabeledTextBlock.js} +5 -7
  55. package/Layout.js +58 -0
  56. package/MainMenu/{_Auxiliary.jsx → _Auxiliary.js} +5 -11
  57. package/MainMenu/_PrimaryPanel.js +29 -0
  58. package/{MainMenu.jsx → MainMenu.js} +27 -40
  59. package/{MiniMetrics.jsx → MiniMetrics.js} +5 -4
  60. package/Modal.js +19 -0
  61. package/{NameCard.jsx → NameCard.js} +18 -23
  62. package/{NameCards.jsx → NameCards.js} +1 -3
  63. package/{NewsHero.jsx → NewsHero.js} +7 -9
  64. package/{PageFilter.jsx → PageFilter.js} +6 -7
  65. package/{PageHeading.jsx → PageHeading.js} +2 -4
  66. package/ProcessOverview.js +22 -0
  67. package/{PullQuote.jsx → PullQuote.js} +1 -1
  68. package/{RadioButtonsGroup.jsx → RadioButtonsGroup.js} +2 -2
  69. package/{RadioGroup.jsx → RadioGroup.js} +2 -2
  70. package/{RelatedLinks.jsx → RelatedLinks.js} +9 -13
  71. package/{RowBlock.jsx → RowBlock.js} +1 -3
  72. package/{RowBlockColumn.jsx → RowBlockColumn.js} +2 -4
  73. package/{SearchInput.jsx → SearchInput.js} +4 -6
  74. package/SearchResults/_SearchResultsItem.js +20 -0
  75. package/{SearchResults.jsx → SearchResults.js} +27 -36
  76. package/{SeenEffect.jsx → SeenEffect.js} +1 -1
  77. package/{Selectbox.jsx → Selectbox.js} +1 -1
  78. package/{ShareButtons.jsx → ShareButtons.js} +6 -12
  79. package/{Sharpie.jsx → Sharpie.js} +1 -1
  80. package/{SiteSearchAutocomplete.jsx → SiteSearchAutocomplete.js} +5 -7
  81. package/{SiteSearchCurtain.jsx → SiteSearchCurtain.js} +1 -5
  82. package/{SiteSearchInput.jsx → SiteSearchInput.js} +10 -12
  83. package/{Skeleton.jsx → Skeleton.js} +5 -5
  84. package/{SubHeading.jsx → SubHeading.js} +2 -4
  85. package/{Tabs.jsx → Tabs.js} +12 -12
  86. package/{TagPill.jsx → TagPill.js} +11 -16
  87. package/{TextBlock.jsx → TextBlock.js} +2 -4
  88. package/{TextButton.jsx → TextButton.js} +1 -1
  89. package/{TextInput.jsx → TextInput.js} +1 -1
  90. package/{VSpacer.jsx → VSpacer.js} +1 -1
  91. package/{VerticalTabsTOC.jsx → VerticalTabsTOC.js} +2 -2
  92. package/WizardLayout.js +35 -0
  93. package/{WizardLayoutClose.jsx → WizardLayoutClose.js} +1 -1
  94. package/WizardStepper.js +30 -0
  95. package/_abstract/{Button.jsx → Button.js} +2 -6
  96. package/_abstract/CardList.js +43 -0
  97. package/_abstract/{Image.jsx → Image.js} +10 -12
  98. package/_abstract/{Link.jsx → Link.js} +0 -0
  99. package/_abstract/TogglerGroup.js +34 -0
  100. package/_abstract/{TogglerGroupField.jsx → TogglerGroupField.js} +3 -3
  101. package/_abstract/{TogglerInput.jsx → TogglerInput.js} +13 -15
  102. package/_abstract/{_AbstractCarousel.jsx → _AbstractCarousel.js} +7 -10
  103. package/_abstract/{_Blings.jsx → _Blings.js} +1 -3
  104. package/_abstract/_Block.js +29 -0
  105. package/_abstract/{_Quote.jsx → _Quote.js} +3 -6
  106. package/_abstract/{breakOnNL.jsx → breakOnNL.js} +1 -1
  107. package/esm/AccordionList.js +24 -0
  108. package/esm/{ActionCards.jsx → ActionCards.js} +2 -3
  109. package/esm/{Alert.jsx → Alert.js} +6 -8
  110. package/esm/ArticleCarousel/_ArticleCarouselCard.js +24 -0
  111. package/esm/{ArticleCarousel.jsx → ArticleCarousel.js} +1 -1
  112. package/esm/ArticleMeta.js +18 -0
  113. package/esm/Attention.js +4 -0
  114. package/esm/{BasicTable.jsx → BasicTable.js} +11 -12
  115. package/esm/{Bling.jsx → Bling.js} +2 -2
  116. package/esm/BlockBreak.js +6 -0
  117. package/esm/BlockQuote.js +4 -0
  118. package/esm/BreadCrumbs.js +28 -0
  119. package/esm/ButtonBack.js +4 -0
  120. package/esm/{ButtonBar.jsx → ButtonBar.js} +2 -4
  121. package/esm/ButtonPrimary.js +4 -0
  122. package/esm/ButtonSecondary.js +4 -0
  123. package/esm/{ButtonTertiary.jsx → ButtonTertiary.js} +1 -1
  124. package/esm/Carousel.js +4 -0
  125. package/esm/CarouselStepper.js +4 -0
  126. package/esm/CenterColumn.js +7 -0
  127. package/esm/Checkbox.js +4 -0
  128. package/esm/{CheckboxButtonsGroup.jsx → CheckboxButtonsGroup.js} +2 -2
  129. package/esm/{CheckboxGroup.jsx → CheckboxGroup.js} +1 -1
  130. package/esm/{CityBlock.jsx → CityBlock.js} +1 -1
  131. package/esm/{ContactBubble.jsx → ContactBubble.js} +12 -26
  132. package/esm/ContentArticle.js +21 -0
  133. package/esm/ContentImage.js +18 -0
  134. package/esm/{Datepicker.jsx → Datepicker.js} +17 -18
  135. package/esm/{ExtraLinks.jsx → ExtraLinks.js} +9 -17
  136. package/esm/FeatureList.js +16 -0
  137. package/esm/FieldGroup.js +9 -0
  138. package/esm/{FileInput.jsx → FileInput.js} +22 -25
  139. package/esm/{Foonote.jsx → Foonote.js} +0 -0
  140. package/esm/FooterBadges.js +12 -0
  141. package/esm/FooterInfo.js +9 -0
  142. package/esm/Footnote.js +3 -0
  143. package/esm/{Form.jsx → Form.js} +2 -4
  144. package/esm/{FormField.jsx → FormField.js} +20 -22
  145. package/esm/Gallery/{_GalleryItem.jsx → _GalleryItem.js} +8 -9
  146. package/esm/Gallery/{_GalleryModal.jsx → _GalleryModal.js} +11 -15
  147. package/esm/Gallery/{_GalleryModalItem.jsx → _GalleryModalItem.js} +5 -7
  148. package/esm/{Gallery.jsx → Gallery.js} +3 -4
  149. package/esm/GridBlocks.js +24 -0
  150. package/esm/{Heading.jsx → Heading.js} +2 -4
  151. package/esm/HeroBlock.js +21 -0
  152. package/esm/{IframeBlock.jsx → IframeBlock.js} +6 -6
  153. package/esm/{Illustration.jsx → Illustration.js} +1 -1
  154. package/esm/{ImageCards.jsx → ImageCards.js} +2 -3
  155. package/esm/InfoBlock.js +13 -0
  156. package/esm/{InfoHero.jsx → InfoHero.js} +9 -15
  157. package/esm/{IslandBlock.jsx → IslandBlock.js} +1 -1
  158. package/esm/{IslandPageBlock.jsx → IslandPageBlock.js} +1 -1
  159. package/esm/LabeledTextBlock.js +14 -0
  160. package/esm/Layout.js +52 -0
  161. package/esm/MainMenu/_Auxiliary.js +13 -0
  162. package/esm/MainMenu/_PrimaryPanel.js +22 -0
  163. package/esm/{MainMenu.jsx → MainMenu.js} +27 -40
  164. package/esm/MiniMetrics.js +12 -0
  165. package/esm/Modal.js +14 -0
  166. package/esm/{NameCard.jsx → NameCard.js} +18 -23
  167. package/esm/NameCards.js +7 -0
  168. package/esm/{NewsHero.jsx → NewsHero.js} +7 -9
  169. package/esm/PageFilter.js +15 -0
  170. package/esm/{PageHeading.jsx → PageHeading.js} +2 -4
  171. package/esm/ProcessOverview.js +17 -0
  172. package/esm/PullQuote.js +4 -0
  173. package/esm/{RadioButtonsGroup.jsx → RadioButtonsGroup.js} +2 -2
  174. package/esm/RadioGroup.js +7 -0
  175. package/esm/RelatedLinks.js +26 -0
  176. package/esm/{RowBlock.jsx → RowBlock.js} +1 -3
  177. package/esm/{RowBlockColumn.jsx → RowBlockColumn.js} +2 -4
  178. package/esm/{SearchInput.jsx → SearchInput.js} +4 -6
  179. package/esm/SearchResults/_SearchResultsItem.js +15 -0
  180. package/esm/{SearchResults.jsx → SearchResults.js} +27 -36
  181. package/esm/{SeenEffect.jsx → SeenEffect.js} +1 -1
  182. package/esm/{Selectbox.jsx → Selectbox.js} +1 -1
  183. package/esm/{ShareButtons.jsx → ShareButtons.js} +6 -12
  184. package/esm/{Sharpie.jsx → Sharpie.js} +1 -1
  185. package/esm/{SiteSearchAutocomplete.jsx → SiteSearchAutocomplete.js} +5 -7
  186. package/esm/{SiteSearchCurtain.jsx → SiteSearchCurtain.js} +1 -5
  187. package/esm/{SiteSearchInput.jsx → SiteSearchInput.js} +10 -12
  188. package/esm/{Skeleton.jsx → Skeleton.js} +5 -5
  189. package/esm/{SubHeading.jsx → SubHeading.js} +2 -4
  190. package/esm/{Tabs.jsx → Tabs.js} +12 -12
  191. package/esm/{TagPill.jsx → TagPill.js} +11 -16
  192. package/esm/{TextBlock.jsx → TextBlock.js} +2 -4
  193. package/esm/{TextButton.jsx → TextButton.js} +1 -1
  194. package/esm/{TextInput.jsx → TextInput.js} +1 -1
  195. package/esm/{VSpacer.jsx → VSpacer.js} +1 -1
  196. package/esm/{VerticalTabsTOC.jsx → VerticalTabsTOC.js} +2 -2
  197. package/esm/WizardLayout.js +30 -0
  198. package/esm/WizardLayoutClose.js +4 -0
  199. package/esm/WizardStepper.js +25 -0
  200. package/esm/_abstract/{Button.jsx → Button.js} +2 -6
  201. package/esm/_abstract/CardList.js +36 -0
  202. package/esm/_abstract/{Image.jsx → Image.js} +10 -12
  203. package/esm/_abstract/{Link.jsx → Link.js} +0 -0
  204. package/esm/_abstract/TogglerGroup.js +29 -0
  205. package/esm/_abstract/{TogglerGroupField.jsx → TogglerGroupField.js} +3 -3
  206. package/esm/_abstract/{TogglerInput.jsx → TogglerInput.js} +13 -15
  207. package/esm/_abstract/{_AbstractCarousel.jsx → _AbstractCarousel.js} +7 -10
  208. package/esm/_abstract/_Blings.js +12 -0
  209. package/esm/_abstract/_Block.js +24 -0
  210. package/esm/_abstract/_Quote.js +8 -0
  211. package/esm/_abstract/{breakOnNL.jsx → breakOnNL.js} +1 -1
  212. package/package.json +91 -91
  213. package/ArticleCarousel/_ArticleCarouselCard.jsx +0 -32
  214. package/BreadCrumbs.jsx +0 -36
  215. package/ContentImage.jsx +0 -18
  216. package/FeatureList.jsx +0 -28
  217. package/FooterBadges.jsx +0 -21
  218. package/FooterInfo.jsx +0 -19
  219. package/GridBlocks.jsx +0 -40
  220. package/InfoBlock.jsx +0 -23
  221. package/Layout.jsx +0 -69
  222. package/MainMenu/_PrimaryPanel.jsx +0 -37
  223. package/Modal.jsx +0 -21
  224. package/ProcessOverview.jsx +0 -25
  225. package/SearchResults/_SearchResultsItem.jsx +0 -24
  226. package/WizardLayout.jsx +0 -44
  227. package/WizardStepper.jsx +0 -34
  228. package/_abstract/CardList.jsx +0 -46
  229. package/_abstract/TogglerGroup.jsx +0 -36
  230. package/_abstract/_Block.jsx +0 -32
  231. package/esm/AccordionList.jsx +0 -33
  232. package/esm/ArticleCarousel/_ArticleCarouselCard.jsx +0 -25
  233. package/esm/ArticleMeta.jsx +0 -17
  234. package/esm/Attention.jsx +0 -4
  235. package/esm/BlockBreak.jsx +0 -6
  236. package/esm/BlockQuote.jsx +0 -4
  237. package/esm/BreadCrumbs.jsx +0 -31
  238. package/esm/ButtonBack.jsx +0 -4
  239. package/esm/ButtonPrimary.jsx +0 -4
  240. package/esm/ButtonSecondary.jsx +0 -4
  241. package/esm/Carousel.jsx +0 -4
  242. package/esm/CarouselStepper.jsx +0 -4
  243. package/esm/CenterColumn.jsx +0 -9
  244. package/esm/Checkbox.jsx +0 -4
  245. package/esm/ContentArticle.jsx +0 -24
  246. package/esm/ContentImage.jsx +0 -13
  247. package/esm/FeatureList.jsx +0 -23
  248. package/esm/FieldGroup.jsx +0 -10
  249. package/esm/FooterBadges.jsx +0 -16
  250. package/esm/FooterInfo.jsx +0 -14
  251. package/esm/Footnote.jsx +0 -3
  252. package/esm/GridBlocks.jsx +0 -35
  253. package/esm/HeroBlock.jsx +0 -22
  254. package/esm/InfoBlock.jsx +0 -18
  255. package/esm/LabeledTextBlock.jsx +0 -16
  256. package/esm/Layout.jsx +0 -63
  257. package/esm/MainMenu/_Auxiliary.jsx +0 -19
  258. package/esm/MainMenu/_PrimaryPanel.jsx +0 -30
  259. package/esm/MiniMetrics.jsx +0 -11
  260. package/esm/Modal.jsx +0 -16
  261. package/esm/NameCards.jsx +0 -9
  262. package/esm/PageFilter.jsx +0 -16
  263. package/esm/ProcessOverview.jsx +0 -20
  264. package/esm/PullQuote.jsx +0 -4
  265. package/esm/RadioGroup.jsx +0 -7
  266. package/esm/RelatedLinks.jsx +0 -30
  267. package/esm/SearchResults/_SearchResultsItem.jsx +0 -19
  268. package/esm/WizardLayout.jsx +0 -39
  269. package/esm/WizardLayoutClose.jsx +0 -4
  270. package/esm/WizardStepper.jsx +0 -29
  271. package/esm/_abstract/CardList.jsx +0 -39
  272. package/esm/_abstract/TogglerGroup.jsx +0 -31
  273. package/esm/_abstract/_Blings.jsx +0 -14
  274. package/esm/_abstract/_Block.jsx +0 -27
  275. package/esm/_abstract/_Quote.jsx +0 -11
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
- import { useSeenEffect } from './utils/seenEffect';
3
- import ArticleMeta from './ArticleMeta';
4
- import ContentImage from './ContentImage';
5
- import Heading from './Heading';
6
- import RelatedLinks from './RelatedLinks';
7
- import TextBlock from './TextBlock';
8
- import VSpacer from './VSpacer';
9
- const ContentArticle = (props) => {
10
- const [ref] = useSeenEffect(props.startSeen);
11
- return (<div className="ContentArticle" ref={ref}>
12
- <ArticleMeta items={props.meta}/>
13
- <Heading>{props.headline}</Heading>
14
- <TextBlock startSeen>
15
- {props.topImage && <ContentImage {...props.topImage}/>}
16
- {props.body}
17
- </TextBlock>
18
- <VSpacer size="small">
19
- <hr />
20
- </VSpacer>
21
- {props.relatedLinks && <RelatedLinks {...props.relatedLinks}/>}
22
- </div>);
23
- };
24
- export default ContentArticle;
@@ -1,13 +0,0 @@
1
- import React from 'react';
2
- import Image from './_abstract/Image';
3
- const ContentImage = (props) => {
4
- const { image, caption, credit } = props;
5
- return (<figure className="ContentImage">
6
- {(caption || credit) && (<figcaption className="ContentImage__caption">
7
- {caption && <span className="ContentImage__text"> {caption} </span>}{' '}
8
- {credit && <small className="ContentImage__credit"> {credit} </small>}
9
- </figcaption>)}
10
- <Image className="ContentImage__image" {...image}/>
11
- </figure>);
12
- };
13
- export default ContentImage;
@@ -1,23 +0,0 @@
1
- import React from 'react';
2
- import { useSeenEffect } from './utils/seenEffect';
3
- import Bling from './Bling';
4
- const FeatureList = (props) => {
5
- const { title, features, startSeen } = props;
6
- const [ref] = useSeenEffect(startSeen);
7
- const _features = features.length ? features : [{ name: '...' }];
8
- return (<>
9
- <Bling type="snake-large" align="left" vertical="down-ish"/>
10
-
11
- <div className="FeatureList" ref={ref}>
12
- <h2 className="FeatureList__title">{title}</h2>
13
- <ul className="FeatureList__list">
14
- {_features.map(({ name, icon, iconUrl }, i) => (<li key={i} className="FeatureList__feature" style={iconUrl
15
- ? { '--efnistakn': `url("${iconUrl}")` }
16
- : undefined} data-efnistakn={!iconUrl ? icon : undefined}>
17
- {name}
18
- </li>))}
19
- </ul>
20
- </div>
21
- </>);
22
- };
23
- export default FeatureList;
@@ -1,10 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- const FieldGroup = (props) => {
4
- const { legend, children, className, disabled } = props;
5
- return (<fieldset className={getBemClass('FieldGroup', null, className)} role="group" disabled={disabled}>
6
- <legend className="FieldGroup__legend">{legend}</legend>
7
- {children}
8
- </fieldset>);
9
- };
10
- export default FieldGroup;
@@ -1,16 +0,0 @@
1
- import React from 'react';
2
- import { Link } from './_abstract/Link';
3
- const FooterBadges = (props) => {
4
- if (!props.badges.length) {
5
- return null;
6
- }
7
- return (<ul className="FooterBadges">
8
- {props.badges.map(({ altText, src, href }, i) => (<li key={i} className="FooterBadges__badge">
9
- {href ? (<Link href={href}>
10
- {' '}
11
- <img src={src} alt={altText}/>{' '}
12
- </Link>) : (<img src={src} alt={altText}/>)}
13
- </li>))}
14
- </ul>);
15
- };
16
- export default FooterBadges;
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- const FooterInfo = (props) => {
4
- const { boxes } = props;
5
- return (<div className="FooterInfo">
6
- {boxes.map((group, i) => (<div className={getBemClass('FooterInfo__group', group.modifier)} role={group.role} key={i}>
7
- <h3 className="FooterInfo__grouptitle">{group.title}</h3>
8
- {group.content ? (<div className={getBemClass('FooterInfo__groupcontent', group.modifier)}>
9
- {group.content}
10
- </div>) : (<div className={getBemClass('FooterInfo__groupcontent', group.modifier)} dangerouslySetInnerHTML={{ __html: group.html }}/>)}
11
- </div>))}
12
- </div>);
13
- };
14
- export default FooterInfo;
package/esm/Footnote.jsx DELETED
@@ -1,3 +0,0 @@
1
- import React from 'react';
2
- const Footnote = (props) => (<div className="Footnote">{props.children}</div>);
3
- export default Footnote;
@@ -1,35 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- import { getEfnistaknUrl } from '@reykjavik/hanna-utils/assets';
4
- import Image from './_abstract/Image';
5
- import { Link } from './_abstract/Link';
6
- import { useSeenEffect } from './utils/seenEffect';
7
- import ButtonTertiary from './ButtonTertiary';
8
- const GridBlocks = (props) => {
9
- const { blocks, twocol, startSeen } = props;
10
- const [ref] = useSeenEffect(startSeen);
11
- return (<div className={getBemClass('GridBlocks', [twocol && 'twocol'])} ref={ref}>
12
- {blocks.map(({ title, summary, href, links = [], icon, image }, i) => {
13
- const imageProps = icon ? { src: getEfnistaknUrl(icon) } : image;
14
- return (<div key={i} className="GridBlocks__item">
15
- {imageProps && <Image className="GridBlocks__illustration" {...imageProps}/>}
16
- <div className="GridBlocks__textwrap">
17
- <h3 className="GridBlocks__item__title">
18
- {href != null ? (<Link className="GridBlocks__item__titlelink" href={href}>
19
- {title}
20
- </Link>) : (title)}
21
- </h3>
22
- <div className="GridBlocks__item__summary">{summary}</div>
23
- <ul className="GridBlocks__links">
24
- {links.map((link, i) => {
25
- return (<li key={i} className="GridBlocks__link">
26
- <ButtonTertiary {...link}/>
27
- </li>);
28
- })}
29
- </ul>
30
- </div>
31
- </div>);
32
- })}
33
- </div>);
34
- };
35
- export default GridBlocks;
package/esm/HeroBlock.jsx DELETED
@@ -1,22 +0,0 @@
1
- import React from 'react';
2
- import { getIllustrationUrl } from '@reykjavik/hanna-utils/assets';
3
- import Image from './_abstract/Image';
4
- import { useSeenEffect } from './utils/seenEffect';
5
- import ButtonPrimary from './ButtonPrimary';
6
- import ButtonTertiary from './ButtonTertiary';
7
- const HeroBlock = (props) => {
8
- const { title, summary, illustration, image, primaryButton, secondaryButton, startSeen, } = props;
9
- const hasButtons = Boolean(primaryButton || secondaryButton);
10
- const imgProps = illustration ? { src: getIllustrationUrl(illustration) } : image;
11
- const [ref] = useSeenEffect(startSeen);
12
- return (<div className="HeroBlock" ref={ref}>
13
- <h1 className="HeroBlock__title">{title}</h1>
14
- <Image className="HeroBlock__image" {...imgProps}/>
15
- <div className="HeroBlock__summary">{summary}</div>
16
- {hasButtons && (<div className="HeroBlock__buttons">
17
- {primaryButton && <ButtonPrimary {...primaryButton}/>}{' '}
18
- {secondaryButton && <ButtonTertiary {...secondaryButton}/>}
19
- </div>)}
20
- </div>);
21
- };
22
- export default HeroBlock;
package/esm/InfoBlock.jsx DELETED
@@ -1,18 +0,0 @@
1
- import React from 'react';
2
- import { useSeenEffect } from './utils/seenEffect';
3
- const InfoBlock = (props) => {
4
- const { title, subtitle, items, startSeen } = props;
5
- const [ref] = useSeenEffect(startSeen);
6
- return (<div className="InfoBlock" ref={ref}>
7
- <h2 className="InfoBlock__title">{title}</h2>
8
- <div className="InfoBlock__subtitle">{subtitle}</div>
9
- <ul className="InfoBlock__items">
10
- {items.map((item, i) => (<li key={i} className="InfoBlock__item">
11
- {item}
12
- </li>))}
13
- </ul>
14
- {'extraInfo' in props && (<div className="InfoBlock__extrainfo">{props.extraInfo}</div>)}
15
- {'attention' in props && (<div className="InfoBlock__attention">{props.attention}</div>)}
16
- </div>);
17
- };
18
- export default InfoBlock;
@@ -1,16 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- import { useSeenEffect } from './utils/seenEffect';
4
- import ButtonTertiary from './ButtonTertiary';
5
- const LabeledTextBlock = (props) => {
6
- const { label, summary, wide, buttons = [], startSeen } = props;
7
- const [ref] = useSeenEffect(startSeen);
8
- return (<div className={getBemClass('LabeledTextBlock', wide && 'wide')} ref={ref}>
9
- <h2 className="LabeledTextBlock__label">{label}</h2>
10
- <div className="LabeledTextBlock__summary">
11
- {summary}
12
- {buttons.map((button, i) => (<ButtonTertiary key={i} {...button}/>))}
13
- </div>
14
- </div>);
15
- };
16
- export default LabeledTextBlock;
package/esm/Layout.jsx DELETED
@@ -1,63 +0,0 @@
1
- import React from 'react';
2
- import { useIsBrowserSide } from '@hugsmidjan/react/hooks';
3
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
4
- import { getAssetUrl } from '@reykjavik/hanna-utils/assets';
5
- import { getTexts } from '@reykjavik/hanna-utils/i18n';
6
- import Image from './_abstract/Image';
7
- import { Link } from './_abstract/Link';
8
- import { useMenuToggling } from './utils/useMenuToggling';
9
- import { useScrollbarWidthCSSVar } from './utils/useScrollbarWidthCSSVar';
10
- export const defaultLayoutTexts = {
11
- is: {
12
- lang: 'is',
13
- skipLinkLabel: 'Valmynd',
14
- closeMenuLabel: 'Loka',
15
- closeMenuLabelLong: 'Loka valmynd',
16
- },
17
- en: {
18
- lang: 'en',
19
- skipLinkLabel: 'Skip to navigation',
20
- closeMenuLabel: 'Close',
21
- closeMenuLabelLong: 'Close menu',
22
- },
23
- };
24
- const Layout = (props) => {
25
- useScrollbarWidthCSSVar();
26
- const { ssr, globalAlerts, mainChildren, navChildren, footerChildren, colorTheme, children, siteName = 'Reykjavík', logoLink = '/', } = props;
27
- const { isMenuActive, closeMenu, toggleMenu } = useMenuToggling(ssr !== 'ssr-only');
28
- const isBrowser = useIsBrowserSide( /* ssr */);
29
- const txt = getTexts(props, defaultLayoutTexts);
30
- return (<div className={getBemClass('Layout', props.modifier)} data-sprinkled={isBrowser} data-color-theme={colorTheme}>
31
- {globalAlerts && (<div className="Layout__alerts" role="alert">
32
- {globalAlerts}
33
- </div>)}
34
- <div className="Layout__content">
35
- <div className="Layout__header" role="banner">
36
- <Link className="Layout__header__logo" href={logoLink}>
37
- {' '}
38
- <Image inline={true} src={getAssetUrl('reykjavik-logo.svg')}/> {siteName}{' '}
39
- </Link>{' '}
40
- {navChildren && (<Link className="Layout__header__skiplink" href="#pagenav" onClick={isMenuActive &&
41
- ((e) => {
42
- e.preventDefault();
43
- toggleMenu();
44
- })} aria-label={txt.skipLinkLabel}>
45
- {txt.skipLinkLabel}
46
- </Link>)}
47
- </div>
48
- <div className="Layout__main" role="main">
49
- {mainChildren || children}
50
- </div>
51
- {navChildren && (<div className="Layout__nav" id="pagenav" role="navigation">
52
- {navChildren}
53
- {isMenuActive && (<button className="Layout__nav__closebutton" onClick={closeMenu} aria-label={txt.closeMenuLabelLong} type="button">
54
- {txt.closeMenuLabel}
55
- </button>)}
56
- </div>)}
57
- <div className="Layout__footer" role="complementary">
58
- {footerChildren}
59
- </div>
60
- </div>
61
- </div>);
62
- };
63
- export default Layout;
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import { getIllustrationUrl } from '@reykjavik/hanna-utils/assets';
3
- import { Link } from '../_abstract/Link';
4
- export const AuxiliaryPanel = (props) => {
5
- const { title, id, items, image } = props;
6
- const imageUrl = image ? getIllustrationUrl(image) : image;
7
- return (<li className="AuxiliaryPanel" id={id} style={imageUrl
8
- ? { '--menu-auxiliary-image': `url(${imageUrl})` }
9
- : undefined}>
10
- <h3 className="AuxiliaryPanel__title">{title}</h3>
11
- <ul className="AuxiliaryPanel__items">
12
- {items.map((item, i) => (<li key={i} className="AuxiliaryPanel__item" aria-current={item.current || undefined}>
13
- <Link className="AuxiliaryPanel__link" href={item.href} target={item.target} lang={item.lang}>
14
- {item.label}
15
- </Link>
16
- </li>))}
17
- </ul>
18
- </li>);
19
- };
@@ -1,30 +0,0 @@
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
- };
@@ -1,11 +0,0 @@
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.jsx DELETED
@@ -1,16 +0,0 @@
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;
package/esm/NameCards.jsx DELETED
@@ -1,9 +0,0 @@
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;
@@ -1,16 +0,0 @@
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;
@@ -1,20 +0,0 @@
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;
package/esm/PullQuote.jsx DELETED
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import { _Quote } from './_abstract/_Quote';
3
- const PullQuote = (props) => <_Quote bem="PullQuote" {...props}/>;
4
- export default PullQuote;
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import TogglerGroupField from './_abstract/TogglerGroupField';
3
- import TogglerInput from './_abstract/TogglerInput';
4
- const Radio = (props) => (<TogglerInput {...props} bem="Radio" type="radio"/>);
5
- const RadioGroup = (props) => (<TogglerGroupField {...props} bem="RadioGroup" modifier={props.layout} Toggler={Radio}/>);
6
- RadioGroup.__Radio = Radio;
7
- export default RadioGroup;
@@ -1,30 +0,0 @@
1
- import React from 'react';
2
- import { Link } from './_abstract/Link';
3
- const types = {
4
- external: 1,
5
- document: 1,
6
- pdf: 1,
7
- link: 0,
8
- };
9
- const RelatedLinks = (props) => {
10
- const { title, links } = props;
11
- if (links.length === 0) {
12
- return null;
13
- }
14
- const TitleTag = props.titleTag || 'h3';
15
- return (<div className="RelatedLinks">
16
- {title && <TitleTag className="RelatedLinks__title">{title}</TitleTag>}
17
- <ul className="RelatedLinks__list">
18
- {links.map(({ href, label, type, target }, i) => {
19
- type = type && types[type] ? type : undefined;
20
- return (<li key={i} className="RelatedLinks__item">
21
- <Link className="RelatedLinks__link" href={href} data-type={type} target={target}>
22
- {' '}
23
- {label}{' '}
24
- </Link>
25
- </li>);
26
- })}
27
- </ul>
28
- </div>);
29
- };
30
- export default RelatedLinks;
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import Image from '../_abstract/Image';
3
- import { Link } from '../_abstract/Link';
4
- const SearchResultsItem = (props) => {
5
- const { highlight, title, summary, href, meta, image } = props;
6
- const bem = highlight ? 'SearchResultsHighlightItem' : 'SearchResultsItem';
7
- const metaArr = (Array.isArray(meta) ? meta : [meta]);
8
- return (<li className={bem}>
9
- <Link className={bem + '__link'} href={href}>
10
- <h3 className={bem + '__title'}>{title}</h3>
11
- {metaArr.length > 0 && (<span className={bem + '__meta'}>
12
- {metaArr.map((item, i) => typeof item === 'function' ? item() : item && <span key={i}>{item}</span>)}
13
- </span>)}
14
- {highlight && image && <Image className={bem + '__image'} src={image}/>}
15
- <div className={bem + '__summary'} dangerouslySetInnerHTML={{ __html: summary }}/>
16
- </Link>
17
- </li>);
18
- };
19
- export default SearchResultsItem;
@@ -1,39 +0,0 @@
1
- import React from 'react';
2
- import { useIsBrowserSide } from '@hugsmidjan/react/hooks';
3
- import { getAssetUrl } from '@reykjavik/hanna-utils/assets';
4
- import Image from './_abstract/Image';
5
- import { Link } from './_abstract/Link';
6
- import { useScrollbarWidthCSSVar } from './utils/useScrollbarWidthCSSVar';
7
- const WizardLayout = (props) => {
8
- useScrollbarWidthCSSVar();
9
- const {
10
- // ssr,
11
- wizardStepper, wizardFooter, children, colorTheme, logoLink = '/', siteName = 'Reykjavík', globalAlerts, } = props;
12
- const isBrowser = useIsBrowserSide( /* ssr */);
13
- return (<div className="WizardLayout" data-sprinkled={isBrowser} data-color-theme={colorTheme}>
14
- {globalAlerts && (<div className="WizardLayout__alerts" role="alert">
15
- {globalAlerts}
16
- </div>)}
17
- <div className="WizardLayout__content">
18
- <div className="WizardLayout__header" role="banner">
19
- <Link className="WizardLayout__header__logo" href={logoLink}>
20
- {' '}
21
- <Image inline={true} src={getAssetUrl('reykjavik-logo.svg')}/> {siteName}{' '}
22
- </Link>{' '}
23
- </div>
24
- <div className="WizardLayout__wrap">
25
- {wizardStepper && (<div className="WizardLayout__stepper" role="navigation">
26
- {wizardStepper}
27
- </div>)}
28
- <div className="WizardLayout__main" role="main">
29
- {children}
30
- </div>
31
- <div className="WizardLayout__deco WizardLayout__deco--geometry"/>
32
- </div>
33
- <div className="WizardLayout__footer" role="complementary">
34
- {wizardFooter}
35
- </div>
36
- </div>
37
- </div>);
38
- };
39
- export default WizardLayout;
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- import Button from './_abstract/Button';
3
- const WizardLayoutClose = (props) => (<Button bem="WizardLayoutClose" {...props}/>);
4
- export default WizardLayoutClose;
@@ -1,29 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- const WizardStepper = (props) => {
4
- const { steps, activeStep = -1, allowForwardSkip, disableBacktrack, onClick } = props;
5
- return (<div className={getBemClass('WizardStepper', activeStep === -1 && 'preview')}>
6
- {steps.map((step, i) => {
7
- const { label, clickable, done, neutral } = step;
8
- const stepClass = getBemClass('WizardStepper__step', [
9
- (done || (done == null && i < activeStep)) && 'done',
10
- neutral && 'neutral',
11
- ]);
12
- const isClickable = clickable === 'always' ||
13
- (clickable &&
14
- (activeStep === i ||
15
- (i > activeStep && allowForwardSkip) ||
16
- (i < activeStep && !disableBacktrack)));
17
- const ariaCurrent = activeStep === i ? 'step' : undefined;
18
- return (<React.Fragment key={i}>
19
- {isClickable ? (<button type="button" className={stepClass} onClick={() => onClick(i)} aria-current={ariaCurrent}>
20
- {label}
21
- </button>) : (<span className={stepClass} aria-current={ariaCurrent}>
22
- {' '}
23
- {label}{' '}
24
- </span>)}{' '}
25
- </React.Fragment>);
26
- })}
27
- </div>);
28
- };
29
- export default WizardStepper;
@@ -1,39 +0,0 @@
1
- import React from 'react';
2
- import Button from './Button';
3
- import Image from './Image';
4
- const Card = (props) => {
5
- const { bem, href, title, imgPlaceholder } = props;
6
- const cardClass = `${bem}__card`;
7
- const image = 'image' in props && props.image;
8
- const meta = 'meta' in props && props.meta;
9
- const summary = 'summary' in props && props.summary;
10
- return (<>
11
- <Button bem={cardClass} href={href}>
12
- {' '}
13
- <Image className={`${bem}__image`} {...image} placeholder={imgPlaceholder}/>
14
- <span className={`${cardClass}__title`}>{title}</span>{' '}
15
- {meta && <span className={`${cardClass}__meta`}>{meta}</span>}{' '}
16
- {summary && <span className={`${cardClass}__summary`}>{summary}</span>}{' '}
17
- </Button>{' '}
18
- </>);
19
- };
20
- export const CardList = (props) => {
21
- const { bemPrefix, title, summaryElement, cards, titleTag = 'h2', children, imgPlaceholder, } = props;
22
- const TitleTag = titleTag;
23
- const fallbackImage = (imgPlaceholder !== true && imgPlaceholder) || undefined;
24
- const fallbackImageStyle = fallbackImage
25
- ? { '--ImageCards--fallback': `url("${fallbackImage}")` }
26
- : undefined;
27
- return (<>
28
- {summaryElement ? (<div className={bemPrefix + '__summary'}>
29
- {title && <TitleTag className={bemPrefix + '__title'}>{title}</TitleTag>}
30
- {summaryElement}
31
- </div>) : (title && <TitleTag className={bemPrefix + '__title'}>{title}</TitleTag>)}
32
- <ul className={bemPrefix + '__list'} style={fallbackImageStyle}>
33
- {cards.map((card, i) => (<li key={i} className={bemPrefix + '__item'}>
34
- <Card {...card} bem={bemPrefix} imgPlaceholder={!!imgPlaceholder}/>
35
- </li>))}
36
- </ul>
37
- {children}
38
- </>);
39
- };
@@ -1,31 +0,0 @@
1
- import React from 'react';
2
- import getBemClass from '@hugsmidjan/react/utils/getBemClass';
3
- const TogglerGroup = (props) => {
4
- const {
5
- // id,
6
- className, bem, name, disabled, Toggler, onSelected, options, inputProps = {}, } = props;
7
- const values = props.value || [];
8
- return (<ul className={getBemClass(bem, null, className)} role="group" aria-labelledby={props['aria-labelledby']} aria-describedby={props['aria-describedby']} aria-required={props.required}>
9
- {options.map((option, i) => {
10
- const isDisabled = option.disabled != null
11
- ? option.disabled
12
- : disabled && typeof disabled !== 'boolean'
13
- ? disabled.includes(i)
14
- : disabled;
15
- const isChecked = values.includes(option.value);
16
- return (<Toggler key={i} {...inputProps} className={bem + '__item'} name={name} Wrapper="li" {...option} label={option.label || option.value} onChange={onSelected
17
- ? (e) => {
18
- const { value } = option;
19
- const checked = e.currentTarget.checked;
20
- inputProps.onChange && inputProps.onChange(e);
21
- const selectedValues = values.filter((val) => val !== value);
22
- if (checked) {
23
- selectedValues.push(value);
24
- }
25
- onSelected({ value, checked, option, selectedValues });
26
- }
27
- : inputProps.onChange} disabled={isDisabled} aria-invalid={props['aria-invalid']} checked={isChecked}/>);
28
- })}
29
- </ul>);
30
- };
31
- export default TogglerGroup;
@@ -1,14 +0,0 @@
1
- import React from 'react';
2
- import Bling from '../Bling';
3
- const inverseAlignments = {
4
- left: 'right',
5
- 'left-ish': 'right-ish',
6
- 'left-center': 'right-center',
7
- 'right-center': 'left-center',
8
- 'right-ish': 'left-ish',
9
- right: 'left',
10
- };
11
- const Blings = (props) => (<>
12
- {props.blings.map(({ type, align, vertical, color, overlay, parent }, i) => (<Bling key={type + '-' + i} type={type} align={props.mirror ? inverseAlignments[align || 'left'] : align} vertical={vertical} color={color} overlay={overlay} parent={parent}/>))}
13
- </>);
14
- export default Blings;