@lowdefy/blocks-table 0.0.0-experimental-20260929110023

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 (590) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +12 -0
  3. package/dist/blocks/Table/Table.js +25 -0
  4. package/dist/blocks/Table/Table.lazy.js +33 -0
  5. package/dist/blocks/Table/TableFallback.js +35 -0
  6. package/dist/blocks/Table/e2e.js +47 -0
  7. package/dist/blocks/Table/gallery.yaml +836 -0
  8. package/dist/blocks/Table/meta.js +964 -0
  9. package/dist/blocks/Table/tests/Table.e2e.yaml +434 -0
  10. package/dist/blocks/Table/tests/TableFeatures.e2e.yaml +291 -0
  11. package/dist/blocks/Table/tests/TableLinkTarget.e2e.yaml +25 -0
  12. package/dist/blocks/Table/tests/TableParity.e2e.yaml +101 -0
  13. package/dist/blocks/Table/tests/bulk.e2e.yaml +271 -0
  14. package/dist/blocks/Table/tests/deals.yaml +30 -0
  15. package/dist/blocks/Table/tests/deals_columns.yaml +37 -0
  16. package/dist/blocks/Table/tests/editing.e2e.yaml +501 -0
  17. package/dist/blocks/Table/tests/expandable.e2e.yaml +87 -0
  18. package/dist/blocks/Table/tests/filtering.e2e.yaml +251 -0
  19. package/dist/blocks/Table/tests/grouping.e2e.yaml +272 -0
  20. package/dist/blocks/Table/tests/grouping_deals.yaml +24 -0
  21. package/dist/blocks/Table/tests/grouping_deals_columns.yaml +32 -0
  22. package/dist/blocks/Table/tests/headerMenu.e2e.yaml +134 -0
  23. package/dist/blocks/Table/tests/parity_properties.yaml +144 -0
  24. package/dist/blocks/Table/tests/people.yaml +39 -0
  25. package/dist/blocks/Table/tests/people_columns.yaml +22 -0
  26. package/dist/blocks/Table/tests/polish.e2e.yaml +372 -0
  27. package/dist/blocks/Table/tests/server-mongodb.e2e.yaml +169 -0
  28. package/dist/blocks/Table/tests/server.e2e.yaml +267 -0
  29. package/dist/blocks/Table/tests/toolbar.e2e.yaml +140 -0
  30. package/dist/blocks/Table/tests/tree.e2e.yaml +245 -0
  31. package/dist/blocks/Table/tests/views.e2e.yaml +235 -0
  32. package/dist/blocks/TableInput/TableInput.js +24 -0
  33. package/dist/blocks/TableInput/TableInput.lazy.js +17 -0
  34. package/dist/blocks/TableInput/TableInputRoot.js +65 -0
  35. package/dist/blocks/TableInput/e2e.js +16 -0
  36. package/dist/blocks/TableInput/gallery.yaml +153 -0
  37. package/dist/blocks/TableInput/meta.js +93 -0
  38. package/dist/blocks/TableInput/tests/TableInput.e2e.yaml +272 -0
  39. package/dist/blocks.js +16 -0
  40. package/dist/core/Body.js +112 -0
  41. package/dist/core/Cell.js +86 -0
  42. package/dist/core/Chevron.js +32 -0
  43. package/dist/core/EmptyState.js +32 -0
  44. package/dist/core/Grid.js +219 -0
  45. package/dist/core/GroupHeaderRow.js +81 -0
  46. package/dist/core/HeaderCell.js +58 -0
  47. package/dist/core/HeaderRow.js +76 -0
  48. package/dist/core/HeaderTitle.js +49 -0
  49. package/dist/core/LazyCell.js +71 -0
  50. package/dist/core/LoadingRows.js +38 -0
  51. package/dist/core/RenderProbeContext.js +19 -0
  52. package/dist/core/Row.js +98 -0
  53. package/dist/core/SkeletonRow.js +42 -0
  54. package/dist/core/SummaryRow.js +86 -0
  55. package/dist/core/TableRoot.js +195 -0
  56. package/dist/core/aggregateShortLabels.js +25 -0
  57. package/dist/core/applyLayoutVars.js +22 -0
  58. package/dist/core/buildGroupSegments.js +36 -0
  59. package/dist/core/collectBodyOverlays.js +20 -0
  60. package/dist/core/collectCellLeads.js +21 -0
  61. package/dist/core/collectClaimedViewKeys.js +26 -0
  62. package/dist/core/collectGridHandlers.js +29 -0
  63. package/dist/core/collectHeaderParts.js +20 -0
  64. package/dist/core/collectRowRenderers.js +21 -0
  65. package/dist/core/collectSliceDefinitions.js +29 -0
  66. package/dist/core/computeLayout.js +133 -0
  67. package/dist/core/createAccessor.js +39 -0
  68. package/dist/core/createApi.js +86 -0
  69. package/dist/core/createCellActivity.js +47 -0
  70. package/dist/core/createColumnDefs.js +42 -0
  71. package/dist/core/createFeatureActions.js +24 -0
  72. package/dist/core/createFeatureSet.js +39 -0
  73. package/dist/core/createInitialState.js +63 -0
  74. package/dist/core/createKeyIndex.js +26 -0
  75. package/dist/core/createMethodStubs.js +30 -0
  76. package/dist/core/createSliceHandlers.js +26 -0
  77. package/dist/core/createStableCoreRowModel.js +91 -0
  78. package/dist/core/createTanstackFeatures.js +24 -0
  79. package/dist/core/createTextMeasure.js +106 -0
  80. package/dist/core/densityHeights.js +20 -0
  81. package/dist/core/deriveValue.js +53 -0
  82. package/dist/core/dispatchGridEvent.js +21 -0
  83. package/dist/core/distributeFlex.js +28 -0
  84. package/dist/core/getCellFit.js +34 -0
  85. package/dist/core/getHeaderCellProps.js +21 -0
  86. package/dist/core/getHeaderLevels.js +50 -0
  87. package/dist/core/getRecordCount.js +23 -0
  88. package/dist/core/getSummaryLabel.js +35 -0
  89. package/dist/core/getValueSignature.js +26 -0
  90. package/dist/core/isDataItem.js +21 -0
  91. package/dist/core/isDefaultViewColumns.js +36 -0
  92. package/dist/core/isRowEqual.js +40 -0
  93. package/dist/core/isSameSignature.js +19 -0
  94. package/dist/core/lazyCellTypes.js +33 -0
  95. package/dist/core/lazyComponent.js +30 -0
  96. package/dist/core/loadOptionalFeature.js +35 -0
  97. package/dist/core/normalizeViewColumn.js +29 -0
  98. package/dist/core/pickViewPart.js +23 -0
  99. package/dist/core/renderRegion.js +21 -0
  100. package/dist/core/resolveMountValue.js +31 -0
  101. package/dist/core/resolveViewColumns.js +65 -0
  102. package/dist/core/someColumnConfig.js +30 -0
  103. package/dist/core/stabilizeData.js +90 -0
  104. package/dist/core/table.css +557 -0
  105. package/dist/core/useFeatureData.js +35 -0
  106. package/dist/core/useFeatureFragments.js +55 -0
  107. package/dist/core/useFeatureItems.js +78 -0
  108. package/dist/core/useFeatureMethods.js +29 -0
  109. package/dist/core/useFeatureRows.js +36 -0
  110. package/dist/core/useFeatureSet.js +54 -0
  111. package/dist/core/useForeignKeys.js +38 -0
  112. package/dist/core/useGridFeatures.js +26 -0
  113. package/dist/core/useStableConfig.js +34 -0
  114. package/dist/core/useSummary.js +73 -0
  115. package/dist/core/useTableConfig.js +189 -0
  116. package/dist/core/useTableState.js +150 -0
  117. package/dist/core/useViewportSize.js +40 -0
  118. package/dist/e2e.js +16 -0
  119. package/dist/features/bulk/BulkBar.js +46 -0
  120. package/dist/features/bulk/bulk.css +57 -0
  121. package/dist/features/bulk/bulkFeature.js +28 -0
  122. package/dist/features/bulk/countSelection.js +27 -0
  123. package/dist/features/bulk/createSelectAllMatching.js +43 -0
  124. package/dist/features/bulk/useBulkBar.js +42 -0
  125. package/dist/features/clipboard/clipboardFeature.js +24 -0
  126. package/dist/features/clipboard/createPasteCells.js +61 -0
  127. package/dist/features/clipboard/getCopyText.js +57 -0
  128. package/dist/features/clipboard/handleCopyKeyDown.js +37 -0
  129. package/dist/features/clipboard/parseTsv.js +70 -0
  130. package/dist/features/clipboard/pasteFeature.js +26 -0
  131. package/dist/features/clipboard/planPaste.js +101 -0
  132. package/dist/features/clipboard/serializeTsv.js +25 -0
  133. package/dist/features/clipboard/usePasteListener.js +45 -0
  134. package/dist/features/columnManager/ColumnManager.js +253 -0
  135. package/dist/features/columnManager/ColumnManagerPopover.js +37 -0
  136. package/dist/features/columnManager/DragHandleIcon.js +39 -0
  137. package/dist/features/columnManager/LazyColumnManagerPopover.js +19 -0
  138. package/dist/features/columnManager/applyManagerRegions.js +43 -0
  139. package/dist/features/columnManager/boundaryIds.js +21 -0
  140. package/dist/features/columnManager/buildManagerSequence.js +38 -0
  141. package/dist/features/columnManager/columnManager.css +155 -0
  142. package/dist/features/columnManager/columnManagerFeature.js +37 -0
  143. package/dist/features/columnManager/createCloseColumnManager.js +21 -0
  144. package/dist/features/columnManager/createOpenColumnManager.js +21 -0
  145. package/dist/features/columnManager/createResetColumns.js +43 -0
  146. package/dist/features/columnManager/getColumnManagerMenuItems.js +26 -0
  147. package/dist/features/columnManager/getListRoom.js +31 -0
  148. package/dist/features/columnManager/getManagerEntries.js +31 -0
  149. package/dist/features/columnManager/moveSequenceEntry.js +25 -0
  150. package/dist/features/columnManager/sequenceToRegions.js +38 -0
  151. package/dist/features/columnManager/snapListHeight.js +35 -0
  152. package/dist/features/columnManager/updateScrollHints.js +23 -0
  153. package/dist/features/columnManager/useColumnManager.js +36 -0
  154. package/dist/features/density/densityFeature.js +39 -0
  155. package/dist/features/density/densityToValue.js +23 -0
  156. package/dist/features/density/getViewWrapColumn.js +53 -0
  157. package/dist/features/density/initDensity.js +27 -0
  158. package/dist/features/density/initWrap.js +23 -0
  159. package/dist/features/editing/AddRowButton.js +28 -0
  160. package/dist/features/editing/CellEditor.js +284 -0
  161. package/dist/features/editing/EditMarker.js +38 -0
  162. package/dist/features/editing/EditingLayer.js +148 -0
  163. package/dist/features/editing/RowControlsCell.js +89 -0
  164. package/dist/features/editing/RowControlsHeader.js +18 -0
  165. package/dist/features/editing/SelectedTag.js +33 -0
  166. package/dist/features/editing/addChangeRow.js +34 -0
  167. package/dist/features/editing/applyChangeUpdates.js +28 -0
  168. package/dist/features/editing/applyChanges.js +90 -0
  169. package/dist/features/editing/applyMoveOverlay.js +44 -0
  170. package/dist/features/editing/applyMoveToChanges.js +66 -0
  171. package/dist/features/editing/applyOverlay.js +41 -0
  172. package/dist/features/editing/coerceCellValue.js +187 -0
  173. package/dist/features/editing/collectRawColumns.js +38 -0
  174. package/dist/features/editing/computeEditTargets.js +108 -0
  175. package/dist/features/editing/computeRowMove.js +78 -0
  176. package/dist/features/editing/createAddRow.js +68 -0
  177. package/dist/features/editing/createCancelEdit.js +29 -0
  178. package/dist/features/editing/createCommitEdit.js +124 -0
  179. package/dist/features/editing/createDeleteRow.js +39 -0
  180. package/dist/features/editing/createEditSpecs.js +80 -0
  181. package/dist/features/editing/createEmptyChanges.js +23 -0
  182. package/dist/features/editing/createMoveRow.js +65 -0
  183. package/dist/features/editing/createNewRow.js +32 -0
  184. package/dist/features/editing/createResetChanges.js +29 -0
  185. package/dist/features/editing/createSaveCellEdit.js +113 -0
  186. package/dist/features/editing/createSaveRowMove.js +90 -0
  187. package/dist/features/editing/createStartEdit.js +57 -0
  188. package/dist/features/editing/createStepHistory.js +33 -0
  189. package/dist/features/editing/createUndoStack.js +67 -0
  190. package/dist/features/editing/createValueStore.js +34 -0
  191. package/dist/features/editing/createWriteCell.js +34 -0
  192. package/dist/features/editing/createWriteChanges.js +43 -0
  193. package/dist/features/editing/editing.css +223 -0
  194. package/dist/features/editing/editingFeature.js +66 -0
  195. package/dist/features/editing/findCellByKey.js +23 -0
  196. package/dist/features/editing/findInvalidCells.js +41 -0
  197. package/dist/features/editing/findNextEditableCell.js +54 -0
  198. package/dist/features/editing/focusCell.js +28 -0
  199. package/dist/features/editing/fromDateValue.js +29 -0
  200. package/dist/features/editing/fromEditorDraft.js +45 -0
  201. package/dist/features/editing/generateRowKey.js +25 -0
  202. package/dist/features/editing/getDataGap.js +28 -0
  203. package/dist/features/editing/getEditOptions.js +33 -0
  204. package/dist/features/editing/getEditorKind.js +36 -0
  205. package/dist/features/editing/getEventError.js +24 -0
  206. package/dist/features/editing/getKeyField.js +23 -0
  207. package/dist/features/editing/getReorderBlock.js +33 -0
  208. package/dist/features/editing/handleEditDoubleClick.js +34 -0
  209. package/dist/features/editing/handleEditKeyDown.js +123 -0
  210. package/dist/features/editing/handleRowControlsClick.js +29 -0
  211. package/dist/features/editing/handleRowDragPointerDown.js +95 -0
  212. package/dist/features/editing/isCellEditable.js +20 -0
  213. package/dist/features/editing/isPrintableKey.js +22 -0
  214. package/dist/features/editing/isSameTargets.js +19 -0
  215. package/dist/features/editing/matchOption.js +21 -0
  216. package/dist/features/editing/needsEditing.js +26 -0
  217. package/dist/features/editing/normalizeChanges.js +37 -0
  218. package/dist/features/editing/positionBetween.js +30 -0
  219. package/dist/features/editing/pruneOverlay.js +39 -0
  220. package/dist/features/editing/removeChangeRow.js +48 -0
  221. package/dist/features/editing/reorderByKeys.js +34 -0
  222. package/dist/features/editing/rowControlsColumn.js +33 -0
  223. package/dist/features/editing/setChangeField.js +72 -0
  224. package/dist/features/editing/setRowField.js +23 -0
  225. package/dist/features/editing/sortByPosition.js +31 -0
  226. package/dist/features/editing/toDateValue.js +38 -0
  227. package/dist/features/editing/toEditorDraft.js +56 -0
  228. package/dist/features/editing/toSelectOptions.js +39 -0
  229. package/dist/features/editing/useEditingData.js +199 -0
  230. package/dist/features/editing/useEditingFragments.js +77 -0
  231. package/dist/features/editing/useEditingGrid.js +25 -0
  232. package/dist/features/editing/validateCellValue.js +25 -0
  233. package/dist/features/editing/valuesEqual.js +31 -0
  234. package/dist/features/editing/warnMissingEvent.js +23 -0
  235. package/dist/features/events/createActivateRow.js +54 -0
  236. package/dist/features/events/eventsFeature.js +35 -0
  237. package/dist/features/events/getBodyTarget.js +27 -0
  238. package/dist/features/events/getRowIndex.js +24 -0
  239. package/dist/features/events/handleAuxClick.js +38 -0
  240. package/dist/features/events/handlePointerDown.js +22 -0
  241. package/dist/features/events/handleRowClick.js +57 -0
  242. package/dist/features/events/handleRowDoubleClick.js +45 -0
  243. package/dist/features/events/isTextDrag.js +30 -0
  244. package/dist/features/events/openRowLink.js +29 -0
  245. package/dist/features/expandable/DetailRow.js +57 -0
  246. package/dist/features/expandable/ExpandToggle.js +34 -0
  247. package/dist/features/expandable/expandable.css +40 -0
  248. package/dist/features/expandable/expandableFeature.js +34 -0
  249. package/dist/features/expandable/handleExpandClick.js +25 -0
  250. package/dist/features/expandable/needsExpandable.js +20 -0
  251. package/dist/features/expandable/normalizeExpandable.js +52 -0
  252. package/dist/features/expandable/useExpandableItems.js +101 -0
  253. package/dist/features/expansion/createToggleRowExpanded.js +52 -0
  254. package/dist/features/expansion/expansionFeature.js +31 -0
  255. package/dist/features/expansion/getExpandedIds.js +26 -0
  256. package/dist/features/expansion/initExpanded.js +22 -0
  257. package/dist/features/export/buildCsv.js +39 -0
  258. package/dist/features/export/createExportCsv.js +59 -0
  259. package/dist/features/export/exportFeature.js +25 -0
  260. package/dist/features/export/toCsvField.js +20 -0
  261. package/dist/features/filtering/ChoiceFilter.js +30 -0
  262. package/dist/features/filtering/CloseIcon.js +29 -0
  263. package/dist/features/filtering/ColumnFilter.js +192 -0
  264. package/dist/features/filtering/ColumnFilterPopover.js +38 -0
  265. package/dist/features/filtering/DateFilter.js +80 -0
  266. package/dist/features/filtering/DraftInput.js +37 -0
  267. package/dist/features/filtering/DraftInputNumber.js +36 -0
  268. package/dist/features/filtering/FilterBuilder.js +45 -0
  269. package/dist/features/filtering/FilterGroup.js +116 -0
  270. package/dist/features/filtering/FilterIcon.js +26 -0
  271. package/dist/features/filtering/FilterIndicator.js +40 -0
  272. package/dist/features/filtering/FilterLeaf.js +86 -0
  273. package/dist/features/filtering/LazyColumnFilterPopover.js +19 -0
  274. package/dist/features/filtering/LazyFilterBuilder.js +19 -0
  275. package/dist/features/filtering/NumberFilter.js +43 -0
  276. package/dist/features/filtering/OptionsFilter.js +72 -0
  277. package/dist/features/filtering/RelativeDateEditor.js +90 -0
  278. package/dist/features/filtering/TextFilter.js +51 -0
  279. package/dist/features/filtering/ValueEditor.js +210 -0
  280. package/dist/features/filtering/buildColumnFilter.js +95 -0
  281. package/dist/features/filtering/changeLeafOperator.js +46 -0
  282. package/dist/features/filtering/createApplyFiltering.js +78 -0
  283. package/dist/features/filtering/createClearFilters.js +24 -0
  284. package/dist/features/filtering/createCloseColumnFilter.js +28 -0
  285. package/dist/features/filtering/createConditionFilteredRowModel.js +40 -0
  286. package/dist/features/filtering/createDefaultLeaf.js +31 -0
  287. package/dist/features/filtering/createOpenColumnFilter.js +25 -0
  288. package/dist/features/filtering/createRowTest.js +32 -0
  289. package/dist/features/filtering/createSearchMatcher.js +35 -0
  290. package/dist/features/filtering/createSetFilter.js +27 -0
  291. package/dist/features/filtering/createSetSearch.js +29 -0
  292. package/dist/features/filtering/createUpdateColumnFilter.js +29 -0
  293. package/dist/features/filtering/defaultRelativeDate.js +20 -0
  294. package/dist/features/filtering/filterRowModel.js +66 -0
  295. package/dist/features/filtering/filtering.css +151 -0
  296. package/dist/features/filtering/filteringFeature.js +82 -0
  297. package/dist/features/filtering/filteringToValue.js +23 -0
  298. package/dist/features/filtering/formatFilterDate.js +24 -0
  299. package/dist/features/filtering/getColumnConditions.js +24 -0
  300. package/dist/features/filtering/getConditionKeys.js +31 -0
  301. package/dist/features/filtering/getDistinctOptions.js +52 -0
  302. package/dist/features/filtering/getFilterKind.js +37 -0
  303. package/dist/features/filtering/getFilterResultKey.js +26 -0
  304. package/dist/features/filtering/getFilterResults.js +53 -0
  305. package/dist/features/filtering/getFilteredKeys.js +31 -0
  306. package/dist/features/filtering/getFilteringHeaderProps.js +22 -0
  307. package/dist/features/filtering/getFilteringMenuItems.js +42 -0
  308. package/dist/features/filtering/getFilteringTableOptions.js +33 -0
  309. package/dist/features/filtering/getGroupOperator.js +23 -0
  310. package/dist/features/filtering/getOperatorLabel.js +50 -0
  311. package/dist/features/filtering/getPlainTitle.js +26 -0
  312. package/dist/features/filtering/getSearchColumns.js +23 -0
  313. package/dist/features/filtering/getSearchKey.js +19 -0
  314. package/dist/features/filtering/getSearchText.js +57 -0
  315. package/dist/features/filtering/getTopLevelConditions.js +25 -0
  316. package/dist/features/filtering/getValueShape.js +30 -0
  317. package/dist/features/filtering/handleFilterIndicatorClick.js +25 -0
  318. package/dist/features/filtering/initFilter.js +25 -0
  319. package/dist/features/filtering/initSearch.js +24 -0
  320. package/dist/features/filtering/isColumnCondition.js +22 -0
  321. package/dist/features/filtering/isCompleteLeaf.js +45 -0
  322. package/dist/features/filtering/isServerMode.js +21 -0
  323. package/dist/features/filtering/normalizeSearch.js +21 -0
  324. package/dist/features/filtering/parseColumnFilter.js +128 -0
  325. package/dist/features/filtering/parseFilterDate.js +24 -0
  326. package/dist/features/filtering/prepareFilterResult.js +63 -0
  327. package/dist/features/filtering/pruneCondition.js +35 -0
  328. package/dist/features/filtering/setColumnFilter.js +51 -0
  329. package/dist/features/filtering/textFilterOperators.js +26 -0
  330. package/dist/features/filtering/toRootGroup.js +34 -0
  331. package/dist/features/filtering/useDraft.js +65 -0
  332. package/dist/features/filtering/useFilteringState.js +32 -0
  333. package/dist/features/filtering/useSyncedState.js +45 -0
  334. package/dist/features/grouping/GroupCell.js +72 -0
  335. package/dist/features/grouping/GroupCheckbox.js +38 -0
  336. package/dist/features/grouping/GroupLabel.js +73 -0
  337. package/dist/features/grouping/GroupRow.js +103 -0
  338. package/dist/features/grouping/StickyGroupRow.js +136 -0
  339. package/dist/features/grouping/buildGroupTree.js +138 -0
  340. package/dist/features/grouping/buildStickyLevels.js +35 -0
  341. package/dist/features/grouping/countGroupSelection.js +26 -0
  342. package/dist/features/grouping/createAggregateColumns.js +38 -0
  343. package/dist/features/grouping/createCollapseAllGroups.js +26 -0
  344. package/dist/features/grouping/createExpandAllGroups.js +23 -0
  345. package/dist/features/grouping/createGroupLevels.js +46 -0
  346. package/dist/features/grouping/createSetCollapsedGroups.js +27 -0
  347. package/dist/features/grouping/createSetGroup.js +35 -0
  348. package/dist/features/grouping/createSetGroupKeys.js +27 -0
  349. package/dist/features/grouping/createToggleGroup.js +38 -0
  350. package/dist/features/grouping/createToggleGroupSelected.js +49 -0
  351. package/dist/features/grouping/findGroupIndices.js +25 -0
  352. package/dist/features/grouping/flattenGroups.js +58 -0
  353. package/dist/features/grouping/getGroupLabel.js +34 -0
  354. package/dist/features/grouping/getStickyGroups.js +60 -0
  355. package/dist/features/grouping/groupRowsFeature.js +57 -0
  356. package/dist/features/grouping/grouping.css +128 -0
  357. package/dist/features/grouping/groupingFeature.js +48 -0
  358. package/dist/features/grouping/groupingHeaderMenuItems.js +44 -0
  359. package/dist/features/grouping/groupingToValue.js +26 -0
  360. package/dist/features/grouping/handleGroupClick.js +51 -0
  361. package/dist/features/grouping/handleGroupKeyDown.js +60 -0
  362. package/dist/features/grouping/initAggregates.js +36 -0
  363. package/dist/features/grouping/initCollapsedGroups.js +29 -0
  364. package/dist/features/grouping/initGrouping.js +34 -0
  365. package/dist/features/grouping/needsGroupRows.js +23 -0
  366. package/dist/features/grouping/orderGroups.js +49 -0
  367. package/dist/features/grouping/resolveAggregates.js +29 -0
  368. package/dist/features/grouping/toGroupIdentity.js +24 -0
  369. package/dist/features/grouping/toGroupKeys.js +24 -0
  370. package/dist/features/grouping/useGrouping.js +91 -0
  371. package/dist/features/headerMenu/HeaderMenuDropdown.js +86 -0
  372. package/dist/features/headerMenu/HeaderMenuTrigger.js +44 -0
  373. package/dist/features/headerMenu/LazyHeaderMenuDropdown.js +19 -0
  374. package/dist/features/headerMenu/MenuIcon.js +38 -0
  375. package/dist/features/headerMenu/collectHeaderMenuItems.js +69 -0
  376. package/dist/features/headerMenu/createAutosizeColumn.js +35 -0
  377. package/dist/features/headerMenu/createCloseHeaderMenu.js +28 -0
  378. package/dist/features/headerMenu/createOpenHeaderMenu.js +30 -0
  379. package/dist/features/headerMenu/focusHeaderControl.js +31 -0
  380. package/dist/features/headerMenu/freezeColumns.js +31 -0
  381. package/dist/features/headerMenu/getChromeMenuItems.js +144 -0
  382. package/dist/features/headerMenu/getVisibleOrder.js +19 -0
  383. package/dist/features/headerMenu/handleHeaderButtonPointerDown.js +27 -0
  384. package/dist/features/headerMenu/handleHeaderMenuClick.js +26 -0
  385. package/dist/features/headerMenu/handleHeaderMenuKeyDown.js +28 -0
  386. package/dist/features/headerMenu/headerMenu.css +122 -0
  387. package/dist/features/headerMenu/headerMenuFeature.js +46 -0
  388. package/dist/features/headerMenu/measureColumnWidth.js +51 -0
  389. package/dist/features/headerMenu/pinColumn.js +27 -0
  390. package/dist/features/headerMenu/sectionOrder.js +25 -0
  391. package/dist/features/headerMenu/useHeaderMenuState.js +27 -0
  392. package/dist/features/index.js +149 -0
  393. package/dist/features/keyboard/findCellElement.js +21 -0
  394. package/dist/features/keyboard/getNextCell.js +74 -0
  395. package/dist/features/keyboard/handleGridFocus.js +31 -0
  396. package/dist/features/keyboard/handleGridKeyDown.js +72 -0
  397. package/dist/features/keyboard/isCellRendered.js +22 -0
  398. package/dist/features/keyboard/keyboardFeature.js +26 -0
  399. package/dist/features/keyboard/useKeyboard.js +84 -0
  400. package/dist/features/lazyCells/getBodyRowKey.js +19 -0
  401. package/dist/features/lazyCells/handlePointerLeave.js +21 -0
  402. package/dist/features/lazyCells/handlePointerOver.js +22 -0
  403. package/dist/features/lazyCells/handleRowBlur.js +22 -0
  404. package/dist/features/lazyCells/handleRowFocus.js +26 -0
  405. package/dist/features/lazyCells/lazyCellsFeature.js +33 -0
  406. package/dist/features/lazyCells/useFastScroll.js +57 -0
  407. package/dist/features/ordering/getColumnClientBounds.js +32 -0
  408. package/dist/features/ordering/handleReorderPointerDown.js +137 -0
  409. package/dist/features/ordering/initColumnOrder.js +18 -0
  410. package/dist/features/ordering/moveKeys.js +27 -0
  411. package/dist/features/ordering/orderingFeature.js +35 -0
  412. package/dist/features/pagination/TablePagination.js +31 -0
  413. package/dist/features/pagination/initPageSize.js +28 -0
  414. package/dist/features/pagination/paginationFeature.js +36 -0
  415. package/dist/features/pagination/paginationToValue.js +24 -0
  416. package/dist/features/pagination/usePager.js +32 -0
  417. package/dist/features/pagination/usePagination.js +58 -0
  418. package/dist/features/pinning/initColumnPinning.js +21 -0
  419. package/dist/features/pinning/pinningFeature.js +33 -0
  420. package/dist/features/pinning/pinningToViewColumn.js +24 -0
  421. package/dist/features/queue/createAfterRowAction.js +40 -0
  422. package/dist/features/queue/findNextRowId.js +26 -0
  423. package/dist/features/queue/findRowAction.js +77 -0
  424. package/dist/features/queue/handleRowActionKey.js +44 -0
  425. package/dist/features/queue/queueFeature.js +27 -0
  426. package/dist/features/selection/SelectAllHeader.js +40 -0
  427. package/dist/features/selection/SelectCell.js +30 -0
  428. package/dist/features/selection/countSelectedRows.js +31 -0
  429. package/dist/features/selection/createClearSelection.js +29 -0
  430. package/dist/features/selection/createToggleAllRowsSelected.js +60 -0
  431. package/dist/features/selection/createToggleRowSelected.js +86 -0
  432. package/dist/features/selection/getRawRowKey.js +23 -0
  433. package/dist/features/selection/getSelectAllExcept.js +23 -0
  434. package/dist/features/selection/getSelectAllState.js +42 -0
  435. package/dist/features/selection/handleSelectionClick.js +30 -0
  436. package/dist/features/selection/initRowSelection.js +36 -0
  437. package/dist/features/selection/initSelectionMode.js +19 -0
  438. package/dist/features/selection/initSelectionView.js +35 -0
  439. package/dist/features/selection/isSelectAllValue.js +19 -0
  440. package/dist/features/selection/isSelectionViewCurrent.js +22 -0
  441. package/dist/features/selection/notifySelectionChange.js +32 -0
  442. package/dist/features/selection/pruneRowSelection.js +26 -0
  443. package/dist/features/selection/selectionFeature.js +69 -0
  444. package/dist/features/selection/selectionToValue.js +48 -0
  445. package/dist/features/selection/useSelection.js +77 -0
  446. package/dist/features/serverData/buildServerItems.js +109 -0
  447. package/dist/features/serverData/createBlockCache.js +205 -0
  448. package/dist/features/serverData/createRefresh.js +23 -0
  449. package/dist/features/serverData/createServerStore.js +360 -0
  450. package/dist/features/serverData/getBlockRange.js +29 -0
  451. package/dist/features/serverData/getListKey.js +20 -0
  452. package/dist/features/serverData/getNeededBlocks.js +45 -0
  453. package/dist/features/serverData/needsServerData.js +20 -0
  454. package/dist/features/serverData/normalizeServerData.js +41 -0
  455. package/dist/features/serverData/pickServerView.js +43 -0
  456. package/dist/features/serverData/readFetchResult.js +36 -0
  457. package/dist/features/serverData/serverData.css +21 -0
  458. package/dist/features/serverData/serverDataFeature.js +38 -0
  459. package/dist/features/serverData/serverRangeFeature.js +22 -0
  460. package/dist/features/serverData/useServerData.js +48 -0
  461. package/dist/features/serverData/useServerItems.js +35 -0
  462. package/dist/features/serverData/useServerRange.js +35 -0
  463. package/dist/features/serverData/useServerView.js +70 -0
  464. package/dist/features/sizing/ResizeHandle.js +24 -0
  465. package/dist/features/sizing/handleResizePointerDown.js +66 -0
  466. package/dist/features/sizing/initColumnSizing.js +23 -0
  467. package/dist/features/sizing/sizingFeature.js +39 -0
  468. package/dist/features/sizing/sizingToViewColumn.js +24 -0
  469. package/dist/features/sorting/SortIndicator.js +37 -0
  470. package/dist/features/sorting/buildSortKeys.js +52 -0
  471. package/dist/features/sorting/collectSortKeys.js +30 -0
  472. package/dist/features/sorting/createClearSort.js +21 -0
  473. package/dist/features/sorting/createIndexSortedRowModel.js +33 -0
  474. package/dist/features/sorting/createSetSort.js +43 -0
  475. package/dist/features/sorting/createSortKeyCollector.js +59 -0
  476. package/dist/features/sorting/createToggleSort.js +42 -0
  477. package/dist/features/sorting/getCachedSortKeys.js +19 -0
  478. package/dist/features/sorting/getSortHeaderProps.js +25 -0
  479. package/dist/features/sorting/getSortKeys.js +38 -0
  480. package/dist/features/sorting/handleSortClick.js +27 -0
  481. package/dist/features/sorting/initSorting.js +37 -0
  482. package/dist/features/sorting/isNumericSortType.js +21 -0
  483. package/dist/features/sorting/prepareSortKeys.js +92 -0
  484. package/dist/features/sorting/rankSortKeys.js +33 -0
  485. package/dist/features/sorting/setCachedSortKeys.js +24 -0
  486. package/dist/features/sorting/sortInSlices.js +69 -0
  487. package/dist/features/sorting/sortIndices.js +40 -0
  488. package/dist/features/sorting/sortKeysCache.js +19 -0
  489. package/dist/features/sorting/sortRowModel.js +84 -0
  490. package/dist/features/sorting/sortingFeature.js +62 -0
  491. package/dist/features/sorting/sortingToValue.js +27 -0
  492. package/dist/features/sorting/toFloatSortKeys.js +24 -0
  493. package/dist/features/sorting/yieldToMain.js +27 -0
  494. package/dist/features/toolbar/ColumnTitle.js +28 -0
  495. package/dist/features/toolbar/DensityToggle.js +53 -0
  496. package/dist/features/toolbar/FilterButton.js +56 -0
  497. package/dist/features/toolbar/GroupButton.js +51 -0
  498. package/dist/features/toolbar/OptionsQuickFilter.js +72 -0
  499. package/dist/features/toolbar/QuickFilter.js +46 -0
  500. package/dist/features/toolbar/RecordCount.js +27 -0
  501. package/dist/features/toolbar/SaveViewAs.js +66 -0
  502. package/dist/features/toolbar/SortButton.js +94 -0
  503. package/dist/features/toolbar/Toolbar.js +88 -0
  504. package/dist/features/toolbar/ToolbarCount.js +25 -0
  505. package/dist/features/toolbar/ToolbarIcon.js +28 -0
  506. package/dist/features/toolbar/ToolbarList.js +100 -0
  507. package/dist/features/toolbar/ToolbarSearch.js +63 -0
  508. package/dist/features/toolbar/ViewActions.js +41 -0
  509. package/dist/features/toolbar/ViewTabLabel.js +39 -0
  510. package/dist/features/toolbar/ViewTabMenu.js +48 -0
  511. package/dist/features/toolbar/ViewTabs.js +44 -0
  512. package/dist/features/toolbar/countConditions.js +25 -0
  513. package/dist/features/toolbar/formatRecordCount.js +19 -0
  514. package/dist/features/toolbar/getQuickFilterValues.js +25 -0
  515. package/dist/features/toolbar/getRootConditions.js +25 -0
  516. package/dist/features/toolbar/handleToolbarKeyDown.js +28 -0
  517. package/dist/features/toolbar/isDefaultSorting.js +26 -0
  518. package/dist/features/toolbar/isQuickFilterLeaf.js +20 -0
  519. package/dist/features/toolbar/moveItem.js +25 -0
  520. package/dist/features/toolbar/needsToolbar.js +21 -0
  521. package/dist/features/toolbar/normalizeToolbar.js +61 -0
  522. package/dist/features/toolbar/setQuickFilterValues.js +35 -0
  523. package/dist/features/toolbar/toolbar.css +185 -0
  524. package/dist/features/toolbar/toolbarFeature.js +27 -0
  525. package/dist/features/toolbar/useToolbar.js +41 -0
  526. package/dist/features/toolbar/validateQuickFilters.js +28 -0
  527. package/dist/features/transactions/applyTransactionToRows.js +56 -0
  528. package/dist/features/transactions/createApplyTransaction.js +26 -0
  529. package/dist/features/transactions/normalizeTransaction.js +49 -0
  530. package/dist/features/transactions/transactionsFeature.js +24 -0
  531. package/dist/features/transactions/useTransactionData.js +44 -0
  532. package/dist/features/tree/TreeToggle.js +39 -0
  533. package/dist/features/tree/buildTreeIndex.js +60 -0
  534. package/dist/features/tree/buildTreeItems.js +96 -0
  535. package/dist/features/tree/flattenTreeData.js +45 -0
  536. package/dist/features/tree/getDescendantIds.js +28 -0
  537. package/dist/features/tree/handleTreeClick.js +25 -0
  538. package/dist/features/tree/handleTreeKeyDown.js +58 -0
  539. package/dist/features/tree/needsTree.js +20 -0
  540. package/dist/features/tree/normalizeTree.js +41 -0
  541. package/dist/features/tree/rowNeedsChildren.js +25 -0
  542. package/dist/features/tree/tree.css +55 -0
  543. package/dist/features/tree/treeFeature.js +35 -0
  544. package/dist/features/tree/useTreeData.js +33 -0
  545. package/dist/features/tree/useTreeItems.js +61 -0
  546. package/dist/features/views/compactView.js +30 -0
  547. package/dist/features/views/createViewsApi.js +74 -0
  548. package/dist/features/views/decodeViewParam.js +30 -0
  549. package/dist/features/views/encodeViewParam.js +25 -0
  550. package/dist/features/views/findActiveView.js +23 -0
  551. package/dist/features/views/getStorageKey.js +20 -0
  552. package/dist/features/views/getViewKey.js +27 -0
  553. package/dist/features/views/getViewSliceDeps.js +27 -0
  554. package/dist/features/views/isViewDirty.js +34 -0
  555. package/dist/features/views/mountViewValue.js +36 -0
  556. package/dist/features/views/needsViews.js +23 -0
  557. package/dist/features/views/normalizePersist.js +27 -0
  558. package/dist/features/views/normalizeViews.js +41 -0
  559. package/dist/features/views/notifyViewSelect.js +29 -0
  560. package/dist/features/views/readMountPayload.js +31 -0
  561. package/dist/features/views/readPersistedView.js +45 -0
  562. package/dist/features/views/sanitizePersistedView.js +49 -0
  563. package/dist/features/views/stableStringify.js +27 -0
  564. package/dist/features/views/useViews.js +136 -0
  565. package/dist/features/views/viewKeys.js +28 -0
  566. package/dist/features/views/viewsFeature.js +26 -0
  567. package/dist/features/views/writePersistedView.js +42 -0
  568. package/dist/features/virtualization/computeRowOffsets.js +29 -0
  569. package/dist/features/virtualization/computeWindow.js +92 -0
  570. package/dist/features/virtualization/createScrollToRow.js +36 -0
  571. package/dist/features/virtualization/firstIndexAbove.js +30 -0
  572. package/dist/features/virtualization/getMeasureKey.js +23 -0
  573. package/dist/features/virtualization/isMeasuredColumn.js +20 -0
  574. package/dist/features/virtualization/isSameRange.js +18 -0
  575. package/dist/features/virtualization/positionedRowsFeature.js +22 -0
  576. package/dist/features/virtualization/scrollToCell.js +49 -0
  577. package/dist/features/virtualization/shiftRowOffsets.js +35 -0
  578. package/dist/features/virtualization/usePositionedRows.js +37 -0
  579. package/dist/features/virtualization/useRowOffsets.js +123 -0
  580. package/dist/features/virtualization/useScrollWindow.js +114 -0
  581. package/dist/features/virtualization/useTanstackRowWindow.js +43 -0
  582. package/dist/features/virtualization/useVirtualization.js +64 -0
  583. package/dist/features/virtualization/virtualizationFeature.js +24 -0
  584. package/dist/features/virtualization/writeScrollEdges.js +33 -0
  585. package/dist/features/visibility/initColumnVisibility.js +22 -0
  586. package/dist/features/visibility/visibilityFeature.js +31 -0
  587. package/dist/features/visibility/visibilityToViewColumn.js +20 -0
  588. package/dist/metas.js +16 -0
  589. package/dist/types.js +17 -0
  590. package/package.json +91 -0
