@maggioli-design-system/mds-table-row 4.8.1 → 5.0.1

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 (95) hide show
  1. package/dist/cjs/{index-19c36c53.js → index-cb928c36.js} +201 -136
  2. package/dist/cjs/loader.cjs.js +2 -2
  3. package/dist/cjs/mds-table-row.cjs.entry.js +893 -10
  4. package/dist/cjs/mds-table-row.cjs.js +3 -3
  5. package/dist/collection/collection-manifest.json +1 -1
  6. package/dist/collection/common/floating-controller.js +180 -0
  7. package/dist/collection/common/slot.js +19 -0
  8. package/dist/collection/components/mds-table-row/mds-table-row.css +31 -16
  9. package/dist/collection/components/mds-table-row/mds-table-row.js +118 -23
  10. package/dist/collection/dictionary/animation.js +5 -0
  11. package/dist/collection/dictionary/file-extensions.js +6 -59
  12. package/dist/collection/dictionary/tree.js +13 -0
  13. package/dist/collection/fixtures/filenames.js +62 -1
  14. package/dist/collection/type/animation.js +1 -0
  15. package/dist/collection/type/tree.js +1 -0
  16. package/dist/collection/type/variant-file-format.js +5 -0
  17. package/dist/components/mds-table-row.js +900 -12
  18. package/dist/documentation.d.ts +8 -0
  19. package/dist/documentation.json +121 -16
  20. package/dist/esm/{index-a948f479.js → index-8134a00a.js} +201 -136
  21. package/dist/esm/loader.js +3 -3
  22. package/dist/esm/mds-table-row.entry.js +893 -10
  23. package/dist/esm/mds-table-row.js +4 -4
  24. package/dist/esm-es5/index-8134a00a.js +1 -0
  25. package/dist/esm-es5/loader.js +1 -1
  26. package/dist/esm-es5/mds-table-row.entry.js +6 -1
  27. package/dist/esm-es5/mds-table-row.js +1 -1
  28. package/dist/mds-table-row/mds-table-row.esm.js +1 -1
  29. package/dist/mds-table-row/mds-table-row.js +1 -1
  30. package/dist/mds-table-row/p-11048c96.system.js +1 -0
  31. package/dist/mds-table-row/p-22d4881a.js +2 -0
  32. package/dist/mds-table-row/p-827e2f31.entry.js +6 -0
  33. package/dist/mds-table-row/p-88f814c9.system.js +2 -0
  34. package/dist/mds-table-row/p-ed03fa5e.system.entry.js +6 -0
  35. package/dist/stats.json +267 -70
  36. package/dist/types/common/floating-controller.d.ts +46 -0
  37. package/dist/types/common/slot.d.ts +3 -0
  38. package/dist/types/components/mds-table-row/mds-table-row.d.ts +9 -3
  39. package/dist/types/components.d.ts +8 -1
  40. package/dist/types/dictionary/animation.d.ts +2 -0
  41. package/dist/types/dictionary/tree.d.ts +4 -0
  42. package/dist/types/fixtures/filenames.d.ts +62 -1
  43. package/dist/types/type/animation.d.ts +1 -0
  44. package/dist/types/type/file-types.d.ts +1 -1
  45. package/dist/types/type/tree.d.ts +3 -0
  46. package/dist/types/type/variant-file-format.d.ts +1 -1
  47. package/documentation.json +170 -29
  48. package/package.json +4 -4
  49. package/readme.md +24 -4
  50. package/src/common/floating-controller.ts +263 -0
  51. package/src/common/slot.ts +24 -0
  52. package/src/components/mds-table-row/css/mds-table-row-actions.css +10 -3
  53. package/src/components/mds-table-row/css/mds-table-row-interactive.css +6 -0
  54. package/src/components/mds-table-row/css/mds-table-row-selected.css +5 -0
  55. package/src/components/mds-table-row/css/mds-table-row-sorted.css +11 -0
  56. package/src/components/mds-table-row/mds-table-row.css +11 -26
  57. package/src/components/mds-table-row/mds-table-row.tsx +38 -9
  58. package/src/components/mds-table-row/meta/locale.el.json +4 -0
  59. package/src/components/mds-table-row/meta/locale.en.json +4 -0
  60. package/src/components/mds-table-row/meta/locale.es.json +4 -0
  61. package/src/components/mds-table-row/meta/locale.it.json +4 -0
  62. package/src/components/mds-table-row/readme.md +20 -4
  63. package/src/components.d.ts +8 -1
  64. package/src/dictionary/animation.ts +8 -0
  65. package/src/dictionary/file-extensions.ts +6 -60
  66. package/src/dictionary/tree.ts +21 -0
  67. package/src/fixtures/filenames.ts +63 -0
  68. package/src/fixtures/icons.json +21 -0
  69. package/src/fixtures/iconsauce.json +6 -0
  70. package/src/meta/file-format/locale.el.json +26 -21
  71. package/src/meta/file-format/locale.en.json +26 -21
  72. package/src/meta/file-format/locale.es.json +26 -21
  73. package/src/meta/file-format/locale.it.json +26 -21
  74. package/src/type/animation.ts +3 -0
  75. package/src/type/file-types.ts +6 -0
  76. package/src/type/tree.ts +12 -0
  77. package/src/type/variant-file-format.ts +6 -0
  78. package/www/build/mds-table-row.esm.js +1 -1
  79. package/www/build/mds-table-row.js +1 -1
  80. package/www/build/p-11048c96.system.js +1 -0
  81. package/www/build/p-22d4881a.js +2 -0
  82. package/www/build/p-827e2f31.entry.js +6 -0
  83. package/www/build/p-88f814c9.system.js +2 -0
  84. package/www/build/p-ed03fa5e.system.entry.js +6 -0
  85. package/dist/esm-es5/index-a948f479.js +0 -1
  86. package/dist/mds-table-row/p-5ab8c209.system.entry.js +0 -1
  87. package/dist/mds-table-row/p-98955251.system.js +0 -1
  88. package/dist/mds-table-row/p-bfa177c6.system.js +0 -2
  89. package/dist/mds-table-row/p-d906e5c7.entry.js +0 -1
  90. package/dist/mds-table-row/p-faec61cc.js +0 -2
  91. package/www/build/p-5ab8c209.system.entry.js +0 -1
  92. package/www/build/p-98955251.system.js +0 -1
  93. package/www/build/p-bfa177c6.system.js +0 -2
  94. package/www/build/p-d906e5c7.entry.js +0 -1
  95. package/www/build/p-faec61cc.js +0 -2
