@multiplatform.one/components 6.4.3 → 6.7.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 (262) hide show
  1. package/dist/cjs/Avatar/index.cjs +4 -0
  2. package/dist/cjs/Avatar/index.native.js +4 -0
  3. package/dist/cjs/Avatar/index.native.js.map +1 -1
  4. package/dist/cjs/Badge/index.cjs +3 -0
  5. package/dist/cjs/Badge/index.native.js +3 -0
  6. package/dist/cjs/Badge/index.native.js.map +1 -1
  7. package/dist/cjs/Carousel/index.cjs +28 -15
  8. package/dist/cjs/Carousel/index.native.js +34 -17
  9. package/dist/cjs/Carousel/index.native.js.map +1 -1
  10. package/dist/cjs/DotIndicator/index.cjs +92 -35
  11. package/dist/cjs/DotIndicator/index.native.js +93 -35
  12. package/dist/cjs/DotIndicator/index.native.js.map +1 -1
  13. package/dist/cjs/Pagination.cjs +112 -167
  14. package/dist/cjs/Pagination.native.js +125 -180
  15. package/dist/cjs/Pagination.native.js.map +1 -1
  16. package/dist/cjs/ProgressSteps/index.cjs +2 -1
  17. package/dist/cjs/ProgressSteps/index.native.js +2 -1
  18. package/dist/cjs/ProgressSteps/index.native.js.map +1 -1
  19. package/dist/cjs/charts/PieChart.cjs +1 -1
  20. package/dist/cjs/charts/PieChart.native.js +7 -2
  21. package/dist/cjs/charts/PieChart.native.js.map +1 -1
  22. package/dist/cjs/feedback/ConfirmDialog.cjs +1 -3
  23. package/dist/cjs/feedback/ConfirmDialog.native.js +1 -3
  24. package/dist/cjs/feedback/ConfirmDialog.native.js.map +1 -1
  25. package/dist/cjs/index.cjs +1 -0
  26. package/dist/cjs/index.native.js +1 -0
  27. package/dist/cjs/index.native.js.map +1 -1
  28. package/dist/cjs/layouts/ViewSwitcher.cjs +4 -5
  29. package/dist/cjs/layouts/ViewSwitcher.native.js +13 -7
  30. package/dist/cjs/layouts/ViewSwitcher.native.js.map +1 -1
  31. package/dist/cjs/layouts/attachments.cjs +4 -8
  32. package/dist/cjs/layouts/attachments.native.js +5 -8
  33. package/dist/cjs/layouts/attachments.native.js.map +1 -1
  34. package/dist/cjs/layouts/page.cjs +1 -0
  35. package/dist/cjs/layouts/page.native.js +4 -1
  36. package/dist/cjs/layouts/page.native.js.map +1 -1
  37. package/dist/cjs/layouts/tags.cjs +1 -0
  38. package/dist/cjs/layouts/tags.native.js +2 -0
  39. package/dist/cjs/layouts/tags.native.js.map +1 -1
  40. package/dist/cjs/layouts/timeline.cjs +0 -6
  41. package/dist/cjs/layouts/timeline.native.js +0 -6
  42. package/dist/cjs/layouts/timeline.native.js.map +1 -1
  43. package/dist/cjs/surfaces.cjs +21 -0
  44. package/dist/cjs/surfaces.native.js +22 -0
  45. package/dist/cjs/surfaces.native.js.map +1 -1
  46. package/dist/cjs/views/Calendar.cjs +2 -0
  47. package/dist/cjs/views/Calendar.native.js +8 -2
  48. package/dist/cjs/views/Calendar.native.js.map +1 -1
  49. package/dist/cjs/views/Kanban.cjs +22 -13
  50. package/dist/cjs/views/Kanban.native.js +1 -0
  51. package/dist/cjs/views/Kanban.native.js.map +1 -1
  52. package/dist/cjs/views/ReportBuilder.cjs +12 -2
  53. package/dist/cjs/views/ReportBuilder.native.js +12 -2
  54. package/dist/cjs/views/ReportBuilder.native.js.map +1 -1
  55. package/dist/esm/Avatar/index.mjs +5 -1
  56. package/dist/esm/Avatar/index.mjs.map +1 -1
  57. package/dist/esm/Avatar/index.native.js +5 -1
  58. package/dist/esm/Avatar/index.native.js.map +1 -1
  59. package/dist/esm/Badge/index.mjs +4 -1
  60. package/dist/esm/Badge/index.mjs.map +1 -1
  61. package/dist/esm/Badge/index.native.js +4 -1
  62. package/dist/esm/Badge/index.native.js.map +1 -1
  63. package/dist/esm/Carousel/index.mjs +28 -15
  64. package/dist/esm/Carousel/index.mjs.map +1 -1
  65. package/dist/esm/Carousel/index.native.js +34 -17
  66. package/dist/esm/Carousel/index.native.js.map +1 -1
  67. package/dist/esm/DotIndicator/index.mjs +93 -36
  68. package/dist/esm/DotIndicator/index.mjs.map +1 -1
  69. package/dist/esm/DotIndicator/index.native.js +94 -36
  70. package/dist/esm/DotIndicator/index.native.js.map +1 -1
  71. package/dist/esm/Pagination.mjs +113 -168
  72. package/dist/esm/Pagination.mjs.map +1 -1
  73. package/dist/esm/Pagination.native.js +126 -181
  74. package/dist/esm/Pagination.native.js.map +1 -1
  75. package/dist/esm/ProgressSteps/index.mjs +2 -1
  76. package/dist/esm/ProgressSteps/index.mjs.map +1 -1
  77. package/dist/esm/ProgressSteps/index.native.js +2 -1
  78. package/dist/esm/ProgressSteps/index.native.js.map +1 -1
  79. package/dist/esm/charts/PieChart.mjs +1 -1
  80. package/dist/esm/charts/PieChart.mjs.map +1 -1
  81. package/dist/esm/charts/PieChart.native.js +7 -2
  82. package/dist/esm/charts/PieChart.native.js.map +1 -1
  83. package/dist/esm/feedback/ConfirmDialog.mjs +2 -4
  84. package/dist/esm/feedback/ConfirmDialog.mjs.map +1 -1
  85. package/dist/esm/feedback/ConfirmDialog.native.js +2 -4
  86. package/dist/esm/feedback/ConfirmDialog.native.js.map +1 -1
  87. package/dist/esm/index.mjs +2 -2
  88. package/dist/esm/index.mjs.map +1 -1
  89. package/dist/esm/index.native.js +2 -2
  90. package/dist/esm/index.native.js.map +1 -1
  91. package/dist/esm/layouts/ViewSwitcher.mjs +4 -5
  92. package/dist/esm/layouts/ViewSwitcher.mjs.map +1 -1
  93. package/dist/esm/layouts/ViewSwitcher.native.js +13 -7
  94. package/dist/esm/layouts/ViewSwitcher.native.js.map +1 -1
  95. package/dist/esm/layouts/attachments.mjs +4 -8
  96. package/dist/esm/layouts/attachments.mjs.map +1 -1
  97. package/dist/esm/layouts/attachments.native.js +5 -8
  98. package/dist/esm/layouts/attachments.native.js.map +1 -1
  99. package/dist/esm/layouts/page.mjs +2 -1
  100. package/dist/esm/layouts/page.mjs.map +1 -1
  101. package/dist/esm/layouts/page.native.js +5 -2
  102. package/dist/esm/layouts/page.native.js.map +1 -1
  103. package/dist/esm/layouts/tags.mjs +1 -0
  104. package/dist/esm/layouts/tags.mjs.map +1 -1
  105. package/dist/esm/layouts/tags.native.js +2 -0
  106. package/dist/esm/layouts/tags.native.js.map +1 -1
  107. package/dist/esm/layouts/timeline.mjs +0 -6
  108. package/dist/esm/layouts/timeline.mjs.map +1 -1
  109. package/dist/esm/layouts/timeline.native.js +0 -6
  110. package/dist/esm/layouts/timeline.native.js.map +1 -1
  111. package/dist/esm/surfaces.mjs +21 -1
  112. package/dist/esm/surfaces.mjs.map +1 -1
  113. package/dist/esm/surfaces.native.js +22 -1
  114. package/dist/esm/surfaces.native.js.map +1 -1
  115. package/dist/esm/views/Calendar.mjs +3 -1
  116. package/dist/esm/views/Calendar.mjs.map +1 -1
  117. package/dist/esm/views/Calendar.native.js +9 -3
  118. package/dist/esm/views/Calendar.native.js.map +1 -1
  119. package/dist/esm/views/Kanban.mjs +23 -14
  120. package/dist/esm/views/Kanban.mjs.map +1 -1
  121. package/dist/esm/views/Kanban.native.js +2 -1
  122. package/dist/esm/views/Kanban.native.js.map +1 -1
  123. package/dist/esm/views/ReportBuilder.mjs +13 -3
  124. package/dist/esm/views/ReportBuilder.mjs.map +1 -1
  125. package/dist/esm/views/ReportBuilder.native.js +13 -3
  126. package/dist/esm/views/ReportBuilder.native.js.map +1 -1
  127. package/dist/jsx/Avatar/index.mjs +5 -1
  128. package/dist/jsx/Avatar/index.mjs.map +1 -1
  129. package/dist/jsx/Avatar/index.native.js +4 -0
  130. package/dist/jsx/Avatar/index.native.js.map +1 -1
  131. package/dist/jsx/Badge/index.mjs +4 -1
  132. package/dist/jsx/Badge/index.mjs.map +1 -1
  133. package/dist/jsx/Badge/index.native.js +3 -0
  134. package/dist/jsx/Badge/index.native.js.map +1 -1
  135. package/dist/jsx/Carousel/index.mjs +28 -15
  136. package/dist/jsx/Carousel/index.mjs.map +1 -1
  137. package/dist/jsx/Carousel/index.native.js +34 -17
  138. package/dist/jsx/Carousel/index.native.js.map +1 -1
  139. package/dist/jsx/DotIndicator/index.mjs +93 -36
  140. package/dist/jsx/DotIndicator/index.mjs.map +1 -1
  141. package/dist/jsx/DotIndicator/index.native.js +93 -35
  142. package/dist/jsx/DotIndicator/index.native.js.map +1 -1
  143. package/dist/jsx/Pagination.mjs +113 -168
  144. package/dist/jsx/Pagination.mjs.map +1 -1
  145. package/dist/jsx/Pagination.native.js +125 -180
  146. package/dist/jsx/Pagination.native.js.map +1 -1
  147. package/dist/jsx/ProgressSteps/index.mjs +2 -1
  148. package/dist/jsx/ProgressSteps/index.mjs.map +1 -1
  149. package/dist/jsx/ProgressSteps/index.native.js +2 -1
  150. package/dist/jsx/ProgressSteps/index.native.js.map +1 -1
  151. package/dist/jsx/charts/PieChart.mjs +1 -1
  152. package/dist/jsx/charts/PieChart.mjs.map +1 -1
  153. package/dist/jsx/charts/PieChart.native.js +7 -2
  154. package/dist/jsx/charts/PieChart.native.js.map +1 -1
  155. package/dist/jsx/feedback/ConfirmDialog.mjs +2 -4
  156. package/dist/jsx/feedback/ConfirmDialog.mjs.map +1 -1
  157. package/dist/jsx/feedback/ConfirmDialog.native.js +1 -3
  158. package/dist/jsx/feedback/ConfirmDialog.native.js.map +1 -1
  159. package/dist/jsx/index.js +2 -2
  160. package/dist/jsx/index.js.map +1 -1
  161. package/dist/jsx/index.mjs +2 -2
  162. package/dist/jsx/index.mjs.map +1 -1
  163. package/dist/jsx/index.native.js +1 -0
  164. package/dist/jsx/index.native.js.map +1 -1
  165. package/dist/jsx/layouts/ViewSwitcher.mjs +4 -5
  166. package/dist/jsx/layouts/ViewSwitcher.mjs.map +1 -1
  167. package/dist/jsx/layouts/ViewSwitcher.native.js +13 -7
  168. package/dist/jsx/layouts/ViewSwitcher.native.js.map +1 -1
  169. package/dist/jsx/layouts/attachments.mjs +4 -8
  170. package/dist/jsx/layouts/attachments.mjs.map +1 -1
  171. package/dist/jsx/layouts/attachments.native.js +5 -8
  172. package/dist/jsx/layouts/attachments.native.js.map +1 -1
  173. package/dist/jsx/layouts/page.mjs +2 -1
  174. package/dist/jsx/layouts/page.mjs.map +1 -1
  175. package/dist/jsx/layouts/page.native.js +4 -1
  176. package/dist/jsx/layouts/page.native.js.map +1 -1
  177. package/dist/jsx/layouts/tags.mjs +1 -0
  178. package/dist/jsx/layouts/tags.mjs.map +1 -1
  179. package/dist/jsx/layouts/tags.native.js +2 -0
  180. package/dist/jsx/layouts/tags.native.js.map +1 -1
  181. package/dist/jsx/layouts/timeline.mjs +0 -6
  182. package/dist/jsx/layouts/timeline.mjs.map +1 -1
  183. package/dist/jsx/layouts/timeline.native.js +0 -6
  184. package/dist/jsx/layouts/timeline.native.js.map +1 -1
  185. package/dist/jsx/surfaces.mjs +21 -1
  186. package/dist/jsx/surfaces.mjs.map +1 -1
  187. package/dist/jsx/surfaces.native.js +22 -0
  188. package/dist/jsx/surfaces.native.js.map +1 -1
  189. package/dist/jsx/views/Calendar.mjs +3 -1
  190. package/dist/jsx/views/Calendar.mjs.map +1 -1
  191. package/dist/jsx/views/Calendar.native.js +8 -2
  192. package/dist/jsx/views/Calendar.native.js.map +1 -1
  193. package/dist/jsx/views/Kanban.mjs +23 -14
  194. package/dist/jsx/views/Kanban.mjs.map +1 -1
  195. package/dist/jsx/views/Kanban.native.js +1 -0
  196. package/dist/jsx/views/Kanban.native.js.map +1 -1
  197. package/dist/jsx/views/ReportBuilder.mjs +13 -3
  198. package/dist/jsx/views/ReportBuilder.mjs.map +1 -1
  199. package/dist/jsx/views/ReportBuilder.native.js +12 -2
  200. package/dist/jsx/views/ReportBuilder.native.js.map +1 -1
  201. package/package.json +10 -10
  202. package/src/Accordion/Accordion.stories.tsx +7 -2
  203. package/src/Avatar/Avatar.spec.tsx +31 -0
  204. package/src/Avatar/index.tsx +19 -1
  205. package/src/Badge/Badge.stories.tsx +3 -1
  206. package/src/Badge/index.tsx +4 -1
  207. package/src/Carousel/Carousel.spec.tsx +271 -0
  208. package/src/Carousel/Carousel.stories.tsx +35 -0
  209. package/src/Carousel/index.tsx +45 -20
  210. package/src/DialogContent.stories.tsx +2 -2
  211. package/src/DotIndicator/dotIndicator.spec.tsx +43 -1
  212. package/src/DotIndicator/index.tsx +169 -35
  213. package/src/Pagination.api.spec.tsx +345 -0
  214. package/src/Pagination.tsx +138 -176
  215. package/src/Panel.stories.tsx +4 -4
  216. package/src/ProgressSteps/ProgressSteps.spec.tsx +40 -1
  217. package/src/ProgressSteps/ProgressSteps.stories.tsx +3 -1
  218. package/src/ProgressSteps/index.tsx +6 -1
  219. package/src/charts/PieChart.tsx +4 -1
  220. package/src/feedback/ConfirmDialog.tsx +2 -2
  221. package/src/index.ts +1 -0
  222. package/src/layouts/PageHeader.stories.tsx +21 -3
  223. package/src/layouts/ScreenToolbar.stories.tsx +12 -5
  224. package/src/layouts/ViewSwitcher.tsx +25 -6
  225. package/src/layouts/attachments.tsx +4 -1
  226. package/src/layouts/layouts.spec.tsx +77 -1
  227. package/src/layouts/page.tsx +5 -1
  228. package/src/layouts/pageTitleScale.spec.tsx +70 -0
  229. package/src/layouts/tags.tsx +2 -0
  230. package/src/layouts/timeline-radius.spec.tsx +21 -0
  231. package/src/layouts/timeline.tsx +7 -18
  232. package/src/shared/t.spec.ts +47 -0
  233. package/src/surfaces.tsx +33 -0
  234. package/src/views/Calendar.stories.tsx +4 -2
  235. package/src/views/Calendar.tsx +6 -1
  236. package/src/views/Gantt.stories.tsx +2 -2
  237. package/src/views/Kanban.native.tsx +8 -2
  238. package/src/views/Kanban.stories.tsx +3 -1
  239. package/src/views/Kanban.tsx +42 -13
  240. package/src/views/ReportBuilder.tsx +15 -2
  241. package/types/Avatar/index.d.ts.map +1 -1
  242. package/types/Badge/index.d.ts.map +1 -1
  243. package/types/Carousel/index.d.ts.map +1 -1
  244. package/types/DotIndicator/index.d.ts +44 -3
  245. package/types/DotIndicator/index.d.ts.map +1 -1
  246. package/types/Pagination.d.ts +6 -1
  247. package/types/Pagination.d.ts.map +1 -1
  248. package/types/ProgressSteps/index.d.ts.map +1 -1
  249. package/types/charts/PieChart.d.ts.map +1 -1
  250. package/types/index.d.ts +1 -1
  251. package/types/index.d.ts.map +1 -1
  252. package/types/layouts/ViewSwitcher.d.ts.map +1 -1
  253. package/types/layouts/attachments.d.ts.map +1 -1
  254. package/types/layouts/page.d.ts.map +1 -1
  255. package/types/layouts/tags.d.ts.map +1 -1
  256. package/types/layouts/timeline.d.ts.map +1 -1
  257. package/types/surfaces.d.ts +17 -0
  258. package/types/surfaces.d.ts.map +1 -1
  259. package/types/views/Calendar.d.ts.map +1 -1
  260. package/types/views/Kanban.d.ts +13 -1
  261. package/types/views/Kanban.d.ts.map +1 -1
  262. package/types/views/ReportBuilder.d.ts.map +1 -1
