@universal-material/web 3.6.9 → 3.6.10

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.
@@ -21,6 +21,8 @@ export declare class UmDialog extends LitElement {
21
21
  * _Note:_ Readonly
22
22
  */
23
23
  hasIcon: boolean;
24
+ get scrollContainer(): HTMLElement;
25
+ set scrollContainer(scrollContainer: HTMLElement);
24
26
  dialog: HTMLDialogElement;
25
27
  scrim: HTMLElement;
26
28
  content: HTMLElement;
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAQ,kBAAkB,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAI3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,2BAA2B,CAAC;AAKnC,qBACa,QAAS,SAAQ,UAAU;;IACtC,OAAgB,MAAM,4BAAwB;IAK9C,IACI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAWrB;IAED,IAAI,WAAW,WAEd;IAED;;;;OAIG;IACoE,WAAW,UAAS;IAE3F;;;;OAIG;IACgE,OAAO,UAAS;IAElE,MAAM,EAAG,iBAAiB,CAAC;IAC3B,KAAK,EAAG,WAAW,CAAC;IAClB,OAAO,EAAG,WAAW,CAAC;IACpB,SAAS,EAAG,WAAW,CAAC;IAG7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAGnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;IAIrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;IAI5C,MAAM,IAAI,kBAAkB;IA+B5B,YAAY,CAAC,iBAAiB,EAAE,cAAc;IAM9C,iBAAiB;IAUjB,oBAAoB;IAoEvB,IAAI;IAWJ,KAAK,CAAC,WAAW,GAAE,MAAyB;CA6CnD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,QAAQ,CAAC;KACtB;CACF"}
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAAQ,kBAAkB,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAI3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,2BAA2B,CAAC;AAKnC,qBACa,QAAS,SAAQ,UAAU;;IACtC,OAAgB,MAAM,4BAAwB;IAK9C,IACI,IAAI,IAAI,OAAO,CAElB;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,EAWrB;IAED,IAAI,WAAW,WAEd;IAED;;;;OAIG;IACoE,WAAW,UAAS;IAE3F;;;;OAIG;IACgE,OAAO,UAAS;IAInF,IACI,eAAe,IAAI,WAAW,CAEjC;IAED,IAAI,eAAe,CAAC,eAAe,EAAE,WAAW,EAM/C;IAEgB,MAAM,EAAG,iBAAiB,CAAC;IAC3B,KAAK,EAAG,WAAW,CAAC;IAClB,OAAO,EAAG,WAAW,CAAC;IACpB,SAAS,EAAG,WAAW,CAAC;IAG7C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAGnD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiB;IAE/C,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;IAIrD,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;IAI5C,MAAM,IAAI,kBAAkB;IA+B5B,YAAY,CAAC,iBAAiB,EAAE,cAAc;IAM9C,iBAAiB;IAUjB,oBAAoB;IAoEvB,IAAI;IAWJ,KAAK,CAAC,WAAW,GAAE,MAAyB;CA6CnD;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,UAAU,EAAE,QAAQ,CAAC;KACtB;CACF"}
package/dialog/dialog.js CHANGED
@@ -24,6 +24,7 @@ let UmDialog = class UmDialog extends LitElement {
24
24
  * _Note:_ Readonly
25
25
  */
26
26
  this.hasIcon = false;
27
+ this.#scrollContainer = null;
27
28
  this.#handleCancel = (e) => {
28
29
  e.preventDefault();
29
30
  const cancelPrevented = !this.dispatchEvent(new Event('cancel', { cancelable: true }));
@@ -52,6 +53,16 @@ let UmDialog = class UmDialog extends LitElement {
52
53
  get returnValue() {
53
54
  return this.dialog.returnValue;
54
55
  }
56
+ #scrollContainer;
57
+ get scrollContainer() {
58
+ return this.#scrollContainer ?? this.content;
59
+ }
60
+ set scrollContainer(scrollContainer) {
61
+ this.#scrollContainer?.removeEventListener('scroll', this.#handleScroll);
62
+ this.#scrollContainer = scrollContainer;
63
+ scrollContainer.addEventListener('scroll', this.#handleScroll.bind(this));
64
+ this.#setScrollDividers();
65
+ }
55
66
  static message(message) {
56
67
  return MessageDialogBuilder.create(message);
57
68
  }
@@ -129,15 +140,15 @@ let UmDialog = class UmDialog extends LitElement {
129
140
  this.#setBottomScrollDivider();
130
141
  }
131
142
  #setBottomScrollDivider() {
132
- const scrollBottom = this.content.scrollTop + this.content.offsetHeight;
133
- if (scrollBottom >= this.content.scrollHeight) {
143
+ const scrollBottom = this.scrollContainer.scrollTop + this.scrollContainer.offsetHeight;
144
+ if (scrollBottom >= this.scrollContainer.scrollHeight) {
134
145
  this.content.classList.remove(bottomDividerClass);
135
146
  return;
136
147
  }
137
148
  this.content.classList.add(bottomDividerClass);
138
149
  }
139
150
  #setTopScrollDivider() {
140
- if (this.content.scrollTop) {
151
+ if (this.scrollContainer.scrollTop) {
141
152
  this.content.classList.add(topDividerClass);
142
153
  return;
143
154
  }
@@ -191,6 +202,9 @@ __decorate([
191
202
  __decorate([
192
203
  property({ type: Boolean, attribute: 'has-icon', reflect: true })
193
204
  ], UmDialog.prototype, "hasIcon", void 0);
205
+ __decorate([
206
+ property()
207
+ ], UmDialog.prototype, "scrollContainer", null);
194
208
  __decorate([
195
209
  query('dialog')
196
210
  ], UmDialog.prototype, "dialog", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyValues } from '@lit/reactive-element';\n\nimport { html, HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { ConfirmDialogBuilder } from './confirm-dialog-builder.js';\nimport { styles } from './dialog.styles.js';\nimport { MessageDialogBuilder } from './message-dialog-builder.js';\n\nimport '../elevation/elevation.js';\n\nconst topDividerClass = 'top-divider';\nconst bottomDividerClass = 'bottom-divider';\n\n@customElement('u-dialog')\nexport class UmDialog extends LitElement {\n static override styles = [baseStyles, styles];\n\n #open = false;\n #contentResizeObserver!: ResizeObserver | null;\n\n @property({ type: Boolean })\n get open(): boolean {\n return this.#open;\n }\n\n set open(open: boolean) {\n if (this.#open === open) {\n return;\n }\n\n if (!open) {\n this.close();\n return;\n }\n\n this.show();\n }\n\n get returnValue() {\n return this.dialog.returnValue;\n }\n\n /**\n * Whether dialog has headline or not\n *\n * _Note:_ Readonly\n */\n @property({ type: Boolean, attribute: 'has-headline', reflect: true }) hasHeadline = false;\n\n /**\n * Whether dialog has icon\n *\n * _Note:_ Readonly\n */\n @property({ type: Boolean, attribute: 'has-icon', reflect: true }) hasIcon = false;\n\n @query('dialog') dialog!: HTMLDialogElement;\n @query('.scrim') scrim!: HTMLElement;\n @query('.content') content!: HTMLElement;\n @query('.container') container!: HTMLElement;\n\n @queryAssignedElements({ slot: 'headline', flatten: true })\n private readonly assignedHeadlines!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'icon', flatten: true })\n private readonly assignedIcons!: HTMLElement[];\n\n static message(message: string): MessageDialogBuilder {\n return MessageDialogBuilder.create(message);\n }\n\n static confirm(message: string): ConfirmDialogBuilder {\n return ConfirmDialogBuilder.create(message);\n }\n\n override render(): HTMLTemplateResult {\n return html`\n <dialog>\n <div class=\"scrim\" @click=${this.#handleScrimClick}></div>\n <div class=\"container\" part=\"container\">\n <u-elevation></u-elevation>\n <div class=\"icon\" part=\"icon\">\n <slot\n name=\"icon\"\n @slotchange=${this.#handleIconSlotChange}>\n </slot>\n </div>\n <div class=\"headline\" part=\"headline\">\n <slot\n name=\"headline\"\n @slotchange=${this.#handleHeadlineSlotChange}>\n </slot>\n </div>\n <div\n class=\"content\"\n part=\"content\"\n @scroll=${this.#handleScroll}>\n <slot></slot>\n </div>\n <div class=\"actions\" part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n </dialog>`;\n }\n\n override firstUpdated(changedProperties: PropertyValues) {\n super.firstUpdated(changedProperties);\n\n this.dialog.addEventListener('cancel', this.#handleCancel);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('submit', this.#handleSubmit);\n\n setTimeout(() => {\n this.#contentResizeObserver = new ResizeObserver(() => this.#setScrollDividers());\n this.#contentResizeObserver.observe(this.content);\n });\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('submit', this.#handleSubmit);\n\n this.#contentResizeObserver!.disconnect();\n this.#contentResizeObserver = null;\n }\n\n #handleSubmit(event: SubmitEvent) {\n const form = event.target as HTMLFormElement;\n const { submitter } = event;\n\n if (form.method !== 'dialog' || !submitter) {\n return;\n }\n\n this.close(submitter.getAttribute('value') ?? this.returnValue);\n }\n\n readonly #handleCancel = (e: Event) => {\n e.preventDefault();\n\n const cancelPrevented = !this.dispatchEvent(new Event('cancel', { cancelable: true }));\n\n if (cancelPrevented) {\n return;\n }\n\n this.close();\n };\n\n #handleIconSlotChange() {\n this.hasIcon = this.assignedIcons.length > 0;\n }\n\n #handleHeadlineSlotChange() {\n this.hasHeadline = this.assignedHeadlines.length > 0;\n }\n\n #handleScroll() {\n this.#setScrollDividers();\n }\n\n #setScrollDividers() {\n this.#setTopScrollDivider();\n this.#setBottomScrollDivider();\n }\n\n #setBottomScrollDivider() {\n const scrollBottom = this.content.scrollTop + this.content.offsetHeight;\n\n if (scrollBottom >= this.content.scrollHeight) {\n this.content.classList.remove(bottomDividerClass);\n return;\n }\n\n this.content.classList.add(bottomDividerClass);\n }\n\n #setTopScrollDivider() {\n if (this.content.scrollTop) {\n this.content.classList.add(topDividerClass);\n return;\n }\n\n this.content.classList.remove(topDividerClass);\n }\n\n async show() {\n this.#open = true;\n this.setAttribute('open', '');\n\n await this.updateComplete;\n this.dialog.showModal();\n const autoFocusElement = this.querySelector<HTMLElement>('[autofocus]');\n autoFocusElement?.focus();\n this.content.scrollTop = 0;\n }\n\n async close(returnValue: string = this.returnValue) {\n this.#open = false;\n this.removeAttribute('open');\n\n await this.updateComplete;\n\n if (!this.dialog.open || this.open) {\n return;\n }\n\n const preventClose = !this.dispatchEvent(new Event('close', { cancelable: true }));\n\n if (preventClose) {\n this.#open = true;\n return;\n }\n\n this.open = false;\n\n const closed = new Promise<void>(resolve =>\n this.container.addEventListener(\n 'animationend',\n () => {\n resolve();\n this.classList.remove('closing');\n this.dialog.close(returnValue);\n this.dispatchEvent(new Event('closed'));\n },\n { capture: true, once: true },\n )\n );\n\n this.classList.add('closing');\n await closed;\n }\n\n #handleScrimClick() {\n const cancelPrevented = !this.dispatchEvent(new Event('cancel', { cancelable: true }));\n\n if (cancelPrevented) {\n return;\n }\n\n this.close();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-dialog': UmDialog;\n }\n}\n"]}
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../../src/dialog/dialog.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyValues } from '@lit/reactive-element';\n\nimport { html, HTMLTemplateResult, LitElement } from 'lit';\nimport { customElement, property, query, queryAssignedElements } from 'lit/decorators.js';\n\nimport { styles as baseStyles } from '../shared/base.styles.js';\nimport { ConfirmDialogBuilder } from './confirm-dialog-builder.js';\nimport { styles } from './dialog.styles.js';\nimport { MessageDialogBuilder } from './message-dialog-builder.js';\n\nimport '../elevation/elevation.js';\n\nconst topDividerClass = 'top-divider';\nconst bottomDividerClass = 'bottom-divider';\n\n@customElement('u-dialog')\nexport class UmDialog extends LitElement {\n static override styles = [baseStyles, styles];\n\n #open = false;\n #contentResizeObserver!: ResizeObserver | null;\n\n @property({ type: Boolean })\n get open(): boolean {\n return this.#open;\n }\n\n set open(open: boolean) {\n if (this.#open === open) {\n return;\n }\n\n if (!open) {\n this.close();\n return;\n }\n\n this.show();\n }\n\n get returnValue() {\n return this.dialog.returnValue;\n }\n\n /**\n * Whether dialog has headline or not\n *\n * _Note:_ Readonly\n */\n @property({ type: Boolean, attribute: 'has-headline', reflect: true }) hasHeadline = false;\n\n /**\n * Whether dialog has icon\n *\n * _Note:_ Readonly\n */\n @property({ type: Boolean, attribute: 'has-icon', reflect: true }) hasIcon = false;\n\n #scrollContainer: HTMLElement | null = null;\n\n @property()\n get scrollContainer(): HTMLElement {\n return this.#scrollContainer ?? this.content;\n }\n\n set scrollContainer(scrollContainer: HTMLElement) {\n this.#scrollContainer?.removeEventListener('scroll', this.#handleScroll);\n\n this.#scrollContainer = scrollContainer;\n scrollContainer.addEventListener('scroll', this.#handleScroll.bind(this));\n this.#setScrollDividers();\n }\n\n @query('dialog') dialog!: HTMLDialogElement;\n @query('.scrim') scrim!: HTMLElement;\n @query('.content') content!: HTMLElement;\n @query('.container') container!: HTMLElement;\n\n @queryAssignedElements({ slot: 'headline', flatten: true })\n private readonly assignedHeadlines!: HTMLElement[];\n\n @queryAssignedElements({ slot: 'icon', flatten: true })\n private readonly assignedIcons!: HTMLElement[];\n\n static message(message: string): MessageDialogBuilder {\n return MessageDialogBuilder.create(message);\n }\n\n static confirm(message: string): ConfirmDialogBuilder {\n return ConfirmDialogBuilder.create(message);\n }\n\n override render(): HTMLTemplateResult {\n return html`\n <dialog>\n <div class=\"scrim\" @click=${this.#handleScrimClick}></div>\n <div class=\"container\" part=\"container\">\n <u-elevation></u-elevation>\n <div class=\"icon\" part=\"icon\">\n <slot\n name=\"icon\"\n @slotchange=${this.#handleIconSlotChange}>\n </slot>\n </div>\n <div class=\"headline\" part=\"headline\">\n <slot\n name=\"headline\"\n @slotchange=${this.#handleHeadlineSlotChange}>\n </slot>\n </div>\n <div\n class=\"content\"\n part=\"content\"\n @scroll=${this.#handleScroll}>\n <slot></slot>\n </div>\n <div class=\"actions\" part=\"actions\">\n <slot name=\"actions\"></slot>\n </div>\n </div>\n </dialog>`;\n }\n\n override firstUpdated(changedProperties: PropertyValues) {\n super.firstUpdated(changedProperties);\n\n this.dialog.addEventListener('cancel', this.#handleCancel);\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('submit', this.#handleSubmit);\n\n setTimeout(() => {\n this.#contentResizeObserver = new ResizeObserver(() => this.#setScrollDividers());\n this.#contentResizeObserver.observe(this.content);\n });\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener('submit', this.#handleSubmit);\n\n this.#contentResizeObserver!.disconnect();\n this.#contentResizeObserver = null;\n }\n\n #handleSubmit(event: SubmitEvent) {\n const form = event.target as HTMLFormElement;\n const { submitter } = event;\n\n if (form.method !== 'dialog' || !submitter) {\n return;\n }\n\n this.close(submitter.getAttribute('value') ?? this.returnValue);\n }\n\n readonly #handleCancel = (e: Event) => {\n e.preventDefault();\n\n const cancelPrevented = !this.dispatchEvent(new Event('cancel', { cancelable: true }));\n\n if (cancelPrevented) {\n return;\n }\n\n this.close();\n };\n\n #handleIconSlotChange() {\n this.hasIcon = this.assignedIcons.length > 0;\n }\n\n #handleHeadlineSlotChange() {\n this.hasHeadline = this.assignedHeadlines.length > 0;\n }\n\n #handleScroll() {\n this.#setScrollDividers();\n }\n\n #setScrollDividers() {\n this.#setTopScrollDivider();\n this.#setBottomScrollDivider();\n }\n\n #setBottomScrollDivider() {\n const scrollBottom = this.scrollContainer.scrollTop + this.scrollContainer.offsetHeight;\n\n if (scrollBottom >= this.scrollContainer.scrollHeight) {\n this.content.classList.remove(bottomDividerClass);\n return;\n }\n\n this.content.classList.add(bottomDividerClass);\n }\n\n #setTopScrollDivider() {\n if (this.scrollContainer.scrollTop) {\n this.content.classList.add(topDividerClass);\n return;\n }\n\n this.content.classList.remove(topDividerClass);\n }\n\n async show() {\n this.#open = true;\n this.setAttribute('open', '');\n\n await this.updateComplete;\n this.dialog.showModal();\n const autoFocusElement = this.querySelector<HTMLElement>('[autofocus]');\n autoFocusElement?.focus();\n this.content.scrollTop = 0;\n }\n\n async close(returnValue: string = this.returnValue) {\n this.#open = false;\n this.removeAttribute('open');\n\n await this.updateComplete;\n\n if (!this.dialog.open || this.open) {\n return;\n }\n\n const preventClose = !this.dispatchEvent(new Event('close', { cancelable: true }));\n\n if (preventClose) {\n this.#open = true;\n return;\n }\n\n this.open = false;\n\n const closed = new Promise<void>(resolve =>\n this.container.addEventListener(\n 'animationend',\n () => {\n resolve();\n this.classList.remove('closing');\n this.dialog.close(returnValue);\n this.dispatchEvent(new Event('closed'));\n },\n { capture: true, once: true },\n )\n );\n\n this.classList.add('closing');\n await closed;\n }\n\n #handleScrimClick() {\n const cancelPrevented = !this.dispatchEvent(new Event('cancel', { cancelable: true }));\n\n if (cancelPrevented) {\n return;\n }\n\n this.close();\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-dialog': UmDialog;\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ interface SwapOptions {
2
+ swapTargetClass: string;
3
+ onSwap: (evt: any) => void;
4
+ }
5
+ export declare class CustomSwap {
6
+ #private;
7
+ static pluginName: string;
8
+ options: SwapOptions;
9
+ dragOver(evt: any): void;
10
+ dragOverValid(evt: any): void;
11
+ drop(_evt: any): void;
12
+ nulling(): void;
13
+ }
14
+ export {};
15
+ //# sourceMappingURL=custom-swap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-swap.d.ts","sourceRoot":"","sources":["../../src/grid/custom-swap.ts"],"names":[],"mappings":"AAAA,UAAU,WAAW;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC5B;AAuBD,qBAAa,UAAU;;IACrB,MAAM,CAAC,UAAU,SAAgB;IAKjC,OAAO,EAAG,WAAW,CAAC;IAItB,QAAQ,CAAC,GAAG,EAAE,GAAG;IAcjB,aAAa,CAAC,GAAG,EAAE,GAAG;IActB,IAAI,CAAC,IAAI,EAAE,GAAG;IAad,OAAO;CAIR"}
@@ -0,0 +1,62 @@
1
+ // function swapNodes(n1, n2) {
2
+ // const p1 = n1.parentNode;
3
+ // const p2 = n2.parentNode;
4
+ // let i1; let
5
+ // i2;
6
+ //
7
+ // if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) {
8
+ // return;
9
+ // }
10
+ //
11
+ // i1 = Sortable.utils.index(n1);
12
+ // i2 = Sortable.utils.index(n2);
13
+ //
14
+ // if (p1.isEqualNode(p2) && i1 < i2) {
15
+ // i2++;
16
+ // }
17
+ //
18
+ // p1.insertBefore(n2, p1.children[i1]);
19
+ // p2.insertBefore(n1, p2.children[i2]);
20
+ // }
21
+ export class CustomSwap {
22
+ static { this.pluginName = 'customSwap'; } // nome do plugin
23
+ #lastValidTarget = null;
24
+ dragOver(evt) {
25
+ if (this.#lastValidTarget === evt.target) {
26
+ return;
27
+ }
28
+ this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);
29
+ this.#lastValidTarget = null;
30
+ if (evt.target === evt.ghostEl || evt.target === evt.activeSortable.el) {
31
+ evt.cancel();
32
+ }
33
+ }
34
+ dragOverValid(evt) {
35
+ if (evt.onMove(evt.target) !== false) {
36
+ this.#lastValidTarget = evt.target;
37
+ this.#lastValidTarget.classList.add(this.options.swapTargetClass);
38
+ }
39
+ else {
40
+ this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);
41
+ this.#lastValidTarget = null;
42
+ }
43
+ evt.cancel();
44
+ }
45
+ // Hook chamado quando o item é solto
46
+ drop(_evt) {
47
+ if (!this.#lastValidTarget) {
48
+ return;
49
+ }
50
+ // if (this.options.onSwap) {
51
+ // this.options.onSwap({
52
+ // oldIndex: Sortable.utils.index(evt.dragEl),
53
+ // newIndex: Sortable.utils.index(this.#lastValidTarget),
54
+ // });
55
+ // }
56
+ }
57
+ nulling() {
58
+ this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);
59
+ this.#lastValidTarget = null;
60
+ }
61
+ }
62
+ //# sourceMappingURL=custom-swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-swap.js","sourceRoot":"","sources":["../../src/grid/custom-swap.ts"],"names":[],"mappings":"AAKA,+BAA+B;AAC/B,8BAA8B;AAC9B,8BAA8B;AAC9B,gBAAgB;AAChB,UAAU;AACV,EAAE;AACF,kEAAkE;AAClE,cAAc;AACd,MAAM;AACN,EAAE;AACF,mCAAmC;AACnC,mCAAmC;AACnC,EAAE;AACF,yCAAyC;AACzC,YAAY;AACZ,MAAM;AACN,EAAE;AACF,0CAA0C;AAC1C,0CAA0C;AAC1C,IAAI;AAEJ,MAAM,OAAO,UAAU;aACd,eAAU,GAAG,YAAY,CAAC,GAAC,iBAAiB;IAOnD,gBAAgB,GAAuB,IAAI,CAAC;IAE5C,QAAQ,CAAC,GAAQ;QAEf,IAAI,IAAI,CAAC,gBAAgB,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACvE,GAAG,CAAC,MAAM,EAAE,CAAC;QACf,CAAC;IACH,CAAC;IAED,aAAa,CAAC,GAAQ;QAEpB,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,gBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACrE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,GAAG,CAAC,MAAM,EAAE,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,IAAI,CAAC,IAAS;QACZ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,0BAA0B;QAC1B,kDAAkD;QAClD,6DAA6D;QAC7D,QAAQ;QACR,IAAI;IACN,CAAC;IAED,OAAO;QACL,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAC/B,CAAC","sourcesContent":["interface SwapOptions {\n swapTargetClass: string;\n onSwap: (evt: any) => void;\n}\n\n// function swapNodes(n1, n2) {\n// const p1 = n1.parentNode;\n// const p2 = n2.parentNode;\n// let i1; let\n// i2;\n//\n// if (!p1 || !p2 || p1.isEqualNode(n2) || p2.isEqualNode(n1)) {\n// return;\n// }\n//\n// i1 = Sortable.utils.index(n1);\n// i2 = Sortable.utils.index(n2);\n//\n// if (p1.isEqualNode(p2) && i1 < i2) {\n// i2++;\n// }\n//\n// p1.insertBefore(n2, p1.children[i1]);\n// p2.insertBefore(n1, p2.children[i2]);\n// }\n\nexport class CustomSwap {\n static pluginName = 'customSwap'; // nome do plugin\n // defaults: SwapOptions = {\n // swapTargetClass: 'swap-target',\n // };\n\n options!: SwapOptions;\n\n #lastValidTarget: HTMLElement | null = null;\n\n dragOver(evt: any) {\n\n if (this.#lastValidTarget === evt.target) {\n return;\n }\n\n this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);\n this.#lastValidTarget = null;\n\n if (evt.target === evt.ghostEl || evt.target === evt.activeSortable.el) {\n evt.cancel();\n }\n }\n\n dragOverValid(evt: any) {\n\n if (evt.onMove(evt.target) !== false) {\n this.#lastValidTarget = evt.target;\n this.#lastValidTarget!.classList.add(this.options.swapTargetClass);\n } else {\n this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);\n this.#lastValidTarget = null;\n }\n\n evt.cancel();\n }\n\n // Hook chamado quando o item é solto\n drop(_evt: any) {\n if (!this.#lastValidTarget) {\n return;\n }\n\n // if (this.options.onSwap) {\n // this.options.onSwap({\n // oldIndex: Sortable.utils.index(evt.dragEl),\n // newIndex: Sortable.utils.index(this.#lastValidTarget),\n // });\n // }\n }\n\n nulling() {\n this.#lastValidTarget?.classList.remove(this.options.swapTargetClass);\n this.#lastValidTarget = null;\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class UmDataGridColumn extends LitElement {
3
+ path: string;
4
+ groupIndex: number | null;
5
+ }
6
+ declare global {
7
+ interface HTMLElementTagNameMap {
8
+ 'u-grid-column': UmDataGridColumn;
9
+ }
10
+ }
11
+ //# sourceMappingURL=grid-column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-column.d.ts","sourceRoot":"","sources":["../../src/grid/grid-column.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AAGjC,qBACa,gBAAiB,SAAQ,UAAU;IAClC,IAAI,SAAM;IACgC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;CAGxF;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,eAAe,EAAE,gBAAgB,CAAC;KACnC;CACF"}
@@ -0,0 +1,22 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement } from 'lit';
3
+ import { customElement, property } from 'lit/decorators.js';
4
+ let UmDataGridColumn = class UmDataGridColumn extends LitElement {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.path = '';
8
+ this.groupIndex = null;
9
+ // _index: number | null;
10
+ }
11
+ };
12
+ __decorate([
13
+ property()
14
+ ], UmDataGridColumn.prototype, "path", void 0);
15
+ __decorate([
16
+ property({ type: Number, attribute: 'group-index' })
17
+ ], UmDataGridColumn.prototype, "groupIndex", void 0);
18
+ UmDataGridColumn = __decorate([
19
+ customElement('u-grid-column')
20
+ ], UmDataGridColumn);
21
+ export { UmDataGridColumn };
22
+ //# sourceMappingURL=grid-column.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-column.js","sourceRoot":"","sources":["../../src/grid/grid-column.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGrD,IAAM,gBAAgB,GAAtB,MAAM,gBAAiB,SAAQ,UAAU;IAAzC;;QACO,SAAI,GAAG,EAAE,CAAC;QACgC,eAAU,GAAkB,IAAI,CAAC;QAEvF,yBAAyB;IAC3B,CAAC;CAAA,CAAA;AAJa;IAAX,QAAQ,EAAE;8CAAW;AACgC;IAArD,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;oDAAkC;AAF5E,gBAAgB;IAD5B,aAAa,CAAC,eAAe,CAAC;GAClB,gBAAgB,CAK5B","sourcesContent":["import { LitElement } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\n@customElement('u-grid-column')\nexport class UmDataGridColumn extends LitElement {\n @property() path = '';\n @property({ type: Number, attribute: 'group-index' }) groupIndex: number | null = null;\n\n // _index: number | null;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-grid-column': UmDataGridColumn;\n }\n}\n"]}
package/grid/grid.d.ts ADDED
@@ -0,0 +1,23 @@
1
+ import { PropertyValues } from '@lit/reactive-element';
2
+ import { LitElement } from 'lit';
3
+ import { UmDataGridColumn } from './grid-column';
4
+ import './grid-column';
5
+ export declare class UmDataTable extends LitElement {
6
+ #private;
7
+ static styles: import("lit").CSSResult[];
8
+ get items(): any[];
9
+ set items(items: any[]);
10
+ protected _columns: UmDataGridColumn[];
11
+ protected _groupColumns: UmDataGridColumn[];
12
+ protected _regularColumns: UmDataGridColumn[];
13
+ private readonly headerColumnsRow;
14
+ private readonly headerGroupRow;
15
+ protected firstUpdated(_changedProperties: PropertyValues): void;
16
+ render(): import("lit-html").TemplateResult<1>;
17
+ }
18
+ declare global {
19
+ interface HTMLElementTagNameMap {
20
+ 'u-grid': UmDataTable;
21
+ }
22
+ }
23
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/grid/grid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,OAAO,EAA4B,UAAU,EAAW,MAAM,KAAK,CAAC;AASpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,eAAe,CAAC;AAIvB,qBACa,WAAY,SAAQ,UAAU;;IACzC,OAAgB,MAAM,4BAAwB;IAK9C,IACI,KAAK,IAAI,GAAG,EAAE,CAEjB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,EAGrB;IAID,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAM;IACnC,SAAS,CAAC,aAAa,EAAE,gBAAgB,EAAE,CAAM;IACjD,SAAS,CAAC,eAAe,EAAE,gBAAgB,EAAE,CAAM;IACxB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAClD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAe;cAE7D,YAAY,CAAC,kBAAkB,EAAE,cAAc;IA6CzD,MAAM;CAsKhB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,QAAQ,EAAE,WAAW,CAAC;KACvB;CACF"}
package/grid/grid.js ADDED
@@ -0,0 +1,231 @@
1
+ import { __decorate } from "tslib";
2
+ import { html, LitElement, nothing } from 'lit';
3
+ import { styleMap } from 'lit-html/directives/style-map.js';
4
+ import { customElement, property, query, state } from 'lit/decorators.js';
5
+ import { map } from 'lit/directives/map.js';
6
+ import Sortable from 'sortablejs';
7
+ import { styles as baseStyles } from '../shared/base.styles';
8
+ import { CustomSwap } from './custom-swap.js';
9
+ import { styles } from './grid.styles.js';
10
+ import './grid-column';
11
+ Sortable.mount(CustomSwap);
12
+ let UmDataTable = class UmDataTable extends LitElement {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.#currentGroupingValuesMap = [];
16
+ this.#items = [];
17
+ this.#sortedItems = [];
18
+ this._columns = [];
19
+ this._groupColumns = [];
20
+ this._regularColumns = [];
21
+ // #setRegularColumnsOrder() {
22
+ // for (const i = 0; i < this._regularColumns.length; i++) {
23
+ // const column = this._regularColumns[i];
24
+ // column._index = i;
25
+ // }
26
+ // }
27
+ }
28
+ static { this.styles = [baseStyles, styles]; }
29
+ #currentGroupingValuesMap;
30
+ #items;
31
+ get items() {
32
+ return this.#items;
33
+ }
34
+ set items(items) {
35
+ this.#items = items;
36
+ this.#updateSorting();
37
+ }
38
+ #sortedItems;
39
+ firstUpdated(_changedProperties) {
40
+ super.firstUpdated(_changedProperties);
41
+ console.log(this.headerGroupRow);
42
+ new Sortable(this.headerGroupRow, {
43
+ group: 'columns',
44
+ // customSwap: true,
45
+ // revertOnSpill: true,
46
+ // swap: true,
47
+ // swapClass: 'column-drop-highlight',
48
+ draggable: 'u-chip',
49
+ forceFallback: true,
50
+ fallbackTolerance: 5,
51
+ });
52
+ new Sortable(this.headerColumnsRow, {
53
+ group: 'columns',
54
+ // customSwap: true,
55
+ // revertOnSpill: true,
56
+ // swap: true,
57
+ // swapClass: 'column-drop-highlight',
58
+ draggable: '.content-cell',
59
+ forceFallback: true,
60
+ fallbackTolerance: 5,
61
+ // onSwap: (evt: any) => {
62
+ //
63
+ // if (evt.oldIndex === evt.newIndex) {
64
+ // return;
65
+ // }
66
+ //
67
+ // let oldIndex = evt.oldIndex;
68
+ // let newIndex = evt.newIndex;
69
+ //
70
+ // if (this._groupColumns.length) {
71
+ // oldIndex--;
72
+ // newIndex--;
73
+ // }
74
+ //
75
+ // const column = this._regularColumns.splice(oldIndex, 1)[0];
76
+ // this._regularColumns.splice(newIndex, 0, column);
77
+ // this.requestUpdate();
78
+ // },
79
+ });
80
+ }
81
+ render() {
82
+ return html `
83
+ <div class="container">
84
+ <table class="u-table">
85
+ <thead>
86
+ ${this.#renderHeader()}
87
+ <tr id="header-columns-row">
88
+ ${this._groupColumns.length > 0
89
+ ? html `<th class="group-column-header" colspan="${this._groupColumns.length}"></th>`
90
+ : nothing}
91
+ ${map(this._regularColumns, column => html `<th class="content-cell">${column.textContent}</th>`)}
92
+ </tr>
93
+ </thead>
94
+ <tbody>${this.#renderBody()}</tbody>
95
+ </table>
96
+ </div>
97
+ <slot hidden @slotchange=${this.#handleSlotChange}></slot>
98
+ `;
99
+ }
100
+ #renderBody() {
101
+ const columnCount = this._columns.length;
102
+ if (!this.items?.length) {
103
+ return html `
104
+ <tr>
105
+ <td part="cell no-data" colspan="${columnCount}">No data</td>
106
+ </tr>
107
+ `;
108
+ }
109
+ // const columnsSortedByGroupIndex = this._columns.sort((a, b) => (a.groupIndex ?? 999999) - (b.groupIndex ?? 999999));
110
+ // const grouping = Object.entries(Object.groupBy(this._columns, ({ groupIndex }) => groupIndex)) as unknown as [string, UmDataGridColumn[]];
111
+ const groupingCount = this._groupColumns.length;
112
+ return html `
113
+ ${map(this.#sortedItems, item => this.#renderItem(item, groupingCount))}
114
+ `;
115
+ }
116
+ #renderItem(item, groupingCount) {
117
+ return html `
118
+ ${this.#renderGroupRows(item)}
119
+ <tr>
120
+ ${this.#renderGroupingSpanColumn(groupingCount)}
121
+ ${map(this._regularColumns, column => html `
122
+ <td>${this.#getValueByPath(item, column.path)}</td>`)}
123
+ </tr>
124
+ `;
125
+ }
126
+ #renderGroupingSpanColumn(groupingCount) {
127
+ return groupingCount
128
+ ? html `<td colspan="${groupingCount}"></td>`
129
+ : nothing;
130
+ }
131
+ #renderGroupRows(item) {
132
+ return html `
133
+ ${map(this._groupColumns, (column, index) => {
134
+ const value = this.#getValueByPath(item, column.path);
135
+ if (this.#currentGroupingValuesMap[index] === value) {
136
+ return;
137
+ }
138
+ this.#currentGroupingValuesMap.splice(index, Infinity);
139
+ this.#currentGroupingValuesMap[index] = value;
140
+ const emptyColumns = new Array(index);
141
+ return html `
142
+ <tr>
143
+ ${map(emptyColumns, () => html `<td></td>`)}
144
+ <td class="group-column-toggle">
145
+ <svg xmlns="http://www.w3.org/2000/svg" height="1em" viewBox="0 -960 960 960" width="1em" fill="currentColor">
146
+ <path d="M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z"/>
147
+ </svg>
148
+ </td>
149
+ <td class="grouping-row" colspan="${this._regularColumns.length + (this._groupColumns.length + index + 1)}">
150
+ ${column.textContent}: ${value}
151
+ </td>
152
+ </tr>
153
+ `;
154
+ })}
155
+ `;
156
+ }
157
+ #getValueByPath(item, path) {
158
+ return path.split('.').reduce((acc, key) => acc?.[key], item) ?? '';
159
+ }
160
+ #handleSlotChange(e) {
161
+ const slot = e.target;
162
+ const assigned = slot.assignedElements({ flatten: true });
163
+ this._columns = assigned.filter(el => el.tagName === 'U-GRID-COLUMN');
164
+ this._groupColumns = this._columns
165
+ .filter(c => !!c.groupIndex || c.groupIndex === 0)
166
+ .sort((a, b) => a.groupIndex - b.groupIndex);
167
+ this._regularColumns = this._columns.filter(c => !this._groupColumns.includes(c));
168
+ this.#updateSorting();
169
+ }
170
+ #updateSorting() {
171
+ if (!this.items?.length) {
172
+ this.#sortedItems = [];
173
+ return;
174
+ }
175
+ if (!this._groupColumns.length) {
176
+ this.#sortedItems = this.items;
177
+ }
178
+ this.#sortedItems = this.items.sort((a, b) => {
179
+ for (const groupColumn of this._groupColumns) {
180
+ const aValue = this.#getValueByPath(a, groupColumn.path) ?? '';
181
+ const bValue = this.#getValueByPath(b, groupColumn.path) ?? '';
182
+ const textComparison = aValue.toString().localeCompare(bValue.toString());
183
+ if (textComparison !== 0) {
184
+ return textComparison;
185
+ }
186
+ }
187
+ return 0;
188
+ });
189
+ }
190
+ #renderHeader() {
191
+ // if (!this._groupColumns.length) {
192
+ // return nothing;
193
+ // }
194
+ const headerStyles = {
195
+ display: this._groupColumns.length
196
+ ? ''
197
+ : 'none',
198
+ };
199
+ return html `
200
+ <tr style="${styleMap(headerStyles)}">
201
+ <th colspan="${this._columns.length}">
202
+ <div class="header">
203
+ <u-chip-set id="header-group-row">
204
+ ${map(this._groupColumns, column => html `<u-chip>${column.textContent}</u-chip>`)}
205
+ </u-chip-set>
206
+ </div>
207
+ </th>
208
+ </tr>
209
+ `;
210
+ }
211
+ };
212
+ __decorate([
213
+ property({ type: Array })
214
+ ], UmDataTable.prototype, "items", null);
215
+ __decorate([
216
+ state()
217
+ ], UmDataTable.prototype, "_groupColumns", void 0);
218
+ __decorate([
219
+ state()
220
+ ], UmDataTable.prototype, "_regularColumns", void 0);
221
+ __decorate([
222
+ query('#header-columns-row', true)
223
+ ], UmDataTable.prototype, "headerColumnsRow", void 0);
224
+ __decorate([
225
+ query('#header-group-row', true)
226
+ ], UmDataTable.prototype, "headerGroupRow", void 0);
227
+ UmDataTable = __decorate([
228
+ customElement('u-grid')
229
+ ], UmDataTable);
230
+ export { UmDataTable };
231
+ //# sourceMappingURL=grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/grid/grid.ts"],"names":[],"mappings":"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","sourcesContent":["import { PropertyValues } from '@lit/reactive-element';\n\nimport { html, HTMLTemplateResult, LitElement, nothing } from 'lit';\nimport { styleMap } from 'lit-html/directives/style-map.js';\nimport { customElement, property, query, state } from 'lit/decorators.js';\nimport { map } from 'lit/directives/map.js';\n\nimport Sortable from 'sortablejs';\n\nimport { styles as baseStyles } from '../shared/base.styles';\nimport { CustomSwap } from './custom-swap.js';\nimport { UmDataGridColumn } from './grid-column';\nimport { styles } from './grid.styles.js';\n\nimport './grid-column';\n\nSortable.mount(CustomSwap);\n\n@customElement('u-grid')\nexport class UmDataTable extends LitElement {\n static override styles = [baseStyles, styles];\n\n readonly #currentGroupingValuesMap: any[] = [];\n #items: any[] = [];\n\n @property({ type: Array })\n get items(): any[] {\n return this.#items;\n }\n\n set items(items: any[]) {\n this.#items = items;\n this.#updateSorting();\n }\n\n #sortedItems: any[] = [];\n\n protected _columns: UmDataGridColumn[] = [];\n @state() protected _groupColumns: UmDataGridColumn[] = [];\n @state() protected _regularColumns: UmDataGridColumn[] = [];\n @query('#header-columns-row', true) private readonly headerColumnsRow!: HTMLElement;\n @query('#header-group-row', true) private readonly headerGroupRow!: HTMLElement;\n\n protected override firstUpdated(_changedProperties: PropertyValues) {\n super.firstUpdated(_changedProperties);\n\n console.log(this.headerGroupRow);\n new Sortable(this.headerGroupRow, {\n group: 'columns',\n // customSwap: true,\n // revertOnSpill: true,\n // swap: true,\n // swapClass: 'column-drop-highlight',\n draggable: 'u-chip',\n forceFallback: true,\n fallbackTolerance: 5,\n });\n\n new Sortable(this.headerColumnsRow, {\n group: 'columns',\n // customSwap: true,\n // revertOnSpill: true,\n // swap: true,\n // swapClass: 'column-drop-highlight',\n draggable: '.content-cell',\n forceFallback: true,\n fallbackTolerance: 5,\n // onSwap: (evt: any) => {\n //\n // if (evt.oldIndex === evt.newIndex) {\n // return;\n // }\n //\n // let oldIndex = evt.oldIndex;\n // let newIndex = evt.newIndex;\n //\n // if (this._groupColumns.length) {\n // oldIndex--;\n // newIndex--;\n // }\n //\n // const column = this._regularColumns.splice(oldIndex, 1)[0];\n // this._regularColumns.splice(newIndex, 0, column);\n // this.requestUpdate();\n // },\n });\n }\n\n override render() {\n\n return html`\n <div class=\"container\">\n <table class=\"u-table\">\n <thead>\n ${this.#renderHeader()}\n <tr id=\"header-columns-row\">\n ${this._groupColumns.length > 0\n ? html`<th class=\"group-column-header\" colspan=\"${this._groupColumns.length}\"></th>`\n : nothing}\n ${map(this._regularColumns, column =>\n html`<th class=\"content-cell\">${column.textContent}</th>`)}\n </tr>\n </thead>\n <tbody>${this.#renderBody()}</tbody>\n </table>\n </div>\n <slot hidden @slotchange=${this.#handleSlotChange}></slot>\n `;\n }\n\n #renderBody() {\n\n const columnCount = this._columns.length;\n\n if (!this.items?.length) {\n return html`\n <tr>\n <td part=\"cell no-data\" colspan=\"${columnCount}\">No data</td>\n </tr>\n `;\n }\n\n // const columnsSortedByGroupIndex = this._columns.sort((a, b) => (a.groupIndex ?? 999999) - (b.groupIndex ?? 999999));\n // const grouping = Object.entries(Object.groupBy(this._columns, ({ groupIndex }) => groupIndex)) as unknown as [string, UmDataGridColumn[]];\n\n const groupingCount = this._groupColumns.length;\n\n return html`\n ${map(this.#sortedItems, item => this.#renderItem(item, groupingCount))}\n `;\n }\n\n #renderItem(item: any, groupingCount: number) {\n return html`\n ${this.#renderGroupRows(item)}\n <tr>\n ${this.#renderGroupingSpanColumn(groupingCount)}\n ${map(this._regularColumns, column =>\n html`\n <td>${this.#getValueByPath(item, column.path)}</td>`)}\n </tr>\n `;\n }\n\n #renderGroupingSpanColumn(groupingCount: number) {\n return groupingCount\n ? html`<td colspan=\"${groupingCount}\"></td>`\n : nothing;\n }\n\n #renderGroupRows(item: any): HTMLTemplateResult {\n\n return html`\n ${map(this._groupColumns, (column, index) => {\n const value = this.#getValueByPath(item, column.path);\n\n if (this.#currentGroupingValuesMap[index] === value) {\n return;\n }\n\n this.#currentGroupingValuesMap.splice(index, Infinity);\n this.#currentGroupingValuesMap[index] = value;\n const emptyColumns = new Array(index);\n\n return html`\n <tr>\n ${map(emptyColumns, () => html`<td></td>`)}\n <td class=\"group-column-toggle\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1em\" viewBox=\"0 -960 960 960\" width=\"1em\" fill=\"currentColor\">\n <path d=\"M480-344 240-584l56-56 184 184 184-184 56 56-240 240Z\"/>\n </svg>\n </td>\n <td class=\"grouping-row\" colspan=\"${this._regularColumns.length + (this._groupColumns.length + index + 1)}\">\n ${column.textContent}: ${value}\n </td>\n </tr>\n `;\n })}\n `;\n }\n\n #getValueByPath(item: any, path: string) {\n return path.split('.').reduce((acc, key) => acc?.[key], item) ?? '';\n }\n\n #handleSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const assigned = slot.assignedElements({ flatten: true }) as any[];\n this._columns = assigned.filter(el => el.tagName === 'U-GRID-COLUMN');\n this._groupColumns = this._columns\n .filter(c => !!c.groupIndex || c.groupIndex === 0)\n .sort((a, b) => a.groupIndex! - b.groupIndex!);\n this._regularColumns = this._columns.filter(c => !this._groupColumns.includes(c));\n this.#updateSorting();\n }\n\n #updateSorting(): void {\n if (!this.items?.length) {\n this.#sortedItems = [];\n return;\n }\n\n if (!this._groupColumns.length) {\n this.#sortedItems = this.items;\n }\n\n this.#sortedItems = this.items.sort((a, b) => {\n\n for (const groupColumn of this._groupColumns) {\n const aValue = this.#getValueByPath(a, groupColumn.path) ?? '';\n const bValue = this.#getValueByPath(b, groupColumn.path) ?? '';\n\n const textComparison = aValue.toString().localeCompare(bValue.toString());\n\n if (textComparison !== 0) {\n return textComparison;\n }\n }\n\n return 0;\n });\n }\n\n #renderHeader() {\n // if (!this._groupColumns.length) {\n // return nothing;\n // }\n\n const headerStyles = {\n display: this._groupColumns.length\n ? ''\n : 'none',\n };\n\n return html`\n <tr style=\"${styleMap(headerStyles)}\">\n <th colspan=\"${this._columns.length}\">\n <div class=\"header\">\n <u-chip-set id=\"header-group-row\">\n ${map(this._groupColumns, column =>\n html`<u-chip>${column.textContent}</u-chip>`)}\n </u-chip-set>\n </div>\n </th>\n </tr>\n `;\n }\n\n // #setRegularColumnsOrder() {\n // for (const i = 0; i < this._regularColumns.length; i++) {\n // const column = this._regularColumns[i];\n // column._index = i;\n // }\n // }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'u-grid': UmDataTable;\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const styles: import("lit").CSSResult;
2
+ //# sourceMappingURL=grid.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.styles.d.ts","sourceRoot":"","sources":["../../src/grid/grid.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM,yBAmIlB,CAAC"}