@mantine/core 9.0.0-alpha.6 → 9.0.0-alpha.7
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/cjs/components/Autocomplete/Autocomplete.cjs +1 -0
- package/cjs/components/Autocomplete/Autocomplete.cjs.map +1 -1
- package/cjs/components/Combobox/use-combobox-target-props/use-combobox-target-props.cjs +1 -0
- package/cjs/components/Combobox/use-combobox-target-props/use-combobox-target-props.cjs.map +1 -1
- package/cjs/components/MultiSelect/MultiSelect.cjs +1 -0
- package/cjs/components/MultiSelect/MultiSelect.cjs.map +1 -1
- package/cjs/components/PasswordInput/PasswordInput.cjs +2 -0
- package/cjs/components/PasswordInput/PasswordInput.cjs.map +1 -1
- package/cjs/components/Popover/PopoverTarget/PopoverTarget.cjs +2 -2
- package/cjs/components/Popover/PopoverTarget/PopoverTarget.cjs.map +1 -1
- package/cjs/components/Radio/Radio.cjs +1 -1
- package/cjs/components/Radio/Radio.cjs.map +1 -1
- package/cjs/components/Select/Select.cjs +7 -6
- package/cjs/components/Select/Select.cjs.map +1 -1
- package/cjs/components/TagsInput/TagsInput.cjs +1 -0
- package/cjs/components/TagsInput/TagsInput.cjs.map +1 -1
- package/esm/components/Autocomplete/Autocomplete.mjs +1 -0
- package/esm/components/Autocomplete/Autocomplete.mjs.map +1 -1
- package/esm/components/Combobox/use-combobox-target-props/use-combobox-target-props.mjs +1 -0
- package/esm/components/Combobox/use-combobox-target-props/use-combobox-target-props.mjs.map +1 -1
- package/esm/components/MultiSelect/MultiSelect.mjs +1 -0
- package/esm/components/MultiSelect/MultiSelect.mjs.map +1 -1
- package/esm/components/PasswordInput/PasswordInput.mjs +2 -0
- package/esm/components/PasswordInput/PasswordInput.mjs.map +1 -1
- package/esm/components/Popover/PopoverTarget/PopoverTarget.mjs +2 -2
- package/esm/components/Popover/PopoverTarget/PopoverTarget.mjs.map +1 -1
- package/esm/components/Radio/Radio.mjs +1 -1
- package/esm/components/Radio/Radio.mjs.map +1 -1
- package/esm/components/Select/Select.mjs +7 -6
- package/esm/components/Select/Select.mjs.map +1 -1
- package/esm/components/TagsInput/TagsInput.mjs +1 -0
- package/esm/components/TagsInput/TagsInput.mjs.map +1 -1
- package/esm/core/utils/get-env/get-env.mjs +1 -1
- package/esm/core/utils/get-env/get-env.mjs.map +1 -1
- package/lib/components/Combobox/use-combobox-target-props/use-combobox-target-props.d.ts +0 -16
- package/lib/components/Input/InputClearSection/InputClearSection.d.ts +1 -1
- package/lib/components/Input/use-input-props.d.ts +18 -18
- package/lib/components/Popover/use-popover.d.ts +2 -2
- package/lib/core/MantineProvider/color-functions/get-contrast-color/get-contrast-color.d.ts +2 -2
- package/package.json +4 -4
- package/cjs/components/MaskInput/MaskInput.cjs +0 -24
- package/cjs/components/MaskInput/MaskInput.cjs.map +0 -1
- package/cjs/components/MaskInput/use-mask-input-props.cjs +0 -29
- package/cjs/components/MaskInput/use-mask-input-props.cjs.map +0 -1
- package/cjs/components/Pagination/PaginationLabel/PaginationLabel.cjs +0 -33
- package/cjs/components/Pagination/PaginationLabel/PaginationLabel.cjs.map +0 -1
- package/cjs/components/RollingNumber/DigitColumn.cjs +0 -41
- package/cjs/components/RollingNumber/DigitColumn.cjs.map +0 -1
- package/cjs/components/RollingNumber/RollingNumber.cjs +0 -100
- package/cjs/components/RollingNumber/RollingNumber.cjs.map +0 -1
- package/cjs/components/RollingNumber/RollingNumber.module.cjs +0 -12
- package/cjs/components/RollingNumber/RollingNumber.module.cjs.map +0 -1
- package/cjs/components/RollingNumber/build-value.cjs +0 -22
- package/cjs/components/RollingNumber/build-value.cjs.map +0 -1
- package/cjs/components/RollingNumber/get-digit-parts.cjs +0 -40
- package/cjs/components/RollingNumber/get-digit-parts.cjs.map +0 -1
- package/cjs/components/RollingNumber/get-render-slots.cjs +0 -78
- package/cjs/components/RollingNumber/get-render-slots.cjs.map +0 -1
- package/cjs/components/Tree/FlatTreeNode.cjs +0 -102
- package/cjs/components/Tree/FlatTreeNode.cjs.map +0 -1
- package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs +0 -23
- package/cjs/components/Tree/filter-tree-data/filter-tree-data.cjs.map +0 -1
- package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs +0 -28
- package/cjs/components/Tree/flatten-tree-data/flatten-tree-data.cjs.map +0 -1
- package/cjs/components/Tree/merge-async-children/merge-async-children.cjs +0 -32
- package/cjs/components/Tree/merge-async-children/merge-async-children.cjs.map +0 -1
- package/cjs/components/Tree/move-tree-node/move-tree-node.cjs +0 -78
- package/cjs/components/Tree/move-tree-node/move-tree-node.cjs.map +0 -1
- package/cjs/components/Tree/use-tree-node-drag-drop.cjs +0 -96
- package/cjs/components/Tree/use-tree-node-drag-drop.cjs.map +0 -1
- package/cjs/components/TreeSelect/TreeSelect.cjs +0 -594
- package/cjs/components/TreeSelect/TreeSelect.cjs.map +0 -1
- package/cjs/components/TreeSelect/TreeSelect.module.cjs +0 -16
- package/cjs/components/TreeSelect/TreeSelect.module.cjs.map +0 -1
- package/cjs/components/TreeSelect/TreeSelectOption.cjs +0 -91
- package/cjs/components/TreeSelect/TreeSelectOption.cjs.map +0 -1
- package/cjs/components/TreeSelect/flatten-tree-select-data.cjs +0 -34
- package/cjs/components/TreeSelect/flatten-tree-select-data.cjs.map +0 -1
- package/cjs/components/TreeSelect/get-checked-values-by-strategy.cjs +0 -30
- package/cjs/components/TreeSelect/get-checked-values-by-strategy.cjs.map +0 -1
- package/esm/components/MaskInput/MaskInput.mjs +0 -23
- package/esm/components/MaskInput/MaskInput.mjs.map +0 -1
- package/esm/components/MaskInput/use-mask-input-props.mjs +0 -28
- package/esm/components/MaskInput/use-mask-input-props.mjs.map +0 -1
- package/esm/components/Pagination/PaginationLabel/PaginationLabel.mjs +0 -32
- package/esm/components/Pagination/PaginationLabel/PaginationLabel.mjs.map +0 -1
- package/esm/components/RollingNumber/DigitColumn.mjs +0 -40
- package/esm/components/RollingNumber/DigitColumn.mjs.map +0 -1
- package/esm/components/RollingNumber/RollingNumber.mjs +0 -99
- package/esm/components/RollingNumber/RollingNumber.mjs.map +0 -1
- package/esm/components/RollingNumber/RollingNumber.module.mjs +0 -12
- package/esm/components/RollingNumber/RollingNumber.module.mjs.map +0 -1
- package/esm/components/RollingNumber/build-value.mjs +0 -22
- package/esm/components/RollingNumber/build-value.mjs.map +0 -1
- package/esm/components/RollingNumber/get-digit-parts.mjs +0 -40
- package/esm/components/RollingNumber/get-digit-parts.mjs.map +0 -1
- package/esm/components/RollingNumber/get-render-slots.mjs +0 -78
- package/esm/components/RollingNumber/get-render-slots.mjs.map +0 -1
- package/esm/components/Tree/FlatTreeNode.mjs +0 -101
- package/esm/components/Tree/FlatTreeNode.mjs.map +0 -1
- package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs +0 -22
- package/esm/components/Tree/filter-tree-data/filter-tree-data.mjs.map +0 -1
- package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs +0 -28
- package/esm/components/Tree/flatten-tree-data/flatten-tree-data.mjs.map +0 -1
- package/esm/components/Tree/merge-async-children/merge-async-children.mjs +0 -32
- package/esm/components/Tree/merge-async-children/merge-async-children.mjs.map +0 -1
- package/esm/components/Tree/move-tree-node/move-tree-node.mjs +0 -78
- package/esm/components/Tree/move-tree-node/move-tree-node.mjs.map +0 -1
- package/esm/components/Tree/use-tree-node-drag-drop.mjs +0 -96
- package/esm/components/Tree/use-tree-node-drag-drop.mjs.map +0 -1
- package/esm/components/TreeSelect/TreeSelect.mjs +0 -593
- package/esm/components/TreeSelect/TreeSelect.mjs.map +0 -1
- package/esm/components/TreeSelect/TreeSelect.module.mjs +0 -16
- package/esm/components/TreeSelect/TreeSelect.module.mjs.map +0 -1
- package/esm/components/TreeSelect/TreeSelectOption.mjs +0 -90
- package/esm/components/TreeSelect/TreeSelectOption.mjs.map +0 -1
- package/esm/components/TreeSelect/flatten-tree-select-data.mjs +0 -34
- package/esm/components/TreeSelect/flatten-tree-select-data.mjs.map +0 -1
- package/esm/components/TreeSelect/get-checked-values-by-strategy.mjs +0 -29
- package/esm/components/TreeSelect/get-checked-values-by-strategy.mjs.map +0 -1
- package/lib/components/MaskInput/MaskInput.d.ts +0 -68
- package/lib/components/MaskInput/index.d.ts +0 -7
- package/lib/components/MaskInput/use-mask-input-props.d.ts +0 -428
- package/lib/components/Pagination/PaginationLabel/PaginationLabel.d.ts +0 -22
- package/lib/components/RollingNumber/DigitColumn.d.ts +0 -10
- package/lib/components/RollingNumber/RollingNumber.d.ts +0 -39
- package/lib/components/RollingNumber/build-value.d.ts +0 -10
- package/lib/components/RollingNumber/get-digit-parts.d.ts +0 -12
- package/lib/components/RollingNumber/get-render-slots.d.ts +0 -35
- package/lib/components/RollingNumber/index.d.ts +0 -9
- package/lib/components/Tree/FlatTreeNode.d.ts +0 -34
- package/lib/components/Tree/filter-tree-data/filter-tree-data.d.ts +0 -4
- package/lib/components/Tree/flatten-tree-data/flatten-tree-data.d.ts +0 -15
- package/lib/components/Tree/merge-async-children/merge-async-children.d.ts +0 -2
- package/lib/components/Tree/move-tree-node/move-tree-node.d.ts +0 -11
- package/lib/components/Tree/use-tree-node-drag-drop.d.ts +0 -18
- package/lib/components/TreeSelect/TreeSelect.d.ts +0 -122
- package/lib/components/TreeSelect/TreeSelectOption.d.ts +0 -29
- package/lib/components/TreeSelect/flatten-tree-select-data.d.ts +0 -12
- package/lib/components/TreeSelect/get-checked-values-by-strategy.d.ts +0 -4
- package/lib/components/TreeSelect/index.d.ts +0 -13
- package/styles/RollingNumber.css +0 -50
- package/styles/RollingNumber.layer.css +0 -51
- package/styles/TreeSelect.css +0 -113
- package/styles/TreeSelect.layer.css +0 -114
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { getDigitParts } from "./get-digit-parts.mjs";
|
|
3
|
-
//#region packages/@mantine/core/src/components/RollingNumber/build-value.ts
|
|
4
|
-
function buildValue({ value, prefix, suffix, decimalSeparator = ".", thousandSeparator, decimalScale, fixedDecimalScale }) {
|
|
5
|
-
const parts = getDigitParts({
|
|
6
|
-
value,
|
|
7
|
-
decimalScale,
|
|
8
|
-
fixedDecimalScale
|
|
9
|
-
});
|
|
10
|
-
let intStr = parts.intDigits.join("");
|
|
11
|
-
if (thousandSeparator) {
|
|
12
|
-
const sep = typeof thousandSeparator === "string" ? thousandSeparator : ",";
|
|
13
|
-
intStr = intStr.replace(/\B(?=(\d{3})+(?!\d))/g, sep);
|
|
14
|
-
}
|
|
15
|
-
let result = parts.negative ? `-${intStr}` : intStr;
|
|
16
|
-
if (parts.fracDigits.length > 0) result += `${decimalSeparator}${parts.fracDigits.join("")}`;
|
|
17
|
-
return `${prefix || ""}${result}${suffix || ""}`;
|
|
18
|
-
}
|
|
19
|
-
//#endregion
|
|
20
|
-
export { buildValue };
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=build-value.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"build-value.mjs","names":[],"sources":["../../../src/components/RollingNumber/build-value.ts"],"sourcesContent":["import { getDigitParts } from './get-digit-parts';\n\nexport interface BuildValueInput {\n value: number;\n prefix?: string;\n suffix?: string;\n decimalSeparator?: string;\n thousandSeparator?: string | boolean;\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n}\n\nexport function buildValue({\n value,\n prefix,\n suffix,\n decimalSeparator = '.',\n thousandSeparator,\n decimalScale,\n fixedDecimalScale,\n}: BuildValueInput): string {\n const parts = getDigitParts({ value, decimalScale, fixedDecimalScale });\n let intStr = parts.intDigits.join('');\n\n if (thousandSeparator) {\n const sep = typeof thousandSeparator === 'string' ? thousandSeparator : ',';\n intStr = intStr.replace(/\\B(?=(\\d{3})+(?!\\d))/g, sep);\n }\n\n let result = parts.negative ? `-${intStr}` : intStr;\n if (parts.fracDigits.length > 0) {\n result += `${decimalSeparator}${parts.fracDigits.join('')}`;\n }\n\n return `${prefix || ''}${result}${suffix || ''}`;\n}\n"],"mappings":";;;AAYA,SAAgB,WAAW,EACzB,OACA,QACA,QACA,mBAAmB,KACnB,mBACA,cACA,qBAC0B;CAC1B,MAAM,QAAQ,cAAc;EAAE;EAAO;EAAc;EAAmB,CAAC;CACvE,IAAI,SAAS,MAAM,UAAU,KAAK,GAAG;AAErC,KAAI,mBAAmB;EACrB,MAAM,MAAM,OAAO,sBAAsB,WAAW,oBAAoB;AACxE,WAAS,OAAO,QAAQ,yBAAyB,IAAI;;CAGvD,IAAI,SAAS,MAAM,WAAW,IAAI,WAAW;AAC7C,KAAI,MAAM,WAAW,SAAS,EAC5B,WAAU,GAAG,mBAAmB,MAAM,WAAW,KAAK,GAAG;AAG3D,QAAO,GAAG,UAAU,KAAK,SAAS,UAAU"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
//#region packages/@mantine/core/src/components/RollingNumber/get-digit-parts.ts
|
|
3
|
-
const PLAIN_FORMAT = new Intl.NumberFormat("en-US", {
|
|
4
|
-
useGrouping: false,
|
|
5
|
-
maximumFractionDigits: 20
|
|
6
|
-
});
|
|
7
|
-
function toPlainString(num, decimalScale) {
|
|
8
|
-
if (!Number.isFinite(num)) return "0";
|
|
9
|
-
if (decimalScale !== void 0) return new Intl.NumberFormat("en-US", {
|
|
10
|
-
useGrouping: false,
|
|
11
|
-
minimumFractionDigits: decimalScale,
|
|
12
|
-
maximumFractionDigits: decimalScale
|
|
13
|
-
}).format(num);
|
|
14
|
-
const str = String(num);
|
|
15
|
-
if (!str.includes("e") && !str.includes("E")) return str;
|
|
16
|
-
return PLAIN_FORMAT.format(num);
|
|
17
|
-
}
|
|
18
|
-
function getDigitParts({ value, decimalScale, fixedDecimalScale }) {
|
|
19
|
-
let str = toPlainString(Math.abs(value), decimalScale);
|
|
20
|
-
if (!fixedDecimalScale && decimalScale !== void 0) {
|
|
21
|
-
const parts = str.split(".");
|
|
22
|
-
if (parts[1]) {
|
|
23
|
-
const trimmed = parts[1].replace(/0+$/, "");
|
|
24
|
-
str = trimmed ? `${parts[0]}.${trimmed}` : parts[0];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
const dotIdx = str.indexOf(".");
|
|
28
|
-
const intStr = dotIdx >= 0 ? str.slice(0, dotIdx) : str;
|
|
29
|
-
const fracStr = dotIdx >= 0 ? str.slice(dotIdx + 1) : "";
|
|
30
|
-
return {
|
|
31
|
-
negative: value < 0,
|
|
32
|
-
intDigits: intStr.split(""),
|
|
33
|
-
fracDigits: fracStr ? fracStr.split("") : [],
|
|
34
|
-
hasDecimal: dotIdx >= 0
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
//#endregion
|
|
38
|
-
export { getDigitParts };
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=get-digit-parts.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-digit-parts.mjs","names":[],"sources":["../../../src/components/RollingNumber/get-digit-parts.ts"],"sourcesContent":["export interface DigitParts {\n negative: boolean;\n intDigits: string[];\n fracDigits: string[];\n hasDecimal: boolean;\n}\n\nexport interface GetDigitPartsInput {\n value: number;\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n}\n\nconst PLAIN_FORMAT = new Intl.NumberFormat('en-US', {\n useGrouping: false,\n maximumFractionDigits: 20,\n});\n\nfunction toPlainString(num: number, decimalScale?: number): string {\n if (!Number.isFinite(num)) {\n return '0';\n }\n\n if (decimalScale !== undefined) {\n return new Intl.NumberFormat('en-US', {\n useGrouping: false,\n minimumFractionDigits: decimalScale,\n maximumFractionDigits: decimalScale,\n }).format(num);\n }\n\n const str = String(num);\n if (!str.includes('e') && !str.includes('E')) {\n return str;\n }\n\n return PLAIN_FORMAT.format(num);\n}\n\nexport function getDigitParts({\n value,\n decimalScale,\n fixedDecimalScale,\n}: GetDigitPartsInput): DigitParts {\n const abs = Math.abs(value);\n let str = toPlainString(abs, decimalScale);\n\n if (!fixedDecimalScale && decimalScale !== undefined) {\n const parts = str.split('.');\n if (parts[1]) {\n const trimmed = parts[1].replace(/0+$/, '');\n str = trimmed ? `${parts[0]}.${trimmed}` : parts[0];\n }\n }\n\n const dotIdx = str.indexOf('.');\n const intStr = dotIdx >= 0 ? str.slice(0, dotIdx) : str;\n const fracStr = dotIdx >= 0 ? str.slice(dotIdx + 1) : '';\n\n return {\n negative: value < 0,\n intDigits: intStr.split(''),\n fracDigits: fracStr ? fracStr.split('') : [],\n hasDecimal: dotIdx >= 0,\n };\n}\n"],"mappings":";;AAaA,MAAM,eAAe,IAAI,KAAK,aAAa,SAAS;CAClD,aAAa;CACb,uBAAuB;CACxB,CAAC;AAEF,SAAS,cAAc,KAAa,cAA+B;AACjE,KAAI,CAAC,OAAO,SAAS,IAAI,CACvB,QAAO;AAGT,KAAI,iBAAiB,KAAA,EACnB,QAAO,IAAI,KAAK,aAAa,SAAS;EACpC,aAAa;EACb,uBAAuB;EACvB,uBAAuB;EACxB,CAAC,CAAC,OAAO,IAAI;CAGhB,MAAM,MAAM,OAAO,IAAI;AACvB,KAAI,CAAC,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,SAAS,IAAI,CAC1C,QAAO;AAGT,QAAO,aAAa,OAAO,IAAI;;AAGjC,SAAgB,cAAc,EAC5B,OACA,cACA,qBACiC;CAEjC,IAAI,MAAM,cADE,KAAK,IAAI,MAAM,EACE,aAAa;AAE1C,KAAI,CAAC,qBAAqB,iBAAiB,KAAA,GAAW;EACpD,MAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,MAAI,MAAM,IAAI;GACZ,MAAM,UAAU,MAAM,GAAG,QAAQ,OAAO,GAAG;AAC3C,SAAM,UAAU,GAAG,MAAM,GAAG,GAAG,YAAY,MAAM;;;CAIrD,MAAM,SAAS,IAAI,QAAQ,IAAI;CAC/B,MAAM,SAAS,UAAU,IAAI,IAAI,MAAM,GAAG,OAAO,GAAG;CACpD,MAAM,UAAU,UAAU,IAAI,IAAI,MAAM,SAAS,EAAE,GAAG;AAEtD,QAAO;EACL,UAAU,QAAQ;EAClB,WAAW,OAAO,MAAM,GAAG;EAC3B,YAAY,UAAU,QAAQ,MAAM,GAAG,GAAG,EAAE;EAC5C,YAAY,UAAU;EACvB"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
//#region packages/@mantine/core/src/components/RollingNumber/get-render-slots.ts
|
|
3
|
-
function padLeft(arr, length) {
|
|
4
|
-
return [...Array(length - arr.length).fill(null), ...arr];
|
|
5
|
-
}
|
|
6
|
-
function padRight(arr, length) {
|
|
7
|
-
return [...arr, ...Array(length - arr.length).fill(null)];
|
|
8
|
-
}
|
|
9
|
-
function getRenderSlots({ current, previous, prefix, suffix, decimalSeparator = ".", thousandSeparator }) {
|
|
10
|
-
const maxIntLen = Math.max(current.intDigits.length, previous.intDigits.length);
|
|
11
|
-
const maxFracLen = Math.max(current.fracDigits.length, previous.fracDigits.length);
|
|
12
|
-
const currIntPadded = padLeft(current.intDigits, maxIntLen);
|
|
13
|
-
const prevIntPadded = padLeft(previous.intDigits, maxIntLen);
|
|
14
|
-
const currFracPadded = padRight(current.fracDigits, maxFracLen);
|
|
15
|
-
const prevFracPadded = padRight(previous.fracDigits, maxFracLen);
|
|
16
|
-
const sep = thousandSeparator ? typeof thousandSeparator === "string" ? thousandSeparator : "," : null;
|
|
17
|
-
const slots = [];
|
|
18
|
-
if (prefix) for (let i = 0; i < prefix.length; i++) slots.push({
|
|
19
|
-
type: "char",
|
|
20
|
-
key: `prefix-${i}`,
|
|
21
|
-
char: prefix[i],
|
|
22
|
-
empty: false
|
|
23
|
-
});
|
|
24
|
-
if (current.negative || previous.negative) slots.push({
|
|
25
|
-
type: "char",
|
|
26
|
-
key: "sign",
|
|
27
|
-
char: "-",
|
|
28
|
-
empty: !current.negative
|
|
29
|
-
});
|
|
30
|
-
for (let i = 0; i < maxIntLen; i++) {
|
|
31
|
-
const posFromRight = maxIntLen - 1 - i;
|
|
32
|
-
const currDigit = currIntPadded[i];
|
|
33
|
-
const prevDigit = prevIntPadded[i];
|
|
34
|
-
const isEmpty = currDigit === null;
|
|
35
|
-
slots.push({
|
|
36
|
-
type: "digit",
|
|
37
|
-
key: `int-${posFromRight}`,
|
|
38
|
-
digit: currDigit ?? "0",
|
|
39
|
-
previousDigit: prevDigit,
|
|
40
|
-
empty: isEmpty
|
|
41
|
-
});
|
|
42
|
-
if (sep && posFromRight > 0 && posFromRight % 3 === 0) slots.push({
|
|
43
|
-
type: "char",
|
|
44
|
-
key: `sep-${posFromRight}`,
|
|
45
|
-
char: sep,
|
|
46
|
-
empty: isEmpty
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
if (current.hasDecimal || previous.hasDecimal) slots.push({
|
|
50
|
-
type: "char",
|
|
51
|
-
key: "dec",
|
|
52
|
-
char: decimalSeparator,
|
|
53
|
-
empty: !current.hasDecimal
|
|
54
|
-
});
|
|
55
|
-
for (let i = 0; i < maxFracLen; i++) {
|
|
56
|
-
const currDigit = currFracPadded[i];
|
|
57
|
-
const prevDigit = prevFracPadded[i];
|
|
58
|
-
const isEmpty = currDigit === null;
|
|
59
|
-
slots.push({
|
|
60
|
-
type: "digit",
|
|
61
|
-
key: `frac-${i}`,
|
|
62
|
-
digit: currDigit ?? "0",
|
|
63
|
-
previousDigit: prevDigit,
|
|
64
|
-
empty: isEmpty
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
if (suffix) for (let i = 0; i < suffix.length; i++) slots.push({
|
|
68
|
-
type: "char",
|
|
69
|
-
key: `suffix-${i}`,
|
|
70
|
-
char: suffix[i],
|
|
71
|
-
empty: false
|
|
72
|
-
});
|
|
73
|
-
return slots;
|
|
74
|
-
}
|
|
75
|
-
//#endregion
|
|
76
|
-
export { getRenderSlots };
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=get-render-slots.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-render-slots.mjs","names":[],"sources":["../../../src/components/RollingNumber/get-render-slots.ts"],"sourcesContent":["import { getDigitParts, type DigitParts } from './get-digit-parts';\n\nexport interface DigitSlot {\n type: 'digit';\n key: string;\n digit: string;\n previousDigit: string | null;\n empty: boolean;\n}\n\nexport interface CharSlot {\n type: 'char';\n key: string;\n char: string;\n empty: boolean;\n}\n\nexport type RenderSlot = DigitSlot | CharSlot;\n\nexport interface GetRenderSlotsInput {\n current: DigitParts;\n previous: DigitParts;\n prefix?: string;\n suffix?: string;\n decimalSeparator?: string;\n thousandSeparator?: string | boolean;\n}\n\nfunction padLeft(arr: string[], length: number): (string | null)[] {\n return [...Array(length - arr.length).fill(null), ...arr];\n}\n\nfunction padRight(arr: string[], length: number): (string | null)[] {\n return [...arr, ...Array(length - arr.length).fill(null)];\n}\n\nexport function getRenderSlots({\n current,\n previous,\n prefix,\n suffix,\n decimalSeparator = '.',\n thousandSeparator,\n}: GetRenderSlotsInput): RenderSlot[] {\n const maxIntLen = Math.max(current.intDigits.length, previous.intDigits.length);\n const maxFracLen = Math.max(current.fracDigits.length, previous.fracDigits.length);\n\n const currIntPadded = padLeft(current.intDigits, maxIntLen);\n const prevIntPadded = padLeft(previous.intDigits, maxIntLen);\n const currFracPadded = padRight(current.fracDigits, maxFracLen);\n const prevFracPadded = padRight(previous.fracDigits, maxFracLen);\n\n const sep = thousandSeparator\n ? typeof thousandSeparator === 'string'\n ? thousandSeparator\n : ','\n : null;\n\n const slots: RenderSlot[] = [];\n\n if (prefix) {\n for (let i = 0; i < prefix.length; i++) {\n slots.push({ type: 'char', key: `prefix-${i}`, char: prefix[i], empty: false });\n }\n }\n\n if (current.negative || previous.negative) {\n slots.push({ type: 'char', key: 'sign', char: '-', empty: !current.negative });\n }\n\n for (let i = 0; i < maxIntLen; i++) {\n const posFromRight = maxIntLen - 1 - i;\n const currDigit = currIntPadded[i];\n const prevDigit = prevIntPadded[i];\n const isEmpty = currDigit === null;\n\n slots.push({\n type: 'digit',\n key: `int-${posFromRight}`,\n digit: currDigit ?? '0',\n previousDigit: prevDigit,\n empty: isEmpty,\n });\n\n if (sep && posFromRight > 0 && posFromRight % 3 === 0) {\n slots.push({ type: 'char', key: `sep-${posFromRight}`, char: sep, empty: isEmpty });\n }\n }\n\n if (current.hasDecimal || previous.hasDecimal) {\n slots.push({\n type: 'char',\n key: 'dec',\n char: decimalSeparator,\n empty: !current.hasDecimal,\n });\n }\n\n for (let i = 0; i < maxFracLen; i++) {\n const currDigit = currFracPadded[i];\n const prevDigit = prevFracPadded[i];\n const isEmpty = currDigit === null;\n\n slots.push({\n type: 'digit',\n key: `frac-${i}`,\n digit: currDigit ?? '0',\n previousDigit: prevDigit,\n empty: isEmpty,\n });\n }\n\n if (suffix) {\n for (let i = 0; i < suffix.length; i++) {\n slots.push({ type: 'char', key: `suffix-${i}`, char: suffix[i], empty: false });\n }\n }\n\n return slots;\n}\n\nexport interface GetRenderSlotsFromValuesInput {\n value: number;\n previousValue: number;\n prefix?: string;\n suffix?: string;\n decimalSeparator?: string;\n thousandSeparator?: string | boolean;\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n}\n\nexport function getRenderSlotsFromValues({\n value,\n previousValue,\n prefix,\n suffix,\n decimalSeparator,\n thousandSeparator,\n decimalScale,\n fixedDecimalScale,\n}: GetRenderSlotsFromValuesInput): RenderSlot[] {\n const current = getDigitParts({ value, decimalScale, fixedDecimalScale });\n const prev = getDigitParts({ value: previousValue, decimalScale, fixedDecimalScale });\n\n return getRenderSlots({\n current,\n previous: prev,\n prefix,\n suffix,\n decimalSeparator,\n thousandSeparator,\n });\n}\n"],"mappings":";;AA4BA,SAAS,QAAQ,KAAe,QAAmC;AACjE,QAAO,CAAC,GAAG,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE,GAAG,IAAI;;AAG3D,SAAS,SAAS,KAAe,QAAmC;AAClE,QAAO,CAAC,GAAG,KAAK,GAAG,MAAM,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC;;AAG3D,SAAgB,eAAe,EAC7B,SACA,UACA,QACA,QACA,mBAAmB,KACnB,qBACoC;CACpC,MAAM,YAAY,KAAK,IAAI,QAAQ,UAAU,QAAQ,SAAS,UAAU,OAAO;CAC/E,MAAM,aAAa,KAAK,IAAI,QAAQ,WAAW,QAAQ,SAAS,WAAW,OAAO;CAElF,MAAM,gBAAgB,QAAQ,QAAQ,WAAW,UAAU;CAC3D,MAAM,gBAAgB,QAAQ,SAAS,WAAW,UAAU;CAC5D,MAAM,iBAAiB,SAAS,QAAQ,YAAY,WAAW;CAC/D,MAAM,iBAAiB,SAAS,SAAS,YAAY,WAAW;CAEhE,MAAM,MAAM,oBACR,OAAO,sBAAsB,WAC3B,oBACA,MACF;CAEJ,MAAM,QAAsB,EAAE;AAE9B,KAAI,OACF,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,OAAM,KAAK;EAAE,MAAM;EAAQ,KAAK,UAAU;EAAK,MAAM,OAAO;EAAI,OAAO;EAAO,CAAC;AAInF,KAAI,QAAQ,YAAY,SAAS,SAC/B,OAAM,KAAK;EAAE,MAAM;EAAQ,KAAK;EAAQ,MAAM;EAAK,OAAO,CAAC,QAAQ;EAAU,CAAC;AAGhF,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;EAClC,MAAM,eAAe,YAAY,IAAI;EACrC,MAAM,YAAY,cAAc;EAChC,MAAM,YAAY,cAAc;EAChC,MAAM,UAAU,cAAc;AAE9B,QAAM,KAAK;GACT,MAAM;GACN,KAAK,OAAO;GACZ,OAAO,aAAa;GACpB,eAAe;GACf,OAAO;GACR,CAAC;AAEF,MAAI,OAAO,eAAe,KAAK,eAAe,MAAM,EAClD,OAAM,KAAK;GAAE,MAAM;GAAQ,KAAK,OAAO;GAAgB,MAAM;GAAK,OAAO;GAAS,CAAC;;AAIvF,KAAI,QAAQ,cAAc,SAAS,WACjC,OAAM,KAAK;EACT,MAAM;EACN,KAAK;EACL,MAAM;EACN,OAAO,CAAC,QAAQ;EACjB,CAAC;AAGJ,MAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;EACnC,MAAM,YAAY,eAAe;EACjC,MAAM,YAAY,eAAe;EACjC,MAAM,UAAU,cAAc;AAE9B,QAAM,KAAK;GACT,MAAM;GACN,KAAK,QAAQ;GACb,OAAO,aAAa;GACpB,eAAe;GACf,OAAO;GACR,CAAC;;AAGJ,KAAI,OACF,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,OAAM,KAAK;EAAE,MAAM;EAAQ,KAAK,UAAU;EAAK,MAAM,OAAO;EAAI,OAAO;EAAO,CAAC;AAInF,QAAO"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { findElementAncestor } from "../../core/utils/find-element-ancestor/find-element-ancestor.mjs";
|
|
3
|
-
import Tree_module_default from "./Tree.module.mjs";
|
|
4
|
-
import { useRef } from "react";
|
|
5
|
-
import { jsx } from "react/jsx-runtime";
|
|
6
|
-
//#region packages/@mantine/core/src/components/Tree/FlatTreeNode.tsx
|
|
7
|
-
function FlatTreeNode({ node, level, parent, hasChildren, expanded, tree, expandOnClick = true, selectOnClick, expandOnSpace = true, checkOnSpace, renderNode, style, tabIndex = -1 }) {
|
|
8
|
-
const ref = useRef(null);
|
|
9
|
-
const isLoading = tree.isNodeLoading(node.value);
|
|
10
|
-
const loadError = tree.getNodeLoadError(node.value);
|
|
11
|
-
const selected = tree.selectedState.includes(node.value);
|
|
12
|
-
const handleClick = (event) => {
|
|
13
|
-
event.stopPropagation();
|
|
14
|
-
if (expandOnClick && hasChildren) tree.toggleExpanded(node.value);
|
|
15
|
-
if (selectOnClick) tree.select(node.value);
|
|
16
|
-
ref.current?.focus();
|
|
17
|
-
};
|
|
18
|
-
const handleKeyDown = (event) => {
|
|
19
|
-
if (event.nativeEvent.code === "ArrowRight") {
|
|
20
|
-
event.stopPropagation();
|
|
21
|
-
event.preventDefault();
|
|
22
|
-
if (expanded && hasChildren) {
|
|
23
|
-
const root = findElementAncestor(event.currentTarget, "[data-tree-root]");
|
|
24
|
-
const nodes = root ? Array.from(root.querySelectorAll("[role=treeitem]")).filter((treeNode) => treeNode.style.display !== "none") : [];
|
|
25
|
-
const index = nodes.indexOf(event.currentTarget);
|
|
26
|
-
if (index !== -1) nodes[index + 1]?.focus();
|
|
27
|
-
} else if (hasChildren) tree.expand(node.value);
|
|
28
|
-
}
|
|
29
|
-
if (event.nativeEvent.code === "ArrowLeft") {
|
|
30
|
-
event.stopPropagation();
|
|
31
|
-
event.preventDefault();
|
|
32
|
-
if (expanded && hasChildren) tree.collapse(node.value);
|
|
33
|
-
else if (parent) (findElementAncestor(event.currentTarget, "[data-tree-root]")?.querySelector(`[role=treeitem][data-value="${CSS.escape(parent)}"]`))?.focus();
|
|
34
|
-
}
|
|
35
|
-
if (event.nativeEvent.code === "ArrowDown" || event.nativeEvent.code === "ArrowUp") {
|
|
36
|
-
const root = findElementAncestor(event.currentTarget, "[data-tree-root]");
|
|
37
|
-
if (!root) return;
|
|
38
|
-
event.stopPropagation();
|
|
39
|
-
event.preventDefault();
|
|
40
|
-
const nodes = Array.from(root.querySelectorAll("[role=treeitem]")).filter((treeNode) => treeNode.style.display !== "none");
|
|
41
|
-
const index = nodes.indexOf(event.currentTarget);
|
|
42
|
-
if (index === -1) return;
|
|
43
|
-
nodes[event.nativeEvent.code === "ArrowDown" ? index + 1 : index - 1]?.focus();
|
|
44
|
-
}
|
|
45
|
-
if (event.nativeEvent.code === "Space") {
|
|
46
|
-
if (expandOnSpace) {
|
|
47
|
-
event.stopPropagation();
|
|
48
|
-
event.preventDefault();
|
|
49
|
-
tree.toggleExpanded(node.value);
|
|
50
|
-
}
|
|
51
|
-
if (checkOnSpace) {
|
|
52
|
-
event.stopPropagation();
|
|
53
|
-
event.preventDefault();
|
|
54
|
-
if (tree.isNodeChecked(node.value)) tree.uncheckNode(node.value);
|
|
55
|
-
else tree.checkNode(node.value);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const elementProps = {
|
|
60
|
-
className: Tree_module_default.label,
|
|
61
|
-
style: {},
|
|
62
|
-
onClick: handleClick,
|
|
63
|
-
"data-selected": selected || void 0,
|
|
64
|
-
"data-value": node.value
|
|
65
|
-
};
|
|
66
|
-
return /* @__PURE__ */ jsx("div", {
|
|
67
|
-
ref,
|
|
68
|
-
className: Tree_module_default.node,
|
|
69
|
-
style: {
|
|
70
|
-
"--label-offset": `calc(var(--level-offset, var(--mantine-spacing-lg)) * ${level - 1})`,
|
|
71
|
-
...style
|
|
72
|
-
},
|
|
73
|
-
role: "treeitem",
|
|
74
|
-
"aria-selected": selected,
|
|
75
|
-
"aria-expanded": hasChildren ? expanded : void 0,
|
|
76
|
-
"data-value": node.value,
|
|
77
|
-
"data-selected": selected || void 0,
|
|
78
|
-
"data-level": level,
|
|
79
|
-
tabIndex,
|
|
80
|
-
onKeyDown: handleKeyDown,
|
|
81
|
-
children: typeof renderNode === "function" ? renderNode({
|
|
82
|
-
node,
|
|
83
|
-
level,
|
|
84
|
-
selected,
|
|
85
|
-
tree,
|
|
86
|
-
expanded,
|
|
87
|
-
hasChildren,
|
|
88
|
-
isLoading,
|
|
89
|
-
loadError,
|
|
90
|
-
elementProps
|
|
91
|
-
}) : /* @__PURE__ */ jsx("div", {
|
|
92
|
-
...elementProps,
|
|
93
|
-
children: node.label
|
|
94
|
-
})
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
FlatTreeNode.displayName = "@mantine/core/FlatTreeNode";
|
|
98
|
-
//#endregion
|
|
99
|
-
export { FlatTreeNode };
|
|
100
|
-
|
|
101
|
-
//# sourceMappingURL=FlatTreeNode.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FlatTreeNode.mjs","names":["classes"],"sources":["../../../src/components/Tree/FlatTreeNode.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { findElementAncestor } from '../../core';\nimport type { RenderNode, TreeNodeData } from './Tree';\nimport type { TreeController } from './use-tree';\nimport classes from './Tree.module.css';\n\nexport interface FlatTreeNodeProps {\n /** Node data from tree data */\n node: TreeNodeData;\n\n /** Nesting level of the node, starts at 1 */\n level: number;\n\n /** Value of the parent node, `null` for root nodes */\n parent: string | null;\n\n /** Whether the node has children */\n hasChildren: boolean;\n\n /** Whether the node is expanded */\n expanded: boolean;\n\n /** Tree controller instance, return value of `useTree` hook */\n tree: TreeController;\n\n /** If set, tree node with children is expanded on click @default true */\n expandOnClick?: boolean;\n\n /** If set, tree node is selected on click @default false */\n selectOnClick?: boolean;\n\n /** If set, tree node with children is expanded on space key press @default true */\n expandOnSpace?: boolean;\n\n /** If set, tree node is checked on space key press @default false */\n checkOnSpace?: boolean;\n\n /** A function to render tree node label */\n renderNode?: RenderNode;\n\n /** Style to apply to the root element, used for virtualizer positioning */\n style?: React.CSSProperties;\n\n /** Tab index for the node */\n tabIndex?: number;\n}\n\nexport function FlatTreeNode({\n node,\n level,\n parent,\n hasChildren,\n expanded,\n tree,\n expandOnClick = true,\n selectOnClick,\n expandOnSpace = true,\n checkOnSpace,\n renderNode,\n style,\n tabIndex = -1,\n}: FlatTreeNodeProps) {\n const ref = useRef<HTMLDivElement>(null);\n const isLoading = tree.isNodeLoading(node.value);\n const loadError = tree.getNodeLoadError(node.value);\n const selected = tree.selectedState.includes(node.value);\n\n const handleClick = (event: React.MouseEvent) => {\n event.stopPropagation();\n\n if (expandOnClick && hasChildren) {\n tree.toggleExpanded(node.value);\n }\n\n if (selectOnClick) {\n tree.select(node.value);\n }\n\n ref.current?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.nativeEvent.code === 'ArrowRight') {\n event.stopPropagation();\n event.preventDefault();\n\n if (expanded && hasChildren) {\n const root = findElementAncestor(event.currentTarget as HTMLElement, '[data-tree-root]');\n const nodes = root\n ? Array.from(root.querySelectorAll<HTMLElement>('[role=treeitem]')).filter(\n (treeNode) => treeNode.style.display !== 'none'\n )\n : [];\n const index = nodes.indexOf(event.currentTarget as HTMLElement);\n if (index !== -1) {\n nodes[index + 1]?.focus();\n }\n } else if (hasChildren) {\n tree.expand(node.value);\n }\n }\n\n if (event.nativeEvent.code === 'ArrowLeft') {\n event.stopPropagation();\n event.preventDefault();\n\n if (expanded && hasChildren) {\n tree.collapse(node.value);\n } else if (parent) {\n const root = findElementAncestor(event.currentTarget as HTMLElement, '[data-tree-root]');\n const parentElement = root?.querySelector<HTMLElement>(\n `[role=treeitem][data-value=\"${CSS.escape(parent)}\"]`\n );\n parentElement?.focus();\n }\n }\n\n if (event.nativeEvent.code === 'ArrowDown' || event.nativeEvent.code === 'ArrowUp') {\n const root = findElementAncestor(event.currentTarget as HTMLElement, '[data-tree-root]');\n\n if (!root) {\n return;\n }\n\n event.stopPropagation();\n event.preventDefault();\n const nodes = Array.from(root.querySelectorAll<HTMLElement>('[role=treeitem]')).filter(\n (treeNode) => treeNode.style.display !== 'none'\n );\n const index = nodes.indexOf(event.currentTarget as HTMLElement);\n\n if (index === -1) {\n return;\n }\n\n const nextIndex = event.nativeEvent.code === 'ArrowDown' ? index + 1 : index - 1;\n nodes[nextIndex]?.focus();\n }\n\n if (event.nativeEvent.code === 'Space') {\n if (expandOnSpace) {\n event.stopPropagation();\n event.preventDefault();\n tree.toggleExpanded(node.value);\n }\n\n if (checkOnSpace) {\n event.stopPropagation();\n event.preventDefault();\n if (tree.isNodeChecked(node.value)) {\n tree.uncheckNode(node.value);\n } else {\n tree.checkNode(node.value);\n }\n }\n }\n };\n\n const elementProps = {\n className: classes.label,\n style: {} as React.CSSProperties,\n onClick: handleClick,\n 'data-selected': selected || undefined,\n 'data-value': node.value,\n };\n\n return (\n <div\n ref={ref}\n className={classes.node}\n style={{\n ...({\n '--label-offset': `calc(var(--level-offset, var(--mantine-spacing-lg)) * ${level - 1})`,\n } as React.CSSProperties),\n ...style,\n }}\n role=\"treeitem\"\n aria-selected={selected}\n aria-expanded={hasChildren ? expanded : undefined}\n data-value={node.value}\n data-selected={selected || undefined}\n data-level={level}\n tabIndex={tabIndex}\n onKeyDown={handleKeyDown}\n >\n {typeof renderNode === 'function' ? (\n renderNode({\n node,\n level,\n selected,\n tree,\n expanded,\n hasChildren,\n isLoading,\n loadError,\n elementProps,\n })\n ) : (\n <div {...elementProps}>{node.label}</div>\n )}\n </div>\n );\n}\n\nFlatTreeNode.displayName = '@mantine/core/FlatTreeNode';\n"],"mappings":";;;;;;AA+CA,SAAgB,aAAa,EAC3B,MACA,OACA,QACA,aACA,UACA,MACA,gBAAgB,MAChB,eACA,gBAAgB,MAChB,cACA,YACA,OACA,WAAW,MACS;CACpB,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,YAAY,KAAK,cAAc,KAAK,MAAM;CAChD,MAAM,YAAY,KAAK,iBAAiB,KAAK,MAAM;CACnD,MAAM,WAAW,KAAK,cAAc,SAAS,KAAK,MAAM;CAExD,MAAM,eAAe,UAA4B;AAC/C,QAAM,iBAAiB;AAEvB,MAAI,iBAAiB,YACnB,MAAK,eAAe,KAAK,MAAM;AAGjC,MAAI,cACF,MAAK,OAAO,KAAK,MAAM;AAGzB,MAAI,SAAS,OAAO;;CAGtB,MAAM,iBAAiB,UAA+B;AACpD,MAAI,MAAM,YAAY,SAAS,cAAc;AAC3C,SAAM,iBAAiB;AACvB,SAAM,gBAAgB;AAEtB,OAAI,YAAY,aAAa;IAC3B,MAAM,OAAO,oBAAoB,MAAM,eAA8B,mBAAmB;IACxF,MAAM,QAAQ,OACV,MAAM,KAAK,KAAK,iBAA8B,kBAAkB,CAAC,CAAC,QAC/D,aAAa,SAAS,MAAM,YAAY,OAC1C,GACD,EAAE;IACN,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAA6B;AAC/D,QAAI,UAAU,GACZ,OAAM,QAAQ,IAAI,OAAO;cAElB,YACT,MAAK,OAAO,KAAK,MAAM;;AAI3B,MAAI,MAAM,YAAY,SAAS,aAAa;AAC1C,SAAM,iBAAiB;AACvB,SAAM,gBAAgB;AAEtB,OAAI,YAAY,YACd,MAAK,SAAS,KAAK,MAAM;YAChB,OAKT,EAJa,oBAAoB,MAAM,eAA8B,mBAAmB,EAC5D,cAC1B,+BAA+B,IAAI,OAAO,OAAO,CAAC,IACnD,GACc,OAAO;;AAI1B,MAAI,MAAM,YAAY,SAAS,eAAe,MAAM,YAAY,SAAS,WAAW;GAClF,MAAM,OAAO,oBAAoB,MAAM,eAA8B,mBAAmB;AAExF,OAAI,CAAC,KACH;AAGF,SAAM,iBAAiB;AACvB,SAAM,gBAAgB;GACtB,MAAM,QAAQ,MAAM,KAAK,KAAK,iBAA8B,kBAAkB,CAAC,CAAC,QAC7E,aAAa,SAAS,MAAM,YAAY,OAC1C;GACD,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAA6B;AAE/D,OAAI,UAAU,GACZ;AAIF,SADkB,MAAM,YAAY,SAAS,cAAc,QAAQ,IAAI,QAAQ,IAC7D,OAAO;;AAG3B,MAAI,MAAM,YAAY,SAAS,SAAS;AACtC,OAAI,eAAe;AACjB,UAAM,iBAAiB;AACvB,UAAM,gBAAgB;AACtB,SAAK,eAAe,KAAK,MAAM;;AAGjC,OAAI,cAAc;AAChB,UAAM,iBAAiB;AACvB,UAAM,gBAAgB;AACtB,QAAI,KAAK,cAAc,KAAK,MAAM,CAChC,MAAK,YAAY,KAAK,MAAM;QAE5B,MAAK,UAAU,KAAK,MAAM;;;;CAMlC,MAAM,eAAe;EACnB,WAAWA,oBAAQ;EACnB,OAAO,EAAE;EACT,SAAS;EACT,iBAAiB,YAAY,KAAA;EAC7B,cAAc,KAAK;EACpB;AAED,QACE,oBAAC,OAAD;EACO;EACL,WAAWA,oBAAQ;EACnB,OAAO;GAEH,kBAAkB,yDAAyD,QAAQ,EAAE;GAEvF,GAAG;GACJ;EACD,MAAK;EACL,iBAAe;EACf,iBAAe,cAAc,WAAW,KAAA;EACxC,cAAY,KAAK;EACjB,iBAAe,YAAY,KAAA;EAC3B,cAAY;EACF;EACV,WAAW;YAEV,OAAO,eAAe,aACrB,WAAW;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,CAAC,GAEF,oBAAC,OAAD;GAAK,GAAI;aAAe,KAAK;GAAY,CAAA;EAEvC,CAAA;;AAIV,aAAa,cAAc"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
//#region packages/@mantine/core/src/components/Tree/filter-tree-data/filter-tree-data.ts
|
|
3
|
-
function defaultTreeNodeFilter(query, node) {
|
|
4
|
-
return (typeof node.label === "string" ? node.label : node.value).toLowerCase().includes(query.toLowerCase().trim());
|
|
5
|
-
}
|
|
6
|
-
function filterTreeData(data, query, filter = defaultTreeNodeFilter) {
|
|
7
|
-
if (!query.trim()) return data;
|
|
8
|
-
const result = [];
|
|
9
|
-
for (const node of data) {
|
|
10
|
-
const nodeMatches = filter(query, node);
|
|
11
|
-
const filteredChildren = Array.isArray(node.children) && node.children.length > 0 ? filterTreeData(node.children, query, filter) : [];
|
|
12
|
-
if (nodeMatches || filteredChildren.length > 0) result.push(filteredChildren.length > 0 ? {
|
|
13
|
-
...node,
|
|
14
|
-
children: filteredChildren
|
|
15
|
-
} : { ...node });
|
|
16
|
-
}
|
|
17
|
-
return result;
|
|
18
|
-
}
|
|
19
|
-
//#endregion
|
|
20
|
-
export { defaultTreeNodeFilter, filterTreeData };
|
|
21
|
-
|
|
22
|
-
//# sourceMappingURL=filter-tree-data.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-tree-data.mjs","names":[],"sources":["../../../../src/components/Tree/filter-tree-data/filter-tree-data.ts"],"sourcesContent":["import type { TreeNodeData } from '../Tree';\n\nexport type TreeNodeFilter = (query: string, node: TreeNodeData) => boolean;\n\nexport function defaultTreeNodeFilter(query: string, node: TreeNodeData): boolean {\n const label = typeof node.label === 'string' ? node.label : node.value;\n return label.toLowerCase().includes(query.toLowerCase().trim());\n}\n\nexport function filterTreeData(\n data: TreeNodeData[],\n query: string,\n filter: TreeNodeFilter = defaultTreeNodeFilter\n): TreeNodeData[] {\n if (!query.trim()) {\n return data;\n }\n\n const result: TreeNodeData[] = [];\n\n for (const node of data) {\n const nodeMatches = filter(query, node);\n const filteredChildren =\n Array.isArray(node.children) && node.children.length > 0\n ? filterTreeData(node.children, query, filter)\n : [];\n\n if (nodeMatches || filteredChildren.length > 0) {\n result.push(\n filteredChildren.length > 0 ? { ...node, children: filteredChildren } : { ...node }\n );\n }\n }\n\n return result;\n}\n"],"mappings":";;AAIA,SAAgB,sBAAsB,OAAe,MAA6B;AAEhF,SADc,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK,OACpD,aAAa,CAAC,SAAS,MAAM,aAAa,CAAC,MAAM,CAAC;;AAGjE,SAAgB,eACd,MACA,OACA,SAAyB,uBACT;AAChB,KAAI,CAAC,MAAM,MAAM,CACf,QAAO;CAGT,MAAM,SAAyB,EAAE;AAEjC,MAAK,MAAM,QAAQ,MAAM;EACvB,MAAM,cAAc,OAAO,OAAO,KAAK;EACvC,MAAM,mBACJ,MAAM,QAAQ,KAAK,SAAS,IAAI,KAAK,SAAS,SAAS,IACnD,eAAe,KAAK,UAAU,OAAO,OAAO,GAC5C,EAAE;AAER,MAAI,eAAe,iBAAiB,SAAS,EAC3C,QAAO,KACL,iBAAiB,SAAS,IAAI;GAAE,GAAG;GAAM,UAAU;GAAkB,GAAG,EAAE,GAAG,MAAM,CACpF;;AAIL,QAAO"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
//#region packages/@mantine/core/src/components/Tree/flatten-tree-data/flatten-tree-data.ts
|
|
3
|
-
function flattenTreeDataTo(acc, data, expandedState, parent, level) {
|
|
4
|
-
for (let i = 0; i < data.length; i++) {
|
|
5
|
-
const node = data[i];
|
|
6
|
-
const hasLoadedChildren = Array.isArray(node.children);
|
|
7
|
-
const hasAsyncChildren = !!node.hasChildren && !hasLoadedChildren;
|
|
8
|
-
const hasChildren = hasLoadedChildren || hasAsyncChildren;
|
|
9
|
-
const expanded = expandedState[node.value] || false;
|
|
10
|
-
acc.push({
|
|
11
|
-
node,
|
|
12
|
-
level,
|
|
13
|
-
parent,
|
|
14
|
-
hasChildren,
|
|
15
|
-
expanded
|
|
16
|
-
});
|
|
17
|
-
if (expanded && hasLoadedChildren) flattenTreeDataTo(acc, node.children, expandedState, node.value, level + 1);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
function flattenTreeData(data, expandedState) {
|
|
21
|
-
const result = [];
|
|
22
|
-
flattenTreeDataTo(result, data, expandedState, null, 1);
|
|
23
|
-
return result;
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { flattenTreeData };
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=flatten-tree-data.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flatten-tree-data.mjs","names":[],"sources":["../../../../src/components/Tree/flatten-tree-data/flatten-tree-data.ts"],"sourcesContent":["import type { TreeNodeData } from '../Tree';\nimport type { TreeExpandedState } from '../use-tree';\n\nexport interface FlattenedTreeNodeData {\n /** Node data from tree data */\n node: TreeNodeData;\n\n /** Nesting level of the node, starts at 1 */\n level: number;\n\n /** Value of the parent node, `null` for root nodes */\n parent: string | null;\n\n /** Whether the node has children */\n hasChildren: boolean;\n\n /** Whether the node is expanded */\n expanded: boolean;\n}\n\nfunction flattenTreeDataTo(\n acc: FlattenedTreeNodeData[],\n data: TreeNodeData[],\n expandedState: TreeExpandedState,\n parent: string | null,\n level: number\n): void {\n for (let i = 0; i < data.length; i++) {\n const node = data[i];\n const hasLoadedChildren = Array.isArray(node.children);\n const hasAsyncChildren = !!node.hasChildren && !hasLoadedChildren;\n const hasChildren = hasLoadedChildren || hasAsyncChildren;\n const expanded = expandedState[node.value] || false;\n\n acc.push({ node, level, parent, hasChildren, expanded });\n\n if (expanded && hasLoadedChildren) {\n flattenTreeDataTo(acc, node.children!, expandedState, node.value, level + 1);\n }\n }\n}\n\nexport function flattenTreeData(\n data: TreeNodeData[],\n expandedState: TreeExpandedState\n): FlattenedTreeNodeData[] {\n const result: FlattenedTreeNodeData[] = [];\n flattenTreeDataTo(result, data, expandedState, null, 1);\n return result;\n}\n"],"mappings":";;AAoBA,SAAS,kBACP,KACA,MACA,eACA,QACA,OACM;AACN,MAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,OAAO,KAAK;EAClB,MAAM,oBAAoB,MAAM,QAAQ,KAAK,SAAS;EACtD,MAAM,mBAAmB,CAAC,CAAC,KAAK,eAAe,CAAC;EAChD,MAAM,cAAc,qBAAqB;EACzC,MAAM,WAAW,cAAc,KAAK,UAAU;AAE9C,MAAI,KAAK;GAAE;GAAM;GAAO;GAAQ;GAAa;GAAU,CAAC;AAExD,MAAI,YAAY,kBACd,mBAAkB,KAAK,KAAK,UAAW,eAAe,KAAK,OAAO,QAAQ,EAAE;;;AAKlF,SAAgB,gBACd,MACA,eACyB;CACzB,MAAM,SAAkC,EAAE;AAC1C,mBAAkB,QAAQ,MAAM,eAAe,MAAM,EAAE;AACvD,QAAO"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
//#region packages/@mantine/core/src/components/Tree/merge-async-children/merge-async-children.ts
|
|
3
|
-
function mergeAsyncChildren(data, parentValue, children) {
|
|
4
|
-
let changed = false;
|
|
5
|
-
const result = data.map((node) => {
|
|
6
|
-
if (node.value === parentValue) {
|
|
7
|
-
changed = true;
|
|
8
|
-
const merged = {
|
|
9
|
-
...node,
|
|
10
|
-
children
|
|
11
|
-
};
|
|
12
|
-
delete merged.hasChildren;
|
|
13
|
-
return merged;
|
|
14
|
-
}
|
|
15
|
-
if (Array.isArray(node.children)) {
|
|
16
|
-
const updatedChildren = mergeAsyncChildren(node.children, parentValue, children);
|
|
17
|
-
if (updatedChildren !== node.children) {
|
|
18
|
-
changed = true;
|
|
19
|
-
return {
|
|
20
|
-
...node,
|
|
21
|
-
children: updatedChildren
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
return node;
|
|
26
|
-
});
|
|
27
|
-
return changed ? result : data;
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { mergeAsyncChildren };
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=merge-async-children.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"merge-async-children.mjs","names":[],"sources":["../../../../src/components/Tree/merge-async-children/merge-async-children.ts"],"sourcesContent":["import type { TreeNodeData } from '../Tree';\n\nexport function mergeAsyncChildren(\n data: TreeNodeData[],\n parentValue: string,\n children: TreeNodeData[]\n): TreeNodeData[] {\n let changed = false;\n\n const result = data.map((node) => {\n if (node.value === parentValue) {\n changed = true;\n const merged: TreeNodeData = { ...node, children };\n delete merged.hasChildren;\n return merged;\n }\n\n if (Array.isArray(node.children)) {\n const updatedChildren = mergeAsyncChildren(node.children, parentValue, children);\n if (updatedChildren !== node.children) {\n changed = true;\n return { ...node, children: updatedChildren };\n }\n }\n\n return node;\n });\n\n return changed ? result : data;\n}\n"],"mappings":";;AAEA,SAAgB,mBACd,MACA,aACA,UACgB;CAChB,IAAI,UAAU;CAEd,MAAM,SAAS,KAAK,KAAK,SAAS;AAChC,MAAI,KAAK,UAAU,aAAa;AAC9B,aAAU;GACV,MAAM,SAAuB;IAAE,GAAG;IAAM;IAAU;AAClD,UAAO,OAAO;AACd,UAAO;;AAGT,MAAI,MAAM,QAAQ,KAAK,SAAS,EAAE;GAChC,MAAM,kBAAkB,mBAAmB,KAAK,UAAU,aAAa,SAAS;AAChF,OAAI,oBAAoB,KAAK,UAAU;AACrC,cAAU;AACV,WAAO;KAAE,GAAG;KAAM,UAAU;KAAiB;;;AAIjD,SAAO;GACP;AAEF,QAAO,UAAU,SAAS"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { findTreeNode } from "../get-children-nodes-values/get-children-nodes-values.mjs";
|
|
3
|
-
//#region packages/@mantine/core/src/components/Tree/move-tree-node/move-tree-node.ts
|
|
4
|
-
function isDescendant(data, ancestorValue, value) {
|
|
5
|
-
const ancestor = findTreeNode(ancestorValue, data);
|
|
6
|
-
if (!ancestor || !ancestor.children) return false;
|
|
7
|
-
function check(nodes) {
|
|
8
|
-
for (const node of nodes) {
|
|
9
|
-
if (node.value === value) return true;
|
|
10
|
-
if (node.children && check(node.children)) return true;
|
|
11
|
-
}
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
return check(ancestor.children);
|
|
15
|
-
}
|
|
16
|
-
function removeNode(data, value) {
|
|
17
|
-
let removed = null;
|
|
18
|
-
return {
|
|
19
|
-
data: data.reduce((acc, node) => {
|
|
20
|
-
if (node.value === value) {
|
|
21
|
-
removed = { ...node };
|
|
22
|
-
return acc;
|
|
23
|
-
}
|
|
24
|
-
if (node.children) {
|
|
25
|
-
const result = removeNode(node.children, value);
|
|
26
|
-
if (result.removed) {
|
|
27
|
-
removed = result.removed;
|
|
28
|
-
acc.push({
|
|
29
|
-
...node,
|
|
30
|
-
children: result.data
|
|
31
|
-
});
|
|
32
|
-
} else acc.push(node);
|
|
33
|
-
} else acc.push(node);
|
|
34
|
-
return acc;
|
|
35
|
-
}, []),
|
|
36
|
-
removed
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
function insertNode(data, node, targetValue, position) {
|
|
40
|
-
if (position === "inside") return data.map((item) => {
|
|
41
|
-
if (item.value === targetValue) return {
|
|
42
|
-
...item,
|
|
43
|
-
children: [...item.children || [], node]
|
|
44
|
-
};
|
|
45
|
-
if (item.children) return {
|
|
46
|
-
...item,
|
|
47
|
-
children: insertNode(item.children, node, targetValue, position)
|
|
48
|
-
};
|
|
49
|
-
return item;
|
|
50
|
-
});
|
|
51
|
-
const targetIndex = data.findIndex((item) => item.value === targetValue);
|
|
52
|
-
if (targetIndex !== -1) {
|
|
53
|
-
const result = [...data];
|
|
54
|
-
const insertIndex = position === "before" ? targetIndex : targetIndex + 1;
|
|
55
|
-
result.splice(insertIndex, 0, node);
|
|
56
|
-
return result;
|
|
57
|
-
}
|
|
58
|
-
return data.map((item) => {
|
|
59
|
-
if (item.children) return {
|
|
60
|
-
...item,
|
|
61
|
-
children: insertNode(item.children, node, targetValue, position)
|
|
62
|
-
};
|
|
63
|
-
return item;
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
function moveTreeNode(data, payload) {
|
|
67
|
-
const { draggedNode, targetNode, position } = payload;
|
|
68
|
-
if (draggedNode === targetNode) return data;
|
|
69
|
-
if (!findTreeNode(targetNode, data)) return data;
|
|
70
|
-
if (isDescendant(data, draggedNode, targetNode)) return data;
|
|
71
|
-
const { data: dataWithout, removed } = removeNode(data, draggedNode);
|
|
72
|
-
if (!removed) return data;
|
|
73
|
-
return insertNode(dataWithout, removed, targetNode, position);
|
|
74
|
-
}
|
|
75
|
-
//#endregion
|
|
76
|
-
export { moveTreeNode };
|
|
77
|
-
|
|
78
|
-
//# sourceMappingURL=move-tree-node.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"move-tree-node.mjs","names":[],"sources":["../../../../src/components/Tree/move-tree-node/move-tree-node.ts"],"sourcesContent":["import { findTreeNode } from '../get-children-nodes-values/get-children-nodes-values';\nimport type { TreeNodeData } from '../Tree';\n\nexport type TreeDragDropPosition = 'before' | 'after' | 'inside';\n\nexport interface TreeDragDropPayload {\n /** Value of the dragged node */\n draggedNode: string;\n\n /** Value of the target node */\n targetNode: string;\n\n /** Position relative to the target node */\n position: TreeDragDropPosition;\n}\n\nfunction isDescendant(data: TreeNodeData[], ancestorValue: string, value: string): boolean {\n const ancestor = findTreeNode(ancestorValue, data);\n if (!ancestor || !ancestor.children) {\n return false;\n }\n\n function check(nodes: TreeNodeData[]): boolean {\n for (const node of nodes) {\n if (node.value === value) {\n return true;\n }\n\n if (node.children && check(node.children)) {\n return true;\n }\n }\n\n return false;\n }\n\n return check(ancestor.children);\n}\n\nfunction removeNode(\n data: TreeNodeData[],\n value: string\n): { data: TreeNodeData[]; removed: TreeNodeData | null } {\n let removed: TreeNodeData | null = null;\n\n const newData = data.reduce<TreeNodeData[]>((acc, node) => {\n if (node.value === value) {\n removed = { ...node };\n return acc;\n }\n\n if (node.children) {\n const result = removeNode(node.children, value);\n if (result.removed) {\n removed = result.removed;\n acc.push({ ...node, children: result.data });\n } else {\n acc.push(node);\n }\n } else {\n acc.push(node);\n }\n\n return acc;\n }, []);\n\n return { data: newData, removed };\n}\n\nfunction insertNode(\n data: TreeNodeData[],\n node: TreeNodeData,\n targetValue: string,\n position: TreeDragDropPosition\n): TreeNodeData[] {\n if (position === 'inside') {\n return data.map((item) => {\n if (item.value === targetValue) {\n return { ...item, children: [...(item.children || []), node] };\n }\n\n if (item.children) {\n return { ...item, children: insertNode(item.children, node, targetValue, position) };\n }\n\n return item;\n });\n }\n\n const targetIndex = data.findIndex((item) => item.value === targetValue);\n\n if (targetIndex !== -1) {\n const result = [...data];\n const insertIndex = position === 'before' ? targetIndex : targetIndex + 1;\n result.splice(insertIndex, 0, node);\n return result;\n }\n\n return data.map((item) => {\n if (item.children) {\n return { ...item, children: insertNode(item.children, node, targetValue, position) };\n }\n\n return item;\n });\n}\n\nexport function moveTreeNode(data: TreeNodeData[], payload: TreeDragDropPayload): TreeNodeData[] {\n const { draggedNode, targetNode, position } = payload;\n\n if (draggedNode === targetNode) {\n return data;\n }\n\n if (!findTreeNode(targetNode, data)) {\n return data;\n }\n\n if (isDescendant(data, draggedNode, targetNode)) {\n return data;\n }\n\n const { data: dataWithout, removed } = removeNode(data, draggedNode);\n\n if (!removed) {\n return data;\n }\n\n return insertNode(dataWithout, removed, targetNode, position);\n}\n"],"mappings":";;;AAgBA,SAAS,aAAa,MAAsB,eAAuB,OAAwB;CACzF,MAAM,WAAW,aAAa,eAAe,KAAK;AAClD,KAAI,CAAC,YAAY,CAAC,SAAS,SACzB,QAAO;CAGT,SAAS,MAAM,OAAgC;AAC7C,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,UAAU,MACjB,QAAO;AAGT,OAAI,KAAK,YAAY,MAAM,KAAK,SAAS,CACvC,QAAO;;AAIX,SAAO;;AAGT,QAAO,MAAM,SAAS,SAAS;;AAGjC,SAAS,WACP,MACA,OACwD;CACxD,IAAI,UAA+B;AAuBnC,QAAO;EAAE,MArBO,KAAK,QAAwB,KAAK,SAAS;AACzD,OAAI,KAAK,UAAU,OAAO;AACxB,cAAU,EAAE,GAAG,MAAM;AACrB,WAAO;;AAGT,OAAI,KAAK,UAAU;IACjB,MAAM,SAAS,WAAW,KAAK,UAAU,MAAM;AAC/C,QAAI,OAAO,SAAS;AAClB,eAAU,OAAO;AACjB,SAAI,KAAK;MAAE,GAAG;MAAM,UAAU,OAAO;MAAM,CAAC;UAE5C,KAAI,KAAK,KAAK;SAGhB,KAAI,KAAK,KAAK;AAGhB,UAAO;KACN,EAAE,CAAC;EAEkB;EAAS;;AAGnC,SAAS,WACP,MACA,MACA,aACA,UACgB;AAChB,KAAI,aAAa,SACf,QAAO,KAAK,KAAK,SAAS;AACxB,MAAI,KAAK,UAAU,YACjB,QAAO;GAAE,GAAG;GAAM,UAAU,CAAC,GAAI,KAAK,YAAY,EAAE,EAAG,KAAK;GAAE;AAGhE,MAAI,KAAK,SACP,QAAO;GAAE,GAAG;GAAM,UAAU,WAAW,KAAK,UAAU,MAAM,aAAa,SAAS;GAAE;AAGtF,SAAO;GACP;CAGJ,MAAM,cAAc,KAAK,WAAW,SAAS,KAAK,UAAU,YAAY;AAExE,KAAI,gBAAgB,IAAI;EACtB,MAAM,SAAS,CAAC,GAAG,KAAK;EACxB,MAAM,cAAc,aAAa,WAAW,cAAc,cAAc;AACxE,SAAO,OAAO,aAAa,GAAG,KAAK;AACnC,SAAO;;AAGT,QAAO,KAAK,KAAK,SAAS;AACxB,MAAI,KAAK,SACP,QAAO;GAAE,GAAG;GAAM,UAAU,WAAW,KAAK,UAAU,MAAM,aAAa,SAAS;GAAE;AAGtF,SAAO;GACP;;AAGJ,SAAgB,aAAa,MAAsB,SAA8C;CAC/F,MAAM,EAAE,aAAa,YAAY,aAAa;AAE9C,KAAI,gBAAgB,WAClB,QAAO;AAGT,KAAI,CAAC,aAAa,YAAY,KAAK,CACjC,QAAO;AAGT,KAAI,aAAa,MAAM,aAAa,WAAW,CAC7C,QAAO;CAGT,MAAM,EAAE,MAAM,aAAa,YAAY,WAAW,MAAM,YAAY;AAEpE,KAAI,CAAC,QACH,QAAO;AAGT,QAAO,WAAW,aAAa,SAAS,YAAY,SAAS"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { findTreeNode } from "./get-children-nodes-values/get-children-nodes-values.mjs";
|
|
3
|
-
//#region packages/@mantine/core/src/components/Tree/use-tree-node-drag-drop.ts
|
|
4
|
-
function isDescendantOf(data, ancestorValue, descendantValue) {
|
|
5
|
-
const ancestor = findTreeNode(ancestorValue, data);
|
|
6
|
-
if (!ancestor || !ancestor.children) return false;
|
|
7
|
-
function check(nodes) {
|
|
8
|
-
for (const node of nodes) {
|
|
9
|
-
if (node.value === descendantValue) return true;
|
|
10
|
-
if (node.children && check(node.children)) return true;
|
|
11
|
-
}
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
return check(ancestor.children);
|
|
15
|
-
}
|
|
16
|
-
function getDragDropPosition(event, element, hasChildren) {
|
|
17
|
-
const rect = element.getBoundingClientRect();
|
|
18
|
-
const y = event.clientY - rect.top;
|
|
19
|
-
const height = rect.height;
|
|
20
|
-
if (hasChildren) {
|
|
21
|
-
if (y < height * .25) return "before";
|
|
22
|
-
if (y > height * .75) return "after";
|
|
23
|
-
return "inside";
|
|
24
|
-
}
|
|
25
|
-
if (y < height * .5) return "before";
|
|
26
|
-
return "after";
|
|
27
|
-
}
|
|
28
|
-
const EMPTY_DRAG_PROPS = {};
|
|
29
|
-
function useTreeNodeDragDrop({ nodeValue, hasChildren, data, onDragDrop, dragStateRef }) {
|
|
30
|
-
if (!onDragDrop) return EMPTY_DRAG_PROPS;
|
|
31
|
-
const handleDragStart = (event) => {
|
|
32
|
-
event.stopPropagation();
|
|
33
|
-
event.dataTransfer.effectAllowed = "move";
|
|
34
|
-
event.dataTransfer.setData("text/plain", nodeValue);
|
|
35
|
-
dragStateRef.current.draggedValue = nodeValue;
|
|
36
|
-
const target = event.currentTarget;
|
|
37
|
-
requestAnimationFrame(() => {
|
|
38
|
-
target.setAttribute("data-dragging", "true");
|
|
39
|
-
});
|
|
40
|
-
};
|
|
41
|
-
const handleDragOver = (event) => {
|
|
42
|
-
const draggedValue = dragStateRef.current.draggedValue;
|
|
43
|
-
if (!draggedValue || draggedValue === nodeValue) return;
|
|
44
|
-
if (isDescendantOf(data, draggedValue, nodeValue)) return;
|
|
45
|
-
event.preventDefault();
|
|
46
|
-
event.stopPropagation();
|
|
47
|
-
event.dataTransfer.dropEffect = "move";
|
|
48
|
-
const target = event.currentTarget;
|
|
49
|
-
const position = getDragDropPosition(event, target, hasChildren);
|
|
50
|
-
const prevTarget = dragStateRef.current.currentDropTarget;
|
|
51
|
-
if (prevTarget && prevTarget !== target) prevTarget.removeAttribute("data-drag-over");
|
|
52
|
-
target.setAttribute("data-drag-over", position);
|
|
53
|
-
dragStateRef.current.currentDropTarget = target;
|
|
54
|
-
};
|
|
55
|
-
const handleDragLeave = (event) => {
|
|
56
|
-
const target = event.currentTarget;
|
|
57
|
-
const related = event.relatedTarget;
|
|
58
|
-
if (related && target.contains(related)) return;
|
|
59
|
-
target.removeAttribute("data-drag-over");
|
|
60
|
-
if (dragStateRef.current.currentDropTarget === target) dragStateRef.current.currentDropTarget = null;
|
|
61
|
-
};
|
|
62
|
-
const handleDrop = (event) => {
|
|
63
|
-
event.preventDefault();
|
|
64
|
-
event.stopPropagation();
|
|
65
|
-
const target = event.currentTarget;
|
|
66
|
-
const position = target.getAttribute("data-drag-over");
|
|
67
|
-
target.removeAttribute("data-drag-over");
|
|
68
|
-
const draggedValue = dragStateRef.current.draggedValue;
|
|
69
|
-
if (draggedValue && position && draggedValue !== nodeValue) onDragDrop({
|
|
70
|
-
draggedNode: draggedValue,
|
|
71
|
-
targetNode: nodeValue,
|
|
72
|
-
position
|
|
73
|
-
});
|
|
74
|
-
dragStateRef.current.draggedValue = null;
|
|
75
|
-
dragStateRef.current.currentDropTarget = null;
|
|
76
|
-
};
|
|
77
|
-
const handleDragEnd = (event) => {
|
|
78
|
-
event.currentTarget.removeAttribute("data-dragging");
|
|
79
|
-
const prevTarget = dragStateRef.current.currentDropTarget;
|
|
80
|
-
if (prevTarget) prevTarget.removeAttribute("data-drag-over");
|
|
81
|
-
dragStateRef.current.draggedValue = null;
|
|
82
|
-
dragStateRef.current.currentDropTarget = null;
|
|
83
|
-
};
|
|
84
|
-
return {
|
|
85
|
-
draggable: true,
|
|
86
|
-
onDragStart: handleDragStart,
|
|
87
|
-
onDragOver: handleDragOver,
|
|
88
|
-
onDragLeave: handleDragLeave,
|
|
89
|
-
onDrop: handleDrop,
|
|
90
|
-
onDragEnd: handleDragEnd
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
//#endregion
|
|
94
|
-
export { useTreeNodeDragDrop };
|
|
95
|
-
|
|
96
|
-
//# sourceMappingURL=use-tree-node-drag-drop.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-tree-node-drag-drop.mjs","names":[],"sources":["../../../src/components/Tree/use-tree-node-drag-drop.ts"],"sourcesContent":["import { findTreeNode } from './get-children-nodes-values/get-children-nodes-values';\nimport type { TreeDragDropPayload, TreeDragDropPosition } from './move-tree-node/move-tree-node';\nimport type { TreeDragState, TreeNodeData } from './Tree';\n\ninterface UseTreeNodeDragDropInput {\n nodeValue: string;\n hasChildren: boolean;\n data: TreeNodeData[];\n onDragDrop: ((payload: TreeDragDropPayload) => void) | undefined;\n dragStateRef: React.RefObject<TreeDragState>;\n}\n\nfunction isDescendantOf(\n data: TreeNodeData[],\n ancestorValue: string,\n descendantValue: string\n): boolean {\n const ancestor = findTreeNode(ancestorValue, data);\n if (!ancestor || !ancestor.children) {\n return false;\n }\n\n function check(nodes: TreeNodeData[]): boolean {\n for (const node of nodes) {\n if (node.value === descendantValue) {\n return true;\n }\n\n if (node.children && check(node.children)) {\n return true;\n }\n }\n\n return false;\n }\n\n return check(ancestor.children);\n}\n\nfunction getDragDropPosition(\n event: React.DragEvent,\n element: HTMLElement,\n hasChildren: boolean\n): TreeDragDropPosition {\n const rect = element.getBoundingClientRect();\n const y = event.clientY - rect.top;\n const height = rect.height;\n\n if (hasChildren) {\n if (y < height * 0.25) {\n return 'before';\n }\n\n if (y > height * 0.75) {\n return 'after';\n }\n\n return 'inside';\n }\n\n if (y < height * 0.5) {\n return 'before';\n }\n\n return 'after';\n}\n\nconst EMPTY_DRAG_PROPS: Record<string, never> = {};\n\nexport function useTreeNodeDragDrop({\n nodeValue,\n hasChildren,\n data,\n onDragDrop,\n dragStateRef,\n}: UseTreeNodeDragDropInput) {\n if (!onDragDrop) {\n return EMPTY_DRAG_PROPS;\n }\n\n const handleDragStart = (event: React.DragEvent) => {\n event.stopPropagation();\n event.dataTransfer.effectAllowed = 'move';\n event.dataTransfer.setData('text/plain', nodeValue);\n dragStateRef.current.draggedValue = nodeValue;\n\n const target = event.currentTarget as HTMLElement;\n requestAnimationFrame(() => {\n target.setAttribute('data-dragging', 'true');\n });\n };\n\n const handleDragOver = (event: React.DragEvent) => {\n const draggedValue = dragStateRef.current.draggedValue;\n if (!draggedValue || draggedValue === nodeValue) {\n return;\n }\n\n if (isDescendantOf(data, draggedValue, nodeValue)) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n event.dataTransfer.dropEffect = 'move';\n\n const target = event.currentTarget as HTMLElement;\n const position = getDragDropPosition(event, target, hasChildren);\n\n const prevTarget = dragStateRef.current.currentDropTarget;\n if (prevTarget && prevTarget !== target) {\n prevTarget.removeAttribute('data-drag-over');\n }\n\n target.setAttribute('data-drag-over', position);\n dragStateRef.current.currentDropTarget = target;\n };\n\n const handleDragLeave = (event: React.DragEvent) => {\n const target = event.currentTarget as HTMLElement;\n const related = event.relatedTarget as HTMLElement | null;\n\n if (related && target.contains(related)) {\n return;\n }\n\n target.removeAttribute('data-drag-over');\n\n if (dragStateRef.current.currentDropTarget === target) {\n dragStateRef.current.currentDropTarget = null;\n }\n };\n\n const handleDrop = (event: React.DragEvent) => {\n event.preventDefault();\n event.stopPropagation();\n\n const target = event.currentTarget as HTMLElement;\n const position = target.getAttribute('data-drag-over') as TreeDragDropPosition | null;\n target.removeAttribute('data-drag-over');\n\n const draggedValue = dragStateRef.current.draggedValue;\n if (draggedValue && position && draggedValue !== nodeValue) {\n onDragDrop({ draggedNode: draggedValue, targetNode: nodeValue, position });\n }\n\n dragStateRef.current.draggedValue = null;\n dragStateRef.current.currentDropTarget = null;\n };\n\n const handleDragEnd = (event: React.DragEvent) => {\n const target = event.currentTarget as HTMLElement;\n target.removeAttribute('data-dragging');\n\n const prevTarget = dragStateRef.current.currentDropTarget;\n if (prevTarget) {\n prevTarget.removeAttribute('data-drag-over');\n }\n\n dragStateRef.current.draggedValue = null;\n dragStateRef.current.currentDropTarget = null;\n };\n\n return {\n draggable: true as const,\n onDragStart: handleDragStart,\n onDragOver: handleDragOver,\n onDragLeave: handleDragLeave,\n onDrop: handleDrop,\n onDragEnd: handleDragEnd,\n };\n}\n"],"mappings":";;;AAYA,SAAS,eACP,MACA,eACA,iBACS;CACT,MAAM,WAAW,aAAa,eAAe,KAAK;AAClD,KAAI,CAAC,YAAY,CAAC,SAAS,SACzB,QAAO;CAGT,SAAS,MAAM,OAAgC;AAC7C,OAAK,MAAM,QAAQ,OAAO;AACxB,OAAI,KAAK,UAAU,gBACjB,QAAO;AAGT,OAAI,KAAK,YAAY,MAAM,KAAK,SAAS,CACvC,QAAO;;AAIX,SAAO;;AAGT,QAAO,MAAM,SAAS,SAAS;;AAGjC,SAAS,oBACP,OACA,SACA,aACsB;CACtB,MAAM,OAAO,QAAQ,uBAAuB;CAC5C,MAAM,IAAI,MAAM,UAAU,KAAK;CAC/B,MAAM,SAAS,KAAK;AAEpB,KAAI,aAAa;AACf,MAAI,IAAI,SAAS,IACf,QAAO;AAGT,MAAI,IAAI,SAAS,IACf,QAAO;AAGT,SAAO;;AAGT,KAAI,IAAI,SAAS,GACf,QAAO;AAGT,QAAO;;AAGT,MAAM,mBAA0C,EAAE;AAElD,SAAgB,oBAAoB,EAClC,WACA,aACA,MACA,YACA,gBAC2B;AAC3B,KAAI,CAAC,WACH,QAAO;CAGT,MAAM,mBAAmB,UAA2B;AAClD,QAAM,iBAAiB;AACvB,QAAM,aAAa,gBAAgB;AACnC,QAAM,aAAa,QAAQ,cAAc,UAAU;AACnD,eAAa,QAAQ,eAAe;EAEpC,MAAM,SAAS,MAAM;AACrB,8BAA4B;AAC1B,UAAO,aAAa,iBAAiB,OAAO;IAC5C;;CAGJ,MAAM,kBAAkB,UAA2B;EACjD,MAAM,eAAe,aAAa,QAAQ;AAC1C,MAAI,CAAC,gBAAgB,iBAAiB,UACpC;AAGF,MAAI,eAAe,MAAM,cAAc,UAAU,CAC/C;AAGF,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AACvB,QAAM,aAAa,aAAa;EAEhC,MAAM,SAAS,MAAM;EACrB,MAAM,WAAW,oBAAoB,OAAO,QAAQ,YAAY;EAEhE,MAAM,aAAa,aAAa,QAAQ;AACxC,MAAI,cAAc,eAAe,OAC/B,YAAW,gBAAgB,iBAAiB;AAG9C,SAAO,aAAa,kBAAkB,SAAS;AAC/C,eAAa,QAAQ,oBAAoB;;CAG3C,MAAM,mBAAmB,UAA2B;EAClD,MAAM,SAAS,MAAM;EACrB,MAAM,UAAU,MAAM;AAEtB,MAAI,WAAW,OAAO,SAAS,QAAQ,CACrC;AAGF,SAAO,gBAAgB,iBAAiB;AAExC,MAAI,aAAa,QAAQ,sBAAsB,OAC7C,cAAa,QAAQ,oBAAoB;;CAI7C,MAAM,cAAc,UAA2B;AAC7C,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;EAEvB,MAAM,SAAS,MAAM;EACrB,MAAM,WAAW,OAAO,aAAa,iBAAiB;AACtD,SAAO,gBAAgB,iBAAiB;EAExC,MAAM,eAAe,aAAa,QAAQ;AAC1C,MAAI,gBAAgB,YAAY,iBAAiB,UAC/C,YAAW;GAAE,aAAa;GAAc,YAAY;GAAW;GAAU,CAAC;AAG5E,eAAa,QAAQ,eAAe;AACpC,eAAa,QAAQ,oBAAoB;;CAG3C,MAAM,iBAAiB,UAA2B;AACjC,QAAM,cACd,gBAAgB,gBAAgB;EAEvC,MAAM,aAAa,aAAa,QAAQ;AACxC,MAAI,WACF,YAAW,gBAAgB,iBAAiB;AAG9C,eAAa,QAAQ,eAAe;AACpC,eAAa,QAAQ,oBAAoB;;AAG3C,QAAO;EACL,WAAW;EACX,aAAa;EACb,YAAY;EACZ,aAAa;EACb,QAAQ;EACR,WAAW;EACZ"}
|