@@ -32,6 +32,7 @@ var import_react2 = require("react");
32
32
  var import_react_i18next = require("react-i18next");
33
33
  var import_forms = require("@multiplatform.one/forms");
34
34
  var import_tamagui = require("tamagui");
35
+ var import_DotIndicator = require("./DotIndicator/index.cjs");
35
36
  var import_componentColors = require("./componentColors.cjs");
36
37
  var import_useDirection = require("./hooks/useDirection.cjs");
37
38
  var import_t = require("./shared/t.cjs");
@@ -60,6 +61,16 @@ function getPaginationItems(total, page, siblingCount = 1, boundaryCount = 1) {
60
61
  items.push(...endPages);
61
62
  return items;
62
63
  }
64
+ const stripSteps = {
65
+ base: {
66
+ mark: "$0.75",
67
+ active: "$2"
68
+ },
69
+ large: {
70
+ mark: "$1.5",
71
+ active: "$3"
72
+ }
73
+ };
63
74
  function Pagination({
64
75
  total,
65
76
  activeIndex,
@@ -121,185 +132,119 @@ function Pagination({
121
132
  if (enabled) fn();
122
133
  }
123
134
  };
124
- if (variant === "numbered") {
125
- const items = getPaginationItems(total, currentPage, siblingCount, boundaryCount);
126
- const canPrev = !disabled && currentPage > 1;
127
- const canNext = !disabled && currentPage < total;
128
- const summary = showSummary && totalItems != null && pageSize != null ? (0, import_t.bidiIsolate)(totalItems === 0 ? t("0 of 0") : (0, import_t.withInterp)(t("{{start}}\u2013{{end}} of {{total}}"), {
129
- start: (currentPage - 1) * pageSize + 1,
130
- end: Math.min(currentPage * pageSize, totalItems),
131
- total: totalItems
132
- })) : void 0;
133
- return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
134
- alignItems: "center",
135
- justifyContent: "center",
136
- role: "navigation",
137
- "aria-label": t("Pagination"),
138
- ...knobProps.gap,
139
- ...stackProps,
140
- children: [showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
141
- size: knobProps.sizeToken,
142
- variant: "outlined",
143
- icon: FirstIcon,
144
- onPress: () => goTo(0),
145
- disabled: !canPrev,
146
- "aria-label": t("Go to first page"),
147
- onKeyDown: activateOnEnterSpace(() => goTo(0), canPrev)
148
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
149
- size: knobProps.sizeToken,
150
- variant: "outlined",
151
- icon: PrevIcon,
152
- onPress: handlePrev,
153
- disabled: !canPrev,
154
- "aria-label": t("Go to previous page"),
155
- onKeyDown: activateOnEnterSpace(handlePrev, canPrev)
156
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
157
- alignItems: "center",
158
- gap: "$1",
159
- children: items.map(item => {
160
- if (typeof item !== "number") {
161
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
162
- "aria-hidden": true,
163
- userSelect: "none",
164
- textAlign: "center",
165
- minWidth: "$2",
166
- ...knobProps.body,
167
- color: import_componentColors.componentColors.text.muted,
168
- children: "\u2026"
169
- }, item);
170
- }
171
- const isCurrent = item === currentPage;
172
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
173
- size: knobProps.sizeToken,
174
- minWidth: knobProps.sizeToken,
175
- paddingHorizontal: "$2",
176
- accent: isCurrent,
177
- chromeless: !isCurrent,
178
- disabled,
179
- onPress: () => goTo(item - 1),
180
- "aria-label": (0, import_t.withInterp)(t("Page {{number}}"), {
181
- number: item
182
- }),
183
- "aria-current": isCurrent ? "page" : void 0,
184
- onKeyDown: activateOnEnterSpace(() => goTo(item - 1), !disabled),
185
- children: String(item)
186
- }, item);
187
- })
188
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
189
- size: knobProps.sizeToken,
190
- variant: "outlined",
191
- icon: NextIcon,
192
- onPress: handleNext,
193
- disabled: !canNext,
194
- "aria-label": t("Go to next page"),
195
- onKeyDown: activateOnEnterSpace(handleNext, canNext)
196
- }), showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
197
- size: knobProps.sizeToken,
198
- variant: "outlined",
199
- icon: LastIcon,
200
- onPress: () => goTo(total - 1),
201
- disabled: !canNext,
202
- "aria-label": t("Go to last page"),
203
- onKeyDown: activateOnEnterSpace(() => goTo(total - 1), canNext)
204
- }), summary && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
205
- ...knobProps.body,
206
- color: import_componentColors.componentColors.text.muted,
207
- "aria-live": "polite",
208
- userSelect: "none",
209
- children: summary
210
- })]
211
- });
212
- }
213
- const dotSize = variant === "bars" ? "$1.5" : "$0.75";
214
- const activeDotSize = variant === "bars" ? "$3" : "$2";
135
+ const isNumbered = variant === "numbered";
136
+ const canPrev = !disabled && index > 0;
137
+ const canNext = isNumbered ? !disabled && currentPage < total :
138
+ // dots/bars: an onSubmit makes the last step actionable, so the forward
139
+ // control is not dead there.
140
+ !(disabled || !isLastStep && index >= total - 1 && !onSubmit);
141
+ const submits = !isNumbered && isLastStep;
142
+ const items = isNumbered ? getPaginationItems(total, currentPage, siblingCount, boundaryCount) : [];
143
+ const summary = isNumbered && showSummary && totalItems != null && pageSize != null ? (0, import_t.bidiIsolate)(totalItems === 0 ? t("0 of 0") : (0, import_t.withInterp)(t("{{start}}\u2013{{end}} of {{total}}"), {
144
+ start: (currentPage - 1) * pageSize + 1,
145
+ end: Math.min(currentPage * pageSize, totalItems),
146
+ total: totalItems
147
+ })) : void 0;
148
+ const step = variant === "bars" ? stripSteps.large : stripSteps.base;
215
149
  return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
