@aquera/nile-elements 0.1.32-beta-1.5 → 0.1.32-beta-1.6

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 (58) hide show
  1. package/dist/index.cjs.js +1 -1
  2. package/dist/index.esm.js +1 -1
  3. package/dist/nile-table/index.cjs.js +2 -0
  4. package/dist/nile-table/index.cjs.js.map +1 -0
  5. package/dist/nile-table/index.esm.js +1 -0
  6. package/dist/nile-table/nile-table.cjs.js +2 -0
  7. package/dist/nile-table/nile-table.cjs.js.map +1 -0
  8. package/dist/nile-table/nile-table.css.cjs.js +2 -0
  9. package/dist/nile-table/nile-table.css.cjs.js.map +1 -0
  10. package/dist/nile-table/nile-table.css.esm.js +6 -0
  11. package/dist/nile-table/nile-table.esm.js +3 -0
  12. package/dist/nile-table-body/nile-table-body.cjs.js +1 -1
  13. package/dist/nile-table-body/nile-table-body.cjs.js.map +1 -1
  14. package/dist/nile-table-body/nile-table-body.esm.js +2 -2
  15. package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js +1 -1
  16. package/dist/nile-table-cell-item/nile-table-cell-item.css.cjs.js.map +1 -1
  17. package/dist/nile-table-cell-item/nile-table-cell-item.css.esm.js +8 -4
  18. package/dist/nile-table-header-item/nile-table-header-item.cjs.js +1 -1
  19. package/dist/nile-table-header-item/nile-table-header-item.cjs.js.map +1 -1
  20. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js +1 -1
  21. package/dist/nile-table-header-item/nile-table-header-item.css.cjs.js.map +1 -1
  22. package/dist/nile-table-header-item/nile-table-header-item.css.esm.js +5 -0
  23. package/dist/nile-table-header-item/nile-table-header-item.esm.js +9 -9
  24. package/dist/nile-table-row/nile-table-row.cjs.js.map +1 -1
  25. package/dist/src/index.d.ts +1 -0
  26. package/dist/src/index.js +1 -0
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/nile-table/index.d.ts +1 -0
  29. package/dist/src/nile-table/index.js +2 -0
  30. package/dist/src/nile-table/index.js.map +1 -0
  31. package/dist/src/nile-table/nile-table.css.d.ts +12 -0
  32. package/dist/src/nile-table/nile-table.css.js +18 -0
  33. package/dist/src/nile-table/nile-table.css.js.map +1 -0
  34. package/dist/src/nile-table/nile-table.d.ts +48 -0
  35. package/dist/src/nile-table/nile-table.js +143 -0
  36. package/dist/src/nile-table/nile-table.js.map +1 -0
  37. package/dist/src/nile-table-body/nile-table-body.d.ts +3 -1
  38. package/dist/src/nile-table-body/nile-table-body.js +8 -1
  39. package/dist/src/nile-table-body/nile-table-body.js.map +1 -1
  40. package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js +6 -2
  41. package/dist/src/nile-table-cell-item/nile-table-cell-item.css.js.map +1 -1
  42. package/dist/src/nile-table-header-item/nile-table-header-item.css.js +5 -0
  43. package/dist/src/nile-table-header-item/nile-table-header-item.css.js.map +1 -1
  44. package/dist/src/nile-table-header-item/nile-table-header-item.js +1 -1
  45. package/dist/src/nile-table-header-item/nile-table-header-item.js.map +1 -1
  46. package/dist/src/nile-table-row/nile-table-row.js.map +1 -1
  47. package/dist/tsconfig.tsbuildinfo +1 -1
  48. package/package.json +4 -3
  49. package/src/index.ts +2 -1
  50. package/src/nile-table/index.ts +1 -0
  51. package/src/nile-table/nile-table.css.ts +20 -0
  52. package/src/nile-table/nile-table.ts +161 -0
  53. package/src/nile-table-body/nile-table-body.ts +7 -2
  54. package/src/nile-table-cell-item/nile-table-cell-item.css.ts +6 -2
  55. package/src/nile-table-header-item/nile-table-header-item.css.ts +5 -0
  56. package/src/nile-table-header-item/nile-table-header-item.ts +1 -1
  57. package/src/nile-table-row/nile-table-row.ts +1 -2
  58. package/vscode-html-custom-data.json +20 -2
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Webcomponent nile-elements following open-wc recommendations",
4
4
  "license": "MIT",
