@devslab/site-kit 0.3.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.js","names":["Button","Icon","IconButton","For","createSignal","onMount","JSX","LOCALES","SiteLocale","LocaleState","SiteBrand","SiteLink","SiteMessages","ThemePreference","LocaleMenuProps","state","messages","onLocaleChange","locale","href","LocaleMenu","props","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","_$insert","localeLabel","addEventListener","event","currentTarget","value","hrefForLocale","window","location","assign","_$createComponent","each","children","_el$5","_tmpl$2","nativeName","_$effect","_p$","_v$","code","_v$2","dir","e","_$setAttribute","t","undefined","_$setProperty","ThemeToggleProps","defaultValue","onValueChange","theme","storageKey","ThemeToggle","order","internal","setInternal","resolved","setResolved","nextTheme","nextLabel","themeDark","themeLight","apply","matchMedia","matches","document","documentElement","dataset","themePreference","update","localStorage","setItem","stored","getItem","includes","tone","aria-label","themeLabel","title","onClick","name","data-icon","size","SiteHeaderProps","brand","navigation","Omit","actions","Element","SiteHeader","menuOpen","setMenuOpen","_el$6","_tmpl$3","_el$7","_el$8","_el$9","_el$0","_el$1","_co$","_$getNextMarker","_el$10","_el$11","_co$2","_el$21","_el$22","_co$6","_el$12","_el$13","_el$14","_el$15","_el$16","_co$3","_el$17","_el$18","_co$4","_el$19","_el$20","_co$5","skipToContent","logo","aria-expanded","open","_$memo","menuClose","item","_el$23","_tmpl$4","_el$24","label","_v$7","_v$8","external","_v$9","a","_$mergeProps","_c$","_v$3","_v$4","String","_v$5","navigationLabel","_v$6","o","SiteFooterProps","links","copyright","SiteFooter","_el$25","_tmpl$5","_el$26","_el$27","_el$28","_el$29","_el$30","_el$31","footerLabel","Button","ButtonTone","JSX","SiteFooter","SiteHeader","SiteFooterProps","SiteHeaderProps","SiteMessages","MarketingShellProps","header","footer","messages","children","Element","MarketingShell","props","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_el$5","_el$6","_co$2","_$insert","_$createComponent","_$mergeProps","LegalLayoutProps","title","updatedAt","LegalLayout","_el$7","_tmpl$2","_el$8","_el$9","_el$0","_el$11","_el$12","_co$3","_el$1","_el$10","_el$13","_el$14","_co$4","updatedLabel","_$effect","_$setAttribute","StatusBannerProps","tone","action","label","onClick","StatusBanner","_el$15","_tmpl$3","_el$16","_el$17","_el$18","_co$5","_el$19","_el$20","_co$6","_c$","_$memo","_el$21","_tmpl$4","_c$2","_p$","_v$","_v$2","_v$3","e","_$className","t","a","undefined","NotFoundLayoutProps","homeHref","NotFoundLayout","_el$22","_tmpl$5","_el$23","_el$24","_el$26","_el$27","_co$7","_el$25","notFoundTitle","notFoundDescription","backHome","ErrorLayoutProps","onRetry","errorId","ErrorLayout","_el$28","_tmpl$6","_el$29","_el$30","_el$31","_el$32","_co$8","_el$33","_el$34","_co$9","_el$35","_el$36","_co$0","errorTitle","errorDescription","_c$3","_el$37","_tmpl$7","retry","Button","Field","createSignal","RequestAccessMessages","nameLabel","emailLabel","organizationLabel","useCaseLabel","submit","submitting","success","error","RequestAccessFormProps","messages","onSubmit","data","FormData","Promise","class","RequestAccessForm","props","state","setState","event","SubmitEvent","preventDefault","currentTarget","HTMLFormElement","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_el$7","_el$8","_co$3","_el$9","_el$0","_co$4","_el$1","_el$10","_co$5","_el$2","addEventListener","_$insert","_$createComponent","label","required","children","control","_el$11","_tmpl$2","_$spread","_$mergeProps","_$runHydrationEvents","_el$12","_el$13","_el$14","_tmpl$3","type","loading","_$memo","_c$","_$effect","_$className","OssProductMarkProps","name","src","size","decorative","class","MARK_SIZE","sm","md","lg","const","OssProductMark","props","pixels","_el$","_$getNextElement","_tmpl$","_$effect","_p$","_v$","_v$2","_v$3","_v$4","undefined","_v$5","_v$6","e","_$className","t","_$setAttribute","a","o","i","n"],"sources":["../src/core/locales.mjs","../src/solid/chrome.tsx","../src/solid/layouts.tsx","../src/solid/request-access.tsx","../src/solid/oss-product-mark.tsx"],"sourcesContent":["export const LOCALES = Object.freeze([\n { code: \"ko\", language: \"Korean\", nativeName: \"한국어\", dir: \"ltr\" },\n { code: \"en\", language: \"English\", nativeName: \"English\", dir: \"ltr\" },\n { code: \"ja\", language: \"Japanese\", nativeName: \"日本語\", dir: \"ltr\" },\n { code: \"zh-HK\", language: \"Chinese (Hong Kong)\", nativeName: \"繁體中文(香港)\", dir: \"ltr\" },\n { code: \"zh-TW\", language: \"Chinese (Taiwan)\", nativeName: \"繁體中文(台灣)\", dir: \"ltr\" },\n { code: \"hi\", language: \"Hindi\", nativeName: \"हिन्दी\", dir: \"ltr\" },\n { code: \"vi\", language: \"Vietnamese\", nativeName: \"Tiếng Việt\", dir: \"ltr\" },\n { code: \"id\", language: \"Indonesian\", nativeName: \"Bahasa Indonesia\", dir: \"ltr\" },\n { code: \"th\", language: \"Thai\", nativeName: \"ไทย\", dir: \"ltr\" },\n { code: \"pt-BR\", language: \"Portuguese (Brazil)\", nativeName: \"Português (Brasil)\", dir: \"ltr\" },\n { code: \"fr\", language: \"French\", nativeName: \"Français\", dir: \"ltr\" },\n { code: \"de\", language: \"German\", nativeName: \"Deutsch\", dir: \"ltr\" },\n { code: \"es\", language: \"Spanish\", nativeName: \"Español\", dir: \"ltr\" },\n { code: \"ar\", language: \"Arabic\", nativeName: \"العربية\", dir: \"rtl\" },\n]);\n\nconst byLower = new Map(LOCALES.map((locale) => [locale.code.toLowerCase(), locale]));\nconst aliases = new Map([[\"zh\", \"zh-TW\"], [\"pt\", \"pt-BR\"]]);\n\nexport function canonicalLocale(candidate) {\n if (!candidate) return undefined;\n const exact = byLower.get(String(candidate).trim().toLowerCase());\n if (exact) return exact.code;\n const base = String(candidate).trim().toLowerCase().split(\"-\")[0];\n if (aliases.has(base)) return aliases.get(base);\n return byLower.get(base)?.code;\n}\n\nexport function localeAttributes(locale) {\n const canonical = canonicalLocale(locale);\n if (!canonical) throw new RangeError(`Unsupported locale: ${locale}`);\n return { lang: canonical, dir: canonical === \"ar\" ? \"rtl\" : \"ltr\" };\n}\n\nfunction cookieValue(header, name) {\n for (const part of String(header ?? \"\").split(\";\")) {\n const separator = part.indexOf(\"=\");\n if (separator < 0) continue;\n if (part.slice(0, separator).trim() === name) {\n try { return decodeURIComponent(part.slice(separator + 1).trim()); }\n catch { return undefined; }\n }\n }\n return undefined;\n}\n\nfunction acceptedLocales(header) {\n return String(header ?? \"\").split(\",\").map((part, order) => {\n const [tag, ...parameters] = part.trim().split(\";\");\n const q = Number(parameters.find((parameter) => parameter.trim().startsWith(\"q=\"))?.split(\"=\")[1] ?? 1);\n return { locale: canonicalLocale(tag), q: Number.isFinite(q) ? q : 0, order };\n }).filter(({ locale, q }) => locale && q > 0).sort((a, b) => b.q - a.q || a.order - b.order);\n}\n\nexport function resolveLocale({ pathname = \"/\", cookie = \"\", acceptLanguage = \"\", defaultLocale }) {\n const routeLocale = canonicalLocale(pathname.split(\"/\").filter(Boolean)[0]);\n if (routeLocale) return { locale: routeLocale, source: \"route\" };\n const storedLocale = canonicalLocale(cookieValue(cookie, \"locale\"));\n if (storedLocale) return { locale: storedLocale, source: \"cookie\" };\n const accepted = acceptedLocales(acceptLanguage)[0]?.locale;\n if (accepted) return { locale: accepted, source: \"accept-language\" };\n const fallback = canonicalLocale(defaultLocale);\n if (!fallback) throw new RangeError(`Unsupported default locale: ${defaultLocale}`);\n return { locale: fallback, source: \"default\" };\n}\n","import { Button, Icon, IconButton } from \"@devslab/dds-solid\";\nimport { For, createSignal, onMount, type JSX } from \"solid-js\";\n\nimport { LOCALES, type SiteLocale } from \"../core/locales.mjs\";\nimport type { LocaleState, SiteBrand, SiteLink, SiteMessages, ThemePreference } from \"./types\";\n\nexport interface LocaleMenuProps {\n state: LocaleState;\n messages: SiteMessages;\n onLocaleChange?: (locale: SiteLocale, href: string) => void;\n}\n\nexport function LocaleMenu(props: LocaleMenuProps) {\n return (\n <label>\n <span class=\"dds-sr-only\">{props.messages.localeLabel}</span>\n <span class=\"dds-select site-locale\">\n <select\n class=\"dds-select__input\"\n value={props.state.locale}\n aria-label={props.messages.localeLabel}\n onChange={(event) => {\n const locale = event.currentTarget.value as SiteLocale;\n const href = props.state.hrefForLocale(locale);\n if (props.onLocaleChange) props.onLocaleChange(locale, href);\n else window.location.assign(href);\n }}\n >\n <For each={LOCALES}>{(locale) => <option value={locale.code} lang={locale.code} dir={locale.dir}>{locale.nativeName}</option>}</For>\n </select>\n </span>\n </label>\n );\n}\n\nexport interface ThemeToggleProps {\n messages: SiteMessages;\n value?: ThemePreference;\n defaultValue?: ThemePreference;\n onValueChange?: (theme: ThemePreference) => void;\n storageKey?: string;\n}\n\nexport function ThemeToggle(props: ThemeToggleProps) {\n const order: ThemePreference[] = [\"system\", \"light\", \"dark\"];\n const [internal, setInternal] = createSignal<ThemePreference>(props.defaultValue ?? \"system\");\n const [resolved, setResolved] = createSignal<\"light\" | \"dark\">(\"light\");\n const value = () => props.value ?? internal();\n const nextTheme = () => resolved() === \"dark\" ? \"light\" : \"dark\";\n const nextLabel = () => nextTheme() === \"dark\" ? props.messages.themeDark : props.messages.themeLight;\n const apply = (theme: ThemePreference) => {\n const resolved = theme === \"system\"\n ? (matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\n : theme;\n setResolved(resolved);\n document.documentElement.dataset.theme = resolved;\n document.documentElement.dataset.themePreference = theme;\n };\n const update = (theme: ThemePreference) => {\n if (props.value === undefined) setInternal(theme);\n props.onValueChange?.(theme);\n apply(theme);\n localStorage.setItem(props.storageKey ?? \"site-theme\", theme);\n };\n onMount(() => {\n const stored = localStorage.getItem(props.storageKey ?? \"site-theme\") as ThemePreference | null;\n if (props.value === undefined && stored && order.includes(stored)) setInternal(stored);\n apply(props.value ?? stored ?? internal());\n });\n return (\n <IconButton\n class=\"site-theme-toggle\"\n tone=\"ghost\"\n aria-label={`${props.messages.themeLabel}: ${nextLabel()}`}\n title={`${props.messages.themeLabel}: ${nextLabel()}`}\n onClick={() => update(nextTheme())}\n >\n <Icon\n class=\"site-theme-toggle__icon\"\n name={nextTheme() === \"dark\" ? \"site-moon\" : \"site-sun\"}\n data-icon={nextTheme() === \"dark\" ? \"site-moon\" : \"site-sun\"}\n size={20}\n />\n </IconButton>\n );\n}\n\nexport interface SiteHeaderProps {\n brand: SiteBrand;\n navigation: SiteLink[];\n locale: LocaleState;\n messages: SiteMessages;\n theme?: Omit<ThemeToggleProps, \"messages\">;\n onLocaleChange?: LocaleMenuProps[\"onLocaleChange\"];\n actions?: JSX.Element;\n}\n\nexport function SiteHeader(props: SiteHeaderProps) {\n const [menuOpen, setMenuOpen] = createSignal(false);\n return (\n <header class=\"site-header\">\n <a class=\"dds-sr-only\" href=\"#main-content\">{props.messages.skipToContent}</a>\n <div class=\"site-header__inner\">\n <a class=\"site-brand\" href={props.brand.href}>{props.brand.logo}{props.brand.name}</a>\n <Button class=\"site-menu-button\" tone=\"ghost\" aria-expanded={menuOpen()} aria-controls=\"site-navigation\" onClick={() => setMenuOpen((open) => !open)}>\n {menuOpen() ? props.messages.menuClose : props.messages.menuOpen}\n </Button>\n <nav id=\"site-navigation\" class=\"site-nav\" data-open={String(menuOpen())} aria-label={props.messages.navigationLabel}>\n <ul class=\"site-nav__list\"><For each={props.navigation}>{(item) => <li><a href={item.href} target={item.external ? \"_blank\" : undefined} rel={item.external ? \"noreferrer\" : undefined}>{item.label}</a></li>}</For></ul>\n </nav>\n <div class=\"site-header__controls\" data-open={String(menuOpen())}>\n <LocaleMenu\n state={props.locale}\n messages={props.messages}\n {...(props.onLocaleChange ? { onLocaleChange: props.onLocaleChange } : {})}\n />\n {props.theme && <ThemeToggle {...props.theme} messages={props.messages} />}\n {props.actions}\n </div>\n </div>\n </header>\n );\n}\n\nexport interface SiteFooterProps {\n brand: SiteBrand;\n links: SiteLink[];\n copyright: string;\n messages: SiteMessages;\n}\n\nexport function SiteFooter(props: SiteFooterProps) {\n return (\n <footer class=\"site-footer\" aria-label={props.messages.footerLabel}>\n <div class=\"site-footer__inner\">\n <strong>{props.brand.name}</strong>\n <ul class=\"site-footer__links\"><For each={props.links}>{(item) => <li><a href={item.href}>{item.label}</a></li>}</For></ul>\n <small>{props.copyright}</small>\n </div>\n </footer>\n );\n}\n","import { Button, type ButtonTone } from \"@devslab/dds-solid\";\nimport type { JSX } from \"solid-js\";\n\nimport { SiteFooter, SiteHeader, type SiteFooterProps, type SiteHeaderProps } from \"./chrome\";\nimport type { SiteMessages } from \"./types\";\n\nexport interface MarketingShellProps {\n header: SiteHeaderProps;\n footer: SiteFooterProps;\n messages: SiteMessages;\n children: JSX.Element;\n}\n\nexport function MarketingShell(props: MarketingShellProps) {\n return <div class=\"site-shell\"><SiteHeader {...props.header} /><main id=\"main-content\" class=\"site-main\" tabIndex={-1}>{props.children}</main><SiteFooter {...props.footer} /></div>;\n}\n\nexport interface LegalLayoutProps {\n title: string;\n updatedAt: string;\n messages: SiteMessages;\n children: JSX.Element;\n}\n\nexport function LegalLayout(props: LegalLayoutProps) {\n return <article class=\"site-legal\"><header><h1>{props.title}</h1><p>{props.messages.updatedLabel}: <time datetime={props.updatedAt}>{props.updatedAt}</time></p></header>{props.children}</article>;\n}\n\nexport interface StatusBannerProps {\n tone: \"success\" | \"warning\" | \"danger\" | \"info\";\n title: string;\n children?: JSX.Element;\n action?: { label: string; onClick: () => void; tone?: ButtonTone };\n}\n\nexport function StatusBanner(props: StatusBannerProps) {\n return <section class={`site-status site-status--${props.tone}`} role={props.tone === \"danger\" ? \"alert\" : \"status\"} aria-live={props.tone === \"danger\" ? \"assertive\" : \"polite\"}>\n <strong>{props.title}</strong>{props.children && <div>{props.children}</div>}{props.action && <Button tone={props.action.tone ?? \"secondary\"} onClick={props.action.onClick}>{props.action.label}</Button>}\n </section>;\n}\n\nexport interface NotFoundLayoutProps { messages: SiteMessages; homeHref: string; children?: JSX.Element }\nexport function NotFoundLayout(props: NotFoundLayoutProps) {\n return <main class=\"site-main site-centered-layout\"><h1>{props.messages.notFoundTitle}</h1><p>{props.messages.notFoundDescription}</p>{props.children}<a class=\"dds-btn dds-btn--primary\" href={props.homeHref}>{props.messages.backHome}</a></main>;\n}\n\nexport interface ErrorLayoutProps { messages: SiteMessages; onRetry: () => void; errorId?: string; children?: JSX.Element }\nexport function ErrorLayout(props: ErrorLayoutProps) {\n return <main class=\"site-main site-centered-layout\"><h1>{props.messages.errorTitle}</h1><p>{props.messages.errorDescription}</p>{props.errorId && <code>{props.errorId}</code>}{props.children}<Button tone=\"primary\" onClick={props.onRetry}>{props.messages.retry}</Button></main>;\n}\n","import { Button, Field } from \"@devslab/dds-solid\";\nimport { createSignal } from \"solid-js\";\n\nexport interface RequestAccessMessages {\n nameLabel: string;\n emailLabel: string;\n organizationLabel: string;\n useCaseLabel: string;\n submit: string;\n submitting: string;\n success: string;\n error: string;\n}\n\nexport interface RequestAccessFormProps {\n messages: RequestAccessMessages;\n onSubmit: (data: FormData) => void | Promise<void>;\n class?: string;\n}\n\nexport function RequestAccessForm(props: RequestAccessFormProps) {\n const [state, setState] = createSignal<\"idle\" | \"submitting\" | \"success\" | \"error\">(\"idle\");\n const submit = async (event: SubmitEvent) => {\n event.preventDefault();\n if (state() === \"submitting\") return;\n setState(\"submitting\");\n try {\n await props.onSubmit(new FormData(event.currentTarget as HTMLFormElement));\n setState(\"success\");\n } catch {\n setState(\"error\");\n }\n };\n return (\n <form class={`site-request-form${props.class ? ` ${props.class}` : \"\"}`} onSubmit={submit}>\n <Field label={props.messages.nameLabel} required>{(control) => <input {...control} class=\"dds-input\" name=\"name\" autocomplete=\"name\" required />}</Field>\n <Field label={props.messages.emailLabel} required>{(control) => <input {...control} class=\"dds-input\" type=\"email\" name=\"email\" autocomplete=\"email\" required />}</Field>\n <Field label={props.messages.organizationLabel}>{(control) => <input {...control} class=\"dds-input\" name=\"organization\" autocomplete=\"organization\" />}</Field>\n <Field label={props.messages.useCaseLabel}>{(control) => <textarea {...control} class=\"dds-textarea\" name=\"useCase\" rows=\"5\" />}</Field>\n <Button type=\"submit\" loading={state() === \"submitting\"}>{state() === \"submitting\" ? props.messages.submitting : props.messages.submit}</Button>\n <div aria-live=\"polite\" aria-atomic=\"true\">{state() === \"success\" ? props.messages.success : state() === \"error\" ? props.messages.error : \"\"}</div>\n </form>\n );\n}\n","export interface OssProductMarkProps {\n name: string;\n src: string;\n size?: \"sm\" | \"md\" | \"lg\";\n decorative?: boolean;\n class?: string;\n}\n\nconst MARK_SIZE = { sm: 24, md: 32, lg: 48 } as const;\n\nexport function OssProductMark(props: OssProductMarkProps) {\n const size = () => props.size ?? \"md\";\n const pixels = () => MARK_SIZE[size()];\n\n return (\n <img\n class={`oss-product-mark oss-product-mark--${size()}${props.class ? ` ${props.class}` : \"\"}`}\n src={props.src}\n alt={props.decorative ? \"\" : props.name}\n aria-hidden={props.decorative ? \"true\" : undefined}\n width={pixels()}\n height={pixels()}\n decoding=\"async\"\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,404 @@
1
+ import { createComponent, escape, mergeProps, ssr, ssrAttribute, ssrElement, ssrHydrationKey } from "solid-js/web";
2
+ import { Button, Field, Icon, IconButton } from "@devslab/dds-solid";
3
+ import { For, createSignal, onMount } from "solid-js";
4
+ //#region src/core/locales.mjs
5
+ var LOCALES = Object.freeze([
6
+ {
7
+ code: "ko",
8
+ language: "Korean",
9
+ nativeName: "한국어",
10
+ dir: "ltr"
11
+ },
12
+ {
13
+ code: "en",
14
+ language: "English",
15
+ nativeName: "English",
16
+ dir: "ltr"
17
+ },
18
+ {
19
+ code: "ja",
20
+ language: "Japanese",
21
+ nativeName: "日本語",
22
+ dir: "ltr"
23
+ },
24
+ {
25
+ code: "zh-HK",
26
+ language: "Chinese (Hong Kong)",
27
+ nativeName: "繁體中文(香港)",
28
+ dir: "ltr"
29
+ },
30
+ {
31
+ code: "zh-TW",
32
+ language: "Chinese (Taiwan)",
33
+ nativeName: "繁體中文(台灣)",
34
+ dir: "ltr"
35
+ },
36
+ {
37
+ code: "hi",
38
+ language: "Hindi",
39
+ nativeName: "हिन्दी",
40
+ dir: "ltr"
41
+ },
42
+ {
43
+ code: "vi",
44
+ language: "Vietnamese",
45
+ nativeName: "Tiếng Việt",
46
+ dir: "ltr"
47
+ },
48
+ {
49
+ code: "id",
50
+ language: "Indonesian",
51
+ nativeName: "Bahasa Indonesia",
52
+ dir: "ltr"
53
+ },
54
+ {
55
+ code: "th",
56
+ language: "Thai",
57
+ nativeName: "ไทย",
58
+ dir: "ltr"
59
+ },
60
+ {
61
+ code: "pt-BR",
62
+ language: "Portuguese (Brazil)",
63
+ nativeName: "Português (Brasil)",
64
+ dir: "ltr"
65
+ },
66
+ {
67
+ code: "fr",
68
+ language: "French",
69
+ nativeName: "Français",
70
+ dir: "ltr"
71
+ },
72
+ {
73
+ code: "de",
74
+ language: "German",
75
+ nativeName: "Deutsch",
76
+ dir: "ltr"
77
+ },
78
+ {
79
+ code: "es",
80
+ language: "Spanish",
81
+ nativeName: "Español",
82
+ dir: "ltr"
83
+ },
84
+ {
85
+ code: "ar",
86
+ language: "Arabic",
87
+ nativeName: "العربية",
88
+ dir: "rtl"
89
+ }
90
+ ]);
91
+ new Map(LOCALES.map((locale) => [locale.code.toLowerCase(), locale]));
92
+ //#endregion
93
+ //#region src/solid/chrome.tsx
94
+ var _tmpl$$3 = [
95
+ "<label",
96
+ "><span class=\"dds-sr-only\">",
97
+ "</span><span class=\"dds-select site-locale\"><select class=\"dds-select__input\"",
98
+ ">",
99
+ "</select></span></label>"
100
+ ];
101
+ var _tmpl$2$1 = [
102
+ "<option",
103
+ ">",
104
+ "</option>"
105
+ ];
106
+ var _tmpl$3$1 = [
107
+ "<header",
108
+ " class=\"site-header\"><a class=\"dds-sr-only\" href=\"#main-content\">",
109
+ "</a><div class=\"site-header__inner\"><a class=\"site-brand\"",
110
+ "><!--$-->",
111
+ "<!--/--><!--$-->",
112
+ "<!--/--></a><!--$-->",
113
+ "<!--/--><nav id=\"site-navigation\" class=\"site-nav\"",
114
+ "><ul class=\"site-nav__list\">",
115
+ "</ul></nav><div class=\"site-header__controls\"",
116
+ "><!--$-->",
117
+ "<!--/--><!--$-->",
118
+ "<!--/--><!--$-->",
119
+ "<!--/--></div></div></header>"
120
+ ];
121
+ var _tmpl$4$1 = [
122
+ "<li",
123
+ "><a",
124
+ ">",
125
+ "</a></li>"
126
+ ];
127
+ var _tmpl$5$1 = [
128
+ "<footer",
129
+ " class=\"site-footer\"",
130
+ "><div class=\"site-footer__inner\"><strong>",
131
+ "</strong><ul class=\"site-footer__links\">",
132
+ "</ul><small>",
133
+ "</small></div></footer>"
134
+ ];
135
+ function LocaleMenu(props) {
136
+ return ssr(_tmpl$$3, ssrHydrationKey(), escape(props.messages.localeLabel), ssrAttribute("value", escape(props.state.locale, true), false) + ssrAttribute("aria-label", escape(props.messages.localeLabel, true), false), escape(createComponent(For, {
137
+ each: LOCALES,
138
+ children: (locale) => ssr(_tmpl$2$1, ssrHydrationKey() + ssrAttribute("value", escape(locale.code, true), false) + ssrAttribute("lang", escape(locale.code, true), false) + ssrAttribute("dir", escape(locale.dir, true), false), escape(locale.nativeName))
139
+ })));
140
+ }
141
+ function ThemeToggle(props) {
142
+ const order = [
143
+ "system",
144
+ "light",
145
+ "dark"
146
+ ];
147
+ const [internal, setInternal] = createSignal(props.defaultValue ?? "system");
148
+ const [resolved, setResolved] = createSignal("light");
149
+ const nextTheme = () => resolved() === "dark" ? "light" : "dark";
150
+ const nextLabel = () => nextTheme() === "dark" ? props.messages.themeDark : props.messages.themeLight;
151
+ const apply = (theme) => {
152
+ const resolved = theme === "system" ? matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : theme;
153
+ setResolved(resolved);
154
+ document.documentElement.dataset.theme = resolved;
155
+ document.documentElement.dataset.themePreference = theme;
156
+ };
157
+ const update = (theme) => {
158
+ if (props.value === void 0) setInternal(theme);
159
+ props.onValueChange?.(theme);
160
+ apply(theme);
161
+ localStorage.setItem(props.storageKey ?? "site-theme", theme);
162
+ };
163
+ onMount(() => {
164
+ const stored = localStorage.getItem(props.storageKey ?? "site-theme");
165
+ if (props.value === void 0 && stored && order.includes(stored)) setInternal(stored);
166
+ apply(props.value ?? stored ?? internal());
167
+ });
168
+ return createComponent(IconButton, {
169
+ "class": "site-theme-toggle",
170
+ tone: "ghost",
171
+ get ["aria-label"]() {
172
+ return `${props.messages.themeLabel}: ${nextLabel()}`;
173
+ },
174
+ get title() {
175
+ return `${props.messages.themeLabel}: ${nextLabel()}`;
176
+ },
177
+ onClick: () => update(nextTheme()),
178
+ get children() {
179
+ return createComponent(Icon, {
180
+ "class": "site-theme-toggle__icon",
181
+ get name() {
182
+ return nextTheme() === "dark" ? "site-moon" : "site-sun";
183
+ },
184
+ get ["data-icon"]() {
185
+ return nextTheme() === "dark" ? "site-moon" : "site-sun";
186
+ },
187
+ size: 20
188
+ });
189
+ }
190
+ });
191
+ }
192
+ function SiteHeader(props) {
193
+ const [menuOpen, setMenuOpen] = createSignal(false);
194
+ return ssr(_tmpl$3$1, ssrHydrationKey(), escape(props.messages.skipToContent), ssrAttribute("href", escape(props.brand.href, true), false), escape(props.brand.logo), escape(props.brand.name), escape(createComponent(Button, {
195
+ "class": "site-menu-button",
196
+ tone: "ghost",
197
+ get ["aria-expanded"]() {
198
+ return menuOpen();
199
+ },
200
+ "aria-controls": "site-navigation",
201
+ onClick: () => setMenuOpen((open) => !open),
202
+ get children() {
203
+ return menuOpen() ? props.messages.menuClose : props.messages.menuOpen;
204
+ }
205
+ })), ssrAttribute("data-open", escape(String(menuOpen()), true), false) + ssrAttribute("aria-label", escape(props.messages.navigationLabel, true), false), escape(createComponent(For, {
206
+ get each() {
207
+ return props.navigation;
208
+ },
209
+ children: (item) => ssr(_tmpl$4$1, ssrHydrationKey(), ssrAttribute("href", escape(item.href, true), false) + ssrAttribute("target", item.external ? "_blank" : escape(void 0, true), false) + ssrAttribute("rel", item.external ? "noreferrer" : escape(void 0, true), false), escape(item.label))
210
+ })), ssrAttribute("data-open", escape(String(menuOpen()), true), false), escape(createComponent(LocaleMenu, mergeProps({
211
+ get state() {
212
+ return props.locale;
213
+ },
214
+ get messages() {
215
+ return props.messages;
216
+ }
217
+ }, () => props.onLocaleChange ? { onLocaleChange: props.onLocaleChange } : {}))), props.theme && escape(createComponent(ThemeToggle, mergeProps(() => props.theme, { get messages() {
218
+ return props.messages;
219
+ } }))), escape(props.actions));
220
+ }
221
+ function SiteFooter(props) {
222
+ return ssr(_tmpl$5$1, ssrHydrationKey(), ssrAttribute("aria-label", escape(props.messages.footerLabel, true), false), escape(props.brand.name), escape(createComponent(For, {
223
+ get each() {
224
+ return props.links;
225
+ },
226
+ children: (item) => ssr(_tmpl$4$1, ssrHydrationKey(), ssrAttribute("href", escape(item.href, true), false), escape(item.label))
227
+ })), escape(props.copyright));
228
+ }
229
+ //#endregion
230
+ //#region src/solid/layouts.tsx
231
+ var _tmpl$$2 = [
232
+ "<div",
233
+ " class=\"site-shell\"><!--$-->",
234
+ "<!--/--><main id=\"main-content\" class=\"site-main\" tabindex=\"-1\">",
235
+ "</main><!--$-->",
236
+ "<!--/--></div>"
237
+ ];
238
+ var _tmpl$2 = [
239
+ "<article",
240
+ " class=\"site-legal\"><header><h1>",
241
+ "</h1><p><!--$-->",
242
+ "<!--/-->: <time",
243
+ ">",
244
+ "</time></p></header><!--$-->",
245
+ "<!--/--></article>"
246
+ ];
247
+ var _tmpl$3 = [
248
+ "<section",
249
+ " class=\"",
250
+ "\"",
251
+ "><strong>",
252
+ "</strong><!--$-->",
253
+ "<!--/--><!--$-->",
254
+ "<!--/--></section>"
255
+ ];
256
+ var _tmpl$4 = [
257
+ "<div",
258
+ ">",
259
+ "</div>"
260
+ ];
261
+ var _tmpl$5 = [
262
+ "<main",
263
+ " class=\"site-main site-centered-layout\"><h1>",
264
+ "</h1><p>",
265
+ "</p><!--$-->",
266
+ "<!--/--><a class=\"dds-btn dds-btn--primary\"",
267
+ ">",
268
+ "</a></main>"
269
+ ];
270
+ var _tmpl$6 = [
271
+ "<main",
272
+ " class=\"site-main site-centered-layout\"><h1>",
273
+ "</h1><p>",
274
+ "</p><!--$-->",
275
+ "<!--/--><!--$-->",
276
+ "<!--/--><!--$-->",
277
+ "<!--/--></main>"
278
+ ];
279
+ var _tmpl$7 = [
280
+ "<code",
281
+ ">",
282
+ "</code>"
283
+ ];
284
+ function MarketingShell(props) {
285
+ return ssr(_tmpl$$2, ssrHydrationKey(), escape(createComponent(SiteHeader, mergeProps(() => props.header))), escape(props.children), escape(createComponent(SiteFooter, mergeProps(() => props.footer))));
286
+ }
287
+ function LegalLayout(props) {
288
+ return ssr(_tmpl$2, ssrHydrationKey(), escape(props.title), escape(props.messages.updatedLabel), ssrAttribute("datetime", escape(props.updatedAt, true), false), escape(props.updatedAt), escape(props.children));
289
+ }
290
+ function StatusBanner(props) {
291
+ return ssr(_tmpl$3, ssrHydrationKey(), `site-status site-status--${escape(props.tone, true)}`, ssrAttribute("role", props.tone === "danger" ? "alert" : "status", false) + ssrAttribute("aria-live", props.tone === "danger" ? "assertive" : "polite", false), escape(props.title), props.children && ssr(_tmpl$4, ssrHydrationKey(), escape(props.children)), props.action && escape(createComponent(Button, {
292
+ get tone() {
293
+ return props.action.tone ?? "secondary";
294
+ },
295
+ get onClick() {
296
+ return props.action.onClick;
297
+ },
298
+ get children() {
299
+ return props.action.label;
300
+ }
301
+ })));
302
+ }
303
+ function NotFoundLayout(props) {
304
+ return ssr(_tmpl$5, ssrHydrationKey(), escape(props.messages.notFoundTitle), escape(props.messages.notFoundDescription), escape(props.children), ssrAttribute("href", escape(props.homeHref, true), false), escape(props.messages.backHome));
305
+ }
306
+ function ErrorLayout(props) {
307
+ return ssr(_tmpl$6, ssrHydrationKey(), escape(props.messages.errorTitle), escape(props.messages.errorDescription), props.errorId && ssr(_tmpl$7, ssrHydrationKey(), escape(props.errorId)), escape(props.children), escape(createComponent(Button, {
308
+ tone: "primary",
309
+ get onClick() {
310
+ return props.onRetry;
311
+ },
312
+ get children() {
313
+ return props.messages.retry;
314
+ }
315
+ })));
316
+ }
317
+ //#endregion
318
+ //#region src/solid/request-access.tsx
319
+ var _tmpl$$1 = [
320
+ "<form",
321
+ " class=\"",
322
+ "\"><!--$-->",
323
+ "<!--/--><!--$-->",
324
+ "<!--/--><!--$-->",
325
+ "<!--/--><!--$-->",
326
+ "<!--/--><!--$-->",
327
+ "<!--/--><div aria-live=\"polite\" aria-atomic=\"true\">",
328
+ "</div></form>"
329
+ ];
330
+ function RequestAccessForm(props) {
331
+ const [state, setState] = createSignal("idle");
332
+ return ssr(_tmpl$$1, ssrHydrationKey(), `site-request-form${props.class ? ` ${escape(props.class, true)}` : ""}`, escape(createComponent(Field, {
333
+ get label() {
334
+ return props.messages.nameLabel;
335
+ },
336
+ required: true,
337
+ children: (control) => ssrElement("input", mergeProps(control, {
338
+ "class": "dds-input",
339
+ name: "name",
340
+ autocomplete: "name",
341
+ required: true
342
+ }), void 0, true)
343
+ })), escape(createComponent(Field, {
344
+ get label() {
345
+ return props.messages.emailLabel;
346
+ },
347
+ required: true,
348
+ children: (control) => ssrElement("input", mergeProps(control, {
349
+ "class": "dds-input",
350
+ type: "email",
351
+ name: "email",
352
+ autocomplete: "email",
353
+ required: true
354
+ }), void 0, true)
355
+ })), escape(createComponent(Field, {
356
+ get label() {
357
+ return props.messages.organizationLabel;
358
+ },
359
+ children: (control) => ssrElement("input", mergeProps(control, {
360
+ "class": "dds-input",
361
+ name: "organization",
362
+ autocomplete: "organization"
363
+ }), void 0, true)
364
+ })), escape(createComponent(Field, {
365
+ get label() {
366
+ return props.messages.useCaseLabel;
367
+ },
368
+ children: (control) => ssrElement("textarea", mergeProps(control, {
369
+ "class": "dds-textarea",
370
+ name: "useCase",
371
+ rows: "5"
372
+ }), void 0, true)
373
+ })), escape(createComponent(Button, {
374
+ type: "submit",
375
+ get loading() {
376
+ return state() === "submitting";
377
+ },
378
+ get children() {
379
+ return state() === "submitting" ? props.messages.submitting : props.messages.submit;
380
+ }
381
+ })), state() === "success" ? escape(props.messages.success) : state() === "error" ? escape(props.messages.error) : "");
382
+ }
383
+ //#endregion
384
+ //#region src/solid/oss-product-mark.tsx
385
+ var _tmpl$ = [
386
+ "<img",
387
+ " class=\"",
388
+ "\"",
389
+ " decoding=\"async\">"
390
+ ];
391
+ var MARK_SIZE = {
392
+ sm: 24,
393
+ md: 32,
394
+ lg: 48
395
+ };
396
+ function OssProductMark(props) {
397
+ const size = () => props.size ?? "md";
398
+ const pixels = () => MARK_SIZE[size()];
399
+ return ssr(_tmpl$, ssrHydrationKey(), `oss-product-mark oss-product-mark--${escape(size(), true)}${props.class ? ` ${escape(props.class, true)}` : ""}`, ssrAttribute("src", escape(props.src, true), false) + ssrAttribute("alt", props.decorative ? "" : escape(props.name, true), false) + ssrAttribute("aria-hidden", props.decorative ? "true" : escape(void 0, true), false) + ssrAttribute("width", escape(pixels(), true), false) + ssrAttribute("height", escape(pixels(), true), false));
400
+ }
401
+ //#endregion
402
+ export { ErrorLayout, LegalLayout, LocaleMenu, MarketingShell, NotFoundLayout, OssProductMark, RequestAccessForm, SiteFooter, SiteHeader, StatusBanner, ThemeToggle };
403
+
404
+ //# sourceMappingURL=solid.server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solid.server.js","names":["Button","Icon","IconButton","For","createSignal","onMount","JSX","LOCALES","SiteLocale","LocaleState","SiteBrand","SiteLink","SiteMessages","ThemePreference","LocaleMenuProps","state","messages","onLocaleChange","locale","href","LocaleMenu","props","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","localeLabel","_$ssrAttribute","_$createComponent","each","children","_tmpl$2","code","dir","nativeName","ThemeToggleProps","value","defaultValue","onValueChange","theme","storageKey","ThemeToggle","order","internal","setInternal","resolved","setResolved","nextTheme","nextLabel","themeDark","themeLight","apply","matchMedia","matches","document","documentElement","dataset","themePreference","update","undefined","localStorage","setItem","stored","getItem","includes","tone","aria-label","themeLabel","title","onClick","name","data-icon","size","SiteHeaderProps","brand","navigation","Omit","actions","Element","SiteHeader","menuOpen","setMenuOpen","_tmpl$3","skipToContent","logo","aria-expanded","open","menuClose","String","navigationLabel","item","_tmpl$4","external","label","_$mergeProps","SiteFooterProps","links","copyright","SiteFooter","_tmpl$5","footerLabel","Button","ButtonTone","JSX","SiteFooter","SiteHeader","SiteFooterProps","SiteHeaderProps","SiteMessages","MarketingShellProps","header","footer","messages","children","Element","MarketingShell","props","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","_$createComponent","_$mergeProps","LegalLayoutProps","title","updatedAt","LegalLayout","_tmpl$2","updatedLabel","_$ssrAttribute","StatusBannerProps","tone","action","label","onClick","StatusBanner","_tmpl$3","_tmpl$4","NotFoundLayoutProps","homeHref","NotFoundLayout","_tmpl$5","notFoundTitle","notFoundDescription","backHome","ErrorLayoutProps","onRetry","errorId","ErrorLayout","_tmpl$6","errorTitle","errorDescription","_tmpl$7","retry","Button","Field","createSignal","RequestAccessMessages","nameLabel","emailLabel","organizationLabel","useCaseLabel","submit","submitting","success","error","RequestAccessFormProps","messages","onSubmit","data","FormData","Promise","class","RequestAccessForm","props","state","setState","event","SubmitEvent","preventDefault","currentTarget","HTMLFormElement","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","_$createComponent","label","required","children","control","_$ssrElement","_$mergeProps","name","autocomplete","undefined","type","rows","loading","OssProductMarkProps","name","src","size","decorative","class","MARK_SIZE","sm","md","lg","const","OssProductMark","props","pixels","_$ssr","_tmpl$","_$ssrHydrationKey","_$escape","_$ssrAttribute","undefined"],"sources":["../src/core/locales.mjs","../src/solid/chrome.tsx","../src/solid/layouts.tsx","../src/solid/request-access.tsx","../src/solid/oss-product-mark.tsx"],"sourcesContent":["export const LOCALES = Object.freeze([\n { code: \"ko\", language: \"Korean\", nativeName: \"한국어\", dir: \"ltr\" },\n { code: \"en\", language: \"English\", nativeName: \"English\", dir: \"ltr\" },\n { code: \"ja\", language: \"Japanese\", nativeName: \"日本語\", dir: \"ltr\" },\n { code: \"zh-HK\", language: \"Chinese (Hong Kong)\", nativeName: \"繁體中文(香港)\", dir: \"ltr\" },\n { code: \"zh-TW\", language: \"Chinese (Taiwan)\", nativeName: \"繁體中文(台灣)\", dir: \"ltr\" },\n { code: \"hi\", language: \"Hindi\", nativeName: \"हिन्दी\", dir: \"ltr\" },\n { code: \"vi\", language: \"Vietnamese\", nativeName: \"Tiếng Việt\", dir: \"ltr\" },\n { code: \"id\", language: \"Indonesian\", nativeName: \"Bahasa Indonesia\", dir: \"ltr\" },\n { code: \"th\", language: \"Thai\", nativeName: \"ไทย\", dir: \"ltr\" },\n { code: \"pt-BR\", language: \"Portuguese (Brazil)\", nativeName: \"Português (Brasil)\", dir: \"ltr\" },\n { code: \"fr\", language: \"French\", nativeName: \"Français\", dir: \"ltr\" },\n { code: \"de\", language: \"German\", nativeName: \"Deutsch\", dir: \"ltr\" },\n { code: \"es\", language: \"Spanish\", nativeName: \"Español\", dir: \"ltr\" },\n { code: \"ar\", language: \"Arabic\", nativeName: \"العربية\", dir: \"rtl\" },\n]);\n\nconst byLower = new Map(LOCALES.map((locale) => [locale.code.toLowerCase(), locale]));\nconst aliases = new Map([[\"zh\", \"zh-TW\"], [\"pt\", \"pt-BR\"]]);\n\nexport function canonicalLocale(candidate) {\n if (!candidate) return undefined;\n const exact = byLower.get(String(candidate).trim().toLowerCase());\n if (exact) return exact.code;\n const base = String(candidate).trim().toLowerCase().split(\"-\")[0];\n if (aliases.has(base)) return aliases.get(base);\n return byLower.get(base)?.code;\n}\n\nexport function localeAttributes(locale) {\n const canonical = canonicalLocale(locale);\n if (!canonical) throw new RangeError(`Unsupported locale: ${locale}`);\n return { lang: canonical, dir: canonical === \"ar\" ? \"rtl\" : \"ltr\" };\n}\n\nfunction cookieValue(header, name) {\n for (const part of String(header ?? \"\").split(\";\")) {\n const separator = part.indexOf(\"=\");\n if (separator < 0) continue;\n if (part.slice(0, separator).trim() === name) {\n try { return decodeURIComponent(part.slice(separator + 1).trim()); }\n catch { return undefined; }\n }\n }\n return undefined;\n}\n\nfunction acceptedLocales(header) {\n return String(header ?? \"\").split(\",\").map((part, order) => {\n const [tag, ...parameters] = part.trim().split(\";\");\n const q = Number(parameters.find((parameter) => parameter.trim().startsWith(\"q=\"))?.split(\"=\")[1] ?? 1);\n return { locale: canonicalLocale(tag), q: Number.isFinite(q) ? q : 0, order };\n }).filter(({ locale, q }) => locale && q > 0).sort((a, b) => b.q - a.q || a.order - b.order);\n}\n\nexport function resolveLocale({ pathname = \"/\", cookie = \"\", acceptLanguage = \"\", defaultLocale }) {\n const routeLocale = canonicalLocale(pathname.split(\"/\").filter(Boolean)[0]);\n if (routeLocale) return { locale: routeLocale, source: \"route\" };\n const storedLocale = canonicalLocale(cookieValue(cookie, \"locale\"));\n if (storedLocale) return { locale: storedLocale, source: \"cookie\" };\n const accepted = acceptedLocales(acceptLanguage)[0]?.locale;\n if (accepted) return { locale: accepted, source: \"accept-language\" };\n const fallback = canonicalLocale(defaultLocale);\n if (!fallback) throw new RangeError(`Unsupported default locale: ${defaultLocale}`);\n return { locale: fallback, source: \"default\" };\n}\n","import { Button, Icon, IconButton } from \"@devslab/dds-solid\";\nimport { For, createSignal, onMount, type JSX } from \"solid-js\";\n\nimport { LOCALES, type SiteLocale } from \"../core/locales.mjs\";\nimport type { LocaleState, SiteBrand, SiteLink, SiteMessages, ThemePreference } from \"./types\";\n\nexport interface LocaleMenuProps {\n state: LocaleState;\n messages: SiteMessages;\n onLocaleChange?: (locale: SiteLocale, href: string) => void;\n}\n\nexport function LocaleMenu(props: LocaleMenuProps) {\n return (\n <label>\n <span class=\"dds-sr-only\">{props.messages.localeLabel}</span>\n <span class=\"dds-select site-locale\">\n <select\n class=\"dds-select__input\"\n value={props.state.locale}\n aria-label={props.messages.localeLabel}\n onChange={(event) => {\n const locale = event.currentTarget.value as SiteLocale;\n const href = props.state.hrefForLocale(locale);\n if (props.onLocaleChange) props.onLocaleChange(locale, href);\n else window.location.assign(href);\n }}\n >\n <For each={LOCALES}>{(locale) => <option value={locale.code} lang={locale.code} dir={locale.dir}>{locale.nativeName}</option>}</For>\n </select>\n </span>\n </label>\n );\n}\n\nexport interface ThemeToggleProps {\n messages: SiteMessages;\n value?: ThemePreference;\n defaultValue?: ThemePreference;\n onValueChange?: (theme: ThemePreference) => void;\n storageKey?: string;\n}\n\nexport function ThemeToggle(props: ThemeToggleProps) {\n const order: ThemePreference[] = [\"system\", \"light\", \"dark\"];\n const [internal, setInternal] = createSignal<ThemePreference>(props.defaultValue ?? \"system\");\n const [resolved, setResolved] = createSignal<\"light\" | \"dark\">(\"light\");\n const value = () => props.value ?? internal();\n const nextTheme = () => resolved() === \"dark\" ? \"light\" : \"dark\";\n const nextLabel = () => nextTheme() === \"dark\" ? props.messages.themeDark : props.messages.themeLight;\n const apply = (theme: ThemePreference) => {\n const resolved = theme === \"system\"\n ? (matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\")\n : theme;\n setResolved(resolved);\n document.documentElement.dataset.theme = resolved;\n document.documentElement.dataset.themePreference = theme;\n };\n const update = (theme: ThemePreference) => {\n if (props.value === undefined) setInternal(theme);\n props.onValueChange?.(theme);\n apply(theme);\n localStorage.setItem(props.storageKey ?? \"site-theme\", theme);\n };\n onMount(() => {\n const stored = localStorage.getItem(props.storageKey ?? \"site-theme\") as ThemePreference | null;\n if (props.value === undefined && stored && order.includes(stored)) setInternal(stored);\n apply(props.value ?? stored ?? internal());\n });\n return (\n <IconButton\n class=\"site-theme-toggle\"\n tone=\"ghost\"\n aria-label={`${props.messages.themeLabel}: ${nextLabel()}`}\n title={`${props.messages.themeLabel}: ${nextLabel()}`}\n onClick={() => update(nextTheme())}\n >\n <Icon\n class=\"site-theme-toggle__icon\"\n name={nextTheme() === \"dark\" ? \"site-moon\" : \"site-sun\"}\n data-icon={nextTheme() === \"dark\" ? \"site-moon\" : \"site-sun\"}\n size={20}\n />\n </IconButton>\n );\n}\n\nexport interface SiteHeaderProps {\n brand: SiteBrand;\n navigation: SiteLink[];\n locale: LocaleState;\n messages: SiteMessages;\n theme?: Omit<ThemeToggleProps, \"messages\">;\n onLocaleChange?: LocaleMenuProps[\"onLocaleChange\"];\n actions?: JSX.Element;\n}\n\nexport function SiteHeader(props: SiteHeaderProps) {\n const [menuOpen, setMenuOpen] = createSignal(false);\n return (\n <header class=\"site-header\">\n <a class=\"dds-sr-only\" href=\"#main-content\">{props.messages.skipToContent}</a>\n <div class=\"site-header__inner\">\n <a class=\"site-brand\" href={props.brand.href}>{props.brand.logo}{props.brand.name}</a>\n <Button class=\"site-menu-button\" tone=\"ghost\" aria-expanded={menuOpen()} aria-controls=\"site-navigation\" onClick={() => setMenuOpen((open) => !open)}>\n {menuOpen() ? props.messages.menuClose : props.messages.menuOpen}\n </Button>\n <nav id=\"site-navigation\" class=\"site-nav\" data-open={String(menuOpen())} aria-label={props.messages.navigationLabel}>\n <ul class=\"site-nav__list\"><For each={props.navigation}>{(item) => <li><a href={item.href} target={item.external ? \"_blank\" : undefined} rel={item.external ? \"noreferrer\" : undefined}>{item.label}</a></li>}</For></ul>\n </nav>\n <div class=\"site-header__controls\" data-open={String(menuOpen())}>\n <LocaleMenu\n state={props.locale}\n messages={props.messages}\n {...(props.onLocaleChange ? { onLocaleChange: props.onLocaleChange } : {})}\n />\n {props.theme && <ThemeToggle {...props.theme} messages={props.messages} />}\n {props.actions}\n </div>\n </div>\n </header>\n );\n}\n\nexport interface SiteFooterProps {\n brand: SiteBrand;\n links: SiteLink[];\n copyright: string;\n messages: SiteMessages;\n}\n\nexport function SiteFooter(props: SiteFooterProps) {\n return (\n <footer class=\"site-footer\" aria-label={props.messages.footerLabel}>\n <div class=\"site-footer__inner\">\n <strong>{props.brand.name}</strong>\n <ul class=\"site-footer__links\"><For each={props.links}>{(item) => <li><a href={item.href}>{item.label}</a></li>}</For></ul>\n <small>{props.copyright}</small>\n </div>\n </footer>\n );\n}\n","import { Button, type ButtonTone } from \"@devslab/dds-solid\";\nimport type { JSX } from \"solid-js\";\n\nimport { SiteFooter, SiteHeader, type SiteFooterProps, type SiteHeaderProps } from \"./chrome\";\nimport type { SiteMessages } from \"./types\";\n\nexport interface MarketingShellProps {\n header: SiteHeaderProps;\n footer: SiteFooterProps;\n messages: SiteMessages;\n children: JSX.Element;\n}\n\nexport function MarketingShell(props: MarketingShellProps) {\n return <div class=\"site-shell\"><SiteHeader {...props.header} /><main id=\"main-content\" class=\"site-main\" tabIndex={-1}>{props.children}</main><SiteFooter {...props.footer} /></div>;\n}\n\nexport interface LegalLayoutProps {\n title: string;\n updatedAt: string;\n messages: SiteMessages;\n children: JSX.Element;\n}\n\nexport function LegalLayout(props: LegalLayoutProps) {\n return <article class=\"site-legal\"><header><h1>{props.title}</h1><p>{props.messages.updatedLabel}: <time datetime={props.updatedAt}>{props.updatedAt}</time></p></header>{props.children}</article>;\n}\n\nexport interface StatusBannerProps {\n tone: \"success\" | \"warning\" | \"danger\" | \"info\";\n title: string;\n children?: JSX.Element;\n action?: { label: string; onClick: () => void; tone?: ButtonTone };\n}\n\nexport function StatusBanner(props: StatusBannerProps) {\n return <section class={`site-status site-status--${props.tone}`} role={props.tone === \"danger\" ? \"alert\" : \"status\"} aria-live={props.tone === \"danger\" ? \"assertive\" : \"polite\"}>\n <strong>{props.title}</strong>{props.children && <div>{props.children}</div>}{props.action && <Button tone={props.action.tone ?? \"secondary\"} onClick={props.action.onClick}>{props.action.label}</Button>}\n </section>;\n}\n\nexport interface NotFoundLayoutProps { messages: SiteMessages; homeHref: string; children?: JSX.Element }\nexport function NotFoundLayout(props: NotFoundLayoutProps) {\n return <main class=\"site-main site-centered-layout\"><h1>{props.messages.notFoundTitle}</h1><p>{props.messages.notFoundDescription}</p>{props.children}<a class=\"dds-btn dds-btn--primary\" href={props.homeHref}>{props.messages.backHome}</a></main>;\n}\n\nexport interface ErrorLayoutProps { messages: SiteMessages; onRetry: () => void; errorId?: string; children?: JSX.Element }\nexport function ErrorLayout(props: ErrorLayoutProps) {\n return <main class=\"site-main site-centered-layout\"><h1>{props.messages.errorTitle}</h1><p>{props.messages.errorDescription}</p>{props.errorId && <code>{props.errorId}</code>}{props.children}<Button tone=\"primary\" onClick={props.onRetry}>{props.messages.retry}</Button></main>;\n}\n","import { Button, Field } from \"@devslab/dds-solid\";\nimport { createSignal } from \"solid-js\";\n\nexport interface RequestAccessMessages {\n nameLabel: string;\n emailLabel: string;\n organizationLabel: string;\n useCaseLabel: string;\n submit: string;\n submitting: string;\n success: string;\n error: string;\n}\n\nexport interface RequestAccessFormProps {\n messages: RequestAccessMessages;\n onSubmit: (data: FormData) => void | Promise<void>;\n class?: string;\n}\n\nexport function RequestAccessForm(props: RequestAccessFormProps) {\n const [state, setState] = createSignal<\"idle\" | \"submitting\" | \"success\" | \"error\">(\"idle\");\n const submit = async (event: SubmitEvent) => {\n event.preventDefault();\n if (state() === \"submitting\") return;\n setState(\"submitting\");\n try {\n await props.onSubmit(new FormData(event.currentTarget as HTMLFormElement));\n setState(\"success\");\n } catch {\n setState(\"error\");\n }\n };\n return (\n <form class={`site-request-form${props.class ? ` ${props.class}` : \"\"}`} onSubmit={submit}>\n <Field label={props.messages.nameLabel} required>{(control) => <input {...control} class=\"dds-input\" name=\"name\" autocomplete=\"name\" required />}</Field>\n <Field label={props.messages.emailLabel} required>{(control) => <input {...control} class=\"dds-input\" type=\"email\" name=\"email\" autocomplete=\"email\" required />}</Field>\n <Field label={props.messages.organizationLabel}>{(control) => <input {...control} class=\"dds-input\" name=\"organization\" autocomplete=\"organization\" />}</Field>\n <Field label={props.messages.useCaseLabel}>{(control) => <textarea {...control} class=\"dds-textarea\" name=\"useCase\" rows=\"5\" />}</Field>\n <Button type=\"submit\" loading={state() === \"submitting\"}>{state() === \"submitting\" ? props.messages.submitting : props.messages.submit}</Button>\n <div aria-live=\"polite\" aria-atomic=\"true\">{state() === \"success\" ? props.messages.success : state() === \"error\" ? props.messages.error : \"\"}</div>\n </form>\n );\n}\n","export interface OssProductMarkProps {\n name: string;\n src: string;\n size?: \"sm\" | \"md\" | \"lg\";\n decorative?: boolean;\n class?: string;\n}\n\nconst MARK_SIZE = { sm: 24, md: 32, lg: 48 } as const;\n\nexport function OssProductMark(props: OssProductMarkProps) {\n const size = () => props.size ?? \"md\";\n const pixels = () => MARK_SIZE[size()];\n\n return (\n <img\n class={`oss-product-mark oss-product-mark--${size()}${props.class ? ` ${props.class}` : \"\"}`}\n src={props.src}\n alt={props.decorative ? \"\" : props.name}\n aria-hidden={props.decorative ? \"true\" : undefined}\n width={pixels()}\n height={pixels()}\n decoding=\"async\"\n />\n );\n}\n"],"mappings":";;;;AAAA,IAAa,UAAU,OAAO,OAAO;CACnC;EAAE,MAAM;EAAM,UAAU;EAAU,YAAY;EAAO,KAAK;CAAM;CAChE;EAAE,MAAM;EAAM,UAAU;EAAW,YAAY;EAAW,KAAK;CAAM;CACrE;EAAE,MAAM;EAAM,UAAU;EAAY,YAAY;EAAO,KAAK;CAAM;CAClE;EAAE,MAAM;EAAS,UAAU;EAAuB,YAAY;EAAY,KAAK;CAAM;CACrF;EAAE,MAAM;EAAS,UAAU;EAAoB,YAAY;EAAY,KAAK;CAAM;CAClF;EAAE,MAAM;EAAM,UAAU;EAAS,YAAY;EAAU,KAAK;CAAM;CAClE;EAAE,MAAM;EAAM,UAAU;EAAc,YAAY;EAAc,KAAK;CAAM;CAC3E;EAAE,MAAM;EAAM,UAAU;EAAc,YAAY;EAAoB,KAAK;CAAM;CACjF;EAAE,MAAM;EAAM,UAAU;EAAQ,YAAY;EAAO,KAAK;CAAM;CAC9D;EAAE,MAAM;EAAS,UAAU;EAAuB,YAAY;EAAsB,KAAK;CAAM;CAC/F;EAAE,MAAM;EAAM,UAAU;EAAU,YAAY;EAAY,KAAK;CAAM;CACrE;EAAE,MAAM;EAAM,UAAU;EAAU,YAAY;EAAW,KAAK;CAAM;CACpE;EAAE,MAAM;EAAM,UAAU;EAAW,YAAY;EAAW,KAAK;CAAM;CACrE;EAAE,MAAM;EAAM,UAAU;EAAU,YAAY;EAAW,KAAK;CAAM;AACtE,CAAC;AAEe,IAAI,IAAI,QAAQ,KAAK,WAAW,CAAC,OAAO,KAAK,YAAY,GAAG,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLpF,SAAgBoB,WAAWC,OAAwB;CACjD,OAAAC,IAAAC,UAAAC,gBAAA,GAAAC,OAE+BJ,MAAML,SAASU,WAAW,GAAAC,aAAA,SAAAF,OAI1CJ,MAAMN,MAAMG,QAAM,IAAA,GAAA,KAAA,IAAAS,aAAA,cAAAF,OACbJ,MAAML,SAASU,aAAW,IAAA,GAAA,KAAA,GAAAD,OAAAG,gBAQrCzB,KAAG;EAAC0B,MAAMtB;EAAOuB,WAAIZ,WAAMI,IAAAS,WAAAP,gBAAA,IAAAG,aAAA,SAAAF,OAAoBP,OAAOc,MAAI,IAAA,GAAA,KAAA,IAAAL,aAAA,QAAAF,OAAQP,OAAOc,MAAI,IAAA,GAAA,KAAA,IAAAL,aAAA,OAAAF,OAAOP,OAAOe,KAAG,IAAA,GAAA,KAAA,GAAAR,OAAGP,OAAOgB,UAAU,CAAA;CAAU,CAAA,CAAA,CAAA;AAKvI;AAUA,SAAgBO,YAAYpB,OAAyB;CACnD,MAAMqB,QAA2B;EAAC;EAAU;EAAS;CAAM;CAC3D,MAAM,CAACC,UAAUC,eAAexC,aAA8BiB,MAAMgB,gBAAgB,QAAQ;CAC5F,MAAM,CAACQ,UAAUC,eAAe1C,aAA+B,OAAO;CAEtE,MAAM2C,kBAAkBF,SAAS,MAAM,SAAS,UAAU;CAC1D,MAAMG,kBAAkBD,UAAU,MAAM,SAAS1B,MAAML,SAASiC,YAAY5B,MAAML,SAASkC;CAC3F,MAAMC,SAASZ,UAA2B;EACxC,MAAMM,WAAWN,UAAU,WACtBa,WAAW,8BAA8B,CAAC,CAACC,UAAU,SAAS,UAC/Dd;EACJO,YAAYD,QAAQ;EACpBS,SAASC,gBAAgBC,QAAQjB,QAAQM;EACzCS,SAASC,gBAAgBC,QAAQC,kBAAkBlB;CACrD;CACA,MAAMmB,UAAUnB,UAA2B;EACzC,IAAIlB,MAAMe,UAAUuB,KAAAA,GAAWf,YAAYL,KAAK;EAChDlB,MAAMiB,gBAAgBC,KAAK;EAC3BY,MAAMZ,KAAK;EACXqB,aAAaC,QAAQxC,MAAMmB,cAAc,cAAcD,KAAK;CAC9D;CACAlC,cAAc;EACZ,MAAMyD,SAASF,aAAaG,QAAQ1C,MAAMmB,cAAc,YAAY;EACpE,IAAInB,MAAMe,UAAUuB,KAAAA,KAAaG,UAAUpB,MAAMsB,SAASF,MAAM,GAAGlB,YAAYkB,MAAM;EACrFX,MAAM9B,MAAMe,SAAS0B,UAAUnB,SAAS,CAAC;CAC3C,CAAC;CACD,OAAAf,gBACG1B,YAAU;EAAA,SAAA;EAET+D,MAAI;EAAA,KAAA,gBAAA;GAAA,OACQ,GAAG5C,MAAML,SAASmD,WAAU,IAAKnB,UAAU;EAAG;EAAA,IAC1DoB,QAAK;GAAA,OAAE,GAAG/C,MAAML,SAASmD,WAAU,IAAKnB,UAAU;EAAG;EACrDqB,eAAeX,OAAOX,UAAU,CAAC;EAAC,IAAAjB,WAAA;GAAA,OAAAF,gBAEjC3B,MAAI;IAAA,SAAA;IAAA,IAEHqE,OAAI;KAAA,OAAEvB,UAAU,MAAM,SAAS,cAAc;IAAU;IAAA,KAAA,eAAA;KAAA,OAC5CA,UAAU,MAAM,SAAS,cAAc;IAAU;IAC5DyB,MAAM;GAAE,CAAA;EAAA;CAAA,CAAA;AAIhB;AAYA,SAAgBO,WAAW1D,OAAwB;CACjD,MAAM,CAAC2D,UAAUC,eAAe7E,aAAa,KAAK;CAClD,OAAAkB,IAAA4D,WAAA1D,gBAAA,GAAAC,OAEiDJ,MAAML,SAASmE,aAAa,GAAAxD,aAAA,QAAAF,OAE3CJ,MAAMqD,MAAMvD,MAAI,IAAA,GAAA,KAAA,GAAAM,OAAGJ,MAAMqD,MAAMU,IAAI,GAAA3D,OAAEJ,MAAMqD,MAAMJ,IAAI,GAAA7C,OAAAG,gBAChF5B,QAAM;EAAA,SAAA;EAA0BiE,MAAI;EAAA,KAAA,mBAAA;GAAA,OAAwBe,SAAS;EAAC;EAAA,iBAAA;EAAkCX,eAAeY,aAAaK,SAAS,CAACA,IAAI;EAAC,IAAAxD,WAAA;GAAA,OACjJkD,SAAS,IAAI3D,MAAML,SAASuE,YAAYlE,MAAML,SAASgE;EAAQ;CAAA,CAAA,CAAA,GAAArD,aAAA,aAAAF,OAEZ+D,OAAOR,SAAS,CAAC,GAAC,IAAA,GAAA,KAAA,IAAArD,aAAA,cAAAF,OAAcJ,MAAML,SAASyE,iBAAe,IAAA,GAAA,KAAA,GAAAhE,OAAAG,gBACtFzB,KAAG;EAAA,IAAC0B,OAAI;GAAA,OAAER,MAAMsD;EAAU;EAAA7C,WAAI4D,SAAIpE,IAAAqE,WAAAnE,gBAAA,GAAAG,aAAA,QAAAF,OAAkBiE,KAAKvE,MAAI,IAAA,GAAA,KAAA,IAAAQ,aAAA,UAAU+D,KAAKE,WAAW,WAAQnE,OAAGkC,KAAAA,GAAS,IAAA,GAAA,KAAA,IAAAhC,aAAA,OAAO+D,KAAKE,WAAW,eAAYnE,OAAGkC,KAAAA,GAAS,IAAA,GAAA,KAAA,GAAAlC,OAAGiE,KAAKG,KAAK,CAAA;CAAU,CAAA,CAAA,GAAAlE,aAAA,aAAAF,OAEjK+D,OAAOR,SAAS,CAAC,GAAC,IAAA,GAAA,KAAA,GAAAvD,OAAAG,gBAC7DR,YAAU0E,WAAA;EAAA,IACT/E,QAAK;GAAA,OAAEM,MAAMH;EAAM;EAAA,IACnBF,WAAQ;GAAA,OAAEK,MAAML;EAAQ;CAAA,SACnBK,MAAMJ,iBAAiB,EAAEA,gBAAgBI,MAAMJ,eAAe,IAAI,CAAC,CAAC,CAAA,CAAA,GAE1EI,MAAMkB,SAAKd,OAAAG,gBAAKa,aAAWqD,iBAAKzE,MAAMkB,OAAK,EAAA,IAAEvB,WAAQ;EAAA,OAAEK,MAAML;CAAQ,EAAA,CAAA,CAAA,CAAA,GAAIS,OACzEJ,MAAMwD,OAAO,CAAA;AAKxB;AASA,SAAgBqB,WAAW7E,OAAwB;CACjD,OAAAC,IAAA6E,WAAA3E,gBAAA,GAAAG,aAAA,cAAAF,OAC0CJ,MAAML,SAASoF,aAAW,IAAA,GAAA,KAAA,GAAA3E,OAErDJ,MAAMqD,MAAMJ,IAAI,GAAA7C,OAAAG,gBACOzB,KAAG;EAAA,IAAC0B,OAAI;GAAA,OAAER,MAAM2E;EAAK;EAAAlE,WAAI4D,SAAIpE,IAAAqE,WAAAnE,gBAAA,GAAAG,aAAA,QAAAF,OAAkBiE,KAAKvE,MAAI,IAAA,GAAA,KAAA,GAAAM,OAAGiE,KAAKG,KAAK,CAAA;CAAU,CAAA,CAAA,GAAApE,OACvGJ,MAAM4E,SAAS,CAAA;AAI/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AChIA,SAAgBkB,eAAeC,OAA4B;CACzD,OAAAC,IAAAC,UAAAC,gBAAA,GAAAC,OAAAC,gBAAgChB,YAAUiB,iBAAKN,MAAMN,MAAM,CAAA,CAAA,GAAAU,OAA6DJ,MAAMH,QAAQ,GAAAO,OAAAC,gBAASjB,YAAUkB,iBAAKN,MAAML,MAAM,CAAA,CAAA,CAAA;AAC5K;AASA,SAAgBe,YAAYV,OAAyB;CACnD,OAAAC,IAAAU,SAAAR,gBAAA,GAAAC,OAAgDJ,MAAMQ,KAAK,GAAAJ,OAAUJ,MAAMJ,SAASgB,YAAY,GAAAC,aAAA,YAAAT,OAAmBJ,MAAMS,WAAS,IAAA,GAAA,KAAA,GAAAL,OAAGJ,MAAMS,SAAS,GAAAL,OAAsBJ,MAAMH,QAAQ,CAAA;AAC1L;AASA,SAAgBsB,aAAanB,OAA0B;CACrD,OAAAC,IAAAmB,SAAAjB,gBAAA,GAAuB,4BAAAC,OAA4BJ,MAAMe,MAAI,IAAA,KAAEF,aAAA,QAAQb,MAAMe,SAAS,WAAW,UAAU,UAAQ,KAAA,IAAAF,aAAA,aAAab,MAAMe,SAAS,WAAW,cAAc,UAAQ,KAAA,GAAAX,OACrKJ,MAAMQ,KAAK,GAAWR,MAAMH,YAAQI,IAAAoB,SAAAlB,gBAAA,GAAAC,OAAUJ,MAAMH,QAAQ,CAAA,GAASG,MAAMgB,UAAMZ,OAAAC,gBAAKpB,QAAM;EAAA,IAAC8B,OAAI;GAAA,OAAEf,MAAMgB,OAAOD,QAAQ;EAAW;EAAA,IAAEG,UAAO;GAAA,OAAElB,MAAMgB,OAAOE;EAAO;EAAA,IAAArB,WAAA;GAAA,OAAGG,MAAMgB,OAAOC;EAAK;CAAA,CAAA,CAAA,CAAU;AAE9M;AAGA,SAAgBO,eAAexB,OAA4B;CACzD,OAAAC,IAAAwB,SAAAtB,gBAAA,GAAAC,OAAyDJ,MAAMJ,SAAS8B,aAAa,GAAAtB,OAAUJ,MAAMJ,SAAS+B,mBAAmB,GAAAvB,OAAMJ,MAAMH,QAAQ,GAAAgB,aAAA,QAAAT,OAA2CJ,MAAMuB,UAAQ,IAAA,GAAA,KAAA,GAAAnB,OAAGJ,MAAMJ,SAASgC,QAAQ,CAAA;AAC1O;AAGA,SAAgBI,YAAYhC,OAAyB;CACnD,OAAAC,IAAAgC,SAAA9B,gBAAA,GAAAC,OAAyDJ,MAAMJ,SAASsC,UAAU,GAAA9B,OAAUJ,MAAMJ,SAASuC,gBAAgB,GAAMnC,MAAM+B,WAAO9B,IAAAmC,SAAAjC,gBAAA,GAAAC,OAAWJ,MAAM+B,OAAO,CAAA,GAAQ3B,OAAEJ,MAAMH,QAAQ,GAAAO,OAAAC,gBAAEpB,QAAM;EAAC8B,MAAI;EAAA,IAAWG,UAAO;GAAA,OAAElB,MAAM8B;EAAO;EAAA,IAAAjC,WAAA;GAAA,OAAGG,MAAMJ,SAASyC;EAAK;CAAA,CAAA,CAAA,CAAA;AACrQ;;;;;;;;;;;;;;AC7BA,SAAgBoB,kBAAkBC,OAA+B;CAC/D,MAAM,CAACC,OAAOC,YAAYpB,aAA0D,MAAM;CAY1F,OAAA0B,IAAAC,UAAAC,gBAAA,GACe,oBAAoBV,MAAMF,QAAQ,IAAAa,OAAIX,MAAMF,OAAK,IAAA,MAAK,MAAIa,OAAAC,gBACpE/B,OAAK;EAAA,IAACgC,QAAK;GAAA,OAAEb,MAAMP,SAAST;EAAS;EAAE8B,UAAQ;EAAAC,WAAGC,YAAOC,WAAA,SAAAC,WAAgBF,SAAO;GAAA,SAAQ;GAAYG,MAAK;GAAOC,cAAa;GAAON,UAAQ;EAAA,CAAA,GAAAO,KAAAA,GAAA,IAAA;CAAG,CAAA,CAAA,GAAAV,OAAAC,gBAC/I/B,OAAK;EAAA,IAACgC,QAAK;GAAA,OAAEb,MAAMP,SAASR;EAAU;EAAE6B,UAAQ;EAAAC,WAAGC,YAAOC,WAAA,SAAAC,WAAgBF,SAAO;GAAA,SAAQ;GAAYM,MAAK;GAAQH,MAAK;GAAQC,cAAa;GAAQN,UAAQ;EAAA,CAAA,GAAAO,KAAAA,GAAA,IAAA;CAAG,CAAA,CAAA,GAAAV,OAAAC,gBAC/J/B,OAAK;EAAA,IAACgC,QAAK;GAAA,OAAEb,MAAMP,SAASP;EAAiB;EAAA6B,WAAIC,YAAOC,WAAA,SAAAC,WAAgBF,SAAO;GAAA,SAAQ;GAAYG,MAAK;GAAeC,cAAa;EAAc,CAAA,GAAAC,KAAAA,GAAA,IAAA;CAAG,CAAA,CAAA,GAAAV,OAAAC,gBACrJ/B,OAAK;EAAA,IAACgC,QAAK;GAAA,OAAEb,MAAMP,SAASN;EAAY;EAAA4B,WAAIC,YAAOC,WAAA,YAAAC,WAAmBF,SAAO;GAAA,SAAQ;GAAeG,MAAK;GAAUI,MAAK;EAAG,CAAA,GAAAF,KAAAA,GAAA,IAAA;CAAG,CAAA,CAAA,GAAAV,OAAAC,gBAC9HhC,QAAM;EAAC0C,MAAI;EAAA,IAAUE,UAAO;GAAA,OAAEvB,MAAM,MAAM;EAAY;EAAA,IAAAc,WAAA;GAAA,OAAGd,MAAM,MAAM,eAAeD,MAAMP,SAASJ,aAAaW,MAAMP,SAASL;EAAM;CAAA,CAAA,CAAA,GAC1Fa,MAAM,MAAM,YAASU,OAAGX,MAAMP,SAASH,OAAO,IAAGW,MAAM,MAAM,UAAOU,OAAGX,MAAMP,SAASF,KAAK,IAAG,EAAE;AAGlJ;;;;;;;;;ACnCA,IAAMwC,YAAY;CAAEC,IAAI;CAAIC,IAAI;CAAIC,IAAI;AAAG;AAE3C,SAAgBE,eAAeC,OAA4B;CACzD,MAAMT,aAAaS,MAAMT,QAAQ;CACjC,MAAMU,eAAeP,UAAUH,KAAK;CAEpC,OAAAW,IAAAC,QAAAC,gBAAA,GAEW,sCAAAC,OAAsCd,KAAK,GAAC,IAAA,IAAGS,MAAMP,QAAQ,IAAAY,OAAIL,MAAMP,OAAK,IAAA,MAAK,MAAIa,aAAA,OAAAD,OACvFL,MAAMV,KAAG,IAAA,GAAA,KAAA,IAAAgB,aAAA,OACTN,MAAMR,aAAa,KAAEa,OAAGL,MAAMX,MAAI,IAAA,GAAA,KAAA,IAAAiB,aAAA,eAC1BN,MAAMR,aAAa,SAAMa,OAAGE,KAAAA,GAAS,IAAA,GAAA,KAAA,IAAAD,aAAA,SAAAD,OAC3CJ,OAAO,GAAC,IAAA,GAAA,KAAA,IAAAK,aAAA,UAAAD,OACPJ,OAAO,GAAC,IAAA,GAAA,KAAA,CAAA;AAItB"}
@@ -0,0 +1,37 @@
1
+ import type { JSX } from "solid-js";
2
+ import type { SiteLocale } from "../core/locales.mjs";
3
+ export interface SiteMessages {
4
+ navigationLabel: string;
5
+ localeLabel: string;
6
+ themeLabel: string;
7
+ themeSystem: string;
8
+ themeLight: string;
9
+ themeDark: string;
10
+ menuOpen: string;
11
+ menuClose: string;
12
+ footerLabel: string;
13
+ skipToContent: string;
14
+ updatedLabel: string;
15
+ notFoundTitle: string;
16
+ notFoundDescription: string;
17
+ backHome: string;
18
+ errorTitle: string;
19
+ errorDescription: string;
20
+ retry: string;
21
+ }
22
+ export interface SiteLink {
23
+ href: string;
24
+ label: string;
25
+ external?: boolean;
26
+ }
27
+ export interface SiteBrand {
28
+ name: string;
29
+ href: string;
30
+ logo?: JSX.Element;
31
+ }
32
+ export interface LocaleState {
33
+ locale: SiteLocale;
34
+ hrefForLocale: (locale: SiteLocale) => string;
35
+ }
36
+ export type ThemePreference = "system" | "light" | "dark";
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/solid/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;AAC7E,MAAM,WAAW,SAAS;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE;AAC7E,MAAM,WAAW,WAAW;IAAG,MAAM,EAAE,UAAU,CAAC;IAAC,aAAa,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,MAAM,CAAA;CAAE;AAClG,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC"}