216
150
  alignItems: "center",
217
151
  justifyContent: "center",
152
+ role: "navigation",
153
+ "aria-label": t("Pagination"),
218
154
  ...knobProps.gap,
219
155
  ...stackProps,
220
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
156
+ children: [isNumbered && showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
221
157
  size: knobProps.sizeToken,
222
- circular: true,
223
- icon: PrevArrowIcon,
224
- onPress: handlePrev,
225
- disabled: disabled || index === 0,
226
158
  variant: "outlined",
227
- "aria-label": t("Previous page"),
228
- onKeyDown: activateOnEnterSpace(handlePrev, !(disabled || index === 0))
229
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
159
+ icon: FirstIcon,
160
+ onPress: () => goTo(0),
161
+ disabled: !canPrev,
162
+ "aria-label": t("Go to first page"),
163
+ onKeyDown: activateOnEnterSpace(() => goTo(0), canPrev)
164
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
165
+ size: knobProps.sizeToken,
166
+ circular: !isNumbered,
167
+ variant: "outlined",
168
+ icon: isNumbered ? PrevIcon : PrevArrowIcon,
169
+ onPress: handlePrev,
170
+ disabled: !canPrev,
171
+ "aria-label": isNumbered ? t("Go to previous page") : t("Previous page"),
172
+ onKeyDown: activateOnEnterSpace(handlePrev, canPrev)
173
+ }), isNumbered ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
230
174
  alignItems: "center",
