dibk-designsystemet 1.0.0-rc.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/components/Logo/index.tsx","../src/components/Header/index.tsx","../src/components/icons.tsx","../src/components/MegaMenu/index.tsx","../src/components/Search/index.tsx","../src/components/MenuSection/index.tsx","../src/components/IconLinkList/index.tsx","../src/components/Footer/index.tsx","../src/components/SectionHeader/index.tsx","../src/components/FeedbackWidget/index.tsx","../src/components/AppShell/index.tsx","../src/components/AccountMenu/index.tsx","../src/components/CopyButton/index.tsx","../src/components/CodeBlock/index.tsx"],"sourcesContent":["// dibk-designsystemet - DIBK design system.\n//\n// Re-exports all of Designsystemet (Digdir) so apps install ONE package, and adds\n// DIBK-specific composite components that have no 1:1 in Designsystemet. The\n// package is the single import seam: consumers import everything from here and\n// never reach into @digdir/* directly, so a Digdir primitive can later be\n// shadowed by a DIBK version (export { Button } from \"./components/Button\")\n// without touching app code.\n//\n// CSS the consuming app imports (only dibk-designsystemet entries, no @digdir/*):\n// import \"dibk-designsystemet/fonts.css\"; // Poppins @font-face\n// import \"dibk-designsystemet/styles.css\"; // everything else, in cascade order\n// The JS barrel deliberately carries no CSS import: a JS file that imports CSS\n// cannot be loaded by Node, which breaks SSR and the CJS build. dist/styles.css\n// is the single CSS entry (see scripts/build-styles-entry.mjs).\n\n// DIBK base (brand font on body) then overrides, both unlayered so they win over\n// Designsystemet's @layer ds without specificity hacks. esbuild strips these from\n// the JS output and bundles them into dist/index.css, which dist/styles.css pulls\n// in after Designsystemet's own CSS.\nimport \"./base.css\";\nimport \"./overrides.css\";\n\n// --- Designsystemet, re-exported wholesale ---\nexport * from \"@digdir/designsystemet-react\";\n\n// --- DIBK brand components (no 1:1 in Designsystemet) ---\nexport * from \"./components/Logo\";\nexport * from \"./components/Header\";\nexport * from \"./components/MegaMenu\";\nexport * from \"./components/MenuSection\";\nexport * from \"./components/Search\";\nexport * from \"./components/Footer\";\nexport * from \"./components/IconLinkList\";\nexport * from \"./components/SectionHeader\";\nexport * from \"./components/FeedbackWidget\";\nexport * from \"./components/AppShell\";\nexport * from \"./components/AccountMenu\";\nexport * from \"./components/CopyButton\";\nexport * from \"./components/CodeBlock\";\n\n// Layout primitives (Stack/Cluster/Sidebar/Grid) are NOT exported here. They are\n// unprefixed generic names, and this barrel star-exports Designsystemet, so a\n// future upstream Grid or Stack would collide and silence both. They live at\n// \"dibk-designsystemet/layout\" instead; see src/layout.ts.\n","import { forwardRef } from \"react\";\nimport type { SVGProps } from \"react\";\n\nimport \"./Logo.css\";\n\nexport interface DibkLogoProps extends SVGProps<SVGSVGElement> {\n /** \"full\" = roofline mark + wordmark; \"mark\" = roofline only. */\n variant?: \"full\" | \"mark\";\n}\n\n// Official DIBK artwork. Path 1 = the \"Direktoratet for byggkvalitet\" wordmark\n// (vector outlines); path 2 = the roofline mark. Drawn with currentColor so it\n// inherits the surrounding ink (navy by default, white on dark surfaces).\nconst WORDMARK_PATH =\n \"M163.209 108.713C155.725 108.713 150.078 113.687 150.078 122.023C150.078 130.358 154.918 135.78 163.209 135.78C171.499 135.78 176.294 130.672 176.294 122.023C176.294 113.374 171.454 108.713 163.209 108.713ZM170.513 122.023C170.513 127.131 167.824 130.896 163.254 130.896C158.683 130.896 155.904 127.624 155.904 122.023C155.904 116.421 158.817 113.598 163.254 113.598C167.69 113.598 170.513 116.959 170.513 122.023ZM162.985 66.1849C162.985 56.3259 155.994 49.5142 145.955 49.5142H133.811V83.2589H145.955C155.994 83.2589 162.985 76.0439 162.985 66.1849ZM139.592 54.7126H146.359C152.633 54.7126 157.024 59.5973 157.024 66.1849C157.024 72.7725 152.633 78.0605 146.359 78.0605H139.592V54.7126ZM136.052 106.338V109.52H131.57V114.36H136.052V135.108H141.743V114.36H149.182V109.52H141.743V106.741C141.743 104.814 142.774 103.739 144.611 103.739H149.765V98.8988H144.208C138.92 98.8988 136.052 101.498 136.052 106.338ZM463.056 108.713C455.931 108.713 450.374 113.911 450.374 122.381C450.374 130.179 455.707 135.78 463.549 135.78C471.392 135.78 473.857 132.464 475.156 126.952H469.599C468.748 129.507 466.507 130.941 463.594 130.941C459.247 130.941 456.469 127.893 456.066 123.412H475.246V122.067C475.111 113.777 470.182 108.713 463.056 108.713ZM456.29 119.423C457.141 115.749 459.695 113.553 463.056 113.553C466.417 113.553 468.658 115.794 469.375 119.423H456.29ZM185.033 69.277L195.923 60.7624L192.606 56.9533L184.63 63.3616L183.913 57.7151H179.342V83.2589H185.033V69.277ZM221.601 75.1924H216.044C215.192 77.7468 212.952 79.1808 209.994 79.1808C205.647 79.1808 202.869 76.1335 202.465 71.6522H221.646V70.3077C221.511 62.0172 216.582 56.9533 209.456 56.9533C202.331 56.9533 196.774 62.1517 196.774 70.6214C196.774 78.419 202.107 84.0207 209.949 84.0207C217.792 84.0207 220.256 80.7045 221.556 75.1924H221.601ZM209.501 61.7483C212.817 61.7483 215.103 63.989 215.82 67.6189H202.734C203.586 63.9442 206.14 61.7483 209.501 61.7483ZM186.019 115.166L185.302 109.52H180.731V135.063H186.422V121.082L197.312 112.567L193.996 108.758L186.019 115.166ZM494.067 114.315V109.475H487.48V100.736H481.789V109.475H477.307V114.315H481.789V127.221C481.789 132.285 484.791 135.019 490.348 135.019H493.619V130.179H490.706C488.6 130.179 487.48 128.969 487.48 126.818V114.27H494.067V114.315ZM351.381 75.4613C351.381 80.5252 354.383 83.2589 359.896 83.2589H363.167V78.419H360.254C358.148 78.419 357.027 77.209 357.027 75.058V62.5102H363.615V57.6703H357.027V48.9317H351.336V57.6703H346.855V62.5102H351.336V75.4165L351.381 75.4613ZM379.121 84.0207C385.17 84.0207 389.428 80.7045 390.727 75.1924H385.17C384.319 77.7468 382.078 79.1808 379.121 79.1808C374.774 79.1808 371.995 76.1335 371.592 71.6522H390.772V70.3077C390.638 62.0172 385.708 56.9533 378.583 56.9533C371.457 56.9533 365.901 62.1517 365.901 70.6214C365.901 78.419 371.233 84.0207 379.076 84.0207H379.121ZM378.628 61.7483C381.944 61.7483 384.229 63.989 384.946 67.6189H371.861C372.712 63.9442 375.267 61.7483 378.628 61.7483ZM307.419 69.277L318.309 60.7624L314.992 56.9533L307.016 63.3616L306.299 57.7151H301.728V83.2589H307.419V69.277ZM167.869 83.2589H173.561V57.7151H167.869V83.2589ZM170.693 54.3093C172.799 54.3093 174.367 52.6512 174.367 50.5898C174.367 48.5283 172.799 46.915 170.693 46.915C168.586 46.915 167.018 48.4835 167.018 50.5898C167.018 52.696 168.542 54.3093 170.693 54.3093ZM421.514 135.063H427.206V109.52H421.514V135.063ZM409.908 135.063H415.599V98.8988H409.908V135.063ZM337.937 79.4049C337.982 79.7186 338.071 80.0323 338.161 80.2564C338.609 82.1833 340.178 83.2589 342.777 83.2589H345.466V78.8223H344.076C343.225 78.8223 342.822 78.419 342.822 77.702V66.1401C342.822 60.6728 338.699 56.9085 332.111 56.9085C325.524 56.9085 320.684 60.6728 320.146 66.0953H325.882C326.241 63.4513 328.705 61.6139 332.022 61.6139C335.338 61.6139 337.22 63.272 337.265 65.7816C337.22 67.7982 334.352 67.9326 330.498 68.3808C325.524 68.9633 319.608 70.2181 319.563 76.1783C319.519 80.9286 323.372 83.7966 329.243 83.7966C335.114 83.7966 336.368 82.1385 337.892 79.4049H337.937ZM325.344 75.8198C325.344 73.131 327.988 72.6829 331.17 72.2795C333.859 71.921 336.324 71.6073 337.31 70.1285V73.7136C337.31 77.1194 334.352 79.3601 330.453 79.3601C326.554 79.3601 325.344 78.0605 325.344 75.8646V75.8198ZM350.619 109.52H343.673L332.783 120.633V98.9436H327.092V135.108H332.783V127.355L337.399 122.74L345.242 135.153H351.874L341.343 118.796L350.619 109.564V109.52ZM316.247 113.463C314.679 110.64 311.407 108.758 307.419 108.758C300.607 108.758 295.678 114.18 295.678 121.799C295.678 129.417 300.607 134.705 307.464 134.705C314.32 134.705 313.962 133.181 315.62 130.716V134.346C315.62 138.2 313.245 140.889 308.718 140.889C304.192 140.889 302.355 138.962 302.355 136.542H296.664C296.664 142.054 301.593 145.505 308.718 145.505C315.844 145.505 321.266 141.068 321.266 134.302V109.52H316.74L316.247 113.463ZM308.539 129.91C304.372 129.91 301.548 126.638 301.548 121.754C301.548 116.869 304.416 113.553 308.539 113.553C312.662 113.553 315.575 116.869 315.575 121.709C315.575 126.549 312.662 129.91 308.539 129.91ZM403.051 48.9765H397.36V57.7151H392.878V62.555H397.36V75.4613C397.36 80.5252 400.362 83.2589 405.874 83.2589H409.146V78.419H406.233C404.127 78.419 403.006 77.209 403.006 75.058V62.5102H409.594V57.6703H403.006V48.9317L403.051 48.9765ZM365.587 128.341L358.103 109.475H351.919L362.584 135.019H368.5L379.165 109.475H372.981L365.542 128.341H365.587ZM268.341 78.4638H265.429C263.322 78.4638 262.202 77.2538 262.202 75.1028V62.555H268.79V57.7151H262.202V48.9765H256.511V57.7151H252.029V62.555H256.511V75.4613C256.511 80.5252 259.513 83.2589 265.025 83.2589H268.297V78.419L268.341 78.4638ZM441.501 100.781H435.81V109.52H431.328V114.36H435.81V127.266C435.81 132.33 438.812 135.063 444.324 135.063H447.596V130.224H444.683C442.577 130.224 441.456 129.014 441.456 126.863V114.315H448.044V109.475H441.456V100.736L441.501 100.781ZM224.962 108.713C221.332 108.713 218.329 110.281 216.492 112.791V98.854H210.801V135.019H215.372L215.909 130.492C217.523 133.719 220.884 135.736 224.917 135.736C231.729 135.736 236.479 129.999 236.479 122.067C236.479 114.135 231.729 108.668 224.962 108.668V108.713ZM230.653 122.157C230.653 127.355 227.875 130.985 223.662 130.985C219.45 130.985 216.492 127.266 216.492 122.023C216.492 116.779 219.539 113.598 223.662 113.598C227.785 113.598 230.653 117.138 230.653 122.202V122.157ZM251.088 129.148L243.649 109.52H237.51L247.638 135.063H248.713L245.083 144.34L250.461 145.595L264.622 109.52H258.706L251.043 129.148H251.088ZM250.999 83.2589L240.467 66.9019L249.744 57.6703H242.798L231.908 68.7841V47.0943H226.217V83.2589H231.908V75.5061L236.524 70.8903L244.366 83.3037H250.999V83.2589ZM284.205 56.9533C276.722 56.9533 271.075 61.9276 271.075 70.2629C271.075 78.5983 275.915 84.0207 284.205 84.0207C292.496 84.0207 297.291 78.912 297.291 70.2629C297.291 61.6139 292.451 56.9533 284.205 56.9533ZM284.205 79.136C279.993 79.136 276.856 75.8646 276.856 70.2629C276.856 64.6612 279.769 61.838 284.205 61.838C288.642 61.838 291.465 65.199 291.465 70.2629C291.465 75.3269 288.776 79.136 284.205 79.136ZM403.634 129.507V117.945C403.634 112.477 399.511 108.713 392.923 108.713C386.336 108.713 381.496 112.477 380.958 117.9H386.694C387.053 115.256 389.517 113.418 392.834 113.418C396.15 113.418 398.032 115.077 398.077 117.586C398.032 119.603 395.164 119.737 391.31 120.185C386.336 120.768 380.42 122.023 380.375 127.983C380.331 132.733 384.185 135.601 390.055 135.601C395.926 135.601 397.18 133.943 398.704 131.209C398.749 131.523 398.839 131.837 398.928 132.061C399.376 133.988 400.945 135.063 403.544 135.063H406.233V130.627H404.844C403.992 130.627 403.589 130.224 403.589 129.507H403.634ZM398.122 125.473C398.122 128.879 395.164 131.12 391.265 131.12C387.366 131.12 386.156 129.82 386.156 127.58C386.156 125.339 388.8 124.443 391.982 124.039C394.671 123.681 397.136 123.367 398.122 121.888V125.473ZM424.338 98.7196C422.276 98.7196 420.663 100.288 420.663 102.394C420.663 104.501 422.186 106.114 424.338 106.114C426.489 106.114 428.012 104.456 428.012 102.394C428.012 100.333 426.444 98.7196 424.338 98.7196ZM286.267 113.463C284.698 110.64 281.427 108.758 277.439 108.758C270.627 108.758 265.697 114.18 265.697 121.799C265.697 129.417 270.627 134.705 277.483 134.705C284.34 134.705 283.981 133.181 285.639 130.716V134.346C285.639 138.2 283.264 140.889 278.738 140.889C274.212 140.889 272.375 138.962 272.375 136.542H266.683C266.683 142.054 271.613 145.505 278.738 145.505C285.864 145.505 291.286 141.068 291.286 134.302V109.52H286.76L286.267 113.463ZM278.604 129.91C274.436 129.91 271.613 126.638 271.613 121.754C271.613 116.869 274.481 113.553 278.604 113.553C282.727 113.553 285.639 116.869 285.639 121.709C285.639 126.549 282.727 129.91 278.604 129.91Z\";\nconst MARK_PATH =\n \"M45.6198 76.0443L7.88672 93.7904V110.103L45.6646 92.3116L83.4424 110.103V93.7904L45.7094 76.0443H45.6198ZM7.88672 135.064H83.4424V120.32H7.88672V135.064ZM42.9758 50.2764C33.8786 53.8167 25.0055 54.4889 16.6254 52.1586C12.5473 51.0383 9.54482 49.425 7.88672 48.4391V65.289C12.7266 67.1712 19.1349 68.7845 26.7084 68.7845C34.2819 68.7845 40.4214 67.6193 48.3534 64.5272C57.4506 60.9869 66.3236 60.3147 74.7038 62.645C78.7818 63.7653 81.7843 65.3786 83.4424 66.3645V49.5146C74.4797 46.064 60.3186 43.5096 42.9758 50.2764Z\";\n\n/**\n * DIBK brand mark. `full` renders the roofline mark + \"Direktoratet for\n * byggkvalitet\" wordmark; `mark` renders the roofline only. Color is inherited\n * via currentColor (navy by default; set color to recolor, e.g. white on navy).\n */\nexport const DibkLogo = forwardRef<SVGSVGElement, DibkLogoProps>(function DibkLogo(\n { variant = \"full\", className, ...props },\n ref,\n) {\n const cls = [\"dibk-logo\", `dibk-logo--${variant}`, className]\n .filter(Boolean)\n .join(\" \");\n\n if (variant === \"mark\") {\n return (\n <svg\n ref={ref}\n className={cls}\n viewBox=\"4 42 84 98\"\n role=\"img\"\n aria-label=\"Direktoratet for byggkvalitet\"\n fill=\"currentColor\"\n {...props}\n >\n <path d={MARK_PATH} />\n </svg>\n );\n }\n\n return (\n <svg\n ref={ref}\n className={cls}\n viewBox=\"6 41 490 106\"\n role=\"img\"\n aria-label=\"Direktoratet for byggkvalitet\"\n fill=\"currentColor\"\n {...props}\n >\n <path d={WORDMARK_PATH} />\n <path d={MARK_PATH} />\n </svg>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\nimport { Button } from \"@digdir/designsystemet-react\";\n\nimport { DibkLogo } from \"../Logo\";\nimport { SearchIcon, MenuIcon, CloseIcon } from \"../icons\";\n\nimport \"./Header.css\";\n\n/** A highlighted shortcut shown in the top bar beside the menu toggle. */\nexport interface DibkHeaderShortcut {\n label: string;\n href: string;\n}\n\nexport interface DibkHeaderProps extends ComponentPropsWithoutRef<\"header\"> {\n /** Whether the mega-menu is open (controls the Meny toggle state). */\n menuOpen?: boolean;\n onMenuToggle?: () => void;\n /** id of the menu panel the Meny toggle controls (wired to aria-controls). */\n menuPanelId?: string;\n onSearchToggle?: () => void;\n /**\n * Render the \"Søk\" button. Defaults to true. Set false in apps whose search\n * lives elsewhere (e.g. a page hero) so the header shows only \"Meny\".\n */\n search?: boolean;\n /**\n * Highlighted shortcut links rendered before Søk/Meny. On narrow viewports\n * they collapse; reach them through the menu instead.\n */\n shortcuts?: DibkHeaderShortcut[];\n /**\n * Account/login control rendered rightmost in the bar, after Søk/Meny. Unlike\n * shortcuts it does not collapse on narrow viewports, so sign-in state stays\n * visible. The app owns the content (login button, avatar dropdown, ...).\n */\n account?: ReactNode;\n /** Optional brand link target (logo href). */\n homeHref?: string;\n /**\n * Component used to render the brand and shortcut links (receives `href`).\n * Pass a router Link adapter for client-side navigation; defaults to `a`.\n */\n linkComponent?: ElementType;\n}\n\n/**\n * DIBK top bar: roofline logo (linking home) on the left; an optional \"Søk\"\n * button and the \"Meny\" (hamburger) toggle on the right. The toggle is a\n * disclosure control for the menu panel: it swaps to\n * \"Lukk\" + X while open and announces state via aria-expanded/aria-controls.\n * Search and menu state are owned by the caller.\n */\nexport const DibkHeader = forwardRef<HTMLElement, DibkHeaderProps>(function DibkHeader(\n { menuOpen = false, onMenuToggle, menuPanelId, onSearchToggle, search = true, shortcuts, account, homeHref = \"/\", linkComponent: LinkComponent = \"a\", children, className, ...rest },\n ref,\n) {\n return (\n <header\n {...rest}\n ref={ref}\n className={[\"dibk-header\", className].filter(Boolean).join(\" \")}\n data-dibk-header\n >\n <div className=\"dibk-header__inner\">\n <LinkComponent className=\"dibk-header__brand\" href={homeHref} aria-label=\"Direktoratet for byggkvalitet, til forsiden\">\n {/* Both rendered; CSS shows the full lockup on wide screens and swaps to\n the roofline mark on phones (zero-runtime, no hydration flash). The\n hidden copy is aria-hidden so the link keeps one accessible name. */}\n <DibkLogo className=\"dibk-header__logo--full\" />\n <DibkLogo variant=\"mark\" className=\"dibk-header__logo--mark\" aria-hidden />\n </LinkComponent>\n\n {children}\n\n <div className=\"dibk-header__actions\">\n {/* Shortcuts duplicate menu entries, so they hide while the menu is\n open; only the Lukk toggle (and account) stays. */}\n {menuOpen\n ? null\n : shortcuts?.map((s) => (\n <LinkComponent key={s.href} className=\"dibk-header__btn dibk-header__shortcut\" href={s.href}>\n {s.label}\n </LinkComponent>\n ))}\n {search ? (\n <Button\n variant=\"tertiary\"\n className=\"dibk-header__btn\"\n onClick={onSearchToggle}\n aria-label=\"Søk\"\n >\n <span className=\"dibk-header__btn-label\">Søk</span>\n <SearchIcon />\n </Button>\n ) : null}\n <Button\n variant=\"tertiary\"\n className=\"dibk-header__btn\"\n onClick={onMenuToggle}\n aria-expanded={menuOpen}\n aria-controls={menuPanelId}\n aria-label={menuOpen ? \"Lukk meny\" : \"Meny\"}\n >\n <span className=\"dibk-header__btn-label\">{menuOpen ? \"Lukk\" : \"Meny\"}</span>\n {menuOpen ? <CloseIcon /> : <MenuIcon />}\n </Button>\n {account}\n </div>\n </div>\n </header>\n );\n});\n","// Internal decorative glyphs shared across DIBK components. Not part of the public\n// barrel. All are aria-hidden; the surrounding control supplies the accessible name.\n\nexport function SearchIcon({ size = 22 }: { size?: number }) {\n return (\n <svg viewBox=\"0 0 24 24\" width={size} height={size} fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"7\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"16.5\" y1=\"16.5\" x2=\"21\" y2=\"21\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\n/* Animated bar glyphs: on hover the Meny burger's outer bars\n travel through the middle bar and swap places; the Lukk X spins half a turn.\n The motion CSS lives with the consuming component (Header.css / MegaMenu.css).\n The burger is one SVG (not three separate spans) so all bars anti-alias\n identically - separate spans pixel-snap independently and get uneven weights. */\nexport function MenuIcon() {\n return (\n <svg\n className=\"dibk-burger\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <line className=\"dibk-burger__bar--top\" x1=\"3\" y1=\"6\" x2=\"21\" y2=\"6\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <line className=\"dibk-burger__bar--bottom\" x1=\"3\" y1=\"18\" x2=\"21\" y2=\"18\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\nexport function CloseIcon() {\n return (\n <span className=\"dibk-xglyph\" aria-hidden=\"true\">\n <span className=\"dibk-xglyph__bar dibk-xglyph__bar--a\" />\n <span className=\"dibk-xglyph__bar dibk-xglyph__bar--b\" />\n </span>\n );\n}\n\n/* Padlock marking login-gated items (square corners per the DIBK aesthetic). */\nexport function LockIcon({ size = 14, className }: { size?: number; className?: string }) {\n return (\n <svg\n className={className}\n viewBox=\"0 0 24 24\"\n width={size}\n height={size}\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <rect x=\"5\" y=\"11\" width=\"14\" height=\"9\" stroke=\"currentColor\" strokeWidth=\"2\" />\n <path d=\"M8 11V7a4 4 0 0 1 8 0v4\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\n/* The DIBK link chevron: a filled path in a 20x20 box with built-in\n whitespace around the glyph. */\nexport function ChevronRight({\n width = 20,\n height = 20,\n className,\n}: {\n width?: number;\n height?: number;\n className?: string;\n}) {\n return (\n <svg\n className={className}\n width={width}\n height={height}\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path\n d=\"M11.6856 9.99942L6.43408 4.75666L7.94603 3.24219L14.7145 9.99942L7.94603 16.7567L6.43408 15.2422L11.6856 9.99942Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n}\n","import { forwardRef, useEffect, useId } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { DibkSearch } from \"../Search\";\n\nimport \"./MegaMenu.css\";\n\nexport interface DibkMegaMenuProps extends ComponentPropsWithoutRef<\"div\"> {\n open: boolean;\n onClose: () => void;\n /** Render the built-in search field (default true). Set false in apps whose\n * search lives elsewhere, mirroring DibkHeader's `search`. */\n search?: boolean;\n /** Placeholder for the built-in search field (default \"Søk\"). */\n searchPlaceholder?: string;\n /** Fired when the built-in search field is submitted. */\n onSearchSubmit?: (query: string) => void;\n /** Optional hint line inside the search widget, under the field\n * (e.g. \"Søk etter f.eks. rekkverk eller bruksendring\"). */\n searchHint?: ReactNode;\n}\n\n/**\n * DIBK navigation panel: a full-width disclosure that expands in document flow\n * below the header: the page content is pushed down and the header stays\n * visible. The header's Meny button owns the open state and\n * references the panel via aria-expanded/aria-controls; this component renders\n * the panel content: an optional large underline search field, then `children`\n * (the caller owns the content layout). Escape closes the panel and hands\n * focus back to the toggle.\n */\nexport const DibkMegaMenu = forwardRef<HTMLDivElement, DibkMegaMenuProps>(function DibkMegaMenu(\n { open, onClose, children, search = true, searchPlaceholder = \"Søk\", onSearchSubmit, searchHint, className, id: idProp, ...rest },\n ref,\n) {\n const autoId = useId();\n const id = idProp ?? autoId;\n\n useEffect(() => {\n if (!open) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n onClose();\n // Focus inside the panel would be orphaned when it hides; hand it back\n // to the toggle that controls the panel.\n document.querySelector<HTMLElement>(`[aria-controls=\"${CSS.escape(id)}\"]`)?.focus();\n };\n document.addEventListener(\"keydown\", onKeyDown);\n return () => document.removeEventListener(\"keydown\", onKeyDown);\n }, [open, onClose, id]);\n\n return (\n <div\n {...rest}\n ref={ref}\n id={id}\n hidden={!open}\n className={[\"dibk-megamenu\", className].filter(Boolean).join(\" \")}\n data-dibk-megamenu\n >\n <div className=\"dibk-megamenu__inner\">\n {search ? (\n <DibkSearch\n className=\"dibk-megamenu__search\"\n placeholder={searchPlaceholder}\n onSearch={onSearchSubmit}\n hint={searchHint}\n />\n ) : null}\n\n {children}\n </div>\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ChangeEvent, ComponentPropsWithoutRef, FormEventHandler, ReactNode } from \"react\";\nimport { Search } from \"@digdir/designsystemet-react\";\n\nimport { SearchIcon } from \"../icons\";\n\nimport \"./Search.css\";\n\nexport interface DibkSearchProps\n extends Omit<ComponentPropsWithoutRef<\"form\">, \"onSubmit\" | \"onChange\"> {\n /** Placeholder text; also the input's accessible name. */\n placeholder?: string;\n /** Optional hint line under the field (e.g. example searches). */\n hint?: ReactNode;\n /** Controlled value. Omit (with onValueChange) for uncontrolled use. */\n value?: string;\n onValueChange?: (value: string) => void;\n /** Fired with the query when the form submits (Enter or the magnifier). */\n onSearch?: (query: string) => void;\n /** Fired when the clear button empties the field. */\n onClear?: () => void;\n inputId?: string;\n}\n\n/**\n * The DIBK search widget: an underline-only field with an inline\n * magnifier, sitting in a quiet panel that turns white with a ring on\n * hover/focus. Wraps Designsystemet's `Search` and renders its own `<form>`\n * (DS `Search` is a plain div; Enter-to-submit needs a real form).\n */\nexport const DibkSearch = forwardRef<HTMLFormElement, DibkSearchProps>(function DibkSearch(\n { placeholder = \"Søk\", hint, value, onValueChange, onSearch, onClear, inputId, className, ...rest },\n ref,\n) {\n const handleSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n const input = e.currentTarget.elements.namedItem(\"dibk-search\");\n onSearch?.(input instanceof HTMLInputElement ? input.value : \"\");\n };\n\n return (\n <form\n {...rest}\n ref={ref}\n role=\"search\"\n onSubmit={handleSubmit}\n className={[\"dibk-search\", className].filter(Boolean).join(\" \")}\n >\n <Search className=\"dibk-search__field\">\n <Search.Input\n id={inputId}\n name=\"dibk-search\"\n placeholder={placeholder}\n aria-label={placeholder}\n {...(value !== undefined\n ? {\n value,\n onChange: (e: ChangeEvent<HTMLInputElement>) => onValueChange?.(e.target.value),\n }\n : null)}\n />\n <Search.Clear aria-label=\"Tøm søk\" onClick={onClear} />\n <Search.Button type=\"submit\" icon aria-label=\"Søk\">\n <SearchIcon size={26} />\n </Search.Button>\n </Search>\n {hint ? <div className=\"dibk-search__hint\">{hint}</div> : null}\n </form>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\n\nimport { DibkIconLinkList, type DibkIconLinkItem } from \"../IconLinkList\";\n\nimport \"./MenuSection.css\";\n\nexport interface DibkMenuSectionProps extends Omit<ComponentPropsWithoutRef<\"section\">, \"title\"> {\n /** Section heading (24px semibold navy beside a 40px icon). */\n title: ReactNode;\n /** Make the title itself a link (section titles point at landing pages). */\n href?: string;\n /** 40x40 illustration beside the title. */\n icon?: ReactNode;\n /** The section's links. */\n items: DibkIconLinkItem[];\n /**\n * Component used to render the links (receives `href`). Pass a router Link\n * adapter for client-side navigation; defaults to `a`.\n */\n linkComponent?: ElementType;\n}\n\n/**\n * One section of the DIBK menu panel: an optional 40px\n * icon + a title row, then an indented chevron-link list. Stack sections\n * inside `.dibk-megamenu__column` wrappers for the two-column menu layout.\n */\nexport const DibkMenuSection = forwardRef<HTMLElement, DibkMenuSectionProps>(function DibkMenuSection(\n { title, href, icon, items, linkComponent, className, ...rest },\n ref,\n) {\n const LinkComponent: ElementType = linkComponent ?? \"a\";\n\n return (\n <section\n {...rest}\n ref={ref}\n className={[\"dibk-menusection\", className].filter(Boolean).join(\" \")}\n data-dibk-menusection\n >\n <h3 className=\"dibk-menusection__header\">\n {icon ? (\n <span className=\"dibk-menusection__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n {href ? (\n <LinkComponent className=\"dibk-menusection__titlelink\" href={href}>\n {title}\n </LinkComponent>\n ) : (\n title\n )}\n </h3>\n\n <div className=\"dibk-menusection__body\">\n <DibkIconLinkList items={items} columns={1} linkComponent={linkComponent} />\n </div>\n </section>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\n\nimport { ChevronRight, LockIcon } from \"../icons\";\n\nimport \"./IconLinkList.css\";\n\nexport interface DibkIconLinkItem {\n label: string;\n href: string;\n icon?: ReactNode;\n description?: ReactNode;\n /** Mark the item login-gated: renders a padlock after the label (with screen-reader text). */\n locked?: boolean;\n}\n\nexport interface DibkIconLinkListProps extends ComponentPropsWithoutRef<\"ul\"> {\n items: DibkIconLinkItem[];\n /** Number of columns the list flows into. */\n columns?: 1 | 2 | 3;\n /** Render the chevron before each label (default true). Drop it where the\n * list reads as a panel of shortcuts rather than a navigation list. */\n chevron?: boolean;\n /**\n * Component used to render the item links (receives `href`). Pass a router\n * Link adapter for client-side navigation; defaults to `a`.\n */\n linkComponent?: ElementType;\n}\n\nexport const DibkIconLinkList = forwardRef<HTMLUListElement, DibkIconLinkListProps>(\n function DibkIconLinkList(\n { items, columns = 2, chevron = true, linkComponent: LinkComponent = \"a\", className, ...rest },\n ref,\n ) {\n return (\n <ul\n {...rest}\n ref={ref}\n className={[\"dibk-iconlinklist\", className].filter(Boolean).join(\" \")}\n data-columns={columns}\n data-dibk-iconlinklist\n >\n {items.map((item) => (\n <li key={`${item.label}-${item.href}`} className=\"dibk-iconlinklist__item\">\n {item.icon ? <span className=\"dibk-iconlinklist__icon\">{item.icon}</span> : null}\n <div className=\"dibk-iconlinklist__body\">\n <LinkComponent className=\"dibk-iconlinklist__link\" href={item.href}>\n {chevron ? <ChevronRight className=\"dibk-iconlinklist__chevron\" /> : null}\n <span>{item.label}</span>\n {item.locked ? (\n <span className=\"dibk-iconlinklist__lock\">\n <LockIcon />\n <span className=\"dibk-sr-only\">(krever innlogging)</span>\n </span>\n ) : null}\n </LinkComponent>\n {item.description ? (\n <p className=\"dibk-iconlinklist__description\">{item.description}</p>\n ) : null}\n </div>\n </li>\n ))}\n </ul>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { DibkLogo } from \"../Logo\";\n\nimport \"./Footer.css\";\n\n// The bottom-bar links are identical across every DIBK app, so they live here in\n// the design system rather than being wired per app - a single place to update.\n// Note: a tilgjengelighetserklæring is legally per-site; this points at DIBK's\n// published declaration and should be revisited if an app needs its own.\nconst BOTTOM_LINKS = [\n {\n label: \"Tilgjengelighetserklæring\",\n href: \"https://uustatus.no/nb/erklaringer/publisert/8ca10ee4-2679-465b-b208-ed1a992ca705\",\n },\n {\n label: \"Personvernerklæring\",\n href: \"https://www.dibk.no/om-direktoratet-for-byggkvalitet/personvernerklaring\",\n },\n];\n\nexport interface DibkFooterProps extends ComponentPropsWithoutRef<\"footer\"> {\n /** Optional app-specific content shown above the static bottom bar. */\n children?: ReactNode;\n}\n\n/**\n * The DIBK footer: an optional app-specific content area on top, then a static\n * bottom bar carrying the standard legal links (left) and the brand mark (right).\n */\nexport const DibkFooter = forwardRef<HTMLElement, DibkFooterProps>(function DibkFooter(\n { children, className, ...rest },\n ref,\n) {\n return (\n <footer\n {...rest}\n ref={ref}\n className={[\"dibk-footer\", className].filter(Boolean).join(\" \")}\n data-dibk-footer\n >\n <div className=\"dibk-footer__inner\">\n {children ? <div className=\"dibk-footer__content\">{children}</div> : null}\n <div className=\"dibk-footer__bottom\">\n <nav className=\"dibk-footer__links\" aria-label=\"Juridisk\">\n {BOTTOM_LINKS.map((link) => (\n <a key={link.href} className=\"dibk-footer__link\" href={link.href}>\n {link.label}\n </a>\n ))}\n </nav>\n <span className=\"dibk-footer__brand\">\n <DibkLogo variant=\"mark\" className=\"dibk-footer__mark\" />\n <span className=\"dibk-footer__wordmark\" aria-hidden=\"true\">\n Direktoratet\n <br />\n for byggkvalitet\n </span>\n </span>\n </div>\n </div>\n </footer>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport \"./SectionHeader.css\";\n\nexport interface DibkSectionHeaderProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n title: ReactNode;\n /** Large two-tone icon shown above/beside the title. */\n icon?: ReactNode;\n description?: ReactNode;\n}\n\nexport const DibkSectionHeader = forwardRef<HTMLDivElement, DibkSectionHeaderProps>(\n function DibkSectionHeader({ title, icon, description, className, ...rest }, ref) {\n return (\n <div\n {...rest}\n ref={ref}\n className={[\"dibk-sectionheader\", className].filter(Boolean).join(\" \")}\n data-dibk-sectionheader\n >\n <div className=\"dibk-sectionheader__row\">\n {icon ? <div className=\"dibk-sectionheader__icon\">{icon}</div> : null}\n <h1 className=\"dibk-sectionheader__title\">{title}</h1>\n </div>\n {description ? <p className=\"dibk-sectionheader__description\">{description}</p> : null}\n </div>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\nimport { Button } from \"@digdir/designsystemet-react\";\n\nimport \"./FeedbackWidget.css\";\n\nexport interface DibkFeedbackWidgetProps extends ComponentPropsWithoutRef<\"div\"> {\n /** Defaults to \"Fant du det du lette etter?\". */\n question?: string;\n onAnswer?: (answer: \"ja\" | \"nei\") => void;\n}\n\nexport const DibkFeedbackWidget = forwardRef<HTMLDivElement, DibkFeedbackWidgetProps>(\n function DibkFeedbackWidget(\n { question = \"Fant du det du lette etter?\", onAnswer, className, ...rest },\n ref,\n ) {\n return (\n <div\n {...rest}\n ref={ref}\n className={[\"dibk-feedback\", className].filter(Boolean).join(\" \")}\n data-dibk-feedback\n >\n <p className=\"dibk-feedback__question\">{question}</p>\n <div className=\"dibk-feedback__actions\">\n <Button variant=\"primary\" className=\"dibk-feedback__btn\" onClick={() => onAnswer?.(\"ja\")}>\n Ja\n </Button>\n <Button variant=\"secondary\" className=\"dibk-feedback__btn\" onClick={() => onAnswer?.(\"nei\")}>\n Nei\n </Button>\n </div>\n </div>\n );\n },\n);\n","import { forwardRef, useId, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, ElementType, ReactNode } from \"react\";\nimport { Heading } from \"@digdir/designsystemet-react\";\n\nimport { DibkHeader, type DibkHeaderShortcut } from \"../Header\";\nimport { DibkMegaMenu } from \"../MegaMenu\";\nimport { DibkMenuSection, type DibkMenuSectionProps } from \"../MenuSection\";\nimport { DibkFooter } from \"../Footer\";\nimport { DibkIconLinkList, type DibkIconLinkItem } from \"../IconLinkList\";\n\nimport \"./AppShell.css\";\n\n/** One menu section: title (+ optional icon/landing link) and its links. */\nexport type DibkMenuColumnSection = Pick<DibkMenuSectionProps, \"title\" | \"href\" | \"icon\" | \"items\">;\n\n// Omit the native `title` (a string tooltip) so our richer `title` prop can be a\n// ReactNode without colliding with the inherited HTML attribute.\nexport interface DibkAppShellProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"title\"> {\n /** App name shown beside the logo, with a subtle divider. */\n title?: ReactNode;\n /** Logo link target. */\n homeHref?: string;\n /** Render the header's \"Søk\" button (default true). */\n search?: boolean;\n /** Called when the header's Søk toggle is clicked. */\n onSearchToggle?: () => void;\n /** Highlighted shortcut links shown in the top bar beside the menu toggle. */\n shortcuts?: DibkHeaderShortcut[];\n /** Account/login control shown in the top bar (see DibkHeader's `account`). */\n account?: ReactNode;\n /** Mega-menu heading (default \"Meny\"). Visually hidden when `menuColumns` is\n * used (the section titles carry the visual structure instead). */\n menuHeading?: string;\n /** Mega-menu navigation links, as a flat list under the menu heading. Ignored\n * when `menuColumns` is provided. */\n menuItems?: DibkIconLinkItem[];\n /** Two-column menu layout: each column a stack of titled sections.\n * Takes precedence over `menuItems`. */\n menuColumns?: [DibkMenuColumnSection[], DibkMenuColumnSection[]];\n /** Optional content below the menu links (e.g. an account/login row). */\n menuExtra?: ReactNode;\n /** Optional app-specific content shown above the footer's static bottom bar. */\n footerContent?: ReactNode;\n /**\n * Component used for the header's brand/shortcut links and the menu items\n * (receives `href`). Pass a router Link adapter for client-side navigation;\n * defaults to `a`.\n */\n linkComponent?: ElementType;\n}\n\n/**\n * The DIBK page frame: header (logo + app title + menu toggle), mega-menu,\n * the routed content in the canonical container, and the footer. Owns the\n * menu open/close state. The content sits in a `--dibk-container-max` container\n * so it lines up edge-to-edge with the header and footer - apps don't manage\n * their own page width.\n */\nexport const DibkAppShell = forwardRef<HTMLDivElement, DibkAppShellProps>(function DibkAppShell(\n {\n title,\n homeHref = \"/\",\n search = true,\n onSearchToggle,\n shortcuts,\n account,\n menuHeading = \"Meny\",\n menuItems,\n menuColumns,\n menuExtra,\n footerContent,\n linkComponent,\n children,\n className,\n ...rest\n },\n ref,\n) {\n const [menuOpen, setMenuOpen] = useState(false);\n // Links the header's Meny toggle (aria-controls) to the menu panel it expands.\n const menuId = useId();\n\n return (\n <div {...rest} ref={ref} className={[\"dibk-appshell\", className].filter(Boolean).join(\" \")}>\n {/* Bypass-blocks link (WCAG 2.4.1): hidden until focused, lets keyboard\n users jump past the header/menu straight to the page content. */}\n <a className=\"dibk-skiplink\" href=\"#dibk-main\">\n Hopp til hovedinnhold\n </a>\n <DibkHeader\n homeHref={homeHref}\n search={search}\n onSearchToggle={onSearchToggle}\n shortcuts={shortcuts}\n account={account}\n linkComponent={linkComponent}\n menuOpen={menuOpen}\n onMenuToggle={() => setMenuOpen((o) => !o)}\n menuPanelId={menuId}\n >\n {title ? (\n <span className=\"dibk-appshell__title\">\n <span className=\"dibk-appshell__titletext\">{title}</span>\n </span>\n ) : null}\n </DibkHeader>\n\n <DibkMegaMenu id={menuId} open={menuOpen} search={search} onClose={() => setMenuOpen(false)}>\n {menuColumns ? (\n <>\n <h2 className=\"dibk-sr-only\">{menuHeading}</h2>\n {/* With client-side routing the page doesn't unload on navigation,\n so close the menu when one of its links is clicked. */}\n <div\n className=\"dibk-megamenu__columns\"\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"a\")) setMenuOpen(false);\n }}\n >\n {menuColumns.map((sections, column) => (\n <div key={column} className=\"dibk-megamenu__column\">\n {sections.map((section) => (\n <DibkMenuSection\n key={`${section.title}`}\n linkComponent={linkComponent}\n {...section}\n />\n ))}\n </div>\n ))}\n </div>\n </>\n ) : (\n <>\n <Heading level={2} data-size=\"sm\" className=\"dibk-appshell__menuheading\">\n {menuHeading}\n </Heading>\n <DibkIconLinkList\n items={menuItems ?? []}\n columns={2}\n linkComponent={linkComponent}\n onClick={(e) => {\n if ((e.target as HTMLElement).closest(\"a\")) setMenuOpen(false);\n }}\n />\n </>\n )}\n {menuExtra}\n </DibkMegaMenu>\n\n {/* The page content is hidden entirely while the menu is open; the\n footer stays, below the panel. */}\n <main id=\"dibk-main\" tabIndex={-1} className=\"dibk-appshell__main\" hidden={menuOpen}>\n <div className=\"dibk-appshell__container\">{children}</div>\n </main>\n\n <DibkFooter>{footerContent}</DibkFooter>\n </div>\n );\n});\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\nimport { Avatar, Button, Dropdown, Paragraph, Tag } from \"@digdir/designsystemet-react\";\n\nimport \"./AccountMenu.css\";\n\nfunction initials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n const first = parts[0]?.[0] ?? \"\";\n const last = parts.length > 1 ? parts[parts.length - 1][0] : \"\";\n return (first + last).toUpperCase();\n}\n\nexport interface DibkAccountMenuProps\n extends Omit<ComponentPropsWithoutRef<\"button\">, \"name\" | \"value\"> {\n /** The signed-in user's display name (drives the initials, heading and aria-label). */\n name: string;\n email?: string;\n /** Role shown as a small tag under the email (e.g. \"Redaktør\"). */\n roleLabel?: ReactNode;\n /** Renders a \"Logg ut\" item that calls this. */\n onLogout?: () => void;\n /** Extra Dropdown.Item entries, listed before Logg ut. */\n children?: ReactNode;\n}\n\n/** Header account control for a signed-in user: an initials avatar that opens a\n small account dropdown (name, email, role, Logg ut). Designed for the app\n shell's `account` slot; the app decides *whether* the user is signed in and\n what the fields are - this component only renders them. */\nexport const DibkAccountMenu = forwardRef<HTMLButtonElement, DibkAccountMenuProps>(\n function DibkAccountMenu(\n { name, email, roleLabel, onLogout, children, className, ...rest },\n ref,\n ) {\n return (\n <Dropdown.TriggerContext>\n <Dropdown.Trigger\n {...rest}\n ref={ref}\n variant=\"tertiary\"\n className={[\"dibk-header__btn\", className].filter(Boolean).join(\" \")}\n aria-label={`Konto: ${name}`}\n >\n <Avatar aria-hidden initials={initials(name)} variant=\"square\" data-size=\"sm\" />\n </Dropdown.Trigger>\n <Dropdown placement=\"bottom-end\">\n <Dropdown.Heading>{name}</Dropdown.Heading>\n {email || roleLabel ? (\n <div className=\"dibk-account__id\">\n {email ? <Paragraph data-size=\"sm\">{email}</Paragraph> : null}\n {roleLabel ? <Tag data-size=\"sm\">{roleLabel}</Tag> : null}\n </div>\n ) : null}\n <Dropdown.List>\n {children}\n {onLogout ? (\n <Dropdown.Item>\n <Dropdown.Button onClick={onLogout}>Logg ut</Dropdown.Button>\n </Dropdown.Item>\n ) : null}\n </Dropdown.List>\n </Dropdown>\n </Dropdown.TriggerContext>\n );\n },\n);\n\nexport interface DibkMenuLoginProps extends ComponentPropsWithoutRef<\"button\"> {}\n\n/** \"Logg inn\" row for the mega-menu's `menuExtra` slot, the anonymous counterpart\n to DibkAccountMenu. The app renders it only for signed-out visitors and wires\n the click to its sign-in flow. */\nexport const DibkMenuLogin = forwardRef<HTMLButtonElement, DibkMenuLoginProps>(\n function DibkMenuLogin({ className, children = \"Logg inn\", ...rest }, ref) {\n return (\n <Button\n {...rest}\n ref={ref}\n variant=\"secondary\"\n className={[\"dibk-menu-login\", className].filter(Boolean).join(\" \")}\n >\n {children}\n </Button>\n );\n },\n);\n","import { forwardRef, useState } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport \"./CopyButton.css\";\n\nfunction ClipboardIcon({ size }: { size: number }) {\n return (\n <svg viewBox=\"0 0 24 24\" width={size} height={size} fill=\"none\" aria-hidden=\"true\">\n <rect x=\"8\" y=\"6\" width=\"11\" height=\"14\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n <path d=\"M16 6V4H5v14h3\" stroke=\"currentColor\" strokeWidth=\"1.8\" />\n </svg>\n );\n}\n\nfunction useCopy(value: string) {\n const [done, setDone] = useState(false);\n\n const copy = async () => {\n try {\n await navigator.clipboard.writeText(value);\n } catch {\n // Async clipboard API is unavailable in non-secure contexts and older\n // browsers; fall back to a hidden textarea + execCommand.\n const ta = document.createElement(\"textarea\");\n ta.value = value;\n ta.setAttribute(\"readonly\", \"\");\n ta.style.position = \"absolute\";\n ta.style.left = \"-9999px\";\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n document.body.removeChild(ta);\n }\n setDone(true);\n setTimeout(() => setDone(false), 1700);\n };\n\n return { done, copy };\n}\n\nexport interface DibkCopyButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n /** The text placed on the clipboard. */\n value: string;\n /** Accessible name for the button (\"Kopier\" when omitted). */\n ariaLabel?: string;\n}\n\n/** A square navy \"Kopier\" button that flips to \"✓ Kopiert!\" for ~1.7s after a copy. */\nexport const DibkCopyButton = forwardRef<HTMLButtonElement, DibkCopyButtonProps>(\n function DibkCopyButton({ value, ariaLabel, className, onClick, ...rest }, ref) {\n const { done, copy } = useCopy(value);\n\n return (\n <>\n <button\n {...rest}\n ref={ref}\n type=\"button\"\n className={[\"dibk-copybtn\", className].filter(Boolean).join(\" \")}\n data-done={done ? \"1\" : \"0\"}\n aria-label={ariaLabel ?? (done ? \"Kopiert\" : \"Kopier\")}\n onClick={(e) => {\n void copy();\n onClick?.(e);\n }}\n >\n <span className=\"dibk-copybtn__ico\" aria-hidden=\"true\">\n {done ? \"✓\" : null}\n </span>\n {done ? \"Kopiert!\" : \"Kopier\"}\n </button>\n {/* Announces the copy to screen readers: the visual \"Kopiert!\" swap alone\n isn't reliably read, and a custom ariaLabel (\"Kopier kodeord\") never\n flips to a success label. role=\"status\" is a polite live region. */}\n <span className=\"dibk-sr-only\" role=\"status\">\n {done ? \"Kopiert\" : \"\"}\n </span>\n </>\n );\n },\n);\n\nexport interface DibkCopyIconButtonProps extends ComponentPropsWithoutRef<\"button\"> {\n /** The text placed on the clipboard. */\n value: string;\n /** Accessible name for the button. */\n ariaLabel?: string;\n /** Glyph size in px; the hit area comes from padding, not the glyph. */\n size?: number;\n}\n\n/** Quiet icon-only sibling of DibkCopyButton: a muted clipboard glyph that turns\n into a green ✓ after copying. For places where a full button would shout\n (e.g. beside body text). */\nexport const DibkCopyIconButton = forwardRef<HTMLButtonElement, DibkCopyIconButtonProps>(\n function DibkCopyIconButton(\n { value, ariaLabel = \"Kopier\", size = 18, className, style, onClick, ...rest },\n ref,\n ) {\n const { done, copy } = useCopy(value);\n\n return (\n <>\n <button\n {...rest}\n ref={ref}\n type=\"button\"\n className={[\"dibk-copyiconbtn\", className].filter(Boolean).join(\" \")}\n style={{ fontSize: size, ...style }}\n data-done={done ? \"1\" : \"0\"}\n aria-label={done ? \"Kopiert\" : ariaLabel}\n title={done ? \"Kopiert!\" : ariaLabel}\n onClick={(e) => {\n void copy();\n onClick?.(e);\n }}\n >\n {done ? (\n <span className=\"dibk-copyiconbtn__done\" aria-hidden=\"true\">\n ✓\n </span>\n ) : (\n <ClipboardIcon size={size} />\n )}\n </button>\n <span className=\"dibk-sr-only\" role=\"status\">\n {done ? \"Kopiert\" : \"\"}\n </span>\n </>\n );\n },\n);\n","import { forwardRef } from \"react\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { DibkCopyButton } from \"../CopyButton\";\n\nimport \"./CodeBlock.css\";\n\nexport interface DibkCodeBlockProps extends ComponentPropsWithoutRef<\"div\"> {\n /** Label shown in the bar above the code. */\n label: string;\n /** The value the Kopier button copies (and shows, unless `display` is set). */\n value: string;\n /** Text to show when it should differ from the copied value. */\n display?: string;\n /** Toggles the Kopier button; turn off for illustrative blocks that shouldn't be pasted. */\n copyable?: boolean;\n}\n\n/** A labelled code block: a label bar over a monospace `<pre>`, with an optional\n Kopier button. Wraps long lines (URLs, JSON) rather than only scrolling. */\nexport const DibkCodeBlock = forwardRef<HTMLDivElement, DibkCodeBlockProps>(\n function DibkCodeBlock({ label, value, display, copyable = true, className, ...rest }, ref) {\n return (\n <div\n {...rest}\n ref={ref}\n className={[\"dibk-code\", className].filter(Boolean).join(\" \")}\n >\n <div className=\"dibk-code__bar\">\n <span className=\"dibk-code__label\">{label}</span>\n {copyable ? <DibkCopyButton value={value} ariaLabel={`Kopier ${label}`} /> : null}\n </div>\n <pre className=\"dibk-code__pre\">\n <code>{display ?? value}</code>\n </pre>\n </div>\n );\n },\n);\n"],"mappings":"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","names":["DibkLogo","import_react","import_jsx_runtime","import_jsx_runtime","DibkHeader","import_react","import_react","import_designsystemet_react","import_jsx_runtime","DibkSearch","import_jsx_runtime","DibkMegaMenu","import_react","import_react","import_jsx_runtime","DibkIconLinkList","import_jsx_runtime","DibkMenuSection","import_react","import_jsx_runtime","DibkFooter","import_react","import_jsx_runtime","DibkSectionHeader","import_react","import_designsystemet_react","import_jsx_runtime","DibkFeedbackWidget","import_react","import_designsystemet_react","import_jsx_runtime","DibkAppShell","import_react","import_designsystemet_react","import_jsx_runtime","DibkAccountMenu","DibkMenuLogin","import_react","import_jsx_runtime","DibkCopyButton","DibkCopyIconButton","import_react","import_jsx_runtime","DibkCodeBlock"]}