@neovici/cosmoz-queue 3.4.1 → 3.6.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.
package/README.md CHANGED
@@ -70,7 +70,7 @@ customElements.define('order-list-queue', component(OrderListQueue));
70
70
  | Prop | Type | Default | Description |
71
71
  | -------------- | --------------------------------- | -------- | ---------------------------------------------------------------------- |
72
72
  | `heading` | `string` | -- | Title displayed above the tabs |
73
- | `settingsId` | `string?` | -- | Key for persisting omnitable column settings |
73
+ | `settingsId` | `string?` | -- | Key for persisting omnitable settings and the picked tab |
74
74
  | `idHashParam` | `string` | `'qid'` | URL hash param for the selected item ID |
75
75
  | `tabHashParam` | `string` | `'qtab'` | URL hash param for the active tab |
76
76
  | `details` | `(item: I) => PromiseLike<D>` | -- | Fetches full details for a list item |
@@ -79,8 +79,8 @@ customElements.define('order-list-queue', component(OrderListQueue));
79
79
  | `view` | `(thru, props) => TemplateResult` | -- | Renders the detail view |
80
80
  | `loader` | `(thru, props) => TemplateResult` | -- | Renders the loading skeleton |
81
81
  | `pagination` | `Pagination?` | -- | Server-side pagination config |
82
- | `fallback` | `string?` | -- | Default tab when none is set in URL hash |
83
- | `split` | `SplitOpts?` | -- | Split.js configuration (sizes, min sizes) |
82
+ | `fallback` | `string?` | -- | Opening tab when the hash names none and no pick is remembered |
83
+ | `split` | `SplitOpts?` | -- | Split.js configuration (sizes; `minSize`: minimum width per pane) |
84
84
  | `afterHeading` | `unknown?` | -- | Extra content rendered after the heading |
85
85
 
86
86
  Use **`details`** when you control the fetch (most common). Use **`api`** when you want the queue to handle fetching via URL.