@@ -0,0 +1,263 @@
1
+ import {
2
+ arrow,
3
+ autoPlacement,
4
+ autoUpdate,
5
+ computePosition,
6
+ flip,
7
+ Middleware,
8
+ MiddlewareData,
9
+ offset,
10
+ shift,
11
+ } from '@floating-ui/dom'
12
+ import { FloatingUIPlacement, FloatingUIStrategy } from '@type/floating-ui'
13
+ import { cssDurationToMilliseconds } from './unit'
14
+ import { setAttributeIfEmpty } from './aria'
15
+ import { HTMLStencilElement } from '@stencil/core/internal'
16
+
17
+ export interface FloatingElement extends PositionOptions {
18
+ host: HTMLFloatingElement,
19
+ }
20
+
21
+ export interface HTMLFloatingElement extends HTMLStencilElement, PositionOptions {
22
+ visible: boolean,
23
+ }
24
+
25
+ export interface PositionOptions {
26
+ arrow: boolean;
27
+ arrowPadding: number;
28
+ autoPlacement: boolean;
29
+ flip: boolean;
30
+ offset: number;
31
+ placement: FloatingUIPlacement;
32
+ shift: boolean;
33
+ shiftPadding: number;
34
+ strategy: FloatingUIStrategy;
35
+ }
36
+
37
+ export class FloatingController {
38
+ private _caller: HTMLElement
39
+ private readonly _host: HTMLFloatingElement
40
+ arrowEl: HTMLElement | undefined
41
+
42
+ private cleanupAutoUpdate: () => void
43
+
44
+ constructor (host: HTMLFloatingElement, arrowEl?: HTMLElement) {
45
+ this._host = host
46
+ this.arrowEl = arrowEl
47
+ }
48
+
49
+ updateCaller (target: string): HTMLElement {
50
+ // search caller in document or rootNode of host (if target is in shadowDOM)
51
+ const caller = (this._host.parentElement?.shadowRoot?.querySelector(target) as HTMLElement) ??
52
+ ((this._host.getRootNode() as HTMLElement).querySelector(target) as HTMLElement)
53
+
54
+ if (!caller) {
55
+ throw Error(`Target not found: ${target}`)
56
+ }
57
+
58
+ this._caller = caller
59
+
60
+ setAttributeIfEmpty(this._caller, 'aria-haspopup', 'true')
61
+ setAttributeIfEmpty(this._caller, 'aria-controls', target)
62
+ setAttributeIfEmpty(this._host, 'role', 'menu')
63
+ setAttributeIfEmpty(this._host, 'aria-labelledby', target)
64
+ return caller
65
+ }
66
+
67
+ private readonly arrowInset = (
68
+ middleware: MiddlewareData,
69
+ arrowPosition: string,
70
+ ): { bottom?: string; left?: string; right?: string; top?: string } => {
71
+ const { arrow } = middleware
72
+ const inset = { bottom: '', left: '', right: '', top: '' }
73
+
74
+ if (arrow === undefined) {
75
+ return {}
76
+ }
77
+
78
+ switch (arrowPosition) {
79
+ case 'bottom':
80
+ inset.left = arrow.x !== null ? `${arrow.x}px` : ''
81
+ inset.top = '100%'
82
+ break
83
+ case 'left':
84
+ inset.right = '100%'
85
+ inset.top = arrow.y !== null ? `${arrow.y}px` : ''
86
+ break
87
+ case 'right':
88
+ inset.left = '100%'
89
+ inset.top = arrow.y !== null ? `${arrow.y}px` : ''
90
+ break
91
+ case 'top':
92
+ inset.left = arrow.x !== null ? `${arrow.x}px` : ''
93
+ inset.top = ''
94
+ break
95
+ default:
96
+ break
97
+ }
98
+ return inset
99
+ }
100
+
101
+ private readonly arrowTransform = (
102
+ arrowPosition: string,
103
+ ): { transform: string } => {
104
+ let transformProps = this._host.arrow && this._host.visible ? 'scale(1)' : 'scale(0)'
105
+ switch (arrowPosition) {
106
+ case 'bottom':
107
+ transformProps = `rotate(180deg) ${transformProps} translate(0, -100%)`
108
+ break
109
+ case 'left':
110
+ transformProps = `rotate(-90deg) ${transformProps} translate(50%, -50%)`
111
+ break
112
+ case 'right':
113
+ transformProps = `rotate(90deg) ${transformProps} translate(-50%, -50%)`
114
+ break
115
+ case 'top':
116
+ transformProps = `rotate(0deg) ${transformProps} translate(0, 0)`
117
+ break
118
+ default:
119
+ break
120
+ }
121
+ return { transform: transformProps }
122
+ }
123
+
124
+ private readonly arrowTransformOrigin = (
125
+ arrowPosition: string,
126
+ ): { transformOrigin: string } => {
127
+ switch (arrowPosition) {
128
+ case 'bottom':
129
+ return { transformOrigin: 'center top' }
130
+ case 'left':
131
+ return { transformOrigin: 'right center' }
132
+ case 'right':
133
+ return { transformOrigin: 'left center' }
134
+ case 'top':
135
+ return { transformOrigin: 'center bottom' }
136
+ default:
137
+ return { transformOrigin: 'center top' }
138
+ }
139
+ }
140
+
141
+ private readonly calculatePosition = (): void => {
142
+ if (!this._caller) return
143
+
144
+ const middleware: Middleware[] = new Array<Middleware>()
145
+ const config: { padding?: number } = {}
146
+
147
+ if (this._host.shiftPadding) {
148
+ config.padding = this._host.shiftPadding
149
+ }
150
+
151
+ if (this._host.autoPlacement) {
152
+ middleware.push(autoPlacement())
153
+ }
154
+
155
+ if (this._host.offset) {
156
+ middleware.push(offset(this._host.offset))
157
+ }
158
+
159
+ if (!this._host.autoPlacement && this._host.flip) {
160
+ middleware.push(flip(config))
161
+ }
162
+
163
+ if (this._host.shift) {
164
+ middleware.push(shift(config))
165
+ }
166
+
167
+ if (this.arrowEl && this._host.arrow) {
168
+ middleware.push(
169
+ arrow({
170
+ element: this.arrowEl,
171
+ padding: this._host.arrowPadding,
172
+ }),
173
+ )
174
+ }
175
+
176
+ computePosition(this._caller, this._host, {
177
+ middleware,
178
+ placement: this._host.placement,
179
+ strategy: this._host.strategy,
180
+ }).then(({ x, y, placement, middlewareData }) => {
181
+ Object.assign(this._host.style, {
182
+ left: `${x}px`,
183
+ top: `${y}px`,
184
+ })
185
+
186
+ const arrowStyle = {}
187
+ const arrowPosition = {
188
+ top: 'bottom',
189
+ right: 'left',
190
+ bottom: 'top',
191
+ left: 'right',
192
+ }[placement.split('-')[0]]
193
+
194
+ if (arrowPosition && this.arrowEl) {
195
+ Object.assign(arrowStyle, this.arrowTransform(arrowPosition))
196
+ Object.assign(
197
+ arrowStyle,
198
+ this.arrowInset(middlewareData, arrowPosition),
199
+ )
200
+ Object.assign(arrowStyle, this.arrowTransformOrigin(arrowPosition))
201
+ Object.assign(this.arrowEl.style, arrowStyle)
202
+ }
203
+ })
204
+ }
205
+
206
+ updatePosition (): void {
207
+ if (this.cleanupAutoUpdate) this.cleanupAutoUpdate()
208
+ this.cleanupAutoUpdate = autoUpdate(this._caller, this._host, this.calculatePosition)
209
+ }
210
+
211
+ dismiss (): void {
212
+ this.cleanupAutoUpdate()
213
+ }
214
+ }
215
+
216
+ export class Backdrop {
217
+ private readonly defaultBackdropId = 'mds-backdrop'
218
+ private readonly backdropBackgroundVisible = 'rgba(var(--magma-backdrop-color, 0 0 0) / var(--magma-backdrop-opacity, 0.1))'
219
+ private readonly backdropBackgroundHidden = 'rgba(var(--magma-backdrop-color, 0 0 0) / 0)'
220
+
221
+ private readonly backdropId
222
+ private readonly cssBackdropZIndex
223
+ private readonly cssBackdropDuration
224
+
225
+ private backdropEl: HTMLElement
226
+ private backdropTimer: NodeJS.Timeout
227
+
228
+ constructor (backdropId?: string) {
229
+ this.backdropId = backdropId ?? this.defaultBackdropId
230
+ this.cssBackdropZIndex = `var(--${this.backdropId}-z-index)`
231
+ this.cssBackdropDuration = `var(--${this.backdropId}-duration)`
232
+ }
233
+
234
+ attachBackdrop (): void {
235
+ if (!this.backdropEl) {
236
+ this.backdropEl = document.createElement('div')
237
+ this.backdropEl.className = this.backdropId
238
+ this.backdropEl.style.inset = '0'
239
+ this.backdropEl.style.pointerEvents = 'none'
240
+ this.backdropEl.style.position = 'fixed'
241
+ this.backdropEl.style.transition = `background-color ${this.cssBackdropDuration} ease-out`
242
+ this.backdropEl.style.zIndex = this.cssBackdropZIndex
243
+ }
244
+ this.backdropEl.style.backgroundColor = this.backdropBackgroundHidden
245
+ document.body.appendChild(this.backdropEl)
246
+
247
+ clearTimeout(this.backdropTimer)
248
+ this.backdropTimer = setTimeout(() => {
249
+ this.backdropEl.style.backgroundColor = this.backdropBackgroundVisible
250
+ }, 1)
251
+ }
252
+
253
+ detachBackdrop (): void {
254
+ if (!this.backdropEl) {
255
+ return
256
+ }
257
+ this.backdropEl.style.backgroundColor = 'transparent'
258
+ clearTimeout(this.backdropTimer)
259
+ this.backdropTimer = setTimeout(() => {
260
+ this.backdropEl.remove()
261
+ }, cssDurationToMilliseconds(this.cssBackdropDuration))
262
+ }
263
+ }
@@ -0,0 +1,24 @@
1
+ const hasSlottedElements = (el: HTMLElement, name?: string): boolean => {
2
+ const query = name ? `slot[name="${name}"]` : 'slot:not([name])'
3
+
4
+ const slot: HTMLSlotElement = el.shadowRoot?.querySelector(query) as HTMLSlotElement
5
+ if (slot) {
6
+ return slot.assignedElements({ flatten: true }).length > 0
7
+ }
8
+ return false
9
+ }
10
+
11
+ const hasSlottedNodes = (el: HTMLElement, name?: string): boolean => {
12
+ const query = name ? `slot[name="${name}"]` : 'slot:not([name])'
13
+
14
+ const slot: HTMLSlotElement = el.shadowRoot?.querySelector(query) as HTMLSlotElement
15
+ if (slot) {
16
+ return slot.assignedNodes().length > 0
17
+ }
18
+ return false
19
+ }
20
+
21
+ export {
22
+ hasSlottedElements,
23
+ hasSlottedNodes,
24
+ }
@@ -8,8 +8,11 @@
8
8
  }