5
5
  "author": "nile-elements",
6
- "version": "0.1.32-beta-1.5",
6
+ "version": "0.1.32-beta-1.6",
7
7
  "main": "dist/src/index.js",
8
8
  "type": "module",
9
9
  "module": "dist/src/index.js",
@@ -84,7 +84,8 @@
84
84
  "./nile-section-message": "./dist/src/nile-section-message/index.js",
85
85
  "./nile-toolbar": "./dist/src/nile-toolbar/index.js",
86
86
  "./nile-inline-edit": "./dist/src/nile-inline-edit/index.js",
87
- "./nile-tour": "./dist/src/nile-tour/index.js"
87
+ "./nile-tour": "./dist/src/nile-tour/index.js",
88
+ "./nile-table": "./dist/src/nile-table/index.js"
88
89
  },
89
90
  "scripts": {
90
91
  "analyze": "cem analyze --litelement",
@@ -188,4 +189,4 @@
188
189
  "prettier --write"
189
190
  ]
190
191
  }
191
- }
192
+ }
package/src/index.ts CHANGED
@@ -74,4 +74,5 @@ export { NileDivider } from './nile-divider';
74
74
  export { NileTitle } from './nile-title';
75
75
  export { NileSectionMessage } from './nile-section-message';
76
76
  export { NileToolbar } from './nile-toolbar';
