@krizaka/ui 2.9.0 → 3.0.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 (307) hide show
  1. package/README.md +44 -6
  2. package/dist/audio-player.js +1 -1
  3. package/dist/blocks.css +247 -0
  4. package/dist/catalogue-page.d.ts +34 -0
  5. package/dist/catalogue-page.js +26 -0
  6. package/dist/catalogue-page.js.map +1 -0
  7. package/dist/changelog-page.d.ts +50 -0
  8. package/dist/changelog-page.js +27 -0
  9. package/dist/changelog-page.js.map +1 -0
  10. package/dist/{chunk-EUPTXKH7.js → chunk-BRKMQ6JV.js} +2 -1
  11. package/dist/chunk-FDCMBWUU.js +168 -0
  12. package/dist/chunk-FDCMBWUU.js.map +1 -0
  13. package/dist/chunk-HCNOOPZE.js +210 -0
  14. package/dist/chunk-HCNOOPZE.js.map +1 -0
  15. package/dist/{chunk-NOVUREEC.js → chunk-JZPVUJIX.js} +25 -3
  16. package/dist/chunk-JZPVUJIX.js.map +1 -0
  17. package/dist/chunk-KNBYZGSQ.js +11 -0
  18. package/dist/chunk-KNBYZGSQ.js.map +1 -0
  19. package/dist/{chunk-X6TW3X6Y.js → chunk-LCZXS6AK.js} +2 -2
  20. package/dist/chunk-OGJI5X4W.js +157 -0
  21. package/dist/chunk-OGJI5X4W.js.map +1 -0
  22. package/dist/combobox.js +2 -2
  23. package/dist/component-page.d.ts +41 -0
  24. package/dist/component-page.js +17 -0
  25. package/dist/component-page.js.map +1 -0
  26. package/dist/contact-page.d.ts +31 -0
  27. package/dist/contact-page.js +26 -0
  28. package/dist/contact-page.js.map +1 -0
  29. package/dist/data-table.d.ts +284 -24
  30. package/dist/data-table.js +914 -121
  31. package/dist/data-table.js.map +1 -1
  32. package/dist/date-picker.js +1 -1
  33. package/dist/docs-article-page.d.ts +54 -0
  34. package/dist/docs-article-page.js +29 -0
  35. package/dist/docs-article-page.js.map +1 -0
  36. package/dist/docs-hub-page.d.ts +72 -0
  37. package/dist/docs-hub-page.js +45 -0
  38. package/dist/docs-hub-page.js.map +1 -0
  39. package/dist/error-page.d.ts +22 -0
  40. package/dist/error-page.js +23 -0
  41. package/dist/error-page.js.map +1 -0
  42. package/dist/filter-bar.d.ts +12 -12
  43. package/dist/filter-bar.js +9 -145
  44. package/dist/filter-bar.js.map +1 -1
  45. package/dist/gallery-page.d.ts +50 -0
  46. package/dist/gallery-page.js +30 -0
  47. package/dist/gallery-page.js.map +1 -0
  48. package/dist/{geometry-CXrAW34x.d.ts → geometry-CbOU4rtL.d.ts} +4 -4
  49. package/dist/how-it-works-page.d.ts +48 -0
  50. package/dist/how-it-works-page.js +28 -0
  51. package/dist/how-it-works-page.js.map +1 -0
  52. package/dist/image-cropper.js +1 -1
  53. package/dist/index.d.ts +11 -2
  54. package/dist/index.js +93 -5
  55. package/dist/index.js.map +1 -1
  56. package/dist/landing-page.d.ts +58 -0
  57. package/dist/landing-page.js +42 -0
  58. package/dist/landing-page.js.map +1 -0
  59. package/dist/legal-page.d.ts +34 -0
  60. package/dist/legal-page.js +18 -0
  61. package/dist/legal-page.js.map +1 -0
  62. package/dist/longform-page.d.ts +42 -0
  63. package/dist/longform-page.js +29 -0
  64. package/dist/longform-page.js.map +1 -0
  65. package/dist/mascot-quote.d.ts +4 -4
  66. package/dist/mascot-quote.js +23 -1
  67. package/dist/mascot-quote.js.map +1 -1
  68. package/dist/mascot-state.d.ts +2 -2
  69. package/dist/mascot-state.js +1 -1
  70. package/dist/mascot-state.js.map +1 -1
  71. package/dist/mascots.d.ts +4 -4
  72. package/dist/mascots.js +1 -1
  73. package/dist/media-capture.js +1 -1
  74. package/dist/native/list.d.ts +95 -0
  75. package/dist/native/list.js +135 -0
  76. package/dist/native/list.js.map +1 -0
  77. package/dist/native.d.ts +16 -9
  78. package/dist/native.js +183 -74
  79. package/dist/native.js.map +1 -1
  80. package/dist/pricing-page.d.ts +62 -0
  81. package/dist/pricing-page.js +71 -0
  82. package/dist/pricing-page.js.map +1 -0
  83. package/dist/product-page.d.ts +83 -0
  84. package/dist/product-page.js +60 -0
  85. package/dist/product-page.js.map +1 -0
  86. package/dist/search-field.js +6 -160
  87. package/dist/search-field.js.map +1 -1
  88. package/dist/status-page.d.ts +42 -0
  89. package/dist/status-page.js +28 -0
  90. package/dist/status-page.js.map +1 -0
  91. package/dist/tag-input.js +2 -2
  92. package/dist/video-player.js +1 -1
  93. package/dist/video-trimmer.js +1 -1
  94. package/dist/virtual.d.ts +140 -0
  95. package/dist/virtual.js +19 -0
  96. package/dist/virtual.js.map +1 -0
  97. package/package.json +296 -10
  98. package/registry/achievement.json +1 -1
  99. package/registry/action-bar.json +1 -1
  100. package/registry/alert.json +1 -1
  101. package/registry/app-shell.json +1 -1
  102. package/registry/argument-card.json +1 -1
  103. package/registry/audio-player.json +1 -1
  104. package/registry/auth-layout.json +1 -1
  105. package/registry/avatar.json +1 -1
  106. package/registry/badge.json +1 -1
  107. package/registry/button.json +1 -1
  108. package/registry/card-grid.json +1 -1
  109. package/registry/card.json +1 -1
  110. package/registry/catalogue-page.json +240 -0
  111. package/registry/changelog-page.json +226 -0
  112. package/registry/checkbox.json +1 -1
  113. package/registry/chip-link.json +1 -1
  114. package/registry/chip.json +1 -1
  115. package/registry/choice-grid.json +1 -1
  116. package/registry/code-block.json +1 -1
  117. package/registry/combobox.json +1 -1
  118. package/registry/command.json +1 -1
  119. package/registry/component-page.json +227 -0
  120. package/registry/confirm-button.json +1 -1
  121. package/registry/contact-page.json +212 -0
  122. package/registry/continue-prompt.json +1 -1
  123. package/registry/countdown.json +1 -1
  124. package/registry/cta-panel.json +1 -1
  125. package/registry/dashboard-layout.json +1 -1
  126. package/registry/data-table.json +643 -49
  127. package/registry/date-picker.json +1 -1
  128. package/registry/decision-list.json +1 -1
  129. package/registry/detail-layout.json +1 -1
  130. package/registry/dialog.json +1 -1
  131. package/registry/docs-article-page.json +242 -0
  132. package/registry/docs-hub-page.json +270 -0
  133. package/registry/docs-layout.json +1 -1
  134. package/registry/dropdown-menu.json +1 -1
  135. package/registry/empty-state.json +1 -1
  136. package/registry/error-page.json +183 -0
  137. package/registry/examples/catalogue-page/components.d.ts +4 -0
  138. package/registry/examples/catalogue-page/components.js +33 -0
  139. package/registry/examples/catalogue-page/components.tsx +36 -0
  140. package/registry/examples/changelog-page/releases.d.ts +4 -0
  141. package/registry/examples/changelog-page/releases.js +44 -0
  142. package/registry/examples/changelog-page/releases.tsx +39 -0
  143. package/registry/examples/component-page/button.d.ts +4 -0
  144. package/registry/examples/component-page/button.js +33 -0
  145. package/registry/examples/component-page/button.tsx +30 -0
  146. package/registry/examples/contact-page/team.d.ts +4 -0
  147. package/registry/examples/contact-page/team.js +39 -0
  148. package/registry/examples/contact-page/team.tsx +38 -0
  149. package/registry/examples/data-table/details.d.ts +4 -0
  150. package/registry/examples/data-table/details.js +33 -0
  151. package/registry/examples/data-table/details.tsx +31 -0
  152. package/registry/examples/data-table/filters.d.ts +4 -0
  153. package/registry/examples/data-table/filters.js +40 -0
  154. package/registry/examples/data-table/filters.tsx +40 -0
  155. package/registry/examples/data-table/grouped.d.ts +4 -0
  156. package/registry/examples/data-table/grouped.js +24 -0
  157. package/registry/examples/data-table/grouped.tsx +23 -0
  158. package/registry/examples/data-table/paginated.d.ts +4 -0
  159. package/registry/examples/data-table/paginated.js +23 -0
  160. package/registry/examples/data-table/paginated.tsx +22 -0
  161. package/registry/examples/data-table/pinned.d.ts +4 -0
  162. package/registry/examples/data-table/pinned.js +26 -0
  163. package/registry/examples/data-table/pinned.tsx +25 -0
  164. package/registry/examples/data-table/server.d.ts +4 -0
  165. package/registry/examples/data-table/server.js +40 -0
  166. package/registry/examples/data-table/server.tsx +40 -0
  167. package/registry/examples/data-table/virtualized.js +2 -2
  168. package/registry/examples/data-table/virtualized.tsx +3 -3
  169. package/registry/examples/docs-article-page/cli.d.ts +4 -0
  170. package/registry/examples/docs-article-page/cli.js +33 -0
  171. package/registry/examples/docs-article-page/cli.tsx +38 -0
  172. package/registry/examples/docs-hub-page/krizaka.d.ts +4 -0
  173. package/registry/examples/docs-hub-page/krizaka.js +46 -0
  174. package/registry/examples/docs-hub-page/krizaka.tsx +37 -0
  175. package/registry/examples/error-page/not-found.d.ts +4 -0
  176. package/registry/examples/error-page/not-found.js +24 -0
  177. package/registry/examples/error-page/not-found.tsx +19 -0
  178. package/registry/examples/gallery-page/made-here.d.ts +4 -0
  179. package/registry/examples/gallery-page/made-here.js +34 -0
  180. package/registry/examples/gallery-page/made-here.tsx +32 -0
  181. package/registry/examples/how-it-works-page/orazaka.d.ts +4 -0
  182. package/registry/examples/how-it-works-page/orazaka.js +30 -0
  183. package/registry/examples/how-it-works-page/orazaka.tsx +26 -0
  184. package/registry/examples/landing-page/krizaka.d.ts +4 -0
  185. package/registry/examples/landing-page/krizaka.js +44 -0
  186. package/registry/examples/landing-page/krizaka.tsx +44 -0
  187. package/registry/examples/legal-page/privacy.d.ts +4 -0
  188. package/registry/examples/legal-page/privacy.js +24 -0
  189. package/registry/examples/legal-page/privacy.tsx +19 -0
  190. package/registry/examples/list/native/default.d.ts +4 -0
  191. package/registry/examples/list/native/default.dark.png +0 -0
  192. package/registry/examples/list/native/default.js +33 -0
  193. package/registry/examples/list/native/default.light.png +0 -0
  194. package/registry/examples/list/native/default.tsx +31 -0
  195. package/registry/examples/list/native/infinite.d.ts +4 -0
  196. package/registry/examples/list/native/infinite.dark.png +0 -0
  197. package/registry/examples/list/native/infinite.js +30 -0
  198. package/registry/examples/list/native/infinite.light.png +0 -0
  199. package/registry/examples/list/native/infinite.tsx +35 -0
  200. package/registry/examples/list/native/states.d.ts +4 -0
  201. package/registry/examples/list/native/states.dark.png +0 -0
  202. package/registry/examples/list/native/states.js +26 -0
  203. package/registry/examples/list/native/states.light.png +0 -0
  204. package/registry/examples/list/native/states.tsx +21 -0
  205. package/registry/examples/longform-page/story.d.ts +4 -0
  206. package/registry/examples/longform-page/story.js +38 -0
  207. package/registry/examples/longform-page/story.tsx +35 -0
  208. package/registry/examples/mascots/crane.d.ts +4 -0
  209. package/registry/examples/mascots/crane.js +19 -0
  210. package/registry/examples/mascots/crane.tsx +18 -0
  211. package/registry/examples/mascots/flock.tsx +2 -1
  212. package/registry/examples/mascots/native/crane.d.ts +4 -0
  213. package/registry/examples/mascots/native/crane.dark.png +0 -0
  214. package/registry/examples/mascots/native/crane.js +21 -0
  215. package/registry/examples/mascots/native/crane.light.png +0 -0
  216. package/registry/examples/mascots/native/crane.tsx +18 -0
  217. package/registry/examples/pricing-page/credits.d.ts +4 -0
  218. package/registry/examples/pricing-page/credits.js +41 -0
  219. package/registry/examples/pricing-page/credits.tsx +33 -0
  220. package/registry/examples/product-page/orazaka.d.ts +4 -0
  221. package/registry/examples/product-page/orazaka.js +44 -0
  222. package/registry/examples/product-page/orazaka.tsx +36 -0
  223. package/registry/examples/status-page/building.d.ts +4 -0
  224. package/registry/examples/status-page/building.js +29 -0
  225. package/registry/examples/status-page/building.tsx +25 -0
  226. package/registry/examples/status-page/operational.d.ts +4 -0
  227. package/registry/examples/status-page/operational.js +26 -0
  228. package/registry/examples/status-page/operational.tsx +20 -0
  229. package/registry/examples/virtual/feed.d.ts +4 -0
  230. package/registry/examples/virtual/feed.js +26 -0
  231. package/registry/examples/virtual/feed.tsx +24 -0
  232. package/registry/examples/virtual/gallery.d.ts +4 -0
  233. package/registry/examples/virtual/gallery.js +31 -0
  234. package/registry/examples/virtual/gallery.tsx +28 -0
  235. package/registry/examples/virtual/messages.d.ts +4 -0
  236. package/registry/examples/virtual/messages.js +28 -0
  237. package/registry/examples/virtual/messages.tsx +28 -0
  238. package/registry/field.json +1 -1
  239. package/registry/file-upload.json +1 -1
  240. package/registry/filter-bar.json +1 -1
  241. package/registry/gallery-page.json +256 -0
  242. package/registry/glow-card.json +1 -1
  243. package/registry/goal-gauge.json +1 -1
  244. package/registry/how-it-works-page.json +242 -0
  245. package/registry/image-cropper.json +1 -1
  246. package/registry/index.json +356 -9
  247. package/registry/iso.json +1 -1
  248. package/registry/kbd.json +1 -1
  249. package/registry/landing-page.json +242 -0
  250. package/registry/landscape.json +1 -1
  251. package/registry/legal-page.json +199 -0
  252. package/registry/link-card.json +1 -1
  253. package/registry/list.json +249 -0
  254. package/registry/loader.json +1 -1
  255. package/registry/longform-page.json +213 -0
  256. package/registry/marketing-layout.json +1 -1
  257. package/registry/marquee.json +1 -1
  258. package/registry/mascot-quote.json +6 -6
  259. package/registry/mascot-state.json +34 -34
  260. package/registry/mascots.json +41 -21
  261. package/registry/media-capture.json +1 -1
  262. package/registry/meter.json +1 -1
  263. package/registry/nav-bar.json +1 -1
  264. package/registry/number-ticker.json +1 -1
  265. package/registry/page-header.json +1 -1
  266. package/registry/page-hero.json +1 -1
  267. package/registry/page.json +1 -1
  268. package/registry/pagination.json +1 -1
  269. package/registry/pointer-light.json +1 -1
  270. package/registry/popover.json +1 -1
  271. package/registry/pricing-page.json +245 -0
  272. package/registry/product-page.json +319 -0
  273. package/registry/profile-card.json +1 -1
  274. package/registry/progress.json +1 -1
  275. package/registry/promise-card.json +1 -1
  276. package/registry/radio-group.json +1 -1
  277. package/registry/scroll-stage.json +1 -1
  278. package/registry/search-field.json +1 -1
  279. package/registry/section-backdrop.json +1 -1
  280. package/registry/separator.json +1 -1
  281. package/registry/settings-layout.json +1 -1
  282. package/registry/skeleton.json +1 -1
  283. package/registry/slider.json +1 -1
  284. package/registry/slot.json +1 -1
  285. package/registry/spinner.json +1 -1
  286. package/registry/split-view.json +1 -1
  287. package/registry/stage-banner.json +1 -1
  288. package/registry/stat.json +1 -1
  289. package/registry/status-page.json +263 -0
  290. package/registry/stepper.json +1 -1
  291. package/registry/switch.json +1 -1
  292. package/registry/tabs.json +1 -1
  293. package/registry/tag-input.json +1 -1
  294. package/registry/terminal-replay.json +1 -1
  295. package/registry/theme.json +1 -1
  296. package/registry/toast.json +1 -1
  297. package/registry/toc.json +1 -1
  298. package/registry/tooltip.json +1 -1
  299. package/registry/video-player.json +1 -1
  300. package/registry/video-trimmer.json +1 -1
  301. package/registry/virtual.json +569 -0
  302. package/skills/data-table/SKILL.md +56 -0
  303. package/skills/native-list/SKILL.md +39 -0
  304. package/skills/virtual/SKILL.md +35 -0
  305. package/dist/chunk-NOVUREEC.js.map +0 -1
  306. /package/dist/{chunk-EUPTXKH7.js.map → chunk-BRKMQ6JV.js.map} +0 -0
  307. /package/dist/{chunk-X6TW3X6Y.js.map → chunk-LCZXS6AK.js.map} +0 -0
