snice 2.5.4 → 3.1.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 (323) hide show
  1. package/README.md +501 -882
  2. package/bin/templates/base/src/components/counter-button.ts +13 -26
  3. package/bin/templates/base/src/controllers/counter-controller.ts +3 -3
  4. package/dist/components/accordion/snice-accordion-item.d.ts +4 -5
  5. package/dist/components/accordion/snice-accordion-item.js +37 -39
  6. package/dist/components/accordion/snice-accordion-item.js.map +1 -1
  7. package/dist/components/accordion/snice-accordion.d.ts +5 -11
  8. package/dist/components/accordion/snice-accordion.js +51 -52
  9. package/dist/components/accordion/snice-accordion.js.map +1 -1
  10. package/dist/components/alert/snice-alert.d.ts +2 -6
  11. package/dist/components/alert/snice-alert.js +41 -56
  12. package/dist/components/alert/snice-alert.js.map +1 -1
  13. package/dist/components/avatar/snice-avatar.d.ts +2 -6
  14. package/dist/components/avatar/snice-avatar.js +64 -71
  15. package/dist/components/avatar/snice-avatar.js.map +1 -1
  16. package/dist/components/badge/snice-badge.d.ts +2 -3
  17. package/dist/components/badge/snice-badge.js +22 -23
  18. package/dist/components/badge/snice-badge.js.map +1 -1
  19. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +5 -12
  20. package/dist/components/breadcrumbs/snice-breadcrumbs.js +88 -89
  21. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
  22. package/dist/components/button/snice-button.d.ts +3 -7
  23. package/dist/components/button/snice-button.js +37 -58
  24. package/dist/components/button/snice-button.js.map +1 -1
  25. package/dist/components/card/snice-card.d.ts +5 -8
  26. package/dist/components/card/snice-card.js +71 -56
  27. package/dist/components/card/snice-card.js.map +1 -1
  28. package/dist/components/checkbox/snice-checkbox.d.ts +4 -13
  29. package/dist/components/checkbox/snice-checkbox.js +66 -137
  30. package/dist/components/checkbox/snice-checkbox.js.map +1 -1
  31. package/dist/components/chip/snice-chip.d.ts +5 -11
  32. package/dist/components/chip/snice-chip.js +44 -47
  33. package/dist/components/chip/snice-chip.js.map +1 -1
  34. package/dist/components/date-picker/snice-date-picker.d.ts +11 -11
  35. package/dist/components/date-picker/snice-date-picker.js +134 -133
  36. package/dist/components/date-picker/snice-date-picker.js.map +1 -1
  37. package/dist/components/divider/snice-divider.d.ts +2 -4
  38. package/dist/components/divider/snice-divider.js +14 -22
  39. package/dist/components/divider/snice-divider.js.map +1 -1
  40. package/dist/components/drawer/snice-drawer.d.ts +4 -4
  41. package/dist/components/drawer/snice-drawer.js +25 -19
  42. package/dist/components/drawer/snice-drawer.js.map +1 -1
  43. package/dist/components/input/snice-input.d.ts +8 -6
  44. package/dist/components/input/snice-input.js +122 -105
  45. package/dist/components/input/snice-input.js.map +1 -1
  46. package/dist/components/layout/snice-layout-blog.d.ts +4 -4
  47. package/dist/components/layout/snice-layout-blog.js +21 -19
  48. package/dist/components/layout/snice-layout-blog.js.map +1 -1
  49. package/dist/components/layout/snice-layout-card.d.ts +2 -2
  50. package/dist/components/layout/snice-layout-card.js +16 -9
  51. package/dist/components/layout/snice-layout-card.js.map +1 -1
  52. package/dist/components/layout/snice-layout-centered.d.ts +2 -2
  53. package/dist/components/layout/snice-layout-centered.js +14 -7
  54. package/dist/components/layout/snice-layout-centered.js.map +1 -1
  55. package/dist/components/layout/snice-layout-dashboard.d.ts +5 -5
  56. package/dist/components/layout/snice-layout-dashboard.js +38 -30
  57. package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
  58. package/dist/components/layout/snice-layout-fullscreen.d.ts +2 -2
  59. package/dist/components/layout/snice-layout-fullscreen.js +17 -10
  60. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
  61. package/dist/components/layout/snice-layout-landing.d.ts +4 -4
  62. package/dist/components/layout/snice-layout-landing.js +21 -19
  63. package/dist/components/layout/snice-layout-landing.js.map +1 -1
  64. package/dist/components/layout/snice-layout-minimal.d.ts +2 -2
  65. package/dist/components/layout/snice-layout-minimal.js +17 -6
  66. package/dist/components/layout/snice-layout-minimal.js.map +1 -1
  67. package/dist/components/layout/snice-layout-sidebar.d.ts +5 -4
  68. package/dist/components/layout/snice-layout-sidebar.js +42 -20
  69. package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
  70. package/dist/components/layout/snice-layout-split.d.ts +2 -2
  71. package/dist/components/layout/snice-layout-split.js +14 -7
  72. package/dist/components/layout/snice-layout-split.js.map +1 -1
  73. package/dist/components/layout/snice-layout.d.ts +4 -4
  74. package/dist/components/layout/snice-layout.js +16 -10
  75. package/dist/components/layout/snice-layout.js.map +1 -1
  76. package/dist/components/login/snice-login.d.ts +6 -11
  77. package/dist/components/login/snice-login.js +97 -71
  78. package/dist/components/login/snice-login.js.map +1 -1
  79. package/dist/components/modal/snice-modal.d.ts +5 -9
  80. package/dist/components/modal/snice-modal.js +47 -78
  81. package/dist/components/modal/snice-modal.js.map +1 -1
  82. package/dist/components/nav/snice-nav.d.ts +13 -7
  83. package/dist/components/nav/snice-nav.js +191 -100
  84. package/dist/components/nav/snice-nav.js.map +1 -1
  85. package/dist/components/nav/snice-nav.types.d.ts +3 -3
  86. package/dist/components/pagination/snice-pagination.d.ts +6 -7
  87. package/dist/components/pagination/snice-pagination.js +94 -81
  88. package/dist/components/pagination/snice-pagination.js.map +1 -1
  89. package/dist/components/progress/snice-progress.d.ts +2 -7
  90. package/dist/components/progress/snice-progress.js +41 -98
  91. package/dist/components/progress/snice-progress.js.map +1 -1
  92. package/dist/components/radio/snice-radio.d.ts +4 -4
  93. package/dist/components/radio/snice-radio.js +52 -44
  94. package/dist/components/radio/snice-radio.js.map +1 -1
  95. package/dist/components/select/snice-option.d.ts +2 -1
  96. package/dist/components/select/snice-option.js +12 -5
  97. package/dist/components/select/snice-option.js.map +1 -1
  98. package/dist/components/select/snice-select.d.ts +9 -21
  99. package/dist/components/select/snice-select.js +98 -170
  100. package/dist/components/select/snice-select.js.map +1 -1
  101. package/dist/components/skeleton/snice-skeleton.d.ts +2 -6
  102. package/dist/components/skeleton/snice-skeleton.js +18 -49
  103. package/dist/components/skeleton/snice-skeleton.js.map +1 -1
  104. package/dist/components/snice-cell-BLFVdxPp.js +4 -0
  105. package/dist/components/snice-cell-BLFVdxPp.js.map +1 -0
  106. package/dist/components/switch/snice-switch.d.ts +2 -2
  107. package/dist/components/switch/snice-switch.js +38 -26
  108. package/dist/components/switch/snice-switch.js.map +1 -1
  109. package/dist/components/table/snice-cell-actions.d.ts +24 -0
  110. package/dist/components/table/snice-cell-actions.js +149 -0
  111. package/dist/components/table/snice-cell-actions.js.map +1 -0
  112. package/dist/components/table/snice-cell-boolean.d.ts +2 -2
  113. package/dist/components/table/snice-cell-boolean.js +13 -7
  114. package/dist/components/table/snice-cell-boolean.js.map +1 -1
  115. package/dist/components/table/snice-cell-color.d.ts +18 -0
  116. package/dist/components/table/snice-cell-color.js +149 -0
  117. package/dist/components/table/snice-cell-color.js.map +1 -0
  118. package/dist/components/table/snice-cell-currency.d.ts +24 -0
  119. package/dist/components/table/snice-cell-currency.js +235 -0
  120. package/dist/components/table/snice-cell-currency.js.map +1 -0
  121. package/dist/components/table/snice-cell-date.d.ts +2 -2
  122. package/dist/components/table/snice-cell-date.js +14 -8
  123. package/dist/components/table/snice-cell-date.js.map +1 -1
  124. package/dist/components/table/snice-cell-duration.d.ts +2 -2
  125. package/dist/components/table/snice-cell-duration.js +12 -6
  126. package/dist/components/table/snice-cell-duration.js.map +1 -1
  127. package/dist/components/table/snice-cell-email.d.ts +15 -0
  128. package/dist/components/table/snice-cell-email.js +125 -0
  129. package/dist/components/table/snice-cell-email.js.map +1 -0
  130. package/dist/components/table/snice-cell-filesize.d.ts +2 -2
  131. package/dist/components/table/snice-cell-filesize.js +12 -6
  132. package/dist/components/table/snice-cell-filesize.js.map +1 -1
  133. package/dist/components/table/snice-cell-image.d.ts +20 -0
  134. package/dist/components/table/snice-cell-image.js +162 -0
  135. package/dist/components/table/snice-cell-image.js.map +1 -0
  136. package/dist/components/table/snice-cell-json.d.ts +20 -0
  137. package/dist/components/table/snice-cell-json.js +186 -0
  138. package/dist/components/table/snice-cell-json.js.map +1 -0
  139. package/dist/components/table/snice-cell-link.d.ts +17 -0
  140. package/dist/components/table/snice-cell-link.js +142 -0
  141. package/dist/components/table/snice-cell-link.js.map +1 -0
  142. package/dist/components/table/snice-cell-location.d.ts +19 -0
  143. package/dist/components/table/snice-cell-location.js +185 -0
  144. package/dist/components/table/snice-cell-location.js.map +1 -0
  145. package/dist/components/table/snice-cell-number.d.ts +2 -2
  146. package/dist/components/table/snice-cell-number.js +12 -6
  147. package/dist/components/table/snice-cell-number.js.map +1 -1
  148. package/dist/components/table/snice-cell-percentage.d.ts +22 -0
  149. package/dist/components/table/snice-cell-percentage.js +208 -0
  150. package/dist/components/table/snice-cell-percentage.js.map +1 -0
  151. package/dist/components/table/snice-cell-phone.d.ts +18 -0
  152. package/dist/components/table/snice-cell-phone.js +153 -0
  153. package/dist/components/table/snice-cell-phone.js.map +1 -0
  154. package/dist/components/table/snice-cell-progress.d.ts +2 -2
  155. package/dist/components/table/snice-cell-progress.js +12 -6
  156. package/dist/components/table/snice-cell-progress.js.map +1 -1
  157. package/dist/components/table/snice-cell-rating.d.ts +2 -2
  158. package/dist/components/table/snice-cell-rating.js +12 -6
  159. package/dist/components/table/snice-cell-rating.js.map +1 -1
  160. package/dist/components/table/snice-cell-sparkline.d.ts +2 -2
  161. package/dist/components/table/snice-cell-sparkline.js +13 -7
  162. package/dist/components/table/snice-cell-sparkline.js.map +1 -1
  163. package/dist/components/table/snice-cell-status.d.ts +17 -0
  164. package/dist/components/table/snice-cell-status.js +144 -0
  165. package/dist/components/table/snice-cell-status.js.map +1 -0
  166. package/dist/components/table/snice-cell-tag.d.ts +16 -0
  167. package/dist/components/table/snice-cell-tag.js +131 -0
  168. package/dist/components/table/snice-cell-tag.js.map +1 -0
  169. package/dist/components/table/snice-cell-text.d.ts +2 -2
  170. package/dist/components/table/snice-cell-text.js +14 -8
  171. package/dist/components/table/snice-cell-text.js.map +1 -1
  172. package/dist/components/table/snice-cell.d.ts +2 -2
  173. package/dist/components/table/snice-cell.js +12 -6
  174. package/dist/components/table/snice-cell.js.map +1 -1
  175. package/dist/components/table/snice-column.d.ts +1 -1
  176. package/dist/components/table/snice-column.js +6 -3
  177. package/dist/components/table/snice-column.js.map +1 -1
  178. package/dist/components/table/snice-header.d.ts +5 -5
  179. package/dist/components/table/snice-header.js +60 -50
  180. package/dist/components/table/snice-header.js.map +1 -1
  181. package/dist/components/table/snice-progress.d.ts +2 -2
  182. package/dist/components/table/snice-progress.js +18 -11
  183. package/dist/components/table/snice-progress.js.map +1 -1
  184. package/dist/components/table/snice-rating.d.ts +2 -2
  185. package/dist/components/table/snice-rating.js +15 -8
  186. package/dist/components/table/snice-rating.js.map +1 -1
  187. package/dist/components/table/snice-row.d.ts +17 -6
  188. package/dist/components/table/snice-row.js +95 -44
  189. package/dist/components/table/snice-row.js.map +1 -1
  190. package/dist/components/table/snice-table.d.ts +18 -10
  191. package/dist/components/table/snice-table.js +355 -173
  192. package/dist/components/table/snice-table.js.map +1 -1
  193. package/dist/components/table/snice-table.types.d.ts +101 -2
  194. package/dist/components/tabs/snice-tab-panel.d.ts +2 -2
  195. package/dist/components/tabs/snice-tab-panel.js +12 -6
  196. package/dist/components/tabs/snice-tab-panel.js.map +1 -1
  197. package/dist/components/tabs/snice-tab.d.ts +6 -5
  198. package/dist/components/tabs/snice-tab.js +36 -19
  199. package/dist/components/tabs/snice-tab.js.map +1 -1
  200. package/dist/components/tabs/snice-tabs.d.ts +5 -5
  201. package/dist/components/tabs/snice-tabs.js +38 -28
  202. package/dist/components/tabs/snice-tabs.js.map +1 -1
  203. package/dist/components/toast/snice-toast-container.d.ts +7 -7
  204. package/dist/components/toast/snice-toast-container.js +19 -12
  205. package/dist/components/toast/snice-toast-container.js.map +1 -1
  206. package/dist/components/toast/snice-toast.d.ts +3 -15
  207. package/dist/components/toast/snice-toast.js +49 -108
  208. package/dist/components/toast/snice-toast.js.map +1 -1
  209. package/dist/components/tooltip/snice-tooltip.d.ts +2 -2
  210. package/dist/components/tooltip/snice-tooltip.js +14 -7
  211. package/dist/components/tooltip/snice-tooltip.js.map +1 -1
  212. package/dist/context.d.ts +44 -0
  213. package/dist/element-ready.d.ts +40 -0
  214. package/dist/{types/element.d.ts → element.d.ts} +2 -8
  215. package/dist/{types/events.d.ts → events.d.ts} +0 -4
  216. package/dist/index.cjs +2589 -605
  217. package/dist/index.cjs.map +1 -1
  218. package/dist/index.d.ts +21 -0
  219. package/dist/index.esm.js +2568 -604
  220. package/dist/index.esm.js.map +1 -1
  221. package/dist/index.iife.js +2589 -605
  222. package/dist/index.iife.js.map +1 -1
  223. package/dist/method-decorators.d.ts +121 -0
  224. package/dist/on.d.ts +59 -0
  225. package/dist/parts.d.ts +159 -0
  226. package/dist/render-debug.d.ts +27 -0
  227. package/dist/render-tracker.d.ts +14 -0
  228. package/dist/render.d.ts +96 -0
  229. package/dist/symbols.cjs +163 -0
  230. package/dist/symbols.cjs.map +1 -1
  231. package/dist/{types/symbols.d.ts → symbols.d.ts} +22 -0
  232. package/dist/symbols.esm.js +27 -3
  233. package/dist/symbols.esm.js.map +1 -1
  234. package/dist/template.d.ts +100 -0
  235. package/dist/transitions.cjs +219 -0
  236. package/dist/transitions.esm.js +2 -2
  237. package/dist/types/context.d.ts +48 -0
  238. package/dist/types/element-options.d.ts +26 -0
  239. package/dist/types/index.d.ts +25 -9
  240. package/dist/types/nav-context.d.ts +19 -0
  241. package/dist/types/{types/on-options.d.ts → on-options.d.ts} +2 -0
  242. package/dist/types/{types/placard.d.ts → placard.d.ts} +0 -1
  243. package/docs/ai/README.md +17 -0
  244. package/docs/ai/api.md +175 -0
  245. package/docs/ai/architecture.md +160 -0
  246. package/docs/ai/components/accordion.md +174 -0
  247. package/docs/ai/components/alert.md +77 -0
  248. package/docs/ai/components/avatar.md +61 -0
  249. package/docs/ai/components/badge.md +69 -0
  250. package/docs/ai/components/breadcrumbs.md +74 -0
  251. package/docs/ai/components/button.md +75 -0
  252. package/docs/ai/components/card.md +61 -0
  253. package/docs/ai/components/checkbox.md +74 -0
  254. package/docs/ai/components/chip.md +73 -0
  255. package/docs/ai/components/date-picker.md +75 -0
  256. package/docs/ai/components/divider.md +66 -0
  257. package/docs/ai/components/drawer.md +80 -0
  258. package/docs/ai/components/input.md +111 -0
  259. package/docs/ai/components/login.md +109 -0
  260. package/docs/ai/components/modal.md +67 -0
  261. package/docs/ai/components/nav.md +76 -0
  262. package/docs/ai/components/pagination.md +55 -0
  263. package/docs/ai/components/progress.md +72 -0
  264. package/docs/ai/components/radio.md +79 -0
  265. package/docs/ai/components/select.md +92 -0
  266. package/docs/ai/components/skeleton.md +57 -0
  267. package/docs/ai/components/switch.md +53 -0
  268. package/docs/ai/components/table.md +227 -0
  269. package/docs/ai/components/tabs.md +83 -0
  270. package/docs/ai/components/toast.md +140 -0
  271. package/docs/ai/components/tooltip.md +146 -0
  272. package/docs/ai/patterns.md +244 -0
  273. package/docs/components/accordion.md +558 -0
  274. package/docs/components/drawer.md +602 -0
  275. package/docs/components/modal.md +558 -0
  276. package/docs/components/nav.md +239 -0
  277. package/docs/components/pagination.md +289 -0
  278. package/docs/components/select.md +599 -0
  279. package/docs/components/switch.md +354 -0
  280. package/docs/components/tabs.md +546 -0
  281. package/docs/components/toast.md +506 -0
  282. package/docs/components/tooltip.md +523 -0
  283. package/docs/controllers.md +744 -0
  284. package/docs/elements.md +855 -0
  285. package/docs/events.md +807 -0
  286. package/docs/migration-v2-to-v3.md +569 -0
  287. package/docs/observe.md +588 -0
  288. package/docs/placards.md +401 -0
  289. package/docs/request-response.md +852 -0
  290. package/docs/routing.md +1186 -0
  291. package/package.json +10 -11
  292. package/dist/components/snice-cell-C9N6yGxQ.js +0 -4
  293. package/dist/components/snice-cell-C9N6yGxQ.js.map +0 -1
  294. package/dist/types/types/index.d.ts +0 -23
  295. /package/dist/{types/controller.d.ts → controller.d.ts} +0 -0
  296. /package/dist/{types/global.d.ts → global.d.ts} +0 -0
  297. /package/dist/{types/observe.d.ts → observe.d.ts} +0 -0
  298. /package/dist/{types/request-response.d.ts → request-response.d.ts} +0 -0
  299. /package/dist/{types/router.d.ts → router.d.ts} +0 -0
  300. /package/dist/{types/testing.d.ts → testing.d.ts} +0 -0
  301. /package/dist/{types/transitions.d.ts → transitions.d.ts} +0 -0
  302. /package/dist/types/{types/adopted-options.d.ts → adopted-options.d.ts} +0 -0
  303. /package/dist/types/{types/app-context.d.ts → app-context.d.ts} +0 -0
  304. /package/dist/types/{types/dispatch-options.d.ts → dispatch-options.d.ts} +0 -0
  305. /package/dist/types/{types/guard.d.ts → guard.d.ts} +0 -0
  306. /package/dist/types/{types/i-controller.d.ts → i-controller.d.ts} +0 -0
  307. /package/dist/types/{types/moved-options.d.ts → moved-options.d.ts} +0 -0
  308. /package/dist/types/{types/observe-options.d.ts → observe-options.d.ts} +0 -0
  309. /package/dist/types/{types/page-options.d.ts → page-options.d.ts} +0 -0
  310. /package/dist/types/{types/part-options.d.ts → part-options.d.ts} +0 -0
  311. /package/dist/types/{types/property-converter.d.ts → property-converter.d.ts} +0 -0
  312. /package/dist/types/{types/property-options.d.ts → property-options.d.ts} +0 -0
  313. /package/dist/types/{types/query-options.d.ts → query-options.d.ts} +0 -0
  314. /package/dist/types/{types/request-options.d.ts → request-options.d.ts} +0 -0
  315. /package/dist/types/{types/respond-options.d.ts → respond-options.d.ts} +0 -0
  316. /package/dist/types/{types/route-params.d.ts → route-params.d.ts} +0 -0
  317. /package/dist/types/{types/router-instance.d.ts → router-instance.d.ts} +0 -0
  318. /package/dist/types/{types/router-options.d.ts → router-options.d.ts} +0 -0
  319. /package/dist/types/{types/simple-array.d.ts → simple-array.d.ts} +0 -0
  320. /package/dist/types/{types/snice-element.d.ts → snice-element.d.ts} +0 -0
  321. /package/dist/types/{types/snice-global.d.ts → snice-global.d.ts} +0 -0
  322. /package/dist/types/{types/transition.d.ts → transition.d.ts} +0 -0
  323. /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
