@pega/cosmos-react-core 8.0.0-build.1.0 → 8.0.0-build.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,67 @@
1
- import type { MenuProps, MenuObjectProps, MenuItemProps, MenuGroupProps } from './Menu.types';
1
+ import type { MenuProps } from './Menu.types';
2
+ type BasicItemOrGroup = {
3
+ id: unknown;
4
+ primary?: unknown;
5
+ items?: {
6
+ id: unknown;
7
+ primary?: unknown;
8
+ }[] | undefined;
9
+ };
10
+ type BasicSelectable = {
11
+ id: unknown;
12
+ primary?: unknown;
13
+ selected?: boolean | undefined;
14
+ items?: {
15
+ id: unknown;
16
+ primary?: unknown;
17
+ selected?: boolean | undefined;
18
+ }[] | undefined;
19
+ };
20
+ type ExtractItem<T> = Extract<T, {
21
+ primary: unknown;
22
+ }>;
23
+ type GenericItemOrGroup<T> = T | (T extends {
24
+ items?: (infer U)[] | undefined;
25
+ } ? U extends {
26
+ id: unknown;
27
+ } ? U : never : never);
28
+ type GenericItem<T> = ExtractItem<T> | ExtractItem<GenericItemOrGroup<T>>;
29
+ type PickId<T extends {
30
+ id: unknown;
31
+ }> = [T] extends [never] ? unknown : GenericItemOrGroup<T>['id'];
2
32
  declare const helpers: {
3
- isItem(item: MenuItemProps | MenuGroupProps): item is MenuItemProps;
4
- getItem(items: MenuProps['items'], id: MenuObjectProps['id']): MenuItemProps | undefined;
5
- getPath(items: MenuProps['items'], id: MenuObjectProps['id']): MenuProps['items'];
6
- setItem(items: MenuProps['items'], id: MenuItemProps['id'], newItem: MenuItemProps): MenuProps['items'];
7
- mapItem(items: MenuProps['items'], id: MenuItemProps['id'], fn: (item: MenuItemProps, index: number, array: MenuProps['items']) => MenuItemProps): MenuProps['items'];
8
- mapTree(items: MenuProps['items'], fn: (item: MenuItemProps, index: number, array: MenuProps['items']) => MenuItemProps): MenuProps['items'];
9
- flatten(items: (MenuItemProps | MenuGroupProps)[], ancestors?: (MenuItemProps | MenuGroupProps)[], options?: {
33
+ isItem<T extends object>(item: T): item is Extract<T, {
34
+ primary: unknown;
35
+ }>;
36
+ getItem<T_1 extends BasicItemOrGroup>(items: T_1[], id: PickId<T_1>): GenericItem<T_1> | undefined;
37
+ getPath<T_2 extends BasicItemOrGroup>(items: T_2[], id: PickId<T_2>): GenericItemOrGroup<T_2>[];
38
+ setItem<T_3 extends BasicItemOrGroup>(items: T_3[], id: PickId<T_3>, newItem: GenericItemOrGroup<T_3>): T_3[];
39
+ mapItem<T_4 extends BasicItemOrGroup>(items: T_4[], id: PickId<T_4>, fn: (item: Extract<T_4, {
40
+ primary: unknown;
41
+ }>, index: number, array: T_4[]) => Extract<T_4, {
42
+ primary: unknown;
43
+ }>): T_4[];
44
+ mapTree<T_5 extends BasicItemOrGroup>(items: T_5[], fn: (item: Extract<T_5, {
45
+ primary: unknown;
46
+ }>, index: number, array: T_5[]) => Extract<T_5, {
47
+ primary: unknown;
48
+ }>): GenericItemOrGroup<T_5>[];
49
+ flatten<T_6 extends BasicItemOrGroup>(items: T_6[], ancestors?: GenericItemOrGroup<T_6>[], options?: {
10
50
  parentFirst?: boolean;
11
- }): MenuItemProps[];
12
- toggleSelected(items: MenuProps['items'], id: MenuItemProps['id'], mode?: MenuProps['mode'], bool?: boolean): MenuProps['items'];
13
- selectItem(items: MenuProps['items'], id: MenuItemProps['id'], mode?: MenuProps['mode']): MenuProps['items'];
14
- deselectItem(items: MenuProps['items'], id: MenuItemProps['id'], mode?: MenuProps['mode']): MenuProps['items'];
15
- getSelected(items: MenuProps['items']): MenuItemProps[];
16
- prependTo(items: MenuProps['items'], newItems: MenuProps['items'], id?: MenuObjectProps['id']): MenuProps['items'];
17
- appendTo(items: MenuProps['items'], newItems: MenuProps['items'], id?: MenuObjectProps['id']): MenuProps['items'];
18
- getNextItem(items: MenuProps['items'], itemId?: MenuObjectProps['id']): MenuItemProps | MenuGroupProps | undefined;
19
- getPrevItem(items: MenuProps['items'], itemId?: MenuObjectProps['id']): MenuItemProps | MenuGroupProps | undefined;
20
- getParentItem(items: MenuProps['items'], itemId?: MenuItemProps['id']): MenuItemProps | MenuGroupProps | undefined;
51
+ }): Extract<T_6, {
52
+ primary: unknown;
53
+ }>[];
54
+ toggleSelected<T_7 extends BasicSelectable>(items: T_7[], id: PickId<T_7>, mode?: MenuProps['mode'], bool?: boolean): T_7[];
55
+ selectItem<T_8 extends BasicSelectable>(items: T_8[], id: PickId<T_8>, mode?: MenuProps['mode']): T_8[];
56
+ deselectItem<T_9 extends BasicSelectable>(items: T_9[], id: PickId<T_9>, mode?: MenuProps['mode']): T_9[];
57
+ getSelected<T_10 extends BasicSelectable>(items: T_10[]): Extract<T_10, {
58
+ primary: unknown;
59
+ }>[];
60
+ prependTo<T_11 extends BasicItemOrGroup>(items: T_11[], newItems: GenericItemOrGroup<T_11>[], id?: PickId<T_11> | undefined): GenericItemOrGroup<T_11>[];
61
+ appendTo<T_12 extends BasicItemOrGroup>(items: T_12[], newItems: GenericItemOrGroup<T_12>[], id?: PickId<T_12> | undefined): GenericItemOrGroup<T_12>[];
62
+ getNextItem<T_13 extends BasicItemOrGroup>(items: T_13[], itemId?: PickId<T_13> | undefined): GenericItemOrGroup<T_13> | undefined;
63
+ getPrevItem<T_14 extends BasicItemOrGroup>(items: T_14[], itemId?: PickId<T_14> | undefined): GenericItemOrGroup<T_14> | undefined;
64
+ getParentItem<T_15 extends BasicItemOrGroup>(items: T_15[], itemId?: PickId<T_15> | undefined): GenericItemOrGroup<T_15> | undefined;
21
65
  };
