@dnanpm/ui-components 0.6.0 → 0.8.0
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/dist/components/AccordionItem/AccordionItem.css +16 -16
- package/dist/components/AccordionItem/AccordionItem.module.css.cjs +11 -11
- package/dist/components/AccordionItem/AccordionItem.module.css.js +11 -11
- package/dist/components/Breadcrumb/Breadcrumb.css +9 -9
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +6 -6
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +6 -6
- package/dist/components/Button/Button.css +32 -30
- package/dist/components/Button/Button.module.css.cjs +11 -11
- package/dist/components/Button/Button.module.css.js +11 -11
- package/dist/components/ButtonCard/ButtonCard.cjs +105 -0
- package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.css +167 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts +3 -0
- package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.js +105 -0
- package/dist/components/ButtonCard/ButtonCard.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs +18 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js +19 -0
- package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts +103 -0
- package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -0
- package/dist/components/ButtonCard/index.d.ts +3 -0
- package/dist/components/ButtonCard/index.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.cjs +101 -0
- package/dist/components/Drawer/Drawer.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.css +219 -0
- package/dist/components/Drawer/Drawer.d.ts +3 -0
- package/dist/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.js +101 -0
- package/dist/components/Drawer/Drawer.js.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.cjs +37 -0
- package/dist/components/Drawer/Drawer.module.css.cjs.map +1 -0
- package/dist/components/Drawer/Drawer.module.css.js +37 -0
- package/dist/components/Drawer/Drawer.module.css.js.map +1 -0
- package/dist/components/Drawer/Drawer.types.d.ts +63 -0
- package/dist/components/Drawer/Drawer.types.d.ts.map +1 -0
- package/dist/components/Drawer/index.d.ts +3 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/Footer/Footer.cjs +272 -0
- package/dist/components/Footer/Footer.cjs.map +1 -0
- package/dist/components/Footer/Footer.css +473 -0
- package/dist/components/Footer/Footer.d.ts +3 -0
- package/dist/components/Footer/Footer.d.ts.map +1 -0
- package/dist/components/Footer/Footer.js +272 -0
- package/dist/components/Footer/Footer.js.map +1 -0
- package/dist/components/Footer/Footer.module.css.cjs +80 -0
- package/dist/components/Footer/Footer.module.css.cjs.map +1 -0
- package/dist/components/Footer/Footer.module.css.js +80 -0
- package/dist/components/Footer/Footer.module.css.js.map +1 -0
- package/dist/components/Footer/Footer.types.d.ts +128 -0
- package/dist/components/Footer/Footer.types.d.ts.map +1 -0
- package/dist/components/Footer/Footer.utils.cjs +41 -0
- package/dist/components/Footer/Footer.utils.cjs.map +1 -0
- package/dist/components/Footer/Footer.utils.d.ts +13 -0
- package/dist/components/Footer/Footer.utils.d.ts.map +1 -0
- package/dist/components/Footer/Footer.utils.js +41 -0
- package/dist/components/Footer/Footer.utils.js.map +1 -0
- package/dist/components/Footer/assets/app-store-badge.svg.cjs +4 -0
- package/dist/components/Footer/assets/app-store-badge.svg.cjs.map +1 -0
- package/dist/components/Footer/assets/app-store-badge.svg.js +5 -0
- package/dist/components/Footer/assets/app-store-badge.svg.js.map +1 -0
- package/dist/components/Footer/assets/google-play-badge.svg.cjs +4 -0
- package/dist/components/Footer/assets/google-play-badge.svg.cjs.map +1 -0
- package/dist/components/Footer/assets/google-play-badge.svg.js +5 -0
- package/dist/components/Footer/assets/google-play-badge.svg.js.map +1 -0
- package/dist/components/Footer/index.d.ts +3 -0
- package/dist/components/Footer/index.d.ts.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.cjs +34 -0
- package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.css +125 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts +3 -0
- package/dist/components/FunctionButton/FunctionButton.d.ts.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.js +34 -0
- package/dist/components/FunctionButton/FunctionButton.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs +11 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.cjs.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js +12 -0
- package/dist/components/FunctionButton/FunctionButton.module.css.js.map +1 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts +21 -0
- package/dist/components/FunctionButton/FunctionButton.types.d.ts.map +1 -0
- package/dist/components/FunctionButton/index.d.ts +3 -0
- package/dist/components/FunctionButton/index.d.ts.map +1 -0
- package/dist/components/Hero/Hero.cjs +44 -30
- package/dist/components/Hero/Hero.cjs.map +1 -1
- package/dist/components/Hero/Hero.css +89 -100
- package/dist/components/Hero/Hero.d.ts +1 -1
- package/dist/components/Hero/Hero.d.ts.map +1 -1
- package/dist/components/Hero/Hero.js +45 -31
- package/dist/components/Hero/Hero.js.map +1 -1
- package/dist/components/Hero/Hero.module.css.cjs +17 -20
- package/dist/components/Hero/Hero.module.css.cjs.map +1 -1
- package/dist/components/Hero/Hero.module.css.js +17 -20
- package/dist/components/Hero/Hero.module.css.js.map +1 -1
- package/dist/components/Hero/Hero.types.d.ts +8 -3
- package/dist/components/Hero/Hero.types.d.ts.map +1 -1
- package/dist/components/Hero/Hero.utils.cjs +5 -8
- package/dist/components/Hero/Hero.utils.cjs.map +1 -1
- package/dist/components/Hero/Hero.utils.d.ts +2 -2
- package/dist/components/Hero/Hero.utils.d.ts.map +1 -1
- package/dist/components/Hero/Hero.utils.js +5 -8
- package/dist/components/Hero/Hero.utils.js.map +1 -1
- package/dist/components/IconButton/IconButton.css +31 -32
- package/dist/components/IconButton/IconButton.module.css.cjs +9 -9
- package/dist/components/IconButton/IconButton.module.css.js +9 -9
- package/dist/components/MainNavigation/MainNavigation.cjs +1094 -0
- package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.css +948 -0
- package/dist/components/MainNavigation/MainNavigation.d.ts +3 -0
- package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.js +1094 -0
- package/dist/components/MainNavigation/MainNavigation.js.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs +74 -0
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.module.css.js +75 -0
- package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.types.d.ts +149 -0
- package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.utils.cjs +168 -0
- package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts +29 -0
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -0
- package/dist/components/MainNavigation/MainNavigation.utils.js +168 -0
- package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -0
- package/dist/components/MainNavigation/index.d.ts +3 -0
- package/dist/components/MainNavigation/index.d.ts.map +1 -0
- package/dist/components/Modal/Modal.cjs +101 -0
- package/dist/components/Modal/Modal.cjs.map +1 -0
- package/dist/components/Modal/Modal.css +205 -0
- package/dist/components/Modal/Modal.d.ts +3 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/Modal.js +101 -0
- package/dist/components/Modal/Modal.js.map +1 -0
- package/dist/components/Modal/Modal.module.css.cjs +39 -0
- package/dist/components/Modal/Modal.module.css.cjs.map +1 -0
- package/dist/components/Modal/Modal.module.css.js +39 -0
- package/dist/components/Modal/Modal.module.css.js.map +1 -0
- package/dist/components/Modal/Modal.types.d.ts +62 -0
- package/dist/components/Modal/Modal.types.d.ts.map +1 -0
- package/dist/components/Modal/index.d.ts +3 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.cjs +41 -0
- package/dist/components/Modal/useDialogDismissal.cjs.map +1 -0
- package/dist/components/Modal/useDialogDismissal.d.ts +17 -0
- package/dist/components/Modal/useDialogDismissal.d.ts.map +1 -0
- package/dist/components/Modal/useDialogDismissal.js +41 -0
- package/dist/components/Modal/useDialogDismissal.js.map +1 -0
- package/dist/components/Modal/useNativeDialog.cjs +126 -0
- package/dist/components/Modal/useNativeDialog.cjs.map +1 -0
- package/dist/components/Modal/useNativeDialog.d.ts +14 -0
- package/dist/components/Modal/useNativeDialog.d.ts.map +1 -0
- package/dist/components/Modal/useNativeDialog.js +126 -0
- package/dist/components/Modal/useNativeDialog.js.map +1 -0
- package/dist/components/Pictograph/Pictograph.css +69 -57
- package/dist/components/Pictograph/Pictograph.module.css.cjs +11 -11
- package/dist/components/Pictograph/Pictograph.module.css.js +11 -11
- package/dist/components/Pictograph/Pictograph.types.d.ts +2 -2
- package/dist/components/Pictograph/PictographItem.cjs +15 -4
- package/dist/components/Pictograph/PictographItem.cjs.map +1 -1
- package/dist/components/Pictograph/PictographItem.css +26 -23
- package/dist/components/Pictograph/PictographItem.d.ts.map +1 -1
- package/dist/components/Pictograph/PictographItem.js +15 -4
- package/dist/components/Pictograph/PictographItem.js.map +1 -1
- package/dist/components/Pictograph/PictographItem.module.css.cjs +3 -3
- package/dist/components/Pictograph/PictographItem.module.css.js +3 -3
- package/dist/components/Quote/Quote.cjs +32 -0
- package/dist/components/Quote/Quote.cjs.map +1 -0
- package/dist/components/Quote/Quote.css +95 -0
- package/dist/components/Quote/Quote.d.ts +3 -0
- package/dist/components/Quote/Quote.d.ts.map +1 -0
- package/dist/components/Quote/Quote.js +32 -0
- package/dist/components/Quote/Quote.js.map +1 -0
- package/dist/components/Quote/Quote.module.css.cjs +22 -0
- package/dist/components/Quote/Quote.module.css.cjs.map +1 -0
- package/dist/components/Quote/Quote.module.css.js +22 -0
- package/dist/components/Quote/Quote.module.css.js.map +1 -0
- package/dist/components/Quote/Quote.types.d.ts +12 -0
- package/dist/components/Quote/Quote.types.d.ts.map +1 -0
- package/dist/components/Quote/index.d.ts +3 -0
- package/dist/components/Quote/index.d.ts.map +1 -0
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utils/elevation.module.css.cjs +3 -0
- package/dist/styles/utils/elevation.module.css.cjs.map +1 -1
- package/dist/styles/utils/elevation.module.css.js +4 -1
- package/dist/styles/utils/elevation.module.css.js.map +1 -1
- package/dist/styles/utils/focus.css +21 -13
- package/dist/styles/utils/focus.module.css.cjs +3 -3
- package/dist/styles/utils/focus.module.css.js +3 -3
- package/dist/styles/utils/overlay.css +37 -0
- package/dist/styles/utils/overlay.module.css.cjs +13 -0
- package/dist/styles/utils/overlay.module.css.cjs.map +1 -0
- package/dist/styles/utils/overlay.module.css.js +13 -0
- package/dist/styles/utils/overlay.module.css.js.map +1 -0
- package/dist/styles/utils/text-decoration.css +9 -1
- package/dist/styles/utils/text-decoration.module.css.cjs +5 -2
- package/dist/styles/utils/text-decoration.module.css.cjs.map +1 -1
- package/dist/styles/utils/text-decoration.module.css.js +6 -3
- package/dist/styles/utils/text-decoration.module.css.js.map +1 -1
- package/dist/styles.css +24 -7
- package/package.json +4 -3
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useId } from "react";
|
|
3
|
+
import { ArrowRight } from "@dnanpm/icons";
|
|
4
|
+
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
5
|
+
import textDecorationStyles from "../../styles/utils/text-decoration.module.css.js";
|
|
6
|
+
import appStoreBadge from "./assets/app-store-badge.svg.js";
|
|
7
|
+
import googlePlayBadge from "./assets/google-play-badge.svg.js";
|
|
8
|
+
import styles from "./Footer.module.css.js";
|
|
9
|
+
import { resolveTopSectionIcon, defaultRenderLink, resolveSocialIcon, defaultSocialAriaLabel, defaultCopyrightLabel, defaultAppStoreAriaLabel, defaultGooglePlayAriaLabel } from "./Footer.utils.js";
|
|
10
|
+
import { IconButton } from "../IconButton/IconButton.js";
|
|
11
|
+
import { cn } from "../../utils/cn/cn.js";
|
|
12
|
+
import { AccordionItem } from "../AccordionItem/AccordionItem.js";
|
|
13
|
+
const linkClasses = (extra) => cn(styles.footer__link, textDecorationStyles.underlineLink, focusStyles.focusable, extra);
|
|
14
|
+
const renderNavLink = (link, renderLink) => renderLink(
|
|
15
|
+
{
|
|
16
|
+
href: link.href,
|
|
17
|
+
className: linkClasses(),
|
|
18
|
+
"aria-label": link.ariaLabel,
|
|
19
|
+
children: link.label
|
|
20
|
+
},
|
|
21
|
+
{ external: link.external ?? false }
|
|
22
|
+
);
|
|
23
|
+
const renderBadge = (link, src, renderLink, fallbackAriaLabel) => renderLink(
|
|
24
|
+
{
|
|
25
|
+
href: link.href,
|
|
26
|
+
className: cn(styles.footer__badge, focusStyles.focusable),
|
|
27
|
+
"aria-label": link.ariaLabel ?? fallbackAriaLabel,
|
|
28
|
+
children: /* @__PURE__ */ jsx("img", { src, alt: "", "aria-hidden": "true" })
|
|
29
|
+
},
|
|
30
|
+
{ external: true }
|
|
31
|
+
);
|
|
32
|
+
const Footer = ({
|
|
33
|
+
topSection,
|
|
34
|
+
navigation,
|
|
35
|
+
socialLinks,
|
|
36
|
+
organizations,
|
|
37
|
+
currentOrganizationId,
|
|
38
|
+
languages,
|
|
39
|
+
currentLanguageCode,
|
|
40
|
+
appLinks,
|
|
41
|
+
mandatoryLinks,
|
|
42
|
+
copyrightLabel,
|
|
43
|
+
renderLink = defaultRenderLink,
|
|
44
|
+
onChatOpen,
|
|
45
|
+
onCookieSettingsClick,
|
|
46
|
+
navigationLabel = "Footer linkit",
|
|
47
|
+
socialLabel = "DNA sosiaalisessa mediassa",
|
|
48
|
+
organizationsLabel = "Valitse sivusto",
|
|
49
|
+
languagesLabel = "Valitse kieli",
|
|
50
|
+
mandatoryLinksLabel = "Lakisääteiset linkit",
|
|
51
|
+
className,
|
|
52
|
+
ref,
|
|
53
|
+
...props
|
|
54
|
+
}) => {
|
|
55
|
+
const visibleMandatoryLinks = (mandatoryLinks ?? []).filter(
|
|
56
|
+
(link) => !link.opensCookieSettings || onCookieSettingsClick
|
|
57
|
+
);
|
|
58
|
+
const hasBadges = Boolean(appLinks?.appStore || appLinks?.googlePlay);
|
|
59
|
+
const topSectionHeadingId = useId();
|
|
60
|
+
return /* @__PURE__ */ jsxs(
|
|
61
|
+
"footer",
|
|
62
|
+
{
|
|
63
|
+
ref,
|
|
64
|
+
"data-color-scheme": "dark",
|
|
65
|
+
className: cn(styles.footer, className),
|
|
66
|
+
...props,
|
|
67
|
+
children: [
|
|
68
|
+
topSection && topSection.length > 0 && /* @__PURE__ */ jsx("div", { className: styles.footer__top, children: /* @__PURE__ */ jsx("div", { className: cn(styles.footer__inner, styles["footer__top-row"]), children: topSection.map((group, index) => {
|
|
69
|
+
const Icon = resolveTopSectionIcon(group.icon);
|
|
70
|
+
const links = group.links.filter(
|
|
71
|
+
(link) => !link.opensChat || onChatOpen
|
|
72
|
+
);
|
|
73
|
+
const headingId = `${topSectionHeadingId}-${index}`;
|
|
74
|
+
return /* @__PURE__ */ jsxs(
|
|
75
|
+
"section",
|
|
76
|
+
{
|
|
77
|
+
"aria-labelledby": headingId,
|
|
78
|
+
className: styles["footer__top-column"],
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ jsxs("div", { className: styles["footer__top-heading"], children: [
|
|
81
|
+
Icon && /* @__PURE__ */ jsx(
|
|
82
|
+
Icon,
|
|
83
|
+
{
|
|
84
|
+
className: styles["footer__top-icon"],
|
|
85
|
+
"aria-hidden": "true"
|
|
86
|
+
}
|
|
87
|
+
),
|
|
88
|
+
/* @__PURE__ */ jsx("h2", { id: headingId, className: styles["footer__top-title"], children: group.title })
|
|
89
|
+
] }),
|
|
90
|
+
links.length > 0 && /* @__PURE__ */ jsx("ul", { className: styles["footer__top-links"], children: links.map((link) => /* @__PURE__ */ jsx("li", { children: link.opensChat ? /* @__PURE__ */ jsx(
|
|
91
|
+
IconButton,
|
|
92
|
+
{
|
|
93
|
+
icon: ArrowRight,
|
|
94
|
+
onClick: onChatOpen,
|
|
95
|
+
className: styles["footer__top-link"],
|
|
96
|
+
labelBehavior: "wrap",
|
|
97
|
+
children: link.label
|
|
98
|
+
}
|
|
99
|
+
) : /* @__PURE__ */ jsx(
|
|
100
|
+
IconButton,
|
|
101
|
+
{
|
|
102
|
+
icon: ArrowRight,
|
|
103
|
+
href: link.href,
|
|
104
|
+
"aria-label": link.ariaLabel,
|
|
105
|
+
className: styles["footer__top-link"],
|
|
106
|
+
labelBehavior: "wrap",
|
|
107
|
+
renderLink: (linkProps) => renderLink(
|
|
108
|
+
linkProps,
|
|
109
|
+
{
|
|
110
|
+
external: link.external ?? false
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
children: link.label
|
|
114
|
+
}
|
|
115
|
+
) }, link.label)) })
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
group.title
|
|
119
|
+
);
|
|
120
|
+
}) }) }),
|
|
121
|
+
/* @__PURE__ */ jsx("div", { className: styles.footer__bottom, children: /* @__PURE__ */ jsxs("div", { className: cn(styles.footer__inner, styles.footer__container), children: [
|
|
122
|
+
navigation && navigation.length > 0 && /* @__PURE__ */ jsxs("nav", { "aria-label": navigationLabel, children: [
|
|
123
|
+
/* @__PURE__ */ jsx("div", { className: styles["footer__nav-accordions"], children: navigation.map((group) => /* @__PURE__ */ jsx(
|
|
124
|
+
AccordionItem,
|
|
125
|
+
{
|
|
126
|
+
variant: "panel",
|
|
127
|
+
label: group.heading,
|
|
128
|
+
className: styles.footer__accordion,
|
|
129
|
+
children: /* @__PURE__ */ jsx("ul", { className: styles["footer__link-list"], children: group.links.map((link) => /* @__PURE__ */ jsx("li", { children: renderNavLink(link, renderLink) }, link.label)) })
|
|
130
|
+
},
|
|
131
|
+
group.heading
|
|
132
|
+
)) }),
|
|
133
|
+
/* @__PURE__ */ jsx("div", { className: styles["footer__nav-columns"], children: navigation.map((group) => /* @__PURE__ */ jsxs("div", { className: styles.footer__column, children: [
|
|
134
|
+
/* @__PURE__ */ jsx("h2", { className: styles["footer__column-heading"], children: group.heading }),
|
|
135
|
+
/* @__PURE__ */ jsx("ul", { className: styles["footer__link-list"], children: group.links.map((link) => /* @__PURE__ */ jsx("li", { children: renderNavLink(link, renderLink) }, link.label)) })
|
|
136
|
+
] }, group.heading)) })
|
|
137
|
+
] }),
|
|
138
|
+
/* @__PURE__ */ jsx(
|
|
139
|
+
"div",
|
|
140
|
+
{
|
|
141
|
+
className: cn(
|
|
142
|
+
styles.footer__divider,
|
|
143
|
+
Boolean(navigation?.length) && styles["footer__divider--after-nav"]
|
|
144
|
+
)
|
|
145
|
+
}
|
|
146
|
+
),
|
|
147
|
+
/* @__PURE__ */ jsxs("div", { className: styles.footer__meta, children: [
|
|
148
|
+
languages && languages.length > 0 && /* @__PURE__ */ jsx(
|
|
149
|
+
"ul",
|
|
150
|
+
{
|
|
151
|
+
className: styles["footer__language-list"],
|
|
152
|
+
"aria-label": languagesLabel,
|
|
153
|
+
children: languages.map((language) => {
|
|
154
|
+
const isCurrent = language.code === currentLanguageCode;
|
|
155
|
+
return /* @__PURE__ */ jsx("li", { children: renderLink(
|
|
156
|
+
{
|
|
157
|
+
href: language.href,
|
|
158
|
+
className: cn(
|
|
159
|
+
styles.footer__language,
|
|
160
|
+
isCurrent && styles["footer__language--current"],
|
|
161
|
+
focusStyles.focusable
|
|
162
|
+
),
|
|
163
|
+
"aria-label": language.ariaLabel,
|
|
164
|
+
"aria-current": isCurrent ? "true" : void 0,
|
|
165
|
+
children: language.label
|
|
166
|
+
},
|
|
167
|
+
{ external: language.external ?? false }
|
|
168
|
+
) }, language.code);
|
|
169
|
+
})
|
|
170
|
+
}
|
|
171
|
+
),
|
|
172
|
+
/* @__PURE__ */ jsxs("div", { className: styles["footer__meta-center"], children: [
|
|
173
|
+
socialLinks && socialLinks.length > 0 && /* @__PURE__ */ jsx(
|
|
174
|
+
"ul",
|
|
175
|
+
{
|
|
176
|
+
className: styles["footer__social-list"],
|
|
177
|
+
"aria-label": socialLabel,
|
|
178
|
+
children: socialLinks.map((social) => {
|
|
179
|
+
const Icon = resolveSocialIcon(social.platform);
|
|
180
|
+
return /* @__PURE__ */ jsx("li", { children: renderLink(
|
|
181
|
+
{
|
|
182
|
+
href: social.href,
|
|
183
|
+
className: cn(
|
|
184
|
+
styles["footer__social-link"],
|
|
185
|
+
focusStyles.focusable
|
|
186
|
+
),
|
|
187
|
+
"aria-label": social.ariaLabel ?? defaultSocialAriaLabel(social.platform),
|
|
188
|
+
children: Icon ? /* @__PURE__ */ jsx(
|
|
189
|
+
Icon,
|
|
190
|
+
{
|
|
191
|
+
className: styles["footer__social-icon"],
|
|
192
|
+
"aria-hidden": "true"
|
|
193
|
+
}
|
|
194
|
+
) : null
|
|
195
|
+
},
|
|
196
|
+
{ external: true }
|
|
197
|
+
) }, social.platform);
|
|
198
|
+
})
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
organizations && organizations.length > 0 && /* @__PURE__ */ jsx(
|
|
202
|
+
"ul",
|
|
203
|
+
{
|
|
204
|
+
className: styles["footer__organization-list"],
|
|
205
|
+
"aria-label": organizationsLabel,
|
|
206
|
+
children: organizations.map((organization) => {
|
|
207
|
+
const isCurrent = organization.id === currentOrganizationId;
|
|
208
|
+
return /* @__PURE__ */ jsx("li", { children: renderLink(
|
|
209
|
+
{
|
|
210
|
+
href: organization.href,
|
|
211
|
+
className: cn(
|
|
212
|
+
styles.footer__organization,
|
|
213
|
+
isCurrent && styles["footer__organization--current"],
|
|
214
|
+
focusStyles.focusable
|
|
215
|
+
),
|
|
216
|
+
"aria-current": isCurrent ? "true" : void 0,
|
|
217
|
+
children: organization.label
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
external: organization.external ?? false
|
|
221
|
+
}
|
|
222
|
+
) }, organization.id);
|
|
223
|
+
})
|
|
224
|
+
}
|
|
225
|
+
),
|
|
226
|
+
/* @__PURE__ */ jsxs(
|
|
227
|
+
"ul",
|
|
228
|
+
{
|
|
229
|
+
className: styles["footer__legal-list"],
|
|
230
|
+
"aria-label": mandatoryLinksLabel,
|
|
231
|
+
children: [
|
|
232
|
+
visibleMandatoryLinks.map((link) => /* @__PURE__ */ jsx("li", { children: link.opensCookieSettings ? /* @__PURE__ */ jsx(
|
|
233
|
+
"button",
|
|
234
|
+
{
|
|
235
|
+
type: "button",
|
|
236
|
+
onClick: onCookieSettingsClick,
|
|
237
|
+
className: linkClasses(styles.footer__action),
|
|
238
|
+
children: link.label
|
|
239
|
+
}
|
|
240
|
+
) : renderNavLink(link, renderLink) }, link.label)),
|
|
241
|
+
/* @__PURE__ */ jsx("li", { className: styles.footer__copyright, children: copyrightLabel ?? defaultCopyrightLabel() })
|
|
242
|
+
]
|
|
243
|
+
}
|
|
244
|
+
)
|
|
245
|
+
] }),
|
|
246
|
+
hasBadges && /* @__PURE__ */ jsxs("div", { className: styles.footer__apps, children: [
|
|
247
|
+
appLinks?.title && /* @__PURE__ */ jsx("span", { className: styles["footer__apps-title"], children: appLinks.title }),
|
|
248
|
+
/* @__PURE__ */ jsxs("div", { className: styles.footer__badges, children: [
|
|
249
|
+
appLinks?.appStore && renderBadge(
|
|
250
|
+
appLinks.appStore,
|
|
251
|
+
appStoreBadge,
|
|
252
|
+
renderLink,
|
|
253
|
+
defaultAppStoreAriaLabel
|
|
254
|
+
),
|
|
255
|
+
appLinks?.googlePlay && renderBadge(
|
|
256
|
+
appLinks.googlePlay,
|
|
257
|
+
googlePlayBadge,
|
|
258
|
+
renderLink,
|
|
259
|
+
defaultGooglePlayAriaLabel
|
|
260
|
+
)
|
|
261
|
+
] })
|
|
262
|
+
] })
|
|
263
|
+
] })
|
|
264
|
+
] }) })
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
};
|
|
269
|
+
export {
|
|
270
|
+
Footer
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=Footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.js","sources":["../../../src/components/Footer/Footer.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { ArrowRight } from '@dnanpm/icons';\nimport { AccordionItem } from '../AccordionItem';\nimport { IconButton } from '../IconButton';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils/focus.module.css';\nimport textDecorationStyles from '../../styles/utils/text-decoration.module.css';\nimport appStoreBadge from './assets/app-store-badge.svg';\nimport googlePlayBadge from './assets/google-play-badge.svg';\nimport styles from './Footer.module.css';\nimport {\n defaultAppStoreAriaLabel,\n defaultCopyrightLabel,\n defaultGooglePlayAriaLabel,\n defaultRenderLink,\n defaultSocialAriaLabel,\n resolveSocialIcon,\n resolveTopSectionIcon,\n} from './Footer.utils';\nimport type {\n FooterAppLink,\n FooterLink,\n FooterLinkProps,\n FooterProps,\n FooterRenderLink,\n} from './Footer.types';\n\nconst linkClasses = (extra?: string) =>\n cn(styles.footer__link, textDecorationStyles.underlineLink, focusStyles.focusable, extra);\n\nconst renderNavLink = (link: FooterLink, renderLink: FooterRenderLink) =>\n renderLink(\n {\n href: link.href,\n className: linkClasses(),\n 'aria-label': link.ariaLabel,\n children: link.label,\n },\n { external: link.external ?? false },\n );\n\nconst renderBadge = (\n link: FooterAppLink,\n src: string,\n renderLink: FooterRenderLink,\n fallbackAriaLabel: string,\n) =>\n renderLink(\n {\n href: link.href,\n className: cn(styles.footer__badge, focusStyles.focusable),\n 'aria-label': link.ariaLabel ?? fallbackAriaLabel,\n children: <img src={src} alt=\"\" aria-hidden=\"true\" />,\n },\n { external: true },\n );\n\nexport const Footer = ({\n topSection,\n navigation,\n socialLinks,\n organizations,\n currentOrganizationId,\n languages,\n currentLanguageCode,\n appLinks,\n mandatoryLinks,\n copyrightLabel,\n renderLink = defaultRenderLink,\n onChatOpen,\n onCookieSettingsClick,\n navigationLabel = 'Footer linkit',\n socialLabel = 'DNA sosiaalisessa mediassa',\n organizationsLabel = 'Valitse sivusto',\n languagesLabel = 'Valitse kieli',\n mandatoryLinksLabel = 'Lakisääteiset linkit',\n className,\n ref,\n ...props\n}: FooterProps) => {\n const visibleMandatoryLinks = (mandatoryLinks ?? []).filter(\n (link) => !link.opensCookieSettings || onCookieSettingsClick,\n );\n\n const hasBadges = Boolean(appLinks?.appStore || appLinks?.googlePlay);\n const topSectionHeadingId = useId();\n\n return (\n <footer\n ref={ref}\n data-color-scheme=\"dark\"\n className={cn(styles.footer, className)}\n {...props}\n >\n {topSection && topSection.length > 0 && (\n <div className={styles.footer__top}>\n <div className={cn(styles.footer__inner, styles['footer__top-row'])}>\n {topSection.map((group, index) => {\n const Icon = resolveTopSectionIcon(group.icon);\n const links = group.links.filter(\n (link) => !link.opensChat || onChatOpen,\n );\n // Names the section as a landmark so it is discoverable alongside the main nav.\n const headingId = `${topSectionHeadingId}-${index}`;\n\n return (\n <section\n key={group.title}\n aria-labelledby={headingId}\n className={styles['footer__top-column']}\n >\n <div className={styles['footer__top-heading']}>\n {Icon && (\n <Icon\n className={styles['footer__top-icon']}\n aria-hidden=\"true\"\n />\n )}\n <h2 id={headingId} className={styles['footer__top-title']}>\n {group.title}\n </h2>\n </div>\n {links.length > 0 && (\n <ul className={styles['footer__top-links']}>\n {links.map((link) => (\n <li key={link.label}>\n {link.opensChat ? (\n <IconButton\n icon={ArrowRight}\n onClick={onChatOpen}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n >\n {link.label}\n </IconButton>\n ) : (\n <IconButton\n icon={ArrowRight}\n href={link.href}\n aria-label={link.ariaLabel}\n className={styles['footer__top-link']}\n labelBehavior=\"wrap\"\n renderLink={(linkProps) =>\n renderLink(\n linkProps as FooterLinkProps,\n {\n external:\n link.external ?? false,\n },\n )\n }\n >\n {link.label}\n </IconButton>\n )}\n </li>\n ))}\n </ul>\n )}\n </section>\n );\n })}\n </div>\n </div>\n )}\n\n <div className={styles.footer__bottom}>\n <div className={cn(styles.footer__inner, styles.footer__container)}>\n {navigation && navigation.length > 0 && (\n <nav aria-label={navigationLabel}>\n {/* Accordions below 768px; the columns branch is display:none here. */}\n <div className={styles['footer__nav-accordions']}>\n {navigation.map((group) => (\n <AccordionItem\n key={group.heading}\n variant=\"panel\"\n label={group.heading}\n className={styles.footer__accordion}\n >\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </AccordionItem>\n ))}\n </div>\n\n <div className={styles['footer__nav-columns']}>\n {navigation.map((group) => (\n <div key={group.heading} className={styles.footer__column}>\n <h2 className={styles['footer__column-heading']}>\n {group.heading}\n </h2>\n <ul className={styles['footer__link-list']}>\n {group.links.map((link) => (\n <li key={link.label}>\n {renderNavLink(link, renderLink)}\n </li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n </nav>\n )}\n\n {/* The bottom bar always renders: it carries the copyright. */}\n <div\n className={cn(\n styles.footer__divider,\n Boolean(navigation?.length) && styles['footer__divider--after-nav'],\n )}\n />\n\n <div className={styles.footer__meta}>\n {languages && languages.length > 0 && (\n <ul\n className={styles['footer__language-list']}\n aria-label={languagesLabel}\n >\n {languages.map((language) => {\n const isCurrent = language.code === currentLanguageCode;\n\n return (\n <li key={language.code}>\n {renderLink(\n {\n href: language.href,\n className: cn(\n styles.footer__language,\n isCurrent &&\n styles['footer__language--current'],\n focusStyles.focusable,\n ),\n 'aria-label': language.ariaLabel,\n 'aria-current': isCurrent ? 'true' : undefined,\n children: language.label,\n },\n { external: language.external ?? false },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <div className={styles['footer__meta-center']}>\n {socialLinks && socialLinks.length > 0 && (\n <ul\n className={styles['footer__social-list']}\n aria-label={socialLabel}\n >\n {socialLinks.map((social) => {\n const Icon = resolveSocialIcon(social.platform);\n\n return (\n <li key={social.platform}>\n {renderLink(\n {\n href: social.href,\n className: cn(\n styles['footer__social-link'],\n focusStyles.focusable,\n ),\n 'aria-label':\n social.ariaLabel ??\n defaultSocialAriaLabel(social.platform),\n children: Icon ? (\n <Icon\n className={\n styles['footer__social-icon']\n }\n aria-hidden=\"true\"\n />\n ) : null,\n },\n { external: true },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n {organizations && organizations.length > 0 && (\n <ul\n className={styles['footer__organization-list']}\n aria-label={organizationsLabel}\n >\n {organizations.map((organization) => {\n const isCurrent = organization.id === currentOrganizationId;\n\n return (\n <li key={organization.id}>\n {renderLink(\n {\n href: organization.href,\n className: cn(\n styles.footer__organization,\n isCurrent &&\n styles[\n 'footer__organization--current'\n ],\n focusStyles.focusable,\n ),\n 'aria-current': isCurrent\n ? 'true'\n : undefined,\n children: organization.label,\n },\n {\n external: organization.external ?? false,\n },\n )}\n </li>\n );\n })}\n </ul>\n )}\n\n <ul\n className={styles['footer__legal-list']}\n aria-label={mandatoryLinksLabel}\n >\n {visibleMandatoryLinks.map((link) => (\n <li key={link.label}>\n {link.opensCookieSettings ? (\n <button\n type=\"button\"\n onClick={onCookieSettingsClick}\n className={linkClasses(styles.footer__action)}\n >\n {link.label}\n </button>\n ) : (\n renderNavLink(link, renderLink)\n )}\n </li>\n ))}\n <li className={styles.footer__copyright}>\n {copyrightLabel ?? defaultCopyrightLabel()}\n </li>\n </ul>\n </div>\n\n {hasBadges && (\n <div className={styles.footer__apps}>\n {appLinks?.title && (\n <span className={styles['footer__apps-title']}>\n {appLinks.title}\n </span>\n )}\n <div className={styles.footer__badges}>\n {appLinks?.appStore &&\n renderBadge(\n appLinks.appStore,\n appStoreBadge,\n renderLink,\n defaultAppStoreAriaLabel,\n )}\n {appLinks?.googlePlay &&\n renderBadge(\n appLinks.googlePlay,\n googlePlayBadge,\n renderLink,\n defaultGooglePlayAriaLabel,\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n </footer>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
require('./Footer.css');
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
4
|
+
const footer = "_footer_1lum3_8";
|
|
5
|
+
const footer__inner = "_footer__inner_1lum3_31";
|
|
6
|
+
const footer__top = "_footer__top_1lum3_36";
|
|
7
|
+
const footer__bottom = "_footer__bottom_1lum3_37";
|
|
8
|
+
const footer__container = "_footer__container_1lum3_122";
|
|
9
|
+
const footer__column = "_footer__column_1lum3_156";
|
|
10
|
+
const footer__link = "_footer__link_1lum3_111";
|
|
11
|
+
const footer__action = "_footer__action_1lum3_191";
|
|
12
|
+
const footer__accordion = "_footer__accordion_1lum3_224";
|
|
13
|
+
const footer__divider = "_footer__divider_1lum3_235";
|
|
14
|
+
const footer__meta = "_footer__meta_1lum3_249";
|
|
15
|
+
const footer__language = "_footer__language_1lum3_276";
|
|
16
|
+
const footer__organization = "_footer__organization_1lum3_346";
|
|
17
|
+
const footer__copyright = "_footer__copyright_1lum3_407";
|
|
18
|
+
const footer__apps = "_footer__apps_1lum3_413";
|
|
19
|
+
const footer__badges = "_footer__badges_1lum3_431";
|
|
20
|
+
const footer__badge = "_footer__badge_1lum3_431";
|
|
21
|
+
const styles = {
|
|
22
|
+
footer,
|
|
23
|
+
footer__inner,
|
|
24
|
+
footer__top,
|
|
25
|
+
footer__bottom,
|
|
26
|
+
"footer__top-row": "_footer__top-row_1lum3_61",
|
|
27
|
+
"footer__top-column": "_footer__top-column_1lum3_76",
|
|
28
|
+
"footer__top-heading": "_footer__top-heading_1lum3_84",
|
|
29
|
+
"footer__top-icon": "_footer__top-icon_1lum3_91",
|
|
30
|
+
"footer__top-title": "_footer__top-title_1lum3_97",
|
|
31
|
+
"footer__top-links": "_footer__top-links_1lum3_102",
|
|
32
|
+
"footer__link-list": "_footer__link-list_1lum3_111",
|
|
33
|
+
"footer__top-link": "_footer__top-link_1lum3_102",
|
|
34
|
+
footer__container,
|
|
35
|
+
"footer__nav-accordions": "_footer__nav-accordions_1lum3_135",
|
|
36
|
+
"footer__nav-columns": "_footer__nav-columns_1lum3_139",
|
|
37
|
+
footer__column,
|
|
38
|
+
"footer__column-heading": "_footer__column-heading_1lum3_164",
|
|
39
|
+
footer__link,
|
|
40
|
+
footer__action,
|
|
41
|
+
footer__accordion,
|
|
42
|
+
footer__divider,
|
|
43
|
+
"footer__divider--after-nav": "_footer__divider--after-nav_1lum3_242",
|
|
44
|
+
footer__meta,
|
|
45
|
+
"footer__meta-center": "_footer__meta-center_1lum3_265",
|
|
46
|
+
"footer__language-list": "_footer__language-list_1lum3_276",
|
|
47
|
+
footer__language,
|
|
48
|
+
"footer__language--current": "_footer__language--current_1lum3_303",
|
|
49
|
+
"footer__social-list": "_footer__social-list_1lum3_315",
|
|
50
|
+
"footer__social-link": "_footer__social-link_1lum3_323",
|
|
51
|
+
"footer__social-icon": "_footer__social-icon_1lum3_338",
|
|
52
|
+
"footer__organization-list": "_footer__organization-list_1lum3_346",
|
|
53
|
+
footer__organization,
|
|
54
|
+
"footer__organization--current": "_footer__organization--current_1lum3_370",
|
|
55
|
+
"footer__legal-list": "_footer__legal-list_1lum3_383",
|
|
56
|
+
footer__copyright,
|
|
57
|
+
footer__apps,
|
|
58
|
+
"footer__apps-title": "_footer__apps-title_1lum3_427",
|
|
59
|
+
footer__badges,
|
|
60
|
+
footer__badge
|
|
61
|
+
};
|
|
62
|
+
exports.default = styles;
|
|
63
|
+
exports.footer = footer;
|
|
64
|
+
exports.footer__accordion = footer__accordion;
|
|
65
|
+
exports.footer__action = footer__action;
|
|
66
|
+
exports.footer__apps = footer__apps;
|
|
67
|
+
exports.footer__badge = footer__badge;
|
|
68
|
+
exports.footer__badges = footer__badges;
|
|
69
|
+
exports.footer__bottom = footer__bottom;
|
|
70
|
+
exports.footer__column = footer__column;
|
|
71
|
+
exports.footer__container = footer__container;
|
|
72
|
+
exports.footer__copyright = footer__copyright;
|
|
73
|
+
exports.footer__divider = footer__divider;
|
|
74
|
+
exports.footer__inner = footer__inner;
|
|
75
|
+
exports.footer__language = footer__language;
|
|
76
|
+
exports.footer__link = footer__link;
|
|
77
|
+
exports.footer__meta = footer__meta;
|
|
78
|
+
exports.footer__organization = footer__organization;
|
|
79
|
+
exports.footer__top = footer__top;
|
|
80
|
+
//# sourceMappingURL=Footer.module.css.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.module.css.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import './Footer.css';
|
|
2
|
+
const footer = "_footer_1lum3_8";
|
|
3
|
+
const footer__inner = "_footer__inner_1lum3_31";
|
|
4
|
+
const footer__top = "_footer__top_1lum3_36";
|
|
5
|
+
const footer__bottom = "_footer__bottom_1lum3_37";
|
|
6
|
+
const footer__container = "_footer__container_1lum3_122";
|
|
7
|
+
const footer__column = "_footer__column_1lum3_156";
|
|
8
|
+
const footer__link = "_footer__link_1lum3_111";
|
|
9
|
+
const footer__action = "_footer__action_1lum3_191";
|
|
10
|
+
const footer__accordion = "_footer__accordion_1lum3_224";
|
|
11
|
+
const footer__divider = "_footer__divider_1lum3_235";
|
|
12
|
+
const footer__meta = "_footer__meta_1lum3_249";
|
|
13
|
+
const footer__language = "_footer__language_1lum3_276";
|
|
14
|
+
const footer__organization = "_footer__organization_1lum3_346";
|
|
15
|
+
const footer__copyright = "_footer__copyright_1lum3_407";
|
|
16
|
+
const footer__apps = "_footer__apps_1lum3_413";
|
|
17
|
+
const footer__badges = "_footer__badges_1lum3_431";
|
|
18
|
+
const footer__badge = "_footer__badge_1lum3_431";
|
|
19
|
+
const styles = {
|
|
20
|
+
footer,
|
|
21
|
+
footer__inner,
|
|
22
|
+
footer__top,
|
|
23
|
+
footer__bottom,
|
|
24
|
+
"footer__top-row": "_footer__top-row_1lum3_61",
|
|
25
|
+
"footer__top-column": "_footer__top-column_1lum3_76",
|
|
26
|
+
"footer__top-heading": "_footer__top-heading_1lum3_84",
|
|
27
|
+
"footer__top-icon": "_footer__top-icon_1lum3_91",
|
|
28
|
+
"footer__top-title": "_footer__top-title_1lum3_97",
|
|
29
|
+
"footer__top-links": "_footer__top-links_1lum3_102",
|
|
30
|
+
"footer__link-list": "_footer__link-list_1lum3_111",
|
|
31
|
+
"footer__top-link": "_footer__top-link_1lum3_102",
|
|
32
|
+
footer__container,
|
|
33
|
+
"footer__nav-accordions": "_footer__nav-accordions_1lum3_135",
|
|
34
|
+
"footer__nav-columns": "_footer__nav-columns_1lum3_139",
|
|
35
|
+
footer__column,
|
|
36
|
+
"footer__column-heading": "_footer__column-heading_1lum3_164",
|
|
37
|
+
footer__link,
|
|
38
|
+
footer__action,
|
|
39
|
+
footer__accordion,
|
|
40
|
+
footer__divider,
|
|
41
|
+
"footer__divider--after-nav": "_footer__divider--after-nav_1lum3_242",
|
|
42
|
+
footer__meta,
|
|
43
|
+
"footer__meta-center": "_footer__meta-center_1lum3_265",
|
|
44
|
+
"footer__language-list": "_footer__language-list_1lum3_276",
|
|
45
|
+
footer__language,
|
|
46
|
+
"footer__language--current": "_footer__language--current_1lum3_303",
|
|
47
|
+
"footer__social-list": "_footer__social-list_1lum3_315",
|
|
48
|
+
"footer__social-link": "_footer__social-link_1lum3_323",
|
|
49
|
+
"footer__social-icon": "_footer__social-icon_1lum3_338",
|
|
50
|
+
"footer__organization-list": "_footer__organization-list_1lum3_346",
|
|
51
|
+
footer__organization,
|
|
52
|
+
"footer__organization--current": "_footer__organization--current_1lum3_370",
|
|
53
|
+
"footer__legal-list": "_footer__legal-list_1lum3_383",
|
|
54
|
+
footer__copyright,
|
|
55
|
+
footer__apps,
|
|
56
|
+
"footer__apps-title": "_footer__apps-title_1lum3_427",
|
|
57
|
+
footer__badges,
|
|
58
|
+
footer__badge
|
|
59
|
+
};
|
|
60
|
+
export {
|
|
61
|
+
styles as default,
|
|
62
|
+
footer,
|
|
63
|
+
footer__accordion,
|
|
64
|
+
footer__action,
|
|
65
|
+
footer__apps,
|
|
66
|
+
footer__badge,
|
|
67
|
+
footer__badges,
|
|
68
|
+
footer__bottom,
|
|
69
|
+
footer__column,
|
|
70
|
+
footer__container,
|
|
71
|
+
footer__copyright,
|
|
72
|
+
footer__divider,
|
|
73
|
+
footer__inner,
|
|
74
|
+
footer__language,
|
|
75
|
+
footer__link,
|
|
76
|
+
footer__meta,
|
|
77
|
+
footer__organization,
|
|
78
|
+
footer__top
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=Footer.module.css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.module.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { AnchorHTMLAttributes, ComponentPropsWithRef, ReactNode } from 'react';
|
|
2
|
+
export interface FooterLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
|
|
3
|
+
readonly href: string;
|
|
4
|
+
readonly children: ReactNode;
|
|
5
|
+
}
|
|
6
|
+
export interface FooterLinkMeta {
|
|
7
|
+
/** True when the link leaves the current application and must trigger a full page load. */
|
|
8
|
+
readonly external: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Custom render function for link elements. Use this to integrate with
|
|
12
|
+
* client-side routing libraries like Next.js or React Router.
|
|
13
|
+
*
|
|
14
|
+
* The second argument carries link metadata that is not valid DOM markup, so
|
|
15
|
+
* spreading the first argument onto an anchor stays safe.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // Next.js
|
|
19
|
+
* <Footer renderLink={(props, { external }) =>
|
|
20
|
+
* external ? <a {...props} /> : <Link {...props} />
|
|
21
|
+
* } />
|
|
22
|
+
*/
|
|
23
|
+
export type FooterRenderLink = (props: FooterLinkProps, meta: FooterLinkMeta) => ReactNode;
|
|
24
|
+
export interface FooterLink {
|
|
25
|
+
/** Visible link label. */
|
|
26
|
+
readonly label: string;
|
|
27
|
+
/** Link destination. */
|
|
28
|
+
readonly href: string;
|
|
29
|
+
/**
|
|
30
|
+
* Marks the link as leaving the current application. Cannot be derived from
|
|
31
|
+
* `href`, because absolute URLs are used for in-app destinations too.
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
readonly external?: boolean;
|
|
35
|
+
/** Overrides the accessible name when the visible label needs more context. */
|
|
36
|
+
readonly ariaLabel?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface FooterTopSectionLink extends FooterLink {
|
|
39
|
+
/** Renders a button that calls `onChatOpen` instead of a link. */
|
|
40
|
+
readonly opensChat?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface FooterTopSectionGroup {
|
|
43
|
+
/** Group heading. */
|
|
44
|
+
readonly title: string;
|
|
45
|
+
/** Icon name, matched case-insensitively. Nothing renders when omitted or unknown. */
|
|
46
|
+
readonly icon?: string;
|
|
47
|
+
readonly links: readonly FooterTopSectionLink[];
|
|
48
|
+
}
|
|
49
|
+
export interface FooterNavigationGroup {
|
|
50
|
+
/** Category heading. Becomes the accordion summary below 768px. */
|
|
51
|
+
readonly heading: string;
|
|
52
|
+
readonly links: readonly FooterLink[];
|
|
53
|
+
}
|
|
54
|
+
export type FooterSocialPlatform = 'facebook' | 'instagram' | 'linkedin' | 'youtube' | 'tiktok' | 'threads';
|
|
55
|
+
export interface FooterSocialLink {
|
|
56
|
+
readonly platform: FooterSocialPlatform;
|
|
57
|
+
readonly href: string;
|
|
58
|
+
/**
|
|
59
|
+
* Accessible name for the icon-only link.
|
|
60
|
+
* @default Finnish label for the platform, e.g. "DNA Facebookissa".
|
|
61
|
+
*/
|
|
62
|
+
readonly ariaLabel?: string;
|
|
63
|
+
}
|
|
64
|
+
export interface FooterOrganization {
|
|
65
|
+
/** Matched against `currentOrganizationId` to mark the active site. */
|
|
66
|
+
readonly id: string;
|
|
67
|
+
readonly label: string;
|
|
68
|
+
readonly href: string;
|
|
69
|
+
readonly external?: boolean;
|
|
70
|
+
}
|
|
71
|
+
export interface FooterLanguage {
|
|
72
|
+
/** Matched against `currentLanguageCode`, e.g. "FI". */
|
|
73
|
+
readonly code: string;
|
|
74
|
+
/** Visible label, usually identical to `code`. */
|
|
75
|
+
readonly label: string;
|
|
76
|
+
readonly href: string;
|
|
77
|
+
readonly ariaLabel?: string;
|
|
78
|
+
readonly external?: boolean;
|
|
79
|
+
}
|
|
80
|
+
export interface FooterAppLink {
|
|
81
|
+
readonly href: string;
|
|
82
|
+
/** Accessible name. Defaults to a Finnish label naming the store. */
|
|
83
|
+
readonly ariaLabel?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface FooterAppLinks {
|
|
86
|
+
/** Label shown before the badges, e.g. "Oma DNA:". */
|
|
87
|
+
readonly title?: string;
|
|
88
|
+
readonly appStore?: FooterAppLink;
|
|
89
|
+
readonly googlePlay?: FooterAppLink;
|
|
90
|
+
}
|
|
91
|
+
export interface FooterMandatoryLink extends FooterLink {
|
|
92
|
+
/** Renders a button that calls `onCookieSettingsClick` instead of a link. */
|
|
93
|
+
readonly opensCookieSettings?: boolean;
|
|
94
|
+
}
|
|
95
|
+
export interface FooterProps extends Omit<ComponentPropsWithRef<'footer'>, 'children'> {
|
|
96
|
+
/** Highlighted groups above the main navigation. */
|
|
97
|
+
readonly topSection?: readonly FooterTopSectionGroup[];
|
|
98
|
+
/** Link categories. Columns from 768px up, accordions below. */
|
|
99
|
+
readonly navigation?: readonly FooterNavigationGroup[];
|
|
100
|
+
readonly socialLinks?: readonly FooterSocialLink[];
|
|
101
|
+
/** Site selector entries. */
|
|
102
|
+
readonly organizations?: readonly FooterOrganization[];
|
|
103
|
+
readonly currentOrganizationId?: string;
|
|
104
|
+
readonly languages?: readonly FooterLanguage[];
|
|
105
|
+
readonly currentLanguageCode?: string;
|
|
106
|
+
readonly appLinks?: FooterAppLinks;
|
|
107
|
+
/** Legal links shown in the bottom bar. */
|
|
108
|
+
readonly mandatoryLinks?: readonly FooterMandatoryLink[];
|
|
109
|
+
/** Copyright text shown after the legal links.
|
|
110
|
+
* @default `DNA ${current year}` */
|
|
111
|
+
readonly copyrightLabel?: string;
|
|
112
|
+
readonly renderLink?: FooterRenderLink;
|
|
113
|
+
/** Required for `opensChat` items to render at all. */
|
|
114
|
+
readonly onChatOpen?: () => void;
|
|
115
|
+
/** Required for `opensCookieSettings` items to render at all. */
|
|
116
|
+
readonly onCookieSettingsClick?: () => void;
|
|
117
|
+
/** Accessible name for the main link navigation landmark. */
|
|
118
|
+
readonly navigationLabel?: string;
|
|
119
|
+
/** Accessible name for the social media link list. */
|
|
120
|
+
readonly socialLabel?: string;
|
|
121
|
+
/** Accessible name for the site selector. */
|
|
122
|
+
readonly organizationsLabel?: string;
|
|
123
|
+
/** Accessible name for the language selector. */
|
|
124
|
+
readonly languagesLabel?: string;
|
|
125
|
+
/** Accessible name for the legal link list. */
|
|
126
|
+
readonly mandatoryLinksLabel?: string;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=Footer.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Footer.types.d.ts","sourceRoot":"","sources":["../../../src/components/Footer/Footer.types.ts"],"names":[],"mappings":"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"}
|