@@ -0,0 +1,523 @@
1
+ # Tooltip Component
2
+
3
+ The `<snice-tooltip>` component provides contextual information when users interact with an element. Tooltips appear on hover, click, or focus and can be positioned in 13 different locations relative to the trigger element.
4
+
5
+ ## Table of Contents
6
+ - [Basic Usage](#basic-usage)
7
+ - [Properties](#properties)
8
+ - [Methods](#methods)
9
+ - [Positions](#positions)
10
+ - [Triggers](#triggers)
11
+ - [Examples](#examples)
12
+
13
+ ## Basic Usage
14
+
15
+ ```html
16
+ <snice-tooltip content="This is a tooltip">
17
+ <button>Hover me</button>
18
+ </snice-tooltip>
19
+ ```
20
+
21
+ ```typescript
22
+ import 'snice/components/tooltip/snice-tooltip';
23
+ ```
24
+
25
+ ## Properties
26
+
27
+ | Property | Type | Default | Description |
28
+ |----------|------|---------|-------------|
29
+ | `content` | `string` | `''` | Tooltip text content |
30
+ | `position` | `TooltipPosition` | `'top'` | Position relative to trigger |
31
+ | `trigger` | `TooltipTrigger` | `'hover'` | Interaction that shows tooltip |
32
+ | `delay` | `number` | `0` | Show delay in milliseconds |
33
+ | `hideDelay` | `number` | `0` | Hide delay in milliseconds |
34
+ | `offset` | `number` | `12` | Distance from trigger in pixels |
35
+ | `arrow` | `boolean` | `true` | Show arrow indicator |
36
+ | `open` | `boolean` | `false` | Visibility state (manual trigger) |
37
+ | `maxWidth` | `number` | `250` | Maximum width in pixels |
38
+ | `zIndex` | `number` | `10000` | Stacking order |
39
+
40
+ ### TooltipPosition
41
+
42
+ **Main positions:**
43
+ - `'top'` - Centered above
44
+ - `'bottom'` - Centered below
45
+ - `'left'` - Centered to the left
46
+ - `'right'` - Centered to the right
47
+
48
+ **Aligned positions:**
49
+ - `'top-start'` - Above, left-aligned
50
+ - `'top-end'` - Above, right-aligned
51
+ - `'bottom-start'` - Below, left-aligned
52
+ - `'bottom-end'` - Below, right-aligned
53
+ - `'left-start'` - Left, top-aligned
54
+ - `'left-end'` - Left, bottom-aligned
55
+ - `'right-start'` - Right, top-aligned
56
+ - `'right-end'` - Right, bottom-aligned
57
+
58
+ ### TooltipTrigger
59
+
60
+ - `'hover'` - Show on mouse enter, hide on mouse leave
61
+ - `'click'` - Toggle on click, hide on click outside
62
+ - `'focus'` - Show on focus, hide on blur
63
+ - `'manual'` - Control via `open` property
64
+
65
+ ## Methods
66
+
67
+ ### `show(): void`
68
+ Show the tooltip.
69
+
70
+ ```typescript
71
+ const tooltip = document.querySelector('snice-tooltip');
72
+ tooltip.show();
73
+ ```
74
+
75
+ ### `hide(): void`
76
+ Hide the tooltip.
77
+
78
+ ```typescript
79
+ tooltip.hide();
80
+ ```
81
+
82
+ ### `toggle(): void`
83
+ Toggle tooltip visibility.
84
+
85
+ ```typescript
86
+ tooltip.toggle();
87
+ ```
88
+
89
+ ### `updatePosition(): void`
90
+ Recalculate and update tooltip position. Useful when trigger element moves or resizes.
91
+
92
+ ```typescript
93
+ tooltip.updatePosition();
94
+ ```
95
+
96
+ ## Positions
97
+
98
+ ### Basic Positions
99
+
100
+ ```html
101
+ <!-- Top -->
102
+ <snice-tooltip content="Tooltip above" position="top">
103
+ <button>Top</button>
104
+ </snice-tooltip>
105
+
106
+ <!-- Bottom -->
107
+ <snice-tooltip content="Tooltip below" position="bottom">
108
+ <button>Bottom</button>
109
+ </snice-tooltip>
110
+
111
+ <!-- Left -->
112
+ <snice-tooltip content="Tooltip on left" position="left">
113
+ <button>Left</button>
114
+ </snice-tooltip>
115
+
116
+ <!-- Right -->
117
+ <snice-tooltip content="Tooltip on right" position="right">
118
+ <button>Right</button>
119
+ </snice-tooltip>
120
+ ```
121
+
122
+ ### Aligned Positions
123
+
124
+ ```html
125
+ <!-- Top-start (left-aligned) -->
126
+ <snice-tooltip content="Left aligned" position="top-start">
127
+ <button>Top Start</button>
128
+ </snice-tooltip>
129
+
130
+ <!-- Top-end (right-aligned) -->
131
+ <snice-tooltip content="Right aligned" position="top-end">
132
+ <button>Top End</button>
133
+ </snice-tooltip>
134
+
135
+ <!-- Bottom-start -->
136
+ <snice-tooltip content="Left aligned" position="bottom-start">
137
+ <button>Bottom Start</button>
138
+ </snice-tooltip>
139
+
140
+ <!-- And so on... -->
141
+ ```
142
+
143
+ ## Triggers
144
+
145
+ ### Hover (Default)
146
+
147
+ ```html
148
+ <snice-tooltip content="Appears on hover">
149
+ <button>Hover me</button>
150
+ </snice-tooltip>
151
+ ```
152
+
153
+ ### Click
154
+
155
+ ```html
156
+ <snice-tooltip content="Click to toggle" trigger="click">
157
+ <button>Click me</button>
158
+ </snice-tooltip>
159
+ ```
160
+
161
+ ### Focus
162
+
163
+ ```html
164
+ <snice-tooltip content="Focus the input" trigger="focus">
165
+ <input type="text" placeholder="Focus me">
166
+ </snice-tooltip>
167
+ ```
168
+
169
+ ### Manual
170
+
171
+ ```html
172
+ <snice-tooltip id="manualTip" content="Manually controlled" trigger="manual">
173
+ <span>Trigger element</span>
174
+ </snice-tooltip>
175
+
176
+ <button onclick="document.querySelector('#manualTip').open = true">
177
+ Show
178
+ </button>
179
+ <button onclick="document.querySelector('#manualTip').open = false">
180
+ Hide
181
+ </button>
182
+ ```
183
+
184
+ ## Examples
185
+
186
+ ### Icon with Tooltip
187
+
188
+ ```html
189
+ <snice-tooltip content="Save your changes">
190
+ <button>
191
+ <svg width="16" height="16" viewBox="0 0 16 16">
192
+ <path d="M8 2l6 12H2z"/>
193
+ </svg>
194
+ </button>
195
+ </snice-tooltip>
196
+ ```
197
+
198
+ ### With Delay
199
+
200
+ ```html
201
+ <!-- Show after 500ms, hide after 200ms -->
202
+ <snice-tooltip
203
+ content="Delayed tooltip"
204
+ delay="500"
205
+ hide-delay="200">
206
+ <button>Hover and wait</button>
207
+ </snice-tooltip>
208
+ ```
209
+
210
+ ### Without Arrow
211
+
212
+ ```html
213
+ <snice-tooltip content="No arrow" arrow="false">
214
+ <button>No arrow</button>
215
+ </snice-tooltip>
216
+ ```
217
+
218
+ ### Custom Width
219
+
220
+ ```html
221
+ <snice-tooltip
222
+ content="This is a longer tooltip that needs more space"
223
+ max-width="400">
224
+ <button>Wide tooltip</button>
225
+ </snice-tooltip>
226
+ ```
227
+
228
+ ### Custom Offset
229
+
230
+ ```html
231
+ <!-- Further away from trigger -->
232
+ <snice-tooltip content="Far away" offset="30">
233
+ <button>More space</button>
234
+ </snice-tooltip>
235
+ ```
236
+
237
+ ### Help Icon
238
+
239
+ ```html
240
+ <style>
241
+ .help-icon {
242
+ display: inline-flex;
243
+ align-items: center;
244
+ justify-content: center;
245
+ width: 18px;
246
+ height: 18px;
247
+ border-radius: 50%;
248
+ background: #3b82f6;
249
+ color: white;
250
+ font-size: 12px;
251
+ cursor: help;
252
+ }
253
+ </style>
254
+
255
+ <div style="display: flex; align-items: center; gap: 8px;">
256
+ <label>Password</label>
257
+ <snice-tooltip content="Must be at least 8 characters">
258
+ <span class="help-icon">?</span>
259
+ </snice-tooltip>
260
+ </div>
261
+ ```
262
+
263
+ ### Disabled Button Explanation
264
+
265
+ ```html
266
+ <snice-tooltip content="Please fill out the form first">
267
+ <span>
268
+ <button disabled>Submit</button>
269
+ </span>
270
+ </snice-tooltip>
271
+ ```
272
+
273
+ **Note:** Wrap disabled buttons in a span since they don't trigger mouse events.
274
+
275
+ ### Truncated Text
276
+
277
+ ```html
278
+ <style>
279
+ .truncated {
280
+ max-width: 200px;
281
+ white-space: nowrap;
282
+ overflow: hidden;
283
+ text-overflow: ellipsis;
284
+ }
285
+ </style>
286
+
287
+ <snice-tooltip content="This is the full text that gets truncated">
288
+ <div class="truncated">
289
+ This is the full text that gets truncated
290
+ </div>
291
+ </snice-tooltip>
292
+ ```
293
+
294
+ ### Form Field Help
295
+
296
+ ```html
297
+ <div style="display: flex; flex-direction: column; gap: 8px;">
298
+ <div style="display: flex; align-items: center; gap: 8px;">
299
+ <label for="email">Email</label>
300
+ <snice-tooltip content="We'll never share your email with anyone" position="right">
301
+ <span style="color: #666; cursor: help;">ℹ️</span>
302
+ </snice-tooltip>
303
+ </div>
304
+ <input id="email" type="email">
305
+ </div>
306
+ ```
307
+
308
+ ### Toolbar Buttons
309
+
310
+ ```html
311
+ <style>
312
+ .toolbar {
313
+ display: flex;
314
+ gap: 4px;
315
+ padding: 8px;
316
+ background: #f3f4f6;
317
+ border-radius: 8px;
318
+ }
319
+
320
+ .toolbar button {
321
+ padding: 8px;
322
+ border: none;
323
+ background: transparent;
324
+ cursor: pointer;
325
+ border-radius: 4px;
326
+ }
327
+
328
+ .toolbar button:hover {
329
+ background: white;
330
+ }
331
+ </style>
332
+
333
+ <div class="toolbar">
334
+ <snice-tooltip content="Bold (Ctrl+B)" position="bottom">
335
+ <button><b>B</b></button>
336
+ </snice-tooltip>
337
+
338
+ <snice-tooltip content="Italic (Ctrl+I)" position="bottom">
339
+ <button><i>I</i></button>
340
+ </snice-tooltip>
341
+
342
+ <snice-tooltip content="Underline (Ctrl+U)" position="bottom">
343
+ <button><u>U</u></button>
344
+ </snice-tooltip>
345
+ </div>
346
+ ```
347
+
348
+ ### Chart Data Points
349
+
350
+ ```html
351
+ <style>
352
+ .chart-point {
353
+ width: 12px;
354
+ height: 12px;
355
+ border-radius: 50%;
356
+ background: #3b82f6;
357
+ cursor: pointer;
358
+ }
359
+ </style>
360
+
361
+ <snice-tooltip content="Sales: $12,345" position="top">
362
+ <div class="chart-point"></div>
363
+ </snice-tooltip>
364
+ ```
365
+
366
+ ### Status Indicators
367
+
368
+ ```html
369
+ <style>
370
+ .status {
371
+ display: inline-flex;
372
+ align-items: center;
373
+ gap: 6px;
374
+ }
375
+
376
+ .status-dot {
377
+ width: 8px;
378
+ height: 8px;
379
+ border-radius: 50%;
380
+ }
381
+
382
+ .status-dot.online { background: #10b981; }
383
+ .status-dot.offline { background: #ef4444; }
384
+ </style>
385
+
386
+ <snice-tooltip content="Server is online and responding" position="right">
387
+ <div class="status">
388
+ <span class="status-dot online"></span>
389
+ <span>Server Status</span>
390
+ </div>
391
+ </snice-tooltip>
392
+ ```
393
+
394
+ ### Programmatic Control
395
+
396
+ ```typescript
397
+ import type { SniceTooltipElement } from 'snice/components/tooltip/snice-tooltip.types';
398
+
399
+ const tooltip = document.querySelector<SniceTooltipElement>('snice-tooltip');
400
+
401
+ // Show/hide programmatically
402
+ tooltip.show();
403
+ setTimeout(() => tooltip.hide(), 2000);
404
+
405
+ // Toggle
406
+ tooltip.toggle();
407
+
408
+ // Update position after layout changes
409
+ window.addEventListener('resize', () => {
410
+ tooltip.updatePosition();
411
+ });
412
+
413
+ // Change properties
414
+ tooltip.content = 'Updated content';
415
+ tooltip.position = 'bottom';
416
+ tooltip.arrow = false;
417
+ ```
418
+
419
+ ### Dynamic Content
420
+
421
+ ```html
422
+ <snice-tooltip id="dynamicTip" content="Loading..." trigger="manual">
423
+ <button id="fetchBtn">Fetch Data</button>
424
+ </snice-tooltip>
425
+
426
+ <script type="module">
427
+ import 'snice/components/tooltip/snice-tooltip';
428
+
429
+ const btn = document.querySelector('#fetchBtn');
430
+ const tooltip = document.querySelector('#dynamicTip');
431
+
432
+ btn.addEventListener('click', async () => {
433
+ tooltip.content = 'Loading...';
434
+ tooltip.open = true;
435
+
436
+ const data = await fetch('/api/data').then(r => r.json());
437
+
438
+ tooltip.content = `Loaded ${data.count} items`;
439
+
440
+ setTimeout(() => {
441
+ tooltip.open = false;
442
+ }, 2000);
443
+ });
444
+ </script>
445
+ ```
446
+
447
+ ## Smart Positioning
448
+
449
+ Tooltips automatically reposition themselves if they would overflow the viewport:
450
+
451
+ ```html
452
+ <!-- Will flip to bottom if no room above -->
453
+ <snice-tooltip content="Smart positioning" position="top">
454
+ <button>Near top edge</button>
455
+ </snice-tooltip>
456
+ ```
457
+
458
+ To disable auto-repositioning:
459
+
460
+ ```html
461
+ <snice-tooltip
462
+ content="Stays on top"
463
+ position="top"
464
+ strict-positioning>
465
+ <button>Fixed position</button>
466
+ </snice-tooltip>
467
+ ```
468
+
469
+ ## Accessibility
470
+
471
+ - **role="tooltip"**: Proper ARIA role on tooltip element
472
+ - **Keyboard accessible**: Focus trigger works with keyboard navigation
473
+ - **Screen reader friendly**: Content announced when tooltip appears
474
+ - **Visible focus**: Trigger elements maintain focus indicators
475
+ - **Disabled elements**: Wrap in span to enable tooltips on disabled buttons
476
+
477
+ ## Browser Support
478
+
479
+ - Modern browsers (Chrome, Firefox, Safari, Edge)
480
+ - Requires Custom Elements v1 and Shadow DOM support
481
+
482
+ ## Best Practices
483
+
484
+ 1. **Keep content brief**: Tooltips should provide quick, scannable information
485
+ 2. **Don't repeat visible text**: Add value with additional context
486
+ 3. **Avoid interactive content**: Tooltips should be informational only
487
+ 4. **Use consistent triggers**: Stick to one trigger type per interface
488
+ 5. **Position appropriately**: Consider available screen space
489
+ 6. **Test on mobile**: Hover doesn't work on touch devices
490
+ 7. **Wrap disabled elements**: Disabled elements don't fire events
491
+ 8. **Provide alternatives**: Don't rely solely on tooltips for critical info
492
+
493
+ ## Common Patterns
494
+
495
+ ### Help Text Pattern
496
+ ```html
497
+ <snice-tooltip content="Additional context">
498
+ <span class="help-icon">?</span>
499
+ </snice-tooltip>
500
+ ```
501
+
502
+ ### Truncation Pattern
503
+ ```html
504
+ <snice-tooltip content="Full text">
505
+ <div class="truncated">Full text</div>
506
+ </snice-tooltip>
507
+ ```
508
+
509
+ ### Icon Button Pattern
510
+ ```html
511
+ <snice-tooltip content="Action description">
512
+ <button aria-label="Action description">
513
+ <icon>
514
+ </button>
515
+ </snice-tooltip>
516
+ ```
517
+
518
+ ### Status Pattern
519
+ ```html
520
+ <snice-tooltip content="Detailed status">
521
+ <span class="status-indicator"></span>
522
+ </snice-tooltip>
523
+ ```