22
66
  export default helpers;
23
67
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9F,QAAA,MAAM,OAAO;iBACE,aAAa,GAAG,cAAc;mBAI5B,SAAS,CAAC,OAAO,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,SAAS;mBAmBzE,SAAS,CAAC,OAAO,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC;mBAqBxE,SAAS,CAAC,OAAO,CAAC,MACrB,aAAa,CAAC,IAAI,CAAC,WACd,aAAa,GACrB,SAAS,CAAC,OAAO,CAAC;mBAgBZ,SAAS,CAAC,OAAO,CAAC,MACrB,aAAa,CAAC,IAAI,CAAC,aACZ,aAAa,SAAS,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,KAAK,aAAa,GACnF,SAAS,CAAC,OAAO,CAAC;mBAoBZ,SAAS,CAAC,OAAO,CAAC,aACd,aAAa,SAAS,MAAM,SAAS,SAAS,CAAC,OAAO,CAAC,KAAK,aAAa,GACnF,SAAS,CAAC,OAAO,CAAC;mBAgBZ,CAAC,aAAa,GAAG,cAAc,CAAC,EAAE,cAC9B,CAAC,aAAa,GAAG,cAAc,CAAC,EAAE,YACpC;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,aAAa,EAAE;0BAwBT,SAAS,CAAC,OAAO,CAAC,MACrB,aAAa,CAAC,IAAI,CAAC,SAChB,SAAS,CAAC,MAAM,CAAC,SACjB,OAAO,GACb,SAAS,CAAC,OAAO,CAAC;sBAuBZ,SAAS,CAAC,OAAO,CAAC,MACrB,aAAa,CAAC,IAAI,CAAC,SAChB,SAAS,CAAC,MAAM,CAAC,GACvB,SAAS,CAAC,OAAO,CAAC;wBAKZ,SAAS,CAAC,OAAO,CAAC,MACrB,aAAa,CAAC,IAAI,CAAC,SAChB,SAAS,CAAC,MAAM,CAAC,GACvB,SAAS,CAAC,OAAO,CAAC;uBAIF,SAAS,CAAC,OAAO,CAAC,GAAG,aAAa,EAAE;qBAc9C,SAAS,CAAC,OAAO,CAAC,YACf,SAAS,CAAC,OAAO,CAAC,OACvB,eAAe,CAAC,IAAI,CAAC,GACzB,SAAS,CAAC,OAAO,CAAC;oBAWZ,SAAS,CAAC,OAAO,CAAC,YACf,SAAS,CAAC,OAAO,CAAC,OACvB,eAAe,CAAC,IAAI,CAAC,GACzB,SAAS,CAAC,OAAO,CAAC;uBAWZ,SAAS,CAAC,OAAO,CAAC,WAChB,eAAe,CAAC,IAAI,CAAC,GAC7B,aAAa,GAAG,cAAc,GAAG,SAAS;uBAWpC,SAAS,CAAC,OAAO,CAAC,WAChB,eAAe,CAAC,IAAI,CAAC,GAC7B,aAAa,GAAG,cAAc,GAAG,SAAS;yBAWpC,SAAS,CAAC,OAAO,CAAC,WAChB,aAAa,CAAC,IAAI,CAAC,GAC3B,aAAa,GAAG,cAAc,GAAG,SAAS;CAK9C,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/components/Menu/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,KAAK,gBAAgB,GAAG;IACtB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,GAAG,SAAS,CAAC;CAC1D,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,EAAE,GAAG,SAAS,CAAC;CAC1F,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAEvD,KAAK,kBAAkB,CAAC,CAAC,IACrB,CAAC,GACD,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,SAAS,CAAA;CAAE,GAC1C,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACvB,CAAC,GACD,KAAK,GACP,KAAK,CAAC,CAAC;AAEf,KAAK,WAAW,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1E,KAAK,MAAM,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GACxD,OAAO,GACP,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAEhC,QAAA,MAAM,OAAO;;iBAhB+B,OAAO;;;;;;iBAAP,OAAO;eAkFb,MAAM;iBAlFA,OAAO;;;iBAAP,OAAO;eAwGb,MAAM;iBAxGA,OAAO;;yGA2HtC;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE;iBA3HM,OAAO;;sFAsJxC,SAAS,CAAC,MAAM,CAAC,SACjB,OAAO;kFAuBwD,SAAS,CAAC,MAAM,CAAC;oFAOhF,SAAS,CAAC,MAAM,CAAC;;iBArLgB,OAAO;;;;;;;CAqQlD,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -36,7 +36,7 @@ const helpers = {
36
36
  return path;
37
37
  },