231
- justifyContent: "center",
232
- gap: "$2",
233
- backgroundColor: import_componentColors.componentColors.interactive.background,
234
- paddingHorizontal: knobProps.panelPadding.padding,
235
- height: knobProps.sizeToken,
236
- borderRadius: "$10",
237
- children: Array.from({
238
- length: total
239
- }).map((_, dotIndex) => {
240
- const isActive = dotIndex === index;
241
- const isCompleted = completedSteps?.has(dotIndex);
242
- const canJump = allowJumpTo && !disabled;
243
- const dotProps = {
244
- width: isActive ? activeDotSize : dotSize,
245
- height: dotSize,
246
- borderRadius: "$10",
247
- // LC-05 / D-01 rider (a): the current dot speaks the SAME selected
248
- // language as this component's numbered body (accent) — it used to
249
- // paint ink while the numbered page button painted accent, so one
250
- // component taught two meanings for "current".
251
- backgroundColor: isCompleted && !isActive ? import_componentColors.componentColors.indicator.completed : isActive ? import_componentColors.componentColors.indicator.selected : import_componentColors.componentColors.indicator.track,
252
- transition: motionTransition,
253
- cursor: canJump ? "pointer" : void 0,
254
- alignItems: "center",
255
- justifyContent: "center",
256
- "aria-current": isActive ? "step" : void 0,
257
- "data-pagination-dot": isActive ? "active" : "idle",
258
- // Belt-and-suspenders for the CSS driver: named `transition` covers
259
- // Tamagui layout props; explicit width/bg ensures measurable intermediates.
260
- style: {
261
- transition: `width var(--mp-transition, 100ms) ease, height var(--mp-transition, 100ms) ease, background-color var(--mp-transition, 100ms) ease`
262
- },
263
- ...(canJump ? {
264
- onPress: () => goTo(dotIndex),
265
- role: "button",
266
- "aria-label": (0, import_t.withInterp)(t("Go to step {{number}}"), {
267
- number: dotIndex + 1
268
- }),
269
- tabIndex: 0,
270
- focusVisibleStyle: {
271
- outlineColor: "$outlineColor",
272
- outlineWidth: 2,
273
- outlineStyle: "solid",
274
- outlineOffset: 1
275
- },
276
- onKeyDown: e => {
277
- if (e.key === "Enter" || e.key === " ") {
278
- e.preventDefault();
279
- goTo(dotIndex);
280
- }
281
- }
282
- } : {})
283
- };
284
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
285
- ...dotProps,
286
- children: isCompleted && !isActive && variant === "dots" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.CheckIcon, {
287
- size: 8,
288
- color: "white",
289
- weight: "bold"
290
- })
291
- }, dotIndex);
175
+ gap: "$1",
176
+ children: items.map(item => {
177
+ if (typeof item !== "number") {
178
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
179
+ "aria-hidden": true,
180
+ userSelect: "none",
181
+ textAlign: "center",
182
+ minWidth: "$2",
183
+ ...knobProps.body,
184
+ color: import_componentColors.componentColors.text.muted,
185
+ children: "\u2026"
186
+ }, item);
187
+ }
188
+ const isCurrent = item === currentPage;
189
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
190
+ size: knobProps.sizeToken,
191
+ minWidth: knobProps.sizeToken,
192
+ paddingHorizontal: "$2",
193
+ accent: isCurrent,
194
+ chromeless: !isCurrent,
195
+ disabled,
196
+ onPress: () => goTo(item - 1),
197
+ "aria-label": (0, import_t.withInterp)(t("Page {{number}}"), {
198
+ number: item
199
+ }),
200
+ "aria-current": isCurrent ? "page" : void 0,
201
+ onKeyDown: activateOnEnterSpace(() => goTo(item - 1), !disabled),
202
+ children: String(item)
203
+ }, item);
292
204
  })