@@ -0,0 +1,135 @@
1
+ // src/native/list.tsx
2
+ import { useInfiniteQuery } from "@krizaka/query";
3
+ import { EmptyState, Skeleton, Spinner, useTheme } from "@krizaka/ui/native";
4
+ import { FlashList } from "@shopify/flash-list";
5
+ import * as React from "react";
6
+ import { RefreshControl, StyleSheet, View } from "react-native";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ function SkeletonRow() {
9
+ return /* @__PURE__ */ jsxs(View, { style: styles.skeleton, "aria-hidden": true, children: [
10
+ /* @__PURE__ */ jsx(Skeleton, { shape: "circle", width: 40, height: 40 }),
11
+ /* @__PURE__ */ jsxs(View, { style: styles.skeletonText, children: [
12
+ /* @__PURE__ */ jsx(Skeleton, { width: "60%" }),
13
+ /* @__PURE__ */ jsx(Skeleton, { width: "35%" })
14
+ ] })
15
+ ] });
16
+ }
17
+ var isWords = (value) => typeof value === "object" && value !== null && !React.isValidElement(value) && "title" in value;
18
+ function List({
19
+ data,
20
+ renderItem,
21
+ keyExtractor,
22
+ label,
23
+ separator = "full",
24
+ loading,
25
+ loadingRows = 6,
26
+ error,
27
+ empty,
28
+ refreshing = false,
29
+ onRefresh,
30
+ onEndReached,
31
+ endReachedThreshold = 0.5,
32
+ loadingMore,
33
+ loadingMoreLabel = "Loading more",
34
+ header,
35
+ footer,
36
+ extraData,
37
+ ref,
38
+ contentContainerStyle,
39
+ style
40
+ }) {
41
+ const { theme } = useTheme();
42
+ const Separator = React.useMemo(
43
+ () => separator === "none" ? void 0 : function ListSeparator() {
44
+ return /* @__PURE__ */ jsx(View, { style: [styles.separator, { backgroundColor: theme.borderSubtle }, separator === "inset" && styles.inset] });
45
+ },
46
+ [separator, theme.borderSubtle]
47
+ );
48
+ if (loading) {
49
+ return /* @__PURE__ */ jsxs(View, { role: "group", style: [styles.fill, style], "aria-busy": true, accessibilityLabel: label, children: [
50
+ header,
51
+ Array.from({ length: loadingRows }, (_, i) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
52
+ i > 0 && Separator ? /* @__PURE__ */ jsx(Separator, {}) : null,
53
+ /* @__PURE__ */ jsx(SkeletonRow, {})
54
+ ] }, i))
55
+ ] });
56
+ }
57
+ const state = error ? /* @__PURE__ */ jsx(View, { role: "alert", style: styles.state, children: error }) : isWords(empty) ? /* @__PURE__ */ jsx(EmptyState, { title: empty.title, description: empty.description, action: empty.action, style: styles.state }) : empty ? /* @__PURE__ */ jsx(View, { style: styles.state, children: empty }) : null;
58
+ return /* @__PURE__ */ jsx(
59
+ FlashList,
60
+ {
61
+ ref,
62
+ accessibilityLabel: label,
63
+ focusable: true,
64
+ data: error ? [] : data,
65
+ renderItem: ({ item, index }) => renderItem(item, index),
66
+ keyExtractor,
67
+ extraData,
68
+ ItemSeparatorComponent: Separator,
69
+ ListHeaderComponent: header,
70
+ ListEmptyComponent: state,
71
+ ListFooterComponent: loadingMore || footer ? /* @__PURE__ */ jsxs(View, { children: [
72
+ loadingMore ? /* @__PURE__ */ jsx(View, { style: styles.more, children: /* @__PURE__ */ jsx(Spinner, { label: loadingMoreLabel }) }) : null,
73
+ footer
74
+ ] }) : null,
75
+ onEndReached,
76
+ onEndReachedThreshold: endReachedThreshold,
77
+ refreshControl: onRefresh ? /* @__PURE__ */ jsx(RefreshControl, { refreshing, onRefresh, tintColor: theme.accent, colors: [theme.accent], progressBackgroundColor: theme.surface1 }) : void 0,
78
+ contentContainerStyle,
79
+ style
80
+ }
81
+ );
82
+ }
83
+ function useInfiniteList({
84
+ queryKey,
85
+ queryFn,
86
+ initialPageParam,
87
+ getNextPageParam,
88
+ getItems,
89
+ enabled,
90
+ staleTime
91
+ }) {
92
+ const query = useInfiniteQuery({
93
+ queryKey,
94
+ queryFn: ({ pageParam, signal }) => queryFn({ pageParam, signal }),
95
+ initialPageParam,
96
+ getNextPageParam: (last, pages2) => getNextPageParam(last, pages2) ?? void 0,
97
+ enabled,
98
+ staleTime,
99
+ meta: { list: true }
100
+ });
101
+ const [pulled, setPulled] = React.useState(false);
102
+ const { data: pages, hasNextPage, isFetchingNextPage, fetchNextPage, refetch, isPending, isError, isRefetching } = query;
103
+ const data = React.useMemo(() => (pages?.pages ?? []).flatMap((page) => getItems(page)), [pages]);
104
+ return {
105
+ listProps: {
106
+ data,
107
+ loading: isPending && enabled !== false,
108
+ refreshing: pulled && isRefetching,
109
+ onRefresh: () => {
110
+ setPulled(true);
111
+ void refetch().finally(() => setPulled(false));
112
+ },
113
+ onEndReached: () => {
114
+ if (hasNextPage && !isFetchingNextPage && !isError) void fetchNextPage();
115
+ },
116
+ loadingMore: isFetchingNextPage
117
+ },
118
+ error: isError && !pages ? query.error : null,
119
+ query
120
+ };
121
+ }
122
+ var styles = StyleSheet.create({
123
+ fill: { flex: 1 },
124
+ separator: { height: StyleSheet.hairlineWidth },
125
+ inset: { marginLeft: 68 },
126
+ skeleton: { flexDirection: "row", alignItems: "center", gap: 12, paddingHorizontal: 16, paddingVertical: 14 },
127
+ skeletonText: { flex: 1, gap: 8 },
128
+ state: { paddingHorizontal: 16, paddingVertical: 32 },
129
+ more: { paddingVertical: 20, alignItems: "center" }
130
+ });
131
+ export {
132
+ List,
133
+ useInfiniteList
134
+ };
135
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/native/list.tsx"],"sourcesContent":["// @krizaka/ui/native/list — its own entry, because it imports FlashList v2 (@shopify/flash-list) and @krizaka/query:\n// optional peers, installed only by the apps that list. The theme and the states come from @krizaka/ui/native (one\n// theme context); the server state comes from @krizaka/query (one QueryClient context — never @tanstack/* here).\nimport { type InfiniteData, useInfiniteQuery, type UseInfiniteQueryResult } from \"@krizaka/query\";\nimport { EmptyState, Skeleton, Spinner, useTheme } from \"@krizaka/ui/native\";\nimport { FlashList, type FlashListRef } from \"@shopify/flash-list\";\nimport * as React from \"react\";\nimport { RefreshControl, type StyleProp, StyleSheet, View, type ViewStyle } from \"react-native\";\n\nexport type ListProps<T> = {\n /** The items (stable: a query's data, state). */\n data: readonly T[];\n /** Draws one item. */\n renderItem: (item: T, index: number) => React.ReactElement | null;\n /** A stable key per item (an id): FlashList recycles the views by it. */\n keyExtractor: (item: T, index: number) => string;\n /** The accessible name of the list (\"Notifications\"), passed translated. */\n label: string;\n /** A hairline between items: `full` (default), `inset` (aligned with the text after an avatar), `none`. */\n separator?: \"full\" | \"inset\" | \"none\";\n /** The first page is loading: skeleton rows (`loadingRows` of them) in place of the items. */\n loading?: boolean;\n /** How many skeleton rows while loading. Default 6. */\n loadingRows?: number;\n /** A failure, shown in place of the items (an `ErrorState` with a retry). */\n error?: React.ReactNode;\n /** Shown when there is no item (an `EmptyState`, or its words: `{ title, description, action }`). */\n empty?: React.ReactNode | { title: string; description?: string; action?: React.ReactNode };\n /** The list is reloading after a pull: the system's spinner at the top. */\n refreshing?: boolean;\n /** Pull to refresh: called when the person pulls the list down. */\n onRefresh?: () => void;\n /** Called when the end comes near: load the next page. */\n onEndReached?: () => void;\n /** How far from the end `onEndReached` fires, in screens. Default 0.5. */\n endReachedThreshold?: number;\n /** The next page is loading: a spinner under the last item, named by `loadingMoreLabel`. */\n loadingMore?: boolean;\n /** The name of that spinner (\"Loading more\"), passed translated. */\n loadingMoreLabel?: string;\n /** Above the first item (a title, filters): scrolls with the list. */\n header?: React.ReactElement;\n /** Under the last item. */\n footer?: React.ReactElement;\n /** Extra data the items depend on (a selection): a change re-renders the visible items. */\n extraData?: unknown;\n /** The FlashList, for `scrollToIndex` / `scrollToOffset`. */\n ref?: React.Ref<FlashListRef<T>>;\n /** Styles of the list's content (padding). */\n contentContainerStyle?: StyleProp<ViewStyle>;\n /** Styles merged last, on the list. */\n style?: StyleProp<ViewStyle>;\n};\n\nfunction SkeletonRow() {\n return (\n <View style={styles.skeleton} aria-hidden>\n <Skeleton shape=\"circle\" width={40} height={40} />\n <View style={styles.skeletonText}>\n <Skeleton width=\"60%\" />\n <Skeleton width=\"35%\" />\n </View>\n </View>\n );\n}\n\nconst isWords = (value: unknown): value is { title: string; description?: string; action?: React.ReactNode } =>\n typeof value === \"object\" && value !== null && !React.isValidElement(value) && \"title\" in value;\n\n/**\n * A long list on FlashList v2 (recycled views, 60 fps): separators, skeleton rows while the first page loads, an empty\n * or error state in place of the items, pull to refresh tinted with the theme, the next page asked for near the end and\n * a spinner under the last item. With `useInfiniteList`, a paginated API is one hook and one component.\n */\nexport function List<T>({\n data,\n renderItem,\n keyExtractor,\n label,\n separator = \"full\",\n loading,\n loadingRows = 6,\n error,\n empty,\n refreshing = false,\n onRefresh,\n onEndReached,\n endReachedThreshold = 0.5,\n loadingMore,\n loadingMoreLabel = \"Loading more\",\n header,\n footer,\n extraData,\n ref,\n contentContainerStyle,\n style,\n}: ListProps<T>) {\n const { theme } = useTheme();\n const Separator = React.useMemo(\n () =>\n separator === \"none\"\n ? undefined\n : function ListSeparator() {\n return <View style={[styles.separator, { backgroundColor: theme.borderSubtle }, separator === \"inset\" && styles.inset]} />;\n },\n [separator, theme.borderSubtle],\n );\n\n if (loading) {\n return (\n <View role=\"group\" style={[styles.fill, style]} aria-busy accessibilityLabel={label}>\n {header}\n {Array.from({ length: loadingRows }, (_, i) => (\n <React.Fragment key={i}>\n {i > 0 && Separator ? <Separator /> : null}\n <SkeletonRow />\n </React.Fragment>\n ))}\n </View>\n );\n }\n\n const state = error ? (\n <View role=\"alert\" style={styles.state}>\n {error}\n </View>\n ) : isWords(empty) ? (\n <EmptyState title={empty.title} description={empty.description} action={empty.action} style={styles.state} />\n ) : empty ? (\n <View style={styles.state}>{empty}</View>\n ) : null;\n\n return (\n <FlashList\n ref={ref}\n accessibilityLabel={label}\n // Reachable from a keyboard (a hardware keyboard, the web): a scrolling area takes the focus to be scrolled.\n focusable\n data={error ? [] : data}\n renderItem={({ item, index }) => renderItem(item, index)}\n keyExtractor={keyExtractor}\n extraData={extraData}\n ItemSeparatorComponent={Separator}\n ListHeaderComponent={header}\n ListEmptyComponent={state}\n ListFooterComponent={\n loadingMore || footer ? (\n <View>\n {loadingMore ? (\n <View style={styles.more}>\n <Spinner label={loadingMoreLabel} />\n </View>\n ) : null}\n {footer}\n </View>\n ) : null\n }\n onEndReached={onEndReached}\n onEndReachedThreshold={endReachedThreshold}\n refreshControl={\n onRefresh ? (\n <RefreshControl refreshing={refreshing} onRefresh={onRefresh} tintColor={theme.accent} colors={[theme.accent]} progressBackgroundColor={theme.surface1} />\n ) : undefined\n }\n contentContainerStyle={contentContainerStyle as never}\n style={style}\n />\n );\n}\n\nexport type InfiniteListOptions<TPage, TItem, TParam> = {\n /** The query key (a `defineKeys` key): one cache entry for every page. */\n queryKey: readonly unknown[];\n /** Fetches one page (`krizakaFetch`), from its page parameter (a cursor, a page number). */\n queryFn: (context: { pageParam: TParam; signal: AbortSignal }) => Promise<TPage>;\n /** The parameter of the first page (`null` for a cursor, `1` for numbers). */\n initialPageParam: TParam;\n /** The parameter of the page after `lastPage`, or `undefined` / `null` when there is none. */\n getNextPageParam: (lastPage: TPage, pages: TPage[]) => TParam | undefined | null;\n /** The items of a page (`(page) => page.items`). */\n getItems: (page: TPage) => readonly TItem[];\n /** `false` to wait (a missing id). Default `true`. */\n enabled?: boolean;\n /** How long a page stays fresh, in ms (the client's default otherwise). */\n staleTime?: number;\n};\n\n/** What `useInfiniteList` gives: the props of `List` to spread, and the query itself. */\nexport type InfiniteListResult<TPage, TItem, TParam = unknown> = {\n /** `{ data, loading, refreshing, onRefresh, onEndReached, loadingMore }` — spread on `<List>`. */\n listProps: Pick<ListProps<TItem>, \"data\" | \"loading\" | \"refreshing\" | \"onRefresh\" | \"onEndReached\" | \"loadingMore\">;\n /** The failure of the first page, if any: render an `ErrorState` in `error` (a later page's failure keeps the list). */\n error: Error | null;\n /** The query of @krizaka/query (`refetch`, `status`, the pages…). */\n query: UseInfiniteQueryResult<InfiniteData<TPage, TParam>, Error>;\n};\n\n/**\n * A paginated API as a list: `useInfiniteQuery` of @krizaka/query (a list: `meta: { list: true }`, so an error stays in\n * the list), the pages flattened, the next page asked for by `onEndReached` (once at a time, only when there is one),\n * pull to refresh — spread `listProps` on `<List>`.\n */\nexport function useInfiniteList<TPage, TItem, TParam = unknown>({\n queryKey,\n queryFn,\n initialPageParam,\n getNextPageParam,\n getItems,\n enabled,\n staleTime,\n}: InfiniteListOptions<TPage, TItem, TParam>): InfiniteListResult<TPage, TItem, TParam> {\n const query = useInfiniteQuery<TPage, Error, InfiniteData<TPage, TParam>, readonly unknown[], TParam>({\n queryKey,\n queryFn: ({ pageParam, signal }) => queryFn({ pageParam: pageParam as TParam, signal }),\n initialPageParam,\n getNextPageParam: (last, pages) => getNextPageParam(last, pages) ?? undefined,\n enabled,\n staleTime,\n meta: { list: true },\n });\n const [pulled, setPulled] = React.useState(false);\n const { data: pages, hasNextPage, isFetchingNextPage, fetchNextPage, refetch, isPending, isError, isRefetching } = query;\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `getItems` is a projection; the pages decide\n const data = React.useMemo(() => (pages?.pages ?? []).flatMap((page) => getItems(page)), [pages]);\n return {\n listProps: {\n data,\n loading: isPending && enabled !== false,\n refreshing: pulled && isRefetching,\n onRefresh: () => {\n setPulled(true);\n void refetch().finally(() => setPulled(false));\n },\n onEndReached: () => {\n if (hasNextPage && !isFetchingNextPage && !isError) void fetchNextPage();\n },\n loadingMore: isFetchingNextPage,\n },\n error: isError && !pages ? query.error : null,\n query,\n };\n}\n\nconst styles = StyleSheet.create({\n fill: { flex: 1 },\n separator: { height: StyleSheet.hairlineWidth },\n inset: { marginLeft: 68 },\n skeleton: { flexDirection: \"row\", alignItems: \"center\", gap: 12, paddingHorizontal: 16, paddingVertical: 14 },\n skeletonText: { flex: 1, gap: 8 },\n state: { paddingHorizontal: 16, paddingVertical: 32 },\n more: { paddingVertical: 20, alignItems: \"center\" },\n});\n"],"mappings":"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","names":["pages"]}
package/dist/native.d.ts CHANGED
@@ -19,7 +19,7 @@ type CountdownUnits = {
19
19
  s: string;
20
20
  };
