@krizaka/ui 3.4.0 → 3.6.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 (337) hide show
  1. package/README.md +1 -0
  2. package/dist/app-shell.d.ts +24 -22
  3. package/dist/app-shell.js +9 -3
  4. package/dist/app-shell.js.map +1 -1
  5. package/dist/argument-card.js +3 -3
  6. package/dist/chat.d.ts +187 -0
  7. package/dist/chat.js +132 -0
  8. package/dist/chat.js.map +1 -0
  9. package/dist/chunk-3GODX3D6.js +25 -0
  10. package/dist/chunk-3GODX3D6.js.map +1 -0
  11. package/dist/chunk-ECSCA3CN.js +128 -0
  12. package/dist/chunk-ECSCA3CN.js.map +1 -0
  13. package/dist/chunk-F2GKFIYK.js +47 -0
  14. package/dist/chunk-F2GKFIYK.js.map +1 -0
  15. package/dist/{chunk-R6SDS7JM.js → chunk-ND3L5VHT.js} +25 -2
  16. package/dist/chunk-ND3L5VHT.js.map +1 -0
  17. package/dist/command.js +1 -1
  18. package/dist/data-table.js +20 -134
  19. package/dist/data-table.js.map +1 -1
  20. package/dist/dialog.js +7 -3
  21. package/dist/dialog.js.map +1 -1
  22. package/dist/loader.d.ts +21 -1
  23. package/dist/loader.js +7 -3
  24. package/dist/loader.js.map +1 -1
  25. package/dist/map.js +7 -1
  26. package/dist/map.js.map +1 -1
  27. package/dist/marketing-layout.d.ts +3 -9
  28. package/dist/marketing-layout.js +24 -7
  29. package/dist/marketing-layout.js.map +1 -1
  30. package/dist/match-dialog.d.ts +32 -0
  31. package/dist/match-dialog.js +168 -0
  32. package/dist/match-dialog.js.map +1 -0
  33. package/dist/native.d.ts +484 -106
  34. package/dist/native.js +1967 -1323
  35. package/dist/native.js.map +1 -1
  36. package/dist/page-hero.js +3 -3
  37. package/dist/photo-grid.d.ts +122 -0
  38. package/dist/photo-grid.js +94 -0
  39. package/dist/photo-grid.js.map +1 -0
  40. package/dist/skip-link.d.ts +15 -0
  41. package/dist/skip-link.js +10 -0
  42. package/dist/skip-link.js.map +1 -0
  43. package/dist/step-progress.d.ts +20 -0
  44. package/dist/step-progress.js +17 -0
  45. package/dist/step-progress.js.map +1 -0
  46. package/dist/swipe-deck.d.ts +183 -0
  47. package/dist/swipe-deck.js +144 -0
  48. package/dist/swipe-deck.js.map +1 -0
  49. package/dist/tag-selector.d.ts +26 -0
  50. package/dist/tag-selector.js +21 -0
  51. package/dist/tag-selector.js.map +1 -0
  52. package/dist/tree-view.d.ts +2 -0
  53. package/dist/tree-view.js.map +1 -1
  54. package/dist/verified-badge.d.ts +16 -0
  55. package/dist/verified-badge.js +23 -0
  56. package/dist/verified-badge.js.map +1 -0
  57. package/package.json +120 -8
  58. package/registry/achievement.json +2 -1
  59. package/registry/action-bar.json +2 -1
  60. package/registry/action-sheet.json +1 -0
  61. package/registry/activity-feed.json +2 -1
  62. package/registry/alert.json +2 -1
  63. package/registry/app-shell.json +27 -5
  64. package/registry/argument-card.json +2 -1
  65. package/registry/audio-player.json +2 -1
  66. package/registry/auth-layout.json +7 -2
  67. package/registry/avatar.json +2 -1
  68. package/registry/badge.json +2 -1
  69. package/registry/button.json +2 -1
  70. package/registry/card-grid.json +2 -1
  71. package/registry/card.json +2 -1
  72. package/registry/catalogue-page.json +5 -2
  73. package/registry/changelog-page.json +5 -2
  74. package/registry/chat.json +918 -0
  75. package/registry/checkbox.json +2 -1
  76. package/registry/chip-link.json +2 -1
  77. package/registry/chip.json +2 -1
  78. package/registry/choice-grid.json +2 -1
  79. package/registry/cn.json +1 -0
  80. package/registry/code-block.json +2 -1
  81. package/registry/combobox.json +2 -1
  82. package/registry/command.json +2 -1
  83. package/registry/component-page.json +5 -2
  84. package/registry/confirm-button.json +2 -1
  85. package/registry/contact-page.json +5 -2
  86. package/registry/continue-prompt.json +2 -1
  87. package/registry/countdown.json +2 -1
  88. package/registry/cta-panel.json +2 -1
  89. package/registry/dashboard-layout.json +5 -2
  90. package/registry/data-table.json +2 -1
  91. package/registry/date-picker.json +3 -2
  92. package/registry/decision-list.json +2 -1
  93. package/registry/description-list.json +2 -1
  94. package/registry/detail-layout.json +16 -2
  95. package/registry/dialog.json +10 -4
  96. package/registry/docs-article-page.json +16 -2
  97. package/registry/docs-hub-page.json +5 -2
  98. package/registry/docs-layout.json +2 -1
  99. package/registry/dropdown-menu.json +2 -1
  100. package/registry/empty-state.json +14 -2
  101. package/registry/error-page.json +5 -2
  102. package/registry/examples/chat/conversation.d.ts +4 -0
  103. package/registry/examples/chat/conversation.js +22 -0
  104. package/registry/examples/chat/conversation.tsx +21 -0
  105. package/registry/examples/chat/inbox.d.ts +4 -0
  106. package/registry/examples/chat/inbox.js +15 -0
  107. package/registry/examples/chat/inbox.tsx +12 -0
  108. package/registry/examples/chat/native/conversation.d.ts +4 -0
  109. package/registry/examples/chat/native/conversation.dark.png +0 -0
  110. package/registry/examples/chat/native/conversation.js +23 -0
  111. package/registry/examples/chat/native/conversation.light.png +0 -0
  112. package/registry/examples/chat/native/conversation.tsx +20 -0
  113. package/registry/examples/chat/native/inbox.d.ts +4 -0
  114. package/registry/examples/chat/native/inbox.dark.png +0 -0
  115. package/registry/examples/chat/native/inbox.js +16 -0
  116. package/registry/examples/chat/native/inbox.light.png +0 -0
  117. package/registry/examples/chat/native/inbox.tsx +13 -0
  118. package/registry/examples/detail-layout/checkout.d.ts +4 -0
  119. package/registry/examples/detail-layout/checkout.js +37 -0
  120. package/registry/examples/detail-layout/checkout.tsx +44 -0
  121. package/registry/examples/docs-article-page/faq.d.ts +4 -0
  122. package/registry/examples/docs-article-page/faq.js +31 -0
  123. package/registry/examples/docs-article-page/faq.tsx +40 -0
  124. package/registry/examples/empty-state/library.d.ts +4 -0
  125. package/registry/examples/empty-state/library.js +25 -0
  126. package/registry/examples/empty-state/library.tsx +20 -0
  127. package/registry/examples/loader/branded.d.ts +4 -0
  128. package/registry/examples/loader/branded.js +12 -0
  129. package/registry/examples/loader/branded.tsx +7 -0
  130. package/registry/examples/loader/native/branded.d.ts +4 -0
  131. package/registry/examples/loader/native/branded.dark.png +0 -0
  132. package/registry/examples/loader/native/branded.js +12 -0
  133. package/registry/examples/loader/native/branded.light.png +0 -0
  134. package/registry/examples/loader/native/branded.tsx +11 -0
  135. package/registry/examples/longform-page/case-study.d.ts +4 -0
  136. package/registry/examples/longform-page/case-study.js +41 -0
  137. package/registry/examples/longform-page/case-study.tsx +40 -0
  138. package/registry/examples/match-dialog/its-a-match.d.ts +4 -0
  139. package/registry/examples/match-dialog/its-a-match.js +29 -0
  140. package/registry/examples/match-dialog/its-a-match.tsx +25 -0
  141. package/registry/examples/match-dialog/native/its-a-match.d.ts +4 -0
  142. package/registry/examples/match-dialog/native/its-a-match.dark.png +0 -0
  143. package/registry/examples/match-dialog/native/its-a-match.js +28 -0
  144. package/registry/examples/match-dialog/native/its-a-match.light.png +0 -0
  145. package/registry/examples/match-dialog/native/its-a-match.tsx +22 -0
  146. package/registry/examples/photo-grid/native/profile-photos.d.ts +4 -0
  147. package/registry/examples/photo-grid/native/profile-photos.dark.png +0 -0
  148. package/registry/examples/photo-grid/native/profile-photos.js +27 -0
  149. package/registry/examples/photo-grid/native/profile-photos.light.png +0 -0
  150. package/registry/examples/photo-grid/native/profile-photos.tsx +24 -0
  151. package/registry/examples/photo-grid/profile-photos.d.ts +4 -0
  152. package/registry/examples/photo-grid/profile-photos.js +28 -0
  153. package/registry/examples/photo-grid/profile-photos.tsx +25 -0
  154. package/registry/examples/pull-to-refresh/native/branded.d.ts +4 -0
  155. package/registry/examples/pull-to-refresh/native/branded.dark.png +0 -0
  156. package/registry/examples/pull-to-refresh/native/branded.js +14 -0
  157. package/registry/examples/pull-to-refresh/native/branded.light.png +0 -0
  158. package/registry/examples/pull-to-refresh/native/branded.tsx +23 -0
  159. package/registry/examples/screen/native/app-shell.d.ts +4 -0
  160. package/registry/examples/screen/native/app-shell.dark.png +0 -0
  161. package/registry/examples/screen/native/app-shell.js +25 -0
  162. package/registry/examples/screen/native/app-shell.light.png +0 -0
  163. package/registry/examples/screen/native/app-shell.tsx +33 -0
  164. package/registry/examples/screen/native/auth.d.ts +4 -0
  165. package/registry/examples/screen/native/auth.dark.png +0 -0
  166. package/registry/examples/screen/native/auth.js +24 -0
  167. package/registry/examples/screen/native/auth.light.png +0 -0
  168. package/registry/examples/screen/native/auth.tsx +20 -0
  169. package/registry/examples/screen/native/chat.d.ts +4 -0
  170. package/registry/examples/screen/native/chat.dark.png +0 -0
  171. package/registry/examples/screen/native/chat.js +27 -0
  172. package/registry/examples/screen/native/chat.light.png +0 -0
  173. package/registry/examples/screen/native/chat.tsx +22 -0
  174. package/registry/examples/screen/native/feed.d.ts +4 -0
  175. package/registry/examples/screen/native/feed.dark.png +0 -0
  176. package/registry/examples/screen/native/feed.js +24 -0
  177. package/registry/examples/screen/native/feed.light.png +0 -0
  178. package/registry/examples/screen/native/feed.tsx +34 -0
  179. package/registry/examples/screen/native/map.d.ts +4 -0
  180. package/registry/examples/screen/native/map.dark.png +0 -0
  181. package/registry/examples/screen/native/map.js +26 -0
  182. package/registry/examples/screen/native/map.light.png +0 -0
  183. package/registry/examples/screen/native/map.tsx +31 -0
  184. package/registry/examples/screen/native/notifications.d.ts +4 -0
  185. package/registry/examples/screen/native/notifications.dark.png +0 -0
  186. package/registry/examples/screen/native/notifications.js +21 -0
  187. package/registry/examples/screen/native/notifications.light.png +0 -0
  188. package/registry/examples/screen/native/notifications.tsx +21 -0
  189. package/registry/examples/screen/native/profile.d.ts +4 -0
  190. package/registry/examples/screen/native/profile.dark.png +0 -0
  191. package/registry/examples/screen/native/profile.js +29 -0
  192. package/registry/examples/screen/native/profile.light.png +0 -0
  193. package/registry/examples/screen/native/profile.tsx +27 -0
  194. package/registry/examples/screen/native/settings.d.ts +4 -0
  195. package/registry/examples/screen/native/settings.dark.png +0 -0
  196. package/registry/examples/screen/native/settings.js +20 -0
  197. package/registry/examples/screen/native/settings.light.png +0 -0
  198. package/registry/examples/screen/native/settings.tsx +19 -0
  199. package/registry/examples/skip-link/default.d.ts +4 -0
  200. package/registry/examples/skip-link/default.js +19 -0
  201. package/registry/examples/skip-link/default.tsx +12 -0
  202. package/registry/examples/splash-handoff/native/default.d.ts +4 -0
  203. package/registry/examples/splash-handoff/native/default.dark.png +0 -0
  204. package/registry/examples/splash-handoff/native/default.js +12 -0
  205. package/registry/examples/splash-handoff/native/default.light.png +0 -0
  206. package/registry/examples/splash-handoff/native/default.tsx +11 -0
  207. package/registry/examples/split-view/nearby.d.ts +4 -0
  208. package/registry/examples/split-view/nearby.js +33 -0
  209. package/registry/examples/split-view/nearby.tsx +45 -0
  210. package/registry/examples/split-view/notifications.d.ts +4 -0
  211. package/registry/examples/split-view/notifications.js +33 -0
  212. package/registry/examples/split-view/notifications.tsx +31 -0
  213. package/registry/examples/status-page/maintenance.d.ts +4 -0
  214. package/registry/examples/status-page/maintenance.js +29 -0
  215. package/registry/examples/status-page/maintenance.tsx +24 -0
  216. package/registry/examples/step-progress/native/sign-up.d.ts +4 -0
  217. package/registry/examples/step-progress/native/sign-up.dark.png +0 -0
  218. package/registry/examples/step-progress/native/sign-up.js +12 -0
  219. package/registry/examples/step-progress/native/sign-up.light.png +0 -0
  220. package/registry/examples/step-progress/native/sign-up.tsx +11 -0
  221. package/registry/examples/step-progress/sign-up.d.ts +4 -0
  222. package/registry/examples/step-progress/sign-up.js +22 -0
  223. package/registry/examples/step-progress/sign-up.tsx +16 -0
  224. package/registry/examples/swipe-deck/discover.d.ts +4 -0
  225. package/registry/examples/swipe-deck/discover.js +41 -0
  226. package/registry/examples/swipe-deck/discover.tsx +37 -0
  227. package/registry/examples/swipe-deck/native/discover.d.ts +4 -0
  228. package/registry/examples/swipe-deck/native/discover.dark.png +0 -0
  229. package/registry/examples/swipe-deck/native/discover.js +39 -0
  230. package/registry/examples/swipe-deck/native/discover.light.png +0 -0
  231. package/registry/examples/swipe-deck/native/discover.tsx +35 -0
  232. package/registry/examples/tag-selector/interests.d.ts +4 -0
  233. package/registry/examples/tag-selector/interests.js +14 -0
  234. package/registry/examples/tag-selector/interests.tsx +12 -0
  235. package/registry/examples/tag-selector/native/interests.d.ts +4 -0
  236. package/registry/examples/tag-selector/native/interests.dark.png +0 -0
  237. package/registry/examples/tag-selector/native/interests.js +15 -0
  238. package/registry/examples/tag-selector/native/interests.light.png +0 -0
  239. package/registry/examples/tag-selector/native/interests.tsx +15 -0
  240. package/registry/examples/verified-badge/native/verified.d.ts +4 -0
  241. package/registry/examples/verified-badge/native/verified.dark.png +0 -0
  242. package/registry/examples/verified-badge/native/verified.js +18 -0
  243. package/registry/examples/verified-badge/native/verified.light.png +0 -0
  244. package/registry/examples/verified-badge/native/verified.tsx +15 -0
  245. package/registry/examples/verified-badge/verified.d.ts +4 -0
  246. package/registry/examples/verified-badge/verified.js +17 -0
  247. package/registry/examples/verified-badge/verified.tsx +13 -0
  248. package/registry/fab.json +1 -0
  249. package/registry/field.json +2 -1
  250. package/registry/file-upload.json +3 -2
  251. package/registry/filter-bar.json +2 -1
  252. package/registry/form.json +3 -2
  253. package/registry/gallery-page.json +5 -2
  254. package/registry/glow-card.json +2 -1
  255. package/registry/goal-gauge.json +2 -1
  256. package/registry/header.json +1 -0
  257. package/registry/how-it-works-page.json +5 -2
  258. package/registry/image-cropper.json +2 -1
  259. package/registry/image-viewer.json +1 -0
  260. package/registry/index.json +608 -19
  261. package/registry/iso.json +2 -1
  262. package/registry/kanban.json +2 -1
  263. package/registry/kbd.json +2 -1
  264. package/registry/landing-page.json +5 -2
  265. package/registry/landscape.json +2 -1
  266. package/registry/legal-page.json +5 -2
  267. package/registry/link-card.json +2 -1
  268. package/registry/list.json +2 -1
  269. package/registry/loader.json +47 -3
  270. package/registry/longform-page.json +16 -2
  271. package/registry/map.json +4 -3
  272. package/registry/marketing-layout.json +13 -4
  273. package/registry/marquee.json +2 -1
  274. package/registry/mascot-quote.json +2 -1
  275. package/registry/mascot-state.json +2 -1
  276. package/registry/mascots.json +2 -1
  277. package/registry/match-dialog.json +315 -0
  278. package/registry/media-capture.json +2 -1
  279. package/registry/media-picker.json +1 -0
  280. package/registry/meter.json +2 -1
  281. package/registry/nav-bar.json +2 -1
  282. package/registry/number-ticker.json +2 -1
  283. package/registry/onboarding.json +1 -0
  284. package/registry/otp-input.json +1 -0
  285. package/registry/page-header.json +2 -1
  286. package/registry/page-hero.json +2 -1
  287. package/registry/page.json +2 -1
  288. package/registry/pagination.json +2 -1
  289. package/registry/permission-prompt.json +1 -0
  290. package/registry/photo-grid.json +303 -0
  291. package/registry/pointer-light.json +2 -1
  292. package/registry/popover.json +2 -1
  293. package/registry/pricing-page.json +5 -2
  294. package/registry/product-page.json +5 -2
  295. package/registry/profile-card.json +2 -1
  296. package/registry/progress.json +2 -1
  297. package/registry/promise-card.json +2 -1
  298. package/registry/pull-to-refresh.json +68 -4
  299. package/registry/radio-group.json +2 -1
  300. package/registry/screen.json +233 -0
  301. package/registry/scroll-stage.json +2 -1
  302. package/registry/search-field.json +2 -1
  303. package/registry/section-backdrop.json +2 -1
  304. package/registry/segmented.json +1 -0
  305. package/registry/separator.json +2 -1
  306. package/registry/settings-layout.json +5 -2
  307. package/registry/skeleton.json +2 -1
  308. package/registry/skip-link.json +122 -0
  309. package/registry/slider.json +2 -1
  310. package/registry/slot.json +2 -1
  311. package/registry/spinner.json +2 -1
  312. package/registry/splash-handoff.json +138 -0
  313. package/registry/split-view.json +27 -2
  314. package/registry/stage-banner.json +2 -1
  315. package/registry/stat.json +2 -1
  316. package/registry/status-page.json +18 -2
  317. package/registry/step-progress.json +256 -0
  318. package/registry/stepper.json +2 -1
  319. package/registry/swipe-deck.json +513 -0
  320. package/registry/swipeable-row.json +1 -0
  321. package/registry/switch.json +2 -1
  322. package/registry/tab-bar.json +1 -0
  323. package/registry/tabs.json +2 -1
  324. package/registry/tag-input.json +2 -1
  325. package/registry/tag-selector.json +277 -0
  326. package/registry/terminal-replay.json +2 -1
  327. package/registry/theme.json +2 -1
  328. package/registry/toast.json +2 -1
  329. package/registry/toc.json +2 -1
  330. package/registry/tooltip.json +2 -1
  331. package/registry/tree-view.json +10 -4
  332. package/registry/txt.json +1 -0
  333. package/registry/verified-badge.json +203 -0
  334. package/registry/video-player.json +2 -1
  335. package/registry/video-trimmer.json +2 -1
  336. package/registry/virtual.json +2 -1
  337. package/dist/chunk-R6SDS7JM.js.map +0 -1
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,15 @@
1
+ "use client";
2
+
3
+ // registry/examples/chat/inbox.tsx
4
+ import { ConversationItem } from "@krizaka/ui/chat";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ function ChatInbox() {
7
+ return /* @__PURE__ */ jsxs("div", { className: "flex max-w-md flex-col rounded-xl border border-border-default bg-surface-0 py-1", children: [
8
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Elena", online: true, onlineLabel: "online", preview: "typing\u2026", typing: true, time: "19:06", unread: 2, unreadLabel: "2 unread", href: "#/chats/elena" }),
9
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Noah", preview: "See you Saturday then!", time: "Mon", href: "#/chats/noah" }),
10
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Mina", preview: "You: haha same", time: "Sun", href: "#/chats/mina" })
11
+ ] });
12
+ }
13
+ export {
14
+ ChatInbox as default
15
+ };
@@ -0,0 +1,12 @@
1
+ import { ConversationItem } from "@krizaka/ui/chat";
2
+
3
+ // The inbox: online, the last message or “typing…”, the time, the unread count.
4
+ export default function ChatInbox() {
5
+ return (
6
+ <div className="flex max-w-md flex-col rounded-xl border border-border-default bg-surface-0 py-1">
7
+ <ConversationItem name="Elena" online onlineLabel="online" preview="typing…" typing time="19:06" unread={2} unreadLabel="2 unread" href="#/chats/elena" />
8
+ <ConversationItem name="Noah" preview="See you Saturday then!" time="Mon" href="#/chats/noah" />
9
+ <ConversationItem name="Mina" preview="You: haha same" time="Sun" href="#/chats/mina" />
10
+ </div>
11
+ );
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,23 @@
1
+ "use client";
2
+
3
+ // registry/examples/chat/native/conversation.tsx
4
+ import { MessageBubble, MessageComposer, TypingIndicator } from "@krizaka/ui/native";
5
+ import { useState } from "react";
6
+ import { View } from "react-native";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function NativeChatConversation() {
9
+ const [draft, setDraft] = useState("");
10
+ return /* @__PURE__ */ jsxs(View, { style: { width: 360, gap: 4 }, children: [
11
+ /* @__PURE__ */ jsxs(View, { style: { padding: 12, gap: 4 }, children: [
12
+ /* @__PURE__ */ jsx(MessageBubble, { text: "Hey! Loved your sunset photo \u{1F305}", time: "19:02", grouped: "first" }),
13
+ /* @__PURE__ */ jsx(MessageBubble, { text: "Was it Cabo da Roca?", time: "19:02", grouped: "last" }),
14
+ /* @__PURE__ */ jsx(MessageBubble, { mine: true, text: "It was! Have you been?", time: "19:05", grouped: "first" }),
15
+ /* @__PURE__ */ jsx(MessageBubble, { mine: true, text: "We should go this weekend", time: "19:05", grouped: "last", status: "read", showStatus: true, labels: { status: { read: "Read" } } }),
16
+ /* @__PURE__ */ jsx(TypingIndicator, { label: "Elena is typing" })
17
+ ] }),
18
+ /* @__PURE__ */ jsx(MessageComposer, { value: draft, onValueChange: setDraft, onSend: () => setDraft(""), placeholder: "Message", sendLabel: "Send" })
19
+ ] });
20
+ }
21
+ export {
22
+ NativeChatConversation as default
23
+ };
@@ -0,0 +1,20 @@
1
+ import { MessageBubble, MessageComposer, TypingIndicator } from "@krizaka/ui/native";
2
+ import { useState } from "react";
3
+ import { View } from "react-native";
4
+
5
+ // A conversation: runs grouped, the time inside, the receipt under the last of yours, the typing dots, the composer.
6
+ export default function NativeChatConversation() {
7
+ const [draft, setDraft] = useState("");
8
+ return (
9
+ <View style={{ width: 360, gap: 4 }}>
10
+ <View style={{ padding: 12, gap: 4 }}>
11
+ <MessageBubble text="Hey! Loved your sunset photo 🌅" time="19:02" grouped="first" />
12
+ <MessageBubble text="Was it Cabo da Roca?" time="19:02" grouped="last" />
13
+ <MessageBubble mine text="It was! Have you been?" time="19:05" grouped="first" />
14
+ <MessageBubble mine text="We should go this weekend" time="19:05" grouped="last" status="read" showStatus labels={{ status: { read: "Read" } }} />
15
+ <TypingIndicator label="Elena is typing" />
16
+ </View>
17
+ <MessageComposer value={draft} onValueChange={setDraft} onSend={() => setDraft("")} placeholder="Message" sendLabel="Send" />
18
+ </View>
19
+ );
20
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,16 @@
1
+ "use client";
2
+
3
+ // registry/examples/chat/native/inbox.tsx
4
+ import { ConversationItem } from "@krizaka/ui/native";
5
+ import { View } from "react-native";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ function NativeChatInbox() {
8
+ return /* @__PURE__ */ jsxs(View, { style: { width: 360 }, children: [
9
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Elena", presence: "online", presenceLabel: "online", preview: "typing\u2026", typing: true, time: "19:06", unread: 2, unreadLabel: "2 unread" }),
10
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Noah", presence: "away", presenceLabel: "away", preview: "See you Saturday then!", time: "Mon" }),
11
+ /* @__PURE__ */ jsx(ConversationItem, { name: "Mina", preview: "You: haha same", time: "Sun" })
12
+ ] });
13
+ }
14
+ export {
15
+ NativeChatInbox as default
16
+ };
@@ -0,0 +1,13 @@
1
+ import { ConversationItem } from "@krizaka/ui/native";
2
+ import { View } from "react-native";
3
+
4
+ // The inbox: presence, the last message or “typing…”, the time, the unread count.
5
+ export default function NativeChatInbox() {
6
+ return (
7
+ <View style={{ width: 360 }}>
8
+ <ConversationItem name="Elena" presence="online" presenceLabel="online" preview="typing…" typing time="19:06" unread={2} unreadLabel="2 unread" />
9
+ <ConversationItem name="Noah" presence="away" presenceLabel="away" preview="See you Saturday then!" time="Mon" />
10
+ <ConversationItem name="Mina" preview="You: haha same" time="Sun" />
11
+ </View>
12
+ );
13
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,37 @@
1
+ "use client";
2
+
3
+ // registry/examples/detail-layout/checkout.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { Chip } from "@krizaka/ui/chip";
6
+ import { DetailLayout } from "@krizaka/ui/detail-layout";
7
+ import { Field, Textarea } from "@krizaka/ui/field";
8
+ import { Stat } from "@krizaka/ui/stat";
9
+ import * as React from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ var AMOUNTS = [3, 5, 10, 20];
12
+ function DetailLayoutCheckout() {
13
+ const [amount, setAmount] = React.useState("5");
14
+ return /* @__PURE__ */ jsx("div", { className: "brand-orochia w-full", children: /* @__PURE__ */ jsx(
15
+ DetailLayout,
16
+ {
17
+ back: /* @__PURE__ */ jsx("a", { href: "#elena", children: "\u2190 Elena's page" }),
18
+ eyebrow: "Tip",
19
+ title: "Say thanks to Elena",
20
+ meta: "She keeps 90 %. Paid out every Monday.",
21
+ aside: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-4 rounded-xl border border-border-default bg-surface-1 p-4", children: [
22
+ /* @__PURE__ */ jsx(Stat, { label: "You pay", value: `\u20AC${amount}`, hint: "no fee added on top" }),
23
+ /* @__PURE__ */ jsx(Button, { variant: "primary", shape: "cut", className: "w-full", children: `Tip \u20AC${amount}` })
24
+ ] }),
25
+ children: /* @__PURE__ */ jsxs("form", { className: "flex max-w-lg flex-col gap-5", onSubmit: (e) => e.preventDefault(), children: [
26
+ /* @__PURE__ */ jsx(Chip.Group, { type: "single", label: "Amount", value: amount, onValueChange: (v) => v && setAmount(v), required: true, children: AMOUNTS.map((a) => /* @__PURE__ */ jsx(Chip, { value: String(a), children: `\u20AC${a}` }, a)) }),
27
+ /* @__PURE__ */ jsxs(Field.Root, { children: [
28
+ /* @__PURE__ */ jsx(Field.Label, { htmlFor: "note", children: "A word for her (optional)" }),
29
+ /* @__PURE__ */ jsx(Textarea, { id: "note", rows: 3, placeholder: "The rooftop scene was incredible." })
30
+ ] })
31
+ ] })
32
+ }
33
+ ) });
34
+ }
35
+ export {
36
+ DetailLayoutCheckout as default
37
+ };
@@ -0,0 +1,44 @@
1
+ "use client";
2
+
3
+ import { Button } from "@krizaka/ui/button";
4
+ import { Chip } from "@krizaka/ui/chip";
5
+ import { DetailLayout } from "@krizaka/ui/detail-layout";
6
+ import { Field, Textarea } from "@krizaka/ui/field";
7
+ import { Stat } from "@krizaka/ui/stat";
8
+ import * as React from "react";
9
+
10
+ const AMOUNTS = [3, 5, 10, 20];
11
+
12
+ // TEMPLATE — tipping a creator (Orochia): who is paid, the amount in one tap, an optional word, the summary beside the
13
+ // action — under the form on a phone, where the pay button stays last. The total is always said before the button.
14
+ export default function DetailLayoutCheckout() {
15
+ const [amount, setAmount] = React.useState("5");
16
+ return (
17
+ <div className="brand-orochia w-full">
18
+ <DetailLayout
19
+ back={<a href="#elena">← Elena's page</a>}
20
+ eyebrow="Tip"
21
+ title="Say thanks to Elena"
22
+ meta="She keeps 90 %. Paid out every Monday."
23
+ aside={
24
+ <div className="flex flex-col gap-4 rounded-xl border border-border-default bg-surface-1 p-4">
25
+ <Stat label="You pay" value={`€${amount}`} hint="no fee added on top" />
26
+ <Button variant="primary" shape="cut" className="w-full">{`Tip €${amount}`}</Button>
27
+ </div>
28
+ }
29
+ >
30
+ <form className="flex max-w-lg flex-col gap-5" onSubmit={(e) => e.preventDefault()}>
31
+ <Chip.Group type="single" label="Amount" value={amount} onValueChange={(v) => v && setAmount(v)} required>
32
+ {AMOUNTS.map((a) => (
33
+ <Chip key={a} value={String(a)}>{`€${a}`}</Chip>
34
+ ))}
35
+ </Chip.Group>
36
+ <Field.Root>
37
+ <Field.Label htmlFor="note">A word for her (optional)</Field.Label>
38
+ <Textarea id="note" rows={3} placeholder="The rooftop scene was incredible." />
39
+ </Field.Root>
40
+ </form>
41
+ </DetailLayout>
42
+ </div>
43
+ );
44
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,31 @@
1
+ "use client";
2
+
3
+ // registry/examples/docs-article-page/faq.tsx
4
+ import { DocsArticlePage } from "@krizaka/ui/docs-article-page";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ var QUESTIONS = [
7
+ { id: "cloud", q: "Does anything leave my server?", a: "No. Requests are answered by models on your machine; the only calls out are the ones you configure yourself." },
8
+ { id: "models", q: "Which models can I run?", a: "Any model your hardware can hold. Orazaka lists the ones that fit before you download them." },
9
+ { id: "price", q: "How is it priced?", a: "A plan with a monthly credit allowance. Credits are spent per job, and what is left is always shown." }
10
+ ];
11
+ function DocsArticlePageFaq() {
12
+ return /* @__PURE__ */ jsx(
13
+ DocsArticlePage,
14
+ {
15
+ className: "brand-orazaka pt-6",
16
+ sidebarLabel: "Pages of the documentation",
17
+ sidebar: /* @__PURE__ */ jsx("nav", { "aria-label": "Orazaka documentation", children: /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-1 text-sm", children: ["Getting started", "The CLI", "Questions"].map((p) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", { href: `#${p}`, "aria-current": p === "Questions" ? "page" : void 0, className: "block rounded-md px-3 py-2 text-fg-secondary no-underline hover:bg-surface-2 aria-[current=page]:bg-accent-soft aria-[current=page]:text-fg", children: p }) }, p)) }) }),
18
+ breadcrumb: [{ href: "#docs", label: "Docs" }, { href: "#orazaka", label: "Orazaka" }],
19
+ title: "Questions, answered",
20
+ lead: "What people ask before they install.",
21
+ toc: { label: "Questions", items: QUESTIONS.map((x) => ({ id: x.id, label: x.q })) },
22
+ children: QUESTIONS.map((x) => /* @__PURE__ */ jsxs("details", { id: x.id, className: "group border-b border-border-subtle py-3", children: [
23
+ /* @__PURE__ */ jsx("summary", { className: "cursor-pointer rounded-md py-1 font-semibold text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring", children: x.q }),
24
+ /* @__PURE__ */ jsx("p", { className: "mt-2 text-fg-secondary", children: x.a })
25
+ ] }, x.id))
26
+ }
27
+ );
28
+ }
29
+ export {
30
+ DocsArticlePageFaq as default
31
+ };
@@ -0,0 +1,40 @@
1
+ import { DocsArticlePage } from "@krizaka/ui/docs-article-page";
2
+
3
+ const QUESTIONS = [
4
+ { id: "cloud", q: "Does anything leave my server?", a: "No. Requests are answered by models on your machine; the only calls out are the ones you configure yourself." },
5
+ { id: "models", q: "Which models can I run?", a: "Any model your hardware can hold. Orazaka lists the ones that fit before you download them." },
6
+ { id: "price", q: "How is it priced?", a: "A plan with a monthly credit allowance. Credits are spent per job, and what is left is always shown." },
7
+ ];
8
+
9
+ // TEMPLATE — a FAQ: the questions as a list of disclosures, each answer one short paragraph, the contents beside them.
10
+ // Open by the address (`#price`), reachable by keyboard; one column on a phone.
11
+ export default function DocsArticlePageFaq() {
12
+ return (
13
+ <DocsArticlePage
14
+ className="brand-orazaka pt-6"
15
+ sidebarLabel="Pages of the documentation"
16
+ sidebar={
17
+ <nav aria-label="Orazaka documentation">
18
+ <ul className="flex flex-col gap-1 text-sm">
19
+ {["Getting started", "The CLI", "Questions"].map((p) => (
20
+ <li key={p}>
21
+ <a href={`#${p}`} aria-current={p === "Questions" ? "page" : undefined} className="block rounded-md px-3 py-2 text-fg-secondary no-underline hover:bg-surface-2 aria-[current=page]:bg-accent-soft aria-[current=page]:text-fg">{p}</a>
22
+ </li>
23
+ ))}
24
+ </ul>
25
+ </nav>
26
+ }
27
+ breadcrumb={[{ href: "#docs", label: "Docs" }, { href: "#orazaka", label: "Orazaka" }]}
28
+ title="Questions, answered"
29
+ lead="What people ask before they install."
30
+ toc={{ label: "Questions", items: QUESTIONS.map((x) => ({ id: x.id, label: x.q })) }}
31
+ >
32
+ {QUESTIONS.map((x) => (
33
+ <details key={x.id} id={x.id} className="group border-b border-border-subtle py-3">
34
+ <summary className="cursor-pointer rounded-md py-1 font-semibold text-fg focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring">{x.q}</summary>
35
+ <p className="mt-2 text-fg-secondary">{x.a}</p>
36
+ </details>
37
+ ))}
38
+ </DocsArticlePage>
39
+ );
40
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,25 @@
1
+ "use client";
2
+
3
+ // registry/examples/empty-state/library.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { EmptyState } from "@krizaka/ui/empty-state";
6
+ import { Mascot } from "@krizaka/ui/mascots";
7
+ import { Page } from "@krizaka/ui/page";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ function EmptyStateLibrary() {
10
+ return /* @__PURE__ */ jsxs(Page, { className: "brand-orochia", children: [
11
+ /* @__PURE__ */ jsx("h1", { className: "font-display text-2xl font-extrabold tracking-tight text-fg", children: "Library" }),
12
+ /* @__PURE__ */ jsx(
13
+ EmptyState,
14
+ {
15
+ icon: /* @__PURE__ */ jsx(Mascot, { bird: "flamingo", mood: "empty", size: 96 }),
16
+ title: "Nothing here yet",
17
+ description: "Your videos, once published, wait here with their sales. The first one takes about ten minutes.",
18
+ action: /* @__PURE__ */ jsx(Button, { variant: "primary", shape: "cut", children: "Publish a first video" })
19
+ }
20
+ )
21
+ ] });
22
+ }
23
+ export {
24
+ EmptyStateLibrary as default
25
+ };
@@ -0,0 +1,20 @@
1
+ import { Button } from "@krizaka/ui/button";
2
+ import { EmptyState } from "@krizaka/ui/empty-state";
3
+ import { Mascot } from "@krizaka/ui/mascots";
4
+ import { Page } from "@krizaka/ui/page";
5
+
6
+ // TEMPLATE — a page with nothing in it yet (a creator's library): the page keeps its title and place, the bird says it is
7
+ // empty, one sentence tells what will fill it, one button does the first thing. Never a blank screen.
8
+ export default function EmptyStateLibrary() {
9
+ return (
10
+ <Page className="brand-orochia">
11
+ <h1 className="font-display text-2xl font-extrabold tracking-tight text-fg">Library</h1>
12
+ <EmptyState
13
+ icon={<Mascot bird="flamingo" mood="empty" size={96} />}
14
+ title="Nothing here yet"
15
+ description="Your videos, once published, wait here with their sales. The first one takes about ten minutes."
16
+ action={<Button variant="primary" shape="cut">Publish a first video</Button>}
17
+ />
18
+ </Page>
19
+ );
20
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+
3
+ // registry/examples/loader/branded.tsx
4
+ import { OrochiaLogo } from "@krizaka/ui";
5
+ import { Loader } from "@krizaka/ui/loader";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function LoaderBranded() {
8
+ return /* @__PURE__ */ jsx(Loader, { label: "Loading your videos", delay: 0, variant: "block", mark: /* @__PURE__ */ jsx(OrochiaLogo, { animated: true }) });
9
+ }
10
+ export {
11
+ LoaderBranded as default
12
+ };
@@ -0,0 +1,7 @@
1
+ import { OrochiaLogo } from "@krizaka/ui";
2
+ import { Loader } from "@krizaka/ui/loader";
3
+
4
+ // The product's mark in place of the Krizaka glyph: Orochia waits with its own animated mark. Words, delay and ending stay.
5
+ export default function LoaderBranded() {
6
+ return <Loader label="Loading your videos" delay={0} variant="block" mark={<OrochiaLogo animated />} />;
7
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,12 @@
1
+ "use client";
2
+
3
+ // registry/examples/loader/native/branded.tsx
4
+ import { Loader } from "@krizaka/ui/native";
5
+ import { View } from "react-native";
6
+ import { jsx } from "react/jsx-runtime";
7
+ function NativeLoaderBranded() {
8
+ return /* @__PURE__ */ jsx(View, { style: { width: 340 }, children: /* @__PURE__ */ jsx(Loader, { label: "Loading your videos", product: "orochia", variant: "block", delay: 0 }) });
9
+ }
10
+ export {
11
+ NativeLoaderBranded as default
12
+ };
@@ -0,0 +1,11 @@
1
+ import { Loader } from "@krizaka/ui/native";
2
+ import { View } from "react-native";
3
+
4
+ // The app's own mark waits for you: the animated `ProductMark` of Orochia, still when the system reduces motion.
5
+ export default function NativeLoaderBranded() {
6
+ return (
7
+ <View style={{ width: 340 }}>
8
+ <Loader label="Loading your videos" product="orochia" variant="block" delay={0} />
9
+ </View>
10
+ );
11
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,41 @@
1
+ "use client";
2
+
3
+ // registry/examples/longform-page/case-study.tsx
4
+ import { LongformPage } from "@krizaka/ui/longform-page";
5
+ import { Stat } from "@krizaka/ui/stat";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ function LongformPageCaseStudy() {
8
+ return /* @__PURE__ */ jsx(
9
+ LongformPage,
10
+ {
11
+ brand: "orazaka",
12
+ eyebrow: "Case study \xB7 Notary",
13
+ title: "Eleven leases a day, none of them leaving the office",
14
+ lead: "A four-person firm in Laval summarises contracts with its own AI, on its own server.",
15
+ chapters: [
16
+ {
17
+ id: "before",
18
+ title: "Before",
19
+ pull: "The summary took twenty minutes. The cloud tools took the lease with them.",
20
+ children: /* @__PURE__ */ jsx("p", { children: "Each lease was read twice by hand. Pasting it into a public chatbot was faster, and not an option." })
21
+ },
22
+ {
23
+ id: "after",
24
+ title: "What changed",
25
+ children: /* @__PURE__ */ jsxs(Fragment, { children: [
26
+ /* @__PURE__ */ jsx("p", { children: "Orazaka runs on a Mac mini in the back room. A pack reads the lease and drafts the summary; the notary signs it." }),
27
+ /* @__PURE__ */ jsx("p", { children: "Nothing is sent outside the building, and every request is logged for the audit." })
28
+ ] }),
29
+ figure: /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-3", children: [
30
+ /* @__PURE__ */ jsx(Stat, { label: "Per lease", value: "2 min", trend: "down", trendLabel: "was 20 min" }),
31
+ /* @__PURE__ */ jsx(Stat, { label: "Sent outside", value: "0", hint: "all answered locally" }),
32
+ /* @__PURE__ */ jsx(Stat, { label: "Hours a week", value: "14", trend: "up", trendLabel: "given back" })
33
+ ] })
34
+ }
35
+ ]
36
+ }
37
+ );
38
+ }
39
+ export {
40
+ LongformPageCaseStudy as default
41
+ };
@@ -0,0 +1,40 @@
1
+ import { LongformPage } from "@krizaka/ui/longform-page";
2
+ import { Stat } from "@krizaka/ui/stat";
3
+
4
+ // TEMPLATE — a case study (a notary's office on Orazaka): the situation, what was done, the figures that prove it. Chapters
5
+ // in a reading column, the result as a figure that breaks out of the column; one column on a phone.
6
+ export default function LongformPageCaseStudy() {
7
+ return (
8
+ <LongformPage
9
+ brand="orazaka"
10
+ eyebrow="Case study · Notary"
11
+ title="Eleven leases a day, none of them leaving the office"
12
+ lead="A four-person firm in Laval summarises contracts with its own AI, on its own server."
13
+ chapters={[
14
+ {
15
+ id: "before",
16
+ title: "Before",
17
+ pull: "The summary took twenty minutes. The cloud tools took the lease with them.",
18
+ children: <p>Each lease was read twice by hand. Pasting it into a public chatbot was faster, and not an option.</p>,
19
+ },
20
+ {
21
+ id: "after",
22
+ title: "What changed",
23
+ children: (
24
+ <>
25
+ <p>Orazaka runs on a Mac mini in the back room. A pack reads the lease and drafts the summary; the notary signs it.</p>
26
+ <p>Nothing is sent outside the building, and every request is logged for the audit.</p>
27
+ </>
28
+ ),
29
+ figure: (
30
+ <div className="grid grid-cols-1 gap-4 sm:grid-cols-3">
31
+ <Stat label="Per lease" value="2 min" trend="down" trendLabel="was 20 min" />
32
+ <Stat label="Sent outside" value="0" hint="all answered locally" />
33
+ <Stat label="Hours a week" value="14" trend="up" trendLabel="given back" />
34
+ </div>
35
+ ),
36
+ },
37
+ ]}
38
+ />
39
+ );
40
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,29 @@
1
+ "use client";
2
+
3
+ // registry/examples/match-dialog/its-a-match.tsx
4
+ import { Button } from "@krizaka/ui/button";
5
+ import { MatchDialog } from "@krizaka/ui/match-dialog";
6
+ import { useState } from "react";
7
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ function MatchDialogItsAMatch({ defaultOpen = false }) {
9
+ const [open, setOpen] = useState(defaultOpen);
10
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
11
+ /* @__PURE__ */ jsx(Button, { onClick: () => setOpen(true), children: "Like Elena" }),
12
+ /* @__PURE__ */ jsx(
13
+ MatchDialog,
14
+ {
15
+ open,
16
+ onOpenChange: setOpen,
17
+ title: "It's a match!",
18
+ description: "You and Elena liked each other.",
19
+ people: [{ name: "You" }, { name: "Elena" }],
20
+ primaryLabel: "Send a message",
21
+ onPrimary: () => void 0,
22
+ secondaryLabel: "Keep swiping"
23
+ }
24
+ )
25
+ ] });
26
+ }
27
+ export {
28
+ MatchDialogItsAMatch as default
29
+ };
@@ -0,0 +1,25 @@
1
+ "use client";
2
+
3
+ import { Button } from "@krizaka/ui/button";
4
+ import { MatchDialog } from "@krizaka/ui/match-dialog";
5
+ import { useState } from "react";
6
+
7
+ // Two people liked each other: the next step is a message.
8
+ export default function MatchDialogItsAMatch({ defaultOpen = false }: { defaultOpen?: boolean }) {
9
+ const [open, setOpen] = useState(defaultOpen);
10
+ return (
11
+ <>
12
+ <Button onClick={() => setOpen(true)}>Like Elena</Button>
13
+ <MatchDialog
14
+ open={open}
15
+ onOpenChange={setOpen}
16
+ title="It's a match!"
17
+ description="You and Elena liked each other."
18
+ people={[{ name: "You" }, { name: "Elena" }]}
19
+ primaryLabel="Send a message"
20
+ onPrimary={() => undefined}
21
+ secondaryLabel="Keep swiping"
22
+ />
23
+ </>
24
+ );
25
+ }
@@ -0,0 +1,4 @@
1
+ import type { ComponentType } from "react";
2
+ /** A named example of the @krizaka/ui registry; `defaultOpen` opens what it opens (a dialog, a menu, toasts) at load. */
3
+ declare const Example: ComponentType<{ defaultOpen?: boolean }>;
4
+ export default Example;
@@ -0,0 +1,28 @@
1
+ "use client";
2
+
3
+ // registry/examples/match-dialog/native/its-a-match.tsx
4
+ import { Button, MatchDialog } from "@krizaka/ui/native";
5
+ import { useState } from "react";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ function NativeMatchDialogItsAMatch({ defaultOpen = false }) {
8
+ const [open, setOpen] = useState(defaultOpen);
9
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
10
+ /* @__PURE__ */ jsx(Button, { label: "Like Elena", onPress: () => setOpen(true) }),
11
+ /* @__PURE__ */ jsx(
12
+ MatchDialog,
13
+ {
14
+ open,
15
+ onOpenChange: setOpen,
16
+ title: "It's a match!",
17
+ description: "You and Elena liked each other.",
18
+ people: [{ name: "You" }, { name: "Elena" }],
19
+ primaryLabel: "Send a message",
20
+ onPrimary: () => void 0,
21
+ secondaryLabel: "Keep swiping"
22
+ }
23
+ )
24
+ ] });
25
+ }
26
+ export {
27
+ NativeMatchDialogItsAMatch as default
28
+ };