@neovici/cosmoz-omnitable 14.21.3 → 14.22.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.
Files changed (123) hide show
  1. package/dist/cosmoz-omnitable-column-amount.js +27 -29
  2. package/dist/cosmoz-omnitable-column-autocomplete.js +24 -28
  3. package/dist/cosmoz-omnitable-column-boolean.js +17 -25
  4. package/dist/cosmoz-omnitable-column-date.js +26 -28
  5. package/dist/cosmoz-omnitable-column-datetime.js +26 -28
  6. package/dist/cosmoz-omnitable-column-list-data.js +6 -8
  7. package/dist/cosmoz-omnitable-column-list-horizontal.js +15 -17
  8. package/dist/cosmoz-omnitable-column-list-mixin.js +15 -28
  9. package/dist/cosmoz-omnitable-column-list.js +19 -21
  10. package/dist/cosmoz-omnitable-column-mixin.js +8 -12
  11. package/dist/cosmoz-omnitable-column-number.js +27 -29
  12. package/dist/cosmoz-omnitable-column-time.js +24 -26
  13. package/dist/cosmoz-omnitable-column.js +11 -13
  14. package/dist/cosmoz-omnitable-columns.js +9 -11
  15. package/dist/cosmoz-omnitable-group-row.js +4 -6
  16. package/dist/cosmoz-omnitable-header-row.js +15 -17
  17. package/dist/cosmoz-omnitable-item-expand-line.js +5 -7
  18. package/dist/cosmoz-omnitable-item-expand.js +6 -8
  19. package/dist/cosmoz-omnitable-item-row.js +5 -7
  20. package/dist/cosmoz-omnitable-skeleton.js +6 -8
  21. package/dist/cosmoz-omnitable-styles.js +4 -7
  22. package/dist/cosmoz-omnitable.d.ts +1 -1
  23. package/dist/cosmoz-omnitable.d.ts.map +1 -1
  24. package/dist/cosmoz-omnitable.js +31 -37
  25. package/dist/grouped-list/cosmoz-grouped-list-row.js +2 -4
  26. package/dist/grouped-list/cosmoz-grouped-list.js +4 -6
  27. package/dist/grouped-list/index.js +1 -3
  28. package/dist/grouped-list/use-collapsible-items.d.ts +4 -4
  29. package/dist/grouped-list/use-collapsible-items.js +8 -12
  30. package/dist/grouped-list/use-cosmoz-grouped-list.d.ts +1 -1
  31. package/dist/grouped-list/use-cosmoz-grouped-list.js +19 -23
  32. package/dist/grouped-list/use-selected-items.d.ts +10 -10
  33. package/dist/grouped-list/use-selected-items.js +15 -19
  34. package/dist/grouped-list/use-weak-state.d.ts +3 -3
  35. package/dist/grouped-list/use-weak-state.js +6 -10
  36. package/dist/grouped-list/utils.js +1 -11
  37. package/dist/lib/compute-layout.js +7 -12
  38. package/dist/lib/cosmoz-omnitable-amount-range-input.js +14 -16
  39. package/dist/lib/cosmoz-omnitable-date-input-mixin.js +5 -9
  40. package/dist/lib/cosmoz-omnitable-date-range-input.js +12 -14
  41. package/dist/lib/cosmoz-omnitable-datetime-range-input.js +13 -15
  42. package/dist/lib/cosmoz-omnitable-number-range-input.js +12 -14
  43. package/dist/lib/cosmoz-omnitable-range-input-mixin.js +8 -12
  44. package/dist/lib/cosmoz-omnitable-resize-nub.js +5 -7
  45. package/dist/lib/cosmoz-omnitable-time-range-input.js +12 -14
  46. package/dist/lib/generic-sorter.js +1 -5
  47. package/dist/lib/icons.d.ts +4 -4
  48. package/dist/lib/icons.d.ts.map +1 -1
  49. package/dist/lib/icons.js +5 -8
  50. package/dist/lib/layout.js +2 -5
  51. package/dist/lib/polymer-haunted-render-mixin.js +6 -10
  52. package/dist/lib/render-footer.d.ts +1 -1
  53. package/dist/lib/render-footer.d.ts.map +1 -1
  54. package/dist/lib/render-footer.js +12 -16
  55. package/dist/lib/render-header.d.ts +1 -1
  56. package/dist/lib/render-header.d.ts.map +1 -1
  57. package/dist/lib/render-header.js +5 -9
  58. package/dist/lib/render-list.d.ts +1 -1
  59. package/dist/lib/render-list.d.ts.map +1 -1
  60. package/dist/lib/render-list.js +15 -19
  61. package/dist/lib/save-as-csv-action.js +3 -7
  62. package/dist/lib/save-as-xlsx-action.js +5 -9
  63. package/dist/lib/settings/cosmoz-omnitable-settings.js +33 -71
  64. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts +3 -3
  65. package/dist/lib/settings/cosmoz-omnitable-sort-group.d.ts.map +1 -1
  66. package/dist/lib/settings/cosmoz-omnitable-sort-group.js +12 -19
  67. package/dist/lib/settings/drivers/context.d.ts +10 -2
  68. package/dist/lib/settings/drivers/context.d.ts.map +1 -1
  69. package/dist/lib/settings/drivers/context.js +6 -13
  70. package/dist/lib/settings/drivers/index.js +3 -25
  71. package/dist/lib/settings/drivers/local.js +1 -3
  72. package/dist/lib/settings/drivers/remote.js +1 -3
  73. package/dist/lib/settings/index.js +2 -9
  74. package/dist/lib/settings/normalize.js +10 -15
  75. package/dist/lib/settings/style.css.js +5 -8
  76. package/dist/lib/settings/use-saved-settings.d.ts +2 -2
  77. package/dist/lib/settings/use-saved-settings.js +9 -11
  78. package/dist/lib/settings/use-settings-ui.js +12 -14
  79. package/dist/lib/settings/use-settings.d.ts +12 -6
  80. package/dist/lib/settings/use-settings.d.ts.map +1 -1
  81. package/dist/lib/settings/use-settings.js +8 -46
  82. package/dist/lib/types.js +1 -2
  83. package/dist/lib/use-canvas-width.js +5 -9
  84. package/dist/lib/use-dom-columns.d.ts +1 -1
  85. package/dist/lib/use-dom-columns.d.ts.map +1 -1
  86. package/dist/lib/use-dom-columns.js +7 -11
  87. package/dist/lib/use-fast-layout.d.ts +1 -1
  88. package/dist/lib/use-fast-layout.js +18 -22
  89. package/dist/lib/use-footer.js +1 -5
  90. package/dist/lib/use-hash-state.js +11 -15
  91. package/dist/lib/use-header.js +5 -9
  92. package/dist/lib/use-layout.d.ts +1 -1
  93. package/dist/lib/use-layout.d.ts.map +1 -1
  94. package/dist/lib/use-layout.js +4 -8
  95. package/dist/lib/use-list.d.ts +10 -2
  96. package/dist/lib/use-list.d.ts.map +1 -1
  97. package/dist/lib/use-list.js +21 -25
  98. package/dist/lib/use-mini.d.ts +1 -1
  99. package/dist/lib/use-mini.js +5 -9
  100. package/dist/lib/use-omnitable.d.ts +10 -2
  101. package/dist/lib/use-omnitable.d.ts.map +1 -1
  102. package/dist/lib/use-omnitable.js +18 -22
  103. package/dist/lib/use-processed-items.d.ts +5 -3
  104. package/dist/lib/use-processed-items.d.ts.map +1 -1
  105. package/dist/lib/use-processed-items.js +23 -27
  106. package/dist/lib/use-public-interface.js +16 -20
  107. package/dist/lib/use-resizable-columns.js +4 -8
  108. package/dist/lib/use-sort-and-group-options.d.ts +25 -2
  109. package/dist/lib/use-sort-and-group-options.d.ts.map +1 -1
  110. package/dist/lib/use-sort-and-group-options.js +12 -16
  111. package/dist/lib/use-track-size.d.ts +1 -1
  112. package/dist/lib/use-track-size.d.ts.map +1 -1
  113. package/dist/lib/use-track-size.js +2 -6
  114. package/dist/lib/use-tween-array.js +10 -14
  115. package/dist/lib/utils-amount.js +29 -25
  116. package/dist/lib/utils-data.js +8 -12
  117. package/dist/lib/utils-date.js +38 -55
  118. package/dist/lib/utils-datetime.js +22 -32
  119. package/dist/lib/utils-number.js +24 -34
  120. package/dist/lib/utils-time.js +34 -46
  121. package/dist/lib/utils.js +2 -6
  122. package/dist/ui-helpers/cosmoz-clear-button.js +5 -7
  123. package/package.json +1 -1
