@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.
Files changed (240) hide show
  1. package/README.md +13 -0
  2. package/dist/components/Accordion/Accordion.css +5 -1
  3. package/dist/components/AccordionItem/AccordionItem.cjs +4 -4
  4. package/dist/components/AccordionItem/AccordionItem.cjs.map +1 -1
  5. package/dist/components/AccordionItem/AccordionItem.css +4 -1
  6. package/dist/components/AccordionItem/AccordionItem.d.ts.map +1 -1
  7. package/dist/components/AccordionItem/AccordionItem.js +2 -2
  8. package/dist/components/AccordionItem/AccordionItem.js.map +1 -1
  9. package/dist/components/Avatar/Avatar.cjs +83 -0
  10. package/dist/components/Avatar/Avatar.cjs.map +1 -0
  11. package/dist/components/Avatar/Avatar.css +188 -0
  12. package/dist/components/Avatar/Avatar.d.ts +3 -0
  13. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  14. package/dist/components/Avatar/Avatar.js +83 -0
  15. package/dist/components/Avatar/Avatar.js.map +1 -0
  16. package/dist/components/Avatar/Avatar.module.css.cjs +40 -0
  17. package/dist/components/Avatar/Avatar.module.css.cjs.map +1 -0
  18. package/dist/components/Avatar/Avatar.module.css.js +40 -0
  19. package/dist/components/Avatar/Avatar.module.css.js.map +1 -0
  20. package/dist/components/Avatar/Avatar.types.d.ts +66 -0
  21. package/dist/components/Avatar/Avatar.types.d.ts.map +1 -0
  22. package/dist/components/Avatar/Avatar.utils.cjs +17 -0
  23. package/dist/components/Avatar/Avatar.utils.cjs.map +1 -0
  24. package/dist/components/Avatar/Avatar.utils.d.ts +6 -0
  25. package/dist/components/Avatar/Avatar.utils.d.ts.map +1 -0
  26. package/dist/components/Avatar/Avatar.utils.js +17 -0
  27. package/dist/components/Avatar/Avatar.utils.js.map +1 -0
  28. package/dist/components/Avatar/index.d.ts +3 -0
  29. package/dist/components/Avatar/index.d.ts.map +1 -0
  30. package/dist/components/Breadcrumb/Breadcrumb.cjs +9 -12
  31. package/dist/components/Breadcrumb/Breadcrumb.cjs.map +1 -1
  32. package/dist/components/Breadcrumb/Breadcrumb.css +16 -16
  33. package/dist/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  34. package/dist/components/Breadcrumb/Breadcrumb.js +2 -5
  35. package/dist/components/Breadcrumb/Breadcrumb.js.map +1 -1
  36. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs +5 -8
  37. package/dist/components/Breadcrumb/Breadcrumb.module.css.cjs.map +1 -1
  38. package/dist/components/Breadcrumb/Breadcrumb.module.css.js +5 -8
  39. package/dist/components/Breadcrumb/Breadcrumb.module.css.js.map +1 -1
  40. package/dist/components/Button/Button.cjs +29 -3
  41. package/dist/components/Button/Button.cjs.map +1 -1
  42. package/dist/components/Button/Button.css +78 -31
  43. package/dist/components/Button/Button.d.ts +1 -1
  44. package/dist/components/Button/Button.d.ts.map +1 -1
  45. package/dist/components/Button/Button.js +28 -2
  46. package/dist/components/Button/Button.js.map +1 -1
  47. package/dist/components/Button/Button.module.css.cjs +19 -11
  48. package/dist/components/Button/Button.module.css.cjs.map +1 -1
  49. package/dist/components/Button/Button.module.css.js +19 -11
  50. package/dist/components/Button/Button.module.css.js.map +1 -1
  51. package/dist/components/Button/Button.types.d.ts +20 -3
  52. package/dist/components/Button/Button.types.d.ts.map +1 -1
  53. package/dist/components/Button/index.d.ts +1 -1
  54. package/dist/components/Button/index.d.ts.map +1 -1
  55. package/dist/components/ButtonCard/ButtonCard.cjs +19 -14
  56. package/dist/components/ButtonCard/ButtonCard.cjs.map +1 -1
  57. package/dist/components/ButtonCard/ButtonCard.css +63 -20
  58. package/dist/components/ButtonCard/ButtonCard.d.ts +2 -1
  59. package/dist/components/ButtonCard/ButtonCard.d.ts.map +1 -1
  60. package/dist/components/ButtonCard/ButtonCard.js +17 -12
  61. package/dist/components/ButtonCard/ButtonCard.js.map +1 -1
  62. package/dist/components/ButtonCard/ButtonCard.module.css.cjs +14 -12
  63. package/dist/components/ButtonCard/ButtonCard.module.css.cjs.map +1 -1
  64. package/dist/components/ButtonCard/ButtonCard.module.css.js +14 -12
  65. package/dist/components/ButtonCard/ButtonCard.module.css.js.map +1 -1
  66. package/dist/components/ButtonCard/ButtonCard.types.d.ts +3 -2
  67. package/dist/components/ButtonCard/ButtonCard.types.d.ts.map +1 -1
  68. package/dist/components/Checkbox/Checkbox.cjs +105 -0
  69. package/dist/components/Checkbox/Checkbox.cjs.map +1 -0
  70. package/dist/components/Checkbox/Checkbox.css +323 -0
  71. package/dist/components/Checkbox/Checkbox.d.ts +3 -0
  72. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  73. package/dist/components/Checkbox/Checkbox.js +105 -0
  74. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  75. package/dist/components/Checkbox/Checkbox.module.css.cjs +35 -0
  76. package/dist/components/Checkbox/Checkbox.module.css.cjs.map +1 -0
  77. package/dist/components/Checkbox/Checkbox.module.css.js +35 -0
  78. package/dist/components/Checkbox/Checkbox.module.css.js.map +1 -0
  79. package/dist/components/Checkbox/Checkbox.types.d.ts +47 -0
  80. package/dist/components/Checkbox/Checkbox.types.d.ts.map +1 -0
  81. package/dist/components/Checkbox/index.d.ts +3 -0
  82. package/dist/components/Checkbox/index.d.ts.map +1 -0
  83. package/dist/components/ContentCard/ContentCard.cjs +8 -7
  84. package/dist/components/ContentCard/ContentCard.cjs.map +1 -1
  85. package/dist/components/ContentCard/ContentCard.css +39 -34
  86. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -1
  87. package/dist/components/ContentCard/ContentCard.js +3 -2
  88. package/dist/components/ContentCard/ContentCard.js.map +1 -1
  89. package/dist/components/ContentCard/ContentCard.module.css.cjs +18 -18
  90. package/dist/components/ContentCard/ContentCard.module.css.js +18 -18
  91. package/dist/components/ContentCard/ContentCard.types.d.ts +2 -1
  92. package/dist/components/ContentCard/ContentCard.types.d.ts.map +1 -1
  93. package/dist/components/Drawer/Drawer.cjs +15 -7
  94. package/dist/components/Drawer/Drawer.cjs.map +1 -1
  95. package/dist/components/Drawer/Drawer.css +48 -45
  96. package/dist/components/Drawer/Drawer.d.ts.map +1 -1
  97. package/dist/components/Drawer/Drawer.js +12 -4
  98. package/dist/components/Drawer/Drawer.js.map +1 -1
  99. package/dist/components/Drawer/Drawer.module.css.cjs +16 -16
  100. package/dist/components/Drawer/Drawer.module.css.js +16 -16
  101. package/dist/components/Footer/Footer.cjs +8 -9
  102. package/dist/components/Footer/Footer.cjs.map +1 -1
  103. package/dist/components/Footer/Footer.css +87 -83
  104. package/dist/components/Footer/Footer.d.ts.map +1 -1
  105. package/dist/components/Footer/Footer.js +1 -2
  106. package/dist/components/Footer/Footer.js.map +1 -1
  107. package/dist/components/Footer/Footer.module.css.cjs +39 -39
  108. package/dist/components/Footer/Footer.module.css.js +39 -39
  109. package/dist/components/FunctionButton/FunctionButton.cjs +2 -2
  110. package/dist/components/FunctionButton/FunctionButton.cjs.map +1 -1
  111. package/dist/components/FunctionButton/FunctionButton.css +5 -1
  112. package/dist/components/FunctionButton/FunctionButton.js +1 -1
  113. package/dist/components/FunctionButton/FunctionButton.js.map +1 -1
  114. package/dist/components/Hero/Hero.cjs +30 -27
  115. package/dist/components/Hero/Hero.cjs.map +1 -1
  116. package/dist/components/Hero/Hero.css +49 -44
  117. package/dist/components/Hero/Hero.d.ts +1 -1
  118. package/dist/components/Hero/Hero.d.ts.map +1 -1
  119. package/dist/components/Hero/Hero.js +30 -27
  120. package/dist/components/Hero/Hero.js.map +1 -1
  121. package/dist/components/Hero/Hero.module.css.cjs +18 -18
  122. package/dist/components/Hero/Hero.module.css.js +18 -18
  123. package/dist/components/Hero/Hero.types.d.ts +2 -6
  124. package/dist/components/Hero/Hero.types.d.ts.map +1 -1
  125. package/dist/components/IconButton/IconButton.cjs +3 -4
  126. package/dist/components/IconButton/IconButton.cjs.map +1 -1
  127. package/dist/components/IconButton/IconButton.css +5 -1
  128. package/dist/components/IconButton/IconButton.d.ts.map +1 -1
  129. package/dist/components/IconButton/IconButton.js +1 -2
  130. package/dist/components/IconButton/IconButton.js.map +1 -1
  131. package/dist/components/Label/Label.css +5 -1
  132. package/dist/components/MainNavigation/MainNavigation.cjs +216 -162
  133. package/dist/components/MainNavigation/MainNavigation.cjs.map +1 -1
  134. package/dist/components/MainNavigation/MainNavigation.css +206 -183
  135. package/dist/components/MainNavigation/MainNavigation.d.ts +1 -1
  136. package/dist/components/MainNavigation/MainNavigation.d.ts.map +1 -1
  137. package/dist/components/MainNavigation/MainNavigation.js +177 -123
  138. package/dist/components/MainNavigation/MainNavigation.js.map +1 -1
  139. package/dist/components/MainNavigation/MainNavigation.module.css.cjs +80 -78
  140. package/dist/components/MainNavigation/MainNavigation.module.css.cjs.map +1 -1
  141. package/dist/components/MainNavigation/MainNavigation.module.css.js +80 -78
  142. package/dist/components/MainNavigation/MainNavigation.module.css.js.map +1 -1
  143. package/dist/components/MainNavigation/MainNavigation.types.d.ts +0 -13
  144. package/dist/components/MainNavigation/MainNavigation.types.d.ts.map +1 -1
  145. package/dist/components/MainNavigation/MainNavigation.utils.cjs +8 -4
  146. package/dist/components/MainNavigation/MainNavigation.utils.cjs.map +1 -1
  147. package/dist/components/MainNavigation/MainNavigation.utils.d.ts +1 -0
  148. package/dist/components/MainNavigation/MainNavigation.utils.d.ts.map +1 -1
  149. package/dist/components/MainNavigation/MainNavigation.utils.js +8 -4
  150. package/dist/components/MainNavigation/MainNavigation.utils.js.map +1 -1
  151. package/dist/components/Modal/Modal.cjs +14 -6
  152. package/dist/components/Modal/Modal.cjs.map +1 -1
  153. package/dist/components/Modal/Modal.css +44 -40
  154. package/dist/components/Modal/Modal.d.ts.map +1 -1
  155. package/dist/components/Modal/Modal.js +12 -4
  156. package/dist/components/Modal/Modal.js.map +1 -1
  157. package/dist/components/Modal/Modal.module.css.cjs +18 -18
  158. package/dist/components/Modal/Modal.module.css.js +18 -18
  159. package/dist/components/Notification/Notification.cjs +3 -2
  160. package/dist/components/Notification/Notification.cjs.map +1 -1
  161. package/dist/components/Notification/Notification.css +16 -11
  162. package/dist/components/Notification/Notification.d.ts.map +1 -1
  163. package/dist/components/Notification/Notification.js +2 -1
  164. package/dist/components/Notification/Notification.js.map +1 -1
  165. package/dist/components/Notification/Notification.module.css.cjs +9 -9
  166. package/dist/components/Notification/Notification.module.css.js +9 -9
  167. package/dist/components/Pagination/Pagination.cjs +142 -0
  168. package/dist/components/Pagination/Pagination.cjs.map +1 -0
  169. package/dist/components/Pagination/Pagination.css +256 -0
  170. package/dist/components/Pagination/Pagination.d.ts +3 -0
  171. package/dist/components/Pagination/Pagination.d.ts.map +1 -0
  172. package/dist/components/Pagination/Pagination.js +142 -0
  173. package/dist/components/Pagination/Pagination.js.map +1 -0
  174. package/dist/components/Pagination/Pagination.module.css.cjs +34 -0
  175. package/dist/components/Pagination/Pagination.module.css.cjs.map +1 -0
  176. package/dist/components/Pagination/Pagination.module.css.js +34 -0
  177. package/dist/components/Pagination/Pagination.module.css.js.map +1 -0
  178. package/dist/components/Pagination/Pagination.types.d.ts +20 -0
  179. package/dist/components/Pagination/Pagination.types.d.ts.map +1 -0
  180. package/dist/components/Pagination/Pagination.utils.cjs +76 -0
  181. package/dist/components/Pagination/Pagination.utils.cjs.map +1 -0
  182. package/dist/components/Pagination/Pagination.utils.d.ts +21 -0
  183. package/dist/components/Pagination/Pagination.utils.d.ts.map +1 -0
  184. package/dist/components/Pagination/Pagination.utils.js +76 -0
  185. package/dist/components/Pagination/Pagination.utils.js.map +1 -0
  186. package/dist/components/Pagination/index.d.ts +3 -0
  187. package/dist/components/Pagination/index.d.ts.map +1 -0
  188. package/dist/components/Pictograph/Pictograph.css +5 -1
  189. package/dist/components/Pictograph/PictographItem.css +5 -1
  190. package/dist/components/Quote/Quote.css +5 -1
  191. package/dist/components/Spinner/Spinner.css +5 -1
  192. package/dist/design-tokens/dist/tokens.cjs +5 -0
  193. package/dist/design-tokens/dist/tokens.cjs.map +1 -0
  194. package/dist/design-tokens/dist/tokens.js +5 -0
  195. package/dist/design-tokens/dist/tokens.js.map +1 -0
  196. package/dist/index.cjs +6 -0
  197. package/dist/index.cjs.map +1 -1
  198. package/dist/index.d.ts +7 -1
  199. package/dist/index.d.ts.map +1 -1
  200. package/dist/index.js +6 -0
  201. package/dist/index.js.map +1 -1
  202. package/dist/styles/utilities.css +6 -0
  203. package/dist/styles/utils/elevation.css +35 -26
  204. package/dist/styles/utils/focus.css +63 -68
  205. package/dist/styles/utils/index.cjs +33 -0
  206. package/dist/styles/utils/index.cjs.map +1 -0
  207. package/dist/styles/utils/index.d.ts +20 -0
  208. package/dist/styles/utils/index.d.ts.map +1 -0
  209. package/dist/styles/utils/index.js +33 -0
  210. package/dist/styles/utils/index.js.map +1 -0
  211. package/dist/styles/utils/overlay.css +35 -27
  212. package/dist/styles/utils/text-decoration.css +20 -12
  213. package/dist/styles.css +27 -3
  214. package/dist/utils/index.d.ts +1 -0
  215. package/dist/utils/index.d.ts.map +1 -1
  216. package/dist/utils/isRenderable/index.d.ts +2 -0
  217. package/dist/utils/isRenderable/index.d.ts.map +1 -0
  218. package/dist/utils/isRenderable/isRenderable.cjs +5 -0
  219. package/dist/utils/isRenderable/isRenderable.cjs.map +1 -0
  220. package/dist/utils/isRenderable/isRenderable.d.ts +4 -0
  221. package/dist/utils/isRenderable/isRenderable.d.ts.map +1 -0
  222. package/dist/utils/isRenderable/isRenderable.js +5 -0
  223. package/dist/utils/isRenderable/isRenderable.js.map +1 -0
  224. package/package.json +12 -4
  225. package/dist/styles/utils/elevation.module.css.cjs +0 -16
  226. package/dist/styles/utils/elevation.module.css.cjs.map +0 -1
  227. package/dist/styles/utils/elevation.module.css.js +0 -16
  228. package/dist/styles/utils/elevation.module.css.js.map +0 -1
  229. package/dist/styles/utils/focus.module.css.cjs +0 -16
  230. package/dist/styles/utils/focus.module.css.cjs.map +0 -1
  231. package/dist/styles/utils/focus.module.css.js +0 -16
  232. package/dist/styles/utils/focus.module.css.js.map +0 -1
  233. package/dist/styles/utils/overlay.module.css.cjs +0 -13
  234. package/dist/styles/utils/overlay.module.css.cjs.map +0 -1
  235. package/dist/styles/utils/overlay.module.css.js +0 -13
  236. package/dist/styles/utils/overlay.module.css.js.map +0 -1
  237. package/dist/styles/utils/text-decoration.module.css.cjs +0 -13
  238. package/dist/styles/utils/text-decoration.module.css.cjs.map +0 -1
  239. package/dist/styles/utils/text-decoration.module.css.js +0 -13
  240. 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 elevation_module = require("../../styles/utils/elevation.module.css.cjs");
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
- elevation_module.default.elevationHigh,
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, focus_module.default.focusable),
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("div", { id: descriptionId, className: Modal_module.default.modal__description, children: description })
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 from '../../styles/utils/elevation.module.css';\nimport focusStyles from '../../styles/utils/focus.module.css';\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 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 onClick={close}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n {(title || description) && (\n <div className={styles.modal__title}>\n {title && (\n <h2 id={titleId} className={styles.modal__heading}>\n {title}\n </h2>\n )}\n {description && (\n <div id={descriptionId} className={styles.modal__description}>\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
+ {"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{._modal_ewl1e_1 {
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-top_ewl1e_21 {
21
+ ._modal--align-top_9bjhv_21 {
22
22
  margin-block: 5dvh auto;
23
23
  }
24
24
 
25
- ._modal_ewl1e_1:not([open]) {
25
+ ._modal_9bjhv_1:not([open]) {
26
26
  display: none;
27
27
  }
28
28
 
29
- ._modal_ewl1e_1::backdrop {
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--small_ewl1e_38 {
38
+ ._modal--small_9bjhv_38 {
39
39
  width: 480px;
40
40
  min-height: auto;
41
41
  }
42
- ._modal--medium_ewl1e_42 {
42
+ ._modal--medium_9bjhv_42 {
43
43
  width: 768px;
44
44
  }
45
- ._modal--large_ewl1e_45 {
45
+ ._modal--large_9bjhv_45 {
46
46
  width: 960px;
47
47
  }
48
48
 
49
- ._modal--opening_ewl1e_49 {
50
- animation: _modal-open_ewl1e_1 var(--_modal-transition-duration-open) ease both;
49
+ ._modal--opening_9bjhv_49 {
50
+ animation: _modal-open_9bjhv_1 var(--_modal-transition-duration-open) ease both;
51
51
  }
52
- ._modal--closing_ewl1e_52 {
53
- animation: _modal-close_ewl1e_1 var(--_modal-transition-duration-close) ease both;
52
+ ._modal--closing_9bjhv_52 {
53
+ animation: _modal-close_9bjhv_1 var(--_modal-transition-duration-close) ease both;
54
54
  }
55
- ._modal--opening_ewl1e_49::backdrop {
55
+ ._modal--opening_9bjhv_49::backdrop {
56
56
  opacity: 1;
57
57
  transition-duration: var(--_modal-transition-duration-open);
58
58
  }
59
- ._modal--closing_ewl1e_52::backdrop {
59
+ ._modal--closing_9bjhv_52::backdrop {
60
60
  opacity: 0;
61
61
  transition-duration: var(--_modal-transition-duration-close);
62
62
  }
63
63
 
64
- ._modal__container_ewl1e_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-title_ewl1e_72 ._modal__container_ewl1e_64 {
72
+ ._modal--fixed-title_9bjhv_72 ._modal__container_9bjhv_64 {
73
73
  overflow: hidden;
74
74
  }
75
75
 
76
- ._modal__title_ewl1e_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
- ._modal__heading_ewl1e_86 {
86
+ ._modal__heading_9bjhv_86 {
87
87
  margin: 0;
88
88
  font: var(--typography-heading-md);
89
89
  }
90
90
 
91
- ._modal--small_ewl1e_38 ._modal__heading_ewl1e_86 {
91
+ ._modal--small_9bjhv_38 ._modal__heading_9bjhv_86 {
92
92
  font: var(--typography-heading-sm);
93
93
  }
94
- ._modal__description_ewl1e_94 {
94
+ ._modal__description_9bjhv_94 {
95
95
  margin: 0;
96
96
  }
97
97
 
98
- ._modal__content_ewl1e_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-title_ewl1e_72 ._modal__content_ewl1e_98 {
104
+ ._modal--fixed-title_9bjhv_72 ._modal__content_9bjhv_98 {
105
105
  overflow: auto;
106
106
  }
107
- ._modal__container_ewl1e_64:not(:has(._modal__title_ewl1e_76)) ._modal__content_ewl1e_98 {
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
- ._modal__close_ewl1e_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
- ._modal__close_ewl1e_111 svg {
128
+ ._modal__close_9bjhv_111 svg {
129
129
  width: 24px;
130
130
  height: 24px;
131
131
  }
132
- ._modal__bottom-bar_ewl1e_132 {
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--dark_ewl1e_137 ._modal__title_ewl1e_76 {
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--dark_ewl1e_137 ._modal__close_ewl1e_111 {
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-open_ewl1e_1 {
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-close_ewl1e_1 {
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--opening_ewl1e_49::backdrop {
164
+ ._modal--opening_9bjhv_49::backdrop {
165
165
  @starting-style {
166
166
  opacity: 0;
167
167
  }
168
168
  }
169
169
 
170
- @media (max-width: 359px) {
171
- ._modal_ewl1e_1 {
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
- ._modal_ewl1e_1,
182
- ._modal--opening_ewl1e_49,
183
- ._modal--closing_ewl1e_52,
184
- ._modal_ewl1e_1::backdrop {
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
- ._modal_ewl1e_1 {
191
+ ._modal_9bjhv_1 {
192
192
  border: 2px solid CanvasText;
193
193
  box-shadow: none;
194
194
  }
195
- ._modal_ewl1e_1::backdrop {
195
+ ._modal_9bjhv_1::backdrop {
196
196
  background: Canvas;
197
197
  opacity: 0.7;
198
198
  }
199
- ._modal__close_ewl1e_111 {
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":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,eAAO,MAAM,KAAK,GAAI,qTAuBnB,UAAU,mDA4EZ,CAAC"}
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/elevation.module.css.js";
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("div", { id: descriptionId, className: styles.modal__description, children: description })
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 from '../../styles/utils/elevation.module.css';\nimport focusStyles from '../../styles/utils/focus.module.css';\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 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 onClick={close}\n >\n <Close aria-hidden=\"true\" />\n </button>\n )}\n {(title || description) && (\n <div className={styles.modal__title}>\n {title && (\n <h2 id={titleId} className={styles.modal__heading}>\n {title}\n </h2>\n )}\n {description && (\n <div id={descriptionId} className={styles.modal__description}>\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":";;;;;;;;;AAUO,MAAM,QAAQ,CAAC;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd,aAAa;AAAA,EACb,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,GAAG;AACP,MAAkB;AACd,QAAM,UAAU,MAAA;AAChB,QAAM,gBAAgB,MAAA;AACtB,QAAM,EAAE,WAAW,OAAO,OAAO,UAAA,IAAc,gBAAgB;AAAA,IAC3D,MAAM,QAAQ;AAAA,IACd;AAAA,IACA;AAAA,EAAA,CACH;AACD,QAAM,cACF,CAAC,cAAc,gBAAgB,QAAW,eAAe,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KACnF;AACJ,QAAM,uBAAuB,mBAAmB;AAAA,IAC5C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACH;AAED,MAAI,CAAC,UAAW,QAAO;AAEvB,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ,KAAK,CAAC,SAAS;AACX,kBAAU,UAAU;AACpB,YAAI,OAAO,QAAQ,WAAY,KAAI,IAAI;AAAA,iBAC9B,SAAS,UAAU;AAAA,MAChC;AAAA,MACA,WAAW;AAAA,QACP,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,OAAO,UAAU,IAAI,EAAE;AAAA,QACvB,OAAO,UAAU,WAAW,EAAE;AAAA,QAC9B,EAAE,CAAC,OAAO,oBAAoB,CAAC,GAAG,WAAA;AAAA,QAClC,EAAE,CAAC,OAAO,kBAAkB,CAAC,GAAG,WAAA;AAAA,QAChC,EAAE,CAAC,OAAO,gBAAgB,CAAC,GAAG,UAAU,UAAA;AAAA,QACxC,EAAE,CAAC,OAAO,gBAAgB,CAAC,GAAG,UAAU,UAAA;AAAA,QACxC;AAAA,MAAA;AAAA,MAEJ,cAAY;AAAA,MACZ,mBAAiB,mBAAmB,CAAC,aAAa,QAAQ,UAAU;AAAA,MACpE,oBAAkB;AAAA,MACjB,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAA,qBAAC,OAAA,EAAI,WAAW,OAAO,kBAClB,UAAA;AAAA,UAAA,CAAC,uBACE;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,MAAK;AAAA,cACL,WAAW,GAAG,OAAO,cAAc,YAAY,SAAS;AAAA,cACxD,cAAY;AAAA,cACZ,yBAAsB;AAAA,cACtB,SAAS;AAAA,cAET,UAAA,oBAAC,OAAA,EAAM,eAAY,OAAA,CAAO;AAAA,YAAA;AAAA,UAAA;AAAA,WAGhC,SAAS,gBACP,qBAAC,OAAA,EAAI,WAAW,OAAO,cAClB,UAAA;AAAA,YAAA,6BACI,MAAA,EAAG,IAAI,SAAS,WAAW,OAAO,gBAC9B,UAAA,MAAA,CACL;AAAA,YAEH,mCACI,OAAA,EAAI,IAAI,eAAe,WAAW,OAAO,oBACrC,UAAA,YAAA,CACL;AAAA,UAAA,GAER;AAAA,UAEJ,oBAAC,OAAA,EAAI,WAAW,OAAO,gBAAiB,SAAA,CAAS;AAAA,QAAA,GACrD;AAAA,QACC,UAAU,oBAAC,OAAA,EAAI,WAAW,OAAO,mBAAmB,GAAI,UAAA,OAAA,CAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAG5E;"}
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 = "_modal_ewl1e_1";
5
- const modal__container = "_modal__container_ewl1e_64";
6
- const modal__title = "_modal__title_ewl1e_76";
7
- const modal__heading = "_modal__heading_ewl1e_86";
8
- const modal__description = "_modal__description_ewl1e_94";
9
- const modal__content = "_modal__content_ewl1e_98";
10
- const modal__close = "_modal__close_ewl1e_111";
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-top_ewl1e_21",
14
- "modal--small": "_modal--small_ewl1e_38",
15
- "modal--medium": "_modal--medium_ewl1e_42",
16
- "modal--large": "_modal--large_ewl1e_45",
17
- "modal--opening": "_modal--opening_ewl1e_49",
18
- "modal-open": "_modal-open_ewl1e_1",
19
- "modal--closing": "_modal--closing_ewl1e_52",
20
- "modal-close": "_modal-close_ewl1e_1",
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-title_ewl1e_72",
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-bar_ewl1e_132",
29
- "modal--dark": "_modal--dark_ewl1e_137"
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 = "_modal_ewl1e_1";
3
- const modal__container = "_modal__container_ewl1e_64";
4
- const modal__title = "_modal__title_ewl1e_76";
5
- const modal__heading = "_modal__heading_ewl1e_86";
6
- const modal__description = "_modal__description_ewl1e_94";
7
- const modal__content = "_modal__content_ewl1e_98";
8
- const modal__close = "_modal__close_ewl1e_111";
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-top_ewl1e_21",
12
- "modal--small": "_modal--small_ewl1e_38",
13
- "modal--medium": "_modal--medium_ewl1e_42",
14
- "modal--large": "_modal--large_ewl1e_45",
15
- "modal--opening": "_modal--opening_ewl1e_49",
16
- "modal-open": "_modal-open_ewl1e_1",
17
- "modal--closing": "_modal--closing_ewl1e_52",
18
- "modal-close": "_modal-close_ewl1e_1",
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-title_ewl1e_72",
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-bar_ewl1e_132",
27
- "modal--dark": "_modal--dark_ewl1e_137"
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 focus_module = require("../../styles/utils/focus.module.css.cjs");
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, focus_module.default.focusable),
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/focus.module.css';\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 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;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,aAAAA,QAAY,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;;"}
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;;"}