@ahrowe/ui 0.31.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/dist/esm/common/actionButtons/actionButtons.mjs +1 -1
  2. package/dist/esm/common/actionButtons/actionButtons.mjs.map +1 -1
  3. package/dist/esm/common/alert/alert.mjs +1 -1
  4. package/dist/esm/common/alert/alert.mjs.map +1 -1
  5. package/dist/esm/common/alert/alert.types.mjs.map +1 -1
  6. package/dist/esm/common/breadcrumb/breadcrumb.mjs +1 -1
  7. package/dist/esm/common/breadcrumb/breadcrumb.mjs.map +1 -1
  8. package/dist/esm/common/card/Card.mjs +1 -1
  9. package/dist/esm/common/card/Card.mjs.map +1 -1
  10. package/dist/esm/common/card/card.types.mjs.map +1 -1
  11. package/dist/esm/common/carousel/carousel.mjs +1 -1
  12. package/dist/esm/common/carousel/carousel.mjs.map +1 -1
  13. package/dist/esm/common/chip/chip.mjs +1 -1
  14. package/dist/esm/common/chip/chip.mjs.map +1 -1
  15. package/dist/esm/common/chip/chip.types.mjs.map +1 -1
  16. package/dist/esm/common/colorPicker/colorPicker.mjs +1 -1
  17. package/dist/esm/common/colorPicker/colorPicker.mjs.map +1 -1
  18. package/dist/esm/common/configProvider/useLabels.mjs +2 -0
  19. package/dist/esm/common/configProvider/useLabels.mjs.map +1 -0
  20. package/dist/esm/common/confirmModal/confirmModal.mjs +1 -1
  21. package/dist/esm/common/confirmModal/confirmModal.mjs.map +1 -1
  22. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs +1 -1
  23. package/dist/esm/common/datePicker/components/datePickerMonth/datePickerMonth.mjs.map +1 -1
  24. package/dist/esm/common/datePicker/datePicker.mjs +1 -1
  25. package/dist/esm/common/datePicker/datePicker.mjs.map +1 -1
  26. package/dist/esm/common/drawer/drawer.mjs +1 -1
  27. package/dist/esm/common/drawer/drawer.mjs.map +1 -1
  28. package/dist/esm/common/dropdown/dropdown.mjs +1 -1
  29. package/dist/esm/common/dropdown/dropdown.mjs.map +1 -1
  30. package/dist/esm/common/emptyState/emptyState.mjs +1 -1
  31. package/dist/esm/common/emptyState/emptyState.mjs.map +1 -1
  32. package/dist/esm/common/fab/components/fabBase/fabBase.mjs +1 -1
  33. package/dist/esm/common/fab/components/fabBase/fabBase.mjs.map +1 -1
  34. package/dist/esm/common/fab/fab.mjs +1 -1
  35. package/dist/esm/common/fab/fab.mjs.map +1 -1
  36. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs +1 -1
  37. package/dist/esm/common/infiniteBlock/infiniteBlock.mjs.map +1 -1
  38. package/dist/esm/common/input/input.mjs +1 -1
  39. package/dist/esm/common/input/input.mjs.map +1 -1
  40. package/dist/esm/common/input/input.types.mjs.map +1 -1
  41. package/dist/esm/common/klipyPicker/klipyPicker.mjs +1 -1
  42. package/dist/esm/common/klipyPicker/klipyPicker.mjs.map +1 -1
  43. package/dist/esm/common/modal/modal.mjs +1 -1
  44. package/dist/esm/common/modal/modal.mjs.map +1 -1
  45. package/dist/esm/common/multiSelect/multiSelect.mjs +1 -1
  46. package/dist/esm/common/multiSelect/multiSelect.mjs.map +1 -1
  47. package/dist/esm/common/numberInput/numberInput.mjs +1 -1
  48. package/dist/esm/common/numberInput/numberInput.mjs.map +1 -1
  49. package/dist/esm/common/otpInput/otpInput.mjs +1 -1
  50. package/dist/esm/common/otpInput/otpInput.mjs.map +1 -1
  51. package/dist/esm/common/otpInput/otpInput.types.mjs.map +1 -1
  52. package/dist/esm/common/pagination/pagination.mjs +1 -1
  53. package/dist/esm/common/pagination/pagination.mjs.map +1 -1
  54. package/dist/esm/common/progressBar/progressBar.mjs +1 -1
  55. package/dist/esm/common/progressBar/progressBar.mjs.map +1 -1
  56. package/dist/esm/common/roomDrawer/roomDrawer.mjs +1 -1
  57. package/dist/esm/common/roomDrawer/roomDrawer.mjs.map +1 -1
  58. package/dist/esm/common/searchInput/searchInput.mjs +1 -1
  59. package/dist/esm/common/searchInput/searchInput.mjs.map +1 -1
  60. package/dist/esm/common/splitButton/splitButton.mjs +1 -1
  61. package/dist/esm/common/splitButton/splitButton.mjs.map +1 -1
  62. package/dist/esm/common/timer/timer.mjs +1 -1
  63. package/dist/esm/common/timer/timer.mjs.map +1 -1
  64. package/dist/esm/common/toast/toast.mjs +1 -1
  65. package/dist/esm/common/toast/toast.mjs.map +1 -1
  66. package/dist/esm/common/toast/toastProvider.mjs +1 -1
  67. package/dist/esm/common/toast/toastProvider.mjs.map +1 -1
  68. package/dist/esm/common/tree/tree.mjs +1 -1
  69. package/dist/esm/common/tree/tree.mjs.map +1 -1
  70. package/dist/esm/common/virtualList/virtualList.mjs +1 -1
  71. package/dist/esm/common/virtualList/virtualList.mjs.map +1 -1
  72. package/dist/esm/common/virtualList/virtualListHeader.mjs +1 -1
  73. package/dist/esm/common/virtualList/virtualListHeader.mjs.map +1 -1
  74. package/dist/esm/index.mjs +1 -1
  75. package/dist/index.cjs +3 -3
  76. package/dist/index.cjs.map +1 -1
  77. package/dist/types/common/actionButtons/actionButtons.types.d.ts +9 -2
  78. package/dist/types/common/alert/alert.types.d.ts +7 -0
  79. package/dist/types/common/breadcrumb/breadcrumb.types.d.ts +7 -0
  80. package/dist/types/common/card/card.types.d.ts +6 -1
  81. package/dist/types/common/carousel/carousel.types.d.ts +13 -0
  82. package/dist/types/common/chip/chip.types.d.ts +13 -2
  83. package/dist/types/common/colorPicker/colorPicker.d.ts +1 -1
  84. package/dist/types/common/colorPicker/colorPicker.types.d.ts +13 -1
  85. package/dist/types/common/configProvider/configProvider.types.d.ts +26 -1
  86. package/dist/types/common/configProvider/index.d.ts +1 -0
  87. package/dist/types/common/configProvider/useLabels.d.ts +22 -0
  88. package/dist/types/common/confirmModal/confirmModal.types.d.ts +13 -4
  89. package/dist/types/common/datePicker/components/datePickerMonth/datePickerMonth.d.ts +2 -14
  90. package/dist/types/common/datePicker/components/datePickerMonth/datePickerMonth.types.d.ts +23 -0
  91. package/dist/types/common/datePicker/datePicker.d.ts +1 -22
  92. package/dist/types/common/datePicker/datePicker.types.d.ts +60 -0
  93. package/dist/types/common/datePicker/index.d.ts +1 -0
  94. package/dist/types/common/drawer/drawer.d.ts +1 -1
  95. package/dist/types/common/drawer/drawer.types.d.ts +7 -1
  96. package/dist/types/common/dropdown/dropdown.types.d.ts +6 -6
  97. package/dist/types/common/emptyState/emptyState.d.ts +1 -1
  98. package/dist/types/common/emptyState/emptyState.types.d.ts +13 -1
  99. package/dist/types/common/fab/components/fabBase/fabBase.d.ts +1 -1
  100. package/dist/types/common/fab/components/fabBase/fabBase.types.d.ts +3 -1
  101. package/dist/types/common/fab/fab.d.ts +1 -1
  102. package/dist/types/common/fab/fab.types.d.ts +6 -1
  103. package/dist/types/common/infiniteBlock/infiniteBlock.d.ts +1 -1
  104. package/dist/types/common/infiniteBlock/infiniteBlock.types.d.ts +2 -0
  105. package/dist/types/common/input/input.types.d.ts +13 -0
  106. package/dist/types/common/klipyPicker/klipyPicker.d.ts +1 -1
  107. package/dist/types/common/klipyPicker/klipyPicker.types.d.ts +7 -0
  108. package/dist/types/common/modal/modal.types.d.ts +7 -0
  109. package/dist/types/common/multiSelect/multiSelect.types.d.ts +13 -6
  110. package/dist/types/common/numberInput/numberInput.types.d.ts +15 -2
  111. package/dist/types/common/otpInput/otpInput.types.d.ts +9 -0
  112. package/dist/types/common/pagination/pagination.types.d.ts +15 -0
  113. package/dist/types/common/progressBar/progressBar.d.ts +1 -1
  114. package/dist/types/common/progressBar/progressBar.types.d.ts +6 -1
  115. package/dist/types/common/roomDrawer/roomDrawer.types.d.ts +6 -0
  116. package/dist/types/common/searchInput/searchInput.d.ts +1 -1
  117. package/dist/types/common/searchInput/searchInput.types.d.ts +13 -1
  118. package/dist/types/common/splitButton/splitButton.types.d.ts +7 -0
  119. package/dist/types/common/timer/timer.types.d.ts +7 -0
  120. package/dist/types/common/toast/toast.d.ts +4 -2
  121. package/dist/types/common/toast/toast.types.d.ts +11 -1
  122. package/dist/types/common/toast/toastProvider.d.ts +1 -1
  123. package/dist/types/common/tree/tree.types.d.ts +7 -2
  124. package/dist/types/common/virtualList/virtualList.types.d.ts +15 -6
  125. package/dist/types/common/virtualList/virtualListHeader.d.ts +3 -3
  126. package/docs/ActionButtons.md +7 -6
  127. package/docs/Alert.md +2 -0
  128. package/docs/Breadcrumb.md +2 -0
  129. package/docs/Card.md +2 -0
  130. package/docs/Carousel.md +2 -0
  131. package/docs/Chip.md +5 -1
  132. package/docs/ColorPicker.md +4 -0
  133. package/docs/ConfigProvider.md +23 -0
  134. package/docs/ConfirmModal.md +7 -5
  135. package/docs/DatePicker.md +6 -1
  136. package/docs/Drawer.md +2 -0
  137. package/docs/Dropdown.md +2 -0
  138. package/docs/EmptyState.md +4 -0
  139. package/docs/Fab.md +2 -0
  140. package/docs/FormValidatorGroup.md +1 -1
  141. package/docs/Input.md +2 -0
  142. package/docs/KlipyPicker.md +2 -0
  143. package/docs/Modal.md +2 -0
  144. package/docs/MultiSelect.md +7 -5
  145. package/docs/NumberInput.md +8 -2
  146. package/docs/OtpInput.md +2 -0
  147. package/docs/Pagination.md +2 -0
  148. package/docs/ProgressBar.md +2 -0
  149. package/docs/RoomDrawer.md +2 -0
  150. package/docs/SearchInput.md +4 -0
  151. package/docs/SplitButton.md +2 -0
  152. package/docs/Timer.md +2 -0
  153. package/docs/Toast.md +2 -0
  154. package/docs/Tree.md +3 -1
  155. package/docs/VirtualList.md +3 -2
  156. package/docs/Wizard.md +1 -2
  157. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"virtualList.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualList.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useId, useImperativeHandle, useRef } from 'react';\nimport cx from 'classnames';\nimport styles from './virtualList.module.pcss';\nimport SpinnerLoading from '../loading/spinnerLoading';\nimport Checkbox from '../checkbox';\nimport VirtualRow from './virtualRow';\nimport VirtualListHeader from './virtualListHeader';\nimport { useVirtualWindow } from './useVirtualWindow';\nimport { useSelection } from './useSelection';\nimport { useColumns } from './useColumns';\nimport { useRowDrag } from './useRowDrag';\nimport { useSorting } from './useSorting';\nimport { useColumnResize } from './useColumnResize';\nimport { useRowNavigation } from './useRowNavigation';\nimport type { VirtualListColumn, VirtualListProps, VirtualListHandle } from './virtualList.types';\n\n// Pure helpers live in ./virtualList.utils; re-exported here so existing\n// imports (and unit tests) keep working against the component entry point.\nexport {\n buildOffsets,\n findStartIndex,\n getVisibleRange,\n resolveReorderTarget,\n resolveTreeDropTarget,\n lastDescendantIndex,\n buildColumnTemplate,\n compareSortValues,\n isColumnSortable,\n isEmptySortValue,\n nextSort,\n sortItems,\n} from './virtualList.utils';\n\n// ─── Orchestrator ─────────────────────────────────────────────────────────────\n// VirtualListInner wires the hooks together and renders the two pieces of\n// markup. Each concern lives in its own module:\n// useSorting — table mode: header sort state, and the sorted row order\n// useVirtualWindow — generic scroll / measurement / windowing (all modes)\n// useColumnResize — table mode: user column widths, and the drag that sets them\n// useSelection — multi-row selection\n// useColumns — table mode: columns, visibility, persistence, fit widths\n// useRowDrag — reorder + tree drag-and-drop (mouse + touch)\n// useRowNavigation — arrow-key navigation over the rows\n// virtualListHeader — the header row: sorting, resizing, the column menu\n// virtualRow — one positioned row, with its drag wiring\n//\n// The hook order is not free: useColumnResize decides whether the layout is\n// frozen, which useColumns needs to build the grid template.\n\nfunction VirtualListInner<T>(\n {\n items,\n renderRow,\n ariaRoles,\n columns,\n height = '100%',\n estimatedRowHeight = 40,\n overscan = 3,\n rowGap = 0,\n rowPadding,\n selectedKey,\n getItemKey,\n onRowClick,\n keyboardNavigation = true,\n visibleColumnKeys,\n onVisibleColumnsChange,\n persistColumnsKey,\n resizableColumns = false,\n columnWidths,\n onColumnWidthsChange,\n resetColumnWidthsLabel = 'Reset column widths',\n sort,\n defaultSort,\n onSortChange,\n showColumnToggle,\n onLoadMore,\n loadMoreThreshold = 100,\n isLoading = false,\n multiSelect = false,\n selectedKeys,\n onSelectionChange,\n reorderable = false,\n onReorder,\n longPressDelay = 400,\n treeReorder = false,\n getItemDepth,\n isGroup,\n onTreeDrop,\n treeIndentPx = 24,\n dragHandle = false,\n showDivider = true,\n rowHover = true,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n }: VirtualListProps<T>,\n ref: React.ForwardedRef<VirtualListHandle>,\n) {\n const { rows, effectiveSort, isSorted, handleHeaderSort } = useSorting<T>({\n items,\n columns,\n sort,\n defaultSort,\n onSortChange,\n });\n\n const getKey = useCallback(\n (item: T, index: number): string | number => (getItemKey ? getItemKey(item, index) : index),\n [getItemKey],\n );\n const keys = useMemo(() => rows.map((item, i) => getKey(item, i)), [rows, getKey]);\n const depths = useMemo(\n () => (getItemDepth ? rows.map((item, i) => getItemDepth(item, i)) : []),\n [rows, getItemDepth],\n );\n const isGroupAt = useCallback((i: number) => (isGroup ? isGroup(rows[i], i) : false), [isGroup, rows]);\n\n const win = useVirtualWindow<T>({\n items: rows,\n keys,\n getItemKey,\n estimatedRowHeight,\n rowGap,\n overscan,\n onLoadMore,\n loadMoreThreshold,\n isLoading,\n });\n const { rootRef, headerRef, rowObserver, keysRef, offsets, totalHeight, startIndex, endIndex } = win;\n\n // Filled from `cols` below: the resize hook only reads the visible set when a\n // handle is actually used, which is what lets it run before the hook that\n // derives it.\n const visibleColumnsRef = useRef<VirtualListColumn<T>[]>([]);\n const columnResize = useColumnResize<T>({\n columns,\n visibleColumnsRef,\n resizableColumns,\n columnWidths,\n onColumnWidthsChange,\n persistColumnsKey,\n rootRef,\n });\n\n const selection = useSelection<T>({ items: rows, getKey, multiSelect, selectedKeys, onSelectionChange });\n const { effectiveSelectedKeys } = selection;\n\n const cols = useColumns<T>({\n columns,\n items: rows,\n multiSelect,\n visibleColumnKeys,\n onVisibleColumnsChange,\n persistColumnsKey,\n showColumnToggle,\n userWidths: columnResize.widths,\n isFrozen: columnResize.isFrozen,\n rootRef,\n startIndex,\n endIndex,\n containerHeight: win.containerHeight,\n containerWidth: win.containerWidth,\n });\n // The rest of `cols` is the header's business and goes there whole.\n const { hasColumns, visibleColumns, columnTemplate, widthVars, shouldShowToggle, recalculateColumns } = cols;\n visibleColumnsRef.current = visibleColumns;\n\n // Compose the forwarded handle from the hooks that own each piece: scroll\n // methods from the windowing engine, column controls from the column hooks.\n useImperativeHandle(ref, () => ({ ...win.scrollApi, recalculateColumns, resetColumnWidths: columnResize.reset }), [\n win.scrollApi,\n recalculateColumns,\n columnResize.reset,\n ]);\n\n // Dragging a row to position N is meaningless while the list decides the\n // order: the drop would be undone by the next sort pass.\n const dragBlockedBySort = isSorted && (reorderable || treeReorder);\n useEffect(() => {\n if (dragBlockedBySort)\n console.warn('VirtualList: row reordering is disabled while the list is sorted. Clear the sort to drag rows.');\n }, [dragBlockedBySort]);\n\n const drag = useRowDrag({\n reorderable: reorderable && !isSorted,\n treeReorder: treeReorder && !isSorted,\n onReorder,\n onTreeDrop,\n longPressDelay,\n dragHandle,\n treeIndentPx,\n keys,\n depths,\n isGroupAt,\n rootRef,\n keysRef,\n });\n\n const listId = useId();\n const rowDomId = (index: number) => `${listId}-row-${index}`;\n const nav = useRowNavigation({\n enabled: keyboardNavigation,\n rowCount: rows.length,\n offsets,\n rootRef,\n headerRef,\n scrollToIndex: win.scrollApi.scrollToIndex,\n initialIndex: selectedKey != null ? Math.max(0, keys.indexOf(selectedKey)) : 0,\n multiSelect,\n onActivate: onRowClick && ((index: number) => onRowClick(rows[index], index)),\n onToggleSelect: (index) => selection.handleRowSelect(keys[index]),\n });\n\n const rowPaddingValue = typeof rowPadding === 'number' ? `${rowPadding}px` : rowPadding;\n\n const renderRowAt = (i: number) => {\n const item = rows[i];\n const key = getKey(item, i);\n const isSelected = (selectedKey != null && key === selectedKey) || effectiveSelectedKeys.has(key);\n const dragProps = drag.getRowDragProps(i, key);\n\n return (\n <VirtualRow\n key={key}\n id={rowDomId(i)}\n index={i}\n top={offsets[i]}\n padding={rowPaddingValue}\n columnTemplate={columnTemplate}\n isSelected={isSelected}\n isActive={i === nav.activeIndex}\n manageTabStops={keyboardNavigation}\n isEntered={i === nav.enteredIndex}\n activeClassName={classNames?.activeRow}\n activeStyle={slotStyles?.activeRow}\n showDivider={showDivider}\n hover={rowHover}\n onClick={() => {\n if (drag.consumeSuppressedClick()) return;\n // Keep the arrows where the pointer last was.\n nav.setActiveIndex(i);\n onRowClick?.(item, i);\n }}\n observer={rowObserver}\n ariaRowIndex={hasColumns ? i + 2 : undefined}\n ariaPosInSet={hasColumns ? undefined : i + 1}\n ariaSetSize={hasColumns ? undefined : rows.length}\n rowRole={ariaRoles?.row ?? (hasColumns ? 'row' : 'listitem')}\n reserveToggleGutter={shouldShowToggle}\n {...dragProps}\n dropIndicatorClassName={classNames?.dropIndicator}\n dropIndicatorStyle={slotStyles?.dropIndicator}\n rowClassName={classNames?.row}\n rowStyle={slotStyles?.row}\n >\n {hasColumns ? (\n <>\n {multiSelect && (\n <div\n className={cx(styles.virtualListSelectCell, classNames?.selectCell)}\n style={slotStyles?.selectCell}\n role='gridcell'\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n selected={effectiveSelectedKeys.has(key)}\n onToggle={() => selection.handleRowSelect(key)}\n aria-label='Select row'\n // One tab stop per rendered row, changing as the list scrolls,\n // would strand the focus the moment a row unmounts. Space on\n // the active row is the keyboard path instead.\n tabIndex={-1}\n />\n </div>\n )}\n {visibleColumns.map((col) => (\n <div\n key={col.key}\n className={cx(styles.virtualListCell, classNames?.cell)}\n style={slotStyles?.cell}\n role='gridcell'\n data-col-key={col.key}\n data-fit-key={col.width.type === 'fit' ? col.key : undefined}\n >\n {col.renderCell(item, i)}\n </div>\n ))}\n </>\n ) : (\n renderRow?.(item, i)\n )}\n </VirtualRow>\n );\n };\n\n const visibleRows: React.ReactNode[] = [];\n for (let i = startIndex; i <= endIndex; i++) visibleRows.push(renderRowAt(i));\n\n // Keep the row being touch-dragged mounted even if it scrolls out of the\n // window. Touch events are dispatched to the element under the finger at\n // touchstart; if that row unmounts, the browser stops delivering touchmove\n // and the drag freezes. Pinning its DOM node keeps the gesture alive.\n const draggedIndex = drag.draggingKey != null ? keys.indexOf(drag.draggingKey) : -1;\n if (draggedIndex >= 0 && (draggedIndex < startIndex || draggedIndex > endIndex)) {\n visibleRows.push(renderRowAt(draggedIndex));\n }\n\n // Same reason, one step further: the row being used holds the focus, and\n // unmounting it would drop that focus to the document body mid-scroll.\n if (nav.enteredIndex >= 0 && (nav.enteredIndex < startIndex || nav.enteredIndex > endIndex)) {\n visibleRows.push(renderRowAt(nav.enteredIndex));\n }\n\n return (\n <div\n {...rest}\n {...nav.containerProps}\n ref={rootRef}\n className={cx(\n styles.virtualList,\n drag.draggingKey != null && styles.virtualListReordering,\n columnResize.isResizing && styles.virtualListResizing,\n className,\n classNames?.root,\n )}\n style={{ height, ...widthVars, ...style, ...slotStyles?.root }}\n onScroll={win.handleScroll}\n role={ariaRoles?.container ?? (hasColumns ? 'grid' : 'list')}\n aria-rowcount={hasColumns ? rows.length + 1 : undefined}\n // Only a composite role may point at an active descendant, and the default\n // `list` is not one. In list mode, pass `ariaRoles` (e.g. listbox/option)\n // to have the active row announced.\n aria-activedescendant={\n nav.activeIndex >= 0 && (ariaRoles?.container ?? (hasColumns ? 'grid' : 'list')) !== 'list'\n ? rowDomId(nav.activeIndex)\n : undefined\n }\n >\n {hasColumns && (\n <VirtualListHeader<T>\n headerRef={headerRef}\n columns={columns!}\n cols={cols}\n resize={columnResize}\n sort={effectiveSort}\n onSort={handleHeaderSort}\n multiSelect={multiSelect}\n allSelected={selection.allSelected}\n someSelected={selection.someSelected}\n onSelectAll={selection.handleSelectAll}\n resetColumnWidthsLabel={resetColumnWidthsLabel}\n classNames={classNames}\n styles={slotStyles}\n />\n )}\n {isLoading ? (\n <div className={styles.virtualListLoadingFull}>\n <SpinnerLoading className={styles.virtualListSpinner} />\n </div>\n ) : (\n <div\n className={cx(styles.virtualListBody, classNames?.body)}\n style={{ height: totalHeight, ...slotStyles?.body }}\n >\n {visibleRows}\n </div>\n )}\n {win.showLoadMoreSpinner && (\n <div\n className={cx(styles.virtualListLoadingIndicator, classNames?.loadingIndicator)}\n style={slotStyles?.loadingIndicator}\n >\n <SpinnerLoading className={styles.virtualListSpinner} />\n </div>\n )}\n </div>\n );\n}\n\n// forwardRef erases the generic, so cast back to a generic-preserving signature.\nconst VirtualList = React.forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.Ref<VirtualListHandle> },\n) => React.ReactElement | null;\n\nexport default VirtualList;\n"],"mappings":"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"}
