@paperless/core 1.14.0 → 1.16.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 (101) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/assets/i18n/table.i18n.en.json +4 -0
  3. package/dist/assets/i18n/table.i18n.nl.json +4 -0
  4. package/dist/build/p-2327d2ad.entry.js +2 -0
  5. package/dist/build/p-2327d2ad.entry.js.map +1 -0
  6. package/dist/build/{p-502ff028.entry.js → p-4ea9ac89.entry.js} +2 -2
  7. package/dist/build/p-4ea9ac89.entry.js.map +1 -0
  8. package/dist/build/p-a2b552f9.entry.js +2 -0
  9. package/dist/build/p-a2b552f9.entry.js.map +1 -0
  10. package/dist/build/paperless.esm.js +1 -1
  11. package/dist/build/paperless.esm.js.map +1 -1
  12. package/dist/cjs/index-1fde8b14.js +2 -2
  13. package/dist/cjs/loader.cjs.js +1 -1
  14. package/dist/cjs/p-divider.cjs.entry.js +2 -1
  15. package/dist/cjs/p-divider.cjs.entry.js.map +1 -1
  16. package/dist/cjs/{p-illustration_6.cjs.entry.js → p-floating-menu-container_8.cjs.entry.js} +42 -14
  17. package/dist/cjs/p-floating-menu-container_8.cjs.entry.js.map +1 -0
  18. package/dist/cjs/p-table.cjs.entry.js +33 -14
  19. package/dist/cjs/p-table.cjs.entry.js.map +1 -1
  20. package/dist/cjs/paperless.cjs.js +1 -1
  21. package/dist/collection/collection-manifest.json +2 -0
  22. package/dist/collection/components/atoms/divider/divider.component.css +1 -1
  23. package/dist/collection/components/atoms/divider/divider.component.js +25 -0
  24. package/dist/collection/components/atoms/divider/divider.component.js.map +1 -1
  25. package/dist/collection/components/atoms/floating-menu-container/floating-menu-container.component.css +1 -0
  26. package/dist/collection/components/atoms/floating-menu-container/floating-menu-container.component.js +44 -0
  27. package/dist/collection/components/atoms/floating-menu-container/floating-menu-container.component.js.map +1 -0
  28. package/dist/collection/components/atoms/floating-menu-container/test/floating-menu-container.component.e2e.js +26 -0
  29. package/dist/collection/components/atoms/floating-menu-container/test/floating-menu-container.component.e2e.js.map +1 -0
  30. package/dist/collection/components/atoms/floating-menu-container/test/floating-menu-container.component.spec.js +17 -0
  31. package/dist/collection/components/atoms/floating-menu-container/test/floating-menu-container.component.spec.js.map +1 -0
  32. package/dist/collection/components/atoms/floating-menu-item/floating-menu-item.component.css +1 -0
  33. package/dist/collection/components/atoms/floating-menu-item/floating-menu-item.component.js +44 -0
  34. package/dist/collection/components/atoms/floating-menu-item/floating-menu-item.component.js.map +1 -0
  35. package/dist/collection/components/atoms/floating-menu-item/test/floating-menu-container.component.e2e.js +26 -0
  36. package/dist/collection/components/atoms/floating-menu-item/test/floating-menu-container.component.e2e.js.map +1 -0
  37. package/dist/collection/components/atoms/floating-menu-item/test/floating-menu-container.component.spec.js +17 -0
  38. package/dist/collection/components/atoms/floating-menu-item/test/floating-menu-container.component.spec.js.map +1 -0
  39. package/dist/collection/components/molecules/table-header/table-header.component.js +33 -33
  40. package/dist/collection/components/molecules/table-header/table-header.component.js.map +1 -1
  41. package/dist/collection/components/organisms/table/table.component.css +1 -1
  42. package/dist/collection/components/organisms/table/table.component.js +107 -30
  43. package/dist/collection/components/organisms/table/table.component.js.map +1 -1
  44. package/dist/collection/tailwind/z-index.js +1 -0
  45. package/dist/components/divider.component.js +5 -2
  46. package/dist/components/divider.component.js.map +1 -1
  47. package/dist/components/floating-menu-container.component.js +35 -0
  48. package/dist/components/floating-menu-container.component.js.map +1 -0
  49. package/dist/components/floating-menu-item.component.js +35 -0
  50. package/dist/components/floating-menu-item.component.js.map +1 -0
  51. package/dist/components/p-floating-menu-container.d.ts +11 -0
  52. package/dist/components/p-floating-menu-container.js +8 -0
  53. package/dist/components/p-floating-menu-container.js.map +1 -0
  54. package/dist/components/p-floating-menu-item.d.ts +11 -0
  55. package/dist/components/p-floating-menu-item.js +8 -0
  56. package/dist/components/p-floating-menu-item.js.map +1 -0
  57. package/dist/components/p-table.js +63 -29
  58. package/dist/components/p-table.js.map +1 -1
  59. package/dist/components/table-header.component.js +19 -19
  60. package/dist/components/table-header.component.js.map +1 -1
  61. package/dist/esm/index-7b917f6b.js +2 -2
  62. package/dist/esm/loader.js +1 -1
  63. package/dist/esm/p-divider.entry.js +2 -1
  64. package/dist/esm/p-divider.entry.js.map +1 -1
  65. package/dist/esm/{p-illustration_6.entry.js → p-floating-menu-container_8.entry.js} +41 -15
  66. package/dist/esm/p-floating-menu-container_8.entry.js.map +1 -0
  67. package/dist/esm/p-table.entry.js +33 -14
  68. package/dist/esm/p-table.entry.js.map +1 -1
  69. package/dist/esm/paperless.js +1 -1
  70. package/dist/index.html +1 -1
  71. package/dist/paperless/p-2327d2ad.entry.js +2 -0
  72. package/dist/paperless/p-2327d2ad.entry.js.map +1 -0
  73. package/dist/paperless/{p-502ff028.entry.js → p-4ea9ac89.entry.js} +2 -2
  74. package/dist/paperless/p-4ea9ac89.entry.js.map +1 -0
  75. package/dist/paperless/p-a2b552f9.entry.js +2 -0
  76. package/dist/paperless/p-a2b552f9.entry.js.map +1 -0
  77. package/dist/paperless/paperless.esm.js +1 -1
  78. package/dist/paperless/paperless.esm.js.map +1 -1
  79. package/dist/sw.js +1 -1
  80. package/dist/sw.js.map +1 -1
  81. package/dist/tailwind/z-index.js +1 -0
  82. package/dist/types/components/atoms/divider/divider.component.d.ts +4 -0
  83. package/dist/types/components/atoms/floating-menu-container/floating-menu-container.component.d.ts +7 -0
  84. package/dist/types/components/atoms/floating-menu-item/floating-menu-item.component.d.ts +7 -0
  85. package/dist/types/components/molecules/table-header/table-header.component.d.ts +15 -15
  86. package/dist/types/components/organisms/table/table.component.d.ts +26 -12
  87. package/dist/types/components.d.ts +140 -66
  88. package/hydrate/index.js +114 -41
  89. package/package.json +1 -1
  90. package/dist/build/p-0dcf23cd.entry.js +0 -2
  91. package/dist/build/p-0dcf23cd.entry.js.map +0 -1
  92. package/dist/build/p-502ff028.entry.js.map +0 -1
  93. package/dist/build/p-b59e29d7.entry.js +0 -2
  94. package/dist/build/p-b59e29d7.entry.js.map +0 -1
  95. package/dist/cjs/p-illustration_6.cjs.entry.js.map +0 -1
  96. package/dist/esm/p-illustration_6.entry.js.map +0 -1
  97. package/dist/paperless/p-0dcf23cd.entry.js +0 -2
  98. package/dist/paperless/p-0dcf23cd.entry.js.map +0 -1
  99. package/dist/paperless/p-502ff028.entry.js.map +0 -1
  100. package/dist/paperless/p-b59e29d7.entry.js +0 -2
  101. package/dist/paperless/p-b59e29d7.entry.js.map +0 -1