205
+ }) :
206
+ // LC-16: the dot strip IS `DotIndicator` — this component owns the
207
+ // pager frame around it, not a second strip. `completedSteps`, the
208
+ // wizard a11y idiom and the rail all ride the primitive, so the two
209
+ // strips in the catalog cannot drift apart again.
210
+ /* @__PURE__ */
211
+ (0, import_jsx_runtime.jsx)(import_DotIndicator.DotIndicator, {
212
+ total,
213
+ activeIndex: index,
214
+ variant,
215
+ idiom: "step",
216
+ rail: true,
217
+ completedSteps,
218
+ dotSize: step.mark,
219
+ activeDotSize: step.active,
220
+ transition: motionTransition,
221
+ dotStateAttribute: "data-pagination-dot",
222
+ onChange: allowJumpTo && !disabled ? goTo : void 0,
223
+ disabled: allowJumpTo && disabled
293
224
  }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
294
225
  size: knobProps.sizeToken,
295
- circular: true,
296
- icon: isLastStep ? import_react.CheckIcon : NextArrowIcon,
226
+ circular: !isNumbered,
227
+ variant: submits ? void 0 : "outlined",
228
+ theme: submits ? "active" : void 0,
229
+ icon: isNumbered ? NextIcon : submits ? import_react.CheckIcon : NextArrowIcon,
297
230
  onPress: handleNext,
298
- disabled: disabled || !isLastStep && index >= total - 1 && !onSubmit,
299
- variant: isLastStep ? void 0 : "outlined",
300
- theme: isLastStep ? "active" : void 0,
301
- "aria-label": isLastStep ? t("Submit") : t("Next page"),
302
- onKeyDown: activateOnEnterSpace(handleNext, !(disabled || !isLastStep && index >= total - 1 && !onSubmit))
231
+ disabled: !canNext,
232
+ "aria-label": isNumbered ? t("Go to next page") : submits ? t("Submit") : t("Next page"),
233
+ onKeyDown: activateOnEnterSpace(handleNext, canNext)
234
+ }), isNumbered && showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
235
+ size: knobProps.sizeToken,
236
+ variant: "outlined",
237
+ icon: LastIcon,
238
+ onPress: () => goTo(total - 1),
239
+ disabled: !canNext,
240
+ "aria-label": t("Go to last page"),
241
+ onKeyDown: activateOnEnterSpace(() => goTo(total - 1), canNext)
242
+ }), summary && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
243
+ ...knobProps.body,
244
+ color: import_componentColors.componentColors.text.muted,
245
+ "aria-live": "polite",
246
+ userSelect: "none",
247
+ children: summary
303
248
  })]
