snice 2.1.5 → 2.2.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 (364) hide show
  1. package/dist/components/accordion/snice-accordion-item.d.ts +25 -0
  2. package/dist/components/accordion/snice-accordion-item.js +255 -0
  3. package/dist/components/accordion/snice-accordion-item.js.map +1 -0
  4. package/dist/components/accordion/snice-accordion.d.ts +28 -0
  5. package/dist/components/accordion/snice-accordion.js +206 -0
  6. package/dist/components/accordion/snice-accordion.js.map +1 -0
  7. package/dist/components/accordion/snice-accordion.types.d.ts +29 -0
  8. package/dist/components/alert/snice-alert.d.ts +26 -0
  9. package/dist/components/alert/snice-alert.js +180 -0
  10. package/dist/components/alert/snice-alert.js.map +1 -0
  11. package/{components/alert/snice-alert.types.ts → dist/components/alert/snice-alert.types.d.ts} +8 -9
  12. package/dist/components/avatar/snice-avatar.d.ts +24 -0
  13. package/dist/components/avatar/snice-avatar.js +180 -0
  14. package/dist/components/avatar/snice-avatar.js.map +1 -0
  15. package/dist/components/avatar/snice-avatar.types.d.ts +12 -0
  16. package/dist/components/badge/snice-badge.d.ts +25 -0
  17. package/dist/components/badge/snice-badge.js +169 -0
  18. package/dist/components/badge/snice-badge.js.map +1 -0
  19. package/{components/badge/snice-badge.types.ts → dist/components/badge/snice-badge.types.d.ts} +11 -12
  20. package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +27 -0
  21. package/dist/components/breadcrumbs/snice-breadcrumbs.js +214 -0
  22. package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -0
  23. package/dist/components/breadcrumbs/snice-breadcrumbs.types.d.ts +23 -0
  24. package/dist/components/breadcrumbs/snice-crumb.d.ts +9 -0
  25. package/dist/components/breadcrumbs/snice-crumb.js +63 -0
  26. package/dist/components/breadcrumbs/snice-crumb.js.map +1 -0
  27. package/dist/components/button/snice-button.d.ts +32 -0
  28. package/dist/components/button/snice-button.js +232 -0
  29. package/dist/components/button/snice-button.js.map +1 -0
  30. package/dist/components/button/snice-button.types.d.ts +23 -0
  31. package/dist/components/card/snice-card.d.ts +19 -0
  32. package/dist/components/card/snice-card.js +136 -0
  33. package/dist/components/card/snice-card.js.map +1 -0
  34. package/{components/card/snice-card.types.ts → dist/components/card/snice-card.types.d.ts} +6 -7
  35. package/dist/components/checkbox/snice-checkbox.d.ts +34 -0
  36. package/dist/components/checkbox/snice-checkbox.js +286 -0
  37. package/dist/components/checkbox/snice-checkbox.js.map +1 -0
  38. package/dist/components/checkbox/snice-checkbox.types.d.ts +20 -0
  39. package/dist/components/chip/snice-chip.d.ts +28 -0
  40. package/dist/components/chip/snice-chip.js +199 -0
  41. package/dist/components/chip/snice-chip.js.map +1 -0
  42. package/dist/components/chip/snice-chip.types.d.ts +14 -0
  43. package/dist/components/date-picker/snice-date-picker.d.ts +82 -0
  44. package/dist/components/date-picker/snice-date-picker.js +847 -0
  45. package/dist/components/date-picker/snice-date-picker.js.map +1 -0
  46. package/dist/components/date-picker/snice-date-picker.types.d.ts +71 -0
  47. package/dist/components/divider/snice-divider.d.ts +17 -0
  48. package/dist/components/divider/snice-divider.js +122 -0
  49. package/dist/components/divider/snice-divider.js.map +1 -0
  50. package/{components/divider/snice-divider.types.ts → dist/components/divider/snice-divider.types.d.ts} +9 -10
  51. package/dist/components/drawer/snice-drawer.d.ts +37 -0
  52. package/dist/components/drawer/snice-drawer.js +337 -0
  53. package/dist/components/drawer/snice-drawer.js.map +1 -0
  54. package/dist/components/drawer/snice-drawer.types.d.ts +16 -0
  55. package/dist/components/input/snice-input.d.ts +65 -0
  56. package/dist/components/input/snice-input.js +567 -0
  57. package/dist/components/input/snice-input.js.map +1 -0
  58. package/dist/components/input/snice-input.types.d.ts +53 -0
  59. package/dist/components/layout/snice-layout-blog.d.ts +4 -0
  60. package/dist/components/layout/snice-layout-blog.js +67 -0
  61. package/dist/components/layout/snice-layout-blog.js.map +1 -0
  62. package/dist/components/layout/snice-layout-card.d.ts +6 -0
  63. package/dist/components/layout/snice-layout-card.js +64 -0
  64. package/dist/components/layout/snice-layout-card.js.map +1 -0
  65. package/dist/components/layout/snice-layout-centered.d.ts +5 -0
  66. package/dist/components/layout/snice-layout-centered.js +48 -0
  67. package/dist/components/layout/snice-layout-centered.js.map +1 -0
  68. package/dist/components/layout/snice-layout-dashboard.d.ts +4 -0
  69. package/dist/components/layout/snice-layout-dashboard.js +64 -0
  70. package/dist/components/layout/snice-layout-dashboard.js.map +1 -0
  71. package/dist/components/layout/snice-layout-fullscreen.d.ts +5 -0
  72. package/dist/components/layout/snice-layout-fullscreen.js +60 -0
  73. package/dist/components/layout/snice-layout-fullscreen.js.map +1 -0
  74. package/dist/components/layout/snice-layout-landing.d.ts +4 -0
  75. package/dist/components/layout/snice-layout-landing.js +66 -0
  76. package/dist/components/layout/snice-layout-landing.js.map +1 -0
  77. package/dist/components/layout/snice-layout-minimal.d.ts +4 -0
  78. package/dist/components/layout/snice-layout-minimal.js +38 -0
  79. package/dist/components/layout/snice-layout-minimal.js.map +1 -0
  80. package/dist/components/layout/snice-layout-sidebar.d.ts +5 -0
  81. package/dist/components/layout/snice-layout-sidebar.js +74 -0
  82. package/dist/components/layout/snice-layout-sidebar.js.map +1 -0
  83. package/dist/components/layout/snice-layout-split.d.ts +6 -0
  84. package/dist/components/layout/snice-layout-split.js +58 -0
  85. package/dist/components/layout/snice-layout-split.js.map +1 -0
  86. package/dist/components/layout/snice-layout.d.ts +4 -0
  87. package/dist/components/layout/snice-layout.js +54 -0
  88. package/dist/components/layout/snice-layout.js.map +1 -0
  89. package/{components/layout/snice-layout.types.ts → dist/components/layout/snice-layout.types.d.ts} +1 -3
  90. package/dist/components/login/snice-login.d.ts +44 -0
  91. package/dist/components/login/snice-login.js +382 -0
  92. package/dist/components/login/snice-login.js.map +1 -0
  93. package/dist/components/login/snice-login.types.d.ts +26 -0
  94. package/dist/components/modal/snice-modal.d.ts +32 -0
  95. package/dist/components/modal/snice-modal.js +280 -0
  96. package/dist/components/modal/snice-modal.js.map +1 -0
  97. package/dist/components/modal/snice-modal.types.d.ts +18 -0
  98. package/dist/components/pagination/snice-pagination.d.ts +26 -0
  99. package/dist/components/pagination/snice-pagination.js +373 -0
  100. package/dist/components/pagination/snice-pagination.js.map +1 -0
  101. package/dist/components/pagination/snice-pagination.types.d.ts +18 -0
  102. package/dist/components/progress/snice-progress.d.ts +35 -0
  103. package/dist/components/progress/snice-progress.js +305 -0
  104. package/dist/components/progress/snice-progress.js.map +1 -0
  105. package/dist/components/progress/snice-progress.types.d.ts +18 -0
  106. package/dist/components/radio/snice-radio.d.ts +33 -0
  107. package/dist/components/radio/snice-radio.js +279 -0
  108. package/dist/components/radio/snice-radio.js.map +1 -0
  109. package/dist/components/radio/snice-radio.types.d.ts +19 -0
  110. package/dist/components/select/snice-option.d.ts +17 -0
  111. package/dist/components/select/snice-option.js +88 -0
  112. package/dist/components/select/snice-option.js.map +1 -0
  113. package/{components/select/snice-option.types.ts → dist/components/select/snice-option.types.d.ts} +8 -8
  114. package/dist/components/select/snice-select.d.ts +89 -0
  115. package/dist/components/select/snice-select.js +864 -0
  116. package/dist/components/select/snice-select.js.map +1 -0
  117. package/dist/components/select/snice-select.types.d.ts +49 -0
  118. package/dist/components/skeleton/snice-skeleton.d.ts +16 -0
  119. package/dist/components/skeleton/snice-skeleton.js +166 -0
  120. package/dist/components/skeleton/snice-skeleton.js.map +1 -0
  121. package/{components/skeleton/snice-skeleton.types.ts → dist/components/skeleton/snice-skeleton.types.d.ts} +7 -8
  122. package/dist/components/snice-cell-C8aBfN72.js +4 -0
  123. package/dist/components/snice-cell-C8aBfN72.js.map +1 -0
  124. package/dist/components/switch/snice-switch.d.ts +38 -0
  125. package/dist/components/switch/snice-switch.js +305 -0
  126. package/dist/components/switch/snice-switch.js.map +1 -0
  127. package/dist/components/switch/snice-switch.types.d.ts +21 -0
  128. package/dist/components/symbols.d.ts +1 -0
  129. package/dist/components/symbols.js +22 -0
  130. package/dist/components/symbols.js.map +1 -0
  131. package/dist/components/table/snice-cell-boolean.d.ts +21 -0
  132. package/dist/components/table/snice-cell-boolean.js +164 -0
  133. package/dist/components/table/snice-cell-boolean.js.map +1 -0
  134. package/dist/components/table/snice-cell-date.d.ts +24 -0
  135. package/dist/components/table/snice-cell-date.js +253 -0
  136. package/dist/components/table/snice-cell-date.js.map +1 -0
  137. package/dist/components/table/snice-cell-duration.d.ts +16 -0
  138. package/dist/components/table/snice-cell-duration.js +130 -0
  139. package/dist/components/table/snice-cell-duration.js.map +1 -0
  140. package/dist/components/table/snice-cell-filesize.d.ts +16 -0
  141. package/dist/components/table/snice-cell-filesize.js +126 -0
  142. package/dist/components/table/snice-cell-filesize.js.map +1 -0
  143. package/dist/components/table/snice-cell-number.d.ts +23 -0
  144. package/dist/components/table/snice-cell-number.js +215 -0
  145. package/dist/components/table/snice-cell-number.js.map +1 -0
  146. package/dist/components/table/snice-cell-progress.d.ts +17 -0
  147. package/dist/components/table/snice-cell-progress.js +121 -0
  148. package/dist/components/table/snice-cell-progress.js.map +1 -0
  149. package/dist/components/table/snice-cell-rating.d.ts +17 -0
  150. package/dist/components/table/snice-cell-rating.js +120 -0
  151. package/dist/components/table/snice-cell-rating.js.map +1 -0
  152. package/dist/components/table/snice-cell-sparkline.d.ts +29 -0
  153. package/dist/components/table/snice-cell-sparkline.js +306 -0
  154. package/dist/components/table/snice-cell-sparkline.js.map +1 -0
  155. package/dist/components/table/snice-cell-text.d.ts +19 -0
  156. package/dist/components/table/snice-cell-text.js +161 -0
  157. package/dist/components/table/snice-cell-text.js.map +1 -0
  158. package/dist/components/table/snice-cell.d.ts +32 -0
  159. package/dist/components/table/snice-cell.js +458 -0
  160. package/dist/components/table/snice-cell.js.map +1 -0
  161. package/dist/components/table/snice-column.d.ts +62 -0
  162. package/dist/components/table/snice-column.js +506 -0
  163. package/dist/components/table/snice-column.js.map +1 -0
  164. package/dist/components/table/snice-header.d.ts +33 -0
  165. package/dist/components/table/snice-header.js +289 -0
  166. package/dist/components/table/snice-header.js.map +1 -0
  167. package/dist/components/table/snice-progress.d.ts +10 -0
  168. package/dist/components/table/snice-progress.js +105 -0
  169. package/dist/components/table/snice-progress.js.map +1 -0
  170. package/dist/components/table/snice-rating.d.ts +9 -0
  171. package/dist/components/table/snice-rating.js +81 -0
  172. package/dist/components/table/snice-rating.js.map +1 -0
  173. package/dist/components/table/snice-row.d.ts +43 -0
  174. package/dist/components/table/snice-row.js +353 -0
  175. package/dist/components/table/snice-row.js.map +1 -0
  176. package/dist/components/table/snice-table.d.ts +69 -0
  177. package/dist/components/table/snice-table.js +792 -0
  178. package/dist/components/table/snice-table.js.map +1 -0
  179. package/dist/components/table/snice-table.types.d.ts +137 -0
  180. package/dist/components/tabs/snice-tab-panel.d.ts +12 -0
  181. package/dist/components/tabs/snice-tab-panel.js +87 -0
  182. package/dist/components/tabs/snice-tab-panel.js.map +1 -0
  183. package/dist/components/tabs/snice-tab.d.ts +13 -0
  184. package/dist/components/tabs/snice-tab.js +98 -0
  185. package/dist/components/tabs/snice-tab.js.map +1 -0
  186. package/dist/components/tabs/snice-tabs.d.ts +34 -0
  187. package/dist/components/tabs/snice-tabs.js +375 -0
  188. package/dist/components/tabs/snice-tabs.js.map +1 -0
  189. package/dist/components/tabs/snice-tabs.types.d.ts +23 -0
  190. package/dist/components/toast/snice-toast-container.d.ts +25 -0
  191. package/dist/components/toast/snice-toast-container.js +252 -0
  192. package/dist/components/toast/snice-toast-container.js.map +1 -0
  193. package/dist/components/toast/snice-toast.d.ts +23 -0
  194. package/dist/components/toast/snice-toast.js +321 -0
  195. package/dist/components/toast/snice-toast.js.map +1 -0
  196. package/dist/components/toast/snice-toast.types.d.ts +30 -0
  197. package/dist/components/tooltip/snice-tooltip.d.ts +50 -0
  198. package/dist/components/tooltip/snice-tooltip.js +644 -0
  199. package/dist/components/tooltip/snice-tooltip.js.map +1 -0
  200. package/dist/components/tooltip/snice-tooltip.types.d.ts +18 -0
  201. package/dist/components/transitions.d.ts +11 -0
  202. package/dist/components/transitions.js +72 -0
  203. package/dist/components/transitions.js.map +1 -0
  204. package/dist/index.cjs +1 -1
  205. package/dist/index.esm.js +1 -1
  206. package/dist/index.esm.min.js +1 -1
  207. package/dist/index.iife.js +1 -1
  208. package/dist/index.iife.min.js +1 -1
  209. package/dist/symbols.esm.js +1 -1
  210. package/dist/transitions.esm.js +1 -1
  211. package/package.json +10 -6
  212. package/components/accordion/demo.html +0 -403
  213. package/components/accordion/snice-accordion-item.css +0 -85
  214. package/components/accordion/snice-accordion-item.ts +0 -226
  215. package/components/accordion/snice-accordion.css +0 -31
  216. package/components/accordion/snice-accordion.ts +0 -182
  217. package/components/accordion/snice-accordion.types.ts +0 -32
  218. package/components/alert/demo.html +0 -445
  219. package/components/alert/snice-alert.css +0 -195
  220. package/components/alert/snice-alert.ts +0 -141
  221. package/components/avatar/demo.html +0 -598
  222. package/components/avatar/snice-avatar.css +0 -131
  223. package/components/avatar/snice-avatar.ts +0 -136
  224. package/components/avatar/snice-avatar.types.ts +0 -13
  225. package/components/badge/demo.html +0 -523
  226. package/components/badge/snice-badge.css +0 -161
  227. package/components/badge/snice-badge.ts +0 -117
  228. package/components/breadcrumbs/demo.html +0 -404
  229. package/components/breadcrumbs/snice-breadcrumbs.css +0 -133
  230. package/components/breadcrumbs/snice-breadcrumbs.ts +0 -191
  231. package/components/breadcrumbs/snice-breadcrumbs.types.ts +0 -26
  232. package/components/breadcrumbs/snice-crumb.ts +0 -26
  233. package/components/button/demo.html +0 -42
  234. package/components/button/snice-button.css +0 -230
  235. package/components/button/snice-button.ts +0 -169
  236. package/components/button/snice-button.types.ts +0 -25
  237. package/components/card/demo.html +0 -525
  238. package/components/card/snice-card.css +0 -140
  239. package/components/card/snice-card.ts +0 -102
  240. package/components/checkbox/demo.html +0 -253
  241. package/components/checkbox/snice-checkbox.css +0 -164
  242. package/components/checkbox/snice-checkbox.ts +0 -223
  243. package/components/checkbox/snice-checkbox.types.ts +0 -22
  244. package/components/chip/demo.html +0 -383
  245. package/components/chip/snice-chip.css +0 -195
  246. package/components/chip/snice-chip.ts +0 -139
  247. package/components/chip/snice-chip.types.ts +0 -15
  248. package/components/date-picker/README.md +0 -233
  249. package/components/date-picker/demo.html +0 -191
  250. package/components/date-picker/snice-date-picker.css +0 -330
  251. package/components/date-picker/snice-date-picker.ts +0 -777
  252. package/components/date-picker/snice-date-picker.types.ts +0 -83
  253. package/components/divider/demo.html +0 -233
  254. package/components/divider/snice-divider.css +0 -155
  255. package/components/divider/snice-divider.ts +0 -69
  256. package/components/drawer/demo.html +0 -328
  257. package/components/drawer/snice-drawer.css +0 -476
  258. package/components/drawer/snice-drawer.ts +0 -287
  259. package/components/drawer/snice-drawer.types.ts +0 -17
  260. package/components/global.d.ts +0 -14
  261. package/components/input/demo.html +0 -303
  262. package/components/input/snice-input.css +0 -257
  263. package/components/input/snice-input.ts +0 -442
  264. package/components/input/snice-input.types.ts +0 -59
  265. package/components/input/test.html +0 -77
  266. package/components/layout/README.md +0 -260
  267. package/components/layout/demo.html +0 -538
  268. package/components/layout/snice-layout-blog.css +0 -129
  269. package/components/layout/snice-layout-blog.ts +0 -48
  270. package/components/layout/snice-layout-card.css +0 -104
  271. package/components/layout/snice-layout-card.ts +0 -35
  272. package/components/layout/snice-layout-centered.css +0 -51
  273. package/components/layout/snice-layout-centered.ts +0 -22
  274. package/components/layout/snice-layout-dashboard.css +0 -98
  275. package/components/layout/snice-layout-dashboard.ts +0 -45
  276. package/components/layout/snice-layout-fullscreen.css +0 -72
  277. package/components/layout/snice-layout-fullscreen.ts +0 -34
  278. package/components/layout/snice-layout-landing.css +0 -92
  279. package/components/layout/snice-layout-landing.ts +0 -47
  280. package/components/layout/snice-layout-minimal.css +0 -16
  281. package/components/layout/snice-layout-minimal.ts +0 -19
  282. package/components/layout/snice-layout-sidebar.css +0 -117
  283. package/components/layout/snice-layout-sidebar.ts +0 -48
  284. package/components/layout/snice-layout-split.css +0 -103
  285. package/components/layout/snice-layout-split.ts +0 -29
  286. package/components/layout/snice-layout.css +0 -72
  287. package/components/layout/snice-layout.ts +0 -35
  288. package/components/login/demo-auth-controller.ts +0 -185
  289. package/components/login/demo.html +0 -470
  290. package/components/login/snice-login.css +0 -204
  291. package/components/login/snice-login.ts +0 -326
  292. package/components/login/snice-login.types.ts +0 -29
  293. package/components/modal/demo.html +0 -291
  294. package/components/modal/snice-modal.css +0 -203
  295. package/components/modal/snice-modal.ts +0 -233
  296. package/components/modal/snice-modal.types.ts +0 -21
  297. package/components/pagination/demo.html +0 -395
  298. package/components/pagination/snice-pagination.ts +0 -333
  299. package/components/pagination/snice-pagination.types.ts +0 -21
  300. package/components/progress/demo.html +0 -510
  301. package/components/progress/snice-progress.css +0 -267
  302. package/components/progress/snice-progress.ts +0 -247
  303. package/components/progress/snice-progress.types.ts +0 -19
  304. package/components/radio/demo.html +0 -287
  305. package/components/radio/snice-radio.css +0 -171
  306. package/components/radio/snice-radio.ts +0 -218
  307. package/components/radio/snice-radio.types.ts +0 -21
  308. package/components/select/demo.html +0 -511
  309. package/components/select/snice-option.ts +0 -52
  310. package/components/select/snice-select.css +0 -392
  311. package/components/select/snice-select.ts +0 -796
  312. package/components/select/snice-select.types.ts +0 -55
  313. package/components/skeleton/demo.html +0 -514
  314. package/components/skeleton/snice-skeleton.css +0 -109
  315. package/components/skeleton/snice-skeleton.ts +0 -126
  316. package/components/switch/demo.html +0 -284
  317. package/components/switch/snice-switch.css +0 -221
  318. package/components/switch/snice-switch.ts +0 -229
  319. package/components/switch/snice-switch.types.ts +0 -23
  320. package/components/symbols.ts +0 -23
  321. package/components/table/demo-table-controller.ts +0 -100
  322. package/components/table/demo.html +0 -480
  323. package/components/table/snice-cell-boolean.ts +0 -112
  324. package/components/table/snice-cell-date.ts +0 -210
  325. package/components/table/snice-cell-duration.ts +0 -91
  326. package/components/table/snice-cell-filesize.ts +0 -90
  327. package/components/table/snice-cell-number.ts +0 -165
  328. package/components/table/snice-cell-progress.ts +0 -83
  329. package/components/table/snice-cell-rating.ts +0 -82
  330. package/components/table/snice-cell-sparkline.ts +0 -253
  331. package/components/table/snice-cell-text.ts +0 -125
  332. package/components/table/snice-cell.css +0 -296
  333. package/components/table/snice-cell.ts +0 -473
  334. package/components/table/snice-column.ts +0 -353
  335. package/components/table/snice-header.css +0 -243
  336. package/components/table/snice-header.ts +0 -261
  337. package/components/table/snice-progress.ts +0 -66
  338. package/components/table/snice-rating.ts +0 -45
  339. package/components/table/snice-row.css +0 -255
  340. package/components/table/snice-row.ts +0 -331
  341. package/components/table/snice-table.css +0 -241
  342. package/components/table/snice-table.ts +0 -737
  343. package/components/table/snice-table.types.ts +0 -158
  344. package/components/tabs/demo.html +0 -487
  345. package/components/tabs/snice-tab-panel.css +0 -264
  346. package/components/tabs/snice-tab-panel.ts +0 -47
  347. package/components/tabs/snice-tab.css +0 -96
  348. package/components/tabs/snice-tab.ts +0 -65
  349. package/components/tabs/snice-tabs.css +0 -189
  350. package/components/tabs/snice-tabs.ts +0 -332
  351. package/components/tabs/snice-tabs.types.ts +0 -28
  352. package/components/theme/theme.css +0 -234
  353. package/components/toast/demo.html +0 -329
  354. package/components/toast/snice-toast-container.ts +0 -256
  355. package/components/toast/snice-toast.css +0 -213
  356. package/components/toast/snice-toast.ts +0 -276
  357. package/components/toast/snice-toast.types.ts +0 -35
  358. package/components/tooltip/demo.html +0 -350
  359. package/components/tooltip/snice-tooltip-portal.css +0 -79
  360. package/components/tooltip/snice-tooltip.css +0 -117
  361. package/components/tooltip/snice-tooltip.ts +0 -612
  362. package/components/tooltip/snice-tooltip.types.ts +0 -32
  363. package/components/transitions.ts +0 -94
  364. package/components/tsconfig.json +0 -18
