snice 3.4.0 → 3.5.0

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 (177) hide show
  1. package/bin/templates/base/package.json +2 -2
  2. package/bin/templates/social/package.json +2 -2
  3. package/bin/templates/social/src/styles/global.css +56 -47
  4. package/dist/components/avatar/snice-avatar.d.ts +2 -2
  5. package/dist/components/avatar/snice-avatar.js +20 -21
  6. package/dist/components/avatar/snice-avatar.js.map +1 -1
  7. package/dist/components/calendar/snice-calendar.d.ts +8 -2
  8. package/dist/components/calendar/snice-calendar.js +160 -82
  9. package/dist/components/calendar/snice-calendar.js.map +1 -1
  10. package/dist/components/chart/snice-chart.js +50 -18
  11. package/dist/components/chart/snice-chart.js.map +1 -1
  12. package/dist/components/checkbox/snice-checkbox.d.ts +4 -1
  13. package/dist/components/checkbox/snice-checkbox.js +46 -17
  14. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  15. package/dist/components/code-block/highlighter.d.ts +5 -0
  16. package/dist/components/code-block/highlighter.js +137 -0
  17. package/dist/components/code-block/highlighter.js.map +1 -0
  18. package/dist/components/code-block/highlighters/highlight.d.ts +64 -0
  19. package/dist/components/code-block/highlighters/highlight.js +108 -0
  20. package/dist/components/code-block/highlighters/highlight.js.map +1 -0
  21. package/dist/components/code-block/highlighters/prism.d.ts +41 -0
  22. package/dist/components/code-block/highlighters/prism.js +73 -0
  23. package/dist/components/code-block/highlighters/prism.js.map +1 -0
  24. package/dist/components/code-block/snice-code-block.d.ts +19 -1
  25. package/dist/components/code-block/snice-code-block.js +128 -29
  26. package/dist/components/code-block/snice-code-block.js.map +1 -1
  27. package/dist/components/code-block/snice-code-block.types.d.ts +15 -1
  28. package/dist/components/color-picker/snice-color-picker.d.ts +1 -0
  29. package/dist/components/color-picker/snice-color-picker.js +17 -6
  30. package/dist/components/color-picker/snice-color-picker.js.map +1 -1
  31. package/dist/components/date-picker/snice-date-picker.d.ts +1 -0
  32. package/dist/components/date-picker/snice-date-picker.js +16 -5
  33. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  34. package/dist/components/doc/snice-doc.d.ts +27 -73
  35. package/dist/components/doc/snice-doc.js +385 -534
  36. package/dist/components/doc/snice-doc.js.map +1 -1
  37. package/dist/components/draw/snice-draw.d.ts +4 -0
  38. package/dist/components/draw/snice-draw.js +134 -14
  39. package/dist/components/draw/snice-draw.js.map +1 -1
  40. package/dist/components/draw/snice-draw.types.d.ts +5 -0
  41. package/dist/components/file-upload/snice-file-upload.js +1 -1
  42. package/dist/components/input/snice-input.d.ts +2 -0
  43. package/dist/components/input/snice-input.js +34 -9
  44. package/dist/components/input/snice-input.js.map +1 -1
  45. package/dist/components/kanban/snice-kanban.d.ts +13 -1
  46. package/dist/components/kanban/snice-kanban.js +191 -36
  47. package/dist/components/kanban/snice-kanban.js.map +1 -1
  48. package/dist/components/kanban/snice-kanban.types.d.ts +11 -1
  49. package/dist/components/kpi/snice-kpi.js +5 -1
  50. package/dist/components/kpi/snice-kpi.js.map +1 -1
  51. package/dist/components/layout/snice-layout-sidebar.js +1 -1
  52. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  53. package/dist/components/layout/snice-layout.js +1 -1
  54. package/dist/components/layout/snice-layout.js.map +1 -1
  55. package/dist/components/location/snice-location.js +1 -1
  56. package/dist/components/location/snice-location.js.map +1 -1
  57. package/dist/components/radio/snice-radio.d.ts +1 -0
  58. package/dist/components/radio/snice-radio.js +17 -6
  59. package/dist/components/radio/snice-radio.js.map +1 -1
  60. package/dist/components/select/snice-select.d.ts +2 -0
  61. package/dist/components/select/snice-select.js +48 -19
  62. package/dist/components/select/snice-select.js.map +1 -1
  63. package/dist/components/slider/snice-slider.d.ts +2 -0
  64. package/dist/components/slider/snice-slider.js +34 -14
  65. package/dist/components/slider/snice-slider.js.map +1 -1
  66. package/dist/components/snice-cell-HZ2iIBIC.js +4 -0
  67. package/dist/components/snice-cell-HZ2iIBIC.js.map +1 -0
  68. package/dist/components/split-pane/snice-split-pane.js +1 -1
  69. package/dist/components/split-pane/snice-split-pane.js.map +1 -1
  70. package/dist/components/switch/snice-switch.d.ts +1 -0
  71. package/dist/components/switch/snice-switch.js +16 -6
  72. package/dist/components/switch/snice-switch.js.map +1 -1
  73. package/dist/components/table/snice-cell-actions.js +1 -1
  74. package/dist/components/table/snice-cell-actions.js.map +1 -1
  75. package/dist/components/table/snice-cell-boolean.js +1 -1
  76. package/dist/components/table/snice-cell-color.js +1 -1
  77. package/dist/components/table/snice-cell-color.js.map +1 -1
  78. package/dist/components/table/snice-cell-currency.js +1 -1
  79. package/dist/components/table/snice-cell-date.js +1 -1
  80. package/dist/components/table/snice-cell-duration.js +1 -1
  81. package/dist/components/table/snice-cell-email.js +1 -1
  82. package/dist/components/table/snice-cell-email.js.map +1 -1
  83. package/dist/components/table/snice-cell-filesize.js +1 -1
  84. package/dist/components/table/snice-cell-image.js +1 -1
  85. package/dist/components/table/snice-cell-image.js.map +1 -1
  86. package/dist/components/table/snice-cell-json.js +1 -1
  87. package/dist/components/table/snice-cell-json.js.map +1 -1
  88. package/dist/components/table/snice-cell-link.js +1 -1
  89. package/dist/components/table/snice-cell-link.js.map +1 -1
  90. package/dist/components/table/snice-cell-location.js +1 -1
  91. package/dist/components/table/snice-cell-location.js.map +1 -1
  92. package/dist/components/table/snice-cell-number.js +1 -1
  93. package/dist/components/table/snice-cell-percentage.js +1 -1
  94. package/dist/components/table/snice-cell-percentage.js.map +1 -1
  95. package/dist/components/table/snice-cell-phone.js +1 -1
  96. package/dist/components/table/snice-cell-phone.js.map +1 -1
  97. package/dist/components/table/snice-cell-progress.js +3 -3
  98. package/dist/components/table/snice-cell-progress.js.map +1 -1
  99. package/dist/components/table/snice-cell-rating.js +2 -2
  100. package/dist/components/table/snice-cell-rating.js.map +1 -1
  101. package/dist/components/table/snice-cell-sparkline.js +2 -2
  102. package/dist/components/table/snice-cell-sparkline.js.map +1 -1
  103. package/dist/components/table/snice-cell-status.js +1 -1
  104. package/dist/components/table/snice-cell-status.js.map +1 -1
  105. package/dist/components/table/snice-cell-tag.js +1 -1
  106. package/dist/components/table/snice-cell-tag.js.map +1 -1
  107. package/dist/components/table/snice-cell-text.js +1 -1
  108. package/dist/components/table/snice-cell.js +15 -10
  109. package/dist/components/table/snice-cell.js.map +1 -1
  110. package/dist/components/table/snice-header.js +1 -1
  111. package/dist/components/table/snice-header.js.map +1 -1
  112. package/dist/components/table/snice-row.js +2 -2
  113. package/dist/components/table/snice-row.js.map +1 -1
  114. package/dist/components/table/snice-table.d.ts +1 -0
  115. package/dist/components/table/snice-table.js +24 -4
  116. package/dist/components/table/snice-table.js.map +1 -1
  117. package/dist/components/terminal/snice-terminal.d.ts +40 -0
  118. package/dist/components/terminal/snice-terminal.js +371 -0
  119. package/dist/components/terminal/snice-terminal.js.map +1 -0
  120. package/dist/components/terminal/snice-terminal.types.d.ts +20 -24
  121. package/dist/components/textarea/snice-textarea.d.ts +2 -0
  122. package/dist/components/textarea/snice-textarea.js +25 -6
  123. package/dist/components/textarea/snice-textarea.js.map +1 -1
  124. package/dist/components/theme/theme.css +16 -0
  125. package/dist/components/tree/snice-tree-item.d.ts +18 -4
  126. package/dist/components/tree/snice-tree-item.js +271 -88
  127. package/dist/components/tree/snice-tree-item.js.map +1 -1
  128. package/dist/components/tree/snice-tree-item.types.d.ts +3 -0
  129. package/dist/components/tree/snice-tree.d.ts +18 -2
  130. package/dist/components/tree/snice-tree.js +422 -56
  131. package/dist/components/tree/snice-tree.js.map +1 -1
  132. package/dist/components/tree/snice-tree.types.d.ts +1 -0
  133. package/dist/components/virtual-scroller/snice-virtual-scroller.js +4 -2
  134. package/dist/components/virtual-scroller/snice-virtual-scroller.js.map +1 -1
  135. package/dist/index.cjs +42 -23
  136. package/dist/index.cjs.map +1 -1
  137. package/dist/index.esm.js +42 -23
  138. package/dist/index.esm.js.map +1 -1
  139. package/dist/index.iife.js +42 -23
  140. package/dist/index.iife.js.map +1 -1
  141. package/dist/render-tracker.d.ts +1 -0
  142. package/dist/symbols.cjs +13 -14
  143. package/dist/symbols.cjs.map +1 -1
  144. package/dist/symbols.esm.js +13 -14
  145. package/dist/symbols.esm.js.map +1 -1
  146. package/dist/template.d.ts +1 -0
  147. package/dist/transitions.cjs +1 -1
  148. package/dist/transitions.esm.js +1 -1
  149. package/docs/ai/api.md +37 -4
  150. package/docs/ai/components/doc.md +41 -106
  151. package/docs/ai/components/kanban.md +31 -9
  152. package/docs/ai/components/kpi.md +15 -0
  153. package/docs/components/doc.md +96 -212
  154. package/docs/components/kanban.md +119 -4
  155. package/docs/components/kpi.md +27 -0
  156. package/package.json +4 -1
  157. package/dist/components/actions/snice-actions.d.ts +0 -28
  158. package/dist/components/actions/snice-actions.js +0 -220
  159. package/dist/components/actions/snice-actions.js.map +0 -1
  160. package/dist/components/actions/snice-actions.types.d.ts +0 -27
  161. package/dist/components/doc/snice-doc.types.d.ts +0 -118
  162. package/dist/components/gantt/snice-gantt.d.ts +0 -29
  163. package/dist/components/gantt/snice-gantt.js +0 -268
  164. package/dist/components/gantt/snice-gantt.js.map +0 -1
  165. package/dist/components/gantt/snice-gantt.types.d.ts +0 -23
  166. package/dist/components/snice-cell-C0slgOpe.js +0 -4
  167. package/dist/components/snice-cell-C0slgOpe.js.map +0 -1
  168. package/dist/components/stat/snice-stat.d.ts +0 -14
  169. package/dist/components/stat/snice-stat.js +0 -140
  170. package/dist/components/stat/snice-stat.js.map +0 -1
  171. package/dist/components/stat/snice-stat.types.d.ts +0 -12
  172. package/docs/ai/components/actions.md +0 -81
  173. package/docs/ai/components/gantt.md +0 -95
  174. package/docs/ai/components/stat.md +0 -29
  175. package/docs/components/actions.md +0 -317
  176. package/docs/components/gantt.md +0 -347
  177. package/docs/components/stat.md +0 -45
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Render tracking for testing/debugging
3
3
  * Uses symbols and generators to "pull" render events from elements