@@ -400,6 +400,7 @@ const MyQueue = ({ heading }: { heading: string }) => {
400
400
  | Hook | Import | Purpose |
401
401
  | ------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------- |
402
402
  | `useTabs({ items, hashParam, mobile, fallback })` | `@neovici/cosmoz-queue` | Manages overview/split/queue tabs. Returns `{ tabnav, activeTab }`. |
403
+ | `useTabsPref({ persistKey, ...opts })` | `@neovici/cosmoz-queue` | Remembers the tab picked for `useTabs`; spread its result into the `useTabs` options. |
403
404
  | `useDataNav(items, opts)` | `@neovici/cosmoz-queue` | Item navigation with prev/next, URL hash sync. Returns `{ item, setItem, next, prev, forward, index }`. |
404
405
  | `useSplit({ activeTab, ...splitOpts })` | `@neovici/cosmoz-queue` | Initializes Split.js when in split mode. |
405
406
  | `useListState()` | `@neovici/cosmoz-queue` | Creates `items`, `selected`, `totalAvailable` state with setters. |
@@ -1,4 +1,4 @@
1
1
  export declare const list: import("lit-html").TemplateResult<1>;
2
- export declare const queue: import("lit-html").TemplateResult<1>;
3
2
  export declare const split: import("lit-html").TemplateResult<1>;
3
+ export declare const queue: import("lit-html").TemplateResult<1>;
4
4
  //# sourceMappingURL=icons.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/queue/icons.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,IAAI,sCAcV,CAAC;AAER,eAAO,MAAM,KAAK,sCAgBjB,CAAC;AAEF,eAAO,MAAM,KAAK,sCA2BjB,CAAC"}
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/queue/icons.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,IAAI,sCAAiB,CAAC;AACnC,eAAO,MAAM,KAAK,sCAAsB,CAAC;AACzC,eAAO,MAAM,KAAK,sCAAmB,CAAC"}
@@ -1,61 +1,5 @@
1
- import { html } from 'lit-html';
2
- export const list = html ` <svg
3
- width="18"
4
- height="14"
5
- viewBox="0 0 18 14"
6
- fill="none"
7
- stroke="currentColor"
8
- xmlns="http://www.w3.org/2000/svg"
9
- >
10
- <path
11
- d="M1 2C1 1.44772 1.44772 1 2 1H16C16.5523 1 17 1.44772 17 2V4.57143C17 5.12371 16.5523 5.57143 16 5.57143H2C1.44772 5.57143 1 5.12371 1 4.57143V2Z"
12
- stroke-width="1.5"
13
- />
14
- <line x1="1" y1="9.39288" x2="17" y2="9.39288" stroke-width="1.5" />
15
- <line x1="1" y1="12.8214" x2="17" y2="12.8214" stroke-width="1.5" />
16
- </svg>`;
17
- export const queue = html `
18
- <svg
19
- width="22"
20
- height="16"
21
- viewBox="0 0 22 16"
22
- fill="none"
23
- stroke="currentColor"
24
- xmlns="http://www.w3.org/2000/svg"
25
- >
26
- <rect x="5.44409" y="1" width="11.1111" height="14" stroke-width="1.5" />
27
- <path d="M18.7776 3.3335H20.9998V12.6668H18.7776" stroke-width="1.5" />
28
- <path
29
- d="M3.22217 12.6665L0.999946 12.6665L0.999947 3.33317L3.22217 3.33317"
30
- stroke-width="1.5"
31
- />
32
- </svg>
33
- `;
34
- export const split = html `
35
- <svg
36
- width="19"
37
- height="14"
38
- viewBox="0 0 19 14"
39
- fill="none"
40
- stroke="currentColor"
41
- xmlns="http://www.w3.org/2000/svg"
42
- >
43
- <rect x="10" y="1" width="8" height="12" stroke-width="1.5" />
44
- <line
45
- x1="7"
46
- y1="12.1787"
47
- x2="4.15643e-07"
48
- y2="12.1787"
49
- stroke-width="1.5"
50
- />
51
- <line x1="7" y1="8.75" x2="4.15643e-07" y2="8.75" stroke-width="1.5" />
52
- <line
53
- x1="7"
54
- y1="5.17871"
55
- x2="4.15643e-07"
56
- y2="5.17871"
57
- stroke-width="1.5"
58
- />
59
- <line x1="7" y1="1.75" x2="4.15643e-07" y2="1.75" stroke-width="1.5" />
60
- </svg>
61
- `;
1
+ import { columns02Icon, listIcon, squareIcon, } from '@neovici/cosmoz-icons/untitled';
2
+ const size = { width: '18', height: '18' };
3
+ export const list = listIcon(size);
4
+ export const split = columns02Icon(size);
5
+ export const queue = squareIcon(size);
@@ -16,5 +16,6 @@ export { useListSSE } from './use-list-sse';
16
16
  export { default as useDataNav } from './use-data-nav';
17
17
  export { useMobile } from './use-mobile';
18
18
  export { default as useTabs } from './use-tabs';
19
+ export { default as useTabsPref } from './use-tabs-pref';
19
20
  export { filter, notify, useList, useListState } from './use-list';
20
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACN,eAAe,EACf,OAAO,IAAI,QAAQ,EACnB,YAAY,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEzC,cAAc,UAAU,CAAC;AAEzB,mBAAmB,SAAS,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAGpE,OAAO,EACN,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,IAAI,eAAe,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/queue/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACN,eAAe,EACf,OAAO,IAAI,QAAQ,EACnB,YAAY,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEzC,cAAc,UAAU,CAAC;AAEzB,mBAAmB,SAAS,CAAC;AAC7B,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,SAAS,CAAC;AAGpE,OAAO,EACN,QAAQ,EACR,UAAU,EACV,SAAS,EACT,OAAO,IAAI,eAAe,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -21,5 +21,6 @@ export { useListSSE } from './use-list-sse';
21
21
  export { default as useDataNav } from './use-data-nav';
22
22
  export { useMobile } from './use-mobile';
23
23
  export { default as useTabs } from './use-tabs';
24
+ export { default as useTabsPref } from './use-tabs-pref';
24
25
  // List hooks
25
26
  export { filter, notify, useList, useListState } from './use-list';
@@ -1,5 +1,6 @@
1
1
  import type { TemplateResult } from 'lit-html';
2
2
  import { RenderQueue } from './render';
3
+ import { SplitConfig } from './split';
3
4
  import { Pagination } from './types';
4
5
  import useQueue, { UseQueue } from './use-queue';
5
6
  type QueueProps<I> = ReturnType<typeof useQueue<I>>;
@@ -7,17 +8,6 @@ type ViewProps<I> = Omit<QueueProps<I>, 'nav'> & {
7
8
  nav: TemplateResult;
8
9
  item: I;
9
10
  };
10
- /**
11
- * @deprecated Use `initial-size` and `min-size` attributes on
12
- * `<cosmoz-resizable-view>` instead (mapped automatically from this prop).
13
- * `expandToMin` and `snapOffset` have no equivalent and are silently ignored.
14
- */
15
- export interface SplitConfig {
16
- sizes?: [number, number];
17
- minSize?: [number] | number;
18
- expandToMin?: boolean;
19
- snapOffset?: number;
20
- }
21
11
  interface Props<I, D> extends Pick<UseQueue<I>, 'id' | 'api' | 'fallback'>, Pick<RenderQueue<I, D>, 'details' | 'afterHeading' | 'header'> {
22
12
  list: (thru: Record<string, any>, props: QueueProps<I> & {
23
13
  onRef: (el?: Element) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAe,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;CACR,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC3B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC,CACnB,SACC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,UAAU,CAAC,EAC5C,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC/D,IAAI,EAAE,CACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,KACpD,cAAc,CAAC;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IACzE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mGAAmG;IACnG,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAMD,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,sBA+GjD,CAAC"}
1
+ {"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAe,WAAW,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,QAAQ,EAAE,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,UAAU,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACpD,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG;IAChD,GAAG,EAAE,cAAc,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;CACR,CAAC;AAEF,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC,CACnB,SACC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,GAAG,UAAU,CAAC,EAC5C,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,GAAG,cAAc,GAAG,QAAQ,CAAC;IAC/D,IAAI,EAAE,CACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,KACpD,cAAc,CAAC;IACpB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IACzE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mGAAmG;IACnG,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAMD,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,sBA0GjD,CAAC"}
@@ -1,15 +1,18 @@
1
1
  import { updateWith } from '../util/polymer-property-changed-event.js';
2
2
  import { renderQueue } from './render';
3
+ import { computeSplitAttrs } from './split';
3
4
  import useAsyncAction from './use-async-action';
4
5
  import useQueue from './use-queue';
5
6
  export const queue = (props) => {
6
7
  const { heading, afterHeading, header, settingsId, idHashParam = 'qid', tabHashParam = 'qtab', id, api, details, list, view, loader, pagination, fallback, split, } = props;
8
+ const persistKey = settingsId ? `${settingsId}-split` : undefined;
7
9
  const queueProps = useQueue({
8
10
  id,
9
11
  api,
10
12
  idHashParam,
11
13
  tabHashParam,
12
14
  fallback,
15
+ persistKey,
13
16
  });
14
17
  const { index, hideActions, items, setItems, setSelected, totalAvailable, setTotalAvailable, onItemClick, rowPartFn, nav, tabnav, } = queueProps;
15
18
  const { listRef, onAsyncSimpleAction } = useAsyncAction(nav);
@@ -17,14 +20,7 @@ export const queue = (props) => {
17
20
  ...queueProps,
18
21
  onAsyncSimpleAction,
19
22
  };
20
- const splitAttrs = split
21
- ? {
22
- initialSize: split.sizes?.[0] != null ? `${split.sizes[0]}%` : '50%',
23
- minSize: split.minSize != null
24
- ? `${Array.isArray(split.minSize) ? split.minSize[0] : split.minSize}`
25
- : undefined,
26
- }
27
- : { initialSize: '50%', minSize: '100' };
23
+ const splitAttrs = computeSplitAttrs(split);
28
24
  return renderQueue({
29
25
  details,
30
26
  heading,
@@ -36,7 +32,7 @@ export const queue = (props) => {
36
32
  totalAvailable,
37
33
  nav,
38
34
  pagination,
39
- persistKey: settingsId ? `${settingsId}-split` : undefined,
35
+ persistKey,
40
36
  splitAttrs,
41
37
  list: list({
42
38
  id: 'list',
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/queue/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/queue/render.ts"],"names":[],"mappings":"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"}
@@ -18,6 +18,7 @@ const _emptySlide = {
18
18
  const emptySlide = () => _emptySlide;
19
19
  export const renderNav = ({ next, prev, }) => html ` <cosmoz-button
20
20
  variant="secondary"
21
+ icon-only
21
22
  class="button-nav prev"
22
23
  title="${t('Previous item')}"
23
24
  ?disabled=${!prev}
@@ -28,6 +29,7 @@ export const renderNav = ({ next, prev, }) => html ` <cosmoz-button
28
29
  </cosmoz-button>
29
30
  <cosmoz-button
30
31
  variant="secondary"
32
+ icon-only
31
33
  title="${t('Next item')}"
32
34
  class="button-nav next"
33
35
  ?disabled=${!next}
@@ -48,6 +50,7 @@ export const renderPagination = (pagination) => {
48
50
  class="button-page page-prev"
49
51
  size="sm"
50
52
  variant="secondary"
53
+ icon-only
51
54
  ?disabled=${!(pageNumber > 1)}
52
55
  @click=${(e) => onPage(e.ctrlKey ? 1 : pageNumber - 1)}
53
56
  >
@@ -56,6 +59,7 @@ export const renderPagination = (pagination) => {
56
59
  <cosmoz-button
57
60
  title="${t('Next page')}"
58
61
  variant="secondary"
62
+ icon-only
59
63
  class="button-page page-next"
60
64
  size="sm"
61
65
  ?disabled=${!(pageNumber < totalPages)}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Split-view sizing options for `queue()` and `useQueue()`.
3
+ *
4
+ * Mapped to the `initial-size` / `min-size` attributes of
5
+ * `<cosmoz-resizable-view>` by both `queue()` and `useQueue()`.
6
+ */
7
+ export interface SplitConfig {
8
+ /** Initial widths of the two panes in percent. */
9
+ sizes?: [number, number];
10
+ /** Minimum widths per pane, forwarded to the `min-size` attribute. */
11
+ minSize?: number[] | number;
12
+ /** @deprecated Split.js leftovers, ignored. */
13
+ expandToMin?: boolean;
14
+ /** @deprecated Split.js leftovers, ignored. */
15
+ snapOffset?: number;
16
+ }
17
+ /**
18
+ * `initial-size` / `min-size` attribute values for `<cosmoz-resizable-view>`.
19
+ */
20
+ export interface SplitAttrs {
21
+ initialSize: string;
22
+ minSize?: string;
23
+ }
24
+ /**
25
+ * Maps the `split` option to `initial-size` / `min-size` attribute values.
26
+ * Shared by `queue()` and `useQueue()`, consumed via `renderQueue`.
27
+ */
28
+ export declare const computeSplitAttrs: (split?: SplitConfig) => SplitAttrs;
29
+ //# sourceMappingURL=split.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split.d.ts","sourceRoot":"","sources":["../../src/queue/split.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC3B,kDAAkD;IAClD,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzB,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,WAAW,KAAG,UAWd,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { array } from '@neovici/cosmoz-utils/array';
2
+ /**
3
+ * Maps the `split` option to `initial-size` / `min-size` attribute values.
4
+ * Shared by `queue()` and `useQueue()`, consumed via `renderQueue`.
5
+ */
6
+ export const computeSplitAttrs = (split) => split
7
+ ? {
8
+ initialSize: split.sizes?.[0] != null ? `${split.sizes[0]}%` : '50%',
9
+ // `''` must never reach renderQueue: it would bypass its `?? '100'`
10
+ // fallback and render an empty `min-size` (no pane minimums).
11
+ minSize: split.minSize != null
12
+ ? array(split.minSize).join(' ') || undefined
13
+ : undefined,
14
+ }
15
+ : { initialSize: '50%', minSize: '100' };
@@ -17,7 +17,7 @@ export const base = css `
17
17
  .tabn-tab {
18
18
  flex: 0 1 0.000001px;
19
19
  flex: 0 1 min-content;
20
- padding: 11px 16px;
20
+ padding: var(--cz-queue-tab-padding, 11px 16px);
21
21
  background: inherit;
22
22
  color: var(--cz-color-gray-400);
23
23
  }
@@ -1,5 +1,5 @@
1
1
  type Returned<T> = [T, (v: T) => void];
2
- export declare function usePref<T extends string>(key: string): Returned<T>;
3
- export declare function usePref<T extends string>(key: string, defaultValue: T): Returned<T>;
2
+ export declare function usePref<T extends string>(key?: string): Returned<T>;
3
+ export declare function usePref<T extends string>(key: string | undefined, defaultValue: T): Returned<T>;
4
4
  export {};
5
5
  //# sourceMappingURL=use-pref.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-pref.d.ts","sourceRoot":"","sources":["../../src/queue/use-pref.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AACvC,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpE,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACvC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACb,QAAQ,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"use-pref.d.ts","sourceRoot":"","sources":["../../src/queue/use-pref.ts"],"names":[],"mappings":"AAEA,KAAK,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AAmBvC,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AACrE,wBAAgB,OAAO,CAAC,CAAC,SAAS,MAAM,EACvC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,YAAY,EAAE,CAAC,GACb,QAAQ,CAAC,CAAC,CAAC,CAAC"}
@@ -1,11 +1,29 @@
1
- import { useState, useCallback } from '@pionjs/pion';
1
+ import { useCallback, useState } from '@pionjs/pion';
2
+ const loadPref = (key) => {
3
+ try {
4
+ return key ? localStorage.getItem(`pref-${key}`) : undefined;
5
+ }
6
+ catch {
7
+ return undefined;
8
+ }
9
+ };
10
+ const savePref = (key, value) => {
11
+ if (!key)
12
+ return;
13
+ try {
14
+ localStorage.setItem(`pref-${key}`, value);
15
+ }
16
+ catch {
17
+ // storage blocked
18
+ }
19
+ };
2
20
  export function usePref(key, defaultValue) {
3
- const [pref, setPref] = useState(() => localStorage.getItem(`pref-${key}`) || defaultValue);
21
+ const [pref, setPref] = useState(() => loadPref(key) || defaultValue);
4
22
  return [
5
23
  pref,
6
24
  useCallback((value) => {
7
- localStorage.setItem(`pref-${key}`, value);
25
+ savePref(key, value);
8
26
  setPref(value);
9
- }, [setPref]),
27
+ }, [key, setPref]),
10
28
  ];
11
29
  }
@@ -1,3 +1,4 @@
1
+ import { SplitConfig } from './split';
1
2
  import { useListState } from './use-list';
2
3
  import { Options as UseTabsOptions } from './use-tabs';
3
4
  /**
@@ -13,6 +14,7 @@ interface Opts<I> extends ReturnType<typeof useListState<I>>, Pick<UseTabsOption
13
14
  tabHashParam?: string;
14
15
  idHashParam?: string;
15
16
  onActivate?: (name: string) => void;
17
+ persistKey?: string;
16
18
  /**
17
19
  * @deprecated Use the `details` property instead. The `api` property will be removed in v2.0.0.
18
20
  *
@@ -34,8 +36,10 @@ interface Opts<I> extends ReturnType<typeof useListState<I>>, Pick<UseTabsOption
34
36
  */
35
37
  api?: (id: string, item: I) => string;
36
38
  id?: (i: I) => string;
39
+ /** @deprecated Use `initial-size` / `min-size` attributes on `<cosmoz-resizable-view>` instead (mapped automatically to the returned `splitAttrs`). */
40
+ split?: SplitConfig;
37
41
  }
38
- declare const useQueue: <I>({ id, api, tabHashParam, idHashParam, fallback, onActivate, ...thru }: Opts<I>) => {
42
+ declare const useQueue: <I>({ id, api, tabHashParam, idHashParam, fallback, onActivate, split, persistKey, ...thru }: Opts<I>) => {
39
43
  tabnav: import("@neovici/cosmoz-tabs/next").Result<{
40
44
  readonly name: "overview";
41
45
  readonly title: string;
@@ -72,6 +76,7 @@ declare const useQueue: <I>({ id, api, tabHashParam, idHashParam, fallback, onAc
72
76
  }>;
73
77
  activeTab: "split" | "overview" | "queue";
74
78
  mobile: boolean;
79
+ splitAttrs: import("./split").SplitAttrs;
75
80
  hideActions: boolean;
76
81
  index: number;
77
82
  rowPartFn: (row: I) => string | undefined;
@@ -133,6 +138,7 @@ declare const _default: <I>(thru: UseQueue<I>) => {
133
138
  }>;
134
139
  activeTab: "split" | "overview" | "queue";
135
140
  mobile: boolean;
141
+ splitAttrs: import("./split").SplitAttrs;
136
142
  hideActions: boolean;
137
143
  index: number;
138
144
  rowPartFn: (row: I) => string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"use-queue.d.ts","sourceRoot":"","sources":["../../src/queue/use-queue.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAgB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAMhE;;GAEG;AACH,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC7B,MAAM,CAAC,GAAG,SAAS,EACnB,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,KAClB,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAKhC,CAAC;AAqDH,UAAU,IAAI,CAAC,CAAC,CACf,SACC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACtC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;CACtB;AAED,QAAA,MAAM,QAAQ,GAAI,CAAC,EAAE,uEAQlB,IAAI,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAhGM,MAAM,GAAG,SAAS;qBA2I3B,KAAK;oBAtBA,MAAM;;;;;;;;;;;;;;;;;;CAoDjB,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,IAAI,CAC7B,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;yBAEc,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAhLpB,MAAM,GAAG,SAAS;qBA2I3B,KAAK;oBAtBA,MAAM;;;;;;;;;;;;;;;;;;;AA2DlB,wBACgD"}
1
+ {"version":3,"file":"use-queue.d.ts","sourceRoot":"","sources":["../../src/queue/use-queue.ts"],"names":[],"mappings":"AAMA,OAAO,EAAqB,WAAW,EAAE,MAAM,SAAS,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAgB,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,YAAY,CAAC;AAOhE;;GAEG;AACH,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC7B,MAAM,CAAC,GAAG,SAAS,EACnB,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,KAClB,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAKhC,CAAC;AAqDH,UAAU,IAAI,CAAC,CAAC,CACf,SACC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IACtC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC;IACtB,uJAAuJ;IACvJ,KAAK,CAAC,EAAE,WAAW,CAAC;CACpB;AAED,QAAA,MAAM,QAAQ,GAAI,CAAC,EAAE,0FAUlB,IAAI,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BArGM,MAAM,GAAG,SAAS;qBA4I5B,KAAK;oBAfA,MAAM;;;;;;;;;;;;;;;;;;CAqDhB,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,IAAI,CAC7B,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjC,MAAM,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;yBAEc,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAzLpB,MAAM,GAAG,SAAS;qBA4I5B,KAAK;oBAfA,MAAM;;;;;;;;;;;;;;;;;;;AA4DjB,wBACgD"}
@@ -3,10 +3,12 @@ import { memoize } from '@neovici/cosmoz-utils/memoize';
3
3
  import { useCallback, useMemo } from '@pionjs/pion';
4
4
  import { json } from '../util/fetch/fetch';
5
5
  import { useMobile } from './use-mobile';
6
+ import { computeSplitAttrs } from './split';
6
7
  import useDataNav from './use-data-nav';
7
8
  import useKeyNav from './use-key-nav';
8
9
  import { useListState } from './use-list';
9
10
  import useTabs from './use-tabs';
11
+ import useTabsPref from './use-tabs-pref';
10
12
  import useUpdates from './use-updates';
11
13
  import { getItems, normalizeHeaders } from './util';
12
14
  /**
@@ -31,26 +33,34 @@ const useQNav = ({ id, api, items, ...thru }) => {
31
33
  'See: https://github.com/Neovici/cosmoz-queue#migration-from-api-to-details');
32
34
  }
33
35
  /* eslint-enable no-console, no-template-curly-in-string */
34
- const details = useMemo(() => api && memoize((item) => json(api(id(item), item))), [id, api]), pass = useDataNav(items, {
36
+ const details = useMemo(() => api && memoize((item) => json(api(id(item), item))), [id, api]);
37
+ const pass = useDataNav(items, {
35
38
  ...thru,
36
39
  id,
37
40
  });
38
41
  return { ...pass, id, details };
39
42
  };
40
- const useQueue = ({ id = _id, api, tabHashParam, idHashParam, fallback, onActivate, ...thru }) => {
41
- const { items: _items, selected } = thru, mobile = useMobile(), items = useMemo(() => normalizeHeaders(_items), [_items]), queueItems = useMemo(() => getItems(items, selected), [items, selected]), { tabnav, activeTab } = useTabs({
43
+ const useQueue = ({ id = _id, api, tabHashParam, idHashParam, fallback, onActivate, split, persistKey, ...thru }) => {
44
+ const { items: _items, selected } = thru;
45
+ const mobile = useMobile();
46
+ const items = useMemo(() => normalizeHeaders(_items), [_items]);
47
+ const queueItems = useMemo(() => getItems(items, selected), [items, selected]);
48
+ const { tabnav, activeTab } = useTabs({
42
49
  items: queueItems,
43
50
  hashParam: tabHashParam,
44
- fallback,
45
- onActivate,
51
+ ...useTabsPref({ persistKey, fallback, except: 'queue', onActivate }),
46
52
  mobile,
47
- }), nav = useQNav({
53
+ });
54
+ const nav = useQNav({
48
55
  id,
49
56
  api,
50
57
  items: queueItems,
51
58
  hashParam: idHashParam,
52
59
  maintainSelection: ['queue', 'split'].includes(activeTab),
53
- }), { item, setItem } = nav, ensue = useCallback((itemId) => {
60
+ });
61
+ const splitAttrs = useMemo(() => computeSplitAttrs(split), [split]);
62
+ const { item, setItem } = nav;
63
+ const ensue = useCallback((itemId) => {
54
64
  if (id(item) !== itemId) {
55
65
  return;
56
66
  }
@@ -59,28 +69,32 @@ const useQueue = ({ id = _id, api, tabHashParam, idHashParam, fallback, onActiva
59
69
  }, [item, id, items]);
60
70
  useKeyNav({ activeTab, ...nav });
61
71
  useUpdates({ ensue, ...nav });
72
+ const index = useMemo(() => items.indexOf(item), [item, items]);
73
+ const rowPartFn = useRowPartFn(item, id);
74
+ const onItemClick = useCallback((e) => {
75
+ const { item: clickedItem, index, activate: mustActivate, } = e.detail;
76
+ const mini = e
77
+ .composedPath()
78
+ .find((el) => el instanceof Element && el.matches?.('[mini]'));
79
+ const activate = mustActivate ?? (mini ? ['split', 'queue'] : undefined);
80
+ setItem(clickedItem ?? items[index]);
81
+ if (activate) {
82
+ const next = array(activate).find((name) => tabnav.tabs.find((tab) => tab.name === name && !tab.disabled));
83
+ if (next)
84
+ tabnav.activate(next);
85
+ }
86
+ e.preventDefault();
87
+ }, [activeTab, items]);
62
88
  return {
63
89
  ...thru,
64
90
  tabnav,
65
91
  activeTab,
66
92
  mobile,
93
+ splitAttrs,
67
94
  hideActions: selected?.length > 0 && activeTab === 'split',
68
- index: useMemo(() => items.indexOf(item), [item, items]),
69
- rowPartFn: useRowPartFn(item, id),
70
- onItemClick: useCallback((e) => {
71
- const { item: clickedItem, index, activate: mustActivate, } = e.detail;
72
- const mini = e
73
- .composedPath()
74
- .find((el) => el instanceof Element && el.matches?.('[mini]'));
75
- const activate = mustActivate ?? (mini ? ['split', 'queue'] : undefined);
76
- setItem(clickedItem ?? items[index]);
77
- if (activate) {
78
- const next = array(activate).find((name) => tabnav.tabs.find((tab) => tab.name === name && !tab.disabled));
79
- if (next)
80
- tabnav.activate(next);
81
- }
82
- e.preventDefault();
83
- }, [activeTab, items]),
95
+ index,
96
+ rowPartFn,
97
+ onItemClick,
84
98
  ensue,
85
99
  nav,
86
100
  };
@@ -0,0 +1,12 @@
1
+ interface Opts {
2
+ persistKey?: string;
3
+ fallback?: string;
4
+ except?: string;
5
+ onActivate?: (name: string) => void;
6
+ }
7
+ declare const _default: ({ persistKey, fallback, except, onActivate }: Opts) => {
8
+ fallback: string | undefined;
9
+ onActivate: (name: string) => void;
10
+ };
11
+ export default _default;
12
+ //# sourceMappingURL=use-tabs-pref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tabs-pref.d.ts","sourceRoot":"","sources":["../../src/queue/use-tabs-pref.ts"],"names":[],"mappings":"AAIA,UAAU,IAAI;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;yBAEe,8CAA8C,IAAI;;uBAQxD,MAAM;;AARhB,wBAeE"}
@@ -0,0 +1,12 @@
1
+ import { useCallback } from '@pionjs/pion';
2
+ import { usePref } from './use-pref';
3
+ export default ({ persistKey, fallback, except, onActivate }) => {
4
+ const [stored, setStored] = usePref(persistKey ? `${persistKey}-tab` : undefined);
5
+ return {
6
+ fallback: stored && stored !== except ? stored : fallback,
7
+ onActivate: useCallback((name) => {
8
+ setStored(name);
9
+ onActivate?.(name);
10
+ }, [setStored, onActivate]),
11
+ };
12
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neovici/cosmoz-queue",
3
- "version": "3.4.1",
3
+ "version": "3.6.0",
4
4
  "description": "A reusable queue component for master-detail views with list, split, and queue modes",
5
5
  "keywords": [
6
6
  "web-components",
@@ -53,6 +53,7 @@
53
53
  ".": "./dist/index.js",
54
54
  "./use-queue": "./dist/queue/use-queue.js",
55
55
  "./use-tabs": "./dist/queue/use-tabs.js",
56
+ "./use-tabs-pref": "./dist/queue/use-tabs-pref.js",
56
57
  "./use-data-nav": "./dist/queue/use-data-nav.js",
57
58
  "./use-list": "./dist/queue/use-list.js",
58
59
  "./util/fetch": "./dist/util/fetch/fetch.js",
@@ -64,6 +65,7 @@
64
65
  "dependencies": {
65
66
  "@neovici/cosmoz-button": "^1.1.0",
66
67
  "@neovici/cosmoz-form": "^4.0.0",
68
+ "@neovici/cosmoz-icons": "^1.6.0",
67
69
  "@neovici/cosmoz-omnitable": "^19.0.0",
68
70
  "@neovici/cosmoz-resizable": "^2.0.0",
69
71
  "@neovici/cosmoz-router": "^11.2.8",