@toife/vue 2.2.0 → 3.0.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 (324) hide show
  1. package/README.md +171 -0
  2. package/package.json +41 -9
  3. package/src/components/action/action.composable.ts +32 -0
  4. package/src/components/action/action.html +25 -0
  5. package/src/components/action/action.scss +106 -0
  6. package/src/components/action/action.type.ts +35 -0
  7. package/src/components/action/action.vue +82 -0
  8. package/src/components/action/index.ts +9 -0
  9. package/src/components/app/app.constants.ts +1 -0
  10. package/src/components/app/app.html +24 -0
  11. package/src/components/app/app.scss +27 -0
  12. package/src/components/app/app.type.ts +21 -0
  13. package/src/components/app/app.vue +45 -0
  14. package/src/components/app/index.ts +3 -0
  15. package/src/components/avatar/avatar.html +3 -0
  16. package/src/components/avatar/avatar.scss +35 -0
  17. package/src/components/avatar/avatar.type.ts +6 -0
  18. package/src/components/avatar/avatar.vue +45 -0
  19. package/src/components/avatar/index.ts +2 -0
  20. package/src/components/button/button.html +6 -0
  21. package/src/components/button/button.scss +113 -0
  22. package/src/components/button/button.type.ts +14 -0
  23. package/src/components/button/button.vue +66 -0
  24. package/src/components/button/index.ts +2 -0
  25. package/src/components/cable/cable.constants.ts +1 -0
  26. package/src/components/cable/cable.html +3 -0
  27. package/src/components/cable/cable.scss +37 -0
  28. package/src/components/cable/cable.type.ts +11 -0
  29. package/src/components/cable/cable.vue +33 -0
  30. package/src/components/cable/index.ts +3 -0
  31. package/src/components/card/card/card.constants.ts +1 -0
  32. package/src/components/card/card/card.html +3 -0
  33. package/src/components/card/card/card.scss +34 -0
  34. package/src/components/card/card/card.type.ts +14 -0
  35. package/src/components/card/card/card.vue +62 -0
  36. package/src/components/card/card/index.ts +3 -0
  37. package/src/components/card/card-body/card-body.html +3 -0
  38. package/src/components/card/card-body/card-body.scss +23 -0
  39. package/src/components/card/card-body/card-body.vue +14 -0
  40. package/src/components/card/card-body/index.ts +1 -0
  41. package/src/components/card/card-footer/card-footer.html +3 -0
  42. package/src/components/card/card-footer/card-footer.scss +31 -0
  43. package/src/components/card/card-footer/card-footer.vue +28 -0
  44. package/src/components/card/card-footer/index.ts +1 -0
  45. package/src/components/card/card-header/card-header.html +3 -0
  46. package/src/components/card/card-header/card-header.scss +31 -0
  47. package/src/components/card/card-header/card-header.vue +28 -0
  48. package/src/components/card/card-header/index.ts +1 -0
  49. package/src/components/card/index.ts +4 -0
  50. package/src/components/checkbox/checkbox.html +13 -0
  51. package/src/components/checkbox/checkbox.scss +138 -0
  52. package/src/components/checkbox/checkbox.type.ts +17 -0
  53. package/src/components/checkbox/checkbox.vue +91 -0
  54. package/src/components/checkbox/index.ts +2 -0
  55. package/src/components/collapse/collapse.html +16 -0
  56. package/src/components/collapse/collapse.scss +59 -0
  57. package/src/components/collapse/collapse.type.ts +11 -0
  58. package/src/components/collapse/collapse.vue +131 -0
  59. package/src/components/collapse/index.ts +2 -0
  60. package/src/components/container/container.html +1 -0
  61. package/src/components/container/container.scss +10 -0
  62. package/src/components/container/container.vue +14 -0
  63. package/src/components/container/index.ts +1 -0
  64. package/src/components/decision-modal/decision-modal.composable.ts +32 -0
  65. package/src/components/decision-modal/decision-modal.html +29 -0
  66. package/src/components/decision-modal/decision-modal.scss +136 -0
  67. package/src/components/decision-modal/decision-modal.type.ts +35 -0
  68. package/src/components/decision-modal/decision-modal.vue +98 -0
  69. package/src/components/decision-modal/index.ts +9 -0
  70. package/src/components/divider/divider.html +1 -0
  71. package/src/components/divider/divider.scss +29 -0
  72. package/src/components/divider/divider.type.ts +6 -0
  73. package/src/components/divider/divider.vue +34 -0
  74. package/src/components/divider/index.ts +2 -0
  75. package/src/components/field/field.html +1 -0
  76. package/src/components/field/field.type.ts +43 -0
  77. package/src/components/field/field.vue +85 -0
  78. package/src/components/field/index.ts +2 -0
  79. package/src/components/field/outline/index.ts +1 -0
  80. package/src/components/field/outline/outline.html +32 -0
  81. package/src/components/field/outline/outline.scss +224 -0
  82. package/src/components/field/outline/outline.vue +243 -0
  83. package/src/components/form-group/form-group.html +3 -0
  84. package/src/components/form-group/form-group.scss +91 -0
  85. package/src/components/form-group/form-group.type.ts +5 -0
  86. package/src/components/form-group/form-group.vue +21 -0
  87. package/src/components/form-group/index.ts +2 -0
  88. package/src/components/gesture-indicator/gesture-indicator.html +1 -0
  89. package/src/components/gesture-indicator/gesture-indicator.scss +45 -0
  90. package/{dist/components/gesture-indicator/gesture-indicator.type.d.ts → src/components/gesture-indicator/gesture-indicator.type.ts} +2 -1
  91. package/src/components/gesture-indicator/gesture-indicator.vue +32 -0
  92. package/src/components/gesture-indicator/index.ts +1 -0
  93. package/src/components/image/image.html +1 -0
  94. package/src/components/image/image.scss +1 -0
  95. package/src/components/image/image.type.ts +5 -0
  96. package/src/components/image/image.vue +25 -0
  97. package/src/components/image/index.ts +2 -0
  98. package/src/components/index.ts +27 -0
  99. package/src/components/modal/index.ts +2 -0
  100. package/src/components/modal/modal.html +20 -0
  101. package/src/components/modal/modal.scss +78 -0
  102. package/src/components/modal/modal.type.ts +21 -0
  103. package/src/components/modal/modal.vue +186 -0
  104. package/src/components/page/index.ts +1 -0
  105. package/src/components/page/page.html +3 -0
  106. package/src/components/page/page.scss +17 -0
  107. package/src/components/page/page.vue +14 -0
  108. package/src/components/present/index.ts +3 -0
  109. package/src/components/present/present.composable.ts +21 -0
  110. package/src/components/present/present.html +9 -0
  111. package/src/components/present/present.scss +81 -0
  112. package/src/components/present/present.type.ts +26 -0
  113. package/src/components/present/present.vue +198 -0
  114. package/src/components/radio/index.ts +2 -0
  115. package/src/components/radio/radio/index.ts +2 -0
  116. package/src/components/radio/radio/radio.html +11 -0
  117. package/src/components/radio/radio/radio.scss +125 -0
  118. package/src/components/radio/radio/radio.type.ts +11 -0
  119. package/src/components/radio/radio/radio.vue +103 -0
  120. package/src/components/radio/radio-group/index.ts +7 -0
  121. package/src/components/radio/radio-group/radio-group.constants.ts +1 -0
  122. package/src/components/radio/radio-group/radio-group.html +3 -0
  123. package/src/components/radio/radio-group/radio-group.scss +16 -0
  124. package/src/components/radio/radio-group/radio-group.type.ts +28 -0
  125. package/src/components/radio/radio-group/radio-group.vue +62 -0
  126. package/src/components/refresher/index.ts +2 -0
  127. package/src/components/refresher/refresher.html +6 -0
  128. package/src/components/refresher/refresher.scss +36 -0
  129. package/src/components/refresher/refresher.type.ts +16 -0
  130. package/src/components/refresher/refresher.vue +137 -0
  131. package/src/components/route/index.ts +5 -0
  132. package/src/components/route/route-navigator/index.ts +2 -0
  133. package/src/components/route/route-navigator/route-navigator.html +19 -0
  134. package/src/components/route/route-navigator/route-navigator.scss +127 -0
  135. package/src/components/route/route-navigator/route-navigator.type.ts +12 -0
  136. package/src/components/route/route-navigator/route-navigator.vue +250 -0
  137. package/src/components/route/route-outlet/index.ts +1 -0
  138. package/src/components/route/route-outlet/route-outlet.html +1 -0
  139. package/src/components/route/route-outlet/route-outlet.vue +30 -0
  140. package/src/components/route/route-provider/index.ts +3 -0
  141. package/src/components/route/route-provider/route-provider.constant.ts +1 -0
  142. package/src/components/route/route-provider/route-provider.html +1 -0
  143. package/src/components/route/route-provider/route-provider.type.ts +10 -0
  144. package/src/components/route/route-provider/route-provider.vue +20 -0
  145. package/src/components/route/route-wrapper/index.ts +3 -0
  146. package/src/components/route/route-wrapper/route-wrapper.composable.ts +43 -0
  147. package/src/components/route/route-wrapper/route-wrapper.html +3 -0
  148. package/src/components/route/route-wrapper/route-wrapper.type.ts +3 -0
  149. package/src/components/route/route-wrapper/route-wrapper.vue +43 -0
  150. package/src/components/route/route.type.ts +7 -0
  151. package/src/components/route/route.util.ts +8 -0
  152. package/src/components/segmented-field/index.ts +7 -0
  153. package/src/components/segmented-field/segmented-field.html +17 -0
  154. package/src/components/segmented-field/segmented-field.scss +52 -0
  155. package/src/components/segmented-field/segmented-field.type.ts +29 -0
  156. package/src/components/segmented-field/segmented-field.vue +151 -0
  157. package/src/components/skeleton/index.ts +2 -0
  158. package/src/components/skeleton/skeleton.html +1 -0
  159. package/src/components/skeleton/skeleton.scss +45 -0
  160. package/src/components/skeleton/skeleton.type.ts +7 -0
  161. package/src/components/skeleton/skeleton.vue +38 -0
  162. package/src/components/switch/index.ts +2 -0
  163. package/src/components/switch/switch.html +15 -0
  164. package/src/components/switch/switch.scss +134 -0
  165. package/src/components/switch/switch.type.ts +13 -0
  166. package/src/components/switch/switch.vue +92 -0
  167. package/src/components/tabs/index.ts +2 -0
  168. package/src/components/tabs/tab/index.ts +2 -0
  169. package/src/components/tabs/tab/tab.html +5 -0
  170. package/src/components/tabs/tab/tab.type.ts +5 -0
  171. package/src/components/tabs/tab/tab.vue +38 -0
  172. package/src/components/tabs/tabs/index.ts +9 -0
  173. package/src/components/tabs/tabs/tabs.constants.ts +1 -0
  174. package/src/components/tabs/tabs/tabs.html +3 -0
  175. package/src/components/tabs/tabs/tabs.scss +272 -0
  176. package/src/components/tabs/tabs/tabs.type.ts +36 -0
  177. package/src/components/tabs/tabs/tabs.vue +159 -0
  178. package/src/components/toast/index.ts +4 -0
  179. package/src/components/toast/toast/index.ts +1 -0
  180. package/src/components/toast/toast/toast.html +9 -0
  181. package/src/components/toast/toast/toast.scss +61 -0
  182. package/src/components/toast/toast/toast.vue +34 -0
  183. package/src/components/toast/toast-content/index.ts +1 -0
  184. package/src/components/toast/toast-content/toast-content.html +1 -0
  185. package/src/components/toast/toast-content/toast-content.scss +41 -0
  186. package/src/components/toast/toast-content/toast-content.vue +59 -0
  187. package/src/components/toast/toast.composable.ts +22 -0
  188. package/src/components/toast/toast.type.ts +25 -0
  189. package/src/components/toolbar/index.ts +2 -0
  190. package/src/components/toolbar/toolbar.html +5 -0
  191. package/src/components/toolbar/toolbar.scss +79 -0
  192. package/src/components/toolbar/toolbar.type.ts +7 -0
  193. package/src/components/toolbar/toolbar.vue +47 -0
  194. package/src/env.d.ts +7 -0
  195. package/src/factory.ts +81 -0
  196. package/src/index.ts +4 -0
  197. package/{dist/type.d.ts → src/type.ts} +1 -1
  198. package/src/utils/element.ts +16 -0
  199. package/src/utils/events.ts +12 -0
  200. package/src/utils/index.ts +3 -0
  201. package/src/utils/style/index.ts +42 -0
  202. package/dist/components/action/action.type.d.ts +0 -17
  203. package/dist/components/action/action.vue.d.ts +0 -14
  204. package/dist/components/action/factory.d.ts +0 -3
  205. package/dist/components/action/index.d.ts +0 -2
  206. package/dist/components/alert/alert.type.d.ts +0 -16
  207. package/dist/components/alert/alert.vue.d.ts +0 -14
  208. package/dist/components/alert/factory.d.ts +0 -3
  209. package/dist/components/alert/index.d.ts +0 -2
  210. package/dist/components/app/app.type.d.ts +0 -1
  211. package/dist/components/app/app.vue.d.ts +0 -3
  212. package/dist/components/app/index.d.ts +0 -1
  213. package/dist/components/avatar/avatar.type.d.ts +0 -4
  214. package/dist/components/avatar/avatar.vue.d.ts +0 -6
  215. package/dist/components/avatar/index.d.ts +0 -1
  216. package/dist/components/back-button/back-button.type.d.ts +0 -4
  217. package/dist/components/back-button/back-button.vue.d.ts +0 -3
  218. package/dist/components/back-button/index.d.ts +0 -1
  219. package/dist/components/button/button.type.d.ts +0 -10
  220. package/dist/components/button/button.vue.d.ts +0 -12
  221. package/dist/components/button/index.d.ts +0 -1
  222. package/dist/components/cable/cable.type.d.ts +0 -4
  223. package/dist/components/cable/cable.vue.d.ts +0 -6
  224. package/dist/components/cable/index.d.ts +0 -1
  225. package/dist/components/card/card.type.d.ts +0 -3
  226. package/dist/components/card/card.vue.d.ts +0 -5
  227. package/dist/components/card/index.d.ts +0 -1
  228. package/dist/components/checkbox/checkbox.type.d.ts +0 -12
  229. package/dist/components/checkbox/checkbox.vue.d.ts +0 -14
  230. package/dist/components/checkbox/index.d.ts +0 -1
  231. package/dist/components/collapse/collapse.type.d.ts +0 -6
  232. package/dist/components/collapse/collapse.vue.d.ts +0 -7
  233. package/dist/components/collapse/index.d.ts +0 -1
  234. package/dist/components/content/content.type.d.ts +0 -1
  235. package/dist/components/content/content.vue.d.ts +0 -3
  236. package/dist/components/content/index.d.ts +0 -1
  237. package/dist/components/divider/divider.type.d.ts +0 -3
  238. package/dist/components/divider/divider.vue.d.ts +0 -5
  239. package/dist/components/divider/index.d.ts +0 -1
  240. package/dist/components/flex/flex.type.d.ts +0 -4
  241. package/dist/components/flex/flex.vue.d.ts +0 -6
  242. package/dist/components/flex/index.d.ts +0 -1
  243. package/dist/components/gesture-indicator/gesture-indicator.vue.d.ts +0 -5
  244. package/dist/components/gesture-indicator/index.d.ts +0 -1
  245. package/dist/components/grid/grid.type.d.ts +0 -4
  246. package/dist/components/grid/grid.vue.d.ts +0 -6
  247. package/dist/components/grid/index.d.ts +0 -1
  248. package/dist/components/icon-spinner/icon-spinner.type.d.ts +0 -4
  249. package/dist/components/icon-spinner/icon-spinner.vue.d.ts +0 -6
  250. package/dist/components/icon-spinner/index.d.ts +0 -1
  251. package/dist/components/image/image.type.d.ts +0 -4
  252. package/dist/components/image/image.vue.d.ts +0 -3
  253. package/dist/components/image/index.d.ts +0 -1
  254. package/dist/components/index.d.ts +0 -36
  255. package/dist/components/input/index.d.ts +0 -1
  256. package/dist/components/input/input.type.d.ts +0 -15
  257. package/dist/components/input/input.vue.d.ts +0 -16
  258. package/dist/components/keyboard-space/factory.d.ts +0 -3
  259. package/dist/components/keyboard-space/index.d.ts +0 -2
  260. package/dist/components/keyboard-space/keyboard-space.type.d.ts +0 -1
  261. package/dist/components/keyboard-space/keyboard-space.vue.d.ts +0 -3
  262. package/dist/components/loading/factory.d.ts +0 -4
  263. package/dist/components/loading/index.d.ts +0 -2
  264. package/dist/components/loading/loading.type.d.ts +0 -6
  265. package/dist/components/loading/loading.vue.d.ts +0 -12
  266. package/dist/components/present/factory.d.ts +0 -1
  267. package/dist/components/present/index.d.ts +0 -2
  268. package/dist/components/present/present.type.d.ts +0 -13
  269. package/dist/components/present/present.vue.d.ts +0 -17
  270. package/dist/components/refresher/index.d.ts +0 -1
  271. package/dist/components/refresher/refresher.type.d.ts +0 -11
  272. package/dist/components/refresher/refresher.vue.d.ts +0 -17
  273. package/dist/components/richtext/index.d.ts +0 -1
  274. package/dist/components/richtext/richtext.type.d.ts +0 -1
  275. package/dist/components/richtext/richtext.vue.d.ts +0 -3
  276. package/dist/components/ripple/index.d.ts +0 -1
  277. package/dist/components/ripple/ripple.type.d.ts +0 -3
  278. package/dist/components/ripple/ripple.vue.d.ts +0 -5
  279. package/dist/components/screen/index.d.ts +0 -1
  280. package/dist/components/screen/screen.type.d.ts +0 -1
  281. package/dist/components/screen/screen.vue.d.ts +0 -3
  282. package/dist/components/screen-router/factory.d.ts +0 -19
  283. package/dist/components/screen-router/index.d.ts +0 -2
  284. package/dist/components/screen-router/screen-router.type.d.ts +0 -8
  285. package/dist/components/screen-router/screen-router.vue.d.ts +0 -9
  286. package/dist/components/sheet/index.d.ts +0 -1
  287. package/dist/components/sheet/sheet.type.d.ts +0 -18
  288. package/dist/components/sheet/sheet.vue.d.ts +0 -18
  289. package/dist/components/skeleton/index.d.ts +0 -1
  290. package/dist/components/skeleton/skeleton.type.d.ts +0 -6
  291. package/dist/components/skeleton/skeleton.vue.d.ts +0 -8
  292. package/dist/components/switch/index.d.ts +0 -1
  293. package/dist/components/switch/switch.type.d.ts +0 -7
  294. package/dist/components/switch/switch.vue.d.ts +0 -9
  295. package/dist/components/tab/index.d.ts +0 -1
  296. package/dist/components/tab/tab.type.d.ts +0 -4
  297. package/dist/components/tab/tab.vue.d.ts +0 -5
  298. package/dist/components/tabs/index.d.ts +0 -1
  299. package/dist/components/tabs/tabs.type.d.ts +0 -13
  300. package/dist/components/tabs/tabs.vue.d.ts +0 -15
  301. package/dist/components/text/index.d.ts +0 -1
  302. package/dist/components/text/text.type.d.ts +0 -4
  303. package/dist/components/text/text.vue.d.ts +0 -6
  304. package/dist/components/textarea/index.d.ts +0 -1
  305. package/dist/components/textarea/textarea.type.d.ts +0 -1
  306. package/dist/components/textarea/textarea.vue.d.ts +0 -3
  307. package/dist/components/toast/factory.d.ts +0 -3
  308. package/dist/components/toast/index.d.ts +0 -2
  309. package/dist/components/toast/toast.type.d.ts +0 -11
  310. package/dist/components/toast/toast.vue.d.ts +0 -16
  311. package/dist/components/toggle-password/index.d.ts +0 -1
  312. package/dist/components/toggle-password/toggle-password.type.d.ts +0 -6
  313. package/dist/components/toggle-password/toggle-password.vue.d.ts +0 -9
  314. package/dist/components/toolbar/index.d.ts +0 -1
  315. package/dist/components/toolbar/toolbar.type.d.ts +0 -5
  316. package/dist/components/toolbar/toolbar.vue.d.ts +0 -7
  317. package/dist/factory.d.ts +0 -4
  318. package/dist/index.css +0 -1
  319. package/dist/index.d.ts +0 -4
  320. package/dist/index.es.js +0 -1836
  321. package/dist/index.umd.js +0 -1
  322. package/dist/utils/element.d.ts +0 -2
  323. package/dist/utils/events.d.ts +0 -1
  324. package/dist/utils/index.d.ts +0 -2
