@multiplatform.one/table 7.11.0 → 7.15.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 (265) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/ChildTable/index.cjs +8 -2
  3. package/dist/cjs/components/ChildTable/index.native.js +8 -2
  4. package/dist/cjs/components/ChildTable/index.native.js.map +1 -1
  5. package/dist/cjs/components/ColumnHeaderFilter/index.cjs +77 -111
  6. package/dist/cjs/components/ColumnHeaderFilter/index.native.js +89 -129
  7. package/dist/cjs/components/ColumnHeaderFilter/index.native.js.map +1 -1
  8. package/dist/cjs/components/DataTable/DataTableRoot.cjs +17 -1
  9. package/dist/cjs/components/DataTable/DataTableRoot.native.js +25 -2
  10. package/dist/cjs/components/DataTable/DataTableRoot.native.js.map +1 -1
  11. package/dist/cjs/components/DataTableCell/CellModalEditor.cjs +72 -70
  12. package/dist/cjs/components/DataTableCell/index.cjs +2 -2
  13. package/dist/cjs/components/DataTableCell/index.native.js +2 -11
  14. package/dist/cjs/components/DataTableCell/index.native.js.map +1 -1
  15. package/dist/cjs/components/DataTableDateFilter/index.cjs +135 -158
  16. package/dist/cjs/components/DataTableDateFilter/index.native.js +153 -183
  17. package/dist/cjs/components/DataTableDateFilter/index.native.js.map +1 -1
  18. package/dist/cjs/components/DataTableExport/index.cjs +122 -139
  19. package/dist/cjs/components/DataTableExport/index.native.js +135 -157
  20. package/dist/cjs/components/DataTableExport/index.native.js.map +1 -1
  21. package/dist/cjs/components/DataTableGrouping/index.cjs +192 -212
  22. package/dist/cjs/components/DataTableGrouping/index.native.js +209 -230
  23. package/dist/cjs/components/DataTableGrouping/index.native.js.map +1 -1
  24. package/dist/cjs/components/DataTableSearch/index.cjs +103 -115
  25. package/dist/cjs/components/DataTableSearch/index.native.js +111 -123
  26. package/dist/cjs/components/DataTableSearch/index.native.js.map +1 -1
  27. package/dist/cjs/components/DataTableToolbar/index.cjs +44 -61
  28. package/dist/cjs/components/DataTableToolbar/index.native.js +46 -65
  29. package/dist/cjs/components/DataTableToolbar/index.native.js.map +1 -1
  30. package/dist/cjs/components/DataTableViewOptions/index.cjs +38 -54
  31. package/dist/cjs/components/DataTableViewOptions/index.native.js +40 -56
  32. package/dist/cjs/components/DataTableViewOptions/index.native.js.map +1 -1
  33. package/dist/cjs/components/FilterOperatorValueEditor/index.cjs +3 -11
  34. package/dist/cjs/components/FilterOperatorValueEditor/index.native.js +3 -11
  35. package/dist/cjs/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  36. package/dist/cjs/components/SimpleTable/index.cjs +2 -6
  37. package/dist/cjs/components/SimpleTable/index.native.js +2 -6
  38. package/dist/cjs/components/SimpleTable/index.native.js.map +1 -1
  39. package/dist/cjs/components/TableInput/RowDetailEditor.cjs +190 -0
  40. package/dist/cjs/components/TableInput/RowDetailEditor.native.js +172 -0
  41. package/dist/cjs/components/TableInput/RowDetailEditor.native.js.map +1 -0
  42. package/dist/cjs/components/TableInput/index.cjs +42 -5
  43. package/dist/cjs/components/TableInput/index.native.js +64 -1
  44. package/dist/cjs/components/TableInput/index.native.js.map +1 -1
  45. package/dist/cjs/components/TableInput/shared.cjs +8 -0
  46. package/dist/cjs/components/TableInput/shared.native.js +10 -0
  47. package/dist/cjs/components/TableInput/shared.native.js.map +1 -1
  48. package/dist/cjs/hooks/useDataTable.cjs +11 -1
  49. package/dist/cjs/hooks/useDataTable.native.js +12 -2
  50. package/dist/cjs/hooks/useDataTable.native.js.map +1 -1
  51. package/dist/cjs/index.native.js.map +1 -1
  52. package/dist/cjs/utils/rowPress.cjs +4 -1
  53. package/dist/cjs/utils/rowPress.native.js +4 -1
  54. package/dist/cjs/utils/rowPress.native.js.map +1 -1
  55. package/dist/esm/components/ChildTable/index.mjs +8 -2
  56. package/dist/esm/components/ChildTable/index.mjs.map +1 -1
  57. package/dist/esm/components/ChildTable/index.native.js +8 -2
  58. package/dist/esm/components/ChildTable/index.native.js.map +1 -1
  59. package/dist/esm/components/ColumnHeaderFilter/index.mjs +80 -114
  60. package/dist/esm/components/ColumnHeaderFilter/index.mjs.map +1 -1
  61. package/dist/esm/components/ColumnHeaderFilter/index.native.js +92 -132
  62. package/dist/esm/components/ColumnHeaderFilter/index.native.js.map +1 -1
  63. package/dist/esm/components/DataTable/DataTableRoot.mjs +17 -1
  64. package/dist/esm/components/DataTable/DataTableRoot.mjs.map +1 -1
  65. package/dist/esm/components/DataTable/DataTableRoot.native.js +25 -2
  66. package/dist/esm/components/DataTable/DataTableRoot.native.js.map +1 -1
  67. package/dist/esm/components/DataTableCell/CellModalEditor.mjs +76 -74
  68. package/dist/esm/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  69. package/dist/esm/components/DataTableCell/index.mjs +3 -3
  70. package/dist/esm/components/DataTableCell/index.mjs.map +1 -1
  71. package/dist/esm/components/DataTableCell/index.native.js +3 -12
  72. package/dist/esm/components/DataTableCell/index.native.js.map +1 -1
  73. package/dist/esm/components/DataTableDateFilter/index.mjs +137 -160
  74. package/dist/esm/components/DataTableDateFilter/index.mjs.map +1 -1
  75. package/dist/esm/components/DataTableDateFilter/index.native.js +155 -185
  76. package/dist/esm/components/DataTableDateFilter/index.native.js.map +1 -1
  77. package/dist/esm/components/DataTableExport/index.mjs +124 -141
  78. package/dist/esm/components/DataTableExport/index.mjs.map +1 -1
  79. package/dist/esm/components/DataTableExport/index.native.js +137 -159
  80. package/dist/esm/components/DataTableExport/index.native.js.map +1 -1
  81. package/dist/esm/components/DataTableGrouping/index.mjs +194 -214
  82. package/dist/esm/components/DataTableGrouping/index.mjs.map +1 -1
  83. package/dist/esm/components/DataTableGrouping/index.native.js +211 -232
  84. package/dist/esm/components/DataTableGrouping/index.native.js.map +1 -1
  85. package/dist/esm/components/DataTableSearch/index.mjs +105 -117
  86. package/dist/esm/components/DataTableSearch/index.mjs.map +1 -1
  87. package/dist/esm/components/DataTableSearch/index.native.js +113 -125
  88. package/dist/esm/components/DataTableSearch/index.native.js.map +1 -1
  89. package/dist/esm/components/DataTableToolbar/index.mjs +46 -63
  90. package/dist/esm/components/DataTableToolbar/index.mjs.map +1 -1
  91. package/dist/esm/components/DataTableToolbar/index.native.js +48 -67
  92. package/dist/esm/components/DataTableToolbar/index.native.js.map +1 -1
  93. package/dist/esm/components/DataTableViewOptions/index.mjs +40 -56
  94. package/dist/esm/components/DataTableViewOptions/index.mjs.map +1 -1
  95. package/dist/esm/components/DataTableViewOptions/index.native.js +42 -58
  96. package/dist/esm/components/DataTableViewOptions/index.native.js.map +1 -1
  97. package/dist/esm/components/FilterOperatorValueEditor/index.mjs +3 -11
  98. package/dist/esm/components/FilterOperatorValueEditor/index.mjs.map +1 -1
  99. package/dist/esm/components/FilterOperatorValueEditor/index.native.js +3 -11
  100. package/dist/esm/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  101. package/dist/esm/components/SimpleTable/index.mjs +3 -7
  102. package/dist/esm/components/SimpleTable/index.mjs.map +1 -1
  103. package/dist/esm/components/SimpleTable/index.native.js +3 -7
  104. package/dist/esm/components/SimpleTable/index.native.js.map +1 -1
  105. package/dist/esm/components/TableInput/RowDetailEditor.mjs +165 -0
  106. package/dist/esm/components/TableInput/RowDetailEditor.mjs.map +1 -0
  107. package/dist/esm/components/TableInput/RowDetailEditor.native.js +144 -0
  108. package/dist/esm/components/TableInput/RowDetailEditor.native.js.map +1 -0
  109. package/dist/esm/components/TableInput/index.mjs +42 -5
  110. package/dist/esm/components/TableInput/index.mjs.map +1 -1
  111. package/dist/esm/components/TableInput/index.native.js +64 -1
  112. package/dist/esm/components/TableInput/index.native.js.map +1 -1
  113. package/dist/esm/components/TableInput/shared.mjs +7 -1
  114. package/dist/esm/components/TableInput/shared.mjs.map +1 -1
  115. package/dist/esm/components/TableInput/shared.native.js +9 -1
  116. package/dist/esm/components/TableInput/shared.native.js.map +1 -1
  117. package/dist/esm/hooks/useDataTable.mjs +11 -1
  118. package/dist/esm/hooks/useDataTable.mjs.map +1 -1
  119. package/dist/esm/hooks/useDataTable.native.js +12 -2
  120. package/dist/esm/hooks/useDataTable.native.js.map +1 -1
  121. package/dist/esm/index.mjs.map +1 -1
  122. package/dist/esm/index.native.js.map +1 -1
  123. package/dist/esm/utils/rowPress.mjs +4 -1
  124. package/dist/esm/utils/rowPress.mjs.map +1 -1
  125. package/dist/esm/utils/rowPress.native.js +4 -1
  126. package/dist/esm/utils/rowPress.native.js.map +1 -1
  127. package/dist/jsx/components/ChildTable/index.mjs +8 -2
  128. package/dist/jsx/components/ChildTable/index.mjs.map +1 -1
  129. package/dist/jsx/components/ChildTable/index.native.js +8 -2
  130. package/dist/jsx/components/ChildTable/index.native.js.map +1 -1
  131. package/dist/jsx/components/ColumnHeaderFilter/index.mjs +80 -114
  132. package/dist/jsx/components/ColumnHeaderFilter/index.mjs.map +1 -1
  133. package/dist/jsx/components/ColumnHeaderFilter/index.native.js +89 -129
  134. package/dist/jsx/components/ColumnHeaderFilter/index.native.js.map +1 -1
  135. package/dist/jsx/components/DataTable/DataTableRoot.mjs +17 -1
  136. package/dist/jsx/components/DataTable/DataTableRoot.mjs.map +1 -1
  137. package/dist/jsx/components/DataTable/DataTableRoot.native.js +25 -2
  138. package/dist/jsx/components/DataTable/DataTableRoot.native.js.map +1 -1
  139. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs +76 -74
  140. package/dist/jsx/components/DataTableCell/CellModalEditor.mjs.map +1 -1
  141. package/dist/jsx/components/DataTableCell/index.mjs +3 -3
  142. package/dist/jsx/components/DataTableCell/index.mjs.map +1 -1
  143. package/dist/jsx/components/DataTableCell/index.native.js +2 -11
  144. package/dist/jsx/components/DataTableCell/index.native.js.map +1 -1
  145. package/dist/jsx/components/DataTableDateFilter/index.mjs +137 -160
  146. package/dist/jsx/components/DataTableDateFilter/index.mjs.map +1 -1
  147. package/dist/jsx/components/DataTableDateFilter/index.native.js +153 -183
  148. package/dist/jsx/components/DataTableDateFilter/index.native.js.map +1 -1
  149. package/dist/jsx/components/DataTableExport/index.mjs +124 -141
  150. package/dist/jsx/components/DataTableExport/index.mjs.map +1 -1
  151. package/dist/jsx/components/DataTableExport/index.native.js +135 -157
  152. package/dist/jsx/components/DataTableExport/index.native.js.map +1 -1
  153. package/dist/jsx/components/DataTableGrouping/index.mjs +194 -214
  154. package/dist/jsx/components/DataTableGrouping/index.mjs.map +1 -1
  155. package/dist/jsx/components/DataTableGrouping/index.native.js +209 -230
  156. package/dist/jsx/components/DataTableGrouping/index.native.js.map +1 -1
  157. package/dist/jsx/components/DataTableSearch/index.mjs +105 -117
  158. package/dist/jsx/components/DataTableSearch/index.mjs.map +1 -1
  159. package/dist/jsx/components/DataTableSearch/index.native.js +111 -123
  160. package/dist/jsx/components/DataTableSearch/index.native.js.map +1 -1
  161. package/dist/jsx/components/DataTableToolbar/index.mjs +46 -63
  162. package/dist/jsx/components/DataTableToolbar/index.mjs.map +1 -1
  163. package/dist/jsx/components/DataTableToolbar/index.native.js +46 -65
  164. package/dist/jsx/components/DataTableToolbar/index.native.js.map +1 -1
  165. package/dist/jsx/components/DataTableViewOptions/index.mjs +40 -56
  166. package/dist/jsx/components/DataTableViewOptions/index.mjs.map +1 -1
  167. package/dist/jsx/components/DataTableViewOptions/index.native.js +40 -56
  168. package/dist/jsx/components/DataTableViewOptions/index.native.js.map +1 -1
  169. package/dist/jsx/components/FilterOperatorValueEditor/index.mjs +3 -11
  170. package/dist/jsx/components/FilterOperatorValueEditor/index.mjs.map +1 -1
  171. package/dist/jsx/components/FilterOperatorValueEditor/index.native.js +3 -11
  172. package/dist/jsx/components/FilterOperatorValueEditor/index.native.js.map +1 -1
  173. package/dist/jsx/components/SimpleTable/index.mjs +3 -7
  174. package/dist/jsx/components/SimpleTable/index.mjs.map +1 -1
  175. package/dist/jsx/components/SimpleTable/index.native.js +2 -6
  176. package/dist/jsx/components/SimpleTable/index.native.js.map +1 -1
  177. package/dist/jsx/components/TableInput/RowDetailEditor.mjs +165 -0
  178. package/dist/jsx/components/TableInput/RowDetailEditor.mjs.map +1 -0
  179. package/dist/jsx/components/TableInput/RowDetailEditor.native.js +172 -0
  180. package/dist/jsx/components/TableInput/RowDetailEditor.native.js.map +1 -0
  181. package/dist/jsx/components/TableInput/index.mjs +42 -5
  182. package/dist/jsx/components/TableInput/index.mjs.map +1 -1
  183. package/dist/jsx/components/TableInput/index.native.js +64 -1
  184. package/dist/jsx/components/TableInput/index.native.js.map +1 -1
  185. package/dist/jsx/components/TableInput/shared.mjs +7 -1
  186. package/dist/jsx/components/TableInput/shared.mjs.map +1 -1
  187. package/dist/jsx/components/TableInput/shared.native.js +10 -0
  188. package/dist/jsx/components/TableInput/shared.native.js.map +1 -1
  189. package/dist/jsx/hooks/useDataTable.mjs +11 -1
  190. package/dist/jsx/hooks/useDataTable.mjs.map +1 -1
  191. package/dist/jsx/hooks/useDataTable.native.js +12 -2
  192. package/dist/jsx/hooks/useDataTable.native.js.map +1 -1
  193. package/dist/jsx/index.js.map +1 -1
  194. package/dist/jsx/index.mjs.map +1 -1
  195. package/dist/jsx/index.native.js.map +1 -1
  196. package/dist/jsx/utils/rowPress.mjs +4 -1
  197. package/dist/jsx/utils/rowPress.mjs.map +1 -1
  198. package/dist/jsx/utils/rowPress.native.js +4 -1
  199. package/dist/jsx/utils/rowPress.native.js.map +1 -1
  200. package/package.json +14 -14
  201. package/src/components/ChildTable/childTable.cellHidden.spec.tsx +57 -0
  202. package/src/components/ChildTable/childTable.rowDetail.spec.tsx +120 -0
  203. package/src/components/ChildTable/index.tsx +16 -0
  204. package/src/components/ColumnHeaderFilter/index.tsx +89 -116
  205. package/src/components/DataTable/DataTable.stories.tsx +71 -6
  206. package/src/components/DataTable/DataTableRoot.tsx +27 -4
  207. package/src/components/DataTable/dataTableMobileCards.spec.tsx +1 -4
  208. package/src/components/DataTable/headerContainment.spec.tsx +91 -0
  209. package/src/components/DataTable/rowPress.spec.tsx +2 -6
  210. package/src/components/DataTableBulkActions/DataTableBulkActions.stories.tsx +5 -4
  211. package/src/components/DataTableCell/CellModalEditor.tsx +95 -75
  212. package/src/components/DataTableCell/cellDraftPolicy.spec.tsx +12 -2
  213. package/src/components/DataTableCell/cellModalEditor.spec.tsx +75 -49
  214. package/src/components/DataTableCell/dataTableCell.spec.tsx +31 -14
  215. package/src/components/DataTableCell/index.tsx +3 -2
  216. package/src/components/DataTableDateFilter/DataTableDateFilter.spec.tsx +6 -3
  217. package/src/components/DataTableDateFilter/index.tsx +151 -180
  218. package/src/components/DataTableExport/index.tsx +135 -142
  219. package/src/components/DataTableGrouping/index.tsx +193 -195
  220. package/src/components/DataTableSearch/index.tsx +111 -109
  221. package/src/components/DataTableToolbar/index.tsx +39 -46
  222. package/src/components/DataTableViewOptions/DataTableViewOptions.stories.tsx +52 -0
  223. package/src/components/DataTableViewOptions/index.tsx +32 -40
  224. package/src/components/FilterOperatorValueEditor/FilterOperatorValueEditor.spec.tsx +64 -2
  225. package/src/components/FilterOperatorValueEditor/index.tsx +0 -8
  226. package/src/components/SimpleTable/index.tsx +3 -2
  227. package/src/components/SimpleTable/simpleTable.spec.tsx +15 -0
  228. package/src/components/Table/accessibility.spec.tsx +7 -19
  229. package/src/components/TableInput/RowDetailEditor.native.tsx +134 -0
  230. package/src/components/TableInput/RowDetailEditor.tsx +173 -0
  231. package/src/components/TableInput/index.native.tsx +49 -1
  232. package/src/components/TableInput/index.tsx +65 -10
  233. package/src/components/TableInput/shared.ts +29 -0
  234. package/src/components/tableDropdowns.spec.tsx +172 -0
  235. package/src/hooks/useDataTable.spec.ts +39 -0
  236. package/src/hooks/useDataTable.ts +15 -1
  237. package/src/index.ts +1 -0
  238. package/src/utils/rowPress.ts +3 -0
  239. package/types/components/ChildTable/index.d.ts +10 -0
  240. package/types/components/ChildTable/index.d.ts.map +1 -1
  241. package/types/components/ColumnHeaderFilter/index.d.ts +1 -1
  242. package/types/components/ColumnHeaderFilter/index.d.ts.map +1 -1
  243. package/types/components/DataTable/DataTableRoot.d.ts.map +1 -1
  244. package/types/components/DataTableCell/CellModalEditor.d.ts +10 -7
  245. package/types/components/DataTableCell/CellModalEditor.d.ts.map +1 -1
  246. package/types/components/DataTableCell/index.d.ts.map +1 -1
  247. package/types/components/DataTableDateFilter/index.d.ts.map +1 -1
  248. package/types/components/DataTableGrouping/index.d.ts.map +1 -1
  249. package/types/components/DataTableSearch/index.d.ts.map +1 -1
  250. package/types/components/FilterOperatorValueEditor/index.d.ts.map +1 -1
  251. package/types/components/SimpleTable/index.d.ts.map +1 -1
  252. package/types/components/TableInput/RowDetailEditor.d.ts +24 -0
  253. package/types/components/TableInput/RowDetailEditor.d.ts.map +1 -0
  254. package/types/components/TableInput/RowDetailEditor.native.d.ts +11 -0
  255. package/types/components/TableInput/RowDetailEditor.native.d.ts.map +1 -0
  256. package/types/components/TableInput/index.d.ts +11 -2
  257. package/types/components/TableInput/index.d.ts.map +1 -1
  258. package/types/components/TableInput/index.native.d.ts +8 -1
  259. package/types/components/TableInput/index.native.d.ts.map +1 -1
  260. package/types/components/TableInput/shared.d.ts +11 -0
  261. package/types/components/TableInput/shared.d.ts.map +1 -1
  262. package/types/hooks/useDataTable.d.ts.map +1 -1
  263. package/types/index.d.ts +1 -0
  264. package/types/index.d.ts.map +1 -1
  265. package/types/utils/rowPress.d.ts.map +1 -1