77
- export { NileInlineEdit } from './nile-inline-edit';
77
+ export { NileInlineEdit } from './nile-inline-edit';
78
+ export { NileTable } from './nile-table';
@@ -0,0 +1 @@
1
+ export { NileTable } from './nile-table';
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {css} from 'lit';
9
+
10
+ /**
11
+ * Table CSS
12
+ */
13
+ export const styles = css`
14
+ :host {
15
+ display:block;
16
+ width:100%;
17
+ }
18
+ `;
19
+
20
+ export default [styles];
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {LitElement, html, CSSResultArray, TemplateResult, PropertyValues} from 'lit';
9
+ import { customElement, property, query, state} from 'lit/decorators.js';
10
+ import {styles} from './nile-table.css';
11
+ import NileElement from '../internal/nile-element';
12
+ import { NileTableBody } from '../nile-table-body';
13
+ import { NileTableCellItem } from '../nile-table-cell-item';
14
+ import { NileTableHeaderItem } from '../nile-table-header-item';
15
+
16
+
17
+ /**
18
+ * Nile table component.
19
+ *
20
+ * @tag nile-table
21
+ *
22
+ */
23
+ @customElement('nile-table')
24
+ export class NileTable extends NileElement {
25
+ @query('slot') defaultSlot: HTMLSlotElement;
26
+ private rows:Array<NileTableBody>=[];
27
+ private primaryRowWidths:Array<number>=[]
28
+ private resizeObserver:ResizeObserver ;
29
+ private debounceTimeout:any
30
+
31
+
32
+ /**
33
+ * The styles for nile-table
34
+ * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`
35
+ */
36
+ public static get styles(): CSSResultArray {
37
+ return [styles];
38
+ }
39
+ connectedCallback(): void {
40
+ super.connectedCallback()
41
+ this.addEventListener('nile-body-load',this.handleRows)
42
+ }
43
+
44
+ protected firstUpdated(_changedProperties: PropertyValues): void {
45
+ this.updateComplete.then(()=>{
46
+ this.handleResizeObserver();
47
+ })
48
+ }
49
+
50
+
51
+ /* #endregion */
52
+
53
+ /* #region Methods */
54
+
55
+ /**
56
+ * Render method
57
+ * @slot This is a slot test
58
+ */
59
+ public render(): TemplateResult {
60
+ return html`
61
+ <slot @slotchange="${this.repaintTable}"></slot>
62
+ `;
63
+ }
64
+
65
+ repaintTable(){
66
+ this.realignStructure();
67
+ this.handleBodyCssUpdate();
68
+ }
69
+
70
+ handleRows(e:CustomEvent){
71
+ this.rows=[...this.rows,e.detail.comp]
72
+ }
73
+
74
+ handleBodyCssUpdate(){
75
+ if (this.rows.length<2) return;
76
+ const tableBodies = this.rows;
77
+ const firstEl=tableBodies[0].shadowRoot?.querySelector<HTMLDivElement>('div.base');
78
+ if(firstEl) {
79
+ firstEl.style.borderTopRightRadius="var(--nile-radius-radius-xl)";
80
+ firstEl.style.borderTopLeftRadius = 'var(--nile-radius-radius-xl)';
81
+ firstEl.style.borderBottomRightRadius="0px";
82
+ firstEl.style.borderBottomLeftRadius = '0px';
83
+ firstEl.style.borderBottom = 'none';
84
+ }
85
+ tableBodies.forEach((tb,i)=>{
86
+ if(i>0 && i<tableBodies.length-1){
87
+ const el=tb.shadowRoot?.querySelector<HTMLDivElement>('div.base');
88
+ if(el) {
89
+ el.style.borderTopRightRadius="0px";
90
+ el.style.borderTopLeftRadius = "0px";
91
+ el.style.borderBottomRightRadius="0px";
92
+ el.style.borderBottomLeftRadius = "0px";
93
+ el.style.borderBottom = 'none';
94
+ }
95
+ }
96
+ })
97
+ const lastEl=tableBodies[tableBodies.length - 1].shadowRoot?.querySelector<HTMLDivElement>('div.base')
98
+ if(lastEl){
99
+ lastEl.style.borderTopRightRadius="0px";
100
+ lastEl.style.borderTopLeftRadius = '0px';
101
+ lastEl.style.borderBottomRightRadius="var(--nile-radius-radius-xl)";
102
+ lastEl.style.borderBottomLeftRadius = 'var(--nile-radius-radius-xl)';
103
+ }
104
+ }
105
+
106
+ getPrimaryColumnWidths(){
107
+ const primaryTb=this.rows.find(tb=>tb.type=='primary')!;
108
+ const widthArray=this.getTableCellFetchQuery(primaryTb).map((e:LitElement)=>e.clientWidth) as Array<number>
109
+ return widthArray;
110
+ }
111
+
112
+ realignStructure(){
113
+ if (this.rows.length<2) return;
114
+ const primaryRowWidths=this.getPrimaryColumnWidths();
115
+ const secondaryRows=this.rows.filter(tb=>tb.type!='primary');
116
+ secondaryRows.forEach((row)=>{
117
+ let elements=this.getTableCellFetchQuery(row)
118
+ elements?.forEach((el:NileTableCellItem|NileTableHeaderItem,ind)=>{
119
+ el.style.setProperty('--cell-width',primaryRowWidths.at(ind)+'px')
120
+ })
121
+ })
122
+ }
123
+
124
+ getTableCellFetchQuery(row:NileTableBody):Array<Element>{
125
+ return row?.shadowRoot?.
126
+ querySelector<HTMLSlotElement>('slot:not([name])')?.
127
+ assignedElements()[0]
128
+ .shadowRoot?.querySelector<HTMLSlotElement>('slot')?.
129
+ assignedElements()!
130
+ }
131
+
132
+ handleResizeObserver(){
133
+ const onResize = (entries:ResizeObserverEntry[]): void=> {
134
+ for (let entry of entries) {
135
+ if(this.debounceTimeout){
136
+ clearTimeout(this.debounceTimeout);
137
+ }
138
+ this.debounceTimeout=setTimeout(() => {
139
+ this.realignStructure();
140
+ this.debounceTimeout=null;
141
+ }, 50);
142
+ }
143
+ };
144
+ this.resizeObserver=new ResizeObserver(onResize)
145
+ this.resizeObserver.observe(this);
146
+ }
147
+
148
+ disconnectedCallback(): void {
149
+ this.resizeObserver.disconnect()
150
+ super.disconnectedCallback()
151
+ }
152
+ /* #endregion */
153
+ }
154
+
155
+ export default NileTable;
156
+
157
+ declare global {
158
+ interface HTMLElementTagNameMap {
159
+ 'nile-table': NileTable;
160
+ }
161
+ }
@@ -10,6 +10,7 @@ import {
10
10
  html,
11
11
  CSSResultArray,
12
12
  TemplateResult,
13
+ PropertyValues,
13
14
  } from 'lit';
