@j2-health/design-system 0.4.0 → 0.5.1
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/README.md +31 -11
- package/dist/index.cjs +4 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/src/components/barchart/BarChart.cjs +2 -2
- package/dist/src/components/barchart/BarChart.cjs.map +1 -1
- package/dist/src/components/barchart/BarChart.d.ts +1 -1
- package/dist/src/components/barchart/BarChart.js +2 -2
- package/dist/src/components/barchart/BarChart.js.map +1 -1
- package/dist/src/components/bulkActionBar/BulkActionBar.d.ts +1 -1
- package/dist/src/components/button/Button.d.ts +1 -1
- package/dist/src/components/card/Card.d.ts +1 -1
- package/dist/src/components/checkbox/Checkbox.d.ts +1 -1
- package/dist/src/components/checkboxTree/TreeNode.d.ts +1 -1
- package/dist/src/components/drawer/Drawer.d.ts +1 -1
- package/dist/src/components/dropdown/Dropdown.d.ts +1 -1
- package/dist/src/components/filterform/FilterGroup.d.ts +1 -1
- package/dist/src/components/filterform/FiltersForm.d.ts +1 -1
- package/dist/src/components/form/Form.d.ts +2 -2
- package/dist/src/components/form/FormItem.d.ts +1 -1
- package/dist/src/components/form/FormikField.d.ts +1 -1
- package/dist/src/components/input/AntdInput.d.ts +5 -5
- package/dist/src/components/input/AntdSearchInput.d.ts +5 -5
- package/dist/src/components/input/Input.d.ts +1 -1
- package/dist/src/components/inputnumber/InputNumber.d.ts +1 -1
- package/dist/src/components/listpopover/ListPopover.d.ts +1 -1
- package/dist/src/components/manageColumns/ManageColumnsItem.cjs +76 -0
- package/dist/src/components/manageColumns/ManageColumnsItem.cjs.map +1 -0
- package/dist/src/components/manageColumns/ManageColumnsItem.d.ts +7 -0
- package/dist/src/components/manageColumns/ManageColumnsItem.js +76 -0
- package/dist/src/components/manageColumns/ManageColumnsItem.js.map +1 -0
- package/dist/src/components/manageColumns/ManageColumnsPanel.cjs +79 -0
- package/dist/src/components/manageColumns/ManageColumnsPanel.cjs.map +1 -0
- package/dist/src/components/manageColumns/ManageColumnsPanel.d.ts +18 -0
- package/dist/src/components/manageColumns/ManageColumnsPanel.js +79 -0
- package/dist/src/components/manageColumns/ManageColumnsPanel.js.map +1 -0
- package/dist/src/components/manageColumns/SelectAll.cjs +27 -0
- package/dist/src/components/manageColumns/SelectAll.cjs.map +1 -0
- package/dist/src/components/manageColumns/SelectAll.d.ts +15 -0
- package/dist/src/components/manageColumns/SelectAll.js +27 -0
- package/dist/src/components/manageColumns/SelectAll.js.map +1 -0
- package/dist/src/components/manageColumns/index.d.ts +4 -0
- package/dist/src/components/menu/Menu.d.ts +1 -1
- package/dist/src/components/modal/Modal.d.ts +1 -1
- package/dist/src/components/notificationModal/NotificationModal.d.ts +1 -1
- package/dist/src/components/pagination/Pagination.d.ts +1 -1
- package/dist/src/components/popover/Popover.d.ts +1 -1
- package/dist/src/components/progress/Progress.d.ts +1 -1
- package/dist/src/components/radio/Radio.d.ts +2 -2
- package/dist/src/components/rate/Rate.d.ts +1 -1
- package/dist/src/components/select/SummarizedSelect.cjs +4 -4
- package/dist/src/components/select/SummarizedSelect.cjs.map +1 -1
- package/dist/src/components/select/SummarizedSelect.d.ts +1 -1
- package/dist/src/components/select/SummarizedSelect.js +5 -5
- package/dist/src/components/select/SummarizedSelect.js.map +1 -1
- package/dist/src/components/skeleton/Skeleton.d.ts +1 -1
- package/dist/src/components/spinner/Spinner.d.ts +1 -1
- package/dist/src/components/steps/Steps.d.ts +1 -1
- package/dist/src/components/switch/Switch.d.ts +1 -1
- package/dist/src/components/table/Table.d.ts +3 -3
- package/dist/src/components/tabs/Tabs.d.ts +1 -1
- package/dist/src/components/tooltip/Tooltip.d.ts +1 -1
- package/dist/src/components/vennDiagram/VennDiagram.cjs +1 -1
- package/dist/src/components/vennDiagram/VennDiagram.cjs.map +1 -1
- package/dist/src/components/vennDiagram/VennDiagram.d.ts +1 -1
- package/dist/src/components/vennDiagram/VennDiagram.js +1 -1
- package/dist/src/components/vennDiagram/VennDiagram.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/tailwind.cjs +4 -0
- package/dist/tailwind.cjs.map +1 -1
- package/dist/tailwind.config.d.ts +6 -0
- package/dist/tailwind.js +4 -0
- package/dist/tailwind.js.map +1 -1
- package/package.json +35 -21
- package/src/stylesheets/base.css +322 -0
- package/src/stylesheets/fonts.css +1 -0
- package/src/stylesheets/index.css +3 -327
- package/src/stylesheets/tailwind-v3.css +3 -0
- package/src/stylesheets/tailwind.css +4 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { memo, useCallback } from "react";
|
|
3
|
+
import cx from "classnames";
|
|
4
|
+
import { DotsSixIcon } from "@phosphor-icons/react";
|
|
5
|
+
import { useSortable } from "@dnd-kit/sortable";
|
|
6
|
+
import { CSS } from "@dnd-kit/utilities";
|
|
7
|
+
import { Checkbox } from "../checkbox/Checkbox.js";
|
|
8
|
+
const ManageColumnsItem = memo(function ManageColumnsItem2({
|
|
9
|
+
id,
|
|
10
|
+
label,
|
|
11
|
+
visible,
|
|
12
|
+
pinned,
|
|
13
|
+
onToggle
|
|
14
|
+
}) {
|
|
15
|
+
const handleToggle = useCallback(() => onToggle(id), [onToggle, id]);
|
|
16
|
+
const {
|
|
17
|
+
attributes,
|
|
18
|
+
listeners,
|
|
19
|
+
setNodeRef,
|
|
20
|
+
transform,
|
|
21
|
+
transition,
|
|
22
|
+
isDragging
|
|
23
|
+
} = useSortable({
|
|
24
|
+
id,
|
|
25
|
+
// Boolean shorthand only disables dragging, not dropping onto a pinned row.
|
|
26
|
+
disabled: { draggable: pinned, droppable: pinned }
|
|
27
|
+
});
|
|
28
|
+
const style = {
|
|
29
|
+
transform: CSS.Transform.toString(transform),
|
|
30
|
+
transition
|
|
31
|
+
};
|
|
32
|
+
return /* @__PURE__ */ jsxs(
|
|
33
|
+
"div",
|
|
34
|
+
{
|
|
35
|
+
ref: setNodeRef,
|
|
36
|
+
style,
|
|
37
|
+
className: cx(
|
|
38
|
+
"flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded",
|
|
39
|
+
"has-[button:hover]:bg-j2-gray-2",
|
|
40
|
+
isDragging && "shadow-md z-10 relative",
|
|
41
|
+
pinned && "opacity-50"
|
|
42
|
+
),
|
|
43
|
+
children: [
|
|
44
|
+
/* @__PURE__ */ jsx(
|
|
45
|
+
Checkbox,
|
|
46
|
+
{
|
|
47
|
+
checked: visible,
|
|
48
|
+
disabled: pinned,
|
|
49
|
+
onChange: pinned ? void 0 : handleToggle,
|
|
50
|
+
className: cx(
|
|
51
|
+
// No gap: antd's own .ant-checkbox-label already pads before children.
|
|
52
|
+
"flex items-center flex-1 min-w-0",
|
|
53
|
+
pinned ? "cursor-not-allowed" : "cursor-pointer"
|
|
54
|
+
),
|
|
55
|
+
children: /* @__PURE__ */ jsx("span", { className: "truncate text-j2-lg text-j2-text", title: label, children: label })
|
|
56
|
+
}
|
|
57
|
+
),
|
|
58
|
+
!pinned && /* @__PURE__ */ jsx(
|
|
59
|
+
"button",
|
|
60
|
+
{
|
|
61
|
+
type: "button",
|
|
62
|
+
...attributes,
|
|
63
|
+
...listeners,
|
|
64
|
+
"aria-label": `Drag to reorder ${label}`,
|
|
65
|
+
className: "p-1 text-j2-text cursor-grab active:cursor-grabbing",
|
|
66
|
+
children: /* @__PURE__ */ jsx(DotsSixIcon, { size: 16, weight: "bold", className: "rotate-90" })
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
);
|
|
72
|
+
});
|
|
73
|
+
export {
|
|
74
|
+
ManageColumnsItem
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=ManageColumnsItem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManageColumnsItem.js","sources":["../../../../src/components/manageColumns/ManageColumnsItem.tsx"],"sourcesContent":["import { memo, useCallback } from 'react'\nimport cx from 'classnames'\nimport { DotsSixIcon } from '@phosphor-icons/react'\nimport { useSortable } from '@dnd-kit/sortable'\nimport { CSS } from '@dnd-kit/utilities'\n\nimport { Checkbox } from '../checkbox'\n\nexport const ManageColumnsItem = memo(function ManageColumnsItem({\n id,\n label,\n visible,\n pinned,\n onToggle,\n}: {\n id: string\n label: string\n visible: boolean\n pinned: boolean\n onToggle: (id: string) => void\n}) {\n const handleToggle = useCallback(() => onToggle(id), [onToggle, id])\n\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({\n id,\n // Boolean shorthand only disables dragging, not dropping onto a pinned row.\n disabled: { draggable: pinned, droppable: pinned },\n })\n\n const style = {\n transform: CSS.Transform.toString(transform),\n transition,\n }\n\n return (\n <div\n ref={setNodeRef}\n style={style}\n className={cx(\n 'flex items-center justify-between gap-2 py-1.5 pl-2 -ml-2 bg-white rounded',\n 'has-[button:hover]:bg-j2-gray-2',\n isDragging && 'shadow-md z-10 relative',\n pinned && 'opacity-50'\n )}\n >\n <Checkbox\n checked={visible}\n disabled={pinned}\n onChange={pinned ? undefined : handleToggle}\n className={cx(\n // No gap: antd's own .ant-checkbox-label already pads before children.\n 'flex items-center flex-1 min-w-0',\n pinned ? 'cursor-not-allowed' : 'cursor-pointer'\n )}\n >\n <span className=\"truncate text-j2-lg text-j2-text\" title={label}>\n {label}\n </span>\n </Checkbox>\n {!pinned && (\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n aria-label={`Drag to reorder ${label}`}\n className=\"p-1 text-j2-text cursor-grab active:cursor-grabbing\"\n >\n <DotsSixIcon size={16} weight=\"bold\" className=\"rotate-90\" />\n </button>\n )}\n </div>\n )\n})\n"],"names":["ManageColumnsItem"],"mappings":";;;;;;;AAQO,MAAM,oBAAoB,KAAK,SAASA,mBAAkB;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAMG;AACD,QAAM,eAAe,YAAY,MAAM,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC;AAEnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,IACE,YAAY;AAAA,IACd;AAAA;AAAA,IAEA,UAAU,EAAE,WAAW,QAAQ,WAAW,OAAA;AAAA,EAAO,CAClD;AAED,QAAM,QAAQ;AAAA,IACZ,WAAW,IAAI,UAAU,SAAS,SAAS;AAAA,IAC3C;AAAA,EAAA;AAGF,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA,cAAc;AAAA,QACd,UAAU;AAAA,MAAA;AAAA,MAGZ,UAAA;AAAA,QAAA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU,SAAS,SAAY;AAAA,YAC/B,WAAW;AAAA;AAAA,cAET;AAAA,cACA,SAAS,uBAAuB;AAAA,YAAA;AAAA,YAGlC,8BAAC,QAAA,EAAK,WAAU,oCAAmC,OAAO,OACvD,UAAA,MAAA,CACH;AAAA,UAAA;AAAA,QAAA;AAAA,QAED,CAAC,UACA;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,MAAK;AAAA,YACJ,GAAG;AAAA,YACH,GAAG;AAAA,YACJ,cAAY,mBAAmB,KAAK;AAAA,YACpC,WAAU;AAAA,YAEV,8BAAC,aAAA,EAAY,MAAM,IAAI,QAAO,QAAO,WAAU,YAAA,CAAY;AAAA,UAAA;AAAA,QAAA;AAAA,MAC7D;AAAA,IAAA;AAAA,EAAA;AAIR,CAAC;"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const core = require("@dnd-kit/core");
|
|
6
|
+
const sortable = require("@dnd-kit/sortable");
|
|
7
|
+
const ManageColumnsItem = require("./ManageColumnsItem.cjs");
|
|
8
|
+
const SelectAll = require("./SelectAll.cjs");
|
|
9
|
+
const noop = () => {
|
|
10
|
+
};
|
|
11
|
+
function ManageColumnsPanel({
|
|
12
|
+
columns,
|
|
13
|
+
onToggle,
|
|
14
|
+
onToggleAll,
|
|
15
|
+
onReorder,
|
|
16
|
+
description
|
|
17
|
+
}) {
|
|
18
|
+
const toggleable = React.useMemo(() => columns.filter((c) => !c.pinned), [columns]);
|
|
19
|
+
const visibleCount = toggleable.filter((c) => c.visible).length;
|
|
20
|
+
const sensors = core.useSensors(
|
|
21
|
+
core.useSensor(core.PointerSensor, { activationConstraint: { distance: 4 } }),
|
|
22
|
+
core.useSensor(core.KeyboardSensor, {
|
|
23
|
+
coordinateGetter: sortable.sortableKeyboardCoordinates
|
|
24
|
+
})
|
|
25
|
+
);
|
|
26
|
+
const pinnedIds = React.useMemo(
|
|
27
|
+
() => columns.filter((c) => c.pinned).map((c) => c.id),
|
|
28
|
+
[columns]
|
|
29
|
+
);
|
|
30
|
+
const itemIds = React.useMemo(() => toggleable.map((c) => c.id), [toggleable]);
|
|
31
|
+
const handleDragEnd = (event) => {
|
|
32
|
+
const { active, over } = event;
|
|
33
|
+
if (!over || active.id === over.id) return;
|
|
34
|
+
const from = itemIds.indexOf(active.id);
|
|
35
|
+
const to = itemIds.indexOf(over.id);
|
|
36
|
+
if (from === -1 || to === -1) return;
|
|
37
|
+
onReorder == null ? void 0 : onReorder([...pinnedIds, ...sortable.arrayMove(itemIds, from, to)]);
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
40
|
+
toggleable.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between", children: [
|
|
41
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-semibold text-sm text-j2-text", children: [
|
|
42
|
+
visibleCount,
|
|
43
|
+
"/",
|
|
44
|
+
toggleable.length,
|
|
45
|
+
" Columns Shown"
|
|
46
|
+
] }),
|
|
47
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
48
|
+
SelectAll.SelectAll,
|
|
49
|
+
{
|
|
50
|
+
columns,
|
|
51
|
+
onToggle,
|
|
52
|
+
onToggleAll
|
|
53
|
+
}
|
|
54
|
+
)
|
|
55
|
+
] }),
|
|
56
|
+
description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-j2-text mb-4", children: description }),
|
|
57
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
+
core.DndContext,
|
|
59
|
+
{
|
|
60
|
+
sensors,
|
|
61
|
+
collisionDetection: core.closestCenter,
|
|
62
|
+
onDragEnd: handleDragEnd,
|
|
63
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(sortable.SortableContext, { items: itemIds, strategy: sortable.verticalListSortingStrategy, children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col", children: columns.map((column) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
ManageColumnsItem.ManageColumnsItem,
|
|
65
|
+
{
|
|
66
|
+
id: column.id,
|
|
67
|
+
label: column.label,
|
|
68
|
+
visible: column.pinned ? true : column.visible,
|
|
69
|
+
pinned: Boolean(column.pinned),
|
|
70
|
+
onToggle: onToggle ?? noop
|
|
71
|
+
},
|
|
72
|
+
column.id
|
|
73
|
+
)) }) })
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
] });
|
|
77
|
+
}
|
|
78
|
+
exports.ManageColumnsPanel = ManageColumnsPanel;
|
|
79
|
+
//# sourceMappingURL=ManageColumnsPanel.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManageColumnsPanel.cjs","sources":["../../../../src/components/manageColumns/ManageColumnsPanel.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from 'react'\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\nimport { ManageColumnsItem } from './ManageColumnsItem'\nimport { SelectAll } from './SelectAll'\n\nconst noop = () => {}\n\nexport type ManageColumnsColumn = {\n id: string\n label: string\n visible: boolean\n /** Always visible, not draggable. Put pinned columns first in `columns`. */\n pinned?: boolean\n}\n\nexport type ManageColumnsPanelProps = {\n /** Columns in display order. Put any `pinned` columns first. */\n columns: ManageColumnsColumn[]\n onToggle?: (id: string) => void\n /** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */\n onToggleAll?: (ids: string[], visible: boolean) => void\n onReorder?: (orderedIds: string[]) => void\n description?: ReactNode\n}\n\nexport function ManageColumnsPanel({\n columns,\n onToggle,\n onToggleAll,\n onReorder,\n description,\n}: ManageColumnsPanelProps) {\n const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns])\n const visibleCount = toggleable.filter((c) => c.visible).length\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const pinnedIds = useMemo(\n () => columns.filter((c) => c.pinned).map((c) => c.id),\n [columns]\n )\n const itemIds = useMemo(() => toggleable.map((c) => c.id), [toggleable])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n const from = itemIds.indexOf(active.id as string)\n const to = itemIds.indexOf(over.id as string)\n if (from === -1 || to === -1) return\n onReorder?.([...pinnedIds, ...arrayMove(itemIds, from, to)])\n }\n\n return (\n <>\n {toggleable.length > 0 && (\n <div className=\"sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between\">\n <span className=\"font-semibold text-sm text-j2-text\">\n {visibleCount}/{toggleable.length} Columns Shown\n </span>\n <SelectAll\n columns={columns}\n onToggle={onToggle}\n onToggleAll={onToggleAll}\n />\n </div>\n )}\n {description && (\n <p className=\"text-sm text-j2-text mb-4\">{description}</p>\n )}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={itemIds} strategy={verticalListSortingStrategy}>\n <div className=\"flex flex-col\">\n {columns.map((column) => (\n <ManageColumnsItem\n key={column.id}\n id={column.id}\n label={column.label}\n visible={column.pinned ? true : column.visible}\n pinned={Boolean(column.pinned)}\n onToggle={onToggle ?? noop}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </>\n )\n}\n"],"names":["useMemo","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","arrayMove","jsxs","Fragment","jsx","SelectAll","DndContext","closestCenter","SortableContext","verticalListSortingStrategy","ManageColumnsItem"],"mappings":";;;;;;;;AAoBA,MAAM,OAAO,MAAM;AAAC;AAoBb,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,aAAaA,MAAAA,QAAQ,MAAM,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAM,eAAe,WAAW,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAEzD,QAAM,UAAUC,KAAAA;AAAAA,IACdC,KAAAA,UAAUC,KAAAA,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAA,GAAK;AAAA,IAClED,KAAAA,UAAUE,KAAAA,gBAAgB;AAAA,MACxB,kBAAkBC,SAAAA;AAAAA,IAAA,CACnB;AAAA,EAAA;AAGH,QAAM,YAAYL,MAAAA;AAAAA,IAChB,MAAM,QAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACrD,CAAC,OAAO;AAAA,EAAA;AAEV,QAAM,UAAUA,MAAAA,QAAQ,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC;AAEvE,QAAM,gBAAgB,CAAC,UAAwB;AAC7C,UAAM,EAAE,QAAQ,KAAA,IAAS;AACzB,QAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;AACpC,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAY;AAChD,UAAM,KAAK,QAAQ,QAAQ,KAAK,EAAY;AAC5C,QAAI,SAAS,MAAM,OAAO,GAAI;AAC9B,2CAAY,CAAC,GAAG,WAAW,GAAGM,SAAAA,UAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EAC5D;AAEA,SACEC,2BAAAA,KAAAC,qBAAA,EACG,UAAA;AAAA,IAAA,WAAW,SAAS,KACnBD,2BAAAA,KAAC,OAAA,EAAI,WAAU,uIACb,UAAA;AAAA,MAAAA,2BAAAA,KAAC,QAAA,EAAK,WAAU,sCACb,UAAA;AAAA,QAAA;AAAA,QAAa;AAAA,QAAE,WAAW;AAAA,QAAO;AAAA,MAAA,GACpC;AAAA,MACAE,2BAAAA;AAAAA,QAACC,UAAAA;AAAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAED,eACCD,2BAAAA,IAAC,KAAA,EAAE,WAAU,6BAA6B,UAAA,aAAY;AAAA,IAExDA,2BAAAA;AAAAA,MAACE,KAAAA;AAAAA,MAAA;AAAA,QACC;AAAA,QACA,oBAAoBC,KAAAA;AAAAA,QACpB,WAAW;AAAA,QAEX,UAAAH,2BAAAA,IAACI,0BAAA,EAAgB,OAAO,SAAS,UAAUC,SAAAA,6BACzC,UAAAL,2BAAAA,IAAC,OAAA,EAAI,WAAU,iBACZ,UAAA,QAAQ,IAAI,CAAC,WACZA,2BAAAA;AAAAA,UAACM,kBAAAA;AAAAA,UAAA;AAAA,YAEC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,OAAO,SAAS,OAAO,OAAO;AAAA,YACvC,QAAQ,QAAQ,OAAO,MAAM;AAAA,YAC7B,UAAU,YAAY;AAAA,UAAA;AAAA,UALjB,OAAO;AAAA,QAAA,CAOf,GACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export type ManageColumnsColumn = {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
visible: boolean;
|
|
6
|
+
/** Always visible, not draggable. Put pinned columns first in `columns`. */
|
|
7
|
+
pinned?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export type ManageColumnsPanelProps = {
|
|
10
|
+
/** Columns in display order. Put any `pinned` columns first. */
|
|
11
|
+
columns: ManageColumnsColumn[];
|
|
12
|
+
onToggle?: (id: string) => void;
|
|
13
|
+
/** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */
|
|
14
|
+
onToggleAll?: (ids: string[], visible: boolean) => void;
|
|
15
|
+
onReorder?: (orderedIds: string[]) => void;
|
|
16
|
+
description?: ReactNode;
|
|
17
|
+
};
|
|
18
|
+
export declare function ManageColumnsPanel({ columns, onToggle, onToggleAll, onReorder, description, }: ManageColumnsPanelProps): import('react').JSX.Element;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { jsxs, Fragment, jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { useSensors, useSensor, PointerSensor, KeyboardSensor, DndContext, closestCenter } from "@dnd-kit/core";
|
|
4
|
+
import { sortableKeyboardCoordinates, SortableContext, verticalListSortingStrategy, arrayMove } from "@dnd-kit/sortable";
|
|
5
|
+
import { ManageColumnsItem } from "./ManageColumnsItem.js";
|
|
6
|
+
import { SelectAll } from "./SelectAll.js";
|
|
7
|
+
const noop = () => {
|
|
8
|
+
};
|
|
9
|
+
function ManageColumnsPanel({
|
|
10
|
+
columns,
|
|
11
|
+
onToggle,
|
|
12
|
+
onToggleAll,
|
|
13
|
+
onReorder,
|
|
14
|
+
description
|
|
15
|
+
}) {
|
|
16
|
+
const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns]);
|
|
17
|
+
const visibleCount = toggleable.filter((c) => c.visible).length;
|
|
18
|
+
const sensors = useSensors(
|
|
19
|
+
useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),
|
|
20
|
+
useSensor(KeyboardSensor, {
|
|
21
|
+
coordinateGetter: sortableKeyboardCoordinates
|
|
22
|
+
})
|
|
23
|
+
);
|
|
24
|
+
const pinnedIds = useMemo(
|
|
25
|
+
() => columns.filter((c) => c.pinned).map((c) => c.id),
|
|
26
|
+
[columns]
|
|
27
|
+
);
|
|
28
|
+
const itemIds = useMemo(() => toggleable.map((c) => c.id), [toggleable]);
|
|
29
|
+
const handleDragEnd = (event) => {
|
|
30
|
+
const { active, over } = event;
|
|
31
|
+
if (!over || active.id === over.id) return;
|
|
32
|
+
const from = itemIds.indexOf(active.id);
|
|
33
|
+
const to = itemIds.indexOf(over.id);
|
|
34
|
+
if (from === -1 || to === -1) return;
|
|
35
|
+
onReorder == null ? void 0 : onReorder([...pinnedIds, ...arrayMove(itemIds, from, to)]);
|
|
36
|
+
};
|
|
37
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
38
|
+
toggleable.length > 0 && /* @__PURE__ */ jsxs("div", { className: "sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between", children: [
|
|
39
|
+
/* @__PURE__ */ jsxs("span", { className: "font-semibold text-sm text-j2-text", children: [
|
|
40
|
+
visibleCount,
|
|
41
|
+
"/",
|
|
42
|
+
toggleable.length,
|
|
43
|
+
" Columns Shown"
|
|
44
|
+
] }),
|
|
45
|
+
/* @__PURE__ */ jsx(
|
|
46
|
+
SelectAll,
|
|
47
|
+
{
|
|
48
|
+
columns,
|
|
49
|
+
onToggle,
|
|
50
|
+
onToggleAll
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
] }),
|
|
54
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-sm text-j2-text mb-4", children: description }),
|
|
55
|
+
/* @__PURE__ */ jsx(
|
|
56
|
+
DndContext,
|
|
57
|
+
{
|
|
58
|
+
sensors,
|
|
59
|
+
collisionDetection: closestCenter,
|
|
60
|
+
onDragEnd: handleDragEnd,
|
|
61
|
+
children: /* @__PURE__ */ jsx(SortableContext, { items: itemIds, strategy: verticalListSortingStrategy, children: /* @__PURE__ */ jsx("div", { className: "flex flex-col", children: columns.map((column) => /* @__PURE__ */ jsx(
|
|
62
|
+
ManageColumnsItem,
|
|
63
|
+
{
|
|
64
|
+
id: column.id,
|
|
65
|
+
label: column.label,
|
|
66
|
+
visible: column.pinned ? true : column.visible,
|
|
67
|
+
pinned: Boolean(column.pinned),
|
|
68
|
+
onToggle: onToggle ?? noop
|
|
69
|
+
},
|
|
70
|
+
column.id
|
|
71
|
+
)) }) })
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
] });
|
|
75
|
+
}
|
|
76
|
+
export {
|
|
77
|
+
ManageColumnsPanel
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=ManageColumnsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManageColumnsPanel.js","sources":["../../../../src/components/manageColumns/ManageColumnsPanel.tsx"],"sourcesContent":["import { useMemo, type ReactNode } from 'react'\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n closestCenter,\n useSensor,\n useSensors,\n type DragEndEvent,\n} from '@dnd-kit/core'\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable'\n\nimport { ManageColumnsItem } from './ManageColumnsItem'\nimport { SelectAll } from './SelectAll'\n\nconst noop = () => {}\n\nexport type ManageColumnsColumn = {\n id: string\n label: string\n visible: boolean\n /** Always visible, not draggable. Put pinned columns first in `columns`. */\n pinned?: boolean\n}\n\nexport type ManageColumnsPanelProps = {\n /** Columns in display order. Put any `pinned` columns first. */\n columns: ManageColumnsColumn[]\n onToggle?: (id: string) => void\n /** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */\n onToggleAll?: (ids: string[], visible: boolean) => void\n onReorder?: (orderedIds: string[]) => void\n description?: ReactNode\n}\n\nexport function ManageColumnsPanel({\n columns,\n onToggle,\n onToggleAll,\n onReorder,\n description,\n}: ManageColumnsPanelProps) {\n const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns])\n const visibleCount = toggleable.filter((c) => c.visible).length\n\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 4 } }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates,\n })\n )\n\n const pinnedIds = useMemo(\n () => columns.filter((c) => c.pinned).map((c) => c.id),\n [columns]\n )\n const itemIds = useMemo(() => toggleable.map((c) => c.id), [toggleable])\n\n const handleDragEnd = (event: DragEndEvent) => {\n const { active, over } = event\n if (!over || active.id === over.id) return\n const from = itemIds.indexOf(active.id as string)\n const to = itemIds.indexOf(over.id as string)\n if (from === -1 || to === -1) return\n onReorder?.([...pinnedIds, ...arrayMove(itemIds, from, to)])\n }\n\n return (\n <>\n {toggleable.length > 0 && (\n <div className=\"sticky -top-4 z-10 -mt-4 -mx-4 pt-3 px-4 pb-2 mb-3 bg-white border-b border-j2-border-secondary flex items-baseline justify-between\">\n <span className=\"font-semibold text-sm text-j2-text\">\n {visibleCount}/{toggleable.length} Columns Shown\n </span>\n <SelectAll\n columns={columns}\n onToggle={onToggle}\n onToggleAll={onToggleAll}\n />\n </div>\n )}\n {description && (\n <p className=\"text-sm text-j2-text mb-4\">{description}</p>\n )}\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragEnd={handleDragEnd}\n >\n <SortableContext items={itemIds} strategy={verticalListSortingStrategy}>\n <div className=\"flex flex-col\">\n {columns.map((column) => (\n <ManageColumnsItem\n key={column.id}\n id={column.id}\n label={column.label}\n visible={column.pinned ? true : column.visible}\n pinned={Boolean(column.pinned)}\n onToggle={onToggle ?? noop}\n />\n ))}\n </div>\n </SortableContext>\n </DndContext>\n </>\n )\n}\n"],"names":[],"mappings":";;;;;;AAoBA,MAAM,OAAO,MAAM;AAAC;AAoBb,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,aAAa,QAAQ,MAAM,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAM,eAAe,WAAW,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE;AAEzD,QAAM,UAAU;AAAA,IACd,UAAU,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAA,GAAK;AAAA,IAClE,UAAU,gBAAgB;AAAA,MACxB,kBAAkB;AAAA,IAAA,CACnB;AAAA,EAAA;AAGH,QAAM,YAAY;AAAA,IAChB,MAAM,QAAQ,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACrD,CAAC,OAAO;AAAA,EAAA;AAEV,QAAM,UAAU,QAAQ,MAAM,WAAW,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,UAAU,CAAC;AAEvE,QAAM,gBAAgB,CAAC,UAAwB;AAC7C,UAAM,EAAE,QAAQ,KAAA,IAAS;AACzB,QAAI,CAAC,QAAQ,OAAO,OAAO,KAAK,GAAI;AACpC,UAAM,OAAO,QAAQ,QAAQ,OAAO,EAAY;AAChD,UAAM,KAAK,QAAQ,QAAQ,KAAK,EAAY;AAC5C,QAAI,SAAS,MAAM,OAAO,GAAI;AAC9B,2CAAY,CAAC,GAAG,WAAW,GAAG,UAAU,SAAS,MAAM,EAAE,CAAC;AAAA,EAC5D;AAEA,SACE,qBAAA,UAAA,EACG,UAAA;AAAA,IAAA,WAAW,SAAS,KACnB,qBAAC,OAAA,EAAI,WAAU,uIACb,UAAA;AAAA,MAAA,qBAAC,QAAA,EAAK,WAAU,sCACb,UAAA;AAAA,QAAA;AAAA,QAAa;AAAA,QAAE,WAAW;AAAA,QAAO;AAAA,MAAA,GACpC;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,QAAA;AAAA,MAAA;AAAA,IACF,GACF;AAAA,IAED,eACC,oBAAC,KAAA,EAAE,WAAU,6BAA6B,UAAA,aAAY;AAAA,IAExD;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,oBAAoB;AAAA,QACpB,WAAW;AAAA,QAEX,UAAA,oBAAC,iBAAA,EAAgB,OAAO,SAAS,UAAU,6BACzC,UAAA,oBAAC,OAAA,EAAI,WAAU,iBACZ,UAAA,QAAQ,IAAI,CAAC,WACZ;AAAA,UAAC;AAAA,UAAA;AAAA,YAEC,IAAI,OAAO;AAAA,YACX,OAAO,OAAO;AAAA,YACd,SAAS,OAAO,SAAS,OAAO,OAAO;AAAA,YACvC,QAAQ,QAAQ,OAAO,MAAM;AAAA,YAC7B,UAAU,YAAY;AAAA,UAAA;AAAA,UALjB,OAAO;AAAA,QAAA,CAOf,GACH,EAAA,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF;AAEJ;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const jsxRuntime = require("react/jsx-runtime");
|
|
4
|
+
const React = require("react");
|
|
5
|
+
const Button = require("../button/Button.cjs");
|
|
6
|
+
function SelectAll({ columns, onToggle, onToggleAll }) {
|
|
7
|
+
const toggleable = React.useMemo(() => columns.filter((c) => !c.pinned), [columns]);
|
|
8
|
+
const allVisible = toggleable.length > 0 && toggleable.every((c) => c.visible);
|
|
9
|
+
const label = allVisible ? "Clear all" : "Select all";
|
|
10
|
+
if (toggleable.length === 0) return null;
|
|
11
|
+
const handleSelectAllToggle = () => {
|
|
12
|
+
const affected = toggleable.filter((c) => c.visible === allVisible);
|
|
13
|
+
if (onToggleAll) {
|
|
14
|
+
onToggleAll(
|
|
15
|
+
affected.map((c) => c.id),
|
|
16
|
+
!allVisible
|
|
17
|
+
);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
for (const column of affected) {
|
|
21
|
+
onToggle == null ? void 0 : onToggle(column.id);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { type: "text", size: "small", onClick: handleSelectAllToggle, children: label });
|
|
25
|
+
}
|
|
26
|
+
exports.SelectAll = SelectAll;
|
|
27
|
+
//# sourceMappingURL=SelectAll.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectAll.cjs","sources":["../../../../src/components/manageColumns/SelectAll.tsx"],"sourcesContent":["import { useMemo } from 'react'\n\nimport { Button } from '../button'\nimport type { ManageColumnsColumn } from './ManageColumnsPanel'\n\nexport type SelectAllProps = {\n /** Same `columns` passed to the paired `ManageColumnsPanel`. */\n columns: ManageColumnsColumn[]\n onToggle?: (id: string) => void\n /** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */\n onToggleAll?: (ids: string[], visible: boolean) => void\n}\n\n/**\n * Select-all/clear-all control, composed by `ManageColumnsPanel` itself\n * above its description. Kept as its own component (not inlined) so its\n * label/toggle logic is testable independent of the panel's drag-reorder\n * machinery.\n */\nexport function SelectAll({ columns, onToggle, onToggleAll }: SelectAllProps) {\n const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns])\n const allVisible = toggleable.length > 0 && toggleable.every((c) => c.visible)\n const label = allVisible ? 'Clear all' : 'Select all'\n\n if (toggleable.length === 0) return null\n\n const handleSelectAllToggle = () => {\n const affected = toggleable.filter((c) => c.visible === allVisible)\n if (onToggleAll) {\n onToggleAll(\n affected.map((c) => c.id),\n !allVisible\n )\n return\n }\n for (const column of affected) {\n onToggle?.(column.id)\n }\n }\n\n return (\n <Button type=\"text\" size=\"small\" onClick={handleSelectAllToggle}>\n {label}\n </Button>\n )\n}\n"],"names":["useMemo","jsx","Button"],"mappings":";;;;;AAmBO,SAAS,UAAU,EAAE,SAAS,UAAU,eAA+B;AAC5E,QAAM,aAAaA,MAAAA,QAAQ,MAAM,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAM,aAAa,WAAW,SAAS,KAAK,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO;AAC7E,QAAM,QAAQ,aAAa,cAAc;AAEzC,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,QAAM,wBAAwB,MAAM;AAClC,UAAM,WAAW,WAAW,OAAO,CAAC,MAAM,EAAE,YAAY,UAAU;AAClE,QAAI,aAAa;AACf;AAAA,QACE,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACxB,CAAC;AAAA,MAAA;AAEH;AAAA,IACF;AACA,eAAW,UAAU,UAAU;AAC7B,2CAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,SACEC,+BAACC,OAAAA,UAAO,MAAK,QAAO,MAAK,SAAQ,SAAS,uBACvC,UAAA,MAAA,CACH;AAEJ;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ManageColumnsColumn } from './ManageColumnsPanel.js';
|
|
2
|
+
export type SelectAllProps = {
|
|
3
|
+
/** Same `columns` passed to the paired `ManageColumnsPanel`. */
|
|
4
|
+
columns: ManageColumnsColumn[];
|
|
5
|
+
onToggle?: (id: string) => void;
|
|
6
|
+
/** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */
|
|
7
|
+
onToggleAll?: (ids: string[], visible: boolean) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Select-all/clear-all control, composed by `ManageColumnsPanel` itself
|
|
11
|
+
* above its description. Kept as its own component (not inlined) so its
|
|
12
|
+
* label/toggle logic is testable independent of the panel's drag-reorder
|
|
13
|
+
* machinery.
|
|
14
|
+
*/
|
|
15
|
+
export declare function SelectAll({ columns, onToggle, onToggleAll }: SelectAllProps): import('react').JSX.Element | null;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from "react";
|
|
3
|
+
import { Button } from "../button/Button.js";
|
|
4
|
+
function SelectAll({ columns, onToggle, onToggleAll }) {
|
|
5
|
+
const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns]);
|
|
6
|
+
const allVisible = toggleable.length > 0 && toggleable.every((c) => c.visible);
|
|
7
|
+
const label = allVisible ? "Clear all" : "Select all";
|
|
8
|
+
if (toggleable.length === 0) return null;
|
|
9
|
+
const handleSelectAllToggle = () => {
|
|
10
|
+
const affected = toggleable.filter((c) => c.visible === allVisible);
|
|
11
|
+
if (onToggleAll) {
|
|
12
|
+
onToggleAll(
|
|
13
|
+
affected.map((c) => c.id),
|
|
14
|
+
!allVisible
|
|
15
|
+
);
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const column of affected) {
|
|
19
|
+
onToggle == null ? void 0 : onToggle(column.id);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
return /* @__PURE__ */ jsx(Button, { type: "text", size: "small", onClick: handleSelectAllToggle, children: label });
|
|
23
|
+
}
|
|
24
|
+
export {
|
|
25
|
+
SelectAll
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=SelectAll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectAll.js","sources":["../../../../src/components/manageColumns/SelectAll.tsx"],"sourcesContent":["import { useMemo } from 'react'\n\nimport { Button } from '../button'\nimport type { ManageColumnsColumn } from './ManageColumnsPanel'\n\nexport type SelectAllProps = {\n /** Same `columns` passed to the paired `ManageColumnsPanel`. */\n columns: ManageColumnsColumn[]\n onToggle?: (id: string) => void\n /** Batched select-all/clear-all handler — prefer this over the `onToggle` loop fallback, which can drop updates under a closure-captured state snapshot. */\n onToggleAll?: (ids: string[], visible: boolean) => void\n}\n\n/**\n * Select-all/clear-all control, composed by `ManageColumnsPanel` itself\n * above its description. Kept as its own component (not inlined) so its\n * label/toggle logic is testable independent of the panel's drag-reorder\n * machinery.\n */\nexport function SelectAll({ columns, onToggle, onToggleAll }: SelectAllProps) {\n const toggleable = useMemo(() => columns.filter((c) => !c.pinned), [columns])\n const allVisible = toggleable.length > 0 && toggleable.every((c) => c.visible)\n const label = allVisible ? 'Clear all' : 'Select all'\n\n if (toggleable.length === 0) return null\n\n const handleSelectAllToggle = () => {\n const affected = toggleable.filter((c) => c.visible === allVisible)\n if (onToggleAll) {\n onToggleAll(\n affected.map((c) => c.id),\n !allVisible\n )\n return\n }\n for (const column of affected) {\n onToggle?.(column.id)\n }\n }\n\n return (\n <Button type=\"text\" size=\"small\" onClick={handleSelectAllToggle}>\n {label}\n </Button>\n )\n}\n"],"names":[],"mappings":";;;AAmBO,SAAS,UAAU,EAAE,SAAS,UAAU,eAA+B;AAC5E,QAAM,aAAa,QAAQ,MAAM,QAAQ,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;AAC5E,QAAM,aAAa,WAAW,SAAS,KAAK,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO;AAC7E,QAAM,QAAQ,aAAa,cAAc;AAEzC,MAAI,WAAW,WAAW,EAAG,QAAO;AAEpC,QAAM,wBAAwB,MAAM;AAClC,UAAM,WAAW,WAAW,OAAO,CAAC,MAAM,EAAE,YAAY,UAAU;AAClE,QAAI,aAAa;AACf;AAAA,QACE,SAAS,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,QACxB,CAAC;AAAA,MAAA;AAEH;AAAA,IACF;AACA,eAAW,UAAU,UAAU;AAC7B,2CAAW,OAAO;AAAA,IACpB;AAAA,EACF;AAEA,SACE,oBAAC,UAAO,MAAK,QAAO,MAAK,SAAQ,SAAS,uBACvC,UAAA,MAAA,CACH;AAEJ;"}
|
|
@@ -2,6 +2,6 @@ import { MenuProps as AntdMenuProps } from 'antd';
|
|
|
2
2
|
type Props = Expand<AntdMenuProps> & {
|
|
3
3
|
compact?: boolean;
|
|
4
4
|
};
|
|
5
|
-
declare const Menu: ({ compact, ...props }: Props) => import(
|
|
5
|
+
declare const Menu: ({ compact, ...props }: Props) => import('react').JSX.Element;
|
|
6
6
|
export { Menu };
|
|
7
7
|
export type { Props as MenuProps };
|
|
@@ -2,5 +2,5 @@ import { ModalProps } from 'antd';
|
|
|
2
2
|
export type Props = {
|
|
3
3
|
withContentPadding?: boolean;
|
|
4
4
|
} & Expand<ModalProps>;
|
|
5
|
-
declare const Modal: ({ open, title, children, onCancel, withContentPadding: withPadding, ...props }: Props) => import(
|
|
5
|
+
declare const Modal: ({ open, title, children, onCancel, withContentPadding: withPadding, ...props }: Props) => import('react').JSX.Element;
|
|
6
6
|
export { Modal };
|
|
@@ -7,5 +7,5 @@ export type NotificationModalProps = {
|
|
|
7
7
|
} & Omit<ModalProps, 'title'> & {
|
|
8
8
|
title?: ReactNode;
|
|
9
9
|
};
|
|
10
|
-
declare const NotificationModal: ({ type, title, children, withContentPadding, ...props }: NotificationModalProps) => import(
|
|
10
|
+
declare const NotificationModal: ({ type, title, children, withContentPadding, ...props }: NotificationModalProps) => import('react').JSX.Element;
|
|
11
11
|
export { NotificationModal };
|
|
@@ -14,5 +14,5 @@ type Props = Expand<PaginationProps & {
|
|
|
14
14
|
* both share identical visuals.
|
|
15
15
|
*/
|
|
16
16
|
export declare const withDesignSystemPaginationOverrides: (pagination: PaginationProps, { paginationTextLabels, isSmall }?: Overrides) => PaginationProps;
|
|
17
|
-
declare const Pagination: ({ paginationTextLabels, ...props }: Props) => import(
|
|
17
|
+
declare const Pagination: ({ paginationTextLabels, ...props }: Props) => import('react').JSX.Element;
|
|
18
18
|
export { Pagination };
|
|
@@ -6,5 +6,5 @@ type _Props = AntdPopoverProps & {
|
|
|
6
6
|
paddingSize?: 'xxs' | 'xs' | 'sm' | 'md' | 'xl';
|
|
7
7
|
};
|
|
8
8
|
export type PopoverProps = Expand<_Props>;
|
|
9
|
-
declare const Popover: ({ children, placement, scrollable, contentPadding, content, smallPadding, paddingSize, arrow, rootClassName, ...props }: PopoverProps) => import(
|
|
9
|
+
declare const Popover: ({ children, placement, scrollable, contentPadding, content, smallPadding, paddingSize, arrow, rootClassName, ...props }: PopoverProps) => import('react').JSX.Element;
|
|
10
10
|
export { Popover };
|
|
@@ -5,6 +5,6 @@ type FullRadioGroupProps = AntdRadioGroupProps & {
|
|
|
5
5
|
optionType?: 'default' | 'button';
|
|
6
6
|
};
|
|
7
7
|
type RadioGroupProps = Expand<FullRadioGroupProps>;
|
|
8
|
-
declare const Radio: (props: RadioProps) => import(
|
|
9
|
-
declare const RadioGroup: ({ buttonStyle, optionType, ...props }: RadioGroupProps) => import(
|
|
8
|
+
declare const Radio: (props: RadioProps) => import('react').JSX.Element;
|
|
9
|
+
declare const RadioGroup: ({ buttonStyle, optionType, ...props }: RadioGroupProps) => import('react').JSX.Element;
|
|
10
10
|
export { Radio, RadioGroup };
|
|
@@ -121,7 +121,7 @@ function SummarizedSelect({
|
|
|
121
121
|
}
|
|
122
122
|
} else {
|
|
123
123
|
onChange(optionValue);
|
|
124
|
-
|
|
124
|
+
handleOpenChange(false);
|
|
125
125
|
}
|
|
126
126
|
};
|
|
127
127
|
const handleOptionClick = (optionValue) => {
|
|
@@ -133,7 +133,7 @@ function SummarizedSelect({
|
|
|
133
133
|
}
|
|
134
134
|
} else {
|
|
135
135
|
onChange(optionValue);
|
|
136
|
-
|
|
136
|
+
handleOpenChange(false);
|
|
137
137
|
}
|
|
138
138
|
};
|
|
139
139
|
const handleKeyDown = (e) => {
|
|
@@ -147,7 +147,7 @@ function SummarizedSelect({
|
|
|
147
147
|
if (e.key === "Escape") {
|
|
148
148
|
e.preventDefault();
|
|
149
149
|
e.stopPropagation();
|
|
150
|
-
|
|
150
|
+
handleOpenChange(false);
|
|
151
151
|
return;
|
|
152
152
|
}
|
|
153
153
|
if (navigationKeys.includes(e.key)) {
|
|
@@ -221,7 +221,7 @@ function SummarizedSelect({
|
|
|
221
221
|
[SummarizedSelect_module.default.headlinedMenuContainer]: isHeadline,
|
|
222
222
|
[SummarizedSelect_module.default.menuContainerMultiple]: multiple
|
|
223
223
|
}),
|
|
224
|
-
children: menu
|
|
224
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(React.Fragment, { children: menu }, searchValue)
|
|
225
225
|
}
|
|
226
226
|
),
|
|
227
227
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-between items-center", children: multiple && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "w-full mt-1 pt-1 border-t border-j2-border-secondary", children: /* @__PURE__ */ jsxRuntime.jsx(
|