@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.
package/LICENSE ADDED
@@ -0,0 +1,74 @@
1
+ DevsLab Source-Available License 1.0
2
+
3
+ Copyright (c) 2026 DevsLab. All rights reserved.
4
+
5
+ This license governs the DDS software, design tokens, components, icons,
6
+ documentation, and other materials distributed with this license (the
7
+ "Software").
8
+
9
+ 1. Permitted use
10
+
11
+ Subject to this license, DevsLab grants you a limited, worldwide,
12
+ non-exclusive, non-transferable, revocable, royalty-free right to:
13
+
14
+ - download and install unmodified copies of the Software;
15
+ - use and execute the Software for internal or commercial applications;
16
+ - compile, minify, tree-shake, and bundle unmodified Software solely as a
17
+ technical part of building an application; and
18
+ - distribute the resulting object code only as an inseparable part of that
19
+ application and not as a standalone library, design system, component kit,
20
+ template, or asset collection.
21
+
22
+ Normal application configuration through documented public APIs, design-token
23
+ overrides, CSS custom properties, and component properties is permitted and is
24
+ not considered modification of the Software.
25
+
26
+ 2. Restrictions
27
+
28
+ Except where applicable law does not allow the restriction, you may not:
29
+
30
+ - modify, adapt, translate, reverse engineer, or create derivative works of the
31
+ Software itself;
32
+ - publish, republish, sublicense, sell, rent, host, or redistribute the
33
+ Software or any modified version as a standalone package or downloadable
34
+ collection;
35
+ - use the Software or a substantial portion of it to create or operate a
36
+ competing general-purpose design system, UI kit, component library, icon
37
+ library, token library, template marketplace, or hosted equivalent;
38
+ - remove or alter copyright, license, attribution, or provenance notices; or
39
+ - use DevsLab names, logos, product marks, or trade dress except to make a
40
+ truthful statement that an application uses the Software.
41
+
42
+ No patent, trademark, design, or branding rights are granted except the
43
+ copyright permissions stated in Section 1.
44
+
45
+ 3. Ownership and feedback
46
+
47
+ The Software is licensed, not sold. DevsLab and its licensors retain all
48
+ right, title, and interest in the Software. You grant DevsLab a perpetual,
49
+ worldwide, irrevocable, royalty-free right to use feedback you voluntarily
50
+ provide about the Software.
51
+
52
+ 4. Termination
53
+
54
+ This license terminates automatically if you breach it. Upon termination, you
55
+ must stop using and distributing the Software and delete all copies under your
56
+ control. Sections 2, 3, 5, and 6 survive termination.
57
+
58
+ 5. Disclaimer and limitation of liability
59
+
60
+ THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
61
+ EXPRESS OR IMPLIED, INCLUDING MERCHANTABILITY, FITNESS FOR A PARTICULAR
62
+ PURPOSE, TITLE, AND NON-INFRINGEMENT. TO THE MAXIMUM EXTENT PERMITTED BY LAW,
63
+ DEVSLAB WILL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
64
+ CONSEQUENTIAL, EXEMPLARY, OR PUNITIVE DAMAGES, OR FOR LOSS OF DATA, PROFITS,
65
+ REVENUE, OR BUSINESS, ARISING FROM OR RELATED TO THE SOFTWARE.
66
+
67
+ 6. Governing law
68
+
69
+ This license is governed by the laws of the Republic of Korea, excluding
70
+ conflict-of-law rules. The Seoul Central District Court has exclusive
71
+ jurisdiction over disputes arising from this license.
72
+
73
+ This is a source-available license, not an open-source license approved by the
74
+ Open Source Initiative.
package/README.ko.md ADDED
@@ -0,0 +1,18 @@
1
+ # @devslab/site-kit
2
+
3
+ DevsLab 제품의 공개 웹사이트를 위한 공개 인프라 패키지다. 엄격한 14개 로케일 카탈로그, 로케일 협상, SEO/GEO 문서 생성기, 접근 가능한 SolidJS 2 사이트 셸을 제공한다. 제품명·주장·내비게이션·번역 문구는 항상 소비 앱이 소유한다.
4
+
5
+ ## 진입점
6
+
7
+ - `@devslab/site-kit` — 런타임 중립 로케일·카탈로그·SEO·사이트맵·robots·검증된 사실 유틸리티
8
+ - `@devslab/site-kit/solid` — 헤더·푸터·언어/테마 컨트롤·마케팅/법률/상태/오류 레이아웃·접근 요청 폼
9
+ - `@devslab/site-kit/tanstack-start` — 중립 메타데이터를 TanStack Start head descriptor로 변환
10
+ - `@devslab/site-kit/styles.css` — 논리 속성과 RTL을 지원하는 공통 사이트 스타일
11
+
12
+ 카탈로그 생성은 의도적으로 엄격하다. 14개 로케일 모두 동일한 키와 이름 기반 placeholder를 가져야 하며 런타임 문구 폴백은 없다.
13
+
14
+ 사이트맵은 14개 로케일 alternate와 `x-default`를 출력한다.
15
+ `buildVerifiedJsonLd`는 검토된 schema type과 claim allowlist만 허용하고 모든
16
+ claim leaf가 검증된 사실 레지스트리를 참조하도록 강제한다. `buildRobots`의
17
+ 기존 environment-only 출력은 유지되며, 선택적 `policies`로 검색 인덱싱,
18
+ 인용 crawler, 모델 학습 crawler를 각각 제어할 수 있다.
package/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # @devslab/site-kit
2
+
3
+ Public product-site infrastructure for DevsLab products. It provides strict 14-locale catalogs, locale negotiation, SEO/GEO document builders, and accessible SolidJS 2 site shells. Product names, claims, navigation, and translated copy always remain in the consuming application.
4
+
5
+ ## Entry points
6
+
7
+ - `@devslab/site-kit` — runtime-neutral locale, catalog, SEO, sitemap, robots, and verified-fact utilities.
8
+ - `@devslab/site-kit/solid` — header, footer, locale/theme controls, marketing/legal/status/error layouts, and request-access form.
9
+ - `@devslab/site-kit/tanstack-start` — conversion of neutral metadata to TanStack Start head descriptors.
10
+ - `@devslab/site-kit/styles.css` — logical-property, RTL-aware shared site styles.
11
+
12
+ Catalog construction is intentionally strict: all 14 locales must have exactly the same keys and named placeholders. There is no runtime copy fallback.
13
+
14
+ Sitemaps emit 14 locale alternates plus `x-default`. `buildVerifiedJsonLd`
15
+ accepts only the reviewed schema-type and claim allowlists, and every claim leaf
16
+ still references the verified-fact registry. `buildRobots` keeps its legacy
17
+ environment-only output, while an optional `policies` object can independently
18
+ control search indexing, citation crawlers, and model-training crawlers.
@@ -0,0 +1,35 @@
1
+ import { type JSX } from "solid-js";
2
+ import { type SiteLocale } from "../core/locales.mjs";
3
+ import type { LocaleState, SiteBrand, SiteLink, SiteMessages, ThemePreference } from "./types";
4
+ export interface LocaleMenuProps {
5
+ state: LocaleState;
6
+ messages: SiteMessages;
7
+ onLocaleChange?: (locale: SiteLocale, href: string) => void;
8
+ }
9
+ export declare function LocaleMenu(props: LocaleMenuProps): JSX.Element;
10
+ export interface ThemeToggleProps {
11
+ messages: SiteMessages;
12
+ value?: ThemePreference;
13
+ defaultValue?: ThemePreference;
14
+ onValueChange?: (theme: ThemePreference) => void;
15
+ storageKey?: string;
16
+ }
17
+ export declare function ThemeToggle(props: ThemeToggleProps): JSX.Element;
18
+ export interface SiteHeaderProps {
19
+ brand: SiteBrand;
20
+ navigation: SiteLink[];
21
+ locale: LocaleState;
22
+ messages: SiteMessages;
23
+ theme?: Omit<ThemeToggleProps, "messages">;
24
+ onLocaleChange?: LocaleMenuProps["onLocaleChange"];
25
+ actions?: JSX.Element;
26
+ }
27
+ export declare function SiteHeader(props: SiteHeaderProps): JSX.Element;
28
+ export interface SiteFooterProps {
29
+ brand: SiteBrand;
30
+ links: SiteLink[];
31
+ copyright: string;
32
+ messages: SiteMessages;
33
+ }
34
+ export declare function SiteFooter(props: SiteFooterProps): JSX.Element;
35
+ //# sourceMappingURL=chrome.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../src/solid/chrome.tsx"],"names":[],"mappings":"AACA,OAAO,EAA8B,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AAEhE,OAAO,EAAW,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/F,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,YAAY,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAqBhD;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,eA0ClD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,QAAQ,EAAE,CAAC;IACvB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACnD,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAyBhD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;CACxB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAUhD"}
@@ -0,0 +1,6 @@
1
+ export { LocaleMenu, SiteFooter, SiteHeader, ThemeToggle, type LocaleMenuProps, type SiteFooterProps, type SiteHeaderProps, type ThemeToggleProps } from "./chrome";
2
+ export { ErrorLayout, LegalLayout, MarketingShell, NotFoundLayout, StatusBanner, type ErrorLayoutProps, type LegalLayoutProps, type MarketingShellProps, type NotFoundLayoutProps, type StatusBannerProps } from "./layouts";
3
+ export { RequestAccessForm, type RequestAccessFormProps, type RequestAccessMessages } from "./request-access";
4
+ export { OssProductMark, type OssProductMarkProps } from "./oss-product-mark";
5
+ export type { LocaleState, SiteBrand, SiteLink, SiteMessages, ThemePreference } from "./types";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/solid/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACpK,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7N,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAC9G,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9E,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { type ButtonTone } from "@devslab/dds-solid";
2
+ import type { JSX } from "solid-js";
3
+ import { type SiteFooterProps, type SiteHeaderProps } from "./chrome";
4
+ import type { SiteMessages } from "./types";
5
+ export interface MarketingShellProps {
6
+ header: SiteHeaderProps;
7
+ footer: SiteFooterProps;
8
+ messages: SiteMessages;
9
+ children: JSX.Element;
10
+ }
11
+ export declare function MarketingShell(props: MarketingShellProps): JSX.Element;
12
+ export interface LegalLayoutProps {
13
+ title: string;
14
+ updatedAt: string;
15
+ messages: SiteMessages;
16
+ children: JSX.Element;
17
+ }
18
+ export declare function LegalLayout(props: LegalLayoutProps): JSX.Element;
19
+ export interface StatusBannerProps {
20
+ tone: "success" | "warning" | "danger" | "info";
21
+ title: string;
22
+ children?: JSX.Element;
23
+ action?: {
24
+ label: string;
25
+ onClick: () => void;
26
+ tone?: ButtonTone;
27
+ };
28
+ }
29
+ export declare function StatusBanner(props: StatusBannerProps): JSX.Element;
30
+ export interface NotFoundLayoutProps {
31
+ messages: SiteMessages;
32
+ homeHref: string;
33
+ children?: JSX.Element;
34
+ }
35
+ export declare function NotFoundLayout(props: NotFoundLayoutProps): JSX.Element;
36
+ export interface ErrorLayoutProps {
37
+ messages: SiteMessages;
38
+ onRetry: () => void;
39
+ errorId?: string;
40
+ children?: JSX.Element;
41
+ }
42
+ export declare function ErrorLayout(props: ErrorLayoutProps): JSX.Element;
43
+ //# sourceMappingURL=layouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../src/solid/layouts.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAA0B,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,eAAe,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAExD;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,eAElD;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;CACpE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,eAIpD;AAED,MAAM,WAAW,mBAAmB;IAAG,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE;AACzG,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,eAExD;AAED,MAAM,WAAW,gBAAgB;IAAG,QAAQ,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,OAAO,CAAA;CAAE;AAC3H,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,eAElD"}
@@ -0,0 +1,9 @@
1
+ export interface OssProductMarkProps {
2
+ name: string;
3
+ src: string;
4
+ size?: "sm" | "md" | "lg";
5
+ decorative?: boolean;
6
+ class?: string;
7
+ }
8
+ export declare function OssProductMark(props: OssProductMarkProps): import("solid-js").JSX.Element;
9
+ //# sourceMappingURL=oss-product-mark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oss-product-mark.d.ts","sourceRoot":"","sources":["../src/solid/oss-product-mark.tsx"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,kCAexD"}
@@ -0,0 +1,17 @@
1
+ export interface RequestAccessMessages {
2
+ nameLabel: string;
3
+ emailLabel: string;
4
+ organizationLabel: string;
5
+ useCaseLabel: string;
6
+ submit: string;
7
+ submitting: string;
8
+ success: string;
9
+ error: string;
10
+ }
11
+ export interface RequestAccessFormProps {
12
+ messages: RequestAccessMessages;
13
+ onSubmit: (data: FormData) => void | Promise<void>;
14
+ class?: string;
15
+ }
16
+ export declare function RequestAccessForm(props: RequestAccessFormProps): import("solid-js").JSX.Element;
17
+ //# sourceMappingURL=request-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-access.d.ts","sourceRoot":"","sources":["../src/solid/request-access.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,qBAAqB,CAAC;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,kCAuB9D"}
package/dist/solid.js ADDED
@@ -0,0 +1,404 @@
1
+ import { className as e, createComponent as t, effect as n, getNextElement as r, getNextMarker as i, insert as a, memo as o, mergeProps as s, runHydrationEvents as c, setAttribute as l, setProperty as u, spread as d, template as f } from "solid-js/web";
2
+ import { Button as p, Field as m, Icon as h, IconButton as g } from "@devslab/dds-solid";
3
+ import { For as _, createSignal as v, onMount as y } from "solid-js";
4
+ //#region src/core/locales.mjs
5
+ var b = 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(b.map((e) => [e.code.toLowerCase(), e]));
92
+ //#endregion
93
+ //#region src/solid/chrome.tsx
94
+ var x = /*#__PURE__*/ f("<label><span class=dds-sr-only></span><span class=\"dds-select site-locale\"><select class=dds-select__input>"), S = /*#__PURE__*/ f("<option>"), C = /*#__PURE__*/ f("<header class=site-header><a class=dds-sr-only href=#main-content></a><div class=site-header__inner><a class=site-brand><!$><!/><!$><!/></a><!$><!/><nav id=site-navigation class=site-nav><ul class=site-nav__list></ul></nav><div class=site-header__controls><!$><!/><!$><!/><!$><!/>"), w = /*#__PURE__*/ f("<li><a>"), T = /*#__PURE__*/ f("<footer class=site-footer><div class=site-footer__inner><strong></strong><ul class=site-footer__links></ul><small>");
95
+ function E(e) {
96
+ return (() => {
97
+ var i = r(x), o = i.firstChild, s = o.nextSibling.firstChild;
98
+ return a(o, () => e.messages.localeLabel), s.addEventListener("change", (t) => {
99
+ let n = t.currentTarget.value, r = e.state.hrefForLocale(n);
100
+ e.onLocaleChange ? e.onLocaleChange(n, r) : window.location.assign(r);
101
+ }), a(s, t(_, {
102
+ each: b,
103
+ children: (e) => (() => {
104
+ var t = r(S);
105
+ return a(t, () => e.nativeName), n((n) => {
106
+ var r = e.code, i = e.dir;
107
+ return r !== n.e && l(t, "lang", n.e = r), i !== n.t && l(t, "dir", n.t = i), n;
108
+ }, {
109
+ e: void 0,
110
+ t: void 0
111
+ }), n(() => u(t, "value", e.code)), t;
112
+ })()
113
+ })), n(() => l(s, "aria-label", e.messages.localeLabel)), n(() => u(s, "value", e.state.locale)), i;
114
+ })();
115
+ }
116
+ function D(e) {
117
+ let n = [
118
+ "system",
119
+ "light",
120
+ "dark"
121
+ ], [r, i] = v(e.defaultValue ?? "system"), [a, o] = v("light"), s = () => a() === "dark" ? "light" : "dark", c = () => s() === "dark" ? e.messages.themeDark : e.messages.themeLight, l = (e) => {
122
+ let t = e === "system" ? matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light" : e;
123
+ o(t), document.documentElement.dataset.theme = t, document.documentElement.dataset.themePreference = e;
124
+ }, u = (t) => {
125
+ e.value === void 0 && i(t), e.onValueChange?.(t), l(t), localStorage.setItem(e.storageKey ?? "site-theme", t);
126
+ };
127
+ return y(() => {
128
+ let t = localStorage.getItem(e.storageKey ?? "site-theme");
129
+ e.value === void 0 && t && n.includes(t) && i(t), l(e.value ?? t ?? r());
130
+ }), t(g, {
131
+ class: "site-theme-toggle",
132
+ tone: "ghost",
133
+ get "aria-label"() {
134
+ return `${e.messages.themeLabel}: ${c()}`;
135
+ },
136
+ get title() {
137
+ return `${e.messages.themeLabel}: ${c()}`;
138
+ },
139
+ onClick: () => u(s()),
140
+ get children() {
141
+ return t(h, {
142
+ class: "site-theme-toggle__icon",
143
+ get name() {
144
+ return s() === "dark" ? "site-moon" : "site-sun";
145
+ },
146
+ get "data-icon"() {
147
+ return s() === "dark" ? "site-moon" : "site-sun";
148
+ },
149
+ size: 20
150
+ });
151
+ }
152
+ });
153
+ }
154
+ function O(e) {
155
+ let [c, u] = v(!1);
156
+ return (() => {
157
+ var d = r(C), f = d.firstChild, m = f.nextSibling, h = m.firstChild, g = h.firstChild, [v, y] = i(g.nextSibling), b = v.nextSibling, [x, S] = i(b.nextSibling), T = h.nextSibling, [O, k] = i(T.nextSibling), A = O.nextSibling, j = A.firstChild, M = A.nextSibling, N = M.firstChild, [P, F] = i(N.nextSibling), I = P.nextSibling, [L, R] = i(I.nextSibling), z = L.nextSibling, [B, V] = i(z.nextSibling);
158
+ return a(f, () => e.messages.skipToContent), a(h, () => e.brand.logo, v, y), a(h, () => e.brand.name, x, S), a(m, t(p, {
159
+ class: "site-menu-button",
160
+ tone: "ghost",
161
+ get "aria-expanded"() {
162
+ return c();
163
+ },
164
+ "aria-controls": "site-navigation",
165
+ onClick: () => u((e) => !e),
166
+ get children() {
167
+ return o(() => !!c())() ? e.messages.menuClose : e.messages.menuOpen;
168
+ }
169
+ }), O, k), a(j, t(_, {
170
+ get each() {
171
+ return e.navigation;
172
+ },
173
+ children: (e) => (() => {
174
+ var t = r(w), i = t.firstChild;
175
+ return a(i, () => e.label), n((t) => {
176
+ var n = e.href, r = e.external ? "_blank" : void 0, a = e.external ? "noreferrer" : void 0;
177
+ return n !== t.e && l(i, "href", t.e = n), r !== t.t && l(i, "target", t.t = r), a !== t.a && l(i, "rel", t.a = a), t;
178
+ }, {
179
+ e: void 0,
180
+ t: void 0,
181
+ a: void 0
182
+ }), t;
183
+ })()
184
+ })), a(M, t(E, s({
185
+ get state() {
186
+ return e.locale;
187
+ },
188
+ get messages() {
189
+ return e.messages;
190
+ }
191
+ }, () => e.onLocaleChange ? { onLocaleChange: e.onLocaleChange } : {})), P, F), a(M, (() => {
192
+ var n = o(() => !!e.theme);
193
+ return () => n() && t(D, s(() => e.theme, { get messages() {
194
+ return e.messages;
195
+ } }));
196
+ })(), L, R), a(M, () => e.actions, B, V), n((t) => {
197
+ var n = e.brand.href, r = String(c()), i = e.messages.navigationLabel, a = String(c());
198
+ return n !== t.e && l(h, "href", t.e = n), r !== t.t && l(A, "data-open", t.t = r), i !== t.a && l(A, "aria-label", t.a = i), a !== t.o && l(M, "data-open", t.o = a), t;
199
+ }, {
200
+ e: void 0,
201
+ t: void 0,
202
+ a: void 0,
203
+ o: void 0
204
+ }), d;
205
+ })();
206
+ }
207
+ function k(e) {
208
+ return (() => {
209
+ var i = r(T), o = i.firstChild.firstChild, s = o.nextSibling, c = s.nextSibling;
210
+ return a(o, () => e.brand.name), a(s, t(_, {
211
+ get each() {
212
+ return e.links;
213
+ },
214
+ children: (e) => (() => {
215
+ var t = r(w), i = t.firstChild;
216
+ return a(i, () => e.label), n(() => l(i, "href", e.href)), t;
217
+ })()
218
+ })), a(c, () => e.copyright), n(() => l(i, "aria-label", e.messages.footerLabel)), i;
219
+ })();
220
+ }
221
+ //#endregion
222
+ //#region src/solid/layouts.tsx
223
+ var A = /*#__PURE__*/ f("<div class=site-shell><!$><!/><main id=main-content class=site-main tabindex=-1></main><!$><!/>"), j = /*#__PURE__*/ f("<article class=site-legal><header><h1></h1><p><!$><!/>: <time></time></p></header><!$><!/>"), M = /*#__PURE__*/ f("<section><strong></strong><!$><!/><!$><!/>"), N = /*#__PURE__*/ f("<div>"), P = /*#__PURE__*/ f("<main class=\"site-main site-centered-layout\"><h1></h1><p></p><!$><!/><a class=\"dds-btn dds-btn--primary\">"), F = /*#__PURE__*/ f("<main class=\"site-main site-centered-layout\"><h1></h1><p></p><!$><!/><!$><!/><!$><!/>"), I = /*#__PURE__*/ f("<code>");
224
+ function L(e) {
225
+ return (() => {
226
+ var n = r(A), o = n.firstChild, [c, l] = i(o.nextSibling), u = c.nextSibling, d = u.nextSibling, [f, p] = i(d.nextSibling);
227
+ return a(n, t(O, s(() => e.header)), c, l), a(u, () => e.children), a(n, t(k, s(() => e.footer)), f, p), n;
228
+ })();
229
+ }
230
+ function R(e) {
231
+ return (() => {
232
+ var t = r(j), o = t.firstChild, s = o.firstChild, c = s.nextSibling, u = c.firstChild, [d, f] = i(u.nextSibling), p = d.nextSibling.nextSibling, m = o.nextSibling, [h, g] = i(m.nextSibling);
233
+ return a(s, () => e.title), a(c, () => e.messages.updatedLabel, d, f), a(p, () => e.updatedAt), a(t, () => e.children, h, g), n(() => l(p, "datetime", e.updatedAt)), t;
234
+ })();
235
+ }
236
+ function z(s) {
237
+ return (() => {
238
+ var c = r(M), u = c.firstChild, d = u.nextSibling, [f, m] = i(d.nextSibling), h = f.nextSibling, [g, _] = i(h.nextSibling);
239
+ return a(u, () => s.title), a(c, (() => {
240
+ var e = o(() => !!s.children);
241
+ return () => e() && (() => {
242
+ var e = r(N);
243
+ return a(e, () => s.children), e;
244
+ })();
245
+ })(), f, m), a(c, (() => {
246
+ var e = o(() => !!s.action);
247
+ return () => e() && t(p, {
248
+ get tone() {
249
+ return s.action.tone ?? "secondary";
250
+ },
251
+ get onClick() {
252
+ return s.action.onClick;
253
+ },
254
+ get children() {
255
+ return s.action.label;
256
+ }
257
+ });
258
+ })(), g, _), n((t) => {
259
+ var n = `site-status site-status--${s.tone}`, r = s.tone === "danger" ? "alert" : "status", i = s.tone === "danger" ? "assertive" : "polite";
260
+ return n !== t.e && e(c, t.e = n), r !== t.t && l(c, "role", t.t = r), i !== t.a && l(c, "aria-live", t.a = i), t;
261
+ }, {
262
+ e: void 0,
263
+ t: void 0,
264
+ a: void 0
265
+ }), c;
266
+ })();
267
+ }
268
+ function B(e) {
269
+ return (() => {
270
+ var t = r(P), o = t.firstChild, s = o.nextSibling, c = s.nextSibling, [u, d] = i(c.nextSibling), f = u.nextSibling;
271
+ return a(o, () => e.messages.notFoundTitle), a(s, () => e.messages.notFoundDescription), a(t, () => e.children, u, d), a(f, () => e.messages.backHome), n(() => l(f, "href", e.homeHref)), t;
272
+ })();
273
+ }
274
+ function V(e) {
275
+ return (() => {
276
+ var n = r(F), s = n.firstChild, c = s.nextSibling, l = c.nextSibling, [u, d] = i(l.nextSibling), f = u.nextSibling, [m, h] = i(f.nextSibling), g = m.nextSibling, [_, v] = i(g.nextSibling);
277
+ return a(s, () => e.messages.errorTitle), a(c, () => e.messages.errorDescription), a(n, (() => {
278
+ var t = o(() => !!e.errorId);
279
+ return () => t() && (() => {
280
+ var t = r(I);
281
+ return a(t, () => e.errorId), t;
282
+ })();
283
+ })(), u, d), a(n, () => e.children, m, h), a(n, t(p, {
284
+ tone: "primary",
285
+ get onClick() {
286
+ return e.onRetry;
287
+ },
288
+ get children() {
289
+ return e.messages.retry;
290
+ }
291
+ }), _, v), n;
292
+ })();
293
+ }
294
+ //#endregion
295
+ //#region src/solid/request-access.tsx
296
+ var H = /*#__PURE__*/ f("<form><!$><!/><!$><!/><!$><!/><!$><!/><!$><!/><div aria-live=polite aria-atomic=true>"), U = /*#__PURE__*/ f("<input>"), W = /*#__PURE__*/ f("<textarea>");
297
+ function G(l) {
298
+ let [u, f] = v("idle"), h = async (e) => {
299
+ if (e.preventDefault(), u() !== "submitting") {
300
+ f("submitting");
301
+ try {
302
+ await l.onSubmit(new FormData(e.currentTarget)), f("success");
303
+ } catch {
304
+ f("error");
305
+ }
306
+ }
307
+ };
308
+ return (() => {
309
+ var f = r(H), g = f.firstChild, [_, v] = i(g.nextSibling), y = _.nextSibling, [b, x] = i(y.nextSibling), S = b.nextSibling, [C, w] = i(S.nextSibling), T = C.nextSibling, [E, D] = i(T.nextSibling), O = E.nextSibling, [k, A] = i(O.nextSibling), j = k.nextSibling;
310
+ return f.addEventListener("submit", h), a(f, t(m, {
311
+ get label() {
312
+ return l.messages.nameLabel;
313
+ },
314
+ required: !0,
315
+ children: (e) => (() => {
316
+ var t = r(U);
317
+ return d(t, s(e, {
318
+ class: "dds-input",
319
+ name: "name",
320
+ autocomplete: "name",
321
+ required: !0
322
+ }), !1, !1), c(), t;
323
+ })()
324
+ }), _, v), a(f, t(m, {
325
+ get label() {
326
+ return l.messages.emailLabel;
327
+ },
328
+ required: !0,
329
+ children: (e) => (() => {
330
+ var t = r(U);
331
+ return d(t, s(e, {
332
+ class: "dds-input",
333
+ type: "email",
334
+ name: "email",
335
+ autocomplete: "email",
336
+ required: !0
337
+ }), !1, !1), c(), t;
338
+ })()
339
+ }), b, x), a(f, t(m, {
340
+ get label() {
341
+ return l.messages.organizationLabel;
342
+ },
343
+ children: (e) => (() => {
344
+ var t = r(U);
345
+ return d(t, s(e, {
346
+ class: "dds-input",
347
+ name: "organization",
348
+ autocomplete: "organization"
349
+ }), !1, !1), c(), t;
350
+ })()
351
+ }), C, w), a(f, t(m, {
352
+ get label() {
353
+ return l.messages.useCaseLabel;
354
+ },
355
+ children: (e) => (() => {
356
+ var t = r(W);
357
+ return d(t, s(e, {
358
+ class: "dds-textarea",
359
+ name: "useCase",
360
+ rows: "5"
361
+ }), !1, !1), c(), t;
362
+ })()
363
+ }), E, D), a(f, t(p, {
364
+ type: "submit",
365
+ get loading() {
366
+ return u() === "submitting";
367
+ },
368
+ get children() {
369
+ return o(() => u() === "submitting")() ? l.messages.submitting : l.messages.submit;
370
+ }
371
+ }), k, A), a(j, (() => {
372
+ var e = o(() => u() === "success");
373
+ return () => e() ? l.messages.success : o(() => u() === "error")() ? l.messages.error : "";
374
+ })()), n(() => e(f, `site-request-form${l.class ? ` ${l.class}` : ""}`)), f;
375
+ })();
376
+ }
377
+ //#endregion
378
+ //#region src/solid/oss-product-mark.tsx
379
+ var K = /*#__PURE__*/ f("<img decoding=async>"), q = {
380
+ sm: 24,
381
+ md: 32,
382
+ lg: 48
383
+ };
384
+ function J(t) {
385
+ let i = () => t.size ?? "md", a = () => q[i()];
386
+ return (() => {
387
+ var o = r(K);
388
+ return n((n) => {
389
+ var r = `oss-product-mark oss-product-mark--${i()}${t.class ? ` ${t.class}` : ""}`, s = t.src, c = t.decorative ? "" : t.name, u = t.decorative ? "true" : void 0, d = a(), f = a();
390
+ return r !== n.e && e(o, n.e = r), s !== n.t && l(o, "src", n.t = s), c !== n.a && l(o, "alt", n.a = c), u !== n.o && l(o, "aria-hidden", n.o = u), d !== n.i && l(o, "width", n.i = d), f !== n.n && l(o, "height", n.n = f), n;
391
+ }, {
392
+ e: void 0,
393
+ t: void 0,
394
+ a: void 0,
395
+ o: void 0,
396
+ i: void 0,
397
+ n: void 0
398
+ }), o;
399
+ })();
400
+ }
401
+ //#endregion
402
+ export { V as ErrorLayout, R as LegalLayout, E as LocaleMenu, L as MarketingShell, B as NotFoundLayout, J as OssProductMark, G as RequestAccessForm, k as SiteFooter, O as SiteHeader, z as StatusBanner, D as ThemeToggle };
403
+
404
+ //# sourceMappingURL=solid.js.map