@@ -4,8 +4,8 @@ import { formatTranslation, getLocaleComponentStrings, } from "../../../utils/lo
4
4
  export class TableHeader {
5
5
  constructor() {
6
6
  this._defaultFilterButtonTemplate = () => formatTranslation(this._locales.filter);
7
- this._defaultEditButtonTemplate = (amount) => this.editText
8
- ? this.editText
7
+ this._defaultActionButtonTemplate = (amount) => this.actionText
8
+ ? this.actionText
9
9
  : formatTranslation(amount === 0
10
10
  ? this._locales.edit
11
11
  : amount === 1
@@ -22,12 +22,12 @@ export class TableHeader {
22
22
  this.enableFilter = true;
23
23
  this.selectedFiltersAmount = undefined;
24
24
  this.filterButtonTemplate = this._defaultFilterButtonTemplate;
25
- this.enableEdit = true;
26
- this.editLoading = false;
27
- this.editIcon = 'pencil';
28
- this.editText = undefined;
29
- this.canEdit = false;
30
- this.editButtonTemplate = this._defaultEditButtonTemplate;
25
+ this.enableAction = true;
26
+ this.actionLoading = false;
27
+ this.actionIcon = 'pencil';
28
+ this.actionText = undefined;
29
+ this.canUseAction = false;
30
+ this.actionButtonTemplate = this._defaultActionButtonTemplate;
31
31
  this._locales = {};
32
32
  }
33
33
  componentWillLoad() {
@@ -54,15 +54,15 @@ export class TableHeader {
54
54
  ? this.filterButtonTemplate()
55
55
  : this._defaultFilterButtonTemplate(), this.selectedFiltersAmount &&
56
56
  this._getLabel(this.selectedFiltersAmount), mobileTotal > 0 &&
57
- this._getLabel(mobileTotal, 'mobile'))), this.enableEdit && this._buttonTemplate()), this.enableEdit && this.canEdit && (h("div", { class: "fixed bottom-0 left-0 block w-full border border-solid border-transparent border-t-mystic-dark bg-white p-4 desktop-xs:hidden" }, this._buttonTemplate(true)))));
57
+ this._getLabel(mobileTotal, 'mobile'))), this.enableAction && this._buttonTemplate()), this.enableAction && this.canUseAction && (h("div", { class: "fixed bottom-0 left-0 block w-full border border-solid border-transparent border-t-mystic-dark bg-white p-4 desktop-xs:hidden" }, this._buttonTemplate(true)))));
58
58
  }
59
59
  async _setLocales() {
60
60
  this._locales = await getLocaleComponentStrings(this._el);
61
61
  }
62
62
  _buttonTemplate(mobile = false) {
63
- return (h("p-button", { class: mobile ? 'w-full' : 'hidden desktop-xs:flex', icon: this.editIcon, size: "small", disabled: !this.canEdit, onClick: () => this.edit.emit(), loading: this.editLoading }, this.editButtonTemplate
64
- ? this.editButtonTemplate(mobile ? this.itemsSelectedAmount : 0)
65
- : this._defaultEditButtonTemplate(mobile ? this.itemsSelectedAmount : 0)));
63
+ return (h("p-button", { class: mobile ? 'w-full' : 'hidden desktop-xs:flex', icon: this.actionIcon, size: "small", disabled: !this.canUseAction, onClick: () => this.action.emit(), loading: this.actionLoading }, this.actionButtonTemplate
64
+ ? this.actionButtonTemplate(mobile ? this.itemsSelectedAmount : 0)
65
+ : this._defaultActionButtonTemplate(mobile ? this.itemsSelectedAmount : 0)));
66
66
  }