9
9
 
10
10
  .actions {
11
+
12
+ --mds-table-row-actions-background: var(--mds-table-row-background);
13
+
11
14
  align-items: center;
12
- background-color: var(--mds-table-cell-background);
15
+ background-color: var(--mds-table-row-actions-background);
13
16
  display: inline-flex;
14
17
  gap: var(--mds-table-row-actions-gap);
15
18
  inset: 0;
@@ -28,11 +31,15 @@
28
31
  transform: translateX(100%);
29
32
  }
30
33
 
31
- :host([overlay-actions]:not([overlay-actions="false"])) .actions {
34
+
35
+ :host([overlay-actions]) .actions {
32
36
  padding-right: var(--mds-table-cell-padding);
33
37
  transform: translateX(100%);
34
38
  }
35
39
 
36
- :host([overlay-actions]:not([overlay-actions="false"]):hover) .actions {
40
+ :host([overlay-actions]:hover) .actions {
41
+
42
+ --mds-table-row-actions-background: var(--mds-table-row-background);
43
+
37
44
  transform: translateX(0);
38
45
  }
@@ -0,0 +1,6 @@
1
+ :host([interactive]:hover) {
2
+
3
+ --mds-table-row-actions-background: var(--mds-table-row-background-hover);
4
+ --mds-table-row-background: var(--mds-table-row-background-hover);
5
+ --mds-table-row-color: var(--mds-table-row-color-hover);
6
+ }
@@ -0,0 +1,5 @@
1
+ :host([selected]) {
2
+
3
+ --mds-table-row-background: var(--mds-table-row-background-hover);
4
+ --mds-table-row-color: var(--mds-table-row-color-hover);
5
+ }
@@ -0,0 +1,11 @@
1
+ :host([sorted]) {
2
+
3
+ --mds-table-row-background: var(--mds-table-row-background-alt);
4
+ --mds-table-row-color: var(--mds-table-row-color-alt);
5
+ }
6
+
7
+ :host([sorted][selected]) {
8
+
9
+ --mds-table-row-background: var(--mds-table-row-background-hover);
10
+ --mds-table-row-color: var(--mds-table-row-color-hover);
11
+ }
@@ -2,11 +2,12 @@
2
2
 
3
3
  :host {
4
4
 
5
- --mds-table-row-color-hover: var(--mds-table-color-hover, theme('colors.tone-neutral-02'));
6
- --mds-table-row-color: var(--mds-table-color, theme('colors.tone-neutral-03'));
5
+ --mds-table-row-color-hover: var(--mds-table-color, theme('colors.tone-neutral-02'));
6
+ --mds-table-row-color-alt: var(--mds-table-color-alt, theme('colors.tone-neutral-02'));
7
+ --mds-table-row-background-hover: var(--mds-table-background, theme('colors.tone-neutral'));
8
+ --mds-table-row-background-alt: var(--mds-table-background-alt, theme('colors.tone-neutral'));
7
9
  --mds-table-row-actions-gap: var(--mds-table-actions-gap, theme('spacing.400'));
8
10
 
9
-
10
11
  @apply
11
12
  duration-200
12
13
  ease-out;
@@ -18,32 +19,16 @@
18
19
 
19
20
  }
20
21
 
21
- :host([sorted][interactive]:not([interactive="false"])) ::slotted(mds-table-cell[sorted]) {
22
-
23
- --mds-table-cell-background: var(--mds-table-cell-background-hover);
22
+ .selection-cell {
23
+ vertical-align: middle;
24
24
  }
25
25
 
26
- :host([sorted][interactive]:not([interactive="false"])) ::slotted(mds-table-cell:not([sorted])) {
27
-
28
- --mds-table-cell-background: var(--mds-table-body-background-hover);
29
- }
30
-
31
- :host([interactive]:not([interactive="false"]):hover) {
32
-
33
- --mds-table-cell-background: var(--mds-table-cell-background-hover);
34
- --mds-table-row-color: var(--mds-table-row-color-hover);
35
- }
36
-
37
-
38
- :host([sorted][interactive]:not([interactive="false"]):hover) ::slotted(mds-table-cell:not([sorted])) {
39
-
40
- --mds-table-cell-background: var(--mds-table-cell-background-hover);
41
- }
42
-
43
- :host([sorted]:not([interactive])) ::slotted(mds-table-cell:not([sorted])) {
44
-
45
- --mds-table-cell-background: var(--mds-table-body-background-hover);
26
+ .checkbox-wrapper {
27
+ display: flex;
46
28
  }
47
29
 
30
+ @import './css/mds-table-row-interactive.css';
31
+ @import './css/mds-table-row-selected.css';
32
+ @import './css/mds-table-row-sorted.css';
48
33
  @import './css/mds-table-row-actions.css';
49
34
  @import './css/mds-table-row-pref-animation.css';
@@ -1,6 +1,9 @@
1
- import { Component, Host, h, Listen, Prop, Element } from '@stencil/core'
2
- // import { isMobileDevice } from '@common/device'
3
- // import clsx from 'clsx'
1
+ import { Component, Host, h, Prop, Element, State, Method } from '@stencil/core'
2
+ import { Locale } from '@common/locale'
3
+ import localeEl from './meta/locale.el.json'
4
+ import localeEn from './meta/locale.en.json'
5
+ import localeEs from './meta/locale.es.json'
6
+ import localeIt from './meta/locale.it.json'
4
7
 
5
8
  /**
6
9
  * @slot default - Put `mds-table-cell` element/s.
@@ -17,17 +20,31 @@ export class MdsTableRow {
17
20
  private actions: HTMLDivElement
18
21
  private hasActions: boolean
19
22
  private sizerWidth: string
23
+ private t:Locale = new Locale({
24
+ el: localeEl,
25
+ en: localeEn,
26
+ es: localeEs,
27
+ it: localeIt,
28
+ })
29
+ @State() language: string
30
+ @Method()
31
+ async updateLang (): Promise<void> {
32
+ this.language = this.t.lang(this.host)
33
+ this.t.update()
34
+ }
20
35
 
21
- @Prop({ mutable: true, reflect: true }) interactive: boolean
36
+ @Prop({ reflect: true }) readonly interactive?: boolean
22
37
 
23
- @Prop({ mutable: true, reflect: true }) overlayActions: boolean
38
+ @Prop({ reflect: true }) readonly overlayActions: boolean
24
39
 
25
- @Listen('mdsTableInteractiveChange', { target: 'document' })
26
- tableInteractiveHandler (event: CustomEvent<boolean>): void {
27
- this.interactive = event.detail
28
- }
40
+ @Prop({ reflect: true }) readonly selectable?: boolean = undefined
41
+
42
+ @Prop({ mutable: true, reflect: true }) selected?: boolean
43
+
44
+ @Prop({ reflect: true }) readonly value?: string | number
29
45
 
30
46
  componentWillLoad (): void {
47
+ this.language = this.t.lang(this.host)
31
48
  this.hasActions = this.host.querySelector('[slot="action"]') !== null
32
49
  }
33
50
 
@@ -38,9 +55,21 @@ export class MdsTableRow {
38
55
  }
39
56
  }
40
57
 
58
+ private handleSelectionChange = (e: CustomEvent): void => {
59
+ this.selected = e.detail.checked
60
+ this.host.closest('mds-table')?.updateSelection()
61
+ }
62
+
41
63
  render () {
42
64
  return (
43
65
  <Host role="row">
66
+ { this.selectable &&
67
+ <mds-table-cell class="selection-cell">
68
+ <div class="checkbox-wrapper">
69
+ <mds-input-switch title={this.t.get(this.selected ? 'unselectRow' : 'selectRow')} lang={this.language} type="checkbox" checked={this.selected} onMdsInputSwitchChange={this.handleSelectionChange}></mds-input-switch>
70
+ </div>
71
+ </mds-table-cell>
72
+ }
44
73
  <slot/>
45
74
  { this.hasActions &&
46
75
  <mds-table-cell class="actions-cell">
@@ -0,0 +1,4 @@
1
+ {
2
+ "selectRow": "Επιλογή γραμμής",
3
+ "unselectRow": "Αποεπιλογή γραμμής"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "selectRow": "Select row",
3
+ "unselectRow": "Deselect row"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "selectRow": "Seleccionar fila",
3
+ "unselectRow": "Deseleccionar fila"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "selectRow": "Seleziona riga",
3
+ "unselectRow": "Deseleziona riga"
4
+ }
@@ -7,10 +7,26 @@
7
7
 
8
8
  ## Properties
9
9
 
10
- | Property | Attribute | Description | Type | Default |
11
- | ---------------- | ----------------- | ----------- | --------- | ----------- |
12
- | `interactive` | `interactive` | | `boolean` | `undefined` |
13
- | `overlayActions` | `overlay-actions` | | `boolean` | `undefined` |
10
+ | Property | Attribute | Description | Type | Default |
11
+ | ---------------- | ----------------- | ----------- | ------------------------------- | ----------- |
12
+ | `interactive` | `interactive` | | `boolean \| undefined` | `undefined` |
13
+ | `overlayActions` | `overlay-actions` | | `boolean` | `undefined` |
14
+ | `selectable` | `selectable` | | `boolean \| undefined` | `undefined` |
15
+ | `selected` | `selected` | | `boolean \| undefined` | `undefined` |
16
+ | `value` | `value` | | `number \| string \| undefined` | `undefined` |
17
+
18
+
19
+ ## Methods
20
+
21
+ ### `updateLang() => Promise<void>`
22
+
23
+
24
+
25
+ #### Returns
26
+
27
+ Type: `Promise<void>`
28
+
29
+
14
30
 
15
31
 
16
32
  ## Slots
@@ -7,8 +7,12 @@
7
7
  import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
8
8
  export namespace Components {
9
9
  interface MdsTableRow {
10
- "interactive": boolean;
10
+ "interactive"?: boolean;
11
11
  "overlayActions": boolean;
12
+ "selectable"?: boolean;
13
+ "selected"?: boolean;
14
+ "updateLang": () => Promise<void>;
15
+ "value"?: string | number;
12
16
  }
13
17
  }
14
18
  declare global {
@@ -26,6 +30,9 @@ declare namespace LocalJSX {
26
30
  interface MdsTableRow {
27
31
  "interactive"?: boolean;
28
32
  "overlayActions"?: boolean;
33
+ "selectable"?: boolean;
34
+ "selected"?: boolean;
35
+ "value"?: string | number;
29
36
  }
30
37
  interface IntrinsicElements {
31
38
  "mds-table-row": MdsTableRow;
@@ -0,0 +1,8 @@
1
+ const horizontalActionsAnimationDictionary = [
2
+ 'fade',
3
+ 'slide',
4
+ ]
5
+
6
+ export {
7
+ horizontalActionsAnimationDictionary,
8
+ }
@@ -26,8 +26,8 @@ const fileExtensionsDictionary: FileExtenstion = {
26
26
  exe: { format: 'executable', description: 'fileEXE' },
27
27
  flac: { format: 'audio', description: 'uncompressedAudio' },
28
28
  gif: { format: 'image', description: 'compressedImage', preview: true },
29
- htm: { format: 'markup', description: 'documentWeb' },
30
29
  heic: { format: 'image', description: 'imageHEFF' },
30
+ htm: { format: 'markup', description: 'documentWeb' },
31
31
  html: { format: 'markup', description: 'documentWeb' },
32
32
  jpe: { format: 'image', description: 'compressedImage', preview: true },
33
33
  jpeg: { format: 'image', description: 'compressedImage', preview: true },
@@ -44,9 +44,12 @@ const fileExtensionsDictionary: FileExtenstion = {
44
44
  mpg4: { format: 'video', description: 'videoSD' },
45
45
  mpg: { format: 'video', description: 'videoSD' },
46
46
  mpga: { format: 'audio', description: 'compressedAudio' },
47
+ odf: { format: 'document', description: 'openDocumentFormat' },
47
48
  odp: { format: 'slide', description: 'slideLO' },
48
49
  ods: { format: 'spreadsheet', description: 'spreadsheetLO' },
49
50
  odt: { format: 'text', description: 'documentLO' },
51
+ ole: { format: 'document', description: 'objectLinkingAndEmbedding' },
52
+ p7m: { format: 'certificate', description: 'documentDigitalSingnature' },
50
53
  pdf: { format: 'document', description: 'documentAdobe' },
51
54
  php: { format: 'code', description: 'filePHP' },
52
55
  png: { format: 'image', description: 'imagePNG', preview: true },
@@ -59,6 +62,7 @@ const fileExtensionsDictionary: FileExtenstion = {
59
62
  tar: { format: 'archive', description: 'uncompressedArchive' },
60
63
  tiff: { format: 'image', description: 'imageTIFF' },
61
64
  ts: { format: 'code', description: 'fileTS' },
65
+ tsd: { format: 'certificate', description: 'certificateTSD' },
62
66
  tsx: { format: 'code', description: 'fileTSX' },
63
67
  txt: { format: 'text', description: 'documentTXT' },
64
68
  wav: { format: 'audio', description: 'uncompressedAudio' },
@@ -66,68 +70,10 @@ const fileExtensionsDictionary: FileExtenstion = {
66
70
  xar: { format: 'archive', description: 'compressedArchive' },
67
71
  xls: { format: 'spreadsheet', description: 'spreadsheetMS' },
68
72
  xlsx: { format: 'spreadsheet', description: 'spreadsheetMS' },
73
+ xml: { format: 'markup', description: 'extensibleMarkupLanguage' },
69
74
  zip: { format: 'archive', description: 'compressedArchive' },
70
75
  }
71
76
 
72
- // const fileExtensionsDictionary: FileExtenstion = {
73
- // '7z': { format: 'archive', description: 'Archivio compresso' },
74
- // ace: { format: 'archive', description: 'Archivio compresso' },
75
- // ai: { format: 'vector', description: 'Vettoriale Adobe Illustrator' },
76
- // dart: { format: 'code', description: 'Dart' },
77
- // db: { format: 'data', description: 'File di database' },
78
- // default: { format: 'attachment', description: 'Formato sconosciuto' },
79
- // dmg: { format: 'executable', description: 'Apple Disk Image' },
80
- // doc: { format: 'text', description: 'Documento Microsoft Word' },
81
- // docm: { format: 'text', description: 'Documento Microsoft Word' },
82
- // docx: { format: 'text', description: 'Documento Microsoft Word Compresso' },
83
- // eml: { format: 'email', description: 'E-mail di posta elettronica' },
84
- // eps: { format: 'vector', description: 'Vettoriale Corel Draw' },
85
- // exe: { format: 'executable', description: 'File eseguibile Windows' },
86
- // flac: { format: 'audio', description: 'Audio non compresso' },
87
- // gif: { format: 'image', description: 'Immagine compressa', preview: true },
88
- // htm: { format: 'markup', description: 'Pagina web' },
89
- // heic: { format: 'image', description: 'High Efficiency Image File Format' },
90
- // html: { format: 'markup', description: 'Pagina web' },
91
- // jpe: { format: 'image', description: 'Immagine compressa', preview: true },
92
- // jpeg: { format: 'image', description: 'Immagine compressa', preview: true },
93
- // jpg: { format: 'image', description: 'Immagine compressa', preview: true },
94
- // js: { format: 'code', description: 'JavaScript' },
95
- // json: { format: 'data', description: 'JavaScript Object Notation' },
96
- // jsx: { format: 'code', description: 'JavaScript' },
97
- // m2v: { format: 'video', description: 'Filmato SD' },
98
- // mp2: { format: 'audio', description: 'Audio compresso' },
99
- // mp3: { format: 'audio', description: 'Audio compresso' },
100
- // mp4: { format: 'video', description: 'Filmato HD' },
101
- // mp4v: { format: 'video', description: 'Filmato HD' },
102
- // mpeg: { format: 'video', description: 'Filmato SD' },
103
- // mpg4: { format: 'video', description: 'Filmato SD' },
104
- // mpg: { format: 'video', description: 'Filmato SD' },
105
- // mpga: { format: 'audio', description: 'Audio compresso' },
106
- // odp: { format: 'slide', description: 'Slide di presentazione LibreOffice' },
107
- // ods: { format: 'spreadsheet', description: 'Foglio di calcolo LibreOffice' },
108
- // odt: { format: 'text', description: 'File di testo LibreOffice' },
109
- // pdf: { format: 'document', description: 'Documento Adobe' },
110
- // php: { format: 'code', description: 'Hypertext Preprocessor' },
111
- // png: { format: 'image', description: 'Immagine Portable Network Graphics', preview: true },
112
- // ppt: { format: 'slide', description: 'Slide di presentazione PowerPoint' },
113
- // rar: { format: 'archive', description: 'Archivio compresso' },
114
- // rtf: { format: 'text', description: 'Documento di testo Rich Text Format' },
115
- // sass: { format: 'code', description: 'Syntactically Awesome StyleSheets' },
116
- // shtml: { format: 'markup', description: 'Pagina web' },
117
- // svg: { format: 'vector', description: 'Scalable Vector Graphics', preview: true },
118
- // tar: { format: 'archive', description: 'Archivio non compresso' },
119
- // tiff: { format: 'image', description: 'Tag Image File Format' },
120
- // ts: { format: 'code', description: 'TypeScript' },
121
- // tsx: { format: 'code', description: 'TypeScript Extended Syntax' },
122
- // txt: { format: 'text', description: 'Documento di testo non formattato' },
123
- // wav: { format: 'audio', description: 'Audio non compresso' },
124
- // webp: { format: 'image', description: 'Immagine Web Picture', preview: true },
125
- // xar: { format: 'archive', description: 'Archivio compresso' },
126
- // xls: { format: 'spreadsheet', description: 'Foglio di calcolo Office' },
127
- // xlsx: { format: 'spreadsheet', description: 'Foglio di calcolo Office' },
128
- // zip: { format: 'archive', description: 'Archivio compresso' },
129
- // }
130
-
131
77
  const genericMimeToExt: Map<string, string[]> = new Map([
132
78
  ['image', ['.png', '.jpg', '.jpeg', '.tiff', '.webp', '.jpe', '.gif', '.heic']],
133
79
  ['audio', ['.mp2', '.mp3', '.mpga', '.wav', '.flac']],