snice 1.13.2 → 1.13.4

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 (295) hide show
  1. package/bin/templates/base/README.md +1 -1
  2. package/dist/components/accordion/snice-accordion-item.d.ts +25 -0
  3. package/dist/components/accordion/snice-accordion-item.js +260 -0
  4. package/dist/components/accordion/snice-accordion-item.js.map +1 -0
  5. package/dist/components/accordion/snice-accordion.d.ts +28 -0
  6. package/dist/components/accordion/snice-accordion.js +221 -0
  7. package/dist/components/accordion/snice-accordion.js.map +1 -0
  8. package/dist/components/accordion/snice-accordion.types.d.ts +29 -0
  9. package/dist/components/accordion/snice-accordion.types.js +2 -0
  10. package/dist/components/accordion/snice-accordion.types.js.map +1 -0
  11. package/dist/components/alert/snice-alert.d.ts +26 -0
  12. package/dist/components/alert/snice-alert.js +191 -0
  13. package/dist/components/alert/snice-alert.js.map +1 -0
  14. package/dist/components/alert/snice-alert.types.d.ts +11 -0
  15. package/dist/components/alert/snice-alert.types.js +2 -0
  16. package/dist/components/alert/snice-alert.types.js.map +1 -0
  17. package/dist/components/avatar/snice-avatar.d.ts +24 -0
  18. package/dist/components/avatar/snice-avatar.js +177 -0
  19. package/dist/components/avatar/snice-avatar.js.map +1 -0
  20. package/dist/components/avatar/snice-avatar.types.d.ts +12 -0
  21. package/dist/components/avatar/snice-avatar.types.js +2 -0
  22. package/dist/components/avatar/snice-avatar.types.js.map +1 -0
  23. package/dist/components/badge/snice-badge.d.ts +25 -0
  24. package/dist/components/badge/snice-badge.js +157 -0
  25. package/dist/components/badge/snice-badge.js.map +1 -0
  26. package/dist/components/badge/snice-badge.types.d.ts +15 -0
  27. package/dist/components/badge/snice-badge.types.js +2 -0
  28. package/dist/components/badge/snice-badge.types.js.map +1 -0
  29. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +27 -0
  30. package/dist/components/breadcrumbs/snice-breadcrumbs.js +212 -0
  31. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -0
  32. package/dist/components/breadcrumbs/snice-breadcrumbs.types.d.ts +23 -0
  33. package/dist/components/breadcrumbs/snice-breadcrumbs.types.js +2 -0
  34. package/dist/components/breadcrumbs/snice-breadcrumbs.types.js.map +1 -0
  35. package/dist/components/breadcrumbs/snice-crumb.d.ts +9 -0
  36. package/dist/components/breadcrumbs/snice-crumb.js +50 -0
  37. package/dist/components/breadcrumbs/snice-crumb.js.map +1 -0
  38. package/dist/components/button/snice-button.d.ts +32 -0
  39. package/dist/components/button/snice-button.js +212 -0
  40. package/dist/components/button/snice-button.js.map +1 -0
  41. package/dist/components/button/snice-button.types.d.ts +23 -0
  42. package/dist/components/button/snice-button.types.js +2 -0
  43. package/dist/components/button/snice-button.types.js.map +1 -0
  44. package/dist/components/card/snice-card.d.ts +19 -0
  45. package/dist/components/card/snice-card.js +132 -0
  46. package/dist/components/card/snice-card.js.map +1 -0
  47. package/dist/components/card/snice-card.types.d.ts +9 -0
  48. package/dist/components/card/snice-card.types.js +2 -0
  49. package/dist/components/card/snice-card.types.js.map +1 -0
  50. package/dist/components/checkbox/snice-checkbox.d.ts +34 -0
  51. package/dist/components/checkbox/snice-checkbox.js +289 -0
  52. package/dist/components/checkbox/snice-checkbox.js.map +1 -0
  53. package/dist/components/checkbox/snice-checkbox.types.d.ts +20 -0
  54. package/dist/components/checkbox/snice-checkbox.types.js +2 -0
  55. package/dist/components/checkbox/snice-checkbox.types.js.map +1 -0
  56. package/dist/components/chip/snice-chip.d.ts +28 -0
  57. package/dist/components/chip/snice-chip.js +203 -0
  58. package/dist/components/chip/snice-chip.js.map +1 -0
  59. package/dist/components/chip/snice-chip.types.d.ts +14 -0
  60. package/dist/components/chip/snice-chip.types.js +2 -0
  61. package/dist/components/chip/snice-chip.types.js.map +1 -0
  62. package/dist/components/date-picker/snice-date-picker.d.ts +82 -0
  63. package/dist/components/date-picker/snice-date-picker.js +880 -0
  64. package/dist/components/date-picker/snice-date-picker.js.map +1 -0
  65. package/dist/components/date-picker/snice-date-picker.types.d.ts +71 -0
  66. package/dist/components/date-picker/snice-date-picker.types.js +2 -0
  67. package/dist/components/date-picker/snice-date-picker.types.js.map +1 -0
  68. package/dist/components/divider/snice-divider.d.ts +17 -0
  69. package/dist/components/divider/snice-divider.js +111 -0
  70. package/dist/components/divider/snice-divider.js.map +1 -0
  71. package/dist/components/divider/snice-divider.types.d.ts +14 -0
  72. package/dist/components/divider/snice-divider.types.js +2 -0
  73. package/dist/components/divider/snice-divider.types.js.map +1 -0
  74. package/dist/components/drawer/snice-drawer.d.ts +37 -0
  75. package/dist/components/drawer/snice-drawer.js +335 -0
  76. package/dist/components/drawer/snice-drawer.js.map +1 -0
  77. package/dist/components/drawer/snice-drawer.types.d.ts +16 -0
  78. package/dist/components/drawer/snice-drawer.types.js +2 -0
  79. package/dist/components/drawer/snice-drawer.types.js.map +1 -0
  80. package/dist/components/input/snice-input.d.ts +65 -0
  81. package/dist/components/input/snice-input.js +603 -0
  82. package/dist/components/input/snice-input.js.map +1 -0
  83. package/dist/components/input/snice-input.types.d.ts +53 -0
  84. package/dist/components/input/snice-input.types.js +2 -0
  85. package/dist/components/input/snice-input.types.js.map +1 -0
  86. package/dist/components/layout/snice-layout-blog.d.ts +4 -0
  87. package/dist/components/layout/snice-layout-blog.js +56 -0
  88. package/dist/components/layout/snice-layout-blog.js.map +1 -0
  89. package/dist/components/layout/snice-layout-card.d.ts +6 -0
  90. package/dist/components/layout/snice-layout-card.js +53 -0
  91. package/dist/components/layout/snice-layout-card.js.map +1 -0
  92. package/dist/components/layout/snice-layout-centered.d.ts +5 -0
  93. package/dist/components/layout/snice-layout-centered.js +38 -0
  94. package/dist/components/layout/snice-layout-centered.js.map +1 -0
  95. package/dist/components/layout/snice-layout-dashboard.d.ts +4 -0
  96. package/dist/components/layout/snice-layout-dashboard.js +53 -0
  97. package/dist/components/layout/snice-layout-dashboard.js.map +1 -0
  98. package/dist/components/layout/snice-layout-fullscreen.d.ts +5 -0
  99. package/dist/components/layout/snice-layout-fullscreen.js +50 -0
  100. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -0
  101. package/dist/components/layout/snice-layout-landing.d.ts +4 -0
  102. package/dist/components/layout/snice-layout-landing.js +55 -0
  103. package/dist/components/layout/snice-layout-landing.js.map +1 -0
  104. package/dist/components/layout/snice-layout-minimal.d.ts +4 -0
  105. package/dist/components/layout/snice-layout-minimal.js +27 -0
  106. package/dist/components/layout/snice-layout-minimal.js.map +1 -0
  107. package/dist/components/layout/snice-layout-sidebar.d.ts +5 -0
  108. package/dist/components/layout/snice-layout-sidebar.js +64 -0
  109. package/dist/components/layout/snice-layout-sidebar.js.map +1 -0
  110. package/dist/components/layout/snice-layout-split.d.ts +6 -0
  111. package/dist/components/layout/snice-layout-split.js +47 -0
  112. package/dist/components/layout/snice-layout-split.js.map +1 -0
  113. package/dist/components/layout/snice-layout.d.ts +4 -0
  114. package/dist/components/layout/snice-layout.js +43 -0
  115. package/dist/components/layout/snice-layout.js.map +1 -0
  116. package/dist/components/layout/snice-layout.types.d.ts +3 -0
  117. package/dist/components/layout/snice-layout.types.js +2 -0
  118. package/dist/components/layout/snice-layout.types.js.map +1 -0
  119. package/dist/components/login/snice-login.d.ts +45 -0
  120. package/dist/components/login/snice-login.js +385 -0
  121. package/dist/components/login/snice-login.js.map +1 -0
  122. package/dist/components/login/snice-login.types.d.ts +31 -0
  123. package/dist/components/login/snice-login.types.js +2 -0
  124. package/dist/components/login/snice-login.types.js.map +1 -0
  125. package/dist/components/modal/snice-modal.d.ts +32 -0
  126. package/dist/components/modal/snice-modal.js +288 -0
  127. package/dist/components/modal/snice-modal.js.map +1 -0
  128. package/dist/components/modal/snice-modal.types.d.ts +18 -0
  129. package/dist/components/modal/snice-modal.types.js +2 -0
  130. package/dist/components/modal/snice-modal.types.js.map +1 -0
  131. package/dist/components/pagination/snice-pagination.d.ts +26 -0
  132. package/dist/components/pagination/snice-pagination.js +373 -0
  133. package/dist/components/pagination/snice-pagination.js.map +1 -0
  134. package/dist/components/pagination/snice-pagination.types.d.ts +18 -0
  135. package/dist/components/pagination/snice-pagination.types.js +2 -0
  136. package/dist/components/pagination/snice-pagination.types.js.map +1 -0
  137. package/dist/components/progress/snice-progress.d.ts +35 -0
  138. package/dist/components/progress/snice-progress.js +295 -0
  139. package/dist/components/progress/snice-progress.js.map +1 -0
  140. package/dist/components/progress/snice-progress.types.d.ts +18 -0
  141. package/dist/components/progress/snice-progress.types.js +2 -0
  142. package/dist/components/progress/snice-progress.types.js.map +1 -0
  143. package/dist/components/radio/snice-radio.d.ts +33 -0
  144. package/dist/components/radio/snice-radio.js +286 -0
  145. package/dist/components/radio/snice-radio.js.map +1 -0
  146. package/dist/components/radio/snice-radio.types.d.ts +19 -0
  147. package/dist/components/radio/snice-radio.types.js +2 -0
  148. package/dist/components/radio/snice-radio.types.js.map +1 -0
  149. package/dist/components/select/snice-option.d.ts +17 -0
  150. package/dist/components/select/snice-option.js +77 -0
  151. package/dist/components/select/snice-option.js.map +1 -0
  152. package/dist/components/select/snice-option.types.d.ts +14 -0
  153. package/dist/components/select/snice-option.types.js +2 -0
  154. package/dist/components/select/snice-option.types.js.map +1 -0
  155. package/dist/components/select/snice-select.d.ts +89 -0
  156. package/dist/components/select/snice-select.js +900 -0
  157. package/dist/components/select/snice-select.js.map +1 -0
  158. package/dist/components/select/snice-select.types.d.ts +49 -0
  159. package/dist/components/select/snice-select.types.js +2 -0
  160. package/dist/components/select/snice-select.types.js.map +1 -0
  161. package/dist/components/skeleton/snice-skeleton.d.ts +16 -0
  162. package/dist/components/skeleton/snice-skeleton.js +159 -0
  163. package/dist/components/skeleton/snice-skeleton.js.map +1 -0
  164. package/dist/components/skeleton/snice-skeleton.types.d.ts +10 -0
  165. package/dist/components/skeleton/snice-skeleton.types.js +2 -0
  166. package/dist/components/skeleton/snice-skeleton.types.js.map +1 -0
  167. package/dist/components/switch/snice-switch.d.ts +38 -0
  168. package/dist/components/switch/snice-switch.js +309 -0
  169. package/dist/components/switch/snice-switch.js.map +1 -0
  170. package/dist/components/switch/snice-switch.types.d.ts +21 -0
  171. package/dist/components/switch/snice-switch.types.js +2 -0
  172. package/dist/components/switch/snice-switch.types.js.map +1 -0
  173. package/dist/components/symbols.d.ts +1 -0
  174. package/dist/components/symbols.js +20 -0
  175. package/dist/components/symbols.js.map +1 -0
  176. package/dist/components/table/snice-cell-boolean.d.ts +21 -0
  177. package/dist/components/table/snice-cell-boolean.js +152 -0
  178. package/dist/components/table/snice-cell-boolean.js.map +1 -0
  179. package/dist/components/table/snice-cell-date.d.ts +24 -0
  180. package/dist/components/table/snice-cell-date.js +240 -0
  181. package/dist/components/table/snice-cell-date.js.map +1 -0
  182. package/dist/components/table/snice-cell-duration.d.ts +16 -0
  183. package/dist/components/table/snice-cell-duration.js +123 -0
  184. package/dist/components/table/snice-cell-duration.js.map +1 -0
  185. package/dist/components/table/snice-cell-filesize.d.ts +16 -0
  186. package/dist/components/table/snice-cell-filesize.js +119 -0
  187. package/dist/components/table/snice-cell-filesize.js.map +1 -0
  188. package/dist/components/table/snice-cell-number.d.ts +23 -0
  189. package/dist/components/table/snice-cell-number.js +202 -0
  190. package/dist/components/table/snice-cell-number.js.map +1 -0
  191. package/dist/components/table/snice-cell-progress.d.ts +17 -0
  192. package/dist/components/table/snice-cell-progress.js +114 -0
  193. package/dist/components/table/snice-cell-progress.js.map +1 -0
  194. package/dist/components/table/snice-cell-rating.d.ts +17 -0
  195. package/dist/components/table/snice-cell-rating.js +113 -0
  196. package/dist/components/table/snice-cell-rating.js.map +1 -0
  197. package/dist/components/table/snice-cell-sparkline.d.ts +29 -0
  198. package/dist/components/table/snice-cell-sparkline.js +290 -0
  199. package/dist/components/table/snice-cell-sparkline.js.map +1 -0
  200. package/dist/components/table/snice-cell-text.d.ts +19 -0
  201. package/dist/components/table/snice-cell-text.js +153 -0
  202. package/dist/components/table/snice-cell-text.js.map +1 -0
  203. package/dist/components/table/snice-cell.d.ts +32 -0
  204. package/dist/components/table/snice-cell.js +451 -0
  205. package/dist/components/table/snice-cell.js.map +1 -0
  206. package/dist/components/table/snice-column.d.ts +62 -0
  207. package/dist/components/table/snice-column.js +440 -0
  208. package/dist/components/table/snice-column.js.map +1 -0
  209. package/dist/components/table/snice-header.d.ts +33 -0
  210. package/dist/components/table/snice-header.js +303 -0
  211. package/dist/components/table/snice-header.js.map +1 -0
  212. package/dist/components/table/snice-progress.d.ts +10 -0
  213. package/dist/components/table/snice-progress.js +91 -0
  214. package/dist/components/table/snice-progress.js.map +1 -0
  215. package/dist/components/table/snice-rating.d.ts +9 -0
  216. package/dist/components/table/snice-rating.js +68 -0
  217. package/dist/components/table/snice-rating.js.map +1 -0
  218. package/dist/components/table/snice-row.d.ts +43 -0
  219. package/dist/components/table/snice-row.js +365 -0
  220. package/dist/components/table/snice-row.js.map +1 -0
  221. package/dist/components/table/snice-table.d.ts +69 -0
  222. package/dist/components/table/snice-table.js +814 -0
  223. package/dist/components/table/snice-table.js.map +1 -0
  224. package/dist/components/table/snice-table.types.d.ts +137 -0
  225. package/dist/components/table/snice-table.types.js +2 -0
  226. package/dist/components/table/snice-table.types.js.map +1 -0
  227. package/dist/components/tabs/snice-tab-panel.d.ts +12 -0
  228. package/dist/components/tabs/snice-tab-panel.js +78 -0
  229. package/dist/components/tabs/snice-tab-panel.js.map +1 -0
  230. package/dist/components/tabs/snice-tab.d.ts +13 -0
  231. package/dist/components/tabs/snice-tab.js +90 -0
  232. package/dist/components/tabs/snice-tab.js.map +1 -0
  233. package/dist/components/tabs/snice-tabs.d.ts +34 -0
  234. package/dist/components/tabs/snice-tabs.js +367 -0
  235. package/dist/components/tabs/snice-tabs.js.map +1 -0
  236. package/dist/components/tabs/snice-tabs.types.d.ts +23 -0
  237. package/dist/components/tabs/snice-tabs.types.js +2 -0
  238. package/dist/components/tabs/snice-tabs.types.js.map +1 -0
  239. package/dist/components/toast/snice-toast-container.d.ts +25 -0
  240. package/dist/components/toast/snice-toast-container.js +251 -0
  241. package/dist/components/toast/snice-toast-container.js.map +1 -0
  242. package/dist/components/toast/snice-toast.d.ts +23 -0
  243. package/dist/components/toast/snice-toast.js +316 -0
  244. package/dist/components/toast/snice-toast.js.map +1 -0
  245. package/dist/components/toast/snice-toast.types.d.ts +30 -0
  246. package/dist/components/toast/snice-toast.types.js +2 -0
  247. package/dist/components/toast/snice-toast.types.js.map +1 -0
  248. package/dist/components/tooltip/snice-tooltip.d.ts +50 -0
  249. package/dist/components/tooltip/snice-tooltip.js +656 -0
  250. package/dist/components/tooltip/snice-tooltip.js.map +1 -0
  251. package/dist/components/tooltip/snice-tooltip.types.d.ts +18 -0
  252. package/dist/components/tooltip/snice-tooltip.types.js +2 -0
  253. package/dist/components/tooltip/snice-tooltip.types.js.map +1 -0
  254. package/dist/components/transitions.d.ts +11 -0
  255. package/dist/components/transitions.js +69 -0
  256. package/dist/components/transitions.js.map +1 -0
  257. package/dist/src/controller.d.ts +61 -0
  258. package/dist/src/controller.js +297 -0
  259. package/dist/src/controller.js.map +1 -0
  260. package/dist/src/element.d.ts +77 -0
  261. package/dist/src/element.js +805 -0
  262. package/dist/src/element.js.map +1 -0
  263. package/dist/src/events.d.ts +37 -0
  264. package/dist/src/events.js +289 -0
  265. package/dist/src/events.js.map +1 -0
  266. package/dist/src/global.d.ts +7 -0
  267. package/dist/src/global.js +23 -0
  268. package/dist/src/global.js.map +1 -0
  269. package/{src/index.ts → dist/src/index.d.ts} +1 -1
  270. package/dist/src/index.js +8 -0
  271. package/dist/src/index.js.map +1 -0
  272. package/dist/src/observe.d.ts +26 -0
  273. package/dist/src/observe.js +329 -0
  274. package/dist/src/observe.js.map +1 -0
  275. package/dist/src/request-response.d.ts +46 -0
  276. package/dist/src/request-response.js +267 -0
  277. package/dist/src/request-response.js.map +1 -0
  278. package/dist/src/router.d.ts +87 -0
  279. package/dist/src/router.js +375 -0
  280. package/dist/src/router.js.map +1 -0
  281. package/dist/src/symbols.d.ts +29 -0
  282. package/{src/symbols.ts → dist/src/symbols.js} +2 -12
  283. package/dist/src/symbols.js.map +1 -0
  284. package/dist/src/transitions.d.ts +50 -0
  285. package/dist/src/transitions.js +199 -0
  286. package/dist/src/transitions.js.map +1 -0
  287. package/package.json +6 -8
  288. package/src/controller.ts +0 -347
  289. package/src/element.ts +0 -897
  290. package/src/events.ts +0 -349
  291. package/src/global.ts +0 -31
  292. package/src/observe.ts +0 -414
  293. package/src/request-response.ts +0 -336
  294. package/src/router.ts +0 -552
  295. package/src/transitions.ts +0 -264
