@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.
- package/AccordionList.jsx +61 -0
- package/ActionCards.jsx +15 -0
- package/Alert.jsx +123 -0
- package/ArticleCarousel/_ArticleCarouselCard.d.ts +1 -1
- package/ArticleCarousel/_ArticleCarouselCard.jsx +32 -0
- package/ArticleCarousel.jsx +13 -0
- package/ArticleMeta.jsx +42 -0
- package/Attention.jsx +9 -0
- package/BasicTable.jsx +35 -0
- package/Bling.jsx +49 -0
- package/BlockBreak.jsx +11 -0
- package/BlockQuote.jsx +9 -0
- package/BreadCrumbs.jsx +36 -0
- package/ButtonBack.jsx +9 -0
- package/ButtonBar.jsx +23 -0
- package/ButtonPrimary.jsx +9 -0
- package/ButtonSecondary.jsx +9 -0
- package/ButtonTertiary.jsx +20 -0
- package/CHANGELOG.md +13 -5
- package/Carousel.jsx +9 -0
- package/CarouselStepper.jsx +9 -0
- package/CenterColumn.jsx +14 -0
- package/Checkbox.jsx +9 -0
- package/CheckboxButtonsGroup.jsx +19 -0
- package/CheckboxGroup.jsx +12 -0
- package/CityBlock.jsx +23 -0
- package/ContactBubble.jsx +192 -0
- package/ContentArticle.jsx +29 -0
- package/ContentImage.jsx +18 -0
- package/Datepicker.jsx +92 -0
- package/ExtraLinks.jsx +47 -0
- package/FeatureList.jsx +28 -0
- package/FieldGroup.jsx +15 -0
- package/FileInput.jsx +185 -0
- package/Foonote.jsx +12 -0
- package/FooterBadges.jsx +21 -0
- package/FooterInfo.jsx +19 -0
- package/Footnote.jsx +8 -0
- package/Form.jsx +17 -0
- package/FormField.jsx +121 -0
- package/Gallery/_GalleryItem.jsx +59 -0
- package/Gallery/_GalleryModal.jsx +86 -0
- package/Gallery/_GalleryModalContext.js +8 -0
- package/Gallery/_GalleryModalItem.jsx +29 -0
- package/Gallery.jsx +56 -0
- package/GridBlocks.jsx +40 -0
- package/Heading.jsx +24 -0
- package/HeroBlock.jsx +27 -0
- package/IframeBlock.jsx +31 -0
- package/Illustration.jsx +13 -0
- package/ImageCards.jsx +28 -0
- package/InfoBlock.jsx +23 -0
- package/InfoHero.jsx +93 -0
- package/IslandBlock.jsx +21 -0
- package/IslandPageBlock.jsx +21 -0
- package/LabeledTextBlock.jsx +21 -0
- package/Layout.jsx +69 -0
- package/MainMenu/_Auxiliary.jsx +26 -0
- package/MainMenu/_PrimaryPanel.jsx +37 -0
- package/MainMenu.d.ts +1 -1
- package/MainMenu.jsx +178 -0
- package/MiniMetrics.jsx +16 -0
- package/Modal.jsx +21 -0
- package/NameCard.jsx +92 -0
- package/NameCards.jsx +14 -0
- package/NewsHero.jsx +93 -0
- package/PageFilter.jsx +21 -0
- package/PageHeading.jsx +19 -0
- package/ProcessOverview.jsx +25 -0
- package/PullQuote.jsx +9 -0
- package/RadioButtonsGroup.jsx +19 -0
- package/RadioGroup.jsx +12 -0
- package/RelatedLinks.jsx +35 -0
- package/RowBlock.jsx +16 -0
- package/RowBlockColumn.jsx +18 -0
- package/SearchInput.jsx +63 -0
- package/SearchResults/_SearchResultsItem.jsx +24 -0
- package/SearchResults.jsx +146 -0
- package/SeenEffect.jsx +24 -0
- package/Selectbox.jsx +74 -0
- package/ShareButtons.jsx +82 -0
- package/Sharpie.jsx +27 -0
- package/SiteSearchAutocomplete.jsx +89 -0
- package/SiteSearchCurtain.jsx +65 -0
- package/SiteSearchInput.d.ts +1 -1
- package/SiteSearchInput.jsx +70 -0
- package/Skeleton.jsx +35 -0
- package/SubHeading.jsx +20 -0
- package/Tabs.jsx +122 -0
- package/TagPill.jsx +53 -0
- package/TextBlock.jsx +22 -0
- package/TextButton.jsx +14 -0
- package/TextInput.jsx +63 -0
- package/VSpacer.jsx +46 -0
- package/VerticalTabsTOC.jsx +96 -0
- package/WizardLayout.jsx +44 -0
- package/WizardLayoutClose.jsx +9 -0
- package/WizardStepper.jsx +34 -0
- package/_abstract/Button.jsx +56 -0
- package/_abstract/CardList.jsx +46 -0
- package/_abstract/Image.jsx +34 -0
- package/_abstract/Link.jsx +31 -0
- package/_abstract/TogglerGroup.jsx +36 -0
- package/_abstract/TogglerGroupField.jsx +27 -0
- package/_abstract/TogglerInput.jsx +40 -0
- package/_abstract/_AbstractCarousel.jsx +161 -0
- package/_abstract/_Blings.jsx +19 -0
- package/_abstract/_Block.jsx +32 -0
- package/_abstract/_Quote.jsx +18 -0
- package/_abstract/breakOnNL.jsx +13 -0
- package/assets.js +51 -0
- package/constants.js +25 -0
- package/esm/AccordionList.d.ts +17 -0
- package/esm/AccordionList.jsx +33 -0
- package/esm/ActionCards.d.ts +5 -0
- package/esm/ActionCards.jsx +10 -0
- package/esm/Alert.d.ts +49 -0
- package/esm/Alert.jsx +94 -0
- package/esm/ArticleCarousel/_ArticleCarouselCard.d.ts +27 -0
- package/esm/ArticleCarousel/_ArticleCarouselCard.jsx +25 -0
- package/esm/ArticleCarousel.d.ts +12 -0
- package/esm/ArticleCarousel.jsx +8 -0
- package/esm/ArticleMeta.d.ts +9 -0
- package/esm/ArticleMeta.jsx +17 -0
- package/esm/Attention.d.ts +7 -0
- package/esm/Attention.jsx +4 -0
- package/esm/BasicTable.d.ts +12 -0
- package/esm/BasicTable.jsx +30 -0
- package/esm/Bling.d.ts +81 -0
- package/esm/Bling.jsx +44 -0
- package/esm/BlockBreak.d.ts +2 -0
- package/esm/BlockBreak.jsx +6 -0
- package/esm/BlockQuote.d.ts +4 -0
- package/esm/BlockQuote.jsx +4 -0
- package/esm/BreadCrumbs.d.ts +11 -0
- package/esm/BreadCrumbs.jsx +31 -0
- package/esm/ButtonBack.d.ts +7 -0
- package/esm/ButtonBack.jsx +4 -0
- package/esm/ButtonBar.d.ts +16 -0
- package/esm/ButtonBar.jsx +16 -0
- package/esm/ButtonPrimary.d.ts +7 -0
- package/esm/ButtonPrimary.jsx +4 -0
- package/esm/ButtonSecondary.d.ts +7 -0
- package/esm/ButtonSecondary.jsx +4 -0
- package/esm/ButtonTertiary.d.ts +12 -0
- package/esm/ButtonTertiary.jsx +15 -0
- package/esm/Carousel.d.ts +4 -0
- package/esm/Carousel.jsx +4 -0
- package/esm/CarouselStepper.d.ts +4 -0
- package/esm/CarouselStepper.jsx +4 -0
- package/esm/CenterColumn.d.ts +7 -0
- package/esm/CenterColumn.jsx +9 -0
- package/esm/Checkbox.d.ts +4 -0
- package/esm/Checkbox.jsx +4 -0
- package/esm/CheckboxButtonsGroup.d.ts +11 -0
- package/esm/CheckboxButtonsGroup.jsx +14 -0
- package/esm/CheckboxGroup.d.ts +9 -0
- package/esm/CheckboxGroup.jsx +7 -0
- package/esm/CityBlock.d.ts +23 -0
- package/esm/CityBlock.jsx +18 -0
- package/esm/ContactBubble.d.ts +58 -0
- package/esm/ContactBubble.jsx +162 -0
- package/esm/ContentArticle.d.ts +15 -0
- package/esm/ContentArticle.jsx +24 -0
- package/esm/ContentImage.d.ts +8 -0
- package/esm/ContentImage.jsx +13 -0
- package/esm/Datepicker.d.ts +39 -0
- package/esm/Datepicker.jsx +64 -0
- package/esm/ExtraLinks.d.ts +18 -0
- package/esm/ExtraLinks.jsx +42 -0
- package/esm/FeatureList.d.ts +12 -0
- package/esm/FeatureList.jsx +23 -0
- package/esm/FieldGroup.d.ts +9 -0
- package/esm/FieldGroup.jsx +10 -0
- package/esm/FileInput.d.ts +17 -0
- package/esm/FileInput.jsx +157 -0
- package/esm/Foonote.d.ts +12 -0
- package/esm/Foonote.jsx +7 -0
- package/esm/FooterBadges.d.ts +9 -0
- package/esm/FooterBadges.jsx +16 -0
- package/esm/FooterInfo.d.ts +18 -0
- package/esm/FooterInfo.jsx +14 -0
- package/esm/Footnote.d.ts +6 -0
- package/esm/Footnote.jsx +3 -0
- package/esm/Form.d.ts +7 -0
- package/esm/Form.jsx +12 -0
- package/esm/FormField.d.ts +65 -0
- package/esm/FormField.jsx +93 -0
- package/esm/Gallery/_GalleryItem.d.ts +8 -0
- package/esm/Gallery/_GalleryItem.jsx +31 -0
- package/esm/Gallery/_GalleryModal.d.ts +6 -0
- package/esm/Gallery/_GalleryModal.jsx +58 -0
- package/esm/Gallery/_GalleryModalContext.d.ts +9 -0
- package/esm/Gallery/_GalleryModalContext.js +3 -0
- package/esm/Gallery/_GalleryModalItem.d.ts +3 -0
- package/esm/Gallery/_GalleryModalItem.jsx +24 -0
- package/esm/Gallery.d.ts +17 -0
- package/esm/Gallery.jsx +28 -0
- package/esm/GridBlocks.d.ts +26 -0
- package/esm/GridBlocks.jsx +35 -0
- package/esm/Heading.d.ts +16 -0
- package/esm/Heading.jsx +19 -0
- package/esm/HeroBlock.d.ts +19 -0
- package/esm/HeroBlock.jsx +22 -0
- package/esm/IframeBlock.d.ts +23 -0
- package/esm/IframeBlock.jsx +26 -0
- package/esm/Illustration.d.ts +13 -0
- package/esm/Illustration.jsx +8 -0
- package/esm/ImageCards.d.ts +8 -0
- package/esm/ImageCards.jsx +23 -0
- package/esm/InfoBlock.d.ts +17 -0
- package/esm/InfoBlock.jsx +18 -0
- package/esm/InfoHero.d.ts +17 -0
- package/esm/InfoHero.jsx +88 -0
- package/esm/IslandBlock.d.ts +25 -0
- package/esm/IslandBlock.jsx +16 -0
- package/esm/IslandPageBlock.d.ts +24 -0
- package/esm/IslandPageBlock.jsx +16 -0
- package/esm/LabeledTextBlock.d.ts +11 -0
- package/esm/LabeledTextBlock.jsx +16 -0
- package/esm/Layout.d.ts +33 -0
- package/esm/Layout.jsx +63 -0
- package/esm/MainMenu/_Auxiliary.d.ts +6 -0
- package/esm/MainMenu/_Auxiliary.jsx +19 -0
- package/esm/MainMenu/_PrimaryPanel.d.ts +13 -0
- package/esm/MainMenu/_PrimaryPanel.jsx +30 -0
- package/esm/MainMenu.d.ts +48 -0
- package/esm/MainMenu.jsx +149 -0
- package/esm/MiniMetrics.d.ts +8 -0
- package/esm/MiniMetrics.jsx +11 -0
- package/esm/Modal.d.ts +10 -0
- package/esm/Modal.jsx +16 -0
- package/esm/NameCard.d.ts +64 -0
- package/esm/NameCard.jsx +87 -0
- package/esm/NameCards.d.ts +6 -0
- package/esm/NameCards.jsx +9 -0
- package/esm/NewsHero.d.ts +14 -0
- package/esm/NewsHero.jsx +88 -0
- package/esm/PageFilter.d.ts +17 -0
- package/esm/PageFilter.jsx +16 -0
- package/esm/PageHeading.d.ts +10 -0
- package/esm/PageHeading.jsx +14 -0
- package/esm/ProcessOverview.d.ts +13 -0
- package/esm/ProcessOverview.jsx +20 -0
- package/esm/PullQuote.d.ts +4 -0
- package/esm/PullQuote.jsx +4 -0
- package/esm/RadioButtonsGroup.d.ts +11 -0
- package/esm/RadioButtonsGroup.jsx +14 -0
- package/esm/RadioGroup.d.ts +13 -0
- package/esm/RadioGroup.jsx +7 -0
- package/esm/RelatedLinks.d.ts +20 -0
- package/esm/RelatedLinks.jsx +30 -0
- package/esm/RowBlock.d.ts +12 -0
- package/esm/RowBlock.jsx +11 -0
- package/esm/RowBlockColumn.d.ts +8 -0
- package/esm/RowBlockColumn.jsx +13 -0
- package/esm/SearchInput.d.ts +18 -0
- package/esm/SearchInput.jsx +35 -0
- package/esm/SearchResults/_SearchResultsItem.d.ts +18 -0
- package/esm/SearchResults/_SearchResultsItem.jsx +19 -0
- package/esm/SearchResults.d.ts +33 -0
- package/esm/SearchResults.jsx +118 -0
- package/esm/SeenEffect.d.ts +4 -0
- package/esm/SeenEffect.jsx +19 -0
- package/esm/Selectbox.d.ts +8 -0
- package/esm/Selectbox.jsx +46 -0
- package/esm/ShareButtons.d.ts +9 -0
- package/esm/ShareButtons.jsx +57 -0
- package/esm/Sharpie.d.ts +23 -0
- package/esm/Sharpie.jsx +22 -0
- package/esm/SiteSearchAutocomplete.d.ts +40 -0
- package/esm/SiteSearchAutocomplete.jsx +60 -0
- package/esm/SiteSearchCurtain.d.ts +6 -0
- package/esm/SiteSearchCurtain.jsx +37 -0
- package/esm/SiteSearchInput.d.ts +24 -0
- package/esm/SiteSearchInput.jsx +42 -0
- package/esm/Skeleton.d.ts +25 -0
- package/esm/Skeleton.jsx +30 -0
- package/esm/SubHeading.d.ts +10 -0
- package/esm/SubHeading.jsx +15 -0
- package/esm/Tabs.d.ts +35 -0
- package/esm/Tabs.jsx +94 -0
- package/esm/TagPill.d.ts +27 -0
- package/esm/TagPill.jsx +48 -0
- package/esm/TextBlock.d.ts +15 -0
- package/esm/TextBlock.jsx +17 -0
- package/esm/TextButton.d.ts +9 -0
- package/esm/TextButton.jsx +9 -0
- package/esm/TextInput.d.ts +16 -0
- package/esm/TextInput.jsx +35 -0
- package/esm/VSpacer.d.ts +24 -0
- package/esm/VSpacer.jsx +41 -0
- package/esm/VerticalTabsTOC.d.ts +14 -0
- package/esm/VerticalTabsTOC.jsx +68 -0
- package/esm/WizardLayout.d.ts +15 -0
- package/esm/WizardLayout.jsx +39 -0
- package/esm/WizardLayoutClose.d.ts +3 -0
- package/esm/WizardLayoutClose.jsx +4 -0
- package/esm/WizardStepper.d.ts +36 -0
- package/esm/WizardStepper.jsx +29 -0
- package/esm/_abstract/Button.d.ts +40 -0
- package/esm/_abstract/Button.jsx +51 -0
- package/esm/_abstract/CardList.d.ts +29 -0
- package/esm/_abstract/CardList.jsx +39 -0
- package/esm/_abstract/Image.d.ts +32 -0
- package/esm/_abstract/Image.jsx +29 -0
- package/esm/_abstract/Link.d.ts +27 -0
- package/esm/_abstract/Link.jsx +24 -0
- package/esm/_abstract/TogglerGroup.d.ts +31 -0
- package/esm/_abstract/TogglerGroup.jsx +31 -0
- package/esm/_abstract/TogglerGroupField.d.ts +17 -0
- package/esm/_abstract/TogglerGroupField.jsx +22 -0
- package/esm/_abstract/TogglerInput.d.ts +22 -0
- package/esm/_abstract/TogglerInput.jsx +35 -0
- package/esm/_abstract/_AbstractCarousel.d.ts +25 -0
- package/esm/_abstract/_AbstractCarousel.jsx +133 -0
- package/esm/_abstract/_Blings.d.ts +11 -0
- package/esm/_abstract/_Blings.jsx +14 -0
- package/esm/_abstract/_Block.d.ts +22 -0
- package/esm/_abstract/_Block.jsx +27 -0
- package/esm/_abstract/_Quote.d.ts +9 -0
- package/esm/_abstract/_Quote.jsx +11 -0
- package/esm/_abstract/breakOnNL.d.ts +2 -0
- package/esm/_abstract/breakOnNL.jsx +8 -0
- package/esm/assets.d.ts +42 -0
- package/esm/assets.js +56 -0
- package/esm/constants.d.ts +39 -0
- package/esm/constants.js +22 -0
- package/esm/focus-visible.d.ts +1 -0
- package/esm/focus-visible.js +1 -0
- package/esm/package.json +1 -0
- package/esm/utils/env.d.ts +1 -0
- package/esm/utils/env.js +8 -0
- package/esm/utils/seenEffect.d.ts +28 -0
- package/esm/utils/seenEffect.js +73 -0
- package/esm/utils/useFormatMonitor.d.ts +38 -0
- package/esm/utils/useFormatMonitor.js +41 -0
- package/esm/utils/useGetSVGtext.d.ts +6 -0
- package/esm/utils/useGetSVGtext.js +19 -0
- package/esm/utils/useMenuToggling.d.ts +8 -0
- package/esm/utils/useMenuToggling.js +62 -0
- package/esm/utils/useScrollbarWidthCSSVar.d.ts +1 -0
- package/esm/utils/useScrollbarWidthCSSVar.js +3 -0
- package/esm/utils.d.ts +2 -0
- package/esm/utils.js +2 -0
- package/focus-visible.js +3 -0
- package/package.json +183 -184
- package/utils/env.js +14 -0
- package/utils/seenEffect.js +81 -0
- package/utils/useFormatMonitor.js +44 -0
- package/utils/useGetSVGtext.js +23 -0
- package/utils/useMenuToggling.js +66 -0
- package/utils/useScrollbarWidthCSSVar.js +10 -0
- package/utils.js +18 -0
- package/AccordionList.cjs +0 -91
- package/AccordionList.mjs +0 -69
- package/ActionCards.cjs +0 -57
- package/ActionCards.mjs +0 -35
- package/Alert.cjs +0 -159
- package/Alert.mjs +0 -139
- package/ArticleCarousel/_ArticleCarouselCard.cjs +0 -75
- package/ArticleCarousel/_ArticleCarouselCard.mjs +0 -51
- package/ArticleCarousel.cjs +0 -43
- package/ArticleCarousel.mjs +0 -21
- package/ArticleMeta.cjs +0 -46
- package/ArticleMeta.mjs +0 -22
- package/Attention.cjs +0 -33
- package/Attention.mjs +0 -9
- package/BasicTable.cjs +0 -72
- package/BasicTable.mjs +0 -50
- package/Bling.cjs +0 -76
- package/Bling.mjs +0 -52
- package/BlockBreak.cjs +0 -32
- package/BlockBreak.mjs +0 -8
- package/BlockQuote.cjs +0 -47
- package/BlockQuote.mjs +0 -25
- package/BreadCrumbs.cjs +0 -67
- package/BreadCrumbs.mjs +0 -43
- package/ButtonBack.cjs +0 -47
- package/ButtonBack.mjs +0 -25
- package/ButtonBar.cjs +0 -45
- package/ButtonBar.mjs +0 -18
- package/ButtonPrimary.cjs +0 -47
- package/ButtonPrimary.mjs +0 -25
- package/ButtonSecondary.cjs +0 -47
- package/ButtonSecondary.mjs +0 -25
- package/ButtonTertiary.cjs +0 -64
- package/ButtonTertiary.mjs +0 -42
- package/Carousel.cjs +0 -52
- package/Carousel.mjs +0 -30
- package/CarouselStepper.cjs +0 -51
- package/CarouselStepper.mjs +0 -29
- package/CenterColumn.cjs +0 -40
- package/CenterColumn.mjs +0 -16
- package/Checkbox.cjs +0 -52
- package/Checkbox.mjs +0 -30
- package/CheckboxButtonsGroup.cjs +0 -65
- package/CheckboxButtonsGroup.mjs +0 -43
- package/CheckboxGroup.cjs +0 -55
- package/CheckboxGroup.mjs +0 -33
- package/CityBlock.cjs +0 -49
- package/CityBlock.mjs +0 -25
- package/ContactBubble.cjs +0 -200
- package/ContactBubble.mjs +0 -173
- package/ContentArticle.cjs +0 -63
- package/ContentArticle.mjs +0 -41
- package/ContentImage.cjs +0 -58
- package/ContentImage.mjs +0 -36
- package/Datepicker.cjs +0 -164
- package/Datepicker.mjs +0 -142
- package/ExtraLinks.cjs +0 -96
- package/ExtraLinks.mjs +0 -74
- package/FeatureList.cjs +0 -53
- package/FeatureList.mjs +0 -29
- package/FieldGroup.cjs +0 -40
- package/FieldGroup.mjs +0 -16
- package/FileInput.cjs +0 -256
- package/FileInput.mjs +0 -234
- package/Foonote.cjs +0 -30
- package/Foonote.mjs +0 -6
- package/FooterBadges.cjs +0 -49
- package/FooterBadges.mjs +0 -25
- package/FooterInfo.cjs +0 -47
- package/FooterInfo.mjs +0 -23
- package/Footnote.cjs +0 -32
- package/Footnote.mjs +0 -8
- package/Form.cjs +0 -56
- package/Form.mjs +0 -34
- package/FormField.cjs +0 -153
- package/FormField.mjs +0 -131
- package/Gallery/_GalleryItem.cjs +0 -83
- package/Gallery/_GalleryItem.mjs +0 -61
- package/Gallery/_GalleryModal.cjs +0 -104
- package/Gallery/_GalleryModal.mjs +0 -82
- package/Gallery/_GalleryModalContext.cjs +0 -30
- package/Gallery/_GalleryModalContext.mjs +0 -6
- package/Gallery/_GalleryModalItem.cjs +0 -59
- package/Gallery/_GalleryModalItem.mjs +0 -36
- package/Gallery.cjs +0 -79
- package/Gallery.mjs +0 -57
- package/GridBlocks.cjs +0 -81
- package/GridBlocks.mjs +0 -59
- package/Heading.cjs +0 -45
- package/Heading.mjs +0 -21
- package/HeroBlock.cjs +0 -74
- package/HeroBlock.mjs +0 -52
- package/IframeBlock.cjs +0 -48
- package/IframeBlock.mjs +0 -24
- package/Illustration.cjs +0 -51
- package/Illustration.mjs +0 -31
- package/ImageCards.cjs +0 -72
- package/ImageCards.mjs +0 -52
- package/InfoBlock.cjs +0 -51
- package/InfoBlock.mjs +0 -27
- package/InfoHero.cjs +0 -150
- package/InfoHero.mjs +0 -128
- package/IslandBlock.cjs +0 -63
- package/IslandBlock.mjs +0 -41
- package/IslandPageBlock.cjs +0 -49
- package/IslandPageBlock.mjs +0 -25
- package/LabeledTextBlock.cjs +0 -60
- package/LabeledTextBlock.mjs +0 -38
- package/Layout.cjs +0 -113
- package/Layout.mjs +0 -87
- package/MainMenu/_Auxiliary.cjs +0 -54
- package/MainMenu/_Auxiliary.mjs +0 -28
- package/MainMenu/_PrimaryPanel.cjs +0 -74
- package/MainMenu/_PrimaryPanel.mjs +0 -48
- package/MainMenu.cjs +0 -209
- package/MainMenu.mjs +0 -187
- package/MiniMetrics.cjs +0 -56
- package/MiniMetrics.mjs +0 -34
- package/Modal.cjs +0 -70
- package/Modal.mjs +0 -48
- package/NameCard.cjs +0 -115
- package/NameCard.mjs +0 -91
- package/NameCards.cjs +0 -52
- package/NameCards.mjs +0 -30
- package/NewsHero.cjs +0 -136
- package/NewsHero.mjs +0 -114
- package/PageFilter.cjs +0 -48
- package/PageFilter.mjs +0 -24
- package/PageHeading.cjs +0 -42
- package/PageHeading.mjs +0 -18
- package/ProcessOverview.cjs +0 -52
- package/ProcessOverview.mjs +0 -28
- package/PullQuote.cjs +0 -47
- package/PullQuote.mjs +0 -25
- package/RadioButtonsGroup.cjs +0 -64
- package/RadioButtonsGroup.mjs +0 -42
- package/RadioGroup.cjs +0 -58
- package/RadioGroup.mjs +0 -36
- package/RelatedLinks.cjs +0 -61
- package/RelatedLinks.mjs +0 -37
- package/RowBlock.cjs +0 -39
- package/RowBlock.mjs +0 -15
- package/RowBlockColumn.cjs +0 -40
- package/RowBlockColumn.mjs +0 -16
- package/SearchInput.cjs +0 -136
- package/SearchInput.mjs +0 -114
- package/SearchResults/_SearchResultsItem.cjs +0 -54
- package/SearchResults/_SearchResultsItem.mjs +0 -30
- package/SearchResults.cjs +0 -172
- package/SearchResults.mjs +0 -150
- package/SeenEffect.cjs +0 -66
- package/SeenEffect.mjs +0 -44
- package/Selectbox.cjs +0 -144
- package/Selectbox.mjs +0 -122
- package/ShareButtons.cjs +0 -101
- package/ShareButtons.mjs +0 -83
- package/Sharpie.cjs +0 -51
- package/Sharpie.mjs +0 -27
- package/SiteSearchAutocomplete.cjs +0 -150
- package/SiteSearchAutocomplete.mjs +0 -126
- package/SiteSearchCurtain.cjs +0 -78
- package/SiteSearchCurtain.mjs +0 -56
- package/SiteSearchInput.cjs +0 -119
- package/SiteSearchInput.mjs +0 -97
- package/Skeleton.cjs +0 -63
- package/Skeleton.mjs +0 -39
- package/SubHeading.cjs +0 -43
- package/SubHeading.mjs +0 -19
- package/Tabs.cjs +0 -166
- package/Tabs.mjs +0 -144
- package/TagPill.cjs +0 -113
- package/TagPill.mjs +0 -91
- package/TextBlock.cjs +0 -45
- package/TextBlock.mjs +0 -21
- package/TextButton.cjs +0 -55
- package/TextButton.mjs +0 -33
- package/TextInput.cjs +0 -136
- package/TextInput.mjs +0 -114
- package/VSpacer.cjs +0 -70
- package/VSpacer.mjs +0 -46
- package/VerticalTabsTOC.cjs +0 -123
- package/VerticalTabsTOC.mjs +0 -101
- package/WizardLayout.cjs +0 -79
- package/WizardLayout.mjs +0 -55
- package/WizardLayoutClose.cjs +0 -47
- package/WizardLayoutClose.mjs +0 -25
- package/WizardStepper.cjs +0 -55
- package/WizardStepper.mjs +0 -31
- package/_abstract/Button.cjs +0 -114
- package/_abstract/Button.mjs +0 -92
- package/_abstract/CardList.cjs +0 -100
- package/_abstract/CardList.mjs +0 -76
- package/_abstract/Image.cjs +0 -75
- package/_abstract/Image.mjs +0 -51
- package/_abstract/Link.cjs +0 -37
- package/_abstract/Link.mjs +0 -10
- package/_abstract/TogglerGroup.cjs +0 -92
- package/_abstract/TogglerGroup.mjs +0 -70
- package/_abstract/TogglerGroupField.cjs +0 -121
- package/_abstract/TogglerGroupField.mjs +0 -99
- package/_abstract/TogglerInput.cjs +0 -105
- package/_abstract/TogglerInput.mjs +0 -83
- package/_abstract/_AbstractCarousel.cjs +0 -170
- package/_abstract/_AbstractCarousel.mjs +0 -152
- package/_abstract/_Blings.cjs +0 -47
- package/_abstract/_Blings.mjs +0 -23
- package/_abstract/_Block.cjs +0 -73
- package/_abstract/_Block.mjs +0 -51
- package/_abstract/_Quote.cjs +0 -43
- package/_abstract/_Quote.mjs +0 -17
- package/_abstract/breakOnNL.cjs +0 -30
- package/_abstract/breakOnNL.mjs +0 -6
- package/assets.cjs +0 -77
- package/assets.mjs +0 -53
- package/constants.cjs +0 -49
- package/constants.mjs +0 -24
- package/focus-visible.cjs +0 -1
- package/focus-visible.mjs +0 -1
- package/utils/config.cjs +0 -27
- package/utils/config.d.ts +0 -2
- package/utils/config.mjs +0 -4
- package/utils/detectEdgeScroll.cjs +0 -95
- package/utils/detectEdgeScroll.d.ts +0 -52
- package/utils/detectEdgeScroll.mjs +0 -71
- package/utils/env.cjs +0 -31
- package/utils/env.mjs +0 -5
- package/utils/seenEffect.cjs +0 -93
- package/utils/seenEffect.mjs +0 -65
- package/utils/useFormatMonitor.cjs +0 -29
- package/utils/useFormatMonitor.mjs +0 -6
- package/utils/useGetSVGtext.cjs +0 -44
- package/utils/useGetSVGtext.mjs +0 -21
- package/utils/useMenuToggling.cjs +0 -83
- package/utils/useMenuToggling.mjs +0 -60
- package/utils/useScrollbarWidthCSSVar.cjs +0 -32
- package/utils/useScrollbarWidthCSSVar.mjs +0 -6
- package/utils.cjs +0 -18
- package/utils.mjs +0 -2
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TogglerGroupFieldOptions, TogglerGroupFieldProps } from './_abstract/TogglerGroupField';
|
|
2
|
+
export declare type RadioButtonsGroupProps = TogglerGroupFieldProps & {
|
|
3
|
+
value?: string;
|
|
4
|
+
/** @deprecated (Will be removed in v0.9) */
|
|
5
|
+
columns?: '2col' | '3col';
|
|
6
|
+
/** @deprecated (Will be removed in v0.9) */
|
|
7
|
+
layout?: 'slim';
|
|
8
|
+
};
|
|
9
|
+
export declare type RadioButtonsGroupOptions = TogglerGroupFieldOptions;
|
|
10
|
+
declare const RadioButtonsGroup: (props: RadioButtonsGroupProps) => JSX.Element;
|
|
11
|
+
export default RadioButtonsGroup;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import TogglerGroupField from './_abstract/TogglerGroupField';
|
|
3
|
+
import TogglerInput from './_abstract/TogglerInput';
|
|
4
|
+
const RadioButton = (props) => (<TogglerInput {...props} bem="RadioButton" type="radio"/>);
|
|
5
|
+
const RadioButtonsGroup = (props) => {
|
|
6
|
+
if (props.layout) {
|
|
7
|
+
console.warn('`RadioButtonsGroupProps.layout` is deprecated.');
|
|
8
|
+
}
|
|
9
|
+
if (props.columns) {
|
|
10
|
+
console.warn('`RadioButtonsGroupProps.columns` is deprecated.');
|
|
11
|
+
}
|
|
12
|
+
return <TogglerGroupField {...props} bem="RadioButtonsGroup" Toggler={RadioButton}/>;
|
|
13
|
+
};
|
|
14
|
+
export default RadioButtonsGroup;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TogglerGroupFieldOption, TogglerGroupFieldOptions, TogglerGroupFieldProps } from './_abstract/TogglerGroupField';
|
|
2
|
+
import { TogglerInputProps } from './_abstract/TogglerInput';
|
|
3
|
+
export declare type RadioGroupProps = TogglerGroupFieldProps & {
|
|
4
|
+
layout?: 'inline';
|
|
5
|
+
value?: string;
|
|
6
|
+
};
|
|
7
|
+
export declare type RadioGroupOption = TogglerGroupFieldOption;
|
|
8
|
+
export declare type RadioGroupOptions = TogglerGroupFieldOptions;
|
|
9
|
+
declare const RadioGroup: {
|
|
10
|
+
(props: RadioGroupProps): JSX.Element;
|
|
11
|
+
__Radio: (props: TogglerInputProps) => JSX.Element;
|
|
12
|
+
};
|
|
13
|
+
export default RadioGroup;
|
|
@@ -0,0 +1,7 @@
|
|
|
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;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
declare const types: {
|
|
2
|
+
readonly external: 1;
|
|
3
|
+
readonly document: 1;
|
|
4
|
+
readonly pdf: 1;
|
|
5
|
+
readonly link: 0;
|
|
6
|
+
};
|
|
7
|
+
export declare type RelatedLinkType = keyof typeof types;
|
|
8
|
+
export declare type RelatedLinkItem = {
|
|
9
|
+
href: string;
|
|
10
|
+
label: string;
|
|
11
|
+
target?: string;
|
|
12
|
+
type?: RelatedLinkType;
|
|
13
|
+
};
|
|
14
|
+
export declare type RelatedLinksProps = {
|
|
15
|
+
title?: string;
|
|
16
|
+
titleTag?: 'h2' | 'h3' | 'h4' | 'h5';
|
|
17
|
+
links: Array<RelatedLinkItem>;
|
|
18
|
+
};
|
|
19
|
+
declare const RelatedLinks: (props: RelatedLinksProps) => JSX.Element | null;
|
|
20
|
+
export default RelatedLinks;
|
|
@@ -0,0 +1,30 @@
|
|
|
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;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { BemPropsModifier } from '@hugsmidjan/react/types';
|
|
3
|
+
import { SeenProp } from './utils/seenEffect';
|
|
4
|
+
export declare type RowBlockProps = {
|
|
5
|
+
/** Float the first RowBlockColumn to the right on larger screens. */
|
|
6
|
+
right?: boolean;
|
|
7
|
+
/** Custom **additional** class-name */
|
|
8
|
+
className?: string;
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
} & BemPropsModifier & SeenProp;
|
|
11
|
+
declare const RowBlock: (props: RowBlockProps) => JSX.Element;
|
|
12
|
+
export default RowBlock;
|
package/esm/RowBlock.jsx
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
3
|
+
import { useSeenEffect } from './utils/seenEffect';
|
|
4
|
+
const RowBlock = (props) => {
|
|
5
|
+
const { right, modifier, className, children, startSeen } = props;
|
|
6
|
+
const [ref] = useSeenEffect(startSeen);
|
|
7
|
+
return (<div className={getBemClass('RowBlock', [modifier, right && 'align--right'], className)} ref={ref}>
|
|
8
|
+
{children}
|
|
9
|
+
</div>);
|
|
10
|
+
};
|
|
11
|
+
export default RowBlock;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export declare type RowBlockColumnProps = {
|
|
3
|
+
background?: boolean | 'primary';
|
|
4
|
+
narrow?: boolean;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
};
|
|
7
|
+
declare const RowBlockColumn: (props: RowBlockColumnProps) => JSX.Element;
|
|
8
|
+
export default RowBlockColumn;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
3
|
+
const RowBlockColumn = (props) => {
|
|
4
|
+
const { background, narrow, children } = props;
|
|
5
|
+
return (<div className={getBemClass('RowBlockColumn', [
|
|
6
|
+
narrow && 'narrow',
|
|
7
|
+
background && 'background',
|
|
8
|
+
background === 'primary' && 'background--primary',
|
|
9
|
+
])}>
|
|
10
|
+
{children}
|
|
11
|
+
</div>);
|
|
12
|
+
};
|
|
13
|
+
export default RowBlockColumn;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RefObject } from 'react';
|
|
2
|
+
import { FormFieldWrappingProps } from './FormField';
|
|
3
|
+
declare type InputElmProps = JSX.IntrinsicElements['input'];
|
|
4
|
+
declare type BaseProps<Type extends {
|
|
5
|
+
type?: string;
|
|
6
|
+
}, InputProps extends object> = {
|
|
7
|
+
small?: boolean;
|
|
8
|
+
children?: undefined;
|
|
9
|
+
onButtonClick?: () => void;
|
|
10
|
+
buttonText?: string;
|
|
11
|
+
inputRef?: RefObject<HTMLInputElement>;
|
|
12
|
+
buttonRef?: RefObject<HTMLButtonElement>;
|
|
13
|
+
} & Type & FormFieldWrappingProps & InputProps;
|
|
14
|
+
export declare type SearchInputProps = BaseProps<{
|
|
15
|
+
type?: 'text';
|
|
16
|
+
}, InputElmProps>;
|
|
17
|
+
declare const SearchInput: (props: SearchInputProps) => JSX.Element;
|
|
18
|
+
export default SearchInput;
|
|
@@ -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 SearchInput = (props) => {
|
|
16
|
+
var _a;
|
|
17
|
+
const { className, label, assistText, hideLabel, disabled, readOnly, invalid, errorMessage, required, reqText, id, onChange, small, onButtonClick, buttonText = 'Leita', ssr } = props, inputElementProps = __rest(props, ["className", "label", "assistText", "hideLabel", "disabled", "readOnly", "invalid", "errorMessage", "required", "reqText", "id", "onChange", "small", "onButtonClick", "buttonText", "ssr"]);
|
|
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 _onChange = value != null
|
|
23
|
+
? onChange
|
|
24
|
+
: (e) => {
|
|
25
|
+
setHasValue(!!e.target.value);
|
|
26
|
+
onChange && onChange(e);
|
|
27
|
+
};
|
|
28
|
+
return (<FormField className={getBemClass('SearchInput', [], 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) => (<div className={className.input} {...addFocusProps()}>
|
|
29
|
+
<input className="SearchInput__input" onChange={_onChange} {...inputProps} {...inputElementProps} ref={props.inputRef}/>{' '}
|
|
30
|
+
{onButtonClick && (<button className="SearchInput__button" type="button" onClick={onButtonClick} title={buttonText} ref={props.buttonRef}>
|
|
31
|
+
{buttonText}
|
|
32
|
+
</button>)}
|
|
33
|
+
</div>)}/>);
|
|
34
|
+
};
|
|
35
|
+
export default SearchInput;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare type MetaValue = string | (() => JSX.Element | string | number);
|
|
2
|
+
export declare type SearchResultsItemProps = {
|
|
3
|
+
/** Plain text title */
|
|
4
|
+
title: string;
|
|
5
|
+
/** Simple HTML-encoded summary (excluding any layout) */
|
|
6
|
+
summary: string;
|
|
7
|
+
href: string;
|
|
8
|
+
meta?: MetaValue | ReadonlyArray<MetaValue>;
|
|
9
|
+
/**
|
|
10
|
+
* URL to the image to display with the result item.
|
|
11
|
+
* Should ideally be approximately 600-700px wide
|
|
12
|
+
*/
|
|
13
|
+
image?: string;
|
|
14
|
+
/** Should this search-result item be displayed as a "major"/"main" result at the top */
|
|
15
|
+
highlight?: boolean;
|
|
16
|
+
};
|
|
17
|
+
declare const SearchResultsItem: (props: SearchResultsItemProps) => JSX.Element;
|
|
18
|
+
export default SearchResultsItem;
|
|
@@ -0,0 +1,19 @@
|
|
|
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;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SearchResultsItemProps } from './SearchResults/_SearchResultsItem';
|
|
3
|
+
export declare type SearchReesultI18n = {
|
|
4
|
+
lang: string;
|
|
5
|
+
loadQueryTitle: string;
|
|
6
|
+
resultsTitle: string;
|
|
7
|
+
noResultsTitle: string;
|
|
8
|
+
loadMore: string;
|
|
9
|
+
};
|
|
10
|
+
export declare type SearchStatus = 'loadingquery' | 'loadingfilter' | 'error' | 'results' | 'loadingmore';
|
|
11
|
+
export declare type SearchResultsFilter = {
|
|
12
|
+
label: string;
|
|
13
|
+
count?: number;
|
|
14
|
+
};
|
|
15
|
+
export type { SearchResultsItemProps } from './SearchResults/_SearchResultsItem';
|
|
16
|
+
export declare type SearchResultsProps = {
|
|
17
|
+
totalHits?: number;
|
|
18
|
+
hits?: number;
|
|
19
|
+
query?: string;
|
|
20
|
+
items?: Array<SearchResultsItemProps>;
|
|
21
|
+
filters?: Array<SearchResultsFilter>;
|
|
22
|
+
activeFilterIdx?: number;
|
|
23
|
+
setFilter?: (activeTab: number) => void;
|
|
24
|
+
status: SearchStatus;
|
|
25
|
+
errorText?: string | ReactNode;
|
|
26
|
+
pageSize: number;
|
|
27
|
+
pages?: number;
|
|
28
|
+
loadMore?: () => void;
|
|
29
|
+
texts?: SearchReesultI18n;
|
|
30
|
+
lang?: string;
|
|
31
|
+
};
|
|
32
|
+
declare const SearchResults: (props: SearchResultsProps) => JSX.Element;
|
|
33
|
+
export default SearchResults;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { useInView } from 'react-intersection-observer';
|
|
3
|
+
import { prettyNum } from '@hugsmidjan/qj/prettyNum';
|
|
4
|
+
import range from '@hugsmidjan/qj/range';
|
|
5
|
+
import { useDomid } from '@hugsmidjan/react/hooks';
|
|
6
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
7
|
+
import { DEFAULT_LANG, getTexts } from '@reykjavik/hanna-utils/i18n';
|
|
8
|
+
import SearchResultsItem from './SearchResults/_SearchResultsItem';
|
|
9
|
+
import Alert from './Alert';
|
|
10
|
+
import Tabs from './Tabs';
|
|
11
|
+
const renderDefaultErrorText = () => (<>
|
|
12
|
+
Úps, það hefur komið upp villa. Má bjóða þér að prófa aftur að leita?
|
|
13
|
+
<br />
|
|
14
|
+
Ef ekkert lát er á villunni þá kunnum við að meta að þú látir okkur vita.
|
|
15
|
+
</>);
|
|
16
|
+
const defaultTexts = {
|
|
17
|
+
en: {
|
|
18
|
+
lang: 'en',
|
|
19
|
+
loadQueryTitle: 'Loading results...',
|
|
20
|
+
resultsTitle: 'results found for',
|
|
21
|
+
noResultsTitle: 'No results were found for',
|
|
22
|
+
loadMore: 'Load more',
|
|
23
|
+
// loadingMore: 'Loading...',
|
|
24
|
+
},
|
|
25
|
+
is: {
|
|
26
|
+
lang: 'is',
|
|
27
|
+
loadQueryTitle: 'Sæki niðurstöður...',
|
|
28
|
+
resultsTitle: 'leitarniðurstöður fyrir',
|
|
29
|
+
noResultsTitle: 'Engar leitarniðurstöður fundust fyrir',
|
|
30
|
+
loadMore: 'Sækja fleiri',
|
|
31
|
+
// loadingMore: 'Sæki fleiri...',
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const SearchResults_Tabs = (props) => {
|
|
35
|
+
const { domid, filters, activeIdx, setFilter, lang } = props;
|
|
36
|
+
const tabs = useMemo(() => (filters || []).map(({ label, count }) => ({
|
|
37
|
+
label,
|
|
38
|
+
badge: prettyNum(count, { lang }),
|
|
39
|
+
})), [filters, lang]);
|
|
40
|
+
return tabs.length ? (<Tabs role="tablist" aria-controls={domid} tabs={tabs} activeIdx={activeIdx || 0} onSetActive={(i) => setFilter && setFilter(i)}/>) : null;
|
|
41
|
+
};
|
|
42
|
+
const LoadingScaffold = (props) => props.count ? (<ol className="SearchResults__list SearchResults__list--loading">
|
|
43
|
+
{range(1, props.count).map((item, i) => (<SearchResultsItem key={i} title="..." summary="" href=""/>))}
|
|
44
|
+
</ol>) : null;
|
|
45
|
+
// ===========================================================================
|
|
46
|
+
const NUM_AUTOLOADS = 2;
|
|
47
|
+
const SearchResults__loadmore = (props) => {
|
|
48
|
+
const { status, hits, numItems, loadMore, pageSize, texts } = props;
|
|
49
|
+
const { lang } = texts;
|
|
50
|
+
const moreCount = (hits || 0) - (numItems || 0);
|
|
51
|
+
const autoLoadCount = useRef(0);
|
|
52
|
+
const skip = !loadMore || autoLoadCount.current >= NUM_AUTOLOADS;
|
|
53
|
+
const [refFn, theEndIsNigh] = useInView({
|
|
54
|
+
rootMargin: '150px 0px 0px 0px',
|
|
55
|
+
skip, // disable after two clicks
|
|
56
|
+
});
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (theEndIsNigh && loadMore) {
|
|
59
|
+
autoLoadCount.current = autoLoadCount.current + 1;
|
|
60
|
+
loadMore();
|
|
61
|
+
}
|
|
62
|
+
}, [theEndIsNigh, loadMore]);
|
|
63
|
+
const moreAvailable = status === 'results' && moreCount && loadMore;
|
|
64
|
+
return status === 'loadingmore' ? (<LoadingScaffold count={Math.min(pageSize, moreCount)}/>) : moreAvailable ? (<button ref={refFn} className="SearchResults__loadmore" type="button" onClick={loadMore}>
|
|
65
|
+
{texts.loadMore}{' '}
|
|
66
|
+
<span className="SearchResults__loadmore__count">
|
|
67
|
+
({prettyNum(moreCount, { lang })})
|
|
68
|
+
</span>
|
|
69
|
+
</button>) : null;
|
|
70
|
+
};
|
|
71
|
+
// ===========================================================================
|
|
72
|
+
const renderTitle = (props, texts) => {
|
|
73
|
+
const { status, totalHits, query } = props;
|
|
74
|
+
const lang = texts.lang || props.lang || DEFAULT_LANG;
|
|
75
|
+
return (<h2 className="SearchResults__title">
|
|
76
|
+
{status === 'loadingquery'
|
|
77
|
+
? texts.loadQueryTitle
|
|
78
|
+
: totalHits
|
|
79
|
+
? prettyNum(totalHits, { lang: lang }) +
|
|
80
|
+
' ' +
|
|
81
|
+
texts.resultsTitle
|
|
82
|
+
: texts.noResultsTitle}
|
|
83
|
+
<span className="SearchResults__query">{query}</span>
|
|
84
|
+
</h2>);
|
|
85
|
+
};
|
|
86
|
+
// ---------------------------------------------------------------------------
|
|
87
|
+
const renderResults = (props) => {
|
|
88
|
+
const { status, pageSize, items, hits } = props;
|
|
89
|
+
if (status === 'loadingquery' || status === 'loadingfilter') {
|
|
90
|
+
return <LoadingScaffold count={Math.min(pageSize, hits || 999)}/>;
|
|
91
|
+
}
|
|
92
|
+
return items && items.length ? (<ol className="SearchResults__list">
|
|
93
|
+
{items.map((item, i) => (<SearchResultsItem key={i} {...item}/>))}
|
|
94
|
+
</ol>) : null;
|
|
95
|
+
};
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
const renderLoadMore = (props, texts) => {
|
|
98
|
+
const { hits, items, status, pageSize, loadMore } = props;
|
|
99
|
+
return (<SearchResults__loadmore hits={hits} numItems={items && items.length} status={status} pageSize={pageSize} loadMore={loadMore} texts={texts}/>);
|
|
100
|
+
};
|
|
101
|
+
// TODO: add plural translation thingy for result string
|
|
102
|
+
const SearchResults = (props) => {
|
|
103
|
+
const { filters, activeFilterIdx, setFilter, status, errorText } = props;
|
|
104
|
+
const texts = getTexts(props, defaultTexts);
|
|
105
|
+
const domid = useDomid();
|
|
106
|
+
return (<div className={getBemClass('SearchResults', status !== 'results' && status)}>
|
|
107
|
+
{renderTitle(props, texts)}
|
|
108
|
+
|
|
109
|
+
<SearchResults_Tabs domid={domid} filters={filters} activeIdx={activeFilterIdx} setFilter={setFilter} lang={texts.lang}/>
|
|
110
|
+
|
|
111
|
+
<div className="SearchResults__results" id={domid}>
|
|
112
|
+
{renderResults(props)}
|
|
113
|
+
{status === 'error' && (<Alert type="error">{errorText || renderDefaultErrorText()}</Alert>)}
|
|
114
|
+
{renderLoadMore(props, texts)}
|
|
115
|
+
</div>
|
|
116
|
+
</div>);
|
|
117
|
+
};
|
|
118
|
+
export default SearchResults;
|
|
@@ -0,0 +1,19 @@
|
|
|
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 { getEffectAttr, useSeenEffect } from './utils/seenEffect';
|
|
14
|
+
const SeenEffect = (props) => {
|
|
15
|
+
const { effectType, startSeen } = props, divProps = __rest(props, ["effectType", "startSeen"]);
|
|
16
|
+
const [ref] = useSeenEffect(startSeen);
|
|
17
|
+
return <div {...divProps} ref={ref} {...getEffectAttr(effectType)}/>;
|
|
18
|
+
};
|
|
19
|
+
export default SeenEffect;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SelectboxProps as _SelectboxProps } from '@hugsmidjan/react/Selectbox';
|
|
2
|
+
import { FormFieldWrappingProps } from './FormField';
|
|
3
|
+
export declare type SelectboxProps = FormFieldWrappingProps & Omit<_SelectboxProps, 'bem'> & {
|
|
4
|
+
small?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type { SelectboxOptions } from '@hugsmidjan/react/Selectbox';
|
|
7
|
+
declare const Selectbox: (props: SelectboxProps) => JSX.Element;
|
|
8
|
+
export default Selectbox;
|
|
@@ -0,0 +1,46 @@
|
|
|
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, { useEffect, useRef, useState } from 'react';
|
|
13
|
+
import _Selectbox from '@hugsmidjan/react/Selectbox';
|
|
14
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
15
|
+
import FormField from './FormField';
|
|
16
|
+
const getValue = (opt) => {
|
|
17
|
+
const val = typeof opt === 'object' ? opt.value : opt;
|
|
18
|
+
return typeof val === 'number' ? String(val) : val;
|
|
19
|
+
};
|
|
20
|
+
const Selectbox = (props) => {
|
|
21
|
+
var _a;
|
|
22
|
+
const { className, label, assistText, hideLabel, disabled, readOnly, reqText, invalid, errorMessage, required, id, ssr, onChange, small } = props, selectProps = __rest(props, ["className", "label", "assistText", "hideLabel", "disabled", "readOnly", "reqText", "invalid", "errorMessage", "required", "id", "ssr", "onChange", "small"]);
|
|
23
|
+
const { value, defaultValue, placeholder, options } = selectProps;
|
|
24
|
+
const _selectRef = useRef(null);
|
|
25
|
+
const selectRef = selectProps.selectRef || _selectRef;
|
|
26
|
+
const getInitialValue = () => { var _a; return (_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : getValue(options[0]); };
|
|
27
|
+
const [isFilled, setIsFilled] = useState(() => !!getInitialValue());
|
|
28
|
+
const [isEmpty, setIsEmpty] = useState(() => !getInitialValue() && !placeholder);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
var _a;
|
|
31
|
+
const selectElm = selectRef.current;
|
|
32
|
+
if (selectElm) {
|
|
33
|
+
setIsFilled(!!selectElm.value);
|
|
34
|
+
setIsEmpty(!((_a = selectElm.selectedOptions[0]) === null || _a === void 0 ? void 0 : _a.text));
|
|
35
|
+
}
|
|
36
|
+
}, [(_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.value]);
|
|
37
|
+
const _onChange = (e) => {
|
|
38
|
+
var _a;
|
|
39
|
+
const selectElm = e.currentTarget;
|
|
40
|
+
setIsFilled(!!selectElm.value);
|
|
41
|
+
setIsEmpty(!((_a = selectElm.selectedOptions[0]) === null || _a === void 0 ? void 0 : _a.text));
|
|
42
|
+
onChange && onChange(e);
|
|
43
|
+
};
|
|
44
|
+
return (<FormField className={getBemClass('Selectbox', null, className)} ssr={ssr} small={small} label={label} empty={isEmpty} filled={isFilled} assistText={assistText} hideLabel={hideLabel} disabled={disabled} readOnly={readOnly} invalid={invalid} errorMessage={errorMessage} required={required} reqText={reqText} id={id} renderInput={(className, inputProps, addFocusProps) => (<_Selectbox bem={className.input} ssr={ssr} onChange={_onChange} {...inputProps} {...addFocusProps(selectProps)} selectRef={selectRef}/>)}/>);
|
|
45
|
+
};
|
|
46
|
+
export default Selectbox;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { SSRSupport } from '@hugsmidjan/react/hooks';
|
|
2
|
+
import { ShareButtonI18n, ShareButtonPlatforms } from '@reykjavik/hanna-utils/shareButtonsUtils';
|
|
3
|
+
export declare type ShareButtonsProps = {
|
|
4
|
+
ssr?: SSRSupport;
|
|
5
|
+
children?: undefined;
|
|
6
|
+
texts?: Readonly<ShareButtonI18n>;
|
|
7
|
+
} & Partial<Record<ShareButtonPlatforms, boolean>>;
|
|
8
|
+
declare const ShareButtons: (props: ShareButtonsProps) => JSX.Element | null;
|
|
9
|
+
export default ShareButtons;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
|
+
import { getDocMeta, getShareButtonLabel, i18n, openInPopup, shareButtonTypes, } from '@reykjavik/hanna-utils/shareButtonsUtils';
|
|
3
|
+
import { Link } from './_abstract/Link';
|
|
4
|
+
const generateTypeList = (facebook, twitter, linkedin, email) => {
|
|
5
|
+
const listStr = ((facebook ? 'facebook,' : '') +
|
|
6
|
+
(twitter ? 'twitter,' : '') +
|
|
7
|
+
(linkedin ? 'linkedin,' : '') +
|
|
8
|
+
(email ? 'email,' : '')).slice(0, -1);
|
|
9
|
+
return (listStr !== 'facebook,twitter' && listStr) || undefined;
|
|
10
|
+
};
|
|
11
|
+
// FIXME: see other FIXME below for details
|
|
12
|
+
// TODO: Also figure out if/why the truthyness of document.location would be in doubt here
|
|
13
|
+
const docLoc = typeof document !== 'undefined' ? document.location : { href: undefined };
|
|
14
|
+
const ShareButtons__item = (props) => {
|
|
15
|
+
const { label, type, href } = props;
|
|
16
|
+
const buttonText = getShareButtonLabel(type, label);
|
|
17
|
+
const popup = type !== 'email';
|
|
18
|
+
return (<li className="ShareButtons__item">
|
|
19
|
+
<Link className={'ShareButtons__link ShareButtons__link--' + type} href={href} title={buttonText} rel="noopener noreferrer" target={popup ? '_blank' : undefined} onClick={popup ? openInPopup : undefined}>
|
|
20
|
+
{buttonText}
|
|
21
|
+
</Link>
|
|
22
|
+
</li>);
|
|
23
|
+
};
|
|
24
|
+
const ShareButtons = (props) => {
|
|
25
|
+
const { texts, ssr, facebook = true, twitter = true, linkedin, email, } = props;
|
|
26
|
+
const [docMeta, setDocMeta] = useState();
|
|
27
|
+
const href = docLoc.href; // assign to local variable to silence `react-hooks/exhaustive-deps`
|
|
28
|
+
useEffect(() => {
|
|
29
|
+
// FIXME: Drop dependency on _loc.href and set up proper
|
|
30
|
+
// location/route monitoring event handler, with unsubscribe on unmount
|
|
31
|
+
const { emailSubject } = texts || {};
|
|
32
|
+
setDocMeta(getDocMeta({ emailSubject }));
|
|
33
|
+
}, [texts, href]);
|
|
34
|
+
if (!facebook && !twitter && !linkedin && !email) {
|
|
35
|
+
// no place to share
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const txt = texts || (docMeta && i18n[docMeta.lang]) || {};
|
|
39
|
+
const { label, buttonLabel } = txt;
|
|
40
|
+
if (!docMeta || ssr === 'ssr-only') {
|
|
41
|
+
// Generate SSR markup for hanna-sprinkles to pick up on.
|
|
42
|
+
return (<div className="ShareButtons" data-button-types={generateTypeList(facebook, twitter, linkedin, email)} data-label={label} data-buttonlabel={buttonLabel} data-emailsubject={txt.emailSubject || undefined}/>);
|
|
43
|
+
}
|
|
44
|
+
const showTypes = {
|
|
45
|
+
facebook,
|
|
46
|
+
twitter,
|
|
47
|
+
linkedin,
|
|
48
|
+
email,
|
|
49
|
+
};
|
|
50
|
+
return (<div className="ShareButtons" aria-label={label} data-sprinkled="true">
|
|
51
|
+
{label && <strong className="ShareButtons__label">{label}</strong>}
|
|
52
|
+
<ul className="ShareButtons__list">
|
|
53
|
+
{shareButtonTypes.map((type) => showTypes[type] && (<ShareButtons__item key={type} type={type} label={buttonLabel || ''} href={docMeta.hrefs[type]}/>))}
|
|
54
|
+
</ul>
|
|
55
|
+
</div>);
|
|
56
|
+
};
|
|
57
|
+
export default ShareButtons;
|
package/esm/Sharpie.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
declare const colors: {
|
|
3
|
+
green: number;
|
|
4
|
+
red: number;
|
|
5
|
+
};
|
|
6
|
+
declare type SharpieColor = keyof typeof colors;
|
|
7
|
+
declare const tags: {
|
|
8
|
+
span: number;
|
|
9
|
+
strong: number;
|
|
10
|
+
em: number;
|
|
11
|
+
b: number;
|
|
12
|
+
i: number;
|
|
13
|
+
u: number;
|
|
14
|
+
s: number;
|
|
15
|
+
};
|
|
16
|
+
declare type SharpieTag = keyof typeof tags;
|
|
17
|
+
export declare type SharpieProps = {
|
|
18
|
+
color: SharpieColor;
|
|
19
|
+
tag?: SharpieTag;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
};
|
|
22
|
+
declare const Sharpie: (props: SharpieProps) => JSX.Element;
|
|
23
|
+
export default Sharpie;
|
package/esm/Sharpie.jsx
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
3
|
+
const colors = {
|
|
4
|
+
green: 1,
|
|
5
|
+
red: 1,
|
|
6
|
+
};
|
|
7
|
+
const tags = {
|
|
8
|
+
span: 1,
|
|
9
|
+
strong: 1,
|
|
10
|
+
em: 1,
|
|
11
|
+
b: 1,
|
|
12
|
+
i: 1,
|
|
13
|
+
u: 1,
|
|
14
|
+
s: 1,
|
|
15
|
+
};
|
|
16
|
+
const Sharpie = (props) => {
|
|
17
|
+
const { color, tag, children } = props;
|
|
18
|
+
const colorModifier = colors[color] ? color : 'green';
|
|
19
|
+
const Tag = tag && tags[tag] ? tag : 'span';
|
|
20
|
+
return <Tag className={getBemClass('Sharpie', colorModifier)}>{children}</Tag>;
|
|
21
|
+
};
|
|
22
|
+
export default Sharpie;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import Autosuggest, { RenderSuggestion } from 'react-autosuggest';
|
|
3
|
+
import { BemProps } from '@hugsmidjan/react/types';
|
|
4
|
+
import { DefaultTexts } from '@reykjavik/hanna-utils/i18n';
|
|
5
|
+
export declare type SiteSearchACI18n = {
|
|
6
|
+
lang?: string;
|
|
7
|
+
/** Label for the autocomplete's combobox container div */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Label for the text input */
|
|
10
|
+
inputLabel: string;
|
|
11
|
+
/** Placeholder text for the text input */
|
|
12
|
+
placeholder?: string;
|
|
13
|
+
/** Label for the suggestions item list container */
|
|
14
|
+
suggestionsLabel: string;
|
|
15
|
+
};
|
|
16
|
+
export declare const defaultSiteSearchACTexts: DefaultTexts<SiteSearchACI18n>;
|
|
17
|
+
export declare type SiteSearchAutocompleteProps<T> = {
|
|
18
|
+
suggestions: Array<T>;
|
|
19
|
+
renderSuggestion: RenderSuggestion<T>;
|
|
20
|
+
setSuggestions: (suggestions: Array<T>) => void;
|
|
21
|
+
getSuggestionValue: (suggestion: T) => string;
|
|
22
|
+
onSuggestionsFetchRequested: (request: Autosuggest.SuggestionsFetchRequestedParams) => void;
|
|
23
|
+
onSuggestionSelected?: (event: React.FormEvent<HTMLElement>, data: Autosuggest.SuggestionSelectedEventData<T>) => void;
|
|
24
|
+
onSuggestionHighlighted?: (params: {
|
|
25
|
+
suggestion: T;
|
|
26
|
+
}) => void;
|
|
27
|
+
/** Triggered when user hits ENTER key with the focus inside the input field */
|
|
28
|
+
onSubmit?: (value: string) => void;
|
|
29
|
+
/** Custom action to perform when the user clicks the search button
|
|
30
|
+
*
|
|
31
|
+
* Defaults to `onSubmit`
|
|
32
|
+
*/
|
|
33
|
+
onButtonClick?: (value: string) => void;
|
|
34
|
+
lang?: string;
|
|
35
|
+
texts?: SiteSearchACI18n;
|
|
36
|
+
/** @deprecated Use `text` prop instead (will be removed in v0.11) */
|
|
37
|
+
label?: string;
|
|
38
|
+
} & BemProps;
|
|
39
|
+
declare const SiteSearchAutocomplete: <T>(props: SiteSearchAutocompleteProps<T>) => JSX.Element;
|
|
40
|
+
export default SiteSearchAutocomplete;
|