@spw-ds/spw-stencil-library 1.2.4 → 1.2.5
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.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/spw-button.spw-loading.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-button_2.cjs.entry.js +1 -1
- package/dist/cjs/spw-button_2.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-custom-select.cjs.entry.js +43 -7
- package/dist/cjs/spw-custom-select.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-custom-select.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-date-picker.cjs.entry.js +48 -28
- package/dist/cjs/spw-date-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-date-picker.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-field-label_6.cjs.entry.js +1 -1
- package/dist/cjs/spw-field-label_6.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-pagination.cjs.entry.js +26 -16
- package/dist/cjs/spw-pagination.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-pagination.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-search-field.cjs.entry.js +12 -2
- package/dist/cjs/spw-search-field.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-search-field.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-select.cjs.entry.js +3 -1
- package/dist/cjs/spw-select.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-select.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-stencil-library.cjs.js +1 -1
- package/dist/cjs/spw-table-cell.cjs.entry.js +23 -2
- package/dist/cjs/spw-table-cell.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-table-cell.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-table-footer.cjs.entry.js +1 -1
- package/dist/cjs/spw-table-footer.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-table-footer.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-table-header.cjs.entry.js +33 -3
- package/dist/cjs/spw-table-header.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-table-header.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-table-row.cjs.entry.js +34 -2
- package/dist/cjs/spw-table-row.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-table-row.entry.cjs.js.map +1 -1
- package/dist/cjs/spw-table.cjs.entry.js +26 -3
- package/dist/cjs/spw-table.cjs.entry.js.map +1 -1
- package/dist/cjs/spw-table.entry.cjs.js.map +1 -1
- package/dist/cjs/utils-D_vNTY6w.js.map +1 -1
- package/dist/collection/components/spw-button/spw-button.css +1 -1
- package/dist/collection/components/spw-custom-select/spw-custom-select.css +1 -1
- package/dist/collection/components/spw-custom-select/spw-custom-select.js +42 -6
- package/dist/collection/components/spw-custom-select/spw-custom-select.js.map +1 -1
- package/dist/collection/components/spw-date-picker/spw-date-picker.js +48 -28
- package/dist/collection/components/spw-date-picker/spw-date-picker.js.map +1 -1
- package/dist/collection/components/spw-link/spw-link.css +1 -1
- package/dist/collection/components/spw-pagination/spw-pagination.css +1 -1
- package/dist/collection/components/spw-pagination/spw-pagination.js +54 -13
- package/dist/collection/components/spw-pagination/spw-pagination.js.map +1 -1
- package/dist/collection/components/spw-search-field/spw-search-field.js +50 -2
- package/dist/collection/components/spw-search-field/spw-search-field.js.map +1 -1
- package/dist/collection/components/spw-select/spw-select.js +3 -1
- package/dist/collection/components/spw-select/spw-select.js.map +1 -1
- package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.css +1 -1
- package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.js +82 -1
- package/dist/collection/components/spw-table/spw-table-cell/spw-table-cell.js.map +1 -1
- package/dist/collection/components/spw-table/spw-table-footer/spw-table-footer.css +1 -1
- package/dist/collection/components/spw-table/spw-table-header/spw-table-header.css +1 -1
- package/dist/collection/components/spw-table/spw-table-header/spw-table-header.js +92 -2
- package/dist/collection/components/spw-table/spw-table-header/spw-table-header.js.map +1 -1
- package/dist/collection/components/spw-table/spw-table-row/spw-table-row.css +1 -1
- package/dist/collection/components/spw-table/spw-table-row/spw-table-row.js +66 -1
- package/dist/collection/components/spw-table/spw-table-row/spw-table-row.js.map +1 -1
- package/dist/collection/components/spw-table/spw-table.js +27 -2
- package/dist/collection/components/spw-table/spw-table.js.map +1 -1
- package/dist/collection/stories/organisms/spw-footer/spw-footer.stories.js +1 -1
- package/dist/collection/stories/organisms/spw-footer/spw-footer.stories.js.map +1 -1
- package/dist/collection/utils/utils.js +47 -48
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/{p-du-Bai6S.js → p-B2toBmC2.js} +32 -21
- package/dist/components/p-B2toBmC2.js.map +1 -0
- package/dist/components/p-BBi01mKM.js.map +1 -1
- package/dist/components/{p-AjhBdYbk.js → p-DjyPtAVX.js} +3 -3
- package/dist/components/p-DjyPtAVX.js.map +1 -0
- package/dist/components/{p-CNNUoO2J.js → p-qROlK2WR.js} +3 -3
- package/dist/components/p-qROlK2WR.js.map +1 -0
- package/dist/components/spw-breadcrumb-item.js +1 -1
- package/dist/components/spw-button.js +1 -1
- package/dist/components/spw-cookies.js +1 -1
- package/dist/components/spw-custom-select.js +43 -7
- package/dist/components/spw-custom-select.js.map +1 -1
- package/dist/components/spw-date-picker.js +48 -28
- package/dist/components/spw-date-picker.js.map +1 -1
- package/dist/components/spw-file-upload.js +1 -1
- package/dist/components/spw-header-lang.js +1 -1
- package/dist/components/spw-header.js +1 -1
- package/dist/components/spw-iodda.js +1 -1
- package/dist/components/spw-link.js +1 -1
- package/dist/components/spw-message.js +1 -1
- package/dist/components/spw-pagination.js +1 -1
- package/dist/components/spw-search-field.js +15 -4
- package/dist/components/spw-search-field.js.map +1 -1
- package/dist/components/spw-select.js +3 -1
- package/dist/components/spw-select.js.map +1 -1
- package/dist/components/spw-table-cell.js +26 -2
- package/dist/components/spw-table-cell.js.map +1 -1
- package/dist/components/spw-table-footer.js +1 -1
- package/dist/components/spw-table-footer.js.map +1 -1
- package/dist/components/spw-table-header.js +37 -4
- package/dist/components/spw-table-header.js.map +1 -1
- package/dist/components/spw-table-row.js +39 -3
- package/dist/components/spw-table-row.js.map +1 -1
- package/dist/components/spw-table.js +28 -4
- package/dist/components/spw-table.js.map +1 -1
- package/dist/components_json.json +268 -12
- package/dist/components_vscode.json +3088 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/spw-button.spw-loading.entry.js.map +1 -1
- package/dist/esm/spw-button_2.entry.js +1 -1
- package/dist/esm/spw-button_2.entry.js.map +1 -1
- package/dist/esm/spw-custom-select.entry.js +43 -7
- package/dist/esm/spw-custom-select.entry.js.map +1 -1
- package/dist/esm/spw-date-picker.entry.js +48 -28
- package/dist/esm/spw-date-picker.entry.js.map +1 -1
- package/dist/esm/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.js.map +1 -1
- package/dist/esm/spw-field-label_6.entry.js +1 -1
- package/dist/esm/spw-field-label_6.entry.js.map +1 -1
- package/dist/esm/spw-pagination.entry.js +26 -16
- package/dist/esm/spw-pagination.entry.js.map +1 -1
- package/dist/esm/spw-search-field.entry.js +13 -3
- package/dist/esm/spw-search-field.entry.js.map +1 -1
- package/dist/esm/spw-select.entry.js +3 -1
- package/dist/esm/spw-select.entry.js.map +1 -1
- package/dist/esm/spw-stencil-library.js +1 -1
- package/dist/esm/spw-table-cell.entry.js +23 -2
- package/dist/esm/spw-table-cell.entry.js.map +1 -1
- package/dist/esm/spw-table-footer.entry.js +1 -1
- package/dist/esm/spw-table-footer.entry.js.map +1 -1
- package/dist/esm/spw-table-header.entry.js +33 -3
- package/dist/esm/spw-table-header.entry.js.map +1 -1
- package/dist/esm/spw-table-row.entry.js +35 -3
- package/dist/esm/spw-table-row.entry.js.map +1 -1
- package/dist/esm/spw-table.entry.js +26 -3
- package/dist/esm/spw-table.entry.js.map +1 -1
- package/dist/esm/utils-BBi01mKM.js.map +1 -1
- package/dist/spw-stencil-library/p-0f69442e.entry.js +2 -0
- package/dist/spw-stencil-library/p-0f69442e.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-14722019.entry.js +2 -0
- package/dist/spw-stencil-library/p-14722019.entry.js.map +1 -0
- package/dist/spw-stencil-library/{p-b1de48f3.entry.js → p-152525de.entry.js} +2 -2
- package/dist/spw-stencil-library/p-152525de.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-2ad00dfc.entry.js +2 -0
- package/dist/spw-stencil-library/p-2ad00dfc.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-4a273848.entry.js +2 -0
- package/dist/spw-stencil-library/p-4a273848.entry.js.map +1 -0
- package/dist/spw-stencil-library/{p-31793077.entry.js → p-5632f307.entry.js} +2 -2
- package/dist/spw-stencil-library/p-5632f307.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-5e43e2ed.entry.js +2 -0
- package/dist/spw-stencil-library/p-5e43e2ed.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-92583499.entry.js +2 -0
- package/dist/spw-stencil-library/p-92583499.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-9d760073.entry.js +2 -0
- package/dist/spw-stencil-library/p-9d760073.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-9e8a779e.entry.js +2 -0
- package/dist/spw-stencil-library/p-9e8a779e.entry.js.map +1 -0
- package/dist/spw-stencil-library/p-BBi01mKM.js.map +1 -1
- package/dist/spw-stencil-library/p-c4e4cfd4.entry.js +2 -0
- package/dist/spw-stencil-library/p-c4e4cfd4.entry.js.map +1 -0
- package/dist/spw-stencil-library/{p-f7760a47.entry.js → p-fcc5884a.entry.js} +2 -2
- package/dist/spw-stencil-library/p-fcc5884a.entry.js.map +1 -0
- package/dist/spw-stencil-library/spw-button.spw-loading.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-custom-select.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-date-picker.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-field-label.spw-group.spw-icon.spw-link.spw-separator.spw-theme-provider.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-pagination.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-search-field.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-select.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-stencil-library.esm.js +1 -1
- package/dist/spw-stencil-library/spw-table-cell.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-table-footer.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-table-header.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-table-row.entry.esm.js.map +1 -1
- package/dist/spw-stencil-library/spw-table.entry.esm.js.map +1 -1
- package/dist/stats.json +611 -150
- package/dist/types/components/spw-custom-select/spw-custom-select.d.ts +3 -0
- package/dist/types/components/spw-date-picker/spw-date-picker.d.ts +1 -0
- package/dist/types/components/spw-pagination/spw-pagination.d.ts +4 -1
- package/dist/types/components/spw-search-field/spw-search-field.d.ts +5 -0
- package/dist/types/components/spw-select/spw-select.d.ts +1 -0
- package/dist/types/components/spw-table/spw-table-cell/spw-table-cell.d.ts +6 -0
- package/dist/types/components/spw-table/spw-table-header/spw-table-header.d.ts +6 -0
- package/dist/types/components/spw-table/spw-table-row/spw-table-row.d.ts +8 -0
- package/dist/types/components/spw-table/spw-table.d.ts +2 -0
- package/dist/types/components.d.ts +83 -0
- package/dist/types/utils/utils.d.ts +2 -1
- package/hydrate/index.js +265 -72
- package/hydrate/index.mjs +265 -72
- package/package.json +1 -1
- package/dist/components/p-AjhBdYbk.js.map +0 -1
- package/dist/components/p-CNNUoO2J.js.map +0 -1
- package/dist/components/p-du-Bai6S.js.map +0 -1
- package/dist/spw-stencil-library/p-22f972ca.entry.js +0 -2
- package/dist/spw-stencil-library/p-22f972ca.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-2c28684f.entry.js +0 -2
- package/dist/spw-stencil-library/p-2c28684f.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-31793077.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-4c21a696.entry.js +0 -2
- package/dist/spw-stencil-library/p-4c21a696.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-572188ac.entry.js +0 -2
- package/dist/spw-stencil-library/p-572188ac.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-823b60ae.entry.js +0 -2
- package/dist/spw-stencil-library/p-823b60ae.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-b1de48f3.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-d115a739.entry.js +0 -2
- package/dist/spw-stencil-library/p-d115a739.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-d2258e0a.entry.js +0 -2
- package/dist/spw-stencil-library/p-d2258e0a.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-ecec4588.entry.js +0 -2
- package/dist/spw-stencil-library/p-ecec4588.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-f5caed11.entry.js +0 -2
- package/dist/spw-stencil-library/p-f5caed11.entry.js.map +0 -1
- package/dist/spw-stencil-library/p-f7760a47.entry.js.map +0 -1
|
@@ -38,6 +38,13 @@ export class SpwSearchField {
|
|
|
38
38
|
disconnectedCallback() {
|
|
39
39
|
document.removeEventListener('click', this.handleClickOutside);
|
|
40
40
|
}
|
|
41
|
+
/** Réinitialise le champ de recherche */
|
|
42
|
+
async resetInput() {
|
|
43
|
+
this.searchText = '';
|
|
44
|
+
this.isOpen = false;
|
|
45
|
+
this.focusedItemIndex = null;
|
|
46
|
+
this.valueChanged.emit(this.searchText);
|
|
47
|
+
}
|
|
41
48
|
parseItems(newValue) {
|
|
42
49
|
if (!newValue) {
|
|
43
50
|
this.filteredItems = [];
|
|
@@ -57,6 +64,7 @@ export class SpwSearchField {
|
|
|
57
64
|
this.filterItems();
|
|
58
65
|
this.determineDropdownDirection();
|
|
59
66
|
this.isOpen = true;
|
|
67
|
+
this.valueChanged.emit(this.searchText);
|
|
60
68
|
}
|
|
61
69
|
filterItems() {
|
|
62
70
|
if (!this.items) {
|
|
@@ -75,6 +83,7 @@ export class SpwSearchField {
|
|
|
75
83
|
selectItem(item) {
|
|
76
84
|
this.searchText = item.label;
|
|
77
85
|
this.isOpen = false;
|
|
86
|
+
this.valueChanged.emit(this.searchText);
|
|
78
87
|
if (item.url) {
|
|
79
88
|
window.location.href = item.url;
|
|
80
89
|
}
|
|
@@ -132,10 +141,10 @@ export class SpwSearchField {
|
|
|
132
141
|
};
|
|
133
142
|
}
|
|
134
143
|
render() {
|
|
135
|
-
return (h("div", { key: '
|
|
144
|
+
return (h("div", { key: '177ea345dde83be8b00034dabd261cd4ae921b53', ref: el => (this.hostElement = el), class: this.elementClass }, h("spw-text-field", { key: 'ff33047f1a04a89e239ab0bd3a8af4337c8f235b', placeholder: this.placeholder, name: this.name, label: this.label, size: this.size, "is-search": true, "is-clear": true, required: this.required, disabled: this.disabled, assistiveText: this.assistiveText, value: this.searchText, onInput: event => this.handleSearchInput(event), onKeyDown: event => this.handleKeyDown(event) }), this.isOpen && !!this.items && (h("div", { key: '11c758b336d8590e082eaa7773fa6cd45709074d', class: `spw-search-field__options spw-search-field__options--${this.dropdownDirection}` }, !!this.filteredItems.length && (h("ul", { key: '745a24351b6818bedd402ecd19c5ad06d7eab8d9' }, this.filteredItems.map((item, index) => (h("li", { class: {
|
|
136
145
|
'spw-search-field__option': true,
|
|
137
146
|
'spw-search-field__option--focused': index === this.focusedItemIndex,
|
|
138
|
-
}, onClick: () => this.selectItem(item) }, this.highlightMatch(item.label), " ", item.category && h("span", { class: "spw-tw-italic" }, " - ", item.category)))))), !this.filteredItems.length && h("p", { key: '
|
|
147
|
+
}, onClick: () => this.selectItem(item) }, this.highlightMatch(item.label), " ", item.category && h("span", { class: "spw-tw-italic" }, " - ", item.category)))))), !this.filteredItems.length && h("p", { key: '53f82d90522e707aef8f3a4de87875d44ad1fbea', class: "spw-search-field__no-results" }, "Pas de r\u00E9sultats.")))));
|
|
139
148
|
}
|
|
140
149
|
static get is() { return "spw-search-field"; }
|
|
141
150
|
static get encapsulation() { return "shadow"; }
|
|
@@ -318,6 +327,45 @@ export class SpwSearchField {
|
|
|
318
327
|
"dropdownDirection": {}
|
|
319
328
|
};
|
|
320
329
|
}
|
|
330
|
+
static get events() {
|
|
331
|
+
return [{
|
|
332
|
+
"method": "valueChanged",
|
|
333
|
+
"name": "valueChanged",
|
|
334
|
+
"bubbles": true,
|
|
335
|
+
"cancelable": true,
|
|
336
|
+
"composed": true,
|
|
337
|
+
"docs": {
|
|
338
|
+
"tags": [],
|
|
339
|
+
"text": "\u00C9v\u00E9nement \u00E9mis lorsque la valeur du champ de recherche change"
|
|
340
|
+
},
|
|
341
|
+
"complexType": {
|
|
342
|
+
"original": "string",
|
|
343
|
+
"resolved": "string",
|
|
344
|
+
"references": {}
|
|
345
|
+
}
|
|
346
|
+
}];
|
|
347
|
+
}
|
|
348
|
+
static get methods() {
|
|
349
|
+
return {
|
|
350
|
+
"resetInput": {
|
|
351
|
+
"complexType": {
|
|
352
|
+
"signature": "() => Promise<void>",
|
|
353
|
+
"parameters": [],
|
|
354
|
+
"references": {
|
|
355
|
+
"Promise": {
|
|
356
|
+
"location": "global",
|
|
357
|
+
"id": "global::Promise"
|
|
358
|
+
}
|
|
359
|
+
},
|
|
360
|
+
"return": "Promise<void>"
|
|
361
|
+
},
|
|
362
|
+
"docs": {
|
|
363
|
+
"text": "R\u00E9initialise le champ de recherche",
|
|
364
|
+
"tags": []
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
};
|
|
368
|
+
}
|
|
321
369
|
static get watchers() {
|
|
322
370
|
return [{
|
|
323
371
|
"propName": "items",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spw-search-field.js","sourceRoot":"","sources":["../../../src/components/spw-search-field/spw-search-field.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, State, h, Watch } from '@stencil/core';\n\n@Component({\n tag: 'spw-search-field',\n styleUrl: 'spw-search-field.scss',\n shadow: true,\n})\nexport class SpwSearchField {\n private hostElement: HTMLElement;\n\n /** Liste des éléments à filtrer, passée sous forme de chaîne JSON */\n @Prop() items?: string;\n /** Placeholder à afficher dans le champ de recherche */\n @Prop() placeholder: string = 'Recherche...';\n /** Taille du champ de recherche */\n @Prop() size?: 'large' | 'medium' = 'medium';\n /** Label associé au champ de recherche */\n @Prop() label?: string = '';\n /** Indique si le champ de recherche est désactivé */\n @Prop() disabled?: boolean;\n /** Nom du champ de recherche, utilisé pour les formulaires */\n @Prop() name: string;\n /** Indique si le champ est requis */\n @Prop() required?: boolean = false;\n /** Texte d'assistance affiché sous le champ de recherche */\n @Prop() assistiveText?: string;\n\n @State() filteredItems: Array<{ url?: string; label: string; category?: string }> = [];\n @State() searchText: string = '';\n @State() isOpen: boolean = false;\n @State() focusedItemIndex: number | null = null;\n @State() dropdownDirection: 'up' | 'down' = 'down';\n\n componentWillLoad() {\n if (this.items) {\n this.parseItems(this.items);\n } else {\n this.filteredItems = [];\n }\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n @Watch('items')\n parseItems(newValue: string) {\n if (!newValue) {\n this.filteredItems = [];\n return;\n }\n\n try {\n this.filteredItems = JSON.parse(newValue);\n } catch (e) {\n console.error('Invalid JSON format for items:', newValue);\n this.filteredItems = [];\n }\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n if (this.isOpen) {\n const target = event.composedPath()[0] as Node;\n const isInsideHost = this.hostElement.contains(target);\n\n if (!isInsideHost) {\n this.isOpen = false;\n }\n }\n };\n\n private handleSearchInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.searchText = input.value;\n this.filterItems();\n this.determineDropdownDirection();\n this.isOpen = true;\n }\n\n private filterItems() {\n if (!this.items) {\n this.filteredItems = [];\n return;\n }\n\n const normalizedSearchText = this.normalizeString(this.searchText);\n\n this.filteredItems = JSON.parse(this.items).filter(item => this.normalizeString(item.label).includes(normalizedSearchText));\n }\n\n private normalizeString(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n private selectItem(item: { url?: string; label: string }) {\n this.searchText = item.label;\n this.isOpen = false;\n\n if (item.url) {\n window.location.href = item.url;\n }\n }\n\n private determineDropdownDirection() {\n const rect = this.hostElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n if (rect.bottom + 200 > viewportHeight && rect.top > 200) {\n this.dropdownDirection = 'up';\n } else {\n this.dropdownDirection = 'down';\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedItemIndex = this.focusedItemIndex === null ? 0 : (this.focusedItemIndex + 1) % this.filteredItems.length;\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedItemIndex =\n this.focusedItemIndex === null ? this.filteredItems.length - 1 : (this.focusedItemIndex - 1 + this.filteredItems.length) % this.filteredItems.length;\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen && this.focusedItemIndex !== null) {\n this.selectItem(this.filteredItems[this.focusedItemIndex]);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n private highlightMatch(item: string) {\n const normalizedSearchText = this.normalizeString(this.searchText);\n const normalizedItem = this.normalizeString(item);\n\n const startIndex = normalizedItem.indexOf(normalizedSearchText);\n\n if (startIndex === -1 || !this.searchText) {\n return item;\n }\n\n const endIndex = startIndex + normalizedSearchText.length;\n\n return (\n <span>\n {item.slice(0, startIndex)}\n <strong>{item.slice(startIndex, endIndex)}</strong>\n {item.slice(endIndex)}\n </span>\n );\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-search-field': true,\n [`spw-search-field--${this.size}`]: true,\n };\n }\n\n render() {\n return (\n <div ref={el => (this.hostElement = el as HTMLElement)} class={this.elementClass}>\n <spw-text-field\n placeholder={this.placeholder}\n name={this.name}\n label={this.label}\n size={this.size}\n is-search={true}\n is-clear={true}\n required={this.required}\n disabled={this.disabled}\n assistiveText={this.assistiveText}\n value={this.searchText}\n onInput={event => this.handleSearchInput(event)}\n onKeyDown={event => this.handleKeyDown(event)}\n ></spw-text-field>\n {this.isOpen && !!this.items && (\n <div class={`spw-search-field__options spw-search-field__options--${this.dropdownDirection}`}>\n {!!this.filteredItems.length && (\n <ul>\n {this.filteredItems.map((item, index) => (\n <li\n class={{\n 'spw-search-field__option': true,\n 'spw-search-field__option--focused': index === this.focusedItemIndex,\n }}\n onClick={() => this.selectItem(item)}\n >\n {this.highlightMatch(item.label)} {item.category && <span class=\"spw-tw-italic\"> - {item.category}</span>}\n </li>\n ))}\n </ul>\n )}\n {!this.filteredItems.length && <p class=\"spw-search-field__no-results\">Pas de résultats.</p>}\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"spw-search-field.js","sourceRoot":"","sources":["../../../src/components/spw-search-field/spw-search-field.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Prop, State, Event, EventEmitter, Method, h, Watch } from '@stencil/core';\n\n@Component({\n tag: 'spw-search-field',\n styleUrl: 'spw-search-field.scss',\n shadow: true,\n})\nexport class SpwSearchField {\n private hostElement: HTMLElement;\n\n /** Événement émis lorsque la valeur du champ de recherche change */\n @Event() valueChanged: EventEmitter<string>;\n\n /** Liste des éléments à filtrer, passée sous forme de chaîne JSON */\n @Prop() items?: string;\n /** Placeholder à afficher dans le champ de recherche */\n @Prop() placeholder: string = 'Recherche...';\n /** Taille du champ de recherche */\n @Prop() size?: 'large' | 'medium' = 'medium';\n /** Label associé au champ de recherche */\n @Prop() label?: string = '';\n /** Indique si le champ de recherche est désactivé */\n @Prop() disabled?: boolean;\n /** Nom du champ de recherche, utilisé pour les formulaires */\n @Prop() name: string;\n /** Indique si le champ est requis */\n @Prop() required?: boolean = false;\n /** Texte d'assistance affiché sous le champ de recherche */\n @Prop() assistiveText?: string;\n\n @State() filteredItems: Array<{ url?: string; label: string; category?: string }> = [];\n @State() searchText: string = '';\n @State() isOpen: boolean = false;\n @State() focusedItemIndex: number | null = null;\n @State() dropdownDirection: 'up' | 'down' = 'down';\n\n componentWillLoad() {\n if (this.items) {\n this.parseItems(this.items);\n } else {\n this.filteredItems = [];\n }\n }\n\n componentDidLoad() {\n document.addEventListener('click', this.handleClickOutside);\n }\n\n disconnectedCallback() {\n document.removeEventListener('click', this.handleClickOutside);\n }\n\n /** Réinitialise le champ de recherche */\n @Method()\n async resetInput() {\n this.searchText = '';\n this.isOpen = false;\n this.focusedItemIndex = null;\n this.valueChanged.emit(this.searchText);\n }\n\n @Watch('items')\n parseItems(newValue: string) {\n if (!newValue) {\n this.filteredItems = [];\n return;\n }\n\n try {\n this.filteredItems = JSON.parse(newValue);\n } catch (e) {\n console.error('Invalid JSON format for items:', newValue);\n this.filteredItems = [];\n }\n }\n\n private handleClickOutside = (event: MouseEvent) => {\n if (this.isOpen) {\n const target = event.composedPath()[0] as Node;\n const isInsideHost = this.hostElement.contains(target);\n\n if (!isInsideHost) {\n this.isOpen = false;\n }\n }\n };\n\n private handleSearchInput(event: Event) {\n const input = event.target as HTMLInputElement;\n this.searchText = input.value;\n this.filterItems();\n this.determineDropdownDirection();\n this.isOpen = true;\n this.valueChanged.emit(this.searchText);\n }\n\n private filterItems() {\n if (!this.items) {\n this.filteredItems = [];\n return;\n }\n\n const normalizedSearchText = this.normalizeString(this.searchText);\n\n this.filteredItems = JSON.parse(this.items).filter(item => this.normalizeString(item.label).includes(normalizedSearchText));\n }\n\n private normalizeString(str: string): string {\n return str\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .toLowerCase();\n }\n\n private selectItem(item: { url?: string; label: string }) {\n this.searchText = item.label;\n this.isOpen = false;\n this.valueChanged.emit(this.searchText);\n\n if (item.url) {\n window.location.href = item.url;\n }\n }\n\n private determineDropdownDirection() {\n const rect = this.hostElement.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n\n if (rect.bottom + 200 > viewportHeight && rect.top > 200) {\n this.dropdownDirection = 'up';\n } else {\n this.dropdownDirection = 'down';\n }\n }\n\n private handleKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedItemIndex = this.focusedItemIndex === null ? 0 : (this.focusedItemIndex + 1) % this.filteredItems.length;\n }\n break;\n case 'ArrowUp':\n event.preventDefault();\n if (this.isOpen) {\n this.focusedItemIndex =\n this.focusedItemIndex === null ? this.filteredItems.length - 1 : (this.focusedItemIndex - 1 + this.filteredItems.length) % this.filteredItems.length;\n }\n break;\n case 'Enter':\n event.preventDefault();\n if (this.isOpen && this.focusedItemIndex !== null) {\n this.selectItem(this.filteredItems[this.focusedItemIndex]);\n }\n break;\n case 'Escape':\n this.isOpen = false;\n break;\n }\n }\n\n private highlightMatch(item: string) {\n const normalizedSearchText = this.normalizeString(this.searchText);\n const normalizedItem = this.normalizeString(item);\n\n const startIndex = normalizedItem.indexOf(normalizedSearchText);\n\n if (startIndex === -1 || !this.searchText) {\n return item;\n }\n\n const endIndex = startIndex + normalizedSearchText.length;\n\n return (\n <span>\n {item.slice(0, startIndex)}\n <strong>{item.slice(startIndex, endIndex)}</strong>\n {item.slice(endIndex)}\n </span>\n );\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-search-field': true,\n [`spw-search-field--${this.size}`]: true,\n };\n }\n\n render() {\n return (\n <div ref={el => (this.hostElement = el as HTMLElement)} class={this.elementClass}>\n <spw-text-field\n placeholder={this.placeholder}\n name={this.name}\n label={this.label}\n size={this.size}\n is-search={true}\n is-clear={true}\n required={this.required}\n disabled={this.disabled}\n assistiveText={this.assistiveText}\n value={this.searchText}\n onInput={event => this.handleSearchInput(event)}\n onKeyDown={event => this.handleKeyDown(event)}\n ></spw-text-field>\n {this.isOpen && !!this.items && (\n <div class={`spw-search-field__options spw-search-field__options--${this.dropdownDirection}`}>\n {!!this.filteredItems.length && (\n <ul>\n {this.filteredItems.map((item, index) => (\n <li\n class={{\n 'spw-search-field__option': true,\n 'spw-search-field__option--focused': index === this.focusedItemIndex,\n }}\n onClick={() => this.selectItem(item)}\n >\n {this.highlightMatch(item.label)} {item.category && <span class=\"spw-tw-italic\"> - {item.category}</span>}\n </li>\n ))}\n </ul>\n )}\n {!this.filteredItems.length && <p class=\"spw-search-field__no-results\">Pas de résultats.</p>}\n </div>\n )}\n </div>\n );\n }\n}\n"]}
|
|
@@ -111,8 +111,10 @@ export class SpwSelect {
|
|
|
111
111
|
const option = document.createElement('option');
|
|
112
112
|
const value = this.itemValue ? item[this.itemValue] : item;
|
|
113
113
|
const label = this.itemLabel ? item[this.itemLabel] : item;
|
|
114
|
+
const disabled = item.disabled || false;
|
|
114
115
|
option.value = String(value);
|
|
115
116
|
option.textContent = String(label);
|
|
117
|
+
option.disabled = disabled;
|
|
116
118
|
this.selectElement.appendChild(option);
|
|
117
119
|
});
|
|
118
120
|
}
|
|
@@ -149,7 +151,7 @@ export class SpwSelect {
|
|
|
149
151
|
};
|
|
150
152
|
}
|
|
151
153
|
render() {
|
|
152
|
-
return (h(Host, { key: '
|
|
154
|
+
return (h(Host, { key: 'deb7266660e609a3e44623613a990bf8dcbe7343' }, h("div", { key: 'ff425d15ea0fd790039e72674d7657324b3c62cb', class: this.elementClass }, this.label && h("spw-field-label", { key: '71f35858b08561f526d52498aa04da0b7dd46c57', label: this.label, name: this.name, required: this.required }), this.assistiveText && (h("spw-field-message", { key: '1e0b80d55ae61be1d161fc4dcad2e5abb0d3b351', class: "spw-tw-mb-2 -spw-tw-mt-1", variant: "hint", showIcon: false }, this.assistiveText)), h("div", { key: '3af822dbdc83f589aad041fd6fd0cb7cd43be639', class: "spw-select__container" }, h("select", { key: '727b2f5f46ac0610f91da0eeb13530ec99dc98a3', id: this.name, class: "spw-select__trigger", onChange: event => this.handleSelectChange(event), disabled: this.disabled, ref: el => (this.selectElement = el), tabindex: this.disabled ? -1 : 0 }, h("option", { key: '54fdb7a9268d4e796cc2cf6e70642719668ac3a7', value: "", disabled: true, selected: !this.internalValue }, this.placeholder)), h("spw-icon", { key: '345e115df06ae4373a0d910947997d4f2f7cd2d4', class: "spw-select__arrow", icon: "fa-chevron-down" })), !this.items && h("slot", { key: 'ca10c23f8e7e9b7422d479b5b648f661c6d431a0' })), this.renderErrorMessage(), this.renderHintMessage(), this.renderSuccessMessage(), this.renderWarningMessage()));
|
|
153
155
|
}
|
|
154
156
|
static get is() { return "spw-select"; }
|
|
155
157
|
static get encapsulation() { return "shadow"; }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spw-select.js","sourceRoot":"","sources":["../../../src/components/spw-select/spw-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AttachInternals, Host, Component, Method, Prop, State, Event, EventEmitter, h, Element, Watch } from '@stencil/core';\n\nexport interface SelectItem {\n label: string;\n value: string | number;\n}\n\n@Component({\n tag: 'spw-select',\n styleUrl: 'spw-select.scss',\n formAssociated: true,\n shadow: true,\n})\nexport class SpwSelect {\n @Element() el: HTMLSpwSelectElement;\n\n /** Emet un event si la valeur change */\n @Event() valueChanged: EventEmitter<string | number>;\n @State() internalValue: string | number;\n\n /** Valeur sélectionnée actuelle, mutable et reflétée dans le DOM */\n @Prop({ mutable: true, reflect: true }) value: string | number;\n /** Label associé au champ de sélection */\n @Prop() label: string = '';\n /** Texte du placeholder à afficher lorsque rien n'est sélectionné */\n @Prop() placeholder: string = 'Sélectionner une option';\n /** Indique si le champ de sélection est désactivé */\n @Prop() disabled: boolean;\n /** Nom de l'élément utilisé dans les formulaires pour associer la valeur sélectionnée */\n @Prop() name: string;\n /** Indique si la sélection est obligatoire dans le formulaire */\n @Prop() required: boolean = false;\n /** Taille du champ de sélection : 'large' ou 'medium' */\n @Prop() size: 'large' | 'medium' = 'medium';\n /** Texte d'assistance affiché sous le champ de sélection */\n @Prop() assistiveText?: string;\n /** Message d'erreur à afficher sous le champ de sélection */\n @Prop() error?: string = '';\n /** Message d'indication (hint) à afficher sous le champ de sélection */\n @Prop() hint?: string = '';\n /** Message de succès à afficher sous le champ de sélection */\n @Prop() success?: string = '';\n /** Message de warning à afficher sous le champ */\n @Prop() warning?: string = '';\n /** Affiche une icône d'erreur si vrai */\n @Prop() showErrorIcon?: boolean = true;\n /** Affiche une icône d'indication si vrai */\n @Prop() showHintIcon?: boolean = true;\n /** Affiche une icône de succès si vrai */\n @Prop() showSuccessIcon?: boolean = true;\n /** Affiche une icône de warning si vrai */\n @Prop() showWarningIcon?: boolean = true;\n /** Liste d'items dynamiques pour générer les options (array d'objects avec label + value) */\n @Prop() items?: SelectItem[];\n /** Propriété à utiliser comme label des options */\n @Prop() itemLabel?: string;\n /** Propriété à utiliser comme valeur des options */\n @Prop() itemValue?: string;\n\n private selectElement!: HTMLSelectElement;\n private defaultValue: string | number | null = null;\n\n @AttachInternals() internals: ElementInternals;\n\n @Watch('items')\n handleItemsChange() {\n if (this.selectElement) {\n this.syncDynamicOptions();\n }\n }\n\n @Method()\n async resetSelect() {\n this.internalValue = '';\n this.value = '';\n if (this.selectElement) {\n this.selectElement.value = '';\n }\n this.internals.setFormValue('');\n this.valueChanged.emit('');\n }\n\n componentWillLoad() {\n this.defaultValue = this.value ?? this.getInitialSelectedValue();\n this.internalValue = this.value || this.getInitialSelectedValue();\n }\n\n componentDidLoad() {\n this.internals.setFormValue(this.getFormValue());\n if (!this.items) {\n this.moveOptionsToLightDom();\n } else {\n this.syncDynamicOptions();\n }\n }\n\n formResetCallback() {\n this.setValue(this.defaultValue ?? '');\n this.resetSelect();\n }\n\n private setValue(val: string | number) {\n this.internalValue = val;\n this.value = val;\n\n if (this.selectElement) {\n this.selectElement.value = String(val);\n }\n\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private getFormValue(): string | null {\n return this.internalValue ? String(this.internalValue) : null;\n }\n\n private getInitialSelectedValue(): string | number | null {\n if (this.items && this.items.length > 0) {\n return null;\n }\n const assignedNodes = Array.from(this.el.querySelectorAll('option')) as HTMLOptionElement[];\n for (const option of assignedNodes) {\n if (option.hasAttribute('selected')) {\n return option.getAttribute('value');\n }\n }\n return null;\n }\n\n private handleSelectChange(event: Event) {\n const select = event.target as HTMLSelectElement;\n this.internalValue = select.value;\n this.value = this.internalValue;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private moveOptionsToLightDom() {\n const slot = this.el.shadowRoot.querySelector('slot');\n if (slot) {\n const assignedNodes = slot.assignedNodes({ flatten: true }) as HTMLElement[];\n assignedNodes.forEach(node => {\n if (node.nodeName === 'OPTION' || node.nodeName === 'OPTGROUP') {\n this.selectElement.appendChild(node);\n }\n });\n }\n }\n\n private syncDynamicOptions() {\n while (this.selectElement.options.length > 1) {\n this.selectElement.remove(1);\n }\n\n if (this.items && this.items.length > 0) {\n this.items.forEach(item => {\n const option = document.createElement('option');\n const value = this.itemValue ? item[this.itemValue] : item;\n const label = this.itemLabel ? item[this.itemLabel] : item;\n option.value = String(value);\n option.textContent = String(label);\n this.selectElement.appendChild(option);\n });\n }\n\n if (this.selectElement.value !== String(this.internalValue || '')) {\n this.selectElement.value = String(this.internalValue || '');\n }\n }\n\n private renderErrorMessage() {\n if (this.error) {\n return (\n <spw-field-message variant=\"error\" showIcon={this.showErrorIcon}>\n {this.error}\n </spw-field-message>\n );\n }\n }\n\n private renderHintMessage() {\n if (this.hint) {\n return (\n <spw-field-message variant=\"hint\" showIcon={this.showHintIcon}>\n {this.hint}\n </spw-field-message>\n );\n }\n }\n\n private renderSuccessMessage() {\n if (this.success) {\n return (\n <spw-field-message variant=\"success\" showIcon={this.showSuccessIcon}>\n {this.success}\n </spw-field-message>\n );\n }\n }\n\n private renderWarningMessage() {\n if (this.warning) {\n return (\n <spw-field-message variant=\"warning\" showIcon={this.showWarningIcon}>\n {this.warning}\n </spw-field-message>\n );\n }\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-select': true,\n [`spw-select--${this.size}`]: true,\n 'spw-select--disabled': this.disabled,\n 'spw-select--is-error': !!this.error,\n };\n }\n\n render() {\n return (\n <Host>\n <div class={this.elementClass}>\n {this.label && <spw-field-label label={this.label} name={this.name} required={this.required}></spw-field-label>}\n {this.assistiveText && (\n <spw-field-message class=\"spw-tw-mb-2 -spw-tw-mt-1\" variant=\"hint\" showIcon={false}>\n {this.assistiveText}\n </spw-field-message>\n )}\n <div class=\"spw-select__container\">\n <select\n id={this.name}\n class=\"spw-select__trigger\"\n onChange={event => this.handleSelectChange(event)}\n disabled={this.disabled}\n ref={el => (this.selectElement = el as HTMLSelectElement)}\n tabindex={this.disabled ? -1 : 0}\n >\n <option value=\"\" disabled selected={!this.internalValue}>\n {this.placeholder}\n </option>\n </select>\n <spw-icon class=\"spw-select__arrow\" icon=\"fa-chevron-down\"></spw-icon>\n </div>\n {!this.items && <slot />}\n </div>\n {this.renderErrorMessage()}\n {this.renderHintMessage()}\n {this.renderSuccessMessage()}\n {this.renderWarningMessage()}\n </Host>\n );\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"spw-select.js","sourceRoot":"","sources":["../../../src/components/spw-select/spw-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { AttachInternals, Host, Component, Method, Prop, State, Event, EventEmitter, h, Element, Watch } from '@stencil/core';\n\nexport interface SelectItem {\n label: string;\n value: string | number;\n disabled?: boolean;\n}\n\n@Component({\n tag: 'spw-select',\n styleUrl: 'spw-select.scss',\n formAssociated: true,\n shadow: true,\n})\nexport class SpwSelect {\n @Element() el: HTMLSpwSelectElement;\n\n /** Emet un event si la valeur change */\n @Event() valueChanged: EventEmitter<string | number>;\n @State() internalValue: string | number;\n\n /** Valeur sélectionnée actuelle, mutable et reflétée dans le DOM */\n @Prop({ mutable: true, reflect: true }) value: string | number;\n /** Label associé au champ de sélection */\n @Prop() label: string = '';\n /** Texte du placeholder à afficher lorsque rien n'est sélectionné */\n @Prop() placeholder: string = 'Sélectionner une option';\n /** Indique si le champ de sélection est désactivé */\n @Prop() disabled: boolean;\n /** Nom de l'élément utilisé dans les formulaires pour associer la valeur sélectionnée */\n @Prop() name: string;\n /** Indique si la sélection est obligatoire dans le formulaire */\n @Prop() required: boolean = false;\n /** Taille du champ de sélection : 'large' ou 'medium' */\n @Prop() size: 'large' | 'medium' = 'medium';\n /** Texte d'assistance affiché sous le champ de sélection */\n @Prop() assistiveText?: string;\n /** Message d'erreur à afficher sous le champ de sélection */\n @Prop() error?: string = '';\n /** Message d'indication (hint) à afficher sous le champ de sélection */\n @Prop() hint?: string = '';\n /** Message de succès à afficher sous le champ de sélection */\n @Prop() success?: string = '';\n /** Message de warning à afficher sous le champ */\n @Prop() warning?: string = '';\n /** Affiche une icône d'erreur si vrai */\n @Prop() showErrorIcon?: boolean = true;\n /** Affiche une icône d'indication si vrai */\n @Prop() showHintIcon?: boolean = true;\n /** Affiche une icône de succès si vrai */\n @Prop() showSuccessIcon?: boolean = true;\n /** Affiche une icône de warning si vrai */\n @Prop() showWarningIcon?: boolean = true;\n /** Liste d'items dynamiques pour générer les options (array d'objects avec label + value) */\n @Prop() items?: SelectItem[];\n /** Propriété à utiliser comme label des options */\n @Prop() itemLabel?: string;\n /** Propriété à utiliser comme valeur des options */\n @Prop() itemValue?: string;\n\n private selectElement!: HTMLSelectElement;\n private defaultValue: string | number | null = null;\n\n @AttachInternals() internals: ElementInternals;\n\n @Watch('items')\n handleItemsChange() {\n if (this.selectElement) {\n this.syncDynamicOptions();\n }\n }\n\n @Method()\n async resetSelect() {\n this.internalValue = '';\n this.value = '';\n if (this.selectElement) {\n this.selectElement.value = '';\n }\n this.internals.setFormValue('');\n this.valueChanged.emit('');\n }\n\n componentWillLoad() {\n this.defaultValue = this.value ?? this.getInitialSelectedValue();\n this.internalValue = this.value || this.getInitialSelectedValue();\n }\n\n componentDidLoad() {\n this.internals.setFormValue(this.getFormValue());\n if (!this.items) {\n this.moveOptionsToLightDom();\n } else {\n this.syncDynamicOptions();\n }\n }\n\n formResetCallback() {\n this.setValue(this.defaultValue ?? '');\n this.resetSelect();\n }\n\n private setValue(val: string | number) {\n this.internalValue = val;\n this.value = val;\n\n if (this.selectElement) {\n this.selectElement.value = String(val);\n }\n\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private getFormValue(): string | null {\n return this.internalValue ? String(this.internalValue) : null;\n }\n\n private getInitialSelectedValue(): string | number | null {\n if (this.items && this.items.length > 0) {\n return null;\n }\n const assignedNodes = Array.from(this.el.querySelectorAll('option')) as HTMLOptionElement[];\n for (const option of assignedNodes) {\n if (option.hasAttribute('selected')) {\n return option.getAttribute('value');\n }\n }\n return null;\n }\n\n private handleSelectChange(event: Event) {\n const select = event.target as HTMLSelectElement;\n this.internalValue = select.value;\n this.value = this.internalValue;\n this.internals.setFormValue(this.getFormValue());\n this.valueChanged.emit(this.internalValue);\n }\n\n private moveOptionsToLightDom() {\n const slot = this.el.shadowRoot.querySelector('slot');\n if (slot) {\n const assignedNodes = slot.assignedNodes({ flatten: true }) as HTMLElement[];\n assignedNodes.forEach(node => {\n if (node.nodeName === 'OPTION' || node.nodeName === 'OPTGROUP') {\n this.selectElement.appendChild(node);\n }\n });\n }\n }\n\n private syncDynamicOptions() {\n while (this.selectElement.options.length > 1) {\n this.selectElement.remove(1);\n }\n\n if (this.items && this.items.length > 0) {\n this.items.forEach(item => {\n const option = document.createElement('option');\n const value = this.itemValue ? item[this.itemValue] : item;\n const label = this.itemLabel ? item[this.itemLabel] : item;\n const disabled = item.disabled || false;\n option.value = String(value);\n option.textContent = String(label);\n option.disabled = disabled;\n this.selectElement.appendChild(option);\n });\n }\n\n if (this.selectElement.value !== String(this.internalValue || '')) {\n this.selectElement.value = String(this.internalValue || '');\n }\n }\n\n private renderErrorMessage() {\n if (this.error) {\n return (\n <spw-field-message variant=\"error\" showIcon={this.showErrorIcon}>\n {this.error}\n </spw-field-message>\n );\n }\n }\n\n private renderHintMessage() {\n if (this.hint) {\n return (\n <spw-field-message variant=\"hint\" showIcon={this.showHintIcon}>\n {this.hint}\n </spw-field-message>\n );\n }\n }\n\n private renderSuccessMessage() {\n if (this.success) {\n return (\n <spw-field-message variant=\"success\" showIcon={this.showSuccessIcon}>\n {this.success}\n </spw-field-message>\n );\n }\n }\n\n private renderWarningMessage() {\n if (this.warning) {\n return (\n <spw-field-message variant=\"warning\" showIcon={this.showWarningIcon}>\n {this.warning}\n </spw-field-message>\n );\n }\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-select': true,\n [`spw-select--${this.size}`]: true,\n 'spw-select--disabled': this.disabled,\n 'spw-select--is-error': !!this.error,\n };\n }\n\n render() {\n return (\n <Host>\n <div class={this.elementClass}>\n {this.label && <spw-field-label label={this.label} name={this.name} required={this.required}></spw-field-label>}\n {this.assistiveText && (\n <spw-field-message class=\"spw-tw-mb-2 -spw-tw-mt-1\" variant=\"hint\" showIcon={false}>\n {this.assistiveText}\n </spw-field-message>\n )}\n <div class=\"spw-select__container\">\n <select\n id={this.name}\n class=\"spw-select__trigger\"\n onChange={event => this.handleSelectChange(event)}\n disabled={this.disabled}\n ref={el => (this.selectElement = el as HTMLSelectElement)}\n tabindex={this.disabled ? -1 : 0}\n >\n <option value=\"\" disabled selected={!this.internalValue}>\n {this.placeholder}\n </option>\n </select>\n <spw-icon class=\"spw-select__arrow\" icon=\"fa-chevron-down\"></spw-icon>\n </div>\n {!this.items && <slot />}\n </div>\n {this.renderErrorMessage()}\n {this.renderHintMessage()}\n {this.renderSuccessMessage()}\n {this.renderWarningMessage()}\n </Host>\n );\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}.spw-table-cell{border:1px solid var(--spw-color-themes-grey-grey-300);border-top:0;color:var(--spw-color-themes-grey-grey-800);font-size:14px;text-align:left}.spw-table-cell--is-highlighted{background:var(--spw-color-themes-grey-grey-100);font-weight:700}.spw-table-cell--text-align-left{text-align:left}.spw-table-cell--text-align-center{text-align:center}.spw-table-cell--text-align-right{text-align:right}.spw-table-cell--vertical-align-top{vertical-align:top}.spw-table-cell--vertical-align-bottom{vertical-align:bottom}.spw-table-cell--vertical-align-middle{vertical-align:middle}.spw-table-cell--padding-small{padding:8px}.spw-table-cell--padding-medium{padding:16px}.spw-table-cell--disabled{cursor:not-allowed;opacity:.3;pointer-events:none}.spw-table-cell--selected{background-color:var(--spw-color-themes-blue-blue-50)}.spw-table-cell--selected.spw-table-cell--first-in-row{box-shadow:inset 3px 0 0 var(--spw-color-themes-blue-blue-500)}.spw-table-cell ::slotted(spw-checkbox){--spw-ds-checkbox-checked-color:#000}
|
|
2
|
+
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}:host(.--selected) .spw-table-cell{background-color:var(--spw-color-themes-blue-blue-50)}:host(.--selected) .spw-table-cell.spw-table-cell--first-in-row{box-shadow:inset 3px 0 0 var(--spw-color-themes-blue-blue-500)}:host(.--disabled) .spw-table-cell,:host(.--disabled) .spw-table-cell--sticky{position:relative}:host(.--disabled) .spw-table-cell--sticky:before,:host(.--disabled) .spw-table-cell:before{background:var(--spw-ds-white);bottom:1px;content:"";cursor:not-allowed;left:0;opacity:.7;position:absolute;right:0;top:0;z-index:8}.spw-table-cell{border:1px solid var(--spw-color-themes-grey-grey-300);border-top:0;color:var(--spw-color-themes-grey-grey-800);font-size:14px;text-align:left}.spw-table-cell--is-highlighted{background:var(--spw-color-themes-grey-grey-100);font-weight:700}.spw-table-cell--text-align-left{text-align:left}.spw-table-cell--text-align-center{text-align:center}.spw-table-cell--text-align-right{text-align:right}.spw-table-cell--vertical-align-top{vertical-align:top}.spw-table-cell--vertical-align-bottom{vertical-align:bottom}.spw-table-cell--vertical-align-middle{vertical-align:middle}.spw-table-cell--padding-small{padding:8px}.spw-table-cell--padding-medium{padding:16px}.spw-table-cell--disabled{cursor:not-allowed;opacity:.3;pointer-events:none}.spw-table-cell--selected{background-color:var(--spw-color-themes-blue-blue-50)}.spw-table-cell--selected.spw-table-cell--first-in-row{box-shadow:inset 3px 0 0 var(--spw-color-themes-blue-blue-500)}.spw-table-cell ::slotted(spw-checkbox){--spw-ds-checkbox-checked-color:#000}.spw-table-cell--sticky{background-color:var(--spw-color-themes-grey-grey-50);position:sticky}.spw-table-cell--sticky:after{bottom:-1px;content:"";pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:8px}.spw-table-cell--sticky-start:after{box-shadow:inset 8px 0 8px -8px rgba(0,0,0,.15);right:-8px}.spw-table-cell--sticky-end:after{box-shadow:inset -8px 0 8px -8px rgba(0,0,0,.15);left:-8px}.spw-table-cell--sticky.spw-table-cell--selected{background-color:var(--spw-color-themes-blue-blue-50)}.spw-table-cell--sticky.spw-table-cell--is-highlighted{background-color:var(--spw-color-themes-grey-grey-100)}:host(.--selected) .spw-table-cell--sticky{background-color:var(--spw-color-themes-blue-blue-50)}
|
|
@@ -13,6 +13,12 @@ export class SpwTableCell {
|
|
|
13
13
|
this.padding = 'medium';
|
|
14
14
|
/** Permet de changer le state du spw-table-cell */
|
|
15
15
|
this.state = 'default';
|
|
16
|
+
/** Rend la cellule sticky lors du défilement (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
17
|
+
this.sticky = false;
|
|
18
|
+
/** Position du sticky : 'start' (left: 0) ou 'end' (right: 0) (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
19
|
+
this.stickyPosition = 'start';
|
|
20
|
+
/** Décalage en pixels pour le sticky (utile pour empiler plusieurs colonnes sticky) (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
21
|
+
this.stickyOffset = 0;
|
|
16
22
|
this.isFirst = false;
|
|
17
23
|
}
|
|
18
24
|
componentDidLoad() {
|
|
@@ -48,6 +54,8 @@ export class SpwTableCell {
|
|
|
48
54
|
[`spw-table-cell--vertical-align-${this.verticalAlign}`]: true,
|
|
49
55
|
[`spw-table-cell--${this.state}`]: true,
|
|
50
56
|
'spw-table-cell--first-in-row': this.isFirst,
|
|
57
|
+
'spw-table-cell--sticky': this.sticky,
|
|
58
|
+
[`spw-table-cell--sticky-${this.stickyPosition}`]: this.sticky,
|
|
51
59
|
};
|
|
52
60
|
}
|
|
53
61
|
render() {
|
|
@@ -62,7 +70,20 @@ export class SpwTableCell {
|
|
|
62
70
|
attrs.rowSpan = this.rowspan;
|
|
63
71
|
if (this.headers !== undefined)
|
|
64
72
|
attrs.headers = this.headers;
|
|
65
|
-
|
|
73
|
+
if (this.sticky) {
|
|
74
|
+
const stickyStyles = {
|
|
75
|
+
position: 'sticky',
|
|
76
|
+
zIndex: '10',
|
|
77
|
+
};
|
|
78
|
+
if (this.stickyPosition === 'start') {
|
|
79
|
+
stickyStyles.left = `${this.stickyOffset}px`;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
stickyStyles.right = `${this.stickyOffset}px`;
|
|
83
|
+
}
|
|
84
|
+
attrs.style = stickyStyles;
|
|
85
|
+
}
|
|
86
|
+
return (h("td", Object.assign({ key: '27bf04742118714d6b54e104929909a392d1995c' }, attrs), h("slot", { key: '8c3ba8fd30c331af629cd030c93047f9931829e3' })));
|
|
66
87
|
}
|
|
67
88
|
static get is() { return "spw-table-cell"; }
|
|
68
89
|
static get encapsulation() { return "shadow"; }
|
|
@@ -269,6 +290,66 @@ export class SpwTableCell {
|
|
|
269
290
|
"attribute": "state",
|
|
270
291
|
"reflect": false,
|
|
271
292
|
"defaultValue": "'default'"
|
|
293
|
+
},
|
|
294
|
+
"sticky": {
|
|
295
|
+
"type": "boolean",
|
|
296
|
+
"mutable": false,
|
|
297
|
+
"complexType": {
|
|
298
|
+
"original": "boolean",
|
|
299
|
+
"resolved": "boolean",
|
|
300
|
+
"references": {}
|
|
301
|
+
},
|
|
302
|
+
"required": false,
|
|
303
|
+
"optional": true,
|
|
304
|
+
"docs": {
|
|
305
|
+
"tags": [],
|
|
306
|
+
"text": "Rend la cellule sticky lors du d\u00E9filement (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
307
|
+
},
|
|
308
|
+
"getter": false,
|
|
309
|
+
"setter": false,
|
|
310
|
+
"attribute": "sticky",
|
|
311
|
+
"reflect": false,
|
|
312
|
+
"defaultValue": "false"
|
|
313
|
+
},
|
|
314
|
+
"stickyPosition": {
|
|
315
|
+
"type": "string",
|
|
316
|
+
"mutable": false,
|
|
317
|
+
"complexType": {
|
|
318
|
+
"original": "'start' | 'end'",
|
|
319
|
+
"resolved": "\"end\" | \"start\"",
|
|
320
|
+
"references": {}
|
|
321
|
+
},
|
|
322
|
+
"required": false,
|
|
323
|
+
"optional": true,
|
|
324
|
+
"docs": {
|
|
325
|
+
"tags": [],
|
|
326
|
+
"text": "Position du sticky : 'start' (left: 0) ou 'end' (right: 0) (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
327
|
+
},
|
|
328
|
+
"getter": false,
|
|
329
|
+
"setter": false,
|
|
330
|
+
"attribute": "sticky-position",
|
|
331
|
+
"reflect": false,
|
|
332
|
+
"defaultValue": "'start'"
|
|
333
|
+
},
|
|
334
|
+
"stickyOffset": {
|
|
335
|
+
"type": "number",
|
|
336
|
+
"mutable": false,
|
|
337
|
+
"complexType": {
|
|
338
|
+
"original": "number",
|
|
339
|
+
"resolved": "number",
|
|
340
|
+
"references": {}
|
|
341
|
+
},
|
|
342
|
+
"required": false,
|
|
343
|
+
"optional": true,
|
|
344
|
+
"docs": {
|
|
345
|
+
"tags": [],
|
|
346
|
+
"text": "D\u00E9calage en pixels pour le sticky (utile pour empiler plusieurs colonnes sticky) (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
347
|
+
},
|
|
348
|
+
"getter": false,
|
|
349
|
+
"setter": false,
|
|
350
|
+
"attribute": "sticky-offset",
|
|
351
|
+
"reflect": false,
|
|
352
|
+
"defaultValue": "0"
|
|
272
353
|
}
|
|
273
354
|
};
|
|
274
355
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spw-table-cell.js","sourceRoot":"","sources":["../../../../src/components/spw-table/spw-table-cell/spw-table-cell.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAOnE,MAAM,OAAO,YAAY;IALzB;QAaE,+GAA+G;QACvG,kBAAa,GAAa,KAAK,CAAC;QACxC,0GAA0G;QAClG,cAAS,GAAiC,MAAM,CAAC;QACzD,0GAA0G;QAClG,kBAAa,GAAiC,QAAQ,CAAC;QAC/D,yEAAyE;QACjE,UAAK,GAAY,MAAM,CAAC;QAChC,8FAA8F;QACtF,YAAO,GAAwB,QAAQ,CAAC;QAChD,oDAAoD;QAC5C,UAAK,GAAyC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"spw-table-cell.js","sourceRoot":"","sources":["../../../../src/components/spw-table/spw-table-cell/spw-table-cell.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, State, Prop, h } from '@stencil/core';\n\n@Component({\n tag: 'spw-table-cell',\n styleUrl: 'spw-table-cell.scss',\n shadow: true,\n})\nexport class SpwTableCell {\n @Element() el: HTMLElement;\n /** Définit un colspan pour la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() colspan?: HTMLTableCellElement['colSpan'];\n /** Définit un header relationnel pour la cellule, à des fins d'accessibilité (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() headers?: HTMLTableCellElement['headers'];\n /** Définit un rowspan pour la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() rowspan?: HTMLTableCellElement['rowSpan'];\n /** Définit un style visuel qui met en avant la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() isHighlighted?: boolean = false;\n /** Définit un alignement de texte pour la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() textAlign?: 'center' | 'left' | 'right' = 'left';\n /** Définit un alignement vertical pour la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() verticalAlign?: 'top' | 'bottom' | 'middle' = 'middle';\n /** Définit une largeur si nécessaire (à appliquer sur spw-table-cell) */\n @Prop() width?: string = 'auto';\n /** Définit le padding pour la cellule (à appliquer sur spw-table-cell ou spw-table-header) */\n @Prop() padding?: 'small' | 'medium' = 'medium';\n /** Permet de changer le state du spw-table-cell */\n @Prop() state?: 'default' | 'selected' | 'disabled' = 'default';\n /** Rend la cellule sticky lors du défilement (à appliquer sur spw-table-header ou spw-table-cell) */\n @Prop() sticky?: boolean = false;\n /** Position du sticky : 'start' (left: 0) ou 'end' (right: 0) (à appliquer sur spw-table-header ou spw-table-cell) */\n @Prop() stickyPosition?: 'start' | 'end' = 'start';\n /** Décalage en pixels pour le sticky (utile pour empiler plusieurs colonnes sticky) (à appliquer sur spw-table-header ou spw-table-cell) */\n @Prop() stickyOffset?: number = 0;\n\n @State() isFirst: boolean = false;\n\n private slotObserver?: MutationObserver;\n\n componentDidLoad() {\n this.checkIfFirst();\n this.observeRowSlot();\n }\n\n disconnectedCallback() {\n this.slotObserver?.disconnect();\n }\n\n private checkIfFirst() {\n const parentRow = this.el.closest('spw-table-row');\n if (!parentRow) {\n this.isFirst = false;\n return;\n }\n const cells = Array.from(parentRow.children).filter(\n (el: Element) => el.tagName === 'SPW-TABLE-CELL' || el.tagName === 'SPW-TABLE-HEADER' || el.tagName === 'TD' || el.tagName === 'TH',\n );\n this.isFirst = cells[0] === this.el;\n }\n\n private observeRowSlot() {\n const parentRow = this.el.closest('spw-table-row');\n if (!parentRow) return;\n this.slotObserver = new MutationObserver(() => this.checkIfFirst());\n this.slotObserver.observe(parentRow, { childList: true, subtree: false });\n }\n\n private get elementClass(): { [className: string]: boolean } {\n return {\n 'spw-table-cell': true,\n 'spw-table-cell--is-highlighted': this.isHighlighted,\n [`spw-table-cell--text-align-${this.textAlign}`]: true,\n [`spw-table-cell--padding-${this.padding}`]: true,\n [`spw-table-cell--vertical-align-${this.verticalAlign}`]: true,\n [`spw-table-cell--${this.state}`]: true,\n 'spw-table-cell--first-in-row': this.isFirst,\n 'spw-table-cell--sticky': this.sticky,\n [`spw-table-cell--sticky-${this.stickyPosition}`]: this.sticky,\n };\n }\n\n render() {\n const attrs: { [key: string]: any } = {\n width: this.width,\n class: this.elementClass,\n part: 'cell',\n };\n\n if (this.colspan !== undefined) attrs.colSpan = this.colspan;\n if (this.rowspan !== undefined) attrs.rowSpan = this.rowspan;\n if (this.headers !== undefined) attrs.headers = this.headers;\n\n if (this.sticky) {\n const stickyStyles: { [key: string]: string } = {\n position: 'sticky',\n zIndex: '10',\n };\n\n if (this.stickyPosition === 'start') {\n stickyStyles.left = `${this.stickyOffset}px`;\n } else {\n stickyStyles.right = `${this.stickyOffset}px`;\n }\n\n attrs.style = stickyStyles;\n }\n\n return (\n <td {...attrs}>\n <slot />\n </td>\n );\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}:host
|
|
2
|
+
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}:host(.--is-sticky) caption{bottom:0;position:sticky;z-index:20}caption{background:var(--spw-ds-white);border:1px solid var(--spw-color-themes-grey-grey-300)}.spw-table-footer{align-items:center;caption-side:bottom;color:var(--spw-color-themes-grey-grey-900);display:flex;font-size:14px;gap:16px;justify-content:space-between;padding:16px 24px}.spw-table-footer ::slotted([slot=right]){align-items:center;display:inline-flex;gap:8px}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
|
|
2
|
-
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}.spw-table-header{background:var(--spw-color-themes-grey-grey-200);background-clip:padding-box;border:1px solid var(--spw-color-themes-grey-grey-300);border-bottom:none!important;border-top:none!important;box-shadow:inset 0 1px 0 var(--spw-color-themes-grey-grey-300),inset 0 -1px 0 var(--spw-color-themes-grey-grey-300);color:var(--spw-color-themes-grey-grey-800);font-size:14px;font-weight:700;text-align:left;transition:all .2s linear;white-space:nowrap}
|
|
2
|
+
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */html{-webkit-text-size-adjust:100%;line-height:1.3}h1,h2,h3,h4,h5,h6,li,p,ul{margin:0;padding:0}ul{list-style:none}:host{-webkit-text-size-adjust:100%;box-sizing:border-box;display:contents;font-size:100%;line-height:1.3}:host *,:host :after,:host :before{box-sizing:inherit;font-family:Nunito Sans}body{margin:0}main{display:block}h1{font-size:2em;margin:.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:.35em .75em .625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}[hidden],template{display:none}:root{--spw-ds-container-xl:1200px;--spw-ds-container-lg:1024px;--spw-ds-container-md:768px;--spw-ds-container-sm:640px}.spw-ds-container{margin-left:auto;margin-right:auto;padding-left:16px;padding-right:16px;width:100%}@media (min-width:460px){.spw-ds-container{max-width:var(--spw-ds-container-sm)}}@media (min-width:768px){.spw-ds-container{max-width:var(--spw-ds-container-md)}}@media (min-width:1024px){.spw-ds-container{max-width:var(--spw-ds-container-lg)}}@media (min-width:1350px){.spw-ds-container{max-width:var(--spw-ds-container-xl)}}:host(.--is-sticky) .spw-table-header{position:sticky;top:0;z-index:50}.spw-table-header{background:var(--spw-color-themes-grey-grey-200);background-clip:padding-box;border:1px solid var(--spw-color-themes-grey-grey-300);border-bottom:none!important;border-top:none!important;box-shadow:inset 0 1px 0 var(--spw-color-themes-grey-grey-300),inset 0 -1px 0 var(--spw-color-themes-grey-grey-300);color:var(--spw-color-themes-grey-grey-800);font-size:14px;font-weight:700;text-align:left;transition:all .2s linear;white-space:nowrap}.spw-table-header--text-align-left{text-align:left}.spw-table-header--text-align-center{text-align:center}.spw-table-header--text-align-right{text-align:right}.spw-table-header--vertical-align-top{vertical-align:top}.spw-table-header--vertical-align-bottom{vertical-align:bottom}.spw-table-header--vertical-align-middle{vertical-align:middle}.spw-table-header--has-tooltip .spw-table-header__content{align-items:center;display:flex;gap:16px;justify-content:space-between}.spw-table-header--has-tooltip .spw-table-header__content spw-icon{color:var(--spw-color-themes-grey-grey-500)}.spw-table-header--has-tooltip .spw-table-header__content spw-icon:hover{color:var(--spw-color-themes-grey-grey-900)}.spw-table-header--sortable{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.spw-table-header--sortable:hover{background:var(--spw-color-themes-grey-grey-300)}.spw-table-header--sortable .spw-table-header__content{align-items:center;display:flex;gap:16px;justify-content:space-between}.spw-table-header--sortable .spw-table-header__content spw-icon{color:var(--spw-color-themes-grey-grey-500)}.spw-table-header--sortable .spw-table-header__content spw-icon:hover,.spw-table-header--sortable .spw-table-header__content--is-sorted .spw-table-header__sort-icon{color:var(--spw-color-themes-grey-grey-900)}.spw-table-header__sort-icons{display:flex;gap:0}.spw-table-header--padding-small{padding:8px}.spw-table-header--padding-medium{padding:16px}.spw-table-header__icons{align-items:center;color:var(--spw-color-themes-grey-grey-500);display:flex;gap:8px}.spw-table-header ::slotted(spw-checkbox){--spw-ds-checkbox-checked-color:#000}.spw-table-header--sticky{background-color:var(--spw-color-themes-grey-grey-200);position:sticky}.spw-table-header--sticky:after{bottom:-1px;content:"";pointer-events:none;position:absolute;top:0;transition:opacity .2s;width:8px}.spw-table-header--sticky-start:after{box-shadow:inset 8px 0 8px -8px rgba(0,0,0,.15);right:-8px}.spw-table-header--sticky-end:after{box-shadow:inset -8px 0 8px -8px rgba(0,0,0,.15);left:-8px}
|
|
@@ -13,6 +13,12 @@ export class SpwTableHeader {
|
|
|
13
13
|
this.sortable = false;
|
|
14
14
|
/** Définit si la colonne est triée ou non (à appliquer sur spw-table-header) */
|
|
15
15
|
this.isSorted = false;
|
|
16
|
+
/** Rend la cellule sticky lors du défilement horizontal (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
17
|
+
this.sticky = false;
|
|
18
|
+
/** Position du sticky : 'start' (left: 0) ou 'end' (right: 0) (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
19
|
+
this.stickyPosition = 'start';
|
|
20
|
+
/** Décalage en pixels pour le sticky (utile pour empiler plusieurs colonnes sticky) (à appliquer sur spw-table-header ou spw-table-cell) */
|
|
21
|
+
this.stickyOffset = 0;
|
|
16
22
|
this.handleClick = (event) => {
|
|
17
23
|
if (event.target.closest('[slot="filters"]')) {
|
|
18
24
|
event.stopPropagation();
|
|
@@ -32,13 +38,37 @@ export class SpwTableHeader {
|
|
|
32
38
|
[`spw-table-header--padding-${this.padding}`]: true,
|
|
33
39
|
[`spw-table-header--text-align-${this.textAlign}`]: true,
|
|
34
40
|
[`spw-table-header--vertical-align-${this.verticalAlign}`]: true,
|
|
41
|
+
'spw-table-header--sticky': this.sticky,
|
|
42
|
+
[`spw-table-header--sticky-${this.stickyPosition}`]: this.sticky,
|
|
35
43
|
};
|
|
36
44
|
}
|
|
37
45
|
render() {
|
|
38
|
-
|
|
46
|
+
const attrs = {
|
|
47
|
+
'aria-sort': this.isSorted ? this.sortDirection : 'none',
|
|
48
|
+
'onClick': this.handleClick,
|
|
49
|
+
'class': this.elementClass,
|
|
50
|
+
'colSpan': this.colspan,
|
|
51
|
+
'headers': this.headers,
|
|
52
|
+
'part': 'cell',
|
|
53
|
+
'rowSpan': this.rowspan,
|
|
54
|
+
};
|
|
55
|
+
if (this.sticky) {
|
|
56
|
+
const stickyStyles = {
|
|
57
|
+
position: 'sticky',
|
|
58
|
+
zIndex: '60',
|
|
59
|
+
};
|
|
60
|
+
if (this.stickyPosition === 'start') {
|
|
61
|
+
stickyStyles.left = `${this.stickyOffset}px`;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
stickyStyles.right = `${this.stickyOffset}px`;
|
|
65
|
+
}
|
|
66
|
+
attrs.style = stickyStyles;
|
|
67
|
+
}
|
|
68
|
+
return (h("th", Object.assign({ key: '72a54f9eb43f87e80da3bfe45a6eb848cf11e09f' }, attrs), h("div", { key: '06111c36e9fa869e263dfb1bc64fa023acf42538', class: {
|
|
39
69
|
'spw-table-header__content': true,
|
|
40
70
|
'spw-table-header__content--is-sorted': this.isSorted,
|
|
41
|
-
} }, h("slot", { key: '
|
|
71
|
+
} }, h("slot", { key: '16439694bfaf17d5f1371ffd817f16ba7bc4ecdc' }), h("div", { key: '4b8cf5f4de063c8aa9c2ea8b653d9a35b1ae64b0', class: "spw-table-header__icons" }, h("slot", { key: 'd9816f83f71672ebda6b27b705142666e376ec7a', name: "filters" }), (this.tooltipTitle || this.tooltipText) && (h("spw-tooltip", { key: 'a8c4e3d4a555806faef984533696c393173b7ad7', "tooltip-title": this.tooltipTitle, "tooltip-text": this.tooltipText }, h("spw-icon", { key: '92a361a5400a2cb09c3ccf68a713897076e019b6', variant: "fa-regular", icon: "fa-circle-question" }))), this.sortable && (h("spw-icon", { key: 'db44bf3aa7be154edecf0281f3335edf0896eb01', class: "spw-table-header__sort-icon", icon: this.isSorted ? (this.sortDirection === 'asc' ? 'fa-arrow-up-short-wide' : 'fa-arrow-down-wide-short') : 'fa-arrow-up-arrow-down' }))))));
|
|
42
72
|
}
|
|
43
73
|
static get is() { return "spw-table-header"; }
|
|
44
74
|
static get encapsulation() { return "shadow"; }
|
|
@@ -321,6 +351,66 @@ export class SpwTableHeader {
|
|
|
321
351
|
"setter": false,
|
|
322
352
|
"attribute": "tooltip-text",
|
|
323
353
|
"reflect": false
|
|
354
|
+
},
|
|
355
|
+
"sticky": {
|
|
356
|
+
"type": "boolean",
|
|
357
|
+
"mutable": false,
|
|
358
|
+
"complexType": {
|
|
359
|
+
"original": "boolean",
|
|
360
|
+
"resolved": "boolean",
|
|
361
|
+
"references": {}
|
|
362
|
+
},
|
|
363
|
+
"required": false,
|
|
364
|
+
"optional": true,
|
|
365
|
+
"docs": {
|
|
366
|
+
"tags": [],
|
|
367
|
+
"text": "Rend la cellule sticky lors du d\u00E9filement horizontal (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
368
|
+
},
|
|
369
|
+
"getter": false,
|
|
370
|
+
"setter": false,
|
|
371
|
+
"attribute": "sticky",
|
|
372
|
+
"reflect": false,
|
|
373
|
+
"defaultValue": "false"
|
|
374
|
+
},
|
|
375
|
+
"stickyPosition": {
|
|
376
|
+
"type": "string",
|
|
377
|
+
"mutable": false,
|
|
378
|
+
"complexType": {
|
|
379
|
+
"original": "'start' | 'end'",
|
|
380
|
+
"resolved": "\"end\" | \"start\"",
|
|
381
|
+
"references": {}
|
|
382
|
+
},
|
|
383
|
+
"required": false,
|
|
384
|
+
"optional": true,
|
|
385
|
+
"docs": {
|
|
386
|
+
"tags": [],
|
|
387
|
+
"text": "Position du sticky : 'start' (left: 0) ou 'end' (right: 0) (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
388
|
+
},
|
|
389
|
+
"getter": false,
|
|
390
|
+
"setter": false,
|
|
391
|
+
"attribute": "sticky-position",
|
|
392
|
+
"reflect": false,
|
|
393
|
+
"defaultValue": "'start'"
|
|
394
|
+
},
|
|
395
|
+
"stickyOffset": {
|
|
396
|
+
"type": "number",
|
|
397
|
+
"mutable": false,
|
|
398
|
+
"complexType": {
|
|
399
|
+
"original": "number",
|
|
400
|
+
"resolved": "number",
|
|
401
|
+
"references": {}
|
|
402
|
+
},
|
|
403
|
+
"required": false,
|
|
404
|
+
"optional": true,
|
|
405
|
+
"docs": {
|
|
406
|
+
"tags": [],
|
|
407
|
+
"text": "D\u00E9calage en pixels pour le sticky (utile pour empiler plusieurs colonnes sticky) (\u00E0 appliquer sur spw-table-header ou spw-table-cell)"
|
|
408
|
+
},
|
|
409
|
+
"getter": false,
|
|
410
|
+
"setter": false,
|
|
411
|
+
"attribute": "sticky-offset",
|
|
412
|
+
"reflect": false,
|
|
413
|
+
"defaultValue": "0"
|
|
324
414
|
}
|
|
325
415
|
};
|
|
326
416
|
}
|