@@ -1,11 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pion_1 = require("@pionjs/pion");
4
- const lit_html_1 = require("lit-html");
5
- const map_js_1 = require("lit-html/directives/map.js");
6
- require("./cosmoz-omnitable-item-expand-line");
1
+ import { component } from '@pionjs/pion';
2
+ import { html } from 'lit-html';
3
+ import { map } from 'lit-html/directives/map.js';
4
+ import './cosmoz-omnitable-item-expand-line';
7
5
  const ItemExpand = ({ columns, item, selected, expanded, groupOnColumn }) => {
8
- return (0, map_js_1.map)(columns, (column) => (0, lit_html_1.html) `<cosmoz-omnitable-item-expand-line
6
+ return map(columns, (column) => html `<cosmoz-omnitable-item-expand-line
9
7
  .column=${column}
10
8
  ?hidden=${column === groupOnColumn}
11
9
  exportparts="item-expand-label, item-expand-value"
@@ -16,7 +14,7 @@ const ItemExpand = ({ columns, item, selected, expanded, groupOnColumn }) => {
16
14
  })}</cosmoz-omnitable-item-expand-line
17
15
  >`);
18
16
  };
19
- customElements.define('cosmoz-omnitable-item-expand', (0, pion_1.component)(ItemExpand, {
17
+ customElements.define('cosmoz-omnitable-item-expand', component(ItemExpand, {
20
18
  useShadowDOM: false,
21
19
  }));
22
20
  //# sourceMappingURL=cosmoz-omnitable-item-expand.js.map
@@ -1,12 +1,10 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pion_1 = require("@pionjs/pion");
4
- const repeat_js_1 = require("lit-html/directives/repeat.js");
1
+ import { component, html } from '@pionjs/pion';
2
+ import { repeat } from 'lit-html/directives/repeat.js';
5
3
  const renderCell = (column, data, onItemChange) => column.editable
6
4
  ? column.renderEditCell(column, data, onItemChange(column, data.item))
7
5
  : column.renderCell(column, data);
8
- const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onItemChange, }) => (0, repeat_js_1.repeat)(columns, (column) => column.name, (column) => {
9
- return (0, pion_1.html) `<div
6
+ const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onItemChange, }) => repeat(columns, (column) => column.name, (column) => {
7
+ return html `<div
10
8
  class="cell itemRow-cell ${column.cellClass ?? ''}"
11
9
  part="cell itemRow-cell cell-${column.name} itemRow-cell-${column.name}"
12
10
  ?hidden="${column === groupOnColumn}"
@@ -17,5 +15,5 @@ const ItemRow = ({ columns, groupOnColumn, item, index, selected, expanded, onIt
17
15
  ${renderCell(column, { item, index, selected, expanded }, onItemChange)}
18
16
  </div>`;
19
17
  });