@@ -0,0 +1,656 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var SniceTooltip_1;
11
+ import { element, property, query, on, watch, ready, dispose } from '../../src/index';
12
+ import css from './snice-tooltip.css?inline';
13
+ import portalCss from './snice-tooltip-portal.css?inline';
14
+ let SniceTooltip = SniceTooltip_1 = class SniceTooltip extends HTMLElement {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.content = '';
18
+ this.position = 'top';
19
+ this.trigger = 'hover';
20
+ this.delay = 0;
21
+ this.hideDelay = 0;
22
+ this.offset = 12;
23
+ this.arrow = true;
24
+ this.open = false;
25
+ this.maxWidth = 250;
26
+ this.zIndex = 10000;
27
+ this.strictPositioning = false;
28
+ this.activePosition = 'top';
29
+ this.handleClickOutside = (e) => {
30
+ if (!this.contains(e.target)) {
31
+ this.hide();
32
+ }
33
+ };
34
+ }
35
+ static ensurePortalStyles() {
36
+ if (SniceTooltip_1.portalStylesInjected)
37
+ return;
38
+ try {
39
+ // Use Constructable Stylesheets if supported
40
+ if ('adoptedStyleSheets' in document && 'CSSStyleSheet' in window) {
41
+ const sheet = new CSSStyleSheet();
42
+ sheet.replaceSync(portalCss);
43
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
44
+ }
45
+ else {
46
+ // Fallback for older browsers
47
+ const style = document.createElement('style');
48
+ style.textContent = portalCss;
49
+ document.head.appendChild(style);
50
+ }
51
+ SniceTooltip_1.portalStylesInjected = true;
52
+ }
53
+ catch (error) {
54
+ console.warn('Failed to inject tooltip portal styles:', error);
55
+ }
56
+ }
57
+ html() {
58
+ return /*html*/ `
59
+ <div class="tooltip-trigger">
60
+ <slot></slot>
61
+ </div>
62
+ <div class="tooltip tooltip--${this.position}" role="tooltip" hidden>
63
+ <div class="tooltip__content">${this.content}</div>
64
+ <div class="tooltip__arrow"></div>
65
+ </div>
66
+ `;
67
+ }
68
+ css() {
69
+ return css;
70
+ }
71
+ init() {
72
+ if (this.tooltipElement) {
73
+ this.tooltipElement.style.setProperty('--tooltip-max-width', `${this.maxWidth}px`);
74
+ this.tooltipElement.style.setProperty('--tooltip-z-index', `${this.zIndex}`);
75
+ }
76
+ if (this.open && this.trigger === 'manual') {
77
+ this.show();
78
+ }
79
+ }
80
+ cleanup() {
81
+ this.clearTimeouts();
82
+ if (this.portalElement) {
83
+ this.portalElement.remove();
84
+ this.portalElement = undefined;
85
+ }
86
+ }
87
+ updateContent() {
88
+ const contentEl = this.shadowRoot?.querySelector('.tooltip__content');
89
+ if (contentEl) {
90
+ contentEl.textContent = this.content;
91
+ }
92
+ }
93
+ updateArrow() {
94
+ if (this.arrowElement) {
95
+ if (this.arrow) {
96
+ this.arrowElement.removeAttribute('hidden');
97
+ }
98
+ else {
99
+ this.arrowElement.setAttribute('hidden', '');
100
+ }
101
+ }
102
+ }
103
+ updateMaxWidth() {
104
+ if (this.tooltipElement) {
105
+ this.tooltipElement.style.setProperty('--tooltip-max-width', `${this.maxWidth}px`);
106
+ }
107
+ }
108
+ updateZIndex() {
109
+ if (this.tooltipElement) {
110
+ this.tooltipElement.style.setProperty('--tooltip-z-index', `${this.zIndex}`);
111
+ }
112
+ }
113
+ handleOpenChange() {
114
+ if (this.trigger === 'manual') {
115
+ if (this.open) {
116
+ this.show();
117
+ }
118
+ else {
119
+ this.hide();
120
+ }
121
+ }
122
+ }
123
+ handleMouseEnter() {
124
+ if (this.trigger === 'hover') {
125
+ this.scheduleShow();
126
+ }
127
+ }
128
+ handleMouseLeave() {
129
+ if (this.trigger === 'hover') {
130
+ this.scheduleHide();
131
+ }
132
+ }
133
+ handleFocusIn() {
134
+ if (this.trigger === 'focus') {
135
+ this.scheduleShow();
136
+ }
137
+ }
138
+ handleFocusOut() {
139
+ if (this.trigger === 'focus') {
140
+ this.scheduleHide();
141
+ }
142
+ }
143
+ handleClick() {
144
+ if (this.trigger === 'click') {
145
+ this.toggle();
146
+ }
147
+ }
148
+ scheduleShow() {
149
+ this.clearTimeouts();
150
+ if (this.delay > 0) {
151
+ this.showTimeout = window.setTimeout(() => this.show(), this.delay);
152
+ }
153
+ else {
154
+ this.show();
155
+ }
156
+ }
157
+ scheduleHide() {
158
+ this.clearTimeouts();
159
+ if (this.hideDelay > 0) {
160
+ this.hideTimeout = window.setTimeout(() => this.hide(), this.hideDelay);
161
+ }
162
+ else {
163
+ this.hide();
164
+ }
165
+ }
166
+ clearTimeouts() {
167
+ if (this.showTimeout) {
168
+ clearTimeout(this.showTimeout);
169
+ this.showTimeout = undefined;
170
+ }
171
+ if (this.hideTimeout) {
172
+ clearTimeout(this.hideTimeout);
173
+ this.hideTimeout = undefined;
174
+ }
175
+ }
176
+ show() {
177
+ if (!this.content)
178
+ return;
179
+ // Ensure portal styles are injected
180
+ SniceTooltip_1.ensurePortalStyles();
181
+ // Create portal element if it doesn't exist
182
+ if (!this.portalElement) {
183
+ this.portalElement = this.createPortalElement();
184
+ this.updateArrowStyles(this.position);
185
+ }
186
+ this.portalElement.style.display = 'block';
187
+ this.updatePortalContent();
188
+ // Force reflow before adding visible class
189
+ void this.portalElement.offsetHeight;
190
+ this.updatePosition();
191
+ this.portalElement.classList.add('snice-tooltip--visible');
192
+ if (this.trigger === 'click') {
193
+ // Add click outside listener
194
+ setTimeout(() => {
195
+ document.addEventListener('click', this.handleClickOutside);
196
+ }, 0);
197
+ }
198
+ }
199
+ hide() {
200
+ if (!this.portalElement)
201
+ return;
202
+ this.portalElement.classList.remove('snice-tooltip--visible');
203
+ setTimeout(() => {
204
+ if (this.portalElement) {
205
+ this.portalElement.style.display = 'none';
206
+ }
207
+ }, 200); // Match transition duration
208
+ if (this.trigger === 'click') {
209
+ document.removeEventListener('click', this.handleClickOutside);
210
+ }
211
+ }
212
+ toggle() {
213
+ if (!this.portalElement || this.portalElement.style.display === 'none') {
214
+ this.show();
215
+ }
216
+ else {
217
+ this.hide();
218
+ }
219
+ }
220
+ updatePosition() {
221
+ if (!this.portalElement)
222
+ return;
223
+ // Make sure tooltip is visible but off-screen to get accurate dimensions
224
+ this.portalElement.style.visibility = 'hidden';
225
+ this.portalElement.style.left = '-9999px';
226
+ this.portalElement.style.top = '-9999px';
227
+ const triggerRect = this.getBoundingClientRect();
228
+ const tooltipRect = this.portalElement.getBoundingClientRect();
229
+ // Restore visibility
230
+ this.portalElement.style.visibility = '';
231
+ // Calculate position with smart viewport detection
232
+ const position = this.calculatePosition(triggerRect, tooltipRect);
233
+ // Update tooltip position class if it changed
234
+ if (position.adjustedPosition !== this.activePosition) {
235
+ this.portalElement.classList.remove(`snice-tooltip--${this.activePosition}`);
236
+ this.portalElement.classList.add(`snice-tooltip--${position.adjustedPosition}`);
237
+ this.activePosition = position.adjustedPosition;
238
+ // Update arrow styles for new position
239
+ this.updateArrowStyles(position.adjustedPosition);
240
+ }
241
+ // Apply calculated position
242
+ this.portalElement.style.left = `${position.left}px`;
243
+ this.portalElement.style.top = `${position.top}px`;
244
+ }
245
+ updateArrowStyles(position) {
246
+ if (!this.portalElement || !this.arrow)
247
+ return;
248
+ const arrow = this.portalElement.querySelector('.snice-tooltip__arrow');
249
+ if (!arrow)
250
+ return;
251
+ // Reset styles - set to explicit values instead of empty strings
252
+ arrow.style.top = 'auto';
253
+ arrow.style.bottom = 'auto';
254
+ arrow.style.left = 'auto';
255
+ arrow.style.right = 'auto';
256
+ arrow.style.transform = 'none';
257
+ arrow.style.borderTopColor = 'transparent';
258
+ arrow.style.borderBottomColor = 'transparent';
259
+ arrow.style.borderLeftColor = 'transparent';
260
+ arrow.style.borderRightColor = 'transparent';
261
+ // Apply position-specific styles
262
+ switch (position) {
263
+ case 'top':
264
+ case 'top-start':
265
+ case 'top-end':
266
+ arrow.style.bottom = '-6px';
267
+ arrow.style.borderWidth = '6px 6px 0';
268
+ arrow.style.borderTopColor = '#333';
269
+ arrow.style.borderLeftColor = 'transparent';
270
+ arrow.style.borderRightColor = 'transparent';
271
+ if (position === 'top') {
272
+ arrow.style.left = '50%';
273
+ arrow.style.transform = 'translateX(-50%)';
274
+ }
275
+ else if (position === 'top-start') {
276
+ arrow.style.left = '16px';
277
+ }
278
+ else {
279
+ arrow.style.right = '16px';
280
+ }
281
+ break;
282
+ case 'bottom':
283
+ case 'bottom-start':
284
+ case 'bottom-end':
285
+ arrow.style.top = '-6px';
286
+ arrow.style.borderWidth = '0 6px 6px';
287
+ arrow.style.borderBottomColor = '#333';
288
+ arrow.style.borderLeftColor = 'transparent';
289
+ arrow.style.borderRightColor = 'transparent';
290
+ if (position === 'bottom') {
291
+ arrow.style.left = '50%';
292
+ arrow.style.transform = 'translateX(-50%)';
293
+ }
294
+ else if (position === 'bottom-start') {
295
+ arrow.style.left = '16px';
296
+ }
297
+ else {
298
+ arrow.style.right = '16px';
299
+ }
300
+ break;
301
+ case 'left':
302
+ case 'left-start':
303
+ case 'left-end':
304
+ arrow.style.right = '-6px';
305
+ arrow.style.borderWidth = '6px 0 6px 6px';
306
+ arrow.style.borderLeftColor = '#333';
307
+ arrow.style.borderTopColor = 'transparent';
308
+ arrow.style.borderBottomColor = 'transparent';
309
+ if (position === 'left') {
310
+ arrow.style.top = '50%';
311
+ arrow.style.transform = 'translateY(-50%)';
312
+ }
313
+ else if (position === 'left-start') {
314
+ arrow.style.top = '16px';
315
+ }
316
+ else {
317
+ arrow.style.bottom = '16px';
318
+ }
319
+ break;
320
+ case 'right':
321
+ case 'right-start':
322
+ case 'right-end':
323
+ arrow.style.left = '-6px';
324
+ arrow.style.borderWidth = '6px 6px 6px 0';
325
+ arrow.style.borderRightColor = '#333';
326
+ arrow.style.borderTopColor = 'transparent';
327
+ arrow.style.borderBottomColor = 'transparent';
328
+ if (position === 'right') {
329
+ arrow.style.top = '50%';
330
+ arrow.style.transform = 'translateY(-50%)';
331
+ }
332
+ else if (position === 'right-start') {
333
+ arrow.style.top = '16px';
334
+ }
335
+ else {
336
+ arrow.style.bottom = '16px';
337
+ }
338
+ break;
339
+ }
340
+ }
341
+ calculatePosition(triggerRect, tooltipRect) {
342
+ const viewport = {
343
+ width: window.innerWidth,
344
+ height: window.innerHeight,
345
+ scrollX: window.scrollX,
346
+ scrollY: window.scrollY
347
+ };
348
+ let position = this.position;
349
+ let left = 0;
350
+ let top = 0;
351
+ // Calculate base position
352
+ const positions = this.getPositionCoordinates(triggerRect, tooltipRect, position);
353
+ left = positions.left;
354
+ top = positions.top;
355
+ // If strict positioning is disabled, check if tooltip fits in viewport
356
+ if (!this.strictPositioning) {
357
+ const fitsInViewport = left >= 0 &&
358
+ top >= 0 &&
359
+ left + tooltipRect.width <= viewport.width &&
360
+ top + tooltipRect.height <= viewport.height;
361
+ // If it doesn't fit, try alternative positions
362
+ if (!fitsInViewport) {
363
+ const alternativePositions = this.getAlternativePositions(position);
364
+ for (const altPosition of alternativePositions) {
365
+ const altCoords = this.getPositionCoordinates(triggerRect, tooltipRect, altPosition);
366
+ if (altCoords.left >= 0 &&
367
+ altCoords.top >= 0 &&
368
+ altCoords.left + tooltipRect.width <= viewport.width &&
369
+ altCoords.top + tooltipRect.height <= viewport.height) {
370
+ position = altPosition;
371
+ left = altCoords.left;
372
+ top = altCoords.top;
373
+ break;
374
+ }
375
+ }
376
+ }
377
+ }
378
+ return { left, top, adjustedPosition: position };
379
+ }
380
+ getPositionCoordinates(triggerRect, tooltipRect, position) {
381
+ let left = 0;
382
+ let top = 0;
383
+ const centerX = triggerRect.left + triggerRect.width / 2;
384
+ const centerY = triggerRect.top + triggerRect.height / 2;
385
+ // Different offsets for different directions
386
+ // Left/right need more spacing, top/bottom need less
387
+ const arrowSize = this.arrow ? 6 : 0;
388
+ const verticalOffset = this.offset; // Just base offset for top/bottom
389
+ const horizontalOffset = this.offset + arrowSize; // More offset for left/right
390
+ switch (position) {
391
+ case 'top':
392
+ left = centerX - tooltipRect.width / 2;
393
+ top = triggerRect.top - tooltipRect.height - verticalOffset;
394
+ break;
395
+ case 'top-start':
396
+ left = triggerRect.left;
397
+ top = triggerRect.top - tooltipRect.height - verticalOffset;
398
+ break;
399
+ case 'top-end':
400
+ left = triggerRect.right - tooltipRect.width;
401
+ top = triggerRect.top - tooltipRect.height - verticalOffset;
402
+ break;
403
+ case 'bottom':
404
+ left = centerX - tooltipRect.width / 2;
405
+ top = triggerRect.bottom + verticalOffset;
406
+ break;
407
+ case 'bottom-start':
408
+ left = triggerRect.left;
409
+ top = triggerRect.bottom + verticalOffset;
410
+ break;
411
+ case 'bottom-end':
412
+ left = triggerRect.right - tooltipRect.width;
413
+ top = triggerRect.bottom + verticalOffset;
414
+ break;
415
+ case 'left':
416
+ left = triggerRect.left - tooltipRect.width - horizontalOffset;
417
+ top = centerY - tooltipRect.height / 2;
418
+ break;
419
+ case 'left-start':
420
+ left = triggerRect.left - tooltipRect.width - horizontalOffset;
421
+ top = triggerRect.top;
422
+ break;
423
+ case 'left-end':
424
+ left = triggerRect.left - tooltipRect.width - horizontalOffset;
425
+ top = triggerRect.bottom - tooltipRect.height;
426
+ break;
427
+ case 'right':
428
+ left = triggerRect.right + horizontalOffset;
429
+ top = centerY - tooltipRect.height / 2;
430
+ break;
431
+ case 'right-start':
432
+ left = triggerRect.right + horizontalOffset;
433
+ top = triggerRect.top;
434
+ break;
435
+ case 'right-end':
436
+ left = triggerRect.right + horizontalOffset;
437
+ top = triggerRect.bottom - tooltipRect.height;
438
+ break;
439
+ }
440
+ return { left, top };
441
+ }
442
+ getAlternativePositions(position) {
443
+ const opposites = {
444
+ 'top': ['bottom', 'left', 'right'],
445
+ 'top-start': ['bottom-start', 'left', 'right'],
446
+ 'top-end': ['bottom-end', 'left', 'right'],
447
+ 'bottom': ['top', 'left', 'right'],
448
+ 'bottom-start': ['top-start', 'left', 'right'],
449
+ 'bottom-end': ['top-end', 'left', 'right'],
450
+ 'left': ['right', 'top', 'bottom'],
451
+ 'left-start': ['right-start', 'top', 'bottom'],
452
+ 'left-end': ['right-end', 'top', 'bottom'],
453
+ 'right': ['left', 'top', 'bottom'],
454
+ 'right-start': ['left-start', 'top', 'bottom'],
455
+ 'right-end': ['left-end', 'top', 'bottom']
456
+ };
457
+ return opposites[position] || ['top', 'bottom', 'left', 'right'];
458
+ }
459
+ createPortalElement() {
460
+ const portal = document.createElement('div');
461
+ portal.className = `snice-tooltip snice-tooltip--${this.position}`;
462
+ portal.setAttribute('role', 'tooltip');
463
+ portal.style.cssText = `
464
+ position: fixed;
465
+ z-index: ${this.zIndex};
466
+ padding: 8px 12px;
467
+ background: #333;
468
+ color: white;
469
+ border-radius: 6px;
470
+ font-size: 14px;
471
+ line-height: 1.4;
472
+ max-width: ${this.maxWidth}px;
473
+ width: max-content;
474
+ pointer-events: none;
475
+ opacity: 0;
476
+ transform: scale(0.95);
477
+ transition: opacity 0.2s, transform 0.2s;
478
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
479
+ display: none;
480
+ `;
481
+ // Create content element
482
+ const content = document.createElement('div');
483
+ content.className = 'snice-tooltip__content';
484
+ portal.appendChild(content);
485
+ // Create arrow element if needed
486
+ if (this.arrow) {
487
+ const arrow = document.createElement('div');
488
+ arrow.className = 'snice-tooltip__arrow';
489
+ arrow.style.cssText = `
490
+ position: absolute;
491
+ width: 0;
492
+ height: 0;
493
+ border-style: solid;
494
+ `;
495
+ portal.appendChild(arrow);
496
+ }
497
+ // Add to body
498
+ document.body.appendChild(portal);
499
+ return portal;
500
+ }
501
+ updatePortalContent() {
502
+ if (!this.portalElement)
503
+ return;
504
+ const content = this.portalElement.querySelector('.snice-tooltip__content');
505
+ if (content) {
506
+ content.textContent = this.content;
507
+ }
508
+ // Update or create arrow if needed
509
+ let arrow = this.portalElement.querySelector('.snice-tooltip__arrow');
510
+ if (this.arrow && !arrow) {
511
+ // Create arrow if it doesn't exist but should
512
+ arrow = document.createElement('div');
513
+ arrow.className = 'snice-tooltip__arrow';
514
+ arrow.style.cssText = `
515
+ position: absolute;
516
+ width: 0;
517
+ height: 0;
518
+ border-style: solid;
519
+ `;
520
+ this.portalElement.appendChild(arrow);
521
+ }
522
+ else if (arrow) {
523
+ arrow.style.display = this.arrow ? '' : 'none';
524
+ }
525
+ }
526
+ };
527
+ SniceTooltip.portalStylesInjected = false;
528
+ __decorate([
529
+ property({ reflect: true }),
530
+ __metadata("design:type", String)
531
+ ], SniceTooltip.prototype, "content", void 0);
532
+ __decorate([
533
+ property({ reflect: true }),
534
+ __metadata("design:type", String)
535
+ ], SniceTooltip.prototype, "position", void 0);
536
+ __decorate([
537
+ property({ reflect: true }),
538
+ __metadata("design:type", String)
539
+ ], SniceTooltip.prototype, "trigger", void 0);
540
+ __decorate([
541
+ property({ type: Number, reflect: true }),
542
+ __metadata("design:type", Number)
543
+ ], SniceTooltip.prototype, "delay", void 0);
544
+ __decorate([
545
+ property({ type: Number, attribute: 'hide-delay', reflect: true }),
546
+ __metadata("design:type", Number)
547
+ ], SniceTooltip.prototype, "hideDelay", void 0);
548
+ __decorate([
549
+ property({ type: Number, reflect: true }),
550
+ __metadata("design:type", Number)
551
+ ], SniceTooltip.prototype, "offset", void 0);
552
+ __decorate([
553
+ property({ type: Boolean, reflect: true }),
554
+ __metadata("design:type", Boolean)
555
+ ], SniceTooltip.prototype, "arrow", void 0);
556
+ __decorate([
557
+ property({ type: Boolean, reflect: true }),
558
+ __metadata("design:type", Boolean)
559
+ ], SniceTooltip.prototype, "open", void 0);
560
+ __decorate([
561
+ property({ type: Number, attribute: 'max-width', reflect: true }),
562
+ __metadata("design:type", Number)
563
+ ], SniceTooltip.prototype, "maxWidth", void 0);
564
+ __decorate([
565
+ property({ type: Number, attribute: 'z-index', reflect: true }),
566
+ __metadata("design:type", Number)
567
+ ], SniceTooltip.prototype, "zIndex", void 0);
568
+ __decorate([
569
+ property({ type: Boolean, attribute: 'strict-positioning', reflect: true }),
570
+ __metadata("design:type", Boolean)
571
+ ], SniceTooltip.prototype, "strictPositioning", void 0);
572
+ __decorate([
573
+ query('.tooltip'),
574
+ __metadata("design:type", HTMLElement)
575
+ ], SniceTooltip.prototype, "tooltipElement", void 0);
576
+ __decorate([
577
+ query('.tooltip__arrow'),
578
+ __metadata("design:type", HTMLElement)
579
+ ], SniceTooltip.prototype, "arrowElement", void 0);
580
+ __decorate([
581
+ ready(),
582
+ __metadata("design:type", Function),
583
+ __metadata("design:paramtypes", []),
584
+ __metadata("design:returntype", void 0)
585
+ ], SniceTooltip.prototype, "init", null);
586
+ __decorate([
587
+ dispose(),
588
+ __metadata("design:type", Function),
589
+ __metadata("design:paramtypes", []),
590
+ __metadata("design:returntype", void 0)
591
+ ], SniceTooltip.prototype, "cleanup", null);
592
+ __decorate([
593
+ watch('content'),
594
+ __metadata("design:type", Function),
595
+ __metadata("design:paramtypes", []),
596
+ __metadata("design:returntype", void 0)
597
+ ], SniceTooltip.prototype, "updateContent", null);
598
+ __decorate([
599
+ watch('arrow'),
600
+ __metadata("design:type", Function),
601
+ __metadata("design:paramtypes", []),
602
+ __metadata("design:returntype", void 0)
603
+ ], SniceTooltip.prototype, "updateArrow", null);
604
+ __decorate([
605
+ watch('maxWidth'),
606
+ __metadata("design:type", Function),
607
+ __metadata("design:paramtypes", []),
608
+ __metadata("design:returntype", void 0)
609
+ ], SniceTooltip.prototype, "updateMaxWidth", null);
610
+ __decorate([
611
+ watch('zIndex'),
612
+ __metadata("design:type", Function),
613
+ __metadata("design:paramtypes", []),
614
+ __metadata("design:returntype", void 0)
615
+ ], SniceTooltip.prototype, "updateZIndex", null);
616
+ __decorate([
617
+ watch('open'),
618
+ __metadata("design:type", Function),
619
+ __metadata("design:paramtypes", []),
620
+ __metadata("design:returntype", void 0)
621
+ ], SniceTooltip.prototype, "handleOpenChange", null);
622
+ __decorate([
623
+ on('mouseenter'),
624
+ __metadata("design:type", Function),
625
+ __metadata("design:paramtypes", []),
626
+ __metadata("design:returntype", void 0)
627
+ ], SniceTooltip.prototype, "handleMouseEnter", null);
628
+ __decorate([
629
+ on('mouseleave'),
630
+ __metadata("design:type", Function),
631
+ __metadata("design:paramtypes", []),
632
+ __metadata("design:returntype", void 0)
633
+ ], SniceTooltip.prototype, "handleMouseLeave", null);
634
+ __decorate([
635
+ on('focusin'),
636
+ __metadata("design:type", Function),
637
+ __metadata("design:paramtypes", []),
638
+ __metadata("design:returntype", void 0)
639
+ ], SniceTooltip.prototype, "handleFocusIn", null);
640
+ __decorate([
641
+ on('focusout'),
642
+ __metadata("design:type", Function),
643
+ __metadata("design:paramtypes", []),
644
+ __metadata("design:returntype", void 0)
645
+ ], SniceTooltip.prototype, "handleFocusOut", null);
646
+ __decorate([
647
+ on('click'),
648
+ __metadata("design:type", Function),
649
+ __metadata("design:paramtypes", []),
650
+ __metadata("design:returntype", void 0)
651
+ ], SniceTooltip.prototype, "handleClick", null);
652
+ SniceTooltip = SniceTooltip_1 = __decorate([
653
+ element('snice-tooltip')
654
+ ], SniceTooltip);
655
+ export { SniceTooltip };
656
+ //# sourceMappingURL=snice-tooltip.js.map