@@ -1,326 +0,0 @@
1
- import { element, property, query, queryAll, on, dispatch, request } from 'snice';
2
- import css from './snice-login.css?inline';
3
- import type { LoginVariant, LoginSize, LoginCredentials, LoginResult, SniceLoginElement } from './snice-login.types';
4
- import '../alert/snice-alert';
5
- import '../button/snice-button';
6
-
7
- @element('snice-login')
8
- export class SniceLogin extends HTMLElement implements SniceLoginElement {
9
- @property({ reflect: true })
10
- variant: LoginVariant = 'default';
11
-
12
- @property({ reflect: true })
13
- size: LoginSize = 'medium';
14
-
15
- @property({ reflect: true })
16
- title = 'Sign In';
17
-
18
- @property({ type: Boolean, reflect: true })
19
- disabled = false;
20
-
21
- @property({ type: Boolean, reflect: true })
22
- loading = false;
23
-
24
- @property({ type: Boolean, reflect: true, attribute: 'show-remember-me' })
25
- showRememberMe = true;
26
-
27
- @property({ type: Boolean, reflect: true, attribute: 'show-forgot-password' })
28
- showForgotPassword = true;
29
-
30
- @property({ reflect: true, attribute: 'action-text' })
31
- actionText = 'Sign In';
32
-
33
- @query('.login__form')
34
- form!: HTMLFormElement;
35
-
36
- @query('input[name="username"]')
37
- usernameInput!: HTMLInputElement;
38
-
39
- @query('input[name="password"]')
40
- passwordInput!: HTMLInputElement;
41
-
42
- @query('input[name="remember"]')
43
- rememberInput?: HTMLInputElement;
44
-
45
- @query('snice-alert')
46
- alertElement!: HTMLElement;
47
-
48
- @query('snice-button')
49
- buttonElement!: HTMLElement;
50
-
51
- @queryAll('input')
52
- inputElements!: NodeListOf<HTMLInputElement>;
53
-
54
- private alertMessage = '';
55
- private alertVariant: 'error' | 'success' | '' = '';
56
-
57
- html() {
58
- return /*html*/`
59
- <div class="login login--${this.variant} login--${this.size}">
60
- <slot name="before-header"></slot>
61
-
62
- <div class="login__header">
63
- <h1 class="login__title">${this.title}</h1>
64
- <slot name="subtitle">
65
- <p class="login__subtitle">Enter your credentials to continue</p>
66
- </slot>
67
- </div>
68
-
69
- <slot name="after-header"></slot>
70
- <slot name="before-form"></slot>
71
-
72
- <form class="login__form">
73
- <slot name="form-top"></slot>
74
-
75
- <div class="login__field">
76
- <label class="login__label" for="username">Username</label>
77
- <input
78
- class="login__input"
79
- type="text"
80
- name="username"
81
- id="username"
82
- required
83
- autocomplete="username"
84
- placeholder="Enter your username"
85
- ${this.disabled || this.loading ? 'disabled' : ''}
86
- />
87
- </div>
88
-
89
- <slot name="between-fields"></slot>
90
-
91
- <div class="login__field">
92
- <label class="login__label" for="password">Password</label>
93
- <input
94
- class="login__input"
95
- type="password"
96
- name="password"
97
- id="password"
98
- required
99
- autocomplete="current-password"
100
- placeholder="Enter your password"
101
- ${this.disabled || this.loading ? 'disabled' : ''}
102
- />
103
- </div>
104
-
105
- <div class="login__options" ${!this.showRememberMe && !this.showForgotPassword ? 'hidden' : ''}>
106
- <label class="login__remember" ${!this.showRememberMe ? 'hidden' : ''}>
107
- <input class="login__checkbox" type="checkbox" name="remember" ${this.disabled || this.loading ? 'disabled' : ''} />
108
- Remember me
109
- </label>
110
-
111
- <a href="#" class="login__forgot" ${!this.showForgotPassword ? 'hidden' : ''}>Forgot password?</a>
112
- </div>
113
-
114
- <slot name="before-submit"></slot>
115
-
116
- <snice-button type="submit" variant="primary" ${this.disabled ? 'disabled' : ''} ${this.loading ? 'loading' : ''}>
117
- ${this.actionText}
118
- </snice-button>
119
-
120
- <slot name="after-submit"></slot>
121
- </form>
122
-
123
- <slot name="after-form"></slot>
124
-
125
- <snice-alert variant="${this.alertVariant}" ${!this.alertMessage ? 'hidden' : ''}>${this.alertMessage}</snice-alert>
126
-
127
- <div class="login__footer">
128
- <slot name="footer"></slot>
129
- </div>
130
- </div>
131
- `;
132
- }
133
-
134
-
135
- css() {
136
- return css;
137
- }
138
-
139
- @request('login-user')
140
- async *login(credentials?: LoginCredentials): any {
141
- if (!credentials) {
142
- credentials = this.getFormData();
143
- }
144
-
145
- if (!credentials.username || !credentials.password) {
146
- return {
147
- success: false,
148
- error: 'Username and password are required'
149
- };
150
- }
151
-
152
- try {
153
- const result = await (yield credentials);
154
- return result;
155
- } catch (error) {
156
- return {
157
- success: false,
158
- error: error instanceof Error ? error.message : 'Login failed'
159
- };
160
- }
161
- }
162
-
163
- @on('click', 'snice-button')
164
- async handleButtonClick(event: Event) {
165
- event.preventDefault();
166
- // Trigger form submit
167
- if (this.form) {
168
- this.form.requestSubmit();
169
- }
170
- }
171
-
172
- @on('submit', '.login__form')
173
- @dispatch('@snice/login-attempt', { bubbles: true, composed: true })
174
- async handleSubmit(event: Event) {
175
- event.preventDefault();
176
-
177
- if (this.loading || this.disabled) {
178
- return;
179
- }
180
-
181
- this.clearAlert();
182
- this.loading = true;
183
- this.updateLoadingState();
184
-
185
- // Wait a tick to ensure the form is properly rendered
186
- await new Promise(resolve => setTimeout(resolve, 0));
187
-
188
- try {
189
- const credentials = this.getFormData();
190
-
191
- if (!credentials.username || !credentials.password) {
192
- this.showAlert('Username and password are required', 'error');
193
- return;
194
- }
195
-
196
- const result = await this.login(credentials);
197
-
198
- if (result.success) {
199
- this.showAlert('Login successful!', 'success');
200
- this.dispatchLoginSuccess(result);
201
- } else {
202
- this.showAlert(result.error || 'Login failed', 'error');
203
- this.dispatchLoginError(result.error || 'Login failed');
204
- }
205
- } catch (error) {
206
- const errorMessage = error instanceof Error ? error.message : 'Login failed';
207
- this.showAlert(errorMessage, 'error');
208
- this.dispatchLoginError(errorMessage);
209
- } finally {
210
- this.loading = false;
211
- this.updateLoadingState();
212
- }
213
-
214
- const credentials = this.getFormData();
215
- return {
216
- username: credentials.username,
217
- timestamp: new Date().toISOString()
218
- };
219
- }
220
-
221
- @on('keydown:Enter', '.login__input')
222
- handleEnterKey() {
223
- if (!this.loading && !this.disabled && this.form) {
224
- this.form.requestSubmit();
225
- }
226
- }
227
-
228
- @on('click', '.login__forgot')
229
- @dispatch('@snice/login-forgot-password', { bubbles: true, composed: true })
230
- handleForgotPassword(event: Event) {
231
- event.preventDefault();
232
- return {
233
- timestamp: new Date().toISOString()
234
- };
235
- }
236
-
237
- @dispatch('@snice/login-success', { bubbles: true, composed: true })
238
- private dispatchLoginSuccess(result: LoginResult) {
239
- return { timestamp: new Date().toISOString() };
240
- }
241
-
242
- @dispatch('@snice/login-error', { bubbles: true, composed: true })
243
- private dispatchLoginError(error: string) {
244
- return {
245
- error,
246
- timestamp: new Date().toISOString()
247
- };
248
- }
249
-
250
-
251
- private getFormData(): LoginCredentials {
252
- const usernameInput = this.shadowRoot?.querySelector('#username') as HTMLInputElement;
253
- const passwordInput = this.shadowRoot?.querySelector('#password') as HTMLInputElement;
254
- const rememberInput = this.shadowRoot?.querySelector('input[name="remember"]') as HTMLInputElement;
255
-
256
- return {
257
- username: usernameInput?.value || '',
258
- password: passwordInput?.value || '',
259
- remember: rememberInput?.checked || false
260
- };
261
- }
262
-
263
- showAlert(message: string, variant: 'error' | 'success') {
264
- this.alertMessage = message;
265
- this.alertVariant = variant;
266
- this.updateAlert();
267
- }
268
-
269
- clearAlert() {
270
- this.alertMessage = '';
271
- this.alertVariant = '';
272
- this.updateAlert();
273
- }
274
-
275
- private updateAlert() {
276
- if (this.alertElement) {
277
- this.alertElement.setAttribute('variant', this.alertVariant);
278
- this.alertElement.textContent = this.alertMessage;
279
- if (this.alertMessage) {
280
- this.alertElement.removeAttribute('hidden');
281
- } else {
282
- this.alertElement.setAttribute('hidden', '');
283
- }
284
- }
285
- }
286
-
287
- private updateLoadingState() {
288
- if (this.buttonElement) {
289
- if (this.loading) {
290
- this.buttonElement.setAttribute('loading', '');
291
- } else {
292
- this.buttonElement.removeAttribute('loading');
293
- }
294
-
295
- if (this.disabled) {
296
- this.buttonElement.setAttribute('disabled', '');
297
- } else {
298
- this.buttonElement.removeAttribute('disabled');
299
- }
300
- }
301
-
302
- this.inputElements?.forEach(input => {
303
- if (this.disabled || this.loading) {
304
- input.setAttribute('disabled', '');
305
- } else {
306
- input.removeAttribute('disabled');
307
- }
308
- });
309
- }
310
-
311
- setError(message: string) {
312
- this.showAlert(message, 'error');
313
- }
314
-
315
- clearError() {
316
- this.clearAlert();
317
- }
318
-
319
- reset() {
320
- if (this.form) {
321
- this.form.reset();
322
- }
323
- this.clearAlert();
324
- this.loading = false;
325
- }
326
- }
@@ -1,29 +0,0 @@
1
- export type LoginVariant = 'default' | 'card' | 'minimal';
2
- export type LoginSize = 'small' | 'medium' | 'large';
3
-
4
- export interface LoginCredentials {
5
- username: string;
6
- password: string;
7
- remember?: boolean;
8
- }
9
-
10
- export interface LoginResult {
11
- success: boolean;
12
- error?: string;
13
- data?: any;
14
- }
15
-
16
- export interface SniceLoginElement extends HTMLElement {
17
- variant: LoginVariant;
18
- size: LoginSize;
19
- title: string;
20
- disabled: boolean;
21
- loading: boolean;
22
- showRememberMe: boolean;
23
- showForgotPassword: boolean;
24
- actionText: string;
25
- login(credentials: LoginCredentials): Promise<LoginResult>;
26
- reset(): void;
27
- setError(message: string): void;
28
- clearError(): void;
29
- }
@@ -1,291 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>Modal Demo</title>
7
- <link rel="stylesheet" href="../theme/theme.css">
8
- <style>
9
- body {
10
- padding: 40px;
11
- font-family: var(--snice-font-family);
12
- background: var(--snice-color-background);
13
- color: var(--snice-color-text);
14
- min-height: 200vh; /* To test scroll locking */
15
- }
16
-
17
- .section {
18
- margin-bottom: 40px;
19
- }
20
-
21
- h2 {
22
- color: var(--snice-color-text);
23
- margin-bottom: 20px;
24
- font-size: var(--snice-font-size-2xl);
25
- }
26
-
27
- h3 {
28
- color: var(--snice-color-text-secondary);
29
- margin-bottom: 16px;
30
- font-size: var(--snice-font-size-lg);
31
- }
32
-
33
- .button-group {
34
- display: flex;
35
- gap: 10px;
36
- flex-wrap: wrap;
37
- margin-bottom: 20px;
38
- }
39
-
40
- button {
41
- padding: 8px 16px;
42
- background: var(--snice-color-primary);
43
- color: var(--snice-color-text-inverse);
44
- border: none;
45
- border-radius: var(--snice-border-radius-md);
46
- font-family: var(--snice-font-family);
47
- font-size: var(--snice-font-size-md);
48
- cursor: pointer;
49
- transition: background-color var(--snice-transition-fast) ease;
50
- }
51
-
52
- button:hover {
53
- background: var(--snice-color-primary-hover);
54
- }
55
-
56
- button.secondary {
57
- background: var(--snice-color-secondary);
58
- color: var(--snice-color-text);
59
- }
60
-
61
- button.secondary:hover {
62
- background: var(--snice-color-secondary-hover);
63
- }
64
-
65
- .long-content {
66
- height: 1000px;
67
- background: linear-gradient(to bottom, #f3f4f6, #e5e7eb);
68
- padding: 20px;
69
- margin-top: 20px;
70
- border-radius: var(--snice-border-radius-lg);
71
- }
72
-
73
- input, textarea {
74
- width: 100%;
75
- padding: 8px;
76
- margin: 8px 0;
77
- border: 1px solid var(--snice-color-border);
78
- border-radius: var(--snice-border-radius-md);
79
- font-family: var(--snice-font-family);
80
- }
81
-
82
- label {
83
- display: block;
84
- margin-top: 12px;
85
- font-weight: 500;
86
- }
87
- </style>
88
- </head>
89
- <body>
90
- <h2>Modal Component Demo</h2>
91
-
92
- <div class="section">
93
- <h3>Basic Modal</h3>
94
- <div class="button-group">
95
- <button onclick="document.getElementById('basic-modal').show()">Open Basic Modal</button>
96
- </div>
97
-
98
- <snice-modal id="basic-modal" label="Basic Modal">
99
- <h2 slot="header">Welcome!</h2>
100
- <p>This is a basic modal with header, body, and footer slots.</p>
101
- <p>Click the backdrop or press Escape to close.</p>
102
- <div slot="footer">
103
- <button class="secondary" onclick="document.getElementById('basic-modal').close()">Cancel</button>
104
- <button onclick="document.getElementById('basic-modal').close()">Confirm</button>
105
- </div>
106
- </snice-modal>
107
- </div>
108
-
109
- <div class="section">
110
- <h3>Different Sizes</h3>
111
- <div class="button-group">
112
- <button onclick="document.getElementById('small-modal').show()">Small Modal</button>
113
- <button onclick="document.getElementById('medium-modal').show()">Medium Modal</button>
114
- <button onclick="document.getElementById('large-modal').show()">Large Modal</button>
115
- <button onclick="document.getElementById('fullscreen-modal').show()">Fullscreen Modal</button>
116
- </div>
117
-
118
- <snice-modal id="small-modal" size="small" label="Small Modal">
119
- <h2 slot="header">Small Modal</h2>
120
- <p>This is a small modal, perfect for confirmations.</p>
121
- <div slot="footer">
122
- <button onclick="document.getElementById('small-modal').close()">Got it</button>
123
- </div>
124
- </snice-modal>
125
-
126
- <snice-modal id="medium-modal" size="medium" label="Medium Modal">
127
- <h2 slot="header">Medium Modal</h2>
128
- <p>This is the default medium size modal.</p>
129
- <p>It works well for most content.</p>
130
- <div slot="footer">
131
- <button onclick="document.getElementById('medium-modal').close()">Close</button>
132
- </div>
133
- </snice-modal>
134
-
135
- <snice-modal id="large-modal" size="large" label="Large Modal">
136
- <h2 slot="header">Large Modal</h2>
137
- <p>This is a large modal for more complex content.</p>
138
- <p>It provides more space for forms, tables, or detailed information.</p>
139
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
140
- <div slot="footer">
141
- <button onclick="document.getElementById('large-modal').close()">Close</button>
142
- </div>
143
- </snice-modal>
144
-
145
- <snice-modal id="fullscreen-modal" size="fullscreen" label="Fullscreen Modal">
146
- <h2 slot="header">Fullscreen Modal</h2>
147
- <p>This modal takes up the entire viewport (with padding).</p>
148
- <p>Great for complex workflows or full-screen experiences.</p>
149
- <div slot="footer">
150
- <button onclick="document.getElementById('fullscreen-modal').close()">Exit Fullscreen</button>
151
- </div>
152
- </snice-modal>
153
- </div>
154
-
155
- <div class="section">
156
- <h3>No Dismiss Options</h3>
157
- <div class="button-group">
158
- <button onclick="document.getElementById('no-backdrop-modal').show()">No Backdrop Dismiss</button>
159
- <button onclick="document.getElementById('no-escape-modal').show()">No Escape Dismiss</button>
160
- <button onclick="document.getElementById('no-dismiss-modal').show()">Force Action</button>
161
- </div>
162
-
163
- <snice-modal id="no-backdrop-modal" no-backdrop-dismiss label="No Backdrop Dismiss">
164
- <h2 slot="header">No Backdrop Dismiss</h2>
165
- <p>Clicking the backdrop won't close this modal.</p>
166
- <p>You can still press Escape or click the X button.</p>
167
- <div slot="footer">
168
- <button onclick="document.getElementById('no-backdrop-modal').close()">Close</button>
169
- </div>
170
- </snice-modal>
171
-
172
- <snice-modal id="no-escape-modal" no-escape-dismiss label="No Escape Dismiss">
173
- <h2 slot="header">No Escape Dismiss</h2>
174
- <p>Pressing Escape won't close this modal.</p>
175
- <p>You can still click the backdrop or the X button.</p>
176
- <div slot="footer">
177
- <button onclick="document.getElementById('no-escape-modal').close()">Close</button>
178
- </div>
179
- </snice-modal>
180
-
181
- <snice-modal id="no-dismiss-modal" no-backdrop-dismiss no-escape-dismiss no-close-button label="Force Action">
182
- <h2 slot="header">Important Action Required</h2>
183
- <p>This modal can't be dismissed by clicking outside, pressing Escape, or using the X button.</p>
184
- <p>The user must make a choice using the action buttons.</p>
185
- <div slot="footer">
186
- <button class="secondary" onclick="document.getElementById('no-dismiss-modal').close()">Cancel</button>
187
- <button onclick="document.getElementById('no-dismiss-modal').close()">Confirm</button>
188
- </div>
189
- </snice-modal>
190
- </div>
191
-
192
- <div class="section">
193
- <h3>Form Modal with Focus Trap</h3>
194
- <div class="button-group">
195
- <button onclick="document.getElementById('form-modal').show()">Open Form</button>
196
- </div>
197
-
198
- <snice-modal id="form-modal" label="User Form">
199
- <h2 slot="header">User Information</h2>
200
- <form onsubmit="event.preventDefault(); alert('Form submitted!'); document.getElementById('form-modal').close();">
201
- <label for="name">Name:</label>
202
- <input type="text" id="name" name="name" required>
203
-
204
- <label for="email">Email:</label>
205
- <input type="email" id="email" name="email" required>
206
-
207
- <label for="message">Message:</label>
208
- <textarea id="message" name="message" rows="4"></textarea>
209
-
210
- <div slot="footer">
211
- <button type="button" class="secondary" onclick="document.getElementById('form-modal').close()">Cancel</button>
212
- <button type="submit">Submit</button>
213
- </div>
214
- </form>
215
- </snice-modal>
216
- </div>
217
-
218
- <div class="section">
219
- <h3>Scrollable Content</h3>
220
- <div class="button-group">
221
- <button onclick="document.getElementById('scroll-modal').show()">Open Scrollable Modal</button>
222
- </div>
223
-
224
- <snice-modal id="scroll-modal" label="Terms and Conditions">
225
- <h2 slot="header">Terms and Conditions</h2>
226
- <h3>1. Introduction</h3>
227
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
228
-
229
- <h3>2. Terms of Use</h3>
230
- <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
231
-
232
- <h3>3. Privacy Policy</h3>
233
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
234
-
235
- <h3>4. Disclaimers</h3>
236
- <p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
237
-
238
- <h3>5. Contact Information</h3>
239
- <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
240
-
241
- <div slot="footer">
242
- <button class="secondary" onclick="document.getElementById('scroll-modal').close()">Decline</button>
243
- <button onclick="document.getElementById('scroll-modal').close()">Accept</button>
244
- </div>
245
- </snice-modal>
246
- </div>
247
-
248
- <div class="section">
249
- <h3>Nested Modals</h3>
250
- <div class="button-group">
251
- <button onclick="document.getElementById('parent-modal').show()">Open Parent Modal</button>
252
- </div>
253
-
254
- <snice-modal id="parent-modal" label="Parent Modal">
255
- <h2 slot="header">Parent Modal</h2>
256
- <p>This modal can open another modal.</p>
257
- <button onclick="document.getElementById('child-modal').show()">Open Child Modal</button>
258
- <div slot="footer">
259
- <button onclick="document.getElementById('parent-modal').close()">Close</button>
260
- </div>
261
- </snice-modal>
262
-
263
- <snice-modal id="child-modal" label="Child Modal">
264
- <h2 slot="header">Child Modal</h2>
265
- <p>This is a nested modal on top of the parent.</p>
266
- <div slot="footer">
267
- <button onclick="document.getElementById('child-modal').close()">Close Child</button>
268
- </div>
269
- </snice-modal>
270
- </div>
271
-
272
- <div class="long-content">
273
- <h3>Scroll Test Area</h3>
274
- <p>This area is here to test that body scroll is locked when a modal is open.</p>
275
- <p>Try opening a modal and then attempting to scroll the page.</p>
276
- </div>
277
-
278
- <script type="module">
279
- import './snice-modal.ts';
280
-
281
- // Listen for modal events
282
- document.addEventListener('@snice/modal-open', (e) => {
283
- console.log('Modal opened:', e.detail.modal);
284
- });
285
-
286
- document.addEventListener('@snice/modal-close', (e) => {
287
- console.log('Modal closed:', e.detail.modal);
288
- });
289
- </script>
290
- </body>
291
- </html>