@@ -158,7 +158,7 @@ function DataTableExport(props) {
158
158
  onPress: handlePrint,
159
159
  "aria-label": "Print table",
160
160
  children: isExporting === "print" ? "..." : "Print"
161
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ExportOptionsPopover, {
161
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ExportOptionsPanel, {
162
162
  exportFormats,
163
163
  exportOptions,
164
164
  onOptionsChange: setExportOptions,
@@ -189,7 +189,7 @@ function extractColumnsFromTable(table) {
189
189
  return [];
190
190
  }
191
191
  }
192
- function ExportOptionsPopover({
192
+ function ExportOptionsPanel({
193
193
  exportFormats,
194
194
  exportOptions,
195
195
  onOptionsChange,
@@ -205,157 +205,140 @@ function ExportOptionsPopover({
205
205
  const iconPx = (0, import_chromeIcons.iconSizeForToken)(String(knobProps.sizeToken));
206
206
  const sz = knobProps.sizeToken;
207
207
  const popoverMinWidth = sz === "$3" ? 240 : sz === "$5" ? 360 : 300;
208
+ const [open, setOpen] = (0, import_react2.useState)(false);
208
209
  const [selectedColumns, setSelectedColumns] = (0, import_react2.useState)(new Set(columns.map(col => col.accessorKey || col.id || "")));
209
210
  const availableColumns = columns.map(col => ({
210
211
  key: col.accessorKey || col.id || "",
211
212
  header: col.header || col.accessorKey || col.id || ""
212
213
  }));
214
+ const trigger = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
215
+ size: knobProps.sizeToken,
216
+ chromeless: true,
217
+ icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.GearIcon, {
218
+ size: iconPx
219
+ }),
220
+ disabled,
221
+ "aria-label": "Export options",
222
+ children: "Options"
223
+ });
213
224
  return (
214
- // LC-06/LC-10: collision handling — without stayInFrame/resize the tall
215
- // option list painted past the viewport and the Export Formats / Print
216
- // rows below the fold were unreachable (no scroll, no clamp).
225
+ // LC-06/LC-10: the option list is taller than most viewports. FloatingPanel
226
+ // clamps it inside the viewport and scrolls, so the Export Formats and
227
+ // Print rows below the fold stay reachable.
217
228
  /* @__PURE__ */
218
- (0, import_jsx_runtime.jsxs)(import_tamagui.Popover, {
219
- stayInFrame: true,
220
- allowFlip: true,
221
- resize: true,
222
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Popover.Trigger, {
223
- asChild: true,
224
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
225
- size: knobProps.sizeToken,
226
- chromeless: true,
227
- icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.GearIcon, {
228
- size: iconPx
229
- }),
230
- disabled,
231
- "aria-label": "Export options",
232
- children: "Options"
233
- })
234
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Popover.Content, {
235
- ...knobProps.elevatedSurface,
236
- transition: knobProps.transition,
237
- enterStyle: {
238
- x: 0,
239
- y: -10,
240
- opacity: 0
241
- },
242
- exitStyle: {
243
- x: 0,
244
- y: -10,
245
- opacity: 0
246
- },
229
+ (0, import_jsx_runtime.jsx)(import_forms.FloatingPanel, {
230
+ open,
231
+ onOpenChange: setOpen,
232
+ trigger,
233
+ triggerSizing: "content",
234
+ disabled,
235
+ scrollable: true,
236
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
237
+ gap: "$4",
247
238
  minWidth: popoverMinWidth,
248
- padding: 0,
249
- overflow: "hidden",
250
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Popover.ScrollView, {
251
- minHeight: 0,
252
- children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
253
- ...knobProps.panelPadding,
254
- gap: "$4",
255
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
256
- ...knobProps.label,
257
- fontWeight: "400",
258
- children: "Export Options"
259
- }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
260
- gap: "$2",
261
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
262
- ...knobProps.label,
263
- fontWeight: "400",
264
- children: "Filename"
265
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Input, {
266
- value: exportOptions.filename || "",
267
- onChangeText: text => onOptionsChange({
268
- ...exportOptions,
269
- filename: text
270
- }),
271
- placeholder: "Enter filename"
272
- })]
273
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
274
- label: "Include headers",
275
- checked: exportOptions.includeHeaders ?? true,
276
- onCheckedChange: checked => onOptionsChange({
277
- ...exportOptions,
278
- includeHeaders: checked
279
- })
280
- }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
281
- gap: "$2",
282
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Text, {
283
- ...knobProps.label,
284
- fontWeight: "400",
285
- children: ["Select Columns (", selectedColumns.size, " of ", availableColumns.length, ")"]
286
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.ScrollView, {
287
- maxHeight: 200,
288
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
289
- gap: "$1",
290
- children: availableColumns.map(col => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
291
- label: col.header,
292
- checked: selectedColumns.has(col.key),
293
- onCheckedChange: checked => {
294
- const newSelected = new Set(selectedColumns);
295
- if (checked) {
296
- newSelected.add(col.key);
297
- } else {
298
- newSelected.delete(col.key);
299
- }
300
- setSelectedColumns(newSelected);
301
- onOptionsChange({
302
- ...exportOptions,
303
- selectedColumns: Array.from(newSelected)
304
- });
305
- }
306
- }, col.key))
307
- })
308
- })]
309
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
310
- gap: "$2",
239
+ "data-dismiss-class": "compose",
240
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
241
+ ...knobProps.label,
242
+ fontWeight: "400",
243
+ children: "Export Options"
244
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
245
+ gap: "$2",
246
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
247
+ ...knobProps.label,
248
+ fontWeight: "400",
249
+ children: "Filename"
250
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Input, {
251
+ value: exportOptions.filename || "",
252
+ onChangeText: text => onOptionsChange({
253
+ ...exportOptions,
254
+ filename: text
255
+ }),
256
+ placeholder: "Enter filename"
257
+ })]
258
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
259
+ label: "Include headers",
260
+ checked: exportOptions.includeHeaders ?? true,
261
+ onCheckedChange: checked => onOptionsChange({
262
+ ...exportOptions,
263
+ includeHeaders: checked
264
+ })
265
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
266
+ gap: "$2",
267
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Text, {
268
+ ...knobProps.label,
269
+ fontWeight: "400",
270
+ children: ["Select Columns (", selectedColumns.size, " of ", availableColumns.length, ")"]
271
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.ScrollView, {
272
+ maxHeight: 200,
273
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
274
+ gap: "$1",
275
+ children: availableColumns.map(col => /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
276
+ label: col.header,
277
+ checked: selectedColumns.has(col.key),
278
+ onCheckedChange: checked => {
279
+ const newSelected = new Set(selectedColumns);
280
+ if (checked) {
281
+ newSelected.add(col.key);
282
+ } else {
283
+ newSelected.delete(col.key);
284
+ }
285
+ setSelectedColumns(newSelected);
286
+ onOptionsChange({
287
+ ...exportOptions,
288
+ selectedColumns: Array.from(newSelected)
289
+ });
290
+ }
291
+ }, col.key))
292
+ })
293
+ })]
294
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
295
+ gap: "$2",
296
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
297
+ ...knobProps.label,
298
+ fontWeight: "400",
299
+ children: "Export Formats"
300
+ }), exportFormats.map(format => /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
301
+ size: knobProps.sizeToken,
302
+ chromeless: true,
303
+ justifyContent: "flex-start",
304
+ disabled: disabled || isExporting === format.id || !format.enabled,
305
+ onPress: () => onExport(format),
306
+ icon: format.icon,
307
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
308
+ gap: "$1",
311
309
  children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
312
310
  ...knobProps.label,
313
311
  fontWeight: "400",
314
- children: "Export Formats"
315
- }), exportFormats.map(format => /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
316
- size: knobProps.sizeToken,
317
- chromeless: true,
318
- justifyContent: "flex-start",
319
- disabled: disabled || isExporting === format.id || !format.enabled,
320
- onPress: () => onExport(format),
321
- icon: format.icon,
322
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
323
- gap: "$1",
324
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
325
- ...knobProps.label,
326
- fontWeight: "400",
327
- children: format.label
328
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
329
- fontSize: "$2",
330
- color: "$color10",
331
- children: format.description
332
- })]
333
- }), isExporting === format.id && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
334
- fontSize: "$2",
335
- color: "$accentColor",
336
- marginInlineStart: "auto",
337
- children: "..."
338
- })]
339
- }, format.id))]
340
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
341
- size: knobProps.sizeToken,
342
- chromeless: true,
343
- justifyContent: "flex-start",
344
- disabled: disabled || isExporting === "print",
345
- onPress: onPrint,
346
- icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.PrinterIcon, {
347
- size: iconPx
348
- }),
349
- children: ["Print Table", isExporting === "print" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
312
+ children: format.label
313
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
350
314
  fontSize: "$2",
351
- color: "$accentColor",
352
- marginInlineStart: "auto",
353
- children: "..."
315
+ color: "$color10",
316
+ children: format.description
354
317
  })]
