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.
Files changed (149) hide show
  1. package/bin/templates/CLAUDE.md +7 -7
  2. package/bin/templates/base/package.json +1 -1
  3. package/bin/templates/pwa/package.json +1 -1
  4. package/dist/components/audio-recorder/snice-audio-recorder.js +6 -6
  5. package/dist/components/audio-recorder/snice-audio-recorder.js.map +1 -1
  6. package/dist/components/banner/snice-banner.js +3 -3
  7. package/dist/components/banner/snice-banner.js.map +1 -1
  8. package/dist/components/button/snice-button.js +1 -1
  9. package/dist/components/calendar/snice-calendar.js +2 -2
  10. package/dist/components/calendar/snice-calendar.js.map +1 -1
  11. package/dist/components/camera/snice-camera.js +4 -4
  12. package/dist/components/camera/snice-camera.js.map +1 -1
  13. package/dist/components/carousel/snice-carousel.js +1 -1
  14. package/dist/components/carousel/snice-carousel.js.map +1 -1
  15. package/dist/components/checkbox/snice-checkbox.js +3 -3
  16. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  17. package/dist/components/color-picker/snice-color-picker.js +4 -4
  18. package/dist/components/color-picker/snice-color-picker.js.map +1 -1
  19. package/dist/components/command-palette/snice-command-palette.js +5 -5
  20. package/dist/components/command-palette/snice-command-palette.js.map +1 -1
  21. package/dist/components/date-picker/snice-date-picker.js +8 -8
  22. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  23. package/dist/components/draw/snice-draw.js +5 -5
  24. package/dist/components/draw/snice-draw.js.map +1 -1
  25. package/dist/components/drawer/snice-drawer.js +2 -2
  26. package/dist/components/drawer/snice-drawer.js.map +1 -1
  27. package/dist/components/empty-state/snice-empty-state.js +1 -1
  28. package/dist/components/empty-state/snice-empty-state.js.map +1 -1
  29. package/dist/components/file-gallery/snice-file-gallery.js +8 -8
  30. package/dist/components/file-gallery/snice-file-gallery.js.map +1 -1
  31. package/dist/components/file-upload/snice-file-upload.js +2 -2
  32. package/dist/components/file-upload/snice-file-upload.js.map +1 -1
  33. package/dist/components/input/snice-input.js +5 -5
  34. package/dist/components/input/snice-input.js.map +1 -1
  35. package/dist/components/kanban/snice-kanban.js +2 -2
  36. package/dist/components/kanban/snice-kanban.js.map +1 -1
  37. package/dist/components/location/snice-location.js +1 -1
  38. package/dist/components/location/snice-location.js.map +1 -1
  39. package/dist/components/login/snice-login.js +4 -4
  40. package/dist/components/login/snice-login.js.map +1 -1
  41. package/dist/components/menu/snice-menu-item.js +1 -1
  42. package/dist/components/menu/snice-menu-item.js.map +1 -1
  43. package/dist/components/menu/snice-menu.js +3 -3
  44. package/dist/components/menu/snice-menu.js.map +1 -1
  45. package/dist/components/modal/snice-modal.js +2 -2
  46. package/dist/components/modal/snice-modal.js.map +1 -1
  47. package/dist/components/music-player/snice-music-player.js +10 -10
  48. package/dist/components/music-player/snice-music-player.js.map +1 -1
  49. package/dist/components/pagination/snice-pagination.js +1 -1
  50. package/dist/components/pagination/snice-pagination.js.map +1 -1
  51. package/dist/components/qr-reader/snice-qr-reader.js +3 -3
  52. package/dist/components/qr-reader/snice-qr-reader.js.map +1 -1
  53. package/dist/components/radio/snice-radio.js +1 -1
  54. package/dist/components/radio/snice-radio.js.map +1 -1
  55. package/dist/components/select/snice-select.js +3 -3
  56. package/dist/components/select/snice-select.js.map +1 -1
  57. package/dist/components/slider/snice-slider.js +2 -2
  58. package/dist/components/slider/snice-slider.js.map +1 -1
  59. package/dist/components/split-pane/snice-split-pane.js +1 -1
  60. package/dist/components/split-pane/snice-split-pane.js.map +1 -1
  61. package/dist/components/switch/snice-switch.js +1 -1
  62. package/dist/components/switch/snice-switch.js.map +1 -1
  63. package/dist/components/table/snice-cell-actions.js +1 -1
  64. package/dist/components/table/snice-cell-actions.js.map +1 -1
  65. package/dist/components/table/snice-column.js +1 -1
  66. package/dist/components/table/snice-column.js.map +1 -1
  67. package/dist/components/table/snice-header.js +3 -3
  68. package/dist/components/table/snice-header.js.map +1 -1
  69. package/dist/components/table/snice-row.js +3 -3
  70. package/dist/components/table/snice-row.js.map +1 -1
  71. package/dist/components/table/snice-table.js +3 -3
  72. package/dist/components/table/snice-table.js.map +1 -1
  73. package/dist/components/tabs/snice-tab.js +2 -2
  74. package/dist/components/tabs/snice-tab.js.map +1 -1
  75. package/dist/components/tabs/snice-tabs.js +2 -2
  76. package/dist/components/tabs/snice-tabs.js.map +1 -1
  77. package/dist/components/terminal/snice-terminal.js +3 -3
  78. package/dist/components/terminal/snice-terminal.js.map +1 -1
  79. package/dist/components/textarea/snice-textarea.js +4 -4
  80. package/dist/components/textarea/snice-textarea.js.map +1 -1
  81. package/dist/components/timer/snice-timer.js +4 -4
  82. package/dist/components/timer/snice-timer.js.map +1 -1
  83. package/dist/components/tree/snice-tree-item.js +1 -1
  84. package/dist/components/tree/snice-tree-item.js.map +1 -1
  85. package/dist/components/tree/snice-tree.js +5 -5
  86. package/dist/components/tree/snice-tree.js.map +1 -1
  87. package/dist/index.cjs +7 -3
  88. package/dist/index.cjs.map +1 -1
  89. package/dist/index.esm.js +7 -3
  90. package/dist/index.esm.js.map +1 -1
  91. package/dist/index.iife.js +7 -3
  92. package/dist/index.iife.js.map +1 -1
  93. package/dist/symbols.cjs +1 -1
  94. package/dist/symbols.esm.js +1 -1
  95. package/dist/transitions.cjs +1 -1
  96. package/dist/transitions.esm.js +1 -1
  97. package/docs/ai/components/audio-recorder.md +6 -6
  98. package/docs/ai/components/calendar.md +2 -2
  99. package/docs/ai/components/camera.md +5 -5
  100. package/docs/ai/components/carousel.md +1 -1
  101. package/docs/ai/components/color-picker.md +1 -1
  102. package/docs/ai/components/command-palette.md +6 -6
  103. package/docs/ai/components/draw.md +5 -5
  104. package/docs/ai/components/drawer.md +2 -2
  105. package/docs/ai/components/empty-state.md +1 -1
  106. package/docs/ai/components/file-gallery.md +3 -3
  107. package/docs/ai/components/file-upload.md +2 -2
  108. package/docs/ai/components/kanban.md +3 -3
  109. package/docs/ai/components/menu.md +3 -3
  110. package/docs/ai/components/modal.md +2 -2
  111. package/docs/ai/components/music-player.md +9 -9
  112. package/docs/ai/components/pagination.md +2 -2
  113. package/docs/ai/components/qr-reader.md +4 -4
  114. package/docs/ai/components/select.md +4 -4
  115. package/docs/ai/components/slider.md +1 -1
  116. package/docs/ai/components/split-pane.md +1 -1
  117. package/docs/ai/components/switch.md +2 -2
  118. package/docs/ai/components/tabs.md +4 -4
  119. package/docs/ai/components/terminal.md +1 -1
  120. package/docs/ai/components/timer.md +4 -4
  121. package/docs/ai/components/tree.md +7 -7
  122. package/docs/components/audio-recorder.md +7 -7
  123. package/docs/components/banner.md +4 -4
  124. package/docs/components/calendar.md +11 -11
  125. package/docs/components/camera.md +9 -9
  126. package/docs/components/carousel.md +1 -1
  127. package/docs/components/color-picker.md +1 -1
  128. package/docs/components/command-palette.md +6 -6
  129. package/docs/components/draw.md +6 -6
  130. package/docs/components/drawer.md +6 -6
  131. package/docs/components/empty-state.md +1 -1
  132. package/docs/components/file-gallery.md +18 -18
  133. package/docs/components/file-upload.md +7 -7
  134. package/docs/components/kanban.md +7 -7
  135. package/docs/components/menu.md +11 -11
  136. package/docs/components/modal.md +7 -7
  137. package/docs/components/music-player.md +16 -16
  138. package/docs/components/pagination.md +5 -5
  139. package/docs/components/qr-reader.md +12 -12
  140. package/docs/components/select.md +9 -9
  141. package/docs/components/slider.md +6 -6
  142. package/docs/components/split-pane.md +2 -2
  143. package/docs/components/switch.md +4 -4
  144. package/docs/components/tabs.md +10 -10
  145. package/docs/components/terminal.md +6 -6
  146. package/docs/components/textarea.md +7 -7
  147. package/docs/components/timer.md +8 -8
  148. package/docs/components/tree.md +9 -9
  149. 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('@snice/pagination-change', (e) => {
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
- ### `@snice/pagination-change`
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('@snice/pagination-change', (e) => {
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('@snice/pagination-change', (e) => {
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('@snice/pagination-change', (e) => {
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('@snice/qr-scan', (event) => {
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
- ### `@snice/qr-scan`
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('@snice/qr-scan', (event) => {
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
- ### `@snice/qr-error`
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('@snice/qr-error', (event) => {
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
- ### `@snice/camera-error`
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('@snice/camera-error', (event) => {
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('@snice/qr-scan', (e) => {
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('@snice/qr-scan', (e) => {
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('@snice/qr-scan', (e) => {
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('@snice/qr-scan', (e) => {
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('@snice/qr-error', (e) => {
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('@snice/select-change', (e) => {
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
- ##### `@snice/select-change`
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('@snice/select-change', (e) => {
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
- ##### `@snice/select-open`
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
- ##### `@snice/select-close`
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('@snice/select-change', (e) => {
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('@snice/select-open', () => {
362
+ select.addEventListener('select-open', () => {
363
363
  console.log('Dropdown opened');
364
364
  });
365
365
 
366
- select.addEventListener('@snice/select-close', () => {
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('@snice/select-change', (e) => {
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('@snice/slider-change', (e) => {
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
- ### `@snice/slider-input`
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('@snice/slider-input', (e) => {
102
+ slider.addEventListener('slider-input', (e) => {
103
103
  console.log('Current value:', e.detail.value);
104
104
  });
105
105
  ```
106
106
 
107
- ### `@snice/slider-change`
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('@snice/slider-change', (e) => {
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('@snice/slider-input', (e) => {
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
- ### `@snice/resize`
57
+ ### `pane-resize`
58
58
  Dispatched when pane is resized.
59
59
 
60
60
  ```javascript
61
- splitPane.addEventListener('@snice/resize', (e) => {
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('@snice/switch-change', (e) => {
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
- ### `@snice/switch-change`
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('@snice/switch-change', (e) => {
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('@snice/switch-change', (e) => {
202
+ switchEl.addEventListener('switch-change', (e) => {
203
203
  const { checked, switch: sw } = e.detail;
204
204
 
205
205
  if (checked) {
@@ -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('@snice/tab-change', (e) => {
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
- ##### `@snice/tab-change`
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('@snice/tab-change', (e) => {
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
- ##### `@snice/tab-select`
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
- ##### `@snice/close`
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('@snice/close', (e) => {
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('@snice/tab-change', (e) => {
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('@snice/close', () => {
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('@snice/tab-change', (e) => {
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('@snice/close', (e) => {
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
- ### `@snice/terminal-command`
118
+ ### `terminal-command`
119
119
 
120
120
  Emitted when a command is entered.
121
121
 
122
122
  ```javascript
123
- terminal.addEventListener('@snice/terminal-command', (e) => {
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
- ### `@snice/terminal-clear`
133
+ ### `terminal-clear`
134
134
 
135
135
  Emitted when the terminal is cleared.
136
136
 
137
137
  ```javascript
138
- terminal.addEventListener('@snice/terminal-clear', () => {
138
+ terminal.addEventListener('terminal-clear', () => {
139
139
  console.log('Terminal was cleared');
140
140
  });
141
141
  ```
142
142
 
143
- ### `@snice/terminal-ready`
143
+ ### `terminal-ready`
144
144
 
145
145
  Emitted when the terminal is ready.
146
146
 
147
147
  ```javascript
148
- terminal.addEventListener('@snice/terminal-ready', () => {
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('@snice/textarea-change', (e) => {
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
- ### `@snice/textarea-input`
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('@snice/textarea-input', (e) => {
108
+ textarea.addEventListener('textarea-input', (e) => {
109
109
  console.log('Input value:', e.detail.value);
110
110
  });
111
111
  ```
112
112
 
113
- ### `@snice/textarea-change`
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('@snice/textarea-change', (e) => {
119
+ textarea.addEventListener('textarea-change', (e) => {
120
120
  console.log('Changed to:', e.detail.value);
121
121
  });
122
122
  ```
123
123
 
124
- ### `@snice/textarea-focus`
124
+ ### `textarea-focus`
125
125
  Fired when the textarea receives focus.
126
126
 
127
127
  **Detail**: `{ textarea: SniceTextareaElement }`
128
128
 
129
- ### `@snice/textarea-blur`
129
+ ### `textarea-blur`
130
130
  Fired when the textarea loses focus.
131
131
 
132
132
  **Detail**: `{ textarea: SniceTextareaElement }`
@@ -33,10 +33,10 @@ The `<snice-timer>` component provides a stopwatch and countdown timer.
33
33
 
34
34
  | Event | Detail | Description |
35
35
  |-------|--------|-------------|
36
- | `@snice/timer-start` | `{ timer, time }` | Timer started |
37
- | `@snice/timer-stop` | `{ timer, time }` | Timer stopped |
38
- | `@snice/timer-reset` | `{ timer, time }` | Timer reset |
39
- | `@snice/timer-complete` | `{ timer }` | Countdown completed (timer mode only) |
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('@snice/timer-complete', () => {
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('@snice/timer-start', (e) => {
86
+ timer.addEventListener('timer-start', (e) => {
87
87
  console.log('Timer started at', e.detail.time);
88
88
  });
89
89
 
90
- timer.addEventListener('@snice/timer-stop', (e) => {
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('@snice/timer-complete', () => {
104
+ workout.addEventListener('timer-complete', () => {
105
105
  alert('Rest time!');
106
106
  // Start rest period
107
107
  workout.initialTime = 15;
@@ -161,7 +161,7 @@ console.log(checked.map(n => n.label));
161
161
 
162
162
  ## Events
163
163
 
164
- ### `@snice/tree-node-expand`
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
- ### `@snice/tree-node-collapse`
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
- ### `@snice/tree-node-select`
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
- ### `@snice/tree-node-check`
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
- ### `@snice/tree-node-lazy-load`
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('@snice/tree-node-select', (e) => {
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('@snice/tree-node-select', (e) => {
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('@snice/tree-node-check', (e) => {
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('@snice/tree-node-lazy-load', async (e) => {
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.11.0",
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",