@jumpgroup/jump-design-system 0.3.68 → 0.3.70

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 (167) hide show
  1. package/dist/cjs/{index-864e40de.js → index-230bcbae.js} +6 -2
  2. package/dist/cjs/index-230bcbae.js.map +1 -0
  3. package/dist/cjs/jump-accordion-group.cjs.entry.js +1 -1
  4. package/dist/cjs/jump-accordion.cjs.entry.js +1 -1
  5. package/dist/cjs/jump-badge.cjs.entry.js +1 -1
  6. package/dist/cjs/jump-button_2.cjs.entry.js +1 -1
  7. package/dist/cjs/jump-card-ecommerce-option.cjs.entry.js +1 -1
  8. package/dist/cjs/jump-card-ecommerce.cjs.entry.js +2 -2
  9. package/dist/cjs/jump-card-ecommerce.cjs.entry.js.map +1 -1
  10. package/dist/cjs/jump-card.cjs.entry.js +1 -1
  11. package/dist/cjs/jump-design-system.cjs.js +2 -2
  12. package/dist/cjs/jump-filter-checkbox.cjs.entry.js +1 -1
  13. package/dist/cjs/jump-filter-select.cjs.entry.js +70 -8
  14. package/dist/cjs/jump-filter-select.cjs.entry.js.map +1 -1
  15. package/dist/cjs/jump-filter-switch.cjs.entry.js +1 -1
  16. package/dist/cjs/jump-filter.cjs.entry.js +1 -1
  17. package/dist/cjs/jump-filtergroup.cjs.entry.js +1 -1
  18. package/dist/cjs/jump-navbar.cjs.entry.js +1 -1
  19. package/dist/cjs/jump-pagination-table.cjs.entry.js +1 -1
  20. package/dist/cjs/jump-pagination.cjs.entry.js +1 -1
  21. package/dist/cjs/jump-quantity.cjs.entry.js +1 -1
  22. package/dist/cjs/jump-search-bar-dropdown-item.cjs.entry.js +1 -1
  23. package/dist/cjs/jump-search-bar-mobile.cjs.entry.js +1 -1
  24. package/dist/cjs/jump-search-bar.cjs.entry.js +1 -1
  25. package/dist/cjs/jump-side-cart-example.cjs.entry.js +73 -0
  26. package/dist/cjs/jump-side-cart-example.cjs.entry.js.map +1 -0
  27. package/dist/cjs/jump-side-cart.cjs.entry.js +87 -0
  28. package/dist/cjs/jump-side-cart.cjs.entry.js.map +1 -0
  29. package/dist/cjs/jump-tab-item.cjs.entry.js +3 -3
  30. package/dist/cjs/jump-tab-panel.cjs.entry.js +2 -2
  31. package/dist/cjs/jump-tab.cjs.entry.js +2 -2
  32. package/dist/cjs/loader.cjs.js +2 -2
  33. package/dist/collection/collection-manifest.json +2 -0
  34. package/dist/collection/components/jump-card-ecommerce/jump-card-ecommerce.css +1 -0
  35. package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js +1 -0
  36. package/dist/collection/components/jump-card-ecommerce-option/jump-card-ecommerce-option.stories.js.map +1 -1
  37. package/dist/collection/components/jump-filter-select/jump-filter-select.js +143 -8
  38. package/dist/collection/components/jump-filter-select/jump-filter-select.js.map +1 -1
  39. package/dist/collection/components/jump-side-cart/index.js +1 -0
  40. package/dist/collection/components/jump-side-cart/index.js.map +1 -0
  41. package/dist/collection/components/jump-side-cart/jump-side-cart.css +315 -0
  42. package/dist/collection/components/jump-side-cart/jump-side-cart.example.css +30 -0
  43. package/dist/collection/components/jump-side-cart/jump-side-cart.example.js +79 -0
  44. package/dist/collection/components/jump-side-cart/jump-side-cart.example.js.map +1 -0
  45. package/dist/collection/components/jump-side-cart/jump-side-cart.js +335 -0
  46. package/dist/collection/components/jump-side-cart/jump-side-cart.js.map +1 -0
  47. package/dist/collection/components/jump-side-cart/jump-side-cart.stories.js +134 -0
  48. package/dist/collection/components/jump-side-cart/jump-side-cart.stories.js.map +1 -0
  49. package/dist/collection/components/jump-tab/jump-tab.js +1 -1
  50. package/dist/collection/components/jump-tab-item/jump-tab-item.js +2 -2
  51. package/dist/collection/components/jump-tab-panel/jump-tab-panel.js +1 -1
  52. package/dist/components/jump-card-ecommerce.js +1 -1
  53. package/dist/components/jump-card-ecommerce.js.map +1 -1
  54. package/dist/components/jump-filter-select.js +73 -7
  55. package/dist/components/jump-filter-select.js.map +1 -1
  56. package/dist/components/jump-side-cart-example.d.ts +11 -0
  57. package/dist/components/jump-side-cart-example.js +97 -0
  58. package/dist/components/jump-side-cart-example.js.map +1 -0
  59. package/dist/components/jump-side-cart.d.ts +11 -0
  60. package/dist/components/jump-side-cart.js +8 -0
  61. package/dist/components/jump-side-cart.js.map +1 -0
  62. package/dist/components/jump-side-cart2.js +109 -0
  63. package/dist/components/jump-side-cart2.js.map +1 -0
  64. package/dist/components/jump-tab-item.js +2 -2
  65. package/dist/components/jump-tab-panel.js +1 -1
  66. package/dist/components/jump-tab.js +1 -1
  67. package/dist/esm/{index-7eb565cd.js → index-4363ffe4.js} +6 -2
  68. package/dist/esm/index-4363ffe4.js.map +1 -0
  69. package/dist/esm/jump-accordion-group.entry.js +1 -1
  70. package/dist/esm/jump-accordion.entry.js +1 -1
  71. package/dist/esm/jump-badge.entry.js +1 -1
  72. package/dist/esm/jump-button_2.entry.js +1 -1
  73. package/dist/esm/jump-card-ecommerce-option.entry.js +1 -1
  74. package/dist/esm/jump-card-ecommerce.entry.js +2 -2
  75. package/dist/esm/jump-card-ecommerce.entry.js.map +1 -1
  76. package/dist/esm/jump-card.entry.js +1 -1
  77. package/dist/esm/jump-design-system.js +3 -3
  78. package/dist/esm/jump-filter-checkbox.entry.js +1 -1
  79. package/dist/esm/jump-filter-select.entry.js +70 -8
  80. package/dist/esm/jump-filter-select.entry.js.map +1 -1
  81. package/dist/esm/jump-filter-switch.entry.js +1 -1
  82. package/dist/esm/jump-filter.entry.js +1 -1
  83. package/dist/esm/jump-filtergroup.entry.js +1 -1
  84. package/dist/esm/jump-navbar.entry.js +1 -1
  85. package/dist/esm/jump-pagination-table.entry.js +1 -1
  86. package/dist/esm/jump-pagination.entry.js +1 -1
  87. package/dist/esm/jump-quantity.entry.js +1 -1
  88. package/dist/esm/jump-search-bar-dropdown-item.entry.js +1 -1
  89. package/dist/esm/jump-search-bar-mobile.entry.js +1 -1
  90. package/dist/esm/jump-search-bar.entry.js +1 -1
  91. package/dist/esm/jump-side-cart-example.entry.js +69 -0
  92. package/dist/esm/jump-side-cart-example.entry.js.map +1 -0
  93. package/dist/esm/jump-side-cart.entry.js +83 -0
  94. package/dist/esm/jump-side-cart.entry.js.map +1 -0
  95. package/dist/esm/jump-tab-item.entry.js +3 -3
  96. package/dist/esm/jump-tab-panel.entry.js +2 -2
  97. package/dist/esm/jump-tab.entry.js +2 -2
  98. package/dist/esm/loader.js +3 -3
  99. package/dist/jump-design-system/jump-design-system.esm.js +1 -1
  100. package/dist/jump-design-system/jump-design-system.esm.js.map +1 -1
  101. package/dist/jump-design-system/p-0432b242.entry.js +2 -0
  102. package/dist/jump-design-system/p-0432b242.entry.js.map +1 -0
  103. package/dist/jump-design-system/{p-3b4127b0.entry.js → p-089b9c5c.entry.js} +2 -2
  104. package/dist/jump-design-system/p-0cc799f3.entry.js +2 -0
  105. package/dist/jump-design-system/p-0cdca5df.entry.js +2 -0
  106. package/dist/jump-design-system/{p-947d7f9a.entry.js → p-2e274d20.entry.js} +2 -2
  107. package/dist/jump-design-system/{p-d8bfd21c.entry.js → p-35f2032b.entry.js} +2 -2
  108. package/dist/jump-design-system/p-40ca24a6.js +3 -0
  109. package/dist/{esm/index-7eb565cd.js.map → jump-design-system/p-40ca24a6.js.map} +1 -1
  110. package/dist/jump-design-system/{p-ff8d70ab.entry.js → p-4706eba4.entry.js} +2 -2
  111. package/dist/jump-design-system/{p-79c78037.entry.js → p-617c7cd7.entry.js} +2 -2
  112. package/dist/jump-design-system/{p-201c09dd.entry.js → p-629ef0c7.entry.js} +2 -2
  113. package/dist/jump-design-system/{p-8d1d2af9.entry.js → p-66c79fb9.entry.js} +4 -4
  114. package/dist/jump-design-system/{p-98ef4924.entry.js → p-79e5dac6.entry.js} +2 -2
  115. package/dist/jump-design-system/{p-3c1076e0.entry.js → p-7a2bc23d.entry.js} +2 -2
  116. package/dist/jump-design-system/{p-d3b62e9b.entry.js → p-800fd60b.entry.js} +2 -2
  117. package/dist/jump-design-system/{p-94790673.entry.js → p-83b3a560.entry.js} +2 -2
  118. package/dist/jump-design-system/p-8f02eb5e.entry.js +2 -0
  119. package/dist/jump-design-system/p-8f02eb5e.entry.js.map +1 -0
  120. package/dist/jump-design-system/{p-90c51b48.entry.js → p-9035201c.entry.js} +2 -2
  121. package/dist/jump-design-system/{p-7dd5052b.entry.js → p-9279b124.entry.js} +2 -2
  122. package/dist/jump-design-system/{p-d94fabc1.entry.js → p-a0237406.entry.js} +2 -2
  123. package/dist/jump-design-system/{p-3e31b638.entry.js → p-a7d5e687.entry.js} +2 -2
  124. package/dist/jump-design-system/{p-8e0419b1.entry.js → p-b8b28d8b.entry.js} +2 -2
  125. package/dist/jump-design-system/p-cb9ab473.entry.js +2 -0
  126. package/dist/jump-design-system/{p-a05d9480.entry.js → p-e7b3ebb1.entry.js} +2 -2
  127. package/dist/jump-design-system/p-e7d1e3d8.entry.js +2 -0
  128. package/dist/jump-design-system/p-e7d1e3d8.entry.js.map +1 -0
  129. package/dist/jump-design-system/{p-469ccf77.entry.js → p-fa2a10bf.entry.js} +5 -5
  130. package/dist/jump-design-system/p-fa2a10bf.entry.js.map +1 -0
  131. package/dist/jump-design-system-elements.json +57 -0
  132. package/dist/types/components/jump-filter-select/jump-filter-select.d.ts +22 -0
  133. package/dist/types/components/jump-side-cart/index.d.ts +0 -0
  134. package/dist/types/components/jump-side-cart/jump-side-cart.d.ts +45 -0
  135. package/dist/types/components/jump-side-cart/jump-side-cart.example.d.ts +14 -0
  136. package/dist/types/components/jump-side-cart/jump-side-cart.stories.d.ts +43 -0
  137. package/dist/types/components.d.ts +93 -0
  138. package/package.json +1 -1
  139. package/dist/cjs/index-864e40de.js.map +0 -1
  140. package/dist/jump-design-system/p-0cbcc5b3.entry.js +0 -2
  141. package/dist/jump-design-system/p-39b82674.entry.js +0 -2
  142. package/dist/jump-design-system/p-469ccf77.entry.js.map +0 -1
  143. package/dist/jump-design-system/p-926c7bf0.entry.js +0 -2
  144. package/dist/jump-design-system/p-ad550de6.entry.js +0 -2
  145. package/dist/jump-design-system/p-ad550de6.entry.js.map +0 -1
  146. package/dist/jump-design-system/p-e516e812.js +0 -3
  147. package/dist/jump-design-system/p-e516e812.js.map +0 -1
  148. /package/dist/jump-design-system/{p-3b4127b0.entry.js.map → p-089b9c5c.entry.js.map} +0 -0
  149. /package/dist/jump-design-system/{p-0cbcc5b3.entry.js.map → p-0cc799f3.entry.js.map} +0 -0
  150. /package/dist/jump-design-system/{p-926c7bf0.entry.js.map → p-0cdca5df.entry.js.map} +0 -0
  151. /package/dist/jump-design-system/{p-947d7f9a.entry.js.map → p-2e274d20.entry.js.map} +0 -0
  152. /package/dist/jump-design-system/{p-d8bfd21c.entry.js.map → p-35f2032b.entry.js.map} +0 -0
  153. /package/dist/jump-design-system/{p-ff8d70ab.entry.js.map → p-4706eba4.entry.js.map} +0 -0
  154. /package/dist/jump-design-system/{p-79c78037.entry.js.map → p-617c7cd7.entry.js.map} +0 -0
  155. /package/dist/jump-design-system/{p-201c09dd.entry.js.map → p-629ef0c7.entry.js.map} +0 -0
  156. /package/dist/jump-design-system/{p-8d1d2af9.entry.js.map → p-66c79fb9.entry.js.map} +0 -0
  157. /package/dist/jump-design-system/{p-98ef4924.entry.js.map → p-79e5dac6.entry.js.map} +0 -0
  158. /package/dist/jump-design-system/{p-3c1076e0.entry.js.map → p-7a2bc23d.entry.js.map} +0 -0
  159. /package/dist/jump-design-system/{p-d3b62e9b.entry.js.map → p-800fd60b.entry.js.map} +0 -0
  160. /package/dist/jump-design-system/{p-94790673.entry.js.map → p-83b3a560.entry.js.map} +0 -0
  161. /package/dist/jump-design-system/{p-90c51b48.entry.js.map → p-9035201c.entry.js.map} +0 -0
  162. /package/dist/jump-design-system/{p-7dd5052b.entry.js.map → p-9279b124.entry.js.map} +0 -0
  163. /package/dist/jump-design-system/{p-d94fabc1.entry.js.map → p-a0237406.entry.js.map} +0 -0
  164. /package/dist/jump-design-system/{p-3e31b638.entry.js.map → p-a7d5e687.entry.js.map} +0 -0
  165. /package/dist/jump-design-system/{p-8e0419b1.entry.js.map → p-b8b28d8b.entry.js.map} +0 -0
  166. /package/dist/jump-design-system/{p-39b82674.entry.js.map → p-cb9ab473.entry.js.map} +0 -0
  167. /package/dist/jump-design-system/{p-a05d9480.entry.js.map → p-e7b3ebb1.entry.js.map} +0 -0