14
15
  import {
15
16
  customElement,
@@ -38,8 +39,8 @@ export class NileTableBody extends NileElement {
38
39
  */
39
40
 
40
41
  @query('slot') defaultSlot: HTMLSlotElement;
41
- @queryAssignedNodes({ flatten: true })
42
- _childNodes!: Array<HTMLElement>;
42
+ @queryAssignedNodes({ flatten: true }) _childNodes!: Array<HTMLElement>;
43
+ @property() type: 'primary' | 'secondary' = 'primary';
43
44
 
44
45
  @state() private rows_data: any[] = [];
45
46
  @state() private header_rows_data: any[] = [];
@@ -50,6 +51,10 @@ export class NileTableBody extends NileElement {
50
51
  return [styles];
51
52
  }
52
53
 
54
+ protected firstUpdated(_changedProperties: PropertyValues): void {
55
+ this.emit('nile-body-load', { value: this.type, comp:this },true,false)
56
+ }
57
+
53
58
  /* #endregion */
54
59
 
55
60
  /* #region Methods */
@@ -12,17 +12,21 @@ import { css } from 'lit';
12
12
  */
13
13
  export const styles = css`
14
14
  :host {
15
+ --min-cell-width:auto;
16
+ --cell-width:auto;
17
+ --min--height: 52px;
18
+ --max--cell-width: auto;
15
19
  box-sizing: border-box;
16
20
  display: table-cell;
17
21
  vertical-align: middle;
18
- --min--height: 52px;
19
- --max--cell-width: auto;
20
22
  max-width: var(--max--cell-width);
21
23
  padding: 16px 24px;
22
24
  min-height: var(--min--height);
23
25
  }
24
26
 
25
27
  .column {
28
+ min-width:var(--min-cell-width);
29
+ width:var(--cell-width);
26
30
  height: 100%;
27
31
  color: var(--nile-colors-gray-light-mode-600);
28
32
  font-family: var(--nile-font-family-serif);
@@ -12,11 +12,15 @@ import { css } from 'lit';
12
12
  */
13
13
  export const styles = css`
14
14
  :host {
15
+ --cell-min-width: auto;
16
+ --cell-width: auto;
15
17
  display: table-cell;
16
18
  box-sizing: border-box;
17
19
  }
18
20
 
19
21
  .header__item__wrapper{
22
+ min-width:var(--cell-min-width);
23
+ width:var(--cell-width);
20
24
  display:flex;
21
25
  align-items:center;
22
26
  box-sizing: border-box;
@@ -26,6 +30,7 @@ export const styles = css`
26
30
  }
27
31
 
28
32
  .headers {
33
+ overflow:hidden;
29
34
  display: flex;
30
35
  align-items: center;
31
36
  height: auto;
@@ -69,7 +69,7 @@ export class NileTableHeaderItem extends NileElement {
69
69
  public render(): TemplateResult {
70
70
  return html` ${this.hasSlotController.test('[default]')
71
71
  ? html`
72
- <div class="header__item__wrapper">
72
+ <div class="header__item__wrapper" part="nile__table-header-cell">
73
73
  <div class="headers">
74
74
  <slot> </slot>
75
75
  ${this.havesort && this.sorting_ct % 3 === 0
@@ -47,8 +47,7 @@ export class NileTableRow extends NileElement {
47
47
  ];
48
48
  for (let i = 0; i < header_items.length; i++) {
49
49
  const header = header_items[i];
50
- const haveIcon =
51
- header.textContent == event.detail.value.curr_sort_string;
50
+ const haveIcon = header.textContent == event.detail.value.curr_sort_string;
52
51
  if (!haveIcon) {
53
52
  header.sorting_ct = 0;
54
53
  }
@@ -3284,8 +3284,21 @@
3284
3284
  },
3285
3285
  {
3286
3286
  "name": "nile-table-body",
3287
- "description": "nile-table-body component.\n\nProperties:\n\n * `defaultSlot` {`HTMLSlotElement`} - The styles for TableBody\n\n * `_childNodes` {`HTMLElement[]`} - \n\n * `rows_data` {`any[]`} - \n\n * `header_rows_data` {`any[]`} - \n\n * `sort__index` {`number`} - \n\n * `search__index` {`number`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
3288
- "attributes": []
3287
+ "description": "nile-table-body component.\n\nAttributes:\n\n * `type` {`\"primary\" | \"secondary\"`} - \n\nProperties:\n\n * `defaultSlot` {`HTMLSlotElement`} - The styles for TableBody\n\n * `_childNodes` {`HTMLElement[]`} - \n\n * `type` {`\"primary\" | \"secondary\"`} - \n\n * `rows_data` {`any[]`} - \n\n * `header_rows_data` {`any[]`} - \n\n * `sort__index` {`number`} - \n\n * `search__index` {`number`} - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
3288
+ "attributes": [
3289
+ {
3290
+ "name": "type",
3291
+ "description": "`type` {`\"primary\" | \"secondary\"`} - \n\nProperty: type\n\nDefault: primary",
3292
+ "values": [
3293
+ {
3294
+ "name": "primary"
3295
+ },
3296
+ {
3297
+ "name": "secondary"
3298
+ }
3299
+ ]
3300
+ }
3301
+ ]
3289
3302
  },
3290
3303
  {
3291
3304
  "name": "nile-table-cell-item",
@@ -3317,6 +3330,11 @@
3317
3330
  "description": "nile-table-row component.\n\nProperties:\n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
3318
3331
  "attributes": []
3319
3332
  },
3333
+ {
3334
+ "name": "nile-table",
3335
+ "description": "Nile table component.\n\nProperties:\n\n * `defaultSlot` {`HTMLSlotElement`} - \n\n * `rows` {`NileTableBody[]`} - \n\n * `primaryRowWidths` {`number[]`} - \n\n * `resizeObserver` - \n\n * `debounceTimeout` - \n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",
3336
+ "attributes": []
3337
+ },
3320
3338
  {
3321
3339
  "name": "nile-tag",
3322
3340
  "description": "Events:\n\n * `nile-remove` {} - Emitted when the remove button is activated.\n\nSlots:\n\n * ` ` {} - The tag's content.\n\nAttributes:\n\n * `variant` {`\"primary\" | \"success\" | \"normal\" | \"warning\" | \"error\" | \"info\"`} - The tag's theme variant.\n\n * `size` {`\"medium\" | \"small\" | \"large\"`} - The tag's size.\n\n * `pill` {`boolean`} - Draws a pill-style tag with rounded edges.\n\n * `removable` {`boolean`} - Makes the tag removable and shows a remove button.\n\nProperties:\n\n * `styles` - \n\n * `variant` {`\"primary\" | \"success\" | \"normal\" | \"warning\" | \"error\" | \"info\"`} - The tag's theme variant.\n\n * `size` {`\"medium\" | \"small\" | \"large\"`} - The tag's size.\n\n * `pill` {`boolean`} - Draws a pill-style tag with rounded edges.\n\n * `removable` {`boolean`} - Makes the tag removable and shows a remove button.\n\n * `BUBBLES` {`boolean`} - \n\n * `COMPOSED` {`boolean`} - \n\n * `CANCELABLE` {`boolean`} - ",