1
+ {"version":3,"file":"virtualList.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualList.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useId, useImperativeHandle, useRef } from 'react';\nimport cx from 'classnames';\nimport styles from './virtualList.module.pcss';\nimport SpinnerLoading from '../loading/spinnerLoading';\nimport Checkbox from '../checkbox';\nimport VirtualRow from './virtualRow';\nimport VirtualListHeader from './virtualListHeader';\nimport { useVirtualWindow } from './useVirtualWindow';\nimport { useSelection } from './useSelection';\nimport { useColumns } from './useColumns';\nimport { useRowDrag } from './useRowDrag';\nimport { useSorting } from './useSorting';\nimport { useColumnResize } from './useColumnResize';\nimport { useRowNavigation } from './useRowNavigation';\nimport { useLabels } from '../configProvider';\nimport type { VirtualListColumn, VirtualListLabels, VirtualListProps, VirtualListHandle } from './virtualList.types';\n\nconst DEFAULT_LABELS: Required<VirtualListLabels> = {\n selectRow: 'Select row',\n selectAllRows: 'Select all rows',\n toggleColumns: 'Toggle column visibility',\n columnsHidden: (count) => `${count} columns hidden`,\n resetColumnWidths: 'Reset column widths',\n};\n\n// Pure helpers live in ./virtualList.utils; re-exported here so existing\n// imports (and unit tests) keep working against the component entry point.\nexport {\n buildOffsets,\n findStartIndex,\n getVisibleRange,\n resolveReorderTarget,\n resolveTreeDropTarget,\n lastDescendantIndex,\n buildColumnTemplate,\n compareSortValues,\n isColumnSortable,\n isEmptySortValue,\n nextSort,\n sortItems,\n} from './virtualList.utils';\n\n// ─── Orchestrator ─────────────────────────────────────────────────────────────\n// VirtualListInner wires the hooks together and renders the two pieces of\n// markup. Each concern lives in its own module:\n// useSorting — table mode: header sort state, and the sorted row order\n// useVirtualWindow — generic scroll / measurement / windowing (all modes)\n// useColumnResize — table mode: user column widths, and the drag that sets them\n// useSelection — multi-row selection\n// useColumns — table mode: columns, visibility, persistence, fit widths\n// useRowDrag — reorder + tree drag-and-drop (mouse + touch)\n// useRowNavigation — arrow-key navigation over the rows\n// virtualListHeader — the header row: sorting, resizing, the column menu\n// virtualRow — one positioned row, with its drag wiring\n//\n// The hook order is not free: useColumnResize decides whether the layout is\n// frozen, which useColumns needs to build the grid template.\n\nfunction VirtualListInner<T>(\n {\n items,\n renderRow,\n ariaRoles,\n columns,\n height = '100%',\n estimatedRowHeight = 40,\n overscan = 3,\n rowGap = 0,\n rowPadding,\n selectedKey,\n getItemKey,\n onRowClick,\n keyboardNavigation = true,\n visibleColumnKeys,\n onVisibleColumnsChange,\n persistColumnsKey,\n resizableColumns = false,\n columnWidths,\n onColumnWidthsChange,\n labels,\n sort,\n defaultSort,\n onSortChange,\n showColumnToggle,\n onLoadMore,\n loadMoreThreshold = 100,\n isLoading = false,\n multiSelect = false,\n selectedKeys,\n onSelectionChange,\n reorderable = false,\n onReorder,\n longPressDelay = 400,\n treeReorder = false,\n getItemDepth,\n isGroup,\n onTreeDrop,\n treeIndentPx = 24,\n dragHandle = false,\n showDivider = true,\n rowHover = true,\n className,\n style,\n classNames,\n styles: slotStyles,\n ...rest\n }: VirtualListProps<T>,\n ref: React.ForwardedRef<VirtualListHandle>,\n) {\n const text = useLabels('VirtualList', labels, DEFAULT_LABELS);\n const { rows, effectiveSort, isSorted, handleHeaderSort } = useSorting<T>({\n items,\n columns,\n sort,\n defaultSort,\n onSortChange,\n });\n\n const getKey = useCallback(\n (item: T, index: number): string | number => (getItemKey ? getItemKey(item, index) : index),\n [getItemKey],\n );\n const keys = useMemo(() => rows.map((item, i) => getKey(item, i)), [rows, getKey]);\n const depths = useMemo(\n () => (getItemDepth ? rows.map((item, i) => getItemDepth(item, i)) : []),\n [rows, getItemDepth],\n );\n const isGroupAt = useCallback((i: number) => (isGroup ? isGroup(rows[i], i) : false), [isGroup, rows]);\n\n const win = useVirtualWindow<T>({\n items: rows,\n keys,\n getItemKey,\n estimatedRowHeight,\n rowGap,\n overscan,\n onLoadMore,\n loadMoreThreshold,\n isLoading,\n });\n const { rootRef, headerRef, rowObserver, keysRef, offsets, totalHeight, startIndex, endIndex } = win;\n\n // Filled from `cols` below: the resize hook only reads the visible set when a\n // handle is actually used, which is what lets it run before the hook that\n // derives it.\n const visibleColumnsRef = useRef<VirtualListColumn<T>[]>([]);\n const columnResize = useColumnResize<T>({\n columns,\n visibleColumnsRef,\n resizableColumns,\n columnWidths,\n onColumnWidthsChange,\n persistColumnsKey,\n rootRef,\n });\n\n const selection = useSelection<T>({ items: rows, getKey, multiSelect, selectedKeys, onSelectionChange });\n const { effectiveSelectedKeys } = selection;\n\n const cols = useColumns<T>({\n columns,\n items: rows,\n multiSelect,\n visibleColumnKeys,\n onVisibleColumnsChange,\n persistColumnsKey,\n showColumnToggle,\n userWidths: columnResize.widths,\n isFrozen: columnResize.isFrozen,\n rootRef,\n startIndex,\n endIndex,\n containerHeight: win.containerHeight,\n containerWidth: win.containerWidth,\n });\n // The rest of `cols` is the header's business and goes there whole.\n const { hasColumns, visibleColumns, columnTemplate, widthVars, shouldShowToggle, recalculateColumns } = cols;\n visibleColumnsRef.current = visibleColumns;\n\n // Compose the forwarded handle from the hooks that own each piece: scroll\n // methods from the windowing engine, column controls from the column hooks.\n useImperativeHandle(ref, () => ({ ...win.scrollApi, recalculateColumns, resetColumnWidths: columnResize.reset }), [\n win.scrollApi,\n recalculateColumns,\n columnResize.reset,\n ]);\n\n // Dragging a row to position N is meaningless while the list decides the\n // order: the drop would be undone by the next sort pass.\n const dragBlockedBySort = isSorted && (reorderable || treeReorder);\n useEffect(() => {\n if (dragBlockedBySort)\n console.warn('VirtualList: row reordering is disabled while the list is sorted. Clear the sort to drag rows.');\n }, [dragBlockedBySort]);\n\n const drag = useRowDrag({\n reorderable: reorderable && !isSorted,\n treeReorder: treeReorder && !isSorted,\n onReorder,\n onTreeDrop,\n longPressDelay,\n dragHandle,\n treeIndentPx,\n keys,\n depths,\n isGroupAt,\n rootRef,\n keysRef,\n });\n\n const listId = useId();\n const rowDomId = (index: number) => `${listId}-row-${index}`;\n const nav = useRowNavigation({\n enabled: keyboardNavigation,\n rowCount: rows.length,\n offsets,\n rootRef,\n headerRef,\n scrollToIndex: win.scrollApi.scrollToIndex,\n initialIndex: selectedKey != null ? Math.max(0, keys.indexOf(selectedKey)) : 0,\n multiSelect,\n onActivate: onRowClick && ((index: number) => onRowClick(rows[index], index)),\n onToggleSelect: (index) => selection.handleRowSelect(keys[index]),\n });\n\n const rowPaddingValue = typeof rowPadding === 'number' ? `${rowPadding}px` : rowPadding;\n\n const renderRowAt = (i: number) => {\n const item = rows[i];\n const key = getKey(item, i);\n const isSelected = (selectedKey != null && key === selectedKey) || effectiveSelectedKeys.has(key);\n const dragProps = drag.getRowDragProps(i, key);\n\n return (\n <VirtualRow\n key={key}\n id={rowDomId(i)}\n index={i}\n top={offsets[i]}\n padding={rowPaddingValue}\n columnTemplate={columnTemplate}\n isSelected={isSelected}\n isActive={i === nav.activeIndex}\n manageTabStops={keyboardNavigation}\n isEntered={i === nav.enteredIndex}\n activeClassName={classNames?.activeRow}\n activeStyle={slotStyles?.activeRow}\n showDivider={showDivider}\n hover={rowHover}\n onClick={() => {\n if (drag.consumeSuppressedClick()) return;\n // Keep the arrows where the pointer last was.\n nav.setActiveIndex(i);\n onRowClick?.(item, i);\n }}\n observer={rowObserver}\n ariaRowIndex={hasColumns ? i + 2 : undefined}\n ariaPosInSet={hasColumns ? undefined : i + 1}\n ariaSetSize={hasColumns ? undefined : rows.length}\n rowRole={ariaRoles?.row ?? (hasColumns ? 'row' : 'listitem')}\n reserveToggleGutter={shouldShowToggle}\n {...dragProps}\n dropIndicatorClassName={classNames?.dropIndicator}\n dropIndicatorStyle={slotStyles?.dropIndicator}\n rowClassName={classNames?.row}\n rowStyle={slotStyles?.row}\n >\n {hasColumns ? (\n <>\n {multiSelect && (\n <div\n className={cx(styles.virtualListSelectCell, classNames?.selectCell)}\n style={slotStyles?.selectCell}\n role='gridcell'\n onClick={(e) => e.stopPropagation()}\n >\n <Checkbox\n selected={effectiveSelectedKeys.has(key)}\n onToggle={() => selection.handleRowSelect(key)}\n aria-label={text.selectRow}\n // One tab stop per rendered row, changing as the list scrolls,\n // would strand the focus the moment a row unmounts. Space on\n // the active row is the keyboard path instead.\n tabIndex={-1}\n />\n </div>\n )}\n {visibleColumns.map((col) => (\n <div\n key={col.key}\n className={cx(styles.virtualListCell, classNames?.cell)}\n style={slotStyles?.cell}\n role='gridcell'\n data-col-key={col.key}\n data-fit-key={col.width.type === 'fit' ? col.key : undefined}\n >\n {col.renderCell(item, i)}\n </div>\n ))}\n </>\n ) : (\n renderRow?.(item, i)\n )}\n </VirtualRow>\n );\n };\n\n const visibleRows: React.ReactNode[] = [];\n for (let i = startIndex; i <= endIndex; i++) visibleRows.push(renderRowAt(i));\n\n // Keep the row being touch-dragged mounted even if it scrolls out of the\n // window. Touch events are dispatched to the element under the finger at\n // touchstart; if that row unmounts, the browser stops delivering touchmove\n // and the drag freezes. Pinning its DOM node keeps the gesture alive.\n const draggedIndex = drag.draggingKey != null ? keys.indexOf(drag.draggingKey) : -1;\n if (draggedIndex >= 0 && (draggedIndex < startIndex || draggedIndex > endIndex)) {\n visibleRows.push(renderRowAt(draggedIndex));\n }\n\n // Same reason, one step further: the row being used holds the focus, and\n // unmounting it would drop that focus to the document body mid-scroll.\n if (nav.enteredIndex >= 0 && (nav.enteredIndex < startIndex || nav.enteredIndex > endIndex)) {\n visibleRows.push(renderRowAt(nav.enteredIndex));\n }\n\n return (\n <div\n {...rest}\n {...nav.containerProps}\n ref={rootRef}\n className={cx(\n styles.virtualList,\n drag.draggingKey != null && styles.virtualListReordering,\n columnResize.isResizing && styles.virtualListResizing,\n className,\n classNames?.root,\n )}\n style={{ height, ...widthVars, ...style, ...slotStyles?.root }}\n onScroll={win.handleScroll}\n role={ariaRoles?.container ?? (hasColumns ? 'grid' : 'list')}\n aria-rowcount={hasColumns ? rows.length + 1 : undefined}\n // Only a composite role may point at an active descendant, and the default\n // `list` is not one. In list mode, pass `ariaRoles` (e.g. listbox/option)\n // to have the active row announced.\n aria-activedescendant={\n nav.activeIndex >= 0 && (ariaRoles?.container ?? (hasColumns ? 'grid' : 'list')) !== 'list'\n ? rowDomId(nav.activeIndex)\n : undefined\n }\n >\n {hasColumns && (\n <VirtualListHeader<T>\n headerRef={headerRef}\n columns={columns!}\n cols={cols}\n resize={columnResize}\n sort={effectiveSort}\n onSort={handleHeaderSort}\n multiSelect={multiSelect}\n allSelected={selection.allSelected}\n someSelected={selection.someSelected}\n onSelectAll={selection.handleSelectAll}\n labels={text}\n classNames={classNames}\n styles={slotStyles}\n />\n )}\n {isLoading ? (\n <div className={styles.virtualListLoadingFull}>\n <SpinnerLoading className={styles.virtualListSpinner} />\n </div>\n ) : (\n <div\n className={cx(styles.virtualListBody, classNames?.body)}\n style={{ height: totalHeight, ...slotStyles?.body }}\n >\n {visibleRows}\n </div>\n )}\n {win.showLoadMoreSpinner && (\n <div\n className={cx(styles.virtualListLoadingIndicator, classNames?.loadingIndicator)}\n style={slotStyles?.loadingIndicator}\n >\n <SpinnerLoading className={styles.virtualListSpinner} />\n </div>\n )}\n </div>\n );\n}\n\n// forwardRef erases the generic, so cast back to a generic-preserving signature.\nconst VirtualList = React.forwardRef(VirtualListInner) as <T>(\n props: VirtualListProps<T> & { ref?: React.Ref<VirtualListHandle> },\n) => React.ReactElement | null;\n\nexport default VirtualList;\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Align as e}from"../floatingMenu/floatingMenu.types.mjs";import t from"../floatingMenu/floatingMenu.mjs";import n from"../checkbox/checkbox.mjs";import r from"./virtualList.module.mjs";import{isColumnSortable as i}from"./virtualList.utils.mjs";import{useHeaderNavigation as a}from"./useHeaderNavigation.mjs";import"react";import o from"classnames";import{FontAwesomeIcon as s}from"@fortawesome/react-fontawesome";import{faGear as c,faSort as l,faSortDown as u,faSortUp as d}from"@fortawesome/free-solid-svg-icons";import{jsx as f,jsxs as p}from"react/jsx-runtime";var m=10;function h({headerRef:e,columns:t,cols:c,resize:h,sort:_,onSort:v,multiSelect:y,allSelected:b,someSelected:x,onSelectAll:S,resetColumnWidthsLabel:C,classNames:w,styles:T}){let E=+!!y,D=E+c.visibleColumns.length+ +!!c.shouldShowToggle,O=a(D);return p(`div`,{ref:e,className:o(r.virtualListHeader,w?.header),style:{gridTemplateColumns:c.columnTemplate,...c.shouldShowToggle?{paddingRight:32}:{},...T?.header},role:`row`,"aria-rowindex":1,children:[y&&f(`div`,{...O.getStationProps(0),className:o(r.virtualListSelectCell,w?.selectCell),style:T?.selectCell,role:`columnheader`,onKeyDown:e=>{O.handleNavigationKey(e,0)||e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),S())},children:f(n,{selected:b||x,onToggle:S,"aria-label":`Select all rows`,tabIndex:-1})}),c.visibleColumns.map((e,t)=>{let n=i(e),a=_&&_.key===e.key?_.direction:null,c=h.getHandleProps(e),g=E+t;return p(`div`,{...O.getStationProps(g),onKeyDown:t=>{if(!O.handleNavigationKey(t,g)){if(t.altKey&&h.isResizable(e)){let n=t.shiftKey?1:m;if(t.key===`ArrowRight`)h.resizeBy(e.key,n);else if(t.key===`ArrowLeft`)h.resizeBy(e.key,-n);else if(t.key===`Home`)h.resizeToMin(e.key);else if(t.key===`End`)h.autoFit(e.key);else return;t.preventDefault();return}n&&t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),v(e.key))}},className:o(r.virtualListHeaderCell,w?.headerCell),style:T?.headerCell,role:`columnheader`,"data-col-key":e.key,"aria-sort":n?a===`asc`?`ascending`:a===`desc`?`descending`:`none`:void 0,"data-fit-key":e.width.type===`fit`?e.key:void 0,children:[n?p(`button`,{type:`button`,className:o(r.virtualListHeaderSort,w?.headerSort),style:T?.headerSort,onClick:()=>v(e.key),tabIndex:-1,children:[f(`span`,{className:r.virtualListHeaderSortLabel,children:e.label}),f(s,{className:o(r.virtualListHeaderSortIcon,a&&r.virtualListHeaderSortIconActive,w?.sortIcon),style:T?.sortIcon,icon:a===`asc`?d:a===`desc`?u:l})]}):e.label,c&&f(`div`,{...c,className:o(r.virtualListHeaderResize,w?.resizeHandle),style:T?.resizeHandle})]},e.key)}),c.shouldShowToggle&&f(g,{station:D-1,nav:O,columns:t,cols:c,resize:h,resetColumnWidthsLabel:C,classNames:w,styles:T})]})}function g({station:i,nav:a,columns:l,cols:u,resize:d,resetColumnWidthsLabel:m,classNames:h,styles:g}){return p(`div`,{className:r.virtualListToggleWrapper,children:[f(t,{isOpen:u.toggleOpen,onOpenChange:u.setToggleOpen,align:e.Right,dontCloseOnChildClick:!0,content:p(`div`,{className:o(r.virtualListTogglePopover,h?.togglePopover),style:g?.togglePopover,children:[l.filter(e=>!e.hideFromToggle).map(e=>f(n,{className:o(r.virtualListToggleItem,h?.toggleItem),style:g?.toggleItem,selected:u.effectiveVisible.has(e.key),onToggle:()=>u.handleToggleColumn(e.key),disabled:e.lockVisible,cursorDefault:!1,children:e.toggleLabel??e.label},e.key)),d.isFrozen&&f(`button`,{type:`button`,className:o(r.virtualListToggleReset,h?.toggleReset),style:g?.toggleReset,onClick:()=>{d.reset(),u.setToggleOpen(!1)},children:m})]}),children:f(`button`,{...a.getStationProps(i),type:`button`,className:o(r.virtualListHeaderToggle,h?.headerToggle),style:g?.headerToggle,"aria-label":`Toggle column visibility`,onKeyDown:e=>a.handleNavigationKey(e,i),children:f(s,{icon:c,style:g?.headerToggle})})}),u.manuallyHiddenCount>0&&f(`span`,{className:o(r.virtualListColumnChip,h?.columnChip),style:g?.columnChip,"data-column-hidden-count":u.manuallyHiddenCount,"aria-label":`${u.manuallyHiddenCount} columns hidden`,children:u.manuallyHiddenCount})]})}export{h as default};
1
+ import{Align as e}from"../floatingMenu/floatingMenu.types.mjs";import t from"../floatingMenu/floatingMenu.mjs";import n from"../checkbox/checkbox.mjs";import r from"./virtualList.module.mjs";import{isColumnSortable as i}from"./virtualList.utils.mjs";import{useHeaderNavigation as a}from"./useHeaderNavigation.mjs";import"react";import o from"classnames";import{FontAwesomeIcon as s}from"@fortawesome/react-fontawesome";import{faGear as c,faSort as l,faSortDown as u,faSortUp as d}from"@fortawesome/free-solid-svg-icons";import{jsx as f,jsxs as p}from"react/jsx-runtime";var m=10;function h({headerRef:e,columns:t,cols:c,resize:h,sort:_,onSort:v,multiSelect:y,allSelected:b,someSelected:x,onSelectAll:S,labels:C,classNames:w,styles:T}){let E=+!!y,D=E+c.visibleColumns.length+ +!!c.shouldShowToggle,O=a(D);return p(`div`,{ref:e,className:o(r.virtualListHeader,w?.header),style:{gridTemplateColumns:c.columnTemplate,...c.shouldShowToggle?{paddingRight:32}:{},...T?.header},role:`row`,"aria-rowindex":1,children:[y&&f(`div`,{...O.getStationProps(0),className:o(r.virtualListSelectCell,w?.selectCell),style:T?.selectCell,role:`columnheader`,onKeyDown:e=>{O.handleNavigationKey(e,0)||e.target===e.currentTarget&&(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),S())},children:f(n,{selected:b||x,onToggle:S,"aria-label":C.selectAllRows,tabIndex:-1})}),c.visibleColumns.map((e,t)=>{let n=i(e),a=_&&_.key===e.key?_.direction:null,c=h.getHandleProps(e),g=E+t;return p(`div`,{...O.getStationProps(g),onKeyDown:t=>{if(!O.handleNavigationKey(t,g)){if(t.altKey&&h.isResizable(e)){let n=t.shiftKey?1:m;if(t.key===`ArrowRight`)h.resizeBy(e.key,n);else if(t.key===`ArrowLeft`)h.resizeBy(e.key,-n);else if(t.key===`Home`)h.resizeToMin(e.key);else if(t.key===`End`)h.autoFit(e.key);else return;t.preventDefault();return}n&&t.target===t.currentTarget&&(t.key===`Enter`||t.key===` `)&&(t.preventDefault(),v(e.key))}},className:o(r.virtualListHeaderCell,w?.headerCell),style:T?.headerCell,role:`columnheader`,"data-col-key":e.key,"aria-sort":n?a===`asc`?`ascending`:a===`desc`?`descending`:`none`:void 0,"data-fit-key":e.width.type===`fit`?e.key:void 0,children:[n?p(`button`,{type:`button`,className:o(r.virtualListHeaderSort,w?.headerSort),style:T?.headerSort,onClick:()=>v(e.key),tabIndex:-1,children:[f(`span`,{className:r.virtualListHeaderSortLabel,children:e.label}),f(s,{className:o(r.virtualListHeaderSortIcon,a&&r.virtualListHeaderSortIconActive,w?.sortIcon),style:T?.sortIcon,icon:a===`asc`?d:a===`desc`?u:l})]}):e.label,c&&f(`div`,{...c,className:o(r.virtualListHeaderResize,w?.resizeHandle),style:T?.resizeHandle})]},e.key)}),c.shouldShowToggle&&f(g,{station:D-1,nav:O,columns:t,cols:c,resize:h,labels:C,classNames:w,styles:T})]})}function g({station:i,nav:a,columns:l,cols:u,resize:d,labels:m,classNames:h,styles:g}){return p(`div`,{className:r.virtualListToggleWrapper,children:[f(t,{isOpen:u.toggleOpen,onOpenChange:u.setToggleOpen,align:e.Right,dontCloseOnChildClick:!0,content:p(`div`,{className:o(r.virtualListTogglePopover,h?.togglePopover),style:g?.togglePopover,children:[l.filter(e=>!e.hideFromToggle).map(e=>f(n,{className:o(r.virtualListToggleItem,h?.toggleItem),style:g?.toggleItem,selected:u.effectiveVisible.has(e.key),onToggle:()=>u.handleToggleColumn(e.key),disabled:e.lockVisible,cursorDefault:!1,children:e.toggleLabel??e.label},e.key)),d.isFrozen&&f(`button`,{type:`button`,className:o(r.virtualListToggleReset,h?.toggleReset),style:g?.toggleReset,onClick:()=>{d.reset(),u.setToggleOpen(!1)},children:m.resetColumnWidths})]}),children:f(`button`,{...a.getStationProps(i),type:`button`,className:o(r.virtualListHeaderToggle,h?.headerToggle),style:g?.headerToggle,"aria-label":m.toggleColumns,onKeyDown:e=>a.handleNavigationKey(e,i),children:f(s,{icon:c,style:g?.headerToggle})})}),u.manuallyHiddenCount>0&&f(`span`,{className:o(r.virtualListColumnChip,h?.columnChip),style:g?.columnChip,"data-column-hidden-count":u.manuallyHiddenCount,"aria-label":m.columnsHidden(u.manuallyHiddenCount),children:u.manuallyHiddenCount})]})}export{h as default};
2
2
  //# sourceMappingURL=virtualListHeader.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtualListHeader.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualListHeader.tsx"],"sourcesContent":["import React from 'react';\nimport cx from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGear, faSort, faSortDown, faSortUp } from '@fortawesome/free-solid-svg-icons';\n\nimport styles from './virtualList.module.pcss';\nimport Checkbox from '../checkbox';\nimport FloatingMenu, { Align } from '../floatingMenu';\nimport { isColumnSortable } from './virtualList.utils';\nimport { useHeaderNavigation } from './useHeaderNavigation';\nimport type { UseColumnsResult } from './useColumns';\nimport type { UseColumnResizeResult } from './useColumnResize';\nimport type { SlotClassNames, SlotStyles } from '../types/slots.types';\nimport type { VirtualListColumn, VirtualListSlots, VirtualListSort } from './virtualList.types';\n\n/** Width change of one Alt+arrow press, in px. Alt+Shift steps by one instead. */\nconst KEYBOARD_RESIZE_STEP = 10;\n\n/** FontAwesome's own style type, which carries the `--fa-font-*` custom properties. */\ntype FaStyle = React.CSSProperties & Record<`--fa-font-${string}`, string>;\n\ninterface VirtualListHeaderProps<T> {\n headerRef: React.RefObject<HTMLDivElement | null>;\n /** Every column, including hidden ones: the toggle menu lists them all. */\n columns: VirtualListColumn<T>[];\n cols: UseColumnsResult<T>;\n resize: UseColumnResizeResult<T>;\n sort: VirtualListSort | null;\n onSort: (key: string) => void;\n multiSelect: boolean;\n allSelected: boolean;\n someSelected: boolean;\n onSelectAll: () => void;\n resetColumnWidthsLabel: React.ReactNode;\n classNames?: SlotClassNames<VirtualListSlots>;\n styles?: SlotStyles<VirtualListSlots>;\n}\n\n/**\n * The table-mode header row: one cell per visible column, each optionally a sort\n * button and a resize handle, plus the column-visibility menu pinned to the\n * right. It is a grid with the same template as every row, which is what keeps\n * the columns aligned across the separate grids.\n *\n * The whole header is a single tab stop (see `useHeaderNavigation`). Focus lands\n * on a header cell rather than on the button inside it, so every key a column\n * understands is handled in one place: Enter or Space sorts, Alt plus the arrow\n * keys resizes, Alt+Home and Alt+End take the column to its minimum or to its\n * content width.\n */\nfunction VirtualListHeader<T>({\n headerRef,\n columns,\n cols,\n resize,\n sort,\n onSort,\n multiSelect,\n allSelected,\n someSelected,\n onSelectAll,\n resetColumnWidthsLabel,\n classNames,\n styles: slotStyles,\n}: VirtualListHeaderProps<T>) {\n // Station order is the reading order: the select-all box, the columns, the menu.\n const columnOffset = multiSelect ? 1 : 0;\n const stationCount = columnOffset + cols.visibleColumns.length + (cols.shouldShowToggle ? 1 : 0);\n const nav = useHeaderNavigation(stationCount);\n\n return (\n <div\n ref={headerRef}\n className={cx(styles.virtualListHeader, classNames?.header)}\n style={{\n gridTemplateColumns: cols.columnTemplate,\n ...(cols.shouldShowToggle ? { paddingRight: 32 } : {}),\n ...slotStyles?.header,\n }}\n role='row'\n aria-rowindex={1}\n >\n {multiSelect && (\n <div\n {...nav.getStationProps(0)}\n className={cx(styles.virtualListSelectCell, classNames?.selectCell)}\n style={slotStyles?.selectCell}\n role='columnheader'\n onKeyDown={(event) => {\n if (nav.handleNavigationKey(event, 0)) return;\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelectAll();\n }}\n >\n <Checkbox\n selected={allSelected || someSelected}\n onToggle={onSelectAll}\n aria-label='Select all rows'\n tabIndex={-1}\n />\n </div>\n )}\n\n {cols.visibleColumns.map((col, columnIndex) => {\n const sortable = isColumnSortable(col);\n const direction = sort && sort.key === col.key ? sort.direction : null;\n const handleProps = resize.getHandleProps(col);\n const station = columnOffset + columnIndex;\n return (\n <div\n key={col.key}\n {...nav.getStationProps(station)}\n onKeyDown={(event) => {\n if (nav.handleNavigationKey(event, station)) return;\n if (event.altKey && resize.isResizable(col)) {\n const step = event.shiftKey ? 1 : KEYBOARD_RESIZE_STEP;\n if (event.key === 'ArrowRight') resize.resizeBy(col.key, step);\n else if (event.key === 'ArrowLeft') resize.resizeBy(col.key, -step);\n else if (event.key === 'Home') resize.resizeToMin(col.key);\n else if (event.key === 'End') resize.autoFit(col.key);\n else return;\n event.preventDefault();\n return;\n }\n // Only when the cell itself holds the focus: after a mouse click\n // the focus sits on the sort button, which activates on its own.\n if (!sortable || event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSort(col.key);\n }}\n className={cx(styles.virtualListHeaderCell, classNames?.headerCell)}\n style={slotStyles?.headerCell}\n role='columnheader'\n data-col-key={col.key}\n aria-sort={\n sortable ? (direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none') : undefined\n }\n data-fit-key={col.width.type === 'fit' ? col.key : undefined}\n >\n {sortable ? (\n <button\n type='button'\n className={cx(styles.virtualListHeaderSort, classNames?.headerSort)}\n style={slotStyles?.headerSort}\n onClick={() => onSort(col.key)}\n tabIndex={-1}\n >\n <span className={styles.virtualListHeaderSortLabel}>{col.label}</span>\n {/* Rendered in every state, inactive included: the header cell is\n measured for `fit` columns and those pins only ever grow, so an\n icon that appears on click would widen the column for good. */}\n <FontAwesomeIcon\n className={cx(\n styles.virtualListHeaderSortIcon,\n direction && styles.virtualListHeaderSortIconActive,\n classNames?.sortIcon,\n )}\n style={slotStyles?.sortIcon as FaStyle}\n icon={direction === 'asc' ? faSortUp : direction === 'desc' ? faSortDown : faSort}\n />\n </button>\n ) : (\n col.label\n )}\n {handleProps && (\n <div\n {...handleProps}\n className={cx(styles.virtualListHeaderResize, classNames?.resizeHandle)}\n style={slotStyles?.resizeHandle}\n />\n )}\n </div>\n );\n })}\n\n {cols.shouldShowToggle && (\n <ColumnToggle\n station={stationCount - 1}\n nav={nav}\n columns={columns}\n cols={cols}\n resize={resize}\n resetColumnWidthsLabel={resetColumnWidthsLabel}\n classNames={classNames}\n styles={slotStyles}\n />\n )}\n </div>\n );\n}\n\ntype ColumnToggleProps<T> = Pick<\n VirtualListHeaderProps<T>,\n 'columns' | 'cols' | 'resize' | 'resetColumnWidthsLabel' | 'classNames' | 'styles'\n> & {\n station: number;\n nav: ReturnType<typeof useHeaderNavigation>;\n};\n\n/**\n * The gear at the header's trailing edge: one checkbox per column, the reset for\n * user-set widths, and a badge counting the columns the user has hidden.\n */\nfunction ColumnToggle<T>({\n station,\n nav,\n columns,\n cols,\n resize,\n resetColumnWidthsLabel,\n classNames,\n styles: slotStyles,\n}: ColumnToggleProps<T>) {\n return (\n <div className={styles.virtualListToggleWrapper}>\n <FloatingMenu\n isOpen={cols.toggleOpen}\n onOpenChange={cols.setToggleOpen}\n align={Align.Right}\n dontCloseOnChildClick\n content={\n <div\n className={cx(styles.virtualListTogglePopover, classNames?.togglePopover)}\n style={slotStyles?.togglePopover}\n >\n {columns\n .filter((col) => !col.hideFromToggle)\n .map((col) => (\n <Checkbox\n key={col.key}\n className={cx(styles.virtualListToggleItem, classNames?.toggleItem)}\n style={slotStyles?.toggleItem}\n selected={cols.effectiveVisible.has(col.key)}\n onToggle={() => cols.handleToggleColumn(col.key)}\n disabled={col.lockVisible}\n cursorDefault={false}\n >\n {col.toggleLabel ?? col.label}\n </Checkbox>\n ))}\n {resize.isFrozen && (\n <button\n type='button'\n className={cx(styles.virtualListToggleReset, classNames?.toggleReset)}\n style={slotStyles?.toggleReset}\n onClick={() => {\n resize.reset();\n cols.setToggleOpen(false);\n }}\n >\n {resetColumnWidthsLabel}\n </button>\n )}\n </div>\n }\n >\n <button\n {...nav.getStationProps(station)}\n type='button'\n className={cx(styles.virtualListHeaderToggle, classNames?.headerToggle)}\n style={slotStyles?.headerToggle}\n aria-label='Toggle column visibility'\n // Enter and Space are the button's own; only the arrows are ours.\n onKeyDown={(event) => nav.handleNavigationKey(event, station)}\n >\n <FontAwesomeIcon icon={faGear} style={slotStyles?.headerToggle as FaStyle} />\n </button>\n </FloatingMenu>\n {cols.manuallyHiddenCount > 0 && (\n <span\n className={cx(styles.virtualListColumnChip, classNames?.columnChip)}\n style={slotStyles?.columnChip}\n data-column-hidden-count={cols.manuallyHiddenCount}\n aria-label={`${cols.manuallyHiddenCount} columns hidden`}\n >\n {cols.manuallyHiddenCount}\n </span>\n )}\n </div>\n );\n}\n\nexport default VirtualListHeader;\n"],"mappings":"0jBAgBA,IAAM,EAAuB,GAkC7B,SAAS,EAAqB,CAC5B,YACA,UACA,OACA,SACA,OACA,SACA,cACA,cACA,eACA,cACA,yBACA,aACA,OAAQ,GACoB,CAE5B,IAAM,EAAe,KACf,EAAe,EAAe,EAAK,eAAe,QAAU,KAAK,iBACjE,EAAM,EAAoB,CAAY,EAE5C,OACE,EAAC,MAAD,CACE,IAAK,EACL,UAAW,EAAG,EAAO,kBAAmB,GAAY,MAAM,EAC1D,MAAO,CACL,oBAAqB,EAAK,eAC1B,GAAI,EAAK,iBAAmB,CAAE,aAAc,EAAG,EAAI,CAAC,EACpD,GAAG,GAAY,MACjB,EACA,KAAK,MACL,gBAAe,EATjB,SAAA,CAWG,GACC,EAAC,MAAD,CACE,GAAI,EAAI,gBAAgB,CAAC,EACzB,UAAW,EAAG,EAAO,sBAAuB,GAAY,UAAU,EAClE,MAAO,GAAY,WACnB,KAAK,eACL,UAAY,GAAU,CAChB,EAAI,oBAAoB,EAAO,CAAC,GAChC,EAAM,SAAW,EAAM,gBACvB,EAAM,MAAQ,SAAW,EAAM,MAAQ,OAC3C,EAAM,eAAe,EACrB,EAAY,EACd,EAEA,SAAA,EAAC,EAAD,CACE,SAAU,GAAe,EACzB,SAAU,EACV,aAAW,kBACX,SAAU,EACX,CAAA,CACE,CAAA,EAGN,EAAK,eAAe,KAAK,EAAK,IAAgB,CAC7C,IAAM,EAAW,EAAiB,CAAG,EAC/B,EAAY,GAAQ,EAAK,MAAQ,EAAI,IAAM,EAAK,UAAY,KAC5D,EAAc,EAAO,eAAe,CAAG,EACvC,EAAU,EAAe,EAC/B,OACE,EAAC,MAAD,CAEE,GAAI,EAAI,gBAAgB,CAAO,EAC/B,UAAY,GAAU,CAChB,MAAI,oBAAoB,EAAO,CAAO,EAC1C,IAAI,EAAM,QAAU,EAAO,YAAY,CAAG,EAAG,CAC3C,IAAM,EAAO,EAAM,SAAW,EAAI,EAClC,GAAI,EAAM,MAAQ,aAAc,EAAO,SAAS,EAAI,IAAK,CAAI,OACxD,GAAI,EAAM,MAAQ,YAAa,EAAO,SAAS,EAAI,IAAK,CAAC,CAAI,OAC7D,GAAI,EAAM,MAAQ,OAAQ,EAAO,YAAY,EAAI,GAAG,OACpD,GAAI,EAAM,MAAQ,MAAO,EAAO,QAAQ,EAAI,GAAG,OAC/C,OACL,EAAM,eAAe,EACrB,MACF,CAGK,GAAY,EAAM,SAAW,EAAM,gBACpC,EAAM,MAAQ,SAAW,EAAM,MAAQ,OAC3C,EAAM,eAAe,EACrB,EAAO,EAAI,GAAG,EANd,CAOF,EACA,UAAW,EAAG,EAAO,sBAAuB,GAAY,UAAU,EAClE,MAAO,GAAY,WACnB,KAAK,eACL,eAAc,EAAI,IAClB,YACE,EAAY,IAAc,MAAQ,YAAc,IAAc,OAAS,aAAe,OAAU,IAAA,GAElG,eAAc,EAAI,MAAM,OAAS,MAAQ,EAAI,IAAM,IAAA,GA7BrD,SAAA,CA+BG,EACC,EAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAG,EAAO,sBAAuB,GAAY,UAAU,EAClE,MAAO,GAAY,WACnB,YAAe,EAAO,EAAI,GAAG,EAC7B,SAAU,GALZ,SAAA,CAOE,EAAC,OAAD,CAAM,UAAW,EAAO,2BAA6B,SAAA,EAAI,KAAY,CAAA,EAIrE,EAAC,EAAD,CACE,UAAW,EACT,EAAO,0BACP,GAAa,EAAO,gCACpB,GAAY,QACd,EACA,MAAO,GAAY,SACnB,KAAM,IAAc,MAAQ,EAAW,IAAc,OAAS,EAAa,CAC5E,CAAA,CACK,CAER,CAAA,EAAA,EAAI,MAEL,GACC,EAAC,MAAD,CACE,GAAI,EACJ,UAAW,EAAG,EAAO,wBAAyB,GAAY,YAAY,EACtE,MAAO,GAAY,YACpB,CAAA,CAEA,CA9DE,EAAA,EAAI,GA8DN,CAET,CAAC,EAEA,EAAK,kBACJ,EAAC,EAAD,CACE,QAAS,EAAe,EACnB,MACI,UACH,OACE,SACgB,yBACZ,aACZ,OAAQ,CACT,CAAA,CAEA,GAET,CAcA,SAAS,EAAgB,CACvB,UACA,MACA,UACA,OACA,SACA,yBACA,aACA,OAAQ,GACe,CACvB,OACE,EAAC,MAAD,CAAK,UAAW,EAAO,yBAAvB,SAAA,CACE,EAAC,EAAD,CACE,OAAQ,EAAK,WACb,aAAc,EAAK,cACnB,MAAO,EAAM,MACb,sBAAA,GACA,QACE,EAAC,MAAD,CACE,UAAW,EAAG,EAAO,yBAA0B,GAAY,aAAa,EACxE,MAAO,GAAY,cAFrB,SAAA,CAIG,EACE,OAAQ,GAAQ,CAAC,EAAI,cAAc,CAAC,CACpC,IAAK,GACJ,EAAC,EAAD,CAEE,UAAW,EAAG,EAAO,sBAAuB,GAAY,UAAU,EAClE,MAAO,GAAY,WACnB,SAAU,EAAK,iBAAiB,IAAI,EAAI,GAAG,EAC3C,aAAgB,EAAK,mBAAmB,EAAI,GAAG,EAC/C,SAAU,EAAI,YACd,cAAe,GAEd,SAAA,EAAI,aAAe,EAAI,KAChB,EATH,EAAI,GASD,CACX,EACF,EAAO,UACN,EAAC,SAAD,CACE,KAAK,SACL,UAAW,EAAG,EAAO,uBAAwB,GAAY,WAAW,EACpE,MAAO,GAAY,YACnB,YAAe,CACb,EAAO,MAAM,EACb,EAAK,cAAc,EAAK,CAC1B,EAEC,SAAA,CACK,CAAA,CAEP,IAGP,SAAA,EAAC,SAAD,CACE,GAAI,EAAI,gBAAgB,CAAO,EAC/B,KAAK,SACL,UAAW,EAAG,EAAO,wBAAyB,GAAY,YAAY,EACtE,MAAO,GAAY,aACnB,aAAW,2BAEX,UAAY,GAAU,EAAI,oBAAoB,EAAO,CAAO,EAE5D,SAAA,EAAC,EAAD,CAAiB,KAAM,EAAQ,MAAO,GAAY,YAA0B,CAAA,CACtE,CAAA,CACI,CAAA,EACb,EAAK,oBAAsB,GAC1B,EAAC,OAAD,CACE,UAAW,EAAG,EAAO,sBAAuB,GAAY,UAAU,EAClE,MAAO,GAAY,WACnB,2BAA0B,EAAK,oBAC/B,aAAY,GAAG,EAAK,oBAAoB,iBAEvC,SAAA,EAAK,mBACF,CAAA,CAEL,GAET"}