@@ -10,6 +10,7 @@ export class JumpFilterSelect {
10
10
  this.value = undefined;
11
11
  this.placeholder = 'Seleziona un\'opzione';
12
12
  this.label = undefined;
13
+ this.name = 'select-filter';
13
14
  this.options = [];
14
15
  this.disabled = false;
15
16
  this.multiple = false;
@@ -17,6 +18,7 @@ export class JumpFilterSelect {
17
18
  this.loading = false;
18
19
  this.open = false;
19
20
  this.hasSlottedOptions = false;
21
+ this.values = [];
20
22
  }
21
23
  /**
22
24
  * Controlla se ci sono opzioni definite come slot
@@ -41,8 +43,16 @@ export class JumpFilterSelect {
41
43
  }
42
44
  return this.options;
43
45
  }
46
+ /**
47
+ * Aggiorna l'array dei valori in base al valore selezionato
48
+ */
49
+ updateValues() {
50
+ this.values = this.value ? [this.value] : [];
51
+ }
44
52
  componentDidLoad() {
45
53
  this.listenSLChange();
54
+ // Inizializza l'array dei valori
55
+ this.updateValues();
46
56
  }
47
57
  /**
48
58
  * Ascolta gli eventi di cambio selezione dal select Shoelace
@@ -54,14 +64,23 @@ export class JumpFilterSelect {
54
64
  return;
55
65
  }
56
66
  this.value = event.target.value;
67
+ this.updateValues();
57
68
  const optionsArray = this.getOptionsArray();
58
69
  const selectedOption = optionsArray.find(option => option.value === this.value);
59
- const eventData = {
70
+ // Evento specifico per il componente select
71
+ const selectEventData = {
72
+ value: this.value,
73
+ selectedOption
74
+ };
75
+ this.selectionChange.emit(selectEventData);
76
+ // Evento standard per il sistema di filtri
77
+ const filterEventData = {
78
+ name: this.name,
79
+ values: this.values,
60
80
  value: this.value,
61
81
  selectedOption
62
82
  };
63
- this.selectionChange.emit(eventData);
64
- this.selectionFilterChange.emit(eventData);
83
+ this.selectionFilterChange.emit(filterEventData);
65
84
  });
66
85
  }
67
86
  }
@@ -80,6 +99,20 @@ export class JumpFilterSelect {
80
99
  const optionsArray = this.getOptionsArray();
81
100
  return optionsArray.find(option => option.value === this.value);
82
101
  }
102
+ /**
103
+ * Metodo pubblico per ottenere i valori selezionati come array
104
+ * @returns Array contenente il valore selezionato o un array vuoto
105
+ */
106
+ async getValues() {
107
+ return this.values;
108
+ }
109
+ /**
110
+ * Metodo pubblico per ottenere il nome del filtro
111
+ * @returns Il nome del filtro
112
+ */
113
+ async getName() {
114
+ return this.name;
115
+ }
83
116
  /**
84
117
  * Metodo pubblico per impostare programmaticamente il valore selezionato
85
118
  * @param newValue - Il nuovo valore da selezionare
@@ -87,7 +120,18 @@ export class JumpFilterSelect {
87
120
  * @returns Il nuovo valore impostato
88
121
  */
89
122
  async setValue(newValue, emitEvent = true) {
123
+ // Se il componente è disabilitato, non fare nulla
124
+ if (this.disabled) {
125
+ return this.value;
126
+ }
127
+ // Salva il valore precedente per l'evento
128
+ const oldValue = this.value;
129
+ // Non fare nulla se il valore non è cambiato
130
+ if (oldValue === newValue) {
131
+ return this.value;
132
+ }
90
133
  this.value = newValue;
134
+ this.updateValues();
91
135
  // Aggiorna anche il valore dell'elemento sl-select interno
92
136
  if (this.el) {
93
137
  this.el.value = newValue;
@@ -96,19 +140,36 @@ export class JumpFilterSelect {
96
140
  if (emitEvent) {
97
141
  const optionsArray = this.getOptionsArray();
98
142
  const selectedOption = optionsArray.find(option => option.value === this.value);
99
- const eventData = {
143
+ // Evento specifico per il componente select
144
+ const selectEventData = {
100
145
  value: this.value,
146
+ oldValue: oldValue,
101
147
  selectedOption,
102
148
  programmatic: true // Flag per indicare che il cambio è avvenuto programmaticamente
103
149
  };
104
- this.selectionChange.emit(eventData);
105
- this.selectionFilterChange.emit(eventData);
150
+ this.selectionChange.emit(selectEventData);
151
+ // Evento standard per il sistema di filtri
152
+ const filterEventData = {
153
+ name: this.name,
154
+ values: this.values,
155
+ value: this.value,
156
+ oldValue: oldValue,
157
+ selectedOption,
158
+ programmatic: true
159
+ };
160
+ this.selectionFilterChange.emit(filterEventData);
161
+ // Evento specifico per cambio programmato
162
+ this.valueChange.emit({
163
+ value: this.value,
164
+ oldValue: oldValue,
165
+ selectedOption
166
+ });
106
167
  }
107
168
  return this.value;
108
169
  }
109
170
  render() {
110
171
  const optionsArray = this.getOptionsArray();
111
- return (h(Host, { key: '3bbb46b827ae88ce31d6c1da17fc75b6da4269ec', ref: (host) => (this.host = host) }, this.label && (h("div", { key: 'c0d89bc2668692fe9920a20aaf45a5ad9989d7b2', class: "select-label" }, this.label)), h("sl-select", { key: '299284224f4981547900d0bcb215747ebc17d22c', value: this.value, placeholder: this.placeholder, disabled: this.disabled, multiple: this.multiple, required: this.required, loading: this.loading, ref: (el) => (this.el = el) }, !this.hasSlottedOptions && optionsArray.map(option => (h("sl-option", { value: option.value }, option.label))), h("slot", { key: 'f481903e85538e396e4d270e4545dbd8024ed7ef' }))));
172
+ return (h(Host, { key: '26ecef5862a3d5ef1d903ac9dad378027841d78c', ref: (host) => (this.host = host) }, this.label && (h("div", { key: '24bc20afb81ebe4b760889b3be866cc4c94b43f4', class: "select-label" }, this.label)), h("sl-select", { key: '7b578cf8ab02dd40df93848af918c51f7061bbbe', value: this.value, placeholder: this.placeholder, disabled: this.disabled, multiple: this.multiple, required: this.required, loading: this.loading, ref: (el) => (this.el = el) }, !this.hasSlottedOptions && optionsArray.map(option => (h("sl-option", { value: option.value }, option.label))), h("slot", { key: 'dc85029632cf9c9f6b00b72c4f9a83a8281e25dc' }))));
112
173
  }
113
174
  static get is() { return "jump-filter-select"; }
114
175
  static get encapsulation() { return "shadow"; }
@@ -176,6 +237,24 @@ export class JumpFilterSelect {
176
237
  "attribute": "label",
177
238
  "reflect": false
178
239
  },
240
+ "name": {
241
+ "type": "string",
242
+ "mutable": false,
243
+ "complexType": {
244
+ "original": "string",
245
+ "resolved": "string",
246
+ "references": {}
247
+ },
248
+ "required": false,
249
+ "optional": false,
250
+ "docs": {
251
+ "tags": [],
252
+ "text": "Nome identificativo del filtro, utilizzato negli eventi"
253
+ },
254
+ "attribute": "name",
255
+ "reflect": false,
256
+ "defaultValue": "'select-filter'"
257
+ },
179
258
  "options": {
180
259
  "type": "string",
181
260
  "mutable": false,
@@ -271,7 +350,8 @@ export class JumpFilterSelect {
271
350
  static get states() {
272
351
  return {
273
352
  "open": {},
274
- "hasSlottedOptions": {}
353
+ "hasSlottedOptions": {},
354
+ "values": {}
275
355
  };
276
356
  }
277
357
  static get events() {
@@ -305,6 +385,21 @@ export class JumpFilterSelect {
305
385
  "resolved": "any",
306
386
  "references": {}
307
387
  }
388
+ }, {
389
+ "method": "valueChange",
390
+ "name": "jump-select-value-change",
391
+ "bubbles": true,
392
+ "cancelable": true,
393
+ "composed": true,
394
+ "docs": {
395
+ "tags": [],
396
+ "text": "Evento emesso quando il valore viene cambiato programmaticamente"
397
+ },
398
+ "complexType": {
399
+ "original": "any",
400
+ "resolved": "any",
401
+ "references": {}
402
+ }
308
403
  }];
309
404
  }
310
405
  static get methods() {
@@ -349,6 +444,46 @@ export class JumpFilterSelect {
349
444
  }]
350
445
  }
351
446
  },
447
+ "getValues": {
448
+ "complexType": {
449
+ "signature": "() => Promise<string[]>",
450
+ "parameters": [],
451
+ "references": {
452
+ "Promise": {
453
+ "location": "global",
454
+ "id": "global::Promise"
455
+ }
456
+ },
457
+ "return": "Promise<string[]>"
458
+ },
459
+ "docs": {
460
+ "text": "Metodo pubblico per ottenere i valori selezionati come array",
461
+ "tags": [{
462
+ "name": "returns",
463
+ "text": "Array contenente il valore selezionato o un array vuoto"
464
+ }]
465
+ }
466
+ },
467
+ "getName": {
468
+ "complexType": {
469
+ "signature": "() => Promise<string>",
470
+ "parameters": [],
471
+ "references": {
472
+ "Promise": {
473
+ "location": "global",
474
+ "id": "global::Promise"
475
+ }
476
+ },
477
+ "return": "Promise<string>"
478
+ },
479
+ "docs": {
480
+ "text": "Metodo pubblico per ottenere il nome del filtro",
481
+ "tags": [{
482
+ "name": "returns",
483
+ "text": "Il nome del filtro"
484
+ }]
485
+ }
486
+ },
352
487
  "setValue": {
353
488
  "complexType": {
354
489
  "signature": "(newValue: string, emitEvent?: boolean) => Promise<string>",
@@ -1 +1 @@
1
- {"version":3,"file":"jump-filter-select.js","sourceRoot":"","sources":["../../../src/components/jump-filter-select/jump-filter-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Prop, h, Event, EventEmitter, Method, State, Element } from '@stencil/core';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\n/**\n * Componente select per filtri con supporto per opzioni e stato\n * @slot - Contenitore per elementi sl-option quando le opzioni sono definite come figli\n */\n@Component({\n tag: 'jump-filter-select',\n styleUrl: 'jump-filter-select.scss',\n shadow: true,\n})\nexport class JumpFilterSelect {\n /** Riferimento all'elemento host */\n @Element() hostElement: HTMLElement;\n\n /** Il valore selezionato */\n @Prop({ reflect: true, mutable: true }) value: string;\n\n /** Il placeholder da mostrare quando nessun valore è selezionato */\n @Prop() placeholder: string = 'Seleziona un\\'opzione';\n\n /** L'etichetta del select */\n @Prop() label: string;\n\n /** Opzioni del select come array di oggetti {value, label} o come stringa JSON */\n @Prop() options: string | { value: string; label: string }[] = [];\n\n /** Stato del select (disabilitato) */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Flag per indicare se è possibile selezionare più opzioni */\n @Prop() multiple: boolean = false;\n\n /** Flag per indicare se la selezione è obbligatoria */\n @Prop() required: boolean = false;\n\n /** Flag per indicare se il select è in stato di caricamento */\n @Prop() loading: boolean = false;\n\n /** Stato interno per gestire l'apertura del dropdown */\n @State() open: boolean = false;\n\n /** Flag per determinare se sono presenti opzioni come slot */\n @State() hasSlottedOptions: boolean = false;\n\n /** Riferimento all'elemento host */\n host: HTMLElement;\n\n /** Riferimento all'elemento sl-select interno */\n el: any;\n\n /**\n * Controlla se ci sono opzioni definite come slot\n */\n componentWillRender() {\n // Verifica se ci sono elementi sl-option definiti come figli\n const slotNodes = this.hostElement.childNodes;\n this.hasSlottedOptions = Array.from(slotNodes).some(node =>\n node.nodeName && node.nodeName.toLowerCase() === 'sl-option'\n );\n }\n\n /**\n * Converte le opzioni da string o array a array di oggetti\n */\n private getOptionsArray(): { value: string; label: string }[] {\n if (typeof this.options === 'string') {\n try {\n return JSON.parse(this.options);\n } catch (e) {\n console.error('Errore nel parsing delle opzioni:', e);\n return [];\n }\n }\n return this.options;\n }\n\n componentDidLoad() {\n this.listenSLChange();\n }\n\n /**\n * Ascolta gli eventi di cambio selezione dal select Shoelace\n */\n listenSLChange() {\n if (this.host) {\n this.host.addEventListener('sl-change', (event: any) => {\n if (this.disabled) {\n return;\n }\n\n this.value = event.target.value;\n\n const optionsArray = this.getOptionsArray();\n const selectedOption = optionsArray.find(option => option.value === this.value);\n\n const eventData = {\n value: this.value,\n selectedOption\n };\n\n this.selectionChange.emit(eventData);\n this.selectionFilterChange.emit(eventData);\n });\n }\n }\n\n /**\n * Evento emesso quando cambia la selezione\n */\n @Event({ eventName: 'jump-select-change' }) selectionChange: EventEmitter;\n @Event({ eventName: 'jump-filterchange' }) selectionFilterChange: EventEmitter;\n\n /**\n * Metodo pubblico per ottenere il valore selezionato\n * @returns Il valore attualmente selezionato\n */\n @Method()\n async getSelectedValue() {\n return this.value;\n }\n\n /**\n * Metodo pubblico per ottenere l'opzione selezionata\n * @returns L'opzione attualmente selezionata come oggetto {value, label}\n */\n @Method()\n async getSelectedOption() {\n const optionsArray = this.getOptionsArray();\n return optionsArray.find(option => option.value === this.value);\n }\n\n /**\n * Metodo pubblico per impostare programmaticamente il valore selezionato\n * @param newValue - Il nuovo valore da selezionare\n * @param emitEvent - Se emettere l'evento di cambio (default: true)\n * @returns Il nuovo valore impostato\n */\n @Method()\n async setValue(newValue: string, emitEvent: boolean = true) {\n this.value = newValue;\n\n // Aggiorna anche il valore dell'elemento sl-select interno\n if (this.el) {\n this.el.value = newValue;\n }\n\n // Emetti l'evento di cambio se richiesto\n if (emitEvent) {\n const optionsArray = this.getOptionsArray();\n const selectedOption = optionsArray.find(option => option.value === this.value);\n\n const eventData = {\n value: this.value,\n selectedOption,\n programmatic: true // Flag per indicare che il cambio è avvenuto programmaticamente\n };\n\n this.selectionChange.emit(eventData);\n this.selectionFilterChange.emit(eventData);\n }\n\n return this.value;\n }\n\n render() {\n const optionsArray = this.getOptionsArray();\n\n return (\n <Host ref={(host: HTMLElement) => (this.host = host)}>\n {this.label && (\n <div class=\"select-label\">{this.label}</div>\n )}\n <sl-select\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n multiple={this.multiple}\n required={this.required}\n loading={this.loading}\n ref={(el: any) => (this.el = el)}\n >\n {/* Renderizza le opzioni dalla prop options solo se non ci sono sl-option nello slot */}\n {!this.hasSlottedOptions && optionsArray.map(option => (\n <sl-option value={option.value}>{option.label}</sl-option>\n ))}\n\n {/* Slot per le opzioni definite come figli */}\n <slot></slot>\n </sl-select>\n </Host>\n );\n }\n}\n"]}
1
+ {"version":3,"file":"jump-filter-select.js","sourceRoot":"","sources":["../../../src/components/jump-filter-select/jump-filter-select.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Host, Prop, h, Event, EventEmitter, Method, State, Element } from '@stencil/core';\nimport '@shoelace-style/shoelace/dist/components/select/select.js';\nimport '@shoelace-style/shoelace/dist/components/option/option.js';\n\n/**\n * Componente select per filtri con supporto per opzioni e stato\n * @slot - Contenitore per elementi sl-option quando le opzioni sono definite come figli\n */\n@Component({\n tag: 'jump-filter-select',\n styleUrl: 'jump-filter-select.scss',\n shadow: true,\n})\nexport class JumpFilterSelect {\n /** Riferimento all'elemento host */\n @Element() hostElement: HTMLElement;\n\n /** Il valore selezionato */\n @Prop({ reflect: true, mutable: true }) value: string;\n\n /** Il placeholder da mostrare quando nessun valore è selezionato */\n @Prop() placeholder: string = 'Seleziona un\\'opzione';\n\n /** L'etichetta del select */\n @Prop() label: string;\n\n /** Nome identificativo del filtro, utilizzato negli eventi */\n @Prop() name: string = 'select-filter';\n \n /** Opzioni del select come array di oggetti {value, label} o come stringa JSON */\n @Prop() options: string | { value: string; label: string }[] = [];\n\n /** Stato del select (disabilitato) */\n @Prop({ reflect: true }) disabled: boolean = false;\n\n /** Flag per indicare se è possibile selezionare più opzioni */\n @Prop() multiple: boolean = false;\n\n /** Flag per indicare se la selezione è obbligatoria */\n @Prop() required: boolean = false;\n\n /** Flag per indicare se il select è in stato di caricamento */\n @Prop() loading: boolean = false;\n\n /** Stato interno per gestire l'apertura del dropdown */\n @State() open: boolean = false;\n\n /** Flag per determinare se sono presenti opzioni come slot */\n @State() hasSlottedOptions: boolean = false;\n \n /** Stato interno per tenere traccia dei valori selezionati come array per compatibilità con gli altri filtri */\n @State() values: string[] = [];\n\n /** Riferimento all'elemento host */\n host: HTMLElement;\n\n /** Riferimento all'elemento sl-select interno */\n el: any;\n\n /**\n * Controlla se ci sono opzioni definite come slot\n */\n componentWillRender() {\n // Verifica se ci sono elementi sl-option definiti come figli\n const slotNodes = this.hostElement.childNodes;\n this.hasSlottedOptions = Array.from(slotNodes).some(node =>\n node.nodeName && node.nodeName.toLowerCase() === 'sl-option'\n );\n }\n\n /**\n * Converte le opzioni da string o array a array di oggetti\n */\n private getOptionsArray(): { value: string; label: string }[] {\n if (typeof this.options === 'string') {\n try {\n return JSON.parse(this.options);\n } catch (e) {\n console.error('Errore nel parsing delle opzioni:', e);\n return [];\n }\n }\n return this.options;\n }\n \n /**\n * Aggiorna l'array dei valori in base al valore selezionato\n */\n private updateValues() {\n this.values = this.value ? [this.value] : [];\n }\n\n componentDidLoad() {\n this.listenSLChange();\n // Inizializza l'array dei valori\n this.updateValues();\n }\n\n /**\n * Ascolta gli eventi di cambio selezione dal select Shoelace\n */\n listenSLChange() {\n if (this.host) {\n this.host.addEventListener('sl-change', (event: any) => {\n if (this.disabled) {\n return;\n }\n\n this.value = event.target.value;\n this.updateValues();\n \n const optionsArray = this.getOptionsArray();\n const selectedOption = optionsArray.find(option => option.value === this.value);\n \n // Evento specifico per il componente select\n const selectEventData = {\n value: this.value,\n selectedOption\n };\n this.selectionChange.emit(selectEventData);\n \n // Evento standard per il sistema di filtri\n const filterEventData = {\n name: this.name,\n values: this.values,\n value: this.value,\n selectedOption\n };\n this.selectionFilterChange.emit(filterEventData);\n });\n }\n }\n\n /**\n * Evento emesso quando cambia la selezione\n */\n @Event({ eventName: 'jump-select-change' }) selectionChange: EventEmitter;\n @Event({ eventName: 'jump-filterchange' }) selectionFilterChange: EventEmitter;\n /**\n * Evento emesso quando il valore viene cambiato programmaticamente\n */\n @Event({ eventName: 'jump-select-value-change' }) valueChange: EventEmitter;\n\n /**\n * Metodo pubblico per ottenere il valore selezionato\n * @returns Il valore attualmente selezionato\n */\n @Method()\n async getSelectedValue() {\n return this.value;\n }\n\n /**\n * Metodo pubblico per ottenere l'opzione selezionata\n * @returns L'opzione attualmente selezionata come oggetto {value, label}\n */\n @Method()\n async getSelectedOption() {\n const optionsArray = this.getOptionsArray();\n return optionsArray.find(option => option.value === this.value);\n }\n \n /**\n * Metodo pubblico per ottenere i valori selezionati come array\n * @returns Array contenente il valore selezionato o un array vuoto\n */\n @Method()\n async getValues() {\n return this.values;\n }\n \n /**\n * Metodo pubblico per ottenere il nome del filtro\n * @returns Il nome del filtro\n */\n @Method()\n async getName() {\n return this.name;\n }\n\n /**\n * Metodo pubblico per impostare programmaticamente il valore selezionato\n * @param newValue - Il nuovo valore da selezionare\n * @param emitEvent - Se emettere l'evento di cambio (default: true)\n * @returns Il nuovo valore impostato\n */\n @Method()\n async setValue(newValue: string, emitEvent: boolean = true) {\n // Se il componente è disabilitato, non fare nulla\n if (this.disabled) {\n return this.value;\n }\n \n // Salva il valore precedente per l'evento\n const oldValue = this.value;\n \n // Non fare nulla se il valore non è cambiato\n if (oldValue === newValue) {\n return this.value;\n }\n \n this.value = newValue;\n this.updateValues();\n \n // Aggiorna anche il valore dell'elemento sl-select interno\n if (this.el) {\n this.el.value = newValue;\n }\n \n // Emetti l'evento di cambio se richiesto\n if (emitEvent) {\n const optionsArray = this.getOptionsArray();\n const selectedOption = optionsArray.find(option => option.value === this.value);\n \n // Evento specifico per il componente select\n const selectEventData = {\n value: this.value,\n oldValue: oldValue,\n selectedOption,\n programmatic: true // Flag per indicare che il cambio è avvenuto programmaticamente\n };\n this.selectionChange.emit(selectEventData);\n \n // Evento standard per il sistema di filtri\n const filterEventData = {\n name: this.name,\n values: this.values,\n value: this.value,\n oldValue: oldValue,\n selectedOption,\n programmatic: true\n };\n this.selectionFilterChange.emit(filterEventData);\n \n // Evento specifico per cambio programmato\n this.valueChange.emit({\n value: this.value,\n oldValue: oldValue,\n selectedOption\n });\n }\n\n return this.value;\n }\n\n render() {\n const optionsArray = this.getOptionsArray();\n\n return (\n <Host ref={(host: HTMLElement) => (this.host = host)}>\n {this.label && (\n <div class=\"select-label\">{this.label}</div>\n )}\n <sl-select\n value={this.value}\n placeholder={this.placeholder}\n disabled={this.disabled}\n multiple={this.multiple}\n required={this.required}\n loading={this.loading}\n ref={(el: any) => (this.el = el)}\n >\n {/* Renderizza le opzioni dalla prop options solo se non ci sono sl-option nello slot */}\n {!this.hasSlottedOptions && optionsArray.map(option => (\n <sl-option value={option.value}>{option.label}</sl-option>\n ))}\n\n {/* Slot per le opzioni definite come figli */}\n <slot></slot>\n </sl-select>\n </Host>\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/jump-side-cart/index.ts"],"names":[],"mappings":"","sourcesContent":[""]}
@@ -0,0 +1,315 @@
1
+ :host {
2
+ --cart-width: 400px;
3
+ --cart-bg: #ffffff;
4
+ --overlay-bg: rgba(0, 0, 0, 0.5);
5
+ --border-color: #e5e5e5;
6
+ --text-primary: #333333;
7
+ --text-secondary: #666666;
8
+ --primary-color: #80bb55;
9
+ --secondary-color: #f5f5f5;
10
+ --error-color: #dc3545;
11
+ --success-color: #28a745;
12
+ }
13
+
14
+ .side-cart {
15
+ position: fixed;
16
+ top: 0;
17
+ bottom: 0;
18
+ width: 100%;
19
+ z-index: 1000;
20
+ pointer-events: none;
21
+ }
22
+ .side-cart--open {
23
+ pointer-events: all;
24
+ }
25
+ .side-cart--right {
26
+ right: 0;
27
+ }
28
+ .side-cart--right .side-cart__content {
29
+ right: 0;
30
+ transform: translateX(100%);
31
+ }
32
+ .side-cart--right.side-cart--open .side-cart__content {
33
+ transform: translateX(0);
34
+ }
35
+ .side-cart--left {
36
+ left: 0;
37
+ }
38
+ .side-cart--left .side-cart__content {
39
+ left: 0;
40
+ transform: translateX(-100%);
41
+ }
42
+ .side-cart--left.side-cart--open .side-cart__content {
43
+ transform: translateX(0);
44
+ }
45
+
46
+ .side-cart__overlay {
47
+ position: absolute;
48
+ top: 0;
49
+ left: 0;
50
+ right: 0;
51
+ bottom: 0;
52
+ background: var(--overlay-bg);
53
+ opacity: 0;
54
+ transition: opacity 0.3s ease;
55
+ }
56
+ .side-cart--open .side-cart__overlay {
57
+ opacity: 1;
58
+ }
59
+
60
+ .side-cart__content {
61
+ position: absolute;
62
+ top: 0;
63
+ bottom: 0;
64
+ width: var(--cart-width);
65
+ max-width: 90vw;
66
+ background: var(--cart-bg);
67
+ box-shadow: -2px 0 10px rgba(0, 0, 0, 0.1);
68
+ transition: transform 0.3s ease;
69
+ display: flex;
70
+ flex-direction: column;
71
+ }
72
+ .side-cart--left .side-cart__content {
73
+ box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1);
74
+ }
75
+
76
+ .side-cart__header {
77
+ display: flex;
78
+ justify-content: space-between;
79
+ align-items: center;
80
+ padding: 1rem;
81
+ border-bottom: 1px solid var(--border-color);
82
+ }
83
+ .side-cart__header h2 {
84
+ margin: 0;
85
+ font-size: 1.25rem;
86
+ font-weight: 600;
87
+ color: var(--text-primary);
88
+ }
89
+ .side-cart__header .close-btn {
90
+ background: none;
91
+ border: none;
92
+ font-size: 1.5rem;
93
+ cursor: pointer;
94
+ color: var(--text-secondary);
95
+ padding: 0.25rem;
96
+ line-height: 1;
97
+ }
98
+ .side-cart__header .close-btn:hover {
99
+ color: var(--text-primary);
100
+ }
101
+
102
+ .side-cart__body {
103
+ flex: 1;
104
+ overflow-y: auto;
105
+ padding: 1rem;
106
+ }
107
+
108
+ .empty-cart {
109
+ text-align: center;
110
+ padding: 2rem 0;
111
+ color: var(--text-secondary);
112
+ }
113
+
114
+ .cart-items {
115
+ display: flex;
116
+ flex-direction: column;
117
+ gap: 1rem;
118
+ }
119
+
120
+ .cart-item {
121
+ display: flex;
122
+ gap: 0.75rem;
123
+ padding: 1rem;
124
+ border: 1px solid var(--border-color);
125
+ border-radius: 8px;
126
+ }
127
+ .cart-item__image {
128
+ flex-shrink: 0;
129
+ width: 80px;
130
+ height: 80px;
131
+ }
132
+ .cart-item__image img {
133
+ width: 100%;
134
+ height: 100%;
135
+ object-fit: cover;
136
+ border-radius: 4px;
137
+ }
138
+ .cart-item__details {
139
+ flex: 1;
140
+ min-width: 0;
141
+ }
142
+ .cart-item__brand {
143
+ font-size: 0.75rem;
144
+ color: var(--text-secondary);
145
+ margin-bottom: 0.25rem;
146
+ text-transform: uppercase;
147
+ font-weight: 500;
148
+ }
149
+ .cart-item__name {
150
+ font-size: 0.875rem;
151
+ font-weight: 500;
152
+ color: var(--text-primary);
153
+ margin-bottom: 0.25rem;
154
+ line-height: 1.3;
155
+ }
156
+ .cart-item__description {
157
+ font-size: 0.75rem;
158
+ color: var(--text-secondary);
159
+ margin-bottom: 0.5rem;
160
+ }
161
+ .cart-item__price {
162
+ font-weight: 600;
163
+ color: var(--text-primary);
164
+ }
165
+ .cart-item__original-price {
166
+ margin-left: 0.5rem;
167
+ text-decoration: line-through;
168
+ color: var(--text-secondary);
169
+ font-weight: normal;
170
+ }
171
+ .cart-item__controls {
172
+ flex-shrink: 0;
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 0.5rem;
176
+ align-items: center;
177
+ }
178
+
179
+ .quantity-controls {
180
+ display: flex;
181
+ align-items: center;
182
+ border: 1px solid var(--border-color);
183
+ border-radius: 4px;
184
+ }
185
+ .quantity-controls .quantity-btn {
186
+ background: none;
187
+ border: none;
188
+ width: 32px;
189
+ height: 32px;
190
+ display: flex;
191
+ align-items: center;
192
+ justify-content: center;
193
+ cursor: pointer;
194
+ color: var(--text-primary);
195
+ }
196
+ .quantity-controls .quantity-btn:hover:not(:disabled) {
197
+ background: var(--secondary-color);
198
+ }
199
+ .quantity-controls .quantity-btn:disabled {
200
+ opacity: 0.5;
201
+ cursor: not-allowed;
202
+ }
203
+ .quantity-controls .quantity {
204
+ min-width: 40px;
205
+ text-align: center;
206
+ padding: 0 0.5rem;
207
+ border-left: 1px solid var(--border-color);
208
+ border-right: 1px solid var(--border-color);
209
+ font-weight: 500;
210
+ }
211
+
212
+ .remove-btn {
213
+ background: none;
214
+ border: none;
215
+ color: var(--error-color);
216
+ font-size: 0.75rem;
217
+ cursor: pointer;
218
+ padding: 0.25rem 0.5rem;
219
+ border-radius: 4px;
220
+ }
221
+ .remove-btn:hover {
222
+ background: rgba(220, 53, 69, 0.1);
223
+ }
224
+
225
+ .progress-section {
226
+ margin-top: 1.5rem;
227
+ padding-top: 1rem;
228
+ border-top: 1px solid var(--border-color);
229
+ }
230
+
231
+ .progress-bar {
232
+ width: 100%;
233
+ height: 8px;
234
+ background: var(--secondary-color);
235
+ border-radius: 4px;
236
+ overflow: hidden;
237
+ margin-bottom: 0.5rem;
238
+ }
239
+ .progress-bar .progress-fill {
240
+ height: 100%;
241
+ background: var(--primary-color);
242
+ transition: width 0.3s ease;
243
+ }
244
+
245
+ .progress-text {
246
+ font-size: 0.875rem;
247
+ color: var(--text-secondary);
248
+ text-align: center;
249
+ }
250
+
251
+ .side-cart__footer {
252
+ border-top: 1px solid var(--border-color);
253
+ padding: 1rem;
254
+ }
255
+
256
+ .totals {
257
+ margin-bottom: 1rem;
258
+ }
259
+ .totals .subtotal, .totals .savings {
260
+ display: flex;
261
+ justify-content: space-between;
262
+ margin-bottom: 0.5rem;
263
+ }
264
+ .totals .subtotal {
265
+ font-weight: 600;
266
+ font-size: 1.125rem;
267
+ }
268
+ .totals .savings {
269
+ color: var(--success-color);
270
+ font-size: 0.875rem;
271
+ }
272
+
273
+ .actions {
274
+ display: flex;
275
+ gap: 0.75rem;
276
+ }
277
+ .actions .btn {
278
+ flex: 1;
279
+ padding: 0.75rem;
280
+ border: none;
281
+ border-radius: 6px;
282
+ font-weight: 500;
283
+ cursor: pointer;
284
+ transition: all 0.2s ease;
285
+ }
286
+ .actions .btn--primary {
287
+ background: var(--primary-color);
288
+ color: white;
289
+ }
290
+ .actions .btn--primary:hover {
291
+ background: #68a03b; /* Darker shade of --primary-color */
292
+ filter: brightness(0.9);
293
+ }
294
+ .actions .btn--secondary {
295
+ background: var(--secondary-color);
296
+ color: var(--text-primary);
297
+ border: 1px solid var(--border-color);
298
+ }
299
+ .actions .btn--secondary:hover {
300
+ background: #e8e8e8; /* Darker shade of --secondary-color */
301
+ filter: brightness(0.95);
302
+ }
303
+
304
+ @media (max-width: 768px) {
305
+ .side-cart__content {
306
+ width: 100vw;
307
+ max-width: none;
308
+ }
309
+ .cart-item__details {
310
+ font-size: 0.8rem;
311
+ }
312
+ .cart-item__name {
313
+ font-size: 0.8rem;
314
+ }
315
+ }
@@ -0,0 +1,30 @@
1
+ :host {
2
+ display: block;
3
+ }
4
+
5
+ .example-container {
6
+ display: flex;
7
+ min-height: 100vh;
8
+ align-items: center;
9
+ justify-content: center;
10
+ gap: 1rem;
11
+ padding: 2rem;
12
+ background-color: #f5f5f5;
13
+ }
14
+
15
+ .example-button {
16
+ padding: 0.75rem 1.5rem;
17
+ background-color: #80bb55;
18
+ color: white;
19
+ border: none;
20
+ border-radius: 6px;
21
+ cursor: pointer;
22
+ font-weight: 500;
23
+ transition: background-color 0.2s ease;
24
+ }
25
+ .example-button:hover {
26
+ background-color: #68a03b;
27
+ }
28
+ .example-button:active {
29
+ transform: translateY(1px);
30
+ }