20
- customElements.define('cosmoz-omnitable-item-row', (0, pion_1.component)(ItemRow, { useShadowDOM: false }));
18
+ customElements.define('cosmoz-omnitable-item-row', component(ItemRow, { useShadowDOM: false }));
21
19
  //# sourceMappingURL=cosmoz-omnitable-item-row.js.map
@@ -1,7 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pion_1 = require("@pionjs/pion");
4
- const styles = (0, pion_1.css) `
1
+ import { html, css, component } from '@pionjs/pion';
2
+ const styles = css `
5
3
  :host {
6
4
  max-width: 100%;
7
5
  overflow-x: hidden;
@@ -46,10 +44,10 @@ const styles = (0, pion_1.css) `
46
44
  `;
47
45
  const Skeleton = ({ settingsConfig }) => {
48
46
  const { columns, collapsed } = settingsConfig, showingColumns = columns.filter((column) => !collapsed.some((hidden) => hidden.name === column.name));
49
- return (0, pion_1.html) `<div class="skeleton">
50
- ${Array.from({ length: 5 }, () => (0, pion_1.html) `<div>
47
+ return html `<div class="skeleton">
48
+ ${Array.from({ length: 5 }, () => html `<div>
51
49
  <div class="checkbox"></div>
52
- ${showingColumns.map((col) => (0, pion_1.html) `<div
50
+ ${showingColumns.map((col) => html `<div
53
51
  class="cell"
54
52
  part=${`cell-${col.name}`}
55
53
  name=${col.name}
@@ -57,5 +55,5 @@ const Skeleton = ({ settingsConfig }) => {
57
55
  </div>`)}
58
56
  </div>`;
59
57
  };
60
- customElements.define('cosmoz-omnitable-skeleton', (0, pion_1.component)(Skeleton, { styleSheets: [styles] }));
58
+ customElements.define('cosmoz-omnitable-skeleton', component(Skeleton, { styleSheets: [styles] }));
61
59
  //# sourceMappingURL=cosmoz-omnitable-skeleton.js.map
@@ -1,9 +1,6 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.checkbox = void 0;
4
1
  /* eslint-disable max-lines */
5
- const cosmoz_utils_1 = require("@neovici/cosmoz-utils");
6
- exports.checkbox = (0, cosmoz_utils_1.tagged) `
2
+ import { tagged as css } from '@neovici/cosmoz-utils';
3
+ export const checkbox = css `
7
4
  .checkbox {
8
5
  box-sizing: border-box;
9
6
  width: 18px;
@@ -82,7 +79,7 @@ exports.checkbox = (0, cosmoz_utils_1.tagged) `
82
79
  );
83
80
  }
84
81
  `;
85
- exports.default = (0, cosmoz_utils_1.tagged) `
82
+ export default css `
86
83
  :host {
87
84
  display: flex;
88
85
  flex-direction: column;
@@ -455,7 +452,7 @@ exports.default = (0, cosmoz_utils_1.tagged) `
455
452
  color: rgba(0, 0, 0, 0.54);
456
453
  }
457
454
 
458
- ${exports.checkbox}
455
+ ${checkbox}
459
456
 
460
457
  .all {
461
458
  margin-bottom: 6px;
@@ -1,3 +1,3 @@
1
- export const actionSlots: import("lit-html", { with: { "resolution-mode": "import" } }).TemplateResult<1>;
1
+ export const actionSlots: import("lit-html").TemplateResult<1>;
2
2
  export const actionSlotsPolymer: HTMLTemplateElement;
3
3
  //# sourceMappingURL=cosmoz-omnitable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cosmoz-omnitable.d.ts","sourceRoot":"","sources":["../src/cosmoz-omnitable.js"],"names":[],"mappings":"AAgFa,0GAA4D;AACxE,qDAA0E"}
1
+ {"version":3,"file":"cosmoz-omnitable.d.ts","sourceRoot":"","sources":["../src/cosmoz-omnitable.js"],"names":[],"mappings":"AAgFa,+DAA4D;AACxE,qDAA0E"}
@@ -1,43 +1,37 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.actionSlotsPolymer = exports.actionSlots = void 0;
7
- require("@neovici/cosmoz-bottom-bar");
8
- require("@polymer/iron-icon/iron-icon");
9
- require("@polymer/iron-icons/iron-icons");
10
- require("./cosmoz-omnitable-column");
11
- require("./cosmoz-omnitable-columns");
12
- require("./cosmoz-omnitable-group-row");
13
- require("./cosmoz-omnitable-header-row");
14
- require("./cosmoz-omnitable-item-expand");
15
- require("./cosmoz-omnitable-item-row");
16
- const use_notify_property_1 = require("@neovici/cosmoz-utils/hooks/use-notify-property");
17
- const pion_1 = require("@pionjs/pion");
18
- const html_tag_1 = require("@polymer/polymer/lib/utils/html-tag");
19
- const lit_html_1 = require("lit-html");
20
- const guard_js_1 = require("lit-html/directives/guard.js");
21
- const cosmoz_omnitable_styles_1 = __importDefault(require("./cosmoz-omnitable-styles"));
22
- const render_footer_1 = require("./lib/render-footer");
23
- const render_header_1 = require("./lib/render-header");
24
- const render_list_1 = require("./lib/render-list");
25
- const use_omnitable_1 = require("./lib/use-omnitable");
26
- require("./grouped-list/index.js");
1
+ import '@neovici/cosmoz-bottom-bar';
2
+ import '@polymer/iron-icon/iron-icon';
3
+ import '@polymer/iron-icons/iron-icons';
4
+ import './cosmoz-omnitable-column';
5
+ import './cosmoz-omnitable-columns';
6
+ import './cosmoz-omnitable-group-row';
7
+ import './cosmoz-omnitable-header-row';
8
+ import './cosmoz-omnitable-item-expand';
9
+ import './cosmoz-omnitable-item-row';
10
+ import { notifyProperty } from '@neovici/cosmoz-utils/hooks/use-notify-property';
11
+ import { component } from '@pionjs/pion';
12
+ import { html as polymerHtml } from '@polymer/polymer/lib/utils/html-tag';
13
+ import { html } from 'lit-html';
14
+ import { guard } from 'lit-html/directives/guard.js';
15
+ import styles from './cosmoz-omnitable-styles';
16
+ import { renderFooter } from './lib/render-footer';
17
+ import { renderHeader } from './lib/render-header';
18
+ import { renderList } from './lib/render-list';
19
+ import { useOmnitable } from './lib/use-omnitable';
20
+ import './grouped-list/index.js';
27
21
  const shimCSS = (s) => window.ShadyCSS?.ApplyShim?.transformCssText?.(s) || s;
28
22
  const Omnitable = (host) => {
29
- const { header, list, footer } = (0, use_omnitable_1.useOmnitable)(host);
30
- return (0, lit_html_1.html) `
23
+ const { header, list, footer } = useOmnitable(host);
24
+ return html `
31
25
  <style>
32
- ${(0, guard_js_1.guard)([], () => shimCSS(cosmoz_omnitable_styles_1.default))}
26
+ ${guard([], () => shimCSS(styles))}
33
27
  </style>
34
28
 
35
29
  <div class="mainContainer">
36
- ${(0, render_header_1.renderHeader)(header)}
30
+ ${renderHeader(header)}
37
31
  <div class="tableContent" id="tableContent">
38
- ${(0, render_list_1.renderList)(header, list)}
32
+ ${renderList(header, list)}
39
33
  </div>
40
- ${(0, render_footer_1.renderFooter)(footer)}
34
+ ${renderFooter(footer)}
41
35
  </div>
42
36
 
43
37
  <div id="columns">
@@ -45,7 +39,7 @@ const Omnitable = (host) => {
45
39
  </div>
46
40
  `;
47
41
  };
48
- customElements.define('cosmoz-omnitable', class extends (0, pion_1.component)(Omnitable, {
42
+ customElements.define('cosmoz-omnitable', class extends component(Omnitable, {
49
43
  observedAttributes: [
50
44
  'hash-param',
51
45
  'sort-on',
@@ -63,13 +57,13 @@ customElements.define('cosmoz-omnitable', class extends (0, pion_1.component)(Om
63
57
  }) {
64
58
  connectedCallback() {
65
59
  super.connectedCallback();
66
- (0, use_notify_property_1.notifyProperty)(this, 'selectedItems', []);
67
- (0, use_notify_property_1.notifyProperty)(this, 'visibleData', []);
68
- (0, use_notify_property_1.notifyProperty)(this, 'sortedFilteredGroupedItems', []);
60
+ notifyProperty(this, 'selectedItems', []);
61
+ notifyProperty(this, 'visibleData', []);
62
+ notifyProperty(this, 'sortedFilteredGroupedItems', []);
69
63
  }
70
64
  });
71
65
  const tmplt = `
72
66
  <slot name="actions" slot="actions"></slot>
73
67
  `;
74
- exports.actionSlots = (0, lit_html_1.html)(Object.assign([tmplt], { raw: [tmplt] })), exports.actionSlotsPolymer = (0, html_tag_1.html)(Object.assign([tmplt], { raw: [tmplt] }));
68
+ export const actionSlots = html(Object.assign([tmplt], { raw: [tmplt] })), actionSlotsPolymer = polymerHtml(Object.assign([tmplt], { raw: [tmplt] }));
75
69
  //# sourceMappingURL=cosmoz-omnitable.js.map
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const lit_html_1 = require("lit-html");
1
+ import { render } from 'lit-html';
4
2
  customElements.define('cosmoz-grouped-list-row', class Element extends HTMLElement {
5
3
  get item() {
6
4
  return this._item;
@@ -27,7 +25,7 @@ customElements.define('cosmoz-grouped-list-row', class Element extends HTMLEleme
27
25
  if (this._item == null || this._index == null || this._renderFn == null) {
28
26
  return;
29
27
  }
30
- (0, lit_html_1.render)(this._renderFn(this._item, this._index), this);
28
+ render(this._renderFn(this._item, this._index), this);
31
29
  }
32
30
  });
33
31
  //# sourceMappingURL=cosmoz-grouped-list-row.js.map
@@ -1,7 +1,5 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const use_cosmoz_grouped_list_js_1 = require("./use-cosmoz-grouped-list.js");
4
- const pion_1 = require("@pionjs/pion");
5
- const CosmozGroupedList = (host) => (0, use_cosmoz_grouped_list_js_1.renderCosmozGroupedList)((0, use_cosmoz_grouped_list_js_1.useCosmozGroupedList)(host));
6
- customElements.define('cosmoz-grouped-list', (0, pion_1.component)(CosmozGroupedList, { useShadowDOM: false }));
1
+ import { renderCosmozGroupedList, useCosmozGroupedList, } from './use-cosmoz-grouped-list.js';
2
+ import { component } from '@pionjs/pion';
3
+ const CosmozGroupedList = (host) => renderCosmozGroupedList(useCosmozGroupedList(host));
4
+ customElements.define('cosmoz-grouped-list', component(CosmozGroupedList, { useShadowDOM: false }));
7
5
  //# sourceMappingURL=cosmoz-grouped-list.js.map
@@ -1,4 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- require("./cosmoz-grouped-list.js");
1
+ import './cosmoz-grouped-list.js';
4
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  export function useCollapsibleItems(): {
2
- state: any;
3
- signal: any;
4
- toggleFold: any;
5
- toggleCollapse: any;
2
+ state: WeakMap<object, any>;
3
+ signal: WeakMap<object, any>[];
4
+ toggleFold: (item: any, folded: any) => void;
5
+ toggleCollapse: (item: any, collapsed: any) => void;
6
6
  };
7
7
  //# sourceMappingURL=use-collapsible-items.d.ts.map
@@ -1,19 +1,16 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useCollapsibleItems = void 0;
4
- const pion_1 = require("@pionjs/pion");
5
- const use_weak_state_1 = require("./use-weak-state");
6
- const utils_1 = require("./utils");
7
- const useCollapsibleItems = () => {
8
- const { setItemState, state, signal } = (0, use_weak_state_1.useWeakState)(), toggleFold = (0, pion_1.useCallback)((item, folded) => {
9
- if (!(0, utils_1.isGroup)(item)) {
1
+ import { useCallback } from '@pionjs/pion';
2
+ import { useWeakState } from './use-weak-state';
3
+ import { isGroup } from './utils';
4
+ export const useCollapsibleItems = () => {
5
+ const { setItemState, state, signal } = useWeakState(), toggleFold = useCallback((item, folded) => {
6
+ if (!isGroup(item)) {
10
7
  return;
11
8
  }
12
9
  setItemState(item, (state) => ({
13
10
  folded: folded !== undefined ? folded : !state.folded,
14
11
  }));
15
- }, []), toggleCollapse = (0, pion_1.useCallback)((item, collapsed) => {
16
- if ((0, utils_1.isGroup)(item)) {
12
+ }, []), toggleCollapse = useCallback((item, collapsed) => {
13
+ if (isGroup(item)) {
17
14
  return;
18
15
  }
19
16
  setItemState(item, (state) => ({
@@ -27,5 +24,4 @@ const useCollapsibleItems = () => {
27
24
  toggleCollapse,
28
25
  };
29
26
  };
30
- exports.useCollapsibleItems = useCollapsibleItems;
31
27
  //# sourceMappingURL=use-collapsible-items.js.map
@@ -9,7 +9,7 @@ export function renderCosmozGroupedList({ renderRow, flatData }: {
9
9
  flatData: any[];
10
10
  }): any;
11
11
  export function useCosmozGroupedList(host: any): {
12
- renderRow: any;
12
+ renderRow: (item: any, index: any) => any;
13
13
  flatData: any;
14
14
  };
15
15
  //# sourceMappingURL=use-cosmoz-grouped-list.d.ts.map
@@ -1,37 +1,34 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useCosmozGroupedList = exports.renderCosmozGroupedList = void 0;
4
- const use_imperative_api_1 = require("@neovici/cosmoz-utils/hooks/use-imperative-api");
5
- const use_notify_property_1 = require("@neovici/cosmoz-utils/hooks/use-notify-property");
6
- const pion_1 = require("@pionjs/pion");
7
- const lit_html_1 = require("lit-html");
8
- require("./cosmoz-grouped-list-row");
9
- const use_collapsible_items_1 = require("./use-collapsible-items");
10
- const use_selected_items_1 = require("./use-selected-items");
11
- const utils_1 = require("./utils");
12
- const virtualize_js_1 = require("@lit-labs/virtualizer/virtualize.js");
1
+ import { useImperativeApi } from '@neovici/cosmoz-utils/hooks/use-imperative-api';
2
+ import { useNotifyProperty } from '@neovici/cosmoz-utils/hooks/use-notify-property';
3
+ import { useCallback, useLayoutEffect, useMemo } from '@pionjs/pion';
4
+ import { html } from 'lit-html';
5
+ import './cosmoz-grouped-list-row';
6
+ import { useCollapsibleItems } from './use-collapsible-items';
7
+ import { useSelectedItems } from './use-selected-items';
8
+ import { byReference, isExpanded, isFolded, prepareData } from './utils';
9
+ import { virtualize } from '@lit-labs/virtualizer/virtualize.js';
13
10
  const styles = {
14
11
  host: { position: 'relative', display: 'flex', flexDirection: 'column' },
15
12
  }, useCosmozGroupedList = (host) => {
16
- const { data, renderItem, renderGroup, displayEmptyGroups, compareItemsFn = utils_1.byReference, } = host, { toggleFold, toggleCollapse, state, signal } = (0, use_collapsible_items_1.useCollapsibleItems)(),
13
+ const { data, renderItem, renderGroup, displayEmptyGroups, compareItemsFn = byReference, } = host, { toggleFold, toggleCollapse, state, signal } = useCollapsibleItems(),
17
14
  // TODO: state changes trigger recalculation, which is slow (200ms with 10k items)
18
15
  // it only makes sense to do it when a group is folded
19
16
  // suggested fix: separate signal for item collapse and group fold
20
- flatData = (0, pion_1.useMemo)(() => (0, utils_1.prepareData)(data, displayEmptyGroups, state), [data, displayEmptyGroups, signal]), { selectedItems, isItemSelected, isGroupSelected, isSelected, select, deselect, selectOnly, selectAll, deselectAll, toggleSelect, toggleSelectTo, } = (0, use_selected_items_1.useSelectedItems)({ initial: [], compareItemsFn, data, flatData }), renderRow = (0, pion_1.useCallback)((item, index) => Array.isArray(item.items)
17
+ flatData = useMemo(() => prepareData(data, displayEmptyGroups, state), [data, displayEmptyGroups, signal]), { selectedItems, isItemSelected, isGroupSelected, isSelected, select, deselect, selectOnly, selectAll, deselectAll, toggleSelect, toggleSelectTo, } = useSelectedItems({ initial: [], compareItemsFn, data, flatData }), renderRow = useCallback((item, index) => Array.isArray(item.items)
21
18
  ? renderGroup(item, index, {
22
19
  selected: isGroupSelected(item, selectedItems),
23
- folded: (0, utils_1.isFolded)(item, state),
20
+ folded: isFolded(item, state),
24
21
  toggleSelect: (selected) => toggleSelect(item, typeof selected === 'boolean' ? selected : undefined),
25
22
  toggleFold: () => toggleFold(item),
26
23
  })
27
24
  : renderItem(item, index, {
28
25
  selected: selectedItems.includes(item),
29
- expanded: (0, utils_1.isExpanded)(item, state),
26
+ expanded: isExpanded(item, state),
30
27
  toggleSelect: (selected) => toggleSelect(item, typeof selected === 'boolean' ? selected : undefined),
31
28
  toggleCollapse: () => toggleCollapse(item),
32
29
  }), [renderItem, renderGroup, selectedItems, toggleSelect, signal]);
33
- (0, pion_1.useLayoutEffect)(() => Object.assign(host.style, styles.host), []);
34
- (0, use_notify_property_1.useNotifyProperty)('selectedItems', selectedItems);
30
+ useLayoutEffect(() => Object.assign(host.style, styles.host), []);
31
+ useNotifyProperty('selectedItems', selectedItems);
35
32
  const api = {
36
33
  toggleFold,
37
34
  toggleCollapse,
@@ -46,10 +43,9 @@ const styles = {
46
43
  toggleSelect,
47
44
  toggleSelectTo,
48
45
  };
49
- (0, use_imperative_api_1.useImperativeApi)(api, Object.values(api));
46
+ useImperativeApi(api, Object.values(api));
50
47
  return { renderRow, flatData };
51
48
  };
52
- exports.useCosmozGroupedList = useCosmozGroupedList;
53
49
  /**
54
50
  * @param {Object} params
55
51
  * @param {Function} params.renderRow
@@ -57,14 +53,14 @@ exports.useCosmozGroupedList = useCosmozGroupedList;
57
53
  * @returns {*}
58
54
  */
59
55
  const renderCosmozGroupedList = ({ renderRow, flatData }) => {
60
- return (0, virtualize_js_1.virtualize)({
56
+ return virtualize({
61
57
  items: flatData,
62
- renderItem: (item, index) => (0, lit_html_1.html) `<cosmoz-grouped-list-row
58
+ renderItem: (item, index) => html `<cosmoz-grouped-list-row
63
59
  .item=${item}
64
60
  .index=${index}
65
61
  .renderFn=${renderRow}
66
62
  ></cosmoz-grouped-list-row>`,
67
63
  });
68
64
  };
69
- exports.renderCosmozGroupedList = renderCosmozGroupedList;
65
+ export { renderCosmozGroupedList, useCosmozGroupedList };
70
66
  //# sourceMappingURL=use-cosmoz-grouped-list.js.map
@@ -5,15 +5,15 @@ export function useSelectedItems({ initial, compareItemsFn, data, flatData, }: {
5
5
  flatData: any;
6
6
  }): {
7
7
  selectedItems: any;
8
- isItemSelected: any;
9
- isGroupSelected: any;
10
- isSelected: any;
11
- select: any;
12
- deselect: any;
13
- selectOnly: any;
14
- selectAll: any;
15
- deselectAll: any;
16
- toggleSelect: any;
17
- toggleSelectTo: any;
8
+ isItemSelected: (item: any) => any;
9
+ isGroupSelected: (group: any) => any;
10
+ isSelected: (item: any) => any;
11
+ select: (item: any) => void;
12
+ deselect: (item: any) => void;
13
+ selectOnly: (item: any) => void;
14
+ selectAll: () => void;
15
+ deselectAll: () => void;
16
+ toggleSelect: (item: any, selected?: boolean) => void;
17
+ toggleSelectTo: (item: any, selected: any) => void;
18
18
  };
19
19
  //# sourceMappingURL=use-selected-items.d.ts.map
@@ -1,34 +1,31 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useSelectedItems = void 0;
4
- const pion_1 = require("@pionjs/pion");
5
- const utils_1 = require("./utils");
6
- const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
7
- const [selectedItems, setSelectedItems] = (0, pion_1.useState)(initial), [lastSelection, setLastSelection] = (0, pion_1.useState)(),
1
+ import { useCallback, useEffect, useState } from '@pionjs/pion';
2
+ import { isGroup } from './utils';
3
+ export const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
4
+ const [selectedItems, setSelectedItems] = useState(initial), [lastSelection, setLastSelection] = useState(),
8
5
  /**
9
6
  * Check if item is selected.
10
7
  * @param {object} item Item.
11
8
  * @returns {boolean} Whether item is selected.
12
9
  */
13
- isItemSelected = (0, pion_1.useCallback)((item) => selectedItems.includes(item), [selectedItems]),
10
+ isItemSelected = useCallback((item) => selectedItems.includes(item), [selectedItems]),
14
11
  /**
15
12
  * Check if group is selected.
16
13
  * @param {object} group Group.
17
14
  * @returns {boolean} Whether group is selected.
18
15
  */
19
- isGroupSelected = (0, pion_1.useCallback)((group) => group?.items?.every(isItemSelected), [isItemSelected]),
16
+ isGroupSelected = useCallback((group) => group?.items?.every(isItemSelected), [isItemSelected]),
20
17
  /**
21
18
  * Check if item.group is selected.
22
19
  * @param {object} item Item.
23
20
  * @returns {boolean} Whether item is selected.
24
21
  */
25
- isSelected = (0, pion_1.useCallback)((item) => isItemSelected(item) || isGroupSelected(item), [isItemSelected, isGroupSelected]),
22
+ isSelected = useCallback((item) => isItemSelected(item) || isGroupSelected(item), [isItemSelected, isGroupSelected]),
26
23
  /**
27
24
  * Add an item/group to the list of selected items.
28
25
  * @param {object} item Item to select.
29
26
  * @returns {void}
30
27
  */
31
- select = (0, pion_1.useCallback)((item) => {
28
+ select = useCallback((item) => {
32
29
  const items = item.items ?? [item];
33
30
  setSelectedItems((selection) => [
34
31
  ...selection,
@@ -41,11 +38,11 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
41
38
  * @param {object} item Item to select.
42
39
  * @returns {void}
43
40
  */
44
- deselect = (0, pion_1.useCallback)((item) => {
41
+ deselect = useCallback((item) => {
45
42
  const items = item.items ?? [item];
46
43
  setSelectedItems((selection) => selection.filter((i) => !items.includes(i)));
47
44
  setLastSelection(item);
48
- }, []), selectOnly = (0, pion_1.useCallback)((item) => {
45
+ }, []), selectOnly = useCallback((item) => {
49
46
  setSelectedItems(item.items?.slice() || [item]);
50
47
  setLastSelection(item);
51
48
  }, []),
@@ -53,7 +50,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
53
50
  * Select all items.
54
51
  * @returns {void}
55
52
  */
56
- selectAll = (0, pion_1.useCallback)(() => {
53
+ selectAll = useCallback(() => {
57
54
  setSelectedItems(data.flatMap((item) => item.items || item));
58
55
  setLastSelection(undefined);
59
56
  }, [data]),
@@ -61,7 +58,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
61
58
  * Deselect all selected items.
62
59
  * @returns {void}
63
60
  */
64
- deselectAll = (0, pion_1.useCallback)(() => {
61
+ deselectAll = useCallback(() => {
65
62
  setSelectedItems([]);
66
63
  setLastSelection(undefined);
67
64
  }, []),
@@ -71,7 +68,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
71
68
  * @param {boolean=} selected Select or deselect, fallback to toggling.
72
69
  * @returns {void}
73
70
  */
74
- toggleSelect = (0, pion_1.useCallback)((item, selected = !isSelected(item)) => selected ? select(item) : deselect(item), [isSelected]), toggleSelectTo = (0, pion_1.useCallback)((item, selected) => {
71
+ toggleSelect = useCallback((item, selected = !isSelected(item)) => selected ? select(item) : deselect(item), [isSelected]), toggleSelectTo = useCallback((item, selected) => {
75
72
  const last = lastSelection
76
73
  ? flatData.findIndex((i) => compareItemsFn(i, lastSelection))
77
74
  : -1;
@@ -80,7 +77,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
80
77
  }
81
78
  const [from, to] = [last, flatData.indexOf(item)].sort((a, b) => a - b);
82
79
  flatData.slice(from, to + 1).forEach((item, i, items) => {
83
- if (i > 0 && i < items.length - 1 && (0, utils_1.isGroup)(item)) {
80
+ if (i > 0 && i < items.length - 1 && isGroup(item)) {
84
81
  return;
85
82
  }
86
83
  toggleSelect(item, selected);
@@ -88,7 +85,7 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
88
85
  setLastSelection(item);
89
86
  }, [flatData, compareItemsFn, toggleSelect]);
90
87
  // keep selected items across data updates
91
- (0, pion_1.useEffect)(() => setSelectedItems((selectedItems) => selectedItems.length > 0
88
+ useEffect(() => setSelectedItems((selectedItems) => selectedItems.length > 0
92
89
  ? flatData.filter((i) => selectedItems.find((item) => compareItemsFn(i, item)))
93
90
  : selectedItems), [flatData]);
94
91
  return {
@@ -105,5 +102,4 @@ const useSelectedItems = ({ initial, compareItemsFn, data, flatData, }) => {
105
102
  toggleSelectTo,
106
103
  };
107
104
  };
108
- exports.useSelectedItems = useSelectedItems;
109
105
  //# sourceMappingURL=use-selected-items.js.map
@@ -1,6 +1,6 @@
1
1
  export function useWeakState(): {
2
- setItemState: any;
3
- state: any;
4
- signal: any;
2
+ setItemState: (item: any, newItemState: any) => void;
3
+ state: WeakMap<object, any>;
4
+ signal: WeakMap<object, any>[];
5
5
  };
6
6
  //# sourceMappingURL=use-weak-state.d.ts.map
@@ -1,12 +1,9 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useWeakState = void 0;
4
- const pion_1 = require("@pionjs/pion");
5
- const utils_1 = require("./utils");
6
- const useWeakState = () => {
7
- const [wrapper, setState] = (0, pion_1.useState)(() => [new WeakMap()]), setItemState = (0, pion_1.useCallback)((item, newItemState) => setState(([state]) => {
8
- const itemState = (0, utils_1.getItemState)(item, state);
9
- Object.assign(itemState, (0, utils_1.callFn)(newItemState, itemState));
1
+ import { useCallback, useState } from '@pionjs/pion';
2
+ import { callFn, getItemState } from './utils';
3
+ export const useWeakState = () => {
4
+ const [wrapper, setState] = useState(() => [new WeakMap()]), setItemState = useCallback((item, newItemState) => setState(([state]) => {
5
+ const itemState = getItemState(item, state);
6
+ Object.assign(itemState, callFn(newItemState, itemState));
10
7
  return [state];
11
8
  }), []);
12
9
  return {
@@ -15,5 +12,4 @@ const useWeakState = () => {
15
12
  signal: wrapper,
16
13
  };
17
14
  };
18
- exports.useWeakState = useWeakState;
19
15
  //# sourceMappingURL=use-weak-state.js.map
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.byReference = exports.callFn = exports.isGroup = exports.isFolded = exports.isExpanded = exports.getItemState = exports.prepareData = exports.symbols = void 0;
4
1
  const symbols = {
5
2
  group: Symbol('group'),
6
3
  }, getItemState = (item, itemsState) => {
@@ -56,12 +53,5 @@ prepareData = (data, displayEmptyGroups, itemsState) => {
56
53
  }, []);
57
54
  return flatData;
58
55
  }, callFn = (fn, ...args) => (typeof fn === 'function' ? fn(...args) : fn), byReference = (a, b) => a === b;
59
- exports.symbols = symbols;
60
- exports.getItemState = getItemState;
61
- exports.isExpanded = isExpanded;
62
- exports.isFolded = isFolded;
63
- exports.isGroup = isGroup;
64
- exports.prepareData = prepareData;
65
- exports.callFn = callFn;
66
- exports.byReference = byReference;
56
+ export { symbols, prepareData, getItemState, isExpanded, isFolded, isGroup, callFn, byReference, };
67
57
  //# sourceMappingURL=utils.js.map