@vuu-ui/vuu-table 0.8.6-debug → 0.8.6
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.
- package/LICENSE +201 -0
- package/cjs/index.js +5 -13537
- package/cjs/index.js.map +2 -2
- package/esm/index.js +5 -13715
- package/esm/index.js.map +2 -2
- package/index.css +1 -2121
- package/index.css.map +1 -1
- package/package.json +5 -5
package/esm/index.js.map
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../packages/vuu-table/src/table/ColumnResizer.tsx", "../../../packages/vuu-table/src/table/context-menu/buildContextMenuDescriptors.ts", "../../../packages/vuu-table/src/table/context-menu/useTableContextMenu.ts", "../../../packages/vuu-table/src/table/Table.tsx", "../../../packages/vuu-table/src/table/RowBasedTable.tsx", "../../../packages/vuu-table/src/table/TableRow.tsx", "../../../packages/vuu-table/src/table/TableCell.tsx", "../../../packages/vuu-ui-controls/src/drag-drop/DragDropProvider.tsx", "../../../packages/vuu-ui-controls/src/drag-drop/useDragDropNaturalMovementNext.tsx", "../../../packages/vuu-ui-controls/src/drag-drop/useDragDisplacers.ts", "../../../packages/vuu-ui-controls/src/drag-drop/drop-target-utils.ts", "../../../packages/vuu-ui-controls/src/drag-drop/Draggable.tsx", "../../../node_modules/clsx/dist/clsx.m.js", "../../../packages/vuu-ui-controls/src/drag-drop/useDragDropIndicator.tsx", "../../../packages/vuu-ui-controls/src/drag-drop/useDropIndicator.ts", "../../../packages/vuu-ui-controls/src/drag-drop/useDragDropNext.tsx", "../../../packages/vuu-ui-controls/src/drag-drop/useAutoScroll.ts", "../../../packages/vuu-ui-controls/src/editable-label/EditableLabel.tsx", "../../../packages/vuu-layout/src/dock-layout/DockLayout.tsx", "../../../packages/vuu-layout/src/registry/ComponentRegistry.ts", "../../../packages/vuu-layout/src/dock-layout/Drawer.tsx", "../../../packages/vuu-layout/src/Component.tsx", "../../../packages/vuu-layout/src/utils/pathUtils.ts", "../../../packages/vuu-layout/src/utils/propUtils.ts", "../../../packages/vuu-layout/src/utils/react-utils.ts", "../../../packages/vuu-layout/src/drag-drop/BoxModel.ts", "../../../packages/vuu-layout/src/drag-drop/DropTarget.ts", "../../../packages/vuu-layout/src/drag-drop/DropTargetRenderer.tsx", "../../../packages/vuu-layout/src/drag-drop/DropMenu.tsx", "../../../packages/vuu-layout/src/drag-drop/Draggable.ts", "../../../packages/vuu-layout/src/DraggableLayout.tsx", "../../../packages/vuu-layout/src/flexbox/Flexbox.tsx", "../../../packages/vuu-layout/src/flexbox/useSplitterResizing.ts", "../../../packages/vuu-layout/src/placeholder/Placeholder.tsx", "../../../packages/vuu-layout/src/flexbox/Splitter.tsx", "../../../packages/vuu-layout/src/layout-reducer/flexUtils.ts", "../../../packages/vuu-layout/src/flexbox/flexbox-utils.ts", "../../../packages/vuu-layout/src/flexbox/FlexboxLayout.tsx", "../../../packages/vuu-layout/src/layout-action.ts", "../../../packages/vuu-layout/src/layout-provider/LayoutProvider.tsx", "../../../packages/vuu-layout/src/layout-reducer/layout-reducer.ts", "../../../packages/vuu-layout/src/layout-reducer/insert-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/layoutUtils.ts", "../../../packages/vuu-layout/src/use-persistent-state.ts", "../../../packages/vuu-layout/src/layout-reducer/move-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/replace-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/remove-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/resize-flex-children.ts", "../../../packages/vuu-layout/src/layout-reducer/wrap-layout-element.ts", "../../../packages/vuu-layout/src/layout-provider/LayoutProviderContext.ts", "../../../packages/vuu-layout/src/layout-provider/useLayoutDragDrop.ts", "../../../packages/vuu-layout/src/flexbox/FluidGrid.tsx", "../../../packages/vuu-layout/src/responsive/use-breakpoints.ts", "../../../packages/vuu-layout/src/responsive/useResizeObserver.ts", "../../../packages/vuu-layout/src/responsive/breakpoints.ts", "../../../packages/vuu-layout/src/responsive/utils.ts", "../../../packages/vuu-layout/src/flexbox/useResponsiveSizing.ts", "../../../packages/vuu-layout/src/flexbox/FluidGridLayout.tsx", "../../../packages/vuu-layout/src/layout-header/Header.tsx", "../../../packages/vuu-layout/src/layout-view/useViewActionDispatcher.ts", "../../../packages/vuu-layout/src/layout-view/View.tsx", "../../../packages/vuu-layout/src/layout-view/useView.tsx", "../../../packages/vuu-layout/src/layout-view/useViewResize.ts", "../../../packages/vuu-layout/src/layout-view/ViewContext.ts", "../../../packages/vuu-layout/src/overflow-container/OverflowContainer.tsx", "../../../packages/vuu-layout/src/overflow-container/useOverflowContainer.ts", "../../../packages/vuu-layout/src/overflow-container/overflow-utils.ts", "../../../packages/vuu-layout/src/palette/Palette.tsx", "../../../packages/vuu-layout/src/stack/Stack.tsx", "../../../packages/vuu-layout/src/stack/StackLayout.tsx", "../../../packages/vuu-layout/src/tools/config-wrapper/ConfigWrapper.tsx", "../../../packages/vuu-layout/src/tools/devtools-box/layout-configurator.jsx", "../../../packages/vuu-layout/src/tools/devtools-tree/layout-tree-viewer.jsx", "../../../packages/vuu-ui-controls/src/tabstrip/Tabstrip.tsx", "../../../packages/vuu-ui-controls/src/tabstrip/useTabstrip.ts", "../../../packages/vuu-ui-controls/src/tabstrip/TabMenuOptions.ts", "../../../packages/vuu-ui-controls/src/tabstrip/tabstrip-dom-utils.ts", "../../../packages/vuu-ui-controls/src/tabstrip/useAnimatedSelectionThumb.ts", "../../../packages/vuu-ui-controls/src/tabstrip/useKeyboardNavigation.ts", "../../../packages/vuu-ui-controls/src/tabstrip/useSelection.ts", "../../../packages/vuu-ui-controls/src/tabstrip/Tab.tsx", "../../../packages/vuu-ui-controls/src/tabstrip/TabMenu.tsx", "../../../packages/vuu-ui-controls/src/tree/Tree.tsx", "../../../packages/vuu-ui-controls/src/tree/list-dom-utils.ts", "../../../packages/vuu-ui-controls/src/tree/use-items-with-ids.ts", "../../../packages/vuu-ui-controls/src/tree/use-selection.ts", "../../../packages/vuu-ui-controls/src/tree/use-viewport-tracking.ts", "../../../packages/vuu-ui-controls/src/tree/use-resize-observer.ts", "../../../packages/vuu-ui-controls/src/tree/useTree.ts", "../../../packages/vuu-ui-controls/src/tree/use-keyboard-navigation.ts", "../../../packages/vuu-ui-controls/src/tree/hierarchical-data-utils.ts", "../../../packages/vuu-ui-controls/src/tree/key-code.ts", "../../../packages/vuu-ui-controls/src/tree/use-hierarchical-data.ts", "../../../packages/vuu-ui-controls/src/tree/use-collapsible-groups.ts", "../../../packages/vuu-ui-controls/src/tree/use-tree-keyboard-navigation.ts", "../../../packages/vuu-table/src/table/TableGroupCell.tsx", "../../../packages/vuu-table/src/table/TableGroupHeaderCell.tsx", "../../../packages/vuu-table/src/table/useTableColumnResize.tsx", "../../../packages/vuu-table/src/table/TableHeaderCell.tsx", "../../../packages/vuu-table/src/table/SortIndicator.tsx", "../../../packages/vuu-table/src/table/filter-indicator.tsx", "../../../packages/vuu-table/src/table/useTable.ts", "../../../packages/vuu-data-react/src/hooks/useDataSource.ts", "../../../packages/vuu-data-react/src/hooks/useServerConnectionStatus.ts", "../../../packages/vuu-data-react/src/hooks/useServerConnectionQuality.ts", "../../../packages/vuu-data-react/src/hooks/useTypeaheadSuggestions.ts", "../../../node_modules/@lezer/common/dist/index.js", "../../../node_modules/@lezer/lr/dist/index.js", "../../../packages/vuu-filter-parser/src/generated/filter-parser.js", "../../../packages/vuu-filter-parser/src/FilterTreeWalker.ts", "../../../packages/vuu-filter-parser/src/FilterParser.ts", "../../../packages/vuu-data-react/src/hooks/useVuuMenuActions.ts", "../../../packages/vuu-data-react/src/hooks/useVuuTables.ts", "../../../packages/vuu-table/src/table/useDataSource.ts", "../../../packages/vuu-table/src/table/useDraggableColumn.ts", "../../../packages/vuu-table/src/table/useKeyboardNavigation.ts", "../../../packages/vuu-table/src/table/keyUtils.ts", "../../../packages/vuu-table/src/table/useMeasuredContainer.ts", "../../../packages/vuu-table/src/table/useResizeObserver.ts", "../../../packages/vuu-table/src/table/useSelection.ts", "../../../packages/vuu-table/src/table/useTableModel.ts", "../../../packages/vuu-table/src/table/useTableScroll.ts", "../../../packages/vuu-table/src/table/useTableViewport.ts", "../../../packages/vuu-table/src/table/useVirtualViewport.ts", "../../../packages/vuu-table/src/table/cell-renderers/json-cell/JsonCell.tsx", "../../../packages/vuu-table/src/table-next/TableNext.tsx", "../../../packages/vuu-table/src/table-next/HeaderCell.tsx", "../../../packages/vuu-table/src/table-next/useCell.ts", "../../../packages/vuu-table/src/table-next/ColumnMenu.tsx", "../../../packages/vuu-table/src/table-next/Row.tsx", "../../../packages/vuu-table/src/table-next/TableCell.tsx", "../../../packages/vuu-table/src/table-next/TableGroupCell.tsx", "../../../packages/vuu-table/src/table-next/useTableNext.ts", "../../../packages/vuu-table/src/table-next/useDataSource.ts", "../../../packages/vuu-table/src/table-next/useInitialValue.ts", "../../../packages/vuu-table/src/table-next/useTableModel.ts", "../../../packages/vuu-table/src/table-next/useTableScroll.ts", "../../../packages/vuu-table/src/table-next/useVirtualViewport.ts"],
|
|
4
4
|
"sourcesContent": ["// export interface ColumnResizerProps {}\nimport { useCallback, useRef } from \"react\";\nimport \"./ColumnResizer.css\";\n\nconst NOOP = () => undefined;\n\nconst baseClass = \"vuuColumnResizer\";\nexport interface TableColumnResizerProps {\n onDrag: (evt: MouseEvent, moveBy: number) => void;\n onDragEnd: (evt: MouseEvent) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n}\n\nexport const ColumnResizer = ({\n onDrag,\n onDragEnd = NOOP,\n onDragStart = NOOP,\n}: TableColumnResizerProps) => {\n const position = useRef(0);\n\n const onMouseMove = useCallback(\n (e: MouseEvent) => {\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n const x = Math.round(e.clientX);\n const moveBy = x - position.current;\n position.current = x;\n\n if (moveBy !== 0) {\n onDrag(e, moveBy);\n }\n },\n [onDrag]\n );\n\n const onMouseUp = useCallback(\n (e: MouseEvent) => {\n window.removeEventListener(\"mouseup\", onMouseUp);\n window.removeEventListener(\"mousemove\", onMouseMove);\n onDragEnd(e);\n },\n [onDragEnd, onMouseMove]\n );\n\n const handleMouseDown = useCallback(\n (e: React.MouseEvent) => {\n onDragStart(e);\n position.current = Math.round(e.clientX);\n\n window.addEventListener(\"mouseup\", onMouseUp);\n window.addEventListener(\"mousemove\", onMouseMove);\n\n if (e.stopPropagation) {\n e.stopPropagation();\n }\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n },\n [onDragStart, onMouseMove, onMouseUp]\n );\n\n return (\n <div className={baseClass} data-align=\"end\" onMouseDown={handleMouseDown} />\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data\";\nimport { ContextMenuItemDescriptor, MenuBuilder } from \"@vuu-ui/vuu-data-types\";\nimport { KeyedColumnDescriptor, PinLocation } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\n\nexport type ContextMenuLocation = \"header\" | \"filter\" | \"grid\";\n\ntype MaybeColumn = { column?: KeyedColumnDescriptor };\ntype MaybeFilter = { filter?: Filter };\n\nexport const buildContextMenuDescriptors =\n (dataSource?: DataSource): MenuBuilder =>\n (location, options) => {\n const descriptors: ContextMenuItemDescriptor[] = [];\n if (dataSource === undefined) {\n return descriptors;\n }\n //TODO which should it be ?\n if (location === \"header\" || location === \"column-menu\") {\n descriptors.push(\n ...buildSortMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(\n ...buildGroupMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(\n ...buildAggregationMenuItems(options as MaybeColumn, dataSource)\n );\n descriptors.push(...buildColumnDisplayMenuItems(options as MaybeColumn));\n descriptors.push({\n action: \"column-settings\",\n icon: \"cog\",\n label: `Column Settings`,\n options,\n });\n descriptors.push({\n action: \"table-settings\",\n icon: \"cog\",\n label: `DataGrid Settings`,\n options,\n });\n } else if (location === \"filter\") {\n const { column, filter } = options as MaybeFilter & MaybeColumn;\n const colIsOnlyFilter = filter?.column === column?.name;\n descriptors.push({\n label: \"Edit filter\",\n action: \"filter-edit\",\n options,\n });\n\n descriptors.push({\n label: \"Remove filter\",\n action: \"filter-remove-column\",\n options,\n });\n\n if (column && !colIsOnlyFilter) {\n // TODO col might still be the only column in the filter if it is\n // involved in all clauses\n descriptors.push({\n label: `Remove all filters`,\n action: \"remove-filters\",\n options,\n });\n }\n }\n\n // if (options?.selectedRowCount){\n // // TODO pass the table name\n // const rpcActions = getRpcActions();\n // for (let {label, method} of rpcActions){\n // descriptors.push({action: Action.RpcCall, label, options: {method}})\n // }\n // }\n\n return descriptors;\n };\n\nfunction buildSortMenuItems(\n options: MaybeColumn,\n { sort: { sortDefs } }: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const hasSort = sortDefs.length > 0;\n\n if (column.sorted === \"A\") {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-dsc\",\n options,\n });\n } else if (column.sorted === \"D\") {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-asc\",\n options,\n });\n } else if (typeof column.sorted === \"number\") {\n if (column.sorted > 0) {\n menuItems.push({\n label: \"Reverse Sort (DSC)\",\n action: \"sort-add-dsc\",\n options,\n });\n } else {\n menuItems.push({\n label: \"Reverse Sort (ASC)\",\n action: \"sort-add-asc\",\n options,\n });\n }\n\n // removing the last column from a sort would be a no-op, so pointless\n if (hasSort && Math.abs(column.sorted) < sortDefs.length) {\n menuItems.push({\n label: \"Remove from sort\",\n action: \"sort-remove\",\n options,\n });\n }\n\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else if (hasSort) {\n menuItems.push({\n label: \"Add to sort\",\n children: [\n { label: \"Ascending\", action: \"sort-add-asc\", options },\n { label: \"Descending\", action: \"sort-add-dsc\", options },\n ],\n });\n menuItems.push({\n label: \"New Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n } else {\n menuItems.push({\n label: \"Sort\",\n children: [\n { label: \"Ascending\", action: \"sort-asc\", options },\n { label: \"Descending\", action: \"sort-dsc\", options },\n ],\n });\n }\n return menuItems;\n}\n\nfunction buildAggregationMenuItems(\n options: MaybeColumn,\n dataSource: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined || dataSource.groupBy.length === 0) {\n return [];\n }\n const { name, label = name } = column;\n\n return [\n {\n label: `Aggregate ${label}`,\n children: [\n { label: \"Count\", action: \"agg-count\", options },\n { label: \"Distinct\", action: \"agg-distinct\", options },\n ].concat(\n isNumericColumn(column)\n ? [\n { label: \"Sum\", action: \"agg-sum\", options },\n { label: \"Avg\", action: \"agg-avg\", options },\n { label: \"High\", action: \"agg-high\", options },\n { label: \"Low\", action: \"agg-low\", options },\n ]\n : []\n ),\n },\n ];\n}\n\nconst pinColumn = (options: unknown, pinLocation: PinLocation) =>\n ({\n label: `Pin ${pinLocation}`,\n action: `column-pin-${pinLocation}`,\n options,\n } as ContextMenuItemDescriptor);\n\nconst pinLeft = (options: unknown) => pinColumn(options, \"left\");\nconst pinFloating = (options: unknown) => pinColumn(options, \"floating\");\nconst pinRight = (options: unknown) => pinColumn(options, \"right\");\n\nfunction buildColumnDisplayMenuItems(\n options: MaybeColumn\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n if (column === undefined) {\n return [];\n }\n const { pin } = column;\n\n const menuItems: ContextMenuItemDescriptor[] = [\n {\n label: `Hide column`,\n action: \"column-hide\",\n options,\n },\n {\n label: `Remove column`,\n action: \"column-remove\",\n options,\n },\n ];\n\n if (pin === undefined) {\n menuItems.push({\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options), pinRight(options)],\n });\n } else if (pin === \"left\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinFloating(options), pinRight(options)],\n }\n );\n } else if (pin === \"right\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinFloating(options)],\n }\n );\n } else if (pin === \"floating\") {\n menuItems.push(\n { label: \"Unpin column\", action: \"column-unpin\", options },\n {\n label: `Pin column`,\n children: [pinLeft(options), pinRight(options)],\n }\n );\n }\n\n return menuItems;\n}\n\nfunction buildGroupMenuItems(\n options: MaybeColumn,\n { groupBy }: DataSource\n): ContextMenuItemDescriptor[] {\n const { column } = options;\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (column === undefined) {\n return menuItems;\n }\n\n const { name, label = name } = column;\n\n if (groupBy.length === 0) {\n menuItems.push({\n label: `Group by ${label}`,\n action: \"group\",\n options,\n });\n } else {\n menuItems.push({\n label: `Add ${label} to group by`,\n action: \"group-add\",\n options,\n });\n }\n\n return menuItems;\n}\n", "/* eslint-disable no-sequences */\nimport { DataSource } from \"@vuu-ui/vuu-data\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { removeColumnFromFilter } from \"@vuu-ui/vuu-utils\";\nimport { VuuFilter } from \"@vuu-ui/vuu-protocol-types\";\nimport { DataSourceFilter, MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\nimport { PersistentColumnAction } from \"../useTableModel\";\nimport {\n addGroupColumn,\n addSortColumn,\n AggregationType,\n setAggregations,\n setSortColumn,\n} from \"@vuu-ui/vuu-utils\";\n\nexport interface ContextMenuOptions {\n column?: KeyedColumnDescriptor;\n filter?: Filter;\n sort?: VuuFilter;\n}\nexport interface ContextMenuHookProps {\n dataSource?: DataSource;\n onPersistentColumnOperation: (action: PersistentColumnAction) => void;\n}\n\nconst removeFilterColumn = (\n dataSourceFilter: DataSourceFilter,\n column: KeyedColumnDescriptor\n) => {\n if (dataSourceFilter.filterStruct && column) {\n const [filterStruct, filter] = removeColumnFromFilter(\n column,\n dataSourceFilter.filterStruct\n );\n return {\n filter,\n filterStruct,\n };\n } else {\n return dataSourceFilter;\n }\n};\n\nconst { Average, Count, Distinct, High, Low, Sum } = AggregationType;\n\nexport const useTableContextMenu = ({\n dataSource,\n onPersistentColumnOperation,\n}: ContextMenuHookProps) => {\n /** return {boolean} used by caller to determine whether to forward to additional installed context menu handlers */\n const handleContextMenuAction: MenuActionHandler = (action): boolean => {\n const gridOptions = action.options as ContextMenuOptions;\n if (gridOptions.column && dataSource) {\n const { column } = gridOptions;\n // prettier-ignore\n switch(action.menuId){\n case \"sort-asc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-dsc\": return (dataSource.sort = setSortColumn(dataSource.sort, column, \"D\")), true;\n case \"sort-add-asc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"A\")), true;\n case \"sort-add-dsc\": return (dataSource.sort = addSortColumn(dataSource.sort, column, \"D\")), true;\n case \"group\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy, column)), true;\n case \"group-add\": return (dataSource.groupBy = addGroupColumn(dataSource.groupBy, column)), true;\n case \"column-hide\": return onPersistentColumnOperation({type: \"hideColumns\", columns: [column]}), true;\n case \"column-remove\": return (dataSource.columns = dataSource.columns.filter(name => name !== column.name)), true\n case \"filter-remove-column\": return (dataSource.filter = removeFilterColumn(dataSource.filter, column)), true;\n case \"remove-filters\": return (dataSource.filter = {filter:\"\"}), true;\n case \"agg-avg\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Average)), true;\n case \"agg-high\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, High)), true;\n case \"agg-low\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Low)), true;\n case \"agg-count\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Count)), true;\n case \"agg-distinct\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Distinct)), true;\n case \"agg-sum\": return dataSource.aggregations = (setAggregations(dataSource.aggregations, column, Sum)), true;\n case \"column-pin-floating\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"floating\"}), true;\n case \"column-pin-left\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"left\"}), true;\n case \"column-pin-right\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: \"right\"}), true;\n case \"column-unpin\": return onPersistentColumnOperation({type: \"pinColumn\", column, pin: undefined}), true\n case \"column-settings\": return onPersistentColumnOperation({type: \"columnSettings\", column}), true\n case \"table-settings\": return onPersistentColumnOperation({type: \"tableSettings\"}), true\n default:\n }\n }\n return false;\n };\n\n return handleContextMenuAction;\n};\n", "import { ContextMenuProvider } from \"@vuu-ui/vuu-popups\";\nimport { Button, useIdMemo } from \"@salt-ds/core\";\nimport { CSSProperties } from \"react\";\nimport { buildContextMenuDescriptors } from \"./context-menu\";\nimport { TableProps } from \"./dataTableTypes\";\n// import { RowBasedTable } from \"./RowBasedTable\";\nimport { RowBasedTable } from \"./RowBasedTable\";\nimport { useTable } from \"./useTable\";\nimport cx from \"classnames\";\n\nimport \"./Table.css\";\nimport \"./Table-loading.css\";\n\nimport { isDataLoading } from \"@vuu-ui/vuu-utils\";\n\nconst classBase = \"vuuTable\";\n\nexport const Table = ({\n allowConfigEditing: showSettings = false,\n className: classNameProp,\n config,\n dataSource,\n headerHeight = 25,\n height,\n id: idProp,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n onShowConfigEditor: onShowSettings,\n renderBufferSize = 0,\n rowHeight = 20,\n selectionModel = \"extended\",\n style: styleProp,\n width,\n zebraStripes = false,\n ...htmlAttributes\n}: TableProps) => {\n const id = useIdMemo(idProp);\n const {\n containerMeasurements: { containerRef, innerSize, outerSize },\n containerProps,\n dispatchColumnAction,\n draggable,\n draggedItemIndex,\n handleContextMenuAction,\n scrollProps,\n viewportMeasurements,\n ...tableProps\n } = useTable({\n config,\n dataSource,\n renderBufferSize,\n headerHeight,\n height,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n rowHeight,\n selectionModel,\n width,\n });\n\n const style = {\n ...outerSize,\n \"--content-height\": `${viewportMeasurements.contentHeight}px`,\n \"--horizontal-scrollbar-height\": `${viewportMeasurements.horizontalScrollbarHeight}px`,\n \"--content-width\": `${viewportMeasurements.contentWidth}px`,\n \"--pinned-width-left\": `${viewportMeasurements.pinnedWidthLeft}px`,\n \"--pinned-width-right\": `${viewportMeasurements.pinnedWidthRight}px`,\n \"--header-height\": `${headerHeight}px`,\n \"--row-height\": `${rowHeight}px`,\n \"--table-height\": `${innerSize?.height}px`,\n \"--table-width\": `${innerSize?.width}px`,\n \"--total-header-height\": `${viewportMeasurements.totalHeaderHeight}px`,\n \"--vertical-scrollbar-width\": `${viewportMeasurements.verticalScrollbarWidth}px`,\n \"--viewport-body-height\": `${viewportMeasurements.viewportBodyHeight}px`,\n } as CSSProperties;\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-zebra`]: zebraStripes,\n [`${classBase}-loading`]: isDataLoading(tableProps.columns),\n });\n\n return (\n <ContextMenuProvider\n menuActionHandler={handleContextMenuAction}\n menuBuilder={buildContextMenuDescriptors(dataSource)}\n >\n <div\n {...htmlAttributes}\n {...containerProps}\n className={className}\n id={id}\n ref={containerRef}\n style={style}\n tabIndex={-1}\n >\n {innerSize ? (\n <div\n className={`${classBase}-scrollbarContainer`}\n ref={scrollProps.scrollbarContainerRef}\n >\n <div className={`${classBase}-scrollbarContent`} />\n </div>\n ) : null}\n {innerSize ? (\n <div\n className={`${classBase}-contentContainer`}\n ref={scrollProps.contentContainerRef}\n >\n <RowBasedTable\n {...tableProps}\n headerHeight={headerHeight}\n tableId={id}\n />\n {draggable}\n </div>\n ) : null}\n {showSettings && innerSize ? (\n <Button\n className={`${classBase}-settings`}\n data-icon=\"settings\"\n onClick={onShowSettings}\n variant=\"secondary\"\n />\n ) : null}\n </div>\n </ContextMenuProvider>\n );\n};\n", "import {\n buildColumnMap,\n getColumnStyle,\n isGroupColumn,\n metadataKeys,\n notHidden,\n visibleColumnAtIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback, useMemo } from \"react\";\nimport { TableImplementationProps } from \"./dataTableTypes\";\nimport { TableRow } from \"./TableRow\";\nimport { TableGroupHeaderCell } from \"./TableGroupHeaderCell\";\nimport { TableHeaderCell } from \"./TableHeaderCell\";\n\nimport \"./RowBasedTable.css\";\n\nconst classBase = \"vuuTable\";\nconst { RENDER_IDX } = metadataKeys;\n\nexport const RowBasedTable = ({\n columns,\n columnsWithinViewport,\n data,\n getRowOffset,\n headings,\n onColumnResize,\n onHeaderCellDragStart,\n onContextMenu,\n onRemoveColumnFromGroupBy,\n onRowClick,\n onSort,\n onToggleGroup,\n tableId,\n virtualColSpan = 0,\n rowCount,\n}: TableImplementationProps) => {\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n onHeaderCellDragStart?.(evt);\n },\n [onHeaderCellDragStart]\n );\n\n const visibleColumns = useMemo(() => {\n return columns.filter(notHidden);\n }, [columns]);\n\n const columnMap = useMemo(() => buildColumnMap(columns), [columns]);\n\n const handleHeaderClick = useCallback(\n (evt: MouseEvent) => {\n const targetElement = evt.target as HTMLElement;\n const headerCell = targetElement.closest(\n \".vuuTable-headerCell\"\n ) as HTMLElement;\n const colIdx = parseInt(headerCell?.dataset.idx ?? \"-1\");\n const column = visibleColumnAtIndex(columns, colIdx);\n const isAdditive = evt.shiftKey;\n column && onSort(column, isAdditive);\n },\n [columns, onSort]\n );\n\n return (\n <div aria-rowcount={rowCount} className={`${classBase}-table`} role=\"table\">\n <div className={`${classBase}-headers`} role=\"rowGroup\">\n {headings.map((colHeaders, i) => (\n <div className=\"vuuTable-heading\" key={i}>\n {colHeaders.map(({ label, width }, j) => (\n <div key={j} className=\"vuuTable-headingCell\" style={{ width }}>\n {label}\n </div>\n ))}\n </div>\n ))}\n <div role=\"row\">\n {visibleColumns.map((column, i) => {\n const style = getColumnStyle(column);\n return isGroupColumn(column) ? (\n <TableGroupHeaderCell\n column={column}\n data-idx={i}\n key={i}\n onRemoveColumn={onRemoveColumnFromGroupBy}\n onResize={onColumnResize}\n role=\"columnHeader\"\n style={style}\n />\n ) : (\n <TableHeaderCell\n column={column}\n data-idx={i}\n id={`${tableId}-${i}`}\n key={i}\n onClick={handleHeaderClick}\n onDragStart={handleDragStart}\n onResize={onColumnResize}\n role=\"columnHeader\"\n style={style}\n />\n );\n })}\n </div>\n </div>\n <div\n className={`${classBase}-body`}\n onContextMenu={onContextMenu}\n role=\"rowGroup\"\n >\n {data?.map((row) => (\n <TableRow\n columnMap={columnMap}\n columns={columnsWithinViewport}\n offset={getRowOffset(row)}\n key={row[RENDER_IDX]}\n onClick={onRowClick}\n virtualColSpan={virtualColSpan}\n onToggleGroup={onToggleGroup}\n row={row}\n />\n ))}\n </div>\n </div>\n );\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n ColumnMap,\n isGroupColumn,\n isJsonColumn,\n isJsonGroup,\n metadataKeys,\n notHidden,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { HTMLAttributes, memo, MouseEvent, useCallback } from \"react\";\nimport { RowClickHandler } from \"./dataTableTypes\";\nimport { TableCell } from \"./TableCell\";\nimport { TableGroupCell } from \"./TableGroupCell\";\n\nimport \"./TableRow.css\";\n\nconst { IDX, IS_EXPANDED, SELECTED } = metadataKeys;\nconst classBase = \"vuuTableRow\";\n\nexport interface RowProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\" | \"onClick\"> {\n columnMap: ColumnMap;\n columns: KeyedColumnDescriptor[];\n offset: number;\n onClick?: RowClickHandler;\n onToggleGroup?: (row: DataSourceRow, column: KeyedColumnDescriptor) => void;\n row: DataSourceRow;\n virtualColSpan?: number;\n}\n\nexport const TableRow = memo(function Row({\n columnMap,\n columns,\n offset,\n onClick,\n onToggleGroup,\n virtualColSpan = 0,\n row,\n}: RowProps) {\n const {\n [IDX]: rowIndex,\n [IS_EXPANDED]: isExpanded,\n [SELECTED]: isSelected,\n } = row;\n\n const className = cx(classBase, {\n [`${classBase}-even`]: rowIndex % 2 === 0,\n [`${classBase}-expanded`]: isExpanded,\n [`${classBase}-preSelected`]: isSelected === 2,\n });\n\n const handleRowClick = useCallback(\n (evt: MouseEvent) => {\n const rangeSelect = evt.shiftKey;\n const keepExistingSelection = evt.ctrlKey || evt.metaKey; /* mac only */\n onClick?.(row, rangeSelect, keepExistingSelection);\n },\n [onClick, row]\n );\n\n const handleGroupCellClick = useCallback(\n (evt: MouseEvent, column: KeyedColumnDescriptor) => {\n if (isGroupColumn(column) || isJsonGroup(column, row)) {\n evt.stopPropagation();\n onToggleGroup?.(row, column);\n }\n },\n [onToggleGroup, row]\n );\n\n return (\n <div\n aria-selected={isSelected === 1 ? true : undefined}\n aria-rowindex={rowIndex}\n className={className}\n onClick={handleRowClick}\n role=\"row\"\n style={{\n transform: `translate3d(0px, ${offset}px, 0px)`,\n }}\n >\n {virtualColSpan > 0 ? (\n <div role=\"cell\" style={{ width: virtualColSpan }} />\n ) : null}\n {columns.filter(notHidden).map((column) => {\n const isGroup = isGroupColumn(column);\n const isJsonCell = isJsonColumn(column);\n const Cell = isGroup ? TableGroupCell : TableCell;\n return (\n <Cell\n column={column}\n columnMap={columnMap}\n key={column.name}\n onClick={isGroup || isJsonCell ? handleGroupCellClick : undefined}\n row={row}\n />\n );\n })}\n </div>\n );\n});\n", "import { TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getColumnStyle, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { EditableLabel } from \"@vuu-ui/vuu-ui-controls\";\nimport cx from \"classnames\";\nimport {\n KeyboardEvent,\n memo,\n MouseEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./TableCell.css\";\n\nconst { KEY } = metadataKeys;\n\nexport const TableCell = memo(\n ({\n className: classNameProp,\n column,\n columnMap,\n onClick,\n row,\n }: TableCellProps) => {\n const labelFieldRef = useRef<HTMLDivElement>(null);\n const {\n align,\n CellRenderer,\n key,\n pin,\n editable,\n resizing,\n valueFormatter,\n } = column;\n const [editing, setEditing] = useState<boolean>(false);\n const value = valueFormatter(row[key]);\n const [editableValue, setEditableValue] = useState<string>(value);\n const handleTitleMouseDown = () => {\n labelFieldRef.current?.focus();\n };\n const handleTitleKeyDown = (evt: KeyboardEvent<HTMLTableCellElement>) => {\n if (evt.key === \"Enter\") {\n setEditing(true);\n }\n };\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n onClick?.(evt, column);\n },\n [column, onClick]\n );\n\n const handleEnterEditMode = () => {\n setEditing(true);\n };\n\n const handleExitEditMode = (\n originalValue = \"\",\n finalValue = \"\",\n allowDeactivation = true,\n editCancelled = false\n ) => {\n setEditing(false);\n if (editCancelled) {\n setEditableValue(originalValue);\n } else if (finalValue !== originalValue) {\n setEditableValue(finalValue);\n }\n if (allowDeactivation === false) {\n labelFieldRef.current?.focus();\n }\n };\n\n // might want to useMemo here, this won't change often\n const className =\n cx(classNameProp, {\n vuuAlignRight: align === \"right\",\n vuuPinFloating: pin === \"floating\",\n vuuPinLeft: pin === \"left\",\n vuuPinRight: pin === \"right\",\n \"vuuTableCell-resizing\": resizing,\n }) || undefined;\n const style = getColumnStyle(column);\n return editable ? (\n <div\n className={className}\n data-editable\n role=\"cell\"\n style={style}\n onKeyDown={handleTitleKeyDown}\n >\n <EditableLabel\n editing={editing}\n key=\"title\"\n value={editableValue}\n onChange={setEditableValue}\n onMouseDownCapture={handleTitleMouseDown}\n onEnterEditMode={handleEnterEditMode}\n onExitEditMode={handleExitEditMode}\n onKeyDown={handleTitleKeyDown}\n ref={labelFieldRef}\n tabIndex={0}\n />\n </div>\n ) : (\n <div\n className={className}\n role=\"cell\"\n style={style}\n onClick={handleClick}\n >\n {CellRenderer ? (\n <CellRenderer column={column} columnMap={columnMap} row={row} />\n ) : (\n value\n )}\n </div>\n );\n },\n cellValuesAreEqual\n);\nTableCell.displayName = \"TableCell\";\n\nfunction cellValuesAreEqual(prev: TableCellProps, next: TableCellProps) {\n return (\n prev.column === next.column &&\n prev.onClick === next.onClick &&\n prev.row[KEY] === next.row[KEY] &&\n prev.row[prev.column.key] === next.row[next.column.key]\n );\n}\n", "import React, {\n createContext,\n ReactNode,\n useCallback,\n useContext,\n useMemo,\n} from \"react\";\n\nconst NO_DRAG_CONTEXT = {\n isDragSource: false,\n isDropTarget: false,\n register: () => undefined,\n};\n\nconst unconfiguredRegistrationCall = () =>\n console.log(`have you forgotten to provide a DragDrop Provider ?`);\n\nexport interface DragDropContextProps {\n dragSources?: Map<string, string[]>;\n dropTargets?: Map<string, string[]>;\n registerDragDropParty: (id: string) => void;\n}\n\nconst DragDropContext = createContext<DragDropContextProps>({\n registerDragDropParty: unconfiguredRegistrationCall,\n});\n\nexport type DragSources = { [key: string]: { dropTargets: string | string[] } };\nexport interface DragDropProviderProps {\n children: ReactNode;\n dragSources: DragSources;\n}\n\nexport const DragDropProvider = ({\n children,\n dragSources: dragSourcesProp,\n}: DragDropProviderProps) => {\n const [dragSources, dropTargets] = useMemo(() => {\n const sources = new Map<string, string[]>();\n const targets = new Map<string, string[]>();\n\n for (const [sourceId, { dropTargets }] of Object.entries(dragSourcesProp)) {\n const sourceEntry = sources.get(sourceId);\n const targetIds = Array.isArray(dropTargets)\n ? dropTargets\n : [dropTargets];\n if (sourceEntry) {\n sourceEntry.push(...targetIds);\n } else {\n sources.set(sourceId, targetIds);\n }\n for (const targetId of targetIds) {\n const targetEntry = targets.get(targetId);\n if (targetEntry) {\n targetEntry.push(sourceId);\n } else {\n targets.set(targetId, [sourceId]);\n }\n }\n }\n return [sources, targets];\n }, [dragSourcesProp]);\n\n console.log({\n dragSources,\n dropTargets,\n });\n\n const registerDragDropParty = useCallback((id: string) => {\n console.log(`registerDragDropParty ${id}`);\n }, []);\n\n const contextValue: DragDropContextProps = useMemo(\n () => ({\n dragSources,\n dropTargets,\n registerDragDropParty,\n }),\n [dragSources, dropTargets, registerDragDropParty]\n );\n\n return (\n <DragDropContext.Provider value={contextValue}>\n {children}\n </DragDropContext.Provider>\n );\n};\n\nexport interface DragDropProviderResult {\n isDragSource: boolean;\n isDropTarget: boolean;\n register: (id: string) => void;\n}\n\nexport const useDragDropProvider = (id?: string): DragDropProviderResult => {\n const { dragSources, dropTargets, registerDragDropParty } =\n useContext(DragDropContext);\n if (id) {\n const isDragSource = dragSources?.has(id) ?? false;\n const isDropTarget = dropTargets?.has(id) ?? false;\n\n return {\n isDragSource,\n isDropTarget,\n register: registerDragDropParty,\n };\n } else {\n return NO_DRAG_CONTEXT;\n }\n};\n", "import { useCallback, useMemo, useRef, useState } from \"react\";\n\nimport {\n Direction,\n InternalDragDropProps,\n InternalDragHookResult,\n ViewportRange,\n} from \"./dragDropTypesNext\";\nimport { useDragDisplacers } from \"./useDragDisplacers\";\n\nimport {\n dimensions,\n getIndexOfDraggedItem,\n getNextDropTarget,\n MeasuredDropTarget,\n measureDropTargets,\n NOT_HIDDEN,\n NOT_OVERFLOWED,\n} from \"./drop-target-utils\";\n\nexport const useDragDropNaturalMovement = ({\n draggableRef,\n onDrop,\n orientation = \"horizontal\",\n containerRef,\n itemQuery = \"*\",\n selected,\n viewportRange,\n}: InternalDragDropProps): InternalDragHookResult => {\n const dragDirectionRef = useRef<Direction | undefined>();\n\n const isScrollable = useRef(false);\n /** current position of dragged element */\n const dragPosRef = useRef<number>(-1);\n const measuredDropTargets = useRef<MeasuredDropTarget[]>([]);\n const overflowMenuShowingRef = useRef(false);\n\n const [showOverflow, setShowOverflow] = useState(false);\n\n const { clearSpacers, displaceItem, displaceLastItem } = useDragDisplacers();\n\n const draggedItemRef = useRef<MeasuredDropTarget>();\n const fullItemQuery = `:is(${itemQuery}${NOT_OVERFLOWED}${NOT_HIDDEN},.vuuOverflowContainer-OverflowIndicator)`;\n\n // const { setMeasurements: setVizData } = useListViz();\n\n const indexOf = (dropTarget: MeasuredDropTarget) =>\n measuredDropTargets.current.findIndex((d) => d.id === dropTarget.id);\n\n // Shouldn't need this - but viewportRange is always stale in stopScrolling. Checked all dependencies\n // look ok. Something to do with setTimeout / scrollHandler ?\n const rangeRef = useRef<ViewportRange>();\n rangeRef.current = viewportRange;\n\n const handleScrollStart = useCallback(() => {\n clearSpacers();\n }, [clearSpacers]);\n\n const handleScrollStop = useCallback(\n (scrollDirection: \"fwd\" | \"bwd\", _scrollPos: number, atEnd: boolean) => {\n const { current: container } = containerRef;\n const { current: draggedItem } = draggedItemRef;\n if (container && draggedItem) {\n measuredDropTargets.current = measureDropTargets(\n container,\n orientation,\n fullItemQuery,\n rangeRef.current\n );\n\n // setVizData?.(measuredDropTargets.current);\n\n const { size } = draggedItem;\n const dragPos = dragPosRef.current;\n const midPos = dragPos + size / 2;\n const { current: dropTargets } = measuredDropTargets;\n const dropTarget = getNextDropTarget(dropTargets, midPos, \"fwd\");\n\n if (dropTarget) {\n const targetIndex = indexOf(dropTarget);\n const nextInsertPos = targetIndex;\n const nextDropTarget = dropTargets[nextInsertPos];\n\n if (atEnd && scrollDirection === \"fwd\") {\n displaceLastItem(\n dropTargets,\n dropTargets[dropTargets.length - 1],\n size,\n false,\n \"static\",\n orientation\n );\n } else {\n displaceItem(\n dropTargets,\n nextDropTarget,\n size,\n true,\n \"static\",\n orientation\n );\n }\n // setVizData?.(\n // measuredDropTargets.current,\n // nextDropTarget,\n // dropZoneRef.current\n // );\n }\n }\n },\n [\n containerRef,\n displaceItem,\n displaceLastItem,\n fullItemQuery,\n orientation,\n // setVizData,\n ]\n );\n\n const beginDrag = useCallback(\n (evt: MouseEvent) => {\n const evtTarget = evt.target as HTMLElement;\n const dragElement = evtTarget.closest(itemQuery) as HTMLElement;\n if (\n //TODO need a different check for selected\n dragElement.ariaSelected &&\n Array.isArray(selected) &&\n selected.length > 1\n ) {\n console.log(\"its a selected element, and we have a multi select\");\n }\n const { current: container } = containerRef;\n if (container && dragElement) {\n const { SCROLL_SIZE, CLIENT_SIZE } = dimensions(orientation);\n const { id: draggedItemId } = dragElement;\n\n const { [SCROLL_SIZE]: scrollSize, [CLIENT_SIZE]: clientSize } =\n container;\n isScrollable.current = scrollSize > clientSize;\n const dropTargets = (measuredDropTargets.current = measureDropTargets(\n container,\n orientation,\n fullItemQuery,\n viewportRange,\n draggedItemId\n ));\n\n console.log({ dropTargets });\n\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const draggedItem = dropTargets[indexOfDraggedItem];\n\n if (draggedItem && container) {\n draggedItemRef.current = draggedItem;\n\n const displaceFunction = draggedItem.isLast\n ? displaceLastItem\n : displaceItem;\n\n // setVizData?.(dropTargets, displacedItem, dropZone);\n\n displaceFunction(\n dropTargets,\n draggedItem,\n draggedItem.size,\n false,\n \"static\",\n orientation\n );\n }\n }\n },\n [\n containerRef,\n displaceItem,\n displaceLastItem,\n fullItemQuery,\n itemQuery,\n orientation,\n selected,\n // setVizData,\n viewportRange,\n ]\n );\n\n const [showPopup, hidePopup] = useMemo(() => {\n let popupShowing = false;\n const show = (dropTarget: MeasuredDropTarget) => {\n if (!popupShowing) {\n popupShowing = true;\n const button = dropTarget.element.querySelector(\".vuuPopupMenu\");\n if (button) {\n const evt = new MouseEvent(\"click\", {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n button.dispatchEvent(evt);\n }\n }\n };\n\n const hide = (dropTarget: MeasuredDropTarget) => {\n if (popupShowing) {\n popupShowing = false;\n const button = dropTarget.element.querySelector(\".vuuPopupMenu\");\n if (button) {\n const evt = new MouseEvent(\"click\", {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n button.dispatchEvent(evt);\n }\n }\n };\n\n return [show, hide];\n }, []);\n\n const drag = useCallback(\n (dragPos: number, mouseMoveDirection: \"fwd\" | \"bwd\") => {\n const { current: draggedItem } = draggedItemRef;\n\n if (draggedItem) {\n if (draggableRef.current && containerRef.current) {\n dragPosRef.current = dragPos;\n\n const { current: dropTargets } = measuredDropTargets;\n const nextDropTarget = getNextDropTarget(\n dropTargets,\n dragPos,\n mouseMoveDirection\n );\n\n if (nextDropTarget && !nextDropTarget.isDraggedItem) {\n if (nextDropTarget.isOverflowIndicator) {\n // Does this belong in here or can we abstract it out\n setShowOverflow((overflowMenuShowingRef.current = true));\n showPopup(nextDropTarget);\n } else {\n const { size } = draggedItem;\n const targetIndex = indexOf(nextDropTarget);\n\n const displaceFunc =\n targetIndex === dropTargets.length - 1\n ? displaceLastItem\n : displaceItem;\n\n displaceFunc(\n dropTargets,\n nextDropTarget,\n size,\n true,\n mouseMoveDirection,\n orientation\n );\n // setVizData?.(dropTargets, nextDropTarget, nextDropZone);\n\n const overflowIndicator = dropTargets.at(\n -1\n ) as MeasuredDropTarget;\n hidePopup(overflowIndicator);\n setShowOverflow((overflowMenuShowingRef.current = false));\n }\n }\n\n dragDirectionRef.current = mouseMoveDirection;\n }\n }\n },\n [\n containerRef,\n displaceItem,\n displaceLastItem,\n draggableRef,\n hidePopup,\n orientation,\n showPopup,\n ]\n );\n\n const drop = useCallback(() => {\n clearSpacers();\n\n const { current: dropTargets } = measuredDropTargets;\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const draggedItem = dropTargets[indexOfDraggedItem];\n\n if (draggedItem) {\n dragDirectionRef.current = undefined;\n\n if (overflowMenuShowingRef.current) {\n onDrop(draggedItem.index, -1);\n } else {\n onDrop(draggedItem.index, indexOfDraggedItem);\n }\n }\n setShowOverflow(false);\n\n if (containerRef.current) {\n // TODO we're not catching every scenario where we need to control\n // the final scroll position here.\n const scrollTop = containerRef.current?.scrollTop;\n if (indexOfDraggedItem < dropTargets.length) {\n containerRef.current.scrollTop = scrollTop;\n }\n }\n }, [clearSpacers, containerRef, onDrop]);\n\n return {\n beginDrag,\n drag,\n drop,\n handleScrollStart,\n handleScrollStop,\n revealOverflowedItems: showOverflow,\n };\n};\n", "import { useCallback, useMemo, useRef } from \"react\";\nimport {\n MeasuredDropTarget,\n mutateDropTargetsSwitchDropTargetPosition,\n} from \"./drop-target-utils\";\nimport { createDragSpacer as createDragDisplacer } from \"./Draggable\";\nimport { Direction } from \"./dragDropTypesNext\";\n\nexport type DragDisplacersHookResult = {\n displaceItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\"\n ) => void;\n displaceLastItem: (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition?: boolean,\n direction?: Direction | \"static\",\n orientation?: \"horizontal\" | \"vertical\"\n ) => void;\n clearSpacers: () => void;\n};\n\nexport type DragDisplacersHook = () => DragDisplacersHookResult;\n/**\n * Manage a pair of displacer elements to smoothly display a moving gap between\n * list items of any kind. Designed to be used in a drag drop operation. The 'static'\n * direction option should be used at drag start or following scroll.\n */\nexport const useDragDisplacers: DragDisplacersHook = () => {\n const animationFrame = useRef(0);\n const transitioning = useRef(false);\n\n const spacers = useMemo(\n // We only need to listen for transition end on one of the spacers\n () => [createDragDisplacer(transitioning), createDragDisplacer()],\n []\n );\n\n const clearSpacers = useCallback(\n () => spacers.forEach((spacer) => spacer.remove()),\n [spacers]\n );\n\n const animateTransition = useCallback(\n (size: number, propertyName = \"width\") => {\n const [spacer1, spacer2] = spacers;\n animationFrame.current = requestAnimationFrame(() => {\n transitioning.current = true;\n spacer1.style.cssText = `${propertyName}: 0px`;\n spacer2.style.cssText = `${propertyName}: ${size}px`;\n spacers[0] = spacer2;\n spacers[1] = spacer1;\n });\n },\n [spacers]\n );\n\n const cancelAnyPendingAnimation = useCallback(() => {\n if (animationFrame.current) {\n cancelAnimationFrame(animationFrame.current);\n animationFrame.current = 0;\n }\n }, []);\n\n const displaceItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n orientation: \"horizontal\" | \"vertical\" = \"horizontal\"\n ) => {\n if (dropTarget) {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n cancelAnyPendingAnimation();\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n if (direction === \"fwd\") {\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.after(spacer1);\n dropTarget.element.before(spacer2);\n }\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else if (direction === \"static\") {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.before(spacer1);\n } else {\n throw Error(\n \"useDragDisplacers currently only supports noTransition for static displacement\"\n );\n }\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n }\n },\n [animateTransition, cancelAnyPendingAnimation, clearSpacers, spacers]\n );\n const displaceLastItem = useCallback(\n (\n dropTargets: MeasuredDropTarget[],\n dropTarget: MeasuredDropTarget,\n size: number,\n useTransition = false,\n direction: Direction | \"static\" = \"static\",\n orientation: \"horizontal\" | \"vertical\" = \"horizontal\"\n ) => {\n const propertyName = orientation === \"horizontal\" ? \"width\" : \"height\";\n const [spacer1, spacer2] = spacers;\n\n cancelAnyPendingAnimation();\n\n if (useTransition) {\n if (transitioning.current) {\n clearSpacers();\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n spacer2.style.cssText = `${propertyName}: 0px`;\n dropTarget.element.before(spacer1);\n dropTarget.element.after(spacer2);\n } else {\n if (direction === \"fwd\") {\n dropTarget.element.after(spacer2);\n } else {\n dropTarget.element.before(spacer2);\n }\n }\n animateTransition(size, propertyName);\n } else {\n spacer1.style.cssText = `${propertyName}: ${size}px`;\n dropTarget.element.after(spacer1);\n }\n\n if (direction !== \"static\") {\n mutateDropTargetsSwitchDropTargetPosition(dropTargets, direction);\n }\n },\n [animateTransition, cancelAnyPendingAnimation, clearSpacers, spacers]\n );\n\n return {\n displaceItem,\n displaceLastItem,\n clearSpacers,\n };\n};\n", "import { orientationType } from \"@vuu-ui/vuu-utils\";\nimport { ViewportRange } from \"./dragDropTypesNext\";\nimport { Direction, Rect } from \"./dragDropTypesNext\";\n\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n// duplicated in repsonsive\n\nexport const NOT_OVERFLOWED = \":not(.wrapped)\";\nexport const NOT_HIDDEN = ':not([aria-hidden=\"true\"])';\n\nexport type MeasuredDropTarget = {\n /** \n The index position currently occupied by this item. If draggable \n is dropped here, this will be the destination drop position.\n */\n currentIndex: number;\n dataIndex?: number;\n element: HTMLElement;\n id: string;\n index: number;\n isDraggedItem: boolean;\n isLast?: boolean;\n isOverflowIndicator?: boolean;\n start: number;\n end: number;\n mid: number;\n size: number;\n};\n\nexport type targetType = {\n element: HTMLElement | null;\n index: number;\n isLast?: boolean;\n};\n\n/** clones and removes id */\nexport const cloneElement = <T extends HTMLElement>(element: T): T => {\n const dolly = element.cloneNode(true) as T;\n // TOSO should we care about nested id values - perhaps an additional param, defaulting to false ?\n dolly.removeAttribute(\"id\");\n // Set index to -1 in case a moueMove event as we wait for drop to take effect might set highlighted\n // index to wrong value (see useList) -1 will be ignored;\n dolly.dataset.index = \"-1\";\n return dolly;\n};\n\ntype MousePosKey = keyof Pick<MouseEvent, \"clientX\" | \"clientY\">;\ntype DOMRectKey = keyof Omit<DOMRect, \"toJSON\">;\ntype DOMRectDimensionKey = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype Dimension = keyof Pick<DOMRect, \"width\" | \"height\">;\ntype ElementDimension = keyof Pick<\n HTMLElement,\n | \"scrollHeight\"\n | \"scrollWidth\"\n | \"clientHeight\"\n | \"clientWidth\"\n | \"scrollTop\"\n | \"scrollLeft\"\n>;\n\ntype ElementPosition = \"x\" | \"y\";\n\nexport const measureElementSizeAndPosition = (\n element: HTMLElement,\n dimension: Dimension = \"width\",\n includeAutoMargin = false\n) => {\n const pos = dimension === \"width\" ? \"left\" : \"top\";\n const { [dimension]: size, [pos]: position } =\n element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n if (!isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n return [position, marginStart + minWidth + marginEnd];\n};\n\nconst DIMENSIONS = {\n horizontal: {\n CLIENT_POS: \"clientX\" as MousePosKey,\n CLIENT_SIZE: \"clientWidth\" as ElementDimension,\n CONTRA: \"top\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientY\" as MousePosKey,\n CONTRA_END: \"bottom\" as DOMRectDimensionKey,\n CONTRA_POS: \"y\" as ElementPosition,\n DIMENSION: \"width\" as DOMRectDimensionKey,\n END: \"right\" as DOMRectKey,\n POS: \"x\" as ElementPosition,\n SCROLL_POS: \"scrollLeft\" as ElementDimension,\n SCROLL_SIZE: \"scrollWidth\" as ElementDimension,\n START: \"left\" as DOMRectKey,\n },\n vertical: {\n CLIENT_POS: \"clientY\" as MousePosKey,\n CLIENT_SIZE: \"clientHeight\" as ElementDimension,\n CONTRA: \"left\" as DOMRectKey,\n CONTRA_CLIENT_POS: \"clientX\" as MousePosKey,\n CONTRA_END: \"right\" as DOMRectDimensionKey,\n CONTRA_POS: \"x\" as ElementPosition,\n DIMENSION: \"height\" as DOMRectDimensionKey,\n END: \"bottom\" as DOMRectKey,\n POS: \"y\" as ElementPosition,\n SCROLL_POS: \"scrollTop\" as ElementDimension,\n SCROLL_SIZE: \"scrollHeight\" as ElementDimension,\n START: \"top\" as DOMRectKey,\n },\n};\nexport const dimensions = (orientation: orientationType) =>\n DIMENSIONS[orientation];\n\nexport const getItemById = (\n measuredItems: MeasuredDropTarget[],\n id: string\n) => {\n const result = measuredItems.find((item) => item.id === id);\n if (result) {\n return result;\n }\n // else {\n // throw Error(`measuredItems do not contain an item with id #${id}`);\n // }\n};\n\nexport const removeDraggedItem = (\n measuredItems: MeasuredDropTarget[],\n index: number\n) => {\n measuredItems.splice(index, 1);\n for (let i = index; i < measuredItems.length; i++) {\n measuredItems[i].currentIndex -= 1;\n }\n};\n\nexport type dropZone = \"start\" | \"end\";\n\nexport const measureDropTargets = (\n container: HTMLElement,\n orientation: orientationType,\n itemQuery?: string,\n viewportRange?: ViewportRange,\n draggedItemId?: string\n) => {\n const dragThresholds: MeasuredDropTarget[] = [];\n const { DIMENSION } = dimensions(orientation);\n const children = Array.from(\n itemQuery ? container.querySelectorAll(itemQuery) : container.children\n );\n\n const itemCount = children.length;\n const start =\n typeof viewportRange?.from === \"number\"\n ? viewportRange.atEnd\n ? Math.max(0, viewportRange.from - 1)\n : viewportRange.from\n : 0;\n const end =\n typeof viewportRange?.to === \"number\"\n ? Math.min(viewportRange.to + 2, itemCount - 1)\n : itemCount - 1;\n for (let index = start; index <= end; index++) {\n const element = children[index] as HTMLElement;\n const [start, size] = measureElementSizeAndPosition(element, DIMENSION);\n const isLast = index === itemCount - 1;\n const id = element.id;\n\n const dataIndex = parseInt(element.dataset.index ?? \"-1\");\n\n dragThresholds.push({\n currentIndex: index,\n dataIndex: isNaN(dataIndex) ? -1 : dataIndex,\n id,\n index,\n isDraggedItem: draggedItemId === id,\n isLast,\n isOverflowIndicator: element.dataset.index === \"overflow\",\n element: element as HTMLElement,\n start,\n end: start + size,\n size,\n mid: start + size / 2,\n });\n }\n return dragThresholds;\n};\n\nexport const getIndexOfDraggedItem = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets.findIndex((d) => d.isDraggedItem);\n\n// As the draggedItem is moved, displacing existing items, mirror\n// the movements within the dropTargets collection\nexport const mutateDropTargetsSwitchDropTargetPosition = (\n dropTargets: MeasuredDropTarget[],\n direction: Direction\n) => {\n // console.log(`switchDropTargetPosition\n // direction: ${direction} ${dropTargetsDebugString(dropTargets)}`);\n\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const indexOfTarget =\n direction === \"fwd\" ? indexOfDraggedItem + 1 : indexOfDraggedItem - 1;\n\n if (indexOfTarget < 0 || indexOfTarget >= dropTargets.length) {\n throw Error(\"switchDropTargetPosition index out of range\");\n }\n\n const draggedItem = dropTargets.at(indexOfDraggedItem) as MeasuredDropTarget;\n const targetItem = dropTargets.at(indexOfTarget) as MeasuredDropTarget;\n\n const diff = targetItem.size - draggedItem.size;\n\n if (direction === \"fwd\") {\n const draggedStart = targetItem.start + diff;\n const draggedEnd = targetItem.end;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start;\n const targetEnd = draggedItem.end + diff;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfDraggedItem, 2, newTargetItem, newDraggedItem);\n } else {\n const draggedStart = targetItem.start;\n const draggedEnd = targetItem.end - diff;\n\n const newDraggedItem = {\n ...draggedItem,\n start: draggedStart,\n mid: Math.floor(draggedStart + (draggedEnd - draggedStart) / 2),\n end: draggedEnd,\n } as MeasuredDropTarget;\n\n const targetStart = draggedItem.start - diff;\n const targetEnd = draggedItem.end;\n\n const newTargetItem = {\n ...targetItem,\n start: targetStart,\n mid: Math.floor(targetStart + (targetEnd - targetStart) / 2),\n end: targetEnd,\n } as MeasuredDropTarget;\n dropTargets.splice(indexOfTarget, 2, newDraggedItem, newTargetItem);\n }\n\n // console.log(`${direction} ${dropTargetsDebugString(dropTargets)}`);\n};\n\nexport const getNextDropTarget = (\n dropTargets: MeasuredDropTarget[],\n pos: number,\n mouseMoveDirection: Direction\n): MeasuredDropTarget => {\n const len = dropTargets.length;\n const indexOfDraggedItem = getIndexOfDraggedItem(dropTargets);\n const draggedItem = dropTargets[indexOfDraggedItem];\n\n if (mouseMoveDirection === \"fwd\") {\n const leadingEdge = Math.round(pos + draggedItem.size);\n for (let index = len - 1; index >= 0; index--) {\n const dropTarget = dropTargets[index];\n if (leadingEdge > dropTarget.mid) {\n if (index < indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n } else {\n const leadingEdge = Math.round(pos);\n for (let index = 0; index < len; index++) {\n const dropTarget = dropTargets[index];\n if (leadingEdge < dropTarget.mid) {\n if (index > indexOfDraggedItem) {\n return draggedItem;\n } else {\n return dropTarget;\n }\n }\n }\n }\n throw Error(\"no dropTraget identified\");\n};\n\n/**\n * An item within a scrollable container might have a width or height greater than that of\n * the container. If we drag such an item, we don't want the draggable to be larger than\n * the container.\n */\nexport function constrainRect(targetRect: Rect, constraintRect: Rect): Rect {\n const { height, left, top, width } = targetRect;\n const { height: constrainedHeight, width: constrainedWidth } = constraintRect;\n return {\n height: Math.min(height, constrainedHeight),\n left,\n top,\n width: Math.min(width, constrainedWidth),\n };\n}\n\nexport const moveItem = <T = unknown>(\n items: T[],\n fromIndex: number,\n toIndex: number\n): T[] => {\n if (fromIndex === toIndex) {\n return items;\n } else {\n const newItems = items.slice();\n const [item] = newItems.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newItems.concat(item);\n } else {\n const offset = toIndex > fromIndex ? 0 : 0;\n newItems.splice(toIndex + offset, 0, item);\n return newItems;\n }\n }\n};\n\nexport const dropTargetsDebugString = (dropTargets: MeasuredDropTarget[]) =>\n dropTargets\n .map(\n (d, i) =>\n `\\n${d.isDraggedItem ? \"*\" : \" \"}[${i}] width : ${Math.floor(\n d.size\n )} ${Math.floor(d.start)} - ${Math.floor(d.end)} (mid ${Math.floor(\n d.mid\n )})`\n )\n .join(\"\");\n", "import { useForkRef } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport {\n CSSProperties,\n forwardRef,\n MutableRefObject,\n TransitionEventHandler,\n useCallback,\n} from \"react\";\nimport { Portal } from \"@vuu-ui/vuu-popups\";\n\nimport \"./Draggable.css\";\n\nconst makeClassNames = (classNames: string) =>\n classNames.split(\" \").map((className) => `vuuDraggable-${className}`);\nexport const Draggable = forwardRef<\n HTMLDivElement,\n {\n wrapperClassName: string;\n element: HTMLElement;\n onTransitionEnd?: TransitionEventHandler;\n scale?: number;\n style: CSSProperties;\n }\n>(function Draggable(\n { wrapperClassName, element, onTransitionEnd, style, scale = 1 },\n forwardedRef\n) {\n const callbackRef = useCallback(\n (el: HTMLDivElement) => {\n if (el) {\n el.innerHTML = \"\";\n el.appendChild(element);\n if (scale !== 1) {\n el.style.transform = `scale(${scale},${scale})`;\n }\n }\n },\n [element, scale]\n );\n const forkedRef = useForkRef<HTMLDivElement>(forwardedRef, callbackRef);\n\n return (\n <Portal>\n <div\n className={clsx(\"vuuDraggable\", ...makeClassNames(wrapperClassName))}\n ref={forkedRef}\n onTransitionEnd={onTransitionEnd}\n style={style}\n />\n </Portal>\n );\n});\n\n// const colors = [\"black\", \"red\", \"green\", \"yellow\"];\n// let color_idx = 0;\nexport const createDragSpacer = (\n transitioning?: MutableRefObject<boolean>\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-spacer\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n\nexport const createDropIndicatorPosition = (): HTMLElement => {\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicatorPosition\";\n return spacer;\n};\n\nexport const createDropIndicator = (\n transitioning?: MutableRefObject<boolean>\n): HTMLElement => {\n // const idx = color_idx++ % 4;\n const spacer = document.createElement(\"div\");\n spacer.className = \"vuuDraggable-dropIndicator\";\n if (transitioning) {\n spacer.addEventListener(\"transitionend\", () => {\n transitioning.current = false;\n });\n }\n return spacer;\n};\n", "function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;", "import { useCallback, useRef, useState } from \"react\";\n\nimport {\n InternalDragDropProps,\n InternalDragHookResult,\n Direction,\n ViewportRange,\n} from \"./dragDropTypesNext\";\nimport { useDropIndicator } from \"./useDropIndicator\";\n\nimport {\n dimensions,\n getItemById,\n MeasuredDropTarget,\n measureDropTargets,\n getNextDropTarget,\n dropZone,\n removeDraggedItem,\n} from \"./drop-target-utils\";\n\nimport { createDropIndicator, Draggable } from \"./Draggable\";\n\nconst NOT_OVERFLOWED = ':not([data-overflowed=\"true\"])';\nconst NOT_HIDDEN = ':not([aria-hidden=\"true\"])';\n\nexport const useDragDropIndicator = ({\n draggableRef,\n onDrop,\n orientation = \"horizontal\",\n containerRef,\n itemQuery = \"*\",\n selected,\n viewportRange,\n}: InternalDragDropProps): InternalDragHookResult => {\n const dragDirectionRef = useRef<Direction | undefined>();\n const dropIndicatorRef = useRef<HTMLDivElement>(null);\n const dropTargetRef = useRef<MeasuredDropTarget | null>(null);\n const dropZoneRef = useRef<dropZone | \"\">(\"\");\n const isScrollable = useRef(false);\n /** current position of dragged element */\n const dragPosRef = useRef<number>(-1);\n const measuredDropTargets = useRef<MeasuredDropTarget[]>([]);\n const overflowMenuShowingRef = useRef(false);\n\n const [showOverflow, setShowOverflow] = useState(false);\n const [dropIndicator, setDropIndicator] = useState<JSX.Element | undefined>();\n\n const { clearSpacer, positionDropIndicator } = useDropIndicator();\n\n const draggedItemRef = useRef<MeasuredDropTarget>();\n const fullItemQuery = `:is(${itemQuery}${NOT_OVERFLOWED}${NOT_HIDDEN},[data-overflow-indicator])`;\n\n // const { setMeasurements: setVizData } = useListViz();\n\n const indexOf = (dropTarget: MeasuredDropTarget) =>\n measuredDropTargets.current.findIndex((d) => d.id === dropTarget.id);\n\n const reposition = (\n dropTarget: MeasuredDropTarget,\n distance: number,\n indexShift?: number\n ) => {\n dropTarget.start += distance;\n dropTarget.mid += distance;\n dropTarget.end += distance;\n if (typeof indexShift === \"number\") {\n dropTarget.currentIndex += indexShift;\n }\n };\n\n // Shouldn't need this - but viewportRange is always stale in stopScrolling. Checked all dependencies\n // look ok. Something to do with setTimeout / scrollHandler ?\n const rangeRef = useRef<ViewportRange>();\n rangeRef.current = viewportRange;\n\n const handleScrollStart = useCallback(() => {\n clearSpacer();\n }, [clearSpacer]);\n\n const handleScrollStop = useCallback(\n (scrollDirection: \"fwd\" | \"bwd\", _scrollPos: number, atEnd: boolean) => {\n const { current: container } = containerRef;\n const { current: draggedItem } = draggedItemRef;\n if (container && draggedItem) {\n measuredDropTargets.current = measureDropTargets(\n container,\n orientation,\n fullItemQuery,\n rangeRef.current\n );\n // setVizData(measuredDropTargets.current);\n\n const { size } = draggedItem;\n const dragPos = dragPosRef.current;\n const midPos = dragPos + size / 2;\n const { current: dropTargets } = measuredDropTargets;\n const nextDropTarget = getNextDropTarget(dropTargets, midPos, \"fwd\");\n if (nextDropTarget) {\n if (atEnd && scrollDirection === \"fwd\") {\n positionDropIndicator(dropTargets[dropTargets.length - 1], \"start\");\n } else {\n positionDropIndicator(nextDropTarget, \"start\");\n }\n }\n\n // setVizData(measuredDropTargets.current, nextDropTarget);\n }\n },\n [\n containerRef,\n positionDropIndicator,\n fullItemQuery,\n orientation,\n // setVizData,\n ]\n );\n\n const beginDrag = useCallback(\n (evt: MouseEvent) => {\n const evtTarget = evt.target as HTMLElement;\n const dragElement = evtTarget.closest(itemQuery) as HTMLElement;\n if (\n dragElement.ariaSelected &&\n Array.isArray(selected) &&\n selected.length > 1\n ) {\n console.log(\"its a selected element, and we have a multi select\");\n }\n const { current: container } = containerRef;\n if (container && dragElement) {\n const { SCROLL_SIZE, CLIENT_SIZE } = dimensions(orientation);\n const { id: draggedItemId } = dragElement;\n\n const { [SCROLL_SIZE]: scrollSize, [CLIENT_SIZE]: clientSize } =\n container;\n isScrollable.current = scrollSize > clientSize;\n\n const dropTargets = (measuredDropTargets.current = measureDropTargets(\n container,\n orientation,\n fullItemQuery,\n viewportRange\n ));\n\n const draggedItem = getItemById(dropTargets, draggedItemId);\n\n if (draggedItem && container) {\n const targetIndex = indexOf(draggedItem);\n removeDraggedItem(dropTargets, targetIndex);\n draggedItemRef.current = draggedItem;\n\n // This begins to deviate from NaturalMovement here -----------\n const { current: range } = rangeRef;\n //TODO when our viewport is the last 'page' of a scrolling viewport\n // the viewport will scoll up by one row when we remove an item, so\n // the position of each item will move down.\n if (range?.atEnd) {\n for (let i = 0; i < dropTargets.length; i++) {\n reposition(dropTargets[i], draggedItem.size);\n }\n }\n for (let i = targetIndex; i < dropTargets.length; i++) {\n reposition(dropTargets[i], -draggedItem.size, -1);\n }\n\n const [dropTarget, dropZone] = draggedItem.isLast\n ? [dropTargets[dropTargets.length - 1], \"end\"]\n : [dropTargets[targetIndex], \"start\"];\n\n dropTargetRef.current = dropTarget;\n dropZoneRef.current = dropZone as dropZone;\n\n // setVizData(dropTargets, dropTarget, dropZone);\n\n const dropIndicatorPosition = positionDropIndicator(\n dropTarget,\n dropZone as dropZone\n );\n\n const { top, left, width } =\n dropIndicatorPosition.getBoundingClientRect();\n // Next render will remove the dragged item, that will offset our initial\n // dropIndicatorPosition\n const dropIndicatorRect = {\n top: draggedItem.isLast\n ? range?.atEnd && !range.atStart\n ? top + draggedItem.size - 2\n : top - 2\n : top - draggedItem.size - 2,\n left,\n width,\n height: 2,\n };\n\n setDropIndicator(\n <Draggable\n wrapperClassName=\"dropIndicatorContainer\"\n style={dropIndicatorRect}\n ref={dropIndicatorRef}\n element={createDropIndicator()}\n />\n );\n }\n }\n },\n [\n itemQuery,\n selected,\n containerRef,\n orientation,\n fullItemQuery,\n viewportRange,\n // setVizData,\n positionDropIndicator,\n ]\n );\n\n const drag = useCallback(\n (dragPos: number, mouseMoveDirection: \"fwd\" | \"bwd\") => {\n const { current: currentDropTarget } = dropTargetRef;\n const { current: draggedItem } = draggedItemRef;\n\n if (draggedItem) {\n if (draggableRef.current && containerRef.current) {\n const START = orientation === \"horizontal\" ? \"left\" : \"top\";\n dragPosRef.current = dragPos;\n\n const { current: dropTargets } = measuredDropTargets;\n const nextDropTarget = getNextDropTarget(\n dropTargets,\n dragPos,\n mouseMoveDirection\n );\n\n if (\n nextDropTarget &&\n nextDropTarget.index !== currentDropTarget?.index\n // mouseMoveDirection !== dragDirectionRef.current\n ) {\n if (nextDropTarget.isOverflowIndicator) {\n // Does this belong in here or can we abstract it out\n setShowOverflow((overflowMenuShowingRef.current = true));\n } else if (dropIndicatorRef.current) {\n const targetIndex = indexOf(nextDropTarget);\n if (targetIndex === dropTargets.length - 1) {\n // because we maintain at least one out-of-viewport row in\n // the dropTargets, this means we are at the very last item.\n const dropTarget = dropTargets[dropTargets.length - 1];\n const dropIndicatorPosition = positionDropIndicator(\n dropTarget,\n \"start\"\n );\n const dropIndicatorRect =\n dropIndicatorPosition.getBoundingClientRect();\n dropIndicatorRef.current.style[\n START\n ] = `${dropIndicatorRect.top}px`;\n } else {\n const dropIndicatorPosition = positionDropIndicator(\n nextDropTarget,\n \"start\"\n ) as unknown as HTMLElement;\n const dropIndicatorRect =\n dropIndicatorPosition.getBoundingClientRect();\n dropIndicatorRef.current.style[\n START\n ] = `${dropIndicatorRect.top}px`;\n }\n // setVizData(dropTargets, nextDropTarget, nextDropZone);\n\n setShowOverflow((overflowMenuShowingRef.current = false));\n }\n\n dropTargetRef.current = nextDropTarget;\n dragDirectionRef.current = mouseMoveDirection;\n }\n }\n }\n },\n [draggableRef, containerRef, orientation, positionDropIndicator]\n );\n\n const drop = useCallback(() => {\n clearSpacer();\n const { current: draggedItem } = draggedItemRef;\n const { current: dropTarget } = dropTargetRef;\n const { current: dropZone } = dropZoneRef;\n const { current: range } = rangeRef;\n\n if (draggedItem && range && dropTarget) {\n const { index: fromIndex } = draggedItem;\n\n const dropBefore = dropZone === \"start\";\n const {\n index: originalDropTargetIndex,\n currentIndex: currentDropTargetIndex,\n } = dropTarget;\n\n dropTargetRef.current = null;\n dragDirectionRef.current = undefined;\n\n //TODO why is this different from Natural Movement ?\n if (overflowMenuShowingRef.current) {\n onDrop(fromIndex, -1);\n } else {\n if (fromIndex < originalDropTargetIndex) {\n onDrop(\n fromIndex,\n dropBefore ? currentDropTargetIndex : currentDropTargetIndex + 1\n );\n } else {\n onDrop(\n fromIndex,\n dropBefore ? originalDropTargetIndex : originalDropTargetIndex + 1\n );\n }\n }\n setDropIndicator(undefined);\n }\n setShowOverflow(false);\n }, [clearSpacer, onDrop]);\n\n return {\n beginDrag,\n drag,\n drop,\n dropIndicator,\n handleScrollStart,\n handleScrollStop,\n revealOverflowedItems: showOverflow,\n };\n};\n", "import { useCallback, useMemo } from \"react\";\nimport { dropZone, MeasuredDropTarget } from \"./drop-target-utils\";\nimport { createDropIndicatorPosition } from \"./Draggable\";\n\nexport const SPACER_SIZE = 0;\n\nexport type DropIndicatorHookResult = {\n positionDropIndicator: (\n dropTarget: MeasuredDropTarget,\n dropZone: dropZone\n ) => HTMLElement;\n clearSpacer: () => void;\n};\n\nexport type DropIndicatorHook = () => DropIndicatorHookResult;\n\nexport const useDropIndicator: DropIndicatorHook = () => {\n const spacer = useMemo(() => createDropIndicatorPosition(), []);\n const clearSpacer = useCallback(() => spacer.remove(), [spacer]);\n const positionDropIndicator = useCallback(\n (dropTarget: MeasuredDropTarget, dropZone: \"start\" | \"end\" = \"end\") => {\n if (dropZone === \"end\") {\n dropTarget.element.after(spacer);\n } else {\n dropTarget.element.before(spacer);\n }\n return spacer;\n },\n [spacer]\n );\n\n return {\n positionDropIndicator,\n clearSpacer,\n };\n};\n", "import {\n DragDropHook,\n InternalDragDropProps,\n InternalDragHookResult,\n MouseOffset,\n} from \"./dragDropTypesNext\";\nimport { useDragDropNaturalMovement } from \"./useDragDropNaturalMovementNext\";\nimport { useDragDropIndicator } from \"./useDragDropIndicator\";\nimport { useDragDropProvider } from \"./DragDropProvider\";\nimport {\n MouseEventHandler,\n useCallback,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n cloneElement,\n constrainRect,\n dimensions,\n NOT_OVERFLOWED,\n} from \"./drop-target-utils\";\nimport { useAutoScroll, ScrollStopHandler } from \"./useAutoScroll\";\nimport { Draggable } from \"./Draggable\";\n\nconst NULL_DRAG_DROP_RESULT = {\n beginDrag: () => undefined,\n drag: () => undefined,\n draggableRef: { current: null },\n drop: () => undefined,\n isDragging: false,\n isScrolling: false,\n handleScrollStart: () => undefined,\n handleScrollStop: () => undefined,\n revealOverflowedItems: false,\n};\n\ntype DraggableStatus = {\n draggable?: JSX.Element;\n draggedItemIndex: number;\n isDragging: boolean;\n};\n\ntype DragBoundary = {\n start: number;\n end: number;\n contraStart: number;\n contraEnd: number;\n};\n\nconst UNBOUNDED: DragBoundary = {\n start: 0,\n end: 1000,\n contraStart: 0,\n contraEnd: 1000,\n};\n\ntype InternalHook = (props: InternalDragDropProps) => InternalDragHookResult;\nconst noDragDrop: InternalHook = () => NULL_DRAG_DROP_RESULT;\nconst dragThreshold = 3;\n\nconst getDraggableElement = (\n el: EventTarget | null,\n query: string\n): HTMLElement => (el as HTMLElement).closest(query) as HTMLElement;\n\nconst isOverflowElement = (element: HTMLElement) =>\n element.dataset.index === \"overflow\" &&\n element.parentElement !== null &&\n element.parentElement.classList.contains(\"overflowed\");\n\nconst getLastElement = (\n container: HTMLElement,\n itemQuery: string\n): [HTMLElement, boolean] => {\n const fullItemQuery = `:is(${itemQuery}${NOT_OVERFLOWED},.vuuOverflowContainer-OverflowIndicator)`;\n const childElements = Array.from(container.querySelectorAll(fullItemQuery));\n const lastElement = childElements.pop() as HTMLElement;\n return [lastElement, isOverflowElement(lastElement)];\n};\n\nexport const useDragDropNext: DragDropHook = ({\n allowDragDrop,\n containerRef,\n draggableClassName,\n itemQuery = \"*\",\n onDragStart,\n onDrop,\n onDropSettle,\n orientation,\n ...dragDropProps\n}) => {\n const dragBoundaries = useRef<DragBoundary>({\n start: 0,\n end: 0,\n contraStart: 0,\n contraEnd: 0,\n });\n const [draggableStatus, setDraggableStatus] = useState<DraggableStatus>({\n draggable: undefined,\n draggedItemIndex: -1,\n isDragging: false,\n });\n // A ref to the draggable element\n const draggableRef = useRef<HTMLDivElement>(null);\n const dragElementRef = useRef<HTMLElement>();\n const mouseDownTimer = useRef<number | null>(null);\n /** do we actually have scrollable content */\n const isScrollableRef = useRef(false);\n /** Distance between start (top | left) of dragged element and point where user pressed to drag */\n const mouseOffsetRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** current mouse position */\n const mousePosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** mouse position when mousedown initiated drag */\n const startPosRef = useRef<MouseOffset>({ x: 0, y: 0 });\n /** references the dragged Item during its final 'settling' phase post drop */\n const settlingItemRef = useRef<HTMLDivElement | null>(null);\n\n const dropPosRef = useRef(-1);\n const dropIndexRef = useRef(-1);\n\n const handleScrollStopRef = useRef<ScrollStopHandler>();\n\n const { isDragSource, isDropTarget, register } = useDragDropProvider(\n dragDropProps.id\n );\n\n if (dragDropProps.id && (isDragSource || isDropTarget)) {\n register(dragDropProps.id);\n }\n\n const terminateDrag = useCallback(() => {\n const { current: toIndex } = dropIndexRef;\n const droppedItem = containerRef.current?.querySelector(\n `${itemQuery}[data-index=\"${toIndex}\"]`\n );\n if (droppedItem) {\n droppedItem.classList.remove(\"vuuDropTarget-settling\");\n }\n\n dropIndexRef.current = -1;\n onDropSettle?.(toIndex);\n setDraggableStatus((status) => ({\n ...status,\n draggable: undefined,\n }));\n }, [containerRef, itemQuery, onDropSettle]);\n\n const getScrollDirection = useCallback(\n (mousePos: number) => {\n if (containerRef.current) {\n const { POS, SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = containerRef.current;\n\n const maxScroll = scrollSize - clientSize;\n const canScrollFwd = scrollPos < maxScroll;\n const viewportEnd = dragBoundaries.current.end;\n const bwd =\n scrollPos > 0 &&\n mousePos - mouseOffsetRef.current[POS] <=\n dragBoundaries.current.start;\n const fwd =\n canScrollFwd && mousePos - mouseOffsetRef.current[POS] >= viewportEnd;\n return bwd ? \"bwd\" : fwd ? \"fwd\" : \"\";\n }\n },\n [containerRef, orientation]\n );\n\n const useDragDropHook: InternalHook =\n allowDragDrop === true || allowDragDrop === \"natural-movement\"\n ? useDragDropNaturalMovement\n : allowDragDrop === \"drop-indicator\"\n ? useDragDropIndicator\n : noDragDrop;\n\n const onScrollingStopped = useCallback(\n (scrollDirection: \"fwd\" | \"bwd\", scrollPos: number, atEnd: boolean) => {\n handleScrollStopRef.current?.(scrollDirection, scrollPos, atEnd);\n },\n []\n );\n\n const { isScrolling, startScrolling, stopScrolling } = useAutoScroll({\n containerRef,\n onScrollingStopped,\n orientation,\n });\n\n const handleDrop = useCallback(\n (fromIndex: number, toIndex: number) => {\n //TODO why do we need both this and dropIndexRef ?\n dropPosRef.current = toIndex;\n onDrop?.(fromIndex, toIndex);\n dropIndexRef.current = toIndex;\n },\n [onDrop]\n );\n\n const {\n beginDrag,\n drag,\n drop,\n handleScrollStart,\n handleScrollStop,\n ...dragResult\n } = useDragDropHook({\n ...dragDropProps,\n containerRef,\n draggableRef,\n isDragSource,\n isDropTarget,\n itemQuery,\n onDrop: handleDrop,\n orientation,\n });\n // To avoid circular ref between hooks\n handleScrollStopRef.current = handleScrollStop;\n\n const dragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { CLIENT_POS, CONTRA_CLIENT_POS, CONTRA_POS, POS } =\n dimensions(orientation);\n const { clientX, clientY } = evt;\n const { [CLIENT_POS]: clientPos, [CONTRA_CLIENT_POS]: clientContraPos } =\n evt;\n const lastClientPos = mousePosRef.current[POS];\n const lastClientContraPos = mousePosRef.current[CONTRA_POS];\n\n const dragDistance = Math.abs(lastClientPos - clientPos);\n const dragOutDistance = isDragSource\n ? Math.abs(lastClientContraPos - clientContraPos)\n : 0;\n\n if (dragOutDistance - dragDistance > 5) {\n // remove the drag boundaries\n dragBoundaries.current = UNBOUNDED;\n // Need to notify the dragDropHook, so it can clearSpacers\n // and begin tracking draggable coordinates for entry into a droptarget\n }\n\n mousePosRef.current.x = clientX;\n mousePosRef.current.y = clientY;\n\n if (dragBoundaries.current === UNBOUNDED && draggableRef.current) {\n const dragPosX = mousePosRef.current.x - mouseOffsetRef.current.x;\n const dragPosY = mousePosRef.current.y - mouseOffsetRef.current.y;\n draggableRef.current.style.top = `${dragPosY}px`;\n draggableRef.current.style.left = `${dragPosX}px`;\n } else if (dragDistance > 0 && draggableRef.current) {\n const mouseMoveDirection = lastClientPos < clientPos ? \"fwd\" : \"bwd\";\n const scrollDirection = getScrollDirection(clientPos);\n const dragPos = mousePosRef.current[POS] - mouseOffsetRef.current[POS];\n\n if (\n scrollDirection &&\n isScrollableRef.current &&\n !isScrolling.current\n ) {\n handleScrollStart();\n startScrolling(scrollDirection, 1);\n } else if (!scrollDirection && isScrolling.current) {\n stopScrolling();\n }\n\n if (!isScrolling.current) {\n const renderDragPos = Math.round(\n Math.max(\n dragBoundaries.current.start,\n Math.min(dragBoundaries.current.end, dragPos)\n )\n );\n const START = orientation === \"horizontal\" ? \"left\" : \"top\";\n draggableRef.current.style[START] = `${renderDragPos}px`;\n drag(renderDragPos, mouseMoveDirection);\n }\n }\n },\n [\n drag,\n draggableRef,\n getScrollDirection,\n handleScrollStart,\n isDragSource,\n isScrolling,\n orientation,\n startScrolling,\n stopScrolling,\n ]\n );\n const dragMouseUpHandler = useCallback(() => {\n document.removeEventListener(\"mousemove\", dragMouseMoveHandler, false);\n document.removeEventListener(\"mouseup\", dragMouseUpHandler, false);\n settlingItemRef.current = draggableRef.current;\n // The implementation hook is currently invoking the onDrop callback, we should move it into here\n drop();\n setDraggableStatus((status) => ({\n ...status,\n draggedItemIndex: -1,\n isDragging: false,\n }));\n dragElementRef.current = undefined;\n }, [dragMouseMoveHandler, draggableRef, drop]);\n\n const dragStart = useCallback(\n (evt: MouseEvent) => {\n const { clientX, clientY, target } = evt;\n const dragElement = getDraggableElement(target, itemQuery);\n const { current: container } = containerRef;\n if (container && dragElement) {\n const {\n CONTRA,\n CONTRA_END,\n DIMENSION,\n END,\n SCROLL_SIZE,\n CLIENT_SIZE,\n START,\n } = dimensions(orientation);\n\n dragElementRef.current = dragElement;\n const { [SCROLL_SIZE]: scrollSize, [CLIENT_SIZE]: clientSize } =\n container;\n isScrollableRef.current = scrollSize > clientSize;\n\n const [lastElement, lastItemIsOverflowIndicator] = getLastElement(\n container,\n itemQuery\n );\n\n const containerRect = container.getBoundingClientRect();\n const draggableRect = dragElement.getBoundingClientRect();\n const draggableSize = draggableRect[DIMENSION];\n const { [START]: lastItemStart, [END]: lastItemEnd } =\n lastElement.getBoundingClientRect();\n\n mouseOffsetRef.current.x = clientX - draggableRect.left;\n mouseOffsetRef.current.y = clientY - draggableRect.top;\n\n dragBoundaries.current.start = containerRect[START];\n dragBoundaries.current.end = lastItemIsOverflowIndicator\n ? Math.max(lastItemStart, containerRect.right - draggableSize)\n : isScrollableRef.current\n ? containerRect[START] + containerRect[DIMENSION] - draggableSize\n : lastItemEnd - draggableSize;\n dragBoundaries.current.contraStart = containerRect[CONTRA];\n dragBoundaries.current.contraEnd = containerRect[CONTRA_END];\n\n beginDrag(evt);\n\n const {\n dataset: { index = \"-1\" },\n } = dragElement;\n\n setDraggableStatus({\n isDragging: true,\n draggable: (\n <Draggable\n element={cloneElement(dragElement)}\n onTransitionEnd={terminateDrag}\n ref={draggableRef}\n style={constrainRect(draggableRect, containerRect)}\n wrapperClassName={draggableClassName}\n />\n ),\n draggedItemIndex: parseInt(index),\n });\n\n onDragStart?.();\n\n document.addEventListener(\"mousemove\", dragMouseMoveHandler, false);\n document.addEventListener(\"mouseup\", dragMouseUpHandler, false);\n }\n },\n [\n beginDrag,\n containerRef,\n dragMouseMoveHandler,\n dragMouseUpHandler,\n draggableClassName,\n draggableRef,\n itemQuery,\n onDragStart,\n orientation,\n terminateDrag,\n ]\n );\n\n const preDragMouseMoveHandler = useCallback(\n (evt: MouseEvent) => {\n const { CLIENT_POS, POS } = dimensions(orientation);\n const { [CLIENT_POS]: clientPos } = evt;\n const mouseMoveDistance = Math.abs(clientPos - startPosRef.current[POS]);\n if (mouseMoveDistance > dragThreshold && containerRef.current) {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n dragStart(evt);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [containerRef, beginDrag, orientation]\n );\n\n const preDragMouseUpHandler = useCallback(() => {\n if (mouseDownTimer.current) {\n window.clearTimeout(mouseDownTimer.current);\n mouseDownTimer.current = null;\n }\n document.removeEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n }, [preDragMouseMoveHandler]);\n\n const mouseDownHandler: MouseEventHandler = useCallback(\n (evt) => {\n console.log(`useDragDropNext onMouseDown`);\n const { current: container } = containerRef;\n if (container && !evt.defaultPrevented) {\n const { clientX, clientY } = evt;\n mousePosRef.current.x = startPosRef.current.x = clientX;\n mousePosRef.current.y = startPosRef.current.y = clientY;\n\n document.addEventListener(\"mousemove\", preDragMouseMoveHandler, false);\n document.addEventListener(\"mouseup\", preDragMouseUpHandler, false);\n\n evt.persist();\n\n mouseDownTimer.current = window.setTimeout(() => {\n document.removeEventListener(\n \"mousemove\",\n preDragMouseMoveHandler,\n false\n );\n document.removeEventListener(\"mouseup\", preDragMouseUpHandler, false);\n dragStart(evt.nativeEvent);\n }, 500);\n }\n },\n [containerRef, dragStart, preDragMouseMoveHandler, preDragMouseUpHandler]\n );\n\n const { current: settlingItem } = settlingItemRef;\n useLayoutEffect(() => {\n if (settlingItem && containerRef.current) {\n const dropPos = dropPosRef.current;\n const droppedItem = containerRef.current.querySelector(\n `${itemQuery}[data-index=\"${dropPos}\"]`\n );\n if (droppedItem) {\n droppedItem.classList.add(\"vuuDropTarget-settling\");\n requestAnimationFrame(() => {\n const { top: targetTop, left: targetLeft } =\n droppedItem.getBoundingClientRect();\n const { top: currentTop, left: currentLeft } =\n settlingItem.getBoundingClientRect();\n // If the droppedItem is already exactly in the drop position, we can just\n // terminate the drag here and now. Most likely, though, it is out by a few\n // pixels. We animate the dragged item into the final resting place before\n // terminating the drag.\n if (currentLeft !== targetLeft || currentTop !== targetTop) {\n settlingItem.classList.add(\"vuuDraggable-settling\");\n settlingItem.style.top = `${targetTop}px`;\n settlingItem.style.left = `${targetLeft}px`;\n } else {\n terminateDrag();\n }\n });\n } else {\n console.log(`dont have the dropped item (at ${dropPos})`);\n }\n settlingItemRef.current = null;\n }\n }, [containerRef, itemQuery, settlingItem, terminateDrag]);\n\n return {\n ...dragResult,\n ...draggableStatus,\n isScrolling,\n onMouseDown: allowDragDrop ? mouseDownHandler : undefined,\n };\n};\n", "import { RefObject, useCallback, useRef } from \"react\";\nimport { dimensions } from \"./drop-target-utils\";\n\nexport type ScrollStopHandler = (\n scrollDirection: \"fwd\" | \"bwd\",\n scrollPos: number,\n atEnd: boolean\n) => void;\n\nexport const useAutoScroll = ({\n containerRef,\n onScrollingStopped,\n orientation = \"vertical\",\n}: {\n containerRef: RefObject<HTMLElement>;\n onScrollingStopped?: ScrollStopHandler;\n orientation?: \"horizontal\" | \"vertical\";\n}) => {\n const scrollTimer = useRef<number | null>(null);\n const isScrolling = useRef(false);\n const scrollPosRef = useRef(0);\n const lastScrollDirectionRef = useRef<\"fwd\" | \"bwd\">(\"fwd\");\n\n const stopScrolling = useCallback(\n (atEnd = false) => {\n console.log(\"[useAutoScroll] stopScrolling\");\n if (scrollTimer.current !== null) {\n clearTimeout(scrollTimer.current);\n scrollTimer.current = null;\n }\n isScrolling.current = false;\n onScrollingStopped?.(\n lastScrollDirectionRef.current,\n scrollPosRef.current,\n atEnd\n );\n },\n [onScrollingStopped]\n );\n\n const startScrolling = useCallback(\n (direction: \"fwd\" | \"bwd\", scrollRate: number, scrollUnit = 30) => {\n const { current: container } = containerRef;\n if (container) {\n const { SCROLL_POS, SCROLL_SIZE, CLIENT_SIZE } =\n dimensions(orientation);\n const {\n [SCROLL_POS]: scrollPos,\n [SCROLL_SIZE]: scrollSize,\n [CLIENT_SIZE]: clientSize,\n } = container;\n const maxScroll =\n direction === \"fwd\" ? scrollSize - clientSize - scrollPos : scrollPos;\n const nextScroll = Math.min(maxScroll, scrollUnit);\n\n if (direction === \"fwd\") {\n lastScrollDirectionRef.current = \"fwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos + nextScroll;\n } else {\n lastScrollDirectionRef.current = \"bwd\";\n container[SCROLL_POS as \"scrollTop\" | \"scrollLeft\"] =\n scrollPosRef.current = scrollPos - nextScroll;\n }\n\n if (nextScroll === maxScroll) {\n stopScrolling(true);\n } else {\n isScrolling.current = true;\n scrollTimer.current = window.setTimeout(() => {\n startScrolling(direction, scrollRate, scrollUnit);\n }, 100);\n }\n }\n },\n [containerRef, orientation, stopScrolling]\n );\n\n return {\n isScrolling,\n startScrolling,\n stopScrolling,\n };\n};\n", "import { clsx } from \"clsx\";\nimport {\n ChangeEvent,\n KeyboardEvent,\n useCallback,\n useLayoutEffect,\n forwardRef,\n ForwardedRef,\n ReactElement,\n useRef,\n HTMLAttributes,\n} from \"react\";\nimport { Input, useControlled } from \"@salt-ds/core\";\n\nimport \"./EditableLabel.css\";\n\nconst classBase = \"vuuEditableLabel\";\n\nexport interface EditableLabelProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n className?: string;\n defaultEditing?: boolean;\n defaultValue?: string;\n editing?: boolean;\n onEnterEditMode: () => void;\n onChange?: (value: string) => void;\n onExitEditMode: (\n originalLabel: string | undefined,\n editedLabel: string | undefined,\n allowDeactivation?: boolean,\n editCancelled?: boolean\n ) => void;\n defaultIsEditing?: boolean;\n value?: string;\n}\n\nexport const EditableLabel = forwardRef(function EditableLabel(\n {\n className: classNameProp,\n defaultEditing,\n defaultValue,\n editing: editingProp,\n onChange,\n onEnterEditMode,\n onExitEditMode,\n value: valueProp,\n ...restProps\n }: EditableLabelProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n): ReactElement<EditableLabelProps> {\n const inputRef = useRef<HTMLInputElement | null>(null);\n const editingRef = useRef<boolean>(false);\n\n const [value, setValue] = useControlled({\n controlled: valueProp,\n default: defaultValue ?? \"\",\n name: \"EditableLabel\",\n state: \"value\",\n });\n\n const [editing, _setEditing] = useControlled({\n controlled: editingProp,\n default: defaultEditing ?? false,\n name: \"EditableLabel\",\n state: \"editing\",\n });\n\n const setEditing = useCallback((value: boolean) => {\n _setEditing((editingRef.current = value));\n }, []);\n\n const initialValue = useRef(value);\n\n useLayoutEffect(() => {\n if (editing) {\n if (inputRef.current !== null) {\n inputRef.current.select();\n inputRef.current.focus();\n }\n }\n }, [editing, inputRef]);\n\n const enterEditMode = useCallback(() => {\n setEditing(true);\n // ignoreBlur.current = false;\n onEnterEditMode && onEnterEditMode();\n }, [onEnterEditMode, setEditing]);\n\n const exitEditMode = ({\n cancelEdit = false,\n allowDeactivation = false,\n } = {}) => {\n setEditing(false);\n const originalValue = initialValue.current;\n if (originalValue !== value) {\n if (cancelEdit) {\n setValue(originalValue);\n } else {\n initialValue.current = value;\n }\n }\n onExitEditMode &&\n onExitEditMode(originalValue, value, allowDeactivation, cancelEdit);\n };\n\n const handleChange = (evt: ChangeEvent<HTMLInputElement>) => {\n const { value } = evt.target;\n setValue(value);\n onChange && onChange(value);\n };\n\n const handleDoubleClick = () => {\n enterEditMode();\n };\n\n // We need the ref here as the blur fires before setEditing has taken effect,\n // so we get a double call to exitEditMode if edit is cancelled.\n const handleBlur = () => {\n if (editingRef.current) {\n exitEditMode({ allowDeactivation: true });\n }\n };\n\n const handleKeyDown = (evt: KeyboardEvent<HTMLInputElement>) => {\n if (editing && evt.key === \"Enter\") {\n evt.stopPropagation();\n // we are likely to lose focus as a consequence of user response\n // to exitEdit transition, don't want it to trigger another\n //shouldn't we call setEditing here in case we are in uncontrolled mode ?\n exitEditMode();\n } else if (evt.key === \"ArrowRight\" || evt.key === \"ArrowLeft\") {\n evt.stopPropagation();\n } else if (evt.key === \"Escape\") {\n exitEditMode({ cancelEdit: true });\n }\n };\n\n const className = clsx(classBase, classNameProp, {\n [`${classBase}-editing`]: editing,\n });\n return (\n <div\n {...restProps}\n className={className}\n onDoubleClick={handleDoubleClick}\n data-text={value}\n ref={forwardedRef}\n >\n {editing ? (\n <Input\n inputProps={{ className: `${classBase}-input` }}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n onKeyDown={handleKeyDown}\n inputRef={inputRef}\n style={{ padding: 0 }}\n textAlign=\"left\"\n variant=\"secondary\"\n />\n ) : (\n value\n )}\n </div>\n );\n});\n", "import { partition } from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { HTMLAttributes, ReactElement } from \"react\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Drawer from \"./Drawer\";\n\nimport \"./DockLayout.css\";\n\nconst isDrawer = (component: ReactElement) => component.type === Drawer;\nconst isVertical = ({ props: { position = \"left\" } }: ReactElement) =>\n position.match(/top|bottom/);\n\nexport interface DockLayoutProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement[];\n}\n\nconst DockLayout = (props: DockLayoutProps) => {\n const { children, className: classNameProp, id, style } = props;\n const classBase = \"vuuDockLayout\";\n const [drawers, content] = partition(children, isDrawer);\n const [verticalDrawers, horizontalDrawers] = partition(drawers, isVertical);\n const orientation =\n verticalDrawers.length === 0\n ? \"horizontal\"\n : horizontalDrawers.length === 0\n ? \"vertical\"\n : \"both\";\n\n const className = cx(classBase, classNameProp, `${classBase}-${orientation}`);\n\n return (\n <div className={className} id={id} style={style}>\n {drawers}\n <div className={`${classBase}-content`}>{content}</div>\n </div>\n );\n};\nDockLayout.displayName = \"DockLayout\";\n\nexport default DockLayout;\n\nregisterComponent(\"DockLayout\", DockLayout, \"container\");\n", "import { FunctionComponent } from \"react\";\n\nconst _containers: { [key: string]: boolean } = {};\nconst _views: { [key: string]: boolean } = {};\n\nexport type layoutComponentType = \"component\" | \"container\" | \"view\";\n\nexport interface ComponentWithId {\n id: string;\n [key: string]: unknown;\n}\n\nexport const ComponentRegistry: {\n [key: string]: FunctionComponent<ComponentWithId>;\n} = {};\n\nexport function isContainer(componentType: string) {\n return _containers[componentType] === true;\n}\n\nexport function isView(componentType: string) {\n return _views[componentType] === true;\n}\n\nexport const isLayoutComponent = (type: string) =>\n isContainer(type) || isView(type);\n\nexport const isRegistered = (className: string) =>\n !!ComponentRegistry[className];\n\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FunctionComponent<any>,\n type: layoutComponentType = \"component\"\n) {\n ComponentRegistry[componentName] = component;\n\n if (type === \"container\") {\n _containers[componentName] = true;\n } else if (type === \"view\") {\n _views[componentName] = true;\n }\n}\n", "import { Button, useControlled } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { CSSProperties, HTMLAttributes, useCallback } from \"react\";\n\nimport \"./Drawer.css\";\n\nconst classBase = \"vuuDrawer\";\n\nconst sizeAttribute = (value: string | number) => {\n return typeof value === \"string\" ? value : value + \"px\";\n};\n\nconst getStyle = (\n styleProp?: CSSProperties,\n sizeOpen?: number,\n sizeClosed?: number\n) => {\n const hasSizeOpen = sizeOpen !== undefined;\n const hasSizeClosed = sizeClosed !== undefined;\n\n if (!styleProp && !hasSizeClosed && !hasSizeOpen) {\n return undefined;\n }\n\n if (!hasSizeClosed && !hasSizeOpen) {\n return styleProp;\n }\n\n return {\n ...styleProp,\n \"--drawer-size\": hasSizeOpen ? sizeAttribute(sizeOpen) : undefined,\n \"--drawer-peek-size\": hasSizeClosed ? sizeAttribute(sizeClosed) : undefined,\n };\n};\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n clickToOpen?: boolean;\n defaultOpen?: boolean;\n inline?: boolean;\n open?: boolean;\n peekaboo?: boolean;\n position?: \"left\" | \"right\" | \"top\" | \"bottom\";\n sizeOpen?: number;\n sizeClosed?: number;\n toggleButton?: \"start\" | \"end\";\n}\nconst Drawer = ({\n children,\n className: classNameProp,\n clickToOpen,\n defaultOpen,\n sizeOpen,\n sizeClosed,\n style: styleProp,\n open: openProp,\n position = \"left\",\n inline,\n onClick,\n peekaboo = false,\n toggleButton,\n ...props\n}: DrawerProps) => {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen ?? false,\n name: \"Drawer\",\n state: \"open\",\n });\n\n const className = cx(classBase, classNameProp, `${classBase}-${position}`, {\n [`${classBase}-open`]: open,\n [`${classBase}-inline`]: inline,\n [`${classBase}-over`]: !inline,\n [`${classBase}-peekaboo`]: peekaboo,\n });\n\n const toggleDrawer = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const style = getStyle(styleProp, sizeOpen, sizeClosed);\n\n const handleClick = clickToOpen ? toggleDrawer : onClick;\n\n const renderToggleButton = () => (\n <div className={cx(\"vuuToggleButton-container\")}>\n {open ? (\n <Button\n aria-label=\"close\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n ) : (\n <Button\n aria-label=\"open\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n )}\n </div>\n );\n\n return (\n <div {...props} className={className} onClick={handleClick} style={style}>\n {toggleButton == \"start\" ? renderToggleButton() : null}\n <div className={`${classBase}-liner`}>\n <div className={`${classBase}-content`}>{children}</div>\n </div>\n {toggleButton == \"end\" ? renderToggleButton() : null}\n </div>\n );\n};\nDrawer.displayName = \"Drawer\";\n\nexport default Drawer;\n", "import React, { forwardRef, HTMLAttributes } from 'react';\nimport { registerComponent } from './registry/ComponentRegistry';\n\nimport './Component.css';\n\nexport interface ComponentProps extends HTMLAttributes<HTMLDivElement> {\n resizeable?: boolean;\n}\n\nconst Component = forwardRef(function Component(\n { resizeable, ...props }: ComponentProps,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n return <div {...props} className=\"Component\" ref={ref} />;\n}) as React.FunctionComponent<ComponentProps>;\nComponent.displayName = 'Component';\n\nexport default Component;\n\nregisterComponent('Component', Component);\n", "import React, { isValidElement, ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport { getProp, getProps } from \"./propUtils\";\nimport { typeOf } from \"./typeOf\";\n\nconst removeFinalPathSegment = (path: string) => {\n const pos = path.lastIndexOf(\".\");\n if (pos === -1) {\n return path;\n } else {\n return path.slice(0, pos);\n }\n};\n\nexport function followPathToParent(\n source: ReactElement,\n path: string\n): ReactElement | null {\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n\n if (path === \"0\") return null;\n if (path === sourcePath) return null;\n\n return followPath(source, removeFinalPathSegment(path), true);\n}\n\nexport function findTarget(\n source: LayoutModel,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n test: (props: any) => boolean\n): LayoutModel | undefined {\n const { children, ...props } = getProps(source);\n if (test(props)) {\n return source;\n }\n if (React.Children.count(children) > 0) {\n const array = React.isValidElement(children) ? [children] : children;\n for (const child of array) {\n const target = findTarget(child, test);\n if (target) {\n return target;\n }\n }\n }\n}\n\nexport function containerOf(\n source: LayoutModel,\n target: LayoutModel\n): LayoutModel | null {\n if (target === source) {\n return null;\n }\n const { path: sourcePath, children } = getProps(source);\n const { idx, finalStep } = nextStep(sourcePath, getProp(target, \"path\"));\n if (finalStep) {\n return source;\n }\n if (children === undefined || children[idx] === undefined) {\n return null;\n }\n return containerOf(children[idx], target);\n}\n\nexport const getChild = (\n children: ReactElement[],\n idx: number\n): ReactElement | undefined => {\n if (React.isValidElement(children) && idx == 0) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[idx];\n }\n};\n\nexport function followPathToComponent(component: ReactElement, path: string) {\n const paths = path.split(\".\");\n let children = [component];\n\n const getChildren = (c: ReactElement) =>\n React.isValidElement(c.props.children)\n ? [c.props.children]\n : c.props.children;\n\n for (let i = 0; i < paths.length; i++) {\n const idx = parseInt(paths[i]);\n const child = children[idx];\n if (i === paths.length - 1) {\n return child;\n }\n children = getChildren(child);\n }\n}\n\nconst findTargetById = (\n source: ReactElement,\n id: string,\n throwIfNotFound = true\n): ReactElement | undefined => {\n const { children, id: idProp } = source.props;\n if (idProp === id) {\n return source;\n }\n\n if (React.Children.count(children) > 0) {\n const childArray = isValidElement(children) ? [children] : children;\n for (const child of childArray) {\n if (isValidElement(child)) {\n const target = findTargetById(child, id, false);\n if (target) {\n return target;\n }\n }\n }\n }\n\n if (throwIfNotFound === true) {\n throw Error(`pathUtils.findTargetById id #${id} not found in source`);\n }\n};\n\nexport function followPath(\n source: LayoutModel,\n path: string\n): LayoutModel | undefined;\nexport function followPath(\n source: ReactElement,\n path: string,\n throwIfNotFound: true\n): ReactElement;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function followPath(source: any, path: any, throwIfNotFound = false) {\n if (path.startsWith(\"#\")) {\n return findTargetById(source, path.slice(1), throwIfNotFound);\n }\n\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n if (path.indexOf(sourcePath) !== 0) {\n throw Error(\n `pathUtils.followPath path ${path} is not within source path ${sourcePath}`\n );\n }\n const route = path.slice(sourcePath.length + 1);\n if (route === \"\") {\n return source;\n }\n\n let target = source;\n const paths = route.split(\".\");\n\n for (let i = 0; i < paths.length; i++) {\n if (React.Children.count(target.props.children) === 0) {\n const message = `element at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children, so cannot fulfill rest of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n return;\n }\n }\n\n target = getChild(target.props.children, parseInt(paths[i]));\n\n if (target === undefined) {\n const message = `model at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children that fulfill next step of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n return target;\n}\n\nexport function nextLeaf(root: ReactElement, path: string) {\n const parent = followPathToParent(root, path);\n let pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n if (parent) {\n const lastIdx = pathIndices.pop();\n const { children } = parent.props;\n if (children.length - 1 > lastIdx!) {\n return firstLeaf(children[lastIdx! + 1]);\n } else {\n const parentIdx = pathIndices.pop();\n const nextParent = followPathToParent(root, getProp(parent, \"path\"));\n if (nextParent && typeof parentIdx === \"number\") {\n pathIndices = nextParent.props.path\n .split(\".\")\n .map((idx: string) => parseInt(idx, 10));\n if (nextParent.props.children.length - 1 > parentIdx) {\n const nextStep = nextParent.props.children[parentIdx + 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return firstLeaf(nextStep);\n } else {\n return nextStep;\n }\n }\n }\n }\n }\n\n return firstLeaf(root);\n}\n\nexport function previousLeaf(root: ReactElement, path: string) {\n const pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n let lastIdx = pathIndices.pop();\n let parent = followPathToParent(root, path);\n if (parent != null && typeof lastIdx === \"number\") {\n const { children } = parent.props;\n if (lastIdx > 0) {\n return lastLeaf(children[lastIdx - 1]);\n } else {\n while (pathIndices.length > 1) {\n lastIdx = pathIndices.pop() as number;\n parent = followPathToParent(\n root,\n getProp(parent, \"path\")\n ) as ReactElement;\n if (lastIdx > 0) {\n const nextStep = parent.props.children[lastIdx - 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return lastLeaf(nextStep);\n }\n return nextStep;\n }\n }\n }\n }\n return lastLeaf(root);\n}\n\nfunction firstLeaf(layoutRoot: ReactElement): ReactElement {\n if (isContainer(typeOf(layoutRoot) as string)) {\n const { children } = layoutRoot.props || layoutRoot;\n return firstLeaf(children[0]);\n }\n return layoutRoot;\n}\n\nfunction lastLeaf(root: ReactElement): ReactElement {\n if (isContainer(typeOf(root) as string)) {\n const { children } = root.props || root;\n return lastLeaf(children[children.length - 1]);\n }\n return root;\n}\n\ntype NextStepResult = {\n idx: number;\n finalStep: boolean;\n};\n\nexport function nextStep(\n pathSoFar: string,\n targetPath: string,\n followPathToEnd = false\n): NextStepResult {\n if (pathSoFar === targetPath) {\n return { idx: -1, finalStep: true };\n }\n\n const pathVisited = `${pathSoFar}.`;\n if (!targetPath.startsWith(pathVisited)) {\n throw Error(\"pathUtils nextStep has strayed from the path\");\n }\n\n const endOfTheLine = followPathToEnd ? 0 : 1;\n const paths = targetPath\n .replace(pathVisited, \"\")\n .split(\".\")\n .map((n) => parseInt(n, 10));\n return { idx: paths[0], finalStep: paths.length === endOfTheLine };\n}\n\nexport function resetPath(\n model: ReactElement,\n path: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additionalProps?: any\n): ReactElement {\n if (getProp(model, \"path\") === path) {\n return model;\n }\n const children: ReactElement[] = [];\n React.Children.forEach(model.props.children, (child, i) => {\n if (!getProp(child, \"path\")) {\n children.push(child);\n } else {\n children.push(resetPath(child, `${path}.${i}`));\n }\n });\n const pathPropName = model.props[\"data-path\"] ? \"data-path\" : \"path\";\n return React.cloneElement(\n model,\n { [pathPropName]: path, ...additionalProps },\n children\n );\n}\n", "import { ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\n\nconst NO_PROPS = {};\nexport const getProp = (component: LayoutModel, propName: string) => {\n const props = getProps(component);\n return props[propName] ?? props[`data-${propName}`];\n};\n\nexport const getProps = (component?: LayoutModel) =>\n component?.props || component || NO_PROPS;\n\nexport const getChildProp = (container: LayoutModel) => {\n const props = getProps(container);\n if (props.children) {\n const {\n children: [target, ...rest],\n } = props;\n if (rest.length > 0) {\n console.warn(\n `getChild expected a single child, found ${rest.length + 1}`\n );\n }\n return target as ReactElement;\n }\n};\n", "import {\n Children,\n DependencyList,\n EffectCallback,\n isValidElement,\n ReactElement,\n ReactNode,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\n\nconst EMPTY_ARRAY: ReactElement[] = [];\n\nlet vuuComponentIdCount = 0;\n\nexport const asReactElements = (children: ReactNode): ReactElement[] => {\n const isArray = Array.isArray(children);\n const count = isArray ? children.length : Children.count(children);\n if (isArray && children.every(isValidElement)) {\n return children;\n } else if (count === 1 && !isArray && isValidElement(children)) {\n return [children];\n } else if (count > 1) {\n return children as ReactElement[];\n } else {\n return EMPTY_ARRAY;\n }\n};\n\nexport const useLayoutEffectSkipFirst = (\n func: EffectCallback,\n deps: DependencyList\n) => {\n const goodToGo = useRef(false);\n useLayoutEffect(() => {\n if (goodToGo.current) {\n func();\n } else {\n goodToGo.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n\nexport const useId = (id?: string) =>\n useMemo(() => id ?? `vuu-${++vuuComponentIdCount}`, [id]);\n", "import { ReactElement } from \"react\";\nimport { rect } from \"../common-types\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport { getProps, typeOf } from \"../utils\";\nimport { DragDropRect, DropPos, RelativePosition } from \"./dragDropTypes\";\n\nexport const positionValues = {\n north: 1,\n east: 2,\n south: 4,\n west: 8,\n header: 16,\n centre: 32,\n absolute: 64,\n};\n\nexport const RelativeDropPosition = {\n AFTER: \"after\" as RelativePosition,\n BEFORE: \"before\" as RelativePosition,\n};\n\nexport const Position = Object.freeze({\n North: _position(\"north\"),\n East: _position(\"east\"),\n South: _position(\"south\"),\n West: _position(\"west\"),\n Header: _position(\"header\"),\n Centre: _position(\"centre\"),\n Absolute: _position(\"absolute\"),\n});\n\nfunction _position(str: keyof typeof positionValues) {\n return Object.freeze({\n offset:\n str === \"north\" || str === \"west\"\n ? 0\n : str === \"south\" || str === \"east\"\n ? 1\n : NaN,\n valueOf: function () {\n return positionValues[str];\n },\n toString: function () {\n return str;\n },\n North: str === \"north\",\n South: str === \"south\",\n East: str === \"east\",\n West: str === \"west\",\n Header: str === \"header\",\n Centre: str === \"centre\",\n NorthOrSouth: str === \"north\" || str === \"south\",\n EastOrWest: str === \"east\" || str === \"west\",\n NorthOrWest: str === \"north\" || str === \"west\",\n SouthOrEast: str === \"east\" || str === \"south\",\n Absolute: str === \"absolute\",\n });\n}\n\nconst NORTH = Position.North,\n SOUTH = Position.South,\n EAST = Position.East,\n WEST = Position.West,\n HEADER = Position.Header,\n CENTRE = Position.Centre;\n\nexport interface Measurements {\n [key: string]: DragDropRect;\n}\n\nexport class BoxModel {\n //TODO we should accept initial let,top offsets here\n // if dropTargets are supplied, we will only allow drop operations directly on these targets\n // TODO we will need to make this more flexible e.g allowing drop anywhere within these target\n static measure(\n model: ReactElement,\n dropTargetPaths: string[] = []\n ): Measurements {\n const measurements: Measurements = {};\n measureRootComponent(model, measurements, dropTargetPaths);\n return measurements;\n }\n\n static allBoxesContainingPoint(\n layout: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n validDropTargets?: string[]\n ) {\n return allBoxesContainingPoint(\n layout,\n measurements,\n x,\n y,\n validDropTargets\n ).reverse();\n }\n}\n\nexport function pointPositionWithinRect(\n x: number,\n y: number,\n rect: DragDropRect,\n borderZone = 30\n) {\n const width = rect.right - rect.left;\n const height = rect.bottom - rect.top;\n const posX = x - rect.left;\n const posY = y - rect.top;\n let closeToTheEdge = 0;\n\n if (posX < borderZone) closeToTheEdge += 8;\n if (posX > width - borderZone) closeToTheEdge += 2;\n if (posY < borderZone) closeToTheEdge += 1;\n if (posY > height - borderZone) closeToTheEdge += 4;\n\n return { pctX: posX / width, pctY: posY / height, closeToTheEdge };\n}\n\nexport function getPosition(\n x: number,\n y: number,\n rect: DragDropRect,\n targetOrientation?: \"row\" | \"column\"\n): DropPos {\n const { BEFORE, AFTER } = RelativeDropPosition;\n const { pctX, pctY, closeToTheEdge } = pointPositionWithinRect(x, y, rect);\n let position;\n let tab;\n\n if (targetOrientation === \"row\") {\n position = pctX < 0.5 ? WEST : EAST;\n } else if (rect.header && containsPoint(rect.header, x, y)) {\n position = HEADER;\n\n if (rect.Stack) {\n const tabCount = rect.Stack.length;\n if (tabCount === 0) {\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab: AFTER,\n width: 0,\n };\n } else {\n //TODO account for gaps between tabs\n const targetTab = rect.Stack.find(\n ({ left, right }) => x >= left && x <= right\n );\n if (targetTab) {\n const tabWidth = targetTab.right - targetTab.left;\n tab = {\n index: rect.Stack.indexOf(targetTab),\n left: targetTab.left,\n positionRelativeToTab:\n (x - targetTab.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n const lastTab = rect.Stack[tabCount - 1];\n tab = {\n left: lastTab.right,\n width: 0,\n index: tabCount,\n positionRelativeToTab: AFTER,\n };\n }\n }\n } else if (rect.header.titleWidth) {\n const tabWidth = rect.header.titleWidth;\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab:\n (x - rect.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n tab = {\n left: rect.left,\n width: 0,\n positionRelativeToTab: BEFORE,\n index: -1,\n };\n }\n } else {\n position = getPositionWithinBox(x, y, rect, pctX, pctY);\n }\n return { position: position!, x, y, closeToTheEdge, tab };\n}\n\nfunction getPositionWithinBox(\n x: number,\n y: number,\n rect: DragDropRect,\n pctX: number,\n pctY: number\n) {\n const centerBox = getCenteredBox(rect, 0.2);\n if (containsPoint(centerBox, x, y)) {\n return CENTRE;\n } else {\n const quadrant = `${pctY < 0.5 ? \"north\" : \"south\"}${\n pctX < 0.5 ? \"west\" : \"east\"\n }`;\n\n switch (quadrant) {\n case \"northwest\":\n return pctX > pctY ? NORTH : WEST;\n case \"northeast\":\n return 1 - pctX > pctY ? NORTH : EAST;\n case \"southeast\":\n return pctX > pctY ? EAST : SOUTH;\n case \"southwest\":\n return 1 - pctX > pctY ? WEST : SOUTH;\n default:\n }\n }\n}\n\nfunction getCenteredBox(\n { right, left, top, bottom }: DragDropRect,\n pctSize: number\n) {\n const pctOffset = (1 - pctSize) / 2;\n const w = (right - left) * pctOffset;\n const h = (bottom - top) * pctOffset;\n return { left: left + w, top: top + h, right: right - w, bottom: bottom - h };\n}\n\nfunction measureRootComponent(\n rootComponent: ReactElement,\n measurements: Measurements,\n dropTargets: string[]\n) {\n const {\n id,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(rootComponent);\n const type = typeOf(rootComponent) as string;\n\n if (id && path) {\n const [rect, el] = measureComponentDomElement(rootComponent);\n measureComponent(rootComponent, rect, el, measurements);\n if (isContainer(type)) {\n collectChildMeasurements(rootComponent, measurements, dropTargets);\n }\n }\n}\n\nfunction measureComponent(\n component: LayoutModel,\n rect: DragDropRect,\n el: HTMLElement,\n measurements: Measurements\n) {\n const {\n \"data-path\": dataPath,\n path = dataPath,\n header,\n } = getProps(component);\n\n measurements[path] = rect;\n\n const type = typeOf(component);\n if (header || type === \"Stack\") {\n const headerEl = el.querySelector(\".vuuHeader\");\n if (headerEl) {\n const { top, left, right, bottom } = headerEl.getBoundingClientRect();\n measurements[path].header = {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n };\n if (type === \"Stack\") {\n measurements[path].Stack = Array.from(\n headerEl.querySelectorAll(\".saltTab\")\n )\n .map((tab) => tab.getBoundingClientRect())\n .map(({ left, right }) => ({ left, right }));\n } else {\n const titleEl = headerEl.querySelector('[class^=\"vuuHeader-title\"]');\n const { header } = measurements[path];\n if (titleEl && header) {\n header.titleWidth = titleEl.clientWidth;\n }\n }\n }\n }\n\n return measurements[path];\n}\n\nfunction collectChildMeasurements(\n component: LayoutModel,\n measurements: Measurements,\n dropTargets: string[],\n preX = 0,\n posX = 0,\n preY = 0,\n posY = 0\n) {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n style,\n active = 0,\n } = getProps(component);\n\n const type = typeOf(component);\n const isFlexbox = type === \"Flexbox\";\n const isStack = type === \"Stack\";\n const isTower = isFlexbox && style.flexDirection === \"column\";\n const isTerrace = isFlexbox && style.flexDirection === \"row\";\n\n const childrenToMeasure = isStack\n ? children.filter((_child: ReactElement, idx: number) => idx === active)\n : children.filter(omitDragging);\n\n type measuredTuple = [DragDropRect, HTMLElement, ReactElement];\n // Collect all the measurements in first pass ...\n const childMeasurements: measuredTuple[] = childrenToMeasure.map(\n (child: ReactElement) => {\n const [rect, el] = measureComponentDomElement(child);\n\n return [\n {\n ...rect,\n top: rect.top - preY,\n right: rect.right + posX,\n bottom: rect.bottom + posY,\n left: rect.left - preX,\n },\n el,\n child,\n ];\n }\n );\n\n // ...so that, in the second pass, we can identify gaps ...\n const expandedMeasurements = childMeasurements.map(\n ([rect, el, child], i, all) => {\n // generate a 'local' splitter adjustment for children adjacent to splitters\n let localPreX;\n let localPosX;\n let localPreY;\n let localPosY;\n let gapPre;\n let gapPos;\n const n = all.length - 1;\n if (isTerrace) {\n gapPre = i === 0 ? 0 : rect.left - all[i - 1][0].right;\n gapPos = i === n ? 0 : all[i + 1][0].left - rect.right;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreX = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosX = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.left -= localPreX;\n rect.right += localPosX;\n localPreY = preY;\n localPosY = posY;\n } else if (isTower) {\n gapPre = i === 0 ? 0 : rect.top - all[i - 1][0].bottom;\n gapPos = i === n ? 0 : all[i + 1][0].top - rect.bottom;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreY = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosY = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.top -= localPreY;\n rect.bottom += localPosY;\n localPreX = preX;\n localPosX = posX;\n }\n\n const componentMeasurements = measureComponent(\n child,\n rect,\n el,\n measurements\n );\n\n const childType = typeOf(child) as string;\n if (isContainer(childType)) {\n collectChildMeasurements(\n child,\n measurements,\n dropTargets,\n localPreX,\n localPosX,\n localPreY,\n localPosY\n );\n }\n return componentMeasurements;\n }\n );\n if (childMeasurements.length) {\n measurements[path].children = expandedMeasurements;\n }\n}\n\nfunction omitDragging(component: ReactElement) {\n const { id } = getProps(component);\n const el = document.getElementById(id);\n if (el) {\n return el.dataset.dragging !== \"true\";\n } else {\n console.warn(`BoxModel: no element found with id #${id}`);\n return false;\n }\n}\n\nfunction measureComponentDomElement(\n component: LayoutModel\n): [DragDropRect, HTMLElement, LayoutModel] {\n const { id } = getProps(component) as { id: string };\n if (id === undefined) {\n throw Error(\"`BoxModel.measureComponentElement, component has no id\");\n }\n const el = document.getElementById(id);\n if (!el) {\n throw Error(\n \"BoxModel.measureComponentElement, no DOM element found for component\"\n );\n }\n // Note: height and width are not required for dropTarget identification, but\n // are used in sizing calculations on drop\n const { top, left, right, bottom, height, width } =\n el.getBoundingClientRect();\n let scrolling = undefined;\n const type = typeOf(component) as string;\n if (isContainer(type)) {\n const scrollHeight = el.scrollHeight;\n if (scrollHeight > height) {\n scrolling = { id, scrollHeight, scrollTop: el.scrollTop };\n }\n }\n return [\n {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n height: Math.round(height),\n width: Math.round(width),\n scrolling,\n },\n el,\n component,\n ];\n}\n\nfunction allBoxesContainingPoint(\n component: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n dropTargets?: string[],\n boxes: LayoutModel[] = []\n): LayoutModel[] {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(component);\n\n const type = typeOf(component) as string;\n const rect = measurements[path];\n if (!containsPoint(rect, x, y)) return boxes;\n\n if (dropTargets && dropTargets.length) {\n if (dropTargets.includes(path)) {\n boxes.push(component);\n } else if (\n dropTargets.some((dropTargetPath) => dropTargetPath.startsWith(path))\n ) {\n // keep going\n } else {\n return boxes;\n }\n } else {\n boxes.push(component);\n }\n\n if (!isContainer(type)) {\n return boxes;\n }\n\n if (rect.header && containsPoint(rect.header, x, y)) {\n return boxes;\n }\n\n if (rect.scrolling) {\n scrollIntoViewIfNeccesary(rect, x, y);\n }\n\n for (let i = 0; i < children.length; i++) {\n if (type === \"Stack\" && component.props.active !== i) {\n continue;\n }\n const nestedBoxes = allBoxesContainingPoint(\n children[i],\n measurements,\n x,\n y,\n dropTargets\n );\n if (nestedBoxes.length) {\n return boxes.concat(nestedBoxes);\n }\n }\n return boxes;\n}\n\nfunction containsPoint(rect: rect, x: number, y: number) {\n if (rect) {\n return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;\n }\n}\n\nfunction scrollIntoViewIfNeccesary(\n { top, bottom, scrolling }: DragDropRect,\n x: number,\n y: number\n) {\n if (scrolling) {\n const { id, scrollTop, scrollHeight } = scrolling;\n const height = bottom - top;\n if (scrollTop === 0 && bottom - y < 50) {\n const scrollMax = scrollHeight - height;\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: scrollMax, behavior: \"smooth\" });\n scrolling.scrollTop = scrollMax;\n } else if (scrollTop > 0 && y - top < 50) {\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: 0, behavior: \"smooth\" });\n scrolling.scrollTop = 0;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n", "import { rect, rectTuple } from \"../common-types\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { getProps, typeOf } from \"../utils\";\nimport {\n BoxModel,\n getPosition,\n Measurements,\n Position,\n positionValues,\n RelativeDropPosition,\n} from \"./BoxModel\";\nimport { DragDropRect, DropPos, DropPosTab } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\n\nexport const isTabstrip = (dropTarget: DropTarget) =>\n dropTarget.pos.tab &&\n typeOf(dropTarget.component) === \"Stack\" &&\n dropTarget.pos.position.Header;\n\nconst { north, south, east, west } = positionValues;\nconst eastwest = east + west;\nconst northsouth = north + south;\n\nexport interface DropTargetProps {\n component: LayoutModel;\n pos: DropPos;\n clientRect: DragDropRect;\n nextDropTarget: DropTarget | null;\n}\n\nexport type GuideLine = [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n];\nexport interface TargetDropOutline {\n l: number;\n r: number;\n t: number;\n b: number;\n tabLeft?: number;\n tabWidth?: number;\n tabHeight?: number;\n guideLines?: GuideLine;\n}\n\nexport class DropTarget {\n private active: boolean;\n\n public box: unknown;\n public clientRect: DragDropRect;\n public component: LayoutModel;\n public dropRect: rectTuple | undefined;\n public nextDropTarget: DropTarget | null;\n public pos: DropPos;\n\n constructor({\n component,\n pos,\n clientRect /*, closeToTheEdge*/,\n nextDropTarget,\n }: DropTargetProps) {\n this.component = component;\n this.pos = pos;\n this.clientRect = clientRect;\n this.nextDropTarget = nextDropTarget;\n this.active = false;\n this.dropRect = undefined;\n }\n\n targetTabPos(tab: DropPosTab) {\n const { left: tabLeft, width: tabWidth, positionRelativeToTab } = tab;\n return positionRelativeToTab === RelativeDropPosition.BEFORE\n ? tabLeft\n : tabLeft + tabWidth;\n }\n\n /**\n * Determine what will be rendered by the dropTargetRenderer\n *\n * @param {*} lineWidth\n * @param {*} dragState\n * @returns {l, t, r, b, tabLeft, tabWidth, tabHeight}\n */\n getTargetDropOutline(\n lineWidth: number,\n dragState?: DragState\n ): TargetDropOutline {\n if (this.pos.tab) {\n return this.getDropTabOutline(lineWidth, this.pos.tab);\n } else if (dragState && dragState.hasIntrinsicSize()) {\n return this.getIntrinsicDropRect(dragState);\n } else {\n const [l, t, r, b] = this.getDropRectOutline(\n lineWidth,\n dragState\n ) as rectTuple;\n return { l, t, r, b };\n }\n }\n\n getDropTabOutline(lineWidth: number, tab: DropPosTab): TargetDropOutline {\n const {\n clientRect: { top, left, right, bottom, header },\n } = this;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n const t = Math.round(top);\n const l = Math.round(left + gap);\n const r = Math.round(right - gap);\n const b = Math.round(bottom - gap);\n const tabLeft = this.targetTabPos(tab);\n const tabWidth = 60; // should really measure text\n const tabHeight = (header?.bottom ?? 0) - (header?.top ?? 0);\n return { l, t, r, b, tabLeft, tabWidth, tabHeight };\n }\n\n getIntrinsicDropRect(dragState: DragState): TargetDropOutline {\n const { pos, clientRect: rect } = this;\n\n const { x, y } = dragState;\n\n let height = dragState.intrinsicSize?.height ?? 0;\n let width = dragState.intrinsicSize?.height ?? 0;\n\n if (height && height > rect.height) {\n console.log(`DropTarget: we're going to blow the gaff`);\n height = rect.height;\n } else if (width && width > rect.width) {\n console.log(`DropTarget: we're going to blow the gaff`);\n width = rect.width;\n }\n\n const left = Math.min(\n rect.right - width,\n Math.max(rect.left, Math.round(pos.x - x.mousePct * width))\n );\n const top = Math.min(\n rect.bottom - height,\n Math.max(rect.top, Math.round(pos.y - y.mousePct * height))\n );\n const [l, t, r, b] = (this.dropRect = [\n left,\n top,\n left + width,\n top + height,\n ]);\n\n const guideLines: GuideLine = pos.position.EastOrWest\n ? [l, rect.top, l, rect.bottom, r, rect.top, r, rect.bottom]\n : [rect.left, t, rect.right, t, rect.left, b, rect.right, b];\n\n return { l, r, t, b, guideLines };\n }\n\n /**\n * @returns [left, top, right, bottom]\n */\n getDropRectOutline(lineWidth: number, dragState?: DragState) {\n const { pos, clientRect: rect } = this;\n const { width: suggestedWidth, height: suggestedHeight, position } = pos;\n\n const { width: intrinsicWidth, height: intrinsicHeight } =\n dragState?.intrinsicSize ?? {};\n const sizeHeight = intrinsicHeight ?? suggestedHeight ?? 0;\n const sizeWidth = intrinsicWidth ?? suggestedWidth ?? 0;\n\n this.dropRect = undefined;\n\n const { top: t, left: l, right: r, bottom: b } = rect;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n switch (position) {\n case Position.North:\n case Position.Header: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, t + gap, l + sizeWidth - gap, t + gap + height] // need flex direction indicator\n : [l + gap, t + gap, r - gap, t + gap + height];\n }\n case Position.West: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [l + gap, t + gap, l - gap + width, t + sizeHeight + gap] // need flex direction indicator\n : [l + gap, t + gap, l - gap + width, b - gap];\n }\n case Position.East: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [r - gap - width, t + gap, r - gap, t + sizeHeight + gap] // need flex direction indicator\n : [r - gap - width, t + gap, r - gap, b - gap];\n }\n case Position.South: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, b - gap - height, l + sizeWidth - gap, b - gap] // need flex direction indicator\n : [l + gap, b - gap - height, r - gap, b - gap];\n }\n case Position.Centre: {\n return [l + gap, t + gap, r - gap, b - gap];\n }\n default:\n console.warn(`DropTarget does not recognize position ${position}`);\n return null;\n }\n }\n\n activate() {\n this.active = true;\n return this;\n }\n\n toArray(this: DropTarget) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let dropTarget: DropTarget | null = this;\n const dropTargets = [dropTarget];\n // eslint-disable-next-line no-cond-assign\n while ((dropTarget = dropTarget.nextDropTarget)) {\n dropTargets.push(dropTarget);\n }\n return dropTargets;\n }\n\n static getActiveDropTarget(dropTarget: DropTarget | null): DropTarget | null {\n return dropTarget === null\n ? null\n : dropTarget?.active\n ? dropTarget\n : DropTarget.getActiveDropTarget(dropTarget.nextDropTarget);\n }\n}\n\n// Initial entry to this method is always via the app (may be it should be *on* the app)\nexport function identifyDropTarget(\n x: number,\n y: number,\n rootLayout: LayoutModel,\n measurements: Measurements,\n intrinsicSize?: number,\n validDropTargets?: string[]\n) {\n let dropTarget = null;\n\n const allBoxesContainingPoint = BoxModel.allBoxesContainingPoint(\n rootLayout,\n measurements,\n x,\n y,\n validDropTargets\n );\n\n if (allBoxesContainingPoint.length) {\n const [component, ...containers] = allBoxesContainingPoint;\n const {\n \"data-path\": dataPath,\n path = dataPath,\n \"data-row-placeholder\": isRowPlaceholder,\n } = getProps(component);\n const clientRect = measurements[path];\n const placeholderOrientation =\n intrinsicSize && isRowPlaceholder ? \"row\" : undefined;\n const pos = getPosition(x, y, clientRect, placeholderOrientation);\n const box = measurements[path];\n\n const nextDropTarget = ([nextTarget, ...targets]: LayoutModel[]):\n | DropTarget\n | undefined => {\n if (pos.position?.Header || pos.closeToTheEdge) {\n const targetPosition = getTargetPosition(\n nextTarget,\n pos,\n box,\n measurements,\n x,\n y\n );\n if (targetPosition) {\n const [containerPos, clientRect] = targetPosition;\n\n return new DropTarget({\n component: nextTarget,\n pos: containerPos,\n clientRect,\n nextDropTarget: nextDropTarget(targets) ?? null,\n });\n } else if (targets.length) {\n return nextDropTarget(targets);\n }\n }\n };\n dropTarget = new DropTarget({\n component,\n pos,\n clientRect,\n nextDropTarget: nextDropTarget(containers) ?? null,\n }).activate();\n }\n\n return dropTarget;\n}\n\nfunction getTargetPosition(\n container: LayoutModel,\n { closeToTheEdge, position }: DropPos,\n box: rect,\n measurements: Measurements,\n x: number,\n y: number\n): [DropPos, DragDropRect] | undefined {\n if (!container || container.type === \"DraggableLayout\") {\n return;\n }\n\n const containingBox = measurements[container.props.path];\n const closeToTop = closeToTheEdge & positionValues.north;\n const closeToRight = closeToTheEdge & positionValues.east;\n const closeToBottom = closeToTheEdge & positionValues.south;\n const closeToLeft = closeToTheEdge & positionValues.west;\n\n const atTop =\n (closeToTop || position.Header) &&\n Math.round(box.top) === Math.round(containingBox.top);\n const atRight =\n closeToRight && Math.round(box.right) === Math.round(containingBox.right);\n const atBottom =\n closeToBottom &&\n Math.round(box.bottom) === Math.round(containingBox.bottom);\n const atLeft =\n closeToLeft && Math.round(box.left) === Math.round(containingBox.left);\n\n if (atTop || atRight || atBottom || atLeft) {\n const { \"data-path\": dataPath, path = dataPath } = container.props;\n const clientRect = measurements[path];\n const containerPos = getPosition(x, y, clientRect);\n\n // if its a VBox and we're close to left or right ...\n if (\n (isVBox(container) || isTabbedContainer(container)) &&\n closeToTheEdge & eastwest\n ) {\n containerPos.width = 120;\n return [containerPos, clientRect];\n }\n // if it's a HBox and we're close to top or bottom ...\n else if (\n (isHBox(container) || isTabbedContainer(container)) &&\n (position.Header || closeToTheEdge & northsouth)\n ) {\n containerPos.height = 120;\n return [containerPos, clientRect];\n }\n }\n}\n\nfunction isTabbedContainer(component: LayoutModel) {\n return typeOf(component) === \"Stack\";\n}\n\nfunction isVBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"column\"\n );\n}\n\nfunction isHBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"row\"\n );\n}\n", "import { PopupService } from \"@vuu-ui/vuu-popups\";\nimport { RelativeDropPosition } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\nimport { computeMenuPosition, DropMenu } from \"./DropMenu\";\nimport { DropTarget, GuideLine } from \"./DropTarget\";\n\nimport \"./DropTargetRenderer.css\";\n\ntype Point = [number, number];\ntype TabMode = \"full-view\" | \"tab-only\";\n\nlet _multiDropOptions = false;\nlet _hoverDropTarget: DropTarget | null = null;\nlet _shiftedTab: HTMLElement | null = null;\n\nconst onHoverDropTarget = (dropTarget: DropTarget | null) =>\n (_hoverDropTarget = dropTarget);\n\nconst start = ([x, y]: Point) => `M${x},${y}`;\nconst point = ([x, y]: Point) => `L${x},${y}`;\nconst pathFromPoints = ([p1, ...points]: Point[]) =>\n `${start(p1)} ${points.map(point)}Z`;\n\nconst pathFromGuideLines = (guideLines?: GuideLine) => {\n if (guideLines) {\n const [x1, y1, x2, y2, x3, y3, x4, y4] = guideLines;\n return `M${x1},${y1} L${x2},${y2} M${x3},${y3} L${x4},${y4}`;\n } else {\n return \"\";\n }\n};\n\nfunction insertSVGRoot() {\n if (document.getElementById(\"hw-drag-canvas\") === null) {\n const root = document.getElementById(\"root\");\n const container = document.createElement(\"div\");\n container.id = \"hw-drag-canvas\";\n container.innerHTML = `\n <svg width=\"100%\" height=\"100%\">\n <path id=\"hw-drop-guides\" />\n <path\n id=\"vuu-drop-outline\"\n d=\"M300,132 L380,132 L380,100 L460,100 L460,132, L550,132 L550,350 L300,350z\">\n <animate\n attributeName=\"d\"\n id=\"hw-drop-outline-animate\"\n begin=\"indefinite\"\n dur=\"300ms\"\n fill=\"freeze\"\n to=\"M255,33 L255,33,L255,1,L315,1,L315,1,L794,1,L794,164,L255,164Z\"\n />\n </path>\n </svg>\n `;\n document.body.insertBefore(container, root);\n }\n}\nexport default class DropTargetCanvas {\n private currentPath: string | null = null;\n private tabMode: TabMode | null = null;\n\n constructor() {\n insertSVGRoot();\n }\n\n prepare(dragRect: DragDropRect, tabMode: TabMode = \"full-view\") {\n // don't do this on body\n document.body.classList.add(\"drawing\");\n this.currentPath = null;\n this.tabMode = tabMode;\n\n const points = this.getPoints(0, 0, 0, 0);\n // const points = this.getPoints(left, top, width, height);\n const d = pathFromPoints(points);\n\n const dropOutlinePath = document.getElementById(\"vuu-drop-outline\");\n dropOutlinePath?.setAttribute(\"d\", d);\n this.currentPath = d;\n }\n\n clear() {\n // don't do this on body\n _hoverDropTarget = null;\n clearShiftedTab();\n document.body.classList.remove(\"drawing\");\n PopupService.hidePopup();\n }\n\n get hoverDropTarget() {\n return _hoverDropTarget;\n }\n\n getPoints(\n x: number,\n y: number,\n width: number,\n height: number,\n tabLeft = 0,\n tabWidth = 0,\n tabHeight = 0\n ): Point[] {\n const tabOnly = this.tabMode === \"tab-only\";\n if (tabWidth === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n ];\n } else if (tabOnly) {\n const left = tabLeft;\n return [\n [left, y],\n [left, y],\n [left + tabWidth, y],\n [left + tabWidth, y],\n [left + tabWidth, y + tabHeight],\n [left + tabWidth, y + tabHeight],\n [left, y + tabHeight],\n [left, y + tabHeight],\n ];\n } else if (tabLeft === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n } else {\n return [\n [x, y + tabHeight],\n [x + tabLeft, y + tabHeight],\n [x + tabLeft, y],\n [x + tabLeft, y],\n [x + tabLeft, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n }\n }\n\n draw(dropTarget: DropTarget, dragState: DragState) {\n const sameDropTarget = false;\n const wasMultiDrop = _multiDropOptions;\n\n if (_hoverDropTarget !== null) {\n this.drawTarget(_hoverDropTarget);\n } else {\n if (sameDropTarget === false) {\n _multiDropOptions = dropTarget.nextDropTarget != null;\n if (dropTarget.pos.tab) {\n moveExistingTabs(dropTarget);\n } else if (_shiftedTab) {\n clearShiftedTab();\n }\n this.drawTarget(dropTarget, dragState);\n }\n\n if (_multiDropOptions) {\n const [left, top, orientation] = computeMenuPosition(dropTarget);\n if (!wasMultiDrop || !sameDropTarget) {\n const component = (\n <DropMenu\n dropTarget={dropTarget}\n onHover={onHoverDropTarget}\n orientation={orientation}\n />\n );\n PopupService.showPopup({\n left,\n top,\n component,\n });\n }\n } else {\n PopupService.hidePopup();\n }\n }\n }\n\n drawTarget(dropTarget: DropTarget, dragState?: DragState) {\n const lineWidth = 6;\n\n const targetDropOutline = dropTarget.getTargetDropOutline(\n lineWidth,\n dragState\n );\n\n if (targetDropOutline) {\n const { l, t, r, b, tabLeft, tabWidth, tabHeight, guideLines } =\n targetDropOutline;\n const w = r - l;\n const h = b - t;\n\n if (this.currentPath) {\n const path = document.getElementById(\"vuu-drop-outline\");\n path?.setAttribute(\"d\", this.currentPath);\n }\n\n const points = this.getPoints(l, t, w, h, tabLeft, tabWidth, tabHeight);\n const path = pathFromPoints(points);\n const animation = document.getElementById(\n \"hw-drop-outline-animate\"\n ) as unknown as SVGAnimateElement;\n animation?.setAttribute(\"to\", path);\n animation?.beginElement();\n this.currentPath = path;\n\n const dropGuidePath = document.getElementById(\"hw-drop-guides\");\n dropGuidePath?.setAttribute(\"d\", pathFromGuideLines(guideLines));\n }\n }\n}\n\nconst cssShiftRight = \"transition:margin-left .4s ease-out;margin-left: 63px\";\nconst cssShiftBack = \"transition:margin-left .4s ease-out;margin-left: 0px\";\n\nfunction moveExistingTabs(dropTarget: DropTarget) {\n const { AFTER, BEFORE } = RelativeDropPosition;\n const {\n clientRect: { Stack },\n pos: {\n // tab: { index: tabIndex, positionRelativeToTab }\n tab,\n },\n } = dropTarget;\n\n const { id } = dropTarget.component.props;\n let tabEl = null;\n // console.log(`tabPos = ${tabPos} (width=${tabWidth}) x=${x}`)\n if (Stack && tab && tab.positionRelativeToTab !== AFTER) {\n const tabOffset = tab.positionRelativeToTab === BEFORE ? 1 : 2;\n const selector = `:scope .hwTabstrip > .hwTabstrip-inner > .hwTab:nth-child(${\n tab.index + tabOffset\n })`;\n tabEl = document.getElementById(id)?.querySelector(selector) as HTMLElement;\n if (tabEl) {\n if (_shiftedTab === null || _shiftedTab !== tabEl) {\n tabEl.style.cssText = cssShiftRight;\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n }\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n } else if (tab?.positionRelativeToTab === BEFORE) {\n if (_shiftedTab === null) {\n const selector = \".vuuHeader-title\";\n tabEl = document\n .getElementById(id)\n ?.querySelector(selector) as HTMLElement;\n tabEl.style.cssText = cssShiftRight;\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n}\n\nfunction clearShiftedTab() {\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n _shiftedTab = null;\n }\n}\n", "import cx from \"classnames\";\nimport { HTMLAttributes } from \"react\";\nimport { DropTarget } from \"./DropTarget\";\n\nimport \"./DropMenu.css\";\n\nexport function computeMenuPosition(\n dropTarget: DropTarget,\n offsetTop = 0,\n offsetLeft = 0\n): [number, number, \"left\" | \"bottom\" | \"right\" | \"top\"] {\n const { pos, clientRect: box } = dropTarget;\n const menuOffset = 20;\n\n return pos.position.West\n ? [box.left - offsetLeft + menuOffset, pos.y - offsetTop, \"left\"]\n : pos.position.South\n ? [pos.x - offsetLeft, box.bottom - offsetTop - menuOffset, \"bottom\"]\n : pos.position.East\n ? [box.right - offsetLeft - menuOffset, pos.y - offsetTop, \"right\"]\n : /* North | Header*/ [\n pos.x - offsetLeft,\n box.top - offsetTop + menuOffset,\n \"top\",\n ];\n}\n\nconst classBase = \"vuuDropMenu\";\n\nexport interface DropMenuProps extends HTMLAttributes<HTMLDivElement> {\n dropTarget: DropTarget;\n onHover: (target: DropTarget | null) => void;\n orientation?: \"left\" | \"top\" | \"right\" | \"bottom\";\n}\n\nexport const DropMenu = ({\n className,\n dropTarget,\n onHover,\n orientation,\n}: DropMenuProps) => {\n const dropTargets = dropTarget.toArray();\n // TODO we have all the information here to draw a mini target map\n // but maybe thats overkill ...\n\n return (\n <div\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n onMouseLeave={() => onHover(null)}\n >\n {dropTargets.map((target, i) => (\n <div\n key={i}\n className={`${classBase}-item`}\n data-icon={i === 0 ? \"column-2A\" : \"column-2B\"}\n onMouseEnter={() => onHover(target)}\n />\n ))}\n </div>\n );\n};\n", "import { ReactElement } from \"react\";\nimport { rect } from \"../common-types\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { findTarget, followPath, getProps } from \"../utils\";\nimport { BoxModel, Measurements, Position } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState, IntrinsicSizes } from \"./DragState\";\nimport { DropTarget, identifyDropTarget } from \"./DropTarget\";\nimport DropTargetRenderer from \"./DropTargetRenderer\";\n\nexport type DragStartCallback = (e: MouseEvent, x: number, y: number) => void;\nexport type DragMoveCallback = (\n x: number | undefined,\n y: number | undefined\n) => void;\nexport type DragEndCallback = (droppedTarget: Partial<DropTarget>) => void;\nexport type DragInstructions = {\n DoNotRemove?: boolean;\n DoNotTransform?: boolean;\n dragThreshold?: number;\n RemoveDraggableOnDragEnd?: boolean;\n};\n\nlet _dragStartCallback: DragStartCallback | null;\nlet _dragMoveCallback: DragMoveCallback | null;\nlet _dragEndCallback: DragEndCallback | null;\n\nlet _dragStartX: number;\nlet _dragStartY: number;\nlet _dragContainer: ReactElement | undefined;\nlet _dragState: DragState;\nlet _dropTarget: DropTarget | null = null;\nlet _validDropTargetPaths: string[] | undefined;\nlet _dragInstructions: DragInstructions;\nlet _measurements: Measurements;\nlet _simpleDrag: boolean;\nlet _dragThreshold: number;\nlet _mouseDownTimer: number | null = null;\n\nconst DEFAULT_DRAG_THRESHOLD = 3;\nconst _dropTargetRenderer = new DropTargetRenderer();\nconst SCALE_FACTOR = 0.4;\n\nfunction getDragContainer(\n rootContainer: ReactElement,\n dragContainerPath: string\n) {\n if (dragContainerPath) {\n return followPath(rootContainer, dragContainerPath) as ReactElement;\n } else {\n return findTarget(\n rootContainer,\n (props) => props.dropTarget\n ) as ReactElement;\n }\n}\n\nexport const Draggable = {\n handleMousedown(\n e: MouseEvent,\n dragStartCallback: DragStartCallback,\n dragInstructions: DragInstructions = {}\n ) {\n _dragStartCallback = dragStartCallback;\n _dragInstructions = dragInstructions;\n\n _dragStartX = e.clientX;\n _dragStartY = e.clientY;\n\n _dragThreshold =\n dragInstructions.dragThreshold === undefined\n ? DEFAULT_DRAG_THRESHOLD\n : dragInstructions.dragThreshold;\n\n if (_dragThreshold === 0) {\n // maybe this should be -1\n _dragStartCallback(e, 0, 0);\n } else {\n window.addEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", preDragMouseupHandler, false);\n\n _mouseDownTimer = window.setTimeout(() => {\n console.log(\"mousedownTimer fires\");\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, 0, 0);\n }, 500);\n }\n\n e.preventDefault();\n },\n\n // called from handleDragStart (_dragCallback)\n initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n { top, left, right, bottom }: rect,\n dragPos: { x: number; y: number },\n dragHandler: {\n drag: DragMoveCallback;\n drop: DragEndCallback;\n },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n ) {\n ({ drag: _dragMoveCallback, drop: _dragEndCallback } = dragHandler);\n return initDrag(\n rootContainer,\n dragContainerPath,\n { top, left, right, bottom } as DragDropRect,\n dragPos,\n intrinsicSize,\n dropTargets\n );\n },\n};\n\nfunction preDragMousemoveHandler(e: MouseEvent) {\n const x = true;\n const y = true;\n\n const x_diff = x ? e.clientX - _dragStartX : 0;\n const y_diff = y ? e.clientY - _dragStartY : 0;\n const mouseMoveDistance = Math.max(Math.abs(x_diff), Math.abs(y_diff));\n\n // when we do finally move the draggee, we are going to 'jump' by the amount of the drag threshold, should we\n // attempt to animate this ?\n if (mouseMoveDistance > _dragThreshold) {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, x_diff, y_diff);\n _dragStartCallback = null;\n }\n}\n\nfunction preDragMouseupHandler() {\n if (_mouseDownTimer) {\n window.clearTimeout(_mouseDownTimer);\n _mouseDownTimer = null;\n }\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n}\n\nfunction initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n dragRect: DragDropRect,\n dragPos: { x: number; y: number },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n) {\n _dragContainer = getDragContainer(rootContainer, dragContainerPath);\n const { \"data-path\": dataPath, path = dataPath } = getProps(_dragContainer);\n\n if (dropTargets) {\n const dropPaths = dropTargets\n .map((id) => findTarget(rootContainer, (props) => props.id === id))\n .map((target) => (target as LayoutModel).props.path);\n _validDropTargetPaths = dropPaths;\n }\n\n // var start = window.performance.now();\n // translate the layout $position to drag-oriented co-ordinates, ignoring splitters\n _measurements = BoxModel.measure(_dragContainer, dropTargets);\n console.log({ _measurements });\n // onsole.log({ measurements: _measurements });\n // var end = window.performance.now();\n // onsole.log(`[Draggable] measurements took ${end - start}ms`, _measurements);\n\n const dragZone = _measurements[path];\n\n _dragState = new DragState(\n dragZone,\n dragPos.x,\n dragPos.y,\n dragRect,\n intrinsicSize\n );\n\n const pctX = Math.round(_dragState.x.mousePct * 100);\n const pctY = Math.round(_dragState.y.mousePct * 100);\n\n window.addEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", dragMouseupHandler, false);\n\n _simpleDrag = false;\n\n _dropTargetRenderer.prepare(dragRect, \"tab-only\");\n\n return _dragInstructions.DoNotTransform\n ? \"transform:none\"\n : // scale factor should be applied in caller, not here\n `transform:scale(${SCALE_FACTOR},${SCALE_FACTOR});transform-origin:${pctX}% ${pctY}%;`;\n}\n\nfunction dragMousemoveHandler(evt: MouseEvent) {\n const x = evt.clientX;\n const y = evt.clientY;\n const dragState = _dragState;\n const currentDropTarget = _dropTarget;\n let dropTarget;\n let newX, newY;\n\n if (dragState.update(\"x\", x)) {\n newX = dragState.x.pos;\n }\n\n if (dragState.update(\"y\", y)) {\n newY = dragState.y.pos;\n }\n\n if (newX === undefined && newY === undefined) {\n //onsole.log('both x and y are unchanged');\n } else {\n _dragMoveCallback?.(newX, newY);\n }\n\n if (_simpleDrag || _dragContainer === undefined) {\n return;\n }\n\n if (dragState.inBounds()) {\n dropTarget = identifyDropTarget(\n x,\n y,\n _dragContainer,\n _measurements,\n dragState.hasIntrinsicSize(),\n _validDropTargetPaths\n );\n } else {\n dropTarget = identifyDropTarget(\n dragState.dropX(),\n dragState.dropY(),\n _dragContainer,\n _measurements\n );\n }\n\n // did we have an existing droptarget which is no longer such ...\n if (currentDropTarget) {\n if (dropTarget == null || dropTarget.box !== currentDropTarget.box) {\n _dropTarget = null;\n }\n }\n\n if (dropTarget) {\n _dropTargetRenderer.draw(dropTarget, dragState);\n _dropTarget = dropTarget;\n }\n}\n\nfunction dragMouseupHandler() {\n onDragEnd();\n}\n\nfunction onDragEnd() {\n if (_dropTarget) {\n const dropTarget =\n _dropTargetRenderer.hoverDropTarget ||\n DropTarget.getActiveDropTarget(_dropTarget);\n\n _dragEndCallback?.(dropTarget as DropTarget);\n\n _dropTarget = null;\n } else {\n _dragEndCallback?.({\n component: _dragContainer,\n pos: { position: Position.Absolute } as any,\n });\n }\n\n _dragMoveCallback = null;\n _dragEndCallback = null;\n\n _dragContainer = undefined;\n _dropTargetRenderer.clear();\n _validDropTargetPaths = undefined;\n window.removeEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", dragMouseupHandler, false);\n}\n", "import classnames from \"classnames\";\nimport { ForwardedRef, forwardRef, HTMLAttributes } from \"react\";\nimport { registerComponent } from \"./registry/ComponentRegistry\";\n\nimport \"./DraggableLayout.css\";\n\nexport interface DraggableLayoutProps extends HTMLAttributes<HTMLDivElement> {\n dropTarget?: boolean;\n resizeable?: boolean;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DraggableLayout = forwardRef(function DraggableLayout(\n {\n children,\n className: classNameProp,\n dropTarget,\n resizeable: _, // ignore, its just a marker used by the layout system\n ...htmlAttributes\n }: DraggableLayoutProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const className = classnames(\"DraggableLayout\", classNameProp);\n return (\n <div className={className} ref={forwardedRef} {...htmlAttributes}>\n {children}\n </div>\n );\n});\n\nconst componentName = \"DraggableLayout\";\n\nDraggableLayout.displayName = componentName;\n\nregisterComponent(componentName, DraggableLayout, \"container\");\n", "import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { CSSProperties, ForwardedRef, forwardRef } from \"react\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport { useSplitterResizing } from \"./useSplitterResizing\";\n\nimport \"./Flexbox.css\";\n\nconst classBase = \"hwFlexbox\";\n\nconst Flexbox = forwardRef(function Flexbox(\n props: FlexboxProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children,\n // cols: colsProp,\n column,\n className: classNameProp,\n flexFill,\n gap,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n spacing,\n splitterSize,\n style,\n ...rest\n } = props;\n\n const { content, rootRef } = useSplitterResizing({\n children,\n // cols: colsProp,\n onSplitterMoved,\n style,\n });\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n return (\n <div\n {...rest}\n className={className}\n // data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={\n {\n ...style,\n gap,\n \"--spacing\": spacing,\n } as CSSProperties\n }\n >\n {content}\n </div>\n );\n});\nFlexbox.displayName = \"Flexbox\";\n\nexport default Flexbox;\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport React, {\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Placeholder } from \"../placeholder\";\nimport { Splitter } from \"./Splitter\";\n\nimport {\n findSplitterAndPlaceholderPositions,\n gatherChildMeta,\n identifyResizeParties,\n PLACEHOLDER,\n SPLITTER,\n} from \"./flexbox-utils\";\nimport {\n ContentMeta,\n FlexSize,\n SplitterFactory,\n SplitterHookProps,\n SplitterHookResult,\n} from \"./flexboxTypes\";\n\nconst originalContentOnly = (meta: ContentMeta) =>\n !meta.splitter && !meta.placeholder;\n\nexport const useSplitterResizing = ({\n children: childrenProp,\n onSplitterMoved,\n style,\n}: SplitterHookProps): SplitterHookResult => {\n const rootRef = useRef<HTMLDivElement>(null);\n const metaRef = useRef<ContentMeta[]>();\n const contentRef = useRef<ReactElement[]>();\n const assignedKeys = useRef([]);\n const [, forceUpdate] = useState({});\n\n const setContent = (content: ReactElement[]) => {\n contentRef.current = content;\n forceUpdate({});\n };\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : React.isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const handleDragStart = useCallback(\n (index) => {\n const { current: contentMeta } = metaRef;\n if (contentMeta) {\n const [participants, bystanders] = identifyResizeParties(\n contentMeta,\n index\n );\n if (participants) {\n participants.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { size, minSize } = measureElement(el, dimension);\n contentMeta[index].currentSize = size;\n contentMeta[index].minSize = minSize;\n }\n });\n if (bystanders) {\n bystanders.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { [dimension]: size } = el.getBoundingClientRect();\n contentMeta[index].flexBasis = size;\n }\n });\n }\n }\n }\n },\n [dimension]\n );\n\n const handleDrag = useCallback(\n (idx, distance) => {\n if (contentRef.current && metaRef.current) {\n setContent(\n resizeContent(\n contentRef.current,\n metaRef.current,\n distance,\n dimension\n )\n );\n }\n },\n [dimension]\n );\n\n const handleDragEnd = useCallback(() => {\n const contentMeta = metaRef.current;\n if (contentMeta) {\n onSplitterMoved?.(contentMeta.filter(originalContentOnly));\n }\n contentMeta?.forEach((meta) => {\n meta.currentSize = undefined;\n meta.flexBasis = undefined;\n meta.flexOpen = false;\n });\n }, [onSplitterMoved]);\n\n const createSplitter: SplitterFactory = useCallback(\n (i) => {\n return React.createElement(Splitter, {\n column: isColumn,\n index: i,\n key: `splitter-${i}`,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n });\n },\n [handleDrag, handleDragEnd, handleDragStart, isColumn]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(\n children,\n dimension,\n createSplitter,\n assignedKeys.current\n );\n metaRef.current = meta;\n contentRef.current = content;\n }, [children, createSplitter, dimension]);\n\n return {\n content: contentRef.current || [],\n rootRef,\n };\n};\n\nfunction buildContent(\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n createSplitter: SplitterFactory,\n keys: any[]\n): [any[], ContentMeta[]] {\n const childMeta = gatherChildMeta(children, dimension);\n const splitterAndPlaceholderPositions =\n findSplitterAndPlaceholderPositions(childMeta);\n const content = [];\n const meta: ContentMeta[] = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (i === 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true, shim: true });\n }\n if (child.key == null) {\n const key = keys[i] || (keys[i] = getUniqueId());\n content.push(React.cloneElement(child, { key }));\n } else {\n content.push(child);\n }\n meta.push(childMeta[i]);\n\n if (i > 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true });\n } else if (splitterAndPlaceholderPositions[i] & SPLITTER) {\n content.push(createSplitter(content.length));\n meta.push({ splitter: true });\n }\n }\n return [content, meta];\n}\n\nfunction resizeContent(\n content: ReactElement[],\n contentMeta: ContentMeta[],\n distance: number,\n dimension: \"width\" | \"height\"\n) {\n const metaUpdated = updateMeta(contentMeta, distance);\n if (!metaUpdated) {\n return content;\n }\n\n return content.map((child, idx) => {\n const meta = contentMeta[idx];\n const { currentSize, flexOpen, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n if (hasCurrentSize || flexOpen) {\n const { flexBasis: actualFlexBasis } = child.props.style || {};\n const size = hasCurrentSize ? meta.currentSize : flexBasis;\n if (size !== actualFlexBasis) {\n return React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexBasis: size,\n [dimension]: \"auto\",\n },\n });\n } else {\n return child;\n }\n } else {\n return child;\n }\n });\n}\n\n//TODO detect cursor move beyond drag limit and suspend further resize until cursoe re-engages with splitter\nfunction updateMeta(contentMeta: ContentMeta[], distance: number) {\n const resizeTargets: number[] = [];\n\n contentMeta.forEach((meta, idx) => {\n if (meta.currentSize !== undefined) {\n resizeTargets.push(idx);\n }\n });\n\n // we want the target being reduced first, this may limit the distance we can apply\n const target1 = distance < 0 ? resizeTargets[0] : resizeTargets[1];\n\n const { currentSize = 0, minSize = 0 } = contentMeta[target1];\n if (currentSize === minSize) {\n // size is already 0, we cannot go further\n return false;\n } else if (Math.abs(distance) > currentSize - minSize) {\n // reduce to 0\n const multiplier = distance < 0 ? -1 : 1;\n distance = Math.max(0, currentSize - minSize) * multiplier;\n }\n\n const leadingItem = contentMeta[resizeTargets[0]] as ContentMeta;\n const { currentSize: leadingSize = 0 } = leadingItem;\n leadingItem.currentSize = leadingSize + distance;\n\n const trailingItem = contentMeta[resizeTargets[1]] as ContentMeta;\n const { currentSize: trailingSize = 0 } = trailingItem;\n trailingItem.currentSize = trailingSize - distance;\n\n return true;\n}\n\nfunction createPlaceholder(index: number) {\n return React.createElement(Placeholder, {\n shim: index === 0,\n key: `placeholder-${index}`,\n } as any);\n}\n\nfunction measureElement(\n el: HTMLElement,\n dimension: \"width\" | \"height\"\n): FlexSize {\n const { [dimension]: size } = el.getBoundingClientRect();\n const style = getComputedStyle(el);\n const minSizeVal = style.getPropertyValue(`min-${dimension}`);\n const minSize = minSizeVal.endsWith(\"px\") ? parseInt(minSizeVal, 10) : 0;\n return { size, minSize };\n}\n", "import cx from \"classnames\";\nimport { HTMLAttributes } from \"react\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\n\nimport \"./Placeholder.css\";\n\nconst classBase = \"vuuPlaceholder\";\n\nexport interface PlaceholderProps extends HTMLAttributes<HTMLDivElement> {\n closeable?: boolean;\n flexFill?: boolean;\n resizeable?: boolean;\n shim?: boolean;\n}\n\nexport const Placeholder = ({\n className,\n closeable,\n flexFill,\n resizeable,\n shim,\n ...props\n}: PlaceholderProps) => {\n return (\n <div\n className={cx(classBase, className, {\n [`${classBase}-shim`]: shim,\n })}\n {...props}\n data-placeholder\n data-resizeable\n >\n </div>\n );\n};\n\nPlaceholder.displayName = \"Placeholder\";\nregisterComponent(\"Placeholder\", Placeholder);\n", "import cx from \"classnames\";\nimport React, {\n HTMLAttributes,\n KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./Splitter.css\";\n\nexport type SplitterDragStartHandler = (index: number) => void;\nexport type SplitterDragHandler = (index: number, distance: number) => void;\nexport type SplitterDragEndHandler = () => void;\n\nexport interface SplitterProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onDrag\" | \"onDragStart\"> {\n //TODO change to alignment (vertical | horizontal)\n column: boolean;\n index: number;\n onDragStart: SplitterDragStartHandler;\n onDrag: SplitterDragHandler;\n onDragEnd: SplitterDragEndHandler;\n}\n\nexport const Splitter = React.memo(function Splitter({\n column,\n index,\n onDrag,\n onDragEnd,\n onDragStart,\n style,\n}: SplitterProps) {\n const ignoreClick = useRef<boolean>();\n const rootRef = useRef<HTMLDivElement>(null);\n const lastPos = useRef<number>(0);\n\n const [active, setActive] = useState(false);\n\n const handleKeyDownDrag = useCallback(\n ({ key, shiftKey }) => {\n const distance = shiftKey ? 10 : 1;\n if (column && key === \"ArrowDown\") {\n onDrag(index, distance);\n } else if (column && key === \"ArrowUp\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowLeft\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowRight\") {\n onDrag(index, distance);\n }\n },\n [column, index, onDrag]\n );\n\n const handleKeyDownInitDrag = useCallback(\n (evt) => {\n const { key } = evt;\n const horizontalMove = key === \"ArrowLeft\" || key === \"ArrowRIght\";\n const verticalMove = key === \"ArrowUp\" || key === \"ArrowDown\";\n if ((column && verticalMove) || (!column && horizontalMove)) {\n onDragStart(index);\n handleKeyDownDrag(evt);\n keyDownHandlerRef.current = handleKeyDownDrag;\n }\n },\n [column, handleKeyDownDrag, index, onDragStart]\n );\n\n const keyDownHandlerRef = useRef(handleKeyDownInitDrag);\n const handleKeyDown = (evt: KeyboardEvent) => keyDownHandlerRef.current(evt);\n\n const handleMouseMove = useCallback(\n (e) => {\n ignoreClick.current = true;\n const pos = e[column ? \"clientY\" : \"clientX\"];\n const diff = pos - lastPos.current;\n if (pos && pos !== lastPos.current) {\n onDrag(index, diff);\n }\n lastPos.current = pos;\n },\n [column, index, onDrag]\n );\n\n const handleMouseUp = useCallback(() => {\n window.removeEventListener(\"mousemove\", handleMouseMove, false);\n window.removeEventListener(\"mouseup\", handleMouseUp, false);\n onDragEnd();\n setActive(false);\n rootRef.current?.focus();\n }, [handleMouseMove, onDragEnd, setActive]);\n\n const handleMouseDown = useCallback(\n (e) => {\n lastPos.current = column ? e.clientY : e.clientX;\n onDragStart(index);\n window.addEventListener(\"mousemove\", handleMouseMove, false);\n window.addEventListener(\"mouseup\", handleMouseUp, false);\n e.preventDefault();\n setActive(true);\n },\n [column, handleMouseMove, handleMouseUp, index, onDragStart, setActive]\n );\n\n const handleClick = () => {\n if (ignoreClick.current) {\n ignoreClick.current = false;\n } else {\n rootRef.current?.focus();\n }\n };\n\n const handleBlur = () => {\n keyDownHandlerRef.current = handleKeyDownInitDrag;\n };\n\n const className = cx(\"Splitter\", \"focusable\", { active, column });\n return (\n <div\n className={className}\n data-splitter\n ref={rootRef}\n role=\"separator\"\n style={style}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n tabIndex={0}\n >\n <div className=\"grab-zone\" />\n </div>\n );\n});\n", "import { uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { dimension, rect, rectTuple } from \"../common-types\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProps, resetPath } from \"../utils\";\nconst placeHolderProps = { \"data-placeholder\": true, \"data-resizeable\": true };\n\nconst NO_STYLE = {};\nconst auto = \"auto\";\nconst defaultFlexStyle = {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n height: auto,\n width: auto,\n};\n\nconst CROSS_DIMENSION = {\n height: \"width\",\n width: \"height\",\n};\n\nexport type flexDirection = \"row\" | \"column\";\n\ntype contraDimension = dimension;\ntype flexDimensionTuple = [dimension, contraDimension, flexDirection];\nexport type position = {\n height?: number;\n width?: number;\n};\n\nexport const getFlexDimensions = (flexDirection: flexDirection = \"row\") => {\n if (flexDirection === \"row\") {\n return [\"width\", \"height\", \"column\"] as flexDimensionTuple;\n } else {\n return [\"height\", \"width\", \"row\"] as flexDimensionTuple;\n }\n};\n\nconst isPercentageSize = (value: string | number) =>\n typeof value === \"string\" && value.endsWith(\"%\");\n\nexport const getIntrinsicSize = (\n component: ReactElement\n): { height?: number; width?: number } | undefined => {\n const { style: { width = auto, height = auto } = NO_STYLE } = component.props;\n\n const numHeight = typeof height === \"number\";\n const numWidth = typeof width === \"number\";\n\n if (numHeight && numWidth) {\n return { height, width };\n } else if (numHeight) {\n return { height };\n } else if (numWidth) {\n return { width };\n } else {\n return undefined;\n }\n};\n\nexport function getFlexStyle(\n component: ReactElement,\n dimension: dimension,\n pos?: DropPos\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n } else {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n}\n\nexport function hasUnboundedFlexStyle(component: ReactElement) {\n const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } =\n component.props;\n if (typeof flex === \"number\") {\n return true;\n }\n if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {\n return true;\n }\n if (typeof flexBasis === \"number\") {\n return false;\n }\n return true;\n}\n\nexport function getFlexOrIntrinsicStyle(\n component: ReactElement,\n dimension: dimension,\n pos: position\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [dimension]: intrinsicSize = auto,\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (intrinsicSize !== auto) {\n if (isPercentageSize(intrinsicSize)) {\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n [dimension]: undefined,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n return {\n flexBasis: intrinsicSize,\n flexGrow: 0,\n flexShrink: 0,\n [dimension]: intrinsicSize,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n return {\n ...intrinsicStyles,\n [crossDimension]: intrinsicCrossSize,\n };\n}\n\nexport function wrapIntrinsicSizeComponentWithFlexbox(\n component: ReactElement,\n flexDirection: flexDirection,\n path: string,\n clientRect?: rect,\n dropRect?: rectTuple\n) {\n const wrappedChildren = [];\n let pathIndex = 0;\n let endPlaceholder;\n\n if (clientRect && dropRect) {\n let startPlaceholder;\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n\n if (startPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n } else {\n endPlaceholder = true;\n }\n\n const { version = 0, style } = getProps(component);\n\n wrappedChildren.push(\n resetPath(component, `${path}.${pathIndex++}`, {\n version: version + 1,\n style: {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n },\n })\n );\n\n if (endPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, 0, undefined, {\n [`data-${flexDirection}-placeholder`]: true,\n })\n );\n }\n\n return createFlexbox(\n flexDirection,\n { resizeable: false, style: { flexBasis: \"auto\" } },\n wrappedChildren,\n path\n );\n}\n\nconst getFlexValue = (\n flexBasis: number,\n flexFill: boolean\n): number | undefined => {\n if (flexFill) {\n return undefined;\n }\n return flexBasis === 0 ? 1 : 0;\n};\n\nexport function createFlexbox(\n flexDirection: flexDirection,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n children: ReactNode,\n path: string\n) {\n const id = uuid();\n const { flexFill, style, resizeable = true } = props;\n const { flexBasis = flexFill ? undefined : \"auto\" } = style;\n const flex = getFlexValue(flexBasis, flexFill);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.createElement<any>(\n ComponentRegistry.Flexbox,\n {\n id,\n key: id,\n path,\n flexFill,\n style: {\n ...style,\n flexDirection,\n flexBasis,\n flexGrow: flex,\n flexShrink: flex,\n },\n resizeable,\n },\n children\n );\n}\n\nconst baseStyle = { flexGrow: 1, flexShrink: 1 };\n\nexport function createPlaceHolder(\n path: string,\n size: number,\n style?: CSSProperties,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props?: any\n) {\n const id = uuid();\n return React.createElement(\"div\", {\n ...placeHolderProps,\n ...props,\n \"data-path\": path,\n id,\n key: id,\n style: { ...baseStyle, ...style, flexBasis: size },\n });\n}\n", "import { ReactElement } from \"react\";\nimport {\n getIntrinsicSize,\n hasUnboundedFlexStyle,\n} from \"../layout-reducer/flexUtils\";\nimport { getProp } from \"../utils\";\nimport type { BreakPoint, ContentMeta } from \"./flexboxTypes\";\n\nconst NO_INTRINSIC_SIZE: {\n height?: number;\n width?: number;\n} = {};\n\nexport const SPLITTER = 1;\nexport const PLACEHOLDER = 2;\n\nconst isIntrinsicallySized = (item: ContentMeta) =>\n typeof item.intrinsicSize === \"number\";\n\nconst getBreakPointValues = (\n breakPoints: BreakPoint[],\n component: ReactElement\n) => {\n const values: { [key: string]: number | undefined } = {};\n breakPoints.forEach((breakPoint) => {\n values[breakPoint] = getProp(component, breakPoint);\n });\n return values;\n};\n\nexport const gatherChildMeta = (\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n breakPoints?: BreakPoint[]\n) => {\n return children.map((child, index) => {\n const resizeable = getProp(child, \"resizeable\");\n const { [dimension]: intrinsicSize } =\n getIntrinsicSize(child) ?? NO_INTRINSIC_SIZE;\n const flexOpen = hasUnboundedFlexStyle(child);\n if (breakPoints) {\n return {\n index,\n flexOpen,\n intrinsicSize,\n resizeable,\n ...getBreakPointValues(breakPoints, child),\n };\n } else {\n return { index, flexOpen, intrinsicSize, resizeable };\n }\n });\n};\n\n// Splitters are inserted AFTER the associated index, so\n// never a splitter in last position.\n// Placeholder goes before (first) OR after(last) index\nexport const findSplitterAndPlaceholderPositions = (\n childMeta: ContentMeta[]\n) => {\n const count = childMeta.length;\n const allIntrinsic = childMeta.every(isIntrinsicallySized);\n const splitterPositions = Array(count).fill(0);\n if (allIntrinsic && count > 0) {\n splitterPositions[0] = PLACEHOLDER;\n splitterPositions[count - 1] = PLACEHOLDER;\n }\n if (count < 2) {\n return splitterPositions;\n } else {\n // 1) From the left, check each item.\n // Once we hit a resizable item, set this index and all subsequent indices,\n // except for last, to SPLITTER\n for (let i = 0, resizeablesLeft = 0; i < count - 1; i++) {\n if (childMeta[i].resizeable && !resizeablesLeft) {\n resizeablesLeft = SPLITTER;\n }\n splitterPositions[i] += resizeablesLeft;\n }\n // 2) Now check from the right. Undo splitter insertion until we reach a point\n // where there is a resizeable to our right.\n for (let i = count - 1; i > 0; i--) {\n if (splitterPositions[i] & SPLITTER) {\n splitterPositions[i] -= SPLITTER;\n }\n if (childMeta[i].resizeable) {\n break;\n }\n }\n return splitterPositions;\n }\n};\n\nexport const identifyResizeParties = (\n contentMeta: ContentMeta[],\n idx: number\n) => {\n const idx1 = getLeadingResizeablePos(contentMeta, idx);\n const idx2 = getTrailingResizeablePos(contentMeta, idx);\n const participants = idx1 !== -1 && idx2 !== -1 ? [idx1, idx2] : undefined;\n const bystanders = identifyResizeBystanders(contentMeta, participants);\n return [participants, bystanders];\n};\n\nfunction identifyResizeBystanders(\n contentMeta: ContentMeta[],\n participants?: number[]\n) {\n if (participants) {\n const bystanders = [];\n for (let i = 0; i < contentMeta.length; i++) {\n if (contentMeta[i].flexOpen && !participants.includes(i)) {\n bystanders.push(i);\n }\n }\n return bystanders;\n }\n}\n\nfunction getLeadingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n while (pos >= 1 && !resizeable) {\n pos = pos - 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos;\n}\n\nfunction getTrailingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n const count = contentMeta.length;\n while (pos < count - 1 && !resizeable) {\n pos = pos + 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos === count ? -1 : pos;\n}\n\nfunction isResizeable(contentMeta: ContentMeta[], idx: number): boolean {\n const { placeholder, splitter, resizeable, intrinsicSize } = contentMeta[idx];\n return Boolean(!splitter && !intrinsicSize && (placeholder || resizeable));\n}\n", "import { useCallback } from \"react\";\nimport { Action } from \"../layout-action\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { SplitterResizeAction } from \"../layout-reducer\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Flexbox from \"./Flexbox\";\nimport { FlexboxLayoutProps } from \"./flexboxTypes\";\n\nexport const FlexboxLayout = function FlexboxLayout(props: FlexboxLayoutProps) {\n const { path } = props;\n const dispatch = useLayoutProviderDispatch();\n\n const handleSplitterMoved = useCallback(\n (sizes) => {\n dispatch({\n type: Action.SPLITTER_RESIZE,\n path,\n sizes,\n } as SplitterResizeAction);\n },\n [dispatch, path]\n );\n\n return <Flexbox {...props} onSplitterMoved={handleSplitterMoved} />;\n};\nFlexboxLayout.displayName = \"Flexbox\";\n\nregisterComponent(\"Flexbox\", FlexboxLayout, \"container\");\n", "export const Action = {\n ADD: \"add\",\n BLUR: \"blur\",\n BLUR_SPLITTER: \"blur-splitter\",\n DRAG_START: \"drag-start\",\n DRAG_STARTED: \"drag-started\",\n DRAG_DROP: \"drag-drop\",\n FOCUS: \"focus\",\n FOCUS_SPLITTER: \"focus-splitter\",\n INITIALIZE: \"initialize\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SAVE: \"save\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAR_OUT: \"tear-out\",\n};\n", "import {\n MutableRefObject,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n LayoutActionType,\n layoutFromJson,\n LayoutJSON,\n layoutReducer,\n LayoutReducerAction,\n layoutToJSON,\n processLayoutElement,\n} from \"../layout-reducer\";\nimport { findTarget, getChildProp, getProps, typeOf } from \"../utils\";\nimport {\n LayoutProviderContext,\n LayoutProviderDispatch,\n} from \"./LayoutProviderContext\";\nimport { useLayoutDragDrop } from \"./useLayoutDragDrop\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst withDropTarget = (props: any) => props.dropTarget;\nconst shouldSave = (action: LayoutReducerAction) =>\n [\n \"drag-drop\",\n \"remove\",\n \"set-title\",\n \"splitter-resize\",\n \"switch-tab\",\n ].includes(action.type);\n\ntype LayoutChangeHandler = (layout: LayoutJSON, source: string) => void;\n\nexport interface LayoutProviderProps {\n children: ReactElement;\n layout?: LayoutJSON;\n onLayoutChange?: LayoutChangeHandler;\n}\n\nexport const LayoutProviderVersion = () => {\n const version = useLayoutProviderVersion();\n return <div>{`Context: ${version} `}</div>;\n};\n\nexport const LayoutProvider = (props: LayoutProviderProps): ReactElement => {\n const { children, layout, onLayoutChange } = props;\n const state = useRef<ReactElement | undefined>(undefined);\n const childrenRef = useRef<ReactElement>(children);\n\n const [, forceRefresh] = useState<unknown>(null);\n\n const serializeState = useCallback(\n (source) => {\n if (onLayoutChange) {\n const targetContainer =\n findTarget(source, withDropTarget) || state.current;\n const isDraggableLayout = typeOf(targetContainer) === \"DraggableLayout\";\n const target = isDraggableLayout\n ? getProps(targetContainer).children[0]\n : targetContainer;\n const serializedModel = layoutToJSON(target);\n onLayoutChange(serializedModel, \"drag-root\");\n }\n },\n [onLayoutChange]\n );\n\n const dispatchLayoutAction = useCallback(\n (action: LayoutReducerAction, suppressSave = false) => {\n const nextState = layoutReducer(state.current as ReactElement, action);\n if (nextState !== state.current) {\n state.current = nextState;\n forceRefresh({});\n if (!suppressSave && shouldSave(action)) {\n serializeState(nextState);\n }\n }\n },\n [serializeState]\n );\n\n const layoutActionDispatcher: LayoutProviderDispatch = useCallback(\n (action) => {\n switch (action.type) {\n case \"drag-start\": {\n prepareToDragLayout(action);\n break;\n }\n case \"save\": {\n serializeState(state.current);\n break;\n }\n default: {\n dispatchLayoutAction(action);\n break;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatchLayoutAction, serializeState]\n );\n\n const prepareToDragLayout = useLayoutDragDrop(\n state as MutableRefObject<ReactElement>,\n layoutActionDispatcher\n );\n\n useEffect(() => {\n if (layout) {\n const targetContainer = findTarget(\n state.current as never,\n withDropTarget\n ) as ReactElement;\n const target = getChildProp(targetContainer);\n const newLayout = layoutFromJson(\n layout,\n `${targetContainer.props.path}.0`\n );\n const action = target\n ? {\n type: LayoutActionType.REPLACE,\n target,\n replacement: newLayout,\n }\n : {\n type: LayoutActionType.ADD,\n path: targetContainer.props.path,\n component: newLayout,\n };\n dispatchLayoutAction(action, true);\n }\n }, [dispatchLayoutAction, layout]);\n\n if (state.current === undefined) {\n state.current = processLayoutElement(children);\n } else if (children !== childrenRef.current) {\n state.current = processLayoutElement(children, state.current);\n childrenRef.current = children;\n }\n\n return (\n <LayoutProviderContext.Provider\n value={{ dispatchLayoutProvider: layoutActionDispatcher, version: 0 }}\n >\n {state.current}\n </LayoutProviderContext.Provider>\n );\n};\n\nexport const useLayoutProviderDispatch = () => {\n const { dispatchLayoutProvider } = useContext(LayoutProviderContext);\n return dispatchLayoutProvider;\n};\n\nexport const useLayoutProviderVersion = () => {\n console.log({ LayoutProviderContext });\n const { version } = useContext(LayoutProviderContext);\n return version;\n};\n", "import React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport {\n findTarget,\n followPath,\n followPathToParent,\n getProp,\n getProps,\n typeOf,\n} from \"../utils\";\nimport { getIntrinsicSize } from \"./flexUtils\";\nimport {\n getInsertTabBeforeAfter,\n insertBesideChild,\n insertIntoContainer,\n} from \"./insert-layout-element\";\nimport { moveChild } from \"./move-layout-element\";\nimport {\n AddAction,\n DragDropAction,\n LayoutActionType,\n LayoutReducerAction,\n MaximizeAction,\n SetPropAction,\n SetPropsAction,\n SwitchTabAction,\n} from \"./layoutTypes\";\nimport { LayoutProps } from \"./layoutUtils\";\nimport { removeChild } from \"./remove-layout-element\";\nimport {\n replaceChild,\n swapChild,\n _replaceChild,\n} from \"./replace-layout-element\";\nimport { resizeFlexChild, resizeFlexChildren } from \"./resize-flex-children\";\nimport { wrap } from \"./wrap-layout-element\";\n\nexport const layoutReducer = (\n state: ReactElement,\n action: LayoutReducerAction\n): ReactElement => {\n switch (action.type) {\n case LayoutActionType.ADD:\n return addChild(state, action);\n case LayoutActionType.DRAG_DROP:\n return dragDrop(state, action);\n case LayoutActionType.MAXIMIZE:\n return setChildProps(state, action);\n case LayoutActionType.REMOVE:\n return removeChild(state, action);\n case LayoutActionType.REPLACE:\n return replaceChild(state, action);\n case LayoutActionType.SET_PROP:\n return setProp(state, action);\n case LayoutActionType.SET_PROPS:\n return setProps(state, action);\n case LayoutActionType.SET_TITLE:\n return setProp(state, {\n type: \"set-prop\",\n path: action.path,\n propName: \"title\",\n propValue: action.title,\n });\n case LayoutActionType.SPLITTER_RESIZE:\n return resizeFlexChildren(state, action);\n case LayoutActionType.LAYOUT_RESIZE:\n return resizeFlexChild(state, action);\n case LayoutActionType.SWITCH_TAB:\n return switchTab(state, action);\n case LayoutActionType.MOVE_CHILD:\n return moveChild(state, action);\n default:\n return state;\n }\n};\n\nconst switchTab = (state: ReactElement, { path, nextIdx }: SwitchTabAction) => {\n const target = followPath(state, path, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const replacement = React.cloneElement<any>(target, {\n active: nextIdx,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProp = (\n state: ReactElement,\n { path, propName, propValue }: SetPropAction\n) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, {\n [propName]: propValue,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProps = (state: ReactElement, { path, props }: SetPropsAction) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, props);\n return swapChild(state, target, replacement);\n};\n\nconst setChildProps = (state: ReactElement, { path, type }: MaximizeAction) => {\n if (path) {\n const target = followPath(state, path, true);\n return swapChild(state, target, target, type);\n } else {\n return state;\n }\n};\n\nconst dragDrop = (\n layoutRoot: ReactElement,\n action: DragDropAction\n): ReactElement => {\n const {\n draggedReactElement: newComponent,\n dragInstructions,\n dropTarget,\n } = action;\n const existingComponent = dropTarget.component as ReactElement;\n const { pos } = dropTarget;\n const destinationTabstrip =\n pos?.position?.Header && typeOf(existingComponent) === \"Stack\";\n const { id, version } = getProps(newComponent);\n const intrinsicSize = getIntrinsicSize(newComponent);\n let newLayoutRoot: ReactElement;\n if (destinationTabstrip) {\n const [targetTab, insertionPosition] = getInsertTabBeforeAfter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n existingComponent!,\n pos\n );\n if (targetTab === undefined) {\n newLayoutRoot = insertIntoContainer(\n layoutRoot,\n existingComponent,\n newComponent\n );\n } else {\n newLayoutRoot = insertBesideChild(\n layoutRoot,\n targetTab,\n newComponent,\n insertionPosition\n );\n }\n } else if (!intrinsicSize && pos?.position?.Centre) {\n newLayoutRoot = _replaceChild(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent\n );\n } else {\n newLayoutRoot = dropLayoutIntoContainer(\n layoutRoot,\n dropTarget as DropTarget,\n newComponent\n );\n }\n\n if (dragInstructions.DoNotRemove) {\n return newLayoutRoot;\n }\n\n const finalTarget = findTarget(\n newLayoutRoot,\n (props: LayoutProps) => props.id === id && props.version === version\n ) as ReactElement;\n const finalPath = getProp(finalTarget, \"path\");\n return removeChild(newLayoutRoot, { path: finalPath, type: \"remove\" });\n};\n\nconst addChild = (\n layoutRoot: ReactElement,\n { path: containerPath, component }: AddAction\n) => {\n return insertIntoContainer(\n layoutRoot,\n followPath(layoutRoot, containerPath) as ReactElement,\n component\n );\n};\n\nconst dropLayoutIntoContainer = (\n layoutRoot: ReactElement,\n dropTarget: DropTarget,\n newComponent: ReactElement\n): ReactElement => {\n const {\n component: existingComponent,\n pos,\n clientRect,\n dropRect,\n } = dropTarget;\n const existingComponentPath = getProp(existingComponent, \"path\");\n\n if (existingComponentPath === \"0.0\") {\n return wrap(layoutRoot, existingComponent, newComponent, pos);\n }\n\n const targetContainer = followPathToParent(\n layoutRoot,\n existingComponentPath\n ) as ReactElement;\n\n if (withTheGrain(pos, targetContainer)) {\n const insertionPosition = pos.position.SouthOrEast ? \"after\" : \"before\";\n return insertBesideChild(\n layoutRoot,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (!withTheGrain(pos, targetContainer)) {\n return wrap(\n layoutRoot,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (isContainer(typeOf(targetContainer) as string)) {\n return wrap(layoutRoot, existingComponent, newComponent, pos);\n }\n\n throw Error(`no support right now for position = ${pos.position}`);\n};\n\nconst withTheGrain = (pos: DropPos, container: ReactElement) => {\n if (pos.position.Centre) {\n return isTerrace(container) || isTower(container);\n }\n\n return pos.position.NorthOrSouth\n ? isTower(container)\n : pos.position.EastOrWest\n ? isTerrace(container)\n : false;\n};\n\nconst isTower = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection === \"column\"\n );\n};\n\nconst isTerrace = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection !== \"column\"\n );\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { rectTuple } from \"../common-types\";\nimport { DropPos } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createPlaceHolder,\n flexDirection,\n getFlexDimensions,\n getFlexOrIntrinsicStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport { getManagedDimension, LayoutProps } from \"./layoutUtils\";\n\ntype insertionPosition = \"before\" | \"after\";\n\nexport function getInsertTabBeforeAfter(stack: LayoutModel, pos: DropPos) {\n const tabs = stack.props.children;\n const tabCount = tabs.length;\n const { index = -1, positionRelativeToTab = \"after\" } = pos.tab || {};\n return index === -1 || index >= tabCount\n ? [tabs[tabCount - 1], \"after\"]\n : [tabs[index] ?? null, positionRelativeToTab];\n}\n\nexport function insertIntoContainer(\n container: ReactElement,\n targetContainer: ReactElement,\n newComponent: ReactElement\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren = [],\n path: containerPath,\n } = getProps(container) as LayoutProps;\n\n const existingComponentPath = getProp(targetContainer, \"path\");\n const { idx, finalStep } = nextStep(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n containerPath!,\n existingComponentPath,\n true\n );\n const [insertedIdx, children] = finalStep\n ? insertIntoChildren(container, containerChildren, newComponent)\n : [\n containerActive,\n containerChildren?.map((child, index) =>\n index === idx\n ? (insertIntoContainer(\n child,\n targetContainer,\n newComponent\n ) as ReactElement)\n : child\n ),\n ];\n const active =\n typeOf(container) === \"Stack\"\n ? Array.isArray(insertedIdx)\n ? (insertedIdx[0] as number)\n : insertedIdx\n : containerActive;\n\n return React.cloneElement(container, { active }, children);\n}\nfunction insertIntoChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n newComponent: ReactElement\n): [number, ReactElement[]] {\n const containerPath = getProp(container, \"path\");\n const count = containerChildren?.length;\n const { id = uuid() } = getProps(newComponent);\n\n if (count) {\n return [\n count,\n containerChildren.concat(\n resetPath(newComponent, `${containerPath}.${count}`, { id, key: id })\n ),\n ];\n } else {\n return [0, [resetPath(newComponent, `${containerPath}.0`, { id })]];\n }\n}\n\nexport function insertBesideChild(\n container: ReactElement,\n existingComponent: any,\n newComponent: any,\n insertionPosition: insertionPosition,\n pos?: DropPos,\n clientRect?: any,\n dropRect?: any\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren,\n path: containerPath,\n } = getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const [insertedIdx, children] = finalStep\n ? updateChildren(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n pos!,\n clientRect,\n dropRect\n )\n : [\n containerActive,\n containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? insertBesideChild(\n child,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n )\n : child\n ),\n ];\n\n const active = typeOf(container) === \"Stack\" ? insertedIdx : containerActive;\n return React.cloneElement(container, { active }, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: DropTarget[\"dropRect\"]\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n if (intrinsicSize?.width && intrinsicSize?.height) {\n return insertIntrinsicSizedComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n clientRect,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dropRect!\n );\n } else {\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n pos?.width || pos?.height,\n clientRect\n );\n }\n}\n\nconst getLeadingPlaceholderSize = (\n flexDirection: flexDirection,\n insertionPosition: insertionPosition,\n { top, right, bottom, left }: DropTarget[\"clientRect\"],\n [rectLeft, rectTop, rectRight, rectBottom]: rectTuple\n) => {\n if (flexDirection === \"column\" && insertionPosition === \"before\") {\n return rectTop - top;\n } else if (flexDirection === \"column\") {\n return bottom - rectBottom;\n } else if (flexDirection === \"row\" && insertionPosition === \"before\") {\n return rectLeft - left;\n } else if (flexDirection === \"row\") {\n return right - rectRight;\n }\n};\n\nfunction insertIntrinsicSizedComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const {\n style: { flexDirection },\n } = getProps(container);\n const [dimension, crossDimension, contraDirection] =\n getFlexDimensions(flexDirection);\n const { [crossDimension]: intrinsicCrossSize, [dimension]: intrinsicSize } =\n getIntrinsicSize(newComponent) as { height: number; width: number };\n const path = getProp(containerChildren[idx], \"path\");\n\n const placeholderSize = getLeadingPlaceholderSize(\n flexDirection,\n insertionPosition,\n clientRect,\n dropRect\n );\n\n const [itemToInsert, size] =\n intrinsicCrossSize < clientRect[crossDimension]\n ? [\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n path,\n clientRect,\n dropRect\n ),\n intrinsicSize,\n ]\n : [newComponent, undefined];\n\n const placeholder = placeholderSize\n ? createPlaceHolder(path, placeholderSize, { flexGrow: 0, flexShrink: 0 })\n : undefined;\n\n if (intrinsicCrossSize > clientRect[crossDimension]) {\n containerChildren = containerChildren.map((child) => {\n if (getProp(child, \"placeholder\")) {\n return child;\n } else {\n const { [crossDimension]: intrinsicCrossChildSize } = getIntrinsicSize(\n child\n ) as {\n height: number;\n width: number;\n };\n if (\n intrinsicCrossChildSize &&\n intrinsicCrossChildSize < intrinsicCrossSize\n ) {\n return wrapIntrinsicSizeComponentWithFlexbox(\n child,\n contraDirection,\n getProp(child, \"path\")\n );\n } else {\n return child;\n }\n }\n });\n }\n\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n itemToInsert,\n insertionPosition,\n size,\n clientRect,\n placeholder\n );\n}\n\nfunction insertFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: \"before\" | \"after\",\n size: number | undefined,\n targetRect: DropTarget[\"clientRect\"],\n placeholder?: ReactElement\n) {\n const containerPath = getProp(container, \"path\");\n let insertedIdx = 0;\n const children =\n !containerChildren || containerChildren.length === 0\n ? [newComponent]\n : containerChildren\n .reduce<ReactElement[]>((arr, child, i) => {\n if (idx === i) {\n const [existingComponent, insertedComponent] =\n getStyledComponents(container, child, newComponent, targetRect);\n if (insertionPosition === \"before\") {\n if (placeholder) {\n arr.push(placeholder, insertedComponent, existingComponent);\n } else {\n arr.push(insertedComponent, existingComponent);\n }\n } else {\n if (placeholder) {\n arr.push(existingComponent, insertedComponent, placeholder);\n } else {\n arr.push(existingComponent, insertedComponent);\n }\n }\n insertedIdx = arr.indexOf(insertedComponent);\n } else {\n arr.push(child);\n }\n return arr;\n }, [])\n .map((child, i) =>\n i < insertedIdx ? child : resetPath(child, `${containerPath}.${i}`)\n );\n\n return [insertedIdx, children];\n}\n\nfunction getStyledComponents(\n container: LayoutModel,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n targetRect: DropTarget[\"clientRect\"]\n): [ReactElement, ReactElement] {\n const id = uuid();\n let { version = 0 } = getProps(newComponent);\n version += 1;\n if (typeOf(container) === \"Flexbox\") {\n const [dim] = getManagedDimension(container.props.style);\n const splitterSize = 6;\n const size = { [dim]: (targetRect[dim] - splitterSize) / 2 };\n const existingComponentStyle = getFlexOrIntrinsicStyle(\n existingComponent,\n dim,\n size\n );\n const newComponentStyle = getFlexOrIntrinsicStyle(newComponent, dim, size);\n\n return [\n React.cloneElement(existingComponent, {\n style: existingComponentStyle,\n }),\n React.cloneElement(newComponent, {\n id,\n version,\n style: newComponentStyle,\n }),\n ];\n } else {\n const {\n style: { left: _1, top: _2, flex: _3, ...style } = {\n left: undefined,\n top: undefined,\n flex: undefined,\n },\n } = getProps(newComponent);\n return [\n existingComponent,\n React.cloneElement(newComponent, { id, version, style }),\n ];\n }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { cloneElement, CSSProperties, ReactElement } from \"react\";\nimport { dimension } from \"../common-types\";\nimport {\n ComponentWithId,\n ComponentRegistry,\n isContainer,\n isLayoutComponent,\n} from \"../registry/ComponentRegistry\";\nimport {\n getPersistentState,\n hasPersistentState,\n setPersistentState,\n} from \"../use-persistent-state\";\nimport { expandFlex, getProps, typeOf } from \"../utils\";\nimport { LayoutJSON, LayoutModel, layoutType } from \"./layoutTypes\";\n\nexport const getManagedDimension = (\n style: CSSProperties\n): [dimension, dimension] =>\n style.flexDirection === \"column\" ? [\"height\", \"width\"] : [\"width\", \"height\"];\n\nconst theKidHasNoStyle: CSSProperties = {};\n\nexport const applyLayoutProps = (component: ReactElement, path = \"0\") => {\n const [layoutProps, children] = getChildLayoutProps(\n typeOf(component) as string,\n component.props,\n path\n );\n return React.cloneElement(component, layoutProps, children);\n};\n\nexport interface LayoutProps extends ComponentWithId {\n active?: number;\n \"data-path\"?: string;\n children?: ReactElement[];\n column?: any;\n dropTarget?: any;\n key: string;\n layout?: any;\n path?: string;\n resizeable?: boolean;\n style: CSSProperties;\n type?: string;\n version?: number;\n}\n\nexport const processLayoutElement = (\n layoutElement: ReactElement,\n previousLayout?: ReactElement\n): ReactElement => {\n const type = typeOf(layoutElement) as string;\n const [layoutProps, children] = getChildLayoutProps(\n type,\n layoutElement.props,\n \"0\",\n undefined,\n previousLayout\n );\n return cloneElement(layoutElement, layoutProps, children);\n};\n\nexport const applyLayout = (\n type: layoutType,\n props: LayoutProps,\n previousLayout?: LayoutModel\n): LayoutModel => {\n const [layoutProps, children] = getChildLayoutProps(\n type,\n props,\n \"0\",\n undefined,\n previousLayout\n );\n return {\n ...props,\n ...layoutProps,\n type,\n children,\n };\n};\n\nfunction getLayoutProps(\n type: string,\n props: LayoutProps,\n path = \"0\",\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): LayoutProps {\n const {\n active: prevActive = 0,\n \"data-path\": dataPath,\n path: prevPath = dataPath,\n id: prevId,\n style: prevStyle,\n } = getProps(previousLayout);\n\n const prevMatch = typeOf(previousLayout) === type && path === prevPath;\n const id = prevMatch ? prevId : props.id ?? uuid();\n const active = type === \"Stack\" ? props.active ?? prevActive : undefined;\n\n const key = id;\n const style = prevMatch ? prevStyle : getStyle(type, props, parentType);\n return isLayoutComponent(type)\n ? { id, key, path, style, type, active }\n : { id, key, style, \"data-path\": path };\n}\n\nfunction getChildLayoutProps(\n type: string,\n props: LayoutProps,\n path: string,\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): [LayoutProps, ReactElement[]] {\n const layoutProps = getLayoutProps(\n type,\n props,\n path,\n parentType,\n previousLayout\n );\n\n if (props.layout && !previousLayout) {\n return [layoutProps, [layoutFromJson(props.layout, `${path}.0`)]];\n }\n\n const previousChildren =\n (previousLayout as any)?.children ?? previousLayout?.props?.children;\n const hasDynamicChildren = props.dropTarget && previousChildren;\n const children = hasDynamicChildren\n ? previousChildren\n : getLayoutChildren(type, props.children, path, previousChildren);\n return [layoutProps, children];\n}\n\nfunction getLayoutChildren(\n type: string,\n children?: ReactElement[],\n path = \"0\",\n previousChildren?: ReactElement[]\n) {\n const kids = Array.isArray(children)\n ? children\n : React.isValidElement(children)\n ? [children]\n : [];\n return isContainer(type)\n ? kids.map((child, i) => {\n const childType = typeOf(child) as string;\n const previousType = typeOf(previousChildren?.[i]);\n\n if (!previousType || childType === previousType) {\n const [layoutProps, children] = getChildLayoutProps(\n childType,\n child.props,\n `${path}.${i}`,\n type,\n previousChildren?.[i]\n );\n return React.cloneElement(child, layoutProps, children);\n }\n\n return previousChildren?.[i];\n })\n : children;\n}\n\nconst getStyle = (\n type: string,\n props: LayoutProps,\n parentType?: string | null\n) => {\n let { style = theKidHasNoStyle } = props;\n if (type === \"Flexbox\") {\n style = {\n flexDirection: props.column ? \"column\" : \"row\",\n ...style,\n display: \"flex\",\n };\n }\n\n if (style.flex) {\n const { flex, ...otherStyles } = style;\n style = {\n ...otherStyles,\n ...expandFlex(typeof flex === \"number\" ? flex : 0),\n };\n } else if (parentType === \"Stack\") {\n style = {\n ...style,\n ...expandFlex(1),\n };\n } else if (\n parentType === \"Flexbox\" &&\n (style.width || style.height) &&\n style.flexBasis === undefined\n ) {\n style = {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n\n return style;\n};\n\nexport function layoutFromJson(\n { id = uuid(), type, children, props, state }: LayoutJSON,\n path: string\n): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : ComponentRegistry[type];\n\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create component from JSON, unknown type ${type}`\n );\n }\n\n if (state) {\n setPersistentState(id, state);\n }\n\n return React.createElement(\n componentType,\n {\n id,\n ...props,\n key: id,\n path,\n },\n children\n ? children.map((child, i) => layoutFromJson(child, `${path}.${i}`))\n : undefined\n );\n}\n\nexport function layoutToJSON(component: ReactElement) {\n return componentToJson(component);\n}\n\nexport function componentToJson(component: ReactElement): LayoutJSON {\n const type = typeOf(component) as string;\n const { id, children, type: _omit, ...props } = getProps(component);\n\n const state = hasPersistentState(id) ? getPersistentState(id) : undefined;\n\n return {\n id,\n type,\n props: serializeProps(props as LayoutProps),\n state,\n children: React.Children.map(children, componentToJson),\n };\n}\n\nexport function serializeProps(props?: LayoutProps) {\n if (props) {\n const { path, ...otherProps } = props;\n const result: { [key: string]: any } = {};\n for (const [key, value] of Object.entries(otherProps)) {\n result[key] = serializeValue(value);\n }\n return result;\n }\n}\n\nfunction serializeValue(value: unknown): any {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map(serializeValue);\n } else if (typeof value === \"object\" && value !== null) {\n const result: { [key: string]: any } = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = serializeValue(v);\n }\n return result;\n }\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\n\n/**\n * Persistent state is stored at module level (i.e singleton-style)\n * It is kept at this level, rather than passed to the target component(s)\n * so that it endures across the unmount/mount lifecycle journey of any\n * individual component. e.g when switching between tabs, components are\n * unmounted and mounted. They re-request their persistent state on (re-)mount.\n * Persistent state is populated as the serialized layout schema is processed\n * (see layoutFromJSON).\n */\nconst persistentState = new Map<string, any>();\nconst sessionState = new Map<string, any>();\n\nexport const getPersistentState = (id: string) => persistentState.get(id);\nexport const hasPersistentState = (id: string) => persistentState.has(id);\nexport const setPersistentState = (id: string, value: any) =>\n persistentState.set(id, value);\n\nexport const usePersistentState = () => {\n const loadSessionState = useCallback((id, key) => {\n const state = sessionState.get(id);\n if (state) {\n if (key !== undefined && state[key] !== undefined) {\n return state[key];\n }\n if (key !== undefined) {\n return undefined;\n }\n return state;\n }\n }, []);\n\n const saveSessionState = useCallback((id, key, data) => {\n if (key === undefined) {\n sessionState.set(id, data);\n } else if (sessionState.has(id)) {\n const state = sessionState.get(id);\n sessionState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n sessionState.set(id, { [key]: data });\n }\n }, []);\n\n const purgeSessionState = useCallback((id: string, key?: string) => {\n if (sessionState.has(id)) {\n if (key === undefined) {\n sessionState.delete(id);\n } else {\n const state = sessionState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = sessionState.get(id);\n if (Object.keys(rest).length > 0) {\n sessionState.set(id, rest);\n } else {\n sessionState.delete(id);\n }\n }\n }\n }\n }, []);\n\n const loadState = useCallback((id: string, key?: string) => {\n const state = persistentState.get(id);\n if (state) {\n if (key !== undefined) {\n return state[key];\n }\n return state;\n }\n }, []);\n\n const saveState = useCallback(\n (id: string, key: string | undefined, data: unknown) => {\n if (key === undefined) {\n persistentState.set(id, data);\n } else if (persistentState.has(id)) {\n const state = persistentState.get(id);\n persistentState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n persistentState.set(id, { [key]: data });\n }\n },\n []\n );\n\n const purgeState = useCallback((id: string, key?: string) => {\n if (persistentState.has(id)) {\n if (key === undefined) {\n persistentState.delete(id);\n } else {\n const state = persistentState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = persistentState.get(id);\n if (Object.keys(rest).length > 0) {\n persistentState.set(id, rest);\n } else {\n persistentState.delete(id);\n }\n }\n }\n }\n }, []);\n\n return {\n loadSessionState,\n loadState,\n saveSessionState,\n saveState,\n purgeState,\n purgeSessionState,\n };\n};\n", "import { cloneElement, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { MoveChildAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function moveChild(\n layoutRoot: ReactElement,\n { fromIndex, path, toIndex }: MoveChildAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children } = getProps(target);\n const replacementChildren = moveChildWithinChildren(\n children,\n fromIndex,\n toIndex\n );\n const replacement = cloneElement(target, undefined, replacementChildren);\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction moveChildWithinChildren(\n children: ReactElement[],\n fromIndex: number,\n toIndex: number\n) {\n const newChildren = children.slice();\n const [child] = newChildren.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newChildren.concat(child);\n } else {\n newChildren.splice(toIndex, 0, child);\n return newChildren;\n }\n}\n", "import React, { ReactElement } from 'react';\nimport { Action } from '../layout-action';\nimport { getProp, getProps, nextStep } from '../utils';\nimport { ReplaceAction } from './layoutTypes';\nimport { applyLayoutProps, LayoutProps } from './layoutUtils';\n\nexport function replaceChild(model: ReactElement, { target, replacement }: ReplaceAction) {\n return _replaceChild(model, target, replacement);\n}\n\nexport function _replaceChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement<LayoutProps>\n) {\n const path = getProp(child, 'path');\n const resizeable = getProp(child, 'resizeable');\n const { style } = getProps(child);\n const newChild =\n applyLayoutProps(\n React.cloneElement(replacement, {\n resizeable,\n style: {\n ...style,\n ...replacement.props.style\n }\n }),\n path\n );\n\n return swapChild(model, child, newChild);\n}\n\nexport function swapChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement,\n op?: 'maximize' | 'minimize' | 'restore'\n): ReactElement {\n if (model === child) {\n return replacement;\n }\n \n const { idx, finalStep } = nextStep(getProp(model, 'path'), getProp(child, 'path'));\n const children = model.props.children.slice();\n \n if (finalStep) {\n if (!op) {\n children[idx] = replacement;\n } else if (op === Action.MINIMIZE) {\n children[idx] = minimize(model, children[idx]);\n } else if (op === Action.RESTORE) {\n children[idx] = restore(children[idx]);\n }\n } else {\n children[idx] = swapChild(children[idx], child, replacement, op);\n }\n return React.cloneElement(model, undefined, children);\n}\n\nfunction minimize(parent: ReactElement, child: ReactElement) {\n const { style: parentStyle } = getProps(parent);\n const { style: childStyle } = getProps(child);\n\n const { width, height, flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const restoreStyle = {\n width,\n height,\n flexBasis,\n flexShrink,\n flexGrow\n };\n\n const style = {\n ...rest,\n flexBasis: 0,\n flexGrow: 0,\n flexShrink: 0\n };\n const collapsed =\n parentStyle.flexDirection === 'row'\n ? 'vertical'\n : parentStyle.flexDirection === 'column'\n ? 'horizontal'\n : false;\n\n if (collapsed) {\n return React.cloneElement(child, {\n collapsed,\n restoreStyle,\n style\n });\n }\n return child;\n}\n\nfunction restore(child: ReactElement) {\n const { style: childStyle, restoreStyle } = getProps(child);\n\n const { flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const style = {\n ...rest,\n ...restoreStyle\n };\n\n return React.cloneElement(child, {\n collapsed: false,\n style,\n restoreStyle: undefined\n });\n}\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport React, { ReactElement } from 'react';\nimport { createPlaceHolder } from './flexUtils';\nimport { swapChild } from './replace-layout-element';\n\nimport {\n followPath,\n followPathToParent,\n getProp,\n getProps,\n nextStep,\n resetPath,\n typeOf\n} from '../utils';\nimport { RemoveAction } from './layoutTypes';\n\nexport function removeChild(layoutRoot: ReactElement, { path }: RemoveAction) {\n const target = followPath(layoutRoot, path!) as ReactElement;\n let targetParent = followPathToParent(layoutRoot, path!);\n if (targetParent === null) {\n return layoutRoot;\n }\n const { children } = getProps(targetParent);\n if (children.length > 1 && allOtherChildrenArePlaceholders(children, path)) {\n const {\n style: { flexBasis, display, flexDirection, ...style }\n } = getProps(targetParent);\n let containerPath = getProp(targetParent, 'path');\n let newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n while ((targetParent = followPathToParent(newLayout, containerPath))) {\n if (getProp(targetParent, 'path') === '0') {\n break;\n }\n const { children } = getProps(targetParent);\n if (allOtherChildrenArePlaceholders(children)) {\n containerPath = getProp(targetParent, 'path');\n const {\n style: { flexBasis, display, flexDirection, ...style }\n } = getProps(targetParent);\n newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n } else if (hasAdjacentPlaceholders(children)) {\n newLayout = collapsePlaceholders(layoutRoot, targetParent as ReactElement);\n } else {\n break;\n }\n }\n return newLayout;\n }\n return _removeChild(layoutRoot, target);\n}\n\nfunction _removeChild(container: ReactElement, child: ReactElement): ReactElement {\n const props = getProps(container)\n const { children: componentChildren, path, preserve } = props\n let { active } = props\n const { idx, finalStep } = nextStep(path, getProp(child, 'path'));\n const type = typeOf(container) as string;\n let children = componentChildren.slice() as ReactElement[];\n \n if (finalStep) {\n children.splice(idx, 1);\n if (active !== undefined && active >= idx) {\n active = Math.max(0, active - 1);\n }\n\n if (children.length === 1 && !preserve && path !== '0' && type.match(/Flexbox|Stack/)) {\n return unwrap(container, children[0]);\n }\n\n if (!children.some(isFlexible) && children.some(canBeMadeFlexible)) {\n children = makeFlexible(children);\n }\n } else {\n children[idx] = _removeChild(children[idx], child) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, { active }, children);\n}\n\nfunction unwrap(container: ReactElement, child: ReactElement) {\n const type = typeOf(container);\n const {\n path,\n style: { flexBasis, flexGrow, flexShrink, width, height }\n } = getProps(container);\n\n let unwrappedChild = resetPath(child, path);\n if (path === '0') {\n unwrappedChild = React.cloneElement(unwrappedChild, {\n style: {\n ...child.props.style,\n width,\n height\n }\n });\n } else if (type === 'Flexbox') {\n const dim = container.props.style.flexDirection === 'column' ? 'height' : 'width';\n const {\n style: { [dim]: size, ...style }\n } = unwrappedChild.props;\n unwrappedChild = React.cloneElement(unwrappedChild, {\n flexFill: undefined,\n style: {\n ...style,\n flexGrow,\n flexShrink,\n flexBasis,\n width,\n height\n }\n });\n }\n return unwrappedChild;\n}\n\nconst isFlexible = (element: ReactElement) => {\n return element.props.style.flexGrow > 0;\n}\n\nconst canBeMadeFlexible = (element: ReactElement) => {\n const { width, height, flexGrow } = element.props.style;\n return flexGrow === 0 && typeof width !== 'number' && typeof height !== 'number';\n}\n\nconst makeFlexible = (children: ReactElement[]) => {\n return children.map((child) =>\n canBeMadeFlexible(child)\n ? React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexGrow: 1\n }\n })\n : child\n );\n}\n\nconst hasAdjacentPlaceholders = (children: ReactElement[]) => {\n if (children && children.length > 0) {\n let wasPlaceholder = getProp(children[0], 'placeholder');\n let isPlaceholder = false;\n for (let i = 1; i < children.length; i++) {\n isPlaceholder = getProp(children[i], 'placeholder');\n if (wasPlaceholder && isPlaceholder) {\n return true;\n }\n wasPlaceholder = isPlaceholder;\n }\n }\n};\n\nconst collapsePlaceholders = (container: ReactElement, target: ReactElement) => {\n const { children: componentChildren, path } = getProps(container);\n const { idx, finalStep } = nextStep(path, getProp(target, 'path'));\n let children = componentChildren.slice() as ReactElement[];\n if (finalStep) {\n children[idx] = _collapsePlaceHolders(target);\n } else {\n children[idx] = collapsePlaceholders(children[idx], target) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, undefined, children);\n};\n\nconst _collapsePlaceHolders = (container: ReactElement) => {\n const { children } = getProps(container);\n const newChildren = [];\n const placeholders: ReactElement[] = [];\n\n for (let i = 0; i < children.length; i++) {\n if (getProp(children[i], 'placeholder')) {\n placeholders.push(children[i]);\n } else {\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n placeholders.length = 0;\n }\n newChildren.push(children[i]);\n }\n }\n\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n }\n\n const containerPath = getProp(container, 'path');\n return React.cloneElement(\n container,\n undefined,\n newChildren.map((child, i) => resetPath(child, `${containerPath}.${i}`))\n );\n};\n\nconst mergePlaceholders = ([placeholder, ...placeholders]: ReactElement[]) => {\n const targetStyle = getProp(placeholder, 'style');\n let { flexBasis, flexGrow, flexShrink } = targetStyle;\n for (const {\n props: { style }\n } of placeholders) {\n flexBasis += style.flexBasis;\n flexGrow = Math.max(flexGrow, style.flexGrow);\n flexShrink = Math.max(flexShrink, style.flexShrink);\n }\n return React.cloneElement(placeholder, {\n style: { ...targetStyle, flexBasis, flexGrow, flexShrink }\n });\n};\n\nconst allOtherChildrenArePlaceholders = (children: ReactElement[], path?: string) =>\n children.every(\n (child) => getProp(child, 'placeholder') || (path && getProp(child, 'path') === path)\n );\n", "import React, { CSSProperties, ReactElement } from \"react\";\nimport { dimension } from \"../common-types\";\nimport { followPath, getProps } from \"../utils\";\nimport { LayoutResizeAction, SplitterResizeAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function resizeFlexChild(\n layoutRoot: ReactElement,\n { path, size }: LayoutResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n\n const { style } = getProps(target);\n\n const newStyle = {\n ...style,\n width: size,\n };\n\n // const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n // const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(target, { style: newStyle });\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nexport function resizeFlexChildren(\n layoutRoot: ReactElement,\n { path, sizes }: SplitterResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children, style } = getProps(target);\n\n const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(\n target,\n undefined,\n replacementChildren\n );\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction applySizesToChildren(\n children: ReactElement[],\n sizes: { currentSize: number; flexBasis: number }[],\n dimension: dimension\n) {\n return children.map((child, i) => {\n const {\n style: { [dimension]: size, flexBasis: actualFlexBasis },\n } = getProps(child);\n const meta = sizes[i];\n const { currentSize, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n const newSize = hasCurrentSize ? meta.currentSize : flexBasis;\n\n if (\n newSize === undefined ||\n size === newSize ||\n actualFlexBasis === newSize\n ) {\n return child;\n }\n return React.cloneElement(child, {\n style: applySizeToChild(child.props.style, dimension, newSize),\n });\n });\n}\n\nfunction applySizeToChild(\n style: CSSProperties,\n dimension: dimension,\n newSize: number\n) {\n const hasSize = typeof style[dimension] === \"number\";\n const { flexShrink = 1, flexGrow = 1 } = style;\n return {\n ...style,\n [dimension]: hasSize ? newSize : \"auto\",\n flexBasis: hasSize ? \"auto\" : newSize,\n flexShrink,\n flexGrow,\n };\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { rectTuple } from \"../common-types\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createFlexbox,\n createPlaceHolder,\n flexDirection,\n getFlexStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport { applyLayoutProps, LayoutProps } from \"./layoutUtils\";\n\nexport interface LayoutSpec {\n type: \"Stack\" | \"Flexbox\";\n flexDirection: \"column\" | \"row\";\n showTabs?: boolean;\n}\n\nconst isHtmlElement = (component: LayoutModel) => {\n const [firstLetter] = typeOf(component) as string;\n return firstLetter === firstLetter.toLowerCase();\n};\n\nexport function wrap(\n container: ReactElement,\n existingComponent: any,\n newComponent: any,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: DropTarget[\"dropRect\"]\n): ReactElement {\n const { children: containerChildren, path: containerPath } =\n getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const children = finalStep\n ? updateChildren(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? wrap(\n child,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : child\n );\n\n return React.cloneElement(container, undefined, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: rectTuple\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n\n if (intrinsicSize?.width && intrinsicSize?.height) {\n if (clientRect === undefined || dropRect === undefined) {\n throw Error(\n \"wrap-layout-element, updateChildren clientRect and dropRect must both be available\"\n );\n }\n return wrapIntrinsicSizedComponent(\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n return wrapFlexComponent(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos\n );\n}\n\nfunction wrapFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos\n) {\n const { version = 0 } = getProps(newComponent);\n const existingComponentPath = getProp(existingComponent, \"path\");\n const {\n type,\n flexDirection,\n showTabs: showTabsProp,\n } = getLayoutSpecForWrapper(pos);\n const [style, existingComponentStyle, newComponentStyle] =\n getWrappedFlexStyles(\n type,\n existingComponent,\n newComponent,\n flexDirection,\n pos\n );\n const targetFirst = isTargetFirst(pos);\n const active = targetFirst ? 1 : 0;\n\n const newComponentProps = {\n resizeable: true,\n style: newComponentStyle,\n version: version + 1,\n };\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n const existingComponentProps = {\n [resizeProp]: true,\n style: existingComponentStyle,\n };\n\n const showTabs = type === \"Stack\" ? { showTabs: showTabsProp } : undefined;\n const splitterSize =\n type === \"Flexbox\"\n ? {\n splitterSize:\n (typeOf(container) === \"Flexbox\" && container.props.splitterSize) ??\n undefined,\n }\n : undefined;\n\n const id = uuid();\n const wrapper = React.createElement(\n ComponentRegistry[type],\n {\n active,\n id,\n key: id,\n path: getProp(existingComponent, \"path\"),\n flexFill: getProp(existingComponent, \"flexFill\"),\n ...splitterSize,\n ...showTabs,\n style,\n resizeable: getProp(existingComponent, \"resizeable\"),\n } as LayoutProps,\n targetFirst\n ? [\n resetPath(\n existingComponent,\n `${existingComponentPath}.0`,\n existingComponentProps\n ),\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.1`\n ),\n ]\n : [\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.0`\n ),\n resetPath(\n existingComponent,\n `${existingComponentPath}.1`,\n existingComponentProps\n ),\n ]\n );\n return containerChildren.map((child: ReactElement) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction wrapIntrinsicSizedComponent(\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const { flexDirection } = getLayoutSpecForWrapper(pos);\n const contraDirection = flexDirection === \"column\" ? \"row\" : \"column\";\n const targetFirst = isTargetFirst(pos);\n\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n const [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n const pathRoot = getProp(existingComponent, \"path\");\n let pathIndex = 0;\n\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n\n const wrappedChildren = [];\n if (startPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: startPlaceholder, flexGrow: 1, flexShrink: 1 },\n })\n : createPlaceHolder(`${pathRoot}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n wrappedChildren.push(\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n `${pathRoot}.${pathIndex++}`,\n clientRect,\n dropRect\n )\n );\n if (endPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? createPlaceHolder(`${pathRoot}.${pathIndex++}`, 0)\n : resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: 0, flexGrow: 1, flexShrink: 1 },\n })\n );\n }\n\n const wrapper = createFlexbox(\n flexDirection,\n existingComponent.props,\n wrappedChildren,\n pathRoot\n );\n return containerChildren.map((child) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction getWrappedFlexStyles(\n type: string,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n flexDirection: flexDirection,\n pos: DropPos\n) {\n const style = {\n ...existingComponent.props.style,\n flexDirection,\n };\n\n const dimension =\n type === \"Flexbox\" && flexDirection === \"column\" ? \"height\" : \"width\";\n const newComponentStyle = getFlexStyle(newComponent, dimension, pos);\n const existingComponentStyle = getFlexStyle(existingComponent, dimension);\n\n return [style, existingComponentStyle, newComponentStyle];\n}\n\nconst isTargetFirst = (pos: DropPos) =>\n pos.position.SouthOrEast\n ? true\n : pos?.tab?.positionRelativeToTab === \"before\"\n ? false\n : pos.position.Header\n ? true\n : false;\n\nfunction getLayoutSpecForWrapper(pos: DropPos): LayoutSpec {\n if (pos.position.Header) {\n return {\n type: \"Stack\",\n flexDirection: \"column\",\n showTabs: true,\n };\n } else {\n return {\n type: \"Flexbox\",\n flexDirection: pos.position.EastOrWest ? \"row\" : \"column\",\n };\n }\n}\n", "import { createContext, Dispatch } from 'react';\nimport { DragStartAction, LayoutReducerAction, SaveAction } from '../layout-reducer';\n\nconst unconfiguredLayoutProviderDispatch: LayoutProviderDispatch = (action) =>\n console.log(`dispatch ${action.type}, have you forgotten to provide a LayoutProvider ?`);\n\nexport type LayoutProviderDispatch = Dispatch<LayoutReducerAction | SaveAction | DragStartAction>;\n\nexport interface LayoutProviderContextProps {\n dispatchLayoutProvider: LayoutProviderDispatch;\n version: number;\n}\n\nexport const LayoutProviderContext = createContext<LayoutProviderContextProps>({\n dispatchLayoutProvider: unconfiguredLayoutProviderDispatch,\n version: -1\n});\n", "import { MutableRefObject, ReactElement, useCallback, useRef } from \"react\";\nimport {\n DragDropRect,\n DragEndCallback,\n Draggable,\n DragInstructions\n} from \"../drag-drop\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { getIntrinsicSize } from \"../layout-reducer/flexUtils\";\nimport { followPath } from \"../utils\";\nimport { LayoutProviderDispatch } from \"./LayoutProviderContext\";\n\nconst NO_INSTRUCTIONS = {} as DragInstructions;\nconst NO_OFFSETS: [number, number] = [0, 0];\n\ninterface CurrentDragAction extends Omit<DragStartAction, \"evt\" | \"type\"> {\n dragContainerPath: string;\n}\n\ninterface DragOperation {\n payload: ReactElement;\n originalCSS: string;\n dragRect: unknown;\n dragInstructions: DragInstructions;\n dragOffsets: [number, number];\n targetPosition: { left: number; top: number };\n}\n\nconst getDragElement = (\n rect: DragDropRect,\n id: string,\n dragElement?: HTMLElement\n): [HTMLElement, string, number, number] => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"vuuSimpleDraggableWrapper\";\n wrapper.classList.add(\n \"vuuSimpleDraggableWrapper\",\n \"salt-theme\",\n \"salt-density-medium\"\n );\n wrapper.dataset.dragging = \"true\";\n\n const div = dragElement ?? document.createElement(\"div\");\n div.id = id;\n\n wrapper.appendChild(div);\n document.body.appendChild(wrapper);\n const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;\n return [wrapper, cssText, rect.left, rect.top];\n};\n\nconst determineDragOffsets = (\n draggedElement: HTMLElement\n): [number, number] => {\n const { offsetParent } = draggedElement;\n if (offsetParent === null) {\n return NO_OFFSETS;\n } else {\n const { left: offsetLeft, top: offsetTop } =\n offsetParent.getBoundingClientRect();\n return [offsetLeft, offsetTop];\n }\n};\n\nexport const useLayoutDragDrop = (\n rootLayoutRef: MutableRefObject<ReactElement>,\n dispatch: LayoutProviderDispatch\n) => {\n const dragActionRef = useRef<CurrentDragAction>();\n const dragOperationRef = useRef<DragOperation>();\n const draggableHTMLElementRef = useRef<HTMLElement>();\n\n const handleDrag = useCallback((x, y) => {\n if (dragOperationRef.current && draggableHTMLElementRef.current) {\n const {\n dragOffsets: [offsetX, offsetY],\n targetPosition,\n } = dragOperationRef.current;\n const left = typeof x === \"number\" ? x - offsetX : targetPosition.left;\n const top = typeof y === \"number\" ? y - offsetY : targetPosition.top;\n if (left !== targetPosition.left || top !== targetPosition.top) {\n dragOperationRef.current.targetPosition.left = left;\n dragOperationRef.current.targetPosition.top = top;\n draggableHTMLElementRef.current.style.top = top + \"px\";\n draggableHTMLElementRef.current.style.left = left + \"px\";\n }\n }\n }, []);\n\n const handleDrop: DragEndCallback = useCallback((dropTarget) => {\n if (dragOperationRef.current) {\n const {\n dragInstructions,\n payload: draggedReactElement,\n originalCSS,\n } = dragOperationRef.current;\n dispatch({\n type: \"drag-drop\",\n draggedReactElement,\n dragInstructions,\n dropTarget,\n });\n\n console.log(`[useLayoutDragDrop]`, {\n dragInstructions,\n });\n if (draggableHTMLElementRef.current) {\n if (dragInstructions.RemoveDraggableOnDragEnd) {\n document.body.removeChild(draggableHTMLElementRef.current);\n } else {\n draggableHTMLElementRef.current.style.cssText = originalCSS;\n delete draggableHTMLElementRef.current.dataset.dragging;\n }\n }\n\n dragActionRef.current = undefined;\n dragOperationRef.current = undefined;\n draggableHTMLElementRef.current = undefined;\n }\n }, [dispatch]);\n\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n if (dragActionRef.current) {\n const {\n payload: component,\n dragContainerPath,\n dragElement,\n dragRect,\n instructions = NO_INSTRUCTIONS,\n path,\n } = dragActionRef.current;\n const { current: rootLayout } = rootLayoutRef;\n const dragPos = { x: evt.clientX, y: evt.clientY };\n const dragPayload = component ?? followPath(rootLayout, path, true);\n const { id: dragPayloadId } = dragPayload.props;\n const intrinsicSize = getIntrinsicSize(dragPayload);\n let originalCSS = \"\",\n dragCSS = \"\",\n dragTransform = \"\";\n\n let dragStartLeft = -1;\n let dragStartTop = -1;\n let dragOffsets: [number, number] = NO_OFFSETS;\n\n let element = document.getElementById(dragPayloadId);\n\n if (element === null) {\n [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(\n dragRect,\n dragPayloadId,\n dragElement\n );\n } else {\n dragOffsets = determineDragOffsets(element);\n const [offsetLeft, offsetTop] = dragOffsets;\n const { width, height, left, top } = element.getBoundingClientRect();\n dragStartLeft = left - offsetLeft;\n dragStartTop = top - offsetTop;\n dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;\n element.dataset.dragging = \"true\";\n originalCSS = element.style.cssText;\n }\n\n dragTransform = Draggable.initDrag(\n rootLayoutRef.current,\n dragContainerPath,\n dragRect,\n dragPos,\n {\n drag: handleDrag,\n drop: handleDrop,\n },\n intrinsicSize\n // dropTargets\n );\n\n element.style.cssText = dragCSS + dragTransform;\n draggableHTMLElementRef.current = element;\n\n dragOperationRef.current = {\n payload: dragPayload,\n originalCSS,\n dragRect,\n dragOffsets,\n dragInstructions: instructions,\n targetPosition: { left: dragStartLeft, top: dragStartTop },\n };\n }\n },\n [handleDrag, handleDrop, rootLayoutRef]\n );\n\n const prepareToDrag = useCallback(\n (action: DragStartAction) => {\n const { evt, ...options } = action;\n console.log(`prepare to drag`, {\n options,\n });\n dragActionRef.current = {\n ...options,\n dragContainerPath: \"\",\n };\n Draggable.handleMousedown(evt, handleDragStart, options.instructions);\n },\n [handleDragStart]\n );\n\n return prepareToDrag;\n};\n", "import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { ForwardedRef, forwardRef, useMemo } from \"react\";\nimport { useBreakpoints } from \"../responsive\";\nimport { asReactElements } from \"../utils\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport \"./FluidGrid.css\";\nimport { useResponsiveSizing } from \"./useResponsiveSizing\";\n\nconst classBase = \"hwFluidGrid\";\n\nexport interface FluidGridProps extends FlexboxProps {\n showGrid?: boolean;\n}\n\nexport const FluidGrid = forwardRef(function FluidGrid(\n props: FluidGridProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children: childrenProp,\n column,\n cols: colsProp = 12,\n className: classNameProp,\n flexFill,\n gap = 3,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n showGrid,\n spacing,\n splitterSize,\n style: styleProp,\n ...rest\n } = props;\n\n //TODO does thie useMemo serve any actual purpose or will childrenProp\n // always be new anyway ?\n const children = useMemo(() => {\n return asReactElements(childrenProp);\n }, [childrenProp]);\n\n const { cols, content, rootRef } = useResponsiveSizing({\n children,\n cols: colsProp,\n style: styleProp,\n });\n\n const breakpoint = useBreakpoints(\n {\n breakPoints,\n },\n rootRef\n );\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n [`${classBase}-show-grid`]: showGrid,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n const style = {\n ...styleProp,\n \"--spacing\": spacing,\n \"--grid-col-count\": cols,\n \"--grid-gap\": gap,\n };\n\n return (\n <div\n {...rest}\n className={className}\n data-breakpoint={breakpoint}\n data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={style}\n >\n {content}\n </div>\n );\n});\nFluidGrid.displayName = \"FluidGrid\";\n", "import { RefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useResizeObserver } from \"./useResizeObserver\";\nimport {\n BreakPointRamp,\n breakpointRamp,\n getBreakPoints as getDocumentBreakpoints,\n} from \"./breakpoints\";\nimport { BreakPoint, BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nconst EMPTY_ARRAY: BreakPoint[] = [];\n\nexport interface BreakpointsHookProps {\n breakPoints?: BreakPointsProp;\n smallerThan?: string;\n}\n\n// TODO how do we cater for smallerThan/greaterThan breakpoints\nexport const useBreakpoints = (\n { breakPoints: breakPointsProp, smallerThan }: BreakpointsHookProps,\n ref: RefObject<HTMLElement>\n) => {\n const [breakpointMatch, setBreakpointmatch] = useState(\n smallerThan ? false : \"lg\"\n );\n const bodyRef = useRef(document.body);\n const breakPointsRef = useRef<BreakPointRamp[]>(\n breakPointsProp ? breakpointRamp(breakPointsProp) : getDocumentBreakpoints()\n );\n\n // TODO how do we identify the default\n const sizeRef = useRef(\"lg\");\n\n const stopFromMinWidth = useCallback(\n (w) => {\n if (breakPointsRef.current) {\n for (const [name, size] of breakPointsRef.current) {\n if (w >= size) {\n return name;\n }\n }\n }\n },\n [breakPointsRef]\n );\n\n const matchSizeAgainstBreakpoints = useCallback(\n (width) => {\n if (smallerThan) {\n const breakPointRamp = breakPointsRef.current.find(\n ([name]: BreakPointRamp) => name === smallerThan\n );\n if (breakPointRamp) {\n const [, , maxValue] = breakPointRamp;\n return width < maxValue;\n }\n } else {\n return stopFromMinWidth(width);\n }\n // is this right ?\n return width;\n },\n [smallerThan, stopFromMinWidth]\n );\n\n // TODO need to make the dimension a config\n useResizeObserver(\n ref || bodyRef,\n breakPointsRef.current ? [\"width\"] : EMPTY_ARRAY,\n ({ width: measuredWidth }: { width?: number }) => {\n const result = matchSizeAgainstBreakpoints(measuredWidth);\n if (result !== sizeRef.current) {\n sizeRef.current = result;\n setBreakpointmatch(result);\n }\n },\n true\n );\n\n useEffect(() => {\n const target = ref || bodyRef;\n if (target.current) {\n const prevSize = sizeRef.current;\n if (breakPointsRef.current) {\n // We're measuring here when the resizeObserver has also measured\n // There isn't a convenient way to get the Resizeobserver to\n // notify initial size - that's not really its job, unless we\n // set a flag ?\n const { clientWidth } = target.current;\n const result = matchSizeAgainstBreakpoints(clientWidth);\n sizeRef.current = result;\n // If initial size of ref does not match the default, notify client after render\n if (result !== prevSize) {\n setBreakpointmatch(result);\n }\n }\n }\n }, [setBreakpointmatch, matchSizeAgainstBreakpoints, ref]);\n\n // No, just ass the class directly to the ref, no need to render\n return breakpointMatch;\n};\n", "/* eslint-disable no-restricted-syntax */\nimport { useCallback, useLayoutEffect, useRef, RefObject } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nexport const resizeObserver = new ResizeObserver(\n (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize && onResize(measurements);\n }\n }\n }\n }\n);\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n): void {\n console.log(`resizeObserver container`, {\n ref: ref.current,\n });\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { fonts } = document as any;\n if (fonts) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n await fonts.ready;\n }\n if (!cleanedUp) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize, onResize]);\n\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n", "// should we have some global; defaults ?\n\nimport { BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nexport type BreakPointRamp = [string, number, number];\n\nfunction breakpointReader(\n themeName: string,\n defaultBreakpoints?: BreakPointsProp\n) {\n //TODO ownerDocument\n const themeRoot = document.body.querySelector(`.${themeName}`);\n const handler = {\n get: function (style: CSSStyleDeclaration, stopName: string) {\n const val = style.getPropertyValue(\n // lets assume we have the following naming convention\n `--${themeName}-breakpoint-${stopName}`\n );\n return val ? parseInt(val) : undefined;\n },\n };\n\n return themeRoot\n ? new Proxy(getComputedStyle(themeRoot), handler)\n : defaultBreakpoints ?? {};\n}\n\nconst byDescendingStopSize = (\n [, s1]: [string, number],\n [, s2]: [string, number]\n) => s2 - s1;\n\n// These are assumed to be min-width (aka mobile-first) stops, we could take a\n// paramneter to support max-width as well ?\n// return [stopName, minWidth, maxWidth]\nexport const breakpointRamp = (\n breakpoints: BreakPointsProp\n): BreakPointRamp[] =>\n Object.entries(breakpoints)\n .sort(byDescendingStopSize)\n .map(([name, value], i, all) => [\n name,\n value,\n i < all.length - 1 ? all[i + 1][1] : 9999,\n ]);\n\nlet documentBreakpoints: BreakPointRamp[] | null = null;\n\nconst loadBreakpoints = (themeName = \"salt\") => {\n // TODO would be nice to read these breakpoint labels from a css variable to\n // avoid hard-coding them here ?\n const { xs, sm, md, lg, xl } = breakpointReader(themeName) as BreakPointsProp;\n return breakpointRamp({ xs, sm, md, lg, xl });\n};\n\n//TODO support multiple themes loaded\nexport const getBreakPoints = (themeName?: string) => {\n if (documentBreakpoints === null) {\n documentBreakpoints = loadBreakpoints(themeName);\n }\n return documentBreakpoints;\n};\n", "const COLLAPSIBLE = 'data-collapsible';\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n 'data-pad-start': true,\n 'data-pad-end': true\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: 'dynamic',\n instant: 'instant',\n true: 'instant'\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? 'none';\n\ntype Props = { [key: string]: any };\nexport const extractResponsiveProps = (props: Props) => {\n return Object.keys(props).reduce<[Props, Props]>(\n (result, propName) => {\n const [toolbarProps, rest] = result;\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return result;\n },\n [{}, {}]\n );\n};\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport {\n cloneElement,\n CSSProperties,\n isValidElement,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { gatherChildMeta } from \"./flexbox-utils\";\nimport { BreakPoint } from \"./flexboxTypes\";\n\nconst breakPoints: BreakPoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"];\n\nconst DEFAULT_COLS = 12;\n\nexport const useResponsiveSizing = ({\n children: childrenProp,\n cols: colsProp,\n style,\n}: {\n children: ReactElement[];\n cols?: number;\n style?: CSSProperties;\n}) => {\n const rootRef = useRef(null);\n const metaRef = useRef(null);\n const contentRef = useRef<ReactElement[]>();\n const cols = colsProp ?? DEFAULT_COLS;\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const buildContent = useCallback(\n (children, dimension): [ReactElement[], any] => {\n const childMeta = gatherChildMeta(children, dimension, breakPoints);\n const content = [];\n const meta = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const {\n style: { flex, ...rest },\n } = child.props;\n content.push(\n cloneElement(child, {\n key: getUniqueId(),\n style: {\n ...rest,\n \"--parent-col-count\": cols,\n },\n })\n );\n meta.push(childMeta[i]);\n }\n return [content, meta];\n },\n [cols]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(children, dimension);\n metaRef.current = meta;\n contentRef.current = content;\n }, [buildContent, children, dimension]);\n\n return {\n cols,\n content: contentRef.current,\n rootRef,\n };\n};\n", "import { registerComponent } from '../registry/ComponentRegistry';\nimport { FluidGrid, FluidGridProps } from './FluidGrid';\n\nexport const FluidGridLayout = function FluidGridLayout(props: FluidGridProps) {\n return <FluidGrid {...props} />;\n};\nFluidGridLayout.displayName = 'FluidGrid';\n\nregisterComponent('FluidGrid', FluidGridLayout, 'container');\n", "import { EditableLabel } from \"@vuu-ui/vuu-ui-controls\";\nimport { Button } from \"@salt-ds/core\";\nimport { CloseIcon } from \"@salt-ds/icons\";\nimport { default as classnames, default as cx } from \"classnames\";\nimport React, {\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useRef,\n useState,\n} from \"react\";\nimport { Contribution, useViewDispatch } from \"../layout-view\";\n\nimport \"./Header.css\";\n\nexport interface HeaderProps extends HTMLAttributes<HTMLDivElement> {\n collapsed?: boolean;\n contributions?: Contribution[];\n expanded?: boolean;\n closeable?: boolean;\n onEditTitle: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n tearOut?: boolean;\n}\n\nexport const Header = ({\n className: classNameProp,\n contributions,\n collapsed,\n closeable,\n onEditTitle,\n orientation: orientationProp = \"horizontal\",\n style,\n title = \"Untitled\",\n}: HeaderProps) => {\n const labelFieldRef = useRef<HTMLDivElement>(null);\n const [value, setValue] = useState<string>(title);\n const [editing, setEditing] = useState<boolean>(false);\n\n const viewDispatch = useViewDispatch();\n const handleClose = (evt: MouseEvent) =>\n viewDispatch?.({ type: \"remove\" }, evt);\n const classBase = \"vuuHeader\";\n\n const handleTitleMouseDown = () => {\n labelFieldRef.current?.focus();\n };\n\n const handleButtonMouseDown = (evt: MouseEvent) => {\n // do not allow drag to be initiated\n evt.stopPropagation();\n };\n\n const orientation = collapsed || orientationProp;\n\n const className = classnames(\n classBase,\n classNameProp,\n `${classBase}-${orientation}`\n );\n\n const handleEnterEditMode = () => {\n setEditing(true);\n };\n\n const handleTitleKeyDown = (evt: KeyboardEvent<HTMLDivElement>) => {\n if (evt.key === \"Enter\") {\n setEditing(true);\n }\n };\n\n const handleExitEditMode = (\n originalValue = \"\",\n finalValue = \"\",\n allowDeactivation = true,\n editCancelled = false\n ) => {\n setEditing(false);\n if (editCancelled) {\n setValue(originalValue);\n } else if (finalValue !== originalValue) {\n setValue(finalValue);\n onEditTitle?.(finalValue);\n }\n if (allowDeactivation === false) {\n labelFieldRef.current?.focus();\n }\n };\n\n const handleMouseDown = (e: MouseEvent) => {\n viewDispatch?.({ type: \"mousedown\" }, e);\n };\n\n const toolbarItems: ReactElement[] = [];\n const postTitleContributedItems: ReactElement[] = [];\n const actionButtons: ReactElement[] = [];\n\n contributions?.forEach((contribution, i) => {\n switch (contribution.location) {\n case \"pre-title\":\n toolbarItems.push(React.cloneElement(contribution.content, { key: i }));\n break;\n default:\n postTitleContributedItems.push(\n React.cloneElement(contribution.content, { key: i })\n );\n }\n });\n\n title &&\n toolbarItems.push(\n <EditableLabel\n editing={editing}\n key=\"title\"\n value={value}\n onChange={setValue}\n onMouseDownCapture={handleTitleMouseDown}\n onEnterEditMode={handleEnterEditMode}\n onExitEditMode={handleExitEditMode}\n onKeyDown={handleTitleKeyDown}\n ref={labelFieldRef}\n tabIndex={0}\n />\n );\n\n closeable &&\n actionButtons.push(\n <Button\n data-icon=\"close\"\n key=\"close\"\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n variant=\"secondary\"\n />\n );\n\n postTitleContributedItems.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"contributions\">\n {postTitleContributedItems}\n </div>\n );\n\n actionButtons.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"actions\">\n {actionButtons}\n </div>\n );\n\n return (\n <div\n className={cx(\"vuuToolbarProxy\", className)}\n style={style}\n onMouseDown={handleMouseDown}\n >\n {toolbarItems}\n {/* \n {collapsed === false ? (\n <ActionButton\n aria-label=\"Minimize View\"\n actionId=\"minimize\"\n iconName=\"minimize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {collapsed ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"double-chevron-right\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded === false ? (\n <ActionButton\n aria-label=\"Maximize View\"\n actionId=\"maximize\"\n iconName=\"maximize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"restore\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {tearOut ? (\n <ActionButton\n aria-label=\"Tear out View\"\n actionId=\"tearout\"\n iconName=\"tear-out\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {closeable ? (\n <Button\n aria-label=\"close\"\n data-icon\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null} */}\n </div>\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data\";\nimport {\n ReactElement,\n RefObject,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { ViewDispatch } from \"./ViewContext\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type ContributionLocation = \"post-title\" | \"pre-title\";\n\nexport type Contribution = {\n index?: number;\n location?: ContributionLocation;\n content: ReactElement;\n};\n\nexport const useViewActionDispatcher = (\n id: string,\n root: RefObject<HTMLDivElement>,\n viewPath?: string,\n dropTargets?: string[]\n): [ViewDispatch, Contribution[] | undefined] => {\n const { loadSessionState, purgeSessionState, purgeState, saveSessionState } =\n usePersistentState();\n\n const [contributions, setContributions] = useState<Contribution[]>(\n loadSessionState(id, \"contributions\") ?? []\n );\n const dispatchLayoutAction = useLayoutProviderDispatch();\n const updateContributions = useCallback(\n (location: ContributionLocation, content: ReactElement) => {\n const updatedContributions = contributions.concat([\n { location, content },\n ]);\n saveSessionState(id, \"contributions\", updatedContributions);\n setContributions(updatedContributions);\n },\n [contributions, id, saveSessionState]\n );\n\n const clearContributions = useCallback(() => {\n purgeSessionState(id, \"contributions\");\n setContributions([]);\n }, [id, purgeSessionState]);\n\n const handleRemove = useCallback(() => {\n const ds = loadSessionState(id, \"data-source\") as DataSource;\n if (ds) {\n ds.unsubscribe();\n }\n purgeSessionState(id);\n purgeState(id);\n dispatchLayoutAction({ type: \"remove\", path: viewPath });\n }, [\n dispatchLayoutAction,\n id,\n loadSessionState,\n purgeSessionState,\n purgeState,\n viewPath,\n ]);\n\n const handleMouseDown = useCallback(\n async (evt, index, preDragActivity): Promise<boolean> => {\n evt.stopPropagation();\n const dragRect = root.current?.getBoundingClientRect();\n return new Promise((resolve, reject) => {\n dispatchLayoutAction({\n type: \"drag-start\",\n evt,\n path: index === undefined ? viewPath : `${viewPath}.${index}`,\n dragRect,\n preDragActivity,\n dropTargets,\n resolveDragStart: resolve,\n rejectDragStart: reject,\n } as DragStartAction);\n });\n },\n [root, dispatchLayoutAction, viewPath, dropTargets]\n );\n\n const dispatchAction = useCallback(\n async <A extends ViewAction = ViewAction>(\n action: A,\n evt?: SyntheticEvent\n ): Promise<boolean | void> => {\n const { type } = action;\n switch (type) {\n case \"maximize\":\n case \"minimize\":\n case \"restore\":\n return dispatchLayoutAction({ type, path: action.path ?? viewPath });\n case \"remove\":\n return handleRemove();\n case \"mousedown\":\n return handleMouseDown(evt, action.index, action.preDragActivity);\n case \"add-toolbar-contribution\":\n return updateContributions(action.location, action.content);\n case \"remove-toolbar-contribution\":\n return clearContributions();\n default: {\n return undefined;\n }\n }\n },\n [\n dispatchLayoutAction,\n viewPath,\n handleRemove,\n handleMouseDown,\n updateContributions,\n clearContributions,\n ]\n );\n\n return [dispatchAction, contributions];\n};\n", "import { useForkRef, useIdMemo as useId } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Header as VuuHeader } from \"../layout-header/Header\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { useView } from \"./useView\";\nimport { useViewResize } from \"./useViewResize\";\nimport { ViewContext, ViewContextProps } from \"./ViewContext\";\nimport { ViewProps } from \"./viewTypes\";\n\nimport \"./View.css\";\n\nconst classBase = \"vuuView\";\n\ntype Props = { [key: string]: unknown };\n\nconst getProps = (state?: Props, props?: Props) => {\n if (state && props) {\n return {\n ...state,\n ...props,\n };\n } else return state || props;\n};\n\nconst View = forwardRef(function View(\n props: ViewProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const {\n Header = VuuHeader,\n children,\n className,\n collapsed,\n closeable,\n \"data-path\": dataPath,\n \"data-resizeable\": dataResizeable,\n dropTargets,\n expanded,\n flexFill,\n id: idProp,\n header,\n orientation = \"horizontal\",\n path = dataPath,\n resize = \"responsive\",\n resizeable = dataResizeable,\n tearOut,\n style = {},\n title: titleProp,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const rootRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const [componentProps, _setComponentProps] = useState<Props>();\n const {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n } = useView({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n });\n\n useViewResize({ mainRef, resize, rootRef });\n\n const setComponentProps = useCallback((props?: Props) => {\n _setComponentProps(props);\n }, []);\n\n const getContent = () => {\n if (React.isValidElement(children) && (restoredState || componentProps)) {\n return React.cloneElement(\n children,\n getProps(restoredState, componentProps)\n );\n }\n return children;\n };\n\n const viewContextValue: ViewContextProps = useMemo(\n () => ({\n dispatch: dispatchViewAction,\n id,\n path,\n title,\n load,\n loadSession,\n onConfigChange,\n purge,\n save,\n saveSession,\n setComponentProps,\n }),\n [\n dispatchViewAction,\n id,\n load,\n loadSession,\n onConfigChange,\n path,\n purge,\n save,\n saveSession,\n setComponentProps,\n title,\n ]\n );\n\n const headerProps = typeof header === \"object\" ? header : {};\n\n return (\n <div\n {...restProps}\n className={cx(classBase, className, {\n [`${classBase}-collapsed`]: collapsed,\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-resize-defer`]: resize === \"defer\",\n })}\n data-resizeable={resizeable}\n id={id}\n ref={useForkRef(forwardedRef, rootRef)}\n style={style}\n tabIndex={-1}\n >\n <ViewContext.Provider value={viewContextValue}>\n {header ? (\n <Header\n {...headerProps}\n collapsed={collapsed}\n contributions={contributions}\n expanded={expanded}\n closeable={closeable}\n onEditTitle={onEditTitle}\n orientation={orientation}\n tearOut={tearOut}\n title={title}\n />\n ) : null}\n <div className={`${classBase}-main`} ref={mainRef}>\n {getContent()}\n </div>\n </ViewContext.Provider>\n </div>\n );\n});\nView.displayName = \"View\";\n\ninterface ViewComponentType {\n (\n props: ViewProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n }\n ): ReactElement<ViewProps>;\n displayName?: string;\n}\n\nconst MemoView = React.memo(View) as ViewComponentType;\n\nMemoView.displayName = \"View\";\n\nregisterComponent(\"View\", MemoView, \"view\");\n\nexport { MemoView as View };\n", "import { RefObject, useCallback, useMemo } from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { useViewActionDispatcher } from \"./useViewActionDispatcher\";\n\nexport interface ViewHookProps {\n id: string;\n rootRef: RefObject<HTMLDivElement>;\n path?: string;\n dropTargets?: string[];\n title?: string;\n}\n\nexport const useView = ({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n}: ViewHookProps) => {\n const layoutDispatch = useLayoutProviderDispatch();\n\n const {\n loadState,\n loadSessionState,\n purgeState,\n saveState,\n saveSessionState,\n } = usePersistentState();\n\n const [dispatchViewAction, contributions] = useViewActionDispatcher(\n id,\n rootRef,\n path,\n dropTargets\n );\n\n const title = useMemo(\n () => loadState(\"view-title\") ?? titleProp,\n [loadState, titleProp]\n );\n\n const onEditTitle = useCallback(\n (title: string) => {\n if (path) {\n layoutDispatch({ type: \"set-title\", path, title });\n }\n },\n [layoutDispatch, path]\n );\n\n const restoredState = useMemo(() => loadState(id), [id, loadState]);\n\n const load = useCallback(\n (key?: string) => loadState(id, key),\n [id, loadState]\n );\n\n const purge = useCallback(\n (key) => {\n purgeState(id, key);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, purgeState]\n );\n\n const save = useCallback(\n (state, key) => {\n saveState(id, key, state);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, saveState]\n );\n const loadSession = useCallback(\n (key?: string) => loadSessionState(id, key),\n [id, loadSessionState]\n );\n const saveSession = useCallback(\n (state, key) => saveSessionState(id, key, state),\n [id, saveSessionState]\n );\n\n const onConfigChange = useCallback(\n ({ type: key, ...config }) => {\n const { [key]: data } = config;\n save(data, key);\n },\n [save]\n );\n\n return {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n };\n};\n", "import { useResizeObserver, WidthHeight } from \"../responsive\";\nimport { RefObject, useCallback, useRef } from \"react\";\n\nconst NO_MEASUREMENT: string[] = [];\n\ntype size = {\n height?: number;\n width?: number;\n};\n\nexport interface ViewResizeHookProps {\n mainRef: RefObject<HTMLDivElement>;\n resize?: \"defer\" | \"responsive\";\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport const useViewResize = ({\n mainRef,\n resize = \"responsive\",\n rootRef,\n}: ViewResizeHookProps) => {\n const deferResize = resize === \"defer\";\n\n const mainSize = useRef<size>({});\n const resizeHandle = useRef<number>();\n\n const setMainSize = useCallback(() => {\n if (mainRef.current) {\n mainRef.current.style.height = mainSize.current.height + \"px\";\n mainRef.current.style.width = mainSize.current.width + \"px\";\n }\n resizeHandle.current = undefined;\n }, [mainRef]);\n\n const onResize = useCallback(\n ({ height, width }) => {\n mainSize.current.height = height;\n mainSize.current.width = width;\n if (resizeHandle.current !== null) {\n clearTimeout(resizeHandle.current);\n }\n resizeHandle.current = window.setTimeout(setMainSize, 40);\n },\n [setMainSize]\n );\n\n useResizeObserver(\n rootRef,\n deferResize ? WidthHeight : NO_MEASUREMENT,\n onResize,\n deferResize\n );\n};\n", "import React, { SyntheticEvent, useContext } from \"react\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type ViewDispatch = <Action extends ViewAction = ViewAction>(\n action: Action,\n evt?: SyntheticEvent\n) => Promise<boolean | void>;\n\nexport interface ViewContextProps {\n dispatch?: ViewDispatch | null;\n id?: string;\n load?: (key?: string) => unknown;\n loadSession?: (key?: string) => unknown;\n onConfigChange?: (config: unknown) => void;\n path?: string;\n purge?: (key: string) => void;\n save?: (state: unknown, key: string) => void;\n saveSession?: (state: unknown, key: string) => void;\n setComponentProps: (props: { [key: string]: unknown }) => void;\n title?: string;\n}\n\nconst NO_CONTEXT = { dispatch: null } as ViewContextProps;\nexport const ViewContext = React.createContext<ViewContextProps>(NO_CONTEXT);\n\nexport const useViewDispatch = () => {\n const context = useContext(ViewContext);\n return context?.dispatch ?? null;\n};\n\nexport const useViewContext = () => useContext(ViewContext);\n", "import { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport { orientationType } from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n} from \"react\";\nimport { asReactElements } from \"../utils\";\nimport { OverflowItem } from \"./overflow-utils\";\nimport { useOverflowContainer } from \"./useOverflowContainer\";\n\nimport \"./OverflowContainer.css\";\n\nconst classBase = \"vuuOverflowContainer\";\n\nexport interface OverflowContainerProps extends HTMLAttributes<HTMLDivElement> {\n debugId?: string;\n height: number;\n onSwitchWrappedItemIntoView?: (overflowItem: OverflowItem) => void;\n orientation?: orientationType;\n overflowIcon?: string;\n}\n\nconst WrapContainer = React.memo(\n ({\n children,\n className: classNameProp,\n height: heightProp,\n onSwitchWrappedItemIntoView,\n orientation = \"horizontal\",\n overflowIcon,\n }: OverflowContainerProps) => {\n const childElements = asReactElements(children);\n const { menuActionHandler, menuBuilder, rootRef } = useOverflowContainer({\n itemCount: childElements.length,\n onSwitchWrappedItemIntoView,\n orientation,\n });\n\n const height = orientation === \"vertical\" ? \"100%\" : `${heightProp}px`;\n // TODO measure the height, if not provided\n const style = {\n \"--overflow-container-height\": `${height}`,\n } as CSSProperties;\n\n const className = cx(`${classBase}-wrapContainer`, classNameProp, {\n [`${classBase}-horizontal`]: orientation === \"horizontal\",\n [`${classBase}-vertical`]: orientation === \"vertical\",\n });\n\n return (\n <div className={className} ref={rootRef} style={style}>\n {childElements.map((childEl, i) => {\n const {\n \"data-overflow-priority\": overflowPriority = \"0\",\n id: itemId,\n label = `Item ${i + 1}`,\n } = childEl.props;\n return (\n <div\n className={cx(`${classBase}-item`)}\n data-index={i}\n data-label={label}\n data-overflow-priority={overflowPriority}\n id={`${itemId}-wrapper`}\n key={i}\n >\n {childEl}\n </div>\n );\n })}\n <div className={`${classBase}-OverflowIndicator`} data-index=\"overflow\">\n <PopupMenu\n icon={overflowIcon}\n menuBuilder={menuBuilder}\n menuActionHandler={menuActionHandler}\n />\n </div>\n </div>\n );\n }\n);\n\nWrapContainer.displayName = \"OverflowContainer.InnerContainer\";\n\nexport const OverflowContainer = forwardRef(function OverflowContainer(\n {\n children,\n className,\n height = 44,\n onSwitchWrappedItemIntoView,\n orientation,\n overflowIcon,\n ...htmlAttributes\n }: OverflowContainerProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n return (\n <div\n {...htmlAttributes}\n className={cx(cx(classBase, className))}\n ref={forwardedRef}\n >\n <WrapContainer\n height={height}\n orientation={orientation}\n overflowIcon={overflowIcon}\n onSwitchWrappedItemIntoView={onSwitchWrappedItemIntoView}\n >\n {children}\n </WrapContainer>\n </div>\n );\n});\n", "import { MenuActionHandler, MenuBuilder } from \"@vuu-ui/vuu-data-types\";\nimport { isValidNumber, MEASURES, orientationType } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport { useLayoutEffectSkipFirst } from \"../utils\";\nimport {\n applyOverflowClassToWrappedItems,\n removeOverflowIndicatorIfNoLongerNeeded,\n correctForWrappedHighPriorityItems,\n getNonWrappedAndWrappedItems,\n NO_WRAPPED_ITEMS,\n highPriorityItemsHaveWrappedButShouldNotHave,\n switchWrappedItemIntoView,\n OverflowItem,\n overflowIndicatorHasWrappedButShouldNotHave,\n correctForWrappedOverflowIndicator,\n} from \"./overflow-utils\";\n\nexport interface OverflowContainerHookProps {\n itemCount: number;\n onSwitchWrappedItemIntoView?: (overflowItem: OverflowItem) => void;\n orientation?: orientationType;\n}\n\nexport const useOverflowContainer = ({\n itemCount,\n onSwitchWrappedItemIntoView,\n orientation = \"horizontal\",\n}: OverflowContainerHookProps) => {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const wrappedItemsRef = useRef<OverflowItem[]>(NO_WRAPPED_ITEMS);\n\n const handleResize = useCallback(async () => {\n if (container) {\n let [nonWrapped, wrapped] = getNonWrappedAndWrappedItems(\n container,\n orientation\n );\n console.log({ nonWrapped, wrapped });\n applyOverflowClassToWrappedItems(container, wrapped);\n if (overflowIndicatorHasWrappedButShouldNotHave(wrapped)) {\n wrapped = await correctForWrappedOverflowIndicator(container, wrapped);\n }\n while (\n highPriorityItemsHaveWrappedButShouldNotHave(nonWrapped, wrapped)\n ) {\n [nonWrapped, wrapped] = await correctForWrappedHighPriorityItems(\n container,\n nonWrapped,\n wrapped\n );\n }\n if (wrapped.length === 1) {\n if (removeOverflowIndicatorIfNoLongerNeeded(container)) {\n wrapped = NO_WRAPPED_ITEMS;\n }\n }\n wrappedItemsRef.current = wrapped;\n }\n }, [container, orientation]);\n\n const hasOverflowItem = (\n opt: unknown\n ): opt is {\n overflowItem: OverflowItem;\n } => typeof opt === \"object\" && opt !== null && \"overflowItem\" in opt;\n\n const [menuBuilder, menuActionHandler] = useMemo((): [\n MenuBuilder,\n MenuActionHandler\n ] => {\n return [\n () => {\n const { current: menuItems } = wrappedItemsRef;\n return menuItems.map((item: OverflowItem) => {\n return {\n label: item.label,\n action: `activate-item-${item.index}`,\n options: { overflowItem: item },\n };\n });\n },\n ({ options }) => {\n if (container && hasOverflowItem(options)) {\n // TODO do we always want to switch it into view - leave that to caller\n const [, wrappedItems] = switchWrappedItemIntoView(\n container,\n options.overflowItem\n );\n wrappedItemsRef.current = wrappedItems;\n onSwitchWrappedItemIntoView?.(options.overflowItem);\n }\n return true;\n },\n ];\n }, [container, onSwitchWrappedItemIntoView]);\n\n const resizeObserver = useMemo(() => {\n const { sizeProp } = MEASURES[orientation];\n let currentSize = 0;\n return new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { [sizeProp]: size } = entry.contentRect;\n if (isValidNumber(size) && currentSize !== size) {\n currentSize = size;\n handleResize();\n }\n }\n });\n }, [handleResize, orientation]);\n\n useLayoutEffectSkipFirst(() => {\n handleResize();\n }, [handleResize, itemCount]);\n\n useMemo(() => {\n if (container) {\n resizeObserver.observe(container);\n }\n }, [container, resizeObserver]);\n\n const callbackRef = useCallback((el: HTMLDivElement | null) => {\n setContainer(el);\n }, []);\n\n return {\n menuActionHandler,\n menuBuilder,\n rootRef: callbackRef,\n };\n};\n", "import { orientationType } from \"@salt-ds/lab\";\n\nconst NON_WRAPPED_ITEM = \".vuuOverflowContainer-item:not(.wrapped)\";\n\nexport type OverflowItem = {\n index: string;\n label: string;\n overflowPriority: string;\n};\n\nexport const sortByScreenOrder = (elements: HTMLElement[]): HTMLElement[] =>\n elements.sort((e1, e2) => {\n const {\n dataset: { index: idx1 = \"?\" },\n } = e1;\n const {\n dataset: { index: idx2 = \"?\" },\n } = e2;\n const isOverflowed1 = e1.classList.contains(\"wrapped\");\n const isOverflowed2 = e2.classList.contains(\"wrapped\");\n const isOverflowedIndicator1 = idx1 === \"overflow\";\n const isOverflowedIndicator2 = idx2 === \"overflow\";\n if (isOverflowed1 && !isOverflowed2) {\n return 1;\n } else if (!isOverflowed1 && isOverflowed2) {\n return -1;\n }\n if (isOverflowedIndicator1) {\n return 1;\n } else if (isOverflowedIndicator2) {\n return -1;\n }\n return parseInt(idx1) > parseInt(idx2) ? 1 : -1;\n });\n\nexport const NO_WRAPPED_ITEMS: OverflowItem[] = [];\n\n/**\n Identify wrapped items by comparing position of each item. Any item\n not to the right of preceeding item has wrapped. Note: on-screen \n position of items does not necessarily match document position, due\n to use of css order. This is taken into account by sorting. \n TODO support Vertical orientation\n */\nexport const getNonWrappedAndWrappedItems = (\n container: HTMLElement,\n orientation: orientationType = \"horizontal\"\n): [OverflowItem[], OverflowItem[]] => {\n const nonWrappedItems: OverflowItem[] = [];\n const wrappedItems: OverflowItem[] = [];\n let currentPosition = -1;\n let overflowed = false;\n const sortedChildren = sortByScreenOrder(\n Array.from(container.children) as HTMLElement[]\n );\n const positionAttribute = orientation === \"vertical\" ? \"top\" : \"left\";\n for (const child of sortedChildren) {\n const element = child as HTMLElement;\n const {\n dataset: { index = \"?\", label = \"?\", overflowPriority = \"0\" },\n } = element;\n const { [positionAttribute]: position } = element.getBoundingClientRect();\n if (position <= currentPosition) {\n if (index === \"overflow\") {\n wrappedItems.push(nonWrappedItems.pop() as OverflowItem);\n } else {\n wrappedItems.push({ index, label, overflowPriority });\n }\n overflowed = true;\n } else if (overflowed) {\n wrappedItems.push({ index, label, overflowPriority });\n } else {\n nonWrappedItems.push({ index, label, overflowPriority });\n }\n currentPosition = position;\n }\n return [nonWrappedItems, wrappedItems];\n};\n\nexport const applyOverflowClassToWrappedItems = (\n container: HTMLElement,\n overflowedItems: OverflowItem[]\n) => {\n let ignoreOverflow = false;\n if (overflowedItems.find(({ index }) => index === \"overflow\")) {\n if (overflowedItems.length === 1) {\n ignoreOverflow = true;\n }\n }\n for (const element of container.children) {\n const {\n dataset: { index = \"?\" },\n } = element as HTMLElement;\n if (overflowedItems.length === 0 || ignoreOverflow) {\n container.classList.remove(\"overflowed\");\n } else {\n container.classList.add(\"overflowed\");\n }\n if (\n index !== \"overflow\" &&\n overflowedItems.find((item) => item.index === index)\n ) {\n element.classList.add(\"wrapped\");\n } else {\n element.classList.remove(\"wrapped\");\n }\n }\n};\n\nconst maxPriority = (priority: number, { overflowPriority }: OverflowItem) =>\n Math.max(priority, parseInt(overflowPriority));\n\nconst minPriority = (priority: number, { overflowPriority }: OverflowItem) =>\n Math.min(priority, parseInt(overflowPriority));\n\nexport const overflowIndicatorHasWrappedButShouldNotHave = (\n wrappedItems: OverflowItem[]\n) => wrappedItems.length > 1 && wrappedItems.at(-1)?.index === \"overflow\";\n\nconst getHighestPriorityItem = (overflowItems: OverflowItem[]) => {\n let [highestPriorityItem] = overflowItems;\n for (let i = 1; i < overflowItems.length; i++) {\n const item = overflowItems[i];\n if (\n parseInt(item.overflowPriority) >\n parseInt(highestPriorityItem.overflowPriority)\n ) {\n highestPriorityItem = item;\n }\n }\n return highestPriorityItem;\n};\n\nexport const highPriorityItemsHaveWrappedButShouldNotHave = (\n nonWrappedItems: OverflowItem[],\n wrappedItems: OverflowItem[]\n) => {\n const minNonwrappedPriority = nonWrappedItems.reduce<number>(\n minPriority,\n Number.MAX_SAFE_INTEGER\n );\n const maxwrappedPriority = wrappedItems.reduce<number>(maxPriority, 0);\n if (maxwrappedPriority > minNonwrappedPriority) {\n return true;\n } else {\n return wrappedItems.length > 1 && wrappedItems.at(-1)?.index === \"overflow\";\n }\n};\n\n/** \n An edge case that may occur when reducing width from unwrapped to\n wrapped, or on first render.\n We overflow one or more items. Then, when the overflowIndicator assumes\n full width, it may itself overflow.\n*/\nexport const correctForWrappedOverflowIndicator = (\n container: HTMLElement,\n overflowedItems: OverflowItem[]\n): Promise<OverflowItem[]> =>\n new Promise((resolve) => {\n requestAnimationFrame(() => {\n const [, o2] = getNonWrappedAndWrappedItems(container);\n const newlyOverflowed = getNewItems(overflowedItems, o2);\n newlyOverflowed.forEach((item) => markElementAsWrapped(container, item));\n resolve(o2);\n });\n });\n\n/** \n An edge case that may occur when reducing width from unwrapped to\n wrapped, or on first render.\n We overflow one or more items. Then, when the overflowIndicator assumes\n full width, it may itself overflow.\n*/\nexport const correctForWrappedHighPriorityItems = (\n container: HTMLElement,\n nonWrapped: OverflowItem[],\n wrapped: OverflowItem[]\n): Promise<[OverflowItem[], OverflowItem[]]> =>\n new Promise((resolve) => {\n requestAnimationFrame(() => {\n const [, o2] = getNonWrappedAndWrappedItems(container);\n const highPriorityWrappedItem = getHighestPriorityItem(o2);\n if (highPriorityWrappedItem) {\n const [nonWrappedItems, wrappedItems] = switchWrappedItemIntoView(\n container,\n highPriorityWrappedItem\n );\n resolve([nonWrappedItems, wrappedItems]);\n } else {\n resolve([nonWrapped, wrapped]);\n }\n });\n });\n\nconst getElementByIndex = (container: HTMLElement, item: OverflowItem) =>\n container.querySelector(`[data-index=\"${item.index}\"]`) as HTMLElement;\n\nexport const markElementAsWrapped = (\n container: HTMLElement,\n item: OverflowItem\n) => {\n const el = getElementByIndex(container, item);\n if (el) {\n el.classList.add(\"wrapped\");\n } else {\n throw Error(\n `markElementAsWrapped element item with index ${item.index} not found`\n );\n }\n};\n\nexport const getElementsMarkedAsWrapped = (container: HTMLElement) =>\n Array.from(container.querySelectorAll(\".wrapped\")) as HTMLElement[];\n\nconst getNewItems = (items1: OverflowItem[], items2: OverflowItem[]) => {\n const newItems: OverflowItem[] = [];\n for (const item of items2) {\n if (!items1.find(({ index }) => index === item.index)) {\n newItems.push(item);\n }\n }\n return newItems;\n};\n\nexport const unmarkItemsWhichAreNoLongerWrapped = (\n container: HTMLElement,\n wrappedItems: OverflowItem[]\n) => {\n const elementssMarkedAsWrapped = getElementsMarkedAsWrapped(container);\n elementssMarkedAsWrapped.forEach((el) => {\n const {\n dataset: { index = \"?\" },\n } = el;\n if (!wrappedItems.find((i) => i.index === index)) {\n el.classList.remove(\"wrapped\");\n }\n });\n};\n\nconst getOverflowIndicator = (container: HTMLElement) =>\n container.querySelector('[data-index=\"overflow\"]') as HTMLElement;\nconst getOverflowedItem = (container: HTMLElement) =>\n container.querySelector(\".wrapped\") as HTMLElement;\nconst getElementWidth = (el: HTMLElement) =>\n parseInt(getComputedStyle(el).getPropertyValue(\"width\"));\n\nconst getAvailableSpace = (\n container: HTMLElement,\n overflowIndicator: HTMLElement\n) => {\n const { right: containerRight } = container.getBoundingClientRect();\n const paddingRight = parseInt(\n getComputedStyle(container).getPropertyValue(\"padding-right\")\n );\n const { right: indicatorRight } = overflowIndicator.getBoundingClientRect();\n return containerRight - paddingRight - indicatorRight;\n};\n\n/**\n An edge case. If container has grown but we still have one\n wrapped item - could the wrapped item return to the fold if the overflow\n indicaor were removed ?\n */\nexport const removeOverflowIndicatorIfNoLongerNeeded = (\n container: HTMLElement\n): boolean => {\n const overflowIndicator = getOverflowIndicator(container);\n const availableSpace = getAvailableSpace(container, overflowIndicator);\n const indicatorWidth = getElementWidth(overflowIndicator);\n const overflowedItem = getOverflowedItem(container);\n const overflowWidth = getElementWidth(overflowedItem);\n\n if (overflowWidth <= availableSpace + indicatorWidth) {\n container.classList.remove(\"overflowed\");\n overflowedItem.classList.remove(\"wrapped\");\n return true;\n }\n return false;\n};\n\nconst byPriorityDescending = (h1: Element, h2: Element) => {\n const {\n dataset: { index: i1 = \"0\", overflowPriority: p1 = \"0\" },\n } = h1 as HTMLElement;\n const {\n dataset: { index: i2 = \"0\", overflowPriority: p2 = \"0\" },\n } = h2 as HTMLElement;\n\n if (p1 > p2) {\n return -1;\n } else if (p1 < p2) {\n return 1;\n } else {\n return parseInt(i1) - parseInt(i2);\n }\n};\n\nconst getNonwrappedItemsByPriority = (container: HTMLElement) =>\n Array.from(container.querySelectorAll(NON_WRAPPED_ITEM)).sort(\n byPriorityDescending\n ) as HTMLElement[];\n\n/**\n * This is used both when an overflow menu is used to select an overflowed item\n * and when a high priority item has overflowed, whilst lower priority items\n * remain in view.\n */\nexport const switchWrappedItemIntoView = (\n container: HTMLElement,\n overflowItem: OverflowItem\n): [OverflowItem[], OverflowItem[]] => {\n const unwrappedItems = getNonwrappedItemsByPriority(container);\n const targetElement = getElementByIndex(container, overflowItem);\n let pos = -1;\n let unwrappedItem = unwrappedItems.at(pos) as HTMLElement;\n const itemWidth = getElementWidth(unwrappedItem);\n const targetWidth = getElementWidth(targetElement);\n const overflowIndicator = getOverflowIndicator(container);\n let availableSpace =\n getAvailableSpace(container, overflowIndicator) + itemWidth;\n if (availableSpace >= targetWidth) {\n switchWrapOnElements(targetElement, unwrappedItem);\n } else {\n // we need to wrap multiple items to make space for the switched item\n const { left: lastLeft } = unwrappedItem.getBoundingClientRect();\n const baseAvailableSpace = availableSpace;\n const wrapTargets = [unwrappedItem];\n while (availableSpace < targetWidth) {\n pos -= 1;\n unwrappedItem = unwrappedItems.at(pos) as HTMLElement;\n wrapTargets.push(unwrappedItem);\n const { left: nextLeft } = unwrappedItem.getBoundingClientRect();\n const extraSpace = lastLeft - nextLeft;\n availableSpace = baseAvailableSpace + extraSpace;\n }\n\n targetElement?.classList.remove(\"wrapped\");\n wrapTargets.forEach((item) => {\n item.classList.add(\"wrapped\");\n });\n }\n const [nonWrappedItems, wrappedItems] =\n getNonWrappedAndWrappedItems(container);\n unmarkItemsWhichAreNoLongerWrapped(container, wrappedItems);\n return [nonWrappedItems, wrappedItems];\n};\n\nconst switchWrapOnElements = (\n wrappedElement?: HTMLElement | null,\n nonWrappedElement?: HTMLElement\n) => {\n if (!wrappedElement || !nonWrappedElement) {\n throw Error(\"switchWrapOnElements, element undefined\");\n }\n wrappedElement.classList.remove(\"wrapped\");\n nonWrappedElement.classList.add(\"wrapped\");\n};\n", "import { uuid } from \"@vuu-ui/vuu-utils\";\nimport { List, ListItem, ListItemProps } from \"@salt-ds/lab\";\nimport cx from \"classnames\";\nimport {\n cloneElement,\n HTMLAttributes,\n memo,\n MouseEvent,\n ReactElement,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { View, ViewProps } from \"../layout-view\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\n\nimport \"./Palette.css\";\n\nconst clonePaletteItem = (paletteItem: HTMLElement) => {\n const dolly = paletteItem.cloneNode(true) as HTMLElement;\n dolly.id = \"\";\n delete dolly.dataset.idx;\n return dolly;\n};\n\nexport interface PaletteItemProps extends ListItemProps {\n children: ReactElement;\n closeable?: boolean;\n header?: boolean;\n idx?: number;\n resize?: \"defer\";\n resizeable?: boolean;\n}\n\nexport const PaletteItem = memo(\n ({\n className,\n children: component,\n idx,\n resizeable,\n header,\n closeable,\n ...props\n }: PaletteItemProps) => {\n return (\n <ListItem\n className={cx(\"vuuPaletteItem\", className)}\n data-draggable\n {...props}\n />\n );\n }\n);\n\nPaletteItem.displayName = \"PaletteItem\";\n\nexport interface PaletteProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onSelect\"> {\n children: ReactElement[];\n orientation: \"horizontal\" | \"vertical\";\n selection?: string;\n ViewProps?: Partial<ViewProps>;\n}\n\nexport const Palette = ({\n children,\n className,\n orientation = \"horizontal\",\n ViewProps,\n ...props\n}: PaletteProps) => {\n const dispatch = useLayoutProviderDispatch();\n const classBase = \"vuuPalette\";\n\n function handleMouseDown(evt: MouseEvent) {\n const target = evt.target as HTMLElement;\n const listItemElement = target.closest(\".vuuPaletteItem\") as HTMLElement;\n const idx = parseInt(listItemElement.dataset.idx ?? \"-1\");\n if (idx !== -1) {\n console.log({\n children,\n idx,\n listItemElement,\n });\n }\n const {\n props: { caption, children: payload, template, ...props },\n } = children[idx];\n const { height, left, top, width } =\n listItemElement.getBoundingClientRect();\n const id = uuid();\n const identifiers = { id, key: id };\n const component = template ? (\n payload\n ) : (\n <View {...ViewProps} {...identifiers} {...props} title={props.label}>\n {payload}\n </View>\n );\n\n dispatch({\n dragRect: {\n left,\n top,\n right: left + width,\n bottom: top + 150,\n width,\n height,\n },\n dragElement: clonePaletteItem(listItemElement),\n evt: evt.nativeEvent,\n instructions: {\n DoNotRemove: true,\n DoNotTransform: true,\n RemoveDraggableOnDragEnd: true,\n dragThreshold: 10,\n },\n path: \"*\",\n payload: component,\n type: \"drag-start\",\n });\n }\n\n return (\n <List\n {...props}\n borderless\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n maxHeight={800}\n selected={null}\n >\n {children.map((child, idx) =>\n child.type === PaletteItem\n ? cloneElement(child, {\n key: idx,\n onMouseDown: handleMouseDown,\n })\n : child\n )}\n </List>\n );\n};\n\nregisterComponent(\"Palette\", Palette, \"view\");\n", "import { useId } from \"@vuu-ui/vuu-layout\";\nimport {\n Tab,\n Tabstrip as Tabstrip,\n TabstripProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport cx from \"classnames\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n} from \"react\";\nimport { StackProps } from \"./stackTypes\";\n\nimport \"./Stack.css\";\n\nconst classBase = \"Tabs\";\n\nconst getDefaultTabIcon = () => undefined;\n\nconst getDefaultTabLabel = (component: ReactElement, tabIndex: number) =>\n component.props?.title ?? `Tab ${tabIndex + 1}`;\n\nconst getChildElements = <T extends ReactElement = ReactElement>(\n children: ReactNode\n): T[] => {\n const elements: T[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n elements.push(child as T);\n } else {\n console.warn(`Stack has unexpected child element type`);\n }\n });\n return elements;\n};\n\nconst DefaultTabstripProps: Partial<TabstripProps> = {\n allowAddTab: false,\n allowCloseTab: false,\n allowRenameTab: false,\n};\n\nexport const Stack = forwardRef(function Stack(\n {\n active = 0,\n children,\n className: classNameProp,\n getTabIcon = getDefaultTabIcon,\n getTabLabel = getDefaultTabLabel,\n id: idProp,\n keyBoardActivation = \"manual\",\n // onMouseDown,\n onAddTab,\n onMoveTab,\n onTabClose,\n onTabEdit,\n onTabSelectionChanged,\n showTabs = \"top\",\n style,\n TabstripProps = DefaultTabstripProps,\n }: StackProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const id = useId(idProp);\n\n const { allowCloseTab, allowRenameTab } = TabstripProps;\n\n // TODO integrate with Tabstrip drag drop\n // const handleMouseDown = (e: MouseEvent<HTMLDivElement>) => {\n // const target = e.target as HTMLElement;\n // const indexedElement = target.closest(\"[data-index]\") as HTMLDivElement;\n // const isTab = indexedElement?.querySelector(\".vuuTab\");\n // if (isTab) {\n // const index = getElementIndex(indexedElement);\n // console.log(`index = ${index}`);\n // onMouseDown?.(e, index);\n // }\n // };\n\n const handleExitEditMode = useCallback(\n (\n _oldText: string,\n newText: string,\n _allowDeactivation: boolean,\n tabIndex: number\n ) => {\n onTabEdit?.(tabIndex, newText);\n },\n [onTabEdit]\n );\n\n const activeChild = () => {\n if (React.isValidElement(children)) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[active] ?? null;\n }\n return null;\n };\n\n const renderTabs = () =>\n getChildElements(children).map((child, idx) => {\n const rootId = `${id}-${idx}`;\n const { closeable = allowCloseTab, id: childId } = child.props;\n return (\n <Tab\n ariaControls={`${rootId}-tab`}\n data-icon={getTabIcon(child, idx)}\n key={childId ?? idx}\n id={rootId}\n index={idx}\n label={getTabLabel(child, idx)}\n closeable={closeable}\n editable={allowRenameTab}\n />\n );\n });\n\n const child = activeChild();\n const isHorizontal = showTabs === \"left\" || showTabs === \"right\";\n const tabstripOrientation = isHorizontal ? \"vertical\" : \"horizontal\";\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-horizontal`]: isHorizontal,\n })}\n style={style}\n id={id}\n ref={ref}\n >\n {showTabs ? (\n <Tabstrip\n {...TabstripProps}\n activeTabIndex={\n TabstripProps?.activeTabIndex ?? (child === null ? -1 : active)\n }\n allowDragDrop={TabstripProps.allowDragDrop !== false}\n animateSelectionThumb\n className=\"vuuTabHeader\"\n keyBoardActivation={keyBoardActivation}\n onActiveChange={onTabSelectionChanged}\n onAddTab={onAddTab}\n onCloseTab={onTabClose}\n onExitEditMode={handleExitEditMode}\n onMoveTab={onMoveTab}\n orientation={tabstripOrientation}\n // onMouseDown={handleMouseDown}\n >\n {renderTabs()}\n </Tabstrip>\n ) : null}\n {child}\n </div>\n );\n});\nStack.displayName = \"Stack\";\n", "import { useIdMemo as useId } from \"@salt-ds/core\";\nimport React, { ReactElement, useCallback, useRef } from \"react\";\nimport Component from \"../Component\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { useViewActionDispatcher, View } from \"../layout-view\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { Stack } from \"./Stack\";\nimport { StackProps } from \"./stackTypes\";\n\nimport \"./Stack.css\";\n\nconst defaultCreateNewChild = (index: number) => (\n <View\n resizeable\n title={`Tab ${index}`}\n style={{ flexGrow: 1, flexShrink: 0, flexBasis: 0 }}\n header\n closeable\n >\n <Component style={{ flex: 1 }} />\n </View>\n);\n\nexport const StackLayout = (props: StackProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const dispatch = useLayoutProviderDispatch();\n const { loadState } = usePersistentState();\n\n const {\n createNewChild = defaultCreateNewChild,\n id: idProp,\n onTabSelectionChanged,\n path,\n ...restProps\n } = props;\n\n const { children } = props;\n\n const id = useId(idProp);\n\n const [dispatchViewAction] = useViewActionDispatcher(id, ref, path);\n\n const handleTabSelection = (nextIdx: number) => {\n if (path) {\n dispatch({ type: \"switch-tab\", path, nextIdx });\n onTabSelectionChanged?.(nextIdx);\n }\n };\n\n const handleTabClose = useCallback(\n (tabIndex: number) => {\n if (Array.isArray(children)) {\n const {\n props: { \"data-path\": dataPath, path = dataPath },\n } = children[tabIndex];\n dispatch({ type: \"remove\", path });\n }\n },\n [children, dispatch]\n );\n\n const handleTabAdd = useCallback(() => {\n if (path) {\n const tabIndex = React.Children.count(children);\n const component = createNewChild(tabIndex);\n dispatch({\n type: \"add\",\n path,\n component,\n });\n }\n }, [children, createNewChild, dispatch, path]);\n\n const handleMoveTab = useCallback(\n (fromIndex: number, toIndex: number) => {\n if (path) {\n dispatch({\n fromIndex,\n toIndex,\n path,\n type: \"move-child\",\n });\n }\n },\n [dispatch, path]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleMouseDown = async (e: any, index: number) => {\n let readyToDrag: undefined | ((value: unknown) => void);\n\n const preDragActivity = async () =>\n new Promise((resolve) => {\n console.log(\"preDragActivity: Ok, gonna release the drag\");\n readyToDrag = resolve;\n });\n\n const dragging = await dispatchViewAction(\n { type: \"mousedown\", index, preDragActivity },\n e\n );\n\n if (dragging) {\n readyToDrag?.(undefined);\n }\n };\n\n const handleTabEdit = (tabIndex: number, text: string) => {\n dispatch({ type: \"set-title\", path: `${path}.${tabIndex}`, title: text });\n };\n\n const getTabLabel = (component: ReactElement, idx: number) => {\n const { id, title } = component.props;\n return loadState(id, \"view-title\") || title || `Tab ${idx + 1}`;\n };\n\n return (\n <Stack\n {...restProps}\n id={id}\n getTabLabel={getTabLabel}\n onMouseDown={handleMouseDown}\n onMoveTab={handleMoveTab}\n onAddTab={handleTabAdd}\n onTabClose={handleTabClose}\n onTabEdit={handleTabEdit}\n onTabSelectionChanged={handleTabSelection}\n ref={ref}\n />\n );\n};\nStackLayout.displayName = \"Stack\";\n\nregisterComponent(\"Stack\", StackLayout, \"container\");\n", "import React, { useState } from \"react\";\n\nimport { LayoutConfigurator, LayoutTreeViewer } from \"..\";\nimport { followPathToComponent } from \"../..\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ConfigWrapper = ({ children }: any) => {\n const designMode = false;\n const [layout, setLayout] = useState(children);\n const [selectedComponent, setSelectedComponent] = useState(children);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleSelection = (selectedPath: any) => {\n const targetComponent = followPathToComponent(layout, selectedPath);\n setSelectedComponent(targetComponent);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = (property: any, value: any) => {\n console.log(`change ${property} -> ${value}`);\n\n const newComponent = React.cloneElement(selectedComponent, {\n style: {\n ...selectedComponent.props.style,\n [property]: value,\n },\n });\n setSelectedComponent(newComponent);\n setLayout(React.cloneElement(layout, {}, newComponent));\n };\n\n return (\n <div data-design-mode={`${designMode}`}>\n {layout}\n <br />\n <div style={{ display: \"flex\" }}>\n <LayoutConfigurator\n height={300}\n managedStyle={selectedComponent.props.style}\n width={300}\n onChange={handleChange}\n style={undefined}\n />\n <LayoutTreeViewer\n layout={layout}\n onSelect={handleSelection}\n style={{ width: 300, height: 300, backgroundColor: \"#ccc\" }}\n />\n </div>\n {/* <StateButton\n defaultChecked={false}\n onChange={(e, value) => setDesignMode(value)}>Design Mode</StateButton> */}\n </div>\n );\n};\n", "import \"./layout-configurator.css\";\nimport { FormField, Input } from \"@salt-ds/core\";\n\nconst NO_STYLE = {};\n\nconst DIMENSIONS = {\n margin: {\n top: \"marginTop\",\n right: \"marginRight\",\n bottom: \"marginBottom\",\n left: \"marginLeft\",\n },\n border: {\n top: \"borderTopWidth\",\n right: \"borderRightWidth\",\n bottom: \"borderBottomWidth\",\n left: \"borderLeftWidth\",\n },\n padding: {\n top: \"paddingTop\",\n right: \"paddingRight\",\n bottom: \"paddingBottom\",\n left: \"paddingLeft\",\n },\n};\n\nconst LayoutBox = ({ feature, children, style, onChange }) => {\n return (\n <div className={`LayoutBox layout-${feature} layout-outer`}>\n <div className={`layout-top`}>\n <span className=\"layout-title\">{feature}</span>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.top}\n onChange={(evt, value) => onChange(feature, \"top\", value)}\n />\n </FormField>\n </div>\n <div className={`layout-inner`}>\n <div className={`layout-left`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.left}\n onChange={(evt, value) => onChange(feature, \"left\", value)}\n />\n </FormField>\n </div>\n {children}\n <div className={`layout-right`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.right}\n onChange={(evt, value) => onChange(feature, \"right\", value)}\n />\n </FormField>\n </div>\n </div>\n <div className={`layout-bottom`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.bottom}\n onChange={(evt, value) => onChange(feature, \"bottom\", value)}\n />\n </FormField>\n </div>\n </div>\n );\n};\n\nexport const MARGIN_STYLES = {\n margin: true,\n marginTop: true,\n marginRight: true,\n marginBottom: true,\n marginLeft: true,\n};\n\nexport const PADDING_STYLES = {\n padding: true,\n paddingTop: true,\n paddingRight: true,\n paddingBottom: true,\n paddingLeft: true,\n};\n\nexport const BORDER_STYLES = {\n border: true,\n borderColor: true,\n borderWidth: true,\n borderTopWidth: true,\n borderRightWidth: true,\n borderBottomWidth: true,\n borderLeftWidth: true,\n};\n\nconst CSS_DIGIT = \"(\\\\d+)(?:px)?\";\nconst CSS_MEASURE = `^(?:${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT})?)?)?)$`;\nconst CSS_REX = new RegExp(CSS_MEASURE);\nconst BORDER_REX = /^(?:(\\d+)(?:px)\\ssolid\\s([a-zA-Z,0-9().]+))$/;\n\nexport const LayoutConfigurator = ({\n height,\n managedStyle,\n onChange,\n style,\n width,\n}) => {\n const state = normalizeStyle(managedStyle);\n\n const handleChange = (feature, dimension, strValue) => {\n const value = parseInt(strValue || \"0\", 10);\n const property = DIMENSIONS[feature][dimension];\n onChange(property, value);\n };\n\n const {\n marginTop: mt = 0,\n marginRight: mr = 0,\n marginBottom: mb = 0,\n marginLeft: ml = 0,\n } = state;\n const {\n borderTopWidth: bt = 0,\n borderRightWidth: br = 0,\n borderBottomWidth: bb = 0,\n borderLeftWidth: bl = 0,\n } = state;\n const {\n paddingTop: pt = 0,\n paddingRight: pr = 0,\n paddingBottom: pb = 0,\n paddingLeft: pl = 0,\n } = state;\n return (\n <div className=\"LayoutConfigurator\" style={{ width, height, ...style }}>\n <LayoutBox\n feature=\"margin\"\n style={{ top: mt, right: mr, bottom: mb, left: ml }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"border\"\n style={{ top: bt, right: br, bottom: bb, left: bl }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"padding\"\n style={{ top: pt, right: pr, bottom: pb, left: pl }}\n onChange={handleChange}\n >\n <div className=\"layout-content\" />\n </LayoutBox>\n </LayoutBox>\n </LayoutBox>\n </div>\n );\n};\n\n// TODO merge the following two functions\nexport function XXXnormalizeStyles(\n layoutStyle = NO_STYLE,\n visualStyle = NO_STYLE\n) {\n const {\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...style\n } = layoutStyle;\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n } else if (typeof margin === \"string\") {\n const match = CSS_REX.exec(margin);\n if (match === null) {\n console.error(`Invalid css value for margin '${margin}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n style.marginLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.marginTop = style.marginBottom = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n } else {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof marginTop === \"number\") style.marginTop = marginTop;\n if (typeof marginRight === \"number\") style.marginRight = marginRight;\n if (typeof marginBottom === \"number\") style.marginBottom = marginBottom;\n if (typeof marginLeft === \"number\") style.marginLeft = marginLeft;\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n } else if (typeof padding === \"string\") {\n const match = CSS_REX.exec(padding);\n if (match === null) {\n console.error(`Invalid css value for padding '${padding}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n style.paddingLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.paddingTop = style.paddingBottom = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n } else {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddinggLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof paddingTop === \"number\") style.paddingTop = paddingTop;\n if (typeof paddingRight === \"number\") style.paddingRight = paddingRight;\n if (typeof paddingBottom === \"number\") style.paddingBottom = paddingBottom;\n if (typeof paddingLeft === \"number\") style.paddingLeft = paddingLeft;\n\n return normalizeStyle(style, visualStyle);\n}\n\nfunction normalizeStyle(managedStyle = NO_STYLE) {\n const style = { ...managedStyle };\n\n // if (BORDER_LIST.some(bs => style[bs])) {\n let match;\n\n let {\n border,\n borderWidth,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...rest\n } = style;\n\n let marginStyles = {};\n let paddingStyles = {};\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n marginStyles = {\n marginTop: margin,\n marginRight: margin,\n marginBottom: margin,\n marginLeft: margin,\n };\n }\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n paddingStyles = {\n paddingTop: padding,\n paddingRight: padding,\n paddingBottom: padding,\n paddingLeft: padding,\n };\n }\n\n if (\n border ||\n borderWidth ||\n borderTopWidth ||\n borderRightWidth ||\n borderBottomWidth ||\n borderLeftWidth\n ) {\n if (typeof border === \"string\" && (match = BORDER_REX.exec(border))) {\n // what if both border and borderWidth are specified ?\n [, borderWidth, borderColor] = match;\n borderWidth = parseInt(borderWidth, 10);\n }\n\n if (borderWidth) {\n borderTopWidth =\n borderTopWidth === undefined ? borderWidth : borderTopWidth;\n borderRightWidth =\n borderRightWidth === undefined ? borderWidth : borderRightWidth;\n borderBottomWidth =\n borderBottomWidth === undefined ? borderWidth : borderBottomWidth;\n borderLeftWidth =\n borderLeftWidth === undefined ? borderWidth : borderLeftWidth;\n }\n\n borderColor = borderColor || \"black\";\n const boxShadow = `\n ${borderColor} ${borderLeftWidth || 0}px ${\n borderTopWidth || 0\n }px 0 0 inset,\n ${borderColor} ${-borderRightWidth || 0}px ${\n -borderBottomWidth || 0\n }px 0 0 inset`;\n\n return {\n ...rest,\n ...marginStyles,\n ...paddingStyles,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n borderStyle: \"solid\",\n boxShadow,\n };\n } else {\n return style;\n }\n // } else {\n // return style;\n // }\n}\n", "import React from \"react\";\nimport cx from \"classnames\";\nimport { typeOf } from \"../../utils\";\n\nimport \"./layout-tree-viewer.css\";\nimport { Tree } from \"@vuu-ui/vuu-ui-controls\";\n\nconst classBaseTree = \"hwLayoutTreeViewer\";\n\nconst toTreeJson = (component, path = \"0\") => {\n return {\n label: typeOf(component),\n path,\n childNodes: React.Children.map(component.props.children, (child, i) =>\n toTreeJson(child, path ? `${path}.${i}` : `${i}`)\n ),\n };\n};\n\nexport const LayoutTreeViewer = ({ layout, onSelect, style }) => {\n const treeJson = [toTreeJson(layout)];\n\n const handleSelection = (evt, [{ path }]) => {\n onSelect(path);\n };\n\n return (\n <div className={cx(classBaseTree)} style={style}>\n <Tree\n source={treeJson}\n groupSelection=\"single\"\n onSelectionChange={handleSelection}\n />\n </div>\n );\n};\n", "import { asReactElements, OverflowContainer, useId } from \"@vuu-ui/vuu-layout\";\nimport { Button } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport React, { useMemo, useRef } from \"react\";\nimport { TabProps, TabstripProps } from \"./TabsTypes\";\nimport { useTabstrip } from \"./useTabstrip\";\n\nimport \"./Tabstrip.css\";\n\nconst classBase = \"vuuTabstrip\";\n\nexport const Tabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowAddTab,\n allowCloseTab,\n allowDragDrop = false,\n allowRenameTab = false,\n animateSelectionThumb = false,\n children,\n className: classNameProp,\n id: idProp,\n keyBoardActivation = \"manual\",\n location,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation = \"horizontal\",\n showTabMenuButton,\n style: styleProp,\n ...htmlAttributes\n}: TabstripProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n activeTabIndex,\n focusVisible,\n containerStyle,\n draggedItemIndex,\n onClickAddTab,\n tabProps,\n ...tabstripHook\n } = useTabstrip({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n animateSelectionThumb,\n containerRef: rootRef,\n keyBoardActivation,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation,\n });\n\n const id = useId(idProp);\n const className = cx(classBase, `${classBase}-${orientation}`, classNameProp);\n const style =\n styleProp || containerStyle\n ? {\n ...styleProp,\n ...containerStyle,\n }\n : undefined;\n\n const tabs = useMemo(\n () =>\n asReactElements(children)\n .map((child, index) => {\n const {\n id: tabId = `${id}-tab-${index}`,\n closeable = allowCloseTab,\n editable = allowRenameTab,\n showMenuButton = showTabMenuButton,\n } = child.props;\n const selected = index === activeTabIndex;\n return React.cloneElement(child, {\n ...tabProps,\n ...tabstripHook.navigationProps,\n closeable,\n \"data-overflow-priority\": selected ? \"1\" : undefined,\n dragging: draggedItemIndex === index,\n editable,\n focusVisible: focusVisible === index,\n id: tabId,\n index,\n key: index,\n location,\n selected,\n showMenuButton,\n tabIndex: selected ? 0 : -1,\n } as Partial<TabProps>);\n })\n .concat(\n allowAddTab ? (\n <Button\n {...tabstripHook.navigationProps}\n aria-label=\"Create Tab\"\n className={`${classBase}-addTabButton`}\n data-icon=\"add\"\n data-overflow-priority=\"1\"\n key=\"addButton\"\n onClick={onClickAddTab}\n variant=\"secondary\"\n tabIndex={-1}\n />\n ) : (\n []\n )\n ),\n [\n activeTabIndex,\n allowAddTab,\n allowCloseTab,\n allowRenameTab,\n children,\n focusVisible,\n id,\n location,\n onClickAddTab,\n showTabMenuButton,\n tabProps,\n draggedItemIndex,\n tabstripHook.navigationProps,\n ]\n );\n\n return (\n <>\n <OverflowContainer\n {...htmlAttributes}\n {...tabstripHook.containerProps}\n className={className}\n height={28}\n id={id}\n orientation={orientation}\n overflowIcon=\"more-horiz\"\n ref={rootRef}\n style={style}\n >\n {tabs}\n </OverflowContainer>\n {tabstripHook.draggable}\n </>\n );\n};\n", "import type { MenuActionHandler } from \"@vuu-ui/vuu-data-types\";\nimport type { OverflowItem } from \"@vuu-ui/vuu-layout\";\nimport type { orientationType } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n RefObject,\n useCallback,\n useRef,\n} from \"react\";\nimport { useDragDropNext as useDragDrop } from \"../drag-drop\";\nimport { isTabMenuOptions } from \"./TabMenuOptions\";\nimport { getIndexOfSelectedTab } from \"./tabstrip-dom-utils\";\nimport { useAnimatedSelectionThumb } from \"./useAnimatedSelectionThumb\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\n\nexport type ExitEditModeHandler = (\n originalValue: string,\n editedValue: string,\n allowDeactivation: boolean,\n tabIndex: number\n) => void;\n\nexport interface TabstripHookProps {\n activeTabIndex: number;\n allowDragDrop: boolean;\n animateSelectionThumb: boolean;\n containerRef: RefObject<HTMLElement>;\n onActiveChange?: (tabIndex: number) => void;\n onAddTab?: () => void;\n onCloseTab?: (tabIndex: number, newActiveTabIndex: number) => void;\n onExitEditMode?: ExitEditModeHandler;\n onMoveTab?: (fromIndex: number, toIndex: number) => void;\n orientation: orientationType;\n keyBoardActivation?: \"manual\" | \"automatic\";\n}\n\nconst editKeys = new Set([\"Enter\", \" \"]);\nconst isEditKey = (key: string) => editKeys.has(key);\n\nconst getElementWithIndex = (container: HTMLElement | null, index: number) => {\n if (container) {\n return container.querySelector(`[data-index=\"${index}\"]`) as HTMLElement;\n } else {\n return null;\n }\n};\n\nexport const useTabstrip = ({\n activeTabIndex: activeTabIndexProp,\n allowDragDrop,\n animateSelectionThumb,\n containerRef,\n onActiveChange,\n onAddTab,\n onCloseTab,\n onExitEditMode,\n onMoveTab,\n orientation,\n keyBoardActivation,\n}: TabstripHookProps) => {\n const lastSelection = useRef(activeTabIndexProp);\n\n const {\n focusTab: keyboardHookFocusTab,\n highlightedIdx,\n onClick: keyboardHookHandleClick,\n onKeyDown: keyboardHookHandleKeyDown,\n setHighlightedIdx: keyboardHookSetHighlightedIndex,\n ...keyboardHook\n } = useKeyboardNavigation({\n containerRef,\n keyBoardActivation,\n orientation,\n selectedIndex: lastSelection.current,\n });\n\n const {\n activateTab: selectionHookActivateTab,\n onClick: selectionHookHandleClick,\n onKeyDown: selectionHookHandleKeyDown,\n selected: selectionHookSelected,\n } = useSelection({\n highlightedIdx,\n onSelectionChange: onActiveChange,\n selected: activeTabIndexProp,\n });\n // We need this on reEntry for navigation hook to handle focus and for dragDropHook\n // to re-apply selection after drag drop. For some reason the value is stale if we\n // directly use selectionHookSelected within the drag, even though all dependencies\n //appear to be correctly declared.\n lastSelection.current = selectionHookSelected;\n\n const { containerStyle, resumeAnimation, suspendAnimation } =\n useAnimatedSelectionThumb(\n containerRef,\n animateSelectionThumb ? selectionHookSelected : -1,\n orientation\n );\n\n const handleDrop = useCallback(\n (fromIndex: number, toIndex: number) => {\n const { current: selected } = lastSelection;\n console.log(\n `useTabstrip handleDrop ${fromIndex} - ${toIndex} ${selected}`\n );\n onMoveTab?.(fromIndex, toIndex);\n let nextSelectedTab = -1;\n if (toIndex !== -1) {\n if (selected === fromIndex) {\n nextSelectedTab = toIndex;\n } else if (fromIndex > selected && toIndex <= selected) {\n nextSelectedTab = selected + 1;\n } else if (fromIndex < selected && toIndex >= selected) {\n nextSelectedTab = selected - 1;\n }\n if (nextSelectedTab !== -1) {\n suspendAnimation();\n selectionHookActivateTab(nextSelectedTab);\n requestAnimationFrame(resumeAnimation);\n }\n keyboardHookFocusTab(toIndex, false, false, 350);\n }\n },\n [\n keyboardHookFocusTab,\n onMoveTab,\n resumeAnimation,\n selectionHookActivateTab,\n suspendAnimation,\n ]\n );\n\n const { onMouseDown: dragDropHookHandleMouseDown, ...dragDropHook } =\n useDragDrop({\n allowDragDrop,\n containerRef,\n // this is for useDragDropNext\n draggableClassName: `tabstrip-${orientation}`,\n // extendedDropZone: overflowedItems.length > 0,\n onDrop: handleDrop,\n orientation: \"horizontal\",\n itemQuery: \".vuuOverflowContainer-item\",\n });\n\n const handleExitEditMode = useCallback<ExitEditModeHandler>(\n (originalValue, editedValue, allowDeactivation, tabIndex) => {\n console.log(\n `handleExitEditMode ${originalValue} ${editedValue} ${allowDeactivation} ${tabIndex}`\n );\n onExitEditMode?.(originalValue, editedValue, allowDeactivation, tabIndex);\n if (!allowDeactivation) {\n // this indicates that Enter or Esc key has been pressed, hence we\n // want to make sure keyboardHook treats this as a keyboard event\n // (and applies focusVisible). The last parameter here does that.\n keyboardHookFocusTab(tabIndex, false, true);\n }\n },\n [keyboardHookFocusTab, onExitEditMode]\n );\n\n const handleClick = useCallback(\n (evt: ReactMouseEvent<HTMLElement>, tabIndex: number) => {\n // releasing the mouse at end of drag will trigger a click, ignore those\n // if (!dragDropHook.isDragging) {\n keyboardHookHandleClick(evt, tabIndex);\n selectionHookHandleClick(evt, tabIndex);\n // }\n },\n // [dragDropHook.isDragging, keyboardHook, selectionHook]\n [keyboardHookHandleClick, selectionHookHandleClick]\n );\n\n const getEditableLabel = useCallback(\n (tabIndex = highlightedIdx) => {\n const targetEl = getElementWithIndex(containerRef.current, tabIndex);\n if (targetEl) {\n return targetEl.querySelector(\".vuuEditableLabel\") as HTMLElement;\n }\n },\n [containerRef, highlightedIdx]\n );\n\n const tabInEditMode = useCallback(\n (tabIndex = highlightedIdx) => {\n const editableLabel = getEditableLabel(tabIndex);\n if (editableLabel) {\n return editableLabel.classList.contains(\"vuuEditableLabel-editing\");\n }\n return false;\n },\n [getEditableLabel, highlightedIdx]\n );\n\n const editTab = useCallback(\n (tabIndex = highlightedIdx) => {\n const editableLabelEl = getEditableLabel(tabIndex);\n if (editableLabelEl) {\n const evt = new MouseEvent(\"dblclick\", {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n editableLabelEl.dispatchEvent(evt);\n }\n },\n [getEditableLabel, highlightedIdx]\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n keyboardHookHandleKeyDown(evt);\n if (!evt.defaultPrevented) {\n selectionHookHandleKeyDown(evt);\n }\n if (!evt.defaultPrevented && isEditKey(evt.key)) {\n editTab();\n }\n },\n [editTab, keyboardHookHandleKeyDown, selectionHookHandleKeyDown]\n );\n\n const handleCloseTabFromMenu = useCallback(\n (tabIndex: number) => {\n const selectedTabIndex = getIndexOfSelectedTab(containerRef.current);\n const newActiveTabIndex =\n selectedTabIndex > tabIndex\n ? selectedTabIndex - 1\n : selectedTabIndex === tabIndex\n ? 0\n : selectedTabIndex;\n suspendAnimation();\n // containerRef.current?.classList.add(\"vuuTabThumb-noTransition\");\n onCloseTab?.(tabIndex, newActiveTabIndex);\n setTimeout(() => {\n resumeAnimation();\n // containerRef.current?.classList.remove(\"vuuTabThumb-noTransition\");\n }, 200);\n return true;\n },\n [containerRef, onCloseTab, resumeAnimation, suspendAnimation]\n );\n\n const handleRenameTabFromMenu = useCallback(\n (tabIndex: number) => {\n editTab(tabIndex);\n return true;\n },\n [editTab]\n );\n\n const handleTabMenuAction = useCallback<MenuActionHandler>(\n (action) => {\n if (isTabMenuOptions(action.options)) {\n switch (action.menuId) {\n case \"close-tab\":\n return handleCloseTabFromMenu(action.options.tabIndex);\n case \"rename-tab\":\n return handleRenameTabFromMenu(action.options.tabIndex);\n default:\n console.log(`tab menu action ${action.menuId}`);\n }\n }\n return false;\n },\n [handleCloseTabFromMenu, handleRenameTabFromMenu]\n );\n\n //TODO( why do we sometimes see this fired twice eg following rename)\n const handleTabMenuClose = useCallback(() => {\n if (!tabInEditMode()) {\n keyboardHookFocusTab(highlightedIdx);\n } else {\n keyboardHookSetHighlightedIndex(highlightedIdx);\n }\n }, [\n highlightedIdx,\n keyboardHookFocusTab,\n keyboardHookSetHighlightedIndex,\n tabInEditMode,\n ]);\n\n const onSwitchWrappedItemIntoView = useCallback(\n (item: OverflowItem) => {\n const index = parseInt(item.index);\n if (!isNaN(index)) {\n selectionHookActivateTab(index);\n }\n },\n [selectionHookActivateTab]\n );\n\n const navigationProps = {\n onFocus: keyboardHook.onFocus,\n onKeyDown: handleKeyDown,\n };\n\n const handleAddTabClick = useCallback(() => {\n onAddTab?.();\n requestAnimationFrame(() => {\n const selectedTabIndex = getIndexOfSelectedTab(containerRef.current);\n if (selectedTabIndex !== -1) {\n keyboardHookFocusTab(selectedTabIndex);\n }\n });\n }, [containerRef, keyboardHookFocusTab, onAddTab]);\n\n const tabProps = {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n onExitEditMode: handleExitEditMode,\n onMenuAction: handleTabMenuAction,\n onMenuClose: handleTabMenuClose,\n onMouseDown: dragDropHookHandleMouseDown,\n };\n\n return {\n activeTabIndex: selectionHookSelected,\n containerStyle,\n focusVisible: keyboardHook.focusVisible,\n containerProps: {\n ...keyboardHook.containerProps,\n onSwitchWrappedItemIntoView,\n },\n navigationProps,\n onClickAddTab: handleAddTabClick,\n tabProps,\n ...dragDropHook,\n };\n};\n", "import { ContextMenuItemDescriptor } from \"packages/vuu-data-types\";\n\nexport type MenuOptions = { [key: string]: unknown };\n\nexport interface TabMenuOptions {\n tabIndex: number;\n}\n\nexport const isTabMenuOptions = (options: unknown): options is TabMenuOptions =>\n typeof options === \"object\" &&\n options !== null &&\n \"tabIndex\" in options &&\n typeof options.tabIndex === \"number\";\n\nexport const closeCommand = (options?: MenuOptions) =>\n ({\n label: `Close`,\n location: \"tab\",\n action: `close-tab`,\n options,\n } as ContextMenuItemDescriptor);\n\nexport const renameCommand = (options?: MenuOptions) =>\n ({\n label: `Rename`,\n location: \"tab\",\n action: `rename-tab`,\n options,\n } as ContextMenuItemDescriptor);\n", "export const getElementIndex = (el: HTMLElement | null) => {\n if (el) {\n const index = parseInt(el.dataset.index || \"\");\n if (!isNaN(index)) {\n return index;\n }\n }\n return -1;\n};\n\nconst getIndexOfItem = (container: HTMLElement | null, query: string) => {\n if (container) {\n const targetTab = container.querySelector(\n `[data-index]:has(${query})`\n ) as HTMLElement;\n return getElementIndex(targetTab);\n }\n return -1;\n};\n\nexport const getIndexOfSelectedTab = (container: HTMLElement | null) =>\n getIndexOfItem(container, '[aria-selected=\"true\"]');\n\nexport const getIndexOfEditedItem = (container: HTMLElement | null) =>\n getIndexOfItem(container, \".vuuEditableLabel-editing\");\n", "import { isValidNumber, MEASURES, orientationType } from \"@vuu-ui/vuu-utils\";\nimport { CSSProperties, RefObject, useCallback, useMemo, useRef } from \"react\";\n\nexport const useAnimatedSelectionThumb = (\n containerRef: RefObject<HTMLElement>,\n activeTabIndex: number,\n orientation: orientationType = \"horizontal\"\n) => {\n const animationSuspendedRef = useRef(false);\n const suspendAnimation = useCallback(() => {\n animationSuspendedRef.current = true;\n }, []);\n\n const resumeAnimation = useCallback(() => {\n animationSuspendedRef.current = false;\n }, []);\n\n const onTransitionEnd = useCallback(() => {\n containerRef.current?.style.setProperty(\"--tab-thumb-transition\", \"none\");\n containerRef.current?.removeEventListener(\"transitionend\", onTransitionEnd);\n }, [containerRef]);\n const lastSelectedRef = useRef(-1);\n return useMemo(() => {\n let offset = 0;\n let size = 0;\n if (lastSelectedRef.current !== -1) {\n const oldSelected =\n containerRef.current?.querySelector(\".vuuTab-selected\");\n const newSelected = containerRef.current?.querySelector(\n `[data-index=\"${activeTabIndex}\"] .vuuTab`\n );\n const { positionProp, sizeProp } = MEASURES[orientation];\n if (oldSelected && newSelected && !animationSuspendedRef.current) {\n const { [positionProp]: oldPosition, [sizeProp]: oldSize } =\n oldSelected.getBoundingClientRect();\n const { [positionProp]: newPosition } =\n newSelected.getBoundingClientRect();\n if (\n isValidNumber(oldPosition) &&\n isValidNumber(newPosition) &&\n isValidNumber(oldSize)\n ) {\n console.log({ orientation, positionProp, oldPosition, newPosition });\n offset = oldPosition - newPosition;\n size = oldSize;\n const speed = orientation === \"horizontal\" ? 1100 : 700;\n const duration = Math.abs(offset / speed);\n requestAnimationFrame(() => {\n containerRef.current?.style.setProperty(\n \"--tab-thumb-offset\",\n \"0px\"\n );\n containerRef.current?.style.setProperty(\"--tab-thumb-size\", \"100%\");\n containerRef.current?.style.setProperty(\n \"--tab-thumb-transition\",\n `all ${duration}s ease`\n );\n containerRef.current?.addEventListener(\n \"transitionend\",\n onTransitionEnd\n );\n });\n }\n }\n }\n lastSelectedRef.current = activeTabIndex;\n if (animationSuspendedRef.current) {\n return {\n containerStyle: {\n \"--tab-thumb-offset\": \"0px\",\n \"--tab-thumb-size\": \"100%\",\n } as CSSProperties,\n resumeAnimation,\n suspendAnimation,\n };\n } else {\n return {\n containerStyle: {\n \"--tab-thumb-offset\": `${offset}px`,\n \"--tab-thumb-size\": size ? `${size}px` : undefined,\n } as CSSProperties,\n resumeAnimation,\n suspendAnimation,\n };\n }\n }, [\n activeTabIndex,\n containerRef,\n orientation,\n onTransitionEnd,\n resumeAnimation,\n suspendAnimation,\n ]);\n};\n", "import { useControlled } from \"@salt-ds/core\";\nimport { getFocusableElement, orientationType } from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n FocusEventHandler,\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n ArrowDown,\n ArrowUp,\n ArrowLeft,\n ArrowRight,\n Home,\n End,\n} from \"@vuu-ui/vuu-utils\";\nimport { getIndexOfEditedItem } from \"./tabstrip-dom-utils\";\n\ntype directionType = \"bwd\" | \"fwd\" | \"start\" | \"end\";\ntype directionMap = { [key: string]: directionType };\nconst navigation = {\n horizontal: {\n [Home]: \"start\",\n [End]: \"end\",\n [ArrowLeft]: \"bwd\",\n [ArrowRight]: \"fwd\",\n } as directionMap,\n vertical: {\n [Home]: \"start\",\n [End]: \"end\",\n [ArrowUp]: \"bwd\",\n [ArrowDown]: \"fwd\",\n } as directionMap,\n};\n\nconst isNavigationKey = (\n key: string,\n orientation: orientationType = \"horizontal\"\n) => navigation[orientation][key] !== undefined;\n\nconst isMenuActivationKey = (key: string) => key === ArrowDown;\n\nfunction nextItemIdx(count: number, direction: directionType, idx: number) {\n if (direction === \"start\") {\n return 0;\n } else if (direction === \"end\") {\n return count - 1;\n } else if (direction === \"bwd\") {\n if (idx > 0) {\n return idx - 1;\n } else {\n return idx;\n }\n } else {\n if (idx === null) {\n return 0;\n } else if (idx === count - 1) {\n return idx;\n } else {\n return idx + 1;\n }\n }\n}\n\nconst isNonWrappedElement = (element: HTMLElement | null) =>\n element !== null && !element.classList.contains(\"wrapped\");\n\nconst getElementByPosition = (container: HTMLElement | null, index: number) =>\n container\n ? (container.querySelector(`[data-index=\"${index}\"]`) as HTMLElement)\n : null;\n\nexport interface ContainerNavigationProps {\n onBlur: FocusEventHandler;\n onFocus: FocusEventHandler;\n onMouseDownCapture: MouseEventHandler;\n onMouseLeave: MouseEventHandler;\n}\n\ninterface TabstripNavigationHookProps {\n containerRef: RefObject<HTMLElement>;\n defaultHighlightedIdx?: number;\n highlightedIdx?: number;\n keyBoardActivation?: \"manual\" | \"automatic\";\n orientation: orientationType;\n selectedIndex: number | null;\n}\n\ninterface TabstripNavigationHookResult {\n containerProps: ContainerNavigationProps;\n highlightedIdx: number;\n focusTab: (\n tabIndex: number,\n immediateFocus?: boolean,\n withKeyboard?: boolean,\n delay?: number\n ) => void;\n focusVisible: number;\n focusIsWithinComponent: boolean;\n onClick: (evt: ReactMouseEvent, tabIndex: number) => void;\n onFocus: (evt: FocusEvent<HTMLElement>) => void;\n onKeyDown: (evt: KeyboardEvent) => void;\n setHighlightedIdx: (highlightedIndex: number) => void;\n}\n\nexport const useKeyboardNavigation = ({\n containerRef,\n defaultHighlightedIdx = -1,\n highlightedIdx: highlightedIdxProp,\n keyBoardActivation,\n orientation,\n selectedIndex: selectedTabIndex = 0,\n}: TabstripNavigationHookProps): TabstripNavigationHookResult => {\n const manualActivation = keyBoardActivation === \"manual\";\n const mouseClickPending = useRef(false);\n const focusedRef = useRef<number>(-1);\n const [hasFocus, setHasFocus] = useState(false);\n const [, forceRefresh] = useState({});\n const [highlightedIdx, _setHighlightedIdx] = useControlled({\n controlled: highlightedIdxProp,\n default: defaultHighlightedIdx,\n name: \"UseKeyboardNavigation\",\n });\n\n const setHighlightedIdx = useCallback(\n (value: number) => {\n _setHighlightedIdx((focusedRef.current = value));\n },\n [_setHighlightedIdx]\n );\n\n const keyboardNavigation = useRef(false);\n\n const focusTab = useCallback(\n (\n tabIndex: number,\n immediateFocus = false,\n withKeyboard?: boolean,\n delay = 70\n ) => {\n // The timeout is important in two scenarios:\n // 1) where tab has overflowed and is being selected from overflow menu.\n // We must not focus it until the overflow mechanism + render has restored\n // it to the main display.\n // 2) when we are focussing a new tab\n // We MUST NOT delay focus when using keyboard nav, else when focus moves from\n // close button (focus ring styled by :focus-visible) to Tab label (focus ring\n // styled by css class) focus style will briefly linger on both.\n setHighlightedIdx(tabIndex);\n\n if (withKeyboard === true && !keyboardNavigation.current) {\n keyboardNavigation.current = true;\n }\n\n const setFocus = () => {\n const element = getElementByPosition(containerRef.current, tabIndex);\n if (element) {\n const focussableElement = getFocusableElement(element);\n focussableElement?.focus();\n }\n };\n if (immediateFocus) {\n setFocus();\n } else {\n setTimeout(setFocus, delay);\n }\n },\n [containerRef, setHighlightedIdx]\n );\n\n const onFocus = (e: FocusEvent<HTMLElement>) => {\n // If focus is received by keyboard navigation, item with tabindex 0 will receive\n // focus. If the item receiving focus has tabindex -1, then focus has been set\n // programatically. We must respect this and not reset focus to selected tab.\n if (focusedRef.current === -1) {\n // Focus is entering tabstrip. Assume keyboard - if it'a actually mouse-driven,\n // the click event will have set correct value.\n if (e.target.tabIndex === -1) {\n // Do nothing, assume focus is being passed back to button by closing dialog. Might need\n // to revisit this and add code here if we may get focus set programatically in other ways.\n } else {\n const index = getIndexOfEditedItem(containerRef.current);\n if (index !== -1) {\n requestAnimationFrame(() => {\n setHighlightedIdx(index);\n });\n } else {\n setTimeout(() => {\n // The selected tab will have tabIndex 0 make sure our internal state is aligned.\n if (focusedRef.current === -1 && selectedTabIndex !== null) {\n setHighlightedIdx(selectedTabIndex);\n }\n }, 200);\n }\n }\n }\n };\n\n const getIndexCount = useCallback(\n () => containerRef.current?.querySelectorAll(`[data-index]`).length ?? 0,\n [containerRef]\n );\n\n const nextFocusableItemIdx = useCallback(\n (direction: directionType = \"fwd\", idx?: number) => {\n const indexCount = getIndexCount();\n const index = typeof idx === \"number\" ? idx : indexCount;\n\n let nextIdx = nextItemIdx(indexCount, direction, index);\n const nextDirection =\n direction === \"start\" ? \"fwd\" : direction === \"end\" ? \"bwd\" : direction;\n while (\n ((nextDirection === \"fwd\" && nextIdx < indexCount) ||\n (nextDirection === \"bwd\" && nextIdx > 0)) &&\n !isNonWrappedElement(\n getElementByPosition(containerRef.current, nextIdx)\n )\n ) {\n const newIdx = nextItemIdx(indexCount, nextDirection, nextIdx);\n if (newIdx === nextIdx) {\n break;\n } else {\n nextIdx = newIdx;\n }\n }\n return nextIdx;\n },\n [containerRef, getIndexCount]\n );\n\n // forceFocusVisible supports an edge case - first or last Tab are clicked\n // then Left or Right Arrow keys are pressed, There will be no navigation\n // but focusVisible must be applied\n const navigateChildItems = useCallback(\n (e: React.KeyboardEvent, forceFocusVisible = false) => {\n const direction = navigation[orientation][e.key];\n const nextIdx = nextFocusableItemIdx(direction, highlightedIdx);\n if (nextIdx !== highlightedIdx) {\n const immediateFocus = true;\n if (manualActivation) {\n focusTab(nextIdx, immediateFocus);\n } else {\n // activateTab(newTabIndex);\n }\n } else if (forceFocusVisible) {\n forceRefresh({});\n }\n },\n [\n highlightedIdx,\n manualActivation,\n nextFocusableItemIdx,\n focusTab,\n orientation,\n ]\n );\n\n const highlightedTabHasMenu = useCallback(() => {\n const el = getElementByPosition(containerRef.current, highlightedIdx);\n if (el) {\n return el.querySelector(\".vuuPopupMenu\") != null;\n }\n return false;\n }, [containerRef, highlightedIdx]);\n\n const activateTabMenu = useCallback(() => {\n const el = getElementByPosition(containerRef.current, highlightedIdx);\n const menuEl = el?.querySelector(\".vuuPopupMenu\") as HTMLElement;\n if (menuEl) {\n const evt = new MouseEvent(\"click\", {\n view: window,\n bubbles: true,\n cancelable: true,\n });\n menuEl.dispatchEvent(evt);\n }\n return false;\n }, [containerRef, highlightedIdx]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (getIndexCount() > 0 && isNavigationKey(e.key, orientation)) {\n e.preventDefault();\n if (keyboardNavigation.current) {\n navigateChildItems(e);\n } else {\n keyboardNavigation.current = true;\n navigateChildItems(e, true);\n }\n } else if (isMenuActivationKey(e.key) && highlightedTabHasMenu()) {\n activateTabMenu();\n }\n },\n [\n activateTabMenu,\n getIndexCount,\n highlightedTabHasMenu,\n navigateChildItems,\n orientation,\n ]\n );\n\n // TODO, in common hooks, we use mouse movement to track current highlighted\n // index, rather than rely on component item reporting it\n const handleItemClick = (_: ReactMouseEvent, tabIndex: number) => {\n setHighlightedIdx(tabIndex);\n };\n\n const handleFocus = useCallback(() => {\n if (!hasFocus) {\n setHasFocus(true);\n if (!mouseClickPending.current) {\n keyboardNavigation.current = true;\n } else {\n mouseClickPending.current = false;\n }\n }\n }, [hasFocus]);\n\n const handleContainerMouseDown = useCallback(() => {\n if (!hasFocus) {\n mouseClickPending.current = true;\n }\n keyboardNavigation.current = false;\n }, [hasFocus]);\n\n const containerProps = {\n onBlur: (e: FocusEvent) => {\n const sourceTarget = (e.target as HTMLElement).closest(\".vuuTabstrip\");\n const destTarget = e.relatedTarget as HTMLElement;\n if (sourceTarget && !sourceTarget?.contains(destTarget)) {\n setHighlightedIdx(-1);\n setHasFocus(false);\n }\n },\n onMouseDownCapture: handleContainerMouseDown,\n onFocus: handleFocus,\n onMouseLeave: () => {\n keyboardNavigation.current = true;\n setHighlightedIdx(-1);\n mouseClickPending.current = false;\n },\n };\n\n return {\n containerProps,\n focusVisible: keyboardNavigation.current ? highlightedIdx : -1,\n focusIsWithinComponent: hasFocus,\n highlightedIdx,\n focusTab,\n onClick: handleItemClick,\n onFocus,\n onKeyDown: handleKeyDown,\n setHighlightedIdx,\n };\n};\n", "import { useControlled } from \"@salt-ds/core\";\nimport { KeyboardEvent, MouseEvent, useCallback } from \"react\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nexport const isTabElement = (el: HTMLElement): boolean =>\n el && el.matches('[class*=\"vuuTab \"]');\n\n// TODO use SelectionProps\nexport const useSelection = ({\n defaultSelected,\n highlightedIdx,\n onSelectionChange,\n selected: selectedProp,\n}: {\n defaultSelected?: number;\n highlightedIdx: number;\n onSelectionChange?: (tabIndex: number) => void;\n selected?: number;\n}): {\n activateTab: (tabIndex: number) => void;\n isControlled: boolean;\n onClick: (evt: MouseEvent<Element>, tabIndex: number) => void;\n onKeyDown: (evt: KeyboardEvent) => void;\n selected: number;\n} => {\n const [selected, setSelected, isControlled] = useControlled({\n controlled: selectedProp,\n default: defaultSelected ?? 0,\n name: \"Tabstrip\",\n state: \"value\",\n });\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent) => defaultSelectionKeys.includes(evt.key),\n []\n );\n\n const selectItem = useCallback(\n (tabIndex: number) => {\n setSelected(tabIndex);\n onSelectionChange?.(tabIndex);\n },\n [onSelectionChange, setSelected]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n const targetElement = e.target as HTMLElement;\n if (\n isSelectionEvent(e) &&\n highlightedIdx !== selected &&\n isTabElement(targetElement)\n ) {\n e.stopPropagation();\n e.preventDefault();\n selectItem(highlightedIdx);\n }\n },\n [isSelectionEvent, highlightedIdx, selected, selectItem]\n );\n\n const onClick = useCallback(\n (e: MouseEvent, tabIndex: number) => {\n if (tabIndex !== selected) {\n selectItem(tabIndex);\n }\n },\n [selectItem, selected]\n );\n\n return {\n activateTab: selectItem,\n isControlled,\n onClick,\n onKeyDown: handleKeyDown,\n selected,\n };\n};\n", "// TODO close button needs to be a button. Hence tab needs to include 2 buttons\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport { MenuActionHandler } from \"packages/vuu-data-types\";\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useCallback,\n useRef,\n} from \"react\";\nimport { EditableLabel, EditableLabelProps } from \"../editable-label\";\nimport { TabMenu } from \"./TabMenu\";\nimport { TabProps } from \"./TabsTypes\";\n\nimport \"./Tab.css\";\n\nconst classBase = \"vuuTab\";\n\nconst noop = () => undefined;\n\nexport const Tab = forwardRef(function Tab(\n {\n ariaControls,\n children,\n className,\n closeable = false,\n dragging,\n editable = false,\n editing,\n focusVisible,\n index = -1,\n label,\n location,\n onClick,\n onClose,\n onEnterEditMode = noop,\n onExitEditMode = noop,\n onFocus: onFocusProp,\n onKeyUp,\n onMenuAction,\n onMenuClose,\n orientation,\n selected,\n showMenuButton = closeable || editable,\n tabIndex,\n ...props\n }: TabProps,\n ref: ForwardedRef<HTMLDivElement>\n): ReactElement<TabProps> {\n if (showMenuButton && typeof onMenuAction !== \"function\") {\n throw Error(\"Tab onMenuAction must be provided if showMenuButton is set\");\n }\n\n const rootRef = useRef<HTMLDivElement>(null);\n const editableRef = useRef<HTMLDivElement>(null);\n const setForkRef = useForkRef(ref, rootRef);\n const handleClick = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n if (!editing) {\n e.preventDefault();\n onClick?.(e, index);\n }\n },\n [editing, index, onClick]\n );\n\n const handleOnExitEditMode: EditableLabelProps[\"onExitEditMode\"] = (\n originalValue = \"\",\n editedValue = \"\",\n allowDeactivation = true\n ) => onExitEditMode(originalValue, editedValue, allowDeactivation, index);\n\n const handleKeyUp = (e: KeyboardEvent) => {\n switch (e.key) {\n case \"Backspace\":\n case \"Delete\":\n if (closeable) {\n e.stopPropagation();\n onClose && onClose(index);\n }\n break;\n default:\n onKeyUp && onKeyUp(e, index);\n }\n };\n\n const getLabel = () => {\n if (editable) {\n return (\n <EditableLabel\n editing={editing}\n defaultValue={label}\n // Create a fresh instance after each edit, so it can be uncontrolled ...\n key={label}\n onEnterEditMode={onEnterEditMode}\n onExitEditMode={handleOnExitEditMode}\n ref={editableRef}\n />\n );\n } else {\n return label;\n }\n };\n\n const handleFocus = (evt: FocusEvent<HTMLElement>) => {\n if (editableRef.current) {\n const editable = editableRef.current as HTMLElement;\n const input = editable.querySelector(\n \".vuuEditableLabel-input\"\n ) as HTMLInputElement;\n input?.focus();\n }\n onFocusProp?.(evt);\n };\n\n return (\n <div\n {...props}\n aria-controls={ariaControls}\n aria-selected={selected}\n className={cx(classBase, {\n [`${classBase}-closeable`]: closeable,\n \"vuuDraggable-dragAway\": dragging,\n [`${classBase}-editing`]: editing,\n [`${classBase}-selected`]: selected || undefined,\n [`${classBase}-vertical`]: orientation === \"vertical\",\n [`vuuFocusVisible`]: focusVisible,\n })}\n onClick={handleClick}\n onFocus={handleFocus}\n onKeyUp={handleKeyUp}\n ref={setForkRef}\n role=\"tab\"\n tabIndex={tabIndex}\n >\n <div className={`${classBase}-main`}>\n <span\n className={`${classBase}-text`}\n // data-text is important, it determines the width of the tab. A pseudo\n // element assigns data-text as content. This is styled as selected tab\n // text. That means width of tab always corresponds to its selected state,\n // so tabs do not change size when selected (ie when the text is bolded).\n // Do not include if we have editable content, EditableLabel will determine\n // the width\n data-text={editable ? undefined : label}\n >\n {children ?? getLabel()}\n </span>\n </div>\n {showMenuButton ? (\n <TabMenu\n allowClose={closeable}\n allowRename={editable}\n location={location}\n onMenuAction={onMenuAction as MenuActionHandler}\n onMenuClose={onMenuClose}\n index={index}\n />\n ) : null}\n </div>\n );\n});\n", "import { PopupMenu } from \"@vuu-ui/vuu-popups\";\nimport {\n ContextMenuItemDescriptor,\n MenuActionHandler,\n MenuBuilder,\n} from \"packages/vuu-data-types\";\nimport { useMemo } from \"react\";\nimport cx from \"classnames\";\n\nimport \"./TabMenu.css\";\nimport { closeCommand, MenuOptions, renameCommand } from \"./TabMenuOptions\";\n\nconst classBase = \"vuuTabMenu\";\n\nexport interface TabMenuProps {\n allowClose: boolean;\n allowRename: boolean;\n location?: string;\n onMenuAction: MenuActionHandler;\n onMenuClose?: () => void;\n index: number;\n}\n\nexport const TabMenu = ({\n allowClose,\n allowRename,\n location,\n onMenuAction,\n onMenuClose,\n index,\n}: TabMenuProps) => {\n const [menuBuilder, menuOptions] = useMemo(\n (): [MenuBuilder, MenuOptions] => [\n (_location, options) => {\n const menuItems: ContextMenuItemDescriptor[] = [];\n if (allowRename) {\n menuItems.push(renameCommand(options as MenuOptions));\n }\n if (allowClose) {\n menuItems.push(closeCommand(options as MenuOptions));\n }\n return menuItems;\n },\n {\n tabIndex: index,\n },\n ],\n [allowClose, allowRename, index]\n );\n\n return (\n <PopupMenu\n className={classBase}\n menuBuilder={menuBuilder}\n menuActionHandler={onMenuAction}\n menuLocation={cx(\"tab\", location)}\n menuOptions={menuOptions}\n onMenuClose={onMenuClose}\n tabIndex={-1}\n />\n );\n};\n", "import { useForkRef, useIdMemo as useId } from \"@salt-ds/core\";\nimport cx from \"classnames\";\nimport {\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n MouseEvent,\n useRef,\n} from \"react\";\nimport { closestListItemIndex } from \"./list-dom-utils\";\nimport { useItemsWithIds } from \"./use-items-with-ids\";\nimport {\n GroupSelection,\n groupSelectionEnabled,\n TreeNodeSelectionHandler,\n TreeSelection,\n} from \"./use-selection\";\nimport { useViewportTracking } from \"./use-viewport-tracking\";\nimport { useTree } from \"./useTree\";\n\nimport \"./Tree.css\";\n\nconst classBase = \"vuuTree\";\n\ntype Indexer = {\n value: number;\n};\n\nexport interface TreeSourceNode {\n id: string;\n icon?: string;\n header?: boolean;\n label: string;\n childNodes?: TreeSourceNode[];\n}\nexport interface NormalisedTreeSourceNode extends TreeSourceNode {\n childNodes?: NormalisedTreeSourceNode[];\n count: number;\n expanded?: boolean;\n index: number;\n level: number;\n}\n\nexport interface NonLeafNode extends NormalisedTreeSourceNode {\n childNodes: NormalisedTreeSourceNode[];\n}\n\nexport const isExpanded = (\n node: NormalisedTreeSourceNode\n): node is NonLeafNode => node.expanded === true;\n\nexport interface TreeNodeProps extends HTMLAttributes<HTMLLIElement> {\n idx?: number;\n}\n\n// eslint-disable-next-line no-unused-vars\nexport const TreeNode = ({ children, idx, ...props }: TreeNodeProps) => {\n return <li {...props}>{children}</li>;\n};\n\nexport interface TreeProps extends HTMLAttributes<HTMLUListElement> {\n allowDragDrop?: boolean;\n defaultSelected?: any;\n groupSelection?: GroupSelection;\n onHighlight?: (index: number) => void;\n onSelectionChange: (selected: TreeSourceNode[]) => void;\n revealSelected?: boolean;\n selected?: string[];\n selection?: TreeSelection;\n source: TreeSourceNode[];\n}\n\nconst Tree = forwardRef(function Tree(\n {\n allowDragDrop,\n className,\n defaultSelected,\n groupSelection = \"none\",\n id: idProp,\n onHighlight,\n onSelectionChange,\n revealSelected,\n selected: selectedProp,\n selection = \"single\",\n source,\n ...htmlAttributes\n }: TreeProps,\n forwardedRef: ForwardedRef<HTMLUListElement>\n) {\n const id = useId(idProp);\n const rootRef = useRef<HTMLUListElement>(null);\n\n // returns the full source data\n const [, sourceWithIds, sourceItemById] = useItemsWithIds(source, id, {\n revealSelected: revealSelected\n ? selectedProp ?? defaultSelected ?? false\n : undefined,\n });\n\n const handleSelectionChange: TreeNodeSelectionHandler = (evt, selected) => {\n if (onSelectionChange) {\n const sourceItems = selected\n .map((id) => sourceItemById(id))\n .filter((sourceItem) => sourceItem !== undefined) as TreeSourceNode[];\n onSelectionChange(sourceItems);\n }\n };\n\n const {\n focusVisible,\n highlightedIdx,\n hiliteItemAtIndex,\n listProps,\n listItemHandlers,\n selected,\n visibleData,\n } = useTree({\n defaultSelected,\n groupSelection,\n onChange: handleSelectionChange,\n onHighlight,\n selected: selectedProp,\n selection,\n sourceWithIds,\n });\n\n // const isScrolling = useViewportTracking(root, highlightedIdx);\n useViewportTracking(rootRef, highlightedIdx);\n\n const defaultItemHandlers = {\n onMouseEnter: (evt: MouseEvent) => {\n // if (!isScrolling.current) {\n const targetEl = evt.target as HTMLElement;\n const idx = closestListItemIndex(targetEl);\n hiliteItemAtIndex(idx);\n // onMouseEnterListItem && onMouseEnterListItem(evt, idx);\n // }\n },\n };\n\n const propsCommonToAllListItems = {\n ...defaultItemHandlers,\n ...listItemHandlers,\n role: \"treeitem\",\n };\n const allowGroupSelect = groupSelectionEnabled(groupSelection);\n\n /**\n * Add a ListItem from source item\n */\n function addLeafNode(\n list: JSX.Element[],\n item: NormalisedTreeSourceNode,\n idx: Indexer\n ) {\n list.push(\n <TreeNode\n {...propsCommonToAllListItems}\n {...getListItemProps(item, idx, highlightedIdx, selected, focusVisible)}\n >\n {item.icon ? (\n <span className={`${classBase}Node-icon`} data-icon={item.icon} />\n ) : null}\n <span>{item.label}</span>\n </TreeNode>\n );\n idx.value += 1;\n }\n\n function addGroupNode(\n list: JSX.Element[],\n child: NormalisedTreeSourceNode,\n idx: Indexer,\n id: string,\n title: string\n ) {\n const { value: i } = idx;\n idx.value += 1;\n list.push(\n <TreeNode\n {...listItemHandlers}\n aria-expanded={child.expanded}\n aria-level={child.level}\n aria-selected={selected.includes(id) || undefined}\n className={cx(`${classBase}Node`, {\n focusVisible: focusVisible === i,\n [`${classBase}Node-toggle`]: !allowGroupSelect,\n })}\n data-idx={i}\n data-highlighted={i === highlightedIdx || undefined}\n data-selectable\n id={id}\n key={`header-${i}`}\n >\n {allowGroupSelect ? (\n <div className={`${classBase}Node-label`}>\n <span className={`${classBase}Node-toggle`} />\n {title}\n </div>\n ) : (\n <div className={`${classBase}Node-label`}>\n {child.icon ? (\n <span\n className={`${classBase}Node-icon`}\n data-icon={child.icon}\n />\n ) : null}\n <span>{title}</span>\n </div>\n )}\n <ul role=\"group\">\n {isExpanded(child) ? renderSourceContent(child.childNodes, idx) : \"\"}\n </ul>\n </TreeNode>\n );\n }\n\n function renderSourceContent(\n items: NormalisedTreeSourceNode[],\n idx = { value: 0 }\n ) {\n if (items?.length > 0) {\n const listItems: JSX.Element[] = [];\n for (const item of items) {\n if (item.childNodes) {\n addGroupNode(listItems, item, idx, item.id, item.label);\n } else {\n addLeafNode(listItems, item, idx);\n }\n }\n return listItems;\n }\n }\n\n return (\n <ul\n {...htmlAttributes}\n {...listProps}\n className={cx(classBase, className)}\n id={`Tree-${id}`}\n ref={useForkRef<HTMLUListElement>(rootRef, forwardedRef)}\n role=\"tree\"\n tabIndex={0}\n >\n {renderSourceContent(visibleData)}\n </ul>\n );\n});\n\nconst getListItemProps = (\n item: NormalisedTreeSourceNode,\n idx: Indexer,\n highlightedIdx: number,\n selected: string[],\n focusVisible: number,\n className?: string\n) => ({\n id: item.id,\n key: item.id,\n \"aria-level\": item.level,\n \"aria-selected\": selected.includes(item.id) || undefined,\n \"data-idx\": idx.value,\n \"data-highlighted\": idx.value === highlightedIdx || undefined,\n className: cx(\"vuuTreeNode\", className, {\n focusVisible: focusVisible === idx.value,\n }),\n});\n\nTree.displayName = \"Tree\";\nexport default Tree;\n", "export const listItemElement = (listEl: HTMLElement, listItemIdx: number) =>\n listEl.querySelector(`:scope > [data-idx=\"${listItemIdx}\"]`);\n\nexport function listItemIndex(listItemEl: HTMLElement) {\n if (listItemEl) {\n let idx = listItemEl.dataset.idx;\n if (idx) {\n return parseInt(idx, 10);\n // eslint-disable-next-line no-cond-assign\n } else if ((idx = listItemEl.ariaPosInSet ?? \"-1\")) {\n return parseInt(idx, 10) - 1;\n }\n }\n}\n\nexport const listItemId = (el: HTMLElement | null) => el?.id;\n\nexport const closestListItem = (el: HTMLElement) =>\n el.closest(\"[data-idx],[aria-posinset]\") as HTMLElement;\n\nexport const closestListItemId = (el: HTMLElement) =>\n listItemId(closestListItem(el));\n\nexport const closestListItemIndex = (el: HTMLElement) =>\n listItemIndex(closestListItem(el));\n", "import { useCallback, useMemo } from \"react\";\nimport { NormalisedTreeSourceNode, TreeSourceNode } from \"./Tree\";\n\nconst PathSeparators = new Set([\"/\", \"-\", \".\"]);\n// TODO where do we define or identify separators\nconst isPathSeparator = (char: string) => PathSeparators.has(char);\n\nconst isParentPath = (parentPath: string, childPath: string) =>\n childPath.startsWith(parentPath) &&\n isPathSeparator(childPath[parentPath.length]);\n\ntype Indexer = {\n index: number;\n};\n\ntype SourceItemById = (\n id: string,\n target?: NormalisedTreeSourceNode[]\n) => TreeSourceNode | undefined;\n\nexport const useItemsWithIds = (\n sourceProp: TreeSourceNode[],\n idRoot = \"root\",\n {\n collapsibleHeaders = undefined,\n defaultExpanded = false,\n revealSelected = false,\n } = {}\n): [number, NormalisedTreeSourceNode[], SourceItemById] => {\n const countChildItems = (\n item: TreeSourceNode,\n items: TreeSourceNode[],\n idx: number\n ) => {\n if (item.childNodes) {\n return item.childNodes.length;\n } else if (item.header) {\n let i = idx + 1;\n let count = 0;\n while (i < items.length && !items[i].header) {\n count++;\n i++;\n }\n return count;\n } else {\n return 0;\n }\n };\n\n const isExpanded = useCallback(\n (path) => {\n if (Array.isArray(revealSelected)) {\n return revealSelected.some((id) => isParentPath(path, id));\n }\n return defaultExpanded;\n },\n [defaultExpanded, revealSelected]\n );\n\n const normalizeItems = useCallback(\n (\n items: TreeSourceNode[],\n indexer: Indexer,\n level = 1,\n path = \"\",\n results: NormalisedTreeSourceNode[] = [],\n flattenedSource: TreeSourceNode[] = []\n ): [number, NormalisedTreeSourceNode[], TreeSourceNode[]] => {\n let count = 0;\n // TODO get rid of the Proxy\n items.forEach((item, i, all) => {\n const isCollapsibleHeader = item.header && collapsibleHeaders;\n const isNonCollapsibleGroupNode =\n item.childNodes && collapsibleHeaders === false;\n const isLeaf = !item.childNodes || item.childNodes.length === 0;\n const nonCollapsible =\n isNonCollapsibleGroupNode || (isLeaf && !isCollapsibleHeader);\n const childPath = path ? `${path}.${i}` : `${i}`;\n const id = item.id ?? `${idRoot}-${childPath}`;\n\n const expanded = nonCollapsible ? undefined : isExpanded(id);\n //TODO dev time check - if id is provided by user, make sure\n // hierarchical pattern is consistent\n const normalisedItem: NormalisedTreeSourceNode = {\n ...item,\n childNodes: undefined,\n id,\n count:\n !isNonCollapsibleGroupNode && expanded === undefined\n ? 0\n : countChildItems(item, all, i),\n expanded,\n index: indexer.index,\n level,\n };\n results.push(normalisedItem);\n flattenedSource.push(items[i]);\n\n count += 1;\n indexer.index += 1;\n\n // if ((isNonCollapsibleGroupNode || expanded !== undefined) && !isCollapsibleHeader) {\n if (item.childNodes) {\n const [childCount, children] = normalizeItems(\n item.childNodes,\n indexer,\n level + 1,\n childPath,\n [],\n flattenedSource\n );\n normalisedItem.childNodes = children;\n if (expanded === true || isNonCollapsibleGroupNode) {\n count += childCount;\n }\n }\n });\n return [count, results, flattenedSource];\n },\n [collapsibleHeaders, idRoot, isExpanded]\n );\n\n const [count, sourceWithIds, flattenedSource] = useMemo<\n [number, NormalisedTreeSourceNode[], TreeSourceNode[]]\n >(() => {\n return normalizeItems(sourceProp, { index: 0 });\n }, [normalizeItems, sourceProp]);\n\n const sourceItemById = useCallback<SourceItemById>(\n (id, target = sourceWithIds): TreeSourceNode | undefined => {\n const sourceWithId = target.find(\n (i) => i.id === id || (i?.childNodes?.length && isParentPath(i.id, id))\n );\n if (sourceWithId?.id === id) {\n return flattenedSource[sourceWithId.index];\n } else if (sourceWithId) {\n return sourceItemById(id, sourceWithId.childNodes);\n }\n },\n [flattenedSource, sourceWithIds]\n );\n\n return [count, sourceWithIds, sourceItemById];\n};\n", "import {\n KeyboardEvent,\n MouseEvent,\n SyntheticEvent,\n useCallback,\n useRef,\n} from \"react\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { NormalisedTreeSourceNode } from \"./Tree\";\n\nexport type TreeSelection =\n | \"none\"\n | \"single\"\n | \"checkbox\"\n | \"multi\"\n | \"extended\";\n\nexport const SINGLE = \"single\";\nexport const CHECKBOX = \"checkbox\";\nexport const MULTI = \"multi\";\nexport const EXTENDED = \"extended\";\n\nexport type GroupSelection = \"none\" | \"single\" | \"cascade\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nconst NO_HANDLERS = {};\n\nconst isCollapsibleItem = (item: NormalisedTreeSourceNode) =>\n item.expanded !== undefined;\n\nexport type TreeNodeSelectionHandler = (\n evt: SyntheticEvent,\n selected: string[]\n) => void;\n\nexport const groupSelectionEnabled = (groupSelection: GroupSelection) =>\n groupSelection && groupSelection !== \"none\";\n\nexport interface SelectionHookProps {\n defaultSelected?: string[];\n highlightedIdx: number;\n onChange: TreeNodeSelectionHandler;\n selected?: string[];\n selection: TreeSelection;\n selectionKeys?: string[];\n treeNodes: NormalisedTreeSourceNode[];\n}\n\nexport interface SelectionHookResult {\n listHandlers: {\n onKeyDown?: (evt: KeyboardEvent) => void;\n onKeyboardNavigation?: (evt: KeyboardEvent, currentIndex: number) => void;\n };\n listItemHandlers: {\n onClick?: (evt: MouseEvent) => void;\n };\n selected: string[];\n setSelected: (selected: string[]) => void;\n}\n\nexport const useSelection = ({\n defaultSelected,\n highlightedIdx,\n treeNodes,\n onChange,\n selected: selectedProp,\n selection = SINGLE,\n selectionKeys = defaultSelectionKeys,\n}: SelectionHookProps): SelectionHookResult => {\n const singleSelect = selection === SINGLE;\n const multiSelect = selection === MULTI || selection.startsWith(CHECKBOX);\n const extendedSelect = selection === EXTENDED;\n const lastActive = useRef(-1);\n\n const isSelectionEvent = useCallback(\n (evt) => selectionKeys.includes(evt.key),\n [selectionKeys]\n );\n\n const [selected, setSelected] = useControlled({\n controlled: selectedProp,\n default: defaultSelected ?? [],\n name: \"selected\",\n });\n\n // const highlightedIdxRef = useRef();\n // highlightedIdxRef.current = highlightedIdx;\n\n const selectItemAtIndex = useCallback(\n (\n evt: SyntheticEvent,\n idx: number,\n id: string,\n rangeSelect: boolean,\n preserveExistingSelection = false\n ) => {\n const { current: active } = lastActive;\n const isSelected = selected?.includes(id);\n const inactiveRange = active === -1;\n const actsLikeSingleSelect =\n singleSelect ||\n (extendedSelect &&\n !preserveExistingSelection &&\n (!rangeSelect || inactiveRange));\n const actsLikeMultiSelect =\n multiSelect ||\n (extendedSelect && preserveExistingSelection && !rangeSelect);\n\n let newSelected: string[] = [];\n if (actsLikeSingleSelect && isSelected) {\n newSelected = [];\n } else if (actsLikeSingleSelect) {\n newSelected = [id];\n } else if (actsLikeMultiSelect && isSelected) {\n newSelected = selected.filter((i) => i !== id);\n } else if (actsLikeMultiSelect) {\n newSelected = selected.concat(id);\n } else if (extendedSelect) {\n const [from, to] = idx > active ? [active, idx] : [idx, active];\n newSelected = selected.slice();\n for (let i = from; i <= to; i++) {\n const { id } = treeNodes[i];\n if (!selected.includes(id)) {\n newSelected.push(id);\n }\n }\n }\n setSelected(newSelected);\n if (onChange) {\n onChange(evt, newSelected);\n }\n },\n [\n extendedSelect,\n treeNodes,\n multiSelect,\n onChange,\n selected,\n setSelected,\n singleSelect,\n ]\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n if (~highlightedIdx && isSelectionEvent(evt)) {\n evt.preventDefault();\n const item = treeNodes[highlightedIdx];\n selectItemAtIndex(\n evt,\n highlightedIdx,\n item.id,\n false,\n evt.ctrlKey || evt.metaKey\n );\n if (extendedSelect) {\n lastActive.current = highlightedIdx;\n }\n }\n },\n [\n extendedSelect,\n highlightedIdx,\n treeNodes,\n isSelectionEvent,\n selectItemAtIndex,\n ]\n );\n\n const handleKeyboardNavigation = useCallback(\n (evt: KeyboardEvent, currentIndex: number) => {\n if (extendedSelect && evt.shiftKey) {\n const item = treeNodes[currentIndex];\n selectItemAtIndex(evt, currentIndex, item.id, true);\n }\n },\n [extendedSelect, treeNodes, selectItemAtIndex]\n );\n\n const listHandlers =\n selection === \"none\"\n ? NO_HANDLERS\n : {\n onKeyDown: handleKeyDown,\n onKeyboardNavigation: handleKeyboardNavigation,\n };\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n if (highlightedIdx !== -1) {\n const item = treeNodes[highlightedIdx];\n if (!isCollapsibleItem(item)) {\n evt.preventDefault();\n evt.stopPropagation();\n selectItemAtIndex(\n evt,\n highlightedIdx,\n item.id,\n evt.shiftKey,\n evt.ctrlKey || evt.metaKey\n );\n if (extendedSelect) {\n lastActive.current = highlightedIdx;\n }\n }\n }\n },\n [extendedSelect, highlightedIdx, treeNodes, selectItemAtIndex]\n );\n\n const listItemHandlers =\n selection === \"none\"\n ? NO_HANDLERS\n : {\n onClick: handleClick,\n };\n\n return {\n listHandlers,\n listItemHandlers,\n selected,\n setSelected,\n };\n};\n", "import {\n RefObject,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n} from \"react\";\nimport { useResizeObserver } from \"./use-resize-observer\";\n\nconst HeightOnly = [\"height\", \"scrollHeight\"];\n\nexport const useViewportTracking = (\n root: RefObject<HTMLElement>,\n highlightedIdx: number,\n stickyHeaders = false\n) => {\n const scrollTop = useRef(0);\n const scrolling = useRef(false);\n const rootHeight = useRef(0);\n const rootScrollHeight = useRef(0);\n\n const scrollIntoView = useCallback(\n (el) => {\n const targetEl = el.ariaExpanded ? el.firstChild : el;\n const headerHeight = stickyHeaders ? 30 : 0;\n const t = targetEl.offsetTop;\n const h = targetEl.offsetHeight;\n const viewportStart = scrollTop.current + headerHeight;\n const viewportEnd = viewportStart + rootHeight.current - headerHeight;\n\n if (t + h > viewportEnd || t < viewportStart) {\n scrollTop.current =\n t + h > viewportEnd\n ? scrollTop.current + (t + h) - viewportEnd\n : t - headerHeight;\n\n scrolling.current = true;\n if (root.current) {\n root.current.scrollTop = scrollTop.current;\n }\n setTimeout(() => {\n scrolling.current = false;\n });\n }\n },\n [root, stickyHeaders]\n );\n\n const scrollHandler = useCallback((e) => {\n scrollTop.current = e.target.scrollTop;\n }, []);\n\n useEffect(() => {\n const { current: rootEl } = root;\n if (rootEl) {\n rootEl.addEventListener(\"scroll\", scrollHandler);\n }\n\n return () => {\n if (rootEl) {\n rootEl.removeEventListener(\"scroll\", scrollHandler);\n }\n };\n }, [root, scrollHandler]);\n\n useLayoutEffect(() => {\n if (\n highlightedIdx !== -1 &&\n rootScrollHeight.current > rootHeight.current\n ) {\n if (root.current) {\n const item = root.current.querySelector(`\n [data-idx='${highlightedIdx}'],\n [aria-posinset='${highlightedIdx + 1}']\n `);\n if (item === null) {\n console.log(\n \"[useViewportTracking], is this virtualised ? we're going to have to know rowHeight\"\n );\n } else {\n scrollIntoView(item);\n }\n }\n }\n }, [highlightedIdx, root, scrollIntoView]);\n\n useEffect(() => {\n // onsole.log('TODO measure the sticky header')\n }, [stickyHeaders]);\n\n const onResize = useCallback(({ height, scrollHeight }) => {\n rootHeight.current = height;\n rootScrollHeight.current = scrollHeight;\n }, []);\n\n useResizeObserver(root, HeightOnly, onResize, true);\n\n return scrolling;\n};\n", "import { RefObject, useCallback, useEffect, useRef } from \"react\";\n\nexport const WidthHeight = [\"height\", \"width\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n clientHeight?: number;\n clientWidth?: number;\n contentHeight?: number;\n contentWidth?: number;\n scrollHeight?: number;\n scrollWidth?: number;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new Map<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n size: {\n height: number;\n width: number;\n contentHeight: number;\n contentWidth: number;\n },\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return size.height;\n case \"clientHeight\":\n return element.clientHeight;\n case \"clientWidth\":\n return element.clientWidth;\n case \"contentHeight\":\n return size.contentHeight;\n case \"contentWidth\":\n return size.contentWidth;\n case \"scrollHeight\":\n return Math.ceil(element.scrollHeight);\n case \"scrollWidth\":\n return Math.ceil(element.scrollWidth);\n case \"width\":\n return size.width;\n default:\n return 0;\n }\n};\n\nconst isScrollAttribute = {\n scrollHeight: true,\n scrollWidth: true,\n};\n\n// TODO should we make this create-on-demand\nconst resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, borderBoxSize, contentBoxSize } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const [{ blockSize: height, inlineSize: width }] = borderBoxSize;\n const [{ blockSize: contentHeight, inlineSize: contentWidth }] =\n contentBoxSize;\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (let [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n { height, width, contentHeight, contentWidth },\n dimension as measuredDimension\n );\n\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n // TODO only return measured sizes\n onResize && onResize(measurements);\n }\n }\n }\n});\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n) {\n const dimensionsRef = useRef(dimensions);\n\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const { width, height } = target.getBoundingClientRect();\n const { clientWidth: contentWidth, clientHeight: contentHeight } = target;\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(\n target,\n { width, height, contentHeight, contentWidth },\n dim as measuredDimension\n );\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useEffect(() => {\n const target = ref.current as HTMLElement;\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n await document.fonts.ready;\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n } else {\n console.log(\n `%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation`,\n \"font-weight:bold; color:red;\"\n );\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n // TODO set a pending entry on map\n registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [measure, ref]);\n\n useEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n}\n", "import { KeyboardEvent, useCallback, useRef } from \"react\";\nimport { useKeyboardNavigation } from \"./use-keyboard-navigation\";\nimport {\n GroupSelection,\n TreeNodeSelectionHandler,\n TreeSelection,\n useSelection,\n} from \"./use-selection\";\nimport { useHierarchicalData } from \"./use-hierarchical-data\";\nimport { useCollapsibleGroups } from \"./use-collapsible-groups\";\nimport { useTreeKeyboardNavigation } from \"./use-tree-keyboard-navigation\";\nimport { NormalisedTreeSourceNode } from \"./Tree\";\n\nconst EMPTY_ARRAY: string[] = [];\n\nexport interface TreeHookProps {\n defaultSelected?: string[];\n groupSelection: GroupSelection;\n onChange: TreeNodeSelectionHandler;\n onHighlight?: (index: number) => void;\n selected?: string[];\n selection: TreeSelection;\n sourceWithIds: NormalisedTreeSourceNode[];\n}\n\nexport const useTree = ({\n defaultSelected,\n sourceWithIds,\n onChange,\n onHighlight: onHighlightProp,\n selected: selectedProp,\n selection,\n}: TreeHookProps) => {\n const lastSelection = useRef<string[]>(EMPTY_ARRAY);\n const dataHook = useHierarchicalData(sourceWithIds);\n\n const handleKeyboardNavigation = (evt: KeyboardEvent, nextIdx: number) => {\n selectionHook.listHandlers.onKeyboardNavigation?.(evt, nextIdx);\n };\n\n const { highlightedIdx, ...keyboardHook } = useKeyboardNavigation({\n treeNodes: dataHook.indexPositions,\n onHighlight: onHighlightProp,\n onKeyboardNavigation: handleKeyboardNavigation,\n selected: lastSelection.current,\n });\n\n const collapsibleHook = useCollapsibleGroups({\n collapsibleHeaders: true,\n highlightedIdx,\n treeNodes: dataHook.indexPositions,\n setVisibleData: dataHook.setData,\n source: dataHook.data,\n });\n\n const selectionHook = useSelection({\n defaultSelected,\n highlightedIdx,\n treeNodes: dataHook.indexPositions,\n onChange,\n selected: selectedProp,\n selection,\n });\n\n const treeNavigationHook = useTreeKeyboardNavigation({\n source: dataHook.data,\n highlightedIdx,\n hiliteItemAtIndex: keyboardHook.hiliteItemAtIndex,\n indexPositions: dataHook.indexPositions,\n });\n\n const handleClick = useCallback(\n (evt) => {\n collapsibleHook.listItemHandlers?.onClick(evt);\n if (!evt.defaultPrevented) {\n selectionHook.listItemHandlers?.onClick?.(evt);\n }\n },\n [collapsibleHook, selectionHook]\n );\n\n const handleKeyDown = useCallback(\n (evt) => {\n keyboardHook.listProps.onKeyDown?.(evt);\n if (!evt.defaultPrevented) {\n selectionHook.listHandlers.onKeyDown?.(evt);\n }\n if (!evt.defaultPrevented) {\n collapsibleHook.listHandlers.onKeyDown?.(evt);\n }\n if (!evt.defaultPrevented) {\n treeNavigationHook.listHandlers.onKeyDown?.(evt);\n }\n },\n [\n collapsibleHook.listHandlers,\n keyboardHook.listProps,\n selectionHook.listHandlers,\n treeNavigationHook.listHandlers,\n ]\n );\n\n const getActiveDescendant = () =>\n highlightedIdx === undefined || highlightedIdx === -1\n ? undefined\n : dataHook.indexPositions[highlightedIdx]?.id;\n\n // We need this on reEntry for navigation hook to handle focus\n lastSelection.current = selectionHook.selected;\n\n const listProps = {\n \"aria-activedescendant\": getActiveDescendant(),\n onBlur: keyboardHook.listProps.onBlur,\n onFocus: keyboardHook.listProps.onFocus,\n onKeyDown: handleKeyDown,\n onMouseDownCapture: keyboardHook.listProps.onMouseDownCapture,\n onMouseLeave: keyboardHook.listProps.onMouseLeave,\n onMouseMove: keyboardHook.listProps.onMouseMove,\n };\n\n const listItemHandlers = {\n onClick: handleClick,\n };\n\n return {\n focusVisible: keyboardHook.focusVisible,\n highlightedIdx,\n hiliteItemAtIndex: keyboardHook.hiliteItemAtIndex,\n listProps,\n listItemHandlers,\n selected: selectionHook.selected,\n visibleData: dataHook.data,\n };\n};\n", "import { KeyboardEvent, useCallback, useMemo, useRef } from \"react\";\nimport { getIndexOfNode, getNodeById } from \"./hierarchical-data-utils\";\nimport { useControlled } from \"@salt-ds/core\";\nimport { ArrowDown, ArrowLeft, ArrowUp, isNavigationKey } from \"./key-code\";\nimport { NormalisedTreeSourceNode } from \"./Tree\";\n\nfunction nextItemIdx(count: number, key: string, idx: number) {\n if (key === ArrowUp || key === ArrowLeft) {\n if (idx > 0) {\n return idx - 1;\n } else {\n return idx;\n }\n } else {\n if (idx === null) {\n return 0;\n } else if (idx === count - 1) {\n return idx;\n } else {\n return idx + 1;\n }\n }\n}\n\nconst isLeaf = (item: NormalisedTreeSourceNode) =>\n !item.header && !item.childNodes;\nconst isFocusable = (item: NormalisedTreeSourceNode) =>\n isLeaf(item) || item.expanded !== undefined;\n\nexport interface KeyboardNavigationHookProps {\n defaultHighlightedIdx?: number;\n highlightedIdx?: number;\n onHighlight?: (highlightedIdx: number) => void;\n onKeyboardNavigation?: (evt: KeyboardEvent, nextIdx: number) => void;\n selected: string[];\n treeNodes: NormalisedTreeSourceNode[];\n}\n\n// we need a way to set highlightedIdx when selection changes\nexport const useKeyboardNavigation = ({\n defaultHighlightedIdx = -1,\n highlightedIdx: highlightedIdxProp,\n treeNodes,\n onHighlight,\n onKeyboardNavigation,\n selected = [],\n}: KeyboardNavigationHookProps) => {\n const { bwd: ArrowBwd, fwd: ArrowFwd } = useMemo(\n () => ({\n bwd: ArrowUp,\n fwd: ArrowDown,\n }),\n []\n );\n\n const [highlightedIdx, setHighlightedIdx, isControlledHighlighting] =\n useControlled({\n controlled: highlightedIdxProp,\n default: defaultHighlightedIdx,\n name: \"highlightedIdx\",\n });\n\n const setHighlightedIndex = useCallback(\n (idx) => {\n onHighlight?.(idx);\n setHighlightedIdx(idx);\n },\n [onHighlight, setHighlightedIdx]\n );\n\n const nextFocusableItemIdx = useCallback(\n (key = ArrowFwd, idx = key === ArrowFwd ? -1 : treeNodes.length) => {\n let nextIdx = nextItemIdx(treeNodes.length, key, idx);\n while (\n nextIdx !== -1 &&\n ((key === ArrowFwd && nextIdx < treeNodes.length) ||\n (key === ArrowBwd && nextIdx > 0)) &&\n !isFocusable(treeNodes[nextIdx])\n ) {\n nextIdx = nextItemIdx(treeNodes.length, key, nextIdx);\n }\n return nextIdx;\n },\n [ArrowBwd, ArrowFwd, treeNodes]\n );\n\n // does this belong here or should it be a method passed in?\n const keyBoardNavigation = useRef(true);\n const ignoreFocus = useRef(false);\n const setIgnoreFocus = (value: boolean) => (ignoreFocus.current = value);\n\n const handleFocus = useCallback(() => {\n if (ignoreFocus.current) {\n ignoreFocus.current = false;\n } else if (selected.length > 0) {\n const node = getNodeById(treeNodes, selected[0]);\n if (node) {\n const idx = getIndexOfNode(treeNodes, node);\n setHighlightedIndex(idx);\n }\n } else {\n setHighlightedIndex(nextFocusableItemIdx());\n }\n }, [treeNodes, nextFocusableItemIdx, selected, setHighlightedIndex]);\n\n const navigateChildItems = useCallback(\n (e) => {\n const nextIdx = nextFocusableItemIdx(e.key, highlightedIdx);\n if (nextIdx !== highlightedIdx) {\n setHighlightedIndex(nextIdx);\n // What exactly is the point of this ?\n onKeyboardNavigation?.(e, nextIdx);\n }\n },\n [\n highlightedIdx,\n nextFocusableItemIdx,\n onKeyboardNavigation,\n setHighlightedIndex,\n ]\n );\n\n const handleKeyDown = useCallback(\n (e) => {\n if (treeNodes.length > 0 && isNavigationKey(e, \"vertical\")) {\n e.preventDefault();\n e.stopPropagation();\n keyBoardNavigation.current = true;\n navigateChildItems(e);\n }\n },\n [treeNodes, navigateChildItems]\n );\n\n const listProps = useMemo(\n () => ({\n onBlur: () => {\n setHighlightedIndex(-1);\n },\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n onMouseDownCapture: () => {\n keyBoardNavigation.current = false;\n setIgnoreFocus(true);\n },\n\n // onMouseEnter would seem less expensive but it misses some cases\n // SHould this be here - this is not strictly keyboard nav\n onMouseMove: () => {\n if (keyBoardNavigation.current) {\n keyBoardNavigation.current = false;\n }\n },\n onMouseLeave: () => {\n keyBoardNavigation.current = true;\n setIgnoreFocus(false);\n setHighlightedIndex(-1);\n },\n }),\n [handleFocus, handleKeyDown, setHighlightedIndex]\n );\n\n return {\n focusVisible: keyBoardNavigation.current ? highlightedIdx : -1,\n controlledHighlighting: isControlledHighlighting,\n highlightedIdx,\n hiliteItemAtIndex: setHighlightedIndex,\n keyBoardNavigation,\n listProps,\n setIgnoreFocus,\n };\n};\n", "import { NonLeafNode, NormalisedTreeSourceNode } from \"./Tree\";\n\nexport const getNodeParentPath = ({ id }: NormalisedTreeSourceNode) => {\n let pos = id.lastIndexOf(\"-\");\n if (pos !== -1) {\n // using the built-in hierarchical id scheme\n // rootId-n-n.n\n const path = id.slice(pos + 1);\n const steps = path.split(\".\");\n if (steps.length === 1) {\n return null;\n } else {\n steps.pop();\n return `${id.slice(0, pos)}-${steps.join(\".\")}`;\n }\n } else if ((pos = id.lastIndexOf(\"/\")) !== -1) {\n // using a path scheme step/step/step\n return id.slice(0, pos);\n }\n};\n\nexport const isGroupNode = (node: NormalisedTreeSourceNode) =>\n node.childNodes !== undefined;\nexport const isCollapsibleGroupNode = (node: NormalisedTreeSourceNode) =>\n isGroupNode(node) && node.expanded !== undefined;\nexport const isHeader = (node: NormalisedTreeSourceNode) =>\n node.header === true;\n\nconst PATH_SEPARATORS = new Set([\".\", \"/\"]);\n\nconst isDescendantOf = (\n node: NormalisedTreeSourceNode,\n targetPath: string\n): node is NonLeafNode => {\n if (!targetPath.startsWith(node.id)) {\n return false;\n } else {\n return PATH_SEPARATORS.has(targetPath.charAt(node.id.length));\n }\n};\n\nexport const getNodeById = (\n nodes: NormalisedTreeSourceNode[],\n id: string\n): NormalisedTreeSourceNode | undefined => {\n for (const node of nodes) {\n if (node.id === id) {\n return node;\n } else if (isDescendantOf(node, id)) {\n return getNodeById(node.childNodes, id);\n }\n }\n};\n\nexport const getIndexOfNode = (\n treeNodes: NormalisedTreeSourceNode[],\n node: NormalisedTreeSourceNode\n) => {\n const id = typeof node === \"string\" ? node : node.id;\n for (let i = 0; i < treeNodes.length; i++) {\n if (treeNodes[i].id === id) {\n return i;\n }\n }\n};\n\nexport const replaceNode = (\n nodes: NormalisedTreeSourceNode[],\n id: string,\n props: Partial<NormalisedTreeSourceNode>\n): NormalisedTreeSourceNode[] => {\n let childNodes;\n const newNodes = nodes.map((node) => {\n if (node.id === id) {\n return {\n ...node,\n ...props,\n };\n } else if (isDescendantOf(node, id)) {\n childNodes = replaceNode(node.childNodes, id, props);\n return {\n ...node,\n childNodes,\n };\n } else {\n return node;\n }\n });\n\n return newNodes;\n};\n", "import { KeyboardEvent } from \"react\";\n\nfunction union(set1: Set<string>, ...sets: Set<string>[]) {\n const result = new Set(set1);\n for (const set of sets) {\n for (const element of set) {\n result.add(element);\n }\n }\n return result;\n}\n\nexport const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const Backspace = \"Backspace\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Delete = \"Delete\";\n\nconst actionKeys = new Set([Enter, Delete]);\nconst focusKeys = new Set([\"Tab\"]);\n// const navigationKeys = new Set([\"Home\", \"End\", \"ArrowRight\", \"ArrowLeft\",\"ArrowDown\", \"ArrowUp\"]);\nconst arrowLeftRightKeys = new Set([\"ArrowRight\", \"ArrowLeft\"]);\nconst verticalNavigationKeys = new Set([\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\"]);\nconst horizontalNavigationKeys = new Set([\n \"Home\",\n \"End\",\n \"ArrowRight\",\n \"ArrowLeft\",\n]);\nconst functionKeys = new Set([\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n]);\nconst specialKeys = union(\n actionKeys,\n horizontalNavigationKeys,\n verticalNavigationKeys,\n arrowLeftRightKeys,\n functionKeys,\n focusKeys\n);\nexport const isCharacterKey = (evt: KeyboardEvent) => {\n if (specialKeys.has(evt.key)) {\n return false;\n }\n if (typeof evt.which === \"number\" && evt.which > 0) {\n return !evt.ctrlKey && !evt.metaKey && !evt.altKey && evt.which !== 8;\n }\n};\n\nexport const isNavigationKey = (\n { key }: KeyboardEvent,\n orientation = \"vertical\"\n) => {\n const navigationKeys =\n orientation === \"vertical\"\n ? verticalNavigationKeys\n : horizontalNavigationKeys;\n return navigationKeys.has(key);\n};\n", "import { useRef, useState } from \"react\";\nimport { isGroupNode, isHeader } from \"./hierarchical-data-utils\";\nimport { isExpanded, NormalisedTreeSourceNode } from \"./Tree\";\n\nconst populateIndices = (\n nodes: NormalisedTreeSourceNode[],\n results: NormalisedTreeSourceNode[] = [],\n idx = { value: 0 }\n) => {\n let skipToNextHeader = false;\n for (const node of nodes) {\n if (skipToNextHeader && !isHeader(node)) {\n continue;\n } else {\n results[idx.value] = node;\n idx.value += 1;\n skipToNextHeader = false;\n if (isHeader(node) && node.expanded === false) {\n skipToNextHeader = true;\n } else if (isGroupNode(node)) {\n if (isExpanded(node)) {\n populateIndices(node.childNodes, results, idx);\n }\n }\n }\n }\n return results;\n};\n\n//TODO return a read-only data structure\n// Question: is source changes at runtime, do we lose any current state ?\nexport const useHierarchicalData = (source: NormalisedTreeSourceNode[]) => {\n // console.log(`%c[useHierarchicalData<${label}>] entry`, 'color: green; font-weight: bold;');\n\n const externalSource = useRef(source);\n const statefulSource = useRef(source);\n const indexPositions = useRef(populateIndices(source));\n const [, forceUpdate] = useState({});\n\n // Maintain a mapping between nodes and their current index position within the rendered list.\n // This index position is liable to change with every expand/collapse operation. We require this\n // when handling keyboard events - these are List level, not listItem level, so we depend on the\n\n // Client needs to be careful source is not recreated inadvertently on each render\n if (source !== externalSource.current) {\n // console.log(\n // `%cuseHierarchicalData source has changed`,\n // 'color:red;font-weight: bold;',\n // externalSource.current,\n // source\n // );\n externalSource.current = source;\n // we might want to try and merge existing state here ?\n statefulSource.current = source;\n indexPositions.current = populateIndices(source);\n }\n\n const setData = (value: NormalisedTreeSourceNode[]) => {\n statefulSource.current = value;\n indexPositions.current = populateIndices(value);\n // console.log(\n // `data set in ${label} (${indexPositions.current.length} visible items)`,\n // indexPositions.current.map((i) => ({ index: i.index, label: i.label }))\n // );\n forceUpdate({});\n };\n\n return {\n // data, // do we actually use the data anywhere\n data: statefulSource.current,\n indexPositions: indexPositions.current,\n setData,\n };\n};\n", "import { KeyboardEvent, MouseEvent, useCallback, useRef } from \"react\";\nimport { closestListItem } from \"./list-dom-utils\";\nimport { ArrowLeft, ArrowRight, Enter } from \"./key-code\";\nimport { getNodeById, replaceNode } from \"./hierarchical-data-utils\";\nimport { NormalisedTreeSourceNode } from \"./Tree\";\n\nconst NO_HANDLERS: CollapsibleHookResult[\"listHandlers\"] = {};\nconst isToggleElement = (element: HTMLElement) =>\n element && element.hasAttribute(\"aria-expanded\");\n\nexport interface CollapsibleGroupsHookProps {\n collapsibleHeaders?: boolean;\n highlightedIdx: number;\n treeNodes: NormalisedTreeSourceNode[];\n setVisibleData: (nodes: NormalisedTreeSourceNode[]) => void;\n source: NormalisedTreeSourceNode[];\n}\n\nexport interface CollapsibleHookResult {\n listHandlers: {\n onKeyDown?: (e: KeyboardEvent) => void;\n };\n listItemHandlers: {\n onClick: (e: MouseEvent) => void;\n };\n}\n\nexport const useCollapsibleGroups = ({\n collapsibleHeaders,\n highlightedIdx,\n treeNodes,\n setVisibleData,\n source,\n}: CollapsibleGroupsHookProps): CollapsibleHookResult => {\n const fullSource = useRef<NormalisedTreeSourceNode[]>(source);\n const stateSource = useRef<NormalisedTreeSourceNode[]>(fullSource.current);\n\n const setSource = useCallback(\n (value) => {\n setVisibleData((stateSource.current = value));\n },\n [setVisibleData]\n );\n\n const expandNode = useCallback(\n (nodeList: NormalisedTreeSourceNode[], { id }: NormalisedTreeSourceNode) =>\n replaceNode(nodeList, id, { expanded: true }),\n []\n );\n\n const collapseNode = useCallback(\n (nodeList, { id }) => replaceNode(nodeList, id, { expanded: false }),\n []\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === ArrowRight || e.key === Enter) {\n const node = treeNodes[highlightedIdx];\n if (node) {\n if (node.expanded === false) {\n e.preventDefault();\n setSource(expandNode(stateSource.current, node));\n }\n }\n }\n\n if (e.key === ArrowLeft || e.key === Enter) {\n const node = treeNodes[highlightedIdx];\n if (node) {\n if (node.expanded) {\n e.preventDefault();\n setSource(collapseNode(stateSource.current, node));\n }\n }\n }\n },\n [collapseNode, expandNode, highlightedIdx, treeNodes, setSource]\n );\n\n /**\n * These are List handlers, so we will not have reference to the actual node\n * element. We must rely on highlightedIdx to tell us which node is interactive.\n */\n const listHandlers = collapsibleHeaders\n ? {\n onKeyDown: handleKeyDown,\n }\n : NO_HANDLERS;\n\n const handleClick = useCallback(\n (evt) => {\n const el = closestListItem(evt.target);\n if (isToggleElement(el)) {\n evt.stopPropagation();\n evt.preventDefault();\n const node = getNodeById(source, el.id);\n if (node?.expanded === false) {\n setSource(expandNode(source, node));\n } else if (node?.expanded === true) {\n setSource(collapseNode(source, node));\n }\n }\n },\n [collapseNode, expandNode, setSource, source]\n );\n\n const listItemHandlers = {\n onClick: handleClick,\n };\n\n return {\n listHandlers,\n listItemHandlers,\n };\n};\n", "import { useCallback } from \"react\";\nimport { ArrowLeft } from \"./key-code\";\nimport {\n getNodeById,\n getNodeParentPath,\n getIndexOfNode,\n} from \"./hierarchical-data-utils\";\nimport { NormalisedTreeSourceNode } from \"./Tree\";\n\nexport interface TreeKeyboardNavigationHookProps {\n highlightedIdx: number;\n hiliteItemAtIndex: (idx: number) => void;\n indexPositions: NormalisedTreeSourceNode[];\n source: NormalisedTreeSourceNode[];\n}\n\n// we need a way to set highlightedIdx when selection changes\nexport const useTreeKeyboardNavigation = ({\n highlightedIdx,\n hiliteItemAtIndex,\n indexPositions,\n source,\n}: TreeKeyboardNavigationHookProps) => {\n const handleKeyDown = useCallback(\n (e) => {\n if (e.key === ArrowLeft) {\n const node = indexPositions[highlightedIdx];\n const parentId = getNodeParentPath(node);\n if (parentId) {\n e.preventDefault();\n const parentNode = getNodeById(source, parentId);\n if (parentNode) {\n const idx = getIndexOfNode(indexPositions, parentNode);\n if (idx !== undefined) {\n hiliteItemAtIndex(idx);\n }\n }\n }\n }\n },\n [highlightedIdx, hiliteItemAtIndex, indexPositions, source]\n );\n\n const listHandlers = {\n onKeyDown: handleKeyDown,\n };\n\n return {\n listHandlers,\n };\n};\n", "import {\n GroupColumnDescriptor,\n TableCellProps,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n getColumnStyle,\n getGroupValueAndOffset,\n metadataKeys,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback } from \"react\";\n\nimport \"./TableGroupCell.css\";\n\nconst { IS_LEAF } = metadataKeys;\n\nexport const TableGroupCell = ({ column, onClick, row }: TableCellProps) => {\n const { columns } = column as GroupColumnDescriptor;\n const [value, offset] = getGroupValueAndOffset(columns, row);\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n onClick?.(evt, column);\n },\n [column, onClick]\n );\n\n const style = getColumnStyle(column);\n const isLeaf = row[IS_LEAF];\n const spacers = Array(offset)\n .fill(0)\n .map((n, i) => <span className=\"vuuTableGroupCell-spacer\" key={i} />);\n return (\n <div\n className={\"vuuTableGroupCell vuuPinLeft\"}\n onClick={isLeaf ? undefined : handleClick}\n role=\"cell\"\n style={style}\n >\n {spacers}\n {isLeaf ? null : (\n <span className=\"vuuTableGroupCell-toggle\" data-icon=\"triangle-right\" />\n )}\n <span>{value}</span>\n </div>\n );\n};\n", "import cx from \"classnames\";\nimport { HTMLAttributes, useRef } from \"react\";\nimport { ColumnResizer } from \"./ColumnResizer\";\nimport { TableHeaderCellProps } from \"./TableHeaderCell\";\nimport {\n GroupColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { useTableColumnResize } from \"./useTableColumnResize\";\n\nimport \"./TableGroupHeaderCell.css\";\n\nconst classBase = \"vuuTable-groupHeaderCell\";\n\ninterface RemoveButtonProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"onClick\"> {\n column?: KeyedColumnDescriptor;\n onClick?: (column?: KeyedColumnDescriptor) => void;\n}\nconst RemoveButton = ({\n column,\n onClick,\n ...htmlAttributes\n}: RemoveButtonProps) => {\n return (\n <span\n {...htmlAttributes}\n className={`${classBase}-close`}\n data-icon=\"close-circle\"\n onClick={() => onClick?.(column)}\n />\n );\n};\n\nexport interface ColHeaderProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onClick\"> {\n column: KeyedColumnDescriptor;\n onRemove?: (column?: KeyedColumnDescriptor) => void;\n}\n\nconst ColHeader = (props: ColHeaderProps) => {\n const { children, column, className } = props;\n return (\n <div className={cx(`${classBase}-col`, className)} role=\"columnheader\">\n <span className={`${classBase}-label`}>{column.name}</span>\n {children}\n </div>\n );\n};\n\nexport interface TableGroupHeaderCellProps\n extends Omit<TableHeaderCellProps, \"onDragStart\" | \"onDrag\" | \"onDragEnd\"> {\n column: GroupColumnDescriptor;\n onRemoveColumn?: (column?: KeyedColumnDescriptor) => void;\n}\n\nexport const TableGroupHeaderCell = ({\n column: groupColumn,\n className: classNameProp,\n onRemoveColumn,\n onResize,\n ...props\n}: TableGroupHeaderCellProps) => {\n const rootRef = useRef<HTMLTableCellElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column: groupColumn,\n onResize,\n rootRef,\n });\n const className = cx(classBase, classNameProp, {\n vuuPinLeft: groupColumn.pin === \"left\",\n [`${classBase}-right`]: groupColumn.align === \"right\",\n [`${classBase}-resizing`]: groupColumn.resizing,\n [`${classBase}-pending`]: groupColumn.groupConfirmed === false,\n });\n const { columns } = groupColumn;\n\n return (\n <div className={className} ref={rootRef} {...props}>\n <div className={`${classBase}-inner`}>\n {columns.map((column) => (\n <ColHeader key={column.key} column={column}>\n {columns.length > 1 ? (\n <RemoveButton column={column} onClick={onRemoveColumn} />\n ) : null}\n </ColHeader>\n ))}\n <RemoveButton data-align=\"end\" onClick={onRemoveColumn} />\n {groupColumn.resizeable !== false ? (\n <ColumnResizer {...resizeProps} />\n ) : null}\n </div>\n </div>\n );\n};\n", "import { Heading, KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { RefObject, useCallback, useRef } from \"react\";\n\nexport type ResizeHandler = (evt: MouseEvent, moveBy: number) => void;\nexport interface CellResizeHookProps {\n column: KeyedColumnDescriptor | Heading;\n onResize?: (phase: resizePhase, columnName: string, width?: number) => void;\n rootRef: RefObject<HTMLDivElement>;\n}\n\ntype resizePhase = \"begin\" | \"resize\" | \"end\";\n\nexport interface CellResizeHookResult {\n isResizing: boolean;\n onDrag: (evt: MouseEvent, moveBy: number) => void;\n onDragStart: (evt: React.MouseEvent) => void;\n onDragEnd: (evt: MouseEvent) => void;\n}\n\nexport const useTableColumnResize = ({\n column,\n onResize,\n rootRef,\n}: CellResizeHookProps): CellResizeHookResult => {\n const widthRef = useRef(0);\n const isResizing = useRef(false);\n const { name } = column;\n\n const handleResizeStart = useCallback(() => {\n if (onResize && rootRef.current) {\n console.log(\"handleResizeStart\");\n const { width } = rootRef.current.getBoundingClientRect();\n widthRef.current = Math.round(width);\n isResizing.current = true;\n onResize?.(\"begin\", name);\n }\n }, [name, onResize, rootRef]);\n\n const handleResize = useCallback(\n (_evt: MouseEvent, moveBy: number) => {\n if (rootRef.current) {\n if (onResize) {\n const { width } = rootRef.current.getBoundingClientRect();\n const newWidth = Math.round(width) + moveBy;\n if (newWidth !== widthRef.current && newWidth > 0) {\n onResize(\"resize\", name, newWidth);\n widthRef.current = newWidth;\n }\n }\n }\n },\n [name, onResize, rootRef]\n );\n\n const handleResizeEnd = useCallback(() => {\n if (onResize) {\n onResize(\"end\", name, widthRef.current);\n setTimeout(() => {\n // set in a timeout to prevent the click event from firing and triggering a sort\n isResizing.current = false;\n }, 100);\n }\n }, [name, onResize]);\n\n return {\n isResizing: isResizing.current,\n onDrag: handleResize,\n onDragStart: handleResizeStart,\n onDragEnd: handleResizeEnd,\n };\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport cx from \"classnames\";\nimport { HTMLAttributes, MouseEvent, useCallback, useRef } from \"react\";\nimport { ColumnResizer } from \"./ColumnResizer\";\nimport { SortIndicator } from \"./SortIndicator\";\nimport { useTableColumnResize } from \"./useTableColumnResize\";\nimport { TableColumnResizeHandler } from \"./dataTableTypes\";\n\nimport \"./TableHeaderCell.css\";\nimport { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { FilterIndicator } from \"./filter-indicator\";\n\nconst classBase = \"vuuTable-headerCell\";\n\nexport interface TableHeaderCellProps\n extends HTMLAttributes<HTMLTableCellElement> {\n column: KeyedColumnDescriptor;\n debugString?: string;\n onDragStart?: (evt: MouseEvent) => void;\n onResize?: TableColumnResizeHandler;\n}\n\nexport const TableHeaderCell = ({\n column,\n className: classNameProp,\n onClick,\n onDragStart,\n onResize,\n ...props\n}: TableHeaderCellProps) => {\n const rootRef = useRef<HTMLTableCellElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const [showContextMenu] = useContextMenu();\n const dragTimerRef = useRef<number | null>(null);\n\n const handleContextMenu = (e: MouseEvent<HTMLElement>) => {\n showContextMenu(e, \"header\", { column });\n };\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLTableCellElement>) => !isResizing && onClick?.(evt),\n [isResizing, onClick]\n );\n\n const handleMouseDown = useCallback(\n (evt: MouseEvent) => {\n dragTimerRef.current = window.setTimeout(() => {\n onDragStart?.(evt);\n dragTimerRef.current = null;\n }, 500);\n },\n [onDragStart]\n );\n const handleMouseUp = useCallback(() => {\n if (dragTimerRef.current !== null) {\n window.clearTimeout(dragTimerRef.current);\n dragTimerRef.current = null;\n }\n }, []);\n\n const className = cx(classBase, classNameProp, {\n vuuPinFloating: column.pin === \"floating\",\n vuuPinLeft: column.pin === \"left\",\n vuuPinRight: column.pin === \"right\",\n vuuEndPin: column.endPin,\n [`${classBase}-resizing`]: column.resizing,\n [`${classBase}-right`]: column.align === \"right\",\n });\n return (\n <div\n className={className}\n {...props}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n onMouseDown={handleMouseDown}\n onMouseUp={handleMouseUp}\n ref={rootRef}\n >\n <div className={`${classBase}-inner`}>\n <FilterIndicator column={column} />\n <div className={`${classBase}-label`}>{column.label}</div>\n <SortIndicator sorted={column.sorted} />\n {column.resizeable !== false ? (\n <ColumnResizer {...resizeProps} />\n ) : null}\n </div>\n </div>\n );\n};\n", "import { ColumnSort } from \"@vuu-ui/vuu-datagrid-types\";\nimport cx from \"classnames\";\n\nimport \"./SortIndicator.css\";\n\nexport interface SortIndicatorProps {\n sorted?: ColumnSort;\n}\n\nconst classBase = \"vuuSortIndicator\";\n\nexport const SortIndicator = ({ sorted }: SortIndicatorProps) => {\n if (!sorted) {\n return null;\n }\n\n const direction =\n typeof sorted === \"number\"\n ? sorted < 0\n ? \"dsc\"\n : \"asc\"\n : sorted === \"A\"\n ? \"asc\"\n : \"dsc\";\n\n return typeof sorted === \"number\" ? (\n <div className={cx(classBase, \"multi-col\", direction)}>\n <span data-icon={`sorted-${direction}`} />\n <span className={\"vuuSortPosition\"}>{Math.abs(sorted)}</span>\n </div>\n ) : (\n <div className={cx(classBase, \"single-col\")}>\n <span data-icon={`sorted-${direction}`} />\n </div>\n );\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport cx from \"classnames\";\nimport { HTMLAttributes, useCallback } from \"react\";\n\nimport \"./filter-indicator.css\";\n\nexport const Direction = {\n ASC: \"asc\",\n DSC: \"dsc\",\n};\n\nexport interface FilterIndicatorProps extends HTMLAttributes<HTMLDivElement> {\n column: KeyedColumnDescriptor;\n filter?: Filter;\n}\n\nexport const FilterIndicator = ({ column, filter }: FilterIndicatorProps) => {\n //TODO handle this at header level\n const [showContextMenu] = useContextMenu();\n\n const handleClick = useCallback(\n (evt) => {\n // if we do this through keyboard, need to get co-ords\n evt.stopPropagation();\n showContextMenu(evt, \"filter\", { column, filter });\n },\n [column, filter, showContextMenu]\n );\n\n if (!column.filter) {\n return null;\n }\n\n return (\n <div\n className={cx(\"vuuFilterIndicator\")}\n data-icon=\"filter\"\n onClick={handleClick}\n />\n );\n};\n", "import {\n DataSource,\n DataSourceSubscribedMessage,\n JsonDataSource,\n VuuFeatureInvocationMessage,\n VuuFeatureMessage,\n} from \"@vuu-ui/vuu-data\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n GridConfig,\n KeyedColumnDescriptor,\n SelectionChangeHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { useContextMenu as usePopupContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n applySort,\n buildColumnMap,\n isJsonGroup,\n metadataKeys,\n moveItem,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n MouseEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useTableContextMenu } from \"./context-menu\";\nimport { TableColumnResizeHandler } from \"./dataTableTypes\";\nimport { useDataSource } from \"./useDataSource\";\nimport { useDraggableColumn } from \"./useDraggableColumn\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { MeasuredProps, useMeasuredContainer } from \"./useMeasuredContainer\";\nimport { useSelection } from \"./useSelection\";\nimport { PersistentColumnAction, useTableModel } from \"./useTableModel\";\nimport { useTableScroll } from \"./useTableScroll\";\nimport { useTableViewport } from \"./useTableViewport\";\nimport { useVirtualViewport } from \"./useVirtualViewport\";\n\nconst NO_ROWS = [] as const;\n\nexport interface TableHookProps extends MeasuredProps {\n config: Omit<GridConfig, \"headings\">;\n dataSource: DataSource;\n headerHeight: number;\n onConfigChange?: (config: Omit<GridConfig, \"headings\">) => void;\n onFeatureEnabled?: (message: VuuFeatureMessage) => void;\n onFeatureInvocation?: (message: VuuFeatureInvocationMessage) => void;\n renderBufferSize?: number;\n rowHeight: number;\n onSelectionChange?: SelectionChangeHandler;\n selectionModel: TableSelectionModel;\n}\n\nconst { KEY, IS_EXPANDED, IS_LEAF } = metadataKeys;\n\nexport const useTable = ({\n config,\n dataSource,\n headerHeight,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n renderBufferSize = 0,\n rowHeight,\n selectionModel,\n ...measuredProps\n}: TableHookProps) => {\n const [rowCount, setRowCount] = useState<number>(dataSource.size);\n const expectConfigChangeRef = useRef(false);\n\n // When we detect and respond to changes to config below, we need\n // to include current dataSource config when we refresh the model.\n const dataSourceRef = useRef<DataSource>();\n dataSourceRef.current = dataSource;\n\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const containerMeasurements = useMeasuredContainer(measuredProps);\n\n const onDataRowcountChange = useCallback((size: number) => {\n setRowCount(size);\n }, []);\n\n const { columns, dispatchColumnAction, headings } = useTableModel(\n config,\n dataSource.config\n );\n\n const {\n getRowAtPosition,\n getRowOffset,\n setPctScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight,\n headings,\n rowCount,\n rowHeight,\n size: containerMeasurements.innerSize,\n });\n\n const onSubscribed = useCallback(\n ({ tableSchema }: DataSourceSubscribedMessage) => {\n if (tableSchema) {\n expectConfigChangeRef.current = true;\n dispatchColumnAction({\n type: \"setTableSchema\",\n tableSchema,\n });\n } else {\n console.log(\"usbscription message with no schema\");\n }\n },\n [dispatchColumnAction]\n );\n\n const handleSelectionChange: SelectionChangeHandler = useCallback(\n (selected) => {\n dataSource.select(selected);\n onSelectionChange?.(selected);\n },\n [dataSource, onSelectionChange]\n );\n\n const handleRowClick = useSelection({\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n const { data, getSelectedRows, range, setRange } = useDataSource({\n dataSource,\n onFeatureEnabled,\n onFeatureInvocation,\n onSubscribed,\n onSizeChange: onDataRowcountChange,\n renderBufferSize,\n viewportRowCount: viewportMeasurements.rowCount,\n });\n\n // Keep a ref to current data. We use it to provide row for context menu actions.\n // We don't want to introduce data as a dependency on the context menu handler, just\n // needs to be correct at runtime when the row is right clicked.\n const dataRef = useRef<DataSourceRow[]>();\n dataRef.current = data;\n\n const onPersistentColumnOperation = useCallback(\n (action: PersistentColumnAction) => {\n expectConfigChangeRef.current = true;\n console.log(`onPersistentColumnOperation, dispatchColumnAction`, {\n action,\n });\n dispatchColumnAction(action as any);\n },\n [dispatchColumnAction]\n );\n\n const handleContextMenuAction = useTableContextMenu({\n dataSource,\n onPersistentColumnOperation,\n });\n\n const handleSort = useCallback(\n (\n column: KeyedColumnDescriptor,\n extendSort = false,\n sortType?: VuuSortType\n ) => {\n if (dataSource) {\n dataSource.sort = applySort(\n dataSource.sort,\n column,\n extendSort,\n sortType\n );\n }\n },\n [dataSource]\n );\n\n const handleColumnResize: TableColumnResizeHandler = useCallback(\n (phase, columnName, width) => {\n const column = columns.find((column) => column.name === columnName);\n if (column) {\n if (phase === \"end\") {\n expectConfigChangeRef.current = true;\n }\n dispatchColumnAction({\n type: \"resizeColumn\",\n phase,\n column,\n width,\n });\n } else {\n throw Error(\n `useDataTable.handleColumnResize, column ${columnName} not found`\n );\n }\n },\n [columns, dispatchColumnAction]\n );\n\n const handleToggleGroup = useCallback(\n (row: DataSourceRow, column: KeyedColumnDescriptor) => {\n const isJson = isJsonGroup(column, row);\n const key = row[KEY];\n\n if (row[IS_EXPANDED]) {\n (dataSource as JsonDataSource).closeTreeNode(key, true);\n if (isJson) {\n const idx = columns.indexOf(column);\n const rows = (dataSource as JsonDataSource).getRowsAtDepth(idx + 1);\n if (!rows.some((row) => row[IS_EXPANDED] || row[IS_LEAF])) {\n dispatchColumnAction({\n type: \"hideColumns\",\n columns: columns.slice(idx + 2),\n });\n }\n }\n } else {\n dataSource.openTreeNode(key);\n if (isJson) {\n const childRows = (dataSource as JsonDataSource).getChildRows(key);\n const idx = columns.indexOf(column) + 1;\n const columnsToShow = [columns[idx]];\n if (childRows.some((row) => row[IS_LEAF])) {\n columnsToShow.push(columns[idx + 1]);\n }\n if (columnsToShow.some((col) => col.hidden)) {\n dispatchColumnAction({\n type: \"showColumns\",\n columns: columnsToShow,\n });\n }\n }\n }\n },\n [columns, dataSource, dispatchColumnAction]\n );\n\n const {\n onVerticalScroll,\n onHorizontalScroll,\n columnsWithinViewport,\n virtualColSpan,\n } = useVirtualViewport({\n columns,\n getRowAtPosition,\n setRange,\n viewportMeasurements,\n });\n\n const handleVerticalScroll = useCallback(\n (scrollTop: number, pctScrollTop: number) => {\n setPctScrollTop(pctScrollTop);\n onVerticalScroll(scrollTop);\n },\n [onVerticalScroll, setPctScrollTop]\n );\n\n const { requestScroll, ...scrollProps } = useTableScroll({\n onHorizontalScroll,\n onVerticalScroll: handleVerticalScroll,\n viewport: viewportMeasurements,\n viewportHeight:\n (containerMeasurements.innerSize?.height ?? 0) - headerHeight,\n });\n\n const containerProps = useKeyboardNavigation({\n columnCount: columns.length,\n containerRef: containerMeasurements.containerRef,\n data,\n requestScroll,\n rowCount: dataSource?.size,\n viewportRange: range,\n });\n\n const handleRemoveColumnFromGroupBy = useCallback(\n (column?: KeyedColumnDescriptor) => {\n if (column) {\n if (dataSource && dataSource.groupBy.includes(column.name)) {\n dataSource.groupBy = dataSource.groupBy.filter(\n (columnName) => columnName !== column.name\n );\n }\n } else {\n dataSource.groupBy = [];\n }\n },\n [dataSource]\n );\n\n const handleDropColumn = useCallback(\n (fromIndex: number, toIndex: number) => {\n const column = dataSource.columns[fromIndex];\n const columns = moveItem(dataSource.columns, column, toIndex);\n if (columns !== dataSource.columns) {\n dataSource.columns = columns;\n dispatchColumnAction({ type: \"tableConfig\", columns });\n }\n },\n [dataSource, dispatchColumnAction]\n );\n\n const draggableHook = useDraggableColumn({\n onDrop: handleDropColumn,\n });\n\n useEffect(() => {\n // External config has changed\n if (dataSourceRef.current) {\n expectConfigChangeRef.current = true;\n dispatchColumnAction({\n type: \"init\",\n tableConfig: config,\n dataSourceConfig: dataSourceRef.current.config,\n });\n }\n }, [config, dispatchColumnAction]);\n\n useEffect(() => {\n dataSource.on(\"config\", (config, confirmed) => {\n expectConfigChangeRef.current = true;\n dispatchColumnAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n });\n }, [dataSource, dispatchColumnAction]);\n\n useMemo(() => {\n if (expectConfigChangeRef.current) {\n onConfigChange?.({\n ...config,\n columns,\n });\n expectConfigChangeRef.current = false;\n }\n }, [columns, config, onConfigChange]);\n\n const [showContextMenu] = usePopupContextMenu();\n\n const onContextMenu = useCallback(\n (evt: MouseEvent<HTMLElement>) => {\n const { current: currentData } = dataRef;\n const { current: currentDataSource } = dataSourceRef;\n const target = evt.target as HTMLElement;\n const cellEl = target?.closest(\"div[role='cell']\");\n const rowEl = target?.closest(\".vuuTableRow\");\n\n if (cellEl && rowEl && currentData && currentDataSource) {\n const { columns, selectedRowsCount } = currentDataSource;\n const columnMap = buildColumnMap(columns);\n const rowIndex = parseInt(rowEl.ariaRowIndex ?? \"-1\");\n const cellIndex = Array.from(rowEl.childNodes).indexOf(cellEl);\n const row = currentData.find(([idx]) => idx === rowIndex);\n const columnName = columns[cellIndex];\n\n showContextMenu(evt, \"grid\", {\n columnMap,\n columnName,\n row,\n selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),\n viewport: dataSource?.viewport,\n });\n }\n },\n [dataSource?.viewport, getSelectedRows, showContextMenu]\n );\n\n return {\n columns,\n columnsWithinViewport,\n containerMeasurements,\n containerProps,\n data,\n dispatchColumnAction,\n getRowOffset,\n handleContextMenuAction,\n headings,\n onColumnResize: handleColumnResize,\n onContextMenu,\n onRemoveColumnFromGroupBy: handleRemoveColumnFromGroupBy,\n onRowClick: handleRowClick,\n onSort: handleSort,\n onToggleGroup: handleToggleGroup,\n virtualColSpan,\n scrollProps,\n rowCount,\n viewportMeasurements,\n ...draggableHook,\n };\n};\n", "// TODO is this hook needed ? it is currently used only in a vuu salt story\nimport { DataSource, SubscribeCallback } from \"@vuu-ui/vuu-data\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { getFullRange, metadataKeys, WindowRange } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst { SELECTED } = metadataKeys;\n\nexport interface DataSourceHookProps {\n dataSource: DataSource;\n renderBufferSize?: number;\n}\n\nexport function useDataSource({\n dataSource,\n renderBufferSize = 10,\n}: DataSourceHookProps): [\n DataSourceRow[],\n number,\n VuuRange,\n (range: VuuRange) => void\n] {\n const [, forceUpdate] = useState<object | null>(null);\n const isMounted = useRef(true);\n const hasUpdated = useRef(false);\n const rafHandle = useRef(null);\n const data = useRef<DataSourceRow[]>([]);\n const rangeRef = useRef({ from: 0, to: 10 });\n\n const dataWindow = useMemo(\n () => new MovingWindow(getFullRange(rangeRef.current, renderBufferSize)),\n [renderBufferSize]\n );\n\n const setData = useCallback(\n (updates: DataSourceRow[]) => {\n for (const row of updates) {\n dataWindow.add(row);\n }\n // Why bother with the slice ?\n data.current = dataWindow.data.slice();\n\n hasUpdated.current = true;\n },\n [dataWindow]\n );\n\n const datasourceMessageHandler: SubscribeCallback = useCallback(\n (message) => {\n if (message.type === \"viewport-update\") {\n if (message.size !== undefined) {\n dataWindow.setRowCount(message.size);\n }\n if (message.rows) {\n setData(message.rows);\n forceUpdate({});\n } else if (message.size !== undefined) {\n // TODO is this right ?\n data.current = dataWindow.data.slice();\n hasUpdated.current = true;\n }\n }\n },\n [dataWindow, setData]\n );\n\n useEffect(\n () => () => {\n if (rafHandle.current) {\n cancelAnimationFrame(rafHandle.current);\n rafHandle.current = null;\n }\n isMounted.current = false;\n },\n []\n );\n\n const setRange = useCallback(\n (range) => {\n rangeRef.current = range;\n const fullRange = getFullRange(rangeRef.current, renderBufferSize);\n dataSource.range = fullRange;\n dataWindow.setRange(fullRange.from, fullRange.to);\n },\n [dataSource, dataWindow, renderBufferSize]\n );\n\n useMemo(() => {\n const { from, to } = rangeRef.current;\n const fullRange = getFullRange({ from, to }, renderBufferSize);\n dataSource.range = fullRange;\n dataWindow.setRange(fullRange.from, fullRange.to);\n }, [dataSource, dataWindow, renderBufferSize]);\n\n useEffect(() => {\n const { from, to } = getFullRange(rangeRef.current, renderBufferSize);\n dataSource.subscribe(\n {\n range: { from, to },\n },\n datasourceMessageHandler\n );\n }, [dataSource, datasourceMessageHandler, renderBufferSize]);\n\n useEffect(\n () => () => {\n dataSource.unsubscribe();\n },\n [dataSource]\n );\n\n return [\n data.current,\n dataWindow.rowCount,\n getFullRange(rangeRef.current, renderBufferSize),\n setRange,\n ];\n}\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n this.data = new Array(to - from);\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n if (this.data[internalIndex - 1]) {\n // assign 'post-selected' selection state\n if (\n this.data[internalIndex - 1][SELECTED] === 1 &&\n data[SELECTED] === 0\n ) {\n data[SELECTED] = 2;\n }\n }\n if (index === this.rowCount - 1) {\n this.data.length = internalIndex + 1;\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange(from: number, to: number) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n}\n", "import { useCallback, useEffect, useState } from \"react\";\nimport { ConnectionManager, ConnectionStatusMessage } from \"@vuu-ui/vuu-data\";\n\nexport const useServerConnectionStatus = () => {\n const [connectionStatus, setConnectionStatus] = useState(\"disconnected\");\n\n const handleStatusChange = useCallback(\n ({ status }: ConnectionStatusMessage) => {\n setConnectionStatus(status);\n },\n []\n );\n\n useEffect(() => {\n ConnectionManager.on(\"connection-status\", handleStatusChange);\n return () => {\n ConnectionManager.removeListener(\"connection-status\", handleStatusChange);\n };\n }, [handleStatusChange]);\n\n return connectionStatus;\n};\n", "import { useCallback, useEffect, useState } from \"react\";\nimport { ConnectionManager } from \"@vuu-ui/vuu-data\";\n\nexport const useServerConnectionQuality = () => {\n const [messagesPerSecond, setMessagesPerSecond] = useState<number>(0);\n const handleConnectivityMessage = useCallback(({ messages }) => {\n setMessagesPerSecond(messages.messagesLength);\n }, []);\n\n useEffect(() => {\n ConnectionManager.on(\"connection-metrics\", handleConnectivityMessage);\n return () => {\n ConnectionManager.removeListener(\n \"connection-metrics\",\n handleConnectivityMessage\n );\n };\n }, [handleConnectivityMessage]);\n\n return messagesPerSecond;\n};\n", "import {\n ClientToServerGetUniqueValues,\n ClientToServerGetUniqueValuesStartingWith,\n TypeaheadParams,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback } from \"react\";\nimport { makeRpcCall } from \"@vuu-ui/vuu-data\";\n\nexport type SuggestionFetcher = (params: TypeaheadParams) => Promise<string[]>;\n\n// const SPECIAL_SPACE = \"_\";\nconst TYPEAHEAD_MESSAGE_CONSTANTS = {\n type: \"RPC_CALL\",\n service: \"TypeAheadRpcHandler\",\n};\n\nexport const getTypeaheadParams = (\n table: VuuTable,\n column: string,\n text = \"\",\n selectedValues: string[] = []\n): TypeaheadParams => {\n if (text !== \"\" && !selectedValues.includes(text.toLowerCase())) {\n return [table, column, text];\n }\n return [table, column];\n};\n\n// const containSpace = (text: string) => text.indexOf(\" \") !== -1;\n// const replaceSpace = (text: string) => text.replace(/\\s/g, SPECIAL_SPACE);\n\nexport const useTypeaheadSuggestions = () => {\n const getTypeaheadSuggestions: SuggestionFetcher = useCallback(\n async (params: TypeaheadParams) => {\n const rpcMessage =\n params.length === 2\n ? ({\n method: \"getUniqueFieldValues\",\n params,\n ...TYPEAHEAD_MESSAGE_CONSTANTS,\n } as ClientToServerGetUniqueValues)\n : ({\n method: \"getUniqueFieldValuesStartingWith\",\n params,\n ...TYPEAHEAD_MESSAGE_CONSTANTS,\n } as ClientToServerGetUniqueValuesStartingWith);\n\n const suggestions = await makeRpcCall<string[]>(rpcMessage);\n\n // TODO replacing space with underscores like this is not being correctly handled elsewhere\n return suggestions;\n // return suggestions.some(containSpace)\n // ? suggestions.map(replaceSpace)\n // : suggestions;\n },\n []\n );\n\n return getTypeaheadSuggestions;\n};\n", "// FIXME profile adding a per-Tree TreeNode cache, validating it by\n// parent pointer\n/// The default maximum length of a `TreeBuffer` node.\nconst DefaultBufferLength = 1024;\nlet nextPropID = 0;\nclass Range {\n constructor(from, to) {\n this.from = from;\n this.to = to;\n }\n}\n/// Each [node type](#common.NodeType) or [individual tree](#common.Tree)\n/// can have metadata associated with it in props. Instances of this\n/// class represent prop names.\nclass NodeProp {\n /// Create a new node prop type.\n constructor(config = {}) {\n this.id = nextPropID++;\n this.perNode = !!config.perNode;\n this.deserialize = config.deserialize || (() => {\n throw new Error(\"This node type doesn't define a deserialize function\");\n });\n }\n /// This is meant to be used with\n /// [`NodeSet.extend`](#common.NodeSet.extend) or\n /// [`LRParser.configure`](#lr.ParserConfig.props) to compute\n /// prop values for each node type in the set. Takes a [match\n /// object](#common.NodeType^match) or function that returns undefined\n /// if the node type doesn't get this prop, and the prop's value if\n /// it does.\n add(match) {\n if (this.perNode)\n throw new RangeError(\"Can't add per-node props to node types\");\n if (typeof match != \"function\")\n match = NodeType.match(match);\n return (type) => {\n let result = match(type);\n return result === undefined ? null : [this, result];\n };\n }\n}\n/// Prop that is used to describe matching delimiters. For opening\n/// delimiters, this holds an array of node names (written as a\n/// space-separated string when declaring this prop in a grammar)\n/// for the node types of closing delimiters that match it.\nNodeProp.closedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/// The inverse of [`closedBy`](#common.NodeProp^closedBy). This is\n/// attached to closing delimiters, holding an array of node names\n/// of types of matching opening delimiters.\nNodeProp.openedBy = new NodeProp({ deserialize: str => str.split(\" \") });\n/// Used to assign node types to groups (for example, all node\n/// types that represent an expression could be tagged with an\n/// `\"Expression\"` group).\nNodeProp.group = new NodeProp({ deserialize: str => str.split(\" \") });\n/// The hash of the [context](#lr.ContextTracker.constructor)\n/// that the node was parsed in, if any. Used to limit reuse of\n/// contextual nodes.\nNodeProp.contextHash = new NodeProp({ perNode: true });\n/// The distance beyond the end of the node that the tokenizer\n/// looked ahead for any of the tokens inside the node. (The LR\n/// parser only stores this when it is larger than 25, for\n/// efficiency reasons.)\nNodeProp.lookAhead = new NodeProp({ perNode: true });\n/// This per-node prop is used to replace a given node, or part of a\n/// node, with another tree. This is useful to include trees from\n/// different languages in mixed-language parsers.\nNodeProp.mounted = new NodeProp({ perNode: true });\n/// A mounted tree, which can be [stored](#common.NodeProp^mounted) on\n/// a tree node to indicate that parts of its content are\n/// represented by another tree.\nclass MountedTree {\n constructor(\n /// The inner tree.\n tree, \n /// If this is null, this tree replaces the entire node (it will\n /// be included in the regular iteration instead of its host\n /// node). If not, only the given ranges are considered to be\n /// covered by this tree. This is used for trees that are mixed in\n /// a way that isn't strictly hierarchical. Such mounted trees are\n /// only entered by [`resolveInner`](#common.Tree.resolveInner)\n /// and [`enter`](#common.SyntaxNode.enter).\n overlay, \n /// The parser used to create this subtree.\n parser) {\n this.tree = tree;\n this.overlay = overlay;\n this.parser = parser;\n }\n}\nconst noProps = Object.create(null);\n/// Each node in a syntax tree has a node type associated with it.\nclass NodeType {\n /// @internal\n constructor(\n /// The name of the node type. Not necessarily unique, but if the\n /// grammar was written properly, different node types with the\n /// same name within a node set should play the same semantic\n /// role.\n name, \n /// @internal\n props, \n /// The id of this node in its set. Corresponds to the term ids\n /// used in the parser.\n id, \n /// @internal\n flags = 0) {\n this.name = name;\n this.props = props;\n this.id = id;\n this.flags = flags;\n }\n /// Define a node type.\n static define(spec) {\n let props = spec.props && spec.props.length ? Object.create(null) : noProps;\n let flags = (spec.top ? 1 /* NodeFlag.Top */ : 0) | (spec.skipped ? 2 /* NodeFlag.Skipped */ : 0) |\n (spec.error ? 4 /* NodeFlag.Error */ : 0) | (spec.name == null ? 8 /* NodeFlag.Anonymous */ : 0);\n let type = new NodeType(spec.name || \"\", props, spec.id, flags);\n if (spec.props)\n for (let src of spec.props) {\n if (!Array.isArray(src))\n src = src(type);\n if (src) {\n if (src[0].perNode)\n throw new RangeError(\"Can't store a per-node prop on a node type\");\n props[src[0].id] = src[1];\n }\n }\n return type;\n }\n /// Retrieves a node prop for this type. Will return `undefined` if\n /// the prop isn't present on this node.\n prop(prop) { return this.props[prop.id]; }\n /// True when this is the top node of a grammar.\n get isTop() { return (this.flags & 1 /* NodeFlag.Top */) > 0; }\n /// True when this node is produced by a skip rule.\n get isSkipped() { return (this.flags & 2 /* NodeFlag.Skipped */) > 0; }\n /// Indicates whether this is an error node.\n get isError() { return (this.flags & 4 /* NodeFlag.Error */) > 0; }\n /// When true, this node type doesn't correspond to a user-declared\n /// named node, for example because it is used to cache repetition.\n get isAnonymous() { return (this.flags & 8 /* NodeFlag.Anonymous */) > 0; }\n /// Returns true when this node's name or one of its\n /// [groups](#common.NodeProp^group) matches the given string.\n is(name) {\n if (typeof name == 'string') {\n if (this.name == name)\n return true;\n let group = this.prop(NodeProp.group);\n return group ? group.indexOf(name) > -1 : false;\n }\n return this.id == name;\n }\n /// Create a function from node types to arbitrary values by\n /// specifying an object whose property names are node or\n /// [group](#common.NodeProp^group) names. Often useful with\n /// [`NodeProp.add`](#common.NodeProp.add). You can put multiple\n /// names, separated by spaces, in a single property name to map\n /// multiple node names to a single value.\n static match(map) {\n let direct = Object.create(null);\n for (let prop in map)\n for (let name of prop.split(\" \"))\n direct[name] = map[prop];\n return (node) => {\n for (let groups = node.prop(NodeProp.group), i = -1; i < (groups ? groups.length : 0); i++) {\n let found = direct[i < 0 ? node.name : groups[i]];\n if (found)\n return found;\n }\n };\n }\n}\n/// An empty dummy node type to use when no actual type is available.\nNodeType.none = new NodeType(\"\", Object.create(null), 0, 8 /* NodeFlag.Anonymous */);\n/// A node set holds a collection of node types. It is used to\n/// compactly represent trees by storing their type ids, rather than a\n/// full pointer to the type object, in a numeric array. Each parser\n/// [has](#lr.LRParser.nodeSet) a node set, and [tree\n/// buffers](#common.TreeBuffer) can only store collections of nodes\n/// from the same set. A set can have a maximum of 2**16 (65536) node\n/// types in it, so that the ids fit into 16-bit typed array slots.\nclass NodeSet {\n /// Create a set with the given types. The `id` property of each\n /// type should correspond to its position within the array.\n constructor(\n /// The node types in this set, by id.\n types) {\n this.types = types;\n for (let i = 0; i < types.length; i++)\n if (types[i].id != i)\n throw new RangeError(\"Node type ids should correspond to array positions when creating a node set\");\n }\n /// Create a copy of this set with some node properties added. The\n /// arguments to this method can be created with\n /// [`NodeProp.add`](#common.NodeProp.add).\n extend(...props) {\n let newTypes = [];\n for (let type of this.types) {\n let newProps = null;\n for (let source of props) {\n let add = source(type);\n if (add) {\n if (!newProps)\n newProps = Object.assign({}, type.props);\n newProps[add[0].id] = add[1];\n }\n }\n newTypes.push(newProps ? new NodeType(type.name, newProps, type.id, type.flags) : type);\n }\n return new NodeSet(newTypes);\n }\n}\nconst CachedNode = new WeakMap(), CachedInnerNode = new WeakMap();\n/// Options that control iteration. Can be combined with the `|`\n/// operator to enable multiple ones.\nvar IterMode;\n(function (IterMode) {\n /// When enabled, iteration will only visit [`Tree`](#common.Tree)\n /// objects, not nodes packed into\n /// [`TreeBuffer`](#common.TreeBuffer)s.\n IterMode[IterMode[\"ExcludeBuffers\"] = 1] = \"ExcludeBuffers\";\n /// Enable this to make iteration include anonymous nodes (such as\n /// the nodes that wrap repeated grammar constructs into a balanced\n /// tree).\n IterMode[IterMode[\"IncludeAnonymous\"] = 2] = \"IncludeAnonymous\";\n /// By default, regular [mounted](#common.NodeProp^mounted) nodes\n /// replace their base node in iteration. Enable this to ignore them\n /// instead.\n IterMode[IterMode[\"IgnoreMounts\"] = 4] = \"IgnoreMounts\";\n /// This option only applies in\n /// [`enter`](#common.SyntaxNode.enter)-style methods. It tells the\n /// library to not enter mounted overlays if one covers the given\n /// position.\n IterMode[IterMode[\"IgnoreOverlays\"] = 8] = \"IgnoreOverlays\";\n})(IterMode || (IterMode = {}));\n/// A piece of syntax tree. There are two ways to approach these\n/// trees: the way they are actually stored in memory, and the\n/// convenient way.\n///\n/// Syntax trees are stored as a tree of `Tree` and `TreeBuffer`\n/// objects. By packing detail information into `TreeBuffer` leaf\n/// nodes, the representation is made a lot more memory-efficient.\n///\n/// However, when you want to actually work with tree nodes, this\n/// representation is very awkward, so most client code will want to\n/// use the [`TreeCursor`](#common.TreeCursor) or\n/// [`SyntaxNode`](#common.SyntaxNode) interface instead, which provides\n/// a view on some part of this data structure, and can be used to\n/// move around to adjacent nodes.\nclass Tree {\n /// Construct a new tree. See also [`Tree.build`](#common.Tree^build).\n constructor(\n /// The type of the top node.\n type, \n /// This node's child nodes.\n children, \n /// The positions (offsets relative to the start of this tree) of\n /// the children.\n positions, \n /// The total length of this tree\n length, \n /// Per-node [node props](#common.NodeProp) to associate with this node.\n props) {\n this.type = type;\n this.children = children;\n this.positions = positions;\n this.length = length;\n /// @internal\n this.props = null;\n if (props && props.length) {\n this.props = Object.create(null);\n for (let [prop, value] of props)\n this.props[typeof prop == \"number\" ? prop : prop.id] = value;\n }\n }\n /// @internal\n toString() {\n let mounted = this.prop(NodeProp.mounted);\n if (mounted && !mounted.overlay)\n return mounted.tree.toString();\n let children = \"\";\n for (let ch of this.children) {\n let str = ch.toString();\n if (str) {\n if (children)\n children += \",\";\n children += str;\n }\n }\n return !this.type.name ? children :\n (/\\W/.test(this.type.name) && !this.type.isError ? JSON.stringify(this.type.name) : this.type.name) +\n (children.length ? \"(\" + children + \")\" : \"\");\n }\n /// Get a [tree cursor](#common.TreeCursor) positioned at the top of\n /// the tree. Mode can be used to [control](#common.IterMode) which\n /// nodes the cursor visits.\n cursor(mode = 0) {\n return new TreeCursor(this.topNode, mode);\n }\n /// Get a [tree cursor](#common.TreeCursor) pointing into this tree\n /// at the given position and side (see\n /// [`moveTo`](#common.TreeCursor.moveTo).\n cursorAt(pos, side = 0, mode = 0) {\n let scope = CachedNode.get(this) || this.topNode;\n let cursor = new TreeCursor(scope);\n cursor.moveTo(pos, side);\n CachedNode.set(this, cursor._tree);\n return cursor;\n }\n /// Get a [syntax node](#common.SyntaxNode) object for the top of the\n /// tree.\n get topNode() {\n return new TreeNode(this, 0, 0, null);\n }\n /// Get the [syntax node](#common.SyntaxNode) at the given position.\n /// If `side` is -1, this will move into nodes that end at the\n /// position. If 1, it'll move into nodes that start at the\n /// position. With 0, it'll only enter nodes that cover the position\n /// from both sides.\n ///\n /// Note that this will not enter\n /// [overlays](#common.MountedTree.overlay), and you often want\n /// [`resolveInner`](#common.Tree.resolveInner) instead.\n resolve(pos, side = 0) {\n let node = resolveNode(CachedNode.get(this) || this.topNode, pos, side, false);\n CachedNode.set(this, node);\n return node;\n }\n /// Like [`resolve`](#common.Tree.resolve), but will enter\n /// [overlaid](#common.MountedTree.overlay) nodes, producing a syntax node\n /// pointing into the innermost overlaid tree at the given position\n /// (with parent links going through all parent structure, including\n /// the host trees).\n resolveInner(pos, side = 0) {\n let node = resolveNode(CachedInnerNode.get(this) || this.topNode, pos, side, true);\n CachedInnerNode.set(this, node);\n return node;\n }\n /// Iterate over the tree and its children, calling `enter` for any\n /// node that touches the `from`/`to` region (if given) before\n /// running over such a node's children, and `leave` (if given) when\n /// leaving the node. When `enter` returns `false`, that node will\n /// not have its children iterated over (or `leave` called).\n iterate(spec) {\n let { enter, leave, from = 0, to = this.length } = spec;\n let mode = spec.mode || 0, anon = (mode & IterMode.IncludeAnonymous) > 0;\n for (let c = this.cursor(mode | IterMode.IncludeAnonymous);;) {\n let entered = false;\n if (c.from <= to && c.to >= from && (!anon && c.type.isAnonymous || enter(c) !== false)) {\n if (c.firstChild())\n continue;\n entered = true;\n }\n for (;;) {\n if (entered && leave && (anon || !c.type.isAnonymous))\n leave(c);\n if (c.nextSibling())\n break;\n if (!c.parent())\n return;\n entered = true;\n }\n }\n }\n /// Get the value of the given [node prop](#common.NodeProp) for this\n /// node. Works with both per-node and per-type props.\n prop(prop) {\n return !prop.perNode ? this.type.prop(prop) : this.props ? this.props[prop.id] : undefined;\n }\n /// Returns the node's [per-node props](#common.NodeProp.perNode) in a\n /// format that can be passed to the [`Tree`](#common.Tree)\n /// constructor.\n get propValues() {\n let result = [];\n if (this.props)\n for (let id in this.props)\n result.push([+id, this.props[id]]);\n return result;\n }\n /// Balance the direct children of this tree, producing a copy of\n /// which may have children grouped into subtrees with type\n /// [`NodeType.none`](#common.NodeType^none).\n balance(config = {}) {\n return this.children.length <= 8 /* Balance.BranchFactor */ ? this :\n balanceRange(NodeType.none, this.children, this.positions, 0, this.children.length, 0, this.length, (children, positions, length) => new Tree(this.type, children, positions, length, this.propValues), config.makeTree || ((children, positions, length) => new Tree(NodeType.none, children, positions, length)));\n }\n /// Build a tree from a postfix-ordered buffer of node information,\n /// or a cursor over such a buffer.\n static build(data) { return buildTree(data); }\n}\n/// The empty tree\nTree.empty = new Tree(NodeType.none, [], [], 0);\nclass FlatBufferCursor {\n constructor(buffer, index) {\n this.buffer = buffer;\n this.index = index;\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n get pos() { return this.index; }\n next() { this.index -= 4; }\n fork() { return new FlatBufferCursor(this.buffer, this.index); }\n}\n/// Tree buffers contain (type, start, end, endIndex) quads for each\n/// node. In such a buffer, nodes are stored in prefix order (parents\n/// before children, with the endIndex of the parent indicating which\n/// children belong to it).\nclass TreeBuffer {\n /// Create a tree buffer.\n constructor(\n /// The buffer's content.\n buffer, \n /// The total length of the group of nodes in the buffer.\n length, \n /// The node set used in this buffer.\n set) {\n this.buffer = buffer;\n this.length = length;\n this.set = set;\n }\n /// @internal\n get type() { return NodeType.none; }\n /// @internal\n toString() {\n let result = [];\n for (let index = 0; index < this.buffer.length;) {\n result.push(this.childString(index));\n index = this.buffer[index + 3];\n }\n return result.join(\",\");\n }\n /// @internal\n childString(index) {\n let id = this.buffer[index], endIndex = this.buffer[index + 3];\n let type = this.set.types[id], result = type.name;\n if (/\\W/.test(result) && !type.isError)\n result = JSON.stringify(result);\n index += 4;\n if (endIndex == index)\n return result;\n let children = [];\n while (index < endIndex) {\n children.push(this.childString(index));\n index = this.buffer[index + 3];\n }\n return result + \"(\" + children.join(\",\") + \")\";\n }\n /// @internal\n findChild(startIndex, endIndex, dir, pos, side) {\n let { buffer } = this, pick = -1;\n for (let i = startIndex; i != endIndex; i = buffer[i + 3]) {\n if (checkSide(side, pos, buffer[i + 1], buffer[i + 2])) {\n pick = i;\n if (dir > 0)\n break;\n }\n }\n return pick;\n }\n /// @internal\n slice(startI, endI, from) {\n let b = this.buffer;\n let copy = new Uint16Array(endI - startI), len = 0;\n for (let i = startI, j = 0; i < endI;) {\n copy[j++] = b[i++];\n copy[j++] = b[i++] - from;\n let to = copy[j++] = b[i++] - from;\n copy[j++] = b[i++] - startI;\n len = Math.max(len, to);\n }\n return new TreeBuffer(copy, len, this.set);\n }\n}\nfunction checkSide(side, pos, from, to) {\n switch (side) {\n case -2 /* Side.Before */: return from < pos;\n case -1 /* Side.AtOrBefore */: return to >= pos && from < pos;\n case 0 /* Side.Around */: return from < pos && to > pos;\n case 1 /* Side.AtOrAfter */: return from <= pos && to > pos;\n case 2 /* Side.After */: return to > pos;\n case 4 /* Side.DontCare */: return true;\n }\n}\nfunction enterUnfinishedNodesBefore(node, pos) {\n let scan = node.childBefore(pos);\n while (scan) {\n let last = scan.lastChild;\n if (!last || last.to != scan.to)\n break;\n if (last.type.isError && last.from == last.to) {\n node = scan;\n scan = last.prevSibling;\n }\n else {\n scan = last;\n }\n }\n return node;\n}\nfunction resolveNode(node, pos, side, overlays) {\n var _a;\n // Move up to a node that actually holds the position, if possible\n while (node.from == node.to ||\n (side < 1 ? node.from >= pos : node.from > pos) ||\n (side > -1 ? node.to <= pos : node.to < pos)) {\n let parent = !overlays && node instanceof TreeNode && node.index < 0 ? null : node.parent;\n if (!parent)\n return node;\n node = parent;\n }\n let mode = overlays ? 0 : IterMode.IgnoreOverlays;\n // Must go up out of overlays when those do not overlap with pos\n if (overlays)\n for (let scan = node, parent = scan.parent; parent; scan = parent, parent = scan.parent) {\n if (scan instanceof TreeNode && scan.index < 0 && ((_a = parent.enter(pos, side, mode)) === null || _a === void 0 ? void 0 : _a.from) != scan.from)\n node = parent;\n }\n for (;;) {\n let inner = node.enter(pos, side, mode);\n if (!inner)\n return node;\n node = inner;\n }\n}\nclass TreeNode {\n constructor(_tree, from, \n // Index in parent node, set to -1 if the node is not a direct child of _parent.node (overlay)\n index, _parent) {\n this._tree = _tree;\n this.from = from;\n this.index = index;\n this._parent = _parent;\n }\n get type() { return this._tree.type; }\n get name() { return this._tree.type.name; }\n get to() { return this.from + this._tree.length; }\n nextChild(i, dir, pos, side, mode = 0) {\n for (let parent = this;;) {\n for (let { children, positions } = parent._tree, e = dir > 0 ? children.length : -1; i != e; i += dir) {\n let next = children[i], start = positions[i] + parent.from;\n if (!checkSide(side, pos, start, start + next.length))\n continue;\n if (next instanceof TreeBuffer) {\n if (mode & IterMode.ExcludeBuffers)\n continue;\n let index = next.findChild(0, next.buffer.length, dir, pos - start, side);\n if (index > -1)\n return new BufferNode(new BufferContext(parent, next, i, start), null, index);\n }\n else if ((mode & IterMode.IncludeAnonymous) || (!next.type.isAnonymous || hasChild(next))) {\n let mounted;\n if (!(mode & IterMode.IgnoreMounts) &&\n next.props && (mounted = next.prop(NodeProp.mounted)) && !mounted.overlay)\n return new TreeNode(mounted.tree, start, i, parent);\n let inner = new TreeNode(next, start, i, parent);\n return (mode & IterMode.IncludeAnonymous) || !inner.type.isAnonymous ? inner\n : inner.nextChild(dir < 0 ? next.children.length - 1 : 0, dir, pos, side);\n }\n }\n if ((mode & IterMode.IncludeAnonymous) || !parent.type.isAnonymous)\n return null;\n if (parent.index >= 0)\n i = parent.index + dir;\n else\n i = dir < 0 ? -1 : parent._parent._tree.children.length;\n parent = parent._parent;\n if (!parent)\n return null;\n }\n }\n get firstChild() { return this.nextChild(0, 1, 0, 4 /* Side.DontCare */); }\n get lastChild() { return this.nextChild(this._tree.children.length - 1, -1, 0, 4 /* Side.DontCare */); }\n childAfter(pos) { return this.nextChild(0, 1, pos, 2 /* Side.After */); }\n childBefore(pos) { return this.nextChild(this._tree.children.length - 1, -1, pos, -2 /* Side.Before */); }\n enter(pos, side, mode = 0) {\n let mounted;\n if (!(mode & IterMode.IgnoreOverlays) && (mounted = this._tree.prop(NodeProp.mounted)) && mounted.overlay) {\n let rPos = pos - this.from;\n for (let { from, to } of mounted.overlay) {\n if ((side > 0 ? from <= rPos : from < rPos) &&\n (side < 0 ? to >= rPos : to > rPos))\n return new TreeNode(mounted.tree, mounted.overlay[0].from + this.from, -1, this);\n }\n }\n return this.nextChild(0, 1, pos, side, mode);\n }\n nextSignificantParent() {\n let val = this;\n while (val.type.isAnonymous && val._parent)\n val = val._parent;\n return val;\n }\n get parent() {\n return this._parent ? this._parent.nextSignificantParent() : null;\n }\n get nextSibling() {\n return this._parent && this.index >= 0 ? this._parent.nextChild(this.index + 1, 1, 0, 4 /* Side.DontCare */) : null;\n }\n get prevSibling() {\n return this._parent && this.index >= 0 ? this._parent.nextChild(this.index - 1, -1, 0, 4 /* Side.DontCare */) : null;\n }\n cursor(mode = 0) { return new TreeCursor(this, mode); }\n get tree() { return this._tree; }\n toTree() { return this._tree; }\n resolve(pos, side = 0) {\n return resolveNode(this, pos, side, false);\n }\n resolveInner(pos, side = 0) {\n return resolveNode(this, pos, side, true);\n }\n enterUnfinishedNodesBefore(pos) { return enterUnfinishedNodesBefore(this, pos); }\n getChild(type, before = null, after = null) {\n let r = getChildren(this, type, before, after);\n return r.length ? r[0] : null;\n }\n getChildren(type, before = null, after = null) {\n return getChildren(this, type, before, after);\n }\n /// @internal\n toString() { return this._tree.toString(); }\n get node() { return this; }\n matchContext(context) { return matchNodeContext(this, context); }\n}\nfunction getChildren(node, type, before, after) {\n let cur = node.cursor(), result = [];\n if (!cur.firstChild())\n return result;\n if (before != null)\n while (!cur.type.is(before))\n if (!cur.nextSibling())\n return result;\n for (;;) {\n if (after != null && cur.type.is(after))\n return result;\n if (cur.type.is(type))\n result.push(cur.node);\n if (!cur.nextSibling())\n return after == null ? result : [];\n }\n}\nfunction matchNodeContext(node, context, i = context.length - 1) {\n for (let p = node.parent; i >= 0; p = p.parent) {\n if (!p)\n return false;\n if (!p.type.isAnonymous) {\n if (context[i] && context[i] != p.name)\n return false;\n i--;\n }\n }\n return true;\n}\nclass BufferContext {\n constructor(parent, buffer, index, start) {\n this.parent = parent;\n this.buffer = buffer;\n this.index = index;\n this.start = start;\n }\n}\nclass BufferNode {\n get name() { return this.type.name; }\n get from() { return this.context.start + this.context.buffer.buffer[this.index + 1]; }\n get to() { return this.context.start + this.context.buffer.buffer[this.index + 2]; }\n constructor(context, _parent, index) {\n this.context = context;\n this._parent = _parent;\n this.index = index;\n this.type = context.buffer.set.types[context.buffer.buffer[index]];\n }\n child(dir, pos, side) {\n let { buffer } = this.context;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.context.start, side);\n return index < 0 ? null : new BufferNode(this.context, this, index);\n }\n get firstChild() { return this.child(1, 0, 4 /* Side.DontCare */); }\n get lastChild() { return this.child(-1, 0, 4 /* Side.DontCare */); }\n childAfter(pos) { return this.child(1, pos, 2 /* Side.After */); }\n childBefore(pos) { return this.child(-1, pos, -2 /* Side.Before */); }\n enter(pos, side, mode = 0) {\n if (mode & IterMode.ExcludeBuffers)\n return null;\n let { buffer } = this.context;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], side > 0 ? 1 : -1, pos - this.context.start, side);\n return index < 0 ? null : new BufferNode(this.context, this, index);\n }\n get parent() {\n return this._parent || this.context.parent.nextSignificantParent();\n }\n externalSibling(dir) {\n return this._parent ? null : this.context.parent.nextChild(this.context.index + dir, dir, 0, 4 /* Side.DontCare */);\n }\n get nextSibling() {\n let { buffer } = this.context;\n let after = buffer.buffer[this.index + 3];\n if (after < (this._parent ? buffer.buffer[this._parent.index + 3] : buffer.buffer.length))\n return new BufferNode(this.context, this._parent, after);\n return this.externalSibling(1);\n }\n get prevSibling() {\n let { buffer } = this.context;\n let parentStart = this._parent ? this._parent.index + 4 : 0;\n if (this.index == parentStart)\n return this.externalSibling(-1);\n return new BufferNode(this.context, this._parent, buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n }\n cursor(mode = 0) { return new TreeCursor(this, mode); }\n get tree() { return null; }\n toTree() {\n let children = [], positions = [];\n let { buffer } = this.context;\n let startI = this.index + 4, endI = buffer.buffer[this.index + 3];\n if (endI > startI) {\n let from = buffer.buffer[this.index + 1];\n children.push(buffer.slice(startI, endI, from));\n positions.push(0);\n }\n return new Tree(this.type, children, positions, this.to - this.from);\n }\n resolve(pos, side = 0) {\n return resolveNode(this, pos, side, false);\n }\n resolveInner(pos, side = 0) {\n return resolveNode(this, pos, side, true);\n }\n enterUnfinishedNodesBefore(pos) { return enterUnfinishedNodesBefore(this, pos); }\n /// @internal\n toString() { return this.context.buffer.childString(this.index); }\n getChild(type, before = null, after = null) {\n let r = getChildren(this, type, before, after);\n return r.length ? r[0] : null;\n }\n getChildren(type, before = null, after = null) {\n return getChildren(this, type, before, after);\n }\n get node() { return this; }\n matchContext(context) { return matchNodeContext(this, context); }\n}\n/// A tree cursor object focuses on a given node in a syntax tree, and\n/// allows you to move to adjacent nodes.\nclass TreeCursor {\n /// Shorthand for `.type.name`.\n get name() { return this.type.name; }\n /// @internal\n constructor(node, \n /// @internal\n mode = 0) {\n this.mode = mode;\n /// @internal\n this.buffer = null;\n this.stack = [];\n /// @internal\n this.index = 0;\n this.bufferNode = null;\n if (node instanceof TreeNode) {\n this.yieldNode(node);\n }\n else {\n this._tree = node.context.parent;\n this.buffer = node.context;\n for (let n = node._parent; n; n = n._parent)\n this.stack.unshift(n.index);\n this.bufferNode = node;\n this.yieldBuf(node.index);\n }\n }\n yieldNode(node) {\n if (!node)\n return false;\n this._tree = node;\n this.type = node.type;\n this.from = node.from;\n this.to = node.to;\n return true;\n }\n yieldBuf(index, type) {\n this.index = index;\n let { start, buffer } = this.buffer;\n this.type = type || buffer.set.types[buffer.buffer[index]];\n this.from = start + buffer.buffer[index + 1];\n this.to = start + buffer.buffer[index + 2];\n return true;\n }\n yield(node) {\n if (!node)\n return false;\n if (node instanceof TreeNode) {\n this.buffer = null;\n return this.yieldNode(node);\n }\n this.buffer = node.context;\n return this.yieldBuf(node.index, node.type);\n }\n /// @internal\n toString() {\n return this.buffer ? this.buffer.buffer.childString(this.index) : this._tree.toString();\n }\n /// @internal\n enterChild(dir, pos, side) {\n if (!this.buffer)\n return this.yield(this._tree.nextChild(dir < 0 ? this._tree._tree.children.length - 1 : 0, dir, pos, side, this.mode));\n let { buffer } = this.buffer;\n let index = buffer.findChild(this.index + 4, buffer.buffer[this.index + 3], dir, pos - this.buffer.start, side);\n if (index < 0)\n return false;\n this.stack.push(this.index);\n return this.yieldBuf(index);\n }\n /// Move the cursor to this node's first child. When this returns\n /// false, the node has no child, and the cursor has not been moved.\n firstChild() { return this.enterChild(1, 0, 4 /* Side.DontCare */); }\n /// Move the cursor to this node's last child.\n lastChild() { return this.enterChild(-1, 0, 4 /* Side.DontCare */); }\n /// Move the cursor to the first child that ends after `pos`.\n childAfter(pos) { return this.enterChild(1, pos, 2 /* Side.After */); }\n /// Move to the last child that starts before `pos`.\n childBefore(pos) { return this.enterChild(-1, pos, -2 /* Side.Before */); }\n /// Move the cursor to the child around `pos`. If side is -1 the\n /// child may end at that position, when 1 it may start there. This\n /// will also enter [overlaid](#common.MountedTree.overlay)\n /// [mounted](#common.NodeProp^mounted) trees unless `overlays` is\n /// set to false.\n enter(pos, side, mode = this.mode) {\n if (!this.buffer)\n return this.yield(this._tree.enter(pos, side, mode));\n return mode & IterMode.ExcludeBuffers ? false : this.enterChild(1, pos, side);\n }\n /// Move to the node's parent node, if this isn't the top node.\n parent() {\n if (!this.buffer)\n return this.yieldNode((this.mode & IterMode.IncludeAnonymous) ? this._tree._parent : this._tree.parent);\n if (this.stack.length)\n return this.yieldBuf(this.stack.pop());\n let parent = (this.mode & IterMode.IncludeAnonymous) ? this.buffer.parent : this.buffer.parent.nextSignificantParent();\n this.buffer = null;\n return this.yieldNode(parent);\n }\n /// @internal\n sibling(dir) {\n if (!this.buffer)\n return !this._tree._parent ? false\n : this.yield(this._tree.index < 0 ? null\n : this._tree._parent.nextChild(this._tree.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode));\n let { buffer } = this.buffer, d = this.stack.length - 1;\n if (dir < 0) {\n let parentStart = d < 0 ? 0 : this.stack[d] + 4;\n if (this.index != parentStart)\n return this.yieldBuf(buffer.findChild(parentStart, this.index, -1, 0, 4 /* Side.DontCare */));\n }\n else {\n let after = buffer.buffer[this.index + 3];\n if (after < (d < 0 ? buffer.buffer.length : buffer.buffer[this.stack[d] + 3]))\n return this.yieldBuf(after);\n }\n return d < 0 ? this.yield(this.buffer.parent.nextChild(this.buffer.index + dir, dir, 0, 4 /* Side.DontCare */, this.mode)) : false;\n }\n /// Move to this node's next sibling, if any.\n nextSibling() { return this.sibling(1); }\n /// Move to this node's previous sibling, if any.\n prevSibling() { return this.sibling(-1); }\n atLastNode(dir) {\n let index, parent, { buffer } = this;\n if (buffer) {\n if (dir > 0) {\n if (this.index < buffer.buffer.buffer.length)\n return false;\n }\n else {\n for (let i = 0; i < this.index; i++)\n if (buffer.buffer.buffer[i + 3] < this.index)\n return false;\n }\n ({ index, parent } = buffer);\n }\n else {\n ({ index, _parent: parent } = this._tree);\n }\n for (; parent; { index, _parent: parent } = parent) {\n if (index > -1)\n for (let i = index + dir, e = dir < 0 ? -1 : parent._tree.children.length; i != e; i += dir) {\n let child = parent._tree.children[i];\n if ((this.mode & IterMode.IncludeAnonymous) ||\n child instanceof TreeBuffer ||\n !child.type.isAnonymous ||\n hasChild(child))\n return false;\n }\n }\n return true;\n }\n move(dir, enter) {\n if (enter && this.enterChild(dir, 0, 4 /* Side.DontCare */))\n return true;\n for (;;) {\n if (this.sibling(dir))\n return true;\n if (this.atLastNode(dir) || !this.parent())\n return false;\n }\n }\n /// Move to the next node in a\n /// [pre-order](https://en.wikipedia.org/wiki/Tree_traversal#Pre-order,_NLR)\n /// traversal, going from a node to its first child or, if the\n /// current node is empty or `enter` is false, its next sibling or\n /// the next sibling of the first parent node that has one.\n next(enter = true) { return this.move(1, enter); }\n /// Move to the next node in a last-to-first pre-order traveral. A\n /// node is followed by its last child or, if it has none, its\n /// previous sibling or the previous sibling of the first parent\n /// node that has one.\n prev(enter = true) { return this.move(-1, enter); }\n /// Move the cursor to the innermost node that covers `pos`. If\n /// `side` is -1, it will enter nodes that end at `pos`. If it is 1,\n /// it will enter nodes that start at `pos`.\n moveTo(pos, side = 0) {\n // Move up to a node that actually holds the position, if possible\n while (this.from == this.to ||\n (side < 1 ? this.from >= pos : this.from > pos) ||\n (side > -1 ? this.to <= pos : this.to < pos))\n if (!this.parent())\n break;\n // Then scan down into child nodes as far as possible\n while (this.enterChild(1, pos, side)) { }\n return this;\n }\n /// Get a [syntax node](#common.SyntaxNode) at the cursor's current\n /// position.\n get node() {\n if (!this.buffer)\n return this._tree;\n let cache = this.bufferNode, result = null, depth = 0;\n if (cache && cache.context == this.buffer) {\n scan: for (let index = this.index, d = this.stack.length; d >= 0;) {\n for (let c = cache; c; c = c._parent)\n if (c.index == index) {\n if (index == this.index)\n return c;\n result = c;\n depth = d + 1;\n break scan;\n }\n index = this.stack[--d];\n }\n }\n for (let i = depth; i < this.stack.length; i++)\n result = new BufferNode(this.buffer, result, this.stack[i]);\n return this.bufferNode = new BufferNode(this.buffer, result, this.index);\n }\n /// Get the [tree](#common.Tree) that represents the current node, if\n /// any. Will return null when the node is in a [tree\n /// buffer](#common.TreeBuffer).\n get tree() {\n return this.buffer ? null : this._tree._tree;\n }\n /// Iterate over the current node and all its descendants, calling\n /// `enter` when entering a node and `leave`, if given, when leaving\n /// one. When `enter` returns `false`, any children of that node are\n /// skipped, and `leave` isn't called for it.\n iterate(enter, leave) {\n for (let depth = 0;;) {\n let mustLeave = false;\n if (this.type.isAnonymous || enter(this) !== false) {\n if (this.firstChild()) {\n depth++;\n continue;\n }\n if (!this.type.isAnonymous)\n mustLeave = true;\n }\n for (;;) {\n if (mustLeave && leave)\n leave(this);\n mustLeave = this.type.isAnonymous;\n if (this.nextSibling())\n break;\n if (!depth)\n return;\n this.parent();\n depth--;\n mustLeave = true;\n }\n }\n }\n /// Test whether the current node matches a given context\u2014a sequence\n /// of direct parent node names. Empty strings in the context array\n /// are treated as wildcards.\n matchContext(context) {\n if (!this.buffer)\n return matchNodeContext(this.node, context);\n let { buffer } = this.buffer, { types } = buffer.set;\n for (let i = context.length - 1, d = this.stack.length - 1; i >= 0; d--) {\n if (d < 0)\n return matchNodeContext(this.node, context, i);\n let type = types[buffer.buffer[this.stack[d]]];\n if (!type.isAnonymous) {\n if (context[i] && context[i] != type.name)\n return false;\n i--;\n }\n }\n return true;\n }\n}\nfunction hasChild(tree) {\n return tree.children.some(ch => ch instanceof TreeBuffer || !ch.type.isAnonymous || hasChild(ch));\n}\nfunction buildTree(data) {\n var _a;\n let { buffer, nodeSet, maxBufferLength = DefaultBufferLength, reused = [], minRepeatType = nodeSet.types.length } = data;\n let cursor = Array.isArray(buffer) ? new FlatBufferCursor(buffer, buffer.length) : buffer;\n let types = nodeSet.types;\n let contextHash = 0, lookAhead = 0;\n function takeNode(parentStart, minPos, children, positions, inRepeat) {\n let { id, start, end, size } = cursor;\n let lookAheadAtStart = lookAhead;\n while (size < 0) {\n cursor.next();\n if (size == -1 /* SpecialRecord.Reuse */) {\n let node = reused[id];\n children.push(node);\n positions.push(start - parentStart);\n return;\n }\n else if (size == -3 /* SpecialRecord.ContextChange */) { // Context change\n contextHash = id;\n return;\n }\n else if (size == -4 /* SpecialRecord.LookAhead */) {\n lookAhead = id;\n return;\n }\n else {\n throw new RangeError(`Unrecognized record size: ${size}`);\n }\n }\n let type = types[id], node, buffer;\n let startPos = start - parentStart;\n if (end - start <= maxBufferLength && (buffer = findBufferSize(cursor.pos - minPos, inRepeat))) {\n // Small enough for a buffer, and no reused nodes inside\n let data = new Uint16Array(buffer.size - buffer.skip);\n let endPos = cursor.pos - buffer.size, index = data.length;\n while (cursor.pos > endPos)\n index = copyToBuffer(buffer.start, data, index);\n node = new TreeBuffer(data, end - buffer.start, nodeSet);\n startPos = buffer.start - parentStart;\n }\n else { // Make it a node\n let endPos = cursor.pos - size;\n cursor.next();\n let localChildren = [], localPositions = [];\n let localInRepeat = id >= minRepeatType ? id : -1;\n let lastGroup = 0, lastEnd = end;\n while (cursor.pos > endPos) {\n if (localInRepeat >= 0 && cursor.id == localInRepeat && cursor.size >= 0) {\n if (cursor.end <= lastEnd - maxBufferLength) {\n makeRepeatLeaf(localChildren, localPositions, start, lastGroup, cursor.end, lastEnd, localInRepeat, lookAheadAtStart);\n lastGroup = localChildren.length;\n lastEnd = cursor.end;\n }\n cursor.next();\n }\n else {\n takeNode(start, endPos, localChildren, localPositions, localInRepeat);\n }\n }\n if (localInRepeat >= 0 && lastGroup > 0 && lastGroup < localChildren.length)\n makeRepeatLeaf(localChildren, localPositions, start, lastGroup, start, lastEnd, localInRepeat, lookAheadAtStart);\n localChildren.reverse();\n localPositions.reverse();\n if (localInRepeat > -1 && lastGroup > 0) {\n let make = makeBalanced(type);\n node = balanceRange(type, localChildren, localPositions, 0, localChildren.length, 0, end - start, make, make);\n }\n else {\n node = makeTree(type, localChildren, localPositions, end - start, lookAheadAtStart - end);\n }\n }\n children.push(node);\n positions.push(startPos);\n }\n function makeBalanced(type) {\n return (children, positions, length) => {\n let lookAhead = 0, lastI = children.length - 1, last, lookAheadProp;\n if (lastI >= 0 && (last = children[lastI]) instanceof Tree) {\n if (!lastI && last.type == type && last.length == length)\n return last;\n if (lookAheadProp = last.prop(NodeProp.lookAhead))\n lookAhead = positions[lastI] + last.length + lookAheadProp;\n }\n return makeTree(type, children, positions, length, lookAhead);\n };\n }\n function makeRepeatLeaf(children, positions, base, i, from, to, type, lookAhead) {\n let localChildren = [], localPositions = [];\n while (children.length > i) {\n localChildren.push(children.pop());\n localPositions.push(positions.pop() + base - from);\n }\n children.push(makeTree(nodeSet.types[type], localChildren, localPositions, to - from, lookAhead - to));\n positions.push(from - base);\n }\n function makeTree(type, children, positions, length, lookAhead = 0, props) {\n if (contextHash) {\n let pair = [NodeProp.contextHash, contextHash];\n props = props ? [pair].concat(props) : [pair];\n }\n if (lookAhead > 25) {\n let pair = [NodeProp.lookAhead, lookAhead];\n props = props ? [pair].concat(props) : [pair];\n }\n return new Tree(type, children, positions, length, props);\n }\n function findBufferSize(maxSize, inRepeat) {\n // Scan through the buffer to find previous siblings that fit\n // together in a TreeBuffer, and don't contain any reused nodes\n // (which can't be stored in a buffer).\n // If `inRepeat` is > -1, ignore node boundaries of that type for\n // nesting, but make sure the end falls either at the start\n // (`maxSize`) or before such a node.\n let fork = cursor.fork();\n let size = 0, start = 0, skip = 0, minStart = fork.end - maxBufferLength;\n let result = { size: 0, start: 0, skip: 0 };\n scan: for (let minPos = fork.pos - maxSize; fork.pos > minPos;) {\n let nodeSize = fork.size;\n // Pretend nested repeat nodes of the same type don't exist\n if (fork.id == inRepeat && nodeSize >= 0) {\n // Except that we store the current state as a valid return\n // value.\n result.size = size;\n result.start = start;\n result.skip = skip;\n skip += 4;\n size += 4;\n fork.next();\n continue;\n }\n let startPos = fork.pos - nodeSize;\n if (nodeSize < 0 || startPos < minPos || fork.start < minStart)\n break;\n let localSkipped = fork.id >= minRepeatType ? 4 : 0;\n let nodeStart = fork.start;\n fork.next();\n while (fork.pos > startPos) {\n if (fork.size < 0) {\n if (fork.size == -3 /* SpecialRecord.ContextChange */)\n localSkipped += 4;\n else\n break scan;\n }\n else if (fork.id >= minRepeatType) {\n localSkipped += 4;\n }\n fork.next();\n }\n start = nodeStart;\n size += nodeSize;\n skip += localSkipped;\n }\n if (inRepeat < 0 || size == maxSize) {\n result.size = size;\n result.start = start;\n result.skip = skip;\n }\n return result.size > 4 ? result : undefined;\n }\n function copyToBuffer(bufferStart, buffer, index) {\n let { id, start, end, size } = cursor;\n cursor.next();\n if (size >= 0 && id < minRepeatType) {\n let startIndex = index;\n if (size > 4) {\n let endPos = cursor.pos - (size - 4);\n while (cursor.pos > endPos)\n index = copyToBuffer(bufferStart, buffer, index);\n }\n buffer[--index] = startIndex;\n buffer[--index] = end - bufferStart;\n buffer[--index] = start - bufferStart;\n buffer[--index] = id;\n }\n else if (size == -3 /* SpecialRecord.ContextChange */) {\n contextHash = id;\n }\n else if (size == -4 /* SpecialRecord.LookAhead */) {\n lookAhead = id;\n }\n return index;\n }\n let children = [], positions = [];\n while (cursor.pos > 0)\n takeNode(data.start || 0, data.bufferStart || 0, children, positions, -1);\n let length = (_a = data.length) !== null && _a !== void 0 ? _a : (children.length ? positions[0] + children[0].length : 0);\n return new Tree(types[data.topID], children.reverse(), positions.reverse(), length);\n}\nconst nodeSizeCache = new WeakMap;\nfunction nodeSize(balanceType, node) {\n if (!balanceType.isAnonymous || node instanceof TreeBuffer || node.type != balanceType)\n return 1;\n let size = nodeSizeCache.get(node);\n if (size == null) {\n size = 1;\n for (let child of node.children) {\n if (child.type != balanceType || !(child instanceof Tree)) {\n size = 1;\n break;\n }\n size += nodeSize(balanceType, child);\n }\n nodeSizeCache.set(node, size);\n }\n return size;\n}\nfunction balanceRange(\n// The type the balanced tree's inner nodes.\nbalanceType, \n// The direct children and their positions\nchildren, positions, \n// The index range in children/positions to use\nfrom, to, \n// The start position of the nodes, relative to their parent.\nstart, \n// Length of the outer node\nlength, \n// Function to build the top node of the balanced tree\nmkTop, \n// Function to build internal nodes for the balanced tree\nmkTree) {\n let total = 0;\n for (let i = from; i < to; i++)\n total += nodeSize(balanceType, children[i]);\n let maxChild = Math.ceil((total * 1.5) / 8 /* Balance.BranchFactor */);\n let localChildren = [], localPositions = [];\n function divide(children, positions, from, to, offset) {\n for (let i = from; i < to;) {\n let groupFrom = i, groupStart = positions[i], groupSize = nodeSize(balanceType, children[i]);\n i++;\n for (; i < to; i++) {\n let nextSize = nodeSize(balanceType, children[i]);\n if (groupSize + nextSize >= maxChild)\n break;\n groupSize += nextSize;\n }\n if (i == groupFrom + 1) {\n if (groupSize > maxChild) {\n let only = children[groupFrom]; // Only trees can have a size > 1\n divide(only.children, only.positions, 0, only.children.length, positions[groupFrom] + offset);\n continue;\n }\n localChildren.push(children[groupFrom]);\n }\n else {\n let length = positions[i - 1] + children[i - 1].length - groupStart;\n localChildren.push(balanceRange(balanceType, children, positions, groupFrom, i, groupStart, length, null, mkTree));\n }\n localPositions.push(groupStart + offset - start);\n }\n }\n divide(children, positions, from, to, 0);\n return (mkTop || mkTree)(localChildren, localPositions, length);\n}\n/// Provides a way to associate values with pieces of trees. As long\n/// as that part of the tree is reused, the associated values can be\n/// retrieved from an updated tree.\nclass NodeWeakMap {\n constructor() {\n this.map = new WeakMap();\n }\n setBuffer(buffer, index, value) {\n let inner = this.map.get(buffer);\n if (!inner)\n this.map.set(buffer, inner = new Map);\n inner.set(index, value);\n }\n getBuffer(buffer, index) {\n let inner = this.map.get(buffer);\n return inner && inner.get(index);\n }\n /// Set the value for this syntax node.\n set(node, value) {\n if (node instanceof BufferNode)\n this.setBuffer(node.context.buffer, node.index, value);\n else if (node instanceof TreeNode)\n this.map.set(node.tree, value);\n }\n /// Retrieve value for this syntax node, if it exists in the map.\n get(node) {\n return node instanceof BufferNode ? this.getBuffer(node.context.buffer, node.index)\n : node instanceof TreeNode ? this.map.get(node.tree) : undefined;\n }\n /// Set the value for the node that a cursor currently points to.\n cursorSet(cursor, value) {\n if (cursor.buffer)\n this.setBuffer(cursor.buffer.buffer, cursor.index, value);\n else\n this.map.set(cursor.tree, value);\n }\n /// Retrieve the value for the node that a cursor currently points\n /// to.\n cursorGet(cursor) {\n return cursor.buffer ? this.getBuffer(cursor.buffer.buffer, cursor.index) : this.map.get(cursor.tree);\n }\n}\n\n/// Tree fragments are used during [incremental\n/// parsing](#common.Parser.startParse) to track parts of old trees\n/// that can be reused in a new parse. An array of fragments is used\n/// to track regions of an old tree whose nodes might be reused in new\n/// parses. Use the static\n/// [`applyChanges`](#common.TreeFragment^applyChanges) method to\n/// update fragments for document changes.\nclass TreeFragment {\n /// Construct a tree fragment. You'll usually want to use\n /// [`addTree`](#common.TreeFragment^addTree) and\n /// [`applyChanges`](#common.TreeFragment^applyChanges) instead of\n /// calling this directly.\n constructor(\n /// The start of the unchanged range pointed to by this fragment.\n /// This refers to an offset in the _updated_ document (as opposed\n /// to the original tree).\n from, \n /// The end of the unchanged range.\n to, \n /// The tree that this fragment is based on.\n tree, \n /// The offset between the fragment's tree and the document that\n /// this fragment can be used against. Add this when going from\n /// document to tree positions, subtract it to go from tree to\n /// document positions.\n offset, openStart = false, openEnd = false) {\n this.from = from;\n this.to = to;\n this.tree = tree;\n this.offset = offset;\n this.open = (openStart ? 1 /* Open.Start */ : 0) | (openEnd ? 2 /* Open.End */ : 0);\n }\n /// Whether the start of the fragment represents the start of a\n /// parse, or the end of a change. (In the second case, it may not\n /// be safe to reuse some nodes at the start, depending on the\n /// parsing algorithm.)\n get openStart() { return (this.open & 1 /* Open.Start */) > 0; }\n /// Whether the end of the fragment represents the end of a\n /// full-document parse, or the start of a change.\n get openEnd() { return (this.open & 2 /* Open.End */) > 0; }\n /// Create a set of fragments from a freshly parsed tree, or update\n /// an existing set of fragments by replacing the ones that overlap\n /// with a tree with content from the new tree. When `partial` is\n /// true, the parse is treated as incomplete, and the resulting\n /// fragment has [`openEnd`](#common.TreeFragment.openEnd) set to\n /// true.\n static addTree(tree, fragments = [], partial = false) {\n let result = [new TreeFragment(0, tree.length, tree, 0, false, partial)];\n for (let f of fragments)\n if (f.to > tree.length)\n result.push(f);\n return result;\n }\n /// Apply a set of edits to an array of fragments, removing or\n /// splitting fragments as necessary to remove edited ranges, and\n /// adjusting offsets for fragments that moved.\n static applyChanges(fragments, changes, minGap = 128) {\n if (!changes.length)\n return fragments;\n let result = [];\n let fI = 1, nextF = fragments.length ? fragments[0] : null;\n for (let cI = 0, pos = 0, off = 0;; cI++) {\n let nextC = cI < changes.length ? changes[cI] : null;\n let nextPos = nextC ? nextC.fromA : 1e9;\n if (nextPos - pos >= minGap)\n while (nextF && nextF.from < nextPos) {\n let cut = nextF;\n if (pos >= cut.from || nextPos <= cut.to || off) {\n let fFrom = Math.max(cut.from, pos) - off, fTo = Math.min(cut.to, nextPos) - off;\n cut = fFrom >= fTo ? null : new TreeFragment(fFrom, fTo, cut.tree, cut.offset + off, cI > 0, !!nextC);\n }\n if (cut)\n result.push(cut);\n if (nextF.to > nextPos)\n break;\n nextF = fI < fragments.length ? fragments[fI++] : null;\n }\n if (!nextC)\n break;\n pos = nextC.toA;\n off = nextC.toA - nextC.toB;\n }\n return result;\n }\n}\n/// A superclass that parsers should extend.\nclass Parser {\n /// Start a parse, returning a [partial parse](#common.PartialParse)\n /// object. [`fragments`](#common.TreeFragment) can be passed in to\n /// make the parse incremental.\n ///\n /// By default, the entire input is parsed. You can pass `ranges`,\n /// which should be a sorted array of non-empty, non-overlapping\n /// ranges, to parse only those ranges. The tree returned in that\n /// case will start at `ranges[0].from`.\n startParse(input, fragments, ranges) {\n if (typeof input == \"string\")\n input = new StringInput(input);\n ranges = !ranges ? [new Range(0, input.length)] : ranges.length ? ranges.map(r => new Range(r.from, r.to)) : [new Range(0, 0)];\n return this.createParse(input, fragments || [], ranges);\n }\n /// Run a full parse, returning the resulting tree.\n parse(input, fragments, ranges) {\n let parse = this.startParse(input, fragments, ranges);\n for (;;) {\n let done = parse.advance();\n if (done)\n return done;\n }\n }\n}\nclass StringInput {\n constructor(string) {\n this.string = string;\n }\n get length() { return this.string.length; }\n chunk(from) { return this.string.slice(from); }\n get lineChunks() { return false; }\n read(from, to) { return this.string.slice(from, to); }\n}\n\n/// Create a parse wrapper that, after the inner parse completes,\n/// scans its tree for mixed language regions with the `nest`\n/// function, runs the resulting [inner parses](#common.NestedParse),\n/// and then [mounts](#common.NodeProp^mounted) their results onto the\n/// tree.\nfunction parseMixed(nest) {\n return (parse, input, fragments, ranges) => new MixedParse(parse, nest, input, fragments, ranges);\n}\nclass InnerParse {\n constructor(parser, parse, overlay, target, ranges) {\n this.parser = parser;\n this.parse = parse;\n this.overlay = overlay;\n this.target = target;\n this.ranges = ranges;\n if (!ranges.length || ranges.some(r => r.from >= r.to))\n throw new RangeError(\"Invalid inner parse ranges given: \" + JSON.stringify(ranges));\n }\n}\nclass ActiveOverlay {\n constructor(parser, predicate, mounts, index, start, target, prev) {\n this.parser = parser;\n this.predicate = predicate;\n this.mounts = mounts;\n this.index = index;\n this.start = start;\n this.target = target;\n this.prev = prev;\n this.depth = 0;\n this.ranges = [];\n }\n}\nconst stoppedInner = new NodeProp({ perNode: true });\nclass MixedParse {\n constructor(base, nest, input, fragments, ranges) {\n this.nest = nest;\n this.input = input;\n this.fragments = fragments;\n this.ranges = ranges;\n this.inner = [];\n this.innerDone = 0;\n this.baseTree = null;\n this.stoppedAt = null;\n this.baseParse = base;\n }\n advance() {\n if (this.baseParse) {\n let done = this.baseParse.advance();\n if (!done)\n return null;\n this.baseParse = null;\n this.baseTree = done;\n this.startInner();\n if (this.stoppedAt != null)\n for (let inner of this.inner)\n inner.parse.stopAt(this.stoppedAt);\n }\n if (this.innerDone == this.inner.length) {\n let result = this.baseTree;\n if (this.stoppedAt != null)\n result = new Tree(result.type, result.children, result.positions, result.length, result.propValues.concat([[stoppedInner, this.stoppedAt]]));\n return result;\n }\n let inner = this.inner[this.innerDone], done = inner.parse.advance();\n if (done) {\n this.innerDone++;\n // This is a somewhat dodgy but super helpful hack where we\n // patch up nodes created by the inner parse (and thus\n // presumably not aliased anywhere else) to hold the information\n // about the inner parse.\n let props = Object.assign(Object.create(null), inner.target.props);\n props[NodeProp.mounted.id] = new MountedTree(done, inner.overlay, inner.parser);\n inner.target.props = props;\n }\n return null;\n }\n get parsedPos() {\n if (this.baseParse)\n return 0;\n let pos = this.input.length;\n for (let i = this.innerDone; i < this.inner.length; i++) {\n if (this.inner[i].ranges[0].from < pos)\n pos = Math.min(pos, this.inner[i].parse.parsedPos);\n }\n return pos;\n }\n stopAt(pos) {\n this.stoppedAt = pos;\n if (this.baseParse)\n this.baseParse.stopAt(pos);\n else\n for (let i = this.innerDone; i < this.inner.length; i++)\n this.inner[i].parse.stopAt(pos);\n }\n startInner() {\n let fragmentCursor = new FragmentCursor(this.fragments);\n let overlay = null;\n let covered = null;\n let cursor = new TreeCursor(new TreeNode(this.baseTree, this.ranges[0].from, 0, null), IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n scan: for (let nest, isCovered; this.stoppedAt == null || cursor.from < this.stoppedAt;) {\n let enter = true, range;\n if (fragmentCursor.hasNode(cursor)) {\n if (overlay) {\n let match = overlay.mounts.find(m => m.frag.from <= cursor.from && m.frag.to >= cursor.to && m.mount.overlay);\n if (match)\n for (let r of match.mount.overlay) {\n let from = r.from + match.pos, to = r.to + match.pos;\n if (from >= cursor.from && to <= cursor.to && !overlay.ranges.some(r => r.from < to && r.to > from))\n overlay.ranges.push({ from, to });\n }\n }\n enter = false;\n }\n else if (covered && (isCovered = checkCover(covered.ranges, cursor.from, cursor.to))) {\n enter = isCovered != 2 /* Cover.Full */;\n }\n else if (!cursor.type.isAnonymous && cursor.from < cursor.to && (nest = this.nest(cursor, this.input))) {\n if (!cursor.tree)\n materialize(cursor);\n let oldMounts = fragmentCursor.findMounts(cursor.from, nest.parser);\n if (typeof nest.overlay == \"function\") {\n overlay = new ActiveOverlay(nest.parser, nest.overlay, oldMounts, this.inner.length, cursor.from, cursor.tree, overlay);\n }\n else {\n let ranges = punchRanges(this.ranges, nest.overlay || [new Range(cursor.from, cursor.to)]);\n if (ranges.length)\n this.inner.push(new InnerParse(nest.parser, nest.parser.startParse(this.input, enterFragments(oldMounts, ranges), ranges), nest.overlay ? nest.overlay.map(r => new Range(r.from - cursor.from, r.to - cursor.from)) : null, cursor.tree, ranges));\n if (!nest.overlay)\n enter = false;\n else if (ranges.length)\n covered = { ranges, depth: 0, prev: covered };\n }\n }\n else if (overlay && (range = overlay.predicate(cursor))) {\n if (range === true)\n range = new Range(cursor.from, cursor.to);\n if (range.from < range.to)\n overlay.ranges.push(range);\n }\n if (enter && cursor.firstChild()) {\n if (overlay)\n overlay.depth++;\n if (covered)\n covered.depth++;\n }\n else {\n for (;;) {\n if (cursor.nextSibling())\n break;\n if (!cursor.parent())\n break scan;\n if (overlay && !--overlay.depth) {\n let ranges = punchRanges(this.ranges, overlay.ranges);\n if (ranges.length)\n this.inner.splice(overlay.index, 0, new InnerParse(overlay.parser, overlay.parser.startParse(this.input, enterFragments(overlay.mounts, ranges), ranges), overlay.ranges.map(r => new Range(r.from - overlay.start, r.to - overlay.start)), overlay.target, ranges));\n overlay = overlay.prev;\n }\n if (covered && !--covered.depth)\n covered = covered.prev;\n }\n }\n }\n }\n}\nfunction checkCover(covered, from, to) {\n for (let range of covered) {\n if (range.from >= to)\n break;\n if (range.to > from)\n return range.from <= from && range.to >= to ? 2 /* Cover.Full */ : 1 /* Cover.Partial */;\n }\n return 0 /* Cover.None */;\n}\n// Take a piece of buffer and convert it into a stand-alone\n// TreeBuffer.\nfunction sliceBuf(buf, startI, endI, nodes, positions, off) {\n if (startI < endI) {\n let from = buf.buffer[startI + 1];\n nodes.push(buf.slice(startI, endI, from));\n positions.push(from - off);\n }\n}\n// This function takes a node that's in a buffer, and converts it, and\n// its parent buffer nodes, into a Tree. This is again acting on the\n// assumption that the trees and buffers have been constructed by the\n// parse that was ran via the mix parser, and thus aren't shared with\n// any other code, making violations of the immutability safe.\nfunction materialize(cursor) {\n let { node } = cursor, depth = 0;\n // Scan up to the nearest tree\n do {\n cursor.parent();\n depth++;\n } while (!cursor.tree);\n // Find the index of the buffer in that tree\n let i = 0, base = cursor.tree, off = 0;\n for (;; i++) {\n off = base.positions[i] + cursor.from;\n if (off <= node.from && off + base.children[i].length >= node.to)\n break;\n }\n let buf = base.children[i], b = buf.buffer;\n // Split a level in the buffer, putting the nodes before and after\n // the child that contains `node` into new buffers.\n function split(startI, endI, type, innerOffset, length) {\n let i = startI;\n while (b[i + 2] + off <= node.from)\n i = b[i + 3];\n let children = [], positions = [];\n sliceBuf(buf, startI, i, children, positions, innerOffset);\n let from = b[i + 1], to = b[i + 2];\n let isTarget = from + off == node.from && to + off == node.to && b[i] == node.type.id;\n children.push(isTarget ? node.toTree() : split(i + 4, b[i + 3], buf.set.types[b[i]], from, to - from));\n positions.push(from - innerOffset);\n sliceBuf(buf, b[i + 3], endI, children, positions, innerOffset);\n return new Tree(type, children, positions, length);\n }\n base.children[i] = split(0, b.length, NodeType.none, 0, buf.length);\n // Move the cursor back to the target node\n for (let d = 0; d <= depth; d++)\n cursor.childAfter(node.from);\n}\nclass StructureCursor {\n constructor(root, offset) {\n this.offset = offset;\n this.done = false;\n this.cursor = root.cursor(IterMode.IncludeAnonymous | IterMode.IgnoreMounts);\n }\n // Move to the first node (in pre-order) that starts at or after `pos`.\n moveTo(pos) {\n let { cursor } = this, p = pos - this.offset;\n while (!this.done && cursor.from < p) {\n if (cursor.to >= pos && cursor.enter(p, 1, IterMode.IgnoreOverlays | IterMode.ExcludeBuffers)) ;\n else if (!cursor.next(false))\n this.done = true;\n }\n }\n hasNode(cursor) {\n this.moveTo(cursor.from);\n if (!this.done && this.cursor.from + this.offset == cursor.from && this.cursor.tree) {\n for (let tree = this.cursor.tree;;) {\n if (tree == cursor.tree)\n return true;\n if (tree.children.length && tree.positions[0] == 0 && tree.children[0] instanceof Tree)\n tree = tree.children[0];\n else\n break;\n }\n }\n return false;\n }\n}\nclass FragmentCursor {\n constructor(fragments) {\n var _a;\n this.fragments = fragments;\n this.curTo = 0;\n this.fragI = 0;\n if (fragments.length) {\n let first = this.curFrag = fragments[0];\n this.curTo = (_a = first.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : first.to;\n this.inner = new StructureCursor(first.tree, -first.offset);\n }\n else {\n this.curFrag = this.inner = null;\n }\n }\n hasNode(node) {\n while (this.curFrag && node.from >= this.curTo)\n this.nextFrag();\n return this.curFrag && this.curFrag.from <= node.from && this.curTo >= node.to && this.inner.hasNode(node);\n }\n nextFrag() {\n var _a;\n this.fragI++;\n if (this.fragI == this.fragments.length) {\n this.curFrag = this.inner = null;\n }\n else {\n let frag = this.curFrag = this.fragments[this.fragI];\n this.curTo = (_a = frag.tree.prop(stoppedInner)) !== null && _a !== void 0 ? _a : frag.to;\n this.inner = new StructureCursor(frag.tree, -frag.offset);\n }\n }\n findMounts(pos, parser) {\n var _a;\n let result = [];\n if (this.inner) {\n this.inner.cursor.moveTo(pos, 1);\n for (let pos = this.inner.cursor.node; pos; pos = pos.parent) {\n let mount = (_a = pos.tree) === null || _a === void 0 ? void 0 : _a.prop(NodeProp.mounted);\n if (mount && mount.parser == parser) {\n for (let i = this.fragI; i < this.fragments.length; i++) {\n let frag = this.fragments[i];\n if (frag.from >= pos.to)\n break;\n if (frag.tree == this.curFrag.tree)\n result.push({\n frag,\n pos: pos.from - frag.offset,\n mount\n });\n }\n }\n }\n }\n return result;\n }\n}\nfunction punchRanges(outer, ranges) {\n let copy = null, current = ranges;\n for (let i = 1, j = 0; i < outer.length; i++) {\n let gapFrom = outer[i - 1].to, gapTo = outer[i].from;\n for (; j < current.length; j++) {\n let r = current[j];\n if (r.from >= gapTo)\n break;\n if (r.to <= gapFrom)\n continue;\n if (!copy)\n current = copy = ranges.slice();\n if (r.from < gapFrom) {\n copy[j] = new Range(r.from, gapFrom);\n if (r.to > gapTo)\n copy.splice(j + 1, 0, new Range(gapTo, r.to));\n }\n else if (r.to > gapTo) {\n copy[j--] = new Range(gapTo, r.to);\n }\n else {\n copy.splice(j--, 1);\n }\n }\n }\n return current;\n}\nfunction findCoverChanges(a, b, from, to) {\n let iA = 0, iB = 0, inA = false, inB = false, pos = -1e9;\n let result = [];\n for (;;) {\n let nextA = iA == a.length ? 1e9 : inA ? a[iA].to : a[iA].from;\n let nextB = iB == b.length ? 1e9 : inB ? b[iB].to : b[iB].from;\n if (inA != inB) {\n let start = Math.max(pos, from), end = Math.min(nextA, nextB, to);\n if (start < end)\n result.push(new Range(start, end));\n }\n pos = Math.min(nextA, nextB);\n if (pos == 1e9)\n break;\n if (nextA == pos) {\n if (!inA)\n inA = true;\n else {\n inA = false;\n iA++;\n }\n }\n if (nextB == pos) {\n if (!inB)\n inB = true;\n else {\n inB = false;\n iB++;\n }\n }\n }\n return result;\n}\n// Given a number of fragments for the outer tree, and a set of ranges\n// to parse, find fragments for inner trees mounted around those\n// ranges, if any.\nfunction enterFragments(mounts, ranges) {\n let result = [];\n for (let { pos, mount, frag } of mounts) {\n let startPos = pos + (mount.overlay ? mount.overlay[0].from : 0), endPos = startPos + mount.tree.length;\n let from = Math.max(frag.from, startPos), to = Math.min(frag.to, endPos);\n if (mount.overlay) {\n let overlay = mount.overlay.map(r => new Range(r.from + pos, r.to + pos));\n let changes = findCoverChanges(ranges, overlay, from, to);\n for (let i = 0, pos = from;; i++) {\n let last = i == changes.length, end = last ? to : changes[i].from;\n if (end > pos)\n result.push(new TreeFragment(pos, end, mount.tree, -startPos, frag.from >= pos || frag.openStart, frag.to <= end || frag.openEnd));\n if (last)\n break;\n pos = changes[i].to;\n }\n }\n else {\n result.push(new TreeFragment(from, to, mount.tree, -startPos, frag.from >= startPos || frag.openStart, frag.to <= endPos || frag.openEnd));\n }\n }\n return result;\n}\n\nexport { DefaultBufferLength, IterMode, MountedTree, NodeProp, NodeSet, NodeType, NodeWeakMap, Parser, Tree, TreeBuffer, TreeCursor, TreeFragment, parseMixed };\n", "import { Parser, NodeProp, NodeSet, NodeType, DefaultBufferLength, Tree, IterMode } from '@lezer/common';\n\n/// A parse stack. These are used internally by the parser to track\n/// parsing progress. They also provide some properties and methods\n/// that external code such as a tokenizer can use to get information\n/// about the parse state.\nclass Stack {\n /// @internal\n constructor(\n /// The parse that this stack is part of @internal\n p, \n /// Holds state, input pos, buffer index triplets for all but the\n /// top state @internal\n stack, \n /// The current parse state @internal\n state, \n // The position at which the next reduce should take place. This\n // can be less than `this.pos` when skipped expressions have been\n // added to the stack (which should be moved outside of the next\n // reduction)\n /// @internal\n reducePos, \n /// The input position up to which this stack has parsed.\n pos, \n /// The dynamic score of the stack, including dynamic precedence\n /// and error-recovery penalties\n /// @internal\n score, \n // The output buffer. Holds (type, start, end, size) quads\n // representing nodes created by the parser, where `size` is\n // amount of buffer array entries covered by this node.\n /// @internal\n buffer, \n // The base offset of the buffer. When stacks are split, the split\n // instance shared the buffer history with its parent up to\n // `bufferBase`, which is the absolute offset (including the\n // offset of previous splits) into the buffer at which this stack\n // starts writing.\n /// @internal\n bufferBase, \n /// @internal\n curContext, \n /// @internal\n lookAhead = 0, \n // A parent stack from which this was split off, if any. This is\n // set up so that it always points to a stack that has some\n // additional buffer content, never to a stack with an equal\n // `bufferBase`.\n /// @internal\n parent) {\n this.p = p;\n this.stack = stack;\n this.state = state;\n this.reducePos = reducePos;\n this.pos = pos;\n this.score = score;\n this.buffer = buffer;\n this.bufferBase = bufferBase;\n this.curContext = curContext;\n this.lookAhead = lookAhead;\n this.parent = parent;\n }\n /// @internal\n toString() {\n return `[${this.stack.filter((_, i) => i % 3 == 0).concat(this.state)}]@${this.pos}${this.score ? \"!\" + this.score : \"\"}`;\n }\n // Start an empty stack\n /// @internal\n static start(p, state, pos = 0) {\n let cx = p.parser.context;\n return new Stack(p, [], state, pos, pos, 0, [], 0, cx ? new StackContext(cx, cx.start) : null, 0, null);\n }\n /// The stack's current [context](#lr.ContextTracker) value, if\n /// any. Its type will depend on the context tracker's type\n /// parameter, or it will be `null` if there is no context\n /// tracker.\n get context() { return this.curContext ? this.curContext.context : null; }\n // Push a state onto the stack, tracking its start position as well\n // as the buffer base at that point.\n /// @internal\n pushState(state, start) {\n this.stack.push(this.state, start, this.bufferBase + this.buffer.length);\n this.state = state;\n }\n // Apply a reduce action\n /// @internal\n reduce(action) {\n var _a;\n let depth = action >> 19 /* Action.ReduceDepthShift */, type = action & 65535 /* Action.ValueMask */;\n let { parser } = this.p;\n let dPrec = parser.dynamicPrecedence(type);\n if (dPrec)\n this.score += dPrec;\n if (depth == 0) {\n this.pushState(parser.getGoto(this.state, type, true), this.reducePos);\n // Zero-depth reductions are a special case\u2014they add stuff to\n // the stack without popping anything off.\n if (type < parser.minRepeatTerm)\n this.storeNode(type, this.reducePos, this.reducePos, 4, true);\n this.reduceContext(type, this.reducePos);\n return;\n }\n // Find the base index into `this.stack`, content after which will\n // be dropped. Note that with `StayFlag` reductions we need to\n // consume two extra frames (the dummy parent node for the skipped\n // expression and the state that we'll be staying in, which should\n // be moved to `this.state`).\n let base = this.stack.length - ((depth - 1) * 3) - (action & 262144 /* Action.StayFlag */ ? 6 : 0);\n let start = base ? this.stack[base - 2] : this.p.ranges[0].from, size = this.reducePos - start;\n // This is a kludge to try and detect overly deep left-associative\n // trees, which will not increase the parse stack depth and thus\n // won't be caught by the regular stack-depth limit check.\n if (size >= 2000 /* Recover.MinBigReduction */ && !((_a = this.p.parser.nodeSet.types[type]) === null || _a === void 0 ? void 0 : _a.isAnonymous)) {\n if (start == this.p.lastBigReductionStart) {\n this.p.bigReductionCount++;\n this.p.lastBigReductionSize = size;\n }\n else if (this.p.lastBigReductionSize < size) {\n this.p.bigReductionCount = 1;\n this.p.lastBigReductionStart = start;\n this.p.lastBigReductionSize = size;\n }\n }\n let bufferBase = base ? this.stack[base - 1] : 0, count = this.bufferBase + this.buffer.length - bufferBase;\n // Store normal terms or `R -> R R` repeat reductions\n if (type < parser.minRepeatTerm || (action & 131072 /* Action.RepeatFlag */)) {\n let pos = parser.stateFlag(this.state, 1 /* StateFlag.Skipped */) ? this.pos : this.reducePos;\n this.storeNode(type, start, pos, count + 4, true);\n }\n if (action & 262144 /* Action.StayFlag */) {\n this.state = this.stack[base];\n }\n else {\n let baseStateID = this.stack[base - 3];\n this.state = parser.getGoto(baseStateID, type, true);\n }\n while (this.stack.length > base)\n this.stack.pop();\n this.reduceContext(type, start);\n }\n // Shift a value into the buffer\n /// @internal\n storeNode(term, start, end, size = 4, isReduce = false) {\n if (term == 0 /* Term.Err */ &&\n (!this.stack.length || this.stack[this.stack.length - 1] < this.buffer.length + this.bufferBase)) {\n // Try to omit/merge adjacent error nodes\n let cur = this, top = this.buffer.length;\n if (top == 0 && cur.parent) {\n top = cur.bufferBase - cur.parent.bufferBase;\n cur = cur.parent;\n }\n if (top > 0 && cur.buffer[top - 4] == 0 /* Term.Err */ && cur.buffer[top - 1] > -1) {\n if (start == end)\n return;\n if (cur.buffer[top - 2] >= start) {\n cur.buffer[top - 2] = end;\n return;\n }\n }\n }\n if (!isReduce || this.pos == end) { // Simple case, just append\n this.buffer.push(term, start, end, size);\n }\n else { // There may be skipped nodes that have to be moved forward\n let index = this.buffer.length;\n if (index > 0 && this.buffer[index - 4] != 0 /* Term.Err */)\n while (index > 0 && this.buffer[index - 2] > end) {\n // Move this record forward\n this.buffer[index] = this.buffer[index - 4];\n this.buffer[index + 1] = this.buffer[index - 3];\n this.buffer[index + 2] = this.buffer[index - 2];\n this.buffer[index + 3] = this.buffer[index - 1];\n index -= 4;\n if (size > 4)\n size -= 4;\n }\n this.buffer[index] = term;\n this.buffer[index + 1] = start;\n this.buffer[index + 2] = end;\n this.buffer[index + 3] = size;\n }\n }\n // Apply a shift action\n /// @internal\n shift(action, next, nextEnd) {\n let start = this.pos;\n if (action & 131072 /* Action.GotoFlag */) {\n this.pushState(action & 65535 /* Action.ValueMask */, this.pos);\n }\n else if ((action & 262144 /* Action.StayFlag */) == 0) { // Regular shift\n let nextState = action, { parser } = this.p;\n if (nextEnd > this.pos || next <= parser.maxNode) {\n this.pos = nextEnd;\n if (!parser.stateFlag(nextState, 1 /* StateFlag.Skipped */))\n this.reducePos = nextEnd;\n }\n this.pushState(nextState, start);\n this.shiftContext(next, start);\n if (next <= parser.maxNode)\n this.buffer.push(next, start, nextEnd, 4);\n }\n else { // Shift-and-stay, which means this is a skipped token\n this.pos = nextEnd;\n this.shiftContext(next, start);\n if (next <= this.p.parser.maxNode)\n this.buffer.push(next, start, nextEnd, 4);\n }\n }\n // Apply an action\n /// @internal\n apply(action, next, nextEnd) {\n if (action & 65536 /* Action.ReduceFlag */)\n this.reduce(action);\n else\n this.shift(action, next, nextEnd);\n }\n // Add a prebuilt (reused) node into the buffer.\n /// @internal\n useNode(value, next) {\n let index = this.p.reused.length - 1;\n if (index < 0 || this.p.reused[index] != value) {\n this.p.reused.push(value);\n index++;\n }\n let start = this.pos;\n this.reducePos = this.pos = start + value.length;\n this.pushState(next, start);\n this.buffer.push(index, start, this.reducePos, -1 /* size == -1 means this is a reused value */);\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reuse(this.curContext.context, value, this, this.p.stream.reset(this.pos - value.length)));\n }\n // Split the stack. Due to the buffer sharing and the fact\n // that `this.stack` tends to stay quite shallow, this isn't very\n // expensive.\n /// @internal\n split() {\n let parent = this;\n let off = parent.buffer.length;\n // Because the top of the buffer (after this.pos) may be mutated\n // to reorder reductions and skipped tokens, and shared buffers\n // should be immutable, this copies any outstanding skipped tokens\n // to the new buffer, and puts the base pointer before them.\n while (off > 0 && parent.buffer[off - 2] > parent.reducePos)\n off -= 4;\n let buffer = parent.buffer.slice(off), base = parent.bufferBase + off;\n // Make sure parent points to an actual parent with content, if there is such a parent.\n while (parent && base == parent.bufferBase)\n parent = parent.parent;\n return new Stack(this.p, this.stack.slice(), this.state, this.reducePos, this.pos, this.score, buffer, base, this.curContext, this.lookAhead, parent);\n }\n // Try to recover from an error by 'deleting' (ignoring) one token.\n /// @internal\n recoverByDelete(next, nextEnd) {\n let isNode = next <= this.p.parser.maxNode;\n if (isNode)\n this.storeNode(next, this.pos, nextEnd, 4);\n this.storeNode(0 /* Term.Err */, this.pos, nextEnd, isNode ? 8 : 4);\n this.pos = this.reducePos = nextEnd;\n this.score -= 190 /* Recover.Delete */;\n }\n /// Check if the given term would be able to be shifted (optionally\n /// after some reductions) on this stack. This can be useful for\n /// external tokenizers that want to make sure they only provide a\n /// given token when it applies.\n canShift(term) {\n for (let sim = new SimulatedStack(this);;) {\n let action = this.p.parser.stateSlot(sim.state, 4 /* ParseState.DefaultReduce */) || this.p.parser.hasAction(sim.state, term);\n if (action == 0)\n return false;\n if ((action & 65536 /* Action.ReduceFlag */) == 0)\n return true;\n sim.reduce(action);\n }\n }\n // Apply up to Recover.MaxNext recovery actions that conceptually\n // inserts some missing token or rule.\n /// @internal\n recoverByInsert(next) {\n if (this.stack.length >= 300 /* Recover.MaxInsertStackDepth */)\n return [];\n let nextStates = this.p.parser.nextStates(this.state);\n if (nextStates.length > 4 /* Recover.MaxNext */ << 1 || this.stack.length >= 120 /* Recover.DampenInsertStackDepth */) {\n let best = [];\n for (let i = 0, s; i < nextStates.length; i += 2) {\n if ((s = nextStates[i + 1]) != this.state && this.p.parser.hasAction(s, next))\n best.push(nextStates[i], s);\n }\n if (this.stack.length < 120 /* Recover.DampenInsertStackDepth */)\n for (let i = 0; best.length < 4 /* Recover.MaxNext */ << 1 && i < nextStates.length; i += 2) {\n let s = nextStates[i + 1];\n if (!best.some((v, i) => (i & 1) && v == s))\n best.push(nextStates[i], s);\n }\n nextStates = best;\n }\n let result = [];\n for (let i = 0; i < nextStates.length && result.length < 4 /* Recover.MaxNext */; i += 2) {\n let s = nextStates[i + 1];\n if (s == this.state)\n continue;\n let stack = this.split();\n stack.pushState(s, this.pos);\n stack.storeNode(0 /* Term.Err */, stack.pos, stack.pos, 4, true);\n stack.shiftContext(nextStates[i], this.pos);\n stack.score -= 200 /* Recover.Insert */;\n result.push(stack);\n }\n return result;\n }\n // Force a reduce, if possible. Return false if that can't\n // be done.\n /// @internal\n forceReduce() {\n let { parser } = this.p;\n let reduce = parser.stateSlot(this.state, 5 /* ParseState.ForcedReduce */);\n if ((reduce & 65536 /* Action.ReduceFlag */) == 0)\n return false;\n if (!parser.validAction(this.state, reduce)) {\n let depth = reduce >> 19 /* Action.ReduceDepthShift */, term = reduce & 65535 /* Action.ValueMask */;\n let target = this.stack.length - depth * 3;\n if (target < 0 || parser.getGoto(this.stack[target], term, false) < 0) {\n let backup = this.findForcedReduction();\n if (backup == null)\n return false;\n reduce = backup;\n }\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n this.score -= 100 /* Recover.Reduce */;\n }\n this.reducePos = this.pos;\n this.reduce(reduce);\n return true;\n }\n /// Try to scan through the automaton to find some kind of reduction\n /// that can be applied. Used when the regular ForcedReduce field\n /// isn't a valid action. @internal\n findForcedReduction() {\n let { parser } = this.p, seen = [];\n let explore = (state, depth) => {\n if (seen.includes(state))\n return;\n seen.push(state);\n return parser.allActions(state, (action) => {\n if (action & (262144 /* Action.StayFlag */ | 131072 /* Action.GotoFlag */)) ;\n else if (action & 65536 /* Action.ReduceFlag */) {\n let rDepth = (action >> 19 /* Action.ReduceDepthShift */) - depth;\n if (rDepth > 1) {\n let term = action & 65535 /* Action.ValueMask */, target = this.stack.length - rDepth * 3;\n if (target >= 0 && parser.getGoto(this.stack[target], term, false) >= 0)\n return (rDepth << 19 /* Action.ReduceDepthShift */) | 65536 /* Action.ReduceFlag */ | term;\n }\n }\n else {\n let found = explore(action, depth + 1);\n if (found != null)\n return found;\n }\n });\n };\n return explore(this.state, 0);\n }\n /// @internal\n forceAll() {\n while (!this.p.parser.stateFlag(this.state, 2 /* StateFlag.Accepting */)) {\n if (!this.forceReduce()) {\n this.storeNode(0 /* Term.Err */, this.pos, this.pos, 4, true);\n break;\n }\n }\n return this;\n }\n /// Check whether this state has no further actions (assumed to be a direct descendant of the\n /// top state, since any other states must be able to continue\n /// somehow). @internal\n get deadEnd() {\n if (this.stack.length != 3)\n return false;\n let { parser } = this.p;\n return parser.data[parser.stateSlot(this.state, 1 /* ParseState.Actions */)] == 65535 /* Seq.End */ &&\n !parser.stateSlot(this.state, 4 /* ParseState.DefaultReduce */);\n }\n /// Restart the stack (put it back in its start state). Only safe\n /// when this.stack.length == 3 (state is directly below the top\n /// state). @internal\n restart() {\n this.state = this.stack[0];\n this.stack.length = 0;\n }\n /// @internal\n sameState(other) {\n if (this.state != other.state || this.stack.length != other.stack.length)\n return false;\n for (let i = 0; i < this.stack.length; i += 3)\n if (this.stack[i] != other.stack[i])\n return false;\n return true;\n }\n /// Get the parser used by this stack.\n get parser() { return this.p.parser; }\n /// Test whether a given dialect (by numeric ID, as exported from\n /// the terms file) is enabled.\n dialectEnabled(dialectID) { return this.p.parser.dialect.flags[dialectID]; }\n shiftContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.shift(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n reduceContext(term, start) {\n if (this.curContext)\n this.updateContext(this.curContext.tracker.reduce(this.curContext.context, term, this, this.p.stream.reset(start)));\n }\n /// @internal\n emitContext() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -3)\n this.buffer.push(this.curContext.hash, this.pos, this.pos, -3);\n }\n /// @internal\n emitLookAhead() {\n let last = this.buffer.length - 1;\n if (last < 0 || this.buffer[last] != -4)\n this.buffer.push(this.lookAhead, this.pos, this.pos, -4);\n }\n updateContext(context) {\n if (context != this.curContext.context) {\n let newCx = new StackContext(this.curContext.tracker, context);\n if (newCx.hash != this.curContext.hash)\n this.emitContext();\n this.curContext = newCx;\n }\n }\n /// @internal\n setLookAhead(lookAhead) {\n if (lookAhead > this.lookAhead) {\n this.emitLookAhead();\n this.lookAhead = lookAhead;\n }\n }\n /// @internal\n close() {\n if (this.curContext && this.curContext.tracker.strict)\n this.emitContext();\n if (this.lookAhead > 0)\n this.emitLookAhead();\n }\n}\nclass StackContext {\n constructor(tracker, context) {\n this.tracker = tracker;\n this.context = context;\n this.hash = tracker.strict ? tracker.hash(context) : 0;\n }\n}\nvar Recover;\n(function (Recover) {\n Recover[Recover[\"Insert\"] = 200] = \"Insert\";\n Recover[Recover[\"Delete\"] = 190] = \"Delete\";\n Recover[Recover[\"Reduce\"] = 100] = \"Reduce\";\n Recover[Recover[\"MaxNext\"] = 4] = \"MaxNext\";\n Recover[Recover[\"MaxInsertStackDepth\"] = 300] = \"MaxInsertStackDepth\";\n Recover[Recover[\"DampenInsertStackDepth\"] = 120] = \"DampenInsertStackDepth\";\n Recover[Recover[\"MinBigReduction\"] = 2000] = \"MinBigReduction\";\n})(Recover || (Recover = {}));\n// Used to cheaply run some reductions to scan ahead without mutating\n// an entire stack\nclass SimulatedStack {\n constructor(start) {\n this.start = start;\n this.state = start.state;\n this.stack = start.stack;\n this.base = this.stack.length;\n }\n reduce(action) {\n let term = action & 65535 /* Action.ValueMask */, depth = action >> 19 /* Action.ReduceDepthShift */;\n if (depth == 0) {\n if (this.stack == this.start.stack)\n this.stack = this.stack.slice();\n this.stack.push(this.state, 0, 0);\n this.base += 3;\n }\n else {\n this.base -= (depth - 1) * 3;\n }\n let goto = this.start.p.parser.getGoto(this.stack[this.base - 3], term, true);\n this.state = goto;\n }\n}\n// This is given to `Tree.build` to build a buffer, and encapsulates\n// the parent-stack-walking necessary to read the nodes.\nclass StackBufferCursor {\n constructor(stack, pos, index) {\n this.stack = stack;\n this.pos = pos;\n this.index = index;\n this.buffer = stack.buffer;\n if (this.index == 0)\n this.maybeNext();\n }\n static create(stack, pos = stack.bufferBase + stack.buffer.length) {\n return new StackBufferCursor(stack, pos, pos - stack.bufferBase);\n }\n maybeNext() {\n let next = this.stack.parent;\n if (next != null) {\n this.index = this.stack.bufferBase - next.bufferBase;\n this.stack = next;\n this.buffer = next.buffer;\n }\n }\n get id() { return this.buffer[this.index - 4]; }\n get start() { return this.buffer[this.index - 3]; }\n get end() { return this.buffer[this.index - 2]; }\n get size() { return this.buffer[this.index - 1]; }\n next() {\n this.index -= 4;\n this.pos -= 4;\n if (this.index == 0)\n this.maybeNext();\n }\n fork() {\n return new StackBufferCursor(this.stack, this.pos, this.index);\n }\n}\n\n// See lezer-generator/src/encode.ts for comments about the encoding\n// used here\nfunction decodeArray(input, Type = Uint16Array) {\n if (typeof input != \"string\")\n return input;\n let array = null;\n for (let pos = 0, out = 0; pos < input.length;) {\n let value = 0;\n for (;;) {\n let next = input.charCodeAt(pos++), stop = false;\n if (next == 126 /* Encode.BigValCode */) {\n value = 65535 /* Encode.BigVal */;\n break;\n }\n if (next >= 92 /* Encode.Gap2 */)\n next--;\n if (next >= 34 /* Encode.Gap1 */)\n next--;\n let digit = next - 32 /* Encode.Start */;\n if (digit >= 46 /* Encode.Base */) {\n digit -= 46 /* Encode.Base */;\n stop = true;\n }\n value += digit;\n if (stop)\n break;\n value *= 46 /* Encode.Base */;\n }\n if (array)\n array[out++] = value;\n else\n array = new Type(value);\n }\n return array;\n}\n\nclass CachedToken {\n constructor() {\n this.start = -1;\n this.value = -1;\n this.end = -1;\n this.extended = -1;\n this.lookAhead = 0;\n this.mask = 0;\n this.context = 0;\n }\n}\nconst nullToken = new CachedToken;\n/// [Tokenizers](#lr.ExternalTokenizer) interact with the input\n/// through this interface. It presents the input as a stream of\n/// characters, tracking lookahead and hiding the complexity of\n/// [ranges](#common.Parser.parse^ranges) from tokenizer code.\nclass InputStream {\n /// @internal\n constructor(\n /// @internal\n input, \n /// @internal\n ranges) {\n this.input = input;\n this.ranges = ranges;\n /// @internal\n this.chunk = \"\";\n /// @internal\n this.chunkOff = 0;\n /// Backup chunk\n this.chunk2 = \"\";\n this.chunk2Pos = 0;\n /// The character code of the next code unit in the input, or -1\n /// when the stream is at the end of the input.\n this.next = -1;\n /// @internal\n this.token = nullToken;\n this.rangeIndex = 0;\n this.pos = this.chunkPos = ranges[0].from;\n this.range = ranges[0];\n this.end = ranges[ranges.length - 1].to;\n this.readNext();\n }\n /// @internal\n resolveOffset(offset, assoc) {\n let range = this.range, index = this.rangeIndex;\n let pos = this.pos + offset;\n while (pos < range.from) {\n if (!index)\n return null;\n let next = this.ranges[--index];\n pos -= range.from - next.to;\n range = next;\n }\n while (assoc < 0 ? pos > range.to : pos >= range.to) {\n if (index == this.ranges.length - 1)\n return null;\n let next = this.ranges[++index];\n pos += next.from - range.to;\n range = next;\n }\n return pos;\n }\n /// @internal\n clipPos(pos) {\n if (pos >= this.range.from && pos < this.range.to)\n return pos;\n for (let range of this.ranges)\n if (range.to > pos)\n return Math.max(pos, range.from);\n return this.end;\n }\n /// Look at a code unit near the stream position. `.peek(0)` equals\n /// `.next`, `.peek(-1)` gives you the previous character, and so\n /// on.\n ///\n /// Note that looking around during tokenizing creates dependencies\n /// on potentially far-away content, which may reduce the\n /// effectiveness incremental parsing\u2014when looking forward\u2014or even\n /// cause invalid reparses when looking backward more than 25 code\n /// units, since the library does not track lookbehind.\n peek(offset) {\n let idx = this.chunkOff + offset, pos, result;\n if (idx >= 0 && idx < this.chunk.length) {\n pos = this.pos + offset;\n result = this.chunk.charCodeAt(idx);\n }\n else {\n let resolved = this.resolveOffset(offset, 1);\n if (resolved == null)\n return -1;\n pos = resolved;\n if (pos >= this.chunk2Pos && pos < this.chunk2Pos + this.chunk2.length) {\n result = this.chunk2.charCodeAt(pos - this.chunk2Pos);\n }\n else {\n let i = this.rangeIndex, range = this.range;\n while (range.to <= pos)\n range = this.ranges[++i];\n this.chunk2 = this.input.chunk(this.chunk2Pos = pos);\n if (pos + this.chunk2.length > range.to)\n this.chunk2 = this.chunk2.slice(0, range.to - pos);\n result = this.chunk2.charCodeAt(0);\n }\n }\n if (pos >= this.token.lookAhead)\n this.token.lookAhead = pos + 1;\n return result;\n }\n /// Accept a token. By default, the end of the token is set to the\n /// current stream position, but you can pass an offset (relative to\n /// the stream position) to change that.\n acceptToken(token, endOffset = 0) {\n let end = endOffset ? this.resolveOffset(endOffset, -1) : this.pos;\n if (end == null || end < this.token.start)\n throw new RangeError(\"Token end out of bounds\");\n this.token.value = token;\n this.token.end = end;\n }\n getChunk() {\n if (this.pos >= this.chunk2Pos && this.pos < this.chunk2Pos + this.chunk2.length) {\n let { chunk, chunkPos } = this;\n this.chunk = this.chunk2;\n this.chunkPos = this.chunk2Pos;\n this.chunk2 = chunk;\n this.chunk2Pos = chunkPos;\n this.chunkOff = this.pos - this.chunkPos;\n }\n else {\n this.chunk2 = this.chunk;\n this.chunk2Pos = this.chunkPos;\n let nextChunk = this.input.chunk(this.pos);\n let end = this.pos + nextChunk.length;\n this.chunk = end > this.range.to ? nextChunk.slice(0, this.range.to - this.pos) : nextChunk;\n this.chunkPos = this.pos;\n this.chunkOff = 0;\n }\n }\n readNext() {\n if (this.chunkOff >= this.chunk.length) {\n this.getChunk();\n if (this.chunkOff == this.chunk.length)\n return this.next = -1;\n }\n return this.next = this.chunk.charCodeAt(this.chunkOff);\n }\n /// Move the stream forward N (defaults to 1) code units. Returns\n /// the new value of [`next`](#lr.InputStream.next).\n advance(n = 1) {\n this.chunkOff += n;\n while (this.pos + n >= this.range.to) {\n if (this.rangeIndex == this.ranges.length - 1)\n return this.setDone();\n n -= this.range.to - this.pos;\n this.range = this.ranges[++this.rangeIndex];\n this.pos = this.range.from;\n }\n this.pos += n;\n if (this.pos >= this.token.lookAhead)\n this.token.lookAhead = this.pos + 1;\n return this.readNext();\n }\n setDone() {\n this.pos = this.chunkPos = this.end;\n this.range = this.ranges[this.rangeIndex = this.ranges.length - 1];\n this.chunk = \"\";\n return this.next = -1;\n }\n /// @internal\n reset(pos, token) {\n if (token) {\n this.token = token;\n token.start = pos;\n token.lookAhead = pos + 1;\n token.value = token.extended = -1;\n }\n else {\n this.token = nullToken;\n }\n if (this.pos != pos) {\n this.pos = pos;\n if (pos == this.end) {\n this.setDone();\n return this;\n }\n while (pos < this.range.from)\n this.range = this.ranges[--this.rangeIndex];\n while (pos >= this.range.to)\n this.range = this.ranges[++this.rangeIndex];\n if (pos >= this.chunkPos && pos < this.chunkPos + this.chunk.length) {\n this.chunkOff = pos - this.chunkPos;\n }\n else {\n this.chunk = \"\";\n this.chunkOff = 0;\n }\n this.readNext();\n }\n return this;\n }\n /// @internal\n read(from, to) {\n if (from >= this.chunkPos && to <= this.chunkPos + this.chunk.length)\n return this.chunk.slice(from - this.chunkPos, to - this.chunkPos);\n if (from >= this.chunk2Pos && to <= this.chunk2Pos + this.chunk2.length)\n return this.chunk2.slice(from - this.chunk2Pos, to - this.chunk2Pos);\n if (from >= this.range.from && to <= this.range.to)\n return this.input.read(from, to);\n let result = \"\";\n for (let r of this.ranges) {\n if (r.from >= to)\n break;\n if (r.to > from)\n result += this.input.read(Math.max(r.from, from), Math.min(r.to, to));\n }\n return result;\n }\n}\n/// @internal\nclass TokenGroup {\n constructor(data, id) {\n this.data = data;\n this.id = id;\n }\n token(input, stack) {\n let { parser } = stack.p;\n readToken(this.data, input, stack, this.id, parser.data, parser.tokenPrecTable);\n }\n}\nTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// @hide\nclass LocalTokenGroup {\n constructor(data, precTable, elseToken) {\n this.precTable = precTable;\n this.elseToken = elseToken;\n this.data = typeof data == \"string\" ? decodeArray(data) : data;\n }\n token(input, stack) {\n let start = input.pos, skipped = 0;\n for (;;) {\n let atEof = input.next < 0, nextPos = input.resolveOffset(1, 1);\n readToken(this.data, input, stack, 0, this.data, this.precTable);\n if (input.token.value > -1)\n break;\n if (this.elseToken == null)\n return;\n if (!atEof)\n skipped++;\n if (nextPos == null)\n break;\n input.reset(nextPos, input.token);\n }\n if (skipped) {\n input.reset(start, input.token);\n input.acceptToken(this.elseToken, skipped);\n }\n }\n}\nLocalTokenGroup.prototype.contextual = TokenGroup.prototype.fallback = TokenGroup.prototype.extend = false;\n/// `@external tokens` declarations in the grammar should resolve to\n/// an instance of this class.\nclass ExternalTokenizer {\n /// Create a tokenizer. The first argument is the function that,\n /// given an input stream, scans for the types of tokens it\n /// recognizes at the stream's position, and calls\n /// [`acceptToken`](#lr.InputStream.acceptToken) when it finds\n /// one.\n constructor(\n /// @internal\n token, options = {}) {\n this.token = token;\n this.contextual = !!options.contextual;\n this.fallback = !!options.fallback;\n this.extend = !!options.extend;\n }\n}\n// Tokenizer data is stored a big uint16 array containing, for each\n// state:\n//\n// - A group bitmask, indicating what token groups are reachable from\n// this state, so that paths that can only lead to tokens not in\n// any of the current groups can be cut off early.\n//\n// - The position of the end of the state's sequence of accepting\n// tokens\n//\n// - The number of outgoing edges for the state\n//\n// - The accepting tokens, as (token id, group mask) pairs\n//\n// - The outgoing edges, as (start character, end character, state\n// index) triples, with end character being exclusive\n//\n// This function interprets that data, running through a stream as\n// long as new states with the a matching group mask can be reached,\n// and updating `input.token` when it matches a token.\nfunction readToken(data, input, stack, group, precTable, precOffset) {\n let state = 0, groupMask = 1 << group, { dialect } = stack.p.parser;\n scan: for (;;) {\n if ((groupMask & data[state]) == 0)\n break;\n let accEnd = data[state + 1];\n // Check whether this state can lead to a token in the current group\n // Accept tokens in this state, possibly overwriting\n // lower-precedence / shorter tokens\n for (let i = state + 3; i < accEnd; i += 2)\n if ((data[i + 1] & groupMask) > 0) {\n let term = data[i];\n if (dialect.allows(term) &&\n (input.token.value == -1 || input.token.value == term ||\n overrides(term, input.token.value, precTable, precOffset))) {\n input.acceptToken(term);\n break;\n }\n }\n let next = input.next, low = 0, high = data[state + 2];\n // Special case for EOF\n if (input.next < 0 && high > low && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */ && data[accEnd + high * 3 - 3] == 65535 /* Seq.End */) {\n state = data[accEnd + high * 3 - 1];\n continue scan;\n }\n // Do a binary search on the state's edges\n for (; low < high;) {\n let mid = (low + high) >> 1;\n let index = accEnd + mid + (mid << 1);\n let from = data[index], to = data[index + 1] || 0x10000;\n if (next < from)\n high = mid;\n else if (next >= to)\n low = mid + 1;\n else {\n state = data[index + 2];\n input.advance();\n continue scan;\n }\n }\n break;\n }\n}\nfunction findOffset(data, start, term) {\n for (let i = start, next; (next = data[i]) != 65535 /* Seq.End */; i++)\n if (next == term)\n return i - start;\n return -1;\n}\nfunction overrides(token, prev, tableData, tableOffset) {\n let iPrev = findOffset(tableData, tableOffset, prev);\n return iPrev < 0 || findOffset(tableData, tableOffset, token) < iPrev;\n}\n\n// Environment variable used to control console output\nconst verbose = typeof process != \"undefined\" && process.env && /\\bparse\\b/.test(process.env.LOG);\nlet stackIDs = null;\nvar Safety;\n(function (Safety) {\n Safety[Safety[\"Margin\"] = 25] = \"Margin\";\n})(Safety || (Safety = {}));\nfunction cutAt(tree, pos, side) {\n let cursor = tree.cursor(IterMode.IncludeAnonymous);\n cursor.moveTo(pos);\n for (;;) {\n if (!(side < 0 ? cursor.childBefore(pos) : cursor.childAfter(pos)))\n for (;;) {\n if ((side < 0 ? cursor.to < pos : cursor.from > pos) && !cursor.type.isError)\n return side < 0 ? Math.max(0, Math.min(cursor.to - 1, pos - 25 /* Safety.Margin */))\n : Math.min(tree.length, Math.max(cursor.from + 1, pos + 25 /* Safety.Margin */));\n if (side < 0 ? cursor.prevSibling() : cursor.nextSibling())\n break;\n if (!cursor.parent())\n return side < 0 ? 0 : tree.length;\n }\n }\n}\nclass FragmentCursor {\n constructor(fragments, nodeSet) {\n this.fragments = fragments;\n this.nodeSet = nodeSet;\n this.i = 0;\n this.fragment = null;\n this.safeFrom = -1;\n this.safeTo = -1;\n this.trees = [];\n this.start = [];\n this.index = [];\n this.nextFragment();\n }\n nextFragment() {\n let fr = this.fragment = this.i == this.fragments.length ? null : this.fragments[this.i++];\n if (fr) {\n this.safeFrom = fr.openStart ? cutAt(fr.tree, fr.from + fr.offset, 1) - fr.offset : fr.from;\n this.safeTo = fr.openEnd ? cutAt(fr.tree, fr.to + fr.offset, -1) - fr.offset : fr.to;\n while (this.trees.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n }\n this.trees.push(fr.tree);\n this.start.push(-fr.offset);\n this.index.push(0);\n this.nextStart = this.safeFrom;\n }\n else {\n this.nextStart = 1e9;\n }\n }\n // `pos` must be >= any previously given `pos` for this cursor\n nodeAt(pos) {\n if (pos < this.nextStart)\n return null;\n while (this.fragment && this.safeTo <= pos)\n this.nextFragment();\n if (!this.fragment)\n return null;\n for (;;) {\n let last = this.trees.length - 1;\n if (last < 0) { // End of tree\n this.nextFragment();\n return null;\n }\n let top = this.trees[last], index = this.index[last];\n if (index == top.children.length) {\n this.trees.pop();\n this.start.pop();\n this.index.pop();\n continue;\n }\n let next = top.children[index];\n let start = this.start[last] + top.positions[index];\n if (start > pos) {\n this.nextStart = start;\n return null;\n }\n if (next instanceof Tree) {\n if (start == pos) {\n if (start < this.safeFrom)\n return null;\n let end = start + next.length;\n if (end <= this.safeTo) {\n let lookAhead = next.prop(NodeProp.lookAhead);\n if (!lookAhead || end + lookAhead < this.fragment.to)\n return next;\n }\n }\n this.index[last]++;\n if (start + next.length >= Math.max(this.safeFrom, pos)) { // Enter this node\n this.trees.push(next);\n this.start.push(start);\n this.index.push(0);\n }\n }\n else {\n this.index[last]++;\n this.nextStart = start + next.length;\n }\n }\n }\n}\nclass TokenCache {\n constructor(parser, stream) {\n this.stream = stream;\n this.tokens = [];\n this.mainToken = null;\n this.actions = [];\n this.tokens = parser.tokenizers.map(_ => new CachedToken);\n }\n getActions(stack) {\n let actionIndex = 0;\n let main = null;\n let { parser } = stack.p, { tokenizers } = parser;\n let mask = parser.stateSlot(stack.state, 3 /* ParseState.TokenizerMask */);\n let context = stack.curContext ? stack.curContext.hash : 0;\n let lookAhead = 0;\n for (let i = 0; i < tokenizers.length; i++) {\n if (((1 << i) & mask) == 0)\n continue;\n let tokenizer = tokenizers[i], token = this.tokens[i];\n if (main && !tokenizer.fallback)\n continue;\n if (tokenizer.contextual || token.start != stack.pos || token.mask != mask || token.context != context) {\n this.updateCachedToken(token, tokenizer, stack);\n token.mask = mask;\n token.context = context;\n }\n if (token.lookAhead > token.end + 25 /* Safety.Margin */)\n lookAhead = Math.max(token.lookAhead, lookAhead);\n if (token.value != 0 /* Term.Err */) {\n let startIndex = actionIndex;\n if (token.extended > -1)\n actionIndex = this.addActions(stack, token.extended, token.end, actionIndex);\n actionIndex = this.addActions(stack, token.value, token.end, actionIndex);\n if (!tokenizer.extend) {\n main = token;\n if (actionIndex > startIndex)\n break;\n }\n }\n }\n while (this.actions.length > actionIndex)\n this.actions.pop();\n if (lookAhead)\n stack.setLookAhead(lookAhead);\n if (!main && stack.pos == this.stream.end) {\n main = new CachedToken;\n main.value = stack.p.parser.eofTerm;\n main.start = main.end = stack.pos;\n actionIndex = this.addActions(stack, main.value, main.end, actionIndex);\n }\n this.mainToken = main;\n return this.actions;\n }\n getMainToken(stack) {\n if (this.mainToken)\n return this.mainToken;\n let main = new CachedToken, { pos, p } = stack;\n main.start = pos;\n main.end = Math.min(pos + 1, p.stream.end);\n main.value = pos == p.stream.end ? p.parser.eofTerm : 0 /* Term.Err */;\n return main;\n }\n updateCachedToken(token, tokenizer, stack) {\n let start = this.stream.clipPos(stack.pos);\n tokenizer.token(this.stream.reset(start, token), stack);\n if (token.value > -1) {\n let { parser } = stack.p;\n for (let i = 0; i < parser.specialized.length; i++)\n if (parser.specialized[i] == token.value) {\n let result = parser.specializers[i](this.stream.read(token.start, token.end), stack);\n if (result >= 0 && stack.p.parser.dialect.allows(result >> 1)) {\n if ((result & 1) == 0 /* Specialize.Specialize */)\n token.value = result >> 1;\n else\n token.extended = result >> 1;\n break;\n }\n }\n }\n else {\n token.value = 0 /* Term.Err */;\n token.end = this.stream.clipPos(start + 1);\n }\n }\n putAction(action, token, end, index) {\n // Don't add duplicate actions\n for (let i = 0; i < index; i += 3)\n if (this.actions[i] == action)\n return index;\n this.actions[index++] = action;\n this.actions[index++] = token;\n this.actions[index++] = end;\n return index;\n }\n addActions(stack, token, end, index) {\n let { state } = stack, { parser } = stack.p, { data } = parser;\n for (let set = 0; set < 2; set++) {\n for (let i = parser.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */);; i += 3) {\n if (data[i] == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */) {\n i = pair(data, i + 2);\n }\n else {\n if (index == 0 && data[i + 1] == 2 /* Seq.Other */)\n index = this.putAction(pair(data, i + 2), token, end, index);\n break;\n }\n }\n if (data[i] == token)\n index = this.putAction(pair(data, i + 1), token, end, index);\n }\n }\n return index;\n }\n}\nvar Rec;\n(function (Rec) {\n Rec[Rec[\"Distance\"] = 5] = \"Distance\";\n Rec[Rec[\"MaxRemainingPerStep\"] = 3] = \"MaxRemainingPerStep\";\n // When two stacks have been running independently long enough to\n // add this many elements to their buffers, prune one.\n Rec[Rec[\"MinBufferLengthPrune\"] = 500] = \"MinBufferLengthPrune\";\n Rec[Rec[\"ForceReduceLimit\"] = 10] = \"ForceReduceLimit\";\n // Once a stack reaches this depth (in .stack.length) force-reduce\n // it back to CutTo to avoid creating trees that overflow the stack\n // on recursive traversal.\n Rec[Rec[\"CutDepth\"] = 15000] = \"CutDepth\";\n Rec[Rec[\"CutTo\"] = 9000] = \"CutTo\";\n Rec[Rec[\"MaxLeftAssociativeReductionCount\"] = 300] = \"MaxLeftAssociativeReductionCount\";\n // The maximum number of non-recovering stacks to explore (to avoid\n // getting bogged down with exponentially multiplying stacks in\n // ambiguous content)\n Rec[Rec[\"MaxStackCount\"] = 12] = \"MaxStackCount\";\n})(Rec || (Rec = {}));\nclass Parse {\n constructor(parser, input, fragments, ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.recovering = 0;\n this.nextStackID = 0x2654; // \u2654, \u2655, \u2656, \u2657, \u2658, \u2659, \u2660, \u2661, \u2662, \u2663, \u2664, \u2665, \u2666, \u2667\n this.minStackPos = 0;\n this.reused = [];\n this.stoppedAt = null;\n this.lastBigReductionStart = -1;\n this.lastBigReductionSize = 0;\n this.bigReductionCount = 0;\n this.stream = new InputStream(input, ranges);\n this.tokens = new TokenCache(parser, this.stream);\n this.topTerm = parser.top[1];\n let { from } = ranges[0];\n this.stacks = [Stack.start(this, parser.top[0], from)];\n this.fragments = fragments.length && this.stream.end - from > parser.bufferLength * 4\n ? new FragmentCursor(fragments, parser.nodeSet) : null;\n }\n get parsedPos() {\n return this.minStackPos;\n }\n // Move the parser forward. This will process all parse stacks at\n // `this.pos` and try to advance them to a further position. If no\n // stack for such a position is found, it'll start error-recovery.\n //\n // When the parse is finished, this will return a syntax tree. When\n // not, it returns `null`.\n advance() {\n let stacks = this.stacks, pos = this.minStackPos;\n // This will hold stacks beyond `pos`.\n let newStacks = this.stacks = [];\n let stopped, stoppedTokens;\n // If a large amount of reductions happened with the same start\n // position, force the stack out of that production in order to\n // avoid creating a tree too deep to recurse through.\n // (This is an ugly kludge, because unfortunately there is no\n // straightforward, cheap way to check for this happening, due to\n // the history of reductions only being available in an\n // expensive-to-access format in the stack buffers.)\n if (this.bigReductionCount > 300 /* Rec.MaxLeftAssociativeReductionCount */ && stacks.length == 1) {\n let [s] = stacks;\n while (s.forceReduce() && s.stack.length && s.stack[s.stack.length - 2] >= this.lastBigReductionStart) { }\n this.bigReductionCount = this.lastBigReductionSize = 0;\n }\n // Keep advancing any stacks at `pos` until they either move\n // forward or can't be advanced. Gather stacks that can't be\n // advanced further in `stopped`.\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i];\n for (;;) {\n this.tokens.mainToken = null;\n if (stack.pos > pos) {\n newStacks.push(stack);\n }\n else if (this.advanceStack(stack, newStacks, stacks)) {\n continue;\n }\n else {\n if (!stopped) {\n stopped = [];\n stoppedTokens = [];\n }\n stopped.push(stack);\n let tok = this.tokens.getMainToken(stack);\n stoppedTokens.push(tok.value, tok.end);\n }\n break;\n }\n }\n if (!newStacks.length) {\n let finished = stopped && findFinished(stopped);\n if (finished)\n return this.stackToTree(finished);\n if (this.parser.strict) {\n if (verbose && stopped)\n console.log(\"Stuck with token \" + (this.tokens.mainToken ? this.parser.getName(this.tokens.mainToken.value) : \"none\"));\n throw new SyntaxError(\"No parse at \" + pos);\n }\n if (!this.recovering)\n this.recovering = 5 /* Rec.Distance */;\n }\n if (this.recovering && stopped) {\n let finished = this.stoppedAt != null && stopped[0].pos > this.stoppedAt ? stopped[0]\n : this.runRecovery(stopped, stoppedTokens, newStacks);\n if (finished)\n return this.stackToTree(finished.forceAll());\n }\n if (this.recovering) {\n let maxRemaining = this.recovering == 1 ? 1 : this.recovering * 3 /* Rec.MaxRemainingPerStep */;\n if (newStacks.length > maxRemaining) {\n newStacks.sort((a, b) => b.score - a.score);\n while (newStacks.length > maxRemaining)\n newStacks.pop();\n }\n if (newStacks.some(s => s.reducePos > pos))\n this.recovering--;\n }\n else if (newStacks.length > 1) {\n // Prune stacks that are in the same state, or that have been\n // running without splitting for a while, to avoid getting stuck\n // with multiple successful stacks running endlessly on.\n outer: for (let i = 0; i < newStacks.length - 1; i++) {\n let stack = newStacks[i];\n for (let j = i + 1; j < newStacks.length; j++) {\n let other = newStacks[j];\n if (stack.sameState(other) ||\n stack.buffer.length > 500 /* Rec.MinBufferLengthPrune */ && other.buffer.length > 500 /* Rec.MinBufferLengthPrune */) {\n if (((stack.score - other.score) || (stack.buffer.length - other.buffer.length)) > 0) {\n newStacks.splice(j--, 1);\n }\n else {\n newStacks.splice(i--, 1);\n continue outer;\n }\n }\n }\n }\n if (newStacks.length > 12 /* Rec.MaxStackCount */)\n newStacks.splice(12 /* Rec.MaxStackCount */, newStacks.length - 12 /* Rec.MaxStackCount */);\n }\n this.minStackPos = newStacks[0].pos;\n for (let i = 1; i < newStacks.length; i++)\n if (newStacks[i].pos < this.minStackPos)\n this.minStackPos = newStacks[i].pos;\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n // Returns an updated version of the given stack, or null if the\n // stack can't advance normally. When `split` and `stacks` are\n // given, stacks split off by ambiguous operations will be pushed to\n // `split`, or added to `stacks` if they move `pos` forward.\n advanceStack(stack, stacks, split) {\n let start = stack.pos, { parser } = this;\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (this.stoppedAt != null && start > this.stoppedAt)\n return stack.forceReduce() ? stack : null;\n if (this.fragments) {\n let strictCx = stack.curContext && stack.curContext.tracker.strict, cxHash = strictCx ? stack.curContext.hash : 0;\n for (let cached = this.fragments.nodeAt(start); cached;) {\n let match = this.parser.nodeSet.types[cached.type.id] == cached.type ? parser.getGoto(stack.state, cached.type.id) : -1;\n if (match > -1 && cached.length && (!strictCx || (cached.prop(NodeProp.contextHash) || 0) == cxHash)) {\n stack.useNode(cached, match);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via reuse of ${parser.getName(cached.type.id)})`);\n return true;\n }\n if (!(cached instanceof Tree) || cached.children.length == 0 || cached.positions[0] > 0)\n break;\n let inner = cached.children[0];\n if (inner instanceof Tree && cached.positions[0] == 0)\n cached = inner;\n else\n break;\n }\n }\n let defaultReduce = parser.stateSlot(stack.state, 4 /* ParseState.DefaultReduce */);\n if (defaultReduce > 0) {\n stack.reduce(defaultReduce);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via always-reduce ${parser.getName(defaultReduce & 65535 /* Action.ValueMask */)})`);\n return true;\n }\n if (stack.stack.length >= 15000 /* Rec.CutDepth */) {\n while (stack.stack.length > 9000 /* Rec.CutTo */ && stack.forceReduce()) { }\n }\n let actions = this.tokens.getActions(stack);\n for (let i = 0; i < actions.length;) {\n let action = actions[i++], term = actions[i++], end = actions[i++];\n let last = i == actions.length || !split;\n let localStack = last ? stack : stack.split();\n localStack.apply(action, term, end);\n if (verbose)\n console.log(base + this.stackID(localStack) + ` (via ${(action & 65536 /* Action.ReduceFlag */) == 0 ? \"shift\"\n : `reduce of ${parser.getName(action & 65535 /* Action.ValueMask */)}`} for ${parser.getName(term)} @ ${start}${localStack == stack ? \"\" : \", split\"})`);\n if (last)\n return true;\n else if (localStack.pos > start)\n stacks.push(localStack);\n else\n split.push(localStack);\n }\n return false;\n }\n // Advance a given stack forward as far as it will go. Returns the\n // (possibly updated) stack if it got stuck, or null if it moved\n // forward and was given to `pushStackDedup`.\n advanceFully(stack, newStacks) {\n let pos = stack.pos;\n for (;;) {\n if (!this.advanceStack(stack, null, null))\n return false;\n if (stack.pos > pos) {\n pushStackDedup(stack, newStacks);\n return true;\n }\n }\n }\n runRecovery(stacks, tokens, newStacks) {\n let finished = null, restarted = false;\n for (let i = 0; i < stacks.length; i++) {\n let stack = stacks[i], token = tokens[i << 1], tokenEnd = tokens[(i << 1) + 1];\n let base = verbose ? this.stackID(stack) + \" -> \" : \"\";\n if (stack.deadEnd) {\n if (restarted)\n continue;\n restarted = true;\n stack.restart();\n if (verbose)\n console.log(base + this.stackID(stack) + \" (restarted)\");\n let done = this.advanceFully(stack, newStacks);\n if (done)\n continue;\n }\n let force = stack.split(), forceBase = base;\n for (let j = 0; force.forceReduce() && j < 10 /* Rec.ForceReduceLimit */; j++) {\n if (verbose)\n console.log(forceBase + this.stackID(force) + \" (via force-reduce)\");\n let done = this.advanceFully(force, newStacks);\n if (done)\n break;\n if (verbose)\n forceBase = this.stackID(force) + \" -> \";\n }\n for (let insert of stack.recoverByInsert(token)) {\n if (verbose)\n console.log(base + this.stackID(insert) + \" (via recover-insert)\");\n this.advanceFully(insert, newStacks);\n }\n if (this.stream.end > stack.pos) {\n if (tokenEnd == stack.pos) {\n tokenEnd++;\n token = 0 /* Term.Err */;\n }\n stack.recoverByDelete(token, tokenEnd);\n if (verbose)\n console.log(base + this.stackID(stack) + ` (via recover-delete ${this.parser.getName(token)})`);\n pushStackDedup(stack, newStacks);\n }\n else if (!finished || finished.score < stack.score) {\n finished = stack;\n }\n }\n return finished;\n }\n // Convert the stack's buffer to a syntax tree.\n stackToTree(stack) {\n stack.close();\n return Tree.build({ buffer: StackBufferCursor.create(stack),\n nodeSet: this.parser.nodeSet,\n topID: this.topTerm,\n maxBufferLength: this.parser.bufferLength,\n reused: this.reused,\n start: this.ranges[0].from,\n length: stack.pos - this.ranges[0].from,\n minRepeatType: this.parser.minRepeatTerm });\n }\n stackID(stack) {\n let id = (stackIDs || (stackIDs = new WeakMap)).get(stack);\n if (!id)\n stackIDs.set(stack, id = String.fromCodePoint(this.nextStackID++));\n return id + stack;\n }\n}\nfunction pushStackDedup(stack, newStacks) {\n for (let i = 0; i < newStacks.length; i++) {\n let other = newStacks[i];\n if (other.pos == stack.pos && other.sameState(stack)) {\n if (newStacks[i].score < stack.score)\n newStacks[i] = stack;\n return;\n }\n }\n newStacks.push(stack);\n}\nclass Dialect {\n constructor(source, flags, disabled) {\n this.source = source;\n this.flags = flags;\n this.disabled = disabled;\n }\n allows(term) { return !this.disabled || this.disabled[term] == 0; }\n}\nconst id = x => x;\n/// Context trackers are used to track stateful context (such as\n/// indentation in the Python grammar, or parent elements in the XML\n/// grammar) needed by external tokenizers. You declare them in a\n/// grammar file as `@context exportName from \"module\"`.\n///\n/// Context values should be immutable, and can be updated (replaced)\n/// on shift or reduce actions.\n///\n/// The export used in a `@context` declaration should be of this\n/// type.\nclass ContextTracker {\n /// Define a context tracker.\n constructor(spec) {\n this.start = spec.start;\n this.shift = spec.shift || id;\n this.reduce = spec.reduce || id;\n this.reuse = spec.reuse || id;\n this.hash = spec.hash || (() => 0);\n this.strict = spec.strict !== false;\n }\n}\n/// Holds the parse tables for a given grammar, as generated by\n/// `lezer-generator`, and provides [methods](#common.Parser) to parse\n/// content with.\nclass LRParser extends Parser {\n /// @internal\n constructor(spec) {\n super();\n /// @internal\n this.wrappers = [];\n if (spec.version != 14 /* File.Version */)\n throw new RangeError(`Parser version (${spec.version}) doesn't match runtime version (${14 /* File.Version */})`);\n let nodeNames = spec.nodeNames.split(\" \");\n this.minRepeatTerm = nodeNames.length;\n for (let i = 0; i < spec.repeatNodeCount; i++)\n nodeNames.push(\"\");\n let topTerms = Object.keys(spec.topRules).map(r => spec.topRules[r][1]);\n let nodeProps = [];\n for (let i = 0; i < nodeNames.length; i++)\n nodeProps.push([]);\n function setProp(nodeID, prop, value) {\n nodeProps[nodeID].push([prop, prop.deserialize(String(value))]);\n }\n if (spec.nodeProps)\n for (let propSpec of spec.nodeProps) {\n let prop = propSpec[0];\n if (typeof prop == \"string\")\n prop = NodeProp[prop];\n for (let i = 1; i < propSpec.length;) {\n let next = propSpec[i++];\n if (next >= 0) {\n setProp(next, prop, propSpec[i++]);\n }\n else {\n let value = propSpec[i + -next];\n for (let j = -next; j > 0; j--)\n setProp(propSpec[i++], prop, value);\n i++;\n }\n }\n }\n this.nodeSet = new NodeSet(nodeNames.map((name, i) => NodeType.define({\n name: i >= this.minRepeatTerm ? undefined : name,\n id: i,\n props: nodeProps[i],\n top: topTerms.indexOf(i) > -1,\n error: i == 0,\n skipped: spec.skippedNodes && spec.skippedNodes.indexOf(i) > -1\n })));\n if (spec.propSources)\n this.nodeSet = this.nodeSet.extend(...spec.propSources);\n this.strict = false;\n this.bufferLength = DefaultBufferLength;\n let tokenArray = decodeArray(spec.tokenData);\n this.context = spec.context;\n this.specializerSpecs = spec.specialized || [];\n this.specialized = new Uint16Array(this.specializerSpecs.length);\n for (let i = 0; i < this.specializerSpecs.length; i++)\n this.specialized[i] = this.specializerSpecs[i].term;\n this.specializers = this.specializerSpecs.map(getSpecializer);\n this.states = decodeArray(spec.states, Uint32Array);\n this.data = decodeArray(spec.stateData);\n this.goto = decodeArray(spec.goto);\n this.maxTerm = spec.maxTerm;\n this.tokenizers = spec.tokenizers.map(value => typeof value == \"number\" ? new TokenGroup(tokenArray, value) : value);\n this.topRules = spec.topRules;\n this.dialects = spec.dialects || {};\n this.dynamicPrecedences = spec.dynamicPrecedences || null;\n this.tokenPrecTable = spec.tokenPrec;\n this.termNames = spec.termNames || null;\n this.maxNode = this.nodeSet.types.length - 1;\n this.dialect = this.parseDialect();\n this.top = this.topRules[Object.keys(this.topRules)[0]];\n }\n createParse(input, fragments, ranges) {\n let parse = new Parse(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /// Get a goto table entry @internal\n getGoto(state, term, loose = false) {\n let table = this.goto;\n if (term >= table[0])\n return -1;\n for (let pos = table[term + 1];;) {\n let groupTag = table[pos++], last = groupTag & 1;\n let target = table[pos++];\n if (last && loose)\n return target;\n for (let end = pos + (groupTag >> 1); pos < end; pos++)\n if (table[pos] == state)\n return target;\n if (last)\n return -1;\n }\n }\n /// Check if this state has an action for a given terminal @internal\n hasAction(state, terminal) {\n let data = this.data;\n for (let set = 0; set < 2; set++) {\n for (let i = this.stateSlot(state, set ? 2 /* ParseState.Skip */ : 1 /* ParseState.Actions */), next;; i += 3) {\n if ((next = data[i]) == 65535 /* Seq.End */) {\n if (data[i + 1] == 1 /* Seq.Next */)\n next = data[i = pair(data, i + 2)];\n else if (data[i + 1] == 2 /* Seq.Other */)\n return pair(data, i + 2);\n else\n break;\n }\n if (next == terminal || next == 0 /* Term.Err */)\n return pair(data, i + 1);\n }\n }\n return 0;\n }\n /// @internal\n stateSlot(state, slot) {\n return this.states[(state * 6 /* ParseState.Size */) + slot];\n }\n /// @internal\n stateFlag(state, flag) {\n return (this.stateSlot(state, 0 /* ParseState.Flags */) & flag) > 0;\n }\n /// @internal\n validAction(state, action) {\n return !!this.allActions(state, a => a == action ? true : null);\n }\n /// @internal\n allActions(state, action) {\n let deflt = this.stateSlot(state, 4 /* ParseState.DefaultReduce */);\n let result = deflt ? action(deflt) : undefined;\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */); result == null; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n result = action(pair(this.data, i + 1));\n }\n return result;\n }\n /// Get the states that can follow this one through shift actions or\n /// goto jumps. @internal\n nextStates(state) {\n let result = [];\n for (let i = this.stateSlot(state, 1 /* ParseState.Actions */);; i += 3) {\n if (this.data[i] == 65535 /* Seq.End */) {\n if (this.data[i + 1] == 1 /* Seq.Next */)\n i = pair(this.data, i + 2);\n else\n break;\n }\n if ((this.data[i + 2] & (65536 /* Action.ReduceFlag */ >> 16)) == 0) {\n let value = this.data[i + 1];\n if (!result.some((v, i) => (i & 1) && v == value))\n result.push(this.data[i], value);\n }\n }\n return result;\n }\n /// Configure the parser. Returns a new parser instance that has the\n /// given settings modified. Settings not provided in `config` are\n /// kept from the original parser.\n configure(config) {\n // Hideous reflection-based kludge to make it easy to create a\n // slightly modified copy of a parser.\n let copy = Object.assign(Object.create(LRParser.prototype), this);\n if (config.props)\n copy.nodeSet = this.nodeSet.extend(...config.props);\n if (config.top) {\n let info = this.topRules[config.top];\n if (!info)\n throw new RangeError(`Invalid top rule name ${config.top}`);\n copy.top = info;\n }\n if (config.tokenizers)\n copy.tokenizers = this.tokenizers.map(t => {\n let found = config.tokenizers.find(r => r.from == t);\n return found ? found.to : t;\n });\n if (config.specializers) {\n copy.specializers = this.specializers.slice();\n copy.specializerSpecs = this.specializerSpecs.map((s, i) => {\n let found = config.specializers.find(r => r.from == s.external);\n if (!found)\n return s;\n let spec = Object.assign(Object.assign({}, s), { external: found.to });\n copy.specializers[i] = getSpecializer(spec);\n return spec;\n });\n }\n if (config.contextTracker)\n copy.context = config.contextTracker;\n if (config.dialect)\n copy.dialect = this.parseDialect(config.dialect);\n if (config.strict != null)\n copy.strict = config.strict;\n if (config.wrap)\n copy.wrappers = copy.wrappers.concat(config.wrap);\n if (config.bufferLength != null)\n copy.bufferLength = config.bufferLength;\n return copy;\n }\n /// Tells you whether any [parse wrappers](#lr.ParserConfig.wrap)\n /// are registered for this parser.\n hasWrappers() {\n return this.wrappers.length > 0;\n }\n /// Returns the name associated with a given term. This will only\n /// work for all terms when the parser was generated with the\n /// `--names` option. By default, only the names of tagged terms are\n /// stored.\n getName(term) {\n return this.termNames ? this.termNames[term] : String(term <= this.maxNode && this.nodeSet.types[term].name || term);\n }\n /// The eof term id is always allocated directly after the node\n /// types. @internal\n get eofTerm() { return this.maxNode + 1; }\n /// The type of top node produced by the parser.\n get topNode() { return this.nodeSet.types[this.top[1]]; }\n /// @internal\n dynamicPrecedence(term) {\n let prec = this.dynamicPrecedences;\n return prec == null ? 0 : prec[term] || 0;\n }\n /// @internal\n parseDialect(dialect) {\n let values = Object.keys(this.dialects), flags = values.map(() => false);\n if (dialect)\n for (let part of dialect.split(\" \")) {\n let id = values.indexOf(part);\n if (id >= 0)\n flags[id] = true;\n }\n let disabled = null;\n for (let i = 0; i < values.length; i++)\n if (!flags[i]) {\n for (let j = this.dialects[values[i]], id; (id = this.data[j++]) != 65535 /* Seq.End */;)\n (disabled || (disabled = new Uint8Array(this.maxTerm + 1)))[id] = 1;\n }\n return new Dialect(dialect, flags, disabled);\n }\n /// Used by the output of the parser generator. Not available to\n /// user code. @hide\n static deserialize(spec) {\n return new LRParser(spec);\n }\n}\nfunction pair(data, off) { return data[off] | (data[off + 1] << 16); }\nfunction findFinished(stacks) {\n let best = null;\n for (let stack of stacks) {\n let stopped = stack.p.stoppedAt;\n if ((stack.pos == stack.p.stream.end || stopped != null && stack.pos > stopped) &&\n stack.p.parser.stateFlag(stack.state, 2 /* StateFlag.Accepting */) &&\n (!best || best.score < stack.score))\n best = stack;\n }\n return best;\n}\nfunction getSpecializer(spec) {\n if (spec.external) {\n let mask = spec.extend ? 1 /* Specialize.Extend */ : 0 /* Specialize.Specialize */;\n return (value, stack) => (spec.external(value, stack) << 1) | mask;\n }\n return spec.get;\n}\n\nexport { ContextTracker, ExternalTokenizer, InputStream, LRParser, LocalTokenGroup, Stack };\n", "// This file was generated by lezer-generator. You probably shouldn't edit it.\nimport { LRParser } from \"@lezer/lr\";\nexport const parser = LRParser.deserialize({\n version: 14,\n states: \"%QOVQPOOOOQO'#C_'#C_O_QQO'#C^OOQO'#DO'#DOOvQQO'#C|OOQO'#DR'#DROVQPO'#CuOOQO'#C}'#C}QOQPOOOOQO'#C`'#C`O!UQQO,58xO!dQPO,59VOVQPO,59]OVQPO,59_O!iQPO,59hO!nQQO,59aOOQO'#DQ'#DQOOQO1G.d1G.dO!UQQO1G.qO!yQQO1G.wOOQO1G.y1G.yOOQO'#Cw'#CwOOQO1G/S1G/SOOQO1G.{1G.{O#[QPO'#CnO#dQPO7+$]O!UQQO'#CxO#iQPO,59YOOQO<<Gw<<GwOOQO,59d,59dOOQO-E6v-E6v\",\n stateData: \"#q~OoOS~OsPOvUO~OTXOUXOVXOWXOXXOYXO`ZO~Of[Oh]Oj^OmpX~OZ`O[`O]`O^`O~OabO~OseO~Of[Oh]OwgO~Oh]Ofeijeimeiwei~OcjOdbX~OdlO~OcjOdba~O\",\n goto: \"#YvPPw}!TPPPPPPPPPPwPP!WPP!ZP!ZP!aP!g!jPPP!p!s!aP#P!aXROU[]XQOU[]RYQRibXTOU[]XVOU[]Rf^QkhRnkRWOQSOQ_UQc[Rd]QaYQhbRmj\",\n nodeNames: \"\u26A0 Filter ColumnValueExpression Column Operator Eq NotEq Gt Lt Starts Ends Number String True False ColumnSetExpression In LBrack Values Comma RBrack AndExpression And OrExpression Or ParenthesizedExpression As FilterName\",\n maxTerm: 39,\n skippedNodes: [0],\n repeatNodeCount: 1,\n tokenData: \"6p~RnXY#PYZ#P]^#Ppq#Pqr#brs#mxy$eyz$j|}$o!O!P$t!Q![%S!^!_%_!_!`%d!`!a%i!c!}%n!}#O&V#P#Q&[#R#S%n#T#U&a#U#X%n#X#Y(w#Y#Z+]#Z#]%n#]#^.]#^#c%n#c#d/e#d#g%n#g#h0m#h#i4[#i#o%n~#USo~XY#PYZ#P]^#Ppq#P~#eP!_!`#h~#mOU~~#pWOX#mZ]#m^r#mrs$Ys#O#m#P;'S#m;'S;=`$_<%lO#m~$_O[~~$bP;=`<%l#m~$jOv~~$oOw~~$tOc~~$wP!Q![$z~%PPZ~!Q![$z~%XQZ~!O!P$t!Q![%S~%dOW~~%iOT~~%nOV~P%sUsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n~&[Oa~~&aOd~R&fYsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c'U#c#g%n#g#h(^#h#o%nR'ZWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X's#X#o%nR'zUfQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(eUjQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR(|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c)f#c#o%nR)kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#W%n#W#X*T#X#o%nR*YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h*r#h#o%nR*yUYQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR+bVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U+w#U#o%nR+|WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#`%n#`#a,f#a#o%nR,kWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h-T#h#o%nR-YWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y-r#Y#o%nR-yU^QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR.bWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#b%n#b#c.z#c#o%nR/RU`QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR/jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g0S#g#o%nR0ZUhQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR0rWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i1[#i#o%nR1aVsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#U1v#U#o%nR1{WsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g2e#g#o%nR2jWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#h%n#h#i3S#i#o%nR3XWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#g%n#g#h3q#h#o%nR3xUXQsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%nR4aWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#f%n#f#g4y#g#o%nR5OWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#i%n#i#j5h#j#o%nR5mWsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#X%n#X#Y6V#Y#o%nR6^U]QsP}!O%n!O!P%n!Q![%n!c!}%n#R#S%n#T#o%n\",\n tokenizers: [0, 1],\n topRules: {\"Filter\":[0,1]},\n tokenPrec: 0\n})\n", "import { Tree } from \"@lezer/common\";\nimport {\n Filter,\n FilterCombinatorOp,\n MultipleValueFilterClauseOp,\n SingleValueFilterClauseOp,\n} from \"@vuu-ui/vuu-filter-types\";\nimport {\n isMultiClauseFilter,\n isMultiValueFilter,\n isSingleValueFilter,\n} from \"@vuu-ui/vuu-utils\";\n\nclass FilterExpression {\n public name: string | undefined;\n #filter: Partial<Filter> | undefined = undefined;\n\n setFilterCombinatorOp(op: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter) && filter.op === op) {\n return;\n } else {\n this.#filter = {\n op: op as FilterCombinatorOp,\n filters: [this.#filter as Filter],\n };\n }\n }\n\n add(filter: Partial<Filter>) {\n if (this.#filter === undefined) {\n this.#filter = filter;\n } else if (isMultiClauseFilter(this.#filter)) {\n this.#filter.filters.push(filter as Filter);\n } else {\n throw Error(`Invalid filter passed to FilterExpression`);\n }\n }\n\n setColumn(column: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setColumn(column, target);\n }\n } else if (filter) {\n filter.column = column;\n }\n }\n setOp(value: string, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setOp(value, target);\n }\n } else if (filter) {\n filter.op = value as\n | SingleValueFilterClauseOp\n | MultipleValueFilterClauseOp;\n }\n }\n setValue(value: string | number | boolean, filter = this.#filter) {\n if (isMultiClauseFilter(filter)) {\n const target = filter.filters.at(-1);\n if (target) {\n this.setValue(value, target);\n }\n } else if (isMultiValueFilter(filter)) {\n filter.values ??= [];\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n filter.values.push(value);\n } else if (isSingleValueFilter(filter)) {\n filter.value = value;\n }\n }\n\n toJSON(filter = this.#filter) {\n if (this.name) {\n return {\n ...filter,\n name: this.name,\n };\n } else {\n return filter;\n }\n }\n}\n\nexport const walkTree = (tree: Tree, source: string) => {\n const filterExpression = new FilterExpression();\n const cursor = tree.cursor();\n do {\n const { name, from, to } = cursor;\n switch (name) {\n case \"ColumnValueExpression\":\n filterExpression.add({});\n break;\n case \"ColumnSetExpression\":\n filterExpression.add({ op: \"in\" });\n break;\n\n case \"Or\":\n case \"And\":\n filterExpression.setFilterCombinatorOp(source.substring(from, to));\n break;\n\n case \"Column\":\n filterExpression.setColumn(source.substring(from, to));\n break;\n\n case \"Operator\":\n filterExpression.setOp(source.substring(from, to));\n break;\n\n case \"String\":\n filterExpression.setValue(source.substring(from + 1, to - 1));\n break;\n\n case \"Number\":\n filterExpression.setValue(parseFloat(source.substring(from, to)));\n break;\n\n case \"True\":\n filterExpression.setValue(true);\n break;\n\n case \"False\":\n filterExpression.setValue(false);\n break;\n\n case \"FilterName\":\n filterExpression.name = source.substring(from, to);\n break;\n\n default:\n }\n } while (cursor.next());\n\n return filterExpression.toJSON();\n};\n", "import { Filter } from \"@vuu-ui/vuu-filter-types\";\nimport { parser } from \"./generated/filter-parser\";\nimport { walkTree } from \"./FilterTreeWalker\";\n\nconst strictParser = parser.configure({ strict: true });\n\nexport const parseFilter = (filterQuery: string): Filter => {\n const parseTree = strictParser.parse(filterQuery);\n const filter = walkTree(parseTree, filterQuery) as Filter;\n return filter;\n};\n", "import {\n DataSource,\n DataSourceMenusMessage,\n DataSourceVisualLinkCreatedMessage,\n DataSourceVisualLinkRemovedMessage,\n DataSourceVisualLinksMessage,\n MenuRpcResponse,\n VuuFeatureInvocationMessage,\n VuuFeatureMessage,\n VuuUIMessageInRPCEditReject,\n VuuUIMessageInRPCEditResponse,\n} from \"@vuu-ui/vuu-data\";\nimport {\n ContextMenuItemDescriptor,\n DataSourceRow,\n MenuActionHandler,\n MenuBuilder,\n} from \"@vuu-ui/vuu-data-types\";\nimport { GridAction } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getFilterPredicate } from \"@vuu-ui/vuu-filter-parser\";\nimport {\n ClientToServerMenuCellRPC,\n ClientToServerMenuRowRPC,\n ClientToServerMenuRPC,\n LinkDescriptorWithLabel,\n VuuMenu,\n VuuMenuContext,\n VuuMenuItem,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnMap,\n getRowRecord,\n isGroupMenuItemDescriptor,\n metadataKeys,\n} from \"@vuu-ui/vuu-utils\";\nimport { MenuActionClosePopup } from \"packages/vuu-popups/src\";\nimport { useCallback } from \"react\";\n\nexport const addRowsFromInstruments = \"addRowsFromInstruments\";\n\nexport interface VuuCellMenuItem extends VuuMenuItem {\n rowKey: string;\n field: string;\n value: VuuRowDataItemType;\n}\nexport interface VuuRowMenuItem extends VuuMenuItem {\n rowKey: string;\n row: { [key: string]: VuuRowDataItemType };\n}\n\nconst { KEY } = metadataKeys;\n\nconst NO_CONFIG: MenuActionConfig = {};\n\nexport const isVisualLinksAction = (\n action: GridAction\n): action is DataSourceVisualLinksMessage => action.type === \"vuu-links\";\n\nexport const isVisualLinkCreatedAction = (\n action: GridAction\n): action is DataSourceVisualLinkCreatedMessage =>\n action.type === \"vuu-link-created\";\n\nexport const isVisualLinkRemovedAction = (\n action: GridAction\n): action is DataSourceVisualLinkRemovedMessage =>\n action.type === \"vuu-link-removed\";\n\nexport const isViewportMenusAction = (\n action: GridAction\n): action is DataSourceMenusMessage => action.type === \"vuu-menu\";\n\nexport const isVuuFeatureAction = (\n action: GridAction\n): action is VuuFeatureMessage =>\n isViewportMenusAction(action) || isVisualLinksAction(action);\n\nexport const isVuuFeatureInvocation = (\n action: GridAction\n): action is VuuFeatureInvocationMessage =>\n action.type === \"vuu-link-created\" || action.type === \"vuu-link-removed\";\n\nconst isMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenuItem =>\n \"rpcName\" in menu;\n\nconst isGroupMenuItem = (menu: VuuMenuItem | VuuMenu): menu is VuuMenu =>\n \"menus\" in menu;\n\nconst isRoot = (menu: VuuMenu) => menu.name === \"ROOT\";\n\nconst isCellMenu = (options: VuuMenuItem): options is VuuCellMenuItem =>\n options.context === \"cell\";\nconst isRowMenu = (options: VuuMenuItem): options is VuuRowMenuItem =>\n options.context === \"row\";\nconst isSelectionMenu = (options: VuuMenuItem): options is VuuMenuItem =>\n options.context === \"selected-rows\";\n\nconst vuuContextCompatibleWithTableLocation = (\n uiLocation: \"grid\" | \"header\" | \"filter\",\n vuuContext: VuuMenuContext,\n selectedRowCount = 0\n) => {\n switch (uiLocation) {\n case \"grid\":\n if (vuuContext === \"selected-rows\") {\n return selectedRowCount > 0;\n } else {\n return true;\n }\n case \"header\":\n return vuuContext === \"grid\";\n default:\n return false;\n }\n};\n\nconst gridRowMeetsFilterCriteria = (\n context: VuuMenuContext,\n row: DataSourceRow,\n selectedRows: DataSourceRow[],\n filter: string,\n columnMap: ColumnMap\n): boolean => {\n if (context === \"cell\" || context === \"row\") {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return filterPredicate(row);\n } else if (context === \"selected-rows\") {\n if (selectedRows.length === 0) {\n return false;\n } else {\n const filterPredicate = getFilterPredicate(columnMap, filter);\n return selectedRows.every(filterPredicate);\n }\n }\n return true;\n};\n\nconst getMenuRpcRequest = (\n options: VuuMenuItem\n): Omit<ClientToServerMenuRPC, \"vpId\"> => {\n const { rpcName } = options;\n if (isCellMenu(options)) {\n return {\n field: options.field,\n rowKey: options.rowKey,\n rpcName,\n value: options.value,\n type: \"VIEW_PORT_MENU_CELL_RPC\",\n } as Omit<ClientToServerMenuCellRPC, \"vpId\">;\n } else if (isRowMenu(options)) {\n return {\n rowKey: options.rowKey,\n row: options.row,\n rpcName,\n type: \"VIEW_PORT_MENU_ROW_RPC\",\n } as Omit<ClientToServerMenuRowRPC, \"vpId\">;\n } else if (isSelectionMenu(options)) {\n return {\n rpcName,\n type: \"VIEW_PORT_MENUS_SELECT_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n } else {\n return {\n rpcName,\n type: \"VIEW_PORT_MENU_TABLE_RPC\",\n } as Omit<ClientToServerMenuRPC, \"vpId\">;\n }\n};\n\nexport type VuuMenuActionHandler = (type: string, options: unknown) => boolean;\n\nexport interface ViewServerHookResult {\n buildViewserverMenuOptions: MenuBuilder;\n handleMenuAction: MenuActionHandler;\n}\n\nexport interface MenuActionConfig {\n vuuMenu?: VuuMenu;\n visualLink?: DataSourceVisualLinkCreatedMessage;\n visualLinks?: LinkDescriptorWithLabel[];\n}\n\nexport type RpcResponseHandler = (\n response:\n | MenuRpcResponse\n | VuuUIMessageInRPCEditReject\n | VuuUIMessageInRPCEditResponse\n) => void;\n\nexport interface VuuMenuActionHookProps {\n /**\n * By default, vuuMenuActions will be handled automatically. When activated, a\n * message will be sent to server and response will be handled here too.\n * This prop allows client to provide a custom handler for a menu Item. This will\n * take priority and if handler returns true, no further processing for the menu\n * item will be handled by Vuu. This can also be used to prevent an item from being\n * actioned, even when no custom handling is intended. If the handler returns false,\n * Vuu will process the menuItem.\n */\n clientSideMenuActionHandler?: VuuMenuActionHandler;\n dataSource: DataSource;\n menuActionConfig?: MenuActionConfig;\n onRpcResponse?: RpcResponseHandler;\n}\n\ntype TableMenuLocation = \"grid\" | \"header\" | \"filter\";\n\nconst isTableLocation = (location: string): location is TableMenuLocation =>\n [\"grid\", \"header\", \"filter\"].includes(location);\n\nexport type VuuServerMenuOptions = {\n columnMap: ColumnMap;\n columnName: string;\n row: DataSourceRow;\n selectedRows: DataSourceRow[];\n viewport: string;\n};\n\nconst hasFilter = ({ filter }: VuuMenuItem) =>\n typeof filter === \"string\" && filter.length > 0;\n\nconst getMenuItemOptions = (\n menu: VuuMenuItem,\n options: VuuServerMenuOptions\n): VuuMenuItem => {\n switch (menu.context) {\n case \"cell\":\n return {\n ...menu,\n field: options.columnName,\n rowKey: options.row[KEY],\n value: options.row[options.columnMap[options.columnName]],\n } as VuuCellMenuItem;\n case \"row\":\n return {\n ...menu,\n row: getRowRecord(options.row, options.columnMap),\n rowKey: options.row[KEY],\n } as VuuRowMenuItem;\n default:\n return menu;\n }\n};\n\nconst menuShouldBeRenderedInThisContext = (\n menuItem: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): boolean => {\n if (isGroupMenuItem(menuItem)) {\n return menuItem.menus.some((childMenu) =>\n menuShouldBeRenderedInThisContext(childMenu, tableLocation, options)\n );\n }\n if (\n !vuuContextCompatibleWithTableLocation(\n tableLocation,\n menuItem.context,\n options.selectedRows?.length\n )\n ) {\n return false;\n }\n\n if (tableLocation === \"grid\" && hasFilter(menuItem)) {\n return gridRowMeetsFilterCriteria(\n menuItem.context,\n options.row,\n options.selectedRows,\n menuItem.filter,\n options.columnMap\n );\n }\n\n if (isCellMenu(menuItem) && menuItem.field !== \"*\") {\n return menuItem.field === options.columnName;\n }\n\n return true;\n};\n\nconst buildMenuDescriptor = (\n menu: VuuMenu | VuuMenuItem,\n tableLocation: TableMenuLocation,\n options: VuuServerMenuOptions\n): ContextMenuItemDescriptor | undefined => {\n if (menuShouldBeRenderedInThisContext(menu, tableLocation, options)) {\n if (isMenuItem(menu)) {\n return {\n label: menu.name,\n action: \"MENU_RPC_CALL\",\n options: getMenuItemOptions(menu, options),\n };\n } else {\n const children = menu.menus\n .map((childMenu) =>\n buildMenuDescriptor(childMenu, tableLocation, options)\n )\n .filter(\n (childMenu) => childMenu !== undefined\n ) as ContextMenuItemDescriptor[];\n if (children.length > 0) {\n return {\n label: menu.name,\n children,\n };\n }\n }\n }\n};\n\nexport const useVuuMenuActions = ({\n clientSideMenuActionHandler,\n dataSource,\n menuActionConfig = NO_CONFIG,\n onRpcResponse,\n}: VuuMenuActionHookProps): ViewServerHookResult => {\n const buildViewserverMenuOptions: MenuBuilder = useCallback(\n (location, options) => {\n const { visualLink, visualLinks, vuuMenu } = menuActionConfig;\n const descriptors: ContextMenuItemDescriptor[] = [];\n\n if (location === \"grid\" && visualLinks && !visualLink) {\n visualLinks.forEach((linkDescriptor: LinkDescriptorWithLabel) => {\n const { link, label: linkLabel } = linkDescriptor;\n const label = linkLabel ? linkLabel : link.toTable;\n descriptors.push({\n label: `Link to ${label}`,\n action: \"link-table\",\n options: linkDescriptor,\n });\n });\n }\n\n if (vuuMenu && isTableLocation(location)) {\n const menuDescriptor = buildMenuDescriptor(\n vuuMenu,\n location,\n options as VuuServerMenuOptions\n );\n if (isRoot(vuuMenu) && isGroupMenuItemDescriptor(menuDescriptor)) {\n descriptors.push(...menuDescriptor.children);\n } else if (menuDescriptor) {\n descriptors.push(menuDescriptor);\n }\n }\n\n return descriptors;\n },\n [menuActionConfig]\n );\n\n const handleMenuAction = useCallback(\n ({ menuId, options }: MenuActionClosePopup) => {\n if (clientSideMenuActionHandler?.(menuId, options)) {\n return true;\n } else if (menuId === \"MENU_RPC_CALL\") {\n const rpcRequest = getMenuRpcRequest(options as unknown as VuuMenuItem);\n dataSource.menuRpcCall(rpcRequest).then((rpcResponse) => {\n if (onRpcResponse && rpcResponse) {\n onRpcResponse && onRpcResponse(rpcResponse);\n }\n });\n return true;\n } else if (menuId === \"link-table\") {\n // return dataSource.createLink(options as LinkDescriptorWithLabel), true;\n return (\n (dataSource.visualLink = options as LinkDescriptorWithLabel), true\n );\n } else {\n console.log(\n `useViewServer handleMenuAction, can't handle action type ${menuId}`\n );\n }\n return false;\n },\n [clientSideMenuActionHandler, dataSource, onRpcResponse]\n );\n\n return {\n buildViewserverMenuOptions,\n handleMenuAction,\n };\n};\n", "import { useCallback, useEffect, useState } from \"react\";\nimport { getServerAPI, TableSchema } from \"@vuu-ui/vuu-data\";\n\nexport const useVuuTables = () => {\n const [tables, setTables] = useState<Map<string, TableSchema> | undefined>();\n\n const buildTables = useCallback((schemas: TableSchema[]) => {\n const vuuTables = new Map<string, TableSchema>();\n schemas.forEach((schema) => {\n vuuTables.set(schema.table.table, schema);\n });\n return vuuTables;\n }, []);\n\n useEffect(() => {\n async function fetchTableMetadata() {\n const server = await getServerAPI();\n const { tables } = await server.getTableList();\n const tableSchemas = buildTables(\n await Promise.all(\n tables.map((tableDescriptor) =>\n server.getTableSchema(tableDescriptor)\n )\n )\n );\n setTables(tableSchemas);\n }\n\n fetchTableMetadata();\n }, [buildTables]);\n\n return tables;\n};\n", "import {\n DataSource,\n DataSourceConfigMessage,\n DataSourceSubscribedMessage,\n SubscribeCallback,\n VuuFeatureInvocationMessage,\n VuuFeatureMessage,\n} from \"@vuu-ui/vuu-data\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\n\nimport {\n isVuuFeatureAction,\n isVuuFeatureInvocation,\n} from \"@vuu-ui/vuu-data-react\";\nimport { VuuRange, VuuSortCol } from \"@vuu-ui/vuu-protocol-types\";\nimport { getFullRange, metadataKeys, WindowRange } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\nconst { SELECTED } = metadataKeys;\n\n// const byKey = (row1: VuuDataRow, row2: VuuDataRow) =>\n// ((row1[RENDER_IDX] as number) - row2[RENDER_IDX]) as number;\n\nexport type SubscriptionDetails = {\n columnNames?: string[];\n range: { from: number; to: number };\n sort?: VuuSortCol[];\n};\n\nexport interface DataSourceHookProps {\n dataSource: DataSource;\n onConfigChange?: (message: DataSourceConfigMessage) => void;\n onFeatureEnabled?: (message: VuuFeatureMessage) => void;\n onFeatureInvocation?: (message: VuuFeatureInvocationMessage) => void;\n onSizeChange: (size: number) => void;\n onSubscribed: (subscription: DataSourceSubscribedMessage) => void;\n range?: VuuRange;\n renderBufferSize?: number;\n viewportRowCount: number;\n}\n\n//TODO allow subscription details to be set before subscribe call\nexport function useDataSource({\n dataSource,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSizeChange,\n onSubscribed,\n range = { from: 0, to: 0 },\n renderBufferSize = 0,\n viewportRowCount,\n}: DataSourceHookProps) {\n const [, forceUpdate] = useState<unknown>(null);\n const isMounted = useRef(true);\n const hasUpdated = useRef(false);\n const rangeRef = useRef<VuuRange>({ from: 0, to: 0 });\n const rafHandle = useRef<number | null>(null);\n const data = useRef<DataSourceRow[]>([]);\n\n const dataWindow = useMemo(\n () => new MovingWindow(getFullRange(range)),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const setData = useCallback(\n (updates: DataSourceRow[]) => {\n for (const row of updates) {\n dataWindow.add(row);\n }\n data.current = dataWindow.data;\n hasUpdated.current = true;\n },\n [dataWindow]\n );\n\n const datasourceMessageHandler: SubscribeCallback = useCallback(\n (message) => {\n if (message.type === \"subscribed\") {\n onSubscribed?.(message);\n } else if (message.type === \"viewport-update\") {\n if (typeof message.size === \"number\") {\n onSizeChange?.(message.size);\n dataWindow.setRowCount(message.size);\n }\n if (message.rows) {\n setData(message.rows);\n } else if (typeof message.size === \"number\") {\n // TODO is this right ??????\n data.current = dataWindow.data;\n // data.current = dataWindow.data.slice().sort(byKey);\n hasUpdated.current = true;\n }\n } else if (isVuuFeatureAction(message)) {\n onFeatureEnabled?.(message);\n } else if (isVuuFeatureInvocation(message)) {\n onFeatureInvocation?.(message);\n } else {\n console.log(`useDataSource unexpected message ${message.type}`);\n }\n },\n [\n dataWindow,\n onFeatureEnabled,\n onFeatureInvocation,\n onSizeChange,\n onSubscribed,\n setData,\n ]\n );\n\n useEffect(\n () => () => {\n if (rafHandle.current) {\n cancelAnimationFrame(rafHandle.current);\n rafHandle.current = null;\n }\n isMounted.current = false;\n },\n []\n );\n\n const refreshIfUpdated = useCallback(() => {\n if (isMounted.current) {\n if (hasUpdated.current) {\n forceUpdate({});\n hasUpdated.current = false;\n }\n rafHandle.current = requestAnimationFrame(refreshIfUpdated);\n }\n }, [forceUpdate]);\n\n useEffect(() => {\n rafHandle.current = requestAnimationFrame(refreshIfUpdated);\n }, [refreshIfUpdated]);\n\n const adjustRange = useCallback(\n (rowCount: number) => {\n const { from } = dataSource.range;\n const rowRange = { from, to: from + rowCount };\n const fullRange = getFullRange(rowRange, renderBufferSize);\n dataWindow.setRange(fullRange);\n dataSource.range = rangeRef.current = fullRange;\n // seems a bit naughty to emit from outside, but the datasource doesn't\n // know about the buffer size we add to the base range\n dataSource.emit(\"range\", rowRange);\n },\n [dataSource, dataWindow, renderBufferSize]\n );\n\n const setRange = useCallback(\n (range: VuuRange) => {\n const fullRange = getFullRange(range, renderBufferSize);\n dataWindow.setRange(fullRange);\n dataSource.range = rangeRef.current = fullRange;\n dataSource.emit(\"range\", range);\n },\n [dataSource, dataWindow, renderBufferSize]\n );\n\n const getSelectedRows = useCallback(() => {\n return dataWindow.getSelectedRows();\n }, [dataWindow]);\n\n // Note: we do not call unsubscribe in a cleanup function here.\n // Thats because we do not want to unsubscribe in the event that\n // our view is unmounts due to a layout drag drop operation. In\n // that scenario, we disable the viewport. THis is handles at the\n // View level. Might need to revisit this - what if Table is not\n // nested within a View ?\n useEffect(() => {\n dataSource?.subscribe(\n {\n range: rangeRef.current,\n },\n datasourceMessageHandler\n );\n }, [dataSource, datasourceMessageHandler, onConfigChange]);\n\n useEffect(() => {\n adjustRange(viewportRowCount);\n }, [adjustRange, viewportRowCount]);\n\n return {\n data: data.current,\n getSelectedRows,\n range: rangeRef.current,\n setRange,\n dataSource,\n };\n}\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n\n // assign 'pre-selected' selection state. This allows us to assign a className\n // to a non selected row that immediately precedes a selected row. Useful for\n // styling. This cannot be achieved any other way as document order of row\n // elements does not necessarily reflect data order.\n const isSelected = data[SELECTED];\n const preSelected = this.data[internalIndex - 1]?.[SELECTED];\n if (preSelected === 0 && isSelected) {\n this.data[internalIndex - 1][SELECTED] = 2;\n } else if (preSelected === 2 && !isSelected) {\n this.data[internalIndex - 1][SELECTED] = 0;\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] === 1);\n }\n}\n", "import { useDragDropNext as useDragDrop } from \"@vuu-ui/vuu-ui-controls\";\nimport { MouseEvent, useCallback, useRef } from \"react\";\n\ntype MousePos = {\n clientX: number;\n clientY: number;\n idx: string;\n};\n\nexport interface DraggableColumnHookProps {\n onDrop: (fromIndex: number, toIndex: number) => void;\n}\n\nexport const useDraggableColumn = ({ onDrop }: DraggableColumnHookProps) => {\n const mousePosRef = useRef<MousePos>();\n const containerRef = useRef<HTMLElement | null>(null);\n\n const handleDropSettle = useCallback(() => {\n console.log(`handleDropSettle`);\n mousePosRef.current = undefined;\n containerRef.current = null;\n }, []);\n\n const { draggable, draggedItemIndex, onMouseDown } = useDragDrop({\n // allowDragDrop: \"drop-indicator\",\n allowDragDrop: true,\n draggableClassName: \"vuuTable-headerCell\",\n orientation: \"horizontal\",\n containerRef,\n itemQuery: \".vuuTable-headerCell\",\n onDrop,\n onDropSettle: handleDropSettle,\n });\n\n const onHeaderCellDragStart = useCallback(\n (evt: MouseEvent) => {\n const { clientX, clientY } = evt;\n console.log(\n `useDraggableColumn handleHeaderCellDragStart means mouseDown fired on a column in RowBasedTable`\n );\n const sourceElement = evt.target as HTMLElement;\n const columnHeaderCell = sourceElement.closest(\".vuuTable-headerCell\");\n containerRef.current = columnHeaderCell?.closest(\n \"[role='row']\"\n ) as HTMLDivElement;\n const {\n dataset: { idx = \"-1\" },\n } = columnHeaderCell as HTMLElement;\n mousePosRef.current = {\n clientX,\n clientY,\n idx,\n };\n onMouseDown?.(evt);\n },\n [onMouseDown]\n );\n\n // useLayoutEffect(() => {\n // if (tableLayout === \"column\" && mousePosRef.current && !draggable) {\n // const { clientX, clientY, idx } = mousePosRef.current;\n // const target = tableContainerRef.current?.querySelector(\n // `.vuuTable-table[data-idx=\"${idx}\"]`\n // ) as HTMLElement;\n // if (target) {\n // const evt = {\n // persist: () => undefined,\n // nativeEvent: {\n // clientX,\n // clientY,\n // target,\n // },\n // };\n // onMouseDown?.(evt as unknown as MouseEvent);\n // }\n // }\n // }, [draggable, onMouseDown, tableContainerRef, tableLayout]);\n\n return {\n draggable,\n draggedItemIndex,\n onHeaderCellDragStart,\n };\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { withinRange } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n MouseEvent,\n RefObject,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n} from \"react\";\nimport {\n ArrowDown,\n ArrowKey,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n End,\n Home,\n isNavigationKey,\n isPagingKey,\n NavigationKey,\n PageDown,\n PageUp,\n} from \"./keyUtils\";\nimport { ScrollRequestHandler } from \"./useTableScroll\";\n\nexport type CellPos = [number, number];\n\nconst headerCellQuery = (colIdx: number) =>\n `.vuuTable-headers .vuuTable-headerCell:nth-child(${colIdx + 1})`;\nconst dataCellQuery = (rowIdx: number, colIdx: number) =>\n `.vuuTable-body > [aria-rowindex='${rowIdx}'] > [role='cell']:nth-child(${\n colIdx + 1\n })`;\n\nconst NULL_CELL_POS: CellPos = [-1, -1];\n\nfunction nextCellPos(\n key: ArrowKey,\n [rowIdx, colIdx]: CellPos,\n columnCount: number,\n rowCount: number\n): CellPos {\n if (key === ArrowUp) {\n if (rowIdx > -1) {\n return [rowIdx - 1, colIdx];\n } else {\n return [rowIdx, colIdx];\n }\n } else if (key === ArrowDown) {\n if (rowIdx === -1) {\n return [0, colIdx];\n } else if (rowIdx === rowCount - 1) {\n return [rowIdx, colIdx];\n } else {\n return [rowIdx + 1, colIdx];\n }\n } else if (key === ArrowRight) {\n if (colIdx < columnCount - 1) {\n return [rowIdx, colIdx + 1];\n } else {\n return [rowIdx, colIdx];\n }\n } else if (key === ArrowLeft) {\n if (colIdx > 0) {\n return [rowIdx, colIdx - 1];\n } else {\n return [rowIdx, colIdx];\n }\n }\n return [rowIdx, colIdx];\n}\n\nexport interface NavigationHookProps {\n containerRef: RefObject<HTMLElement>;\n columnCount?: number;\n data: DataSourceRow[];\n disableHighlightOnFocus?: boolean;\n label?: string;\n viewportRange: VuuRange;\n requestScroll?: ScrollRequestHandler;\n restoreLastFocus?: boolean;\n rowCount?: number;\n selected?: unknown;\n}\n\nexport const useKeyboardNavigation = ({\n columnCount = 0,\n containerRef,\n disableHighlightOnFocus,\n data,\n requestScroll,\n rowCount = 0,\n viewportRange,\n}: NavigationHookProps) => {\n const { from: viewportFirstRow, to: viewportLastRow } = viewportRange;\n const focusedCellPos = useRef<CellPos>([-1, -1]);\n const focusableCell = useRef<HTMLTableCellElement>();\n const activeCellPos = useRef<CellPos>([-1, 0]);\n\n const getTableCell = useCallback(\n ([rowIdx, colIdx]: CellPos) => {\n const cssQuery =\n rowIdx === -1 ? headerCellQuery(colIdx) : dataCellQuery(rowIdx, colIdx);\n return containerRef.current?.querySelector(\n cssQuery\n ) as HTMLTableCellElement;\n },\n [containerRef]\n );\n\n const getFocusedCell = (element: HTMLElement | Element | null) =>\n element?.closest(\n \"[role='columnHeader'],[role='cell']\"\n ) as HTMLTableCellElement | null;\n\n const getTableCellPos = (tableCell: HTMLTableCellElement): CellPos => {\n if (tableCell.role === \"columnHeader\") {\n const colIdx = parseInt(tableCell.dataset.idx ?? \"-1\", 10);\n return [-1, colIdx];\n } else {\n const focusedRow = tableCell.closest(\"[role='row']\");\n if (focusedRow) {\n const rowIdx = parseInt(focusedRow.ariaRowIndex ?? \"-1\", 10);\n // TODO will get trickier when we introduce horizontal virtualisation\n const colIdx = Array.from(focusedRow.childNodes).indexOf(tableCell);\n return [rowIdx, colIdx];\n }\n }\n return NULL_CELL_POS;\n };\n\n const focusCell = useCallback(\n (cellPos: CellPos) => {\n if (containerRef.current) {\n const activeCell = getTableCell(cellPos);\n if (activeCell) {\n if (activeCell !== focusableCell.current) {\n focusableCell.current?.setAttribute(\"tabindex\", \"\");\n focusableCell.current = activeCell;\n activeCell.setAttribute(\"tabindex\", \"0\");\n }\n activeCell.focus();\n } else if (!withinRange(cellPos[0], viewportRange)) {\n focusableCell.current = undefined;\n requestScroll?.({ type: \"scroll-page\", direction: \"up\" });\n }\n }\n },\n // TODO we recreate this function whenever viewportRange changes, which will\n // be often whilst scrolling - store range in a a ref ?\n [containerRef, getTableCell, requestScroll, viewportRange]\n );\n\n const setActiveCell = useCallback(\n (rowIdx: number, colIdx: number, fromKeyboard = false) => {\n const pos: CellPos = [rowIdx, colIdx];\n activeCellPos.current = pos;\n focusCell(pos);\n if (fromKeyboard) {\n focusedCellPos.current = pos;\n }\n },\n [focusCell]\n );\n\n const virtualizeActiveCell = useCallback(() => {\n focusableCell.current?.setAttribute(\"tabindex\", \"\");\n focusableCell.current = undefined;\n }, []);\n\n const nextPageItemIdx = useCallback(\n async (\n key: \"PageDown\" | \"PageUp\" | \"Home\" | \"End\",\n cellPos: CellPos\n ): Promise<CellPos> => {\n switch (key) {\n case PageDown:\n requestScroll?.({ type: \"scroll-page\", direction: \"down\" });\n break;\n case PageUp:\n requestScroll?.({ type: \"scroll-page\", direction: \"up\" });\n break;\n case Home:\n requestScroll?.({ type: \"scroll-end\", direction: \"home\" });\n break;\n case End:\n requestScroll?.({ type: \"scroll-end\", direction: \"end\" });\n break;\n }\n // TODO set up a scroll listener here, reset focused cell once scroll completes\n return cellPos;\n },\n [requestScroll]\n );\n\n const handleFocus = useCallback(() => {\n if (disableHighlightOnFocus !== true) {\n if (containerRef.current?.contains(document.activeElement)) {\n // IF focus arrives via keyboard, a cell will have received focus,\n // we handle that here. If focus arrives via click on a cell with\n // no tabindex (i.e all cells except one) we leave that to the\n // click handler.\n const focusedCell = getFocusedCell(document.activeElement);\n if (focusedCell) {\n focusedCellPos.current = getTableCellPos(focusedCell);\n }\n }\n }\n }, [disableHighlightOnFocus, containerRef]);\n\n const navigateChildItems = useCallback(\n async (key: NavigationKey) => {\n const [nextRowIdx, nextColIdx] = isPagingKey(key)\n ? await nextPageItemIdx(key, activeCellPos.current)\n : nextCellPos(key, activeCellPos.current, columnCount, rowCount);\n\n const [rowIdx, colIdx] = activeCellPos.current;\n if (nextRowIdx !== rowIdx || nextColIdx !== colIdx) {\n setActiveCell(nextRowIdx, nextColIdx, true);\n }\n },\n [columnCount, nextPageItemIdx, rowCount, setActiveCell]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (data.length > 0 && isNavigationKey(e.key)) {\n e.preventDefault();\n e.stopPropagation();\n void navigateChildItems(e.key);\n }\n },\n [data, navigateChildItems]\n );\n\n const handleClick = useCallback(\n // Might not be a cell e.g the Settings button\n (evt: MouseEvent) => {\n const target = evt.target as HTMLElement;\n const focusedCell = getFocusedCell(target);\n if (focusedCell) {\n const [rowIdx, colIdx] = getTableCellPos(focusedCell);\n setActiveCell(rowIdx, colIdx);\n }\n },\n [setActiveCell]\n );\n\n const containerProps = useMemo(() => {\n return {\n onClick: handleClick,\n onFocus: handleFocus,\n onKeyDown: handleKeyDown,\n };\n }, [handleClick, handleFocus, handleKeyDown]);\n\n useLayoutEffect(() => {\n const { current: cellPos } = activeCellPos;\n const withinViewport =\n cellPos[0] >= viewportFirstRow && cellPos[0] <= viewportLastRow;\n\n if (focusableCell.current && !withinViewport) {\n virtualizeActiveCell();\n } else if (!focusableCell.current && withinViewport) {\n focusCell(cellPos);\n }\n }, [focusCell, viewportFirstRow, viewportLastRow, virtualizeActiveCell]);\n\n // First render will only render the outer container when explicit\n // sizing has not been provided. Outer container is measured and\n // only then, on second render, is content rendered.\n const fullyRendered = containerRef.current?.firstChild != null;\n useEffect(() => {\n if (fullyRendered && focusableCell.current === undefined) {\n const headerCell = containerRef.current?.querySelector(\n headerCellQuery(0)\n ) as HTMLTableCellElement;\n if (headerCell) {\n headerCell.setAttribute(\"tabindex\", \"0\");\n focusableCell.current = headerCell;\n }\n }\n }, [containerRef, fullyRendered]);\n\n return containerProps;\n};\n", "import React from \"react\";\n\nfunction union<T>(set1: Set<T>, ...sets: Set<T>[]) {\n const result = new Set(set1);\n for (let set of sets) {\n for (let element of set) {\n result.add(element);\n }\n }\n return result;\n}\n\nexport const ArrowUp = \"ArrowUp\";\nexport const ArrowDown = \"ArrowDown\";\nexport const ArrowLeft = \"ArrowLeft\";\nexport const ArrowRight = \"ArrowRight\";\nexport const Enter = \"Enter\";\nexport const Escape = \"Escape\";\nexport const Home = \"Home\";\nexport const End = \"End\";\nexport const PageUp = \"PageUp\";\nexport const PageDown = \"PageDown\";\nexport const Space = \" \";\nexport const Tab = \"Tab\";\n\nconst actionKeys = new Set([\"Enter\", \"Delete\", \" \"]);\nconst focusKeys = new Set([\"Tab\"]);\nconst arrowLeftRightKeys = new Set([\"ArrowRight\", \"ArrowLeft\"]);\nconst navigationKeys = new Set<NavigationKey>([\n Home,\n End,\n PageUp,\n PageDown,\n ArrowDown,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n]);\nconst functionKeys = new Set([\n \"F1\",\n \"F2\",\n \"F3\",\n \"F4\",\n \"F5\",\n \"F6\",\n \"F7\",\n \"F8\",\n \"F9\",\n \"F10\",\n \"F11\",\n \"F12\",\n]);\nconst specialKeys = union(\n actionKeys,\n navigationKeys,\n arrowLeftRightKeys,\n functionKeys,\n focusKeys\n);\nexport const isCharacterKey = (evt: React.KeyboardEvent): boolean => {\n if (specialKeys.has(evt.key)) {\n return false;\n }\n return evt.key.length === 1 && !evt.ctrlKey && !evt.metaKey && !evt.altKey;\n};\n\nexport type ArrowKey = \"ArrowUp\" | \"ArrowDown\" | \"ArrowLeft\" | \"ArrowRight\";\nexport type PageKey = \"Home\" | \"End\" | \"PageUp\" | \"PageDown\";\nexport type NavigationKey = PageKey | ArrowKey;\nconst PageKeys = [\"Home\", \"End\", \"PageUp\", \"PageDown\"];\nexport const isPagingKey = (key: string): key is PageKey =>\n PageKeys.includes(key);\n\nexport const isNavigationKey = (key: string): key is NavigationKey => {\n return navigationKeys.has(key as NavigationKey);\n};\n", "import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport { RefObject, useCallback, useMemo, useRef, useState } from \"react\";\nimport { useResizeObserver, ResizeHandler } from \"./useResizeObserver\";\n\nconst ClientWidthHeight = [\"clientHeight\", \"clientWidth\"];\n\nexport interface ClientSize {\n clientHeight: number;\n clientWidth: number;\n}\n\nexport interface MeasuredProps {\n defaultHeight?: number;\n defaultWidth?: number;\n height?: number;\n width?: number;\n}\n\nexport interface Size {\n height: number | \"100%\";\n width: number | \"100%\";\n}\n\nexport interface MeasuredSize {\n height: number;\n width: number;\n}\n\ninterface MeasuredState {\n css: CssSize;\n outer: Size;\n inner?: MeasuredSize;\n}\n\nconst isNumber = (val: unknown): val is number => Number.isFinite(val);\n\nexport type CssSize = {\n height: string;\n width: string;\n};\nconst FULL_SIZE: CssSize = { height: \"100%\", width: \"100%\" };\n\nexport interface MeasuredContainerHookResult {\n containerRef: RefObject<HTMLDivElement>;\n cssSize: CssSize;\n outerSize: Size;\n innerSize?: MeasuredSize;\n}\n\n// If (outer) height and width are known at initialisation (i.e. they\n// were passed as props), use as initial values for inner size. If there\n// is no border on Table, these values will not change. If there is a border,\n// inner values will be updated once measured.\nconst getInitialCssSize = (height: unknown, width: unknown): CssSize => {\n if (isValidNumber(height) && isValidNumber(width)) {\n return {\n height: `${height}px`,\n width: `${width}px`,\n };\n } else {\n return FULL_SIZE;\n }\n};\n\nconst getInitialInnerSize = (\n height: unknown,\n width: unknown\n): MeasuredSize | undefined => {\n if (isValidNumber(height) && isValidNumber(width)) {\n return {\n height,\n width,\n };\n }\n};\n\nexport const useMeasuredContainer = ({\n defaultHeight = 0,\n defaultWidth = 0,\n height,\n width,\n}: MeasuredProps): MeasuredContainerHookResult => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [size, setSize] = useState<MeasuredState>({\n css: getInitialCssSize(height, width),\n inner: getInitialInnerSize(height, width),\n outer: {\n height: height ?? \"100%\",\n width: width ?? \"100%\",\n },\n });\n\n useMemo(() => {\n setSize((currentSize) => {\n const { inner, outer } = currentSize;\n if (isValidNumber(height) && isValidNumber(width) && inner && outer) {\n const { height: innerHeight, width: innerWidth } = inner;\n const { height: outerHeight, width: outerWidth } = outer;\n\n if (outerHeight !== height || outerWidth !== width) {\n const heightDiff = isValidNumber(outerHeight)\n ? outerHeight - innerHeight\n : 0;\n const widthDiff = isValidNumber(outerWidth)\n ? outerWidth - innerWidth\n : 0;\n return {\n ...currentSize,\n outer: { height, width },\n inner: { height: height - heightDiff, width: width - widthDiff },\n };\n }\n }\n return currentSize;\n });\n }, [height, width]);\n\n const onResize: ResizeHandler = useCallback(\n ({ clientWidth, clientHeight }: Partial<ClientSize>) => {\n setSize((currentSize) => {\n const { css, inner, outer } = currentSize;\n return isNumber(clientHeight) &&\n isNumber(clientWidth) &&\n (clientWidth !== inner?.width || clientHeight !== inner?.height)\n ? {\n css,\n outer,\n inner: {\n width: Math.floor(clientWidth) || defaultWidth,\n height: Math.floor(clientHeight) || defaultHeight,\n },\n }\n : currentSize;\n });\n },\n [defaultHeight, defaultWidth]\n );\n\n useResizeObserver(containerRef, ClientWidthHeight, onResize, true);\n\n return {\n containerRef,\n cssSize: size.css,\n outerSize: size.outer,\n innerSize: size.inner,\n };\n};\n", "import { RefObject, useCallback, useEffect, useRef } from \"react\";\n\nexport const WidthHeight = [\"height\", \"width\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n clientHeight?: number;\n clientWidth?: number;\n contentHeight?: number;\n contentWidth?: number;\n scrollHeight?: number;\n scrollWidth?: number;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new Map<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n size: {\n height: number;\n width: number;\n contentHeight: number;\n contentWidth: number;\n },\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return size.height;\n case \"clientHeight\":\n return element.clientHeight;\n case \"clientWidth\":\n return element.clientWidth;\n case \"contentHeight\":\n return size.contentHeight;\n case \"contentWidth\":\n return size.contentWidth;\n case \"scrollHeight\":\n return Math.ceil(element.scrollHeight);\n case \"scrollWidth\":\n return Math.ceil(element.scrollWidth);\n case \"width\":\n return size.width;\n default:\n return 0;\n }\n};\n\n// TODO should we make this create-on-demand\nconst resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, borderBoxSize, contentBoxSize } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const [{ blockSize: height, inlineSize: width }] = borderBoxSize;\n const [{ blockSize: contentHeight, inlineSize: contentWidth }] =\n contentBoxSize;\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n { height, width, contentHeight, contentWidth },\n dimension as measuredDimension\n );\n\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n // TODO only return measured sizes\n onResize && onResize(measurements);\n }\n }\n }\n});\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n) {\n const dimensionsRef = useRef(dimensions);\n\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const { width, height } = target.getBoundingClientRect();\n const { clientWidth: contentWidth, clientHeight: contentHeight } = target;\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(\n target,\n { width, height, contentHeight, contentWidth },\n dim as measuredDimension\n );\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useEffect(() => {\n const target = ref.current as HTMLElement;\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n await document.fonts.ready;\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n } else {\n console.log(\n `%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation`,\n \"font-weight:bold; color:red;\"\n );\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n // TODO set a pending entry on map\n registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [measure, ref]);\n\n useEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n}\n", "import {\n Selection,\n SelectionChangeHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n deselectItem,\n isRowSelected,\n metadataKeys,\n selectItem,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport { RowClickHandler } from \"./dataTableTypes\";\n\nconst { IDX } = metadataKeys;\n\nconst NO_SELECTION: Selection = [];\n\nexport interface SelectionHookProps {\n selectionModel: TableSelectionModel;\n onSelectionChange: SelectionChangeHandler;\n}\n\nexport const useSelection = ({\n selectionModel,\n onSelectionChange,\n}: SelectionHookProps) => {\n selectionModel === \"extended\" || selectionModel === \"checkbox\";\n const lastActiveRef = useRef(-1);\n const selectedRef = useRef<Selection>(NO_SELECTION);\n\n const handleSelectionChange: RowClickHandler = useCallback(\n (row, rangeSelect, keepExistingSelection) => {\n const { [IDX]: idx } = row;\n const { current: active } = lastActiveRef;\n const { current: selected } = selectedRef;\n\n const selectOperation = isRowSelected(row) ? deselectItem : selectItem;\n\n const newSelected = selectOperation(\n selectionModel,\n selected,\n idx,\n rangeSelect,\n keepExistingSelection,\n active\n );\n\n selectedRef.current = newSelected;\n lastActiveRef.current = idx;\n\n if (onSelectionChange) {\n onSelectionChange(newSelected);\n }\n },\n [onSelectionChange, selectionModel]\n );\n\n return handleSelectionChange;\n};\n", "import {\n ColumnDescriptor,\n GridConfig,\n KeyedColumnDescriptor,\n PinLocation,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n applyFilterToColumns,\n applyGroupByToColumns,\n applySortToColumns,\n findColumn,\n getCellRenderer,\n getColumnName,\n getTableHeadings,\n getValueFormatter,\n isFilteredColumn,\n isGroupColumn,\n isPinned,\n isTypeDescriptor,\n metadataKeys,\n updateColumn,\n sortPinnedColumns,\n stripFilterFromColumns,\n moveItem,\n} from \"@vuu-ui/vuu-utils\";\n\nimport { Reducer, useReducer } from \"react\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport { DataSourceConfig } from \"@vuu-ui/vuu-data\";\nimport { TableSchema } from \"@vuu-ui/vuu-data/src/message-utils\";\n\nconst DEFAULT_COLUMN_WIDTH = 100;\nconst KEY_OFFSET = metadataKeys.count;\n\nconst columnWithoutDataType = ({ serverDataType }: ColumnDescriptor) =>\n serverDataType === undefined;\n\nconst getCellRendererForColumn = (column: ColumnDescriptor) => {\n if (isTypeDescriptor(column.type)) {\n return getCellRenderer(column.type?.renderer);\n }\n};\n\nconst getServerDataTypeForColumn = (\n column: ColumnDescriptor,\n tableSchema?: TableSchema\n): VuuColumnDataType => {\n if (column.serverDataType) {\n return column.serverDataType;\n } else if (tableSchema) {\n const schemaColumn = tableSchema.columns.find(\n (col) => col.name === column.name\n );\n if (schemaColumn) {\n return schemaColumn.serverDataType;\n }\n }\n return \"string\";\n};\n\nexport interface TableModel extends Omit<GridConfig, \"columns\"> {\n columns: KeyedColumnDescriptor[];\n tableSchema?: Readonly<TableSchema>;\n}\n\nconst numericTypes = [\"int\", \"long\", \"double\"];\nconst getDefaultAlignment = (serverDataType?: VuuColumnDataType) =>\n serverDataType === undefined\n ? undefined\n : numericTypes.includes(serverDataType)\n ? \"right\"\n : \"left\";\n\nexport interface ColumnActionInit {\n type: \"init\";\n tableConfig: Omit<GridConfig, \"headings\">;\n dataSourceConfig?: DataSourceConfig;\n}\n\nexport interface ColumnActionHide {\n type: \"hideColumns\";\n columns: KeyedColumnDescriptor[];\n}\n\nexport interface ColumnActionShow {\n type: \"showColumns\";\n columns: KeyedColumnDescriptor[];\n}\nexport interface ColumnActionMove {\n type: \"moveColumn\";\n column: KeyedColumnDescriptor;\n moveBy?: 1 | -1;\n moveTo?: number;\n}\n\nexport interface ColumnActionPin {\n type: \"pinColumn\";\n column: ColumnDescriptor;\n pin?: PinLocation;\n}\nexport interface ColumnActionResize {\n type: \"resizeColumn\";\n column: KeyedColumnDescriptor;\n phase: \"begin\" | \"resize\" | \"end\";\n width?: number;\n}\n\nexport interface ColumnActionSetTableSchema {\n type: \"setTableSchema\";\n tableSchema: TableSchema;\n}\n\nexport interface ColumnActionUpdate {\n type: \"updateColumn\";\n column: ColumnDescriptor;\n}\n\nexport interface ColumnActionUpdateProp {\n align?: ColumnDescriptor[\"align\"];\n column: KeyedColumnDescriptor;\n hidden?: ColumnDescriptor[\"hidden\"];\n label?: ColumnDescriptor[\"label\"];\n resizing?: KeyedColumnDescriptor[\"resizing\"];\n type: \"updateColumnProp\";\n width?: ColumnDescriptor[\"width\"];\n}\n\nexport interface ColumnActionTableConfig extends DataSourceConfig {\n confirmed?: boolean;\n type: \"tableConfig\";\n}\nexport interface ColumnActionColumnSettings extends DataSourceConfig {\n type: \"columnSettings\";\n column: KeyedColumnDescriptor;\n}\n\nexport interface ColumnActionTableSettings extends DataSourceConfig {\n type: \"tableSettings\";\n}\n\n/**\n * PersistentColumnActions are those actions that require us to persist user changes across sessions\n */\nexport type PersistentColumnAction =\n | ColumnActionPin\n | ColumnActionHide\n | ColumnActionColumnSettings\n | ColumnActionTableSettings;\n\nexport const isShowColumnSettings = (\n action: PersistentColumnAction\n): action is ColumnActionColumnSettings => action.type === \"columnSettings\";\n\nexport const isShowTableSettings = (\n action: PersistentColumnAction\n): action is ColumnActionTableSettings => action.type === \"tableSettings\";\n\nexport type GridModelAction =\n | ColumnActionColumnSettings\n | ColumnActionHide\n | ColumnActionInit\n | ColumnActionMove\n | ColumnActionPin\n | ColumnActionResize\n | ColumnActionSetTableSchema\n | ColumnActionShow\n | ColumnActionUpdate\n | ColumnActionUpdateProp\n | ColumnActionTableConfig;\n\nexport type GridModelReducer = Reducer<TableModel, GridModelAction>;\n\nexport type ColumnActionDispatch = (action: GridModelAction) => void;\n\nconst columnReducer: GridModelReducer = (state, action) => {\n // info?.(`GridModelReducer ${action.type}`);\n switch (action.type) {\n case \"init\":\n return init(action);\n case \"moveColumn\":\n return moveColumn(state, action);\n case \"resizeColumn\":\n return resizeColumn(state, action);\n case \"setTableSchema\":\n return setTableSchema(state, action);\n case \"hideColumns\":\n return hideColumns(state, action);\n case \"showColumns\":\n return showColumns(state, action);\n case \"pinColumn\":\n return pinColumn(state, action);\n case \"updateColumnProp\":\n return updateColumnProp(state, action);\n case \"tableConfig\":\n return updateTableConfig(state, action);\n default:\n console.log(`unhandled action ${action.type}`);\n return state;\n }\n};\n\nexport const useTableModel = (\n tableConfig: Omit<GridConfig, \"headings\">,\n dataSourceConfig?: DataSourceConfig\n) => {\n const [state, dispatchColumnAction] = useReducer<\n GridModelReducer,\n InitialConfig\n >(columnReducer, { tableConfig, dataSourceConfig }, init);\n\n return {\n columns: state.columns,\n dispatchColumnAction,\n headings: state.headings,\n };\n};\n\ntype InitialConfig = {\n dataSourceConfig?: DataSourceConfig;\n tableConfig: Omit<GridConfig, \"headings\">;\n};\n\nfunction init({ dataSourceConfig, tableConfig }: InitialConfig): TableModel {\n const columns = tableConfig.columns.map(\n toKeyedColumWithDefaults(tableConfig)\n );\n const maybePinnedColumns = columns.some(isPinned)\n ? sortPinnedColumns(columns)\n : columns;\n const state = {\n columns: maybePinnedColumns,\n headings: getTableHeadings(maybePinnedColumns),\n };\n if (dataSourceConfig) {\n const { columns, ...rest } = dataSourceConfig;\n return updateTableConfig(state, {\n type: \"tableConfig\",\n ...rest,\n });\n } else {\n return state;\n }\n}\n\nconst getLabel = (\n label: string,\n columnFormatHeader?: \"uppercase\" | \"capitalize\"\n): string => {\n if (columnFormatHeader === \"uppercase\") {\n return label.toUpperCase();\n } else if (columnFormatHeader === \"capitalize\") {\n return label[0].toUpperCase() + label.slice(1).toLowerCase();\n }\n return label;\n};\n\nconst toKeyedColumWithDefaults =\n (options: Partial<TableModel> | Partial<GridConfig>) =>\n (\n column: ColumnDescriptor & { key?: number },\n index: number\n ): KeyedColumnDescriptor => {\n const serverDataType = getServerDataTypeForColumn(\n column,\n (options as Partial<TableModel>).tableSchema\n );\n const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } =\n options;\n const {\n align = getDefaultAlignment(serverDataType),\n key,\n name,\n label = name,\n width = columnDefaultWidth,\n ...rest\n } = column;\n\n const keyedColumnWithDefaults = {\n ...rest,\n align,\n CellRenderer: getCellRendererForColumn(column),\n label: getLabel(label, columnFormatHeader),\n key: key ?? index + KEY_OFFSET,\n name,\n originalIdx: index,\n serverDataType,\n valueFormatter: getValueFormatter(column),\n width: width,\n };\n\n if (isGroupColumn(keyedColumnWithDefaults)) {\n keyedColumnWithDefaults.columns = keyedColumnWithDefaults.columns.map(\n (col) => toKeyedColumWithDefaults(options)(col, col.key)\n );\n }\n\n return keyedColumnWithDefaults;\n };\n\nfunction moveColumn(\n state: TableModel,\n { column, moveBy, moveTo }: ColumnActionMove\n) {\n const { columns } = state;\n if (typeof moveBy === \"number\") {\n const idx = columns.indexOf(column);\n const newColumns = columns.slice();\n const [movedColumns] = newColumns.splice(idx, 1);\n newColumns.splice(idx + moveBy, 0, movedColumns);\n return {\n ...state,\n columns: newColumns,\n };\n } else if (typeof moveTo === \"number\") {\n return {\n ...state,\n columns: moveItem(columns, column, moveTo),\n };\n }\n return state;\n}\n\nfunction hideColumns(state: TableModel, { columns }: ColumnActionHide) {\n if (columns.some((col) => col.hidden !== true)) {\n return columns.reduce<TableModel>((s, c) => {\n if (c.hidden !== true) {\n return updateColumnProp(s, {\n type: \"updateColumnProp\",\n column: c,\n hidden: true,\n });\n } else {\n return s;\n }\n }, state);\n } else {\n return state;\n }\n}\nfunction showColumns(state: TableModel, { columns }: ColumnActionShow) {\n if (columns.some((col) => col.hidden)) {\n return columns.reduce<TableModel>((s, c) => {\n if (c.hidden) {\n return updateColumnProp(s, {\n type: \"updateColumnProp\",\n column: c,\n hidden: false,\n });\n } else {\n return s;\n }\n }, state);\n } else {\n return state;\n }\n}\n\nfunction resizeColumn(\n state: TableModel,\n { column, phase, width }: ColumnActionResize\n) {\n const type = \"updateColumnProp\";\n const resizing = phase !== \"end\";\n\n switch (phase) {\n case \"begin\":\n return updateColumnProp(state, { type, column, resizing });\n case \"end\":\n return updateColumnProp(state, { type, column, resizing, width });\n case \"resize\":\n return updateColumnProp(state, { type, column, width });\n default:\n throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);\n }\n}\n\nfunction setTableSchema(\n state: TableModel,\n { tableSchema }: ColumnActionSetTableSchema\n) {\n const { columns } = state;\n if (columns.some(columnWithoutDataType)) {\n const cols = columns.map((column) => {\n const serverDataType = getServerDataTypeForColumn(column, tableSchema);\n return {\n ...column,\n align: column.align ?? getDefaultAlignment(serverDataType),\n serverDataType,\n };\n });\n\n return {\n ...state,\n columns: cols,\n tableSchema,\n };\n } else {\n return {\n ...state,\n tableSchema,\n };\n }\n}\n\nfunction pinColumn(state: TableModel, action: ColumnActionPin) {\n let { columns } = state;\n const { column, pin } = action;\n columns = updateColumn(columns, column.name, { pin });\n columns = sortPinnedColumns(columns);\n console.log({ withPins: columns });\n return {\n ...state,\n columns,\n };\n}\nfunction updateColumnProp(state: TableModel, action: ColumnActionUpdateProp) {\n let { columns } = state;\n const { align, column, hidden, label, resizing, width } = action;\n const options: Partial<KeyedColumnDescriptor> = {};\n\n if (align === \"left\" || align === \"right\") {\n options.align = align;\n }\n if (typeof label === \"string\") {\n options.label = label;\n }\n if (typeof resizing === \"boolean\") {\n options.resizing = resizing;\n }\n if (typeof hidden === \"boolean\") {\n options.hidden = hidden;\n }\n if (typeof width === \"number\") {\n options.width = width;\n }\n\n columns = updateColumn(columns, column.name, options);\n\n return {\n ...state,\n columns,\n };\n}\n\nfunction updateTableConfig(\n state: TableModel,\n { columns, confirmed, filter, groupBy, sort }: ColumnActionTableConfig\n) {\n const hasColumns = columns && columns.length > 0;\n const hasGroupBy = groupBy !== undefined;\n const hasFilter = typeof filter?.filter === \"string\";\n const hasSort = sort && sort.sortDefs.length > 0;\n\n //TODO check if just confirmed has changed\n\n let result = state;\n\n if (hasColumns) {\n result = {\n ...state,\n columns: columns.map((colName, index) => {\n const columnName = getColumnName(colName);\n const key: number = index + KEY_OFFSET;\n const col = findColumn(result.columns, columnName);\n if (col) {\n if (col.key === key) {\n return col;\n } else {\n return {\n ...col,\n key,\n };\n }\n } else {\n // we have a column which was not previously included.\n // TODO How do we get the serverDataType\n // TODO it needs to be available in availableCOlumns or allColumns in state\n return toKeyedColumWithDefaults(state)(\n {\n name: colName,\n },\n index\n );\n }\n throw Error(`useTableModel column ${colName} not found`);\n }),\n };\n }\n\n if (hasGroupBy) {\n result = {\n ...state,\n columns: applyGroupByToColumns(result.columns, groupBy, confirmed),\n };\n }\n\n if (hasSort) {\n result = {\n ...state,\n columns: applySortToColumns(result.columns, sort),\n };\n }\n\n if (hasFilter) {\n result = {\n ...state,\n columns: applyFilterToColumns(result.columns, filter),\n };\n } else if (result.columns.some(isFilteredColumn)) {\n result = {\n ...state,\n columns: stripFilterFromColumns(result.columns),\n };\n }\n\n return result;\n}\n", "import { useCallback, useRef } from \"react\";\nimport { Viewport } from \"./dataTableTypes\";\n\nexport interface ScrollRequestEnd {\n type: \"scroll-end\";\n direction: \"home\" | \"end\";\n}\n\nexport interface ScrollRequestPage {\n type: \"scroll-page\";\n direction: \"up\" | \"down\";\n}\n\nexport interface ScrollRequestDistance {\n type: \"scroll-distance\";\n distance: number;\n}\n\nexport type ScrollRequest =\n | ScrollRequestPage\n | ScrollRequestDistance\n | ScrollRequestEnd;\n\nexport type ScrollRequestHandler = (request: ScrollRequest) => void;\n\nconst getPctScroll = (container: HTMLElement) => {\n const { scrollLeft, scrollTop } = container;\n const { clientHeight, clientWidth, scrollHeight, scrollWidth } = container;\n const pctScrollLeft = scrollLeft / (scrollWidth - clientWidth);\n const pctScrollTop = scrollTop / (scrollHeight - clientHeight);\n\n return [pctScrollLeft, pctScrollTop];\n};\n\nconst getMaxScroll = (container: HTMLElement) => {\n const { clientHeight, clientWidth, scrollHeight, scrollWidth } = container;\n return [scrollWidth - clientWidth, scrollHeight - clientHeight];\n};\n\ninterface CallbackRefHookProps<T = HTMLElement> {\n onAttach?: (el: T) => void;\n onDetach: (el: T) => void;\n label?: string;\n}\n\nconst useCallbackRef = <T = HTMLElement>({\n onAttach,\n onDetach,\n}: CallbackRefHookProps<T>) => {\n const ref = useRef<T | null>(null);\n const callbackRef = useCallback(\n (el: T | null) => {\n if (el) {\n ref.current = el;\n onAttach?.(el);\n } else if (ref.current) {\n const { current: originalRef } = ref;\n ref.current = el;\n onDetach?.(originalRef);\n }\n },\n [onAttach, onDetach]\n );\n return callbackRef;\n};\n\nexport interface TableScrollHookProps {\n onHorizontalScroll?: (scrollLeft: number) => void;\n onVerticalScroll?: (scrollTop: number, pctScrollTop: number) => void;\n viewportHeight: number;\n viewport: Viewport;\n}\n\nexport const useTableScroll = ({\n onHorizontalScroll,\n onVerticalScroll,\n viewport,\n}: TableScrollHookProps) => {\n const contentContainerScrolledRef = useRef(false);\n\n const scrollPosRef = useRef({ scrollTop: 0, scrollLeft: 0 });\n const scrollbarContainerRef = useRef<HTMLDivElement | null>(null);\n const contentContainerRef = useRef<HTMLDivElement | null>(null);\n const {\n maxScrollContainerScrollHorizontal: maxScrollLeft,\n maxScrollContainerScrollVertical: maxScrollTop,\n } = viewport;\n\n const handleScrollbarContainerScroll = useCallback(() => {\n const { current: contentContainer } = contentContainerRef;\n const { current: scrollbarContainer } = scrollbarContainerRef;\n const { current: contentContainerScrolled } = contentContainerScrolledRef;\n if (contentContainerScrolled) {\n contentContainerScrolledRef.current = false;\n } else if (contentContainer && scrollbarContainer) {\n const [pctScrollLeft, pctScrollTop] = getPctScroll(scrollbarContainer);\n const [maxScrollLeft, maxScrollTop] = getMaxScroll(contentContainer);\n const rootScrollLeft = Math.round(pctScrollLeft * maxScrollLeft);\n const rootScrollTop = Math.round(pctScrollTop * maxScrollTop);\n console.log(\n `pctScrollTop ${pctScrollTop}, maxScrollTop ${maxScrollTop} rootScrollTop ${rootScrollTop}`\n );\n\n contentContainer.scrollTo({\n left: rootScrollLeft,\n top: rootScrollTop,\n behavior: \"auto\",\n });\n }\n }, []);\n\n const handleContentContainerScroll = useCallback(() => {\n const { current: contentContainer } = contentContainerRef;\n const { current: scrollbarContainer } = scrollbarContainerRef;\n const { current: scrollPos } = scrollPosRef;\n\n if (contentContainer && scrollbarContainer) {\n const { scrollLeft, scrollTop } = contentContainer;\n const [pctScrollLeft, pctScrollTop] = getPctScroll(contentContainer);\n contentContainerScrolledRef.current = true;\n\n scrollbarContainer.scrollLeft = Math.round(pctScrollLeft * maxScrollLeft);\n scrollbarContainer.scrollTop = Math.round(pctScrollTop * maxScrollTop);\n\n if (scrollPos.scrollTop !== scrollTop) {\n scrollPos.scrollTop = scrollTop;\n onVerticalScroll?.(scrollTop, pctScrollTop);\n }\n if (scrollPos.scrollLeft !== scrollLeft) {\n scrollPos.scrollLeft = scrollLeft;\n onHorizontalScroll?.(scrollLeft);\n }\n }\n }, [maxScrollLeft, maxScrollTop, onHorizontalScroll, onVerticalScroll]);\n\n const handleAttachScrollbarContainer = useCallback(\n (el: HTMLDivElement) => {\n scrollbarContainerRef.current = el;\n el.addEventListener(\"scroll\", handleScrollbarContainerScroll, {\n passive: true,\n });\n },\n [handleScrollbarContainerScroll]\n );\n\n const handleDetachScrollbarContainer = useCallback(\n (el: HTMLDivElement) => {\n scrollbarContainerRef.current = null;\n el.removeEventListener(\"scroll\", handleScrollbarContainerScroll);\n },\n [handleScrollbarContainerScroll]\n );\n\n const handleAttachContentContainer = useCallback(\n (el: HTMLDivElement) => {\n contentContainerRef.current = el;\n el.addEventListener(\"scroll\", handleContentContainerScroll, {\n passive: true,\n });\n },\n [handleContentContainerScroll]\n );\n\n const handleDetachContentContainer = useCallback(\n (el: HTMLDivElement) => {\n contentContainerRef.current = null;\n el.removeEventListener(\"scroll\", handleContentContainerScroll);\n },\n [handleContentContainerScroll]\n );\n\n const contentContainerCallbackRef = useCallbackRef({\n onAttach: handleAttachContentContainer,\n onDetach: handleDetachContentContainer,\n });\n\n const scrollbarContainerCallbackRef = useCallbackRef({\n onAttach: handleAttachScrollbarContainer,\n onDetach: handleDetachScrollbarContainer,\n });\n\n const requestScroll: ScrollRequestHandler = useCallback(\n (scrollRequest) => {\n const { current: scrollbarContainer } = contentContainerRef;\n if (scrollbarContainer) {\n contentContainerScrolledRef.current = false;\n if (scrollRequest.type === \"scroll-page\") {\n const { clientHeight, scrollLeft, scrollTop } = scrollbarContainer;\n const { direction } = scrollRequest;\n const scrollBy = direction === \"down\" ? clientHeight : -clientHeight;\n const newScrollTop = Math.min(\n Math.max(0, scrollTop + scrollBy),\n maxScrollTop\n );\n scrollbarContainer.scrollTo({\n top: newScrollTop,\n left: scrollLeft,\n behavior: \"auto\",\n });\n } else if (scrollRequest.type === \"scroll-end\") {\n const { direction } = scrollRequest;\n const scrollTo = direction === \"end\" ? maxScrollTop : 0;\n scrollbarContainer.scrollTo({\n top: scrollTo,\n left: scrollbarContainer.scrollLeft,\n behavior: \"auto\",\n });\n }\n }\n },\n [maxScrollTop]\n );\n\n return {\n /** Ref to be assigned to ScrollbarContainer */\n scrollbarContainerRef: scrollbarContainerCallbackRef,\n /** Ref to be assigned to ContentContainer */\n contentContainerRef: contentContainerCallbackRef,\n /** Scroll the table */\n requestScroll,\n };\n};\n", "/**\n * This hook measures and calculates the values needed to manage layout\n * and virtualisation of the table. This includes measurements required\n * to support pinned columns.\n */\nimport {\n KeyedColumnDescriptor,\n TableHeadings,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { MeasuredSize, Size } from \"./useMeasuredContainer\";\nimport {\n actualRowPositioning,\n RowAtPositionFunc,\n RowOffsetFunc,\n RowPositioning,\n virtualRowPositioning,\n} from \"@vuu-ui/vuu-utils\";\n\nexport interface TableViewportHookProps {\n columns: KeyedColumnDescriptor[];\n headerHeight: number;\n headings: TableHeadings;\n rowCount: number;\n rowHeight: number;\n size?: MeasuredSize;\n}\n\nexport interface ViewportMeasurements {\n contentHeight: number;\n horizontalScrollbarHeight: number;\n maxScrollContainerScrollHorizontal: number;\n maxScrollContainerScrollVertical: number;\n pinnedWidthLeft: number;\n pinnedWidthRight: number;\n rowCount: number;\n contentWidth: number;\n totalHeaderHeight: number;\n verticalScrollbarWidth: number;\n viewportBodyHeight: number;\n}\n\nexport interface TableViewportHookResult extends ViewportMeasurements {\n getRowAtPosition: RowAtPositionFunc;\n getRowOffset: RowOffsetFunc;\n setPctScrollTop: (scrollPct: number) => void;\n}\n\n// Too simplistic, it depends on rowHeight\nconst MAX_RAW_ROWS = 1_500_000;\n\nconst UNMEASURED_VIEWPORT: TableViewportHookResult = {\n contentHeight: 0,\n contentWidth: 0,\n getRowAtPosition: () => -1,\n getRowOffset: () => -1,\n horizontalScrollbarHeight: 0,\n maxScrollContainerScrollHorizontal: 0,\n maxScrollContainerScrollVertical: 0,\n pinnedWidthLeft: 0,\n pinnedWidthRight: 0,\n rowCount: 0,\n setPctScrollTop: () => undefined,\n totalHeaderHeight: 0,\n verticalScrollbarWidth: 0,\n viewportBodyHeight: 0,\n};\n\nconst measurePinnedColumns = (columns: KeyedColumnDescriptor[]) => {\n let pinnedWidthLeft = 0;\n let pinnedWidthRight = 0;\n let unpinnedWidth = 0;\n for (const column of columns) {\n const { hidden, pin, width } = column;\n const visibleWidth = hidden ? 0 : width;\n if (pin === \"left\") {\n pinnedWidthLeft += visibleWidth;\n } else if (pin === \"right\") {\n pinnedWidthRight += visibleWidth;\n } else {\n unpinnedWidth += visibleWidth;\n }\n }\n return {\n pinnedWidthLeft: pinnedWidthLeft + 4,\n pinnedWidthRight: pinnedWidthRight + 4,\n unpinnedWidth,\n };\n};\n\nexport const useTableViewport = ({\n columns,\n headerHeight,\n headings,\n rowCount,\n rowHeight,\n size,\n}: TableViewportHookProps): TableViewportHookResult => {\n const pctScrollTopRef = useRef(0);\n const appliedRowCount = Math.min(rowCount, MAX_RAW_ROWS);\n const appliedContentHeight = appliedRowCount * rowHeight;\n const virtualContentHeight = rowCount * rowHeight;\n const virtualisedExtent = virtualContentHeight - appliedContentHeight;\n\n const { pinnedWidthLeft, pinnedWidthRight, unpinnedWidth } = useMemo(\n () => measurePinnedColumns(columns),\n [columns]\n );\n\n const [actualRowOffset, actualRowAtPosition] = useMemo<RowPositioning>(\n () => actualRowPositioning(rowHeight),\n [rowHeight]\n );\n\n const [getRowOffset, getRowAtPosition] = useMemo<RowPositioning>(() => {\n if (virtualisedExtent) {\n return virtualRowPositioning(\n rowHeight,\n virtualisedExtent,\n pctScrollTopRef\n );\n } else {\n return [actualRowOffset, actualRowAtPosition];\n }\n }, [actualRowAtPosition, actualRowOffset, virtualisedExtent, rowHeight]);\n\n const setPctScrollTop = useCallback((scrollPct: number) => {\n pctScrollTopRef.current = scrollPct;\n }, []);\n\n return useMemo(() => {\n if (size) {\n const headingsDepth = headings.length;\n const scrollbarSize = 15;\n const contentWidth = pinnedWidthLeft + unpinnedWidth + pinnedWidthRight;\n const horizontalScrollbarHeight =\n contentWidth > size.width ? scrollbarSize : 0;\n const totalHeaderHeight = headerHeight * (1 + headingsDepth);\n const maxScrollContainerScrollVertical =\n appliedContentHeight -\n ((size?.height ?? 0) - horizontalScrollbarHeight) +\n totalHeaderHeight;\n const maxScrollContainerScrollHorizontal =\n contentWidth - size.width + pinnedWidthLeft;\n const visibleRows = (size.height - headerHeight) / rowHeight;\n const count = Number.isInteger(visibleRows)\n ? visibleRows + 1\n : Math.ceil(visibleRows);\n const viewportBodyHeight = size.height - totalHeaderHeight;\n const verticalScrollbarWidth =\n appliedContentHeight > viewportBodyHeight ? scrollbarSize : 0;\n\n return {\n contentHeight: appliedContentHeight,\n getRowAtPosition,\n getRowOffset,\n horizontalScrollbarHeight,\n maxScrollContainerScrollHorizontal,\n maxScrollContainerScrollVertical,\n pinnedWidthLeft,\n pinnedWidthRight,\n rowCount: count,\n contentWidth,\n setPctScrollTop,\n totalHeaderHeight,\n verticalScrollbarWidth,\n viewportBodyHeight,\n };\n } else {\n return UNMEASURED_VIEWPORT;\n }\n }, [\n size,\n headings.length,\n pinnedWidthLeft,\n unpinnedWidth,\n pinnedWidthRight,\n appliedContentHeight,\n headerHeight,\n rowHeight,\n getRowAtPosition,\n getRowOffset,\n setPctScrollTop,\n ]);\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport {\n getColumnsInViewport,\n itemsChanged,\n RowAtPositionFunc,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { ViewportMeasurements } from \"./useTableViewport\";\n\nexport interface VirtualViewportHookProps {\n columns: KeyedColumnDescriptor[];\n getRowAtPosition: RowAtPositionFunc;\n setRange: (range: VuuRange) => void;\n viewportMeasurements: ViewportMeasurements;\n}\nexport interface VirtualViewportHookResult {\n onHorizontalScroll: (scrollLeft: number) => void;\n onVerticalScroll: (scrollTop: number) => void;\n columnsWithinViewport: KeyedColumnDescriptor[];\n virtualColSpan: number;\n}\n\nexport const useVirtualViewport = ({\n columns,\n getRowAtPosition,\n setRange,\n viewportMeasurements,\n}: VirtualViewportHookProps): VirtualViewportHookResult => {\n const firstRowRef = useRef<number>(-1);\n const {\n rowCount: viewportRowCount,\n contentWidth,\n maxScrollContainerScrollHorizontal,\n } = viewportMeasurements;\n // double check this ...\n const availableWidth = contentWidth - maxScrollContainerScrollHorizontal;\n const scrollLeftRef = useRef(0);\n\n const [visibleColumns, preSpan] = useMemo(\n () =>\n getColumnsInViewport(\n columns,\n scrollLeftRef.current,\n scrollLeftRef.current + availableWidth\n ),\n [availableWidth, columns]\n );\n\n const preSpanRef = useRef(preSpan);\n\n useEffect(() => {\n setColumnsWithinViewport(visibleColumns);\n }, [visibleColumns]);\n\n const [columnsWithinViewport, setColumnsWithinViewport] =\n useState<KeyedColumnDescriptor[]>(visibleColumns);\n\n const handleHorizontalScroll = useCallback(\n (scrollLeft: number) => {\n scrollLeftRef.current = scrollLeft;\n const [visibleColumns, pre] = getColumnsInViewport(\n columns,\n scrollLeft,\n scrollLeft + availableWidth\n );\n if (itemsChanged(columnsWithinViewport, visibleColumns)) {\n preSpanRef.current = pre;\n\n setColumnsWithinViewport(visibleColumns);\n }\n },\n [availableWidth, columns, columnsWithinViewport]\n );\n\n const handleVerticalScroll = useCallback(\n (scrollTop: number) => {\n const firstRow = getRowAtPosition(scrollTop);\n if (firstRow !== firstRowRef.current) {\n firstRowRef.current = firstRow;\n setRange({ from: firstRow, to: firstRow + viewportRowCount });\n }\n },\n [getRowAtPosition, setRange, viewportRowCount]\n );\n\n return {\n columnsWithinViewport,\n onHorizontalScroll: handleHorizontalScroll,\n onVerticalScroll: handleVerticalScroll,\n /** number of leading columns not rendered because of virtualization */\n virtualColSpan: preSpanRef.current,\n };\n};\n", "import { TableCellProps } from \"@vuu-ui/vuu-datagrid-types\";\nimport cx from \"classnames\";\nimport {\n isJsonAttribute,\n metadataKeys,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\n\nimport \"./JsonCell.css\";\n\nconst classBase = \"vuuJsonCell\";\n\nconst { IS_EXPANDED, KEY } = metadataKeys;\n\nconst localKey = (key: string) => {\n const pos = key.lastIndexOf(\"|\");\n if (pos === -1) {\n return \"\";\n } else {\n return key.slice(pos + 1);\n }\n};\n\nconst JsonCell = ({ column, row }: TableCellProps) => {\n const { key: columnKey /*, type, valueFormatter */ } = column;\n let value = row[columnKey];\n let isToggle = false;\n if (isJsonAttribute(value)) {\n value = value.slice(0, -1);\n isToggle = true;\n }\n const rowKey = localKey(row[KEY]);\n const className = cx({\n [`${classBase}-name`]: rowKey === value,\n [`${classBase}-value`]: rowKey !== value,\n [`${classBase}-group`]: isToggle,\n });\n\n if (isToggle) {\n const toggleIcon = row[IS_EXPANDED] ? \"minus-box\" : \"plus-box\";\n return (\n <span className={className}>\n <span className={`${classBase}-value`}>{value}</span>\n <span className={`${classBase}-toggle`} data-icon={toggleIcon} />\n </span>\n );\n } else if (value) {\n return <span className={className}>{value}</span>;\n } else {\n return null;\n }\n};\n\nregisterComponent(\"json\", JsonCell, \"cell-renderer\", {});\n", "import { ContextMenuProvider } from \"@vuu-ui/vuu-popups\";\nimport { TableProps } from \"@vuu-ui/vuu-table\";\nimport { metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { CSSProperties, useEffect } from \"react\";\nimport { HeaderCell } from \"./HeaderCell\";\nimport { Row } from \"./Row\";\nimport { useTable } from \"./useTableNext\";\n\nimport \"./TableNext.css\";\n\nconst classBase = \"vuuTableNext\";\n\nconst { IDX, RENDER_IDX } = metadataKeys;\n\nexport const TableNext = ({\n className: classNameProp,\n config,\n dataSource,\n headerHeight = 25,\n height,\n id: idProp,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n onShowConfigEditor: onShowSettings,\n renderBufferSize = 0,\n rowHeight = 20,\n selectionModel = \"extended\",\n style: styleProp,\n width,\n ...htmlAttributes\n}: TableProps) => {\n const {\n columnMap,\n columns,\n containerMeasurements: { cssSize, innerSize },\n containerRef,\n data,\n handleContextMenuAction,\n onHeaderClick,\n onRowClick,\n menuBuilder,\n scrollProps,\n viewportMeasurements,\n ...tableProps\n } = useTable({\n config,\n dataSource,\n renderBufferSize,\n headerHeight,\n height,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n rowHeight,\n selectionModel,\n width,\n });\n\n const unmeasured = innerSize === undefined;\n\n const getStyle = () => {\n return unmeasured\n ? ({\n \"--table-css-height\": `${cssSize.height}`,\n \"--table-css-width\": `${cssSize.width}`,\n } as CSSProperties)\n : ({\n ...styleProp,\n \"--content-height\": `${viewportMeasurements.contentHeight}px`,\n \"--horizontal-scrollbar-height\": `${viewportMeasurements.horizontalScrollbarHeight}px`,\n \"--content-width\": `${viewportMeasurements.contentWidth}px`,\n \"--pinned-width-left\": `${viewportMeasurements.pinnedWidthLeft}px`,\n \"--pinned-width-right\": `${viewportMeasurements.pinnedWidthRight}px`,\n \"--header-height\": `${headerHeight}px`,\n \"--row-height\": `${rowHeight}px`,\n \"--table-css-height\": `${cssSize?.height}`,\n \"--table-css-width\": `${cssSize?.width}`,\n \"--table-height\": `${innerSize?.height}px`,\n \"--table-width\": `${innerSize?.width}px`,\n \"--total-header-height\": `${viewportMeasurements.totalHeaderHeight}px`,\n \"--vertical-scrollbar-width\": `${viewportMeasurements.verticalScrollbarWidth}px`,\n \"--viewport-body-height\": `${viewportMeasurements.viewportBodyHeight}px`,\n } as CSSProperties);\n };\n console.log(`%cTableNext render`, \"color:red;font-weight:bold;\");\n useEffect(() => {\n console.log(\n `%cTableNext actual render`,\n \"background-color:red;color: white;font-weight:bold;\"\n );\n });\n return (\n <ContextMenuProvider\n menuActionHandler={handleContextMenuAction}\n menuBuilder={menuBuilder}\n >\n {unmeasured ? (\n <div\n {...htmlAttributes}\n className={classBase}\n style={getStyle()}\n ref={containerRef}\n />\n ) : (\n <div\n {...htmlAttributes}\n className={classBase}\n style={getStyle()}\n ref={containerRef}\n >\n <div\n className={`${classBase}-scrollbarContainer`}\n ref={scrollProps.scrollbarContainerRef}\n >\n <div className={`${classBase}-scrollbarContent`} />\n </div>\n <div\n className={`${classBase}-contentContainer`}\n ref={scrollProps.contentContainerRef}\n >\n <div {...tableProps} className={`${classBase}-table`}>\n <div className={`${classBase}-col-headings`}>\n <div className={`${classBase}-col-headers`} role=\"row\">\n {columns.map((col, i) => (\n <HeaderCell\n classBase={classBase}\n column={col}\n idx={i}\n key={col.name}\n onClick={onHeaderClick}\n />\n ))}\n </div>\n </div>\n <div className={`${classBase}-body`}>\n {data.map((data) => (\n <Row\n columnMap={columnMap}\n columns={columns}\n key={data[RENDER_IDX]}\n onClick={onRowClick}\n row={data}\n offset={rowHeight * data[IDX] + headerHeight}\n />\n ))}\n </div>\n </div>\n </div>\n </div>\n )}\n </ContextMenuProvider>\n );\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { HTMLAttributes, MouseEvent, useCallback, useRef } from \"react\";\nimport { useCell } from \"./useCell\";\nimport { ColumnMenu } from \"./ColumnMenu\";\nimport { SortIndicator } from \"@vuu-ui/vuu-table/src/table/SortIndicator\";\nimport {\n ColumnResizer,\n TableColumnResizeHandler,\n useTableColumnResize,\n} from \"../table\";\n\nimport \"./HeaderCell.css\";\n\nexport interface HeaderCellProps extends HTMLAttributes<HTMLDivElement> {\n classBase?: string;\n column: KeyedColumnDescriptor;\n idx: number;\n onResize?: TableColumnResizeHandler;\n}\n\nexport const HeaderCell = ({\n classBase: classBaseProp,\n column,\n onClick,\n onResize,\n idx,\n}: HeaderCellProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const classBase = `${classBaseProp}-col-header`;\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLTableCellElement>) => !isResizing && onClick?.(evt),\n [isResizing, onClick]\n );\n\n const { className, style } = useCell(column, classBase, true);\n\n return (\n <div\n className={className}\n data-idx={idx}\n onClick={handleClick}\n ref={rootRef}\n role=\"cell\"\n style={style}\n >\n <ColumnMenu column={column} />\n <div className={`${classBase}-label`}>{column.name}</div>\n <SortIndicator sorted={column.sorted} />\n {column.resizeable !== false ? <ColumnResizer {...resizeProps} /> : null}\n </div>\n );\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { getColumnStyle } from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { useMemo } from \"react\";\n\nexport const useCell = (\n column: KeyedColumnDescriptor,\n classBase: string,\n isHeader?: boolean\n) =>\n // TODO measure perf without the memo, might not be worth the cost\n useMemo(() => {\n const className = cx(classBase, {\n vuuPinFloating: column.pin === \"floating\",\n vuuPinLeft: column.pin === \"left\",\n vuuPinRight: column.pin === \"right\",\n vuuEndPin: isHeader && column.endPin,\n [`${classBase}-resizing`]: column.resizing,\n [`${classBase}-right`]: column.align === \"right\",\n });\n\n const style = getColumnStyle(column);\n return {\n className,\n style,\n };\n }, [column, classBase, isHeader]);\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport cx from \"classnames\";\nimport {\n HTMLAttributes,\n MouseEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./ColumnMenu.css\";\n\nexport interface ColumnMenuProps extends HTMLAttributes<HTMLSpanElement> {\n column: KeyedColumnDescriptor;\n}\n\nconst getPosition = (element: HTMLElement | null) => {\n if (element) {\n const { bottom, left } = element.getBoundingClientRect();\n return { x: left, y: bottom + 6 };\n }\n};\n\nexport const ColumnMenu = ({\n className,\n column,\n ...props\n}: ColumnMenuProps) => {\n const rootRef = useRef<HTMLSpanElement>(null);\n const [menuOpen, setMenuOpen] = useState(false);\n const [showContextMenu] = useContextMenu();\n\n const handleMenuClose = useCallback(() => {\n setMenuOpen(false);\n }, []);\n\n const showColumnMenu = useCallback(\n (e: MouseEvent<HTMLElement>) => {\n setMenuOpen(true);\n showContextMenu(e, \"column-menu\", {\n column,\n ContextMenuProps: {\n onClose: handleMenuClose,\n position: getPosition(rootRef.current),\n },\n });\n },\n [column, handleMenuClose, showContextMenu]\n );\n\n return (\n <span\n {...props}\n className={cx(\"vuuTable-columnMenu\", className, {\n \"vuuTable-columnMenu-open\": menuOpen,\n })}\n data-icon=\"more-vert\"\n onClick={showColumnMenu}\n ref={rootRef}\n />\n );\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { RowClickHandler } from \"@vuu-ui/vuu-table\";\nimport {\n ColumnMap,\n isGroupColumn,\n metadataKeys,\n RowSelected,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"classnames\";\nimport { CSSProperties, memo, MouseEvent, useCallback } from \"react\";\nimport { TableCell } from \"./TableCell\";\nimport { TableGroupCell } from \"./TableGroupCell\";\n\nimport \"./Row.css\";\n\nexport type HtmlRowProps = {\n className?: string;\n columnMap: ColumnMap;\n columns: KeyedColumnDescriptor[];\n row: DataSourceRow;\n offset?: number;\n onClick?: RowClickHandler;\n onToggleGroup?: (row: DataSourceRow, column: KeyedColumnDescriptor) => void;\n style?: CSSProperties;\n};\n\nconst { IDX, IS_EXPANDED, SELECTED } = metadataKeys;\nconst classBase = \"vuuTableNextRow\";\n\nexport const Row = memo(\n ({\n className: classNameProp,\n columnMap,\n columns,\n row,\n offset,\n onClick,\n onToggleGroup,\n ...htmlAttributes\n }: HtmlRowProps) => {\n // useEffect(() => {\n // console.log(\"row mounted\");\n // return () => {\n // console.log(\"row unmounted\");\n // };\n // }, []);\n\n const {\n [IDX]: rowIndex,\n [IS_EXPANDED]: isExpanded,\n [SELECTED]: selectionStatus,\n } = row;\n\n const handleRowClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n const rangeSelect = evt.shiftKey;\n const keepExistingSelection = evt.ctrlKey || evt.metaKey; /* mac only */\n onClick?.(row, rangeSelect, keepExistingSelection);\n },\n [onClick, row]\n );\n\n const { True, First, Last } = RowSelected;\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-even`]: rowIndex % 2 === 0,\n [`${classBase}-expanded`]: isExpanded,\n [`${classBase}-selected`]: selectionStatus & True,\n [`${classBase}-selectedStart`]: selectionStatus & First,\n [`${classBase}-selectedEnd`]: selectionStatus & Last,\n });\n\n const style =\n typeof offset === \"number\"\n ? { transform: `translate3d(0px, ${offset}px, 0px)` }\n : undefined;\n\n return (\n <div\n {...htmlAttributes}\n key={`row-${row[0]}`}\n role=\"row\"\n className={className}\n onClick={handleRowClick}\n style={style}\n >\n <span className={`${classBase}-selectionDecorator vuuStickyLeft`} />\n {columns.map((column) => {\n const isGroup = isGroupColumn(column);\n const Cell = isGroup ? TableGroupCell : TableCell;\n\n return <Cell key={column.key} column={column} row={row} />;\n })}\n <span className={`${classBase}-selectionDecorator vuuStickyRight`} />\n </div>\n );\n }\n);\nRow.displayName = \"Row\";\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { MouseEvent } from \"react\";\nimport { useCell } from \"./useCell\";\n\nexport interface TableCellProps {\n column: KeyedColumnDescriptor;\n onClick?: (\n evt: MouseEvent<HTMLDivElement>,\n column: KeyedColumnDescriptor\n ) => void;\n row: DataSourceRow;\n}\n\nexport const TableCell = ({ column, row }: TableCellProps) => {\n const { className, style } = useCell(column, \"vuuTableNextCell\");\n\n return (\n <div className={className} role=\"cell\" style={style}>\n {row[column.key]}\n </div>\n );\n};\n", "import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n GroupColumnDescriptor,\n KeyedColumnDescriptor,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { getGroupValueAndOffset, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback } from \"react\";\nimport { useCell } from \"./useCell\";\n\nexport interface TableCellProps {\n column: KeyedColumnDescriptor;\n onClick?: (evt: MouseEvent, column: KeyedColumnDescriptor) => void;\n row: DataSourceRow;\n}\n\nconst { IS_LEAF } = metadataKeys;\n\nexport const TableGroupCell = ({ column, onClick, row }: TableCellProps) => {\n const { columns } = column as GroupColumnDescriptor;\n const [value, offset] = getGroupValueAndOffset(columns, row);\n const { className, style } = useCell(column, \"vuuTable2-groupCell\");\n\n const handleClick = useCallback(\n (evt: MouseEvent) => {\n onClick?.(evt, column);\n },\n [column, onClick]\n );\n\n const isLeaf = row[IS_LEAF];\n const spacers = Array(offset)\n .fill(0)\n .map((n, i) => <span className=\"vuuTable2-groupCell-spacer\" key={i} />);\n\n return (\n <div\n className={className}\n role=\"cell\"\n style={style}\n onClick={isLeaf ? undefined : handleClick}\n >\n {spacers}\n {isLeaf ? null : (\n <span\n className=\"vuuTable2-groupCell-toggle\"\n data-icon=\"vuu-triangle-right\"\n />\n )}\n <span>{value}</span>\n </div>\n );\n};\n", "import {\n DataSource,\n VuuFeatureInvocationMessage,\n VuuFeatureMessage,\n} from \"@vuu-ui/vuu-data\";\nimport {\n GridConfig,\n KeyedColumnDescriptor,\n SelectionChangeHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { SetPropsAction, useLayoutProviderDispatch } from \"@vuu-ui/vuu-layout\";\nimport { useContextMenu as usePopupContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { VuuRange, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\nimport {\n applySort,\n buildColumnMap,\n visibleColumnAtIndex,\n} from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback, useEffect, useMemo, useState } from \"react\";\nimport {\n buildContextMenuDescriptors,\n MeasuredProps,\n useMeasuredContainer,\n useSelection,\n useTableContextMenu,\n useTableViewport,\n} from \"../table\";\nimport {\n isShowColumnSettings,\n isShowTableSettings,\n PersistentColumnAction,\n} from \"../table/useTableModel\";\nimport { useDataSource } from \"./useDataSource\";\nimport { useInitialValue } from \"./useInitialValue\";\nimport { useTableModel } from \"./useTableModel\";\nimport { useTableScroll } from \"./useTableScroll\";\nimport { useVirtualViewport } from \"./useVirtualViewport\";\n\nexport interface TableHookProps extends MeasuredProps {\n config: Omit<GridConfig, \"headings\">;\n dataSource: DataSource;\n headerHeight: number;\n onConfigChange?: (config: Omit<GridConfig, \"headings\">) => void;\n onFeatureEnabled?: (message: VuuFeatureMessage) => void;\n onFeatureInvocation?: (message: VuuFeatureInvocationMessage) => void;\n renderBufferSize?: number;\n rowHeight: number;\n onSelectionChange?: SelectionChangeHandler;\n selectionModel: TableSelectionModel;\n}\n\nexport const useTable = ({\n config,\n dataSource,\n headerHeight,\n onConfigChange,\n onFeatureEnabled,\n onFeatureInvocation,\n onSelectionChange,\n rowHeight,\n selectionModel,\n ...measuredProps\n}: TableHookProps) => {\n const [rowCount] = useState<number>(dataSource.size);\n const dispatchLayoutAction = useLayoutProviderDispatch();\n console.log({ dispatchLayoutAction: dispatchLayoutAction.toString() });\n if (dataSource === undefined) {\n throw Error(\"no data source provided to Vuu Table\");\n }\n\n const menuBuilder = useMemo(\n () => buildContextMenuDescriptors(dataSource),\n [dataSource]\n );\n\n const { containerRef, ...containerMeasurements } =\n useMeasuredContainer(measuredProps);\n\n const { columns, dispatchColumnAction, headings } = useTableModel(\n config,\n dataSource.config\n );\n\n const columnMap = useMemo(\n () => buildColumnMap(config.columns.map((col) => col.name)),\n [config.columns]\n );\n\n useEffect(() => {\n dataSource.on(\"config\", (config, confirmed) => {\n // expectConfigChangeRef.current = true;\n dispatchColumnAction({\n type: \"tableConfig\",\n ...config,\n confirmed,\n });\n });\n }, [dataSource, dispatchColumnAction]);\n\n const {\n getRowAtPosition,\n getRowOffset,\n setPctScrollTop,\n ...viewportMeasurements\n } = useTableViewport({\n columns,\n headerHeight,\n headings,\n rowCount,\n rowHeight,\n // Note: innerSize will take border into account, whereas outerSize will not\n // size: containerMeasurements.innerSize ?? containerMeasurements.outerSize,\n size: containerMeasurements.innerSize,\n });\n\n console.log(\n `useTable ${viewportMeasurements.maxScrollContainerScrollHorizontal}, ${viewportMeasurements.maxScrollContainerScrollVertical}`\n );\n\n const initialRange = useInitialValue<VuuRange>({\n from: 0,\n to: viewportMeasurements.rowCount + 1,\n });\n\n const { data, setRange } = useDataSource({\n dataSource,\n initialRange,\n });\n\n useMemo(() => {\n const {\n range: { from, to },\n } = dataSource;\n if (viewportMeasurements.rowCount !== to - 1 - from) {\n dataSource.range = {\n from,\n to: from + viewportMeasurements.rowCount + 1,\n };\n }\n }, [dataSource, viewportMeasurements.rowCount]);\n\n const onPersistentColumnOperation = useCallback(\n (action: PersistentColumnAction) => {\n if (isShowColumnSettings(action)) {\n dispatchLayoutAction({\n type: \"set-props\",\n path: \"#context-panel\",\n props: {\n expanded: true,\n context: \"column-settings\",\n column: action.column,\n title: \"Column Settings\",\n },\n } as SetPropsAction);\n } else if (isShowTableSettings(action)) {\n dispatchLayoutAction({\n type: \"set-props\",\n path: \"#context-panel\",\n props: {\n expanded: true,\n context: \"table-settings\",\n title: \"DataGrid Settings\",\n },\n } as SetPropsAction);\n } else {\n // expectConfigChangeRef.current = true;\n dispatchColumnAction(action);\n }\n },\n [dispatchColumnAction, dispatchLayoutAction]\n );\n\n const handleContextMenuAction = useTableContextMenu({\n dataSource,\n onPersistentColumnOperation,\n });\n\n const { onVerticalScroll } = useVirtualViewport({\n columns,\n getRowAtPosition,\n setRange,\n viewportMeasurements,\n });\n\n const handleVerticalScroll = useCallback(\n (scrollTop: number) => {\n onVerticalScroll(scrollTop);\n },\n [onVerticalScroll]\n );\n\n const { requestScroll, ...scrollProps } = useTableScroll({\n // contentHeight: viewportMeasurements.contentHeight,\n // contentWidth: viewportMeasurements.contentWidth,\n // height: containerMeasurements.innerSize?.height ?? 0,\n // width: containerMeasurements.innerSize?.width ?? 0,\n\n maxScrollLeft: viewportMeasurements.maxScrollContainerScrollHorizontal,\n maxScrollTop: viewportMeasurements.maxScrollContainerScrollVertical,\n onVerticalScroll: handleVerticalScroll,\n });\n\n // TOSO ship this out into a hook\n const [showContextMenu] = usePopupContextMenu();\n\n const onContextMenu = useCallback(\n (evt: MouseEvent<HTMLElement>) => {\n // const { current: currentData } = dataRef;\n // const { current: currentDataSource } = dataSourceRef;\n const target = evt.target as HTMLElement;\n const cellEl = target?.closest(\"div[role='cell']\");\n const rowEl = target?.closest(\"div[role='row']\");\n if (cellEl && rowEl /*&& currentData && currentDataSource*/) {\n // const { columns, selectedRowsCount } = currentDataSource;\n const columnMap = buildColumnMap(columns);\n // const rowIndex = parseInt(rowEl.ariaRowIndex ?? \"-1\");\n const cellIndex = Array.from(rowEl.childNodes).indexOf(cellEl);\n // const row = currentData.find(([idx]) => idx === rowIndex);\n const columnName = columns[cellIndex];\n showContextMenu(evt, \"grid\", {\n columnMap,\n columnName,\n // row,\n // selectedRows: selectedRowsCount === 0 ? NO_ROWS : getSelectedRows(),\n // viewport: dataSource?.viewport,\n });\n }\n },\n [columns, showContextMenu]\n );\n\n const handleSort = useCallback(\n (\n column: KeyedColumnDescriptor,\n extendSort = false,\n sortType?: VuuSortType\n ) => {\n if (dataSource) {\n dataSource.sort = applySort(\n dataSource.sort,\n column,\n extendSort,\n sortType\n );\n }\n },\n [dataSource]\n );\n\n const onHeaderClick = useCallback(\n (evt: MouseEvent) => {\n const targetElement = evt.target as HTMLElement;\n const headerCell = targetElement.closest(\n \".TableNext-col-header\"\n ) as HTMLElement;\n const colIdx = parseInt(headerCell?.dataset.idx ?? \"-1\");\n const column = visibleColumnAtIndex(columns, colIdx);\n const isAdditive = evt.shiftKey;\n column && handleSort(column, isAdditive);\n },\n [columns, handleSort]\n );\n\n const handleSelectionChange: SelectionChangeHandler = useCallback(\n (selected) => {\n dataSource.select(selected);\n onSelectionChange?.(selected);\n },\n [dataSource, onSelectionChange]\n );\n\n const onRowClick = useSelection({\n onSelectionChange: handleSelectionChange,\n selectionModel,\n });\n\n return {\n columnMap,\n columns,\n containerRef,\n containerMeasurements,\n data,\n handleContextMenuAction,\n menuBuilder,\n onContextMenu,\n onHeaderClick,\n onRowClick,\n scrollProps,\n viewportMeasurements,\n };\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data\";\nimport { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport const useDataSource = ({\n dataSource,\n initialRange,\n}: {\n dataSource: DataSource;\n initialRange: VuuRange;\n}) => {\n const [data, setData] = useState<DataSourceRow[]>([]);\n // useEffect(() => {\n useMemo(() => {\n dataSource?.subscribe({ range: initialRange }, (message) => {\n if (message.type === \"viewport-update\") {\n // if (message.size) {\n // console.log(`useDataSourcesize = ${message.size}`);\n // }\n if (message.rows) {\n setData(message.rows);\n }\n }\n });\n }, [dataSource, initialRange]);\n\n const setRange = useCallback(\n (range: VuuRange) => {\n dataSource.range = range;\n },\n [dataSource]\n );\n\n return {\n data,\n setRange,\n };\n};\n", "import { useMemo, useRef } from \"react\";\n\nexport const useInitialValue = <T = unknown>(value: T): T => {\n const ref = useRef<T>(value);\n return useMemo(() => ref.current, []);\n};\n", "import {\n ColumnDescriptor,\n GridConfig,\n KeyedColumnDescriptor,\n PinLocation,\n} from \"@vuu-ui/vuu-datagrid-types\";\nimport { moveItem } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n applyFilterToColumns,\n applyGroupByToColumns,\n applySortToColumns,\n findColumn,\n getCellRenderer,\n getColumnName,\n getTableHeadings,\n getValueFormatter,\n isFilteredColumn,\n isGroupColumn,\n isPinned,\n isTypeDescriptor,\n logger,\n metadataKeys,\n sortPinnedColumns,\n stripFilterFromColumns,\n} from \"@vuu-ui/vuu-utils\";\n\nimport { Reducer, useReducer } from \"react\";\nimport { VuuColumnDataType } from \"@vuu-ui/vuu-protocol-types\";\nimport { DataSourceConfig } from \"@vuu-ui/vuu-data\";\nimport { TableSchema } from \"@vuu-ui/vuu-data/src/message-utils\";\n\nconst { info } = logger(\"useTableModel\");\n\nconst DEFAULT_COLUMN_WIDTH = 100;\nconst KEY_OFFSET = metadataKeys.count;\n\nconst columnWithoutDataType = ({ serverDataType }: ColumnDescriptor) =>\n serverDataType === undefined;\n\nconst getCellRendererForColumn = (column: ColumnDescriptor) => {\n if (isTypeDescriptor(column.type)) {\n return getCellRenderer(column.type?.renderer);\n }\n};\n\nconst getDataType = (\n column: ColumnDescriptor,\n tableSchema: TableSchema\n): VuuColumnDataType => {\n const schemaColumn = tableSchema.columns.find(\n ({ name }) => name === column.name\n );\n if (schemaColumn) {\n return schemaColumn.serverDataType;\n } else {\n return column.serverDataType ?? \"string\";\n }\n};\n\nexport interface GridModel extends Omit<GridConfig, \"columns\"> {\n columns: KeyedColumnDescriptor[];\n}\n\nconst numericTypes = [\"int\", \"long\", \"double\"];\nconst getDefaultAlignment = (serverDataType?: VuuColumnDataType) =>\n serverDataType === undefined\n ? undefined\n : numericTypes.includes(serverDataType)\n ? \"right\"\n : \"left\";\n\nexport interface ColumnActionInit {\n type: \"init\";\n tableConfig: Omit<GridConfig, \"headings\">;\n dataSourceConfig?: DataSourceConfig;\n}\n\nexport interface ColumnActionHide {\n type: \"hideColumns\";\n columns: KeyedColumnDescriptor[];\n}\n\nexport interface ColumnActionShow {\n type: \"showColumns\";\n columns: KeyedColumnDescriptor[];\n}\nexport interface ColumnActionMove {\n type: \"moveColumn\";\n column: KeyedColumnDescriptor;\n moveBy?: 1 | -1;\n moveTo?: number;\n}\n\nexport interface ColumnActionPin {\n type: \"pinColumn\";\n column: ColumnDescriptor;\n pin?: PinLocation;\n}\nexport interface ColumnActionResize {\n type: \"resizeColumn\";\n column: KeyedColumnDescriptor;\n phase: \"begin\" | \"resize\" | \"end\";\n width?: number;\n}\n\nexport interface ColumnActionSetTableSchema {\n type: \"setTableSchema\";\n tableSchema: TableSchema;\n}\n\nexport interface ColumnActionUpdate {\n type: \"updateColumn\";\n column: ColumnDescriptor;\n}\n\nexport interface ColumnActionUpdateProp {\n align?: ColumnDescriptor[\"align\"];\n column: KeyedColumnDescriptor;\n hidden?: ColumnDescriptor[\"hidden\"];\n label?: ColumnDescriptor[\"label\"];\n resizing?: KeyedColumnDescriptor[\"resizing\"];\n type: \"updateColumnProp\";\n width?: ColumnDescriptor[\"width\"];\n}\n\nexport interface ColumnActionTableConfig extends DataSourceConfig {\n confirmed?: boolean;\n type: \"tableConfig\";\n}\n\n/**\n * PersistentColumnActions are those actions that require us to persist user changes across sessions\n */\nexport type PersistentColumnAction = ColumnActionPin | ColumnActionHide;\n\nexport type GridModelAction =\n | ColumnActionHide\n | ColumnActionInit\n | ColumnActionMove\n | ColumnActionPin\n | ColumnActionResize\n | ColumnActionSetTableSchema\n | ColumnActionShow\n | ColumnActionUpdate\n | ColumnActionUpdateProp\n | ColumnActionTableConfig;\n\nexport type GridModelReducer = Reducer<GridModel, GridModelAction>;\n\nexport type ColumnActionDispatch = (action: GridModelAction) => void;\n\nconst columnReducer: GridModelReducer = (state, action) => {\n info?.(`GridModelReducer ${action.type}`);\n switch (action.type) {\n case \"init\":\n return init(action);\n case \"moveColumn\":\n return moveColumn(state, action);\n case \"resizeColumn\":\n return resizeColumn(state, action);\n case \"setTableSchema\":\n return setTableSchema(state, action);\n case \"hideColumns\":\n return hideColumns(state, action);\n case \"showColumns\":\n return showColumns(state, action);\n case \"pinColumn\":\n return pinColumn(state, action);\n case \"updateColumnProp\":\n return updateColumnProp(state, action);\n case \"tableConfig\":\n return updateTableConfig(state, action);\n default:\n console.log(`unhandled action ${action.type}`);\n return state;\n }\n};\n\nexport const useTableModel = (\n tableConfig: Omit<GridConfig, \"headings\">,\n dataSourceConfig?: DataSourceConfig\n) => {\n const [state, dispatchColumnAction] = useReducer<\n GridModelReducer,\n InitialConfig\n >(columnReducer, { tableConfig, dataSourceConfig }, init);\n\n return {\n columns: state.columns,\n dispatchColumnAction,\n headings: state.headings,\n };\n};\n\ntype InitialConfig = {\n dataSourceConfig?: DataSourceConfig;\n tableConfig: Omit<GridConfig, \"headings\">;\n};\n\nfunction init({ dataSourceConfig, tableConfig }: InitialConfig): GridModel {\n const columns = tableConfig.columns.map(\n toKeyedColumWithDefaults(tableConfig)\n );\n const maybePinnedColumns = columns.some(isPinned)\n ? sortPinnedColumns(columns)\n : columns;\n const state = {\n columns: maybePinnedColumns,\n headings: getTableHeadings(maybePinnedColumns),\n };\n if (dataSourceConfig) {\n const { columns, ...rest } = dataSourceConfig;\n return updateTableConfig(state, {\n type: \"tableConfig\",\n ...rest,\n });\n } else {\n return state;\n }\n}\n\nconst getLabel = (\n label: string,\n columnFormatHeader?: \"uppercase\" | \"capitalize\"\n): string => {\n if (columnFormatHeader === \"uppercase\") {\n return label.toUpperCase();\n } else if (columnFormatHeader === \"capitalize\") {\n return label[0].toUpperCase() + label.slice(1).toLowerCase();\n }\n return label;\n};\n\nconst toKeyedColumWithDefaults =\n (options: Omit<GridConfig, \"headings\">) =>\n (\n column: ColumnDescriptor & { key?: number },\n index: number\n ): KeyedColumnDescriptor => {\n const { columnDefaultWidth = DEFAULT_COLUMN_WIDTH, columnFormatHeader } =\n options;\n const {\n align = getDefaultAlignment(column.serverDataType),\n key,\n name,\n label = name,\n width = columnDefaultWidth,\n ...rest\n } = column;\n\n const keyedColumnWithDefaults = {\n ...rest,\n align,\n CellRenderer: getCellRendererForColumn(column),\n label: getLabel(label, columnFormatHeader),\n key: key ?? index + KEY_OFFSET,\n name,\n originalIdx: index,\n valueFormatter: getValueFormatter(column),\n width: width,\n };\n\n if (isGroupColumn(keyedColumnWithDefaults)) {\n keyedColumnWithDefaults.columns = keyedColumnWithDefaults.columns.map(\n (col) => toKeyedColumWithDefaults(options)(col, col.key)\n );\n }\n\n return keyedColumnWithDefaults;\n };\n\nfunction moveColumn(\n state: GridModel,\n { column, moveBy, moveTo }: ColumnActionMove\n) {\n const { columns } = state;\n if (typeof moveBy === \"number\") {\n const idx = columns.indexOf(column);\n const newColumns = columns.slice();\n const [movedColumns] = newColumns.splice(idx, 1);\n newColumns.splice(idx + moveBy, 0, movedColumns);\n return {\n ...state,\n columns: newColumns,\n };\n } else if (typeof moveTo === \"number\") {\n const index = columns.indexOf(column);\n return {\n ...state,\n columns: moveItem(columns, index, moveTo),\n };\n }\n return state;\n}\n\nfunction hideColumns(state: GridModel, { columns }: ColumnActionHide) {\n if (columns.some((col) => col.hidden !== true)) {\n return columns.reduce<GridModel>((s, c) => {\n if (c.hidden !== true) {\n return updateColumnProp(s, {\n type: \"updateColumnProp\",\n column: c,\n hidden: true,\n });\n } else {\n return s;\n }\n }, state);\n } else {\n return state;\n }\n}\nfunction showColumns(state: GridModel, { columns }: ColumnActionShow) {\n if (columns.some((col) => col.hidden)) {\n return columns.reduce<GridModel>((s, c) => {\n if (c.hidden) {\n return updateColumnProp(s, {\n type: \"updateColumnProp\",\n column: c,\n hidden: false,\n });\n } else {\n return s;\n }\n }, state);\n } else {\n return state;\n }\n}\n\nfunction resizeColumn(\n state: GridModel,\n { column, phase, width }: ColumnActionResize\n) {\n const type = \"updateColumnProp\";\n const resizing = phase !== \"end\";\n\n switch (phase) {\n case \"begin\":\n case \"end\":\n return updateColumnProp(state, { type, column, resizing });\n case \"resize\":\n return updateColumnProp(state, { type, column, width });\n default:\n throw Error(`useTableModel.resizeColumn, invalid resizePhase ${phase}`);\n }\n}\n\nfunction setTableSchema(\n state: GridModel,\n { tableSchema }: ColumnActionSetTableSchema\n) {\n const { columns } = state;\n if (columns.some(columnWithoutDataType)) {\n const cols = columns.map((column) => {\n const serverDataType = getDataType(column, tableSchema);\n return {\n ...column,\n align: column.align ?? getDefaultAlignment(serverDataType),\n serverDataType,\n };\n });\n\n return {\n ...state,\n columns: cols,\n };\n } else {\n return state;\n }\n}\n\nfunction pinColumn(state: GridModel, action: ColumnActionPin) {\n let { columns } = state;\n const { column, pin } = action;\n const targetColumn = columns.find((col) => col.name === column.name);\n if (targetColumn) {\n columns = replaceColumn(columns, { ...targetColumn, pin });\n columns = sortPinnedColumns(columns);\n return {\n ...state,\n columns,\n };\n } else {\n return state;\n }\n}\nfunction updateColumnProp(state: GridModel, action: ColumnActionUpdateProp) {\n let { columns } = state;\n const { align, column, hidden, label, resizing, width } = action;\n const targetColumn = columns.find((col) => col.name === column.name);\n if (targetColumn) {\n if (align === \"left\" || align === \"right\") {\n columns = replaceColumn(columns, { ...targetColumn, align });\n }\n if (typeof label === \"string\") {\n columns = replaceColumn(columns, { ...targetColumn, label });\n }\n if (typeof resizing === \"boolean\") {\n columns = replaceColumn(columns, { ...targetColumn, resizing });\n }\n if (typeof hidden === \"boolean\") {\n columns = replaceColumn(columns, { ...targetColumn, hidden });\n }\n if (typeof width === \"number\") {\n columns = replaceColumn(columns, { ...targetColumn, width });\n }\n }\n return {\n ...state,\n columns,\n };\n}\n\nfunction updateTableConfig(\n state: GridModel,\n { columns, confirmed, filter, groupBy, sort }: ColumnActionTableConfig\n) {\n const hasColumns = columns && columns.length > 0;\n const hasGroupBy = groupBy !== undefined;\n const hasFilter = typeof filter?.filter === \"string\";\n const hasSort = sort && sort.sortDefs.length > 0;\n\n //TODO check if just confirmed has changed\n\n let result = state;\n\n if (hasColumns) {\n result = {\n ...state,\n columns: columns.map((colName, index) => {\n const columnName = getColumnName(colName);\n const key = index + KEY_OFFSET;\n const col = findColumn(result.columns, columnName);\n if (col) {\n if (col.key === key) {\n return col;\n } else {\n return {\n ...col,\n key,\n };\n }\n }\n throw Error(`useTableModel column ${colName} not found`);\n }),\n };\n }\n\n if (hasGroupBy) {\n result = {\n ...state,\n columns: applyGroupByToColumns(result.columns, groupBy, confirmed),\n };\n }\n\n if (hasSort) {\n result = {\n ...state,\n columns: applySortToColumns(result.columns, sort),\n };\n }\n\n if (hasFilter) {\n result = {\n ...state,\n columns: applyFilterToColumns(result.columns, filter),\n };\n } else if (result.columns.some(isFilteredColumn)) {\n result = {\n ...state,\n columns: stripFilterFromColumns(result.columns),\n };\n }\n\n return result;\n}\n\nfunction replaceColumn(\n state: KeyedColumnDescriptor[],\n column: KeyedColumnDescriptor\n) {\n return state.map((col) => (col.name === column.name ? column : col));\n}\n", "import { useCallback, useRef } from \"react\";\n\nexport interface ScrollRequestEnd {\n type: \"scroll-end\";\n direction: \"home\" | \"end\";\n}\n\nexport interface ScrollRequestPage {\n type: \"scroll-page\";\n direction: \"up\" | \"down\";\n}\n\nexport interface ScrollRequestDistance {\n type: \"scroll-distance\";\n distance: number;\n}\n\nexport type ScrollRequest =\n | ScrollRequestPage\n | ScrollRequestDistance\n | ScrollRequestEnd;\n\nexport type ScrollRequestHandler = (request: ScrollRequest) => void;\n\nconst getPctScroll = (container: HTMLElement) => {\n const { scrollLeft, scrollTop } = container;\n const { clientHeight, clientWidth, scrollHeight, scrollWidth } = container;\n const pctScrollLeft = scrollLeft / (scrollWidth - clientWidth);\n const pctScrollTop = scrollTop / (scrollHeight - clientHeight);\n return [pctScrollLeft, pctScrollTop];\n};\n\ninterface CallbackRefHookProps<T = HTMLElement> {\n onAttach?: (el: T) => void;\n onDetach: (el: T) => void;\n label?: string;\n}\n\nconst useCallbackRef = <T = HTMLElement>({\n onAttach,\n onDetach,\n}: CallbackRefHookProps<T>) => {\n const ref = useRef<T | null>(null);\n const callbackRef = useCallback(\n (el: T | null) => {\n if (el) {\n ref.current = el;\n onAttach?.(el);\n } else if (ref.current) {\n const { current: originalRef } = ref;\n ref.current = el;\n onDetach?.(originalRef);\n }\n },\n [onAttach, onDetach]\n );\n return callbackRef;\n};\n\nexport interface TableScrollHookProps {\n maxScrollLeft: number;\n maxScrollTop: number;\n onHorizontalScroll?: (scrollLeft: number) => void;\n onVerticalScroll?: (scrollTop: number, pctScrollTop: number) => void;\n}\n\nexport const useTableScroll = ({\n // height,\n // width,\n // contentHeight,\n // contentWidth,\n\n maxScrollLeft,\n maxScrollTop,\n onHorizontalScroll,\n onVerticalScroll,\n}: TableScrollHookProps) => {\n const contentContainerScrolledRef = useRef(false);\n\n // console.log(`useTableScroll\n // viewport : ${width} x ${height}\n // content ${contentWidth} x ${contentHeight}\n // `);\n\n const scrollPosRef = useRef({ scrollTop: 0, scrollLeft: 0 });\n const scrollbarContainerRef = useRef<HTMLDivElement | null>(null);\n const contentContainerRef = useRef<HTMLDivElement | null>(null);\n\n const handleScrollbarContainerScroll = useCallback(() => {\n const { current: contentContainer } = contentContainerRef;\n const { current: scrollbarContainer } = scrollbarContainerRef;\n const { current: contentContainerScrolled } = contentContainerScrolledRef;\n if (contentContainerScrolled) {\n contentContainerScrolledRef.current = false;\n } else if (contentContainer && scrollbarContainer) {\n const [pctScrollLeft, pctScrollTop] = getPctScroll(scrollbarContainer);\n const rootScrollLeft = Math.round(pctScrollLeft * maxScrollLeft);\n const rootScrollTop = Math.round(pctScrollTop * maxScrollTop);\n contentContainer.scrollTo({\n left: rootScrollLeft,\n top: rootScrollTop,\n behavior: \"auto\",\n });\n }\n }, [maxScrollLeft, maxScrollTop]);\n\n const handleContentContainerScroll = useCallback(() => {\n const { current: contentContainer } = contentContainerRef;\n const { current: scrollbarContainer } = scrollbarContainerRef;\n const { current: scrollPos } = scrollPosRef;\n\n if (contentContainer && scrollbarContainer) {\n const { scrollLeft, scrollTop } = contentContainer;\n const [pctScrollLeft, pctScrollTop] = getPctScroll(contentContainer);\n contentContainerScrolledRef.current = true;\n\n scrollbarContainer.scrollLeft = Math.round(pctScrollLeft * maxScrollLeft);\n scrollbarContainer.scrollTop = Math.round(pctScrollTop * maxScrollTop);\n\n if (scrollPos.scrollTop !== scrollTop) {\n scrollPos.scrollTop = scrollTop;\n onVerticalScroll?.(scrollTop, pctScrollTop);\n }\n if (scrollPos.scrollLeft !== scrollLeft) {\n scrollPos.scrollLeft = scrollLeft;\n onHorizontalScroll?.(scrollLeft);\n }\n }\n }, [maxScrollLeft, maxScrollTop, onHorizontalScroll, onVerticalScroll]);\n\n const handleAttachScrollbarContainer = useCallback(\n (el: HTMLDivElement) => {\n scrollbarContainerRef.current = el;\n el.addEventListener(\"scroll\", handleScrollbarContainerScroll, {\n passive: true,\n });\n },\n [handleScrollbarContainerScroll]\n );\n\n const handleDetachScrollbarContainer = useCallback(\n (el: HTMLDivElement) => {\n scrollbarContainerRef.current = null;\n el.removeEventListener(\"scroll\", handleScrollbarContainerScroll);\n },\n [handleScrollbarContainerScroll]\n );\n\n const handleAttachContentContainer = useCallback(\n (el: HTMLDivElement) => {\n contentContainerRef.current = el;\n el.addEventListener(\"scroll\", handleContentContainerScroll, {\n passive: true,\n });\n },\n [handleContentContainerScroll]\n );\n\n const handleDetachContentContainer = useCallback(\n (el: HTMLDivElement) => {\n contentContainerRef.current = null;\n el.removeEventListener(\"scroll\", handleContentContainerScroll);\n },\n [handleContentContainerScroll]\n );\n\n const contentContainerCallbackRef = useCallbackRef({\n onAttach: handleAttachContentContainer,\n onDetach: handleDetachContentContainer,\n });\n\n const scrollbarContainerCallbackRef = useCallbackRef({\n onAttach: handleAttachScrollbarContainer,\n onDetach: handleDetachScrollbarContainer,\n });\n\n const requestScroll: ScrollRequestHandler = useCallback((scrollRequest) => {\n const { current: scrollbarContainer } = contentContainerRef;\n if (scrollbarContainer) {\n contentContainerScrolledRef.current = false;\n if (scrollRequest.type === \"scroll-page\") {\n const { clientHeight, scrollLeft, scrollTop } = scrollbarContainer;\n const { direction } = scrollRequest;\n const scrollBy = direction === \"down\" ? clientHeight : -clientHeight;\n const newScrollTop = Math.min(\n Math.max(0, scrollTop + scrollBy),\n maxScrollTop\n );\n scrollbarContainer.scrollTo({\n top: newScrollTop,\n left: scrollLeft,\n behavior: \"auto\",\n });\n } else if (scrollRequest.type === \"scroll-end\") {\n const { direction } = scrollRequest;\n const scrollTo = direction === \"end\" ? maxScrollTop : 0;\n scrollbarContainer.scrollTo({\n top: scrollTo,\n left: scrollbarContainer.scrollLeft,\n behavior: \"auto\",\n });\n }\n }\n }, []);\n\n return {\n /** Ref to be assigned to ScrollbarContainer */\n scrollbarContainerRef: scrollbarContainerCallbackRef,\n /** Ref to be assigned to ContentContainer */\n contentContainerRef: contentContainerCallbackRef,\n /** Scroll the table */\n requestScroll,\n };\n};\n", "import { KeyedColumnDescriptor } from \"@vuu-ui/vuu-datagrid-types\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { RowAtPositionFunc } from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useRef } from \"react\";\nimport { ViewportMeasurements } from \"@vuu-ui/vuu-table\";\n\nexport interface VirtualViewportHookProps {\n columns: KeyedColumnDescriptor[];\n getRowAtPosition: RowAtPositionFunc;\n setRange: (range: VuuRange) => void;\n viewportMeasurements: ViewportMeasurements;\n}\n\nexport const useVirtualViewport = ({\n columns,\n getRowAtPosition,\n setRange,\n viewportMeasurements,\n}: VirtualViewportHookProps) => {\n const firstRowRef = useRef<number>(-1);\n const { contentWidth, rowCount: viewportRowCount } = viewportMeasurements;\n\n const handleVerticalScroll = useCallback(\n (scrollTop: number) => {\n const firstRow = getRowAtPosition(scrollTop);\n if (firstRow !== firstRowRef.current) {\n firstRowRef.current = firstRow;\n setRange({ from: firstRow, to: firstRow + viewportRowCount });\n }\n },\n [getRowAtPosition, setRange, viewportRowCount]\n );\n\n return {\n onVerticalScroll: handleVerticalScroll,\n };\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Button", "getColumnStyle", "isGroupColumn", "metadataKeys", "notHidden", "useCallback", "useMemo", "metadataKeys", "cx", "memo", "useCallback", "useCallback", "jsx", "useCallback", "useMemo", "useRef", "useCallback", "useMemo", "useRef", "start", "useCallback", "jsx", "Draggable", "useCallback", "useRef", "useMemo", "useCallback", "useRef", "useCallback", "useMemo", "useCallback", "useRef", "useState", "useCallback", "useMemo", "useMemo", "useCallback", "dropZone", "jsx", "NOT_OVERFLOWED", "NOT_HIDDEN", "useRef", "useState", "useCallback", "dropZone", "useCallback", "useRef", "useState", "useCallback", "useRef", "useRef", "useCallback", "jsx", "useRef", "useState", "useCallback", "useCallback", "useLayoutEffect", "forwardRef", "useRef", "jsx", "forwardRef", "EditableLabel", "useRef", "useCallback", "value", "useLayoutEffect", "cx", "componentName", "useControlled", "useCallback", "jsx", "classBase", "useControlled", "useCallback", "jsx", "jsxs", "classBase", "cx", "forwardRef", "jsx", "forwardRef", "Component", "React", "isValidElement", "useLayoutEffect", "useMemo", "useRef", "cx", "jsx", "classBase", "cx", "jsx", "r", "path", "Stack", "forwardRef", "jsx", "forwardRef", "DraggableLayout", "useForkRef", "cx", "forwardRef", "React", "useCallback", "useMemo", "useRef", "useState", "cx", "jsx", "classBase", "cx", "cx", "React", "useCallback", "useRef", "useState", "jsx", "React", "Splitter", "useRef", "useState", "useCallback", "cx", "React", "breakPoints", "useRef", "useState", "useMemo", "React", "useCallback", "index", "jsx", "classBase", "forwardRef", "Flexbox", "breakPoints", "cx", "useForkRef", "useCallback", "useCallback", "useContext", "useRef", "useState", "React", "uuid", "React", "uuid", "React", "cloneElement", "useCallback", "useCallback", "cloneElement", "React", "React", "React", "uuid", "React", "createContext", "useCallback", "useRef", "jsx", "useContext", "jsx", "FlexboxLayout", "useCallback", "useForkRef", "cx", "forwardRef", "useMemo", "useCallback", "useEffect", "useRef", "useState", "useCallback", "useLayoutEffect", "useRef", "dimensions", "useRef", "useCallback", "useLayoutEffect", "EMPTY_ARRAY", "useState", "useRef", "useCallback", "useEffect", "getUniqueId", "cloneElement", "isValidElement", "useCallback", "useMemo", "useRef", "useRef", "useMemo", "isValidElement", "buildContent", "useCallback", "children", "dimension", "cloneElement", "getUniqueId", "jsx", "classBase", "forwardRef", "FluidGrid", "breakPoints", "useMemo", "cx", "useForkRef", "jsx", "FluidGridLayout", "Button", "classnames", "cx", "React", "useRef", "useState", "useCallback", "useState", "useState", "useCallback", "_a", "useForkRef", "useId", "cx", "React", "forwardRef", "useCallback", "useMemo", "useRef", "useState", "useCallback", "useMemo", "useMemo", "useCallback", "title", "useCallback", "useRef", "React", "useContext", "jsx", "jsxs", "classBase", "getProps", "forwardRef", "View", "Header", "useId", "useRef", "useState", "useCallback", "props", "React", "useMemo", "cx", "useForkRef", "jsx", "useRef", "useState", "classBase", "classnames", "React", "Button", "cx", "cx", "React", "forwardRef", "useCallback", "useMemo", "useRef", "useState", "useState", "useRef", "useCallback", "useMemo", "resizeObserver", "jsx", "jsxs", "classBase", "React", "cx", "forwardRef", "OverflowContainer", "uuid", "cx", "cloneElement", "jsx", "cx", "ViewProps", "classBase", "props", "uuid", "cloneElement", "cx", "React", "forwardRef", "useCallback", "jsx", "jsxs", "classBase", "React", "forwardRef", "Stack", "TabstripProps", "useCallback", "_a", "child", "cx", "useId", "React", "useCallback", "useRef", "jsx", "useRef", "useId", "useCallback", "path", "React", "id", "React", "useState", "jsx", "jsxs", "Input", "jsx", "jsxs", "React", "cx", "jsx", "Button", "cx", "React", "useMemo", "useRef", "useCallback", "useRef", "isValidNumber", "MEASURES", "useCallback", "useMemo", "useRef", "_a", "_b", "useControlled", "useCallback", "useRef", "useState", "useRef", "useState", "useControlled", "useCallback", "useControlled", "useCallback", "selectItem", "useRef", "useCallback", "jsx", "jsxs", "classBase", "useRef", "cx", "useMemo", "React", "Button", "useForkRef", "cx", "forwardRef", "useCallback", "useRef", "PopupMenu", "useMemo", "cx", "jsx", "classBase", "useMemo", "PopupMenu", "cx", "jsx", "jsxs", "classBase", "forwardRef", "Tab", "useRef", "useForkRef", "useCallback", "getLabel", "editable", "cx", "useForkRef", "useId", "cx", "forwardRef", "useRef", "useCallback", "useMemo", "count", "isExpanded", "flattenedSource", "isLeaf", "useCallback", "useRef", "useControlled", "defaultSelectionKeys", "useSelection", "id", "useCallback", "useEffect", "useLayoutEffect", "useRef", "useCallback", "useEffect", "useRef", "observedMap", "getTargetSize", "resizeObserver", "observedMap", "getTargetSize", "useResizeObserver", "dimensions", "useRef", "useCallback", "useEffect", "useRef", "useCallback", "useEffect", "useLayoutEffect", "useResizeObserver", "useCallback", "useRef", "useCallback", "useMemo", "useRef", "useControlled", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "isNavigationKey", "navigationKeys", "nextItemIdx", "ArrowUp", "ArrowLeft", "useKeyboardNavigation", "useMemo", "ArrowDown", "useControlled", "useCallback", "useRef", "isNavigationKey", "useRef", "useState", "useRef", "useState", "useCallback", "useRef", "NO_HANDLERS", "useRef", "useCallback", "ArrowRight", "ArrowLeft", "useCallback", "useCallback", "ArrowLeft", "EMPTY_ARRAY", "useRef", "useKeyboardNavigation", "useSelection", "useCallback", "jsx", "jsxs", "createElement", "classBase", "forwardRef", "Tree", "useId", "useRef", "selected", "id", "cx", "useForkRef", "cx", "memo", "useCallback", "useRef", "useState", "jsx", "memo", "useRef", "useState", "useCallback", "cx", "getColumnStyle", "metadataKeys", "useCallback", "jsx", "jsxs", "metadataKeys", "useCallback", "getColumnStyle", "isLeaf", "jsx", "jsxs", "metadataKeys", "classBase", "memo", "isExpanded", "cx", "useCallback", "cx", "useRef", "useCallback", "useRef", "jsx", "jsxs", "classBase", "cx", "useRef", "cx", "useCallback", "useRef", "cx", "classBase", "cx", "useContextMenu", "cx", "useCallback", "jsx", "useCallback", "jsx", "cx", "jsx", "jsxs", "classBase", "useRef", "useContextMenu", "useCallback", "cx", "jsx", "jsxs", "classBase", "metadataKeys", "useCallback", "useMemo", "notHidden", "getColumnStyle", "isGroupColumn", "buildColumnMap", "isJsonGroup", "metadataKeys", "moveItem", "useCallback", "useEffect", "useMemo", "useRef", "useState", "metadataKeys", "useCallback", "useEffect", "useMemo", "useRef", "useState", "SELECTED", "useCallback", "useEffect", "useState", "useCallback", "useEffect", "useState", "ConnectionManager", "useCallback", "IterMode", "Tree", "TreeNode", "start", "r", "children", "positions", "node", "buffer", "data", "length", "lookAhead", "pair", "nodeSize", "from", "to", "r", "Stack", "cx", "start", "parser", "i", "Recover", "r", "start", "Safety", "Tree", "parser", "Rec", "Stack", "r", "i", "info", "metadataKeys", "useCallback", "KEY", "metadataKeys", "useCallback", "useEffect", "useState", "getFullRange", "metadataKeys", "WindowRange", "useCallback", "useEffect", "useMemo", "useRef", "useState", "SELECTED", "range", "useCallback", "useRef", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "union", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "actionKeys", "focusKeys", "arrowLeftRightKeys", "Home", "End", "ArrowDown", "ArrowLeft", "ArrowRight", "ArrowUp", "functionKeys", "specialKeys", "union", "isNavigationKey", "ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft", "useKeyboardNavigation", "useRef", "useCallback", "_a", "Home", "End", "isNavigationKey", "useMemo", "useLayoutEffect", "useEffect", "isValidNumber", "useCallback", "useMemo", "useRef", "useState", "useCallback", "useEffect", "useRef", "observedMap", "getTargetSize", "resizeObserver", "useResizeObserver", "dimensions", "useRef", "useCallback", "useEffect", "isValidNumber", "useRef", "useState", "useMemo", "useCallback", "useResizeObserver", "metadataKeys", "useCallback", "useRef", "IDX", "useSelection", "isGroupColumn", "metadataKeys", "moveItem", "pinColumn", "columns", "useCallback", "useRef", "maxScrollLeft", "maxScrollTop", "useCallback", "useMemo", "useRef", "useCallback", "useEffect", "useMemo", "useRef", "useState", "visibleColumns", "KEY", "IS_EXPANDED", "IS_LEAF", "metadataKeys", "useState", "useRef", "useCallback", "useSelection", "column", "isJsonGroup", "row", "useKeyboardNavigation", "columns", "moveItem", "useEffect", "config", "useMemo", "_a", "buildColumnMap", "cx", "jsx", "jsxs", "classBase", "cx", "Button", "cx", "metadataKeys", "registerComponent", "jsx", "jsxs", "classBase", "IS_EXPANDED", "KEY", "metadataKeys", "cx", "registerComponent", "ContextMenuProvider", "metadataKeys", "useEffect", "useCallback", "useRef", "getColumnStyle", "cx", "useMemo", "classBase", "isHeader", "useContextMenu", "cx", "useCallback", "useRef", "useState", "jsx", "getPosition", "useRef", "useState", "useContextMenu", "useCallback", "cx", "jsx", "jsxs", "useRef", "classBase", "useCallback", "isGroupColumn", "metadataKeys", "cx", "memo", "useCallback", "jsx", "TableCell", "getGroupValueAndOffset", "metadataKeys", "useCallback", "jsx", "jsxs", "IS_LEAF", "metadataKeys", "TableGroupCell", "getGroupValueAndOffset", "useCallback", "isLeaf", "jsx", "createElement", "IDX", "IS_EXPANDED", "SELECTED", "metadataKeys", "classBase", "Row", "memo", "isExpanded", "useCallback", "cx", "isGroupColumn", "TableGroupCell", "TableCell", "usePopupContextMenu", "applySort", "buildColumnMap", "visibleColumnAtIndex", "useCallback", "useEffect", "useMemo", "useState", "useCallback", "useMemo", "useState", "useDataSource", "useMemo", "useRef", "applyFilterToColumns", "applyGroupByToColumns", "applySortToColumns", "findColumn", "getCellRenderer", "getColumnName", "getTableHeadings", "getValueFormatter", "isFilteredColumn", "isGroupColumn", "isPinned", "isTypeDescriptor", "metadataKeys", "sortPinnedColumns", "stripFilterFromColumns", "useReducer", "DEFAULT_COLUMN_WIDTH", "KEY_OFFSET", "columnWithoutDataType", "getCellRendererForColumn", "numericTypes", "getDefaultAlignment", "columnReducer", "init", "moveColumn", "resizeColumn", "setTableSchema", "hideColumns", "showColumns", "pinColumn", "updateColumnProp", "updateTableConfig", "useTableModel", "toKeyedColumWithDefaults", "columns", "getLabel", "useCallback", "useRef", "getPctScroll", "useCallbackRef", "useTableScroll", "useCallback", "useRef", "useVirtualViewport", "useTable", "useState", "useMemo", "useTableModel", "buildColumnMap", "useEffect", "config", "useDataSource", "useCallback", "useVirtualViewport", "useTableScroll", "usePopupContextMenu", "columnMap", "applySort", "visibleColumnAtIndex", "useSelection", "jsx", "jsxs", "classBase", "IDX", "RENDER_IDX", "metadataKeys", "useTable", "getStyle", "useEffect", "ContextMenuProvider", "data", "Row"]
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["useCallback", "useRef", "jsx", "NOOP", "baseClass", "ColumnResizer", "onDrag", "onDragEnd", "onDragStart", "position", "useRef", "onMouseMove", "useCallback", "e", "x", "moveBy", "onMouseUp", "handleMouseDown", "isNumericColumn", "buildContextMenuDescriptors", "dataSource", "location", "options", "descriptors", "buildSortMenuItems", "buildGroupMenuItems", "buildAggregationMenuItems", "buildColumnDisplayMenuItems", "column", "filter", "colIsOnlyFilter", "sortDefs", "menuItems", "hasSort", "name", "label", "pinColumn", "pinLocation", "pinLeft", "pinFloating", "pinRight", "pin", "groupBy", "removeColumnFromFilter", "addGroupColumn", "addSortColumn", "AggregationType", "setAggregations", "setSortColumn", "removeFilterColumn", "dataSourceFilter", "column", "filterStruct", "filter", "Average", "Count", "Distinct", "High", "Low", "Sum", "useTableContextMenu", "dataSource", "onPersistentColumnOperation", "action", "gridOptions", "name", "ContextMenuProvider", "Button", "useIdMemo", "buildColumnMap", "getColumnStyle", "isGroupColumn", "metadataKeys", "notHidden", "visibleColumnAtIndex", "useCallback", "useMemo", "isGroupColumn", "isJsonColumn", "isJsonGroup", "metadataKeys", "notHidden", "cx", "memo", "useCallback", "getColumnStyle", "metadataKeys", "createContext", "useCallback", "useContext", "useMemo", "jsx", "NO_DRAG_CONTEXT", "unconfiguredRegistrationCall", "DragDropContext", "useDragDropProvider", "id", "_a", "_b", "dragSources", "dropTargets", "registerDragDropParty", "useContext", "DragDropContext", "isDragSource", "isDropTarget", "NO_DRAG_CONTEXT", "useCallback", "useMemo", "useRef", "useState", "useCallback", "useMemo", "useRef", "LEFT_RIGHT", "TOP_BOTTOM", "NOT_OVERFLOWED", "NOT_HIDDEN", "cloneElement", "element", "dolly", "measureElementSizeAndPosition", "dimension", "includeAutoMargin", "pos", "size", "position", "padEnd", "padStart", "style", "start", "end", "marginStart", "marginEnd", "minWidth", "flexBasis", "DIMENSIONS", "dimensions", "orientation", "getItemById", "measuredItems", "id", "result", "item", "removeDraggedItem", "index", "i", "measureDropTargets", "container", "itemQuery", "viewportRange", "draggedItemId", "_a", "dragThresholds", "DIMENSION", "children", "itemCount", "isLast", "dataIndex", "getIndexOfDraggedItem", "dropTargets", "d", "mutateDropTargetsSwitchDropTargetPosition", "direction", "indexOfDraggedItem", "indexOfTarget", "draggedItem", "targetItem", "diff", "draggedStart", "draggedEnd", "newDraggedItem", "targetStart", "targetEnd", "newTargetItem", "getNextDropTarget", "mouseMoveDirection", "len", "leadingEdge", "dropTarget", "constrainRect", "targetRect", "constraintRect", "height", "left", "top", "width", "constrainedHeight", "constrainedWidth", "moveItem", "items", "fromIndex", "toIndex", "newItems", "offset", "useForkRef", "r", "e", "t", "f", "n", "clsx", "forwardRef", "useCallback", "Portal", "jsx", "makeClassNames", "classNames", "className", "Draggable", "forwardRef", "wrapperClassName", "element", "onTransitionEnd", "style", "scale", "forwardedRef", "callbackRef", "useCallback", "el", "forkedRef", "useForkRef", "Portal", "clsx", "createDragSpacer", "transitioning", "spacer", "createDropIndicatorPosition", "createDropIndicator", "useDragDisplacers", "animationFrame", "useRef", "transitioning", "spacers", "useMemo", "createDragSpacer", "clearSpacers", "useCallback", "spacer", "animateTransition", "size", "propertyName", "spacer1", "spacer2", "cancelAnyPendingAnimation", "displaceItem", "dropTargets", "dropTarget", "useTransition", "direction", "orientation", "mutateDropTargetsSwitchDropTargetPosition", "displaceLastItem", "useDragDropNaturalMovement", "draggableRef", "onDrop", "orientation", "containerRef", "itemQuery", "selected", "viewportRange", "dragDirectionRef", "useRef", "isScrollable", "dragPosRef", "measuredDropTargets", "overflowMenuShowingRef", "showOverflow", "setShowOverflow", "useState", "clearSpacers", "displaceItem", "displaceLastItem", "useDragDisplacers", "draggedItemRef", "fullItemQuery", "NOT_OVERFLOWED", "NOT_HIDDEN", "indexOf", "dropTarget", "d", "rangeRef", "handleScrollStart", "useCallback", "handleScrollStop", "scrollDirection", "_scrollPos", "atEnd", "container", "draggedItem", "measureDropTargets", "size", "midPos", "dropTargets", "getNextDropTarget", "nextInsertPos", "nextDropTarget", "beginDrag", "evt", "dragElement", "SCROLL_SIZE", "CLIENT_SIZE", "dimensions", "draggedItemId", "scrollSize", "clientSize", "indexOfDraggedItem", "getIndexOfDraggedItem", "showPopup", "hidePopup", "useMemo", "popupShowing", "button", "drag", "dragPos", "mouseMoveDirection", "overflowIndicator", "drop", "_a", "scrollTop", "useCallback", "useRef", "useState", "useCallback", "useMemo", "useDropIndicator", "spacer", "useMemo", "createDropIndicatorPosition", "clearSpacer", "useCallback", "dropTarget", "dropZone", "jsx", "NOT_OVERFLOWED", "NOT_HIDDEN", "useDragDropIndicator", "draggableRef", "onDrop", "orientation", "containerRef", "itemQuery", "selected", "viewportRange", "dragDirectionRef", "useRef", "dropIndicatorRef", "dropTargetRef", "dropZoneRef", "isScrollable", "dragPosRef", "measuredDropTargets", "overflowMenuShowingRef", "showOverflow", "setShowOverflow", "useState", "dropIndicator", "setDropIndicator", "clearSpacer", "positionDropIndicator", "useDropIndicator", "draggedItemRef", "fullItemQuery", "indexOf", "dropTarget", "d", "reposition", "distance", "indexShift", "rangeRef", "handleScrollStart", "useCallback", "handleScrollStop", "scrollDirection", "_scrollPos", "atEnd", "container", "draggedItem", "measureDropTargets", "size", "midPos", "dropTargets", "nextDropTarget", "getNextDropTarget", "beginDrag", "evt", "dragElement", "SCROLL_SIZE", "CLIENT_SIZE", "dimensions", "draggedItemId", "scrollSize", "clientSize", "getItemById", "targetIndex", "removeDraggedItem", "range", "i", "dropZone", "dropIndicatorPosition", "top", "left", "width", "dropIndicatorRect", "Draggable", "createDropIndicator", "drag", "dragPos", "mouseMoveDirection", "currentDropTarget", "START", "drop", "fromIndex", "dropBefore", "originalDropTargetIndex", "currentDropTargetIndex", "useCallback", "useLayoutEffect", "useRef", "useState", "useCallback", "useRef", "useAutoScroll", "containerRef", "onScrollingStopped", "orientation", "scrollTimer", "useRef", "isScrolling", "scrollPosRef", "lastScrollDirectionRef", "stopScrolling", "useCallback", "atEnd", "startScrolling", "direction", "scrollRate", "scrollUnit", "container", "SCROLL_POS", "SCROLL_SIZE", "CLIENT_SIZE", "dimensions", "scrollPos", "scrollSize", "clientSize", "maxScroll", "nextScroll", "jsx", "NULL_DRAG_DROP_RESULT", "UNBOUNDED", "noDragDrop", "dragThreshold", "getDraggableElement", "el", "query", "isOverflowElement", "element", "getLastElement", "container", "itemQuery", "fullItemQuery", "NOT_OVERFLOWED", "lastElement", "useDragDropNext", "allowDragDrop", "containerRef", "draggableClassName", "onDragStart", "onDrop", "onDropSettle", "orientation", "dragDropProps", "dragBoundaries", "useRef", "draggableStatus", "setDraggableStatus", "useState", "draggableRef", "dragElementRef", "mouseDownTimer", "isScrollableRef", "mouseOffsetRef", "mousePosRef", "startPosRef", "settlingItemRef", "dropPosRef", "dropIndexRef", "handleScrollStopRef", "isDragSource", "isDropTarget", "register", "useDragDropProvider", "terminateDrag", "useCallback", "_a", "toIndex", "droppedItem", "status", "getScrollDirection", "mousePos", "POS", "SCROLL_POS", "SCROLL_SIZE", "CLIENT_SIZE", "dimensions", "scrollPos", "scrollSize", "clientSize", "maxScroll", "canScrollFwd", "viewportEnd", "bwd", "fwd", "useDragDropHook", "useDragDropNaturalMovement", "useDragDropIndicator", "onScrollingStopped", "scrollDirection", "atEnd", "isScrolling", "startScrolling", "stopScrolling", "useAutoScroll", "handleDrop", "fromIndex", "beginDrag", "drag", "drop", "handleScrollStart", "handleScrollStop", "dragResult", "dragMouseMoveHandler", "evt", "CLIENT_POS", "CONTRA_CLIENT_POS", "CONTRA_POS", "clientX", "clientY", "clientPos", "clientContraPos", "lastClientPos", "lastClientContraPos", "dragDistance", "dragPosX", "dragPosY", "mouseMoveDirection", "dragPos", "renderDragPos", "START", "dragMouseUpHandler", "dragStart", "target", "dragElement", "CONTRA", "CONTRA_END", "DIMENSION", "END", "lastItemIsOverflowIndicator", "containerRect", "draggableRect", "draggableSize", "lastItemStart", "lastItemEnd", "index", "Draggable", "cloneElement", "constrainRect", "preDragMouseMoveHandler", "preDragMouseUpHandler", "mouseDownHandler", "settlingItem", "useLayoutEffect", "dropPos", "targetTop", "targetLeft", "currentTop", "currentLeft", "useCallback", "useLayoutEffect", "forwardRef", "useRef", "Input", "useControlled", "jsx", "classBase", "EditableLabel", "forwardRef", "classNameProp", "defaultEditing", "defaultValue", "editingProp", "onChange", "onEnterEditMode", "onExitEditMode", "valueProp", "restProps", "forwardedRef", "inputRef", "useRef", "editingRef", "value", "setValue", "useControlled", "editing", "_setEditing", "setEditing", "useCallback", "initialValue", "useLayoutEffect", "enterEditMode", "exitEditMode", "cancelEdit", "allowDeactivation", "originalValue", "handleChange", "evt", "handleDoubleClick", "handleBlur", "handleKeyDown", "className", "clsx", "Input", "partition", "cx", "_containers", "_views", "ComponentRegistry", "registerComponent", "componentName", "component", "type", "ComponentRegistry", "_containers", "_views", "Button", "useControlled", "cx", "useCallback", "jsx", "jsxs", "classBase", "sizeAttribute", "value", "getStyle", "styleProp", "sizeOpen", "sizeClosed", "hasSizeOpen", "hasSizeClosed", "Drawer", "children", "classNameProp", "clickToOpen", "defaultOpen", "openProp", "position", "inline", "onClick", "peekaboo", "toggleButton", "props", "open", "setOpen", "useControlled", "className", "cx", "toggleDrawer", "useCallback", "style", "handleClick", "renderToggleButton", "Button", "Drawer_default", "jsx", "jsxs", "isDrawer", "component", "Drawer_default", "isVertical", "position", "DockLayout", "props", "children", "classNameProp", "id", "style", "classBase", "drawers", "content", "partition", "verticalDrawers", "horizontalDrawers", "orientation", "className", "cx", "registerComponent", "DockLayout", "forwardRef", "jsx", "Component", "forwardRef", "resizeable", "props", "ref", "Component_default", "registerComponent", "React", "isValidElement", "NO_PROPS", "getProp", "component", "propName", "_a", "props", "getProps", "Children", "isValidElement", "useLayoutEffect", "useMemo", "useRef", "EMPTY_ARRAY", "vuuComponentIdCount", "asReactElements", "children", "isArray", "count", "useLayoutEffectSkipFirst", "func", "deps", "goodToGo", "useId", "id", "positionValues", "RelativeDropPosition", "Position", "_position", "str", "NORTH", "SOUTH", "EAST", "WEST", "HEADER", "CENTRE", "north", "south", "east", "west", "positionValues", "eastwest", "northsouth", "PopupService", "cx", "jsx", "computeMenuPosition", "dropTarget", "offsetTop", "offsetLeft", "pos", "box", "menuOffset", "classBase", "DropMenu", "className", "onHover", "orientation", "dropTargets", "cx", "target", "jsx", "_multiDropOptions", "_hoverDropTarget", "_shiftedTab", "onHoverDropTarget", "dropTarget", "start", "x", "y", "point", "pathFromPoints", "p1", "points", "pathFromGuideLines", "guideLines", "x1", "y1", "x2", "y2", "x3", "y3", "x4", "y4", "insertSVGRoot", "root", "container", "DropTargetCanvas", "dragRect", "tabMode", "d", "dropOutlinePath", "clearShiftedTab", "PopupService", "width", "height", "tabLeft", "tabWidth", "tabHeight", "tabOnly", "left", "dragState", "wasMultiDrop", "moveExistingTabs", "top", "orientation", "computeMenuPosition", "component", "DropMenu", "targetDropOutline", "l", "t", "r", "b", "w", "h", "path", "animation", "dropGuidePath", "cssShiftRight", "cssShiftBack", "_a", "_b", "AFTER", "BEFORE", "RelativeDropPosition", "Stack", "tab", "id", "tabEl", "tabOffset", "selector", "_dropTargetRenderer", "DropTargetCanvas", "classnames", "forwardRef", "jsx", "DraggableLayout", "forwardRef", "children", "classNameProp", "dropTarget", "_", "htmlAttributes", "forwardedRef", "className", "classnames", "componentName", "registerComponent", "useForkRef", "cx", "forwardRef", "getUniqueId", "React", "useCallback", "useMemo", "useRef", "useState", "cx", "jsx", "classBase", "Placeholder", "className", "closeable", "flexFill", "resizeable", "shim", "props", "cx", "registerComponent", "cx", "React", "useCallback", "useRef", "useState", "jsx", "Splitter", "React", "column", "index", "onDrag", "onDragEnd", "onDragStart", "style", "ignoreClick", "useRef", "rootRef", "lastPos", "active", "setActive", "useState", "handleKeyDownDrag", "useCallback", "key", "shiftKey", "distance", "handleKeyDownInitDrag", "evt", "keyDownHandlerRef", "handleKeyDown", "handleMouseMove", "e", "pos", "diff", "handleMouseUp", "_a", "handleMouseDown", "handleClick", "handleBlur", "className", "cx", "uuid", "React", "NO_STYLE", "auto", "getIntrinsicSize", "component", "width", "auto", "height", "NO_STYLE", "numHeight", "numWidth", "hasUnboundedFlexStyle", "component", "flex", "flexGrow", "flexShrink", "flexBasis", "NO_STYLE", "NO_INTRINSIC_SIZE", "SPLITTER", "PLACEHOLDER", "isIntrinsicallySized", "item", "getBreakPointValues", "breakPoints", "component", "values", "breakPoint", "getProp", "gatherChildMeta", "children", "dimension", "child", "index", "_a", "resizeable", "intrinsicSize", "getIntrinsicSize", "flexOpen", "hasUnboundedFlexStyle", "findSplitterAndPlaceholderPositions", "childMeta", "count", "allIntrinsic", "splitterPositions", "i", "resizeablesLeft", "identifyResizeParties", "contentMeta", "idx", "idx1", "getLeadingResizeablePos", "idx2", "getTrailingResizeablePos", "participants", "bystanders", "identifyResizeBystanders", "pos", "isResizeable", "placeholder", "splitter", "originalContentOnly", "meta", "useSplitterResizing", "childrenProp", "onSplitterMoved", "style", "rootRef", "useRef", "metaRef", "contentRef", "assignedKeys", "forceUpdate", "useState", "setContent", "content", "isColumn", "dimension", "children", "useMemo", "React", "handleDragStart", "useCallback", "index", "contentMeta", "participants", "bystanders", "identifyResizeParties", "_a", "el", "size", "minSize", "measureElement", "handleDrag", "idx", "distance", "resizeContent", "handleDragEnd", "createSplitter", "i", "Splitter", "buildContent", "keys", "childMeta", "gatherChildMeta", "splitterAndPlaceholderPositions", "findSplitterAndPlaceholderPositions", "child", "PLACEHOLDER", "createPlaceholder", "key", "getUniqueId", "SPLITTER", "updateMeta", "currentSize", "flexOpen", "flexBasis", "hasCurrentSize", "actualFlexBasis", "resizeTargets", "target1", "multiplier", "leadingItem", "leadingSize", "trailingItem", "trailingSize", "Placeholder", "minSizeVal", "jsx", "classBase", "Flexbox", "forwardRef", "props", "ref", "breakPoints", "children", "column", "classNameProp", "flexFill", "gap", "fullPage", "id", "onSplitterMoved", "resizeable", "row", "spacing", "splitterSize", "style", "rest", "content", "rootRef", "useSplitterResizing", "className", "cx", "useForkRef", "Flexbox_default", "useCallback", "Action", "useCallback", "useContext", "useEffect", "useRef", "useState", "React", "uuid", "React", "uuid", "React", "cloneElement", "useCallback", "persistentState", "sessionState", "usePersistentState", "loadSessionState", "useCallback", "id", "key", "state", "sessionState", "saveSessionState", "data", "purgeSessionState", "_doomedState", "rest", "loadState", "persistentState", "saveState", "purgeState", "cloneElement", "React", "React", "React", "uuid", "React", "createContext", "unconfiguredLayoutProviderDispatch", "action", "LayoutProviderContext", "useCallback", "useRef", "jsx", "useLayoutProviderDispatch", "dispatchLayoutProvider", "useContext", "LayoutProviderContext", "jsx", "FlexboxLayout", "props", "path", "dispatch", "useLayoutProviderDispatch", "handleSplitterMoved", "useCallback", "sizes", "Action", "Flexbox_default", "registerComponent", "useForkRef", "cx", "forwardRef", "useMemo", "useCallback", "useEffect", "useRef", "useState", "useCallback", "useLayoutEffect", "useRef", "WidthHeight", "observedMap", "getTargetSize", "element", "contentRect", "dimension", "resizeObserver", "entries", "entry", "target", "observedTarget", "onResize", "measurements", "sizeChanged", "size", "newSize", "useResizeObserver", "ref", "dimensions", "reportInitialSize", "dimensionsRef", "useRef", "measure", "useCallback", "rect", "map", "dim", "useLayoutEffect", "cleanedUp", "registerObserver", "fonts", "record", "breakpointReader", "themeName", "defaultBreakpoints", "themeRoot", "handler", "style", "stopName", "val", "byDescendingStopSize", "s1", "s2", "breakpointRamp", "breakpoints", "name", "value", "i", "all", "documentBreakpoints", "loadBreakpoints", "xs", "sm", "md", "lg", "xl", "getBreakPoints", "EMPTY_ARRAY", "useBreakpoints", "breakPointsProp", "smallerThan", "ref", "breakpointMatch", "setBreakpointmatch", "useState", "bodyRef", "useRef", "breakPointsRef", "breakpointRamp", "getBreakPoints", "sizeRef", "stopFromMinWidth", "useCallback", "w", "name", "size", "matchSizeAgainstBreakpoints", "width", "breakPointRamp", "maxValue", "useResizeObserver", "measuredWidth", "result", "useEffect", "target", "prevSize", "clientWidth", "COLLAPSIBLE", "RESPONSIVE_ATTRIBUTE", "getUniqueId", "cloneElement", "isValidElement", "useCallback", "useMemo", "useRef", "breakPoints", "DEFAULT_COLS", "useResponsiveSizing", "childrenProp", "colsProp", "style", "rootRef", "useRef", "metaRef", "contentRef", "cols", "dimension", "children", "useMemo", "isValidElement", "buildContent", "useCallback", "childMeta", "gatherChildMeta", "content", "meta", "i", "child", "flex", "rest", "cloneElement", "getUniqueId", "jsx", "classBase", "FluidGrid", "forwardRef", "props", "ref", "breakPoints", "childrenProp", "column", "colsProp", "classNameProp", "flexFill", "gap", "fullPage", "id", "onSplitterMoved", "resizeable", "row", "showGrid", "spacing", "splitterSize", "styleProp", "rest", "children", "useMemo", "asReactElements", "cols", "content", "rootRef", "useResponsiveSizing", "breakpoint", "useBreakpoints", "className", "cx", "style", "useForkRef", "jsx", "FluidGridLayout", "props", "FluidGrid", "registerComponent", "Button", "classnames", "cx", "React", "useRef", "useState", "useCallback", "useState", "useViewActionDispatcher", "id", "root", "viewPath", "dropTargets", "_a", "loadSessionState", "purgeSessionState", "purgeState", "saveSessionState", "usePersistentState", "contributions", "setContributions", "useState", "dispatchLayoutAction", "useLayoutProviderDispatch", "updateContributions", "useCallback", "location", "content", "updatedContributions", "clearContributions", "handleRemove", "ds", "handleMouseDown", "evt", "index", "preDragActivity", "dragRect", "resolve", "reject", "action", "type", "useForkRef", "useId", "cx", "React", "forwardRef", "useCallback", "useMemo", "useRef", "useState", "useCallback", "useMemo", "useView", "id", "rootRef", "path", "dropTargets", "titleProp", "layoutDispatch", "useLayoutProviderDispatch", "loadState", "loadSessionState", "purgeState", "saveState", "saveSessionState", "usePersistentState", "dispatchViewAction", "contributions", "useViewActionDispatcher", "title", "useMemo", "_a", "onEditTitle", "useCallback", "restoredState", "load", "key", "purge", "save", "state", "loadSession", "saveSession", "onConfigChange", "config", "data", "useCallback", "useRef", "NO_MEASUREMENT", "useViewResize", "mainRef", "resize", "rootRef", "deferResize", "mainSize", "resizeHandle", "setMainSize", "onResize", "height", "width", "useResizeObserver", "WidthHeight", "React", "useContext", "NO_CONTEXT", "ViewContext", "useViewDispatch", "_a", "context", "jsx", "jsxs", "classBase", "getProps", "state", "props", "View", "forwardRef", "forwardedRef", "Header", "children", "className", "collapsed", "closeable", "dataPath", "dataResizeable", "dropTargets", "expanded", "flexFill", "idProp", "header", "orientation", "path", "resize", "resizeable", "tearOut", "style", "titleProp", "restProps", "id", "useId", "rootRef", "useRef", "mainRef", "componentProps", "_setComponentProps", "useState", "contributions", "dispatchViewAction", "load", "loadSession", "onConfigChange", "onEditTitle", "purge", "restoredState", "save", "saveSession", "title", "useView", "useViewResize", "setComponentProps", "useCallback", "getContent", "React", "viewContextValue", "useMemo", "headerProps", "cx", "useForkRef", "ViewContext", "MemoView", "registerComponent", "jsx", "Header", "classNameProp", "contributions", "collapsed", "closeable", "onEditTitle", "orientationProp", "style", "title", "labelFieldRef", "useRef", "value", "setValue", "useState", "editing", "setEditing", "viewDispatch", "useViewDispatch", "handleClose", "evt", "classBase", "handleTitleMouseDown", "_a", "handleButtonMouseDown", "className", "classnames", "handleEnterEditMode", "handleTitleKeyDown", "handleExitEditMode", "originalValue", "finalValue", "allowDeactivation", "editCancelled", "handleMouseDown", "e", "toolbarItems", "postTitleContributedItems", "actionButtons", "contribution", "i", "React", "EditableLabel", "Button", "cx", "PopupMenu", "cx", "React", "forwardRef", "isValidNumber", "MEASURES", "useCallback", "useMemo", "useRef", "useState", "NON_WRAPPED_ITEM", "sortByScreenOrder", "elements", "e1", "e2", "idx1", "idx2", "isOverflowed1", "isOverflowed2", "isOverflowedIndicator1", "isOverflowedIndicator2", "NO_WRAPPED_ITEMS", "getNonWrappedAndWrappedItems", "container", "orientation", "nonWrappedItems", "wrappedItems", "currentPosition", "overflowed", "sortedChildren", "positionAttribute", "child", "element", "index", "label", "overflowPriority", "position", "applyOverflowClassToWrappedItems", "overflowedItems", "ignoreOverflow", "item", "maxPriority", "priority", "minPriority", "overflowIndicatorHasWrappedButShouldNotHave", "_a", "getHighestPriorityItem", "overflowItems", "highestPriorityItem", "i", "highPriorityItemsHaveWrappedButShouldNotHave", "minNonwrappedPriority", "correctForWrappedOverflowIndicator", "resolve", "o2", "getNewItems", "markElementAsWrapped", "correctForWrappedHighPriorityItems", "nonWrapped", "wrapped", "highPriorityWrappedItem", "switchWrappedItemIntoView", "getElementByIndex", "el", "getElementsMarkedAsWrapped", "items1", "items2", "newItems", "unmarkItemsWhichAreNoLongerWrapped", "getOverflowIndicator", "getOverflowedItem", "getElementWidth", "getAvailableSpace", "overflowIndicator", "containerRight", "paddingRight", "indicatorRight", "removeOverflowIndicatorIfNoLongerNeeded", "availableSpace", "indicatorWidth", "overflowedItem", "byPriorityDescending", "h1", "h2", "i1", "p1", "i2", "p2", "getNonwrappedItemsByPriority", "overflowItem", "unwrappedItems", "targetElement", "pos", "unwrappedItem", "itemWidth", "targetWidth", "switchWrapOnElements", "lastLeft", "baseAvailableSpace", "wrapTargets", "nextLeft", "extraSpace", "wrappedElement", "nonWrappedElement", "useOverflowContainer", "itemCount", "onSwitchWrappedItemIntoView", "orientation", "container", "setContainer", "useState", "wrappedItemsRef", "useRef", "NO_WRAPPED_ITEMS", "handleResize", "useCallback", "nonWrapped", "wrapped", "getNonWrappedAndWrappedItems", "applyOverflowClassToWrappedItems", "overflowIndicatorHasWrappedButShouldNotHave", "correctForWrappedOverflowIndicator", "highPriorityItemsHaveWrappedButShouldNotHave", "correctForWrappedHighPriorityItems", "removeOverflowIndicatorIfNoLongerNeeded", "hasOverflowItem", "opt", "menuBuilder", "menuActionHandler", "useMemo", "menuItems", "item", "options", "wrappedItems", "switchWrappedItemIntoView", "resizeObserver", "sizeProp", "MEASURES", "currentSize", "entries", "entry", "size", "isValidNumber", "useLayoutEffectSkipFirst", "callbackRef", "el", "jsx", "jsxs", "classBase", "WrapContainer", "React", "children", "classNameProp", "heightProp", "onSwitchWrappedItemIntoView", "orientation", "overflowIcon", "childElements", "asReactElements", "menuActionHandler", "menuBuilder", "rootRef", "useOverflowContainer", "style", "className", "cx", "childEl", "i", "overflowPriority", "itemId", "label", "PopupMenu", "OverflowContainer", "forwardRef", "height", "htmlAttributes", "forwardedRef", "uuid", "List", "ListItem", "cx", "cloneElement", "memo", "jsx", "clonePaletteItem", "paletteItem", "dolly", "PaletteItem", "memo", "className", "component", "idx", "resizeable", "header", "closeable", "props", "ListItem", "cx", "Palette", "children", "orientation", "ViewProps", "dispatch", "useLayoutProviderDispatch", "classBase", "handleMouseDown", "evt", "_a", "listItemElement", "caption", "payload", "template", "height", "left", "top", "width", "id", "uuid", "MemoView", "List", "child", "cloneElement", "registerComponent", "cx", "React", "forwardRef", "useCallback", "jsx", "jsxs", "classBase", "getDefaultTabIcon", "getDefaultTabLabel", "component", "tabIndex", "_a", "_b", "getChildElements", "children", "elements", "React", "child", "DefaultTabstripProps", "Stack", "forwardRef", "active", "classNameProp", "getTabIcon", "getTabLabel", "idProp", "keyBoardActivation", "onAddTab", "onMoveTab", "onTabClose", "onTabEdit", "onTabSelectionChanged", "showTabs", "style", "TabstripProps", "ref", "id", "useId", "allowCloseTab", "allowRenameTab", "handleExitEditMode", "useCallback", "_oldText", "newText", "_allowDeactivation", "activeChild", "renderTabs", "idx", "rootId", "closeable", "childId", "Tab", "isHorizontal", "tabstripOrientation", "cx", "Tabstrip", "useId", "React", "useCallback", "useRef", "jsx", "defaultCreateNewChild", "index", "MemoView", "Component_default", "StackLayout", "props", "ref", "useRef", "dispatch", "useLayoutProviderDispatch", "loadState", "usePersistentState", "createNewChild", "idProp", "onTabSelectionChanged", "path", "restProps", "children", "id", "useId", "dispatchViewAction", "useViewActionDispatcher", "handleTabSelection", "nextIdx", "handleTabClose", "useCallback", "tabIndex", "dataPath", "handleTabAdd", "React", "component", "handleMoveTab", "fromIndex", "toIndex", "Stack", "idx", "title", "e", "readyToDrag", "resolve", "text", "registerComponent", "React", "useState", "jsx", "jsxs", "FormField", "Input", "jsx", "jsxs", "CSS_DIGIT", "CSS_MEASURE", "CSS_REX", "React", "cx", "jsx", "Button", "cx", "React", "useMemo", "useRef", "useCallback", "useRef", "isTabMenuOptions", "options", "closeCommand", "renameCommand", "getElementIndex", "el", "index", "getIndexOfItem", "container", "query", "targetTab", "getIndexOfSelectedTab", "getIndexOfEditedItem", "isValidNumber", "MEASURES", "useCallback", "useMemo", "useRef", "useAnimatedSelectionThumb", "containerRef", "activeTabIndex", "orientation", "animationSuspendedRef", "suspendAnimation", "resumeAnimation", "onTransitionEnd", "_a", "_b", "lastSelectedRef", "offset", "size", "oldSelected", "newSelected", "positionProp", "sizeProp", "oldPosition", "oldSize", "newPosition", "duration", "_c", "_d", "useControlled", "getFocusableElement", "useCallback", "useRef", "useState", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight", "Home", "End", "navigation", "Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown", "isNavigationKey", "key", "orientation", "isMenuActivationKey", "nextItemIdx", "count", "direction", "idx", "isNonWrappedElement", "element", "getElementByPosition", "container", "index", "useKeyboardNavigation", "containerRef", "defaultHighlightedIdx", "highlightedIdxProp", "keyBoardActivation", "selectedTabIndex", "manualActivation", "mouseClickPending", "useRef", "focusedRef", "hasFocus", "setHasFocus", "useState", "forceRefresh", "highlightedIdx", "_setHighlightedIdx", "useControlled", "setHighlightedIdx", "useCallback", "value", "keyboardNavigation", "focusTab", "tabIndex", "immediateFocus", "withKeyboard", "delay", "setFocus", "focussableElement", "getFocusableElement", "onFocus", "e", "getIndexOfEditedItem", "getIndexCount", "_a", "_b", "nextFocusableItemIdx", "indexCount", "nextIdx", "nextDirection", "newIdx", "navigateChildItems", "forceFocusVisible", "highlightedTabHasMenu", "el", "activateTabMenu", "menuEl", "evt", "handleKeyDown", "handleItemClick", "_", "handleFocus", "handleContainerMouseDown", "sourceTarget", "destTarget", "useControlled", "useCallback", "defaultSelectionKeys", "isTabElement", "el", "useSelection", "defaultSelected", "highlightedIdx", "onSelectionChange", "selectedProp", "selected", "setSelected", "isControlled", "isSelectionEvent", "evt", "selectItem", "tabIndex", "handleKeyDown", "e", "targetElement", "onClick", "editKeys", "isEditKey", "key", "getElementWithIndex", "container", "index", "useTabstrip", "activeTabIndexProp", "allowDragDrop", "animateSelectionThumb", "containerRef", "onActiveChange", "onAddTab", "onCloseTab", "onExitEditMode", "onMoveTab", "orientation", "keyBoardActivation", "lastSelection", "useRef", "keyboardHookFocusTab", "highlightedIdx", "keyboardHookHandleClick", "keyboardHookHandleKeyDown", "keyboardHookSetHighlightedIndex", "keyboardHook", "useKeyboardNavigation", "selectionHookActivateTab", "selectionHookHandleClick", "selectionHookHandleKeyDown", "selectionHookSelected", "useSelection", "containerStyle", "resumeAnimation", "suspendAnimation", "useAnimatedSelectionThumb", "handleDrop", "useCallback", "fromIndex", "toIndex", "selected", "nextSelectedTab", "dragDropHookHandleMouseDown", "dragDropHook", "useDragDropNext", "handleExitEditMode", "originalValue", "editedValue", "allowDeactivation", "tabIndex", "handleClick", "evt", "getEditableLabel", "targetEl", "tabInEditMode", "editableLabel", "editTab", "editableLabelEl", "handleKeyDown", "handleCloseTabFromMenu", "selectedTabIndex", "getIndexOfSelectedTab", "newActiveTabIndex", "handleRenameTabFromMenu", "handleTabMenuAction", "action", "isTabMenuOptions", "handleTabMenuClose", "onSwitchWrappedItemIntoView", "item", "navigationProps", "handleAddTabClick", "tabProps", "Fragment", "jsx", "jsxs", "createElement", "classBase", "Tabstrip", "activeTabIndexProp", "allowAddTab", "allowCloseTab", "allowDragDrop", "allowRenameTab", "animateSelectionThumb", "children", "classNameProp", "idProp", "keyBoardActivation", "location", "onActiveChange", "onAddTab", "onCloseTab", "onExitEditMode", "onMoveTab", "orientation", "showTabMenuButton", "styleProp", "htmlAttributes", "rootRef", "useRef", "activeTabIndex", "focusVisible", "containerStyle", "draggedItemIndex", "onClickAddTab", "tabProps", "tabstripHook", "useTabstrip", "id", "useId", "className", "cx", "style", "tabs", "useMemo", "asReactElements", "child", "index", "tabId", "closeable", "editable", "showMenuButton", "selected", "React", "Button", "OverflowContainer", "useForkRef", "cx", "forwardRef", "useCallback", "useRef", "PopupMenu", "useMemo", "cx", "jsx", "classBase", "TabMenu", "allowClose", "allowRename", "location", "onMenuAction", "onMenuClose", "index", "menuBuilder", "menuOptions", "useMemo", "_location", "options", "menuItems", "renameCommand", "closeCommand", "PopupMenu", "cx", "jsx", "jsxs", "classBase", "noop", "Tab", "forwardRef", "ariaControls", "children", "className", "closeable", "dragging", "editable", "editing", "focusVisible", "index", "label", "location", "onClick", "onClose", "onEnterEditMode", "onExitEditMode", "onFocusProp", "onKeyUp", "onMenuAction", "onMenuClose", "orientation", "selected", "showMenuButton", "tabIndex", "props", "ref", "rootRef", "useRef", "editableRef", "setForkRef", "useForkRef", "handleClick", "useCallback", "e", "handleOnExitEditMode", "originalValue", "editedValue", "allowDeactivation", "handleKeyUp", "getLabel", "EditableLabel", "handleFocus", "evt", "input", "cx", "TabMenu", "useForkRef", "useId", "cx", "forwardRef", "useRef", "listItemIndex", "listItemEl", "_a", "idx", "closestListItem", "el", "closestListItemIndex", "el", "listItemIndex", "closestListItem", "useCallback", "useMemo", "PathSeparators", "isPathSeparator", "char", "isParentPath", "parentPath", "childPath", "useItemsWithIds", "sourceProp", "idRoot", "collapsibleHeaders", "defaultExpanded", "revealSelected", "countChildItems", "item", "items", "idx", "i", "count", "isExpanded", "path", "id", "normalizeItems", "indexer", "level", "results", "flattenedSource", "all", "_a", "isCollapsibleHeader", "isNonCollapsibleGroupNode", "isLeaf", "nonCollapsible", "expanded", "normalisedItem", "childCount", "children", "sourceWithIds", "sourceItemById", "target", "sourceWithId", "useCallback", "useRef", "useControlled", "SINGLE", "CHECKBOX", "MULTI", "EXTENDED", "defaultSelectionKeys", "NO_HANDLERS", "isCollapsibleItem", "item", "groupSelectionEnabled", "groupSelection", "useSelection", "defaultSelected", "highlightedIdx", "treeNodes", "onChange", "selectedProp", "selection", "selectionKeys", "singleSelect", "multiSelect", "extendedSelect", "lastActive", "isSelectionEvent", "evt", "selected", "setSelected", "selectItemAtIndex", "idx", "id", "rangeSelect", "preserveExistingSelection", "active", "isSelected", "actsLikeSingleSelect", "actsLikeMultiSelect", "newSelected", "i", "from", "to", "handleKeyDown", "handleKeyboardNavigation", "currentIndex", "listHandlers", "handleClick", "useCallback", "useEffect", "useLayoutEffect", "useRef", "useCallback", "useEffect", "useRef", "observedMap", "getTargetSize", "element", "size", "dimension", "resizeObserver", "entries", "entry", "target", "borderBoxSize", "contentBoxSize", "observedTarget", "observedMap", "height", "width", "contentHeight", "contentWidth", "onResize", "measurements", "sizeChanged", "dimension", "size", "newSize", "getTargetSize", "useResizeObserver", "ref", "dimensions", "reportInitialSize", "dimensionsRef", "useRef", "measure", "useCallback", "map", "dim", "useEffect", "registerObserver", "record", "HeightOnly", "useViewportTracking", "root", "highlightedIdx", "stickyHeaders", "scrollTop", "useRef", "scrolling", "rootHeight", "rootScrollHeight", "scrollIntoView", "useCallback", "el", "targetEl", "headerHeight", "t", "h", "viewportStart", "viewportEnd", "scrollHandler", "e", "useEffect", "rootEl", "useLayoutEffect", "item", "onResize", "height", "scrollHeight", "useResizeObserver", "useCallback", "useRef", "useCallback", "useMemo", "useRef", "getNodeParentPath", "id", "pos", "steps", "isGroupNode", "node", "isHeader", "node", "PATH_SEPARATORS", "isDescendantOf", "targetPath", "getNodeById", "nodes", "id", "getIndexOfNode", "treeNodes", "i", "replaceNode", "props", "childNodes", "useControlled", "union", "set1", "sets", "result", "set", "element", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Enter", "Delete", "actionKeys", "Enter", "focusKeys", "arrowLeftRightKeys", "verticalNavigationKeys", "horizontalNavigationKeys", "functionKeys", "specialKeys", "union", "isNavigationKey", "key", "orientation", "verticalNavigationKeys", "horizontalNavigationKeys", "nextItemIdx", "count", "key", "idx", "ArrowUp", "ArrowLeft", "isLeaf", "item", "isFocusable", "useKeyboardNavigation", "defaultHighlightedIdx", "highlightedIdxProp", "treeNodes", "onHighlight", "onKeyboardNavigation", "selected", "ArrowBwd", "ArrowFwd", "useMemo", "ArrowDown", "highlightedIdx", "setHighlightedIdx", "isControlledHighlighting", "useControlled", "setHighlightedIndex", "useCallback", "nextFocusableItemIdx", "nextIdx", "keyBoardNavigation", "useRef", "ignoreFocus", "setIgnoreFocus", "value", "handleFocus", "node", "getNodeById", "getIndexOfNode", "navigateChildItems", "e", "handleKeyDown", "isNavigationKey", "listProps", "useRef", "useState", "populateIndices", "nodes", "results", "idx", "skipToNextHeader", "node", "isHeader", "isGroupNode", "isExpanded", "useHierarchicalData", "source", "externalSource", "useRef", "statefulSource", "indexPositions", "forceUpdate", "useState", "setData", "value", "useCallback", "useRef", "NO_HANDLERS", "isToggleElement", "element", "useCollapsibleGroups", "collapsibleHeaders", "highlightedIdx", "treeNodes", "setVisibleData", "source", "fullSource", "useRef", "stateSource", "setSource", "useCallback", "value", "expandNode", "nodeList", "id", "replaceNode", "collapseNode", "handleKeyDown", "e", "ArrowRight", "Enter", "node", "ArrowLeft", "listHandlers", "listItemHandlers", "evt", "el", "closestListItem", "getNodeById", "useCallback", "useTreeKeyboardNavigation", "highlightedIdx", "hiliteItemAtIndex", "indexPositions", "source", "useCallback", "e", "ArrowLeft", "node", "parentId", "getNodeParentPath", "parentNode", "getNodeById", "idx", "getIndexOfNode", "EMPTY_ARRAY", "useTree", "defaultSelected", "sourceWithIds", "onChange", "onHighlightProp", "selectedProp", "selection", "lastSelection", "useRef", "dataHook", "useHierarchicalData", "handleKeyboardNavigation", "evt", "nextIdx", "_a", "_b", "selectionHook", "highlightedIdx", "keyboardHook", "useKeyboardNavigation", "collapsibleHook", "useCollapsibleGroups", "useSelection", "treeNavigationHook", "useTreeKeyboardNavigation", "handleClick", "useCallback", "_c", "handleKeyDown", "_d", "_e", "_f", "_g", "_h", "getActiveDescendant", "listProps", "listItemHandlers", "jsx", "jsxs", "createElement", "classBase", "isExpanded", "node", "TreeNode", "children", "idx", "props", "Tree", "forwardRef", "allowDragDrop", "className", "defaultSelected", "groupSelection", "idProp", "onHighlight", "onSelectionChange", "revealSelected", "selectedProp", "selection", "source", "htmlAttributes", "forwardedRef", "_a", "id", "useId", "rootRef", "useRef", "sourceWithIds", "sourceItemById", "useItemsWithIds", "handleSelectionChange", "evt", "selected", "sourceItems", "sourceItem", "focusVisible", "highlightedIdx", "hiliteItemAtIndex", "listProps", "listItemHandlers", "visibleData", "useTree", "useViewportTracking", "propsCommonToAllListItems", "targetEl", "closestListItemIndex", "allowGroupSelect", "groupSelectionEnabled", "addLeafNode", "list", "item", "getListItemProps", "addGroupNode", "child", "title", "i", "cx", "renderSourceContent", "items", "listItems", "useForkRef", "cx", "memo", "useCallback", "useRef", "useState", "jsx", "KEY", "metadataKeys", "TableCell", "memo", "classNameProp", "column", "columnMap", "onClick", "row", "labelFieldRef", "useRef", "align", "CellRenderer", "key", "pin", "editable", "resizing", "valueFormatter", "editing", "setEditing", "useState", "value", "editableValue", "setEditableValue", "handleTitleMouseDown", "_a", "handleTitleKeyDown", "evt", "handleClick", "useCallback", "handleEnterEditMode", "handleExitEditMode", "originalValue", "finalValue", "allowDeactivation", "editCancelled", "className", "cx", "style", "getColumnStyle", "EditableLabel", "cellValuesAreEqual", "prev", "next", "getColumnStyle", "getGroupValueAndOffset", "metadataKeys", "useCallback", "jsx", "jsxs", "IS_LEAF", "metadataKeys", "TableGroupCell", "column", "onClick", "row", "columns", "value", "offset", "getGroupValueAndOffset", "handleClick", "useCallback", "evt", "style", "getColumnStyle", "isLeaf", "spacers", "n", "i", "jsx", "jsxs", "IDX", "IS_EXPANDED", "SELECTED", "metadataKeys", "classBase", "TableRow", "memo", "columnMap", "columns", "offset", "onClick", "onToggleGroup", "virtualColSpan", "row", "rowIndex", "isExpanded", "isSelected", "className", "cx", "handleRowClick", "useCallback", "evt", "rangeSelect", "keepExistingSelection", "handleGroupCellClick", "column", "isGroupColumn", "isJsonGroup", "notHidden", "isGroup", "isJsonCell", "isJsonColumn", "TableGroupCell", "TableCell", "cx", "useRef", "useCallback", "useRef", "useTableColumnResize", "column", "onResize", "rootRef", "widthRef", "isResizing", "name", "handleResizeStart", "width", "handleResize", "_evt", "moveBy", "newWidth", "handleResizeEnd", "jsx", "jsxs", "classBase", "RemoveButton", "column", "onClick", "htmlAttributes", "ColHeader", "props", "children", "className", "cx", "TableGroupHeaderCell", "groupColumn", "classNameProp", "onRemoveColumn", "onResize", "rootRef", "useRef", "isResizing", "resizeProps", "useTableColumnResize", "columns", "ColumnResizer", "cx", "useCallback", "useRef", "cx", "classBase", "SortIndicator", "sorted", "direction", "cx", "useContextMenu", "useContextMenu", "cx", "useCallback", "jsx", "FilterIndicator", "column", "filter", "showContextMenu", "useContextMenu", "handleClick", "useCallback", "evt", "jsx", "cx", "jsx", "jsxs", "classBase", "TableHeaderCell", "column", "classNameProp", "onClick", "onDragStart", "onResize", "props", "rootRef", "useRef", "isResizing", "resizeProps", "useTableColumnResize", "showContextMenu", "useContextMenu", "dragTimerRef", "handleContextMenu", "e", "handleClick", "useCallback", "evt", "handleMouseDown", "handleMouseUp", "className", "cx", "FilterIndicator", "SortIndicator", "ColumnResizer", "jsx", "jsxs", "classBase", "RENDER_IDX", "metadataKeys", "RowBasedTable", "columns", "columnsWithinViewport", "data", "getRowOffset", "headings", "onColumnResize", "onHeaderCellDragStart", "onContextMenu", "onRemoveColumnFromGroupBy", "onRowClick", "onSort", "onToggleGroup", "tableId", "virtualColSpan", "rowCount", "handleDragStart", "useCallback", "evt", "visibleColumns", "useMemo", "notHidden", "columnMap", "buildColumnMap", "handleHeaderClick", "_a", "headerCell", "colIdx", "column", "visibleColumnAtIndex", "isAdditive", "colHeaders", "i", "label", "width", "j", "style", "getColumnStyle", "isGroupColumn", "TableGroupHeaderCell", "TableHeaderCell", "row", "TableRow", "usePopupContextMenu", "applySort", "buildColumnMap", "isJsonGroup", "metadataKeys", "moveItem", "useCallback", "useEffect", "useMemo", "useRef", "useState", "getFullRange", "metadataKeys", "WindowRange", "useCallback", "useEffect", "useMemo", "useRef", "useState", "SELECTED", "useCallback", "useEffect", "useState", "ConnectionManager", "useCallback", "useEffect", "useState", "ConnectionManager", "useCallback", "makeRpcCall", "nextPropID", "Range", "from", "to", "NodeProp", "config", "match", "NodeType", "type", "result", "str", "noProps", "NodeType", "name", "props", "id", "flags", "spec", "type", "src", "prop", "group", "NodeProp", "map", "direct", "node", "groups", "i", "found", "NodeSet", "types", "newTypes", "newProps", "source", "add", "CachedNode", "CachedInnerNode", "IterMode", "Tree", "children", "positions", "length", "value", "mounted", "ch", "str", "mode", "TreeCursor", "pos", "side", "scope", "cursor", "TreeNode", "resolveNode", "enter", "leave", "from", "to", "anon", "c", "entered", "result", "config", "balanceRange", "data", "buildTree", "FlatBufferCursor", "buffer", "index", "TreeBuffer", "set", "endIndex", "startIndex", "dir", "pick", "checkSide", "startI", "endI", "b", "copy", "len", "j", "enterUnfinishedNodesBefore", "scan", "last", "overlays", "_a", "parent", "inner", "_tree", "_parent", "e", "next", "start", "BufferNode", "BufferContext", "hasChild", "rPos", "val", "before", "after", "r", "getChildren", "context", "matchNodeContext", "cur", "p", "parentStart", "n", "d", "child", "cache", "depth", "mustLeave", "tree", "nodeSet", "maxBufferLength", "reused", "minRepeatType", "contextHash", "lookAhead", "takeNode", "minPos", "inRepeat", "end", "size", "lookAheadAtStart", "startPos", "findBufferSize", "endPos", "copyToBuffer", "localChildren", "localPositions", "localInRepeat", "lastGroup", "lastEnd", "makeRepeatLeaf", "make", "makeBalanced", "makeTree", "lastI", "lookAheadProp", "base", "pair", "maxSize", "fork", "skip", "minStart", "nodeSize", "localSkipped", "nodeStart", "bufferStart", "nodeSizeCache", "balanceType", "mkTop", "mkTree", "total", "maxChild", "divide", "offset", "groupFrom", "groupStart", "groupSize", "nextSize", "only", "Parser", "input", "fragments", "ranges", "StringInput", "r", "Range", "parse", "done", "string", "from", "to", "stoppedInner", "NodeProp", "Stack", "p", "stack", "state", "reducePos", "pos", "score", "buffer", "bufferBase", "curContext", "lookAhead", "parent", "_", "i", "cx", "StackContext", "start", "action", "_a", "depth", "type", "parser", "dPrec", "base", "size", "count", "baseStateID", "term", "end", "isReduce", "cur", "top", "index", "next", "nextEnd", "nextState", "value", "off", "isNode", "sim", "SimulatedStack", "nextStates", "best", "s", "v", "result", "reduce", "target", "backup", "seen", "explore", "rDepth", "found", "other", "dialectID", "last", "context", "newCx", "tracker", "Recover", "goto", "StackBufferCursor", "decodeArray", "input", "Type", "array", "out", "stop", "digit", "CachedToken", "nullToken", "InputStream", "ranges", "offset", "assoc", "range", "idx", "resolved", "token", "endOffset", "chunk", "chunkPos", "nextChunk", "n", "from", "to", "r", "TokenGroup", "data", "id", "readToken", "LocalTokenGroup", "precTable", "elseToken", "skipped", "atEof", "nextPos", "readToken", "data", "input", "stack", "group", "precTable", "precOffset", "state", "groupMask", "dialect", "scan", "accEnd", "i", "term", "overrides", "next", "low", "high", "mid", "index", "from", "to", "findOffset", "start", "token", "prev", "tableData", "tableOffset", "iPrev", "verbose", "stackIDs", "Safety", "cutAt", "tree", "pos", "side", "cursor", "IterMode", "FragmentCursor", "fragments", "nodeSet", "fr", "last", "top", "Tree", "end", "lookAhead", "NodeProp", "TokenCache", "parser", "stream", "_", "CachedToken", "actionIndex", "main", "tokenizers", "mask", "context", "tokenizer", "startIndex", "p", "result", "action", "set", "pair", "Rec", "Parse", "ranges", "InputStream", "Stack", "stacks", "newStacks", "stopped", "stoppedTokens", "s", "tok", "finished", "findFinished", "maxRemaining", "a", "b", "outer", "j", "other", "split", "base", "strictCx", "cxHash", "cached", "match", "inner", "defaultReduce", "actions", "localStack", "pushStackDedup", "tokens", "restarted", "tokenEnd", "force", "forceBase", "insert", "StackBufferCursor", "id", "Dialect", "source", "flags", "disabled", "LRParser", "Parser", "spec", "nodeNames", "i", "topTerms", "r", "nodeProps", "setProp", "nodeID", "prop", "value", "propSpec", "NodeProp", "next", "j", "NodeSet", "name", "NodeType", "tokenArray", "decodeArray", "getSpecializer", "TokenGroup", "input", "fragments", "ranges", "parse", "Parse", "w", "state", "term", "loose", "table", "pos", "groupTag", "last", "target", "end", "terminal", "data", "set", "pair", "slot", "flag", "action", "a", "deflt", "result", "v", "config", "copy", "info", "t", "found", "s", "prec", "dialect", "values", "flags", "part", "id", "disabled", "Dialect", "off", "findFinished", "stacks", "best", "stack", "stopped", "mask", "parser", "LRParser", "isMultiClauseFilter", "isMultiValueFilter", "isSingleValueFilter", "_filter", "FilterExpression", "__privateAdd", "op", "filter", "__privateGet", "isMultiClauseFilter", "__privateSet", "column", "target", "value", "_a", "isMultiValueFilter", "isSingleValueFilter", "strictParser", "parser", "getRowRecord", "isGroupMenuItemDescriptor", "metadataKeys", "useCallback", "KEY", "metadataKeys", "isVisualLinksAction", "action", "isViewportMenusAction", "action", "isVuuFeatureAction", "isVisualLinksAction", "isVuuFeatureInvocation", "useCallback", "useEffect", "useState", "getServerAPI", "getFullRange", "metadataKeys", "WindowRange", "useCallback", "useEffect", "useMemo", "useRef", "useState", "SELECTED", "useDataSource", "dataSource", "onConfigChange", "onFeatureEnabled", "onFeatureInvocation", "onSizeChange", "onSubscribed", "range", "renderBufferSize", "viewportRowCount", "forceUpdate", "isMounted", "hasUpdated", "rangeRef", "rafHandle", "data", "dataWindow", "MovingWindow", "setData", "updates", "row", "datasourceMessageHandler", "message", "isVuuFeatureAction", "isVuuFeatureInvocation", "refreshIfUpdated", "adjustRange", "rowCount", "from", "rowRange", "fullRange", "setRange", "getSelectedRows", "to", "_a", "index", "internalIndex", "isSelected", "preSelected", "overlapFrom", "overlapTo", "newData", "useCallback", "useRef", "useDraggableColumn", "onDrop", "mousePosRef", "containerRef", "handleDropSettle", "draggable", "draggedItemIndex", "onMouseDown", "useDragDropNext", "onHeaderCellDragStart", "evt", "clientX", "clientY", "columnHeaderCell", "idx", "withinRange", "useCallback", "useEffect", "useLayoutEffect", "useMemo", "useRef", "union", "set1", "sets", "result", "set", "element", "ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight", "Home", "End", "PageUp", "PageDown", "actionKeys", "focusKeys", "arrowLeftRightKeys", "navigationKeys", "Home", "End", "PageUp", "PageDown", "ArrowDown", "ArrowLeft", "ArrowRight", "ArrowUp", "functionKeys", "specialKeys", "union", "PageKeys", "isPagingKey", "key", "isNavigationKey", "navigationKeys", "headerCellQuery", "colIdx", "dataCellQuery", "rowIdx", "NULL_CELL_POS", "nextCellPos", "key", "columnCount", "rowCount", "ArrowUp", "ArrowDown", "ArrowRight", "ArrowLeft", "useKeyboardNavigation", "containerRef", "disableHighlightOnFocus", "data", "requestScroll", "viewportRange", "_a", "viewportFirstRow", "viewportLastRow", "focusedCellPos", "useRef", "focusableCell", "activeCellPos", "getTableCell", "useCallback", "cssQuery", "getFocusedCell", "element", "getTableCellPos", "tableCell", "_b", "focusedRow", "focusCell", "cellPos", "activeCell", "withinRange", "setActiveCell", "fromKeyboard", "pos", "virtualizeActiveCell", "nextPageItemIdx", "PageDown", "PageUp", "Home", "End", "handleFocus", "focusedCell", "navigateChildItems", "nextRowIdx", "nextColIdx", "isPagingKey", "handleKeyDown", "e", "isNavigationKey", "handleClick", "evt", "target", "containerProps", "useMemo", "useLayoutEffect", "withinViewport", "fullyRendered", "useEffect", "headerCell", "isValidNumber", "useCallback", "useMemo", "useRef", "useState", "useCallback", "useEffect", "useRef", "observedMap", "getTargetSize", "element", "size", "dimension", "resizeObserver", "entries", "entry", "target", "borderBoxSize", "contentBoxSize", "observedTarget", "height", "width", "contentHeight", "contentWidth", "onResize", "measurements", "sizeChanged", "newSize", "useResizeObserver", "ref", "dimensions", "reportInitialSize", "dimensionsRef", "useRef", "measure", "useCallback", "map", "dim", "useEffect", "registerObserver", "record", "ClientWidthHeight", "isNumber", "val", "FULL_SIZE", "getInitialCssSize", "height", "width", "isValidNumber", "getInitialInnerSize", "useMeasuredContainer", "defaultHeight", "defaultWidth", "containerRef", "useRef", "size", "setSize", "useState", "useMemo", "currentSize", "inner", "outer", "innerHeight", "innerWidth", "outerHeight", "outerWidth", "heightDiff", "widthDiff", "onResize", "useCallback", "clientWidth", "clientHeight", "css", "useResizeObserver", "deselectItem", "isRowSelected", "metadataKeys", "selectItem", "useCallback", "useRef", "IDX", "NO_SELECTION", "useSelection", "selectionModel", "onSelectionChange", "lastActiveRef", "selectedRef", "row", "rangeSelect", "keepExistingSelection", "idx", "active", "selected", "newSelected", "applyFilterToColumns", "applyGroupByToColumns", "applySortToColumns", "findColumn", "getCellRenderer", "getColumnName", "getTableHeadings", "getValueFormatter", "isFilteredColumn", "isGroupColumn", "isPinned", "isTypeDescriptor", "metadataKeys", "updateColumn", "sortPinnedColumns", "stripFilterFromColumns", "moveItem", "useReducer", "DEFAULT_COLUMN_WIDTH", "KEY_OFFSET", "columnWithoutDataType", "serverDataType", "getCellRendererForColumn", "column", "_a", "getServerDataTypeForColumn", "tableSchema", "schemaColumn", "col", "numericTypes", "getDefaultAlignment", "isShowColumnSettings", "action", "isShowTableSettings", "columnReducer", "state", "init", "moveColumn", "resizeColumn", "setTableSchema", "hideColumns", "showColumns", "pinColumn", "updateColumnProp", "updateTableConfig", "useTableModel", "tableConfig", "dataSourceConfig", "dispatchColumnAction", "columns", "toKeyedColumWithDefaults", "maybePinnedColumns", "rest", "getLabel", "label", "columnFormatHeader", "options", "index", "columnDefaultWidth", "align", "key", "name", "width", "keyedColumnWithDefaults", "moveBy", "moveTo", "idx", "newColumns", "movedColumns", "s", "c", "phase", "type", "resizing", "cols", "pin", "hidden", "confirmed", "filter", "groupBy", "sort", "hasColumns", "hasGroupBy", "hasFilter", "hasSort", "result", "colName", "columnName", "useCallback", "useRef", "getPctScroll", "container", "scrollLeft", "scrollTop", "clientHeight", "clientWidth", "scrollHeight", "scrollWidth", "pctScrollLeft", "pctScrollTop", "getMaxScroll", "useCallbackRef", "onAttach", "onDetach", "ref", "el", "originalRef", "useTableScroll", "onHorizontalScroll", "onVerticalScroll", "viewport", "contentContainerScrolledRef", "scrollPosRef", "scrollbarContainerRef", "contentContainerRef", "maxScrollLeft", "maxScrollTop", "handleScrollbarContainerScroll", "contentContainer", "scrollbarContainer", "contentContainerScrolled", "rootScrollLeft", "rootScrollTop", "handleContentContainerScroll", "scrollPos", "handleAttachScrollbarContainer", "handleDetachScrollbarContainer", "handleAttachContentContainer", "handleDetachContentContainer", "contentContainerCallbackRef", "scrollbarContainerCallbackRef", "requestScroll", "scrollRequest", "direction", "scrollBy", "newScrollTop", "scrollTo", "useCallback", "useMemo", "useRef", "actualRowPositioning", "virtualRowPositioning", "MAX_RAW_ROWS", "UNMEASURED_VIEWPORT", "measurePinnedColumns", "columns", "pinnedWidthLeft", "pinnedWidthRight", "unpinnedWidth", "column", "hidden", "pin", "width", "visibleWidth", "useTableViewport", "headerHeight", "headings", "rowCount", "rowHeight", "size", "pctScrollTopRef", "appliedContentHeight", "virtualisedExtent", "actualRowOffset", "actualRowAtPosition", "getRowOffset", "getRowAtPosition", "setPctScrollTop", "scrollPct", "_a", "headingsDepth", "scrollbarSize", "contentWidth", "horizontalScrollbarHeight", "totalHeaderHeight", "maxScrollContainerScrollVertical", "maxScrollContainerScrollHorizontal", "visibleRows", "count", "viewportBodyHeight", "verticalScrollbarWidth", "getColumnsInViewport", "itemsChanged", "useCallback", "useEffect", "useMemo", "useRef", "useState", "useVirtualViewport", "columns", "getRowAtPosition", "setRange", "viewportMeasurements", "firstRowRef", "viewportRowCount", "contentWidth", "maxScrollContainerScrollHorizontal", "availableWidth", "scrollLeftRef", "visibleColumns", "preSpan", "preSpanRef", "setColumnsWithinViewport", "columnsWithinViewport", "handleHorizontalScroll", "scrollLeft", "pre", "handleVerticalScroll", "scrollTop", "firstRow", "NO_ROWS", "KEY", "IS_EXPANDED", "IS_LEAF", "metadataKeys", "useTable", "config", "dataSource", "headerHeight", "onConfigChange", "onFeatureEnabled", "onFeatureInvocation", "onSelectionChange", "renderBufferSize", "rowHeight", "selectionModel", "measuredProps", "_a", "_b", "rowCount", "setRowCount", "useState", "expectConfigChangeRef", "useRef", "dataSourceRef", "containerMeasurements", "useMeasuredContainer", "onDataRowcountChange", "useCallback", "size", "columns", "dispatchColumnAction", "headings", "useTableModel", "getRowAtPosition", "getRowOffset", "setPctScrollTop", "viewportMeasurements", "useTableViewport", "onSubscribed", "tableSchema", "handleSelectionChange", "selected", "handleRowClick", "useSelection", "data", "getSelectedRows", "range", "setRange", "useDataSource", "dataRef", "onPersistentColumnOperation", "action", "handleContextMenuAction", "useTableContextMenu", "handleSort", "column", "extendSort", "sortType", "applySort", "handleColumnResize", "phase", "columnName", "width", "handleToggleGroup", "row", "isJson", "isJsonGroup", "key", "idx", "childRows", "columnsToShow", "col", "onVerticalScroll", "onHorizontalScroll", "columnsWithinViewport", "virtualColSpan", "useVirtualViewport", "handleVerticalScroll", "scrollTop", "pctScrollTop", "requestScroll", "scrollProps", "useTableScroll", "containerProps", "useKeyboardNavigation", "handleRemoveColumnFromGroupBy", "handleDropColumn", "fromIndex", "toIndex", "moveItem", "draggableHook", "useDraggableColumn", "useEffect", "confirmed", "useMemo", "showContextMenu", "usePopupContextMenu", "onContextMenu", "evt", "currentData", "currentDataSource", "target", "cellEl", "rowEl", "selectedRowsCount", "columnMap", "buildColumnMap", "rowIndex", "cellIndex", "cx", "isDataLoading", "jsx", "jsxs", "classBase", "Table", "showSettings", "classNameProp", "config", "dataSource", "headerHeight", "height", "idProp", "onConfigChange", "onFeatureEnabled", "onFeatureInvocation", "onSelectionChange", "onShowSettings", "renderBufferSize", "rowHeight", "selectionModel", "styleProp", "width", "zebraStripes", "htmlAttributes", "id", "useIdMemo", "containerRef", "innerSize", "outerSize", "containerProps", "dispatchColumnAction", "draggable", "draggedItemIndex", "handleContextMenuAction", "scrollProps", "viewportMeasurements", "tableProps", "useTable", "style", "className", "cx", "ContextMenuProvider", "buildContextMenuDescriptors", "RowBasedTable", "Button", "cx", "isJsonAttribute", "metadataKeys", "registerComponent", "jsx", "jsxs", "classBase", "IS_EXPANDED", "KEY", "metadataKeys", "localKey", "key", "pos", "JsonCell", "column", "row", "columnKey", "value", "isToggle", "isJsonAttribute", "rowKey", "className", "cx", "toggleIcon", "registerComponent", "ContextMenuProvider", "metadataKeys", "useEffect", "useCallback", "useRef", "getColumnStyle", "cx", "useMemo", "useCell", "column", "classBase", "isHeader", "className", "style", "useContextMenu", "cx", "useCallback", "useRef", "useState", "jsx", "getPosition", "element", "bottom", "left", "ColumnMenu", "className", "column", "props", "rootRef", "useRef", "menuOpen", "setMenuOpen", "useState", "showContextMenu", "useContextMenu", "handleMenuClose", "useCallback", "showColumnMenu", "e", "cx", "jsx", "jsxs", "HeaderCell", "classBaseProp", "column", "onClick", "onResize", "idx", "rootRef", "useRef", "isResizing", "resizeProps", "useTableColumnResize", "classBase", "handleClick", "useCallback", "evt", "className", "style", "useCell", "ColumnMenu", "SortIndicator", "ColumnResizer", "isGroupColumn", "metadataKeys", "RowSelected", "cx", "memo", "useCallback", "jsx", "TableCell", "column", "row", "className", "style", "useCell", "getGroupValueAndOffset", "metadataKeys", "useCallback", "jsx", "jsxs", "IS_LEAF", "metadataKeys", "TableGroupCell", "column", "onClick", "row", "columns", "value", "offset", "getGroupValueAndOffset", "className", "style", "useCell", "handleClick", "useCallback", "evt", "isLeaf", "spacers", "n", "i", "jsx", "createElement", "IDX", "IS_EXPANDED", "SELECTED", "metadataKeys", "classBase", "Row", "memo", "classNameProp", "columnMap", "columns", "row", "offset", "onClick", "onToggleGroup", "htmlAttributes", "rowIndex", "isExpanded", "selectionStatus", "handleRowClick", "useCallback", "evt", "rangeSelect", "keepExistingSelection", "True", "First", "Last", "RowSelected", "className", "cx", "style", "column", "Cell", "isGroupColumn", "TableGroupCell", "TableCell", "usePopupContextMenu", "applySort", "buildColumnMap", "visibleColumnAtIndex", "useCallback", "useEffect", "useMemo", "useState", "useCallback", "useMemo", "useState", "useDataSource", "dataSource", "initialRange", "data", "setData", "message", "setRange", "range", "useMemo", "useRef", "useInitialValue", "value", "ref", "applyFilterToColumns", "applyGroupByToColumns", "applySortToColumns", "findColumn", "getCellRenderer", "getColumnName", "getTableHeadings", "getValueFormatter", "isFilteredColumn", "isGroupColumn", "isPinned", "isTypeDescriptor", "logger", "metadataKeys", "sortPinnedColumns", "stripFilterFromColumns", "useReducer", "info", "DEFAULT_COLUMN_WIDTH", "KEY_OFFSET", "columnWithoutDataType", "serverDataType", "getCellRendererForColumn", "column", "_a", "getDataType", "tableSchema", "schemaColumn", "name", "numericTypes", "getDefaultAlignment", "columnReducer", "state", "action", "init", "moveColumn", "resizeColumn", "setTableSchema", "hideColumns", "showColumns", "pinColumn", "updateColumnProp", "updateTableConfig", "useTableModel", "tableConfig", "dataSourceConfig", "dispatchColumnAction", "columns", "toKeyedColumWithDefaults", "maybePinnedColumns", "rest", "getLabel", "label", "columnFormatHeader", "options", "index", "columnDefaultWidth", "align", "key", "width", "keyedColumnWithDefaults", "col", "moveBy", "moveTo", "idx", "newColumns", "movedColumns", "moveItem", "s", "c", "phase", "type", "resizing", "cols", "pin", "targetColumn", "replaceColumn", "hidden", "confirmed", "filter", "groupBy", "sort", "hasColumns", "hasGroupBy", "hasFilter", "hasSort", "result", "colName", "columnName", "useCallback", "useRef", "getPctScroll", "container", "scrollLeft", "scrollTop", "clientHeight", "clientWidth", "scrollHeight", "scrollWidth", "pctScrollLeft", "pctScrollTop", "useCallbackRef", "onAttach", "onDetach", "ref", "el", "originalRef", "useTableScroll", "maxScrollLeft", "maxScrollTop", "onHorizontalScroll", "onVerticalScroll", "contentContainerScrolledRef", "scrollPosRef", "scrollbarContainerRef", "contentContainerRef", "handleScrollbarContainerScroll", "contentContainer", "scrollbarContainer", "contentContainerScrolled", "rootScrollLeft", "rootScrollTop", "handleContentContainerScroll", "scrollPos", "handleAttachScrollbarContainer", "handleDetachScrollbarContainer", "handleAttachContentContainer", "handleDetachContentContainer", "contentContainerCallbackRef", "scrollbarContainerCallbackRef", "requestScroll", "scrollRequest", "direction", "scrollBy", "newScrollTop", "scrollTo", "useCallback", "useRef", "useVirtualViewport", "columns", "getRowAtPosition", "setRange", "viewportMeasurements", "firstRowRef", "contentWidth", "viewportRowCount", "scrollTop", "firstRow", "useTable", "config", "dataSource", "headerHeight", "onConfigChange", "onFeatureEnabled", "onFeatureInvocation", "onSelectionChange", "rowHeight", "selectionModel", "measuredProps", "rowCount", "useState", "dispatchLayoutAction", "useLayoutProviderDispatch", "menuBuilder", "useMemo", "buildContextMenuDescriptors", "containerRef", "containerMeasurements", "useMeasuredContainer", "columns", "dispatchColumnAction", "headings", "useTableModel", "columnMap", "buildColumnMap", "col", "useEffect", "confirmed", "getRowAtPosition", "getRowOffset", "setPctScrollTop", "viewportMeasurements", "useTableViewport", "initialRange", "useInitialValue", "data", "setRange", "useDataSource", "from", "to", "onPersistentColumnOperation", "useCallback", "action", "isShowColumnSettings", "isShowTableSettings", "handleContextMenuAction", "useTableContextMenu", "onVerticalScroll", "useVirtualViewport", "handleVerticalScroll", "scrollTop", "requestScroll", "scrollProps", "useTableScroll", "showContextMenu", "usePopupContextMenu", "onContextMenu", "evt", "target", "cellEl", "rowEl", "cellIndex", "columnName", "handleSort", "column", "extendSort", "sortType", "applySort", "onHeaderClick", "_a", "headerCell", "colIdx", "visibleColumnAtIndex", "isAdditive", "handleSelectionChange", "selected", "onRowClick", "useSelection", "jsx", "jsxs", "classBase", "IDX", "RENDER_IDX", "metadataKeys", "TableNext", "classNameProp", "config", "dataSource", "headerHeight", "height", "idProp", "onConfigChange", "onFeatureEnabled", "onFeatureInvocation", "onSelectionChange", "onShowSettings", "renderBufferSize", "rowHeight", "selectionModel", "styleProp", "width", "htmlAttributes", "columnMap", "columns", "cssSize", "innerSize", "containerRef", "data", "handleContextMenuAction", "onHeaderClick", "onRowClick", "menuBuilder", "scrollProps", "viewportMeasurements", "tableProps", "useTable", "unmeasured", "getStyle", "useEffect", "ContextMenuProvider", "col", "i", "HeaderCell", "Row"]
|
|
7
7
|
}
|