@vuu-ui/vuu-utils 0.8.35 → 0.8.37
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 +0 -0
- package/cjs/DataWindow.js +71 -0
- package/cjs/DataWindow.js.map +1 -0
- package/cjs/ThemeProvider.js +85 -0
- package/cjs/ThemeProvider.js.map +1 -0
- package/cjs/array-utils.js +87 -0
- package/cjs/array-utils.js.map +1 -0
- package/cjs/box-utils.js +10 -0
- package/cjs/box-utils.js.map +1 -0
- package/cjs/column-utils.js +810 -0
- package/cjs/column-utils.js.map +1 -0
- package/cjs/common-types.js +15 -0
- package/cjs/common-types.js.map +1 -0
- package/cjs/component-registry.js +111 -0
- package/cjs/component-registry.js.map +1 -0
- package/cjs/cookie-utils.js +10 -0
- package/cjs/cookie-utils.js.map +1 -0
- package/cjs/data-utils.js +58 -0
- package/cjs/data-utils.js.map +1 -0
- package/cjs/datasource-action-utils.js +14 -0
- package/cjs/datasource-action-utils.js.map +1 -0
- package/cjs/datasource-utils.js +178 -0
- package/cjs/datasource-utils.js.map +1 -0
- package/cjs/date/dateTimePattern.js +25 -0
- package/cjs/date/dateTimePattern.js.map +1 -0
- package/cjs/date/formatter.js +66 -0
- package/cjs/date/formatter.js.map +1 -0
- package/cjs/date/types.js +23 -0
- package/cjs/date/types.js.map +1 -0
- package/cjs/date/utils.js +10 -0
- package/cjs/date/utils.js.map +1 -0
- package/cjs/debug-utils.js +31 -0
- package/cjs/debug-utils.js.map +1 -0
- package/cjs/event-emitter.js +119 -0
- package/cjs/event-emitter.js.map +1 -0
- package/cjs/filters/filterAsQuery.js +76 -0
- package/cjs/filters/filterAsQuery.js.map +1 -0
- package/cjs/filters/utils.js +89 -0
- package/cjs/filters/utils.js.map +1 -0
- package/cjs/formatting-utils.js +66 -0
- package/cjs/formatting-utils.js.map +1 -0
- package/cjs/getUniqueId.js +6 -0
- package/cjs/getUniqueId.js.map +1 -0
- package/cjs/group-utils.js +12 -0
- package/cjs/group-utils.js.map +1 -0
- package/cjs/html-utils.js +124 -0
- package/cjs/html-utils.js.map +1 -0
- package/cjs/index.js +4 -0
- package/cjs/index.js.map +1 -0
- package/cjs/input-utils.js +10 -0
- package/cjs/input-utils.js.map +1 -0
- package/cjs/invariant.js +13 -0
- package/cjs/invariant.js.map +1 -0
- package/cjs/itemToString.js +23 -0
- package/cjs/itemToString.js.map +1 -0
- package/cjs/json-utils.js +92 -0
- package/cjs/json-utils.js.map +1 -0
- package/cjs/keyboard-utils.js +28 -0
- package/cjs/keyboard-utils.js.map +1 -0
- package/cjs/keyset.js +68 -0
- package/cjs/keyset.js.map +1 -0
- package/cjs/local-storage-utils.js +20 -0
- package/cjs/local-storage-utils.js.map +1 -0
- package/cjs/logging-utils.js +61 -0
- package/cjs/logging-utils.js.map +1 -0
- package/cjs/menu-utils.js +6 -0
- package/cjs/menu-utils.js.map +1 -0
- package/cjs/module-utils.js +12 -0
- package/cjs/module-utils.js.map +1 -0
- package/cjs/nanoid/index.js +22 -0
- package/cjs/nanoid/index.js.map +1 -0
- package/cjs/perf-utils.js +35 -0
- package/cjs/perf-utils.js.map +1 -0
- package/cjs/range-utils.js +74 -0
- package/cjs/range-utils.js.map +1 -0
- package/cjs/react-utils.js +21 -0
- package/cjs/react-utils.js.map +1 -0
- package/cjs/round-decimal.js +86 -0
- package/cjs/round-decimal.js.map +1 -0
- package/cjs/row-utils.js +84 -0
- package/cjs/row-utils.js.map +1 -0
- package/cjs/selection-utils.js +236 -0
- package/cjs/selection-utils.js.map +1 -0
- package/cjs/sort-utils.js +61 -0
- package/cjs/sort-utils.js.map +1 -0
- package/cjs/text-utils.js +21 -0
- package/cjs/text-utils.js.map +1 -0
- package/cjs/ts-utils.js +8 -0
- package/cjs/ts-utils.js.map +1 -0
- package/cjs/url-utils.js +21 -0
- package/cjs/url-utils.js.map +1 -0
- package/cjs/useId.js +9 -0
- package/cjs/useId.js.map +1 -0
- package/cjs/useLayoutEffectSkipFirst.js +17 -0
- package/cjs/useLayoutEffectSkipFirst.js.map +1 -0
- package/esm/DataWindow.js +69 -0
- package/esm/DataWindow.js.map +1 -0
- package/esm/ThemeProvider.js +78 -0
- package/esm/ThemeProvider.js.map +1 -0
- package/esm/array-utils.js +79 -0
- package/esm/array-utils.js.map +1 -0
- package/esm/box-utils.js +8 -0
- package/esm/box-utils.js.map +1 -0
- package/esm/column-utils.js +738 -0
- package/esm/column-utils.js.map +1 -0
- package/esm/common-types.js +13 -0
- package/esm/common-types.js.map +1 -0
- package/esm/component-registry.js +99 -0
- package/esm/component-registry.js.map +1 -0
- package/esm/cookie-utils.js +8 -0
- package/esm/cookie-utils.js.map +1 -0
- package/esm/data-utils.js +50 -0
- package/esm/data-utils.js.map +1 -0
- package/esm/datasource-action-utils.js +8 -0
- package/esm/datasource-action-utils.js.map +1 -0
- package/esm/datasource-utils.js +158 -0
- package/esm/datasource-utils.js.map +1 -0
- package/esm/date/dateTimePattern.js +21 -0
- package/esm/date/dateTimePattern.js.map +1 -0
- package/esm/date/formatter.js +63 -0
- package/esm/date/formatter.js.map +1 -0
- package/esm/date/types.js +20 -0
- package/esm/date/types.js.map +1 -0
- package/esm/date/utils.js +8 -0
- package/esm/date/utils.js.map +1 -0
- package/esm/debug-utils.js +29 -0
- package/esm/debug-utils.js.map +1 -0
- package/esm/event-emitter.js +117 -0
- package/esm/event-emitter.js.map +1 -0
- package/esm/filters/filterAsQuery.js +72 -0
- package/esm/filters/filterAsQuery.js.map +1 -0
- package/esm/filters/utils.js +74 -0
- package/esm/filters/utils.js.map +1 -0
- package/esm/formatting-utils.js +62 -0
- package/esm/formatting-utils.js.map +1 -0
- package/esm/getUniqueId.js +4 -0
- package/esm/getUniqueId.js.map +1 -0
- package/esm/group-utils.js +10 -0
- package/esm/group-utils.js.map +1 -0
- package/esm/html-utils.js +111 -0
- package/esm/html-utils.js.map +1 -0
- package/esm/index.js +47 -0
- package/esm/index.js.map +1 -0
- package/esm/input-utils.js +7 -0
- package/esm/input-utils.js.map +1 -0
- package/esm/invariant.js +11 -0
- package/esm/invariant.js.map +1 -0
- package/esm/itemToString.js +21 -0
- package/esm/itemToString.js.map +1 -0
- package/esm/json-utils.js +90 -0
- package/esm/json-utils.js.map +1 -0
- package/esm/keyboard-utils.js +15 -0
- package/esm/keyboard-utils.js.map +1 -0
- package/esm/keyset.js +66 -0
- package/esm/keyset.js.map +1 -0
- package/esm/local-storage-utils.js +16 -0
- package/esm/local-storage-utils.js.map +1 -0
- package/esm/logging-utils.js +58 -0
- package/esm/logging-utils.js.map +1 -0
- package/esm/menu-utils.js +4 -0
- package/esm/menu-utils.js.map +1 -0
- package/esm/module-utils.js +9 -0
- package/esm/module-utils.js.map +1 -0
- package/esm/nanoid/index.js +20 -0
- package/esm/nanoid/index.js.map +1 -0
- package/esm/perf-utils.js +32 -0
- package/esm/perf-utils.js.map +1 -0
- package/esm/range-utils.js +66 -0
- package/esm/range-utils.js.map +1 -0
- package/esm/react-utils.js +19 -0
- package/esm/react-utils.js.map +1 -0
- package/esm/round-decimal.js +84 -0
- package/esm/round-decimal.js.map +1 -0
- package/esm/row-utils.js +78 -0
- package/esm/row-utils.js.map +1 -0
- package/esm/selection-utils.js +227 -0
- package/esm/selection-utils.js.map +1 -0
- package/esm/sort-utils.js +57 -0
- package/esm/sort-utils.js.map +1 -0
- package/esm/text-utils.js +18 -0
- package/esm/text-utils.js.map +1 -0
- package/esm/ts-utils.js +6 -0
- package/esm/ts-utils.js.map +1 -0
- package/esm/url-utils.js +18 -0
- package/esm/url-utils.js.map +1 -0
- package/esm/useId.js +7 -0
- package/esm/useId.js.map +1 -0
- package/esm/useLayoutEffectSkipFirst.js +15 -0
- package/esm/useLayoutEffectSkipFirst.js.map +1 -0
- package/package.json +7 -5
- package/types/index.d.ts +1 -0
- package/types/local-storage-utils.d.ts +3 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sort-utils.js","sources":["../src/sort-utils.ts"],"sourcesContent":["import {\n ColumnDescriptor,\n RuntimeColumnDescriptor,\n} from \"@vuu-ui/vuu-table-types\";\nimport { VuuSort, VuuSortCol, VuuSortType } from \"@vuu-ui/vuu-protocol-types\";\n\nconst cycleSortType = (sortType: VuuSortType) =>\n sortType === \"A\" ? \"D\" : sortType === \"D\" ? undefined : \"A\";\n\nconst NO_SORT: VuuSort = { sortDefs: [] };\n\n// Given an existing sort spec and a column we wish to sort by,\n// construct and return a new sort spec.\nexport const toggleOrApplySort = (\n { sortDefs }: VuuSort,\n { name: column }: ColumnDescriptor,\n extendSort = false,\n sortType?: VuuSortType\n): VuuSort => {\n if (extendSort) {\n const existingDef = sortDefs.find((sortDef) => sortDef.column === column);\n if (existingDef) {\n return {\n sortDefs: sortDefs.map((sortDef) =>\n sortDef.column === column\n ? {\n column,\n sortType: sortDef.sortType === \"A\" ? \"D\" : \"A\",\n }\n : sortDef\n ),\n };\n } else {\n return {\n sortDefs: sortDefs.concat({\n column,\n sortType: sortType ?? \"A\",\n }),\n };\n }\n }\n\n const newSortType =\n typeof sortType === \"string\"\n ? sortType\n : sortDefs.length === 1 && sortDefs[0].column === column\n ? cycleSortType(sortDefs[0].sortType)\n : \"A\";\n\n return newSortType\n ? {\n sortDefs: [{ column, sortType: newSortType }],\n }\n : NO_SORT;\n};\n\nexport const setSortColumn = (\n { sortDefs }: VuuSort,\n column: RuntimeColumnDescriptor,\n sortType?: \"A\" | \"D\"\n): VuuSort => {\n if (sortType === undefined) {\n const columnSort = sortDefs.find((item) => item.column === column.name);\n if (columnSort) {\n return {\n sortDefs: [\n {\n column: column.name,\n sortType: columnSort.sortType === \"A\" ? \"D\" : \"A\",\n },\n ],\n };\n }\n }\n return { sortDefs: [{ column: column.name, sortType: sortType ?? \"A\" }] };\n};\n\nexport const addSortColumn = (\n { sortDefs }: VuuSort,\n column: RuntimeColumnDescriptor,\n sortType: \"A\" | \"D\" = \"A\"\n): VuuSort => {\n const sortEntry: VuuSortCol = { column: column.name, sortType };\n if (sortDefs.length > 0) {\n return {\n sortDefs: sortDefs.concat(sortEntry),\n };\n } else {\n return { sortDefs: [sortEntry] };\n }\n};\n"],"names":[],"mappings":";;AAMA,MAAM,aAAA,GAAgB,CAAC,QACrB,KAAA,QAAA,KAAa,MAAM,GAAM,GAAA,QAAA,KAAa,MAAM,KAAY,CAAA,GAAA,GAAA,CAAA;AAE1D,MAAM,OAAmB,GAAA,EAAE,QAAU,EAAA,EAAG,EAAA,CAAA;AAI3B,MAAA,iBAAA,GAAoB,CAC/B,EAAE,QAAS,EAAA,EACX,EAAE,IAAA,EAAM,MAAO,EAAA,EACf,UAAa,GAAA,KAAA,EACb,QACY,KAAA;AACZ,EAAA,IAAI,UAAY,EAAA;AACd,IAAA,MAAM,cAAc,QAAS,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA,OAAA,CAAQ,WAAW,MAAM,CAAA,CAAA;AACxE,IAAA,IAAI,WAAa,EAAA;AACf,MAAO,OAAA;AAAA,QACL,UAAU,QAAS,CAAA,GAAA;AAAA,UAAI,CAAC,OAAA,KACtB,OAAQ,CAAA,MAAA,KAAW,MACf,GAAA;AAAA,YACE,MAAA;AAAA,YACA,QAAU,EAAA,OAAA,CAAQ,QAAa,KAAA,GAAA,GAAM,GAAM,GAAA,GAAA;AAAA,WAE7C,GAAA,OAAA;AAAA,SACN;AAAA,OACF,CAAA;AAAA,KACK,MAAA;AACL,MAAO,OAAA;AAAA,QACL,QAAA,EAAU,SAAS,MAAO,CAAA;AAAA,UACxB,MAAA;AAAA,UACA,UAAU,QAAY,IAAA,GAAA;AAAA,SACvB,CAAA;AAAA,OACH,CAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,MAAM,cACJ,OAAO,QAAA,KAAa,WAChB,QACA,GAAA,QAAA,CAAS,WAAW,CAAK,IAAA,QAAA,CAAS,CAAC,CAAA,CAAE,WAAW,MAChD,GAAA,aAAA,CAAc,SAAS,CAAC,CAAA,CAAE,QAAQ,CAClC,GAAA,GAAA,CAAA;AAEN,EAAA,OAAO,WACH,GAAA;AAAA,IACE,UAAU,CAAC,EAAE,MAAQ,EAAA,QAAA,EAAU,aAAa,CAAA;AAAA,GAE9C,GAAA,OAAA,CAAA;AACN,EAAA;AAEO,MAAM,gBAAgB,CAC3B,EAAE,QAAS,EAAA,EACX,QACA,QACY,KAAA;AACZ,EAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AAC1B,IAAM,MAAA,UAAA,GAAa,SAAS,IAAK,CAAA,CAAC,SAAS,IAAK,CAAA,MAAA,KAAW,OAAO,IAAI,CAAA,CAAA;AACtE,IAAA,IAAI,UAAY,EAAA;AACd,MAAO,OAAA;AAAA,QACL,QAAU,EAAA;AAAA,UACR;AAAA,YACE,QAAQ,MAAO,CAAA,IAAA;AAAA,YACf,QAAU,EAAA,UAAA,CAAW,QAAa,KAAA,GAAA,GAAM,GAAM,GAAA,GAAA;AAAA,WAChD;AAAA,SACF;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,EAAE,QAAU,EAAA,CAAC,EAAE,MAAA,EAAQ,MAAO,CAAA,IAAA,EAAM,QAAU,EAAA,QAAA,IAAY,GAAI,EAAC,CAAE,EAAA,CAAA;AAC1E,EAAA;AAEO,MAAM,gBAAgB,CAC3B,EAAE,UACF,EAAA,MAAA,EACA,WAAsB,GACV,KAAA;AACZ,EAAA,MAAM,SAAwB,GAAA,EAAE,MAAQ,EAAA,MAAA,CAAO,MAAM,QAAS,EAAA,CAAA;AAC9D,EAAI,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AACvB,IAAO,OAAA;AAAA,MACL,QAAA,EAAU,QAAS,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA,KACrC,CAAA;AAAA,GACK,MAAA;AACL,IAAA,OAAO,EAAE,QAAA,EAAU,CAAC,SAAS,CAAE,EAAA,CAAA;AAAA,GACjC;AACF;;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const lastWord = (text) => {
|
|
4
|
+
const trimmedText = text.trim();
|
|
5
|
+
const pos = trimmedText.lastIndexOf(" ");
|
|
6
|
+
if (pos === -1) {
|
|
7
|
+
return trimmedText;
|
|
8
|
+
} else {
|
|
9
|
+
return trimmedText.slice(pos + 1);
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
const capitalize = (text) => text.length === 0 ? "" : text[0].toUpperCase() + text.slice(1);
|
|
13
|
+
const regexp_worfify = /(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])/;
|
|
14
|
+
const wordify = (text) => {
|
|
15
|
+
const [firstWord, ...rest] = text.split(regexp_worfify);
|
|
16
|
+
return `${capitalize(firstWord)} ${rest.join(" ")}`;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
exports.lastWord = lastWord;
|
|
20
|
+
exports.wordify = wordify;
|
|
21
|
+
//# sourceMappingURL=text-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-utils.js","sources":["../src/text-utils.ts"],"sourcesContent":["export const lastWord = (text: string): string => {\n const trimmedText = text.trim();\n const pos = trimmedText.lastIndexOf(\" \");\n if (pos === -1) {\n return trimmedText;\n } else {\n return trimmedText.slice(pos + 1);\n }\n};\n\nconst capitalize = (text: string) =>\n text.length === 0 ? \"\" : text[0].toUpperCase() + text.slice(1);\n\nconst regexp_worfify = /(?<!(^|[A-Z]))(?=[A-Z])|(?<!^)(?=[A-Z][a-z])/;\nexport const wordify = (text: string) => {\n const [firstWord, ...rest] = text.split(regexp_worfify);\n return `${capitalize(firstWord)} ${rest.join(\" \")}`;\n};\n"],"names":[],"mappings":";;AAAa,MAAA,QAAA,GAAW,CAAC,IAAyB,KAAA;AAChD,EAAM,MAAA,WAAA,GAAc,KAAK,IAAK,EAAA,CAAA;AAC9B,EAAM,MAAA,GAAA,GAAM,WAAY,CAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AACvC,EAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,IAAO,OAAA,WAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,WAAA,CAAY,KAAM,CAAA,GAAA,GAAM,CAAC,CAAA,CAAA;AAAA,GAClC;AACF,EAAA;AAEA,MAAM,UAAa,GAAA,CAAC,IAClB,KAAA,IAAA,CAAK,WAAW,CAAI,GAAA,EAAA,GAAK,IAAK,CAAA,CAAC,CAAE,CAAA,WAAA,EAAgB,GAAA,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA;AAE/D,MAAM,cAAiB,GAAA,8CAAA,CAAA;AACV,MAAA,OAAA,GAAU,CAAC,IAAiB,KAAA;AACvC,EAAA,MAAM,CAAC,SAAW,EAAA,GAAG,IAAI,CAAI,GAAA,IAAA,CAAK,MAAM,cAAc,CAAA,CAAA;AACtD,EAAO,OAAA,CAAA,EAAG,WAAW,SAAS,CAAC,IAAI,IAAK,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AACnD;;;;;"}
|
package/cjs/ts-utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ts-utils.js","sources":["../src/ts-utils.ts"],"sourcesContent":["export function isNotNullOrUndefined<T>(\n value: T | undefined | null\n): value is NonNullable<T> {\n return value !== undefined && value !== null;\n}\n"],"names":[],"mappings":";;AAAO,SAAS,qBACd,KACyB,EAAA;AACzB,EAAO,OAAA,KAAA,KAAU,UAAa,KAAU,KAAA,IAAA,CAAA;AAC1C;;;;"}
|
package/cjs/url-utils.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const getUrlParameter = (paramName, defaultValue) => {
|
|
4
|
+
const url = new URL(document.location.href);
|
|
5
|
+
const parameter = url.searchParams.get(paramName);
|
|
6
|
+
if (parameter) {
|
|
7
|
+
return parameter;
|
|
8
|
+
}
|
|
9
|
+
const hashParams = url.hash;
|
|
10
|
+
const regex = new RegExp(`${paramName}=([a-zA-Z]*)`);
|
|
11
|
+
const result = regex.exec(hashParams);
|
|
12
|
+
if (result) {
|
|
13
|
+
return result[1];
|
|
14
|
+
}
|
|
15
|
+
return defaultValue;
|
|
16
|
+
};
|
|
17
|
+
const hasUrlParameter = (paramName) => new URL(document.location.href).searchParams.has(paramName);
|
|
18
|
+
|
|
19
|
+
exports.getUrlParameter = getUrlParameter;
|
|
20
|
+
exports.hasUrlParameter = hasUrlParameter;
|
|
21
|
+
//# sourceMappingURL=url-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url-utils.js","sources":["../src/url-utils.ts"],"sourcesContent":["export const getUrlParameter = (paramName: string, defaultValue?: string) => {\n const url = new URL(document.location.href);\n const parameter = url.searchParams.get(paramName);\n if (parameter) {\n return parameter;\n }\n const hashParams = url.hash;\n const regex = new RegExp(`${paramName}=([a-zA-Z]*)`);\n const result = regex.exec(hashParams);\n if (result) {\n return result[1];\n }\n return defaultValue;\n};\n\nexport const hasUrlParameter = (paramName: string) =>\n new URL(document.location.href).searchParams.has(paramName);\n"],"names":[],"mappings":";;AAAa,MAAA,eAAA,GAAkB,CAAC,SAAA,EAAmB,YAA0B,KAAA;AAC3E,EAAA,MAAM,GAAM,GAAA,IAAI,GAAI,CAAA,QAAA,CAAS,SAAS,IAAI,CAAA,CAAA;AAC1C,EAAA,MAAM,SAAY,GAAA,GAAA,CAAI,YAAa,CAAA,GAAA,CAAI,SAAS,CAAA,CAAA;AAChD,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,SAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,aAAa,GAAI,CAAA,IAAA,CAAA;AACvB,EAAA,MAAM,KAAQ,GAAA,IAAI,MAAO,CAAA,CAAA,EAAG,SAAS,CAAc,YAAA,CAAA,CAAA,CAAA;AACnD,EAAM,MAAA,MAAA,GAAS,KAAM,CAAA,IAAA,CAAK,UAAU,CAAA,CAAA;AACpC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAA,OAAO,OAAO,CAAC,CAAA,CAAA;AAAA,GACjB;AACA,EAAO,OAAA,YAAA,CAAA;AACT,EAAA;AAEa,MAAA,eAAA,GAAkB,CAAC,SAAA,KAC9B,IAAI,GAAA,CAAI,QAAS,CAAA,QAAA,CAAS,IAAI,CAAA,CAAE,YAAa,CAAA,GAAA,CAAI,SAAS;;;;;"}
|
package/cjs/useId.js
ADDED
package/cjs/useId.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useId.js","sources":["../src/useId.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nlet vuuComponentIdCount = 0;\n\nexport const useId = (id?: string) =>\n useMemo(() => id ?? `vuu-${++vuuComponentIdCount}`, [id]);\n"],"names":["useMemo"],"mappings":";;;;AAEA,IAAI,mBAAsB,GAAA,CAAA,CAAA;AAEnB,MAAM,KAAQ,GAAA,CAAC,EACpB,KAAAA,aAAA,CAAQ,MAAM,EAAA,IAAM,CAAO,IAAA,EAAA,EAAE,mBAAmB,CAAA,CAAA,EAAI,CAAC,EAAE,CAAC;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
const useLayoutEffectSkipFirst = (func, deps) => {
|
|
6
|
+
const goodToGo = react.useRef(false);
|
|
7
|
+
react.useLayoutEffect(() => {
|
|
8
|
+
if (goodToGo.current) {
|
|
9
|
+
func();
|
|
10
|
+
} else {
|
|
11
|
+
goodToGo.current = true;
|
|
12
|
+
}
|
|
13
|
+
}, deps);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
exports.useLayoutEffectSkipFirst = useLayoutEffectSkipFirst;
|
|
17
|
+
//# sourceMappingURL=useLayoutEffectSkipFirst.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLayoutEffectSkipFirst.js","sources":["../src/useLayoutEffectSkipFirst.ts"],"sourcesContent":["import { DependencyList, EffectCallback, useLayoutEffect, useRef } from \"react\";\n\nexport const useLayoutEffectSkipFirst = (\n func: EffectCallback,\n deps: DependencyList\n) => {\n const goodToGo = useRef(false);\n useLayoutEffect(() => {\n if (goodToGo.current) {\n func();\n } else {\n goodToGo.current = true;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n};\n"],"names":["useRef","useLayoutEffect"],"mappings":";;;;AAEa,MAAA,wBAAA,GAA2B,CACtC,IAAA,EACA,IACG,KAAA;AACH,EAAM,MAAA,QAAA,GAAWA,aAAO,KAAK,CAAA,CAAA;AAC7B,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,SAAS,OAAS,EAAA;AACpB,MAAK,IAAA,EAAA,CAAA;AAAA,KACA,MAAA;AACL,MAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAA;AAAA,KACrB;AAAA,KAEC,IAAI,CAAA,CAAA;AACT;;;;"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { WindowRange } from './range-utils.js';
|
|
2
|
+
import { metadataKeys } from './column-utils.js';
|
|
3
|
+
|
|
4
|
+
const { KEY } = metadataKeys;
|
|
5
|
+
class DataWindow {
|
|
6
|
+
constructor({ from, to }) {
|
|
7
|
+
this.rowCount = 0;
|
|
8
|
+
this.setRowCount = (rowCount) => {
|
|
9
|
+
if (rowCount < this.data.length) {
|
|
10
|
+
this.data.length = rowCount;
|
|
11
|
+
}
|
|
12
|
+
this.rowCount = rowCount;
|
|
13
|
+
};
|
|
14
|
+
this.range = new WindowRange(from, to);
|
|
15
|
+
this.data = new Array(to - from);
|
|
16
|
+
}
|
|
17
|
+
// return true if existing row was updated
|
|
18
|
+
add(data) {
|
|
19
|
+
const [index] = data;
|
|
20
|
+
if (this.isWithinRange(index)) {
|
|
21
|
+
const internalIndex = index - this.range.from;
|
|
22
|
+
const isUpdate = this.data[internalIndex] !== void 0;
|
|
23
|
+
this.data[internalIndex] = data;
|
|
24
|
+
return isUpdate;
|
|
25
|
+
} else {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
getAtIndex(index) {
|
|
30
|
+
return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
|
|
31
|
+
}
|
|
32
|
+
getByKey(key) {
|
|
33
|
+
return this.data.find((row) => row[KEY] === key);
|
|
34
|
+
}
|
|
35
|
+
isWithinRange(index) {
|
|
36
|
+
return this.range.isWithin(index) && index <= this.rowCount;
|
|
37
|
+
}
|
|
38
|
+
setRange(from, to) {
|
|
39
|
+
if (from !== this.range.from || to !== this.range.to) {
|
|
40
|
+
const [overlapFrom, overlapTo] = this.range.overlap(from, to);
|
|
41
|
+
const newData = new Array(to - from);
|
|
42
|
+
for (let i = overlapFrom; i < overlapTo; i++) {
|
|
43
|
+
const data = this.getAtIndex(i);
|
|
44
|
+
if (data) {
|
|
45
|
+
const index = i - from;
|
|
46
|
+
newData[index] = data;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
this.data = newData;
|
|
50
|
+
this.range.from = from;
|
|
51
|
+
this.range.to = to;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
hasData(from, to) {
|
|
55
|
+
const offset = this.range.from;
|
|
56
|
+
const start = from - offset;
|
|
57
|
+
const end = Math.min(to - offset - 1, this.rowCount - 1);
|
|
58
|
+
return this.data[start] !== void 0 && this.data[end] !== void 0;
|
|
59
|
+
}
|
|
60
|
+
getData(from, to) {
|
|
61
|
+
const { from: clientFrom } = this.range;
|
|
62
|
+
const startOffset = Math.max(0, from - clientFrom);
|
|
63
|
+
const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);
|
|
64
|
+
return this.data.slice(startOffset, endOffset);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { DataWindow };
|
|
69
|
+
//# sourceMappingURL=DataWindow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataWindow.js","sources":["../src/DataWindow.ts"],"sourcesContent":["import { WindowRange } from \"./range-utils\";\nimport { metadataKeys } from \"./column-utils\";\n\nexport type DataItem = string | number | boolean;\nexport type DataRow = [\n /** index */\n number,\n /** render index */\n number,\n /** isLeaf */\n boolean,\n /** isExpanded */\n boolean,\n /** depth */\n number,\n /** child count */\n number,\n /** key */\n string,\n /** selected */\n number,\n /** data values */\n ...DataItem[]\n];\nexport type RangeLike = { from: number; to: number };\n\nconst { KEY } = metadataKeys;\n\n// const log = (message: string) =>\n// console.log(`%c[DataWindow] ${message}`, \"color: purple;font-weight: bold;\");\nexport class DataWindow {\n private range: WindowRange;\n public data: DataRow[];\n public rowCount = 0;\n constructor({ from, to }: RangeLike) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(to - from);\n // window.dataWindow = this.data;\n // log(`constructor initial range ${from} - ${to}`);\n }\n\n setRowCount = (rowCount: number) => {\n // log(`rowCount => ${rowCount}`);\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n this.rowCount = rowCount;\n };\n\n // return true if existing row was updated\n add(data: DataRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n const isUpdate = this.data[internalIndex] !== undefined;\n this.data[internalIndex] = data;\n return isUpdate;\n } else {\n return false;\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n getByKey(key: string) {\n return this.data.find((row) => row[KEY] === key);\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index) && index <= this.rowCount;\n }\n\n setRange(from: number, to: number) {\n // log(`setRange ${from} ${to}`);\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(to - from);\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n hasData(from: number, to: number) {\n const offset = this.range.from;\n const start = from - offset;\n const end = Math.min(to - offset - 1, this.rowCount - 1);\n return this.data[start] !== undefined && this.data[end] !== undefined;\n }\n\n getData(from: number, to: number): any[] {\n const { from: clientFrom } = this.range;\n const startOffset = Math.max(0, from - clientFrom);\n const endOffset = Math.min(to - clientFrom, this.rowCount ?? to);\n return this.data.slice(startOffset, endOffset);\n }\n}\n"],"names":[],"mappings":";;;AA0BA,MAAM,EAAE,KAAQ,GAAA,YAAA,CAAA;AAIT,MAAM,UAAW,CAAA;AAAA,EAItB,WAAY,CAAA,EAAE,IAAM,EAAA,EAAA,EAAiB,EAAA;AADrC,IAAA,IAAA,CAAO,QAAW,GAAA,CAAA,CAAA;AASlB,IAAA,IAAA,CAAA,WAAA,GAAc,CAAC,QAAqB,KAAA;AAElC,MAAI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,MAAS,GAAA,QAAA,CAAA;AAAA,OACrB;AACA,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAAA,KAClB,CAAA;AAbE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAI,WAAY,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAErC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA,CAAA;AAAA,GAGjC;AAAA;AAAA,EAWA,IAAI,IAAe,EAAA;AACjB,IAAM,MAAA,CAAC,KAAK,CAAI,GAAA,IAAA,CAAA;AAChB,IAAI,IAAA,IAAA,CAAK,aAAc,CAAA,KAAK,CAAG,EAAA;AAC7B,MAAM,MAAA,aAAA,GAAgB,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AACzC,MAAA,MAAM,QAAW,GAAA,IAAA,CAAK,IAAK,CAAA,aAAa,CAAM,KAAA,KAAA,CAAA,CAAA;AAC9C,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,CAAI,GAAA,IAAA,CAAA;AAC3B,MAAO,OAAA,QAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACF;AAAA,EAEA,WAAW,KAAe,EAAA;AACxB,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAC9B,IAAA,IAAA,CAAK,KAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,IAAK,OACpC,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CACjC,GAAA,KAAA,CAAA,CAAA;AAAA,GACN;AAAA,EAEA,SAAS,GAAa,EAAA;AACpB,IAAO,OAAA,IAAA,CAAK,KAAK,IAAK,CAAA,CAAC,QAAQ,GAAI,CAAA,GAAG,MAAM,GAAG,CAAA,CAAA;AAAA,GACjD;AAAA,EAEA,cAAc,KAAe,EAAA;AAC3B,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,IAAK,SAAS,IAAK,CAAA,QAAA,CAAA;AAAA,GACrD;AAAA,EAEA,QAAA,CAAS,MAAc,EAAY,EAAA;AAEjC,IAAA,IAAI,SAAS,IAAK,CAAA,KAAA,CAAM,QAAQ,EAAO,KAAA,IAAA,CAAK,MAAM,EAAI,EAAA;AACpD,MAAM,MAAA,CAAC,aAAa,SAAS,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAA;AAC5D,MAAA,MAAM,OAAU,GAAA,IAAI,KAAM,CAAA,EAAA,GAAK,IAAI,CAAA,CAAA;AACnC,MAAA,KAAA,IAAS,CAAI,GAAA,WAAA,EAAa,CAAI,GAAA,SAAA,EAAW,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC9B,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,QAAQ,CAAI,GAAA,IAAA,CAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,IAAA,CAAA;AAAA,SACnB;AAAA,OACF;AACA,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA,CAAA;AACZ,MAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,MAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KAClB;AAAA,GACF;AAAA,EAEA,OAAA,CAAQ,MAAc,EAAY,EAAA;AAChC,IAAM,MAAA,MAAA,GAAS,KAAK,KAAM,CAAA,IAAA,CAAA;AAC1B,IAAA,MAAM,QAAQ,IAAO,GAAA,MAAA,CAAA;AACrB,IAAM,MAAA,GAAA,GAAM,KAAK,GAAI,CAAA,EAAA,GAAK,SAAS,CAAG,EAAA,IAAA,CAAK,WAAW,CAAC,CAAA,CAAA;AACvD,IAAO,OAAA,IAAA,CAAK,KAAK,KAAK,CAAA,KAAM,UAAa,IAAK,CAAA,IAAA,CAAK,GAAG,CAAM,KAAA,KAAA,CAAA,CAAA;AAAA,GAC9D;AAAA,EAEA,OAAA,CAAQ,MAAc,EAAmB,EAAA;AACvC,IAAA,MAAM,EAAE,IAAA,EAAM,UAAW,EAAA,GAAI,IAAK,CAAA,KAAA,CAAA;AAClC,IAAA,MAAM,WAAc,GAAA,IAAA,CAAK,GAAI,CAAA,CAAA,EAAG,OAAO,UAAU,CAAA,CAAA;AACjD,IAAA,MAAM,YAAY,IAAK,CAAA,GAAA,CAAI,KAAK,UAAY,EAAA,IAAA,CAAK,YAAY,EAAE,CAAA,CAAA;AAC/D,IAAA,OAAO,IAAK,CAAA,IAAA,CAAK,KAAM,CAAA,WAAA,EAAa,SAAS,CAAA,CAAA;AAAA,GAC/C;AACF;;;;"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { createContext, useContext, isValidElement, cloneElement } from 'react';
|
|
3
|
+
import cx from 'clsx';
|
|
4
|
+
|
|
5
|
+
const DEFAULT_DENSITY = "medium";
|
|
6
|
+
const DEFAULT_THEME = "salt-theme";
|
|
7
|
+
const DEFAULT_THEME_MODE = "light";
|
|
8
|
+
const ThemeContext = createContext({
|
|
9
|
+
density: "high",
|
|
10
|
+
theme: "vuu",
|
|
11
|
+
themeMode: "light"
|
|
12
|
+
});
|
|
13
|
+
const DEFAULT_THEME_ATTRIBUTES = [
|
|
14
|
+
"vuu",
|
|
15
|
+
"vuu-density-high",
|
|
16
|
+
"light"
|
|
17
|
+
];
|
|
18
|
+
const useThemeAttributes = (themeAttributes) => {
|
|
19
|
+
const context = useContext(ThemeContext);
|
|
20
|
+
if (themeAttributes) {
|
|
21
|
+
return [
|
|
22
|
+
themeAttributes.themeClass,
|
|
23
|
+
themeAttributes.densityClass,
|
|
24
|
+
themeAttributes.dataMode
|
|
25
|
+
];
|
|
26
|
+
} else if (context) {
|
|
27
|
+
return [
|
|
28
|
+
`${context.theme}-theme`,
|
|
29
|
+
`${context.theme}-density-${context.density}`,
|
|
30
|
+
context.themeMode
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
return DEFAULT_THEME_ATTRIBUTES;
|
|
34
|
+
};
|
|
35
|
+
const createThemedChildren = (children, theme, themeMode, density) => {
|
|
36
|
+
if (isValidElement(children)) {
|
|
37
|
+
return cloneElement(children, {
|
|
38
|
+
className: cx(
|
|
39
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
40
|
+
children.props?.className,
|
|
41
|
+
`${theme}-theme`,
|
|
42
|
+
`${theme}-density-${density}`
|
|
43
|
+
),
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
45
|
+
// @ts-expect-error
|
|
46
|
+
"data-mode": themeMode
|
|
47
|
+
});
|
|
48
|
+
} else {
|
|
49
|
+
console.warn(
|
|
50
|
+
`
|
|
51
|
+
ThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.
|
|
52
|
+
Wrap elements with a single container`
|
|
53
|
+
);
|
|
54
|
+
return children;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const ThemeProvider = ({
|
|
58
|
+
applyThemeClasses = false,
|
|
59
|
+
children,
|
|
60
|
+
theme: themeProp,
|
|
61
|
+
themeMode: themeModeProp,
|
|
62
|
+
density: densityProp
|
|
63
|
+
}) => {
|
|
64
|
+
const {
|
|
65
|
+
density: inheritedDensity,
|
|
66
|
+
themeMode: inheritedThemeMode,
|
|
67
|
+
theme: inheritedTheme
|
|
68
|
+
} = useContext(ThemeContext);
|
|
69
|
+
const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;
|
|
70
|
+
const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;
|
|
71
|
+
const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;
|
|
72
|
+
const themedChildren = applyThemeClasses ? createThemedChildren(children, theme, themeMode, density) : children;
|
|
73
|
+
return /* @__PURE__ */ jsx(ThemeContext.Provider, { value: { themeMode, density, theme }, children: themedChildren });
|
|
74
|
+
};
|
|
75
|
+
ThemeProvider.displayName = "ThemeProvider";
|
|
76
|
+
|
|
77
|
+
export { DEFAULT_DENSITY, DEFAULT_THEME, DEFAULT_THEME_MODE, ThemeContext, ThemeProvider, useThemeAttributes };
|
|
78
|
+
//# sourceMappingURL=ThemeProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThemeProvider.js","sources":["../src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"vuu-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `${context.theme}-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `${theme}-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":[],"mappings":";;;;AAUO,MAAM,eAA2B,GAAA,SAAA;AACjC,MAAM,aAAgB,GAAA,aAAA;AACtB,MAAM,kBAAgC,GAAA,QAAA;AAYtC,MAAM,eAAe,aAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA,OAAA;AACb,CAAC,EAAA;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,kBAAA;AAAA,EACA,OAAA;AACF,CAAA,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAU,WAAW,YAAY,CAAA,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA,QAAA;AAAA,KAClB,CAAA;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAG,EAAA,OAAA,CAAQ,KAAK,CAAA,SAAA,EAAY,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC3C,OAAQ,CAAA,SAAA;AAAA,KACV,CAAA;AAAA,GACF;AACA,EAAO,OAAA,wBAAA,CAAA;AACT,EAAA;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAA,cAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAO,aAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAA,EAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,CAAA,EAAG,KAAK,CAAA,SAAA,EAAY,OAAO,CAAA,CAAA;AAAA,OAC7B;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA,SAAA;AAAA,KACd,CAAA,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN,CAAA;AAAA;AAAA,iDAAA,CAAA;AAAA,KAEF,CAAA;AACA,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA,WAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA,cAAA;AAAA,GACT,GAAI,WAAW,YAAY,CAAA,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA,CAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA,CAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA,CAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA,CAAA;AAEJ,EACE,uBAAA,GAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
function partition(array, test, pass = [], fail = []) {
|
|
2
|
+
for (let i = 0, len = array.length; i < len; i++) {
|
|
3
|
+
(test(array[i], i) ? pass : fail).push(array[i]);
|
|
4
|
+
}
|
|
5
|
+
return [pass, fail];
|
|
6
|
+
}
|
|
7
|
+
function itemsChanged(currentItems, newItems, identityProperty) {
|
|
8
|
+
if (currentItems.length !== newItems.length) {
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
if (identityProperty === void 0) {
|
|
12
|
+
return !currentItems.every((item) => newItems.includes(item));
|
|
13
|
+
} else {
|
|
14
|
+
return currentItems.some(
|
|
15
|
+
(currentItem) => newItems.findIndex(
|
|
16
|
+
(newItem) => newItem[identityProperty] === currentItem[identityProperty]
|
|
17
|
+
) === -1
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function itemsOrOrderChanged(currentItems, newItems, identityProperty) {
|
|
22
|
+
if (currentItems.length !== newItems.length) {
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
25
|
+
if (identityProperty === void 0) {
|
|
26
|
+
return currentItems.some((item, index) => newItems[index] !== item);
|
|
27
|
+
} else {
|
|
28
|
+
return currentItems.some(
|
|
29
|
+
(currentItem, index) => newItems[index][identityProperty] !== currentItem[identityProperty]
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const moveItemDeprecated = (items, item, moveTo) => {
|
|
34
|
+
const fromIndex = items.indexOf(item);
|
|
35
|
+
if (fromIndex === moveTo) {
|
|
36
|
+
return items;
|
|
37
|
+
}
|
|
38
|
+
const newItems = items.slice();
|
|
39
|
+
if (fromIndex === -1) {
|
|
40
|
+
throw Error("moveItem, item to be moved not found");
|
|
41
|
+
}
|
|
42
|
+
newItems.splice(fromIndex, 1);
|
|
43
|
+
if (moveTo === -1) {
|
|
44
|
+
newItems.push(item);
|
|
45
|
+
} else {
|
|
46
|
+
const offset = moveTo > fromIndex ? 0 : 0;
|
|
47
|
+
newItems.splice(moveTo + offset, 0, item);
|
|
48
|
+
}
|
|
49
|
+
return newItems;
|
|
50
|
+
};
|
|
51
|
+
const moveItem = (items, fromIndex, toIndex) => {
|
|
52
|
+
if (fromIndex === toIndex) {
|
|
53
|
+
return items;
|
|
54
|
+
} else {
|
|
55
|
+
const newItems = items.slice();
|
|
56
|
+
const [item] = newItems.splice(fromIndex, 1);
|
|
57
|
+
if (toIndex === -1) {
|
|
58
|
+
return newItems.concat(item);
|
|
59
|
+
} else {
|
|
60
|
+
const offset = toIndex > fromIndex ? 0 : 0;
|
|
61
|
+
newItems.splice(toIndex + offset, 0, item);
|
|
62
|
+
return newItems;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const getAddedItems = (values, newValues) => {
|
|
67
|
+
const isNew = (v) => !values?.includes(v);
|
|
68
|
+
if (values === void 0) {
|
|
69
|
+
return newValues;
|
|
70
|
+
} else if (newValues.some(isNew)) {
|
|
71
|
+
return newValues.filter(isNew);
|
|
72
|
+
} else {
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const getMissingItems = (sourceItems, items, identity) => items.filter((i) => sourceItems.findIndex((s) => identity(s) === i) === -1);
|
|
77
|
+
|
|
78
|
+
export { getAddedItems, getMissingItems, itemsChanged, itemsOrOrderChanged, moveItem, moveItemDeprecated, partition };
|
|
79
|
+
//# sourceMappingURL=array-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"array-utils.js","sources":["../src/array-utils.ts"],"sourcesContent":["export type PartitionTest<T> = (value: T, index: number) => boolean;\n\nexport function partition<T>(\n array: T[],\n test: PartitionTest<T>,\n pass: T[] = [],\n fail: T[] = []\n): [T[], T[]] {\n for (let i = 0, len = array.length; i < len; i++) {\n (test(array[i], i) ? pass : fail).push(array[i]);\n }\n return [pass, fail];\n}\n\n// Note order of items can be different between arrays\n// If an identityProperty is not defined, item identity is used\nexport function itemsChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return !currentItems.every((item) => newItems.includes(item));\n } else {\n return currentItems.some(\n (currentItem) =>\n newItems.findIndex(\n (newItem) =>\n (newItem as { [key: string]: unknown })[identityProperty] ===\n (currentItem as { [key: string]: unknown })[identityProperty]\n ) === -1\n );\n }\n}\n\nexport function itemsOrOrderChanged<T = unknown>(\n currentItems: T[],\n newItems: T[],\n identityProperty?: string\n) {\n if (currentItems.length !== newItems.length) {\n return true;\n }\n if (identityProperty === undefined) {\n return currentItems.some((item, index) => newItems[index] !== item);\n } else {\n return currentItems.some(\n (currentItem, index) =>\n (newItems[index] as { [key: string]: unknown })[identityProperty] !==\n (currentItem as { [key: string]: unknown })[identityProperty]\n );\n }\n}\n\nexport const moveItemDeprecated = <T = unknown>(\n items: T[],\n item: T,\n moveTo: number\n): T[] => {\n const fromIndex = items.indexOf(item);\n if (fromIndex === moveTo) {\n return items;\n }\n const newItems = items.slice();\n if (fromIndex === -1) {\n throw Error(\"moveItem, item to be moved not found\");\n }\n newItems.splice(fromIndex, 1);\n if (moveTo === -1) {\n newItems.push(item);\n } else {\n const offset = moveTo > fromIndex ? 0 : 0;\n newItems.splice(moveTo + offset, 0, item);\n }\n return newItems;\n};\n\nexport const moveItem = <T = unknown>(\n items: T[],\n fromIndex: number,\n toIndex: number\n): T[] => {\n if (fromIndex === toIndex) {\n return items;\n } else {\n const newItems = items.slice();\n const [item] = newItems.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newItems.concat(item);\n } else {\n const offset = toIndex > fromIndex ? 0 : 0;\n newItems.splice(toIndex + offset, 0, item);\n return newItems;\n }\n }\n};\n\nexport const getAddedItems = <T>(values: undefined | T[], newValues: T[]) => {\n const isNew = (v: T) => !values?.includes(v);\n if (values === undefined) {\n return newValues;\n } else if (newValues.some(isNew)) {\n return newValues.filter(isNew);\n } else {\n return [] as T[];\n }\n};\n\nexport const getMissingItems = <T, I>(\n sourceItems: T[],\n items: I[],\n identity: (s: T) => I\n) =>\n items.filter((i) => sourceItems.findIndex((s) => identity(s) === i) === -1);\n"],"names":[],"mappings":"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"}
|
package/esm/box-utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box-utils.js","sources":["../src/box-utils.ts"],"sourcesContent":["export interface rect {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\nexport type rectTuple = [number, number, number, number];\n\nexport type dimension = \"width\" | \"height\";\n\nexport function boxContainsPoint(rect: rect, x: number, y: number) {\n if (rect) {\n return x >= rect.left && x < rect.right && y >= rect.top && y < rect.bottom;\n }\n}\n"],"names":[],"mappings":"AAUgB,SAAA,gBAAA,CAAiB,IAAY,EAAA,CAAA,EAAW,CAAW,EAAA;AACjE,EAAA,IAAI,IAAM,EAAA;AACR,IAAO,OAAA,CAAA,IAAK,IAAK,CAAA,IAAA,IAAQ,CAAI,GAAA,IAAA,CAAK,SAAS,CAAK,IAAA,IAAA,CAAK,GAAO,IAAA,CAAA,GAAI,IAAK,CAAA,MAAA,CAAA;AAAA,GACvE;AACF;;;;"}
|