38
38
  setItem(items, id, newItem) {
39
- return items.map((item) => {
39
+ return items.map(item => {
40
40
  if (item.id === id)
41
41
  return { ...newItem };
42
42
  if (item.items) {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/Menu/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasProp } from '../../utils';\n\nimport type { MenuProps, MenuObjectProps, MenuItemProps, MenuGroupProps } from './Menu.types';\n\nconst helpers = {\n isItem(item: MenuItemProps | MenuGroupProps): item is MenuItemProps {\n return hasProp(item, 'primary');\n },\n\n getItem(items: MenuProps['items'], id: MenuObjectProps['id']): MenuItemProps | undefined {\n let found: MenuItemProps | undefined;\n items.some(item => {\n if (this.isItem(item) && item.id === id) {\n found = item;\n return true;\n }\n\n if (item.items) {\n found = this.getItem(item.items, id);\n return !!found;\n }\n\n return false;\n });\n\n return found;\n },\n\n getPath(items: MenuProps['items'], id: MenuObjectProps['id']): MenuProps['items'] {\n let path: (MenuItemProps | MenuGroupProps)[] = [];\n items.some(item => {\n if (item.id === id) {\n path = [item];\n return true;\n }\n\n if (item.items) {\n const innerPath = this.getPath(item.items, id);\n if (innerPath.length) path = innerPath.concat(item);\n return !!path.length;\n }\n\n return false;\n });\n\n return path;\n },\n\n setItem(\n items: MenuProps['items'],\n id: MenuItemProps['id'],\n newItem: MenuItemProps\n ): MenuProps['items'] {\n return items.map((item: MenuItemProps | MenuGroupProps) => {\n if (item.id === id) return { ...newItem };\n\n if (item.items) {\n return {\n ...item,\n items: this.setItem(item.items, id, newItem) as MenuItemProps[]\n };\n }\n\n return item;\n });\n },\n\n mapItem(\n items: MenuProps['items'],\n id: MenuItemProps['id'],\n fn: (item: MenuItemProps, index: number, array: MenuProps['items']) => MenuItemProps\n ): MenuProps['items'] {\n return items.map((item, index, array) => {\n let newItem = item;\n\n if (item.items) {\n newItem = {\n ...newItem,\n items: this.mapItem(item.items, id, fn) as MenuItemProps[]\n };\n }\n\n if (this.isItem(newItem) && item.id === id) {\n newItem = fn(newItem, index, array);\n }\n\n return newItem;\n });\n },\n\n mapTree(\n items: MenuProps['items'],\n fn: (item: MenuItemProps, index: number, array: MenuProps['items']) => MenuItemProps\n ): MenuProps['items'] {\n return items.map((item, index, array) => {\n let newItem = item;\n\n if (item.items) {\n newItem = {\n ...newItem,\n items: this.mapTree(item.items, fn) as MenuItemProps[]\n };\n }\n\n return this.isItem(newItem) ? fn(newItem, index, array) : newItem;\n });\n },\n\n flatten(\n items: (MenuItemProps | MenuGroupProps)[],\n ancestors: (MenuItemProps | MenuGroupProps)[] = [],\n options: { parentFirst?: boolean } = { parentFirst: false }\n ): MenuItemProps[] {\n let allItems: MenuItemProps[] = [];\n let leafItems: MenuItemProps[] = [];\n\n items.forEach(item => {\n if (this.isItem(item)) {\n allItems.push(ancestors.length > 0 ? { ...item, ancestors } : item);\n }\n\n if (item.items) {\n const children = this.flatten(item.items, [...ancestors, item], options);\n\n if (options.parentFirst) {\n leafItems = [...leafItems, ...children];\n } else {\n allItems = [...allItems, ...children];\n }\n }\n });\n\n return options.parentFirst ? [...allItems, ...leafItems] : allItems;\n },\n\n toggleSelected(\n items: MenuProps['items'],\n id: MenuItemProps['id'],\n mode?: MenuProps['mode'],\n bool?: boolean\n ): MenuProps['items'] {\n return this.mapTree(items, item => {\n if (this.isItem(item)) {\n if (item.id === id) {\n return {\n ...item,\n selected: bool !== undefined ? bool : !item.selected\n };\n }\n\n if (mode === 'single-select') {\n return {\n ...item,\n selected: false\n };\n }\n }\n\n return item;\n });\n },\n\n selectItem(\n items: MenuProps['items'],\n id: MenuItemProps['id'],\n mode?: MenuProps['mode']\n ): MenuProps['items'] {\n return this.toggleSelected(items, id, mode, true);\n },\n\n deselectItem(\n items: MenuProps['items'],\n id: MenuItemProps['id'],\n mode?: MenuProps['mode']\n ): MenuProps['items'] {\n return this.toggleSelected(items, id, mode, false);\n },\n\n getSelected(items: MenuProps['items']): MenuItemProps[] {\n return items.reduce<MenuItemProps[]>((selections, item) => {\n if (this.isItem(item) && item.selected) {\n selections = [...selections, item];\n }\n\n if (item.items) {\n selections = [...selections, ...this.getSelected(item.items)];\n }\n return selections;\n }, []);\n },\n\n prependTo(\n items: MenuProps['items'],\n newItems: MenuProps['items'],\n id?: MenuObjectProps['id']\n ): MenuProps['items'] {\n if (id) {\n return this.mapItem(items, id, item => ({\n ...item,\n items: [...newItems, ...(item.items ?? [])]\n }));\n }\n return [...newItems, ...items];\n },\n\n appendTo(\n items: MenuProps['items'],\n newItems: MenuProps['items'],\n id?: MenuObjectProps['id']\n ): MenuProps['items'] {\n if (id) {\n return this.mapItem(items, id, item => ({\n ...item,\n items: [...(item.items ?? []), ...newItems]\n }));\n }\n return [...items, ...newItems];\n },\n\n getNextItem(\n items: MenuProps['items'],\n itemId?: MenuObjectProps['id']\n ): MenuItemProps | MenuGroupProps | undefined {\n if (!itemId) return items[0];\n let nextItem: MenuItemProps | MenuGroupProps | undefined;\n this.mapItem(items, itemId, (item, index, list) => {\n nextItem = list[index + 1];\n return item;\n });\n return nextItem;\n },\n\n getPrevItem(\n items: MenuProps['items'],\n itemId?: MenuObjectProps['id']\n ): MenuItemProps | MenuGroupProps | undefined {\n if (!itemId) return items[0];\n let prevItem: MenuItemProps | MenuGroupProps | undefined;\n this.mapItem(items, itemId, (item, index, list) => {\n prevItem = list[index - 1];\n return item;\n });\n return prevItem;\n },\n\n getParentItem(\n items: MenuProps['items'],\n itemId?: MenuItemProps['id']\n ): MenuItemProps | MenuGroupProps | undefined {\n if (!itemId) return undefined;\n const [, parentItem] = this.getPath(items, itemId);\n return parentItem;\n }\n};\n\nexport default helpers;\n"]}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/components/Menu/helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { hasProp } from '../../utils';\n\nimport type { MenuProps } from './Menu.types';\n\ntype BasicItemOrGroup = {\n id: unknown;\n primary?: unknown;\n items?: { id: unknown; primary?: unknown }[] | undefined;\n};\n\ntype BasicSelectable = {\n id: unknown;\n primary?: unknown;\n selected?: boolean | undefined;\n items?: { id: unknown; primary?: unknown; selected?: boolean | undefined }[] | undefined;\n};\n\ntype ExtractItem<T> = Extract<T, { primary: unknown }>;\n\ntype GenericItemOrGroup<T> =\n | T\n | (T extends { items?: (infer U)[] | undefined }\n ? U extends { id: unknown }\n ? U\n : never\n : never);\n\ntype GenericItem<T> = ExtractItem<T> | ExtractItem<GenericItemOrGroup<T>>;\n\ntype PickId<T extends { id: unknown }> = [T] extends [never]\n ? unknown\n : GenericItemOrGroup<T>['id'];\n\nconst helpers = {\n isItem<T extends object>(item: T): item is ExtractItem<T> {\n return hasProp(item, 'primary');\n },\n\n getItem<T extends BasicItemOrGroup>(items: T[], id: PickId<T>): GenericItem<T> | undefined {\n let found: GenericItem<T> | undefined;\n items.some(item => {\n if (this.isItem(item) && item.id === id) {\n found = item;\n return true;\n }\n\n if (item.items) {\n found = this.getItem(item.items, id);\n return !!found;\n }\n\n return false;\n });\n\n return found;\n },\n\n getPath<T extends BasicItemOrGroup>(items: T[], id: PickId<T>): GenericItemOrGroup<T>[] {\n let path: GenericItemOrGroup<T>[] = [];\n items.some(item => {\n if (item.id === id) {\n path = [item];\n return true;\n }\n\n if (item.items) {\n const innerPath = this.getPath(item.items as GenericItemOrGroup<T>[], id);\n if (innerPath.length) path = innerPath.concat(item);\n return !!path.length;\n }\n\n return false;\n });\n\n return path;\n },\n\n setItem<T extends BasicItemOrGroup>(\n items: T[],\n id: PickId<T>,\n newItem: GenericItemOrGroup<T>\n ): T[] {\n return items.map(item => {\n if (item.id === id) return { ...newItem };\n\n if (item.items) {\n return {\n ...item,\n items: this.setItem(item.items, id, newItem)\n };\n }\n\n return item;\n });\n },\n\n mapItem<T extends BasicItemOrGroup>(\n items: T[],\n id: PickId<T>,\n fn: (item: ExtractItem<T>, index: number, array: T[]) => ExtractItem<T>\n ): T[] {\n return items.map((item, index, array) => {\n let newItem = item;\n\n if (item.items) {\n newItem = {\n ...newItem,\n items: this.mapItem(item.items as GenericItemOrGroup<T>[], id, fn)\n };\n }\n\n if (this.isItem(newItem) && item.id === id) {\n newItem = fn(newItem, index, array);\n }\n\n return newItem;\n });\n },\n\n mapTree<T extends BasicItemOrGroup>(\n items: T[],\n fn: (item: ExtractItem<T>, index: number, array: T[]) => ExtractItem<T>\n ): GenericItemOrGroup<T>[] {\n return items.map((item, index, array) => {\n let newItem = item;\n\n if (item.items) {\n newItem = {\n ...newItem,\n items: this.mapTree(item.items as GenericItemOrGroup<T>[], fn)\n };\n }\n\n return this.isItem(newItem) ? fn(newItem, index, array) : newItem;\n });\n },\n\n flatten<T extends BasicItemOrGroup>(\n items: T[],\n ancestors: GenericItemOrGroup<T>[] = [],\n options: { parentFirst?: boolean } = { parentFirst: false }\n ): ExtractItem<T>[] {\n let allItems: ExtractItem<T>[] = [];\n let leafItems: ExtractItem<T>[] = [];\n\n items.forEach(item => {\n if (this.isItem(item)) {\n allItems.push(ancestors.length > 0 ? { ...item, ancestors } : item);\n }\n\n if (item.items) {\n const children = this.flatten(item.items, [...ancestors, item], options);\n\n if (options.parentFirst) {\n leafItems = [...leafItems, ...children];\n } else {\n allItems = [...allItems, ...children];\n }\n }\n });\n\n return options.parentFirst ? [...allItems, ...leafItems] : allItems;\n },\n\n toggleSelected<T extends BasicSelectable>(\n items: T[],\n id: PickId<T>,\n mode?: MenuProps['mode'],\n bool?: boolean\n ): T[] {\n return this.mapTree(items, item => {\n if (this.isItem(item)) {\n if (item.id === id) {\n return {\n ...item,\n selected: bool !== undefined ? bool : !item.selected\n };\n }\n\n if (mode === 'single-select') {\n return {\n ...item,\n selected: false\n };\n }\n }\n\n return item;\n });\n },\n\n selectItem<T extends BasicSelectable>(items: T[], id: PickId<T>, mode?: MenuProps['mode']): T[] {\n return this.toggleSelected(items, id, mode, true);\n },\n\n deselectItem<T extends BasicSelectable>(\n items: T[],\n id: PickId<T>,\n mode?: MenuProps['mode']\n ): T[] {\n return this.toggleSelected(items, id, mode, false);\n },\n\n getSelected<T extends BasicSelectable>(items: T[]): ExtractItem<T>[] {\n return items.reduce<ExtractItem<T>[]>((selections, item) => {\n if (this.isItem(item) && item.selected) {\n selections = [...selections, item];\n }\n\n if (item.items) {\n selections = [...selections, ...this.getSelected(item.items)];\n }\n return selections;\n }, []);\n },\n\n prependTo<T extends BasicItemOrGroup>(\n items: T[],\n newItems: GenericItemOrGroup<T>[],\n id?: PickId<T>\n ): GenericItemOrGroup<T>[] {\n if (id) {\n return this.mapItem(items, id, item => ({\n ...item,\n items: [...newItems, ...(item.items ?? [])]\n }));\n }\n return [...newItems, ...items];\n },\n\n appendTo<T extends BasicItemOrGroup>(\n items: T[],\n newItems: GenericItemOrGroup<T>[],\n id?: PickId<T>\n ): GenericItemOrGroup<T>[] {\n if (id) {\n return this.mapItem(items, id, item => ({\n ...item,\n items: [...(item.items ?? []), ...newItems]\n }));\n }\n return [...items, ...newItems];\n },\n\n getNextItem<T extends BasicItemOrGroup>(\n items: T[],\n itemId?: PickId<T>\n ): GenericItemOrGroup<T> | undefined {\n if (!itemId) return items[0];\n let nextItem: GenericItemOrGroup<T> | undefined;\n this.mapItem(items, itemId, (item, index, list) => {\n nextItem = list[index + 1];\n return item;\n });\n return nextItem;\n },\n\n getPrevItem<T extends BasicItemOrGroup>(\n items: T[],\n itemId?: PickId<T>\n ): GenericItemOrGroup<T> | undefined {\n if (!itemId) return items[0];\n let prevItem: GenericItemOrGroup<T> | undefined;\n this.mapItem(items, itemId, (item, index, list) => {\n prevItem = list[index - 1];\n return item;\n });\n return prevItem;\n },\n\n getParentItem<T extends BasicItemOrGroup>(\n items: T[],\n itemId?: PickId<T>\n ): GenericItemOrGroup<T> | undefined {\n if (!itemId) return undefined;\n const [, parentItem] = this.getPath(items, itemId);\n return parentItem;\n }\n};\n\nexport default helpers;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pega/cosmos-react-core",
3
- "version": "8.0.0-build.1.0",
3
+ "version": "8.0.0-build.2.0",
4
4
  "description": "Cosmos is a visual design system and UI component collection. Its goal is to empower application developers in their pursuit to create engaging and rewarding user experiences.",
5
5
  "repository": {
6
6
  "type": "git",