21
21
 
22
- type BrandId = "krizaka" | "orazaka" | "orochia" | "yazakia";
22
+ type BrandId = "krizaka" | "orazaka" | "orochia" | "yazakia" | "yororis";
23
23
 
24
24
  type AvatarSize = "xs" | "sm" | "md" | "lg" | "xl";
25
25
  type AvatarProps = Omit<ViewProps, "children"> & {
@@ -349,16 +349,16 @@ declare function KrizakaMark({ size, animated, title, neutral }: NativeMarkProps
349
349
  /**
350
350
  * The Krizaka flock — the geometry of the mascots, drawn by the web `Mascot` (`./mascot.tsx`) and the native one
351
351
  * (`../native/mascots.tsx`). Five birds that have carried the Krizaka story since the first site (the sentry falcon,
352
- * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon) and the lovebird that
353
- * introduces (2026-10, with Yazakia: "l'inséparable présente"), redrawn on one 120 × 120 grid so that any bird can
354
- * wear any mood.
352
+ * the owl that reads, the developer duck, the flamingo that answers, the carrier pigeon), the lovebird that
353
+ * introduces (2026-10, with Yazakia: "l'inséparable présente") and the crane that listens (2026-10, with Yororis:
354
+ * "la grue écoute"), redrawn on one 120 × 120 grid so that any bird can wear any mood.
355
355
  *
356
356
  * Colours are roles, never fixed: `brand` (the default) paints a bird in the host's accent (`--kz-accent`,
357
357
  * `--kz-accent-2`), so the same falcon is blue on krizaka.com, orange in Orazaka and violet in Orochia; `own` gives
358
358
  * each bird the signature palette it has in the Krizaka story (the brand layer's exception, like the marks). Shades
359
359
  * and highlights are black and white at a low opacity over the role, so they hold in both themes.
360
360
  */
361
- declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon", "lovebird"];
361
+ declare const MASCOT_BIRDS: readonly ["falcon", "owl", "duck", "flamingo", "pigeon", "lovebird", "crane"];
362
362
  type MascotBird = (typeof MASCOT_BIRDS)[number];
363
363
  declare const MASCOT_MOODS: readonly ["welcome", "thinking", "success", "empty", "error"];
364
364
  type MascotMood = (typeof MASCOT_MOODS)[number];
@@ -370,7 +370,7 @@ declare const SIZE: {
370
370
  readonly lg: 128;
371
371
  };
372
372
  type MascotStateProps = Omit<ViewProps, "children"> & {
373
- /** The bird whose job the moment is about: `owl` (documents), `falcon` (security), `duck` (code), `flamingo` (answers, payments), `pigeon` (delivery), `lovebird` (introductions). */
373
+ /** The bird whose job the moment is about: `owl` (documents), `falcon` (security), `duck` (code), `flamingo` (answers, payments), `pigeon` (delivery), `lovebird` (introductions), `crane` (listening). */
374
374
  bird?: MascotBird;
375
375
  /** The moment: `empty` (default), `thinking`, `success`, `error`, `welcome`. */
376
376
  mood?: MascotMood;
@@ -405,7 +405,7 @@ declare const LoadingState: (props: PresetProps) => React.JSX.Element;
405
405
  declare const WelcomeState: (props: PresetProps) => React.JSX.Element;
406
406
 
407
407
  interface MascotProps {
408
- /** Which bird of the flock: `falcon` (watch), `owl` (reading), `duck` (building), `flamingo` (answers), `pigeon` (delivery), `lovebird` (introductions). */
408
+ /** Which bird of the flock: `falcon` (watch), `owl` (reading), `duck` (building), `flamingo` (answers), `pigeon` (delivery), `lovebird` (introductions), `crane` (listening). */
409
409
  bird?: MascotBird;
410
410
  /** What the moment is: `welcome`, `thinking`, `success`, `empty` or `error`. */
411
411
  mood?: MascotMood;
@@ -421,7 +421,7 @@ interface MascotProps {
421
421
  style?: ViewStyle;
422
422
  }
423
423
  /**
424
- * One of the six Krizaka birds in one mood, for React Native — the geometry of the web `Mascot`
424
+ * One of the seven Krizaka birds in one mood, for React Native — the geometry of the web `Mascot`
425
425
  * (mascots/geometry.ts), in the theme's accent by default.
426
426
  */
427
427
  declare function Mascot({ bird, mood, tone, size, animated, title, style }: MascotProps): React__default.JSX.Element;
@@ -807,4 +807,11 @@ declare function Toaster({ closeLabel, position, offset, duration, max }: Toaste
807
807
  */
808
808
  declare function YazakiaMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
809
809
 
810
- export { Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Countdown, type CountdownProps, type CountdownUnits, EmptyState, type EmptyStateProps, ErrorState, GoalGauge, type GoalGaugeProps, IconButton, type IconButtonProps, KrizakaMark, LoadingState, Mascot, type MascotProps, MascotState, type MascotStateProps, type Mode, type Motion, type NativeMarkProps, OrazakaMark, OrochiaMark, Pagination, type PaginationLabels, type PaginationProps, Phoenix, type PhoenixProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, type Radius, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, SuccessState, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, WelcomeState, YazakiaMark, alpha, splitDuration, textStyles, toast, useCountdown, useReducedMotion, useTheme };
810
+ /**
811
+ * The Yororis mark for React Native — the geometry of the web mark (marks/yororis-geometry.ts), "the hold": two filled
812
+ * leaves cupping a warm core. The orbit and its one node, the moment, turn slowly; the core breathes; still when the
813
+ * system reduces motion.
814
+ */
815
+ declare function YororisMark({ size, animated, title, neutral }: NativeMarkProps): React__default.JSX.Element;
816
+
817
+ export { Avatar, AvatarGroup, type AvatarGroupProps, type AvatarProps, AvatarRoot, type AvatarSize, Badge, type BadgeProps, type BadgeTone, type BrandId, Button, type ButtonProps, type ButtonSize, type ButtonVariant, Card, CardBody, type CardBodyProps, CardDescription, CardFooter, CardImage, type CardImageProps, CardMedia, type CardMediaProps, CardOverlay, type CardOverlayProps, CardRoot, type CardRootProps, CardTitle, Chip, type ChipGroupProps, type ChipProps, type ChipSize, Countdown, type CountdownProps, type CountdownUnits, EmptyState, type EmptyStateProps, ErrorState, GoalGauge, type GoalGaugeProps, IconButton, type IconButtonProps, KrizakaMark, LoadingState, Mascot, type MascotProps, MascotState, type MascotStateProps, type Mode, type Motion, type NativeMarkProps, OrazakaMark, OrochiaMark, Pagination, type PaginationLabels, type PaginationProps, Phoenix, type PhoenixProps, ProductMark, ProfileCard, type ProfileCardProps, type ProfileStat, Progress, type ProgressProps, type Radius, SearchField, type SearchFieldProps, Segmented, type SegmentedOption, type SegmentedProps, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, SuccessState, type Theme, type ThemeContextValue, type ThemeFonts, type ThemeName, type ThemeOverrides, ThemeProvider, type ThemeProviderProps, type ToastItem, type ToastOptions, type ToastTone, Toaster, type ToasterProps, Txt, type TxtProps, type TxtTone, type TxtVariant, WelcomeState, YazakiaMark, YororisMark, alpha, splitDuration, textStyles, toast, useCountdown, useReducedMotion, useTheme };