304
249
  });
305
250
  }
@@ -35,6 +35,7 @@ var import_react2 = require("react");
35
35
  var import_react_i18next = require("react-i18next");
36
36
  var import_forms = require("@multiplatform.one/forms");
37
37
  var import_tamagui = require("tamagui");
38
+ var import_DotIndicator = require("./DotIndicator/index.native.js");
38
39
  var import_componentColors = require("./componentColors.native.js");
39
40
  var import_useDirection = require("./hooks/useDirection.native.js");
40
41
  var import_t = require("./shared/t.native.js");
@@ -68,6 +69,16 @@ function getPaginationItems(total, page) {
68
69
  items.push(...endPages);
69
70
  return items;
70
71
  }
72
+ var stripSteps = {
73
+ base: {
74
+ mark: "$0.75",
75
+ active: "$2"
76
+ },
77
+ large: {
78
+ mark: "$1.5",
79
+ active: "$3"
80
+ }
81
+ };
71
82
  function Pagination(param) {
72
83
  var {
73
84
  total,
@@ -132,201 +143,135 @@ function Pagination(param) {
132
143
  }
133
144
  };
134
145
  };
135
- if (variant === "numbered") {
136
- var items = getPaginationItems(total, currentPage, siblingCount, boundaryCount);
137
- var canPrev = !disabled && currentPage > 1;
138
- var canNext = !disabled && currentPage < total;
139
- var summary = showSummary && totalItems != null && pageSize != null ? (0, import_t.bidiIsolate)(totalItems === 0 ? t("0 of 0") : (0, import_t.withInterp)(t("{{start}}\u2013{{end}} of {{total}}"), {
140
- start: (currentPage - 1) * pageSize + 1,
141
- end: Math.min(currentPage * pageSize, totalItems),
142
- total: totalItems
143
- })) : void 0;
144
- return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
145
- alignItems: "center",
146
- justifyContent: "center",
147
- role: "navigation",
148
- "aria-label": t("Pagination"),
149
- ...knobProps.gap,
150
- ...stackProps,
151
- children: [showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
152
- size: knobProps.sizeToken,
153
- variant: "outlined",
154
- icon: FirstIcon,
155
- onPress: function onPress() {
156
- return goTo(0);
157
- },
158
- disabled: !canPrev,
159
- "aria-label": t("Go to first page"),
160
- onKeyDown: activateOnEnterSpace(function () {
161
- return goTo(0);
162
- }, canPrev)
163
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
164
- size: knobProps.sizeToken,
165
- variant: "outlined",
166
- icon: PrevIcon,
167
- onPress: handlePrev,
168
- disabled: !canPrev,
169
- "aria-label": t("Go to previous page"),
170
- onKeyDown: activateOnEnterSpace(handlePrev, canPrev)
171
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
172
- alignItems: "center",
173
- gap: "$1",
174
- children: items.map(function (item) {
175
- if (typeof item !== "number") {
176
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
177
- "aria-hidden": true,
178
- userSelect: "none",
179
- textAlign: "center",
180
- minWidth: "$2",
181
- ...knobProps.body,
182
- color: import_componentColors.componentColors.text.muted,
183
- children: "\u2026"
184
- }, item);
185
- }
186
- var isCurrent = item === currentPage;
187
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
188
- size: knobProps.sizeToken,
189
- minWidth: knobProps.sizeToken,
190
- paddingHorizontal: "$2",
191
- accent: isCurrent,
192
- chromeless: !isCurrent,
193
- disabled,
194
- onPress: function onPress() {
195
- return goTo(item - 1);
196
- },
197
- "aria-label": (0, import_t.withInterp)(t("Page {{number}}"), {
198
- number: item
199
- }),
200
- "aria-current": isCurrent ? "page" : void 0,
201
- onKeyDown: activateOnEnterSpace(function () {
202
- return goTo(item - 1);
203
- }, !disabled),
204
- children: String(item)
205
- }, item);
206
- })
207
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
208
- size: knobProps.sizeToken,
209
- variant: "outlined",
210
- icon: NextIcon,
211
- onPress: handleNext,
212
- disabled: !canNext,
213
- "aria-label": t("Go to next page"),
214
- onKeyDown: activateOnEnterSpace(handleNext, canNext)
215
- }), showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
216
- size: knobProps.sizeToken,
217
- variant: "outlined",
218
- icon: LastIcon,
219
- onPress: function onPress() {
220
- return goTo(total - 1);
221
- },
222
- disabled: !canNext,
223
- "aria-label": t("Go to last page"),
224
- onKeyDown: activateOnEnterSpace(function () {
225
- return goTo(total - 1);
226
- }, canNext)
227
- }), summary && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
228
- ...knobProps.body,
229
- color: import_componentColors.componentColors.text.muted,
230
- "aria-live": "polite",
231
- userSelect: "none",
232
- children: summary
233
- })]
234
- });
235
- }
236
- var dotSize = variant === "bars" ? "$1.5" : "$0.75";
237
- var activeDotSize = variant === "bars" ? "$3" : "$2";
146
+ var isNumbered = variant === "numbered";
147
+ var canPrev = !disabled && index > 0;
148
+ var canNext = isNumbered ? !disabled && currentPage < total :
149
+ // dots/bars: an onSubmit makes the last step actionable, so the forward
150
+ // control is not dead there.
151
+ !(disabled || !isLastStep && index >= total - 1 && !onSubmit);
152
+ var submits = !isNumbered && isLastStep;
153
+ var items = isNumbered ? getPaginationItems(total, currentPage, siblingCount, boundaryCount) : [];
154
+ var summary = isNumbered && showSummary && totalItems != null && pageSize != null ? (0, import_t.bidiIsolate)(totalItems === 0 ? t("0 of 0") : (0, import_t.withInterp)(t("{{start}}\u2013{{end}} of {{total}}"), {
155
+ start: (currentPage - 1) * pageSize + 1,
156
+ end: Math.min(currentPage * pageSize, totalItems),
157
+ total: totalItems
158
+ })) : void 0;
159
+ var step = variant === "bars" ? stripSteps.large : stripSteps.base;
238
160
  return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.XStack, {
239
161
  alignItems: "center",
240
162
  justifyContent: "center",
163
+ role: "navigation",
164
+ "aria-label": t("Pagination"),
241
165
  ...knobProps.gap,
242
166
  ...stackProps,
243
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
167
+ children: [isNumbered && showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
244
168
  size: knobProps.sizeToken,
245
- circular: true,
246
- icon: PrevArrowIcon,
247
- onPress: handlePrev,
248
- disabled: disabled || index === 0,
249
169
  variant: "outlined",
170
+ icon: FirstIcon,
171
+ onPress: function onPress() {
172
+ return goTo(0);
173
+ },
174
+ disabled: !canPrev,
175
+ "aria-label": t("Go to first page"),
176
+ onKeyDown: activateOnEnterSpace(function () {
177
+ return goTo(0);
178
+ }, canPrev)
179
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
180
+ size: knobProps.sizeToken,
181
+ circular: !isNumbered,
182
+ variant: "outlined",
183
+ icon: isNumbered ? PrevIcon : PrevArrowIcon,
184
+ onPress: handlePrev,
185
+ disabled: !canPrev,
250
186
  // LC-40: the Button's own disabled wash owns the treatment — the
251
187
  // legacy opacity 0.3 dim stacked on top of it (double-dim).
252
- "aria-label": t("Previous page"),
253
- onKeyDown: activateOnEnterSpace(handlePrev, !(disabled || index === 0))
254
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
188
+ "aria-label": isNumbered ? t("Go to previous page") : t("Previous page"),
189
+ onKeyDown: activateOnEnterSpace(handlePrev, canPrev)
190
+ }), isNumbered ? /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.XStack, {
255
191
  alignItems: "center",
256
- justifyContent: "center",
257
- gap: "$2",
258
- backgroundColor: import_componentColors.componentColors.interactive.background,
259
- paddingHorizontal: knobProps.panelPadding.padding,
260
- height: knobProps.sizeToken,
261
- borderRadius: "$10",
262
- children: Array.from({
263
- length: total
264
- }).map(function (_, dotIndex) {
265
- var isActive = dotIndex === index;
266
- var isCompleted = completedSteps === null || completedSteps === void 0 ? void 0 : completedSteps.has(dotIndex);
267
- var canJump = allowJumpTo && !disabled;
268
- var dotProps = {
269
- width: isActive ? activeDotSize : dotSize,
270
- height: dotSize,
271
- borderRadius: "$10",
272
- // LC-05 / D-01 rider (a): the current dot speaks the SAME selected
273
- // language as this component's numbered body (accent) — it used to
274
- // paint ink while the numbered page button painted accent, so one
275
- // component taught two meanings for "current".
276
- backgroundColor: isCompleted && !isActive ? import_componentColors.componentColors.indicator.completed : isActive ? import_componentColors.componentColors.indicator.selected : import_componentColors.componentColors.indicator.track,
277
- transition: motionTransition,
278
- cursor: canJump ? "pointer" : void 0,
279
- alignItems: "center",
280
- justifyContent: "center",
281
- "aria-current": isActive ? "step" : void 0,
282
- "data-pagination-dot": isActive ? "active" : "idle",
283
- // Belt-and-suspenders for the CSS driver: named `transition` covers
284
- // Tamagui layout props; explicit width/bg ensures measurable intermediates.
285
- style: {
286
- transition: `width var(--mp-transition, 100ms) ease, height var(--mp-transition, 100ms) ease, background-color var(--mp-transition, 100ms) ease`
192
+ gap: "$1",
193
+ children: items.map(function (item) {
194
+ if (typeof item !== "number") {
195
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
196
+ "aria-hidden": true,
197
+ userSelect: "none",
198
+ textAlign: "center",
199
+ minWidth: "$2",
200
+ ...knobProps.body,
201
+ color: import_componentColors.componentColors.text.muted,
202
+ children: "\u2026"
203
+ }, item);
204
+ }
205
+ var isCurrent = item === currentPage;
206
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
207
+ size: knobProps.sizeToken,
208
+ minWidth: knobProps.sizeToken,
209
+ paddingHorizontal: "$2",
210
+ accent: isCurrent,
211
+ chromeless: !isCurrent,
212
+ disabled,
213
+ onPress: function onPress() {
214
+ return goTo(item - 1);
287
215
  },
288
- ...(canJump ? {
289
- onPress: function onPress() {
290
- return goTo(dotIndex);
291
- },
292
- role: "button",
293
- "aria-label": (0, import_t.withInterp)(t("Go to step {{number}}"), {
294
- number: dotIndex + 1
295
- }),
296
- tabIndex: 0,
297
- focusVisibleStyle: {
298
- outlineColor: "$outlineColor",
299
- outlineWidth: 2,
300
- outlineStyle: "solid",
301
- outlineOffset: 1
302
- },
303
- onKeyDown: function onKeyDown(e) {
304
- if (e.key === "Enter" || e.key === " ") {
305
- e.preventDefault();
306
- goTo(dotIndex);
307
- }
308
- }
309
- } : {})
310
- };
311
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.View, {
312
- ...dotProps,
313
- children: isCompleted && !isActive && variant === "dots" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.CheckIcon, {
314
- size: 8,
315
- color: "white",
316
- weight: "bold"
317
- })
318
- }, dotIndex);
216
+ "aria-label": (0, import_t.withInterp)(t("Page {{number}}"), {
217
+ number: item
218
+ }),
219
+ "aria-current": isCurrent ? "page" : void 0,
220
+ onKeyDown: activateOnEnterSpace(function () {
221
+ return goTo(item - 1);
222
+ }, !disabled),
223
+ children: String(item)
224
+ }, item);
319
225
  })
