@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
package/esm/VSpacer.jsx
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
3
|
+
const sizes = {
|
|
4
|
+
none: 'none',
|
|
5
|
+
small: 'small',
|
|
6
|
+
default: '',
|
|
7
|
+
medium: '',
|
|
8
|
+
large: 'large',
|
|
9
|
+
xlarge: 'xlarge',
|
|
10
|
+
};
|
|
11
|
+
const hasChildren = (children) => (children && !(Array.isArray(children) && !children.length)) || undefined;
|
|
12
|
+
const normalizeProp = (value, exclude) => value && value !== exclude ? sizes[value] : undefined;
|
|
13
|
+
const VSpacer = (props) => {
|
|
14
|
+
const { size, top, bottom, children } = props;
|
|
15
|
+
const isWrapper = hasChildren(children);
|
|
16
|
+
let topVal = normalizeProp(isWrapper && top);
|
|
17
|
+
let bottomVal = normalizeProp(isWrapper && bottom);
|
|
18
|
+
let sizeVal = !(topVal && bottomVal) && normalizeProp(size, 'none');
|
|
19
|
+
// collapse effectively-duplicate class modifiers
|
|
20
|
+
if (!sizeVal && topVal === bottomVal && topVal !== 'none') {
|
|
21
|
+
sizeVal = topVal;
|
|
22
|
+
topVal = bottomVal = undefined;
|
|
23
|
+
}
|
|
24
|
+
else if (sizeVal) {
|
|
25
|
+
if (sizeVal === topVal) {
|
|
26
|
+
sizeVal = topVal;
|
|
27
|
+
topVal = undefined;
|
|
28
|
+
}
|
|
29
|
+
if (sizeVal === bottomVal) {
|
|
30
|
+
sizeVal = bottomVal;
|
|
31
|
+
bottomVal = undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const className = getBemClass('VSpacer', [
|
|
35
|
+
sizeVal,
|
|
36
|
+
topVal && 'top--' + topVal,
|
|
37
|
+
bottomVal && 'bottom--' + bottomVal,
|
|
38
|
+
]);
|
|
39
|
+
return isWrapper ? (<div className={className}>{children}</div>) : (<hr className={className}/>);
|
|
40
|
+
};
|
|
41
|
+
export default VSpacer;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { TabItemProps, TabsProps } from './Tabs';
|
|
2
|
+
export declare type VerticalTabsTOCItem = TabItemProps & {
|
|
3
|
+
items?: Array<VerticalTabsTOCSubItem>;
|
|
4
|
+
};
|
|
5
|
+
export declare type VerticalTabsTOCSubItem = TabItemProps & {
|
|
6
|
+
type?: never;
|
|
7
|
+
href: string;
|
|
8
|
+
};
|
|
9
|
+
export declare type VerticalTabsTOCProps = {
|
|
10
|
+
items: Array<VerticalTabsTOCItem>;
|
|
11
|
+
onItemSelect: (itemId: string) => void;
|
|
12
|
+
} & Pick<TabsProps, 'aria-label' | 'ssr' | 'activateOnFocus' | 'id' | 'startSeen'>;
|
|
13
|
+
declare const VerticalTabsTOC: (props: VerticalTabsTOCProps) => JSX.Element;
|
|
14
|
+
export default VerticalTabsTOC;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { setFrag } from '@hugsmidjan/qj/frag';
|
|
3
|
+
import { useDomid } from '@hugsmidjan/react/hooks';
|
|
4
|
+
import Tabs from './Tabs';
|
|
5
|
+
const getId = (url) => (url && decodeURIComponent(url.split('#')[1] || '')) || '';
|
|
6
|
+
const getItemId = (item) => getId(item && item.href);
|
|
7
|
+
const mapToItemsById = (items, domid) => {
|
|
8
|
+
const updatedItems = items.map((item) => {
|
|
9
|
+
return Object.assign(Object.assign({}, item), { 'aria-controls': item['aria-controls'] || domid });
|
|
10
|
+
});
|
|
11
|
+
const itemsById = {};
|
|
12
|
+
updatedItems.forEach((topItem, activeIdx) => {
|
|
13
|
+
const subItems = topItem.items;
|
|
14
|
+
if (!subItems) {
|
|
15
|
+
const itemId = getItemId(topItem);
|
|
16
|
+
itemsById[itemId] = { activeIdx };
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
subItems.forEach((subItem, idx) => {
|
|
20
|
+
itemsById[getItemId(subItem)] = {
|
|
21
|
+
activeIdx,
|
|
22
|
+
subTabs: {
|
|
23
|
+
activeIdx: idx,
|
|
24
|
+
'aria-label': topItem.longLabel || topItem.label,
|
|
25
|
+
id: topItem['aria-controls'],
|
|
26
|
+
tabs: subItems,
|
|
27
|
+
onSetActive: (_, item) => {
|
|
28
|
+
const newId = getItemId(item);
|
|
29
|
+
setFrag(newId);
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
if (idx === 0) {
|
|
34
|
+
topItem.href = topItem.href || '#' + getItemId(subItem);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
return { itemsById, updatedItems };
|
|
39
|
+
};
|
|
40
|
+
const VerticalTabsTOC = (props) => {
|
|
41
|
+
const { onItemSelect, items } = props;
|
|
42
|
+
const _domid = useDomid();
|
|
43
|
+
const domid = props.id || _domid;
|
|
44
|
+
const { itemsById, updatedItems } = useMemo(() => mapToItemsById(items, domid), [items, domid]);
|
|
45
|
+
const [state, setState] = useState(() => {
|
|
46
|
+
const initialId = typeof location !== 'undefined' ? getId(location.hash) : '';
|
|
47
|
+
return itemsById[initialId] || itemsById[getItemId(updatedItems[0])] || {};
|
|
48
|
+
});
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
const handleHash = () => {
|
|
51
|
+
const newId = getId(location.href);
|
|
52
|
+
const newState = itemsById[newId];
|
|
53
|
+
if (newState) {
|
|
54
|
+
setState(newState);
|
|
55
|
+
onItemSelect(newId);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
window.addEventListener('hashchange', handleHash);
|
|
59
|
+
return () => window.removeEventListener('hashchange', handleHash);
|
|
60
|
+
}, [itemsById, onItemSelect]);
|
|
61
|
+
return (<Tabs id={domid} vertical aria-label={props['aria-label']} onSetActive={(_, item) => {
|
|
62
|
+
var _a;
|
|
63
|
+
const itemId = getItemId(item);
|
|
64
|
+
const newId = itemId || getItemId((_a = itemsById[itemId].subTabs) === null || _a === void 0 ? void 0 : _a.tabs[0]);
|
|
65
|
+
setFrag(newId);
|
|
66
|
+
}} tabs={updatedItems} role="tablist" activeIdx={state.activeIdx} subTabs={state.subTabs}/>);
|
|
67
|
+
};
|
|
68
|
+
export default VerticalTabsTOC;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { SSRSupport } from '@hugsmidjan/react/hooks';
|
|
3
|
+
import { HannaColorTheme } from '@reykjavik/hanna-css';
|
|
4
|
+
declare type WizardLayoutProps = {
|
|
5
|
+
wizardStepper?: ReactNode;
|
|
6
|
+
wizardFooter?: ReactNode;
|
|
7
|
+
colorTheme?: HannaColorTheme;
|
|
8
|
+
siteName?: string;
|
|
9
|
+
logoLink?: string;
|
|
10
|
+
globalAlerts?: ReactNode;
|
|
11
|
+
ssr?: SSRSupport;
|
|
12
|
+
children?: ReactNode;
|
|
13
|
+
};
|
|
14
|
+
declare const WizardLayout: (props: WizardLayoutProps) => JSX.Element;
|
|
15
|
+
export default WizardLayout;
|
|
@@ -0,0 +1,39 @@
|
|
|
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;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export declare type WizardStepperStep = {
|
|
2
|
+
label: string;
|
|
3
|
+
/**
|
|
4
|
+
* Should the step be clickable?
|
|
5
|
+
*
|
|
6
|
+
* * `true` = The items becomes clickable as allowed by the `activeStep`,
|
|
7
|
+
* `disableBacktrack` and `allowForwardSkip` props.
|
|
8
|
+
* * `false | undefined` = Never clickable, regardless of `activeStep`.
|
|
9
|
+
* * `"always"` = Always clickable regardless of `activeStep` or other props.
|
|
10
|
+
*/
|
|
11
|
+
clickable?: boolean | 'always';
|
|
12
|
+
/**
|
|
13
|
+
* Flags the item as having a non-default done state
|
|
14
|
+
*
|
|
15
|
+
* * `undefined` = automatically set "done" on items before `activeStep`
|
|
16
|
+
* * `true` = Always flag as "done", regardless of `activeStep`
|
|
17
|
+
* * `false` = Never flag as "done", regardless of `activeStep`
|
|
18
|
+
*/
|
|
19
|
+
done?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Flags the step as not part of the numbering scheme
|
|
22
|
+
*/
|
|
23
|
+
neutral?: boolean;
|
|
24
|
+
};
|
|
25
|
+
export declare type WizardStepperProps = {
|
|
26
|
+
steps: ReadonlyArray<WizardStepperStep>;
|
|
27
|
+
/** Zero-based index of the active (current) step */
|
|
28
|
+
activeStep?: number;
|
|
29
|
+
/** By default, clickable "done" steps remain clickable */
|
|
30
|
+
disableBacktrack?: boolean;
|
|
31
|
+
/** By default, clickable steps after the active step are not immediately clickable */
|
|
32
|
+
allowForwardSkip?: boolean;
|
|
33
|
+
onClick: (clickedIndex: number) => void;
|
|
34
|
+
};
|
|
35
|
+
declare const WizardStepper: (props: WizardStepperProps) => JSX.Element;
|
|
36
|
+
export default WizardStepper;
|
|
@@ -0,0 +1,29 @@
|
|
|
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;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { BemProps, BemPropsModifier } from '@hugsmidjan/react/types';
|
|
3
|
+
declare type ButtonElmProps = {
|
|
4
|
+
href?: never;
|
|
5
|
+
} & BemPropsModifier & Omit<JSX.IntrinsicElements['button'], 'className' | 'style'>;
|
|
6
|
+
declare type AnchorElmProps = {
|
|
7
|
+
href: string;
|
|
8
|
+
type?: never;
|
|
9
|
+
name?: never;
|
|
10
|
+
value?: never;
|
|
11
|
+
} & BemPropsModifier & Omit<JSX.IntrinsicElements['a'], 'className' | 'style'>;
|
|
12
|
+
export declare type ButtonProps = {
|
|
13
|
+
/** Label takes preference over `children` */
|
|
14
|
+
label?: string | JSX.Element;
|
|
15
|
+
} & (ButtonElmProps | AnchorElmProps);
|
|
16
|
+
declare const sizes: {
|
|
17
|
+
readonly normal: "";
|
|
18
|
+
readonly small: "small";
|
|
19
|
+
readonly wide: "wide";
|
|
20
|
+
};
|
|
21
|
+
declare type ButtonSize = keyof typeof sizes;
|
|
22
|
+
declare const variants: {
|
|
23
|
+
readonly normal: "";
|
|
24
|
+
readonly destructive: "destructive";
|
|
25
|
+
};
|
|
26
|
+
declare type ButtonVariant = keyof typeof variants;
|
|
27
|
+
declare type NavigationFlag = 'none' | 'go-back' | 'go-forward';
|
|
28
|
+
declare type ButtonIcon = 'edit';
|
|
29
|
+
export declare type ButtonVariantProps = {
|
|
30
|
+
size?: ButtonSize;
|
|
31
|
+
variant?: ButtonVariant;
|
|
32
|
+
icon?: ButtonIcon | NavigationFlag;
|
|
33
|
+
/** @deprecated (Will be removed in v0.11) */
|
|
34
|
+
small?: boolean;
|
|
35
|
+
};
|
|
36
|
+
declare type _ButtonProps = ButtonProps & ButtonVariantProps & BemProps & {
|
|
37
|
+
children?: ReactNode;
|
|
38
|
+
};
|
|
39
|
+
declare const Button: (props: _ButtonProps) => JSX.Element;
|
|
40
|
+
export default Button;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
14
|
+
import { Link } from './Link';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
const sizes = {
|
|
17
|
+
normal: '',
|
|
18
|
+
small: 'small',
|
|
19
|
+
wide: 'wide',
|
|
20
|
+
};
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const variants = {
|
|
23
|
+
normal: '',
|
|
24
|
+
destructive: 'destructive',
|
|
25
|
+
};
|
|
26
|
+
const navigationFlags = {
|
|
27
|
+
none: '',
|
|
28
|
+
'go-back': 'go--back',
|
|
29
|
+
'go-forward': 'go--forward',
|
|
30
|
+
};
|
|
31
|
+
const icons = {
|
|
32
|
+
// TODO: insert icons
|
|
33
|
+
edit: 'edit',
|
|
34
|
+
};
|
|
35
|
+
const Button = (props) => {
|
|
36
|
+
const { bem, small, size = 'normal', modifier, children, variant = 'normal', icon = 'none', label = children } = props, buttonProps = __rest(props, ["bem", "small", "size", "modifier", "children", "variant", "icon", "label"]);
|
|
37
|
+
const className = bem &&
|
|
38
|
+
getBemClass(bem, [modifier, variants[variant], sizes[size], navigationFlags[icon]]);
|
|
39
|
+
const iconProp = icons[icon] && { 'data-icon': icons[icon] };
|
|
40
|
+
if (buttonProps.href != null) {
|
|
41
|
+
return (<Link className={className} {...buttonProps} style={undefined} {...iconProp}>
|
|
42
|
+
{label}
|
|
43
|
+
</Link>);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
return (<button className={className} type="button" {...buttonProps} style={undefined} {...iconProp}>
|
|
47
|
+
{label}
|
|
48
|
+
</button>);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
export default Button;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReactElement, ReactNode } from 'react';
|
|
2
|
+
import { ImageProps } from './Image';
|
|
3
|
+
declare type BaseCardProps = {
|
|
4
|
+
title: string;
|
|
5
|
+
href: string;
|
|
6
|
+
imgPlaceholder?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare type ImageCardProps = BaseCardProps & {
|
|
9
|
+
meta?: string;
|
|
10
|
+
image?: ImageProps;
|
|
11
|
+
};
|
|
12
|
+
export declare type TextCardProps = BaseCardProps & {
|
|
13
|
+
summary?: string;
|
|
14
|
+
};
|
|
15
|
+
export declare type CardListProps<T> = {
|
|
16
|
+
cards: Array<T>;
|
|
17
|
+
title?: string | undefined;
|
|
18
|
+
summaryElement?: ReactElement;
|
|
19
|
+
titleTag?: 'h1' | 'h2' | 'h3' | 'h4' | 'p';
|
|
20
|
+
imgPlaceholder?: boolean | string;
|
|
21
|
+
};
|
|
22
|
+
export declare type ImageCardListProps = CardListProps<ImageCardProps>;
|
|
23
|
+
export declare type TextCardListProps = CardListProps<TextCardProps>;
|
|
24
|
+
declare type _CardListProps = CardListProps<BaseCardProps> & {
|
|
25
|
+
bemPrefix: string;
|
|
26
|
+
children?: ReactNode;
|
|
27
|
+
};
|
|
28
|
+
export declare const CardList: (props: _CardListProps) => JSX.Element;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare type Source = {
|
|
2
|
+
srcset: string;
|
|
3
|
+
media: string;
|
|
4
|
+
};
|
|
5
|
+
export declare type ImageProps = {
|
|
6
|
+
altText?: string;
|
|
7
|
+
} & ({
|
|
8
|
+
sources?: Array<Source>;
|
|
9
|
+
/** The default image source to (lazy) load */
|
|
10
|
+
src?: string;
|
|
11
|
+
/** Eagerly-loaded placeholder/thunbnail to use until a `sources` item has been picked. */
|
|
12
|
+
preloadSrc?: string;
|
|
13
|
+
inline?: false;
|
|
14
|
+
} | {
|
|
15
|
+
/** Should the image be fetched and inlined as <svg/> */
|
|
16
|
+
inline: true;
|
|
17
|
+
src: string;
|
|
18
|
+
sources?: undefined;
|
|
19
|
+
preloadSrc?: undefined;
|
|
20
|
+
});
|
|
21
|
+
declare type _ImageProps = {
|
|
22
|
+
/** container className */
|
|
23
|
+
className?: string;
|
|
24
|
+
/** Controls if the container is rendered when image is missing/undefined.
|
|
25
|
+
* (With a `--missing` className modifier added.)
|
|
26
|
+
*
|
|
27
|
+
* Accepts a function that defines a default content for the container.
|
|
28
|
+
*/
|
|
29
|
+
placeholder?: boolean | (() => JSX.Element);
|
|
30
|
+
};
|
|
31
|
+
declare const Image: (props: ImageProps & _ImageProps) => JSX.Element | null;
|
|
32
|
+
export default Image;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
3
|
+
import { useGetSVGtext } from '../utils/useGetSVGtext';
|
|
4
|
+
// eslint-disable-next-line complexity
|
|
5
|
+
const Image = (props) => {
|
|
6
|
+
const { src, altText = '', sources = [], preloadSrc, className, inline, placeholder, } = props;
|
|
7
|
+
const _src = (sources.length && preloadSrc) || src;
|
|
8
|
+
const imageSrc = _src || (sources[0] != null ? sources[0].srcset.split(' ')[0] : undefined);
|
|
9
|
+
const imgLoading = preloadSrc ? 'eager' : 'lazy';
|
|
10
|
+
const inlineSvg = useGetSVGtext(inline ? imageSrc : undefined);
|
|
11
|
+
if (!imageSrc) {
|
|
12
|
+
return placeholder ? (<span className={className && getBemClass(className, 'missing')}>
|
|
13
|
+
{placeholder !== true && placeholder()}
|
|
14
|
+
</span>) : null;
|
|
15
|
+
}
|
|
16
|
+
if (inline && inlineSvg) {
|
|
17
|
+
const __html = inlineSvg.imageSrc === imageSrc ? inlineSvg.code : '';
|
|
18
|
+
return <span className={className} dangerouslySetInnerHTML={{ __html }}/>;
|
|
19
|
+
}
|
|
20
|
+
return (<picture className={className}>
|
|
21
|
+
{' '}
|
|
22
|
+
{sources.map((source, i) => (<>
|
|
23
|
+
<source key={i} srcSet={source.srcset} media={source.media}/>{' '}
|
|
24
|
+
</>))}{' '}
|
|
25
|
+
<img src={imageSrc} alt={altText} loading={imgLoading}/>
|
|
26
|
+
{' '}
|
|
27
|
+
</picture>);
|
|
28
|
+
};
|
|
29
|
+
export default Image;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Props object ready to be ..spread onto an anchor element
|
|
3
|
+
* */
|
|
4
|
+
export declare type LinkProps = JSX.IntrinsicElements['a'] & {
|
|
5
|
+
href: string;
|
|
6
|
+
};
|
|
7
|
+
export declare type LinkRenderer = (props: LinkProps) => JSX.Element;
|
|
8
|
+
export declare let Link: LinkRenderer;
|
|
9
|
+
/**
|
|
10
|
+
* Allows you to set a callback function to wrapp <a href=""/> links with
|
|
11
|
+
* a custom routing component.
|
|
12
|
+
*
|
|
13
|
+
* Example use:
|
|
14
|
+
*
|
|
15
|
+
* ```js
|
|
16
|
+
* import { Link } from 'remix'; // or whatever :-)
|
|
17
|
+
*
|
|
18
|
+
* setLinkRenderer((linkProps) =>
|
|
19
|
+
* <Link to={linkProps.href}><a {...linkProps} /></Link>);
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* The Default linkrenderer defined as:
|
|
23
|
+
* ```js
|
|
24
|
+
* (linkProps) => React.createElement('a', linkProps);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare const setLinkRenderer: (linkRenderer: LinkRenderer | undefined) => void;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
const DefaultLinkRenderer = (props) => React.createElement('a', props);
|
|
3
|
+
export let Link = DefaultLinkRenderer;
|
|
4
|
+
/**
|
|
5
|
+
* Allows you to set a callback function to wrapp <a href=""/> links with
|
|
6
|
+
* a custom routing component.
|
|
7
|
+
*
|
|
8
|
+
* Example use:
|
|
9
|
+
*
|
|
10
|
+
* ```js
|
|
11
|
+
* import { Link } from 'remix'; // or whatever :-)
|
|
12
|
+
*
|
|
13
|
+
* setLinkRenderer((linkProps) =>
|
|
14
|
+
* <Link to={linkProps.href}><a {...linkProps} /></Link>);
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* The Default linkrenderer defined as:
|
|
18
|
+
* ```js
|
|
19
|
+
* (linkProps) => React.createElement('a', linkProps);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export const setLinkRenderer = (linkRenderer) => {
|
|
23
|
+
Link = linkRenderer || DefaultLinkRenderer;
|
|
24
|
+
};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { FormFieldInputProps } from '../FormField';
|
|
2
|
+
import { TogglerInputProps } from './TogglerInput';
|
|
3
|
+
export declare type TogglerGroupOption = {
|
|
4
|
+
value: string;
|
|
5
|
+
label?: string | JSX.Element;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
id?: string;
|
|
8
|
+
};
|
|
9
|
+
export declare type TogglerGroupOptions = Array<TogglerGroupOption>;
|
|
10
|
+
declare type RestrictedInputProps = Omit<JSX.IntrinsicElements['input'], 'type' | 'value' | 'checked' | 'defaultChecked' | 'className' | 'id' | 'name' | 'children'>;
|
|
11
|
+
export declare type TogglerGroupProps = {
|
|
12
|
+
options: TogglerGroupOptions;
|
|
13
|
+
className?: string;
|
|
14
|
+
name: string;
|
|
15
|
+
children?: undefined;
|
|
16
|
+
disabled?: boolean | ReadonlyArray<number>;
|
|
17
|
+
inputProps?: RestrictedInputProps;
|
|
18
|
+
onSelected?: (payload: {
|
|
19
|
+
value: string;
|
|
20
|
+
checked: boolean;
|
|
21
|
+
option: TogglerGroupOption;
|
|
22
|
+
selectedValues: Array<string>;
|
|
23
|
+
}) => void;
|
|
24
|
+
} & Omit<FormFieldInputProps, 'disabled'>;
|
|
25
|
+
declare type _TogglerGroupProps = {
|
|
26
|
+
bem: string;
|
|
27
|
+
Toggler: (props: TogglerInputProps) => JSX.Element;
|
|
28
|
+
value?: ReadonlyArray<string>;
|
|
29
|
+
};
|
|
30
|
+
declare const TogglerGroup: (props: TogglerGroupProps & _TogglerGroupProps) => JSX.Element;
|
|
31
|
+
export default TogglerGroup;
|
|
@@ -0,0 +1,31 @@
|
|
|
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;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ReactElement } from 'react';
|
|
2
|
+
import { BemPropsModifier } from '@hugsmidjan/react/types';
|
|
3
|
+
import { FormFieldGroupWrappingProps } from '../FormField';
|
|
4
|
+
import { TogglerGroupOption, TogglerGroupOptions, TogglerGroupProps } from './TogglerGroup';
|
|
5
|
+
import { TogglerInputProps } from './TogglerInput';
|
|
6
|
+
export declare type TogglerGroupFieldProps = {
|
|
7
|
+
className?: string;
|
|
8
|
+
} & FormFieldGroupWrappingProps & TogglerGroupProps;
|
|
9
|
+
declare type _TogglerGroupFieldProps = {
|
|
10
|
+
Toggler: (props: TogglerInputProps) => ReactElement;
|
|
11
|
+
value?: string | ReadonlyArray<string>;
|
|
12
|
+
bem: string;
|
|
13
|
+
} & BemPropsModifier;
|
|
14
|
+
export declare type TogglerGroupFieldOption = TogglerGroupOption;
|
|
15
|
+
export declare type TogglerGroupFieldOptions = TogglerGroupOptions;
|
|
16
|
+
declare const TogglerGroupField: (props: TogglerGroupFieldProps & _TogglerGroupFieldProps) => JSX.Element;
|
|
17
|
+
export default TogglerGroupField;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import getBemClass from '@hugsmidjan/react/utils/getBemClass';
|
|
14
|
+
import FormField from '../FormField';
|
|
15
|
+
import TogglerGroup from './TogglerGroup';
|
|
16
|
+
const TogglerGroupField = (props) => {
|
|
17
|
+
const { bem, Toggler, className, modifier, label, LabelTag, assistText, hideLabel, disabled, readOnly, invalid, errorMessage, required, reqText, id, value } = props, togglerGroupProps = __rest(props, ["bem", "Toggler", "className", "modifier", "label", "LabelTag", "assistText", "hideLabel", "disabled", "readOnly", "invalid", "errorMessage", "required", "reqText", "id", "value"]);
|
|
18
|
+
return (<FormField className={getBemClass(bem, modifier, className)} group label={label} LabelTag={LabelTag} assistText={assistText} hideLabel={hideLabel} disabled={disabled} readOnly={readOnly} invalid={invalid} errorMessage={errorMessage} required={required} reqText={reqText} id={id} renderInput={(className, inputProps) => {
|
|
19
|
+
return (<TogglerGroup bem={className.options} {...inputProps} {...togglerGroupProps} value={Array.isArray(value) ? value : value != null ? [value] : undefined} Toggler={Toggler}/>);
|
|
20
|
+
}}/>);
|
|
21
|
+
};
|
|
22
|
+
export default TogglerGroupField;
|