@dnanpm/ui-components 0.9.0 → 0.10.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/README.md +13 -0
- package/dist/components/Accordion/Accordion.css +5 -1
- package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
- package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.css +4 -1
- package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
- package/dist/components/AccordionItem/AccordionItem.js +2 -2
- package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
- package/dist/components/Avatar/Avatar.cjs +83 -0
- package/dist/components/Avatar/Avatar.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.css +188 -0
- package/dist/components/Avatar/Avatar.d.ts +3 -0
- package/dist/components/Avatar/Avatar.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.js +83 -0
- package/dist/components/Avatar/Avatar.js.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
- package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.module.css.js +40 -0
- package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
- package/dist/components/Avatar/Avatar.types.d.ts +66 -0
- package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.utils.cjs +17 -0
- package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
- package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
- package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
- package/dist/components/Avatar/Avatar.utils.js +17 -0
- package/dist/components/Avatar/Avatar.utils.js.map +1 -0
- package/dist/components/Avatar/index.d.ts +3 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
- package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.css +16 -16
- package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
- package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
- package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
- package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
- package/dist/components/Button/Button.cjs +29 -3
- package/dist/components/Button/Button.cjs.map +1 -1
- package/dist/components/Button/Button.css +78 -31
- package/dist/components/Button/Button.d.ts +1 -1
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +28 -2
- package/dist/components/Button/Button.js.map +1 -1
- package/dist/components/Button/Button.module.css.cjs +19 -11
- package/dist/components/Button/Button.module.css.cjs.map +1 -1
- package/dist/components/Button/Button.module.css.js +19 -11
- package/dist/components/Button/Button.module.css.js.map +1 -1
- package/dist/components/Button/Button.types.d.ts +20 -3
- package/dist/components/Button/Button.types.d.ts.map +1 -1
- package/dist/components/Button/index.d.ts +1 -1
- package/dist/components/Button/index.d.ts.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.cjs +19 -14
- package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.css +63 -20
- package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
- package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.js +17 -12
- package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
- package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
- package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
- package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
- package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.cjs +105 -0
- package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.css +323 -0
- package/dist/components/Checkbox/Checkbox.d.ts +3 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +105 -0
- package/dist/components/Checkbox/Checkbox.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
- package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
- package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
- package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
- package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
- package/dist/components/Checkbox/index.d.ts +3 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/ContentCard/ContentCard.cjs +8 -7
- package/dist/components/ContentCard/ContentCard.cjs.map +1 -1
- package/dist/components/ContentCard/ContentCard.css +39 -34
- package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
- package/dist/components/ContentCard/ContentCard.js +3 -2
- package/dist/components/ContentCard/ContentCard.js.map +1 -1
- package/dist/components/ContentCard/ContentCard.module.css.cjs +18 -18
- package/dist/components/ContentCard/ContentCard.module.css.js +18 -18
- package/dist/components/ContentCard/ContentCard.types.d.ts +2 -1
- package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.cjs +15 -7
- package/dist/components/Drawer/Drawer.cjs.map +1 -1
- package/dist/components/Drawer/Drawer.css +48 -45
- package/dist/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/components/Drawer/Drawer.js +12 -4
- package/dist/components/Drawer/Drawer.js.map +1 -1
- package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
- package/dist/components/Drawer/Drawer.module.css.js +16 -16
- package/dist/components/Footer/Footer.cjs +8 -9
- package/dist/components/Footer/Footer.cjs.map +1 -1
- package/dist/components/Footer/Footer.css +87 -83
- package/dist/components/Footer/Footer.d.ts.map +1 -1
- package/dist/components/Footer/Footer.js +1 -2
- package/dist/components/Footer/Footer.js.map +1 -1
- package/dist/components/Footer/Footer.module.css.cjs +39 -39
- package/dist/components/Footer/Footer.module.css.js +39 -39
- package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
- package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
- package/dist/components/FunctionButton/FunctionButton.css +5 -1
- package/dist/components/FunctionButton/FunctionButton.js +1 -1
- package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
- package/dist/components/Hero/Hero.cjs +30 -27
- package/dist/components/Hero/Hero.cjs.map +1 -1
- package/dist/components/Hero/Hero.css +49 -44
- 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 +30 -27
- package/dist/components/Hero/Hero.js.map +1 -1
- package/dist/components/Hero/Hero.module.css.cjs +18 -18
- package/dist/components/Hero/Hero.module.css.js +18 -18
- package/dist/components/Hero/Hero.types.d.ts +2 -6
- package/dist/components/Hero/Hero.types.d.ts.map +1 -1
- package/dist/components/IconButton/IconButton.cjs +3 -4
- package/dist/components/IconButton/IconButton.cjs.map +1 -1
- package/dist/components/IconButton/IconButton.css +5 -1
- package/dist/components/IconButton/IconButton.d.ts.map +1 -1
- package/dist/components/IconButton/IconButton.js +1 -2
- package/dist/components/IconButton/IconButton.js.map +1 -1
- package/dist/components/Label/Label.css +5 -1
- package/dist/components/MainNavigation/MainNavigation.cjs +216 -162
- package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.css +206 -183
- package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
- package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.js +177 -123
- package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -78
- package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -78
- package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.types.d.ts +0 -13
- package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.cjs +8 -4
- package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts +1 -0
- package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
- package/dist/components/MainNavigation/MainNavigation.utils.js +8 -4
- package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
- package/dist/components/Modal/Modal.cjs +14 -6
- package/dist/components/Modal/Modal.cjs.map +1 -1
- package/dist/components/Modal/Modal.css +44 -40
- package/dist/components/Modal/Modal.d.ts.map +1 -1
- package/dist/components/Modal/Modal.js +12 -4
- package/dist/components/Modal/Modal.js.map +1 -1
- package/dist/components/Modal/Modal.module.css.cjs +18 -18
- package/dist/components/Modal/Modal.module.css.js +18 -18
- package/dist/components/Notification/Notification.cjs +3 -2
- package/dist/components/Notification/Notification.cjs.map +1 -1
- package/dist/components/Notification/Notification.css +16 -11
- package/dist/components/Notification/Notification.d.ts.map +1 -1
- package/dist/components/Notification/Notification.js +2 -1
- package/dist/components/Notification/Notification.js.map +1 -1
- package/dist/components/Notification/Notification.module.css.cjs +9 -9
- package/dist/components/Notification/Notification.module.css.js +9 -9
- package/dist/components/Pagination/Pagination.cjs +142 -0
- package/dist/components/Pagination/Pagination.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.css +256 -0
- package/dist/components/Pagination/Pagination.d.ts +3 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.js +142 -0
- package/dist/components/Pagination/Pagination.js.map +1 -0
- package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
- package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.module.css.js +34 -0
- package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
- package/dist/components/Pagination/Pagination.types.d.ts +20 -0
- package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.utils.cjs +76 -0
- package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
- package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
- package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.utils.js +76 -0
- package/dist/components/Pagination/Pagination.utils.js.map +1 -0
- package/dist/components/Pagination/index.d.ts +3 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Pictograph/Pictograph.css +5 -1
- package/dist/components/Pictograph/PictographItem.css +5 -1
- package/dist/components/Quote/Quote.css +5 -1
- package/dist/components/Spinner/Spinner.css +5 -1
- package/dist/design-tokens/dist/tokens.cjs +5 -0
- package/dist/design-tokens/dist/tokens.cjs.map +1 -0
- package/dist/design-tokens/dist/tokens.js +5 -0
- package/dist/design-tokens/dist/tokens.js.map +1 -0
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/styles/utilities.css +6 -0
- package/dist/styles/utils/elevation.css +35 -26
- package/dist/styles/utils/focus.css +63 -68
- package/dist/styles/utils/index.cjs +33 -0
- package/dist/styles/utils/index.cjs.map +1 -0
- package/dist/styles/utils/index.d.ts +20 -0
- package/dist/styles/utils/index.d.ts.map +1 -0
- package/dist/styles/utils/index.js +33 -0
- package/dist/styles/utils/index.js.map +1 -0
- package/dist/styles/utils/overlay.css +35 -27
- package/dist/styles/utils/text-decoration.css +20 -12
- package/dist/styles.css +27 -3
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/isRenderable/index.d.ts +2 -0
- package/dist/utils/isRenderable/index.d.ts.map +1 -0
- package/dist/utils/isRenderable/isRenderable.cjs +5 -0
- package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
- package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
- package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
- package/dist/utils/isRenderable/isRenderable.js +5 -0
- package/dist/utils/isRenderable/isRenderable.js.map +1 -0
- package/package.json +12 -4
- package/dist/styles/utils/elevation.module.css.cjs +0 -16
- package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
- package/dist/styles/utils/elevation.module.css.js +0 -16
- package/dist/styles/utils/elevation.module.css.js.map +0 -1
- package/dist/styles/utils/focus.module.css.cjs +0 -16
- package/dist/styles/utils/focus.module.css.cjs.map +0 -1
- package/dist/styles/utils/focus.module.css.js +0 -16
- package/dist/styles/utils/focus.module.css.js.map +0 -1
- package/dist/styles/utils/overlay.module.css.cjs +0 -13
- package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
- package/dist/styles/utils/overlay.module.css.js +0 -13
- package/dist/styles/utils/overlay.module.css.js.map +0 -1
- package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
- package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
- package/dist/styles/utils/text-decoration.module.css.js +0 -13
- package/dist/styles/utils/text-decoration.module.css.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MainNavigation.utils.js","sources":["../../../src/components/MainNavigation/MainNavigation.utils.ts"],"sourcesContent":["import type { Ref } from 'react';\nimport type {\n MainNavigationItem,\n MainNavigationLanguageCode,\n MainNavigationLink,\n} from './MainNavigation.types';\n\nconst relativeNavigationBaseUrl = 'https://navigation.local';\nconst safeLinkProtocols = new Set(['http:', 'https:', 'mailto:', 'tel:']);\n\nexport const languageLinkAriaLabels: Record<MainNavigationLanguageCode, string> = {\n fi: 'FI, siirry suomenkieliselle sivustolle',\n en: 'EN, customer support in English',\n sv: 'SV, kundsupport på svenska',\n};\n\nconst languageToggleAnnouncementBuilders: Record<\n MainNavigationLanguageCode,\n (currentCode: string) => string\n> = {\n en: (currentCode) => `Change language. Current language ${currentCode}.`,\n fi: (currentCode) => `Vaihda kieli. Nykyinen kieli ${currentCode}.`,\n sv: (currentCode) => `Ändra språk. Aktuellt språk ${currentCode}.`,\n};\n\nconst languageAnnouncementOrder: readonly MainNavigationLanguageCode[] = ['en', 'fi', 'sv'];\n\n/**\n * Builds the toggle's screen-reader announcements: one per language present in the data, each in its\n * own language, with the current language code as the final token.\n */\nexport const getLanguageToggleAnnouncements = (\n presentCodes: readonly MainNavigationLanguageCode[],\n currentCode: MainNavigationLanguageCode,\n): ReadonlyArray<{ readonly lang: MainNavigationLanguageCode; readonly text: string }> => {\n const upperCurrentCode = currentCode.toUpperCase();\n\n return languageAnnouncementOrder\n .filter((code) => presentCodes.includes(code))\n .map((code) => ({\n lang: code,\n text: languageToggleAnnouncementBuilders[code](upperCurrentCode),\n }));\n};\n\nexport type MainNavigationWindowLike = {\n innerWidth: number;\n matchMedia?: (query: string) => Pick<MediaQueryList, 'matches'>;\n MSStream?: unknown;\n};\n\nexport type MainNavigationNavigatorLike = {\n userAgent: string;\n};\n\nexport const isDesktopViewportByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n) => {\n if (windowObject == null) {\n return false;\n }\n\n if (typeof windowObject.matchMedia === 'function') {\n return windowObject.matchMedia('(min-width: 1024px)').matches;\n }\n\n return windowObject.innerWidth >= 1024;\n};\n\nexport const isMobileViewportByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n) => {\n if (windowObject == null) {\n return false;\n }\n\n if (typeof windowObject.matchMedia === 'function') {\n return windowObject.matchMedia('(max-width: 1023px)').matches;\n }\n\n return windowObject.innerWidth < 1024;\n};\n\nexport const isMobileIosDeviceByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n navigatorObject: MainNavigationNavigatorLike | undefined,\n) => {\n if (windowObject == null || navigatorObject == null) {\n return false;\n }\n\n const isIOS =\n /iPad|iPhone|iPod/.test(navigatorObject.userAgent) && !('MSStream' in windowObject);\n return isIOS && windowObject.innerWidth < 768;\n};\n\nexport const isExternalTarget = (target?: string) => target === '_blank';\n\nexport const isExternalLink = (link: Pick<MainNavigationLink, 'target' | 'external'>) => {\n if (link.external != null) {\n return link.external;\n }\n\n return isExternalTarget(link.target);\n};\n\nexport const getLinkRel = (target?: string) =>\n isExternalTarget(target) ? 'noopener noreferrer' : undefined;\n\nexport const getLinkTarget = (target?: string) => (isExternalTarget(target) ? '_blank' : undefined);\n\nexport const normalizePathname = (value: string) => {\n const path = value.split('?')[0].split('#')[0] || '/';\n const withLeadingSlash = path.startsWith('/') ? path : `/${path}`;\n\n if (withLeadingSlash === '/') {\n return '/';\n }\n\n return withLeadingSlash.replace(/\\/+$/, '');\n};\n\nexport const toNavigableHref = (href: string) => {\n const normalizedHref = href.trim();\n\n if (normalizedHref === '') {\n return '#';\n }\n\n const hrefWithProtocol = normalizedHref.toLowerCase().startsWith('www.')\n ? `https://${normalizedHref}`\n : normalizedHref;\n\n if (hrefWithProtocol.startsWith('./') || hrefWithProtocol.startsWith('../')) {\n return hrefWithProtocol;\n }\n\n if (\n hrefWithProtocol.startsWith('/') ||\n hrefWithProtocol.startsWith('#') ||\n hrefWithProtocol.startsWith('?')\n ) {\n return hrefWithProtocol;\n }\n\n const hasScheme = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(hrefWithProtocol);\n\n if (!hasScheme) {\n return hrefWithProtocol;\n }\n\n try {\n const protocol = new URL(\n hrefWithProtocol,\n relativeNavigationBaseUrl,\n ).protocol.toLowerCase();\n if (safeLinkProtocols.has(protocol)) {\n return hrefWithProtocol;\n }\n } catch {\n return '#';\n }\n\n return '#';\n};\n\nexport const toPathname = (href?: string) => {\n if (href == null || href.trim() === '' || href === '#') {\n return null;\n }\n\n if (href.startsWith('/')) {\n return normalizePathname(href);\n }\n\n try {\n return normalizePathname(new URL(href).pathname);\n } catch {\n return normalizePathname(href);\n }\n};\n\nexport const matchesPath = (currentPathname: string, linkPathname: string) => {\n if (linkPathname === '/') {\n return currentPathname === '/';\n }\n\n return currentPathname === linkPathname || currentPathname.startsWith(`${linkPathname}/`);\n};\n\nexport const isLinkInCurrentPath = (link: MainNavigationLink, currentPathname?: string) => {\n if (link.current) {\n return true;\n }\n\n if (isExternalLink(link)) {\n return false;\n }\n\n if (currentPathname == null) {\n return false;\n }\n\n const linkPathname = toPathname(toNavigableHref(link.href));\n\n if (linkPathname == null) {\n return false;\n }\n\n return matchesPath(normalizePathname(currentPathname), linkPathname);\n};\n\nexport const hasHref = (item: MainNavigationItem): item is MainNavigationItem & { href: string } =>\n typeof item.href === 'string' && item.href.trim().length > 0;\n\nexport const isItemInCurrentPath = (item: MainNavigationItem, currentPathname?: string) => {\n if (hasHref(item) && isLinkInCurrentPath(item, currentPathname)) {\n return true;\n }\n\n if (\n item.panel?.columns?.some((column) =>\n column.links.some((link) => isLinkInCurrentPath(link, currentPathname)),\n )\n ) {\n return true;\n }\n\n return (\n item.panel?.featureLinks?.some((link) => isLinkInCurrentPath(link, currentPathname)) ??\n false\n );\n};\n\nexport const isLinkInCurrentPage = (link: MainNavigationLink, currentPathname?: string) => {\n if (link.current) {\n return true;\n }\n\n if (isExternalLink(link)) {\n return false;\n }\n\n if (currentPathname == null) {\n return false;\n }\n\n const linkPathname = toPathname(toNavigableHref(link.href));\n\n if (linkPathname == null) {\n return false;\n }\n\n return normalizePathname(currentPathname) === linkPathname;\n};\n\nconst isRefObject = <T>(target: Ref<T>): target is { current: T | null } =>\n typeof target === 'object' && target !== null && 'current' in target;\n\nexport const assignRef = <T>(target: Ref<T> | undefined, value: T | null) => {\n if (target == null) {\n return;\n }\n\n if (typeof target === 'function') {\n target(value);\n return;\n }\n\n if (isRefObject(target)) {\n target.current = value;\n }\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MainNavigation.utils.js","sources":["../../../src/components/MainNavigation/MainNavigation.utils.ts"],"sourcesContent":["import type { Ref } from 'react';\nimport { LayoutSemanticBreakpointDesktop } from '@dnanpm/design-tokens';\nimport type {\n MainNavigationItem,\n MainNavigationLanguageCode,\n MainNavigationLink,\n} from './MainNavigation.types';\n\nconst relativeNavigationBaseUrl = 'https://navigation.local';\nconst safeLinkProtocols = new Set(['http:', 'https:', 'mailto:', 'tel:']);\nconst desktopBreakpointPx = Number.parseFloat(LayoutSemanticBreakpointDesktop);\n\nexport const desktopMinWidthMediaQuery = `(min-width: ${desktopBreakpointPx}px)`;\n\nexport const languageLinkAriaLabels: Record<MainNavigationLanguageCode, string> = {\n fi: 'FI, siirry suomenkieliselle sivustolle',\n en: 'EN, customer support in English',\n sv: 'SV, kundsupport på svenska',\n};\n\nconst languageToggleAnnouncementBuilders: Record<\n MainNavigationLanguageCode,\n (currentCode: string) => string\n> = {\n en: (currentCode) => `Change language. Current language ${currentCode}.`,\n fi: (currentCode) => `Vaihda kieli. Nykyinen kieli ${currentCode}.`,\n sv: (currentCode) => `Ändra språk. Aktuellt språk ${currentCode}.`,\n};\n\nconst languageAnnouncementOrder: readonly MainNavigationLanguageCode[] = ['en', 'fi', 'sv'];\n\n/**\n * Builds the toggle's screen-reader announcements: one per language present in the data, each in its\n * own language, with the current language code as the final token.\n */\nexport const getLanguageToggleAnnouncements = (\n presentCodes: readonly MainNavigationLanguageCode[],\n currentCode: MainNavigationLanguageCode,\n): ReadonlyArray<{ readonly lang: MainNavigationLanguageCode; readonly text: string }> => {\n const upperCurrentCode = currentCode.toUpperCase();\n\n return languageAnnouncementOrder\n .filter((code) => presentCodes.includes(code))\n .map((code) => ({\n lang: code,\n text: languageToggleAnnouncementBuilders[code](upperCurrentCode),\n }));\n};\n\nexport type MainNavigationWindowLike = {\n innerWidth: number;\n matchMedia?: (query: string) => Pick<MediaQueryList, 'matches'>;\n MSStream?: unknown;\n};\n\nexport type MainNavigationNavigatorLike = {\n userAgent: string;\n};\n\nexport const isDesktopViewportByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n) => {\n if (windowObject == null) {\n return false;\n }\n\n if (typeof windowObject.matchMedia === 'function') {\n return windowObject.matchMedia(desktopMinWidthMediaQuery).matches;\n }\n\n return windowObject.innerWidth >= desktopBreakpointPx;\n};\n\nexport const isMobileViewportByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n) => {\n if (windowObject == null) {\n return false;\n }\n\n if (typeof windowObject.matchMedia === 'function') {\n // Complement of the desktop query, so no fractional width falls between the two.\n return !windowObject.matchMedia(desktopMinWidthMediaQuery).matches;\n }\n\n return windowObject.innerWidth < desktopBreakpointPx;\n};\n\nexport const isMobileIosDeviceByEnvironment = (\n windowObject: MainNavigationWindowLike | undefined,\n navigatorObject: MainNavigationNavigatorLike | undefined,\n) => {\n if (windowObject == null || navigatorObject == null) {\n return false;\n }\n\n const isIOS =\n /iPad|iPhone|iPod/.test(navigatorObject.userAgent) && !('MSStream' in windowObject);\n return isIOS && windowObject.innerWidth < 768;\n};\n\nexport const isExternalTarget = (target?: string) => target === '_blank';\n\nexport const isExternalLink = (link: Pick<MainNavigationLink, 'target' | 'external'>) => {\n if (link.external != null) {\n return link.external;\n }\n\n return isExternalTarget(link.target);\n};\n\nexport const getLinkRel = (target?: string) =>\n isExternalTarget(target) ? 'noopener noreferrer' : undefined;\n\nexport const getLinkTarget = (target?: string) => (isExternalTarget(target) ? '_blank' : undefined);\n\nexport const normalizePathname = (value: string) => {\n const path = value.split('?')[0].split('#')[0] || '/';\n const withLeadingSlash = path.startsWith('/') ? path : `/${path}`;\n\n if (withLeadingSlash === '/') {\n return '/';\n }\n\n return withLeadingSlash.replace(/\\/+$/, '');\n};\n\nexport const toNavigableHref = (href: string) => {\n const normalizedHref = href.trim();\n\n if (normalizedHref === '') {\n return '#';\n }\n\n const hrefWithProtocol = normalizedHref.toLowerCase().startsWith('www.')\n ? `https://${normalizedHref}`\n : normalizedHref;\n\n if (hrefWithProtocol.startsWith('./') || hrefWithProtocol.startsWith('../')) {\n return hrefWithProtocol;\n }\n\n if (\n hrefWithProtocol.startsWith('/') ||\n hrefWithProtocol.startsWith('#') ||\n hrefWithProtocol.startsWith('?')\n ) {\n return hrefWithProtocol;\n }\n\n const hasScheme = /^[a-zA-Z][a-zA-Z\\d+\\-.]*:/.test(hrefWithProtocol);\n\n if (!hasScheme) {\n return hrefWithProtocol;\n }\n\n try {\n const protocol = new URL(\n hrefWithProtocol,\n relativeNavigationBaseUrl,\n ).protocol.toLowerCase();\n if (safeLinkProtocols.has(protocol)) {\n return hrefWithProtocol;\n }\n } catch {\n return '#';\n }\n\n return '#';\n};\n\nexport const toPathname = (href?: string) => {\n if (href == null || href.trim() === '' || href === '#') {\n return null;\n }\n\n if (href.startsWith('/')) {\n return normalizePathname(href);\n }\n\n try {\n return normalizePathname(new URL(href).pathname);\n } catch {\n return normalizePathname(href);\n }\n};\n\nexport const matchesPath = (currentPathname: string, linkPathname: string) => {\n if (linkPathname === '/') {\n return currentPathname === '/';\n }\n\n return currentPathname === linkPathname || currentPathname.startsWith(`${linkPathname}/`);\n};\n\nexport const isLinkInCurrentPath = (link: MainNavigationLink, currentPathname?: string) => {\n if (link.current) {\n return true;\n }\n\n if (isExternalLink(link)) {\n return false;\n }\n\n if (currentPathname == null) {\n return false;\n }\n\n const linkPathname = toPathname(toNavigableHref(link.href));\n\n if (linkPathname == null) {\n return false;\n }\n\n return matchesPath(normalizePathname(currentPathname), linkPathname);\n};\n\nexport const hasHref = (item: MainNavigationItem): item is MainNavigationItem & { href: string } =>\n typeof item.href === 'string' && item.href.trim().length > 0;\n\nexport const isItemInCurrentPath = (item: MainNavigationItem, currentPathname?: string) => {\n if (hasHref(item) && isLinkInCurrentPath(item, currentPathname)) {\n return true;\n }\n\n if (\n item.panel?.columns?.some((column) =>\n column.links.some((link) => isLinkInCurrentPath(link, currentPathname)),\n )\n ) {\n return true;\n }\n\n return (\n item.panel?.featureLinks?.some((link) => isLinkInCurrentPath(link, currentPathname)) ??\n false\n );\n};\n\nexport const isLinkInCurrentPage = (link: MainNavigationLink, currentPathname?: string) => {\n if (link.current) {\n return true;\n }\n\n if (isExternalLink(link)) {\n return false;\n }\n\n if (currentPathname == null) {\n return false;\n }\n\n const linkPathname = toPathname(toNavigableHref(link.href));\n\n if (linkPathname == null) {\n return false;\n }\n\n return normalizePathname(currentPathname) === linkPathname;\n};\n\nconst isRefObject = <T>(target: Ref<T>): target is { current: T | null } =>\n typeof target === 'object' && target !== null && 'current' in target;\n\nexport const assignRef = <T>(target: Ref<T> | undefined, value: T | null) => {\n if (target == null) {\n return;\n }\n\n if (typeof target === 'function') {\n target(value);\n return;\n }\n\n if (isRefObject(target)) {\n target.current = value;\n }\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -3,8 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const react = require("react");
|
|
5
5
|
const icons = require("@dnanpm/icons");
|
|
6
|
-
const
|
|
7
|
-
const focus_module = require("../../styles/utils/focus.module.css.cjs");
|
|
6
|
+
const index = require("../../styles/utils/index.cjs");
|
|
8
7
|
const Modal_module = require("./Modal.module.css.cjs");
|
|
9
8
|
const useDialogDismissal = require("./useDialogDismissal.cjs");
|
|
10
9
|
const useNativeDialog = require("./useNativeDialog.cjs");
|
|
@@ -53,6 +52,7 @@ const Modal = ({
|
|
|
53
52
|
"dialog",
|
|
54
53
|
{
|
|
55
54
|
...props,
|
|
55
|
+
"data-color-scheme": "light",
|
|
56
56
|
ref: (node) => {
|
|
57
57
|
dialogRef.current = node;
|
|
58
58
|
if (typeof ref === "function") ref(node);
|
|
@@ -60,7 +60,7 @@ const Modal = ({
|
|
|
60
60
|
},
|
|
61
61
|
className: cn.cn(
|
|
62
62
|
Modal_module.default.modal,
|
|
63
|
-
|
|
63
|
+
index.elevationStyles.elevationHigh,
|
|
64
64
|
Modal_module.default[`modal--${size}`],
|
|
65
65
|
Modal_module.default[`modal--${headerStyle}`],
|
|
66
66
|
{ [Modal_module.default["modal--fixed-title"]]: fixedTitle },
|
|
@@ -79,16 +79,24 @@ const Modal = ({
|
|
|
79
79
|
"button",
|
|
80
80
|
{
|
|
81
81
|
type: "button",
|
|
82
|
-
className: cn.cn(Modal_module.default.modal__close,
|
|
82
|
+
className: cn.cn(Modal_module.default.modal__close, index.focusStyles.focusable),
|
|
83
83
|
"aria-label": closeLabel,
|
|
84
84
|
"data-dialog-autofocus": "true",
|
|
85
|
+
"data-color-scheme": headerStyle,
|
|
85
86
|
onClick: close,
|
|
86
87
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, { "aria-hidden": "true" })
|
|
87
88
|
}
|
|
88
89
|
),
|
|
89
|
-
(title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Modal_module.default.modal__title, children: [
|
|
90
|
+
(title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: Modal_module.default.modal__title, "data-color-scheme": headerStyle, children: [
|
|
90
91
|
title && /* @__PURE__ */ jsxRuntime.jsx("h2", { id: titleId, className: Modal_module.default.modal__heading, children: title }),
|
|
91
|
-
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
92
|
+
description && /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
+
"div",
|
|
94
|
+
{
|
|
95
|
+
id: descriptionId,
|
|
96
|
+
className: cn.cn(Modal_module.default.modal__description, "dds-prose"),
|
|
97
|
+
children: description
|
|
98
|
+
}
|
|
99
|
+
)
|
|
92
100
|
] }),
|
|
93
101
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: Modal_module.default.modal__content, children })
|
|
94
102
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.cjs","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { Close } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport elevationStyles
|
|
1
|
+
{"version":3,"file":"Modal.cjs","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { Close } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { elevationStyles, focusStyles } from '../../styles/utils';\nimport styles from './Modal.module.css';\nimport { useDialogDismissal } from './useDialogDismissal';\nimport { useNativeDialog } from './useNativeDialog';\nimport type { ModalProps } from './Modal.types';\n\nexport const Modal = ({\n open,\n onOpenChange,\n title,\n description,\n children,\n footer,\n size = 'medium',\n headerStyle = 'light',\n fixedTitle = false,\n alignToTop = false,\n disableCloseOptions = false,\n closeLabel = 'Sulje dialogi',\n keepMounted = false,\n className,\n ref,\n onKeyDown,\n onClick,\n onPointerDown,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: ModalProps) => {\n const titleId = useId();\n const descriptionId = useId();\n const { dialogRef, close, phase, isPresent } = useNativeDialog({\n open: open ?? false,\n keepMounted,\n onOpenChange,\n });\n const describedBy =\n [description ? descriptionId : undefined, ariaDescribedBy].filter(Boolean).join(' ') ||\n undefined;\n const dialogDismissalProps = useDialogDismissal({\n close,\n disableCloseOptions,\n onClick,\n onKeyDown,\n onPointerDown,\n });\n\n if (!isPresent) return null;\n\n return (\n <dialog\n {...props}\n data-color-scheme=\"light\"\n ref={(node) => {\n dialogRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\n styles.modal,\n elevationStyles.elevationHigh,\n styles[`modal--${size}`],\n styles[`modal--${headerStyle}`],\n { [styles['modal--fixed-title']]: fixedTitle },\n { [styles['modal--align-top']]: alignToTop },\n { [styles['modal--opening']]: phase !== 'closing' },\n { [styles['modal--closing']]: phase === 'closing' },\n className,\n )}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy ?? (!ariaLabel && title ? titleId : undefined)}\n aria-describedby={describedBy}\n {...dialogDismissalProps}\n >\n <div className={styles.modal__container}>\n {!disableCloseOptions && (\n <button\n type=\"button\"\n className={cn(styles.modal__close, focusStyles.focusable)}\n aria-label={closeLabel}\n data-dialog-autofocus=\"true\"\n data-color-scheme={headerStyle}\n onClick={close}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n {(title || description) && (\n <div className={styles.modal__title} data-color-scheme={headerStyle}>\n {title && (\n <h2 id={titleId} className={styles.modal__heading}>\n {title}\n </h2>\n )}\n {description && (\n <div\n id={descriptionId}\n className={cn(styles.modal__description, 'dds-prose')}\n >\n {description}\n </div>\n )}\n </div>\n )}\n <div className={styles.modal__content}>{children}</div>\n </div>\n {footer && <div className={styles['modal__bottom-bar']}>{footer}</div>}\n </dialog>\n );\n};\n"],"names":["useId","useNativeDialog","useDialogDismissal","jsxs","cn","styles","elevationStyles","jsx","focusStyles","Close"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@layer dds-base, dds-components;@layer dds-components { @layer fallback, components; }@layer dds-components.components{.
|
|
1
|
+
@layer dds-base, dds-components;@layer dds-components { @layer fallback, components; }@layer dds-components.components{._modal_9bjhv_1 {
|
|
2
2
|
--_modal-transition-duration-open: 400ms;
|
|
3
3
|
--_modal-transition-duration-close: 200ms;
|
|
4
4
|
display: flex;
|
|
@@ -18,15 +18,15 @@
|
|
|
18
18
|
transition: opacity var(--_modal-transition-duration-close) ease;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
._modal--align-
|
|
21
|
+
._modal--align-top_9bjhv_21 {
|
|
22
22
|
margin-block: 5dvh auto;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
.
|
|
25
|
+
._modal_9bjhv_1:not([open]) {
|
|
26
26
|
display: none;
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
.
|
|
29
|
+
._modal_9bjhv_1::backdrop {
|
|
30
30
|
background: var(--color-semantic-utility-overlay-strong);
|
|
31
31
|
opacity: 0;
|
|
32
32
|
transition-property: opacity, overlay;
|
|
@@ -35,33 +35,33 @@
|
|
|
35
35
|
transition-behavior: allow-discrete;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
._modal--
|
|
38
|
+
._modal--small_9bjhv_38 {
|
|
39
39
|
width: 480px;
|
|
40
40
|
min-height: auto;
|
|
41
41
|
}
|
|
42
|
-
._modal--
|
|
42
|
+
._modal--medium_9bjhv_42 {
|
|
43
43
|
width: 768px;
|
|
44
44
|
}
|
|
45
|
-
._modal--
|
|
45
|
+
._modal--large_9bjhv_45 {
|
|
46
46
|
width: 960px;
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
._modal--
|
|
50
|
-
animation: _modal-
|
|
49
|
+
._modal--opening_9bjhv_49 {
|
|
50
|
+
animation: _modal-open_9bjhv_1 var(--_modal-transition-duration-open) ease both;
|
|
51
51
|
}
|
|
52
|
-
._modal--
|
|
53
|
-
animation: _modal-
|
|
52
|
+
._modal--closing_9bjhv_52 {
|
|
53
|
+
animation: _modal-close_9bjhv_1 var(--_modal-transition-duration-close) ease both;
|
|
54
54
|
}
|
|
55
|
-
._modal--
|
|
55
|
+
._modal--opening_9bjhv_49::backdrop {
|
|
56
56
|
opacity: 1;
|
|
57
57
|
transition-duration: var(--_modal-transition-duration-open);
|
|
58
58
|
}
|
|
59
|
-
._modal--
|
|
59
|
+
._modal--closing_9bjhv_52::backdrop {
|
|
60
60
|
opacity: 0;
|
|
61
61
|
transition-duration: var(--_modal-transition-duration-close);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
.
|
|
64
|
+
._modal__container_9bjhv_64 {
|
|
65
65
|
display: flex;
|
|
66
66
|
min-height: 0;
|
|
67
67
|
flex: 1 1 auto;
|
|
@@ -69,11 +69,11 @@
|
|
|
69
69
|
overflow: auto;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
-
._modal--fixed-
|
|
72
|
+
._modal--fixed-title_9bjhv_72 ._modal__container_9bjhv_64 {
|
|
73
73
|
overflow: hidden;
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
.
|
|
76
|
+
._modal__title_9bjhv_76 {
|
|
77
77
|
display: flex;
|
|
78
78
|
flex: 0 0 auto;
|
|
79
79
|
flex-direction: column;
|
|
@@ -83,32 +83,32 @@
|
|
|
83
83
|
background: var(--color-semantic-surface-base);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
.
|
|
86
|
+
._modal__heading_9bjhv_86 {
|
|
87
87
|
margin: 0;
|
|
88
88
|
font: var(--typography-heading-md);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
._modal--
|
|
91
|
+
._modal--small_9bjhv_38 ._modal__heading_9bjhv_86 {
|
|
92
92
|
font: var(--typography-heading-sm);
|
|
93
93
|
}
|
|
94
|
-
.
|
|
94
|
+
._modal__description_9bjhv_94 {
|
|
95
95
|
margin: 0;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
.
|
|
98
|
+
._modal__content_9bjhv_98 {
|
|
99
99
|
flex: 1 1 auto;
|
|
100
100
|
padding: var(--spacing-space-20);
|
|
101
101
|
overflow-wrap: anywhere;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
._modal--fixed-
|
|
104
|
+
._modal--fixed-title_9bjhv_72 ._modal__content_9bjhv_98 {
|
|
105
105
|
overflow: auto;
|
|
106
106
|
}
|
|
107
|
-
.
|
|
107
|
+
._modal__container_9bjhv_64:not(:has(._modal__title_9bjhv_76)) ._modal__content_9bjhv_98 {
|
|
108
108
|
padding-top: var(--spacing-space-40);
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
.
|
|
111
|
+
._modal__close_9bjhv_111 {
|
|
112
112
|
position: absolute;
|
|
113
113
|
z-index: 1;
|
|
114
114
|
top: 0;
|
|
@@ -125,26 +125,26 @@
|
|
|
125
125
|
cursor: pointer;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
|
-
.
|
|
128
|
+
._modal__close_9bjhv_111 svg {
|
|
129
129
|
width: 24px;
|
|
130
130
|
height: 24px;
|
|
131
131
|
}
|
|
132
|
-
._modal__bottom-
|
|
132
|
+
._modal__bottom-bar_9bjhv_132 {
|
|
133
133
|
flex: 0 0 auto;
|
|
134
134
|
padding: var(--spacing-space-8) var(--spacing-space-20) var(--spacing-space-20);
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
._modal--
|
|
137
|
+
._modal--dark_9bjhv_137 ._modal__title_9bjhv_76 {
|
|
138
138
|
background: var(--color-semantic-surface-secondary-strong);
|
|
139
139
|
color: var(--color-semantic-foreground-inverse);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
._modal--
|
|
142
|
+
._modal--dark_9bjhv_137 ._modal__close_9bjhv_111 {
|
|
143
143
|
background: var(--color-semantic-surface-secondary-mid);
|
|
144
144
|
color: var(--color-semantic-foreground-inverse);
|
|
145
145
|
}
|
|
146
146
|
|
|
147
|
-
@keyframes _modal-
|
|
147
|
+
@keyframes _modal-open_9bjhv_1 {
|
|
148
148
|
from {
|
|
149
149
|
opacity: 0;
|
|
150
150
|
}
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
opacity: 1;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
|
-
@keyframes _modal-
|
|
155
|
+
@keyframes _modal-close_9bjhv_1 {
|
|
156
156
|
from {
|
|
157
157
|
opacity: 1;
|
|
158
158
|
}
|
|
@@ -161,14 +161,14 @@
|
|
|
161
161
|
}
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
._modal--
|
|
164
|
+
._modal--opening_9bjhv_49::backdrop {
|
|
165
165
|
@starting-style {
|
|
166
166
|
opacity: 0;
|
|
167
167
|
}
|
|
168
168
|
}
|
|
169
169
|
|
|
170
|
-
@media (
|
|
171
|
-
.
|
|
170
|
+
@media (width < 360px) {
|
|
171
|
+
._modal_9bjhv_1 {
|
|
172
172
|
width: 100vw;
|
|
173
173
|
max-width: 100vw;
|
|
174
174
|
height: 100dvh;
|
|
@@ -178,27 +178,31 @@
|
|
|
178
178
|
}
|
|
179
179
|
|
|
180
180
|
@media (prefers-reduced-motion: reduce) {
|
|
181
|
-
.
|
|
182
|
-
._modal--
|
|
183
|
-
._modal--
|
|
184
|
-
.
|
|
181
|
+
._modal_9bjhv_1,
|
|
182
|
+
._modal--opening_9bjhv_49,
|
|
183
|
+
._modal--closing_9bjhv_52,
|
|
184
|
+
._modal_9bjhv_1::backdrop {
|
|
185
185
|
animation: none;
|
|
186
186
|
transition: none;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
|
|
190
190
|
@media (forced-colors: active) {
|
|
191
|
-
.
|
|
191
|
+
._modal_9bjhv_1 {
|
|
192
192
|
border: 2px solid CanvasText;
|
|
193
193
|
box-shadow: none;
|
|
194
194
|
}
|
|
195
|
-
.
|
|
195
|
+
._modal_9bjhv_1::backdrop {
|
|
196
196
|
background: Canvas;
|
|
197
197
|
opacity: 0.7;
|
|
198
198
|
}
|
|
199
|
-
.
|
|
199
|
+
._modal__close_9bjhv_111 {
|
|
200
200
|
border: 1px solid ButtonBorder;
|
|
201
201
|
background: ButtonFace;
|
|
202
202
|
color: ButtonText;
|
|
203
203
|
}
|
|
204
|
-
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Do not edit directly, this file was auto-generated.
|
|
208
|
+
*/ }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Modal.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,eAAO,MAAM,KAAK,GAAI,qTAuBnB,UAAU,mDAiFZ,CAAC"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { useId } from "react";
|
|
3
3
|
import { Close } from "@dnanpm/icons";
|
|
4
|
-
import elevationStyles from "../../styles/utils/
|
|
5
|
-
import focusStyles from "../../styles/utils/focus.module.css.js";
|
|
4
|
+
import { focusStyles, elevationStyles } from "../../styles/utils/index.js";
|
|
6
5
|
import styles from "./Modal.module.css.js";
|
|
7
6
|
import { useDialogDismissal } from "./useDialogDismissal.js";
|
|
8
7
|
import { useNativeDialog } from "./useNativeDialog.js";
|
|
@@ -51,6 +50,7 @@ const Modal = ({
|
|
|
51
50
|
"dialog",
|
|
52
51
|
{
|
|
53
52
|
...props,
|
|
53
|
+
"data-color-scheme": "light",
|
|
54
54
|
ref: (node) => {
|
|
55
55
|
dialogRef.current = node;
|
|
56
56
|
if (typeof ref === "function") ref(node);
|
|
@@ -80,13 +80,21 @@ const Modal = ({
|
|
|
80
80
|
className: cn(styles.modal__close, focusStyles.focusable),
|
|
81
81
|
"aria-label": closeLabel,
|
|
82
82
|
"data-dialog-autofocus": "true",
|
|
83
|
+
"data-color-scheme": headerStyle,
|
|
83
84
|
onClick: close,
|
|
84
85
|
children: /* @__PURE__ */ jsx(Close, { "aria-hidden": "true" })
|
|
85
86
|
}
|
|
86
87
|
),
|
|
87
|
-
(title || description) && /* @__PURE__ */ jsxs("div", { className: styles.modal__title, children: [
|
|
88
|
+
(title || description) && /* @__PURE__ */ jsxs("div", { className: styles.modal__title, "data-color-scheme": headerStyle, children: [
|
|
88
89
|
title && /* @__PURE__ */ jsx("h2", { id: titleId, className: styles.modal__heading, children: title }),
|
|
89
|
-
description && /* @__PURE__ */ jsx(
|
|
90
|
+
description && /* @__PURE__ */ jsx(
|
|
91
|
+
"div",
|
|
92
|
+
{
|
|
93
|
+
id: descriptionId,
|
|
94
|
+
className: cn(styles.modal__description, "dds-prose"),
|
|
95
|
+
children: description
|
|
96
|
+
}
|
|
97
|
+
)
|
|
90
98
|
] }),
|
|
91
99
|
/* @__PURE__ */ jsx("div", { className: styles.modal__content, children })
|
|
92
100
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { Close } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport elevationStyles
|
|
1
|
+
{"version":3,"file":"Modal.js","sources":["../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { useId } from 'react';\nimport { Close } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { elevationStyles, focusStyles } from '../../styles/utils';\nimport styles from './Modal.module.css';\nimport { useDialogDismissal } from './useDialogDismissal';\nimport { useNativeDialog } from './useNativeDialog';\nimport type { ModalProps } from './Modal.types';\n\nexport const Modal = ({\n open,\n onOpenChange,\n title,\n description,\n children,\n footer,\n size = 'medium',\n headerStyle = 'light',\n fixedTitle = false,\n alignToTop = false,\n disableCloseOptions = false,\n closeLabel = 'Sulje dialogi',\n keepMounted = false,\n className,\n ref,\n onKeyDown,\n onClick,\n onPointerDown,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...props\n}: ModalProps) => {\n const titleId = useId();\n const descriptionId = useId();\n const { dialogRef, close, phase, isPresent } = useNativeDialog({\n open: open ?? false,\n keepMounted,\n onOpenChange,\n });\n const describedBy =\n [description ? descriptionId : undefined, ariaDescribedBy].filter(Boolean).join(' ') ||\n undefined;\n const dialogDismissalProps = useDialogDismissal({\n close,\n disableCloseOptions,\n onClick,\n onKeyDown,\n onPointerDown,\n });\n\n if (!isPresent) return null;\n\n return (\n <dialog\n {...props}\n data-color-scheme=\"light\"\n ref={(node) => {\n dialogRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n className={cn(\n styles.modal,\n elevationStyles.elevationHigh,\n styles[`modal--${size}`],\n styles[`modal--${headerStyle}`],\n { [styles['modal--fixed-title']]: fixedTitle },\n { [styles['modal--align-top']]: alignToTop },\n { [styles['modal--opening']]: phase !== 'closing' },\n { [styles['modal--closing']]: phase === 'closing' },\n className,\n )}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy ?? (!ariaLabel && title ? titleId : undefined)}\n aria-describedby={describedBy}\n {...dialogDismissalProps}\n >\n <div className={styles.modal__container}>\n {!disableCloseOptions && (\n <button\n type=\"button\"\n className={cn(styles.modal__close, focusStyles.focusable)}\n aria-label={closeLabel}\n data-dialog-autofocus=\"true\"\n data-color-scheme={headerStyle}\n onClick={close}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n {(title || description) && (\n <div className={styles.modal__title} data-color-scheme={headerStyle}>\n {title && (\n <h2 id={titleId} className={styles.modal__heading}>\n {title}\n </h2>\n )}\n {description && (\n <div\n id={descriptionId}\n className={cn(styles.modal__description, 'dds-prose')}\n >\n {description}\n </div>\n )}\n </div>\n )}\n <div className={styles.modal__content}>{children}</div>\n </div>\n {footer && <div className={styles['modal__bottom-bar']}>{footer}</div>}\n </dialog>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
require('./Modal.css');
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
4
|
-
const modal = "
|
|
5
|
-
const modal__container = "
|
|
6
|
-
const modal__title = "
|
|
7
|
-
const modal__heading = "
|
|
8
|
-
const modal__description = "
|
|
9
|
-
const modal__content = "
|
|
10
|
-
const modal__close = "
|
|
4
|
+
const modal = "_modal_9bjhv_1";
|
|
5
|
+
const modal__container = "_modal__container_9bjhv_64";
|
|
6
|
+
const modal__title = "_modal__title_9bjhv_76";
|
|
7
|
+
const modal__heading = "_modal__heading_9bjhv_86";
|
|
8
|
+
const modal__description = "_modal__description_9bjhv_94";
|
|
9
|
+
const modal__content = "_modal__content_9bjhv_98";
|
|
10
|
+
const modal__close = "_modal__close_9bjhv_111";
|
|
11
11
|
const styles = {
|
|
12
12
|
modal,
|
|
13
|
-
"modal--align-top": "_modal--align-
|
|
14
|
-
"modal--small": "_modal--
|
|
15
|
-
"modal--medium": "_modal--
|
|
16
|
-
"modal--large": "_modal--
|
|
17
|
-
"modal--opening": "_modal--
|
|
18
|
-
"modal-open": "_modal-
|
|
19
|
-
"modal--closing": "_modal--
|
|
20
|
-
"modal-close": "_modal-
|
|
13
|
+
"modal--align-top": "_modal--align-top_9bjhv_21",
|
|
14
|
+
"modal--small": "_modal--small_9bjhv_38",
|
|
15
|
+
"modal--medium": "_modal--medium_9bjhv_42",
|
|
16
|
+
"modal--large": "_modal--large_9bjhv_45",
|
|
17
|
+
"modal--opening": "_modal--opening_9bjhv_49",
|
|
18
|
+
"modal-open": "_modal-open_9bjhv_1",
|
|
19
|
+
"modal--closing": "_modal--closing_9bjhv_52",
|
|
20
|
+
"modal-close": "_modal-close_9bjhv_1",
|
|
21
21
|
modal__container,
|
|
22
|
-
"modal--fixed-title": "_modal--fixed-
|
|
22
|
+
"modal--fixed-title": "_modal--fixed-title_9bjhv_72",
|
|
23
23
|
modal__title,
|
|
24
24
|
modal__heading,
|
|
25
25
|
modal__description,
|
|
26
26
|
modal__content,
|
|
27
27
|
modal__close,
|
|
28
|
-
"modal__bottom-bar": "_modal__bottom-
|
|
29
|
-
"modal--dark": "_modal--
|
|
28
|
+
"modal__bottom-bar": "_modal__bottom-bar_9bjhv_132",
|
|
29
|
+
"modal--dark": "_modal--dark_9bjhv_137"
|
|
30
30
|
};
|
|
31
31
|
exports.default = styles;
|
|
32
32
|
exports.modal = modal;
|
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
import './Modal.css';
|
|
2
|
-
const modal = "
|
|
3
|
-
const modal__container = "
|
|
4
|
-
const modal__title = "
|
|
5
|
-
const modal__heading = "
|
|
6
|
-
const modal__description = "
|
|
7
|
-
const modal__content = "
|
|
8
|
-
const modal__close = "
|
|
2
|
+
const modal = "_modal_9bjhv_1";
|
|
3
|
+
const modal__container = "_modal__container_9bjhv_64";
|
|
4
|
+
const modal__title = "_modal__title_9bjhv_76";
|
|
5
|
+
const modal__heading = "_modal__heading_9bjhv_86";
|
|
6
|
+
const modal__description = "_modal__description_9bjhv_94";
|
|
7
|
+
const modal__content = "_modal__content_9bjhv_98";
|
|
8
|
+
const modal__close = "_modal__close_9bjhv_111";
|
|
9
9
|
const styles = {
|
|
10
10
|
modal,
|
|
11
|
-
"modal--align-top": "_modal--align-
|
|
12
|
-
"modal--small": "_modal--
|
|
13
|
-
"modal--medium": "_modal--
|
|
14
|
-
"modal--large": "_modal--
|
|
15
|
-
"modal--opening": "_modal--
|
|
16
|
-
"modal-open": "_modal-
|
|
17
|
-
"modal--closing": "_modal--
|
|
18
|
-
"modal-close": "_modal-
|
|
11
|
+
"modal--align-top": "_modal--align-top_9bjhv_21",
|
|
12
|
+
"modal--small": "_modal--small_9bjhv_38",
|
|
13
|
+
"modal--medium": "_modal--medium_9bjhv_42",
|
|
14
|
+
"modal--large": "_modal--large_9bjhv_45",
|
|
15
|
+
"modal--opening": "_modal--opening_9bjhv_49",
|
|
16
|
+
"modal-open": "_modal-open_9bjhv_1",
|
|
17
|
+
"modal--closing": "_modal--closing_9bjhv_52",
|
|
18
|
+
"modal-close": "_modal-close_9bjhv_1",
|
|
19
19
|
modal__container,
|
|
20
|
-
"modal--fixed-title": "_modal--fixed-
|
|
20
|
+
"modal--fixed-title": "_modal--fixed-title_9bjhv_72",
|
|
21
21
|
modal__title,
|
|
22
22
|
modal__heading,
|
|
23
23
|
modal__description,
|
|
24
24
|
modal__content,
|
|
25
25
|
modal__close,
|
|
26
|
-
"modal__bottom-bar": "_modal__bottom-
|
|
27
|
-
"modal--dark": "_modal--
|
|
26
|
+
"modal__bottom-bar": "_modal__bottom-bar_9bjhv_132",
|
|
27
|
+
"modal--dark": "_modal--dark_9bjhv_137"
|
|
28
28
|
};
|
|
29
29
|
export {
|
|
30
30
|
styles as default,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const jsxRuntime = require("react/jsx-runtime");
|
|
4
4
|
const icons = require("@dnanpm/icons");
|
|
5
|
-
const
|
|
5
|
+
const index = require("../../styles/utils/index.cjs");
|
|
6
6
|
const Notification_module = require("./Notification.module.css.cjs");
|
|
7
7
|
const cn = require("../../utils/cn/cn.cjs");
|
|
8
8
|
const variantIcons = {
|
|
@@ -33,6 +33,7 @@ const Notification = ({
|
|
|
33
33
|
"div",
|
|
34
34
|
{
|
|
35
35
|
...props,
|
|
36
|
+
"data-color-scheme": "light",
|
|
36
37
|
ref,
|
|
37
38
|
role,
|
|
38
39
|
className: cn.cn(Notification_module.default.notification, Notification_module.default[`notification--${variant}`], className),
|
|
@@ -43,7 +44,7 @@ const Notification = ({
|
|
|
43
44
|
"button",
|
|
44
45
|
{
|
|
45
46
|
type: "button",
|
|
46
|
-
className: cn.cn(Notification_module.default.notification__close,
|
|
47
|
+
className: cn.cn(Notification_module.default.notification__close, index.focusStyles.focusable),
|
|
47
48
|
onClick: onClose,
|
|
48
49
|
"aria-label": closeLabel,
|
|
49
50
|
children: /* @__PURE__ */ jsxRuntime.jsx(icons.Close, { "aria-hidden": "true" })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Notification.cjs","sources":["../../../src/components/Notification/Notification.tsx"],"sourcesContent":["import type { ComponentType, SVGProps } from 'react';\nimport { Check, Close, Error as ErrorIcon, Info, Warning } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport focusStyles from '../../styles/utils
|
|
1
|
+
{"version":3,"file":"Notification.cjs","sources":["../../../src/components/Notification/Notification.tsx"],"sourcesContent":["import type { ComponentType, SVGProps } from 'react';\nimport { Check, Close, Error as ErrorIcon, Info, Warning } from '@dnanpm/icons';\nimport { cn } from '../../utils/cn';\nimport { focusStyles } from '../../styles/utils';\nimport styles from './Notification.module.css';\nimport type { NotificationProps, NotificationVariant } from './Notification.types';\n\nconst variantIcons: Record<NotificationVariant, ComponentType<SVGProps<SVGSVGElement>>> = {\n info: Info,\n success: Check,\n warning: Warning,\n error: ErrorIcon,\n};\n\nconst variantRoles: Record<NotificationVariant, 'status' | 'alert'> = {\n info: 'status',\n success: 'status',\n warning: 'alert',\n error: 'alert',\n};\n\nexport const Notification = ({\n variant,\n children,\n closable = false,\n onClose,\n closeLabel = 'Sulje ilmoitus',\n className,\n ref,\n ...props\n}: NotificationProps) => {\n const Icon = variantIcons[variant];\n const role = variantRoles[variant];\n\n return (\n <div\n {...props}\n data-color-scheme=\"light\"\n ref={ref}\n role={role}\n className={cn(styles.notification, styles[`notification--${variant}`], className)}\n >\n <div className={styles['notification__icon-container']}>\n <Icon className={styles.notification__icon} aria-hidden=\"true\" />\n </div>\n <div className={styles.notification__content}>{children}</div>\n {closable && (\n <button\n type=\"button\"\n className={cn(styles.notification__close, focusStyles.focusable)}\n onClick={onClose}\n aria-label={closeLabel}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n};\n"],"names":["Info","Check","Warning","ErrorIcon","jsxs","cn","styles","jsx","focusStyles","Close"],"mappings":";;;;;;;AAOA,MAAM,eAAoF;AAAA,EACtF,MAAMA,MAAAA;AAAAA,EACN,SAASC,MAAAA;AAAAA,EACT,SAASC,MAAAA;AAAAA,EACT,OAAOC,MAAAA;AACX;AAEA,MAAM,eAAgE;AAAA,EAClE,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AACX;AAEO,MAAM,eAAe,CAAC;AAAA,EACzB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA,GAAG;AACP,MAAyB;AACrB,QAAM,OAAO,aAAa,OAAO;AACjC,QAAM,OAAO,aAAa,OAAO;AAEjC,SACIC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ,qBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,MACA,WAAWC,GAAAA,GAAGC,oBAAAA,QAAO,cAAcA,oBAAAA,QAAO,iBAAiB,OAAO,EAAE,GAAG,SAAS;AAAA,MAEhF,UAAA;AAAA,QAAAC,2BAAAA,IAAC,OAAA,EAAI,WAAWD,oBAAAA,QAAO,8BAA8B,GACjD,UAAAC,2BAAAA,IAAC,MAAA,EAAK,WAAWD,4BAAO,oBAAoB,eAAY,OAAA,CAAO,GACnE;AAAA,QACAC,2BAAAA,IAAC,OAAA,EAAI,WAAWD,oBAAAA,QAAO,uBAAwB,UAAS;AAAA,QACvD,YACGC,2BAAAA;AAAAA,UAAC;AAAA,UAAA;AAAA,YACG,MAAK;AAAA,YACL,WAAWF,GAAAA,GAAGC,oBAAAA,QAAO,qBAAqBE,MAAAA,YAAY,SAAS;AAAA,YAC/D,SAAS;AAAA,YACT,cAAY;AAAA,YAEZ,UAAAD,2BAAAA,IAACE,MAAAA,OAAA,EAAM,eAAY,OAAA,CAAO;AAAA,UAAA;AAAA,QAAA;AAAA,MAC9B;AAAA,IAAA;AAAA,EAAA;AAIhB;;"}
|