226
+ }) :
227
+ // LC-16: the dot strip IS `DotIndicator` — this component owns the
228
+ // pager frame around it, not a second strip. `completedSteps`, the
229
+ // wizard a11y idiom and the rail all ride the primitive, so the two
230
+ // strips in the catalog cannot drift apart again.
231
+ /* @__PURE__ */
232
+ (0, import_jsx_runtime.jsx)(import_DotIndicator.DotIndicator, {
233
+ total,
234
+ activeIndex: index,
235
+ variant,
236
+ idiom: "step",
237
+ rail: true,
238
+ completedSteps,
239
+ dotSize: step.mark,
240
+ activeDotSize: step.active,
241
+ transition: motionTransition,
242
+ dotStateAttribute: "data-pagination-dot",
243
+ onChange: allowJumpTo && !disabled ? goTo : void 0,
244
+ // A strip nobody can press has no disabled state — only a jumpable
245
+ // one is "interactive but blocked".
246
+ disabled: allowJumpTo && disabled
320
247
  }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
321
248
  size: knobProps.sizeToken,
322
- circular: true,
323
- icon: isLastStep ? import_react.CheckIcon : NextArrowIcon,
249
+ circular: !isNumbered,
250
+ variant: submits ? void 0 : "outlined",
251
+ theme: submits ? "active" : void 0,
252
+ icon: isNumbered ? NextIcon : submits ? import_react.CheckIcon : NextArrowIcon,
324
253
  onPress: handleNext,
325
- disabled: disabled || !isLastStep && index >= total - 1 && !onSubmit,
326
- variant: isLastStep ? void 0 : "outlined",
327
- theme: isLastStep ? "active" : void 0,
328
- "aria-label": isLastStep ? t("Submit") : t("Next page"),
329
- onKeyDown: activateOnEnterSpace(handleNext, !(disabled || !isLastStep && index >= total - 1 && !onSubmit))
254
+ disabled: !canNext,
255
+ "aria-label": isNumbered ? t("Go to next page") : submits ? t("Submit") : t("Next page"),
256
+ onKeyDown: activateOnEnterSpace(handleNext, canNext)
257
+ }), isNumbered && showFirstLast && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
258
+ size: knobProps.sizeToken,
259
+ variant: "outlined",
260
+ icon: LastIcon,
261
+ onPress: function onPress() {
262
+ return goTo(total - 1);
263
+ },
264
+ disabled: !canNext,
265
+ "aria-label": t("Go to last page"),
266
+ onKeyDown: activateOnEnterSpace(function () {
267
+ return goTo(total - 1);
268
+ }, canNext)
269
+ }), summary && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
270
+ ...knobProps.body,
271
+ color: import_componentColors.componentColors.text.muted,
272
+ "aria-live": "polite",
273
+ userSelect: "none",
274
+ children: summary
330
275
  })]
331
276
  });
332
277
  }