snice 3.11.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/templates/CLAUDE.md +7 -7
- package/bin/templates/base/package.json +1 -1
- package/bin/templates/pwa/package.json +1 -1
- package/dist/components/audio-recorder/snice-audio-recorder.js +6 -6
- package/dist/components/audio-recorder/snice-audio-recorder.js.map +1 -1
- package/dist/components/banner/snice-banner.js +3 -3
- package/dist/components/banner/snice-banner.js.map +1 -1
- package/dist/components/button/snice-button.js +1 -1
- package/dist/components/calendar/snice-calendar.js +2 -2
- package/dist/components/calendar/snice-calendar.js.map +1 -1
- package/dist/components/camera/snice-camera.js +4 -4
- package/dist/components/camera/snice-camera.js.map +1 -1
- package/dist/components/carousel/snice-carousel.js +1 -1
- package/dist/components/carousel/snice-carousel.js.map +1 -1
- package/dist/components/checkbox/snice-checkbox.js +3 -3
- package/dist/components/checkbox/snice-checkbox.js.map +1 -1
- package/dist/components/color-picker/snice-color-picker.js +4 -4
- package/dist/components/color-picker/snice-color-picker.js.map +1 -1
- package/dist/components/command-palette/snice-command-palette.js +5 -5
- package/dist/components/command-palette/snice-command-palette.js.map +1 -1
- package/dist/components/date-picker/snice-date-picker.js +8 -8
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/draw/snice-draw.js +5 -5
- package/dist/components/draw/snice-draw.js.map +1 -1
- package/dist/components/drawer/snice-drawer.js +2 -2
- package/dist/components/drawer/snice-drawer.js.map +1 -1
- package/dist/components/empty-state/snice-empty-state.js +1 -1
- package/dist/components/empty-state/snice-empty-state.js.map +1 -1
- package/dist/components/file-gallery/snice-file-gallery.js +8 -8
- package/dist/components/file-gallery/snice-file-gallery.js.map +1 -1
- package/dist/components/file-upload/snice-file-upload.js +2 -2
- package/dist/components/file-upload/snice-file-upload.js.map +1 -1
- package/dist/components/input/snice-input.js +5 -5
- package/dist/components/input/snice-input.js.map +1 -1
- package/dist/components/kanban/snice-kanban.js +2 -2
- package/dist/components/kanban/snice-kanban.js.map +1 -1
- package/dist/components/location/snice-location.js +1 -1
- package/dist/components/location/snice-location.js.map +1 -1
- package/dist/components/login/snice-login.js +4 -4
- package/dist/components/login/snice-login.js.map +1 -1
- package/dist/components/menu/snice-menu-item.js +1 -1
- package/dist/components/menu/snice-menu-item.js.map +1 -1
- package/dist/components/menu/snice-menu.js +3 -3
- package/dist/components/menu/snice-menu.js.map +1 -1
- package/dist/components/modal/snice-modal.js +2 -2
- package/dist/components/modal/snice-modal.js.map +1 -1
- package/dist/components/music-player/snice-music-player.js +10 -10
- package/dist/components/music-player/snice-music-player.js.map +1 -1
- package/dist/components/pagination/snice-pagination.js +1 -1
- package/dist/components/pagination/snice-pagination.js.map +1 -1
- package/dist/components/qr-reader/snice-qr-reader.js +3 -3
- package/dist/components/qr-reader/snice-qr-reader.js.map +1 -1
- package/dist/components/radio/snice-radio.js +1 -1
- package/dist/components/radio/snice-radio.js.map +1 -1
- package/dist/components/select/snice-select.js +3 -3
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/slider/snice-slider.js +2 -2
- package/dist/components/slider/snice-slider.js.map +1 -1
- package/dist/components/split-pane/snice-split-pane.js +1 -1
- package/dist/components/split-pane/snice-split-pane.js.map +1 -1
- package/dist/components/switch/snice-switch.js +1 -1
- package/dist/components/switch/snice-switch.js.map +1 -1
- package/dist/components/table/snice-cell-actions.js +1 -1
- package/dist/components/table/snice-cell-actions.js.map +1 -1
- package/dist/components/table/snice-column.js +1 -1
- package/dist/components/table/snice-column.js.map +1 -1
- package/dist/components/table/snice-header.js +3 -3
- package/dist/components/table/snice-header.js.map +1 -1
- package/dist/components/table/snice-row.js +3 -3
- package/dist/components/table/snice-row.js.map +1 -1
- package/dist/components/table/snice-table.js +3 -3
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/tabs/snice-tab.js +2 -2
- package/dist/components/tabs/snice-tab.js.map +1 -1
- package/dist/components/tabs/snice-tabs.js +2 -2
- package/dist/components/tabs/snice-tabs.js.map +1 -1
- package/dist/components/terminal/snice-terminal.js +3 -3
- package/dist/components/terminal/snice-terminal.js.map +1 -1
- package/dist/components/textarea/snice-textarea.js +4 -4
- package/dist/components/textarea/snice-textarea.js.map +1 -1
- package/dist/components/timer/snice-timer.js +4 -4
- package/dist/components/timer/snice-timer.js.map +1 -1
- package/dist/components/tree/snice-tree-item.js +1 -1
- package/dist/components/tree/snice-tree-item.js.map +1 -1
- package/dist/components/tree/snice-tree.js +5 -5
- package/dist/components/tree/snice-tree.js.map +1 -1
- package/dist/index.cjs +7 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +7 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +7 -3
- package/dist/index.iife.js.map +1 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/components/audio-recorder.md +6 -6
- package/docs/ai/components/calendar.md +2 -2
- package/docs/ai/components/camera.md +5 -5
- package/docs/ai/components/carousel.md +1 -1
- package/docs/ai/components/color-picker.md +1 -1
- package/docs/ai/components/command-palette.md +6 -6
- package/docs/ai/components/draw.md +5 -5
- package/docs/ai/components/drawer.md +2 -2
- package/docs/ai/components/empty-state.md +1 -1
- package/docs/ai/components/file-gallery.md +3 -3
- package/docs/ai/components/file-upload.md +2 -2
- package/docs/ai/components/kanban.md +3 -3
- package/docs/ai/components/menu.md +3 -3
- package/docs/ai/components/modal.md +2 -2
- package/docs/ai/components/music-player.md +9 -9
- package/docs/ai/components/pagination.md +2 -2
- package/docs/ai/components/qr-reader.md +4 -4
- package/docs/ai/components/select.md +4 -4
- package/docs/ai/components/slider.md +1 -1
- package/docs/ai/components/split-pane.md +1 -1
- package/docs/ai/components/switch.md +2 -2
- package/docs/ai/components/tabs.md +4 -4
- package/docs/ai/components/terminal.md +1 -1
- package/docs/ai/components/timer.md +4 -4
- package/docs/ai/components/tree.md +7 -7
- package/docs/components/audio-recorder.md +7 -7
- package/docs/components/banner.md +4 -4
- package/docs/components/calendar.md +11 -11
- package/docs/components/camera.md +9 -9
- package/docs/components/carousel.md +1 -1
- package/docs/components/color-picker.md +1 -1
- package/docs/components/command-palette.md +6 -6
- package/docs/components/draw.md +6 -6
- package/docs/components/drawer.md +6 -6
- package/docs/components/empty-state.md +1 -1
- package/docs/components/file-gallery.md +18 -18
- package/docs/components/file-upload.md +7 -7
- package/docs/components/kanban.md +7 -7
- package/docs/components/menu.md +11 -11
- package/docs/components/modal.md +7 -7
- package/docs/components/music-player.md +16 -16
- package/docs/components/pagination.md +5 -5
- package/docs/components/qr-reader.md +12 -12
- package/docs/components/select.md +9 -9
- package/docs/components/slider.md +6 -6
- package/docs/components/split-pane.md +2 -2
- package/docs/components/switch.md +4 -4
- package/docs/components/tabs.md +10 -10
- package/docs/components/terminal.md +6 -6
- package/docs/components/textarea.md +7 -7
- package/docs/components/timer.md +8 -8
- package/docs/components/tree.md +9 -9
- package/package.json +1 -1
|
@@ -20,7 +20,7 @@ The `<snice-pagination>` component provides a flexible pagination interface for
|
|
|
20
20
|
import 'snice/components/pagination/snice-pagination';
|
|
21
21
|
|
|
22
22
|
const pagination = document.querySelector('snice-pagination');
|
|
23
|
-
pagination.addEventListener('
|
|
23
|
+
pagination.addEventListener('pagination-change', (e) => {
|
|
24
24
|
console.log('Page changed to:', e.detail.page);
|
|
25
25
|
});
|
|
26
26
|
```
|
|
@@ -78,7 +78,7 @@ pagination.lastPage();
|
|
|
78
78
|
|
|
79
79
|
## Events
|
|
80
80
|
|
|
81
|
-
###
|
|
81
|
+
### `pagination-change`
|
|
82
82
|
Fired when the page changes.
|
|
83
83
|
|
|
84
84
|
**Event Detail:**
|
|
@@ -91,7 +91,7 @@ Fired when the page changes.
|
|
|
91
91
|
|
|
92
92
|
**Usage:**
|
|
93
93
|
```typescript
|
|
94
|
-
pagination.addEventListener('
|
|
94
|
+
pagination.addEventListener('pagination-change', (e) => {
|
|
95
95
|
const { page, previousPage } = e.detail;
|
|
96
96
|
console.log(`Changed from page ${previousPage} to ${page}`);
|
|
97
97
|
});
|
|
@@ -194,7 +194,7 @@ pagination.lastPage();
|
|
|
194
194
|
```typescript
|
|
195
195
|
const pagination = document.querySelector('snice-pagination');
|
|
196
196
|
|
|
197
|
-
pagination.addEventListener('
|
|
197
|
+
pagination.addEventListener('pagination-change', (e) => {
|
|
198
198
|
const { page } = e.detail;
|
|
199
199
|
|
|
200
200
|
// Fetch data for the new page
|
|
@@ -258,7 +258,7 @@ async function fetchPageData(page: number) {
|
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
// Listen for page changes
|
|
261
|
-
pagination.addEventListener('
|
|
261
|
+
pagination.addEventListener('pagination-change', (e) => {
|
|
262
262
|
renderPage(e.detail.page);
|
|
263
263
|
});
|
|
264
264
|
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
<script>
|
|
20
20
|
const reader = document.querySelector('snice-qr-reader');
|
|
21
21
|
|
|
22
|
-
reader.addEventListener('
|
|
22
|
+
reader.addEventListener('qr-scan', (event) => {
|
|
23
23
|
console.log('QR Code:', event.detail.data);
|
|
24
24
|
});
|
|
25
25
|
</script>
|
|
@@ -117,7 +117,7 @@ const result = await reader.snap(); // Returns QR data or null
|
|
|
117
117
|
|
|
118
118
|
## Events
|
|
119
119
|
|
|
120
|
-
###
|
|
120
|
+
### `qr-scan`
|
|
121
121
|
Fired when a QR code is successfully detected.
|
|
122
122
|
|
|
123
123
|
**Detail Properties:**
|
|
@@ -126,13 +126,13 @@ Fired when a QR code is successfully detected.
|
|
|
126
126
|
- `reader` (SniceQRReader): Reference to the component
|
|
127
127
|
|
|
128
128
|
```javascript
|
|
129
|
-
reader.addEventListener('
|
|
129
|
+
reader.addEventListener('qr-scan', (event) => {
|
|
130
130
|
console.log('Data:', event.detail.data);
|
|
131
131
|
console.log('Time:', new Date(event.detail.timestamp));
|
|
132
132
|
});
|
|
133
133
|
```
|
|
134
134
|
|
|
135
|
-
###
|
|
135
|
+
### `qr-error`
|
|
136
136
|
Fired when an error occurs during scanning.
|
|
137
137
|
|
|
138
138
|
**Detail Properties:**
|
|
@@ -140,7 +140,7 @@ Fired when an error occurs during scanning.
|
|
|
140
140
|
- `reader` (SniceQRReader): Reference to the component
|
|
141
141
|
|
|
142
142
|
```javascript
|
|
143
|
-
reader.addEventListener('
|
|
143
|
+
reader.addEventListener('qr-error', (event) => {
|
|
144
144
|
console.error('Error:', event.detail.error);
|
|
145
145
|
});
|
|
146
146
|
```
|
|
@@ -157,7 +157,7 @@ reader.addEventListener('@snice/camera-ready', (event) => {
|
|
|
157
157
|
});
|
|
158
158
|
```
|
|
159
159
|
|
|
160
|
-
###
|
|
160
|
+
### `camera-error`
|
|
161
161
|
Fired when camera initialization fails.
|
|
162
162
|
|
|
163
163
|
**Detail Properties:**
|
|
@@ -165,7 +165,7 @@ Fired when camera initialization fails.
|
|
|
165
165
|
- `reader` (SniceQRReader): Reference to the component
|
|
166
166
|
|
|
167
167
|
```javascript
|
|
168
|
-
reader.addEventListener('
|
|
168
|
+
reader.addEventListener('camera-error', (event) => {
|
|
169
169
|
console.error('Camera error:', event.detail.error);
|
|
170
170
|
});
|
|
171
171
|
```
|
|
@@ -192,7 +192,7 @@ reader.addEventListener('@snice/camera-error', (event) => {
|
|
|
192
192
|
reader.stop();
|
|
193
193
|
}
|
|
194
194
|
|
|
195
|
-
reader.addEventListener('
|
|
195
|
+
reader.addEventListener('qr-scan', (e) => {
|
|
196
196
|
result.textContent = `Scanned: ${e.detail.data}`;
|
|
197
197
|
});
|
|
198
198
|
</script>
|
|
@@ -206,7 +206,7 @@ reader.addEventListener('@snice/camera-error', (event) => {
|
|
|
206
206
|
<script>
|
|
207
207
|
const scanner = document.getElementById('scanner');
|
|
208
208
|
|
|
209
|
-
scanner.addEventListener('
|
|
209
|
+
scanner.addEventListener('qr-scan', (e) => {
|
|
210
210
|
// Process the scan
|
|
211
211
|
processQRCode(e.detail.data);
|
|
212
212
|
|
|
@@ -251,7 +251,7 @@ reader.addEventListener('@snice/camera-error', (event) => {
|
|
|
251
251
|
<script>
|
|
252
252
|
// Useful for self-scanning scenarios
|
|
253
253
|
document.querySelector('snice-qr-reader')
|
|
254
|
-
.addEventListener('
|
|
254
|
+
.addEventListener('qr-scan', (e) => {
|
|
255
255
|
validateTicket(e.detail.data);
|
|
256
256
|
});
|
|
257
257
|
</script>
|
|
@@ -267,12 +267,12 @@ reader.addEventListener('@snice/camera-error', (event) => {
|
|
|
267
267
|
const reader = document.getElementById('reader');
|
|
268
268
|
const status = document.getElementById('status');
|
|
269
269
|
|
|
270
|
-
reader.addEventListener('
|
|
270
|
+
reader.addEventListener('qr-scan', (e) => {
|
|
271
271
|
status.textContent = `✓ Scanned: ${e.detail.data}`;
|
|
272
272
|
status.style.color = 'green';
|
|
273
273
|
});
|
|
274
274
|
|
|
275
|
-
reader.addEventListener('
|
|
275
|
+
reader.addEventListener('qr-error', (e) => {
|
|
276
276
|
status.textContent = `✗ Error: ${e.detail.error}`;
|
|
277
277
|
status.style.color = 'red';
|
|
278
278
|
|
|
@@ -28,7 +28,7 @@ import 'snice/components/select/snice-select';
|
|
|
28
28
|
import 'snice/components/select/snice-option';
|
|
29
29
|
|
|
30
30
|
const select = document.querySelector('snice-select');
|
|
31
|
-
select.addEventListener('
|
|
31
|
+
select.addEventListener('select-change', (e) => {
|
|
32
32
|
console.log('Selected:', e.detail.value);
|
|
33
33
|
});
|
|
34
34
|
```
|
|
@@ -111,7 +111,7 @@ select.blur();
|
|
|
111
111
|
|
|
112
112
|
#### Events
|
|
113
113
|
|
|
114
|
-
#####
|
|
114
|
+
##### `select-change`
|
|
115
115
|
Fired when the selection changes.
|
|
116
116
|
|
|
117
117
|
**Event Detail:**
|
|
@@ -125,13 +125,13 @@ Fired when the selection changes.
|
|
|
125
125
|
|
|
126
126
|
**Usage:**
|
|
127
127
|
```typescript
|
|
128
|
-
select.addEventListener('
|
|
128
|
+
select.addEventListener('select-change', (e) => {
|
|
129
129
|
const { value, option } = e.detail;
|
|
130
130
|
console.log(`Selected ${option?.label} with value ${value}`);
|
|
131
131
|
});
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
-
#####
|
|
134
|
+
##### `select-open`
|
|
135
135
|
Fired when the dropdown opens.
|
|
136
136
|
|
|
137
137
|
**Event Detail:**
|
|
@@ -141,7 +141,7 @@ Fired when the dropdown opens.
|
|
|
141
141
|
}
|
|
142
142
|
```
|
|
143
143
|
|
|
144
|
-
#####
|
|
144
|
+
##### `select-close`
|
|
145
145
|
Fired when the dropdown closes.
|
|
146
146
|
|
|
147
147
|
**Event Detail:**
|
|
@@ -348,7 +348,7 @@ select.value = 'banana';
|
|
|
348
348
|
```typescript
|
|
349
349
|
const select = document.querySelector('snice-select');
|
|
350
350
|
|
|
351
|
-
select.addEventListener('
|
|
351
|
+
select.addEventListener('select-change', (e) => {
|
|
352
352
|
const { value, option } = e.detail;
|
|
353
353
|
|
|
354
354
|
if (option) {
|
|
@@ -359,11 +359,11 @@ select.addEventListener('@snice/select-change', (e) => {
|
|
|
359
359
|
updateDependentFields(value);
|
|
360
360
|
});
|
|
361
361
|
|
|
362
|
-
select.addEventListener('
|
|
362
|
+
select.addEventListener('select-open', () => {
|
|
363
363
|
console.log('Dropdown opened');
|
|
364
364
|
});
|
|
365
365
|
|
|
366
|
-
select.addEventListener('
|
|
366
|
+
select.addEventListener('select-close', () => {
|
|
367
367
|
console.log('Dropdown closed');
|
|
368
368
|
});
|
|
369
369
|
```
|
|
@@ -501,7 +501,7 @@ Selected options will display as removable tags. Click the × on a tag to remove
|
|
|
501
501
|
import 'snice/components/select/snice-option';
|
|
502
502
|
|
|
503
503
|
// Handle select changes
|
|
504
|
-
document.addEventListener('
|
|
504
|
+
document.addEventListener('select-change', (e) => {
|
|
505
505
|
console.log('Selection changed:', e.detail);
|
|
506
506
|
});
|
|
507
507
|
</script>
|
|
@@ -27,7 +27,7 @@ The `<snice-slider>` component provides an interactive range slider for selectin
|
|
|
27
27
|
import 'snice/components/slider/snice-slider';
|
|
28
28
|
|
|
29
29
|
const slider = document.querySelector('snice-slider');
|
|
30
|
-
slider.addEventListener('
|
|
30
|
+
slider.addEventListener('slider-change', (e) => {
|
|
31
31
|
console.log('Value:', e.detail.value);
|
|
32
32
|
});
|
|
33
33
|
```
|
|
@@ -93,24 +93,24 @@ slider.setCustomValidity('Value must be between 10 and 90');
|
|
|
93
93
|
|
|
94
94
|
## Events
|
|
95
95
|
|
|
96
|
-
###
|
|
96
|
+
### `slider-input`
|
|
97
97
|
Fired continuously while dragging the slider.
|
|
98
98
|
|
|
99
99
|
**Detail**: `{ value: number, slider: SniceSliderElement }`
|
|
100
100
|
|
|
101
101
|
```typescript
|
|
102
|
-
slider.addEventListener('
|
|
102
|
+
slider.addEventListener('slider-input', (e) => {
|
|
103
103
|
console.log('Current value:', e.detail.value);
|
|
104
104
|
});
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
###
|
|
107
|
+
### `slider-change`
|
|
108
108
|
Fired when the slider value is committed (after drag ends or keyboard input).
|
|
109
109
|
|
|
110
110
|
**Detail**: `{ value: number, slider: SniceSliderElement }`
|
|
111
111
|
|
|
112
112
|
```typescript
|
|
113
|
-
slider.addEventListener('
|
|
113
|
+
slider.addEventListener('slider-change', (e) => {
|
|
114
114
|
console.log('Final value:', e.detail.value);
|
|
115
115
|
});
|
|
116
116
|
```
|
|
@@ -290,7 +290,7 @@ document.getElementById('settings-form').addEventListener('submit', (e) => {
|
|
|
290
290
|
const slider = document.getElementById('volume-slider');
|
|
291
291
|
const display = document.getElementById('volume-display');
|
|
292
292
|
|
|
293
|
-
slider.addEventListener('
|
|
293
|
+
slider.addEventListener('slider-input', (e) => {
|
|
294
294
|
display.textContent = `Volume: ${e.detail.value}`;
|
|
295
295
|
});
|
|
296
296
|
</script>
|
|
@@ -54,11 +54,11 @@ splitPane.reset();
|
|
|
54
54
|
|
|
55
55
|
## Events
|
|
56
56
|
|
|
57
|
-
###
|
|
57
|
+
### `pane-resize`
|
|
58
58
|
Dispatched when pane is resized.
|
|
59
59
|
|
|
60
60
|
```javascript
|
|
61
|
-
splitPane.addEventListener('
|
|
61
|
+
splitPane.addEventListener('pane-resize', (e) => {
|
|
62
62
|
console.log('Primary:', e.detail.primarySize);
|
|
63
63
|
console.log('Secondary:', e.detail.secondarySize);
|
|
64
64
|
});
|
|
@@ -20,7 +20,7 @@ The `<snice-switch>` component provides a toggle switch input for boolean select
|
|
|
20
20
|
import 'snice/components/switch/snice-switch';
|
|
21
21
|
|
|
22
22
|
const switchEl = document.querySelector('snice-switch');
|
|
23
|
-
switchEl.addEventListener('
|
|
23
|
+
switchEl.addEventListener('switch-change', (e) => {
|
|
24
24
|
console.log('Switch is now:', e.detail.checked);
|
|
25
25
|
});
|
|
26
26
|
```
|
|
@@ -72,7 +72,7 @@ switchEl.click();
|
|
|
72
72
|
|
|
73
73
|
## Events
|
|
74
74
|
|
|
75
|
-
###
|
|
75
|
+
### `switch-change`
|
|
76
76
|
Fired when the switch state changes.
|
|
77
77
|
|
|
78
78
|
**Event Detail:**
|
|
@@ -85,7 +85,7 @@ Fired when the switch state changes.
|
|
|
85
85
|
|
|
86
86
|
**Usage:**
|
|
87
87
|
```typescript
|
|
88
|
-
switchEl.addEventListener('
|
|
88
|
+
switchEl.addEventListener('switch-change', (e) => {
|
|
89
89
|
const { checked } = e.detail;
|
|
90
90
|
console.log(`Switch is ${checked ? 'on' : 'off'}`);
|
|
91
91
|
});
|
|
@@ -199,7 +199,7 @@ switchEl.disabled = true;
|
|
|
199
199
|
```typescript
|
|
200
200
|
const switchEl = document.querySelector('snice-switch');
|
|
201
201
|
|
|
202
|
-
switchEl.addEventListener('
|
|
202
|
+
switchEl.addEventListener('switch-change', (e) => {
|
|
203
203
|
const { checked, switch: sw } = e.detail;
|
|
204
204
|
|
|
205
205
|
if (checked) {
|
package/docs/components/tabs.md
CHANGED
|
@@ -34,7 +34,7 @@ import 'snice/components/tabs/snice-tab';
|
|
|
34
34
|
import 'snice/components/tabs/snice-tab-panel';
|
|
35
35
|
|
|
36
36
|
const tabs = document.querySelector('snice-tabs');
|
|
37
|
-
tabs.addEventListener('
|
|
37
|
+
tabs.addEventListener('tab-change', (e) => {
|
|
38
38
|
console.log('Tab changed to:', e.detail.index);
|
|
39
39
|
});
|
|
40
40
|
```
|
|
@@ -86,7 +86,7 @@ const panel = tabs.getPanel(0);
|
|
|
86
86
|
|
|
87
87
|
#### Events
|
|
88
88
|
|
|
89
|
-
#####
|
|
89
|
+
##### `tab-change`
|
|
90
90
|
Fired when the active tab changes.
|
|
91
91
|
|
|
92
92
|
**Event Detail:**
|
|
@@ -101,7 +101,7 @@ Fired when the active tab changes.
|
|
|
101
101
|
|
|
102
102
|
**Usage:**
|
|
103
103
|
```typescript
|
|
104
|
-
tabs.addEventListener('
|
|
104
|
+
tabs.addEventListener('tab-change', (e) => {
|
|
105
105
|
const { index, oldIndex, tab, panel } = e.detail;
|
|
106
106
|
console.log(`Changed from tab ${oldIndex} to ${index}`);
|
|
107
107
|
});
|
|
@@ -136,7 +136,7 @@ tab.blur();
|
|
|
136
136
|
|
|
137
137
|
#### Events
|
|
138
138
|
|
|
139
|
-
#####
|
|
139
|
+
##### `tab-select`
|
|
140
140
|
Fired when the tab is clicked (bubbles to parent tabs container).
|
|
141
141
|
|
|
142
142
|
**Event Detail:**
|
|
@@ -146,7 +146,7 @@ Fired when the tab is clicked (bubbles to parent tabs container).
|
|
|
146
146
|
}
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
#####
|
|
149
|
+
##### `tab-close`
|
|
150
150
|
Fired when the close button is clicked (only if `closable` is true).
|
|
151
151
|
|
|
152
152
|
**Event Detail:**
|
|
@@ -216,7 +216,7 @@ Control where the tab navigation appears relative to the content.
|
|
|
216
216
|
|
|
217
217
|
const tabs = document.querySelectorAll('snice-tab');
|
|
218
218
|
tabs.forEach(tab => {
|
|
219
|
-
tab.addEventListener('
|
|
219
|
+
tab.addEventListener('tab-close', (e) => {
|
|
220
220
|
console.log('Tab closed:', e.detail.tab);
|
|
221
221
|
// Handle tab removal
|
|
222
222
|
});
|
|
@@ -302,7 +302,7 @@ const panel = tabs.getPanel(0);
|
|
|
302
302
|
```typescript
|
|
303
303
|
const tabs = document.querySelector('snice-tabs');
|
|
304
304
|
|
|
305
|
-
tabs.addEventListener('
|
|
305
|
+
tabs.addEventListener('tab-change', (e) => {
|
|
306
306
|
const { index, oldIndex, tab, panel } = e.detail;
|
|
307
307
|
|
|
308
308
|
// Load content dynamically
|
|
@@ -349,7 +349,7 @@ async function loadPanelContent(index: number, panel: HTMLElement) {
|
|
|
349
349
|
tabs.appendChild(panel);
|
|
350
350
|
|
|
351
351
|
// Handle close
|
|
352
|
-
tab.addEventListener('
|
|
352
|
+
tab.addEventListener('tab-close', () => {
|
|
353
353
|
const index = Array.from(tabs.querySelectorAll('snice-tab')).indexOf(tab);
|
|
354
354
|
const panelToRemove = tabs.querySelectorAll('snice-tab-panel')[index];
|
|
355
355
|
|
|
@@ -461,13 +461,13 @@ async function loadPanelContent(index: number, panel: HTMLElement) {
|
|
|
461
461
|
const tabs = document.querySelector('snice-tabs');
|
|
462
462
|
|
|
463
463
|
// Handle tab changes
|
|
464
|
-
tabs.addEventListener('
|
|
464
|
+
tabs.addEventListener('tab-change', (e) => {
|
|
465
465
|
console.log('Active tab:', e.detail.index);
|
|
466
466
|
});
|
|
467
467
|
|
|
468
468
|
// Handle tab close
|
|
469
469
|
document.querySelectorAll('snice-tab[closable]').forEach(tab => {
|
|
470
|
-
tab.addEventListener('
|
|
470
|
+
tab.addEventListener('tab-close', (e) => {
|
|
471
471
|
if (confirm('Close this tab?')) {
|
|
472
472
|
const index = Array.from(tabs.querySelectorAll('snice-tab')).indexOf(e.detail.tab);
|
|
473
473
|
const panel = tabs.querySelectorAll('snice-tab-panel')[index];
|
|
@@ -115,12 +115,12 @@ terminal.clearHistory();
|
|
|
115
115
|
|
|
116
116
|
## Events
|
|
117
117
|
|
|
118
|
-
###
|
|
118
|
+
### `terminal-command`
|
|
119
119
|
|
|
120
120
|
Emitted when a command is entered.
|
|
121
121
|
|
|
122
122
|
```javascript
|
|
123
|
-
terminal.addEventListener('
|
|
123
|
+
terminal.addEventListener('terminal-command', (e) => {
|
|
124
124
|
console.log('Command:', e.detail.command);
|
|
125
125
|
console.log('Args:', e.detail.args);
|
|
126
126
|
});
|
|
@@ -130,22 +130,22 @@ terminal.addEventListener('@snice/terminal-command', (e) => {
|
|
|
130
130
|
- `command: string` - The command name
|
|
131
131
|
- `args: string[]` - Command arguments
|
|
132
132
|
|
|
133
|
-
###
|
|
133
|
+
### `terminal-clear`
|
|
134
134
|
|
|
135
135
|
Emitted when the terminal is cleared.
|
|
136
136
|
|
|
137
137
|
```javascript
|
|
138
|
-
terminal.addEventListener('
|
|
138
|
+
terminal.addEventListener('terminal-clear', () => {
|
|
139
139
|
console.log('Terminal was cleared');
|
|
140
140
|
});
|
|
141
141
|
```
|
|
142
142
|
|
|
143
|
-
###
|
|
143
|
+
### `terminal-ready`
|
|
144
144
|
|
|
145
145
|
Emitted when the terminal is ready.
|
|
146
146
|
|
|
147
147
|
```javascript
|
|
148
|
-
terminal.addEventListener('
|
|
148
|
+
terminal.addEventListener('terminal-ready', () => {
|
|
149
149
|
console.log('Terminal is ready');
|
|
150
150
|
});
|
|
151
151
|
```
|
|
@@ -24,7 +24,7 @@ The `<snice-textarea>` component provides a multi-line text input with validatio
|
|
|
24
24
|
import 'snice/components/textarea/snice-textarea';
|
|
25
25
|
|
|
26
26
|
const textarea = document.querySelector('snice-textarea');
|
|
27
|
-
textarea.addEventListener('
|
|
27
|
+
textarea.addEventListener('textarea-change', (e) => {
|
|
28
28
|
console.log('Value:', e.detail.value);
|
|
29
29
|
});
|
|
30
30
|
```
|
|
@@ -99,34 +99,34 @@ textarea.setCustomValidity('This field is required');
|
|
|
99
99
|
|
|
100
100
|
## Events
|
|
101
101
|
|
|
102
|
-
###
|
|
102
|
+
### `textarea-input`
|
|
103
103
|
Fired when the textarea value changes during input.
|
|
104
104
|
|
|
105
105
|
**Detail**: `{ value: string, textarea: SniceTextareaElement }`
|
|
106
106
|
|
|
107
107
|
```typescript
|
|
108
|
-
textarea.addEventListener('
|
|
108
|
+
textarea.addEventListener('textarea-input', (e) => {
|
|
109
109
|
console.log('Input value:', e.detail.value);
|
|
110
110
|
});
|
|
111
111
|
```
|
|
112
112
|
|
|
113
|
-
###
|
|
113
|
+
### `textarea-change`
|
|
114
114
|
Fired when the textarea value is committed (blur or enter).
|
|
115
115
|
|
|
116
116
|
**Detail**: `{ value: string, textarea: SniceTextareaElement }`
|
|
117
117
|
|
|
118
118
|
```typescript
|
|
119
|
-
textarea.addEventListener('
|
|
119
|
+
textarea.addEventListener('textarea-change', (e) => {
|
|
120
120
|
console.log('Changed to:', e.detail.value);
|
|
121
121
|
});
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
###
|
|
124
|
+
### `textarea-focus`
|
|
125
125
|
Fired when the textarea receives focus.
|
|
126
126
|
|
|
127
127
|
**Detail**: `{ textarea: SniceTextareaElement }`
|
|
128
128
|
|
|
129
|
-
###
|
|
129
|
+
### `textarea-blur`
|
|
130
130
|
Fired when the textarea loses focus.
|
|
131
131
|
|
|
132
132
|
**Detail**: `{ textarea: SniceTextareaElement }`
|
package/docs/components/timer.md
CHANGED
|
@@ -33,10 +33,10 @@ The `<snice-timer>` component provides a stopwatch and countdown timer.
|
|
|
33
33
|
|
|
34
34
|
| Event | Detail | Description |
|
|
35
35
|
|-------|--------|-------------|
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
36
|
+
| `timer-start` | `{ timer, time }` | Timer started |
|
|
37
|
+
| `timer-stop` | `{ timer, time }` | Timer stopped |
|
|
38
|
+
| `timer-reset` | `{ timer, time }` | Timer reset |
|
|
39
|
+
| `timer-complete` | `{ timer }` | Countdown completed (timer mode only) |
|
|
40
40
|
|
|
41
41
|
## Examples
|
|
42
42
|
|
|
@@ -63,7 +63,7 @@ The `<snice-timer>` component provides a stopwatch and countdown timer.
|
|
|
63
63
|
<script>
|
|
64
64
|
const timer = document.getElementById('timer');
|
|
65
65
|
|
|
66
|
-
timer.addEventListener('
|
|
66
|
+
timer.addEventListener('timer-complete', () => {
|
|
67
67
|
console.log('Time is up!');
|
|
68
68
|
});
|
|
69
69
|
|
|
@@ -83,11 +83,11 @@ The `<snice-timer>` component provides a stopwatch and countdown timer.
|
|
|
83
83
|
<script>
|
|
84
84
|
const timer = document.getElementById('my-timer');
|
|
85
85
|
|
|
86
|
-
timer.addEventListener('
|
|
86
|
+
timer.addEventListener('timer-start', (e) => {
|
|
87
87
|
console.log('Timer started at', e.detail.time);
|
|
88
88
|
});
|
|
89
89
|
|
|
90
|
-
timer.addEventListener('
|
|
90
|
+
timer.addEventListener('timer-stop', (e) => {
|
|
91
91
|
console.log('Timer stopped at', e.detail.time);
|
|
92
92
|
});
|
|
93
93
|
</script>
|
|
@@ -101,7 +101,7 @@ The `<snice-timer>` component provides a stopwatch and countdown timer.
|
|
|
101
101
|
<script>
|
|
102
102
|
const workout = document.getElementById('workout');
|
|
103
103
|
|
|
104
|
-
workout.addEventListener('
|
|
104
|
+
workout.addEventListener('timer-complete', () => {
|
|
105
105
|
alert('Rest time!');
|
|
106
106
|
// Start rest period
|
|
107
107
|
workout.initialTime = 15;
|
package/docs/components/tree.md
CHANGED
|
@@ -161,7 +161,7 @@ console.log(checked.map(n => n.label));
|
|
|
161
161
|
|
|
162
162
|
## Events
|
|
163
163
|
|
|
164
|
-
###
|
|
164
|
+
### `tree-node-expand`
|
|
165
165
|
Fired when a node is expanded.
|
|
166
166
|
|
|
167
167
|
**Event Detail:**
|
|
@@ -173,7 +173,7 @@ Fired when a node is expanded.
|
|
|
173
173
|
}
|
|
174
174
|
```
|
|
175
175
|
|
|
176
|
-
###
|
|
176
|
+
### `tree-node-collapse`
|
|
177
177
|
Fired when a node is collapsed.
|
|
178
178
|
|
|
179
179
|
**Event Detail:**
|
|
@@ -185,7 +185,7 @@ Fired when a node is collapsed.
|
|
|
185
185
|
}
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
-
###
|
|
188
|
+
### `tree-node-select`
|
|
189
189
|
Fired when a node is selected.
|
|
190
190
|
|
|
191
191
|
**Event Detail:**
|
|
@@ -198,7 +198,7 @@ Fired when a node is selected.
|
|
|
198
198
|
}
|
|
199
199
|
```
|
|
200
200
|
|
|
201
|
-
###
|
|
201
|
+
### `tree-node-check`
|
|
202
202
|
Fired when a node checkbox is toggled.
|
|
203
203
|
|
|
204
204
|
**Event Detail:**
|
|
@@ -212,7 +212,7 @@ Fired when a node checkbox is toggled.
|
|
|
212
212
|
}
|
|
213
213
|
```
|
|
214
214
|
|
|
215
|
-
###
|
|
215
|
+
### `tree-node-lazy-load`
|
|
216
216
|
Fired when a lazy-loading node is expanded.
|
|
217
217
|
|
|
218
218
|
**Event Detail:**
|
|
@@ -289,7 +289,7 @@ interface TreeNode {
|
|
|
289
289
|
{ id: '3', label: 'Item 3' }
|
|
290
290
|
];
|
|
291
291
|
|
|
292
|
-
tree.addEventListener('
|
|
292
|
+
tree.addEventListener('tree-node-select', (e) => {
|
|
293
293
|
console.log('Selected:', e.detail.node.label);
|
|
294
294
|
});
|
|
295
295
|
</script>
|
|
@@ -308,7 +308,7 @@ interface TreeNode {
|
|
|
308
308
|
{ id: '3', label: 'Item 3' }
|
|
309
309
|
];
|
|
310
310
|
|
|
311
|
-
tree.addEventListener('
|
|
311
|
+
tree.addEventListener('tree-node-select', (e) => {
|
|
312
312
|
console.log('Selected nodes:', e.detail.selectedNodes.map(n => n.label));
|
|
313
313
|
});
|
|
314
314
|
</script>
|
|
@@ -333,7 +333,7 @@ interface TreeNode {
|
|
|
333
333
|
}
|
|
334
334
|
];
|
|
335
335
|
|
|
336
|
-
tree.addEventListener('
|
|
336
|
+
tree.addEventListener('tree-node-check', (e) => {
|
|
337
337
|
console.log('Checked nodes:', e.detail.checkedNodes.map(n => n.label));
|
|
338
338
|
});
|
|
339
339
|
</script>
|
|
@@ -356,7 +356,7 @@ interface TreeNode {
|
|
|
356
356
|
}
|
|
357
357
|
];
|
|
358
358
|
|
|
359
|
-
tree.addEventListener('
|
|
359
|
+
tree.addEventListener('tree-node-lazy-load', async (e) => {
|
|
360
360
|
const node = e.detail.node;
|
|
361
361
|
|
|
362
362
|
// Simulate async data loading
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "snice",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.",
|
|
6
6
|
"main": "dist/index.cjs",
|