4
+ * Use Symbol.for() to ensure symbols are shared across multiple Snice instances
4
5
  */
5
6
  export declare const RENDER_TRACKER: unique symbol;
6
7
  export declare const TRACK_RENDERS: unique symbol;
package/dist/symbols.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v3.3.1
2
+ * snice v3.4.1
3
3
  * Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
@@ -8,23 +8,22 @@
8
8
 
9
9
  // Global namespace for Snice framework
10
10
  // Ensures all registries and symbols are shared across different JS files/modules
11
- // Initialize or get the global Snice namespace
12
- function initGlobalNamespace() {
13
- if (!globalThis.snice) {
14
- globalThis.snice = {
15
- controllerRegistry: new Map(),
16
- controllerIdCounter: 0,
17
- symbols: new Map()
18
- };
19
- }
20
- return globalThis.snice;
11
+ // Initialize the global Snice namespace on globalThis
12
+ // This ensures all module instances share the same registry
13
+ if (!globalThis.snice) {
14
+ globalThis.snice = {
15
+ controllerRegistry: new Map(),
16
+ controllerIdCounter: 0,
17
+ symbols: new Map()
18
+ };
21
19
  }
22
- // Export the global namespace
23
- const snice = initGlobalNamespace();
20
+ // Export direct reference to globalThis.snice
21
+ const snice = globalThis.snice;
24
22
  // Helper function to get or create a global symbol
23
+ // Uses Symbol.for() to ensure symbols are shared across multiple Snice instances
25
24
  function getSymbol(name) {
26
25
  if (!snice.symbols.has(name)) {
27
- snice.symbols.set(name, Symbol(name));
26
+ snice.symbols.set(name, Symbol.for(`snice:${name}`));
28
27
  }
29
28
  return snice.symbols.get(name);
30
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.cjs","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbols.cjs","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -1,28 +1,27 @@
1
1
  /*!
2
- * snice v3.3.1
2
+ * snice v3.4.1
3
3
  * Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
6
6
  */
7
7
  // Global namespace for Snice framework
8
8
  // Ensures all registries and symbols are shared across different JS files/modules
9
- // Initialize or get the global Snice namespace
10
- function initGlobalNamespace() {
11
- if (!globalThis.snice) {
12
- globalThis.snice = {
13
- controllerRegistry: new Map(),
14
- controllerIdCounter: 0,
15
- symbols: new Map()
16
- };
17
- }
18
- return globalThis.snice;
9
+ // Initialize the global Snice namespace on globalThis
10
+ // This ensures all module instances share the same registry
11
+ if (!globalThis.snice) {
12
+ globalThis.snice = {
13
+ controllerRegistry: new Map(),
14
+ controllerIdCounter: 0,
15
+ symbols: new Map()
16
+ };
19
17
  }
20
- // Export the global namespace
21
- const snice = initGlobalNamespace();
18
+ // Export direct reference to globalThis.snice
19
+ const snice = globalThis.snice;
22
20
  // Helper function to get or create a global symbol
21
+ // Uses Symbol.for() to ensure symbols are shared across multiple Snice instances
23
22
  function getSymbol(name) {
24
23
  if (!snice.symbols.has(name)) {
25
- snice.symbols.set(name, Symbol(name));
24
+ snice.symbols.set(name, Symbol.for(`snice:${name}`));
26
25
  }
27
26
  return snice.symbols.get(name);
28
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"symbols.esm.js","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"symbols.esm.js","sources":["../src/global.ts","../src/symbols.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ export declare function sanitize(value: any): string;
66
66
  /**
67
67
  * Nothing - represents no value (different from null/undefined)
68
68
  * Used to remove content from templates
69
+ * Use Symbol.for() to ensure symbols are shared across multiple Snice instances
69
70
  */
70
71
  export declare const nothing: unique symbol;
71
72
  /**
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v3.3.1
2
+ * snice v3.4.1
3
3
  * Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * snice v3.3.1
2
+ * snice v3.4.1
3
3
  * Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.
4
4
  * (c) 2024
5
5
  * Released under the MIT License.
package/docs/ai/api.md CHANGED
@@ -80,11 +80,44 @@ html`
80
80
  ## Communication
81
81
 
82
82
  ```typescript
83
- @request(channel: string)
84
- // Send: this.methodName(data) Promise<response>
83
+ @request(channel: string, options?: { timeout?, discoveryTimeout?, debounce?, throttle?, bubbles?, cancelable? })
84
+ // Request pattern using async generator syntax
85
+ // Method must be async generator that yields payload and receives response
86
+ // Returns Promise<T>
87
+ // Options:
88
+ // timeout (ms) - response timeout, default 120000 (2 min)
89
+ // discoveryTimeout (ms) - handler discovery timeout, default 50
90
+ // debounce (ms) - debounce requests
91
+ // throttle (ms) - throttle requests
92
+ // bubbles (bool) - event bubbling, default true
93
+ // cancelable (bool) - event cancelable, default false
94
+ // Example:
95
+ // @request('fetch-user')
96
+ // async *fetchUser(id: string): any {
97
+ // try {
98
+ // const user = await (yield { id }); // yield = request, await = response
99
+ // return user;
100
+ // } catch (error) {
101
+ // console.error('Failed:', error);
102
+ // throw error;
103
+ // }
104
+ // }
105
+ // // Usage: const user = await this.fetchUser('123');
85
106
 
86
- @respond(channel: string)
87
- // Receive: methodName(request, respond) respond(data)
107
+ @respond(channel: string, options?: { debounce?, throttle? })
108
+ // Respond to requests from @request decorators
109
+ // Method receives payload and returns response
110
+ // Works in both elements and controllers
111
+ // Only one responder per channel (first wins via stopImmediatePropagation)
112
+ // Options:
113
+ // debounce (ms) - debounce responses
114
+ // throttle (ms) - throttle responses
115
+ // Example:
116
+ // @respond('fetch-user')
117
+ // async handleFetchUser(payload: { id: string }) {
118
+ // const user = await fetch(`/api/users/${payload.id}`).then(r => r.json());
119
+ // return user;
120
+ // }
88
121
  ```
89
122
 
90
123
  ## Observers
@@ -1,6 +1,6 @@
1
1
  # snice-doc
2
2
 
3
- Notion-like document editor with block-based editing.
3
+ Simple WYSIWYG document editor with toolbar and sidebar.
4
4
 
5
5
  ## Usage
6
6
 
@@ -10,54 +10,34 @@ Notion-like document editor with block-based editing.
10
10
 
11
11
  ## Properties
12
12
 
13
- - `blocks: DocBlock[]` - Document blocks (property only)
14
- - `placeholder: string` - Placeholder text (default: `"Type '/' for commands..."`)
13
+ - `placeholder: string` - Placeholder text (default: `"Start typing..."`)
15
14
  - `readonly: boolean` - Readonly mode (default: `false`)
16
15
 
17
16
  ## Methods
18
17
 
19
- - `getBlocks(): DocBlock[]` - Get blocks copy
20
- - `setBlocks(blocks: DocBlock[]): void` - Set blocks
21
- - `toJSON(): string` - Export as JSON
22
- - `fromJSON(json: string): void` - Import from JSON
23
- - `toMarkdown(): string` - Export as Markdown
24
- - `toHTML(): string` - Export as HTML
25
- - `focus(): void` - Focus editor
18
+ - `getHTML(): string` - Get HTML content
19
+ - `setHTML(html: string): void` - Set HTML content
26
20
  - `clear(): void` - Clear all content
27
21
 
28
- ## Events
22
+ ## Toolbar
29
23
 
30
- - `doc-change: CustomEvent<{ blocks: DocBlock[] }>` - Content changed
31
- - `doc-focus: CustomEvent<{ blockId: string }>` - Block focused
32
- - `doc-blur: CustomEvent<{ blockId: string }>` - Block blurred
24
+ - **B, I, U, S** - Bold, italic, underline, strikethrough
25
+ - **H1, H2, H3, P** - Heading formats and paragraph
26
+ - **•, 1.** - Bulleted and numbered lists
27
+ - **🔗** - Insert link
28
+ - **🖼** - Insert image
33
29
 
34
- ## Block Types
30
+ ## Sidebar
35
31
 
36
- - `paragraph` - Text paragraph
37
- - `heading-1` - H1 heading
38
- - `heading-2` - H2 heading
39
- - `heading-3` - H3 heading
40
- - `bulleted-list` - Bulleted list item
41
- - `numbered-list` - Numbered list item
42
- - `todo` - To-do with checkbox
43
- - `code` - Code block
44
- - `quote` - Blockquote
45
- - `divider` - Horizontal rule
32
+ - **Image** - Insert image via URL
33
+ - **Table** - Insert table (rows × cols)
34
+ - **Divider** - Insert horizontal rule
46
35
 
47
36
  ## Keyboard Shortcuts
48
37
 
49
- - **/** - Open block menu
50
- - **Enter** - New block
51
- - **Backspace** (empty) - Delete block
52
- - **Ctrl/Cmd+B** - Bold (planned)
53
- - **Ctrl/Cmd+I** - Italic (planned)
54
- - **Ctrl/Cmd+U** - Underline (planned)
55
-
56
- ## Block Menu
57
-
58
- - **ArrowDown/Up** - Navigate
59
- - **Enter** - Select
60
- - **Escape** - Close
38
+ - **Ctrl/Cmd+B** - Bold
39
+ - **Ctrl/Cmd+I** - Italic
40
+ - **Ctrl/Cmd+U** - Underline
61
41
 
62
42
  ## CSS Variables
63
43
 
@@ -68,55 +48,12 @@ Notion-like document editor with block-based editing.
68
48
  --snice-doc-placeholder-color
69
49
  --snice-doc-primary-color
70
50
  --snice-doc-link-color
71
- --snice-doc-code-background
72
- --snice-doc-code-border
73
51
  --snice-doc-inline-code-background
74
- --snice-doc-quote-border
75
- --snice-doc-divider-color
76
- --snice-doc-menu-background
77
- --snice-doc-menu-border
78
- --snice-doc-menu-hover
79
52
  --snice-doc-toolbar-background
80
- --snice-doc-toolbar-text
81
- --snice-doc-toolbar-hover
82
- --snice-doc-toolbar-active
53
+ --snice-doc-toolbar-border
54
+ --snice-doc-sidebar-background
55
+ --snice-doc-sidebar-border
83
56
  --snice-doc-padding
84
- --snice-doc-min-height
85
- --snice-doc-max-width
86
- ```
87
-
88
- ## Types
89
-
90
- ```typescript
91
- type BlockType =
92
- | 'paragraph'
93
- | 'heading-1'
94
- | 'heading-2'
95
- | 'heading-3'
96
- | 'bulleted-list'
97
- | 'numbered-list'
98
- | 'todo'
99
- | 'code'
100
- | 'quote'
101
- | 'divider';
102
-
103
- interface DocBlock {
104
- id: string;
105
- type: BlockType;
106
- content: string;
107
- formats: TextRange[];
108
- checked?: boolean;
109
- indent?: number;
110
- }
111
-
112
- interface TextRange {
113
- start: number;
114
- end: number;
115
- format: InlineFormat;
116
- value?: string;
117
- }
118
-
119
- type InlineFormat = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code' | 'link';
120
57
  ```
121
58
 
122
59
  ## Example
@@ -124,31 +61,29 @@ type InlineFormat = 'bold' | 'italic' | 'underline' | 'strikethrough' | 'code' |
124
61
  ```javascript
125
62
  const doc = document.querySelector('snice-doc');
126
63
 
127
- doc.setBlocks([
128
- { id: '1', type: 'heading-1', content: 'Title', formats: [] },
129
- { id: '2', type: 'paragraph', content: 'Content', formats: [] },
130
- { id: '3', type: 'todo', content: 'Task', formats: [], checked: false },
131
- ]);
132
-
133
- doc.addEventListener('doc-change', (e) => {
134
- console.log(e.detail.blocks);
135
- });
136
-
137
- // Export
138
- const json = doc.toJSON();
139
- const markdown = doc.toMarkdown();
140
- const html = doc.toHTML();
64
+ doc.setHTML(`
65
+ <h1>Title</h1>
66
+ <p>Content with <b>bold</b> and <i>italic</i>.</p>
67
+ <ul>
68
+ <li>Item 1</li>
69
+ <li>Item 2</li>
70
+ </ul>
71
+ `);
72
+
73
+ // Get content
74
+ const html = doc.getHTML();
75
+
76
+ // Save/load
77
+ localStorage.setItem('doc', doc.getHTML());
78
+ doc.setHTML(localStorage.getItem('doc'));
141
79
  ```
142
80
 
143
81
  ## Features
144
82
 
145
- - Block-based editing
146
- - Type `/` for block menu
147
- - Drag to reorder
148
- - Export JSON/Markdown/HTML
149
- - Readonly mode
83
+ - WYSIWYG contentEditable editing
84
+ - Formatting toolbar
85
+ - Insert images, tables, dividers
86
+ - Collapsible sidebar
87
+ - Paste images from clipboard
150
88
  - Keyboard shortcuts
151
- - To-do lists with checkboxes
152
- - Code blocks
153
- - Quotes
154
- - Dividers
89
+ - Readonly mode
@@ -13,6 +13,14 @@ showCardCount: boolean = true;
13
13
  ## Interfaces
14
14
 
15
15
  ```typescript
16
+ interface KanbanLabel {
17
+ text: string;
18
+ color?: string;
19
+ background?: string;
20
+ icon?: string; // emoji or text
21
+ iconPosition?: 'left' | 'right';
22
+ }
23
+
16
24
  interface KanbanColumn {
17
25
  id: string | number;
18
26
  title: string;
@@ -27,7 +35,7 @@ interface KanbanCard {
27
35
  title: string;
28
36
  description?: string;
29
37
  assignee?: string;
30
- labels?: string[];
38
+ labels?: (string | KanbanLabel)[];
31
39
  color?: string;
32
40
  data?: any;
33
41
  }
@@ -40,9 +48,12 @@ addColumn(column: KanbanColumn): void
40
48
  removeColumn(id: string | number): void
41
49
  addCard(columnId: string | number, card: KanbanCard): void
42
50
  removeCard(cardId: string | number): void
43
- moveCard(cardId: string | number, targetColumnId: string | number): void
51
+ moveCard(cardId: string | number, targetColumnId: string | number, targetIndex?: number): void
44
52
  getColumn(id: string | number): KanbanColumn | undefined
45
53
  getCard(id: string | number): KanbanCard | undefined
54
+ filterByLabels(labels: string[]): void
55
+ search(query: string): void
56
+ clearFilters(): void
46
57
  ```
47
58
 
48
59
  ## Events
@@ -58,14 +69,16 @@ kanban.columns = [
58
69
  id: 'todo',
59
70
  title: 'To Do',
60
71
  color: '#f44336',
61
- limit: 5,
62
72
  cards: [
63
73
  {
64
74
  id: 1,
65
75
  title: 'Task',
66
76
  description: 'Details',
67
77
  assignee: 'Alice',
68
- labels: ['bug', 'high-priority'],
78
+ labels: [
79
+ 'bug',
80
+ { text: 'urgent', color: '#dc2626', background: '#fee2e2', icon: '🔥', iconPosition: 'left' }
81
+ ],
69
82
  color: '#f44336'
70
83
  }
71
84
  ]
@@ -73,11 +86,16 @@ kanban.columns = [
73
86
  { id: 'done', title: 'Done', cards: [] }
74
87
  ];
75
88
 
76
- // Add/remove
89
+ // Add/remove/move
77
90
  kanban.addCard('todo', { id: 2, title: 'New Task' });
78
91
  kanban.moveCard(1, 'done');
79
92
  kanban.removeCard(2);
80
93
 
94
+ // Filter/search
95
+ kanban.filterByLabels(['bug', 'high-priority']);
96
+ kanban.search('landing page');
97
+ kanban.clearFilters();
98
+
81
99
  // Events
82
100
  kanban.addEventListener('@snice/kanban-card-move', (e) => {
83
101
  console.log(`Moved ${e.detail.card.title}`);
@@ -91,12 +109,16 @@ kanban.addEventListener('@snice/kanban-card-move', (e) => {
91
109
 
92
110
  ## Features
93
111
 
94
- - Drag and drop cards between columns
95
- - WIP limits per column
96
- - Card labels and assignees
112
+ - Drag and drop cards between columns and within same column
113
+ - Custom labels with colors, backgrounds, and icons
114
+ - Label icon positioning (left/right)
115
+ - Filter by labels
116
+ - Search by title/description
117
+ - Card assignees
97
118
  - Color-coded cards and columns
98
119
  - Card counts
99
120
  - Click handling
100
- - Programmatic card movement
121
+ - Programmatic card movement with positioning
101
122
  - Column management
102
123
  - Event dispatching
124
+ - View Transitions API animations
@@ -2,6 +2,8 @@
2
2
 
3
3
  Key performance indicator display with value, label, trend, sparkline, and sentiment.
4
4
 
5
+ > **Note**: `snice-stat` component has been merged into `snice-kpi`.
6
+
5
7
  ## Properties
6
8
 
7
9
  ```typescript
@@ -12,6 +14,14 @@ trendData?: number[] // Sparkline data array
12
14
  sentiment?: KpiSentiment // 'up' | 'down' | 'neutral'
13
15
  size: KpiSize = 'medium' // 'small' | 'medium' | 'large'
14
16
  showSparkline: boolean = true // Show sparkline when data provided
17
+ colorValue: boolean = false // Apply sentiment color to value
18
+ ```
19
+
20
+ ## Slots
21
+
22
+ ```typescript
23
+ before // Content before label/value (e.g., icons)
24
+ after // Content after sparkline (e.g., actions)
15
25
  ```
16
26
 
17
27
  ## Usage
@@ -20,6 +30,11 @@ showSparkline: boolean = true // Show sparkline when data provided
20
30
  <!-- Basic -->
21
31
  <snice-kpi label="Revenue" value="$45,231"></snice-kpi>
22
32
 
33
+ <!-- With icon (before slot) -->
34
+ <snice-kpi label="Revenue" value="$45,231">
35
+ <div slot="before">🏆</div>
36
+ </snice-kpi>
37
+
23
38
  <!-- With trend -->
24
39
  <snice-kpi
25
40
  label="Monthly Revenue"