@prairielearn/ui 3.2.0 → 3.2.2
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/CHANGELOG.md +17 -0
- package/dist/components/CategoricalColumnFilter.js.map +1 -1
- package/dist/components/ColumnManager.js.map +1 -1
- package/dist/components/ComboBox.d.ts +1 -1
- package/dist/components/ComboBox.d.ts.map +1 -1
- package/dist/components/ComboBox.js.map +1 -1
- package/dist/components/FilterDropdown.js.map +1 -1
- package/dist/components/MultiSelectColumnFilter.js.map +1 -1
- package/dist/components/NumericInputColumnFilter.js.map +1 -1
- package/dist/components/NumericInputColumnFilter.test.js.map +1 -1
- package/dist/components/OverlayTrigger.js.map +1 -1
- package/dist/components/PresetFilterDropdown.js.map +1 -1
- package/dist/components/TanstackTable.d.ts.map +1 -1
- package/dist/components/TanstackTable.js +1 -1
- package/dist/components/TanstackTable.js.map +1 -1
- package/dist/components/TanstackTableDownloadButton.js.map +1 -1
- package/dist/components/TanstackTableHeaderCell.js.map +1 -1
- package/dist/components/nuqs.js.map +1 -1
- package/dist/components/nuqs.test.js.map +1 -1
- package/dist/components/useAutoSizeColumns.js.map +1 -1
- package/dist/components/useShiftClickCheckbox.d.ts +1 -0
- package/dist/components/useShiftClickCheckbox.d.ts.map +1 -1
- package/dist/components/useShiftClickCheckbox.js +3 -0
- package/dist/components/useShiftClickCheckbox.js.map +1 -1
- package/dist/hooks/use-modal-state.js.map +1 -1
- package/package.json +10 -10
- package/src/components/ComboBox.tsx +4 -1
- package/src/components/TanstackTable.tsx +1 -1
- package/src/components/useShiftClickCheckbox.tsx +3 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TanstackTableHeaderCell.js","sourceRoot":"","sources":["../../src/components/TanstackTableHeaderCell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,SAAS,QAAQ,CAAC,EAAE,UAAU,EAAyC,EAAE;IACvE,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,YAAG,SAAS,EAAC,mBAAmB,iBAAa,MAAM,GAAG,CAAC;IAChE,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,YAAG,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,YAAG,SAAS,EAAC,2CAA2C,iBAAa,MAAM,GAAG,CAAC;IACxF,CAAC;AAAA,CACF;AAED,SAAS,YAAY,CAAe,EAClC,MAAM,EACN,eAAe,EACf,WAAW,GAKZ,EAAE;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,CAAC,CAAsB,EAAE,EAAE,CAAC;QAChD,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACzE,MAAM,OAAO,GACX,CAAC,CAAC,GAAG,KAAK,WAAW;gBACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;YAEjD,eAAe,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,UAAU;gBACb,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO;aAC5B,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;IAAA,CACF,CAAC;IAEF,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM;QAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAEvB,OAAO,CACL,cAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAKzF,cACE,IAAI,EAAC,WAAW,gBACJ,WAAW,UAAU,UAAU,oBAC3B,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,sBACtB,UAAU,mBACZ,OAAO,mBACP,OAAO,mBACP,MAAM,CAAC,OAAO,EAAE;YAC/B,iEAAiE;YACjE,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE;gBACL,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB;gBACtF,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,uBAAuB;aACpC,EACD,WAAW,EAAE,MAAM,CAAC,gBAAgB,EAAE,EACtC,SAAS,EAAE,WAAW,EACtB,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,EACvC,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,aAAa,GACxB,GACE,CACP,CAAC;AAAA,CACH;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,aAAoC,EAAE;IACzD,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AAAA,CACF;AAED,MAAM,UAAU,uBAAuB,CAAe,EACpD,MAAM,EACN,OAAO,EACP,KAAK,EACL,eAAe,EACf,QAAQ,EACR,eAAe,GAAG,KAAK,GAQxB,EAAE;IACD,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK;QACnC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;YACjD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM;YAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExB,kFAAkF;IAClF,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAClE,MAAM,KAAK,GAAkB;QAC3B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QACrD,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KAC1D,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,IAAI,SAAS,CAAC;IAE5C,OAAO,CACL,gCAEkB,MAAM,CAAC,MAAM,CAAC,EAAE,EAChC,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,UAAU,CAAC,EAClD,KAAK,EAAE,KAAK,eACD,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,IAAI,EAAC,cAAc;YAEnB,eACE,SAAS,EAAE,IAAI,CACb,uCAAuC,EACvC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB,CACtE,EACD,KAAK,EAAE;oBACL,QAAQ,EAAE,CAAC;iBACZ;oBAED,eACE,SAAS,EAAE,IAAI,CACb,wBAAwB;wBACxB,kBAAkB;wBAClB,CAAC,cAAc,IAAI,kDAAkD,CACtE,EACD,KAAK,EAAE;4BACL,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,QAAQ;4BAClB,YAAY,EAAE,UAAU;4BACxB,UAAU,EAAE,aAAa;4BACzB,MAAM,EAAE,MAAM;yBACf,aAEA,MAAM,CAAC,aAAa;gCACnB,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAClE,OAAO,IAAI,CACV,gBAAM,SAAS,EAAC,iBAAiB,mBAAI,WAAW,CAAC,aAAa,CAAC,uBAAuB,CACvF,IACG,EAEL,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,aAChE,OAAO,IAAI,CACV,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,gBAC3B,QAAQ,UAAU,CAAC,WAAW,EAAE,qBAAqB,WAAW,CAAC,aAAa,CAAC,EAAE,EAC7F,KAAK,EAAE,QAAQ,UAAU,CAAC,WAAW,EAAE,EAAE,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,YAEhD,KAAC,QAAQ,IAAC,UAAU,EAAE,aAAa,GAAI,GAChC,CACV,EACA,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IACjD,CACP,IACG,EACL,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAC/B,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,WAAW,EAAE,eAAe,GAC5B,CACH,KA9DI,MAAM,CAAC,EAAE,CA+DX,CACN,CAAC;AAAA,CACH","sourcesContent":["import { flexRender } from '@tanstack/react-table';\nimport type { Header, SortDirection, Table } from '@tanstack/table-core';\nimport clsx from 'clsx';\nimport type { CSSProperties, ReactNode } from 'react';\n\nfunction SortIcon({ sortMethod }: { sortMethod: false | SortDirection }) {\n if (sortMethod === 'asc') {\n return <i className=\"bi bi-sort-up-alt\" aria-hidden=\"true\" />;\n } else if (sortMethod === 'desc') {\n return <i className=\"bi bi-sort-down\" aria-hidden=\"true\" />;\n } else {\n return <i className=\"bi bi-arrow-down-up opacity-75 text-muted\" aria-hidden=\"true\" />;\n }\n}\n\nfunction ResizeHandle<RowDataModel>({\n header,\n setColumnSizing,\n onResizeEnd,\n}: {\n header: Header<RowDataModel, unknown>;\n setColumnSizing: Table<RowDataModel>['setColumnSizing'];\n onResizeEnd?: () => void;\n}) {\n const minSize = header.column.columnDef.minSize ?? 0;\n const maxSize = header.column.columnDef.maxSize ?? 0;\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault();\n const currentSize = header.getSize();\n const increment = e.shiftKey ? 20 : 5; // Larger increment with Shift key\n const newSize =\n e.key === 'ArrowLeft'\n ? Math.max(minSize, currentSize - increment)\n : Math.min(maxSize, currentSize + increment);\n\n setColumnSizing((prevSizing) => ({\n ...prevSizing,\n [header.column.id]: newSize,\n }));\n } else if (e.key === 'Home') {\n e.preventDefault();\n header.column.resetSize();\n }\n };\n\n const columnName =\n typeof header.column.columnDef.header === 'string'\n ? header.column.columnDef.header\n : header.column.id;\n\n return (\n <div className=\"py-1 h-100\" style={{ position: 'absolute', right: 0, top: 0, width: '4px' }}>\n {/* separator role is focusable, so these jsx-a11y-x rules are false positives.\n https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/separator_role#focusable_separator\n */}\n {/* eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions */}\n <div\n role=\"separator\"\n aria-label={`Resize '${columnName}' column`}\n aria-valuetext={`${header.getSize()}px`}\n aria-orientation=\"vertical\"\n aria-valuemin={minSize}\n aria-valuemax={maxSize}\n aria-valuenow={header.getSize()}\n // eslint-disable-next-line jsx-a11y-x/no-noninteractive-tabindex\n tabIndex={0}\n className=\"h-100\"\n style={{\n background: header.column.getIsResizing() ? 'var(--bs-primary)' : 'var(--bs-gray-400)',\n cursor: 'col-resize',\n transition: 'background-color 0.2s',\n }}\n onMouseDown={header.getResizeHandler()}\n onMouseUp={onResizeEnd}\n onTouchStart={header.getResizeHandler()}\n onTouchEnd={onResizeEnd}\n onKeyDown={handleKeyDown}\n />\n </div>\n );\n}\n\n/**\n * Helper function to get aria-sort value\n */\nfunction getAriaSort(sortDirection: false | SortDirection) {\n switch (sortDirection) {\n case 'asc':\n return 'ascending';\n case 'desc':\n return 'descending';\n default:\n return 'none';\n }\n}\n\nexport function TanstackTableHeaderCell<RowDataModel>({\n header,\n filters,\n table,\n handleResizeEnd,\n isPinned,\n measurementMode = false,\n}: {\n header: Header<RowDataModel, unknown>;\n filters: Record<string, (props: { header: Header<RowDataModel, unknown> }) => ReactNode>;\n table: Table<RowDataModel>;\n handleResizeEnd?: () => void;\n isPinned: 'left' | false;\n measurementMode?: boolean;\n}) {\n const sortDirection = header.column.getIsSorted();\n const canSort = header.column.getCanSort();\n const canFilter = header.column.getCanFilter();\n const columnName =\n header.column.columnDef.meta?.label ??\n (typeof header.column.columnDef.header === 'string'\n ? header.column.columnDef.header\n : header.column.id);\n\n // In measurement mode, we don't want to set the size of the header from tanstack.\n const headerSize = measurementMode ? undefined : header.getSize();\n const style: CSSProperties = {\n display: 'flex',\n width: headerSize,\n minWidth: 0,\n maxWidth: headerSize,\n flexShrink: 0,\n position: isPinned === 'left' ? 'sticky' : 'relative',\n top: 0,\n zIndex: isPinned === 'left' ? 2 : 1,\n left: isPinned === 'left' ? header.getStart() : undefined,\n };\n\n const isNormalColumn = canSort || canFilter;\n\n return (\n <th\n key={header.id}\n data-column-id={header.column.id}\n className={clsx(isPinned === 'left' && 'bg-light')}\n style={style}\n aria-sort={canSort ? getAriaSort(sortDirection) : undefined}\n role=\"columnheader\"\n >\n <div\n className={clsx(\n 'd-flex align-items-center flex-grow-1',\n isNormalColumn ? 'justify-content-between' : 'justify-content-center',\n )}\n style={{\n minWidth: 0,\n }}\n >\n <div\n className={clsx(\n 'text-nowrap text-start',\n // e.g. checkboxes\n !isNormalColumn && 'd-flex align-items-center justify-content-center',\n )}\n style={{\n minWidth: 0,\n flex: '1 1 0%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n background: 'transparent',\n border: 'none',\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {canSort && (\n <span className=\"visually-hidden\">, {getAriaSort(sortDirection)}, click to sort</span>\n )}\n </div>\n\n {(canSort || canFilter) && (\n <div className=\"d-flex align-items-center\" style={{ flexShrink: 0 }}>\n {canSort && (\n <button\n type=\"button\"\n className=\"btn btn-link text-muted p-0\"\n aria-label={`Sort ${columnName.toLowerCase()}, current sort is ${getAriaSort(sortDirection)}`}\n title={`Sort ${columnName.toLowerCase()}`}\n onClick={header.column.getToggleSortingHandler()}\n >\n <SortIcon sortMethod={sortDirection} />\n </button>\n )}\n {canFilter && filters[header.column.id]?.({ header })}\n </div>\n )}\n </div>\n {header.column.getCanResize() && (\n <ResizeHandle\n header={header}\n setColumnSizing={table.setColumnSizing}\n onResizeEnd={handleResizeEnd}\n />\n )}\n </th>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TanstackTableHeaderCell.js","sourceRoot":"","sources":["../../src/components/TanstackTableHeaderCell.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,SAAS,QAAQ,CAAC,EAAE,UAAU,EAAyC;IACrE,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,OAAO,YAAG,SAAS,EAAC,mBAAmB,iBAAa,MAAM,GAAG,CAAC;IAChE,CAAC;SAAM,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QACjC,OAAO,YAAG,SAAS,EAAC,iBAAiB,iBAAa,MAAM,GAAG,CAAC;IAC9D,CAAC;SAAM,CAAC;QACN,OAAO,YAAG,SAAS,EAAC,2CAA2C,iBAAa,MAAM,GAAG,CAAC;IACxF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAe,EAClC,MAAM,EACN,eAAe,EACf,WAAW,GAKZ;IACC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,IAAI,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,CAAC,CAAsB,EAAE,EAAE;QAC/C,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,CAAC,GAAG,KAAK,YAAY,EAAE,CAAC;YACpD,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC;YACzE,MAAM,OAAO,GACX,CAAC,CAAC,GAAG,KAAK,WAAW;gBACnB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC,CAAC;YAEjD,eAAe,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAC/B,GAAG,UAAU;gBACb,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO;aAC5B,CAAC,CAAC,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;YAC5B,CAAC,CAAC,cAAc,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GACd,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;QAChD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM;QAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IAEvB,OAAO,CACL,cAAK,SAAS,EAAC,YAAY,EAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,YAKzF,cACE,IAAI,EAAC,WAAW,gBACJ,WAAW,UAAU,UAAU,oBAC3B,GAAG,MAAM,CAAC,OAAO,EAAE,IAAI,sBACtB,UAAU,mBACZ,OAAO,mBACP,OAAO,mBACP,MAAM,CAAC,OAAO,EAAE;YAC/B,iEAAiE;YACjE,QAAQ,EAAE,CAAC,EACX,SAAS,EAAC,OAAO,EACjB,KAAK,EAAE;gBACL,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB;gBACtF,MAAM,EAAE,YAAY;gBACpB,UAAU,EAAE,uBAAuB;aACpC,EACD,WAAW,EAAE,MAAM,CAAC,gBAAgB,EAAE,EACtC,SAAS,EAAE,WAAW,EACtB,YAAY,EAAE,MAAM,CAAC,gBAAgB,EAAE,EACvC,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,aAAa,GACxB,GACE,CACP,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,aAAoC;IACvD,QAAQ,aAAa,EAAE,CAAC;QACtB,KAAK,KAAK;YACR,OAAO,WAAW,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,YAAY,CAAC;QACtB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAe,EACpD,MAAM,EACN,OAAO,EACP,KAAK,EACL,eAAe,EACf,QAAQ,EACR,eAAe,GAAG,KAAK,GAQxB;IACC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IAC/C,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK;QACnC,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,QAAQ;YACjD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM;YAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExB,kFAAkF;IAClF,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAClE,MAAM,KAAK,GAAkB;QAC3B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,CAAC;QACX,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,CAAC;QACb,QAAQ,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QACrD,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;KAC1D,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,IAAI,SAAS,CAAC;IAE5C,OAAO,CACL,gCAEkB,MAAM,CAAC,MAAM,CAAC,EAAE,EAChC,SAAS,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,UAAU,CAAC,EAClD,KAAK,EAAE,KAAK,eACD,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAC3D,IAAI,EAAC,cAAc;YAEnB,eACE,SAAS,EAAE,IAAI,CACb,uCAAuC,EACvC,cAAc,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,wBAAwB,CACtE,EACD,KAAK,EAAE;oBACL,QAAQ,EAAE,CAAC;iBACZ;oBAED,eACE,SAAS,EAAE,IAAI,CACb,wBAAwB;wBACxB,kBAAkB;wBAClB,CAAC,cAAc,IAAI,kDAAkD,CACtE,EACD,KAAK,EAAE;4BACL,QAAQ,EAAE,CAAC;4BACX,IAAI,EAAE,QAAQ;4BACd,QAAQ,EAAE,QAAQ;4BAClB,YAAY,EAAE,UAAU;4BACxB,UAAU,EAAE,aAAa;4BACzB,MAAM,EAAE,MAAM;yBACf,aAEA,MAAM,CAAC,aAAa;gCACnB,CAAC,CAAC,IAAI;gCACN,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAClE,OAAO,IAAI,CACV,gBAAM,SAAS,EAAC,iBAAiB,mBAAI,WAAW,CAAC,aAAa,CAAC,uBAAuB,CACvF,IACG,EAEL,CAAC,OAAO,IAAI,SAAS,CAAC,IAAI,CACzB,eAAK,SAAS,EAAC,2BAA2B,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,aAChE,OAAO,IAAI,CACV,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,gBAC3B,QAAQ,UAAU,CAAC,WAAW,EAAE,qBAAqB,WAAW,CAAC,aAAa,CAAC,EAAE,EAC7F,KAAK,EAAE,QAAQ,UAAU,CAAC,WAAW,EAAE,EAAE,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,YAEhD,KAAC,QAAQ,IAAC,UAAU,EAAE,aAAa,GAAI,GAChC,CACV,EACA,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,IACjD,CACP,IACG,EACL,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAC/B,KAAC,YAAY,IACX,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,KAAK,CAAC,eAAe,EACtC,WAAW,EAAE,eAAe,GAC5B,CACH,KA9DI,MAAM,CAAC,EAAE,CA+DX,CACN,CAAC;AACJ,CAAC","sourcesContent":["import { flexRender } from '@tanstack/react-table';\nimport type { Header, SortDirection, Table } from '@tanstack/table-core';\nimport clsx from 'clsx';\nimport type { CSSProperties, ReactNode } from 'react';\n\nfunction SortIcon({ sortMethod }: { sortMethod: false | SortDirection }) {\n if (sortMethod === 'asc') {\n return <i className=\"bi bi-sort-up-alt\" aria-hidden=\"true\" />;\n } else if (sortMethod === 'desc') {\n return <i className=\"bi bi-sort-down\" aria-hidden=\"true\" />;\n } else {\n return <i className=\"bi bi-arrow-down-up opacity-75 text-muted\" aria-hidden=\"true\" />;\n }\n}\n\nfunction ResizeHandle<RowDataModel>({\n header,\n setColumnSizing,\n onResizeEnd,\n}: {\n header: Header<RowDataModel, unknown>;\n setColumnSizing: Table<RowDataModel>['setColumnSizing'];\n onResizeEnd?: () => void;\n}) {\n const minSize = header.column.columnDef.minSize ?? 0;\n const maxSize = header.column.columnDef.maxSize ?? 0;\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault();\n const currentSize = header.getSize();\n const increment = e.shiftKey ? 20 : 5; // Larger increment with Shift key\n const newSize =\n e.key === 'ArrowLeft'\n ? Math.max(minSize, currentSize - increment)\n : Math.min(maxSize, currentSize + increment);\n\n setColumnSizing((prevSizing) => ({\n ...prevSizing,\n [header.column.id]: newSize,\n }));\n } else if (e.key === 'Home') {\n e.preventDefault();\n header.column.resetSize();\n }\n };\n\n const columnName =\n typeof header.column.columnDef.header === 'string'\n ? header.column.columnDef.header\n : header.column.id;\n\n return (\n <div className=\"py-1 h-100\" style={{ position: 'absolute', right: 0, top: 0, width: '4px' }}>\n {/* separator role is focusable, so these jsx-a11y-x rules are false positives.\n https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Reference/Roles/separator_role#focusable_separator\n */}\n {/* eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions */}\n <div\n role=\"separator\"\n aria-label={`Resize '${columnName}' column`}\n aria-valuetext={`${header.getSize()}px`}\n aria-orientation=\"vertical\"\n aria-valuemin={minSize}\n aria-valuemax={maxSize}\n aria-valuenow={header.getSize()}\n // eslint-disable-next-line jsx-a11y-x/no-noninteractive-tabindex\n tabIndex={0}\n className=\"h-100\"\n style={{\n background: header.column.getIsResizing() ? 'var(--bs-primary)' : 'var(--bs-gray-400)',\n cursor: 'col-resize',\n transition: 'background-color 0.2s',\n }}\n onMouseDown={header.getResizeHandler()}\n onMouseUp={onResizeEnd}\n onTouchStart={header.getResizeHandler()}\n onTouchEnd={onResizeEnd}\n onKeyDown={handleKeyDown}\n />\n </div>\n );\n}\n\n/**\n * Helper function to get aria-sort value\n */\nfunction getAriaSort(sortDirection: false | SortDirection) {\n switch (sortDirection) {\n case 'asc':\n return 'ascending';\n case 'desc':\n return 'descending';\n default:\n return 'none';\n }\n}\n\nexport function TanstackTableHeaderCell<RowDataModel>({\n header,\n filters,\n table,\n handleResizeEnd,\n isPinned,\n measurementMode = false,\n}: {\n header: Header<RowDataModel, unknown>;\n filters: Record<string, (props: { header: Header<RowDataModel, unknown> }) => ReactNode>;\n table: Table<RowDataModel>;\n handleResizeEnd?: () => void;\n isPinned: 'left' | false;\n measurementMode?: boolean;\n}) {\n const sortDirection = header.column.getIsSorted();\n const canSort = header.column.getCanSort();\n const canFilter = header.column.getCanFilter();\n const columnName =\n header.column.columnDef.meta?.label ??\n (typeof header.column.columnDef.header === 'string'\n ? header.column.columnDef.header\n : header.column.id);\n\n // In measurement mode, we don't want to set the size of the header from tanstack.\n const headerSize = measurementMode ? undefined : header.getSize();\n const style: CSSProperties = {\n display: 'flex',\n width: headerSize,\n minWidth: 0,\n maxWidth: headerSize,\n flexShrink: 0,\n position: isPinned === 'left' ? 'sticky' : 'relative',\n top: 0,\n zIndex: isPinned === 'left' ? 2 : 1,\n left: isPinned === 'left' ? header.getStart() : undefined,\n };\n\n const isNormalColumn = canSort || canFilter;\n\n return (\n <th\n key={header.id}\n data-column-id={header.column.id}\n className={clsx(isPinned === 'left' && 'bg-light')}\n style={style}\n aria-sort={canSort ? getAriaSort(sortDirection) : undefined}\n role=\"columnheader\"\n >\n <div\n className={clsx(\n 'd-flex align-items-center flex-grow-1',\n isNormalColumn ? 'justify-content-between' : 'justify-content-center',\n )}\n style={{\n minWidth: 0,\n }}\n >\n <div\n className={clsx(\n 'text-nowrap text-start',\n // e.g. checkboxes\n !isNormalColumn && 'd-flex align-items-center justify-content-center',\n )}\n style={{\n minWidth: 0,\n flex: '1 1 0%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n background: 'transparent',\n border: 'none',\n }}\n >\n {header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n {canSort && (\n <span className=\"visually-hidden\">, {getAriaSort(sortDirection)}, click to sort</span>\n )}\n </div>\n\n {(canSort || canFilter) && (\n <div className=\"d-flex align-items-center\" style={{ flexShrink: 0 }}>\n {canSort && (\n <button\n type=\"button\"\n className=\"btn btn-link text-muted p-0\"\n aria-label={`Sort ${columnName.toLowerCase()}, current sort is ${getAriaSort(sortDirection)}`}\n title={`Sort ${columnName.toLowerCase()}`}\n onClick={header.column.getToggleSortingHandler()}\n >\n <SortIcon sortMethod={sortDirection} />\n </button>\n )}\n {canFilter && filters[header.column.id]?.({ header })}\n </div>\n )}\n </div>\n {header.column.getCanResize() && (\n <ResizeHandle\n header={header}\n setColumnSizing={table.setColumnSizing}\n onResizeEnd={handleResizeEnd}\n />\n )}\n </th>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuqs.js","sourceRoot":"","sources":["../../src/components/nuqs.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ColumnPinningState, SortingState, VisibilityState } from '@tanstack/table-core';\nimport { createParser } from 'nuqs';\nimport {\n type unstable_AdapterInterface,\n unstable_createAdapterProvider,\n} from 'nuqs/adapters/custom';\nimport { NuqsAdapter as NuqsReactAdapter } from 'nuqs/adapters/react';\nimport { createContext, use } from 'react';\n\nimport type { NumericColumnFilterValue } from './NumericInputColumnFilter.js';\n\nconst AdapterContext = createContext('');\n\nfunction useExpressAdapterContext(): unstable_AdapterInterface {\n const context = use(AdapterContext);\n\n return {\n searchParams: new URLSearchParams(context),\n // This will never be called on the server, so it can be a no-op.\n updateUrl: () => {},\n };\n}\n\nconst NuqsExpressAdapter = unstable_createAdapterProvider(useExpressAdapterContext);\n\n/**\n * `nuqs` needs to be aware of the current state of the URL search parameters\n * during both server-side and client-side rendering. To make this work with\n * our server-side rendering setup, we use a custom adapter that should be\n * provided with the value of `new URL(...).search` on the server side. On the\n * client, we use `NuqsReactAdapter`, which will read directly from `location.search`.\n */\nexport function NuqsAdapter({ children, search }: { children: React.ReactNode; search: string }) {\n if (typeof location === 'undefined') {\n // We're rendering on the server.\n return (\n <AdapterContext value={search}>\n <NuqsExpressAdapter>{children}</NuqsExpressAdapter>\n </AdapterContext>\n );\n }\n\n // We're rendering on the client.\n return <NuqsReactAdapter>{children}</NuqsReactAdapter>;\n}\n\n/**\n * Parses and serializes TanStack Table SortingState to/from a URL query string.\n * Used for reflecting table sort order in the URL.\n *\n * Example: `sort=col:asc` <-> `[{ id: 'col', desc: false }]`\n */\nexport const parseAsSortingState = createParser<SortingState>({\n parse(queryValue) {\n if (!queryValue) return [];\n return queryValue\n .split(',')\n .map((part) => {\n const [id, dir] = part.split(':');\n if (!id) return undefined;\n if (dir === 'asc' || dir === 'desc') {\n return { id, desc: dir === 'desc' };\n }\n return undefined;\n })\n .filter((v): v is { id: string; desc: boolean } => !!v);\n },\n serialize(value): string {\n // `null` indicates that the value should be omitted from the URL.\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (value.length === 0) return null;\n return value\n .filter((v) => v.id)\n .map((v) => `${v.id}:${v.desc ? 'desc' : 'asc'}`)\n .join(',');\n },\n eq(a, b) {\n return (\n a.length === b.length &&\n a.every((item, index) => item.id === b[index].id && item.desc === b[index].desc)\n );\n },\n});\n\n/**\n * Returns a parser for TanStack Table VisibilityState for a given set of columns.\n * Parses a comma-separated list of visible columns from a query string, e.g. 'a,b'.\n * Serializes to a comma-separated list of visible columns, omitting if all are visible.\n * Used for reflecting column visibility in the URL.\n *\n * @param allColumns - Array of all column IDs\n * @param defaultValueRef - A ref object with a `current` property that contains the default visibility state.\n */\nexport function parseAsColumnVisibilityStateWithColumns(\n allColumns: string[],\n defaultValueRef?: React.RefObject<VisibilityState>,\n) {\n const parser = createParser<VisibilityState>({\n parse(queryValue: string) {\n const shown =\n queryValue.length > 0\n ? new Set(queryValue.split(',').filter(Boolean))\n : new Set(allColumns);\n const result: VisibilityState = {};\n for (const col of allColumns) {\n result[col] = shown.has(col);\n }\n return result;\n },\n serialize(value): string {\n // We can't use `eq` to compare with the current default values from the\n // ref. `eq` appears to be used as part of an optimization to avoid rerenders\n // if the column set hasn't changed, so if it return `true`, we wouldn't be\n // able to update the actual visible columns after changing the defaults if\n // the new column set is equal to the default set of columns.\n //\n // Instead, we rely on the (undocumented) ability of `serialize` to return\n // `null` to indicate that the value should be omitted from the URL.\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (parser.eq(value, defaultValueRef?.current ?? {})) return null;\n\n // Only output columns that are visible\n const visible = Object.keys(value).filter((col) => value[col]);\n return visible.join(',');\n },\n eq(value, defaultValue) {\n const valueKeys = Object.keys(value);\n const defaultValueKeys = Object.keys(defaultValue);\n const result =\n valueKeys.length === defaultValueKeys.length &&\n valueKeys.every((col) => value[col] === defaultValue[col]);\n return result;\n },\n });\n\n return parser;\n}\n\n/**\n * Parses and serializes TanStack Table ColumnPinningState to/from a URL query string.\n * Used for reflecting pinned columns in the URL.\n *\n * Right pins aren't supported; an empty array is always returned to allow\n * this hook's value to be used directly in `state.columnPinning` in `useReactTable`.\n *\n * Example: `a,b` <-> `{ left: ['a', 'b'], right: [] }`\n */\nexport const parseAsColumnPinningState = createParser<ColumnPinningState>({\n parse(queryValue) {\n if (!queryValue) return { left: [], right: [] };\n // Format: col1,col2,col3 (all left-pinned columns)\n return {\n left: queryValue.split(',').filter(Boolean),\n right: [],\n };\n },\n serialize(value) {\n if (!value.left) return '';\n return value.left.join(',');\n },\n eq(a, b) {\n const aLeft = Array.isArray(a.left) ? a.left : [];\n const bLeft = Array.isArray(b.left) ? b.left : [];\n if (aLeft.length !== bLeft.length) return false;\n return aLeft.every((v, i) => v === bLeft[i]);\n },\n});\n\n/**\n * Parses and serializes numeric filter strings to/from URL-friendly format.\n * Used for numeric column filters with comparison operators.\n *\n * Internal format: `>=5`, `<=10`, `>3`, `<7`, `=5`\n * URL format: `gte_5`, `lte_10`, `gt_3`, `lt_7`, `eq_5`, `empty`\n *\n * Example: `gte_5` <-> `>=5`\n */\nexport const parseAsNumericFilter = createParser<NumericColumnFilterValue>({\n parse(queryValue) {\n if (!queryValue) return { filterValue: '', emptyOnly: false };\n // Parse format: {operator}_{value}\n const match = queryValue.match(/^(gte|lte|gt|lt|eq)_(.+)$/);\n if (!match) {\n if (queryValue === 'empty') {\n return { filterValue: '', emptyOnly: true };\n }\n return { filterValue: '', emptyOnly: false };\n }\n const [, opCode, value] = match;\n const opMap: Record<string, string> = {\n gte: '>=',\n lte: '<=',\n gt: '>',\n lt: '<',\n eq: '=',\n };\n const operator = opMap[opCode];\n if (!operator) return { filterValue: '', emptyOnly: false };\n return { filterValue: `${operator}${value}`, emptyOnly: false };\n },\n serialize(value): string {\n const { filterValue, emptyOnly } = value;\n\n if (emptyOnly) return 'empty';\n\n if (filterValue.length === 0) {\n return 'empty';\n }\n\n // Serialize format: internal (>=5) -> URL (gte_5)\n const match = filterValue.match(/^(>=|<=|>|<|=)(.+)$/);\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (!match) return null;\n const [, operator, val] = match;\n const opMap: Record<string, string> = {\n '>=': 'gte',\n '<=': 'lte',\n '>': 'gt',\n '<': 'lt',\n '=': 'eq',\n };\n const opCode = opMap[operator];\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (!opCode) return null;\n return `${opCode}_${val}`;\n },\n eq(a, b) {\n return a.filterValue === b.filterValue && a.emptyOnly === b.emptyOnly;\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"nuqs.js","sourceRoot":"","sources":["../../src/components/nuqs.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ColumnPinningState, SortingState, VisibilityState } from '@tanstack/table-core';\nimport { createParser } from 'nuqs';\nimport {\n type unstable_AdapterInterface,\n unstable_createAdapterProvider,\n} from 'nuqs/adapters/custom';\nimport { NuqsAdapter as NuqsReactAdapter } from 'nuqs/adapters/react';\nimport { createContext, use } from 'react';\n\nimport type { NumericColumnFilterValue } from './NumericInputColumnFilter.js';\n\nconst AdapterContext = createContext('');\n\nfunction useExpressAdapterContext(): unstable_AdapterInterface {\n const context = use(AdapterContext);\n\n return {\n searchParams: new URLSearchParams(context),\n // This will never be called on the server, so it can be a no-op.\n updateUrl: () => {},\n };\n}\n\nconst NuqsExpressAdapter = unstable_createAdapterProvider(useExpressAdapterContext);\n\n/**\n * `nuqs` needs to be aware of the current state of the URL search parameters\n * during both server-side and client-side rendering. To make this work with\n * our server-side rendering setup, we use a custom adapter that should be\n * provided with the value of `new URL(...).search` on the server side. On the\n * client, we use `NuqsReactAdapter`, which will read directly from `location.search`.\n */\nexport function NuqsAdapter({ children, search }: { children: React.ReactNode; search: string }) {\n if (typeof location === 'undefined') {\n // We're rendering on the server.\n return (\n <AdapterContext value={search}>\n <NuqsExpressAdapter>{children}</NuqsExpressAdapter>\n </AdapterContext>\n );\n }\n\n // We're rendering on the client.\n return <NuqsReactAdapter>{children}</NuqsReactAdapter>;\n}\n\n/**\n * Parses and serializes TanStack Table SortingState to/from a URL query string.\n * Used for reflecting table sort order in the URL.\n *\n * Example: `sort=col:asc` <-> `[{ id: 'col', desc: false }]`\n */\nexport const parseAsSortingState = createParser<SortingState>({\n parse(queryValue) {\n if (!queryValue) return [];\n return queryValue\n .split(',')\n .map((part) => {\n const [id, dir] = part.split(':');\n if (!id) return undefined;\n if (dir === 'asc' || dir === 'desc') {\n return { id, desc: dir === 'desc' };\n }\n return undefined;\n })\n .filter((v): v is { id: string; desc: boolean } => !!v);\n },\n serialize(value): string {\n // `null` indicates that the value should be omitted from the URL.\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (value.length === 0) return null;\n return value\n .filter((v) => v.id)\n .map((v) => `${v.id}:${v.desc ? 'desc' : 'asc'}`)\n .join(',');\n },\n eq(a, b) {\n return (\n a.length === b.length &&\n a.every((item, index) => item.id === b[index].id && item.desc === b[index].desc)\n );\n },\n});\n\n/**\n * Returns a parser for TanStack Table VisibilityState for a given set of columns.\n * Parses a comma-separated list of visible columns from a query string, e.g. 'a,b'.\n * Serializes to a comma-separated list of visible columns, omitting if all are visible.\n * Used for reflecting column visibility in the URL.\n *\n * @param allColumns - Array of all column IDs\n * @param defaultValueRef - A ref object with a `current` property that contains the default visibility state.\n */\nexport function parseAsColumnVisibilityStateWithColumns(\n allColumns: string[],\n defaultValueRef?: React.RefObject<VisibilityState>,\n) {\n const parser = createParser<VisibilityState>({\n parse(queryValue: string) {\n const shown =\n queryValue.length > 0\n ? new Set(queryValue.split(',').filter(Boolean))\n : new Set(allColumns);\n const result: VisibilityState = {};\n for (const col of allColumns) {\n result[col] = shown.has(col);\n }\n return result;\n },\n serialize(value): string {\n // We can't use `eq` to compare with the current default values from the\n // ref. `eq` appears to be used as part of an optimization to avoid rerenders\n // if the column set hasn't changed, so if it return `true`, we wouldn't be\n // able to update the actual visible columns after changing the defaults if\n // the new column set is equal to the default set of columns.\n //\n // Instead, we rely on the (undocumented) ability of `serialize` to return\n // `null` to indicate that the value should be omitted from the URL.\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (parser.eq(value, defaultValueRef?.current ?? {})) return null;\n\n // Only output columns that are visible\n const visible = Object.keys(value).filter((col) => value[col]);\n return visible.join(',');\n },\n eq(value, defaultValue) {\n const valueKeys = Object.keys(value);\n const defaultValueKeys = Object.keys(defaultValue);\n const result =\n valueKeys.length === defaultValueKeys.length &&\n valueKeys.every((col) => value[col] === defaultValue[col]);\n return result;\n },\n });\n\n return parser;\n}\n\n/**\n * Parses and serializes TanStack Table ColumnPinningState to/from a URL query string.\n * Used for reflecting pinned columns in the URL.\n *\n * Right pins aren't supported; an empty array is always returned to allow\n * this hook's value to be used directly in `state.columnPinning` in `useReactTable`.\n *\n * Example: `a,b` <-> `{ left: ['a', 'b'], right: [] }`\n */\nexport const parseAsColumnPinningState = createParser<ColumnPinningState>({\n parse(queryValue) {\n if (!queryValue) return { left: [], right: [] };\n // Format: col1,col2,col3 (all left-pinned columns)\n return {\n left: queryValue.split(',').filter(Boolean),\n right: [],\n };\n },\n serialize(value) {\n if (!value.left) return '';\n return value.left.join(',');\n },\n eq(a, b) {\n const aLeft = Array.isArray(a.left) ? a.left : [];\n const bLeft = Array.isArray(b.left) ? b.left : [];\n if (aLeft.length !== bLeft.length) return false;\n return aLeft.every((v, i) => v === bLeft[i]);\n },\n});\n\n/**\n * Parses and serializes numeric filter strings to/from URL-friendly format.\n * Used for numeric column filters with comparison operators.\n *\n * Internal format: `>=5`, `<=10`, `>3`, `<7`, `=5`\n * URL format: `gte_5`, `lte_10`, `gt_3`, `lt_7`, `eq_5`, `empty`\n *\n * Example: `gte_5` <-> `>=5`\n */\nexport const parseAsNumericFilter = createParser<NumericColumnFilterValue>({\n parse(queryValue) {\n if (!queryValue) return { filterValue: '', emptyOnly: false };\n // Parse format: {operator}_{value}\n const match = queryValue.match(/^(gte|lte|gt|lt|eq)_(.+)$/);\n if (!match) {\n if (queryValue === 'empty') {\n return { filterValue: '', emptyOnly: true };\n }\n return { filterValue: '', emptyOnly: false };\n }\n const [, opCode, value] = match;\n const opMap: Record<string, string> = {\n gte: '>=',\n lte: '<=',\n gt: '>',\n lt: '<',\n eq: '=',\n };\n const operator = opMap[opCode];\n if (!operator) return { filterValue: '', emptyOnly: false };\n return { filterValue: `${operator}${value}`, emptyOnly: false };\n },\n serialize(value): string {\n const { filterValue, emptyOnly } = value;\n\n if (emptyOnly) return 'empty';\n\n if (filterValue.length === 0) {\n return 'empty';\n }\n\n // Serialize format: internal (>=5) -> URL (gte_5)\n const match = filterValue.match(/^(>=|<=|>|<|=)(.+)$/);\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (!match) return null;\n const [, operator, val] = match;\n const opMap: Record<string, string> = {\n '>=': 'gte',\n '<=': 'lte',\n '>': 'gt',\n '<': 'lt',\n '=': 'eq',\n };\n const opCode = opMap[operator];\n // @ts-expect-error - `null` is not assignable to type `string`.\n if (!opCode) return null;\n return `${opCode}_${val}`;\n },\n eq(a, b) {\n return a.filterValue === b.filterValue && a.emptyOnly === b.emptyOnly;\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nuqs.test.js","sourceRoot":"","sources":["../../src/components/nuqs.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SortingState } from '@tanstack/table-core';\nimport { describe, expect, it } from 'vitest';\n\nimport {\n parseAsColumnPinningState,\n parseAsColumnVisibilityStateWithColumns,\n parseAsNumericFilter,\n parseAsSortingState,\n} from './nuqs.js';\n\ndescribe('parseAsSortingState', () => {\n describe('parse', () => {\n it('parses valid asc', () => {\n expect(parseAsSortingState.parse('col:asc')).toEqual([{ id: 'col', desc: false }]);\n });\n it('parses valid desc', () => {\n expect(parseAsSortingState.parse('col:desc')).toEqual([{ id: 'col', desc: true }]);\n });\n it('parses multiple columns', () => {\n expect(parseAsSortingState.parse('col1:asc,col2:desc')).toEqual([\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ]);\n });\n it('ignores invalid columns in multi-column', () => {\n expect(parseAsSortingState.parse('col1:asc,invalid,foo:bar,col2:desc')).toEqual([\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ]);\n });\n it('returns [] for empty string', () => {\n expect(parseAsSortingState.parse('')).toEqual([]);\n });\n it('returns [] for missing id', () => {\n expect(parseAsSortingState.parse(':asc')).toEqual([]);\n });\n it('returns [] for invalid direction', () => {\n expect(parseAsSortingState.parse('col:foo')).toEqual([]);\n });\n it('returns [] for undefined', () => {\n expect(parseAsSortingState.parse(undefined as any)).toEqual([]);\n });\n });\n\n describe('serialize', () => {\n it('serializes asc', () => {\n const state: SortingState = [{ id: 'col', desc: false }];\n expect(parseAsSortingState.serialize(state)).toBe('col:asc');\n });\n it('serializes desc', () => {\n const state: SortingState = [{ id: 'col', desc: true }];\n expect(parseAsSortingState.serialize(state)).toBe('col:desc');\n });\n it('serializes multiple columns', () => {\n const state: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n expect(parseAsSortingState.serialize(state)).toBe('col1:asc,col2:desc');\n });\n it('serializes empty array as null', () => {\n expect(parseAsSortingState.serialize([])).toBe(null);\n });\n it('serializes missing id as empty string', () => {\n expect(parseAsSortingState.serialize([{ id: '', desc: false }])).toBe('');\n });\n });\n\n describe('eq', () => {\n it('returns true for equal states', () => {\n const a: SortingState = [{ id: 'col', desc: false }];\n const b: SortingState = [{ id: 'col', desc: false }];\n expect(parseAsSortingState.eq(a, b)).toBe(true);\n });\n it('returns true for equal multi-column states', () => {\n const a: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n const b: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n expect(parseAsSortingState.eq(a, b)).toBe(true);\n });\n // The order of the sort columns matters for multi-column sorting.\n it('returns false for different order in multi-column', () => {\n const a: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n const b: SortingState = [\n { id: 'col2', desc: true },\n { id: 'col1', desc: false },\n ];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns false for different ids', () => {\n const a: SortingState = [{ id: 'col1', desc: false }];\n const b: SortingState = [{ id: 'col2', desc: false }];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns false for different desc', () => {\n const a: SortingState = [{ id: 'col', desc: false }];\n const b: SortingState = [{ id: 'col', desc: true }];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns true for both empty', () => {\n expect(parseAsSortingState.eq([], [])).toBe(true);\n });\n it('returns false for one empty, one not', () => {\n expect(parseAsSortingState.eq([], [{ id: 'col', desc: false }])).toBe(false);\n });\n });\n});\n\ndescribe('parseAsColumnVisibilityStateWithColumns', () => {\n const allColumns = ['a', 'b', 'c'];\n const parser = parseAsColumnVisibilityStateWithColumns(allColumns);\n\n it('parses empty string as all columns visible', () => {\n expect(parser.parse('')).toEqual({ a: true, b: true, c: true });\n });\n\n it('parses comma-separated columns as only those visible', () => {\n expect(parser.parse('a,b')).toEqual({ a: true, b: true, c: false });\n expect(parser.parse('b')).toEqual({ a: false, b: true, c: false });\n });\n\n it('serializes partial visibility as comma-separated columns', () => {\n expect(parser.serialize({ a: true, b: false, c: true })).toBe('a,c');\n expect(parser.serialize({ a: false, b: true, c: false })).toBe('b');\n });\n\n it('eq returns true for equal visibility', () => {\n expect(parser.eq({ a: true, b: false, c: true }, { a: true, b: false, c: true })).toBe(true);\n });\n\n it('eq returns false for different visibility', () => {\n expect(parser.eq({ a: true, b: false, c: true }, { a: false, b: false, c: true })).toBe(false);\n });\n});\n\ndescribe('parseAsColumnPinningState', () => {\n const parser = parseAsColumnPinningState;\n\n it('parses empty string as no pinned columns', () => {\n expect(parser.parse('')).toEqual({ left: [], right: [] });\n });\n\n it('parses comma-separated columns as left-pinned', () => {\n expect(parser.parse('a,b')).toEqual({ left: ['a', 'b'], right: [] });\n expect(parser.parse('c')).toEqual({ left: ['c'], right: [] });\n });\n\n it('serializes left-pinned columns as comma-separated string', () => {\n expect(parser.serialize({ left: ['a', 'b'], right: [] })).toBe('a,b');\n expect(parser.serialize({ left: [], right: [] })).toBe('');\n });\n\n it('eq returns true for equal pinning', () => {\n expect(parser.eq({ left: ['a', 'b'], right: [] }, { left: ['a', 'b'], right: [] })).toBe(true);\n });\n\n it('eq returns false for different pinning', () => {\n expect(parser.eq({ left: ['a', 'b'], right: [] }, { left: ['b', 'a'], right: [] })).toBe(false);\n expect(parser.eq({ left: ['a'], right: [] }, { left: ['a', 'b'], right: [] })).toBe(false);\n });\n});\n\ndescribe('parseAsNumericFilter', () => {\n describe('parse', () => {\n it('parses gte format', () => {\n expect(parseAsNumericFilter.parse('gte_5')).toEqual({ filterValue: '>=5', emptyOnly: false });\n });\n it('parses lte format', () => {\n expect(parseAsNumericFilter.parse('lte_10')).toEqual({\n filterValue: '<=10',\n emptyOnly: false,\n });\n });\n it('parses gt format', () => {\n expect(parseAsNumericFilter.parse('gt_3')).toEqual({ filterValue: '>3', emptyOnly: false });\n });\n it('parses lt format', () => {\n expect(parseAsNumericFilter.parse('lt_7')).toEqual({ filterValue: '<7', emptyOnly: false });\n });\n it('parses eq format', () => {\n expect(parseAsNumericFilter.parse('eq_5')).toEqual({ filterValue: '=5', emptyOnly: false });\n });\n it('parses empty keyword', () => {\n expect(parseAsNumericFilter.parse('empty')).toEqual({ filterValue: '', emptyOnly: true });\n });\n it('returns default for invalid format', () => {\n expect(parseAsNumericFilter.parse('invalid')).toEqual({ filterValue: '', emptyOnly: false });\n });\n it('returns default for empty string', () => {\n expect(parseAsNumericFilter.parse('')).toEqual({ filterValue: '', emptyOnly: false });\n });\n it('returns default for undefined', () => {\n expect(parseAsNumericFilter.parse(undefined as any)).toEqual({\n filterValue: '',\n emptyOnly: false,\n });\n });\n it('parses decimal values', () => {\n expect(parseAsNumericFilter.parse('gte_3.14')).toEqual({\n filterValue: '>=3.14',\n emptyOnly: false,\n });\n });\n it('parses negative values', () => {\n expect(parseAsNumericFilter.parse('lt_-5')).toEqual({ filterValue: '<-5', emptyOnly: false });\n });\n });\n\n describe('serialize', () => {\n it('serializes >= format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '>=5', emptyOnly: false })).toBe(\n 'gte_5',\n );\n });\n it('serializes <= format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '<=10', emptyOnly: false })).toBe(\n 'lte_10',\n );\n });\n it('serializes > format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '>3', emptyOnly: false })).toBe('gt_3');\n });\n it('serializes < format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '<7', emptyOnly: false })).toBe('lt_7');\n });\n it('serializes = format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '=5', emptyOnly: false })).toBe('eq_5');\n });\n it('serializes emptyOnly as empty', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '', emptyOnly: true })).toBe('empty');\n });\n it('serializes empty filterValue as empty', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '', emptyOnly: false })).toBe('empty');\n });\n it('returns null for invalid filterValue', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: 'invalid', emptyOnly: false })).toBe(\n null,\n );\n });\n });\n\n describe('eq', () => {\n it('returns true for equal values', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '>=5', emptyOnly: false },\n { filterValue: '>=5', emptyOnly: false },\n ),\n ).toBe(true);\n });\n it('returns false for different filterValue', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '>=5', emptyOnly: false },\n { filterValue: '>=10', emptyOnly: false },\n ),\n ).toBe(false);\n });\n it('returns false for different emptyOnly', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '', emptyOnly: true },\n { filterValue: '', emptyOnly: false },\n ),\n ).toBe(false);\n });\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"nuqs.test.js","sourceRoot":"","sources":["../../src/components/nuqs.test.ts"],"names":[],"mappings":"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","sourcesContent":["import type { SortingState } from '@tanstack/table-core';\nimport { describe, expect, it } from 'vitest';\n\nimport {\n parseAsColumnPinningState,\n parseAsColumnVisibilityStateWithColumns,\n parseAsNumericFilter,\n parseAsSortingState,\n} from './nuqs.js';\n\ndescribe('parseAsSortingState', () => {\n describe('parse', () => {\n it('parses valid asc', () => {\n expect(parseAsSortingState.parse('col:asc')).toEqual([{ id: 'col', desc: false }]);\n });\n it('parses valid desc', () => {\n expect(parseAsSortingState.parse('col:desc')).toEqual([{ id: 'col', desc: true }]);\n });\n it('parses multiple columns', () => {\n expect(parseAsSortingState.parse('col1:asc,col2:desc')).toEqual([\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ]);\n });\n it('ignores invalid columns in multi-column', () => {\n expect(parseAsSortingState.parse('col1:asc,invalid,foo:bar,col2:desc')).toEqual([\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ]);\n });\n it('returns [] for empty string', () => {\n expect(parseAsSortingState.parse('')).toEqual([]);\n });\n it('returns [] for missing id', () => {\n expect(parseAsSortingState.parse(':asc')).toEqual([]);\n });\n it('returns [] for invalid direction', () => {\n expect(parseAsSortingState.parse('col:foo')).toEqual([]);\n });\n it('returns [] for undefined', () => {\n expect(parseAsSortingState.parse(undefined as any)).toEqual([]);\n });\n });\n\n describe('serialize', () => {\n it('serializes asc', () => {\n const state: SortingState = [{ id: 'col', desc: false }];\n expect(parseAsSortingState.serialize(state)).toBe('col:asc');\n });\n it('serializes desc', () => {\n const state: SortingState = [{ id: 'col', desc: true }];\n expect(parseAsSortingState.serialize(state)).toBe('col:desc');\n });\n it('serializes multiple columns', () => {\n const state: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n expect(parseAsSortingState.serialize(state)).toBe('col1:asc,col2:desc');\n });\n it('serializes empty array as null', () => {\n expect(parseAsSortingState.serialize([])).toBe(null);\n });\n it('serializes missing id as empty string', () => {\n expect(parseAsSortingState.serialize([{ id: '', desc: false }])).toBe('');\n });\n });\n\n describe('eq', () => {\n it('returns true for equal states', () => {\n const a: SortingState = [{ id: 'col', desc: false }];\n const b: SortingState = [{ id: 'col', desc: false }];\n expect(parseAsSortingState.eq(a, b)).toBe(true);\n });\n it('returns true for equal multi-column states', () => {\n const a: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n const b: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n expect(parseAsSortingState.eq(a, b)).toBe(true);\n });\n // The order of the sort columns matters for multi-column sorting.\n it('returns false for different order in multi-column', () => {\n const a: SortingState = [\n { id: 'col1', desc: false },\n { id: 'col2', desc: true },\n ];\n const b: SortingState = [\n { id: 'col2', desc: true },\n { id: 'col1', desc: false },\n ];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns false for different ids', () => {\n const a: SortingState = [{ id: 'col1', desc: false }];\n const b: SortingState = [{ id: 'col2', desc: false }];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns false for different desc', () => {\n const a: SortingState = [{ id: 'col', desc: false }];\n const b: SortingState = [{ id: 'col', desc: true }];\n expect(parseAsSortingState.eq(a, b)).toBe(false);\n });\n it('returns true for both empty', () => {\n expect(parseAsSortingState.eq([], [])).toBe(true);\n });\n it('returns false for one empty, one not', () => {\n expect(parseAsSortingState.eq([], [{ id: 'col', desc: false }])).toBe(false);\n });\n });\n});\n\ndescribe('parseAsColumnVisibilityStateWithColumns', () => {\n const allColumns = ['a', 'b', 'c'];\n const parser = parseAsColumnVisibilityStateWithColumns(allColumns);\n\n it('parses empty string as all columns visible', () => {\n expect(parser.parse('')).toEqual({ a: true, b: true, c: true });\n });\n\n it('parses comma-separated columns as only those visible', () => {\n expect(parser.parse('a,b')).toEqual({ a: true, b: true, c: false });\n expect(parser.parse('b')).toEqual({ a: false, b: true, c: false });\n });\n\n it('serializes partial visibility as comma-separated columns', () => {\n expect(parser.serialize({ a: true, b: false, c: true })).toBe('a,c');\n expect(parser.serialize({ a: false, b: true, c: false })).toBe('b');\n });\n\n it('eq returns true for equal visibility', () => {\n expect(parser.eq({ a: true, b: false, c: true }, { a: true, b: false, c: true })).toBe(true);\n });\n\n it('eq returns false for different visibility', () => {\n expect(parser.eq({ a: true, b: false, c: true }, { a: false, b: false, c: true })).toBe(false);\n });\n});\n\ndescribe('parseAsColumnPinningState', () => {\n const parser = parseAsColumnPinningState;\n\n it('parses empty string as no pinned columns', () => {\n expect(parser.parse('')).toEqual({ left: [], right: [] });\n });\n\n it('parses comma-separated columns as left-pinned', () => {\n expect(parser.parse('a,b')).toEqual({ left: ['a', 'b'], right: [] });\n expect(parser.parse('c')).toEqual({ left: ['c'], right: [] });\n });\n\n it('serializes left-pinned columns as comma-separated string', () => {\n expect(parser.serialize({ left: ['a', 'b'], right: [] })).toBe('a,b');\n expect(parser.serialize({ left: [], right: [] })).toBe('');\n });\n\n it('eq returns true for equal pinning', () => {\n expect(parser.eq({ left: ['a', 'b'], right: [] }, { left: ['a', 'b'], right: [] })).toBe(true);\n });\n\n it('eq returns false for different pinning', () => {\n expect(parser.eq({ left: ['a', 'b'], right: [] }, { left: ['b', 'a'], right: [] })).toBe(false);\n expect(parser.eq({ left: ['a'], right: [] }, { left: ['a', 'b'], right: [] })).toBe(false);\n });\n});\n\ndescribe('parseAsNumericFilter', () => {\n describe('parse', () => {\n it('parses gte format', () => {\n expect(parseAsNumericFilter.parse('gte_5')).toEqual({ filterValue: '>=5', emptyOnly: false });\n });\n it('parses lte format', () => {\n expect(parseAsNumericFilter.parse('lte_10')).toEqual({\n filterValue: '<=10',\n emptyOnly: false,\n });\n });\n it('parses gt format', () => {\n expect(parseAsNumericFilter.parse('gt_3')).toEqual({ filterValue: '>3', emptyOnly: false });\n });\n it('parses lt format', () => {\n expect(parseAsNumericFilter.parse('lt_7')).toEqual({ filterValue: '<7', emptyOnly: false });\n });\n it('parses eq format', () => {\n expect(parseAsNumericFilter.parse('eq_5')).toEqual({ filterValue: '=5', emptyOnly: false });\n });\n it('parses empty keyword', () => {\n expect(parseAsNumericFilter.parse('empty')).toEqual({ filterValue: '', emptyOnly: true });\n });\n it('returns default for invalid format', () => {\n expect(parseAsNumericFilter.parse('invalid')).toEqual({ filterValue: '', emptyOnly: false });\n });\n it('returns default for empty string', () => {\n expect(parseAsNumericFilter.parse('')).toEqual({ filterValue: '', emptyOnly: false });\n });\n it('returns default for undefined', () => {\n expect(parseAsNumericFilter.parse(undefined as any)).toEqual({\n filterValue: '',\n emptyOnly: false,\n });\n });\n it('parses decimal values', () => {\n expect(parseAsNumericFilter.parse('gte_3.14')).toEqual({\n filterValue: '>=3.14',\n emptyOnly: false,\n });\n });\n it('parses negative values', () => {\n expect(parseAsNumericFilter.parse('lt_-5')).toEqual({ filterValue: '<-5', emptyOnly: false });\n });\n });\n\n describe('serialize', () => {\n it('serializes >= format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '>=5', emptyOnly: false })).toBe(\n 'gte_5',\n );\n });\n it('serializes <= format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '<=10', emptyOnly: false })).toBe(\n 'lte_10',\n );\n });\n it('serializes > format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '>3', emptyOnly: false })).toBe('gt_3');\n });\n it('serializes < format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '<7', emptyOnly: false })).toBe('lt_7');\n });\n it('serializes = format', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '=5', emptyOnly: false })).toBe('eq_5');\n });\n it('serializes emptyOnly as empty', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '', emptyOnly: true })).toBe('empty');\n });\n it('serializes empty filterValue as empty', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: '', emptyOnly: false })).toBe('empty');\n });\n it('returns null for invalid filterValue', () => {\n expect(parseAsNumericFilter.serialize({ filterValue: 'invalid', emptyOnly: false })).toBe(\n null,\n );\n });\n });\n\n describe('eq', () => {\n it('returns true for equal values', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '>=5', emptyOnly: false },\n { filterValue: '>=5', emptyOnly: false },\n ),\n ).toBe(true);\n });\n it('returns false for different filterValue', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '>=5', emptyOnly: false },\n { filterValue: '>=10', emptyOnly: false },\n ),\n ).toBe(false);\n });\n it('returns false for different emptyOnly', () => {\n expect(\n parseAsNumericFilter.eq(\n { filterValue: '', emptyOnly: true },\n { filterValue: '', emptyOnly: false },\n ),\n ).toBe(false);\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAutoSizeColumns.js","sourceRoot":"","sources":["../../src/components/useAutoSizeColumns.tsx"],"names":[],"mappings":";AACA,OAAO,EAAkC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAa,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,SAAS,uBAAuB,CAAQ,EACtC,KAAK,EACL,gBAAgB,EAChB,OAAO,GAAG,EAAE,GAKb
|
|
1
|
+
{"version":3,"file":"useAutoSizeColumns.js","sourceRoot":"","sources":["../../src/components/useAutoSizeColumns.tsx"],"names":[],"mappings":"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","sourcesContent":["import type { ColumnSizingState, Header, Table } from '@tanstack/react-table';\nimport { type ReactNode, type RefObject, useEffect, useMemo, useRef, useState } from 'react';\nimport { flushSync } from 'react-dom';\nimport { type Root, createRoot } from 'react-dom/client';\n\nimport { TanstackTableHeaderCell } from './TanstackTableHeaderCell.js';\n\nfunction HiddenMeasurementHeader<TData>({\n table,\n columnsToMeasure,\n filters = {},\n}: {\n table: Table<TData>;\n columnsToMeasure: { id: string }[];\n filters?: Record<string, (props: { header: Header<TData, unknown> }) => ReactNode>;\n}) {\n const headerGroups = table.getHeaderGroups();\n const leafHeaderGroup = headerGroups[headerGroups.length - 1];\n\n return (\n <div\n style={{\n position: 'fixed',\n visibility: 'hidden',\n pointerEvents: 'none',\n top: '-9999px',\n }}\n >\n <table className=\"table table-hover mb-0\" style={{ display: 'grid', tableLayout: 'fixed' }}>\n <thead style={{ display: 'grid' }}>\n <tr style={{ display: 'flex' }}>\n {columnsToMeasure.map((col) => {\n const header = leafHeaderGroup.headers.find((h) => h.column.id === col.id);\n if (!header) return null;\n\n return (\n <TanstackTableHeaderCell\n key={header.id}\n header={header}\n filters={filters}\n table={table}\n isPinned={false}\n measurementMode={true}\n />\n );\n })}\n </tr>\n </thead>\n </table>\n </div>\n );\n}\n\n/**\n * Custom hook that automatically measures and sets column widths based on header content.\n * Only measures columns that have `meta: { autoSize: true }` and don't have explicit sizes set.\n * User resizes are preserved.\n *\n * @param table - The TanStack Table instance\n * @param tableRef - Ref to the table container element\n * @param filters - Optional filters map for rendering filter components in measurement\n * @returns A boolean indicating whether the initial measurement has completed\n */\nexport function useAutoSizeColumns<TData>(\n table: Table<TData>,\n tableRef: RefObject<HTMLDivElement | null>,\n filters?: Record<string, (props: { header: Header<TData, unknown> }) => ReactNode>,\n): boolean {\n const measurementContainerRef = useRef<HTMLDivElement | null>(null);\n const measurementRootRef = useRef<Root | null>(null);\n\n // Compute columns that need measuring\n const columnsToMeasure = useMemo(() => {\n const allColumns = table.getAllLeafColumns();\n return allColumns.filter((col) => col.columnDef.meta?.autoSize);\n }, [table]);\n\n // Initialize hasMeasured to true if there's nothing to measure\n const [hasMeasured, setHasMeasured] = useState(() => columnsToMeasure.length === 0);\n\n // Perform measurement\n useEffect(() => {\n if (hasMeasured || !tableRef.current || columnsToMeasure.length === 0) {\n return;\n }\n\n // Wait for next frame to ensure DOM is ready\n const rafId = requestAnimationFrame(() => {\n if (!tableRef.current) {\n return;\n }\n\n // Create or reuse measurement container\n let container = measurementContainerRef.current;\n if (!container) {\n container = document.createElement('div');\n document.body.append(container);\n measurementContainerRef.current = container;\n measurementRootRef.current = createRoot(container);\n }\n\n // Render headers into hidden container. We need to use `flushSync` to ensure\n // that it's rendered synchronously before we measure.\n // eslint-disable-next-line @eslint-react/dom/no-flush-sync\n flushSync(() => {\n measurementRootRef.current?.render(\n <HiddenMeasurementHeader\n table={table}\n columnsToMeasure={columnsToMeasure}\n filters={filters ?? {}}\n />,\n );\n });\n\n // Force layout calculation\n void container.offsetWidth;\n\n // Measure each header and build sizing state\n const newSizing: ColumnSizingState = {};\n\n for (const col of columnsToMeasure) {\n const headerElement = container.querySelector(\n `th[data-column-id=\"${col.id}\"]`,\n ) as HTMLElement;\n\n if (headerElement) {\n const measuredWidth = headerElement.scrollWidth;\n const resizeHandlePadding = col.getCanResize() ? 4 : 0;\n const minSize = col.columnDef.minSize ?? 0;\n const maxSize = col.columnDef.maxSize ?? Infinity;\n\n const finalWidth = Math.max(\n minSize,\n Math.min(maxSize, measuredWidth + resizeHandlePadding),\n );\n\n newSizing[col.id] = finalWidth;\n }\n }\n\n // Clear container content by unmounting React components\n measurementRootRef.current?.unmount();\n measurementRootRef.current = null;\n\n // Apply measurements\n if (Object.keys(newSizing).length > 0) {\n table.setColumnSizing((prev) => ({ ...prev, ...newSizing }));\n }\n\n setHasMeasured(true);\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, [table, tableRef, filters, hasMeasured, columnsToMeasure]);\n\n // Clean up measurement container on unmount\n useEffect(() => {\n return () => {\n measurementRootRef.current?.unmount();\n measurementRootRef.current = null;\n const container = measurementContainerRef.current;\n if (container) {\n container.remove();\n measurementContainerRef.current = null;\n }\n };\n }, []);\n\n return hasMeasured;\n}\n"]}
|
|
@@ -21,6 +21,7 @@ export declare function useShiftClickCheckbox<TData>(): {
|
|
|
21
21
|
checked: boolean;
|
|
22
22
|
disabled: boolean;
|
|
23
23
|
onClick: (e: MouseEvent<HTMLInputElement, globalThis.MouseEvent>) => void;
|
|
24
|
+
onChange: () => void;
|
|
24
25
|
};
|
|
25
26
|
};
|
|
26
27
|
//# sourceMappingURL=useShiftClickCheckbox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShiftClickCheckbox.d.ts","sourceRoot":"","sources":["../../src/components/useShiftClickCheckbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAyB,MAAM,OAAO,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,KAAK
|
|
1
|
+
{"version":3,"file":"useShiftClickCheckbox.d.ts","sourceRoot":"","sources":["../../src/components/useShiftClickCheckbox.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,KAAK,UAAU,EAAyB,MAAM,OAAO,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,KAAK;;;;;;;;;EAoD1C","sourcesContent":["import type { Row, Table } from '@tanstack/react-table';\nimport { type MouseEvent, useCallback, useState } from 'react';\n\n/**\n * A hook that provides shift-click range selection functionality for table checkboxes.\n * Use this hook in the parent component and pass the returned props to individual checkboxes.\n *\n * @example\n * ```tsx\n * const { lastClickedRowIndex, createCheckboxProps } = useShiftClickCheckbox();\n *\n * // In your column definition:\n * cell: ({ row, table }) => {\n * return <input type=\"checkbox\" {...createCheckboxProps(row, table)} />;\n * }\n * ```\n */\nexport function useShiftClickCheckbox<TData>() {\n const [lastClickedRowIndex, setLastClickedRowIndex] = useState<number | null>(null);\n\n /**\n * Creates props for a checkbox that supports shift-click range selection.\n * @param row - The TanStack Table row\n * @param table - The TanStack Table instance\n * @returns Props to spread on the checkbox input element\n */\n const createCheckboxProps = useCallback(\n (row: Row<TData>, table: Table<TData>) => {\n const handleClick = (e: MouseEvent<HTMLInputElement>) => {\n if (e.shiftKey && lastClickedRowIndex !== null) {\n // Shift-click: select range\n const currentIndex = row.index;\n const start = Math.min(lastClickedRowIndex, currentIndex);\n const end = Math.max(lastClickedRowIndex, currentIndex);\n\n // Get all rows in the range\n const rows = table.getRowModel().rows;\n const shouldSelect = !row.getIsSelected();\n\n // Select or deselect all rows in the range\n for (let i = start; i <= end; i++) {\n if (rows[i]?.getCanSelect()) {\n rows[i].toggleSelected(shouldSelect);\n }\n }\n } else {\n // Normal click: toggle this row\n row.getToggleSelectedHandler()(e);\n }\n setLastClickedRowIndex(row.index);\n };\n\n return {\n checked: row.getIsSelected(),\n disabled: !row.getCanSelect(),\n onClick: handleClick,\n // Empty onChange to satisfy React's controlled input requirement\n // (actual state changes are handled via onClick for shift-click support)\n onChange: () => {},\n };\n },\n [lastClickedRowIndex],\n );\n\n return {\n lastClickedRowIndex,\n setLastClickedRowIndex,\n createCheckboxProps,\n };\n}\n"]}
|
|
@@ -48,6 +48,9 @@ export function useShiftClickCheckbox() {
|
|
|
48
48
|
checked: row.getIsSelected(),
|
|
49
49
|
disabled: !row.getCanSelect(),
|
|
50
50
|
onClick: handleClick,
|
|
51
|
+
// Empty onChange to satisfy React's controlled input requirement
|
|
52
|
+
// (actual state changes are handled via onClick for shift-click support)
|
|
53
|
+
onChange: () => { },
|
|
51
54
|
};
|
|
52
55
|
}, [lastClickedRowIndex]);
|
|
53
56
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShiftClickCheckbox.js","sourceRoot":"","sources":["../../src/components/useShiftClickCheckbox.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB
|
|
1
|
+
{"version":3,"file":"useShiftClickCheckbox.js","sourceRoot":"","sources":["../../src/components/useShiftClickCheckbox.tsx"],"names":[],"mappings":"AACA,OAAO,EAAmB,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/D;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,qBAAqB;IACnC,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEpF;;;;;OAKG;IACH,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,GAAe,EAAE,KAAmB,EAAE,EAAE;QACvC,MAAM,WAAW,GAAG,CAAC,CAA+B,EAAE,EAAE;YACtD,IAAI,CAAC,CAAC,QAAQ,IAAI,mBAAmB,KAAK,IAAI,EAAE,CAAC;gBAC/C,4BAA4B;gBAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;gBAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC;gBAExD,4BAA4B;gBAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC;gBACtC,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBAE1C,2CAA2C;gBAC3C,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC;wBAC5B,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,gCAAgC;gBAChC,GAAG,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,sBAAsB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC;QAEF,OAAO;YACL,OAAO,EAAE,GAAG,CAAC,aAAa,EAAE;YAC5B,QAAQ,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE;YAC7B,OAAO,EAAE,WAAW;YACpB,iEAAiE;YACjE,yEAAyE;YACzE,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;SACnB,CAAC;IACJ,CAAC,EACD,CAAC,mBAAmB,CAAC,CACtB,CAAC;IAEF,OAAO;QACL,mBAAmB;QACnB,sBAAsB;QACtB,mBAAmB;KACpB,CAAC;AACJ,CAAC","sourcesContent":["import type { Row, Table } from '@tanstack/react-table';\nimport { type MouseEvent, useCallback, useState } from 'react';\n\n/**\n * A hook that provides shift-click range selection functionality for table checkboxes.\n * Use this hook in the parent component and pass the returned props to individual checkboxes.\n *\n * @example\n * ```tsx\n * const { lastClickedRowIndex, createCheckboxProps } = useShiftClickCheckbox();\n *\n * // In your column definition:\n * cell: ({ row, table }) => {\n * return <input type=\"checkbox\" {...createCheckboxProps(row, table)} />;\n * }\n * ```\n */\nexport function useShiftClickCheckbox<TData>() {\n const [lastClickedRowIndex, setLastClickedRowIndex] = useState<number | null>(null);\n\n /**\n * Creates props for a checkbox that supports shift-click range selection.\n * @param row - The TanStack Table row\n * @param table - The TanStack Table instance\n * @returns Props to spread on the checkbox input element\n */\n const createCheckboxProps = useCallback(\n (row: Row<TData>, table: Table<TData>) => {\n const handleClick = (e: MouseEvent<HTMLInputElement>) => {\n if (e.shiftKey && lastClickedRowIndex !== null) {\n // Shift-click: select range\n const currentIndex = row.index;\n const start = Math.min(lastClickedRowIndex, currentIndex);\n const end = Math.max(lastClickedRowIndex, currentIndex);\n\n // Get all rows in the range\n const rows = table.getRowModel().rows;\n const shouldSelect = !row.getIsSelected();\n\n // Select or deselect all rows in the range\n for (let i = start; i <= end; i++) {\n if (rows[i]?.getCanSelect()) {\n rows[i].toggleSelected(shouldSelect);\n }\n }\n } else {\n // Normal click: toggle this row\n row.getToggleSelectedHandler()(e);\n }\n setLastClickedRowIndex(row.index);\n };\n\n return {\n checked: row.getIsSelected(),\n disabled: !row.getCanSelect(),\n onClick: handleClick,\n // Empty onChange to satisfy React's controlled input requirement\n // (actual state changes are handled via onClick for shift-click support)\n onChange: () => {},\n };\n },\n [lastClickedRowIndex],\n );\n\n return {\n lastClickedRowIndex,\n setLastClickedRowIndex,\n createCheckboxProps,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-modal-state.js","sourceRoot":"","sources":["../../src/hooks/use-modal-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAI,WAAW,GAAa,IAAI
|
|
1
|
+
{"version":3,"file":"use-modal-state.js","sourceRoot":"","sources":["../../src/hooks/use-modal-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAI,WAAW,GAAa,IAAI;IAC3D,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAU,KAAK,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC;IACxD,OAAO;QACL,IAAI;QACJ,IAAI;QACJ,YAAY,EAAE,CAAC,IAAO,EAAE,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import { useState } from 'react';\n\n/**\n * A hook to manage the state of a modal dialog that's rendered with a certain set of data.\n *\n * The main thing this hook achieves is to separate the \"shown\" state of the modal from the\n * data that it's rendered with, so that when the modal is closed, the data is cleared only\n * after the modal has finished closing (i.e., after any closing animation has completed).\n * This avoids a flash of an empty modal if the data is cleared immediately when the modal is closed.\n */\nexport function useModalState<T>(initialData: T | null = null) {\n const [show, setShow] = useState<boolean>(false);\n const [data, setData] = useState<T | null>(initialData);\n return {\n show,\n data,\n showWithData: (data: T) => {\n setData(data);\n setShow(true);\n },\n hide: () => setShow(false),\n onHide: () => setShow(false),\n onExited: () => setData(null),\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prairielearn/ui",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -20,26 +20,26 @@
|
|
|
20
20
|
"test": "vitest run --coverage"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@prairielearn/browser-utils": "^2.7.
|
|
24
|
-
"@prairielearn/run": "^2.0.
|
|
23
|
+
"@prairielearn/browser-utils": "^2.7.1",
|
|
24
|
+
"@prairielearn/run": "^2.0.2",
|
|
25
25
|
"@tanstack/react-table": "^8.21.3",
|
|
26
|
-
"@tanstack/react-virtual": "^3.13.
|
|
26
|
+
"@tanstack/react-virtual": "^3.13.19",
|
|
27
27
|
"@tanstack/table-core": "^8.21.3",
|
|
28
|
-
"@types/react": "^19.2.
|
|
28
|
+
"@types/react": "^19.2.14",
|
|
29
29
|
"@types/react-dom": "^19.2.3",
|
|
30
30
|
"clsx": "^2.1.1",
|
|
31
|
-
"nuqs": "^2.8.
|
|
31
|
+
"nuqs": "^2.8.9",
|
|
32
32
|
"react": "^19.2.4",
|
|
33
|
-
"react-aria": "^3.
|
|
34
|
-
"react-aria-components": "^1.
|
|
33
|
+
"react-aria": "^3.47.0",
|
|
34
|
+
"react-aria-components": "^1.16.0",
|
|
35
35
|
"react-bootstrap": "3.0.0-beta.5",
|
|
36
36
|
"react-dom": "^19.2.4",
|
|
37
37
|
"use-debounce": "^10.1.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@prairielearn/tsconfig": "^2.0.0",
|
|
41
|
-
"@types/node": "^24.
|
|
42
|
-
"@typescript/native-preview": "^7.0.0-dev.
|
|
41
|
+
"@types/node": "^24.11.0",
|
|
42
|
+
"@typescript/native-preview": "^7.0.0-dev.20260305.1",
|
|
43
43
|
"typescript": "^5.9.3",
|
|
44
44
|
"typescript-cp": "^0.1.9",
|
|
45
45
|
"vitest": "^4.0.18"
|
|
@@ -41,7 +41,10 @@ type ManagedAriaProps =
|
|
|
41
41
|
| 'menuTrigger'
|
|
42
42
|
| 'allowsEmptyCollection'
|
|
43
43
|
| 'isDisabled'
|
|
44
|
-
| 'isInvalid'
|
|
44
|
+
| 'isInvalid'
|
|
45
|
+
| 'value'
|
|
46
|
+
| 'defaultValue'
|
|
47
|
+
| 'onChange';
|
|
45
48
|
|
|
46
49
|
export interface ComboBoxProps<T = void> extends Omit<
|
|
47
50
|
AriaComboBoxProps<ComboBoxItem<T>>,
|
|
@@ -247,7 +247,7 @@ export function TanstackTable<RowDataModel>({
|
|
|
247
247
|
useEffect(() => {
|
|
248
248
|
if (hasAutoSized) {
|
|
249
249
|
// https://github.com/NickvanDyke/eslint-plugin-react-you-might-not-need-an-effect/issues/58
|
|
250
|
-
// eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-
|
|
250
|
+
// eslint-disable-next-line react-you-might-not-need-an-effect/no-pass-data-to-parent
|
|
251
251
|
columnVirtualizer.measure();
|
|
252
252
|
}
|
|
253
253
|
}, [columnVirtualizer, hasAutoSized]);
|
|
@@ -54,6 +54,9 @@ export function useShiftClickCheckbox<TData>() {
|
|
|
54
54
|
checked: row.getIsSelected(),
|
|
55
55
|
disabled: !row.getCanSelect(),
|
|
56
56
|
onClick: handleClick,
|
|
57
|
+
// Empty onChange to satisfy React's controlled input requirement
|
|
58
|
+
// (actual state changes are handled via onClick for shift-click support)
|
|
59
|
+
onChange: () => {},
|
|
57
60
|
};
|
|
58
61
|
},
|
|
59
62
|
[lastClickedRowIndex],
|