@krizaka/ui 3.9.0 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/README.md +3 -1
  2. package/dist/blocks.css +9 -2
  3. package/dist/chunk-HG65YAV4.js +379 -0
  4. package/dist/chunk-HG65YAV4.js.map +1 -0
  5. package/dist/chunk-OT6HX3PN.js +85 -0
  6. package/dist/chunk-OT6HX3PN.js.map +1 -0
  7. package/dist/index.js +9 -367
  8. package/dist/index.js.map +1 -1
  9. package/dist/link-card.d.ts +7 -1
  10. package/dist/link-card.js +8 -5
  11. package/dist/link-card.js.map +1 -1
  12. package/dist/native.d.ts +48 -1
  13. package/dist/native.js +374 -257
  14. package/dist/native.js.map +1 -1
  15. package/dist/nav-bar.d.ts +86 -3
  16. package/dist/nav-bar.js +88 -2
  17. package/dist/nav-bar.js.map +1 -1
  18. package/dist/showcase.d.ts +69 -0
  19. package/dist/showcase.js +218 -0
  20. package/dist/showcase.js.map +1 -0
  21. package/dist/site-footer.d.ts +172 -0
  22. package/dist/site-footer.js +105 -0
  23. package/dist/site-footer.js.map +1 -0
  24. package/dist/sites-CgJrxejx.d.ts +32 -0
  25. package/dist/sites.d.ts +64 -0
  26. package/dist/sites.js +69 -0
  27. package/dist/sites.js.map +1 -0
  28. package/package.json +47 -9
  29. package/registry/achievement.json +1 -1
  30. package/registry/action-bar.json +1 -1
  31. package/registry/activity-feed.json +1 -1
  32. package/registry/alert.json +1 -1
  33. package/registry/app-shell.json +1 -1
  34. package/registry/argument-card.json +1 -1
  35. package/registry/audio-player.json +1 -1
  36. package/registry/auth-layout.json +1 -1
  37. package/registry/avatar.json +1 -1
  38. package/registry/badge.json +1 -1
  39. package/registry/button.json +1 -1
  40. package/registry/card-grid.json +11 -2
  41. package/registry/card.json +1 -1
  42. package/registry/catalogue-page.json +1 -1
  43. package/registry/changelog-page.json +1 -1
  44. package/registry/chat.json +1 -1
  45. package/registry/checkbox.json +1 -1
  46. package/registry/chip-link.json +1 -1
  47. package/registry/chip.json +1 -1
  48. package/registry/choice-grid.json +1 -1
  49. package/registry/code-block.json +1 -1
  50. package/registry/combobox.json +1 -1
  51. package/registry/command.json +1 -1
  52. package/registry/component-page.json +1 -1
  53. package/registry/confirm-button.json +1 -1
  54. package/registry/contact-page.json +1 -1
  55. package/registry/continue-prompt.json +1 -1
  56. package/registry/countdown.json +1 -1
  57. package/registry/cta-panel.json +1 -1
  58. package/registry/dashboard-layout.json +1 -1
  59. package/registry/data-table.json +1 -1
  60. package/registry/date-picker.json +1 -1
  61. package/registry/decision-list.json +1 -1
  62. package/registry/description-list.json +1 -1
  63. package/registry/detail-layout.json +1 -1
  64. package/registry/dialog.json +1 -1
  65. package/registry/docs-article-page.json +1 -1
  66. package/registry/docs-hub-page.json +1 -1
  67. package/registry/docs-layout.json +1 -1
  68. package/registry/dropdown-menu.json +1 -1
  69. package/registry/empty-state.json +1 -1
  70. package/registry/error-page.json +1 -1
  71. package/registry/examples/card-grid/aligned.d.ts +4 -0
  72. package/registry/examples/card-grid/aligned.js +18 -0
  73. package/registry/examples/card-grid/aligned.tsx +16 -0
  74. package/registry/examples/nav-bar/family-admin.d.ts +4 -0
  75. package/registry/examples/nav-bar/family-admin.js +21 -0
  76. package/registry/examples/nav-bar/family-admin.tsx +20 -0
  77. package/registry/examples/nav-bar/family-java.d.ts +4 -0
  78. package/registry/examples/nav-bar/family-java.js +33 -0
  79. package/registry/examples/nav-bar/family-java.tsx +34 -0
  80. package/registry/examples/nav-bar/family-product.d.ts +4 -0
  81. package/registry/examples/nav-bar/family-product.js +35 -0
  82. package/registry/examples/nav-bar/family-product.tsx +39 -0
  83. package/registry/examples/nav-bar/family-ui.d.ts +4 -0
  84. package/registry/examples/nav-bar/family-ui.js +34 -0
  85. package/registry/examples/nav-bar/family-ui.tsx +35 -0
  86. package/registry/examples/nav-bar/family-www.d.ts +4 -0
  87. package/registry/examples/nav-bar/family-www.js +34 -0
  88. package/registry/examples/nav-bar/family-www.tsx +36 -0
  89. package/registry/examples/showcase/native/slides.d.ts +4 -0
  90. package/registry/examples/showcase/native/slides.dark.png +0 -0
  91. package/registry/examples/showcase/native/slides.js +27 -0
  92. package/registry/examples/showcase/native/slides.light.png +0 -0
  93. package/registry/examples/showcase/native/slides.tsx +28 -0
  94. package/registry/examples/showcase/prompt-image.d.ts +4 -0
  95. package/registry/examples/showcase/prompt-image.js +29 -0
  96. package/registry/examples/showcase/prompt-image.tsx +28 -0
  97. package/registry/examples/showcase/slides.d.ts +4 -0
  98. package/registry/examples/showcase/slides.js +29 -0
  99. package/registry/examples/showcase/slides.tsx +24 -0
  100. package/registry/examples/site-footer/company.d.ts +4 -0
  101. package/registry/examples/site-footer/company.js +26 -0
  102. package/registry/examples/site-footer/company.tsx +23 -0
  103. package/registry/examples/site-footer/open-source-fr.d.ts +4 -0
  104. package/registry/examples/site-footer/open-source-fr.js +17 -0
  105. package/registry/examples/site-footer/open-source-fr.tsx +17 -0
  106. package/registry/examples/site-footer/product.d.ts +4 -0
  107. package/registry/examples/site-footer/product.js +22 -0
  108. package/registry/examples/site-footer/product.tsx +19 -0
  109. package/registry/examples/sites/family.d.ts +4 -0
  110. package/registry/examples/sites/family.js +20 -0
  111. package/registry/examples/sites/family.tsx +30 -0
  112. package/registry/examples/sites/french.d.ts +4 -0
  113. package/registry/examples/sites/french.js +25 -0
  114. package/registry/examples/sites/french.tsx +25 -0
  115. package/registry/field.json +1 -1
  116. package/registry/file-upload.json +1 -1
  117. package/registry/filter-bar.json +1 -1
  118. package/registry/form.json +1 -1
  119. package/registry/gallery-page.json +1 -1
  120. package/registry/glow-card.json +1 -1
  121. package/registry/goal-gauge.json +1 -1
  122. package/registry/how-it-works-page.json +1 -1
  123. package/registry/image-cropper.json +1 -1
  124. package/registry/index.json +65 -7
  125. package/registry/iso.json +1 -1
  126. package/registry/kanban.json +1 -1
  127. package/registry/kbd.json +1 -1
  128. package/registry/landing-page.json +1 -1
  129. package/registry/landscape.json +1 -1
  130. package/registry/legal-page.json +1 -1
  131. package/registry/link-card.json +18 -3
  132. package/registry/list.json +1 -1
  133. package/registry/loader.json +1 -1
  134. package/registry/longform-page.json +1 -1
  135. package/registry/map.json +2 -2
  136. package/registry/markdown.json +1 -1
  137. package/registry/marketing-layout.json +1 -1
  138. package/registry/marquee.json +1 -1
  139. package/registry/mascot-quote.json +1 -1
  140. package/registry/mascot-state.json +1 -1
  141. package/registry/mascots.json +1 -1
  142. package/registry/match-dialog.json +1 -1
  143. package/registry/media-capture.json +1 -1
  144. package/registry/meter.json +1 -1
  145. package/registry/nav-bar.json +257 -13
  146. package/registry/number-ticker.json +1 -1
  147. package/registry/page-header.json +1 -1
  148. package/registry/page-hero.json +1 -1
  149. package/registry/page.json +1 -1
  150. package/registry/pagination.json +1 -1
  151. package/registry/photo-grid.json +1 -1
  152. package/registry/pointer-light.json +1 -1
  153. package/registry/popover.json +1 -1
  154. package/registry/pricing-page.json +1 -1
  155. package/registry/product-page.json +1 -1
  156. package/registry/profile-card.json +1 -1
  157. package/registry/progress.json +1 -1
  158. package/registry/promise-card.json +1 -1
  159. package/registry/radio-group.json +1 -1
  160. package/registry/recipes.json +1 -1
  161. package/registry/scroll-stage.json +1 -1
  162. package/registry/search-field.json +1 -1
  163. package/registry/section-backdrop.json +1 -1
  164. package/registry/separator.json +1 -1
  165. package/registry/settings-layout.json +1 -1
  166. package/registry/showcase.json +421 -0
  167. package/registry/site-footer.json +389 -0
  168. package/registry/sites.json +93 -0
  169. package/registry/skeleton.json +1 -1
  170. package/registry/skip-link.json +1 -1
  171. package/registry/slider.json +1 -1
  172. package/registry/slot.json +1 -1
  173. package/registry/spinner.json +1 -1
  174. package/registry/split-view.json +1 -1
  175. package/registry/stage-banner.json +1 -1
  176. package/registry/stat.json +1 -1
  177. package/registry/status-page.json +1 -1
  178. package/registry/step-progress.json +1 -1
  179. package/registry/stepper.json +1 -1
  180. package/registry/swipe-deck.json +1 -1
  181. package/registry/switch.json +1 -1
  182. package/registry/tabs.json +1 -1
  183. package/registry/tag-input.json +1 -1
  184. package/registry/tag-selector.json +1 -1
  185. package/registry/terminal-replay.json +1 -1
  186. package/registry/theme.json +1 -1
  187. package/registry/toast.json +1 -1
  188. package/registry/toc.json +1 -1
  189. package/registry/tooltip.json +1 -1
  190. package/registry/tree-view.json +1 -1
  191. package/registry/verified-badge.json +1 -1
  192. package/registry/vertical-video.json +1 -1
  193. package/registry/video-player.json +1 -1
  194. package/registry/video-trimmer.json +1 -1
  195. package/registry/virtual.json +1 -1