1
+ {"version":3,"file":"virtualListHeader.mjs","names":[],"sources":["../../../../package/common/virtualList/virtualListHeader.tsx"],"sourcesContent":["import React from 'react';\nimport cx from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faGear, faSort, faSortDown, faSortUp } from '@fortawesome/free-solid-svg-icons';\n\nimport styles from './virtualList.module.pcss';\nimport Checkbox from '../checkbox';\nimport FloatingMenu, { Align } from '../floatingMenu';\nimport { isColumnSortable } from './virtualList.utils';\nimport { useHeaderNavigation } from './useHeaderNavigation';\nimport type { UseColumnsResult } from './useColumns';\nimport type { UseColumnResizeResult } from './useColumnResize';\nimport type { SlotClassNames, SlotStyles } from '../types/slots.types';\nimport type { VirtualListColumn, VirtualListLabels, VirtualListSlots, VirtualListSort } from './virtualList.types';\n\n/** Width change of one Alt+arrow press, in px. Alt+Shift steps by one instead. */\nconst KEYBOARD_RESIZE_STEP = 10;\n\n/** FontAwesome's own style type, which carries the `--fa-font-*` custom properties. */\ntype FaStyle = React.CSSProperties & Record<`--fa-font-${string}`, string>;\n\ninterface VirtualListHeaderProps<T> {\n headerRef: React.RefObject<HTMLDivElement | null>;\n /** Every column, including hidden ones: the toggle menu lists them all. */\n columns: VirtualListColumn<T>[];\n cols: UseColumnsResult<T>;\n resize: UseColumnResizeResult<T>;\n sort: VirtualListSort | null;\n onSort: (key: string) => void;\n multiSelect: boolean;\n allSelected: boolean;\n someSelected: boolean;\n onSelectAll: () => void;\n labels: Required<VirtualListLabels>;\n classNames?: SlotClassNames<VirtualListSlots>;\n styles?: SlotStyles<VirtualListSlots>;\n}\n\n/**\n * The table-mode header row: one cell per visible column, each optionally a sort\n * button and a resize handle, plus the column-visibility menu pinned to the\n * right. It is a grid with the same template as every row, which is what keeps\n * the columns aligned across the separate grids.\n *\n * The whole header is a single tab stop (see `useHeaderNavigation`). Focus lands\n * on a header cell rather than on the button inside it, so every key a column\n * understands is handled in one place: Enter or Space sorts, Alt plus the arrow\n * keys resizes, Alt+Home and Alt+End take the column to its minimum or to its\n * content width.\n */\nfunction VirtualListHeader<T>({\n headerRef,\n columns,\n cols,\n resize,\n sort,\n onSort,\n multiSelect,\n allSelected,\n someSelected,\n onSelectAll,\n labels,\n classNames,\n styles: slotStyles,\n}: VirtualListHeaderProps<T>) {\n // Station order is the reading order: the select-all box, the columns, the menu.\n const columnOffset = multiSelect ? 1 : 0;\n const stationCount = columnOffset + cols.visibleColumns.length + (cols.shouldShowToggle ? 1 : 0);\n const nav = useHeaderNavigation(stationCount);\n\n return (\n <div\n ref={headerRef}\n className={cx(styles.virtualListHeader, classNames?.header)}\n style={{\n gridTemplateColumns: cols.columnTemplate,\n ...(cols.shouldShowToggle ? { paddingRight: 32 } : {}),\n ...slotStyles?.header,\n }}\n role='row'\n aria-rowindex={1}\n >\n {multiSelect && (\n <div\n {...nav.getStationProps(0)}\n className={cx(styles.virtualListSelectCell, classNames?.selectCell)}\n style={slotStyles?.selectCell}\n role='columnheader'\n onKeyDown={(event) => {\n if (nav.handleNavigationKey(event, 0)) return;\n if (event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSelectAll();\n }}\n >\n <Checkbox\n selected={allSelected || someSelected}\n onToggle={onSelectAll}\n aria-label={labels.selectAllRows}\n tabIndex={-1}\n />\n </div>\n )}\n\n {cols.visibleColumns.map((col, columnIndex) => {\n const sortable = isColumnSortable(col);\n const direction = sort && sort.key === col.key ? sort.direction : null;\n const handleProps = resize.getHandleProps(col);\n const station = columnOffset + columnIndex;\n return (\n <div\n key={col.key}\n {...nav.getStationProps(station)}\n onKeyDown={(event) => {\n if (nav.handleNavigationKey(event, station)) return;\n if (event.altKey && resize.isResizable(col)) {\n const step = event.shiftKey ? 1 : KEYBOARD_RESIZE_STEP;\n if (event.key === 'ArrowRight') resize.resizeBy(col.key, step);\n else if (event.key === 'ArrowLeft') resize.resizeBy(col.key, -step);\n else if (event.key === 'Home') resize.resizeToMin(col.key);\n else if (event.key === 'End') resize.autoFit(col.key);\n else return;\n event.preventDefault();\n return;\n }\n // Only when the cell itself holds the focus: after a mouse click\n // the focus sits on the sort button, which activates on its own.\n if (!sortable || event.target !== event.currentTarget) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n onSort(col.key);\n }}\n className={cx(styles.virtualListHeaderCell, classNames?.headerCell)}\n style={slotStyles?.headerCell}\n role='columnheader'\n data-col-key={col.key}\n aria-sort={\n sortable ? (direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none') : undefined\n }\n data-fit-key={col.width.type === 'fit' ? col.key : undefined}\n >\n {sortable ? (\n <button\n type='button'\n className={cx(styles.virtualListHeaderSort, classNames?.headerSort)}\n style={slotStyles?.headerSort}\n onClick={() => onSort(col.key)}\n tabIndex={-1}\n >\n <span className={styles.virtualListHeaderSortLabel}>{col.label}</span>\n {/* Rendered in every state, inactive included: the header cell is\n measured for `fit` columns and those pins only ever grow, so an\n icon that appears on click would widen the column for good. */}\n <FontAwesomeIcon\n className={cx(\n styles.virtualListHeaderSortIcon,\n direction && styles.virtualListHeaderSortIconActive,\n classNames?.sortIcon,\n )}\n style={slotStyles?.sortIcon as FaStyle}\n icon={direction === 'asc' ? faSortUp : direction === 'desc' ? faSortDown : faSort}\n />\n </button>\n ) : (\n col.label\n )}\n {handleProps && (\n <div\n {...handleProps}\n className={cx(styles.virtualListHeaderResize, classNames?.resizeHandle)}\n style={slotStyles?.resizeHandle}\n />\n )}\n </div>\n );\n })}\n\n {cols.shouldShowToggle && (\n <ColumnToggle\n station={stationCount - 1}\n nav={nav}\n columns={columns}\n cols={cols}\n resize={resize}\n labels={labels}\n classNames={classNames}\n styles={slotStyles}\n />\n )}\n </div>\n );\n}\n\ntype ColumnToggleProps<T> = Pick<\n VirtualListHeaderProps<T>,\n 'columns' | 'cols' | 'resize' | 'labels' | 'classNames' | 'styles'\n> & {\n station: number;\n nav: ReturnType<typeof useHeaderNavigation>;\n};\n\n/**\n * The gear at the header's trailing edge: one checkbox per column, the reset for\n * user-set widths, and a badge counting the columns the user has hidden.\n */\nfunction ColumnToggle<T>({\n station,\n nav,\n columns,\n cols,\n resize,\n labels,\n classNames,\n styles: slotStyles,\n}: ColumnToggleProps<T>) {\n return (\n <div className={styles.virtualListToggleWrapper}>\n <FloatingMenu\n isOpen={cols.toggleOpen}\n onOpenChange={cols.setToggleOpen}\n align={Align.Right}\n dontCloseOnChildClick\n content={\n <div\n className={cx(styles.virtualListTogglePopover, classNames?.togglePopover)}\n style={slotStyles?.togglePopover}\n >\n {columns\n .filter((col) => !col.hideFromToggle)\n .map((col) => (\n <Checkbox\n key={col.key}\n className={cx(styles.virtualListToggleItem, classNames?.toggleItem)}\n style={slotStyles?.toggleItem}\n selected={cols.effectiveVisible.has(col.key)}\n onToggle={() => cols.handleToggleColumn(col.key)}\n disabled={col.lockVisible}\n cursorDefault={false}\n >\n {col.toggleLabel ?? col.label}\n </Checkbox>\n ))}\n {resize.isFrozen && (\n <button\n type='button'\n className={cx(styles.virtualListToggleReset, classNames?.toggleReset)}\n style={slotStyles?.toggleReset}\n onClick={() => {\n resize.reset();\n cols.setToggleOpen(false);\n }}\n >\n {labels.resetColumnWidths}\n </button>\n )}\n </div>\n }\n >\n <button\n {...nav.getStationProps(station)}\n type='button'\n className={cx(styles.virtualListHeaderToggle, classNames?.headerToggle)}\n style={slotStyles?.headerToggle}\n aria-label={labels.toggleColumns}\n // Enter and Space are the button's own; only the arrows are ours.\n onKeyDown={(event) => nav.handleNavigationKey(event, station)}\n >\n <FontAwesomeIcon icon={faGear} style={slotStyles?.headerToggle as FaStyle} />\n </button>\n </FloatingMenu>\n {cols.manuallyHiddenCount > 0 && (\n <span\n className={cx(styles.virtualListColumnChip, classNames?.columnChip)}\n style={slotStyles?.columnChip}\n data-column-hidden-count={cols.manuallyHiddenCount}\n aria-label={labels.columnsHidden(cols.manuallyHiddenCount)}\n >\n {cols.manuallyHiddenCount}\n </span>\n )}\n </div>\n );\n}\n\nexport default VirtualListHeader;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- import{AccordionStyleType as e}from"./common/accordion/accordion.types.mjs";import t from"./common/configProvider/configProvider.mjs";import{useComponentDefaults as n}from"./common/configProvider/useComponentDefaults.mjs";import{usePresentationDefault as r}from"./common/configProvider/usePresentationDefault.mjs";import i from"./common/accordion/accordion.mjs";import a from"./common/loading/spinnerLoading/index.mjs";import{ButtonSize as o,ButtonStyleType as s,ButtonType as c}from"./common/button/button.types.mjs";import l from"./common/ripple/ripple.mjs";import u from"./common/button/button.mjs";import d from"./common/actionButtons/actionButtons.mjs";import f from"./common/interactableDiv/index.mjs";import p from"./common/actionIcon/actionIcon.mjs";import{AlertStyleType as m}from"./common/alert/alert.types.mjs";import h from"./common/alert/alert.mjs";import g from"./common/animatedLogo/animatedLogo.mjs";import{AnimatedTextUnit as _,AnimatedTextVariant as v}from"./common/animatedText/animatedText.types.mjs";import y from"./common/animatedText/animatedText.mjs";import{BadgePosition as b,BadgeStyleType as x}from"./common/badge/badge.types.mjs";import S from"./common/badge/badge.mjs";import C from"./common/avatar/avatar.mjs";import w from"./common/avatar/avatarGroup.mjs";import T from"./common/bodyEnd/bodyEnd.mjs";import{Align as E,Presentation as D}from"./common/floatingMenu/floatingMenu.types.mjs";import O from"./common/floatingMenu/floatingMenu.mjs";import k from"./common/breadcrumb/breadcrumb.mjs";import{ButtonGroupOrientation as A}from"./common/buttonGroup/buttonGroup.types.mjs";import j from"./common/buttonGroup/buttonGroup.mjs";import{CardStyleType as M}from"./common/card/card.types.mjs";import N from"./common/card/Card.mjs";import P from"./common/card/CardHeader.mjs";import F from"./common/card/CardMedia.mjs";import I from"./common/card/CardContent.mjs";import L from"./common/card/CardActions.mjs";import R from"./common/carousel/carousel.mjs";import z from"./common/checkbox/checkbox.mjs";import{ChipStyleType as B}from"./common/chip/chip.types.mjs";import V from"./common/chip/chip.mjs";import H from"./common/chip/chipContainer.mjs";import U from"./common/tooltip/tooltip.mjs";import{InputIconPosition as W,InputType as G}from"./common/input/input.types.mjs";import K from"./common/input/input.mjs";import q from"./common/colorPicker/colorPicker.mjs";import J from"./common/modal/modal.mjs";import Y from"./common/confirmModal/confirmModal.mjs";import{getLocale as X,mapLocale as Z,setLocale as Q}from"./services/localization.mjs";import $ from"./common/infiniteBlock/infiniteBlock.mjs";import ee from"./common/dropdown/dropdown.mjs";import te from"./common/datePicker/datePicker.mjs";import{DividerOrientation as ne,DividerTextPosition as re}from"./common/divider/divider.types.mjs";import ie from"./common/divider/divider.mjs";import ae from"./common/drawer/drawer.mjs";import{DropZoneReturnType as oe,DropZoneStatus as se}from"./common/dropZone/dropZone.types.mjs";import ce from"./common/dropZone/dropZone.mjs";import le from"./common/emptyState/emptyState.mjs";import{showToast as ue}from"./common/toast/toastService.mjs";import de from"./common/toast/toastProvider.mjs";import fe from"./common/errorBoundary/errorBoundary.mjs";import pe from"./common/fab/fab.mjs";import me from"./common/flip/flip.mjs";import{DoorSwing as he,OpeningKind as ge,PlanIssueKind as _e,PlanUnitSystem as ve,WallType as ye}from"./common/floorPlan/floorPlan.types.mjs";import{MIN_OPENING_WIDTH as be,MIN_WALL_LENGTH as xe}from"./common/floorPlan/floorPlan.geometry.mjs";import{DEFAULT_WALL_ATTRS as Se,addOpening as Ce,addRect as we,addWall as Te,cleanupPlan as Ee,detachWall as De,dissolveNode as Oe,mergeNodes as ke,moveNode as Ae,removeOpening as je,removeWall as Me,scalePlan as Ne,splitWall as Pe,transformPlan as Fe,updateOpening as Ie,validatePlan as Le,wallLength as Re,weldShortWalls as ze}from"./common/floorPlan/floorPlan.graph.mjs";import{MIN_FLOOR_HEIGHT as Be,addFloor as Ve,duplicateFloor as He,emptyFloor as Ue,emptyFloorPlan as We,floorBelow as Ge,floorBounds as Ke,floorIndex as qe,getFloor as Je,moveFloor as Ye,removeFloor as Xe,renameFloor as Ze,setFloor as Qe,setFloorHeight as $e,updateFloor as et}from"./common/floorPlan/floorPlan.plan.mjs";import{deriveFaces as tt,nodeDegrees as nt}from"./common/floorPlan/floorPlan.faces.mjs";import{commitDerivation as rt,derivePlan as it,pruneUnmatchedRooms as at,roomAtPoint as ot}from"./common/floorPlan/floorPlan.rooms.mjs";import{buildWallPaths as st,openingGeometry as ct,wallCentrelineSpans as lt}from"./common/floorPlan/floorPlan.path.mjs";import{HIT_PX as ut,HIT_PX_COARSE as dt,hitTest as ft,selectionsEqual as pt,worldTolerances as mt}from"./common/floorPlan/floorPlan.hit.mjs";import{DEFAULT_SNAP_OPTIONS as ht,SnapKind as gt,clientToWorld as _t,resolveSnap as vt,screenScale as yt}from"./common/floorPlan/floorPlan.snap.mjs";import{PLAN_FORMAT_VERSION as bt,planFromJson as xt,planToJson as St}from"./common/floorPlan/floorPlan.json.mjs";import{buildPlanMesh as Ct}from"./common/floorPlan/floorPlan.mesh.mjs";import{planFromLegacySvg as wt}from"./common/floorPlan/legacySvg.mjs";import Tt from"./common/iconPicker/iconPicker.mjs";import Et from"./common/idleManager/idleManager.mjs";import Dt from"./common/inputDropdown/inputDropdown.mjs";import Ot from"./common/kanbanBoard/KanbanColumn.mjs";import kt from"./common/kanbanBoard/KanbanBoard.mjs";import At from"./common/searchInput/searchInput.mjs";import jt from"./common/klipyPicker/klipyPicker.mjs";import Mt from"./common/loading/iconLoading/index.mjs";import{PopoverAlign as Nt,PopoverPlacement as Pt,PopoverTrigger as Ft}from"./common/popover/popover.types.mjs";import It from"./common/popover/popover.mjs";import Lt from"./common/multiSelect/multiSelect.mjs";import Rt from"./common/numberInput/index.mjs";import zt from"./common/optionPicker/optionPicker.mjs";import{OtpInputCharset as Bt}from"./common/otpInput/otpInput.types.mjs";import Vt from"./common/otpInput/otpInput.mjs";import Ht from"./common/overscroll/overscroll.mjs";import Ut from"./common/pagination/pagination.mjs";import Wt from"./common/progressBar/progressBar.mjs";import{RadioGroupOrientation as Gt}from"./common/radioGroup/radioGroup.types.mjs";import Kt from"./common/radioGroup/radioGroup.mjs";import qt from"./common/rating/rating.mjs";import Jt from"./common/revealLens/revealLens.mjs";import Yt from"./common/roomDrawer/roomDrawer.mjs";import Xt from"./common/roomViewer/roomViewer.mjs";import Zt from"./common/scrollbarProvider/index.mjs";import{SectionHeaderSize as Qt}from"./common/sectionHeader/sectionHeader.types.mjs";import $t from"./common/sectionHeader/sectionHeader.mjs";import{SkeletonAnimation as en,SkeletonVariant as tn}from"./common/skeleton/skeleton.types.mjs";import nn from"./common/skeleton/skeleton.mjs";import rn from"./common/slider/slider.mjs";import an from"./common/splitButton/splitButton.mjs";import{StepperAlignment as on,StepperCollapse as sn,StepperLabelPlacement as cn,StepperStyleType as ln}from"./common/stepper/stepper.types.mjs";import un from"./common/stepper/stepper.mjs";import dn from"./common/sticky/sticky.mjs";import fn from"./common/switch/switch.mjs";import pn from"./common/tabHeader/tabHeader.mjs";import mn from"./common/textarea/textarea.mjs";import{defaultTheme as hn}from"./common/themeProvider/defaultTheme.mjs";import gn from"./common/themeProvider/themeProvider.mjs";import{useTheme as _n}from"./common/themeProvider/useTheme.mjs";import vn,{TiltGroupContext as yn,useTiltGroup as bn}from"./common/tiltGroup/tiltGroup.mjs";import{defaultTiltEasing as xn}from"./common/tilt/tiltMath.mjs";import Sn from"./common/tilt/tilt.mjs";import Cn from"./common/timeInput/timeInput.mjs";import{TimelineAlignment as wn,TimelineItemStatus as Tn}from"./common/timeline/timeline.types.mjs";import En from"./common/timeline/timeline.mjs";import Dn from"./common/timer/timer.mjs";import On from"./common/virtualList/virtualList.mjs";import{flattenTree as kn}from"./common/tree/flattenTree.mjs";import An from"./common/tree/tree.mjs";import jn from"./common/wizard/wizard.mjs";import Mn from"./services/formValidation/FormValidatorGroupWithForm.mjs";import Nn from"./services/formValidation/validatableComponent.mjs";import{useFormValidatorGroup as Pn}from"./services/formValidation/useFormValidatorGroup.mjs";import{FormValidator as Fn,Validators as In,useFormValidator as Ln}from"./services/formValidation/index.mjs";import{hasEightPasswordChars as Rn,hasOnePasswordDigit as zn,hasOnePasswordLetter as Bn,isBic as Vn,isDate as Hn,isEmail as Un,isISODate as Wn,isNumber as Gn,isPassword as Kn,isURL as qn}from"@ahrowe/form-validation";export{i as Accordion,e as AccordionStyleType,d as ActionButtons,p as ActionIcon,h as Alert,m as AlertStyleType,E as Align,g as AnimatedLogo,y as AnimatedText,_ as AnimatedTextUnit,v as AnimatedTextVariant,C as Avatar,w as AvatarGroup,S as Badge,b as BadgePosition,x as BadgeStyleType,T as BodyEnd,k as Breadcrumb,u as Button,j as ButtonGroup,A as ButtonGroupOrientation,o as ButtonSize,s as ButtonStyleType,c as ButtonType,N as Card,L as CardActions,I as CardContent,P as CardHeader,F as CardMedia,M as CardStyleType,R as Carousel,z as Checkbox,V as Chip,H as ChipContainer,B as ChipStyleType,q as ColorPicker,t as ConfigProvider,Y as ConfirmModal,ht as DEFAULT_SNAP_OPTIONS,Se as DEFAULT_WALL_ATTRS,te as DatePicker,ie as Divider,ne as DividerOrientation,re as DividerTextPosition,he as DoorSwing,ae as Drawer,ce as DropZone,oe as DropZoneReturnType,se as DropZoneStatus,ee as Dropdown,le as EmptyState,fe as ErrorBoundary,pe as Fab,me as Flip,O as FloatingMenu,Fn as FormValidator,Mn as FormValidatorGroup,ut as HIT_PX,dt as HIT_PX_COARSE,Mt as IconLoading,Tt as IconPicker,Et as IdleManager,$ as InfiniteBlock,K as Input,Dt as InputDropdown,W as InputIconPosition,G as InputType,f as InteractableDiv,kt as KanbanBoard,Ot as KanbanColumn,jt as KlipyPicker,Be as MIN_FLOOR_HEIGHT,be as MIN_OPENING_WIDTH,xe as MIN_WALL_LENGTH,J as Modal,Lt as MultiSelect,Rt as NumberInput,ge as OpeningKind,zt as OptionPicker,Vt as OtpInput,Bt as OtpInputCharset,Ht as Overscroll,bt as PLAN_FORMAT_VERSION,Ut as Pagination,_e as PlanIssueKind,ve as PlanUnitSystem,It as Popover,Nt as PopoverAlign,Pt as PopoverPlacement,Ft as PopoverTrigger,D as Presentation,Wt as ProgressBar,Kt as RadioGroup,Gt as RadioGroupOrientation,qt as Rating,Jt as RevealLens,l as Ripple,Yt as RoomDrawer,Xt as RoomViewer,Zt as ScrollbarProvider,At as SearchInput,$t as SectionHeader,Qt as SectionHeaderSize,nn as Skeleton,en as SkeletonAnimation,tn as SkeletonVariant,rn as Slider,gt as SnapKind,a as SpinnerLoading,an as SplitButton,un as Stepper,on as StepperAlignment,sn as StepperCollapse,cn as StepperLabelPlacement,ln as StepperStyleType,dn as Sticky,fn as Switch,pn as TabHeader,mn as Textarea,gn as ThemeProvider,Sn as Tilt,vn as TiltGroup,yn as TiltGroupContext,Cn as TimeInput,En as Timeline,wn as TimelineAlignment,Tn as TimelineItemStatus,Dn as Timer,de as ToastProvider,U as Tooltip,An as Tree,Nn as ValidatableComponent,In as Validators,On as VirtualList,ye as WallType,jn as Wizard,Ve as addFloor,Ce as addOpening,we as addRect,Te as addWall,Ct as buildPlanMesh,st as buildWallPaths,Ee as cleanupPlan,_t as clientToWorld,rt as commitDerivation,hn as defaultTheme,xn as defaultTiltEasing,tt as deriveFaces,it as derivePlan,De as detachWall,Oe as dissolveNode,He as duplicateFloor,Ue as emptyFloor,We as emptyFloorPlan,kn as flattenTree,Ge as floorBelow,Ke as floorBounds,qe as floorIndex,Je as getFloor,X as getLocale,Rn as hasEightPasswordChars,zn as hasOnePasswordDigit,Bn as hasOnePasswordLetter,ft as hitTest,Vn as isBic,Hn as isDate,Un as isEmail,Wn as isISODate,Gn as isNumber,Kn as isPassword,qn as isURL,Z as mapLocale,ke as mergeNodes,Ye as moveFloor,Ae as moveNode,nt as nodeDegrees,ct as openingGeometry,xt as planFromJson,wt as planFromLegacySvg,St as planToJson,at as pruneUnmatchedRooms,Xe as removeFloor,je as removeOpening,Me as removeWall,Ze as renameFloor,vt as resolveSnap,ot as roomAtPoint,Ne as scalePlan,yt as screenScale,pt as selectionsEqual,Qe as setFloor,$e as setFloorHeight,Q as setLocale,ue as showToast,Pe as splitWall,Fe as transformPlan,et as updateFloor,Ie as updateOpening,n as useComponentDefaults,Ln as useFormValidator,Pn as useFormValidatorGroup,r as usePresentationDefault,_n as useTheme,bn as useTiltGroup,Le as validatePlan,lt as wallCentrelineSpans,Re as wallLength,ze as weldShortWalls,mt as worldTolerances};
1
+ import{AccordionStyleType as e}from"./common/accordion/accordion.types.mjs";import t from"./common/configProvider/configProvider.mjs";import{useComponentDefaults as n}from"./common/configProvider/useComponentDefaults.mjs";import{useLabels as r}from"./common/configProvider/useLabels.mjs";import{usePresentationDefault as i}from"./common/configProvider/usePresentationDefault.mjs";import a from"./common/accordion/accordion.mjs";import o from"./common/loading/spinnerLoading/index.mjs";import{ButtonSize as s,ButtonStyleType as c,ButtonType as l}from"./common/button/button.types.mjs";import u from"./common/ripple/ripple.mjs";import d from"./common/button/button.mjs";import f from"./common/actionButtons/actionButtons.mjs";import p from"./common/interactableDiv/index.mjs";import m from"./common/actionIcon/actionIcon.mjs";import{AlertStyleType as h}from"./common/alert/alert.types.mjs";import g from"./common/alert/alert.mjs";import _ from"./common/animatedLogo/animatedLogo.mjs";import{AnimatedTextUnit as v,AnimatedTextVariant as y}from"./common/animatedText/animatedText.types.mjs";import b from"./common/animatedText/animatedText.mjs";import{BadgePosition as x,BadgeStyleType as S}from"./common/badge/badge.types.mjs";import C from"./common/badge/badge.mjs";import w from"./common/avatar/avatar.mjs";import T from"./common/avatar/avatarGroup.mjs";import E from"./common/bodyEnd/bodyEnd.mjs";import{Align as D,Presentation as O}from"./common/floatingMenu/floatingMenu.types.mjs";import k from"./common/floatingMenu/floatingMenu.mjs";import A from"./common/breadcrumb/breadcrumb.mjs";import{ButtonGroupOrientation as j}from"./common/buttonGroup/buttonGroup.types.mjs";import M from"./common/buttonGroup/buttonGroup.mjs";import{CardStyleType as N}from"./common/card/card.types.mjs";import P from"./common/card/Card.mjs";import F from"./common/card/CardHeader.mjs";import I from"./common/card/CardMedia.mjs";import L from"./common/card/CardContent.mjs";import R from"./common/card/CardActions.mjs";import z from"./common/carousel/carousel.mjs";import B from"./common/checkbox/checkbox.mjs";import{ChipStyleType as V}from"./common/chip/chip.types.mjs";import H from"./common/chip/chip.mjs";import U from"./common/chip/chipContainer.mjs";import W from"./common/tooltip/tooltip.mjs";import{InputIconPosition as G,InputType as K}from"./common/input/input.types.mjs";import q from"./common/input/input.mjs";import J from"./common/colorPicker/colorPicker.mjs";import Y from"./common/modal/modal.mjs";import X from"./common/confirmModal/confirmModal.mjs";import{getLocale as Z,mapLocale as Q,setLocale as $}from"./services/localization.mjs";import ee from"./common/infiniteBlock/infiniteBlock.mjs";import te from"./common/dropdown/dropdown.mjs";import ne from"./common/datePicker/datePicker.mjs";import{DividerOrientation as re,DividerTextPosition as ie}from"./common/divider/divider.types.mjs";import ae from"./common/divider/divider.mjs";import oe from"./common/drawer/drawer.mjs";import{DropZoneReturnType as se,DropZoneStatus as ce}from"./common/dropZone/dropZone.types.mjs";import le from"./common/dropZone/dropZone.mjs";import ue from"./common/emptyState/emptyState.mjs";import{showToast as de}from"./common/toast/toastService.mjs";import fe from"./common/toast/toastProvider.mjs";import pe from"./common/errorBoundary/errorBoundary.mjs";import me from"./common/fab/fab.mjs";import he from"./common/flip/flip.mjs";import{DoorSwing as ge,OpeningKind as _e,PlanIssueKind as ve,PlanUnitSystem as ye,WallType as be}from"./common/floorPlan/floorPlan.types.mjs";import{MIN_OPENING_WIDTH as xe,MIN_WALL_LENGTH as Se}from"./common/floorPlan/floorPlan.geometry.mjs";import{DEFAULT_WALL_ATTRS as Ce,addOpening as we,addRect as Te,addWall as Ee,cleanupPlan as De,detachWall as Oe,dissolveNode as ke,mergeNodes as Ae,moveNode as je,removeOpening as Me,removeWall as Ne,scalePlan as Pe,splitWall as Fe,transformPlan as Ie,updateOpening as Le,validatePlan as Re,wallLength as ze,weldShortWalls as Be}from"./common/floorPlan/floorPlan.graph.mjs";import{MIN_FLOOR_HEIGHT as Ve,addFloor as He,duplicateFloor as Ue,emptyFloor as We,emptyFloorPlan as Ge,floorBelow as Ke,floorBounds as qe,floorIndex as Je,getFloor as Ye,moveFloor as Xe,removeFloor as Ze,renameFloor as Qe,setFloor as $e,setFloorHeight as et,updateFloor as tt}from"./common/floorPlan/floorPlan.plan.mjs";import{deriveFaces as nt,nodeDegrees as rt}from"./common/floorPlan/floorPlan.faces.mjs";import{commitDerivation as it,derivePlan as at,pruneUnmatchedRooms as ot,roomAtPoint as st}from"./common/floorPlan/floorPlan.rooms.mjs";import{buildWallPaths as ct,openingGeometry as lt,wallCentrelineSpans as ut}from"./common/floorPlan/floorPlan.path.mjs";import{HIT_PX as dt,HIT_PX_COARSE as ft,hitTest as pt,selectionsEqual as mt,worldTolerances as ht}from"./common/floorPlan/floorPlan.hit.mjs";import{DEFAULT_SNAP_OPTIONS as gt,SnapKind as _t,clientToWorld as vt,resolveSnap as yt,screenScale as bt}from"./common/floorPlan/floorPlan.snap.mjs";import{PLAN_FORMAT_VERSION as xt,planFromJson as St,planToJson as Ct}from"./common/floorPlan/floorPlan.json.mjs";import{buildPlanMesh as wt}from"./common/floorPlan/floorPlan.mesh.mjs";import{planFromLegacySvg as Tt}from"./common/floorPlan/legacySvg.mjs";import Et from"./common/iconPicker/iconPicker.mjs";import Dt from"./common/idleManager/idleManager.mjs";import Ot from"./common/inputDropdown/inputDropdown.mjs";import kt from"./common/kanbanBoard/KanbanColumn.mjs";import At from"./common/kanbanBoard/KanbanBoard.mjs";import jt from"./common/searchInput/searchInput.mjs";import Mt from"./common/klipyPicker/klipyPicker.mjs";import Nt from"./common/loading/iconLoading/index.mjs";import{PopoverAlign as Pt,PopoverPlacement as Ft,PopoverTrigger as It}from"./common/popover/popover.types.mjs";import Lt from"./common/popover/popover.mjs";import Rt from"./common/multiSelect/multiSelect.mjs";import zt from"./common/numberInput/index.mjs";import Bt from"./common/optionPicker/optionPicker.mjs";import{OtpInputCharset as Vt}from"./common/otpInput/otpInput.types.mjs";import Ht from"./common/otpInput/otpInput.mjs";import Ut from"./common/overscroll/overscroll.mjs";import Wt from"./common/pagination/pagination.mjs";import Gt from"./common/progressBar/progressBar.mjs";import{RadioGroupOrientation as Kt}from"./common/radioGroup/radioGroup.types.mjs";import qt from"./common/radioGroup/radioGroup.mjs";import Jt from"./common/rating/rating.mjs";import Yt from"./common/revealLens/revealLens.mjs";import Xt from"./common/roomDrawer/roomDrawer.mjs";import Zt from"./common/roomViewer/roomViewer.mjs";import Qt from"./common/scrollbarProvider/index.mjs";import{SectionHeaderSize as $t}from"./common/sectionHeader/sectionHeader.types.mjs";import en from"./common/sectionHeader/sectionHeader.mjs";import{SkeletonAnimation as tn,SkeletonVariant as nn}from"./common/skeleton/skeleton.types.mjs";import rn from"./common/skeleton/skeleton.mjs";import an from"./common/slider/slider.mjs";import on from"./common/splitButton/splitButton.mjs";import{StepperAlignment as sn,StepperCollapse as cn,StepperLabelPlacement as ln,StepperStyleType as un}from"./common/stepper/stepper.types.mjs";import dn from"./common/stepper/stepper.mjs";import fn from"./common/sticky/sticky.mjs";import pn from"./common/switch/switch.mjs";import mn from"./common/tabHeader/tabHeader.mjs";import hn from"./common/textarea/textarea.mjs";import{defaultTheme as gn}from"./common/themeProvider/defaultTheme.mjs";import _n from"./common/themeProvider/themeProvider.mjs";import{useTheme as vn}from"./common/themeProvider/useTheme.mjs";import yn,{TiltGroupContext as bn,useTiltGroup as xn}from"./common/tiltGroup/tiltGroup.mjs";import{defaultTiltEasing as Sn}from"./common/tilt/tiltMath.mjs";import Cn from"./common/tilt/tilt.mjs";import wn from"./common/timeInput/timeInput.mjs";import{TimelineAlignment as Tn,TimelineItemStatus as En}from"./common/timeline/timeline.types.mjs";import Dn from"./common/timeline/timeline.mjs";import On from"./common/timer/timer.mjs";import kn from"./common/virtualList/virtualList.mjs";import{flattenTree as An}from"./common/tree/flattenTree.mjs";import jn from"./common/tree/tree.mjs";import Mn from"./common/wizard/wizard.mjs";import Nn from"./services/formValidation/FormValidatorGroupWithForm.mjs";import Pn from"./services/formValidation/validatableComponent.mjs";import{useFormValidatorGroup as Fn}from"./services/formValidation/useFormValidatorGroup.mjs";import{FormValidator as In,Validators as Ln,useFormValidator as Rn}from"./services/formValidation/index.mjs";import{hasEightPasswordChars as zn,hasOnePasswordDigit as Bn,hasOnePasswordLetter as Vn,isBic as Hn,isDate as Un,isEmail as Wn,isISODate as Gn,isNumber as Kn,isPassword as qn,isURL as Jn}from"@ahrowe/form-validation";export{a as Accordion,e as AccordionStyleType,f as ActionButtons,m as ActionIcon,g as Alert,h as AlertStyleType,D as Align,_ as AnimatedLogo,b as AnimatedText,v as AnimatedTextUnit,y as AnimatedTextVariant,w as Avatar,T as AvatarGroup,C as Badge,x as BadgePosition,S as BadgeStyleType,E as BodyEnd,A as Breadcrumb,d as Button,M as ButtonGroup,j as ButtonGroupOrientation,s as ButtonSize,c as ButtonStyleType,l as ButtonType,P as Card,R as CardActions,L as CardContent,F as CardHeader,I as CardMedia,N as CardStyleType,z as Carousel,B as Checkbox,H as Chip,U as ChipContainer,V as ChipStyleType,J as ColorPicker,t as ConfigProvider,X as ConfirmModal,gt as DEFAULT_SNAP_OPTIONS,Ce as DEFAULT_WALL_ATTRS,ne as DatePicker,ae as Divider,re as DividerOrientation,ie as DividerTextPosition,ge as DoorSwing,oe as Drawer,le as DropZone,se as DropZoneReturnType,ce as DropZoneStatus,te as Dropdown,ue as EmptyState,pe as ErrorBoundary,me as Fab,he as Flip,k as FloatingMenu,In as FormValidator,Nn as FormValidatorGroup,dt as HIT_PX,ft as HIT_PX_COARSE,Nt as IconLoading,Et as IconPicker,Dt as IdleManager,ee as InfiniteBlock,q as Input,Ot as InputDropdown,G as InputIconPosition,K as InputType,p as InteractableDiv,At as KanbanBoard,kt as KanbanColumn,Mt as KlipyPicker,Ve as MIN_FLOOR_HEIGHT,xe as MIN_OPENING_WIDTH,Se as MIN_WALL_LENGTH,Y as Modal,Rt as MultiSelect,zt as NumberInput,_e as OpeningKind,Bt as OptionPicker,Ht as OtpInput,Vt as OtpInputCharset,Ut as Overscroll,xt as PLAN_FORMAT_VERSION,Wt as Pagination,ve as PlanIssueKind,ye as PlanUnitSystem,Lt as Popover,Pt as PopoverAlign,Ft as PopoverPlacement,It as PopoverTrigger,O as Presentation,Gt as ProgressBar,qt as RadioGroup,Kt as RadioGroupOrientation,Jt as Rating,Yt as RevealLens,u as Ripple,Xt as RoomDrawer,Zt as RoomViewer,Qt as ScrollbarProvider,jt as SearchInput,en as SectionHeader,$t as SectionHeaderSize,rn as Skeleton,tn as SkeletonAnimation,nn as SkeletonVariant,an as Slider,_t as SnapKind,o as SpinnerLoading,on as SplitButton,dn as Stepper,sn as StepperAlignment,cn as StepperCollapse,ln as StepperLabelPlacement,un as StepperStyleType,fn as Sticky,pn as Switch,mn as TabHeader,hn as Textarea,_n as ThemeProvider,Cn as Tilt,yn as TiltGroup,bn as TiltGroupContext,wn as TimeInput,Dn as Timeline,Tn as TimelineAlignment,En as TimelineItemStatus,On as Timer,fe as ToastProvider,W as Tooltip,jn as Tree,Pn as ValidatableComponent,Ln as Validators,kn as VirtualList,be as WallType,Mn as Wizard,He as addFloor,we as addOpening,Te as addRect,Ee as addWall,wt as buildPlanMesh,ct as buildWallPaths,De as cleanupPlan,vt as clientToWorld,it as commitDerivation,gn as defaultTheme,Sn as defaultTiltEasing,nt as deriveFaces,at as derivePlan,Oe as detachWall,ke as dissolveNode,Ue as duplicateFloor,We as emptyFloor,Ge as emptyFloorPlan,An as flattenTree,Ke as floorBelow,qe as floorBounds,Je as floorIndex,Ye as getFloor,Z as getLocale,zn as hasEightPasswordChars,Bn as hasOnePasswordDigit,Vn as hasOnePasswordLetter,pt as hitTest,Hn as isBic,Un as isDate,Wn as isEmail,Gn as isISODate,Kn as isNumber,qn as isPassword,Jn as isURL,Q as mapLocale,Ae as mergeNodes,Xe as moveFloor,je as moveNode,rt as nodeDegrees,lt as openingGeometry,St as planFromJson,Tt as planFromLegacySvg,Ct as planToJson,ot as pruneUnmatchedRooms,Ze as removeFloor,Me as removeOpening,Ne as removeWall,Qe as renameFloor,yt as resolveSnap,st as roomAtPoint,Pe as scalePlan,bt as screenScale,mt as selectionsEqual,$e as setFloor,et as setFloorHeight,$ as setLocale,de as showToast,Fe as splitWall,Ie as transformPlan,tt as updateFloor,Le as updateOpening,n as useComponentDefaults,Rn as useFormValidator,Fn as useFormValidatorGroup,r as useLabels,i as usePresentationDefault,vn as useTheme,xn as useTiltGroup,Re as validatePlan,ut as wallCentrelineSpans,ze as wallLength,Be as weldShortWalls,ht as worldTolerances};