@@ -0,0 +1,41 @@
1
+ @use "@toife/sass-layer-generator" as sass;
2
+
3
+ // Class name
4
+ $toastContent: sass.fn-naming-prefix("toast-content");
5
+
6
+ // Properties
7
+ $space-x: sass.fn-naming-var("spacing", "x");
8
+ $transition-duration: sass.fn-naming-var("motion", "duration");
9
+ // layer: item
10
+ $background-color: sass.fn-naming-var("item", "background-color");
11
+ $color: sass.fn-naming-var("item", "color");
12
+ $border-color: sass.fn-naming-var("item", "border-color");
13
+ $border-radius: sass.fn-naming-var("border-radius");
14
+ $border-width: sass.fn-naming-var("stroke", "width");
15
+ $max-height: sass.fn-naming-var("overlay", "max-height");
16
+
17
+ .#{$toastContent} {
18
+ width: fit-content;
19
+ height: fit-content;
20
+ opacity: 1;
21
+ transition:
22
+ background-color #{$transition-duration} ease,
23
+ color #{$transition-duration} ease,
24
+ border-color #{$transition-duration} ease,
25
+ border-radius #{$transition-duration} ease,
26
+ opacity #{$transition-duration} ease;
27
+
28
+ background-color: rgb(#{$background-color});
29
+ color: rgb(#{$color});
30
+ border-color: rgb(#{$border-color});
31
+ border-width: #{$border-width};
32
+ border-style: solid;
33
+ max-height: #{$max-height};
34
+ max-width: 100%;
35
+ padding: calc(#{$space-x} * 2) calc(#{$space-x} * 4);
36
+ border-radius: #{$border-radius};
37
+
38
+ &.closing {
39
+ opacity: 0;
40
+ }
41
+ }
@@ -0,0 +1,59 @@
1
+ <style lang="scss" src="./toast-content.scss" scoped></style>
2
+ <template src="./toast-content.html"></template>
3
+ <script lang="ts" setup>
4
+ import { computed, inject, onMounted, ref } from "vue";
5
+ import { type ToastContentProps, type ToastContentEmit } from "../toast.type";
6
+ import { withPrefix } from "../../../utils";
7
+ import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../../app";
8
+
9
+ /// Define
10
+ /// ------------------------------------------------------------
11
+ const props = withDefaults(defineProps<ToastContentProps>(), {
12
+ message: "",
13
+ duration: 2000,
14
+ variant: "fill",
15
+ });
16
+ const emit = defineEmits<ToastContentEmit>();
17
+ const appState = inject<AppProviderState>(APP_PROVIDER_STATE_KEY);
18
+
19
+ /// State
20
+ /// ------------------------------------------------------------
21
+ const isClosing = ref(false);
22
+
23
+ /// Computed
24
+ /// ------------------------------------------------------------
25
+ const role = computed(() => {
26
+ return props.role || appState?.role.value || "";
27
+ });
28
+
29
+ const shape = computed(() => {
30
+ return props.shape || appState?.shape.value || "";
31
+ });
32
+
33
+ const contentAttrs = computed(() => {
34
+ return {
35
+ class: [
36
+ withPrefix(["layer", "item"]),
37
+ withPrefix(["role", role.value]),
38
+ withPrefix(["shape", shape.value]),
39
+ withPrefix("toast-content"),
40
+ props.variant,
41
+ {
42
+ closing: isClosing.value,
43
+ },
44
+ ],
45
+ };
46
+ });
47
+
48
+ // Lifecycle
49
+ /// ------------------------------------------------------------
50
+ onMounted(() => {
51
+ setTimeout(() => {
52
+ isClosing.value = true;
53
+
54
+ setTimeout(() => {
55
+ emit("close");
56
+ }, 500);
57
+ }, props.duration);
58
+ });
59
+ </script>
@@ -0,0 +1,22 @@
1
+ import { ref } from "vue";
2
+ import type { ToastContentProps } from "./toast.type";
3
+
4
+ // All messages
5
+ const messages = ref<ToastContentProps[]>([]);
6
+ const messageId = ref(1);
7
+
8
+ export const useToast = () => {
9
+ const open = (message: ToastContentProps) => {
10
+ messages.value.push({ ...message, id: messageId.value++ });
11
+ };
12
+
13
+ const close = (id: number) => {
14
+ messages.value = messages.value.filter((item) => item.id !== id);
15
+ };
16
+
17
+ return {
18
+ messages,
19
+ open,
20
+ close,
21
+ };
22
+ };
@@ -0,0 +1,25 @@
1
+ export type ToastPlacement =
2
+ | "bottom-start"
3
+ | "bottom-center"
4
+ | "bottom-end"
5
+ | "top-start"
6
+ | "top-center"
7
+ | "top-end";
8
+
9
+ export type ToastContentVariant = "fill" | "text";
10
+
11
+ export type ToastProps = {
12
+ placement: ToastPlacement;
13
+ };
14
+
15
+ export type ToastContentProps = {
16
+ id?: number;
17
+ message: string;
18
+ duration?: number;
19
+ role?: string;
20
+ variant?: ToastContentVariant;
21
+ placement?: ToastPlacement;
22
+ shape?: string;
23
+ };
24
+
25
+ export type ToastContentEmit = { (e: "close"): void };
@@ -0,0 +1,2 @@
1
+ export { default as Toolbar } from "./toolbar.vue";
2
+ export type { ToolbarProps } from "./toolbar.type";
@@ -0,0 +1,5 @@
1
+ <div v-bind="toolbarAttrs">
2
+ <div>
3
+ <slot />
4
+ </div>
5
+ </div>
@@ -0,0 +1,79 @@
1
+ @use "@toife/sass-layer-generator" as sass;
2
+
3
+ // Class name
4
+ $toolbar: sass.fn-naming-prefix("toolbar");
5
+
6
+ // Property name - layer: surface
7
+ $toolbar-size: sass.fn-naming-var("toolbar", "size");
8
+ $background-color: sass.fn-naming-var("surface", "background-color");
9
+ $safe-area-right: sass.fn-naming-var("safe-area", "right");
10
+ $safe-area-left: sass.fn-naming-var("safe-area", "left");
11
+ $safe-area-bottom: sass.fn-naming-var("safe-area", "bottom");
12
+ $safe-area-top: sass.fn-naming-var("safe-area", "top");
13
+ $transition-duration: sass.fn-naming-var("motion", "duration");
14
+
15
+ .#{$toolbar} {
16
+ background-color: rgb(#{$background-color});
17
+ transition:
18
+ box-shadow #{$transition-duration} ease,
19
+ border-color #{$transition-duration} ease,
20
+ background-color #{$transition-duration} ease,
21
+ color #{$transition-duration} ease,
22
+ border-radius #{$transition-duration} ease;
23
+
24
+ > div {
25
+ align-items: center;
26
+ display: flex;
27
+ position: relative;
28
+
29
+ > * {
30
+ flex: 1;
31
+ }
32
+ }
33
+
34
+ &.bottom,
35
+ &.top {
36
+ > div {
37
+ flex-direction: row;
38
+ height: #{$toolbar-size};
39
+ max-height: #{$toolbar-size};
40
+ width: 100%;
41
+
42
+ > * {
43
+ height: 100%;
44
+ }
45
+ }
46
+ }
47
+
48
+ &.left,
49
+ &.right {
50
+ > div {
51
+ flex-direction: column;
52
+ width: #{$toolbar-size};
53
+ max-width: #{$toolbar-size};
54
+ height: 100%;
55
+
56
+ > * {
57
+ width: 100%;
58
+ }
59
+ }
60
+ }
61
+
62
+ &.with-safe-area {
63
+ &.right {
64
+ padding-right: #{$safe-area-right};
65
+ }
66
+
67
+ &.left {
68
+ padding-left: #{$safe-area-left};
69
+ }
70
+
71
+ &.bottom {
72
+ padding-bottom: #{$safe-area-bottom};
73
+ }
74
+
75
+ &.top {
76
+ padding-top: #{$safe-area-top};
77
+ }
78
+ }
79
+ }
@@ -0,0 +1,7 @@
1
+ // Define
2
+ export type ToolbarProps = {
3
+ placement?: string | null;
4
+ safeArea?: boolean;
5
+ size?: string | number;
6
+ role?: string;
7
+ };
@@ -0,0 +1,47 @@
1
+ <style lang="scss" src="./toolbar.scss" scoped></style>
2
+ <template src="./toolbar.html"></template>
3
+ <script lang="ts" setup>
4
+ import { computed, inject } from "vue";
5
+ import { type ToolbarProps } from "./toolbar.type";
6
+ import { property, withPrefix } from "../../utils";
7
+ import { type CableProviderState } from "../cable/cable.type";
8
+ import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../app";
9
+ import { CABLE_PROVIDER_STATE_KEY } from "../cable";
10
+
11
+ /// Define
12
+ /// ------------------------------------------------------------
13
+ const props = withDefaults(defineProps<ToolbarProps>(), {
14
+ placement: null,
15
+ safeArea: true,
16
+ size: "50px",
17
+ });
18
+ const cable = inject<CableProviderState>(CABLE_PROVIDER_STATE_KEY);
19
+ const appState = inject<AppProviderState>(APP_PROVIDER_STATE_KEY);
20
+
21
+ /// Computed
22
+ /// ------------------------------------------------------------
23
+ const role = computed(() => {
24
+ return props.role || appState?.role.value || "";
25
+ });
26
+
27
+ const placement = computed(() => {
28
+ return props.placement || cable?.placement.value || "";
29
+ });
30
+
31
+ const toolbarAttrs = computed(() => {
32
+ return {
33
+ class: [
34
+ withPrefix(["layer", "surface"]),
35
+ withPrefix(["role", role.value]),
36
+ withPrefix("toolbar"),
37
+ placement.value,
38
+ {
39
+ "with-safe-area": props.safeArea,
40
+ },
41
+ ],
42
+ style: {
43
+ [property(["toolbar", "size"])]: props.size + (typeof props.size === "number" ? "px" : ""),
44
+ },
45
+ };
46
+ });
47
+ </script>
package/src/env.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ // Vue SFC module typings for this package and for consumers (source is built in their app).
2
+ // Intentionally no "vite/client" so projects without Vite still typecheck.
3
+ declare module "*.vue" {
4
+ import type { DefineComponent } from "vue";
5
+ const component: DefineComponent<{}, {}, any>;
6
+ export default component;
7
+ }
package/src/factory.ts ADDED
@@ -0,0 +1,81 @@
1
+ import {
2
+ Action,
3
+ App,
4
+ Avatar,
5
+ Button,
6
+ Cable,
7
+ Card,
8
+ CardBody,
9
+ CardHeader,
10
+ CardFooter,
11
+ Checkbox,
12
+ Collapse,
13
+ Container,
14
+ DecisionModal,
15
+ Divider,
16
+ Field,
17
+ FormGroup,
18
+ GestureIndicator,
19
+ Image,
20
+ Modal,
21
+ Page,
22
+ Present,
23
+ Radio,
24
+ RadioGroup,
25
+ Refresher,
26
+ RouteNavigator,
27
+ RouteWrapper,
28
+ RouteProvider,
29
+ RouteOutlet,
30
+ SegmentedField,
31
+ Skeleton,
32
+ Switch,
33
+ Tabs,
34
+ Toast,
35
+ ToastContent,
36
+ Toolbar,
37
+ } from "./components";
38
+ import { type CreateToifeOptions } from "./type";
39
+
40
+ export const createToife = (options?: CreateToifeOptions) => {
41
+ return {
42
+ install: (app: any) => {
43
+ const prefix = options?.prefix || "t-";
44
+ app.component(prefix + "app", App);
45
+ app.component(prefix + "action", Action);
46
+ app.component(prefix + "avatar", Avatar);
47
+ app.component(prefix + "button", Button);
48
+ app.component(prefix + "cable", Cable);
49
+ app.component(prefix + "card", Card);
50
+ app.component(prefix + "card-body", CardBody);
51
+ app.component(prefix + "card-header", CardHeader);
52
+ app.component(prefix + "card-footer", CardFooter);
53
+ app.component(prefix + "checkbox", Checkbox);
54
+ app.component(prefix + "radio", Radio);
55
+ app.component(prefix + "radio-group", RadioGroup);
56
+ app.component(prefix + "collapse", Collapse);
57
+ app.component(prefix + "container", Container);
58
+ app.component(prefix + "decision-modal", DecisionModal);
59
+ app.component(prefix + "divider", Divider);
60
+ app.component(prefix + "field", Field);
61
+ app.component(prefix + "form-group", FormGroup);
62
+ app.component(prefix + "gesture-indicator", GestureIndicator);
63
+ app.component(prefix + "image", Image);
64
+ app.component(prefix + "modal", Modal);
65
+ app.component(prefix + "page", Page);
66
+ app.component(prefix + "present", Present);
67
+ app.component(prefix + "refresher", Refresher);
68
+ app.component(prefix + "route-navigator", RouteNavigator);
69
+ app.component(prefix + "route-wrapper", RouteWrapper);
70
+ app.component(prefix + "route-provider", RouteProvider);
71
+ app.component(prefix + "route-outlet", RouteOutlet);
72
+ app.component(prefix + "segmented-field", SegmentedField);
73
+ app.component(prefix + "skeleton", Skeleton);
74
+ app.component(prefix + "switch", Switch);
75
+ app.component(prefix + "tabs", Tabs);
76
+ app.component(prefix + "toast", Toast);
77
+ app.component(prefix + "toast-content", ToastContent);
78
+ app.component(prefix + "toolbar", Toolbar);
79
+ },
80
+ };
81
+ };
package/src/index.ts ADDED
@@ -0,0 +1,4 @@
1
+ /// <reference path="./env.d.ts" />
2
+ export * from "./factory";
3
+ export * as utils from "./utils";
4
+ export * from "./components";
@@ -1,3 +1,3 @@
1
1
  export type CreateToifeOptions = {
2
- prefix?: string;
2
+ prefix?: string;
3
3
  };
@@ -0,0 +1,16 @@
1
+ export const isFormElement = (target: any) => {
2
+ return (
3
+ target &&
4
+ (target.tagName == "INPUT" || target.tagName == "TEXTAREA" || target.isContentEditable)
5
+ );
6
+ };
7
+
8
+ export const blurCurrentActive = () => {
9
+ const active = document.activeElement as HTMLElement | null;
10
+ if (
11
+ active &&
12
+ (active.tagName === "INPUT" || active.tagName === "TEXTAREA" || active.isContentEditable)
13
+ ) {
14
+ active.blur();
15
+ }
16
+ };
@@ -0,0 +1,12 @@
1
+ import { blurCurrentActive, isFormElement } from "./element";
2
+
3
+ export const preventDefault = () => {
4
+ document.addEventListener("contextmenu", (e) => e.preventDefault());
5
+ document.addEventListener("pointerup", (e) => {
6
+ !isFormElement(e.target) && blurCurrentActive();
7
+ });
8
+
9
+ if ("virtualKeyboard" in navigator) {
10
+ (navigator.virtualKeyboard as any).overlaysContent = true;
11
+ }
12
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./element";
2
+ export * from "./events";
3
+ export * from "./style";
@@ -0,0 +1,42 @@
1
+ let prefix: string | null = null;
2
+ let separator: string | null = null;
3
+
4
+ export const getSeparator = () => {
5
+ if (!separator)
6
+ separator = getComputedStyle(document.documentElement).getPropertyValue("--separator").trim();
7
+
8
+ return separator;
9
+ };
10
+
11
+ export const getPrefix = () => {
12
+ if (!prefix)
13
+ prefix = getComputedStyle(document.documentElement).getPropertyValue("--prefix").trim();
14
+
15
+ return prefix;
16
+ };
17
+
18
+ export const withPrefix = (name: string | string[]) => {
19
+ const p = getPrefix();
20
+ const s = getSeparator();
21
+ let names = [];
22
+
23
+ if (typeof name === "string") {
24
+ names = [name];
25
+ } else {
26
+ names = [...name];
27
+ }
28
+
29
+ if (p) {
30
+ names = [p, ...names];
31
+ }
32
+
33
+ return names.join(s);
34
+ };
35
+
36
+ export const property = (name: string | string[]) => {
37
+ return "--" + withPrefix(name);
38
+ };
39
+
40
+ export const variable = (name: string | string[]) => {
41
+ return "var(" + property(name) + ")";
42
+ };
@@ -1,17 +0,0 @@
1
- export type ActionButton = {
2
- text?: string;
3
- color?: string;
4
- size?: string;
5
- variant?: string;
6
- handler?: () => void;
7
- data?: unknown;
8
- key?: string | number;
9
- };
10
- export type ActionProps = {
11
- actions?: ActionButton[][];
12
- visible?: boolean;
13
- dismiss?: Array<string>;
14
- };
15
- export type ActionEmit = {
16
- (e: 'dismiss', type: string, data?: unknown): void;
17
- };
@@ -1,14 +0,0 @@
1
- import { ActionButton, ActionProps } from './action.type';
2
- declare const _default: import('vue').DefineComponent<ActionProps, {
3
- open: () => void;
4
- close: () => void;
5
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
6
- dismiss: (type: string, data?: unknown) => any;
7
- }, string, import('vue').PublicProps, Readonly<ActionProps> & Readonly<{
8
- onDismiss?: ((type: string, data?: unknown) => any) | undefined;
9
- }>, {
10
- dismiss: Array<string>;
11
- visible: boolean;
12
- actions: ActionButton[][];
13
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
14
- export default _default;
@@ -1,3 +0,0 @@
1
- export declare const createAction: (props?: any, component?: any) => {
2
- open(): Promise<any>;
3
- };
@@ -1,2 +0,0 @@
1
- export { default as Action } from './action.vue';
2
- export * from './factory';
@@ -1,16 +0,0 @@
1
- export type AlertButton = {
2
- text?: string;
3
- color?: string;
4
- variant?: string;
5
- handler?: () => void;
6
- data?: unknown;
7
- };
8
- export type AlertProps = {
9
- title?: string;
10
- message?: string;
11
- actions?: AlertButton[];
12
- dismiss?: Array<string>;
13
- };
14
- export type AlertEmit = {
15
- (e: 'dismiss', type: string, data?: unknown): void;
16
- };
@@ -1,14 +0,0 @@
1
- import { AlertButton, AlertProps } from './alert.type';
2
- declare const _default: import('vue').DefineComponent<AlertProps, {
3
- open: () => void;
4
- }, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
5
- dismiss: (type: string, data?: unknown) => any;
6
- }, string, import('vue').PublicProps, Readonly<AlertProps> & Readonly<{
7
- onDismiss?: ((type: string, data?: unknown) => any) | undefined;
8
- }>, {
9
- dismiss: Array<string>;
10
- actions: AlertButton[];
11
- title: string;
12
- message: string;
13
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
14
- export default _default;
@@ -1,3 +0,0 @@
1
- export declare const createAlert: (props?: any, component?: any) => {
2
- open(): Promise<any>;
3
- };
@@ -1,2 +0,0 @@
1
- export { default as Alert } from './alert.vue';
2
- export * from './factory';
@@ -1 +0,0 @@
1
- export type AppProps = {};
@@ -1,3 +0,0 @@
1
- import { AppProps } from './app.type';
2
- declare const _default: import('vue').DefineComponent<AppProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AppProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
- export default _default;
@@ -1 +0,0 @@
1
- export { default as App } from './app.vue';
@@ -1,4 +0,0 @@
1
- export type AvatarProps = {
2
- square?: boolean;
3
- size?: any;
4
- };
@@ -1,6 +0,0 @@
1
- import { AvatarProps } from './avatar.type';
2
- declare const _default: import('vue').DefineComponent<AvatarProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<AvatarProps> & Readonly<{}>, {
3
- size: any;
4
- square: boolean;
5
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
6
- export default _default;
@@ -1 +0,0 @@
1
- export { default as Avatar } from './avatar.vue';
@@ -1,4 +0,0 @@
1
- export type BackButtonProps = {
2
- to?: any;
3
- router?: any;
4
- };
@@ -1,3 +0,0 @@
1
- import { BackButtonProps } from './back-button.type';
2
- declare const _default: import('vue').DefineComponent<BackButtonProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<BackButtonProps> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
3
- export default _default;
@@ -1 +0,0 @@
1
- export { default as BackButton } from './back-button.vue';
@@ -1,10 +0,0 @@
1
- export type ButtonProps = {
2
- color?: any;
3
- size?: string;
4
- rounded?: boolean;
5
- block?: boolean;
6
- loading?: boolean;
7
- loadingType?: string;
8
- variant?: string;
9
- activeBackground?: boolean;
10
- };
@@ -1,12 +0,0 @@
1
- import { ButtonProps } from './button.type';
2
- declare const _default: import('vue').DefineComponent<ButtonProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<ButtonProps> & Readonly<{}>, {
3
- size: string;
4
- color: any;
5
- rounded: boolean;
6
- block: boolean;
7
- loading: boolean;
8
- loadingType: string;
9
- variant: string;
10
- activeBackground: boolean;
11
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
12
- export default _default;
@@ -1 +0,0 @@
1
- export { default as Button } from './button.vue';
@@ -1,4 +0,0 @@
1
- export type CableProps = {
2
- keyboard?: boolean;
3
- placement?: string;
4
- };
@@ -1,6 +0,0 @@
1
- import { CableProps } from './cable.type';
2
- declare const _default: import('vue').DefineComponent<CableProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<CableProps> & Readonly<{}>, {
3
- placement: string;
4
- keyboard: boolean;
5
- }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
6
- export default _default;
@@ -1 +0,0 @@
1
- export { default as Cable } from './cable.vue';
@@ -1,3 +0,0 @@
1
- export type CardProps = {
2
- color?: any;
3
- };