@@ -0,0 +1,85 @@
1
+ "use client";
2
+ import {
3
+ ProductLogo
4
+ } from "./chunk-HG65YAV4.js";
5
+
6
+ // src/family-mark.tsx
7
+ import { jsx } from "react/jsx-runtime";
8
+ function GitHubGlyph({ size = 16, className }) {
9
+ return /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", width: size, height: size, fill: "currentColor", "aria-hidden": true, className, children: /* @__PURE__ */ jsx("path", { d: "M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8Z" }) });
10
+ }
11
+ function FamilyMark({ mark, size }) {
12
+ if (mark === "github") return /* @__PURE__ */ jsx(GitHubGlyph, { size: Math.round(size * 0.8) });
13
+ return /* @__PURE__ */ jsx(ProductLogo, { id: mark, size, animated: false });
14
+ }
15
+
16
+ // src/sites/sites.ts
17
+ var site = (s) => ({ ...s, host: s.url.replace(/^https?:\/\//, "").replace(/\/$/, "") });
18
+ var sites = [
19
+ site({ id: "krizaka", name: "Krizaka", url: "https://www.krizaka.com", kind: "company", group: "krizaka", status: "released", mark: "krizaka", repo: "https://github.com/krizaka/krizaka-com" }),
20
+ site({ id: "orazaka", name: "Orazaka", url: "https://dev.orazaka.com", kind: "product", group: "products", status: "released", mark: "orazaka", repo: "https://github.com/krizaka/orazaka" }),
21
+ site({ id: "orochia", name: "Orochia", url: "https://dev.orochia.com", kind: "product", group: "products", status: "released", mark: "orochia", repo: "https://github.com/krizaka/orochia" }),
22
+ site({ id: "yasakia", name: "Yasakia", url: "https://dev.yasakia.com", kind: "product", group: "products", status: "upcoming", mark: "yasakia", repo: "https://github.com/krizaka/yasakia" }),
23
+ site({ id: "yororis", name: "Yororis", url: "https://dev.yororis.com", kind: "product", group: "products", status: "construction", mark: "yororis", repo: "https://github.com/krizaka/yororis" }),
24
+ site({ id: "ui", name: "Krizaka UI", url: "https://ui.krizaka.com", kind: "open-source", group: "open-source", status: "released", mark: "krizaka", repo: "https://github.com/krizaka/krizaka-ui" }),
25
+ site({ id: "java", name: "Krizaka Java", url: "https://java.krizaka.com", kind: "open-source", group: "open-source", status: "released", mark: "krizaka", repo: "https://github.com/krizaka/krizaka-build" }),
26
+ site({ id: "github", name: "GitHub", url: "https://github.com/krizaka", kind: "open-source", group: "github", status: "released", mark: "github", repo: "https://github.com/krizaka" })
27
+ ];
28
+ var siteGroups = ["krizaka", "products", "open-source", "github"];
29
+ function siteById(id) {
30
+ const found = sites.find((s) => s.id === id);
31
+ if (!found) throw new Error(`Unknown Krizaka site "${id}".`);
32
+ return found;
33
+ }
34
+ function sitesByGroup() {
35
+ return siteGroups.map((group) => ({ group, sites: sites.filter((s) => s.group === group) })).filter((g) => g.sites.length > 0);
36
+ }
37
+ var familyLabels = {
38
+ en: {
39
+ family: "Krizaka family",
40
+ groups: { krizaka: "Krizaka", products: "Products", "open-source": "Open source", github: "GitHub" },
41
+ status: { upcoming: "Coming soon", construction: "Under construction" },
42
+ current: "You are here",
43
+ descriptions: {
44
+ krizaka: "The company: our products, our open source, our story.",
45
+ orazaka: "Sovereign AI, on your own servers.",
46
+ orochia: "A video platform for creators.",
47
+ yasakia: "The dating app where you talk first.",
48
+ yororis: "A listening space with a face and a voice.",
49
+ ui: "Components, tokens, icons and charts \u2014 web and React Native.",
50
+ java: "Spring Boot building blocks on Maven Central.",
51
+ github: "Every repository, in the open."
52
+ },
53
+ signature: { company: "A Krizaka company", product: "A Krizaka product", "open-source": "A Krizaka open-source project" },
54
+ place: "Made in Montr\xE9al",
55
+ version: "Version"
56
+ },
57
+ fr: {
58
+ family: "Famille Krizaka",
59
+ groups: { krizaka: "Krizaka", products: "Produits", "open-source": "Open source", github: "GitHub" },
60
+ status: { upcoming: "Bient\xF4t", construction: "En construction" },
61
+ current: "Vous \xEAtes ici",
62
+ descriptions: {
63
+ krizaka: "La compagnie : nos produits, notre open source, notre histoire.",
64
+ orazaka: "L\u2019IA souveraine, sur vos propres serveurs.",
65
+ orochia: "Une plateforme vid\xE9o pour les cr\xE9ateurs.",
66
+ yasakia: "L\u2019app de rencontre o\xF9 l\u2019on se parle d\u2019abord.",
67
+ yororis: "Un espace d\u2019\xE9coute avec un visage et une voix.",
68
+ ui: "Composants, jetons, ic\xF4nes et graphiques \u2014 web et React Native.",
69
+ java: "Des briques Spring Boot sur Maven Central.",
70
+ github: "Tous les d\xE9p\xF4ts, au grand jour."
71
+ },
72
+ signature: { company: "Une compagnie Krizaka", product: "Un produit Krizaka", "open-source": "Un projet open source de Krizaka" },
73
+ place: "Fait \xE0 Montr\xE9al",
74
+ version: "Version"
75
+ }
76
+ };
77
+
78
+ export {
79
+ GitHubGlyph,
80
+ FamilyMark,
81
+ siteById,
82
+ sitesByGroup,
83
+ familyLabels
84
+ };
85
+ //# sourceMappingURL=chunk-OT6HX3PN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/family-mark.tsx","../src/sites/sites.ts"],"sourcesContent":["// The mark of a site of the family (`@krizaka/ui/sites`): its brand's `ProductLogo`, still (a list of marks never\n// moves), or GitHub's, in the text colour. Shared by `NavBar.Family` and `SiteFooter` — not an entry of its own.\nimport type * as React from \"react\";\n\nimport { ProductLogo } from \"./marks/ProductLogo\";\nimport type { SiteMark } from \"./sites/sites\";\n\n/** GitHub's mark, in the text colour (both themes). */\nexport function GitHubGlyph({ size = 16, className }: { size?: number; className?: string }) {\n return (\n <svg viewBox=\"0 0 16 16\" width={size} height={size} fill=\"currentColor\" aria-hidden className={className}>\n <path d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8Z\" />\n </svg>\n );\n}\n\n/** A site's mark, decorative (its name is always written beside it). */\nexport function FamilyMark({ mark, size }: { mark: SiteMark; size: number }): React.ReactElement {\n if (mark === \"github\") return <GitHubGlyph size={Math.round(size * 0.8)} />;\n return <ProductLogo id={mark} size={size} animated={false} />;\n}\n","// Server-safe: plain data. The Krizaka family — every site Krizaka runs, once. The family switcher of the bar\n// (`NavBar.Family`) and the common footer (`SiteFooter`) both read it, so adding a site is one release of this package:\n// every bar and every footer of the family follow.\n//\n// The words of the family (a site's one line, the groups, the statuses, the footer's signature) are brand data, written\n// here in English and French (`familyLabels`) — a site passes the set of its locale, or its own translation.\n\n/** A site of the family. */\nexport type SiteId = \"krizaka\" | \"orazaka\" | \"orochia\" | \"yasakia\" | \"yororis\" | \"ui\" | \"java\" | \"github\";\n\n/** What a site is: the company, a product, or an open-source project. It chooses the footer's signature line. */\nexport type SiteKind = \"company\" | \"product\" | \"open-source\";\n\n/**\n * `released`: open to visit. `upcoming`: announced, not released yet (said \"Coming soon\"). `construction`: under\n * construction — nothing deployed beyond its page, nothing offered.\n */\nexport type SiteStatus = \"released\" | \"upcoming\" | \"construction\";\n\n/** The groups of the family, in reading order: Krizaka · Products · Open source · GitHub. */\nexport type SiteGroup = \"krizaka\" | \"products\" | \"open-source\" | \"github\";\n\n/** The mark a site wears: a brand of `ProductLogo` (Krizaka UI and Krizaka Java wear Krizaka's), or GitHub's. */\nexport type SiteMark = \"krizaka\" | \"orazaka\" | \"orochia\" | \"yasakia\" | \"yororis\" | \"github\";\n\nexport interface Site {\n readonly id: SiteId;\n /** The name, never translated. */\n readonly name: string;\n /** The address of the site (its home). */\n readonly url: string;\n /** The address without the scheme, as people say it (`ui.krizaka.com`). */\n readonly host: string;\n readonly kind: SiteKind;\n readonly group: SiteGroup;\n readonly status: SiteStatus;\n readonly mark: SiteMark;\n /** The repository the site is built from. */\n readonly repo: string;\n}\n\nconst site = (s: Omit<Site, \"host\">): Site => ({ ...s, host: s.url.replace(/^https?:\\/\\//, \"\").replace(/\\/$/, \"\") });\n\n/** Every site of the family, in reading order (the group order, then the order inside each group). */\nexport const sites: readonly Site[] = [\n site({ id: \"krizaka\", name: \"Krizaka\", url: \"https://www.krizaka.com\", kind: \"company\", group: \"krizaka\", status: \"released\", mark: \"krizaka\", repo: \"https://github.com/krizaka/krizaka-com\" }),\n site({ id: \"orazaka\", name: \"Orazaka\", url: \"https://dev.orazaka.com\", kind: \"product\", group: \"products\", status: \"released\", mark: \"orazaka\", repo: \"https://github.com/krizaka/orazaka\" }),\n site({ id: \"orochia\", name: \"Orochia\", url: \"https://dev.orochia.com\", kind: \"product\", group: \"products\", status: \"released\", mark: \"orochia\", repo: \"https://github.com/krizaka/orochia\" }),\n site({ id: \"yasakia\", name: \"Yasakia\", url: \"https://dev.yasakia.com\", kind: \"product\", group: \"products\", status: \"upcoming\", mark: \"yasakia\", repo: \"https://github.com/krizaka/yasakia\" }),\n site({ id: \"yororis\", name: \"Yororis\", url: \"https://dev.yororis.com\", kind: \"product\", group: \"products\", status: \"construction\", mark: \"yororis\", repo: \"https://github.com/krizaka/yororis\" }),\n site({ id: \"ui\", name: \"Krizaka UI\", url: \"https://ui.krizaka.com\", kind: \"open-source\", group: \"open-source\", status: \"released\", mark: \"krizaka\", repo: \"https://github.com/krizaka/krizaka-ui\" }),\n site({ id: \"java\", name: \"Krizaka Java\", url: \"https://java.krizaka.com\", kind: \"open-source\", group: \"open-source\", status: \"released\", mark: \"krizaka\", repo: \"https://github.com/krizaka/krizaka-build\" }),\n site({ id: \"github\", name: \"GitHub\", url: \"https://github.com/krizaka\", kind: \"open-source\", group: \"github\", status: \"released\", mark: \"github\", repo: \"https://github.com/krizaka\" }),\n];\n\n/** The groups, in reading order. */\nexport const siteGroups: readonly SiteGroup[] = [\"krizaka\", \"products\", \"open-source\", \"github\"];\n\n/** A site by id. */\nexport function siteById(id: SiteId): Site {\n const found = sites.find((s) => s.id === id);\n if (!found) throw new Error(`Unknown Krizaka site \"${id}\".`);\n return found;\n}\n\n/** The family grouped, in reading order: `[{ group, sites }]`, empty groups left out. */\nexport function sitesByGroup(): { group: SiteGroup; sites: Site[] }[] {\n return siteGroups.map((group) => ({ group, sites: sites.filter((s) => s.group === group) })).filter((g) => g.sites.length > 0);\n}\n\n/** The languages the family's words are written in. */\nexport type SiteLocale = \"en\" | \"fr\";\n\n/** The words of the family: the switcher, the footer, each site's one line. */\nexport interface FamilyLabels {\n /** The family's name: the switcher's navigation and its button, the footer's navigation (“Krizaka family”). */\n family: string;\n /** The heading of each group. */\n groups: Record<SiteGroup, string>;\n /** The badge of a site that is not released. */\n status: Record<Exclude<SiteStatus, \"released\">, string>;\n /** Says which site is the current one (“You are here”). */\n current: string;\n /** One line per site: what it is. */\n descriptions: Record<SiteId, string>;\n /** The footer's signature, by the kind of the current site (“A Krizaka product”). */\n signature: Record<SiteKind, string>;\n /** The footer's place line (“Made in Montréal”). */\n place: string;\n /** The accessible name of the version (“Version”). */\n version: string;\n}\n\n/** The family's words in English and French. Pass `familyLabels[locale]`, or your own translation of the same shape. */\nexport const familyLabels: Record<SiteLocale, FamilyLabels> = {\n en: {\n family: \"Krizaka family\",\n groups: { krizaka: \"Krizaka\", products: \"Products\", \"open-source\": \"Open source\", github: \"GitHub\" },\n status: { upcoming: \"Coming soon\", construction: \"Under construction\" },\n current: \"You are here\",\n descriptions: {\n krizaka: \"The company: our products, our open source, our story.\",\n orazaka: \"Sovereign AI, on your own servers.\",\n orochia: \"A video platform for creators.\",\n yasakia: \"The dating app where you talk first.\",\n yororis: \"A listening space with a face and a voice.\",\n ui: \"Components, tokens, icons and charts — web and React Native.\",\n java: \"Spring Boot building blocks on Maven Central.\",\n github: \"Every repository, in the open.\",\n },\n signature: { company: \"A Krizaka company\", product: \"A Krizaka product\", \"open-source\": \"A Krizaka open-source project\" },\n place: \"Made in Montréal\",\n version: \"Version\",\n },\n fr: {\n family: \"Famille Krizaka\",\n groups: { krizaka: \"Krizaka\", products: \"Produits\", \"open-source\": \"Open source\", github: \"GitHub\" },\n status: { upcoming: \"Bientôt\", construction: \"En construction\" },\n current: \"Vous êtes ici\",\n descriptions: {\n krizaka: \"La compagnie : nos produits, notre open source, notre histoire.\",\n orazaka: \"L’IA souveraine, sur vos propres serveurs.\",\n orochia: \"Une plateforme vidéo pour les créateurs.\",\n yasakia: \"L’app de rencontre où l’on se parle d’abord.\",\n yororis: \"Un espace d’écoute avec un visage et une voix.\",\n ui: \"Composants, jetons, icônes et graphiques — web et React Native.\",\n java: \"Des briques Spring Boot sur Maven Central.\",\n github: \"Tous les dépôts, au grand jour.\",\n },\n signature: { company: \"Une compagnie Krizaka\", product: \"Un produit Krizaka\", \"open-source\": \"Un projet open source de Krizaka\" },\n place: \"Fait à Montréal\",\n version: \"Version\",\n },\n};\n"],"mappings":"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","names":[]}
package/dist/index.js CHANGED
@@ -3,376 +3,18 @@ import {
3
3
  MotionObserver,
4
4
  RotatingWord
5
5
  } from "./chunk-HAQWKORZ.js";
6
+ import {
7
+ KrizakaLogo,
8
+ OrazakaLogo,
9
+ OrochiaLogo,
10
+ ProductLogo,
11
+ YasakiaLogo,
12
+ YazakiaLogo,
13
+ YororisLogo
14
+ } from "./chunk-HG65YAV4.js";
6
15
  import {
7
16
  cx
8
17
  } from "./chunk-6ISW63JI.js";
9
-
10
- // src/marks/krizaka-geometry.ts
11
- import { marks } from "@krizaka/tokens/native";
12
- var KRIZAKA = {
13
- viewBox: "0 0 400 400",
14
- croppedViewBox: "86 82 228 228",
15
- offset: 20,
16
- /** The shield: a pointy-top hexagon (r 92 around 180,180), open at its upper-right edge. */
17
- shield: "M259.7,134 L259.7,226 L180,272 L100.3,226 L100.3,134 L180,88 L212,106.5",
18
- stroke: 22,
19
- ink: { x1: 70, y1: 290, x2: 290, y2: 70 },
20
- blue: { x1: 180, y1: 180, x2: 300, y2: 60, stops: marks.krizaka },
21
- /** The vertex where the shield opens: a node (the serpent's head in Orochia's grammar). */
22
- node: { cx: 259.7, cy: 134, r: 19, inner: 6 },
23
- core: { cx: 180, cy: 180, r: 24, inner: 8 },
24
- highlight: "#dbeafe",
25
- glow: { color: "#196df5", opacity: 0.16 },
26
- orbit: { r: 160, dash: "8 8", width: 1.5 },
27
- ring: { r: 134, width: 1 }
28
- };
29
-
30
- // src/marks/shared.ts
31
- import { useId } from "react";
32
- var neutral = (token, percent) => `var(${token}, color-mix(in srgb, currentColor ${percent}%, transparent))`;
33
- function useIds(prefix, keys) {
34
- const uid = useId().replace(/[^a-zA-Z0-9_-]/g, "");
35
- return Object.fromEntries(keys.map((k) => [k, `${prefix}-${k}-${uid}`]));
36
- }
37
- var a11y = (title) => title ? { role: "img", "aria-label": title } : { "aria-hidden": true };
38
- var withAlpha = (hex, opacity) => `${hex}${Math.round(opacity * 255).toString(16).padStart(2, "0")}`;
39
-
40
- // src/marks/KrizakaLogo.tsx
41
- import { jsx, jsxs } from "react/jsx-runtime";
42
- var CSS = `
43
- .kzm-spin { transform-origin: 200px 200px; animation: kzm-spin 30s linear infinite; }
44
- .kzm-pulse { transform-box: fill-box; transform-origin: center; animation: kzm-pulse 3.2s ease-in-out infinite; }
45
- @keyframes kzm-spin { to { transform: rotate(360deg); } }
46
- @keyframes kzm-pulse {
47
- 0%, 100% { filter: drop-shadow(0 0 6px hsla(217, 92%, 53%, .25)); opacity: .9; }
48
- 50% { filter: drop-shadow(0 0 14px hsla(217, 92%, 53%, .55)); opacity: 1; }
49
- }
50
- @media (prefers-reduced-motion: reduce) { .kzm-spin, .kzm-pulse { animation: none; } }
51
- `;
52
- function KrizakaLogo({ size = 32, animated = true, title, className }) {
53
- const id = useIds("kzm", ["ink", "blue", "glow"]);
54
- const m = (cls) => animated ? cls : void 0;
55
- return /* @__PURE__ */ jsxs("svg", { width: size, height: size, viewBox: size < 48 ? KRIZAKA.croppedViewBox : KRIZAKA.viewBox, fill: "none", xmlns: "http://www.w3.org/2000/svg", className, ...a11y(title), children: [
56
- /* @__PURE__ */ jsx("style", { children: CSS }),
57
- /* @__PURE__ */ jsxs("defs", { children: [
58
- /* @__PURE__ */ jsxs("linearGradient", { id: id.ink, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.ink.x1, y1: KRIZAKA.ink.y1, x2: KRIZAKA.ink.x2, y2: KRIZAKA.ink.y2, children: [
59
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: neutral("--kz-text-secondary", 60) }),
60
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: neutral("--kz-text-primary", 92) })
61
- ] }),
62
- /* @__PURE__ */ jsx("linearGradient", { id: id.blue, gradientUnits: "userSpaceOnUse", x1: KRIZAKA.blue.x1, y1: KRIZAKA.blue.y1, x2: KRIZAKA.blue.x2, y2: KRIZAKA.blue.y2, children: KRIZAKA.blue.stops.map(([offset, color]) => /* @__PURE__ */ jsx("stop", { offset, stopColor: color }, offset)) }),
63
- /* @__PURE__ */ jsxs("radialGradient", { id: id.glow, cx: "50%", cy: "50%", r: "50%", children: [
64
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: KRIZAKA.glow.color, stopOpacity: KRIZAKA.glow.opacity }),
65
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: KRIZAKA.glow.color, stopOpacity: "0" })
66
- ] })
67
- ] }),
68
- size >= 48 ? /* @__PURE__ */ jsx("circle", { cx: "200", cy: "200", r: "190", fill: `url(#${id.glow})` }) : null,
69
- /* @__PURE__ */ jsx("circle", { className: m("kzm-spin"), cx: "200", cy: "200", r: KRIZAKA.orbit.r, stroke: neutral("--kz-border-strong", 40), strokeWidth: KRIZAKA.orbit.width, strokeDasharray: KRIZAKA.orbit.dash, opacity: ".6" }),
70
- /* @__PURE__ */ jsx("circle", { cx: "200", cy: "200", r: KRIZAKA.ring.r, stroke: neutral("--kz-border-default", 30), strokeWidth: KRIZAKA.ring.width, opacity: ".35" }),
71
- /* @__PURE__ */ jsxs("g", { transform: `translate(${KRIZAKA.offset} ${KRIZAKA.offset})`, children: [
72
- /* @__PURE__ */ jsx("path", { d: KRIZAKA.shield, stroke: `url(#${id.ink})`, strokeWidth: KRIZAKA.stroke, strokeLinecap: "round", strokeLinejoin: "round" }),
73
- /* @__PURE__ */ jsxs("g", { className: m("kzm-pulse"), children: [
74
- /* @__PURE__ */ jsx("circle", { cx: KRIZAKA.node.cx, cy: KRIZAKA.node.cy, r: KRIZAKA.node.r, fill: `url(#${id.blue})` }),
75
- /* @__PURE__ */ jsx("circle", { cx: KRIZAKA.node.cx, cy: KRIZAKA.node.cy, r: KRIZAKA.node.inner, fill: KRIZAKA.highlight })
76
- ] }),
77
- /* @__PURE__ */ jsxs("g", { className: m("kzm-pulse"), children: [
78
- /* @__PURE__ */ jsx("circle", { cx: KRIZAKA.core.cx, cy: KRIZAKA.core.cy, r: KRIZAKA.core.r, fill: `url(#${id.blue})` }),
79
- /* @__PURE__ */ jsx("circle", { cx: KRIZAKA.core.cx, cy: KRIZAKA.core.cy, r: KRIZAKA.core.inner, fill: KRIZAKA.highlight })
80
- ] })
81
- ] })
82
- ] });
83
- }
84
-
85
- // src/marks/orazaka-geometry.ts
86
- import { marks as marks2 } from "@krizaka/tokens/native";
87
- var orange = marks2.orazaka[marks2.orazaka.length - 1][1];
88
- var ORAZAKA = {
89
- viewBox: "0 0 400 400",
90
- croppedViewBox: "76 76 248 248",
91
- center: 200,
92
- /**
93
- * The three shards — a hexagon's cap (from the original 132-unit drawing), scaled ×1.9 around the centre and turned
94
- * 0°, 120°, 240° — in view-box coordinates, so that one gradient runs across all three.
95
- */
96
- shards: [
97
- "M154.4,121.2 L200,94.7 L245.6,121.2 L245.6,154.4 L226.6,165.4 L226.6,132.2 L200,116.8 L173.4,132.2 L173.4,165.4 L154.4,154.4 Z",
98
- "M291.1,199.9 L291.2,252.6 L245.5,278.9 L216.7,262.3 L216.6,240.3 L245.4,257 L272.1,241.6 L272,210.9 L243.2,194.3 L262.3,183.3 Z",
99
- "M154.5,278.9 L108.8,252.6 L108.9,199.9 L137.7,183.3 L156.8,194.3 L128,210.9 L127.9,241.6 L154.6,257 L183.4,240.3 L183.3,262.3 Z"
100
- ],
101
- shardStroke: 5.7,
102
- gradient: { x1: 90, y1: 310, x2: 310, y2: 90, stops: marks2.orazaka },
103
- core: { r: 21, inner: 7.6 },
104
- highlight: "#fff7ed",
105
- glow: { color: orange, opacity: 0.16 },
106
- /** The core's breathing shadow (web), in the mark's orange. */
107
- pulse: { color: orange, low: 0.3, high: 0.6 },
108
- orbit: { r: 160, dash: "8 8", width: 1.5 },
109
- ring: { r: 134, width: 1 }
110
- };
111
-
112
- // src/marks/OrazakaLogo.tsx
113
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
114
- var CSS2 = `
115
- .ozm-orbit { transform-origin: 200px 200px; animation: ozm-orbit 35s linear infinite; }
116
- .ozm-core { transform-box: fill-box; transform-origin: center; animation: ozm-core 3.2s ease-in-out infinite; }
117
- @keyframes ozm-orbit { to { transform: rotate(360deg); } }
118
- @keyframes ozm-core {
119
- 0%, 100% { filter: drop-shadow(0 0 6px ${withAlpha(ORAZAKA.pulse.color, ORAZAKA.pulse.low)}); opacity: .9; }
120
- 50% { filter: drop-shadow(0 0 14px ${withAlpha(ORAZAKA.pulse.color, ORAZAKA.pulse.high)}); opacity: 1; }
121
- }
122
- @media (prefers-reduced-motion: reduce) { .ozm-orbit, .ozm-core { animation: none; } }
123
- `;
124
- function OrazakaLogo({ size = 32, animated = true, title, className }) {
125
- const id = useIds("ozm", ["gradient", "glow"]);
126
- const fill = `url(#${id.gradient})`;
127
- return /* @__PURE__ */ jsxs2("svg", { width: size, height: size, viewBox: size < 48 ? ORAZAKA.croppedViewBox : ORAZAKA.viewBox, fill: "none", xmlns: "http://www.w3.org/2000/svg", className, ...a11y(title), children: [
128
- /* @__PURE__ */ jsx2("style", { children: CSS2 }),
129
- /* @__PURE__ */ jsxs2("defs", { children: [
130
- /* @__PURE__ */ jsx2("linearGradient", { id: id.gradient, gradientUnits: "userSpaceOnUse", x1: ORAZAKA.gradient.x1, y1: ORAZAKA.gradient.y1, x2: ORAZAKA.gradient.x2, y2: ORAZAKA.gradient.y2, children: ORAZAKA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx2("stop", { offset, stopColor: color }, offset)) }),
131
- /* @__PURE__ */ jsxs2("radialGradient", { id: id.glow, cx: "50%", cy: "50%", r: "50%", children: [
132
- /* @__PURE__ */ jsx2("stop", { offset: "0%", stopColor: ORAZAKA.glow.color, stopOpacity: ORAZAKA.glow.opacity }),
133
- /* @__PURE__ */ jsx2("stop", { offset: "100%", stopColor: ORAZAKA.glow.color, stopOpacity: "0" })
134
- ] })
135
- ] }),
136
- size >= 48 ? /* @__PURE__ */ jsx2("circle", { cx: ORAZAKA.center, cy: ORAZAKA.center, r: "190", fill: `url(#${id.glow})` }) : null,
137
- /* @__PURE__ */ jsx2("circle", { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.orbit.r, stroke: neutral("--kz-border-strong", 40), strokeWidth: ORAZAKA.orbit.width, strokeDasharray: ORAZAKA.orbit.dash, opacity: ".6" }),
138
- /* @__PURE__ */ jsx2("circle", { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.ring.r, stroke: neutral("--kz-border-default", 30), strokeWidth: ORAZAKA.ring.width, opacity: ".35" }),
139
- /* @__PURE__ */ jsx2("g", { className: animated ? "ozm-orbit" : void 0, children: ORAZAKA.shards.map((d) => /* @__PURE__ */ jsx2("path", { d, fill, stroke: fill, strokeWidth: ORAZAKA.shardStroke, strokeLinejoin: "round" }, d)) }),
140
- /* @__PURE__ */ jsxs2("g", { className: animated ? "ozm-core" : void 0, children: [
141
- /* @__PURE__ */ jsx2("circle", { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.r, fill }),
142
- /* @__PURE__ */ jsx2("circle", { cx: ORAZAKA.center, cy: ORAZAKA.center, r: ORAZAKA.core.inner, fill: ORAZAKA.highlight })
143
- ] })
144
- ] });
145
- }
146
-
147
- // src/marks/orochia-geometry.ts
148
- import { marks as marks3 } from "@krizaka/tokens/native";
149
- var OROCHIA = {
150
- viewBox: "0 0 400 400",
151
- croppedViewBox: "86 82 228 228",
152
- offset: 20,
153
- body: { x1: 70, y1: 290, x2: 290, y2: 70, stops: marks3.orochia },
154
- flameGradient: { stops: [["0%", "#a855f7"], ["100%", "#f9a8d4"]] },
155
- glow: { color: "#d946ef", opacity: 0.18 },
156
- orbit: { r: 160, dash: "8 8", width: 1.5 },
157
- ring: { r: 134, width: 1 },
158
- arc: "M259.8,142.8 A88,88 0 1 1 142.8,100.2",
159
- neck: "M142.8,100.2 A88,88 0 0 1 187.7,92.3",
160
- tail: "M187.7,92.3 A88,88 0 0 1 221.3,102.3",
161
- scales: { color: "#fdf4ff", opacity: 0.45, width: 3, dash: "2 14" },
162
- head: { cx: 253.9, cy: 130.1, rx: 13, ry: 20, rotate: -25 },
163
- tongue: { d: "M245.4,112.0 L242.0,104.8 L235.0,101.5 M242.0,104.8 L244.0,97.3", color: "#f472b6" },
164
- eye: { cx: 256.3, cy: 123.5, r: 4.5, color: "#fdf4ff" },
165
- flame: {
166
- translate: [127, 120],
167
- scale: 4.4,
168
- d: "M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z"
169
- }
170
- };
171
-
172
- // src/marks/OrochiaLogo.tsx
173
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
174
- var CSS3 = `
175
- .orom-spin { transform-origin: 180px 180px; animation: orom-spin 30s linear infinite; }
176
- .orom-slither { animation: orom-slither 2.4s linear infinite; }
177
- .orom-pulse { transform-box: view-box; animation: orom-pulse 3.2s ease-in-out infinite; }
178
- @keyframes orom-spin { to { transform: rotate(360deg); } }
179
- @keyframes orom-slither { to { stroke-dashoffset: -64; } }
180
- @keyframes orom-pulse {
181
- 0%, 100% { filter: drop-shadow(0 0 6px hsla(292, 84%, 61%, .25)); opacity: .9; }
182
- 50% { filter: drop-shadow(0 0 14px hsla(292, 84%, 61%, .55)); opacity: 1; }
183
- }
184
- @media (prefers-reduced-motion: reduce) { .orom-spin, .orom-slither, .orom-pulse { animation: none; } }
185
- `;
186
- function OrochiaLogo({ size = 36, animated = true, title, className }) {
187
- const id = useIds("orom", ["body", "flame", "glow"]);
188
- const m = (cls) => animated ? cls : void 0;
189
- return /* @__PURE__ */ jsxs3("svg", { width: size, height: size, viewBox: size < 48 ? OROCHIA.croppedViewBox : OROCHIA.viewBox, fill: "none", xmlns: "http://www.w3.org/2000/svg", className, ...a11y(title), children: [
190
- /* @__PURE__ */ jsx3("style", { children: CSS3 }),
191
- /* @__PURE__ */ jsxs3("defs", { children: [
192
- /* @__PURE__ */ jsx3("linearGradient", { id: id.body, gradientUnits: "userSpaceOnUse", x1: OROCHIA.body.x1, y1: OROCHIA.body.y1, x2: OROCHIA.body.x2, y2: OROCHIA.body.y2, children: OROCHIA.body.stops.map(([offset, color]) => /* @__PURE__ */ jsx3("stop", { offset, stopColor: color }, offset)) }),
193
- /* @__PURE__ */ jsx3("linearGradient", { id: id.flame, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: OROCHIA.flameGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx3("stop", { offset, stopColor: color }, offset)) }),
194
- /* @__PURE__ */ jsxs3("radialGradient", { id: id.glow, cx: "50%", cy: "50%", r: "50%", children: [
195
- /* @__PURE__ */ jsx3("stop", { offset: "0%", stopColor: OROCHIA.glow.color, stopOpacity: OROCHIA.glow.opacity }),
196
- /* @__PURE__ */ jsx3("stop", { offset: "100%", stopColor: OROCHIA.glow.color, stopOpacity: "0" })
197
- ] })
198
- ] }),
199
- /* @__PURE__ */ jsxs3("g", { transform: `translate(${OROCHIA.offset} ${OROCHIA.offset})`, children: [
200
- /* @__PURE__ */ jsx3("circle", { cx: "180", cy: "180", r: "170", fill: `url(#${id.glow})` }),
201
- /* @__PURE__ */ jsx3("circle", { className: m("orom-spin"), cx: "180", cy: "180", r: OROCHIA.orbit.r, stroke: neutral("--kz-border-strong", 40), strokeWidth: OROCHIA.orbit.width, strokeDasharray: OROCHIA.orbit.dash, opacity: ".6" }),
202
- /* @__PURE__ */ jsx3("circle", { cx: "180", cy: "180", r: OROCHIA.ring.r, stroke: neutral("--kz-border-default", 30), strokeWidth: OROCHIA.ring.width, opacity: ".35" }),
203
- /* @__PURE__ */ jsx3("path", { d: OROCHIA.arc, stroke: `url(#${id.body})`, strokeWidth: "22", strokeLinecap: "round" }),
204
- /* @__PURE__ */ jsx3("path", { className: m("orom-slither"), d: OROCHIA.arc, stroke: OROCHIA.scales.color, strokeOpacity: OROCHIA.scales.opacity, strokeWidth: OROCHIA.scales.width, strokeLinecap: "round", strokeDasharray: OROCHIA.scales.dash }),
205
- /* @__PURE__ */ jsx3("path", { d: OROCHIA.neck, stroke: `url(#${id.body})`, strokeWidth: "14", strokeLinecap: "round" }),
206
- /* @__PURE__ */ jsx3("path", { d: OROCHIA.tail, stroke: `url(#${id.body})`, strokeWidth: "6", strokeLinecap: "round" }),
207
- /* @__PURE__ */ jsx3("ellipse", { cx: OROCHIA.head.cx, cy: OROCHIA.head.cy, rx: OROCHIA.head.rx, ry: OROCHIA.head.ry, transform: `rotate(${OROCHIA.head.rotate} ${OROCHIA.head.cx} ${OROCHIA.head.cy})`, fill: `url(#${id.body})` }),
208
- /* @__PURE__ */ jsx3("path", { d: OROCHIA.tongue.d, stroke: OROCHIA.tongue.color, strokeWidth: "3", strokeLinecap: "round" }),
209
- /* @__PURE__ */ jsx3("circle", { className: m("orom-pulse"), cx: OROCHIA.eye.cx, cy: OROCHIA.eye.cy, r: OROCHIA.eye.r, fill: OROCHIA.eye.color }),
210
- /* @__PURE__ */ jsx3("path", { className: m("orom-pulse"), transform: `translate(${OROCHIA.flame.translate[0]} ${OROCHIA.flame.translate[1]}) scale(${OROCHIA.flame.scale})`, d: OROCHIA.flame.d, fill: `url(#${id.flame})` })
211
- ] })
212
- ] });
213
- }
214
-
215
- // src/marks/yasakia-geometry.ts
216
- import { marks as marks4 } from "@krizaka/tokens/native";
217
- var turquoise = marks4.yasakia[marks4.yasakia.length - 1][1];
218
- var YASAKIA = {
219
- viewBox: "0 0 400 400",
220
- croppedViewBox: "80 80 240 240",
221
- center: 200,
222
- /** The two voices, left then right: each a bubble (cut around the lens) and its tail. */
223
- voices: [
224
- { body: "M191.9 109 A80 80 0 1 0 191.9 259 A87 87 0 0 1 191.9 109 Z", tail: "M98 230 Q104 268 88 294 Q122 288 144 262 L130 200 Z" },
225
- { body: "M208.1 109 A80 80 0 1 1 208.1 259 A87 87 0 0 0 208.1 109 Z", tail: "M302 230 Q296 268 312 294 Q278 288 256 262 L270 200 Z" }
226
- ],
227
- /** The left voice, a shade deeper: the depth between the two. */
228
- shade: { color: "#000", opacity: 0.22 },
229
- /** Where the bubbles overlap: the core, lit from above. */
230
- lens: { d: "M200 112.6 A80 80 0 0 1 200 255.4 A80 80 0 0 1 200 112.6 Z", y1: 112.6, y2: 255.4 },
231
- gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks4.yasakia },
232
- /** The light on the lens: bright at the top, fading down. */
233
- highlight: { color: "#f0fdfa", from: 0.75, to: 0.2 },
234
- /** The pair: two nodes on the orbit, opposite each other, that turn with it. */
235
- pair: { r: 8, at: [[40, 200], [360, 200]] },
236
- glow: { color: turquoise, opacity: 0.16 },
237
- /** The core's breathing shadow (web), in the mark's turquoise. */
238
- pulse: { color: turquoise, low: 0.3, high: 0.6 },
239
- orbit: { r: 160, dash: "8 8", width: 1.5 },
240
- ring: { r: 134, width: 1 }
241
- };
242
-
243
- // src/marks/YasakiaLogo.tsx
244
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
245
- var CSS4 = `
246
- .yzm-orbit { transform-origin: 200px 200px; animation: yzm-orbit 30s linear infinite; }
247
- .yzm-core { transform-box: fill-box; transform-origin: center; animation: yzm-core 3.2s ease-in-out infinite; }
248
- @keyframes yzm-orbit { to { transform: rotate(360deg); } }
249
- @keyframes yzm-core {
250
- 0%, 100% { filter: drop-shadow(0 0 6px ${withAlpha(YASAKIA.pulse.color, YASAKIA.pulse.low)}); opacity: .9; }
251
- 50% { filter: drop-shadow(0 0 14px ${withAlpha(YASAKIA.pulse.color, YASAKIA.pulse.high)}); opacity: 1; }
252
- }
253
- @media (prefers-reduced-motion: reduce) { .yzm-orbit, .yzm-core { animation: none; } }
254
- `;
255
- function YasakiaLogo({ size = 32, animated = true, title, className }) {
256
- const id = useIds("yzm", ["gradient", "light", "glow"]);
257
- const fill = `url(#${id.gradient})`;
258
- return /* @__PURE__ */ jsxs4("svg", { width: size, height: size, viewBox: size < 48 ? YASAKIA.croppedViewBox : YASAKIA.viewBox, fill: "none", xmlns: "http://www.w3.org/2000/svg", className, ...a11y(title), children: [
259
- /* @__PURE__ */ jsx4("style", { children: CSS4 }),
260
- /* @__PURE__ */ jsxs4("defs", { children: [
261
- /* @__PURE__ */ jsx4("linearGradient", { id: id.gradient, gradientUnits: "userSpaceOnUse", x1: YASAKIA.gradient.x1, y1: YASAKIA.gradient.y1, x2: YASAKIA.gradient.x2, y2: YASAKIA.gradient.y2, children: YASAKIA.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx4("stop", { offset, stopColor: color }, offset)) }),
262
- /* @__PURE__ */ jsxs4("linearGradient", { id: id.light, gradientUnits: "userSpaceOnUse", x1: "0", y1: YASAKIA.lens.y1, x2: "0", y2: YASAKIA.lens.y2, children: [
263
- /* @__PURE__ */ jsx4("stop", { offset: "0%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.from }),
264
- /* @__PURE__ */ jsx4("stop", { offset: "100%", stopColor: YASAKIA.highlight.color, stopOpacity: YASAKIA.highlight.to })
265
- ] }),
266
- /* @__PURE__ */ jsxs4("radialGradient", { id: id.glow, cx: "50%", cy: "50%", r: "50%", children: [
267
- /* @__PURE__ */ jsx4("stop", { offset: "0%", stopColor: YASAKIA.glow.color, stopOpacity: YASAKIA.glow.opacity }),
268
- /* @__PURE__ */ jsx4("stop", { offset: "100%", stopColor: YASAKIA.glow.color, stopOpacity: "0" })
269
- ] })
270
- ] }),
271
- size >= 48 ? /* @__PURE__ */ jsx4("circle", { cx: YASAKIA.center, cy: YASAKIA.center, r: "190", fill: `url(#${id.glow})` }) : null,
272
- /* @__PURE__ */ jsx4("circle", { cx: YASAKIA.center, cy: YASAKIA.center, r: YASAKIA.ring.r, stroke: neutral("--kz-border-default", 30), strokeWidth: YASAKIA.ring.width, opacity: ".35" }),
273
- /* @__PURE__ */ jsxs4("g", { className: animated ? "yzm-orbit" : void 0, children: [
274
- /* @__PURE__ */ jsx4("circle", { cx: YASAKIA.center, cy: YASAKIA.center, r: YASAKIA.orbit.r, stroke: neutral("--kz-border-strong", 40), strokeWidth: YASAKIA.orbit.width, strokeDasharray: YASAKIA.orbit.dash, opacity: ".6" }),
275
- YASAKIA.pair.at.map(([cx2, cy]) => /* @__PURE__ */ jsx4("circle", { cx: cx2, cy, r: YASAKIA.pair.r, fill }, cx2))
276
- ] }),
277
- YASAKIA.voices.map((v, i) => /* @__PURE__ */ jsxs4("g", { children: [
278
- /* @__PURE__ */ jsx4("path", { d: v.body, fill }),
279
- /* @__PURE__ */ jsx4("path", { d: v.tail, fill }),
280
- i === 0 ? /* @__PURE__ */ jsx4("path", { d: `${v.body} ${v.tail}`, fill: YASAKIA.shade.color, opacity: YASAKIA.shade.opacity }) : null
281
- ] }, v.body)),
282
- /* @__PURE__ */ jsxs4("g", { className: animated ? "yzm-core" : void 0, children: [
283
- /* @__PURE__ */ jsx4("path", { d: YASAKIA.lens.d, fill }),
284
- /* @__PURE__ */ jsx4("path", { d: YASAKIA.lens.d, fill: `url(#${id.light})` })
285
- ] })
286
- ] });
287
- }
288
- var YazakiaLogo = YasakiaLogo;
289
-
290
- // src/marks/yororis-geometry.ts
291
- import { marks as marks5 } from "@krizaka/tokens/native";
292
- var sand = marks5.yororis[0][1];
293
- var sage = marks5.yororis[marks5.yororis.length - 1][1];
294
- var YORORIS = {
295
- viewBox: "0 0 400 400",
296
- croppedViewBox: "80 80 240 240",
297
- center: 200,
298
- /** The two leaves — open hands, mirrored around x = 200 — filled, rising from the stem. */
299
- leaves: [
300
- "M200 262 C142 256 104 206 110 122 C138 130 154 152 160 180 C168 218 182 238 204 246 Z",
301
- "M200 262 C258 256 296 206 290 122 C262 130 246 152 240 180 C232 218 218 238 196 246 Z"
302
- ],
303
- /** A vein of light along each leaf (dashed, it drifts slowly when animated). */
304
- veins: "M122 142 C128 196 156 232 192 248 M278 142 C272 196 244 232 208 248",
305
- vein: { color: "#fbf6ea", opacity: 0.45, width: 3, dash: "2 14" },
306
- /** The stem, from the junction down. */
307
- stem: "M200 244 L200 312",
308
- stroke: 30,
309
- gradient: { x1: 110, y1: 300, x2: 290, y2: 100, stops: marks5.yororis },
310
- /** The core's warm light: from the mark's sand (below) to a light sand (above). */
311
- coreGradient: { stops: [["0%", sand], ["100%", "#e6c993"]] },
312
- /** The core, held in the hollow of the leaves (not on the junction): the one who is listened to. It breathes. */
313
- core: { cx: 200, cy: 184, r: 32, inner: 11 },
314
- highlight: "#fbf6ea",
315
- /** The moment: one node on the orbit, that turns with it. */
316
- moment: { r: 9, at: [200, 40] },
317
- glow: { color: sage, opacity: 0.18 },
318
- /** The core's breathing shadow (web), in the core's warm sand. */
319
- pulse: { color: sand, low: 0.3, high: 0.6 },
320
- orbit: { r: 160, dash: "8 8", width: 1.5 },
321
- ring: { r: 134, width: 1 }
322
- };
323
-
324
- // src/marks/YororisLogo.tsx
325
- import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
326
- var CSS5 = `
327
- .yrm-orbit { transform-origin: 200px 200px; animation: yrm-orbit 36s linear infinite; }
328
- .yrm-vein { animation: yrm-vein 4.8s linear infinite; }
329
- .yrm-core { transform-box: fill-box; transform-origin: center; animation: yrm-core 4.2s ease-in-out infinite; }
330
- @keyframes yrm-orbit { to { transform: rotate(360deg); } }
331
- @keyframes yrm-vein { to { stroke-dashoffset: 64; } }
332
- @keyframes yrm-core {
333
- 0%, 100% { filter: drop-shadow(0 0 6px ${withAlpha(YORORIS.pulse.color, YORORIS.pulse.low)}); opacity: .9; }
334
- 50% { filter: drop-shadow(0 0 16px ${withAlpha(YORORIS.pulse.color, YORORIS.pulse.high)}); opacity: 1; }
335
- }
336
- @media (prefers-reduced-motion: reduce) { .yrm-orbit, .yrm-vein, .yrm-core { animation: none; } }
337
- `;
338
- function YororisLogo({ size = 32, animated = true, title, className }) {
339
- const id = useIds("yrm", ["gradient", "core", "glow"]);
340
- const fill = `url(#${id.gradient})`;
341
- return /* @__PURE__ */ jsxs5("svg", { width: size, height: size, viewBox: size < 48 ? YORORIS.croppedViewBox : YORORIS.viewBox, fill: "none", xmlns: "http://www.w3.org/2000/svg", className, ...a11y(title), children: [
342
- /* @__PURE__ */ jsx5("style", { children: CSS5 }),
343
- /* @__PURE__ */ jsxs5("defs", { children: [
344
- /* @__PURE__ */ jsx5("linearGradient", { id: id.gradient, gradientUnits: "userSpaceOnUse", x1: YORORIS.gradient.x1, y1: YORORIS.gradient.y1, x2: YORORIS.gradient.x2, y2: YORORIS.gradient.y2, children: YORORIS.gradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx5("stop", { offset, stopColor: color }, offset)) }),
345
- /* @__PURE__ */ jsx5("linearGradient", { id: id.core, x1: "50%", y1: "100%", x2: "50%", y2: "0%", children: YORORIS.coreGradient.stops.map(([offset, color]) => /* @__PURE__ */ jsx5("stop", { offset, stopColor: color }, offset)) }),
346
- /* @__PURE__ */ jsxs5("radialGradient", { id: id.glow, cx: "50%", cy: "50%", r: "50%", children: [
347
- /* @__PURE__ */ jsx5("stop", { offset: "0%", stopColor: YORORIS.glow.color, stopOpacity: YORORIS.glow.opacity }),
348
- /* @__PURE__ */ jsx5("stop", { offset: "100%", stopColor: YORORIS.glow.color, stopOpacity: "0" })
349
- ] })
350
- ] }),
351
- size >= 48 ? /* @__PURE__ */ jsx5("circle", { cx: YORORIS.center, cy: YORORIS.center, r: "190", fill: `url(#${id.glow})` }) : null,
352
- /* @__PURE__ */ jsx5("circle", { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.ring.r, stroke: neutral("--kz-border-default", 30), strokeWidth: YORORIS.ring.width, opacity: ".35" }),
353
- /* @__PURE__ */ jsxs5("g", { className: animated ? "yrm-orbit" : void 0, children: [
354
- /* @__PURE__ */ jsx5("circle", { cx: YORORIS.center, cy: YORORIS.center, r: YORORIS.orbit.r, stroke: neutral("--kz-border-strong", 40), strokeWidth: YORORIS.orbit.width, strokeDasharray: YORORIS.orbit.dash, opacity: ".6" }),
355
- /* @__PURE__ */ jsx5("circle", { cx: YORORIS.moment.at[0], cy: YORORIS.moment.at[1], r: YORORIS.moment.r, fill })
356
- ] }),
357
- /* @__PURE__ */ jsx5("path", { d: YORORIS.stem, stroke: fill, strokeWidth: YORORIS.stroke, strokeLinecap: "round" }),
358
- YORORIS.leaves.map((d) => /* @__PURE__ */ jsx5("path", { d, fill }, d)),
359
- /* @__PURE__ */ jsx5("path", { className: animated ? "yrm-vein" : void 0, d: YORORIS.veins, stroke: YORORIS.vein.color, strokeOpacity: YORORIS.vein.opacity, strokeWidth: YORORIS.vein.width, strokeLinecap: "round", strokeDasharray: YORORIS.vein.dash }),
360
- /* @__PURE__ */ jsxs5("g", { className: animated ? "yrm-core" : void 0, children: [
361
- /* @__PURE__ */ jsx5("circle", { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.r, fill: `url(#${id.core})` }),
362
- /* @__PURE__ */ jsx5("circle", { cx: YORORIS.core.cx, cy: YORORIS.core.cy, r: YORORIS.core.inner, fill: YORORIS.highlight })
363
- ] })
364
- ] });
365
- }
366
-
367
- // src/marks/ProductLogo.tsx
368
- import { jsx as jsx6 } from "react/jsx-runtime";
369
- function ProductLogo({ id, ...props }) {
370
- if (id === "krizaka") return /* @__PURE__ */ jsx6(KrizakaLogo, { ...props });
371
- if (id === "orazaka") return /* @__PURE__ */ jsx6(OrazakaLogo, { ...props });
372
- if (id === "yasakia" || id === "yazakia") return /* @__PURE__ */ jsx6(YasakiaLogo, { ...props });
373
- if (id === "yororis") return /* @__PURE__ */ jsx6(YororisLogo, { ...props });
374
- return /* @__PURE__ */ jsx6(OrochiaLogo, { ...props });
375
- }
376
18
  export {
377
19
  KrizakaLogo,
378
20
  MotionObserver,