67
67
  _getLabel(amount, variant = 'default') {
68
68
  return (h("p-label", { size: "small", variant: "negative", behavior: "text", class: `ml-1 ${variant === 'default'
@@ -250,7 +250,7 @@ export class TableHeader {
250
250
  },
251
251
  "defaultValue": "this._defaultFilterButtonTemplate"
252
252
  },
253
- "enableEdit": {
253
+ "enableAction": {
254
254
  "type": "boolean",
255
255
  "mutable": false,
256
256
  "complexType": {
@@ -262,13 +262,13 @@ export class TableHeader {
262
262
  "optional": false,
263
263
  "docs": {
264
264
  "tags": [],
265
- "text": "Wether to show the edit button"
265
+ "text": "Wether to show the action button"
266
266
  },
267
- "attribute": "enable-edit",
267
+ "attribute": "enable-action",
268
268
  "reflect": false,
269
269
  "defaultValue": "true"
270
270
  },
271
- "editLoading": {
271
+ "actionLoading": {
272
272
  "type": "boolean",
273
273
  "mutable": false,
274
274
  "complexType": {
@@ -280,13 +280,13 @@ export class TableHeader {
280
280
  "optional": false,
281
281
  "docs": {
282
282
  "tags": [],
283
- "text": "Wether the edit button is loading"
283
+ "text": "Wether the action button is loading"
284
284
  },
285
- "attribute": "edit-loading",
285
+ "attribute": "action-loading",
286
286
  "reflect": false,
287
287
  "defaultValue": "false"
288
288
  },
289
- "editIcon": {
289
+ "actionIcon": {
290
290
  "type": "string",
291
291
  "mutable": false,
292
292
  "complexType": {
@@ -304,13 +304,13 @@ export class TableHeader {
304
304
  "optional": false,
305
305
  "docs": {
306
306
  "tags": [],
307
- "text": "The edit button icon"
307
+ "text": "The action button icon"
308
308
  },
309
- "attribute": "edit-icon",
309
+ "attribute": "action-icon",
310
310
  "reflect": false,
311
311
  "defaultValue": "'pencil'"
312
312
  },
313
- "editText": {
313
+ "actionText": {
314
314
  "type": "string",
315
315
  "mutable": false,
316
316
  "complexType": {
@@ -322,12 +322,12 @@ export class TableHeader {
322
322
  "optional": false,
323
323
  "docs": {
324
324
  "tags": [],
325
- "text": "The edit button text if changed"
325
+ "text": "The action button text if changed"
326
326
  },
327
- "attribute": "edit-text",
327
+ "attribute": "action-text",
328
328
  "reflect": false
329
329
  },
330
- "canEdit": {
330
+ "canUseAction": {
331
331
  "type": "boolean",
332
332
  "mutable": true,
333
333
  "complexType": {
@@ -339,13 +339,13 @@ export class TableHeader {
339
339
  "optional": false,
340
340
  "docs": {
341
341
  "tags": [],
342
- "text": "Wether to enable the edit button"
342
+ "text": "Wether to enable the action button"
343
343
  },
344
- "attribute": "can-edit",
344
+ "attribute": "can-use-action",
345
345
  "reflect": false,
346
346
  "defaultValue": "false"
347
347
  },
348
- "editButtonTemplate": {
348
+ "actionButtonTemplate": {
349
349
  "type": "unknown",
350
350
  "mutable": false,
351
351
  "complexType": {
@@ -363,9 +363,9 @@ export class TableHeader {
363
363
  "optional": false,
364
364
  "docs": {
365
365
  "tags": [],
366
- "text": "The template for the edit button text"
366
+ "text": "The template for the action button text"
367
367
  },
368
- "defaultValue": "this._defaultEditButtonTemplate"
368
+ "defaultValue": "this._defaultActionButtonTemplate"
369
369
  }
370
370
  };
371
371
  }
@@ -427,14 +427,14 @@ export class TableHeader {
427
427
  "references": {}
428
428
  }
429
429
  }, {
430
- "method": "edit",
431
- "name": "edit",
430
+ "method": "action",
431
+ "name": "action",
432
432
  "bubbles": false,
433
433
  "cancelable": true,
434
434
  "composed": true,
435
435
  "docs": {
436
436
  "tags": [],
437
- "text": "Event when the edit button is clicked"
437
+ "text": "Event when the action button is clicked"
438
438
  },
439
439
  "complexType": {
440
440
  "original": "null",
@@ -1 +1 @@
1
- {"version":3,"file":"table-header.component.js","sourceRoot":"","sources":["../../../../src/components/molecules/table-header/table-header.component.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { debounceTime, distinctUntilChanged, Subject } from 'rxjs';\nimport { IconVariant } from '../../../components';\nimport { QuickFilter } from '../../../types/table';\nimport {\n formatTranslation,\n getLocaleComponentStrings,\n} from '../../../utils/localization';\n\nexport type templateFunc = () => string;\nexport type buttonTemplateFunc = (amount: number) => string;\n\n@Component({\n tag: 'p-table-header',\n styleUrl: 'table-header.component.scss',\n shadow: true,\n})\nexport class TableHeader {\n private _defaultFilterButtonTemplate: templateFunc = () =>\n formatTranslation(this._locales.filter);\n private _defaultEditButtonTemplate: buttonTemplateFunc = (amount: number) =>\n this.editText\n ? this.editText\n : formatTranslation(\n amount === 0\n ? this._locales.edit\n : amount === 1\n ? this._locales.edit_single\n : this._locales.edit_plural,\n { amount }\n );\n\n /**\n * Quick filters to show\n */\n @Prop() quickFilters: QuickFilter[] = [];\n\n /**\n * Active quick filter identifier\n */\n @Prop() activeQuickFilterIdentifier: string;\n\n /**\n * Wether we want to show loading state\n */\n @Prop() loading: boolean = false;\n\n /**\n * Wether to show the search input\n */\n @Prop() enableSearch: boolean = true;\n\n /**\n * The amount of items that are selected\n */\n @Prop() itemsSelectedAmount: number = 0;\n\n /**\n * The query to show in the search bar\n */\n @Prop({ mutable: true }) query: string;\n\n /**\n * Wether to show the filter button\n */\n @Prop() enableFilter: boolean = true;\n\n /**\n * The amount of filters being selected\n */\n @Prop() selectedFiltersAmount: number;\n\n /**\n * The template for the filter button text\n */\n @Prop() filterButtonTemplate: templateFunc =\n this._defaultFilterButtonTemplate;\n\n /**\n * Wether to show the edit button\n */\n @Prop() enableEdit: boolean = true;\n\n /**\n * Wether the edit button is loading\n */\n @Prop() editLoading: boolean = false;\n\n /**\n * The edit button icon\n */\n @Prop() editIcon: IconVariant = 'pencil';\n\n /**\n * The edit button text if changed\n */\n @Prop() editText: string;\n\n /**\n * Wether to enable the edit button\n */\n @Prop({ mutable: true }) canEdit: boolean = false;\n\n /**\n * The template for the edit button text\n */\n @Prop() editButtonTemplate: buttonTemplateFunc =\n this._defaultEditButtonTemplate;\n\n /**\n * Event when one of the quick filters is clicked\n */\n @Event({\n bubbles: false,\n })\n quickFilter: EventEmitter<QuickFilter>;\n\n /**\n * Event when the query changes\n */\n @Event({\n bubbles: false,\n })\n queryChange: EventEmitter<string>;\n\n /**\n * Event when the filter button is clicked\n */\n @Event({\n bubbles: false,\n })\n filter: EventEmitter<null>;\n\n /**\n * Event when the edit button is clicked\n */\n @Event({\n bubbles: false,\n })\n edit: EventEmitter<null>;\n\n /**\n * The host element\n */\n @Element() private _el: HTMLElement;\n\n /**\n * Locales used for this component\n */\n @State() private _locales: any = {};\n\n private _queryObserver = new Subject<string>();\n private _hasCustomFilterSlot = false;\n\n componentWillLoad() {\n this._hasCustomFilterSlot = !!this._el.querySelector(\n ':scope > [slot=\"custom-filter\"]'\n );\n\n this._setLocales();\n }\n\n componentDidLoad() {\n this._queryObserver\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((value) => this.queryChange.emit(value));\n }\n\n render() {\n const activeQuickFilter = this.quickFilters.find(\n (f) => f.identifier === this.activeQuickFilterIdentifier\n );\n const mobileTotal =\n (this.selectedFiltersAmount || 0) +\n (activeQuickFilter?.default ? 0 : 1);\n\n return (\n <Host class=\"p-table-header\">\n {this.loading && (\n <p-loader\n variant=\"ghost\"\n class=\"hidden h-8 w-3/4 rounded desktop-xs:flex\"\n ></p-loader>\n )}\n\n {!this.loading &&\n (this._hasCustomFilterSlot ||\n this.quickFilters.length > 0) && (\n <div class=\"left-side flex flex-col justify-start gap-4 desktop-xs:flex-row\">\n {this._hasCustomFilterSlot && (\n <slot name=\"custom-filter\" />\n )}\n\n {this.quickFilters.length > 0 && (\n <p-segment-container class=\"hidden desktop-xs:flex\">\n {this.quickFilters.map((item) => (\n <p-segment-item\n active={\n item.identifier ===\n this.activeQuickFilterIdentifier\n }\n onClick={() =>\n this.quickFilter.emit(item)\n }\n >\n {typeof item.text === 'string'\n ? item.text\n : item.text()}{' '}\n {item?.count >= 0\n ? `(${item.count})`\n : ''}\n </p-segment-item>\n ))}\n </p-segment-container>\n )}\n </div>\n )}\n\n <div class=\"right-side flex flex-col justify-end gap-4 desktop-xs:flex-row\">\n {this.enableSearch && (\n <p-input-group\n icon=\"search\"\n size=\"small\"\n class=\"desktop-xs:w-48\"\n >\n <input\n type=\"text\"\n slot=\"input\"\n placeholder=\"Zoeken...\"\n value={this.query}\n onInput={(ev) =>\n this._queryObserver.next(\n (ev.target as HTMLInputElement).value\n )\n }\n />\n </p-input-group>\n )}\n\n {this.enableFilter && (\n <p-button\n icon=\"filter\"\n variant=\"secondary\"\n size=\"small\"\n class=\"w-full desktop-xs:w-auto\"\n onClick={() => this.filter.emit()}\n >\n {this.filterButtonTemplate\n ? this.filterButtonTemplate()\n : this._defaultFilterButtonTemplate()}\n {this.selectedFiltersAmount &&\n this._getLabel(this.selectedFiltersAmount)}\n {mobileTotal > 0 &&\n this._getLabel(mobileTotal, 'mobile')}\n </p-button>\n )}\n\n {this.enableEdit && this._buttonTemplate()}\n </div>\n\n {this.enableEdit && this.canEdit && (\n <div class=\"fixed bottom-0 left-0 block w-full border border-solid border-transparent border-t-mystic-dark bg-white p-4 desktop-xs:hidden\">\n {this._buttonTemplate(true)}\n </div>\n )}\n </Host>\n );\n }\n\n @Listen('localeChanged', { target: 'body' })\n private async _setLocales(): Promise<void> {\n this._locales = await getLocaleComponentStrings(this._el);\n }\n\n private _buttonTemplate(mobile = false) {\n return (\n <p-button\n class={mobile ? 'w-full' : 'hidden desktop-xs:flex'}\n icon={this.editIcon}\n size=\"small\"\n disabled={!this.canEdit}\n onClick={() => this.edit.emit()}\n loading={this.editLoading}\n >\n {this.editButtonTemplate\n ? this.editButtonTemplate(\n mobile ? this.itemsSelectedAmount : 0\n )\n : this._defaultEditButtonTemplate(\n mobile ? this.itemsSelectedAmount : 0\n )}\n </p-button>\n );\n }\n\n private _getLabel(amount, variant: 'mobile' | 'default' = 'default') {\n return (\n <p-label\n size=\"small\"\n variant=\"negative\"\n behavior=\"text\"\n class={`ml-1 ${\n variant === 'default'\n ? 'hidden desktop-xs:flex'\n : 'flex desktop-xs:hidden'\n }`}\n >\n {amount}\n </p-label>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"table-header.component.js","sourceRoot":"","sources":["../../../../src/components/molecules/table-header/table-header.component.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n Element,\n Event,\n EventEmitter,\n h,\n Host,\n Listen,\n Prop,\n State,\n} from '@stencil/core';\nimport { debounceTime, distinctUntilChanged, Subject } from 'rxjs';\nimport { IconVariant } from '../../../components';\nimport { QuickFilter } from '../../../types/table';\nimport {\n formatTranslation,\n getLocaleComponentStrings,\n} from '../../../utils/localization';\n\nexport type templateFunc = () => string;\nexport type buttonTemplateFunc = (amount: number) => string;\n\n@Component({\n tag: 'p-table-header',\n styleUrl: 'table-header.component.scss',\n shadow: true,\n})\nexport class TableHeader {\n private _defaultFilterButtonTemplate: templateFunc = () =>\n formatTranslation(this._locales.filter);\n private _defaultActionButtonTemplate: buttonTemplateFunc = (\n amount: number\n ) =>\n this.actionText\n ? this.actionText\n : formatTranslation(\n amount === 0\n ? this._locales.edit\n : amount === 1\n ? this._locales.edit_single\n : this._locales.edit_plural,\n { amount }\n );\n\n /**\n * Quick filters to show\n */\n @Prop() quickFilters: QuickFilter[] = [];\n\n /**\n * Active quick filter identifier\n */\n @Prop() activeQuickFilterIdentifier: string;\n\n /**\n * Wether we want to show loading state\n */\n @Prop() loading: boolean = false;\n\n /**\n * Wether to show the search input\n */\n @Prop() enableSearch: boolean = true;\n\n /**\n * The amount of items that are selected\n */\n @Prop() itemsSelectedAmount: number = 0;\n\n /**\n * The query to show in the search bar\n */\n @Prop({ mutable: true }) query: string;\n\n /**\n * Wether to show the filter button\n */\n @Prop() enableFilter: boolean = true;\n\n /**\n * The amount of filters being selected\n */\n @Prop() selectedFiltersAmount: number;\n\n /**\n * The template for the filter button text\n */\n @Prop() filterButtonTemplate: templateFunc =\n this._defaultFilterButtonTemplate;\n\n /**\n * Wether to show the action button\n */\n @Prop() enableAction: boolean = true;\n\n /**\n * Wether the action button is loading\n */\n @Prop() actionLoading: boolean = false;\n\n /**\n * The action button icon\n */\n @Prop() actionIcon: IconVariant = 'pencil';\n\n /**\n * The action button text if changed\n */\n @Prop() actionText: string;\n\n /**\n * Wether to enable the action button\n */\n @Prop({ mutable: true }) canUseAction: boolean = false;\n\n /**\n * The template for the action button text\n */\n @Prop() actionButtonTemplate: buttonTemplateFunc =\n this._defaultActionButtonTemplate;\n\n /**\n * Event when one of the quick filters is clicked\n */\n @Event({\n bubbles: false,\n })\n quickFilter: EventEmitter<QuickFilter>;\n\n /**\n * Event when the query changes\n */\n @Event({\n bubbles: false,\n })\n queryChange: EventEmitter<string>;\n\n /**\n * Event when the filter button is clicked\n */\n @Event({\n bubbles: false,\n })\n filter: EventEmitter<null>;\n\n /**\n * Event when the action button is clicked\n */\n @Event({\n bubbles: false,\n })\n action: EventEmitter<null>;\n\n /**\n * The host element\n */\n @Element() private _el: HTMLElement;\n\n /**\n * Locales used for this component\n */\n @State() private _locales: any = {};\n\n private _queryObserver = new Subject<string>();\n private _hasCustomFilterSlot = false;\n\n componentWillLoad() {\n this._hasCustomFilterSlot = !!this._el.querySelector(\n ':scope > [slot=\"custom-filter\"]'\n );\n\n this._setLocales();\n }\n\n componentDidLoad() {\n this._queryObserver\n .pipe(debounceTime(300), distinctUntilChanged())\n .subscribe((value) => this.queryChange.emit(value));\n }\n\n render() {\n const activeQuickFilter = this.quickFilters.find(\n (f) => f.identifier === this.activeQuickFilterIdentifier\n );\n const mobileTotal =\n (this.selectedFiltersAmount || 0) +\n (activeQuickFilter?.default ? 0 : 1);\n\n return (\n <Host class=\"p-table-header\">\n {this.loading && (\n <p-loader\n variant=\"ghost\"\n class=\"hidden h-8 w-3/4 rounded desktop-xs:flex\"\n ></p-loader>\n )}\n\n {!this.loading &&\n (this._hasCustomFilterSlot ||\n this.quickFilters.length > 0) && (\n <div class=\"left-side flex flex-col justify-start gap-4 desktop-xs:flex-row\">\n {this._hasCustomFilterSlot && (\n <slot name=\"custom-filter\" />\n )}\n\n {this.quickFilters.length > 0 && (\n <p-segment-container class=\"hidden desktop-xs:flex\">\n {this.quickFilters.map((item) => (\n <p-segment-item\n active={\n item.identifier ===\n this.activeQuickFilterIdentifier\n }\n onClick={() =>\n this.quickFilter.emit(item)\n }\n >\n {typeof item.text === 'string'\n ? item.text\n : item.text()}{' '}\n {item?.count >= 0\n ? `(${item.count})`\n : ''}\n </p-segment-item>\n ))}\n </p-segment-container>\n )}\n </div>\n )}\n\n <div class=\"right-side flex flex-col justify-end gap-4 desktop-xs:flex-row\">\n {this.enableSearch && (\n <p-input-group\n icon=\"search\"\n size=\"small\"\n class=\"desktop-xs:w-48\"\n >\n <input\n type=\"text\"\n slot=\"input\"\n placeholder=\"Zoeken...\"\n value={this.query}\n onInput={(ev) =>\n this._queryObserver.next(\n (ev.target as HTMLInputElement).value\n )\n }\n />\n </p-input-group>\n )}\n\n {this.enableFilter && (\n <p-button\n icon=\"filter\"\n variant=\"secondary\"\n size=\"small\"\n class=\"w-full desktop-xs:w-auto\"\n onClick={() => this.filter.emit()}\n >\n {this.filterButtonTemplate\n ? this.filterButtonTemplate()\n : this._defaultFilterButtonTemplate()}\n {this.selectedFiltersAmount &&\n this._getLabel(this.selectedFiltersAmount)}\n {mobileTotal > 0 &&\n this._getLabel(mobileTotal, 'mobile')}\n </p-button>\n )}\n\n {this.enableAction && this._buttonTemplate()}\n </div>\n\n {this.enableAction && this.canUseAction && (\n <div class=\"fixed bottom-0 left-0 block w-full border border-solid border-transparent border-t-mystic-dark bg-white p-4 desktop-xs:hidden\">\n {this._buttonTemplate(true)}\n </div>\n )}\n </Host>\n );\n }\n\n @Listen('localeChanged', { target: 'body' })\n private async _setLocales(): Promise<void> {\n this._locales = await getLocaleComponentStrings(this._el);\n }\n\n private _buttonTemplate(mobile = false) {\n return (\n <p-button\n class={mobile ? 'w-full' : 'hidden desktop-xs:flex'}\n icon={this.actionIcon}\n size=\"small\"\n disabled={!this.canUseAction}\n onClick={() => this.action.emit()}\n loading={this.actionLoading}\n >\n {this.actionButtonTemplate\n ? this.actionButtonTemplate(\n mobile ? this.itemsSelectedAmount : 0\n )\n : this._defaultActionButtonTemplate(\n mobile ? this.itemsSelectedAmount : 0\n )}\n </p-button>\n );\n }\n\n private _getLabel(amount, variant: 'mobile' | 'default' = 'default') {\n return (\n <p-label\n size=\"small\"\n variant=\"negative\"\n behavior=\"text\"\n class={`ml-1 ${\n variant === 'default'\n ? 'hidden desktop-xs:flex'\n : 'flex desktop-xs:hidden'\n }`}\n >\n {amount}\n </p-label>\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- .flex{display:flex!important}.flex-shrink{flex-shrink:1!important}*{box-sizing:border-box}p-table{display:flex;flex-direction:column}p-table .p-input[type=checkbox]{flex-shrink:0}.static{position:static!important}.mb-14{margin-bottom:3.5rem!important}.mb-6{margin-bottom:1.5rem!important}.table{display:table!important}.hidden{display:none!important}.h-6{height:1.5rem!important}.w-6{width:1.5rem!important}.max-w-\[20rem\]{max-width:20rem!important}.cursor-pointer{cursor:pointer!important}.flex-col{flex-direction:column!important}.items-center{align-items:center!important}.self-center{align-self:center!important}.rounded{border-radius:.25rem!important}.py-24{padding-bottom:6rem!important;padding-top:6rem!important}.text-center{text-align:center!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.font-semibold{font-weight:600!important}.text-storm-medium{--tw-text-opacity:1!important;color:rgb(128 130 158/var(--tw-text-opacity))!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}
1
+ .fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.bottom-4{bottom:1rem!important}.left-1\/2{left:50%!important}.flex{display:flex!important}.hidden{display:none!important}.flex-shrink{flex-shrink:1!important}.-translate-x-1\/2{--tw-translate-x:-50%!important}.-translate-x-1\/2,.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))!important}*{box-sizing:border-box}p-table{display:flex;flex-direction:column;position:relative}p-table .p-input[type=checkbox]{flex-shrink:0}p-table p-table-container{position:relative}p-table p-table-container p-floating-menu-container{--tw-translate-x:-50%;animation:floatingMenuContainerIn .3s ease forwards!important;bottom:1rem;left:50%;position:fixed;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@media (min-width:40rem){p-table p-table-container p-floating-menu-container{bottom:4rem;position:absolute}}p-table p-table-container p-floating-menu-container.inactive{animation:floatingMenuContainerOut .3s ease forwards!important}p-table p-table-container p-floating-menu-container .hide-mobile{display:none}@media (min-width:40rem){p-table p-table-container p-floating-menu-container .hide-mobile{display:block}}@keyframes floatingMenuContainerOut{0%{opacity:1;transform:translateY(0) translateX(-50%)}to{opacity:0;transform:translateY(100%) translateX(-50%)}}@keyframes floatingMenuContainerIn{0%{opacity:0;transform:translateY(100%) translateX(-50%)}to{opacity:1;transform:translateY(0) translateX(-50%)}}@media (min-width:40rem){.tablet\:block{display:block!important}}.static{position:static!important}.mx-0{margin-left:0!important;margin-right:0!important}.mb-14{margin-bottom:3.5rem!important}.mb-6{margin-bottom:1.5rem!important}.table{display:table!important}.h-6{height:1.5rem!important}.w-6{width:1.5rem!important}.max-w-\[20rem\]{max-width:20rem!important}.cursor-pointer{cursor:pointer!important}.flex-col{flex-direction:column!important}.items-center{align-items:center!important}.self-center{align-self:center!important}.rounded{border-radius:.25rem!important}.py-24{padding-bottom:6rem!important;padding-top:6rem!important}.text-center{text-align:center!important}.text-sm{font-size:.875rem!important;line-height:1.25rem!important}.font-semibold{font-weight:600!important}.text-storm{--tw-text-opacity:1!important;color:rgb(81 83 107/var(--tw-text-opacity))!important}.text-storm-medium{--tw-text-opacity:1!important;color:rgb(128 130 158/var(--tw-text-opacity))!important}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)!important}
@@ -5,6 +5,7 @@ export class Table {
5
5
  constructor() {
6
6
  this._ctrlDown = false;
7
7
  this._hasCustomFilterSlot = false;
8
+ this._hasFloatingMenuItems = false;
8
9
  this.items = undefined;
9
10
  this.loading = false;
10
11
  this.headerLoading = false;
@@ -13,6 +14,13 @@ export class Table {
13
14
  this.enableRowSelection = true;
14
15
  this.enableRowClick = true;
15
16
  this.selectedRows = [];
17
+ this.enableFloatingMenu = true;
18
+ this.floatingMenuAmountSelectedTemplate = (amount) => {
19
+ var _a, _b, _c;
20
+ return formatTranslation((_c = (amount === 1
21
+ ? (_a = this._locales.floating_menu) === null || _a === void 0 ? void 0 : _a.amount_selected
22
+ : (_b = this._locales.floating_menu) === null || _b === void 0 ? void 0 : _b.amount_selected_plural)) === null || _c === void 0 ? void 0 : _c.replace('{{amount}}', amount));
23
+ };
16
24
  this.selectionKey = undefined;
17
25
  this.canSelectKey = undefined;
18
26
  this.enableHeader = true;
@@ -23,11 +31,12 @@ export class Table {
23
31
  this.enableFilter = true;
24
32
  this.selectedFiltersAmount = undefined;
25
33
  this.filterButtonTemplate = undefined;
26
- this.enableEdit = true;
27
- this.editButtonLoading = false;
28
- this.editButtonIcon = 'pencil';
29
- this.editButtonText = undefined;
30
- this.editButtonTemplate = undefined;
34
+ this.enableAction = false;
35
+ this.actionButtonLoading = false;
36
+ this.actionButtonEnabled = false;
37
+ this.actionButtonIcon = 'pencil';
38
+ this.actionButtonText = undefined;
39
+ this.actionButtonTemplate = undefined;
31
40
  this.enableFooter = true;
32
41
  this.enablePageSize = true;
33
42
  this.enablePagination = true;
@@ -49,6 +58,10 @@ export class Table {
49
58
  }
50
59
  componentWillLoad() {
51
60
  this._hasCustomFilterSlot = !!this._el.querySelector(':scope > [slot="custom-filter"]');
61
+ this._hasFloatingMenuItems = !!this._el.querySelectorAll(':scope > [slot="floating-menu-item"]').length;
62
+ if (this.enableRowSelection) {
63
+ console.log(this._hasFloatingMenuItems, this._el.querySelectorAll(':scope > [slot="floating-menu-item"]'));
64
+ }
52
65
  this._setLocales();
53
66
  this._parseItems(this.items);
54
67
  this._generateColumns();
@@ -57,7 +70,7 @@ export class Table {
57
70
  this.hasRendered.emit();
58
71
  }
59
72
  render() {
60
- var _a, _b;
73
+ var _a, _b, _c;
61
74
  return (h(Host, { class: "p-table" }, h("p-table-container", null, this.enableHeader && (h("p-table-header", {
62
75
  // quick filters
63
76
  quickFilters: this.quickFilters, activeQuickFilterIdentifier: this.activeQuickFilterIdentifier, onQuickFilter: ({ detail }) => this.quickFilter.emit(detail),
@@ -65,8 +78,8 @@ export class Table {
65
78
  enableSearch: this.enableSearch, query: this.query, onQueryChange: ({ detail }) => this.queryChange.emit(detail),
66
79
  // filter button
67
80
  enableFilter: this.enableFilter, selectedFiltersAmount: this.selectedFiltersAmount, filterButtonTemplate: this.filterButtonTemplate, onFilter: () => this.filter.emit(),
68
- // edit button
69
- enableEdit: this.enableEdit, editIcon: this.editButtonIcon, editText: this.editButtonText, editLoading: this.editButtonLoading, canEdit: !!((_a = this.selectedRows) === null || _a === void 0 ? void 0 : _a.length), editButtonTemplate: this.editButtonTemplate, onEdit: () => this.edit.emit(), itemsSelectedAmount: (_b = this.selectedRows) === null || _b === void 0 ? void 0 : _b.length,
81
+ // action button
82
+ enableAction: this.enableAction, actionIcon: this.actionButtonIcon, actionText: this.actionButtonText, actionLoading: this.actionButtonLoading, canUseAction: this.actionButtonEnabled, actionButtonTemplate: this.actionButtonTemplate, onAction: () => this.action.emit(), itemsSelectedAmount: (_a = this.selectedRows) === null || _a === void 0 ? void 0 : _a.length,
70
83
  //loading
71
84
  loading: this.headerLoading
72
85
  }, this._hasCustomFilterSlot && (h("slot", { name: "custom-filter", slot: "custom-filter" })))), this._getHeader(), h("div", { class: "flex flex-col" }, this._getRows()), this.enableFooter && (h("p-table-footer", {
@@ -80,7 +93,11 @@ export class Table {
80
93
  enableExport: this.enableExport, onExport: () => this.export.emit(),
81
94
  //loading
82
95
  loading: this.footerLoading
83
- })))));
96
+ })), this.enableFloatingMenu ? (h("p-floating-menu-container", { usedInTable: true, class: ((_b = this.selectedRows) === null || _b === void 0 ? void 0 : _b.length) ? '' : 'inactive' }, h("p-floating-menu-item", { hover: false, slot: "floating-menu-item", class: this._hasFloatingMenuItems
97
+ ? 'hide-mobile'
98
+ : '' }, this.floatingMenuAmountSelectedTemplate((_c = this.selectedRows) === null || _c === void 0 ? void 0 : _c.length)), h("p-divider", { class: `mx-0 text-storm ${this._hasFloatingMenuItems
99
+ ? 'hide-mobile'
100
+ : ''}`, variant: "vertical", slot: "floating-menu-item" }), this._hasFloatingMenuItems && (h("slot", { name: "floating-menu-item" })), this._hasFloatingMenuItems && (h("p-divider", { class: "mx-0 text-storm", variant: "vertical", slot: "floating-menu-item" })), h("p-floating-menu-item", { slot: "floating-menu-item", onClick: () => this._selectAllChange(null, false) }, h("p-icon", { variant: "negative" })))) : (''))));
84
101
  }
85
102
  async _setLocales() {
86
103
  this._locales = await getLocaleComponentStrings(this._el);
@@ -125,7 +142,7 @@ export class Table {
125
142
  }
126
143
  _getHeader() {
127
144
  return (h("p-table-row", { variant: "header" }, this._columns.map((col, index) => (h("p-table-cell", { definition: col, value: col.name, variant: "header", checkbox: index === 0 || col.hasCheckbox
128
- ? this._getCheckbox(null, 'loading')
145
+ ? this._getCheckbox(null, this.loading ? 'loading' : 'header')
129
146
  : null, index: index })))));
130
147
  }
131
148
  _getRows() {
@@ -174,11 +191,13 @@ export class Table {
174
191
  return (h("div", { class: `flex max-w-[20rem] flex-col items-center self-center py-24 text-center ${this.enableEmptyStateAction && 'cursor-pointer'}`, onClick: () => this.enableEmptyStateAction &&
175
192
  this.emptyStateActionClick.emit(null) }, h("p-illustration", { variant: "empty-state-add", class: "mb-6" }), h("p", { class: "text-storm-default font-semibold" }, this.emptyStateHeader()), h("p", { class: "mb-6 text-sm text-storm-medium" }, this.emptyStateContent()), this.enableEmptyStateAction && (h("p-button", { variant: "secondary", icon: "plus", size: "small" }, this.emptyStateAction()))));
176
193
  }
177
- _selectAllChange($event) {
194
+ _selectAllChange($event, forceValue) {
178
195
  if (!this.enableRowSelection) {
179
196
  return;
180
197
  }
181
- const value = this._getCheckedValue($event.target);
198
+ const value = forceValue === undefined
199
+ ? this._getCheckedValue($event.target)
200
+ : forceValue;
182
201
  if (value) {
183
202
  const toAdd = [];
184
203
  for (let i = 0; i < this._items.length; i++) {
@@ -481,6 +500,46 @@ export class Table {
481
500
  },
482
501
  "defaultValue": "[]"
483
502
  },
503
+ "enableFloatingMenu": {
504
+ "type": "boolean",
505
+ "mutable": false,
506
+ "complexType": {
507
+ "original": "boolean",
508
+ "resolved": "boolean",
509
+ "references": {}
510
+ },
511
+ "required": false,
512
+ "optional": false,
513
+ "docs": {
514
+ "tags": [],
515
+ "text": "Wether to enable the floating menu"
516
+ },
517
+ "attribute": "enable-floating-menu",
518
+ "reflect": false,
519
+ "defaultValue": "true"
520
+ },
521
+ "floatingMenuAmountSelectedTemplate": {
522
+ "type": "unknown",
523
+ "mutable": false,
524
+ "complexType": {
525
+ "original": "amountSelectedTemplateFunc",
526
+ "resolved": "(amount: number) => string",
527
+ "references": {
528
+ "amountSelectedTemplateFunc": {
529
+ "location": "local",
530
+ "path": "/home/runner/work/Paperless/Paperless/packages/core/src/components/organisms/table/table.component.tsx",
531
+ "id": "src/components/organisms/table/table.component.tsx::amountSelectedTemplateFunc"
532
+ }
533
+ }
534
+ },
535
+ "required": false,
536
+ "optional": false,
537
+ "docs": {
538
+ "tags": [],
539
+ "text": "The template for amount selected item in the floating menu"
540
+ },
541
+ "defaultValue": "(\n amount: number\n ) =>\n formatTranslation(\n (amount === 1\n ? this._locales.floating_menu?.amount_selected\n : this._locales.floating_menu?.amount_selected_plural\n )?.replace('{{amount}}', amount)\n )"
542
+ },
484
543
  "selectionKey": {
485
544
  "type": "string",
486
545
  "mutable": false,
@@ -663,7 +722,7 @@ export class Table {
663
722
  "text": "The template for the filter button text"
664
723
  }
665
724
  },
666
- "enableEdit": {
725
+ "enableAction": {
667
726
  "type": "boolean",
668
727
  "mutable": false,
669
728
  "complexType": {
@@ -675,13 +734,31 @@ export class Table {
675
734
  "optional": false,
676
735
  "docs": {
677
736
  "tags": [],
678
- "text": "Wether to show the edit button"
737
+ "text": "Wether to show the action button"
679
738
  },
680
- "attribute": "enable-edit",
739
+ "attribute": "enable-action",
681
740
  "reflect": false,
682
- "defaultValue": "true"
741
+ "defaultValue": "false"
742
+ },
743
+ "actionButtonLoading": {
744
+ "type": "boolean",
745
+ "mutable": false,
746
+ "complexType": {
747
+ "original": "boolean",
748
+ "resolved": "boolean",
749
+ "references": {}
750
+ },
751
+ "required": false,
752
+ "optional": false,
753
+ "docs": {
754
+ "tags": [],
755
+ "text": "Wether the action button is loading"
756
+ },
757
+ "attribute": "action-button-loading",
758
+ "reflect": false,
759
+ "defaultValue": "false"
683
760
  },
684
- "editButtonLoading": {
761
+ "actionButtonEnabled": {
685
762
  "type": "boolean",
686
763
  "mutable": false,
687
764
  "complexType": {
@@ -693,13 +770,13 @@ export class Table {
693
770
  "optional": false,
694
771
  "docs": {
695
772
  "tags": [],
696
- "text": "Wether the edit button is loading"
773
+ "text": "Wether the action button is enabled"
697
774
  },
698
- "attribute": "edit-button-loading",
775
+ "attribute": "action-button-enabled",
699
776
  "reflect": false,
700
777
  "defaultValue": "false"
701
778
  },
702
- "editButtonIcon": {
779
+ "actionButtonIcon": {
703
780
  "type": "string",
704
781
  "mutable": false,
705
782
  "complexType": {
@@ -717,13 +794,13 @@ export class Table {
717
794
  "optional": false,
718
795
  "docs": {
719
796
  "tags": [],
720
- "text": "The edit button icon"
797
+ "text": "The action button icon"
721
798
  },
722
- "attribute": "edit-button-icon",
799
+ "attribute": "action-button-icon",
723
800
  "reflect": false,
724
801
  "defaultValue": "'pencil'"
725
802
  },
726
- "editButtonText": {
803
+ "actionButtonText": {
727
804
  "type": "string",
728
805
  "mutable": false,
729
806
  "complexType": {
@@ -735,12 +812,12 @@ export class Table {
735
812
  "optional": false,
736
813
  "docs": {
737
814
  "tags": [],
738
- "text": "The edit button text if changed"
815
+ "text": "The action button text if changed"
739
816
  },
740
- "attribute": "edit-button-text",
817
+ "attribute": "action-button-text",
741
818
  "reflect": false
742
819
  },
743
- "editButtonTemplate": {
820
+ "actionButtonTemplate": {
744
821
  "type": "unknown",
745
822
  "mutable": false,
746
823
  "complexType": {
@@ -758,7 +835,7 @@ export class Table {
758
835
  "optional": false,
759
836
  "docs": {
760
837
  "tags": [],
761
- "text": "The template for the edit button text"
838
+ "text": "The template for the action button text"
762
839
  }
763
840
  },
764
841
  "enableFooter": {
@@ -1191,14 +1268,14 @@ export class Table {
1191
1268
  "references": {}
1192
1269
  }
1193
1270
  }, {
1194
- "method": "edit",
1195
- "name": "edit",
1271
+ "method": "action",
1272
+ "name": "action",
1196
1273
  "bubbles": false,
1197
1274
  "cancelable": true,
1198
1275
  "composed": true,
1199
1276
  "docs": {
1200
1277
  "tags": [],
1201
- "text": "Event when the edit button is clicked"
1278
+ "text": "Event when the action button is clicked"
1202
1279
  },
1203
1280
  "complexType": {
1204
1281
  "original": "null",