318
+ }), isExporting === format.id && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
319
+ fontSize: "$2",
320
+ color: "$accentColor",
321
+ marginInlineStart: "auto",
322
+ children: "..."
355
323
  })]
356
- })
357
- })
358
- })]
324
+ }, format.id))]
325
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
326
+ size: knobProps.sizeToken,
327
+ chromeless: true,
328
+ justifyContent: "flex-start",
329
+ disabled: disabled || isExporting === "print",
330
+ onPress: onPrint,
331
+ icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.PrinterIcon, {
332
+ size: iconPx
333
+ }),
334
+ children: ["Print Table", isExporting === "print" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
335
+ fontSize: "$2",
336
+ color: "$accentColor",
337
+ marginInlineStart: "auto",
338
+ children: "..."
339
+ })]
340
+ })]
341
+ })
359
342
  })
360
343
  );
361
344
  }
@@ -187,7 +187,7 @@ function DataTableExport(props) {
187
187
  "aria-label": "Print table",
188
188
  children: isExporting === "print" ? "..." : "Print"
189
189
  }), /* Advanced Export Options */
190
- /* @__PURE__ */(0, import_jsx_runtime.jsx)(ExportOptionsPopover, {
190
+ /* @__PURE__ */(0, import_jsx_runtime.jsx)(ExportOptionsPanel, {
191
191
  exportFormats,
192
192
  exportOptions,
193
193
  onOptionsChange: setExportOptions,
@@ -223,7 +223,7 @@ function extractColumnsFromTable(table) {
223
223
  return [];
224
224
  }
225
225
  }
226
- function ExportOptionsPopover(param) {
226
+ function ExportOptionsPanel(param) {
227
227
  var {
228
228
  exportFormats,
229
229
  exportOptions,
@@ -241,6 +241,7 @@ function ExportOptionsPopover(param) {
241
241
  var iconPx = (0, import_chromeIcons.iconSizeForToken)(String(knobProps.sizeToken));
242
242
  var sz = knobProps.sizeToken;
243
243
  var popoverMinWidth = sz === "$3" ? 240 : sz === "$5" ? 360 : 300;
244
+ var [open, setOpen] = (0, import_react2.useState)(false);
244
245
  var [selectedColumns, setSelectedColumns] = (0, import_react2.useState)(new Set(columns.map(function (col) {
245
246
  return col.accessorKey || col.id || "";
246
247
  })));
@@ -250,172 +251,149 @@ function ExportOptionsPopover(param) {
250
251
  header: col.header || col.accessorKey || col.id || ""
251
252
  };
252
253
  });
254
+ var trigger = /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
255
+ size: knobProps.sizeToken,
256
+ chromeless: true,
257
+ icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.GearIcon, {
258
+ size: iconPx
259
+ }),
260
+ disabled,
261
+ "aria-label": "Export options",
262
+ children: "Options"
263
+ });
253
264
  return (
254
- // LC-06/LC-10: collision handling — without stayInFrame/resize the tall
255
- // option list painted past the viewport and the Export Formats / Print
256
- // rows below the fold were unreachable (no scroll, no clamp).
265
+ // LC-06/LC-10: the option list is taller than most viewports. FloatingPanel
266
+ // clamps it inside the viewport and scrolls, so the Export Formats and
267
+ // Print rows below the fold stay reachable.
257
268
  /* @__PURE__ */
258
- (0, import_jsx_runtime.jsxs)(import_tamagui.Popover, {
259
- stayInFrame: true,
260
- allowFlip: true,
261
- resize: true,
262
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Popover.Trigger, {
263
- asChild: true,
264
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Button, {
265
- size: knobProps.sizeToken,
266
- chromeless: true,
267
- icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.GearIcon, {
268
- size: iconPx
269
- }),
270
- disabled,
271
- "aria-label": "Export options",
272
- children: "Options"
273
- })
274
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Popover.Content, {
275
- ...knobProps.elevatedSurface,
276
- transition: knobProps.transition,
277
- enterStyle: {
278
- x: 0,
279
- y: -10,
280
- opacity: 0
281
- },
282
- exitStyle: {
283
- x: 0,
284
- y: -10,
285
- opacity: 0
286
- },
269
+ (0, import_jsx_runtime.jsx)(import_forms.FloatingPanel, {
270
+ open,
271
+ onOpenChange: setOpen,
272
+ trigger,
273
+ triggerSizing: "content",
274
+ disabled,
275
+ scrollable: true,
276
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
277
+ gap: "$4",
287
278
  minWidth: popoverMinWidth,
288
- padding: 0,
289
- overflow: "hidden",
290
- children: (
291
- /* The popper resize middleware caps the height to the viewport; the
292
- ScrollView keeps every section reachable (same pattern as
293
- DataTableDateFilter). */
294
- /* @__PURE__ */
295
- (0, import_jsx_runtime.jsx)(import_tamagui.Popover.ScrollView, {
296
- minHeight: 0,
297
- children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
298
- ...knobProps.panelPadding,
299
- gap: "$4",
300
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
301
- ...knobProps.label,
302
- fontWeight: "400",
303
- children: "Export Options"
304
- }), /* Filename */
305
- /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
306
- gap: "$2",
307
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
308
- ...knobProps.label,
309
- fontWeight: "400",
310
- children: "Filename"
311
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Input, {
312
- value: exportOptions.filename || "",
313
- onChangeText: function onChangeText(text) {
314
- return onOptionsChange({
315
- ...exportOptions,
316
- filename: text
317
- });
318
- },
319
- placeholder: "Enter filename"
320
- })]
321
- }), /* Include Headers */
322
- /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
323
- label: "Include headers",
324
- checked: (_exportOptions_includeHeaders = exportOptions.includeHeaders) !== null && _exportOptions_includeHeaders !== void 0 ? _exportOptions_includeHeaders : true,
325
- onCheckedChange: function onCheckedChange(checked) {
326
- return onOptionsChange({
327
- ...exportOptions,
328
- includeHeaders: checked
329
- });
330
- }
331
- }), /* Column Selection */
332
- /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
333
- gap: "$2",
334
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Text, {
335
- ...knobProps.label,
336
- fontWeight: "400",
337
- children: ["Select Columns (", selectedColumns.size, " of ", availableColumns.length, ")"]
338
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.ScrollView, {
339
- maxHeight: 200,
340
- children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
341
- gap: "$1",
342
- children: availableColumns.map(function (col) {
343
- return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
344
- label: col.header,
345
- checked: selectedColumns.has(col.key),
346
- onCheckedChange: function onCheckedChange(checked) {
347
- var newSelected = new Set(selectedColumns);
348
- if (checked) {
349
- newSelected.add(col.key);
350
- } else {
351
- newSelected.delete(col.key);
352
- }
353
- setSelectedColumns(newSelected);
354
- onOptionsChange({
355
- ...exportOptions,
356
- selectedColumns: Array.from(newSelected)
357
- });
358
- }
359
- }, col.key);
360
- })
361
- })
362
- })]
363
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* Export Formats */
364
- /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
365
- gap: "$2",
366
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
367
- ...knobProps.label,
368
- fontWeight: "400",
369
- children: "Export Formats"
370
- }), exportFormats.map(function (format) {
371
- return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
372
- size: knobProps.sizeToken,
373
- chromeless: true,
374
- justifyContent: "flex-start",
375
- disabled: disabled || isExporting === format.id || !format.enabled,
376
- onPress: function onPress() {
377
- return onExport(format);
378
- },
379
- icon: format.icon,
380
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
381
- gap: "$1",
382
- children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
383
- ...knobProps.label,
384
- fontWeight: "400",
385
- children: format.label
386
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
387
- fontSize: "$2",
388
- color: "$color10",
389
- children: format.description
390
- })]
391
- }), isExporting === format.id && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
392
- fontSize: "$2",
393
- color: "$accentColor",
394
- marginInlineStart: "auto",
395
- children: "..."
396
- })]
397
- }, format.id);
398
- })]
399
- }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* Print */
400
- /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
279
+ "data-dismiss-class": "compose",
280
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
281
+ ...knobProps.label,
282
+ fontWeight: "400",
283
+ children: "Export Options"
284
+ }), /* Filename */
285
+ /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
286
+ gap: "$2",
287
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
288
+ ...knobProps.label,
289
+ fontWeight: "400",
290
+ children: "Filename"
291
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Input, {
292
+ value: exportOptions.filename || "",
293
+ onChangeText: function onChangeText(text) {
294
+ return onOptionsChange({
295
+ ...exportOptions,
296
+ filename: text
297
+ });
298
+ },
299
+ placeholder: "Enter filename"
300
+ })]
301
+ }), /* Include Headers */
302
+ /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
303
+ label: "Include headers",
304
+ checked: (_exportOptions_includeHeaders = exportOptions.includeHeaders) !== null && _exportOptions_includeHeaders !== void 0 ? _exportOptions_includeHeaders : true,
305
+ onCheckedChange: function onCheckedChange(checked) {
306
+ return onOptionsChange({
307
+ ...exportOptions,
308
+ includeHeaders: checked
309
+ });
310
+ }
311
+ }), /* Column Selection */
312
+ /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
313
+ gap: "$2",
314
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Text, {
315
+ ...knobProps.label,
316
+ fontWeight: "400",
317
+ children: ["Select Columns (", selectedColumns.size, " of ", availableColumns.length, ")"]
318
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.ScrollView, {
319
+ maxHeight: 200,
320
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
321
+ gap: "$1",
322
+ children: availableColumns.map(function (col) {
323
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_forms.Checkbox, {
324
+ label: col.header,
325
+ checked: selectedColumns.has(col.key),
326
+ onCheckedChange: function onCheckedChange(checked) {
327
+ var newSelected = new Set(selectedColumns);
328
+ if (checked) {
329
+ newSelected.add(col.key);
330
+ } else {
331
+ newSelected.delete(col.key);
332
+ }
333
+ setSelectedColumns(newSelected);
334
+ onOptionsChange({
335
+ ...exportOptions,
336
+ selectedColumns: Array.from(newSelected)
337
+ });
338
+ }
339
+ }, col.key);
340
+ })
341
+ })
342
+ })]
343
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* Export Formats */
344
+ /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
345
+ gap: "$2",
346
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
347
+ ...knobProps.label,
348
+ fontWeight: "400",
349
+ children: "Export Formats"
350
+ }), exportFormats.map(function (format) {
351
+ return /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
401
352
  size: knobProps.sizeToken,
402
353
  chromeless: true,
403
354
  justifyContent: "flex-start",
404
- disabled: disabled || isExporting === "print",
405
- onPress: onPrint,
406
- icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.PrinterIcon, {
407
- size: iconPx
408
- }),
409
- children: ["Print Table", isExporting === "print" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
355
+ disabled: disabled || isExporting === format.id || !format.enabled,
356
+ onPress: function onPress() {
357
+ return onExport(format);
358
+ },
359
+ icon: format.icon,
360
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.YStack, {
361
+ gap: "$1",
362
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
363
+ ...knobProps.label,
364
+ fontWeight: "400",
365
+ children: format.label
366
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
367
+ fontSize: "$2",
368
+ color: "$color10",
369
+ children: format.description
370
+ })]
371
+ }), isExporting === format.id && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
410
372
  fontSize: "$2",
411
373
  color: "$accentColor",
412
374
  marginInlineStart: "auto",
413
375
  children: "..."
414
376
  })]
415
- })]
416
- })
417
- }))
418
- })]
377
+ }, format.id);
378
+ })]
379
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Separator, {}), /* Print */
380
+ /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_forms.Button, {
381
+ size: knobProps.sizeToken,
382
+ chromeless: true,
383
+ justifyContent: "flex-start",
384
+ disabled: disabled || isExporting === "print",
385
+ onPress: onPrint,
386
+ icon: /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react.PrinterIcon, {
387
+ size: iconPx
388
+ }),
389
+ children: ["Print Table", isExporting === "print" && /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.Text, {
390
+ fontSize: "$2",
391
+ color: "$accentColor",
392
+ marginInlineStart: "auto",
393
+ children: "..."
394
+ })]
395
+ })]
396
+ })
419
397
  })
420
398
  );
421
399
  }