@@ -0,0 +1,836 @@
1
+ # Copyright 2020-2026 Lowdefy, Inc
2
+
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ - title: Basic
16
+ blocks:
17
+ - id: deals_basic
18
+ type: Table
19
+ properties:
20
+ columns:
21
+ - key: name
22
+ title: Deal
23
+ width: 220
24
+ - key: stage
25
+ - key: owner
26
+ - key: amount
27
+ type: number
28
+ data:
29
+ - _id: d1
30
+ name: Acme renewal
31
+ stage: proposal
32
+ owner: Ada
33
+ amount: 12000
34
+ - _id: d2
35
+ name: Globex expansion
36
+ stage: qualified
37
+ owner: Grace
38
+ amount: 48000
39
+ - _id: d3
40
+ name: Initech pilot
41
+ stage: lead
42
+ owner: Alan
43
+ amount: 3500
44
+
45
+ - title: Typed cells
46
+ fullWidth: true
47
+ blocks:
48
+ - id: deals_typed
49
+ type: Table
50
+ properties:
51
+ columns:
52
+ - key: name
53
+ title: Deal
54
+ width: 200
55
+ pinned: start
56
+ - key: stage
57
+ type: status
58
+ options:
59
+ lead: Lead
60
+ qualified:
61
+ label: Qualified
62
+ color: processing
63
+ won:
64
+ label: Won
65
+ color: success
66
+ lost:
67
+ label: Lost
68
+ color: error
69
+ - key: owner
70
+ type: avatar
71
+ cell:
72
+ nameField: owner
73
+ - key: amount
74
+ type: currency
75
+ cell:
76
+ currency: EUR
77
+ decimals: 0
78
+ - key: probability
79
+ type: progress
80
+ width: 140
81
+ - key: labels
82
+ type: tags
83
+ options:
84
+ - value: renewal
85
+ color: blue
86
+ - value: strategic
87
+ color: purple
88
+ - value: at-risk
89
+ label: At risk
90
+ color: red
91
+ - key: updated
92
+ type: date
93
+ cell:
94
+ format: D MMM YYYY
95
+ - key: website
96
+ type: url
97
+ cell:
98
+ label: Visit
99
+ data:
100
+ - _id: d1
101
+ name: Acme renewal
102
+ stage: won
103
+ owner: Ada Lovelace
104
+ amount: 12000
105
+ probability: 100
106
+ labels: [renewal]
107
+ updated: '2026-09-21'
108
+ website: https://example.com
109
+ - _id: d2
110
+ name: Globex expansion
111
+ stage: qualified
112
+ owner: Grace Hopper
113
+ amount: 48000
114
+ probability: 60
115
+ labels: [strategic]
116
+ updated: '2026-09-02'
117
+ website: https://example.org
118
+ - _id: d3
119
+ name: Initech pilot
120
+ stage: lead
121
+ owner: Alan Turing
122
+ amount: 3500
123
+ probability: 20
124
+ labels: [at-risk, renewal]
125
+ updated: '2026-08-15'
126
+ - _id: d4
127
+ name: Umbrella upsell
128
+ stage: lost
129
+ owner: Ada Lovelace
130
+ amount: 9000
131
+ probability: 0
132
+ labels: []
133
+ updated: '2026-07-30'
134
+
135
+ - title: Default view, selection and pinned columns
136
+ blocks:
137
+ - id: deals_selection
138
+ type: Table
139
+ properties:
140
+ rowSelection:
141
+ type: checkbox
142
+ defaultView:
143
+ sort:
144
+ - key: amount
145
+ desc: true
146
+ density: compact
147
+ columns:
148
+ - key: name
149
+ title: Deal
150
+ width: 220
151
+ pinned: start
152
+ - key: stage
153
+ - key: owner
154
+ - key: amount
155
+ type: number
156
+ data:
157
+ - _id: d1
158
+ name: Acme renewal
159
+ stage: proposal
160
+ owner: Ada
161
+ amount: 12000
162
+ - _id: d2
163
+ name: Globex expansion
164
+ stage: qualified
165
+ owner: Grace
166
+ amount: 48000
167
+ - _id: d3
168
+ name: Initech pilot
169
+ stage: lead
170
+ owner: Alan
171
+ amount: 3500
172
+ - id: deals_selected
173
+ type: Span
174
+ properties:
175
+ content:
176
+ _string.concat:
177
+ - 'Selected: '
178
+ - _json.stringify:
179
+ - _state: deals_selection.selected
180
+ - space: 0
181
+
182
+ - title: Toolbar with search, quick filters and a slot
183
+ fullWidth: true
184
+ overflowVisible: true
185
+ blocks:
186
+ - id: contacts_toolbar
187
+ type: Table
188
+ properties:
189
+ toolbar:
190
+ search: true
191
+ quickFilters: [status]
192
+ filter: true
193
+ sort: true
194
+ columns: true
195
+ density: true
196
+ export: true
197
+ columns:
198
+ - key: name
199
+ width: 180
200
+ - key: email
201
+ type: email
202
+ width: 220
203
+ - key: company
204
+ - key: status
205
+ type: tag
206
+ options:
207
+ - value: active
208
+ label: Active
209
+ color: green
210
+ - value: churned
211
+ label: Churned
212
+ color: red
213
+ - value: trial
214
+ label: Trial
215
+ color: gold
216
+ - key: signed_up
217
+ type: date
218
+ cell:
219
+ relative: true
220
+ data:
221
+ - _id: c1
222
+ name: Ada Lovelace
223
+ email: ada@example.com
224
+ company: Acme
225
+ status: active
226
+ signed_up: '2026-01-12'
227
+ - _id: c2
228
+ name: Grace Hopper
229
+ email: grace@example.com
230
+ company: Globex
231
+ status: trial
232
+ signed_up: '2026-09-20'
233
+ - _id: c3
234
+ name: Alan Turing
235
+ email: alan@example.com
236
+ company: Initech
237
+ status: churned
238
+ signed_up: '2025-06-01'
239
+ - _id: c4
240
+ name: Katherine Johnson
241
+ email: katherine@example.com
242
+ company: Acme
243
+ status: active
244
+ signed_up: '2026-04-03'
245
+ slots:
246
+ toolbarStart:
247
+ blocks:
248
+ - id: contacts_toolbar_new
249
+ type: Button
250
+ properties:
251
+ title: New contact
252
+ icon: add
253
+ size: small
254
+
255
+ - title: Pages and wrapped text
256
+ blocks:
257
+ - id: notes_paged
258
+ type: Table
259
+ properties:
260
+ pagination: true
261
+ defaultView:
262
+ pageSize: 2
263
+ wrap: true
264
+ columns:
265
+ - key: title
266
+ width: 160
267
+ - key: note
268
+ width: 260
269
+ data:
270
+ - _id: n1
271
+ title: Kick-off
272
+ note: Agree the scope, the owners of each workstream and the first review date.
273
+ - _id: n2
274
+ title: Design review
275
+ note: Walk through the flows with support and sales before the build starts.
276
+ - _id: n3
277
+ title: Launch
278
+ note: Announce in the changelog and email every customer on the beta list.
279
+
280
+ - title: Row links
281
+ blocks:
282
+ - id: deals_links
283
+ type: Table
284
+ properties:
285
+ rowLink:
286
+ pageId: deal
287
+ urlQuery:
288
+ _id: _id
289
+ columns:
290
+ - key: name
291
+ title: Deal
292
+ - key: owner
293
+ data:
294
+ - _id: d1
295
+ name: Acme renewal
296
+ owner: Ada
297
+ - _id: d2
298
+ name: Globex expansion
299
+ owner: Grace
300
+
301
+ - title: Bulk actions and hover buttons
302
+ fullWidth: true
303
+ blocks:
304
+ - id: tickets_bulk
305
+ type: Table
306
+ properties:
307
+ rowSelection:
308
+ type: checkbox
309
+ columns:
310
+ - key: subject
311
+ width: 260
312
+ - key: requester
313
+ - key: priority
314
+ type: tag
315
+ options:
316
+ - value: high
317
+ label: High
318
+ color: red
319
+ - value: normal
320
+ label: Normal
321
+ color: blue
322
+ - key: actions
323
+ type: buttons
324
+ title: ''
325
+ width: 96
326
+ pinned: end
327
+ sortable: false
328
+ cell:
329
+ showOn: hover
330
+ buttons:
331
+ - eventName: onReply
332
+ title: Reply
333
+ icon: mail
334
+ hideTitle: true
335
+ - eventName: onClose
336
+ title: Close
337
+ icon: check
338
+ hideTitle: true
339
+ data:
340
+ - _id: t1
341
+ subject: Cannot export the monthly invoice
342
+ requester: Ada
343
+ priority: high
344
+ - _id: t2
345
+ subject: How do I add a second address?
346
+ requester: Grace
347
+ priority: normal
348
+ - _id: t3
349
+ subject: Login link expired
350
+ requester: Alan
351
+ priority: normal
352
+ slots:
353
+ bulkActions:
354
+ blocks:
355
+ - id: tickets_bulk_close
356
+ type: Button
357
+ properties:
358
+ title: Close selected
359
+ size: small
360
+ events:
361
+ onClick:
362
+ - id: tickets_bulk_record
363
+ type: SetState
364
+ params:
365
+ tickets_bulk_closed:
366
+ _state: tickets_bulk.selected
367
+ events:
368
+ onReply:
369
+ - id: tickets_bulk_reply
370
+ type: SetState
371
+ params:
372
+ tickets_bulk_last:
373
+ _string.concat:
374
+ - 'Reply to '
375
+ - _event: row.requester
376
+ onClose:
377
+ - id: tickets_bulk_close_one
378
+ type: SetState
379
+ params:
380
+ tickets_bulk_last:
381
+ _string.concat:
382
+ - 'Close '
383
+ - _event: rowKey
384
+ - id: tickets_bulk_status
385
+ type: Span
386
+ properties:
387
+ content:
388
+ _string.concat:
389
+ - 'Last action: '
390
+ - _if_none:
391
+ - _state: tickets_bulk_last
392
+ - none
393
+ - ' · Closed: '
394
+ - _json.stringify:
395
+ - _if_none:
396
+ - _state: tickets_bulk_closed
397
+ - []
398
+ - space: 0
399
+
400
+ - title: Grouped report with totals
401
+ fullWidth: true
402
+ blocks:
403
+ - id: deals_grouped
404
+ type: Table
405
+ properties:
406
+ defaultView:
407
+ group:
408
+ - key: region
409
+ - key: owner
410
+ columns:
411
+ - key: name
412
+ title: Deal
413
+ width: 220
414
+ - key: region
415
+ groupable: true
416
+ - key: owner
417
+ groupable: true
418
+ - key: amount
419
+ type: number
420
+ aggregate: sum
421
+ - key: probability
422
+ type: percent
423
+ aggregate: avg
424
+ data:
425
+ - _id: d1
426
+ name: Acme renewal
427
+ region: EMEA
428
+ owner: Ada
429
+ amount: 12000
430
+ probability: 0.9
431
+ - _id: d2
432
+ name: Globex expansion
433
+ region: EMEA
434
+ owner: Grace
435
+ amount: 48000
436
+ probability: 0.6
437
+ - _id: d3
438
+ name: Initech pilot
439
+ region: AMER
440
+ owner: Alan
441
+ amount: 3500
442
+ probability: 0.2
443
+ - _id: d4
444
+ name: Umbrella upsell
445
+ region: EMEA
446
+ owner: Ada
447
+ amount: 9000
448
+ probability: 0.4
449
+
450
+ - title: Tree
451
+ blocks:
452
+ - id: accounts_tree
453
+ type: Table
454
+ properties:
455
+ tree:
456
+ parentField: parent
457
+ rowSelection:
458
+ type: checkbox
459
+ cascade: true
460
+ defaultView:
461
+ sort:
462
+ - key: name
463
+ columns:
464
+ - key: name
465
+ title: Account
466
+ width: 220
467
+ - key: balance
468
+ type: currency
469
+ data:
470
+ - _id: assets
471
+ name: Assets
472
+ balance: 128000
473
+ - _id: cash
474
+ name: Cash
475
+ balance: 28000
476
+ parent: assets
477
+ - _id: receivables
478
+ name: Receivables
479
+ balance: 100000
480
+ parent: assets
481
+ - _id: liabilities
482
+ name: Liabilities
483
+ balance: 42000
484
+ - _id: payables
485
+ name: Payables
486
+ balance: 42000
487
+ parent: liabilities
488
+ - id: accounts_tree_value
489
+ type: Span
490
+ properties:
491
+ content:
492
+ _string.concat:
493
+ - 'Expanded: '
494
+ - _json.stringify:
495
+ - _state: accounts_tree.expanded
496
+ - space: 0
497
+
498
+ - title: Tree with children loaded on expand
499
+ blocks:
500
+ - id: folders_lazy
501
+ type: Table
502
+ properties:
503
+ tree:
504
+ parentField: parent
505
+ lazy: true
506
+ columns:
507
+ - key: name
508
+ title: Folder
509
+ width: 260
510
+ data:
511
+ _if_none:
512
+ - _state: folders_lazy_rows
513
+ - []
514
+ events:
515
+ onMount:
516
+ - id: folders_lazy_init
517
+ type: SetState
518
+ params:
519
+ folders_lazy_rows:
520
+ - _id: invoices
521
+ name: Invoices
522
+ hasChildren: true
523
+ - _id: recipes
524
+ name: Recipes
525
+ hasChildren: true
526
+ onRowExpand:
527
+ # needsChildren is true only the first time a lazy row opens without children in data.
528
+ - id: folders_lazy_load
529
+ type: SetState
530
+ skip:
531
+ _not:
532
+ _event: needsChildren
533
+ params:
534
+ folders_lazy_rows:
535
+ _array.concat:
536
+ - _state: folders_lazy_rows
537
+ - - _id:
538
+ _string.concat:
539
+ - _event: rowKey
540
+ - '-2025'
541
+ name: '2025'
542
+ parent:
543
+ _event: rowKey
544
+ - _id:
545
+ _string.concat:
546
+ - _event: rowKey
547
+ - '-2026'
548
+ name: '2026'
549
+ parent:
550
+ _event: rowKey
551
+
552
+ - title: Expandable rows
553
+ blocks:
554
+ - id: recipes_expandable
555
+ type: Table
556
+ properties:
557
+ expandable:
558
+ template: |
559
+ <div style="padding: 8px 0">
560
+ <strong>{{ row.name }}</strong>: {{ row.method }}
561
+ </div>
562
+ rowExpandable:
563
+ when:
564
+ key: method
565
+ op: notEmpty
566
+ columns:
567
+ - key: name
568
+ title: Recipe
569
+ width: 200
570
+ - key: minutes
571
+ type: number
572
+ data:
573
+ - _id: r1
574
+ name: Sourdough loaf
575
+ minutes: 1440
576
+ method: Mix, rest overnight, shape and bake at 250°C.
577
+ - _id: r2
578
+ name: Pancakes
579
+ minutes: 20
580
+ method: Whisk the batter and fry in a hot pan.
581
+ - _id: r3
582
+ name: Toast
583
+ minutes: 3
584
+
585
+ - title: Inline editing
586
+ fullWidth: true
587
+ blocks:
588
+ - id: deals_editing
589
+ type: Table
590
+ properties:
591
+ columns:
592
+ - key: name
593
+ title: Deal
594
+ width: 220
595
+ editable: true
596
+ validate:
597
+ - pass:
598
+ op: notEmpty
599
+ message: A deal needs a name.
600
+ - key: stage
601
+ type: status
602
+ editable: true
603
+ options:
604
+ lead: Lead
605
+ won:
606
+ label: Won
607
+ color: success
608
+ lost:
609
+ label: Lost
610
+ color: error
611
+ - key: amount
612
+ type: currency
613
+ editable:
614
+ when:
615
+ key: stage
616
+ op: ne
617
+ value: won
618
+ - key: close_date
619
+ type: date
620
+ editable: true
621
+ data:
622
+ - _id: d1
623
+ name: Acme renewal
624
+ stage: won
625
+ amount: 12000
626
+ close_date: '2026-10-01'
627
+ - _id: d2
628
+ name: Globex expansion
629
+ stage: lead
630
+ amount: 48000
631
+ close_date: '2026-11-15'
632
+ events:
633
+ onCellEdit:
634
+ # A real app saves here, for example with a MongoDBUpdateOne request. The cell shows a
635
+ # saving marker until the actions finish, and reverts if one of them fails.
636
+ - id: deals_editing_wait
637
+ type: Wait
638
+ params:
639
+ ms: 600
640
+ - id: deals_editing_record
641
+ type: SetState
642
+ params:
643
+ deals_editing_last:
644
+ _string.concat:
645
+ - _event: rowKey
646
+ - ' '
647
+ - _event: column.key
648
+ - ' = '
649
+ - _json.stringify:
650
+ - _event: value
651
+ - id: deals_editing_value
652
+ type: Span
653
+ properties:
654
+ content:
655
+ _string.concat:
656
+ - 'Last edit: '
657
+ - _if_none:
658
+ - _state: deals_editing_last
659
+ - none
660
+
661
+ - title: Reorder rows with positions
662
+ blocks:
663
+ - id: steps_drag
664
+ type: Table
665
+ properties:
666
+ rowDrag:
667
+ positionField: position
668
+ defaultView:
669
+ sort:
670
+ - key: position
671
+ columns:
672
+ - key: title
673
+ title: Step
674
+ - key: position
675
+ type: number
676
+ width: 110
677
+ data:
678
+ - _id: s1
679
+ title: Plan
680
+ position: 1024
681
+ - _id: s2
682
+ title: Build
683
+ position: 2048
684
+ - _id: s3
685
+ title: Ship
686
+ position: 3072
687
+ events:
688
+ onRowMove:
689
+ - id: steps_drag_record
690
+ type: SetState
691
+ params:
692
+ steps_drag_last:
693
+ rowKey:
694
+ _event: rowKey
695
+ position:
696
+ _event: position
697
+ - id: steps_drag_value
698
+ type: Span
699
+ properties:
700
+ content:
701
+ _string.concat:
702
+ - 'Last move: '
703
+ - _json.stringify:
704
+ - _if_none:
705
+ - _state: steps_drag_last
706
+ - none
707
+ - space: 0
708
+
709
+ - title: Queue with view tabs and single-key actions
710
+ fullWidth: true
711
+ overflowVisible: true
712
+ blocks:
713
+ - id: tickets_queue
714
+ type: Table
715
+ properties:
716
+ toolbar:
717
+ views: true
718
+ keyboard:
719
+ next: true
720
+ views:
721
+ - id: open
722
+ title: Open
723
+ count: 2
724
+ locked: true
725
+ view:
726
+ filter:
727
+ key: status
728
+ op: eq
729
+ value: open
730
+ - id: waiting
731
+ title: Waiting
732
+ count: 1
733
+ locked: true
734
+ view:
735
+ filter:
736
+ key: status
737
+ op: eq
738
+ value: waiting
739
+ columns:
740
+ - key: subject
741
+ width: 260
742
+ - key: status
743
+ type: tag
744
+ options: [open, waiting]
745
+ - key: actions
746
+ type: buttons
747
+ title: ''
748
+ width: 200
749
+ sortable: false
750
+ cell:
751
+ buttons:
752
+ - eventName: onAssign
753
+ title: Assign (a)
754
+ key: a
755
+ - eventName: onSnooze
756
+ title: Snooze (s)
757
+ key: s
758
+ data:
759
+ - _id: t1
760
+ subject: Refund for a double charge
761
+ status: open
762
+ - _id: t2
763
+ subject: Change the billing email
764
+ status: open
765
+ - _id: t3
766
+ subject: Waiting for a screenshot
767
+ status: waiting
768
+ events:
769
+ onAssign:
770
+ - id: tickets_queue_assign
771
+ type: SetState
772
+ params:
773
+ tickets_queue_last:
774
+ _string.concat:
775
+ - 'Assigned '
776
+ - _event: rowKey
777
+ onSnooze:
778
+ - id: tickets_queue_snooze
779
+ type: SetState
780
+ params:
781
+ tickets_queue_last:
782
+ _string.concat:
783
+ - 'Snoozed '
784
+ - _event: rowKey
785
+ - id: tickets_queue_value
786
+ type: Span
787
+ properties:
788
+ content:
789
+ _string.concat:
790
+ - 'Focus a row and press a or s. Last: '
791
+ - _if_none:
792
+ - _state: tickets_queue_last
793
+ - none
794
+
795
+ - title: Conditional formatting
796
+ blocks:
797
+ - id: invoices_rules
798
+ type: Table
799
+ properties:
800
+ rowRules:
801
+ - when:
802
+ key: overdue
803
+ op: isTrue
804
+ style:
805
+ fontWeight: 600
806
+ columns:
807
+ - key: number
808
+ title: Invoice
809
+ - key: total
810
+ type: currency
811
+ rules:
812
+ - when:
813
+ op: gte
814
+ value: 10000
815
+ color: success
816
+ - key: due
817
+ type: date
818
+ rules:
819
+ - when:
820
+ key: overdue
821
+ op: isTrue
822
+ color: error
823
+ - key: overdue
824
+ type: boolean
825
+ hidden: true
826
+ data:
827
+ - _id: i1
828
+ number: INV-1001
829
+ total: 12500
830
+ due: '2026-08-01'
831
+ overdue: true
832
+ - _id: i2
833
+ number: INV-1002
834
+ total: 800
835
+ due: '2026-10-30'
836
+ overdue: false