@toife/vue 3.1.3 → 3.1.5

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 (157) hide show
  1. package/README.md +1 -1
  2. package/package.json +1 -1
  3. package/src/components/action/action.scss +1 -1
  4. package/src/components/action/action.vue +5 -5
  5. package/src/components/app/app.scss +2 -2
  6. package/src/components/app/app.type.ts +6 -0
  7. package/src/components/app/app.vue +8 -2
  8. package/src/components/avatar/avatar.scss +6 -4
  9. package/src/components/avatar/avatar.vue +6 -6
  10. package/src/components/button/button.scss +19 -16
  11. package/src/components/button/button.type.ts +3 -1
  12. package/src/components/button/button.vue +7 -7
  13. package/src/components/cable/cable.vue +2 -2
  14. package/src/components/card/card/card.scss +5 -3
  15. package/src/components/card/card/card.vue +5 -5
  16. package/src/components/card/card-body/card-body.scss +2 -2
  17. package/src/components/card/card-body/card-body.vue +2 -2
  18. package/src/components/card/card-footer/card-footer.scss +3 -3
  19. package/src/components/card/card-footer/card-footer.vue +2 -2
  20. package/src/components/card/card-header/card-header.scss +3 -3
  21. package/src/components/card/card-header/card-header.vue +2 -2
  22. package/src/components/checkbox/checkbox.html +1 -1
  23. package/src/components/checkbox/checkbox.scss +27 -27
  24. package/src/components/checkbox/checkbox.type.ts +4 -0
  25. package/src/components/checkbox/checkbox.vue +8 -6
  26. package/src/components/collapse/collapse.html +1 -1
  27. package/src/components/collapse/collapse.scss +2 -2
  28. package/src/components/collapse/collapse.vue +9 -9
  29. package/src/components/container/container.vue +2 -2
  30. package/src/components/decision-modal/decision-modal.scss +12 -10
  31. package/src/components/decision-modal/decision-modal.vue +8 -8
  32. package/src/components/divider/divider.scss +2 -2
  33. package/src/components/divider/divider.vue +4 -4
  34. package/src/components/dropdown/dropdown.scss +8 -5
  35. package/src/components/dropdown/dropdown.type.ts +4 -1
  36. package/src/components/dropdown/dropdown.vue +8 -6
  37. package/src/components/field/field.type.ts +4 -4
  38. package/src/components/field/outline/outline.scss +24 -21
  39. package/src/components/field/outline/outline.vue +26 -18
  40. package/src/components/form-group/form-group.vue +2 -2
  41. package/src/components/gesture-indicator/gesture-indicator.scss +4 -2
  42. package/src/components/gesture-indicator/gesture-indicator.vue +4 -4
  43. package/src/components/image/image.vue +12 -5
  44. package/src/components/index.ts +1 -0
  45. package/src/components/layout/flex/flex.scss +0 -2
  46. package/src/components/layout/flex/flex.vue +8 -8
  47. package/src/components/layout/flex-item/flex-item.html +1 -0
  48. package/src/components/layout/flex-item/flex-item.scss +48 -0
  49. package/src/components/layout/flex-item/flex-item.type.ts +11 -0
  50. package/src/components/layout/flex-item/flex-item.vue +27 -0
  51. package/src/components/layout/flex-item/index.ts +2 -0
  52. package/src/components/layout/grid/grid.scss +0 -2
  53. package/src/components/layout/grid/grid.vue +6 -6
  54. package/src/components/layout/grid-item/grid-item.html +1 -0
  55. package/src/components/layout/grid-item/grid-item.scss +49 -0
  56. package/src/components/layout/grid-item/grid-item.type.ts +14 -0
  57. package/src/components/layout/grid-item/grid-item.vue +27 -0
  58. package/src/components/layout/grid-item/index.ts +2 -0
  59. package/src/components/layout/index.ts +2 -1
  60. package/src/components/modal/modal.scss +4 -2
  61. package/src/components/modal/modal.vue +68 -5
  62. package/src/components/page/page.vue +2 -2
  63. package/src/components/present/present.scss +3 -3
  64. package/src/components/present/present.vue +14 -14
  65. package/src/components/radio/radio/radio.html +1 -1
  66. package/src/components/radio/radio/radio.scss +25 -18
  67. package/src/components/radio/radio/radio.type.ts +4 -0
  68. package/src/components/radio/radio/radio.vue +7 -5
  69. package/src/components/radio/radio-group/radio-group.vue +2 -2
  70. package/src/components/refresher/refresher.html +1 -4
  71. package/src/components/refresher/refresher.scss +8 -26
  72. package/src/components/refresher/refresher.vue +2 -16
  73. package/src/components/route/route-navigator/route-navigator.scss +2 -2
  74. package/src/components/route/route-navigator/route-navigator.vue +10 -13
  75. package/src/components/route/route-wrapper/route-wrapper.composable.ts +5 -15
  76. package/src/components/route/route-wrapper/route-wrapper.type.ts +0 -4
  77. package/src/components/route/route-wrapper/route-wrapper.vue +4 -12
  78. package/src/components/route/route.type.ts +0 -1
  79. package/src/components/segmented-field/segmented-field.html +1 -1
  80. package/src/components/segmented-field/segmented-field.scss +2 -2
  81. package/src/components/segmented-field/segmented-field.vue +8 -8
  82. package/src/components/select/select.html +2 -2
  83. package/src/components/select/select.scss +10 -10
  84. package/src/components/select/select.vue +10 -10
  85. package/src/components/skeleton/skeleton.scss +3 -1
  86. package/src/components/skeleton/skeleton.vue +7 -7
  87. package/src/components/slide-range/index.ts +2 -0
  88. package/src/components/slide-range/slide-range.html +19 -0
  89. package/src/components/slide-range/slide-range.scss +161 -0
  90. package/src/components/slide-range/slide-range.type.ts +16 -0
  91. package/src/components/slide-range/slide-range.vue +229 -0
  92. package/src/components/switch/switch.html +1 -1
  93. package/src/components/switch/switch.scss +29 -38
  94. package/src/components/switch/switch.type.ts +6 -0
  95. package/src/components/switch/switch.vue +24 -8
  96. package/src/components/tabs/tab/tab.html +1 -1
  97. package/src/components/tabs/tab/tab.scss +13 -0
  98. package/src/components/tabs/tab/tab.vue +4 -2
  99. package/src/components/tabs/tabs/index.ts +1 -0
  100. package/src/components/tabs/tabs/tabs.scss +194 -122
  101. package/src/components/tabs/tabs/tabs.type.ts +5 -2
  102. package/src/components/tabs/tabs/tabs.vue +47 -27
  103. package/src/components/toast/toast/toast.vue +2 -2
  104. package/src/components/toast/toast-content/toast-content.scss +6 -5
  105. package/src/components/toast/toast-content/toast-content.vue +5 -5
  106. package/src/components/toolbar/toolbar.scss +4 -4
  107. package/src/components/toolbar/toolbar.type.ts +1 -1
  108. package/src/components/toolbar/toolbar.vue +7 -7
  109. package/src/factory.ts +108 -50
  110. package/src/index.ts +1 -1
  111. package/src/type.ts +2 -1
  112. package/src/utils/style/index.ts +9 -9
  113. package/src/utils/style.md +9 -9
  114. package/src/components/action/action.md +0 -115
  115. package/src/components/app/app.md +0 -77
  116. package/src/components/avatar/avatar.md +0 -64
  117. package/src/components/button/button.md +0 -66
  118. package/src/components/cable/cable.md +0 -57
  119. package/src/components/card/card/card.md +0 -57
  120. package/src/components/card/card-body/card-body.md +0 -34
  121. package/src/components/card/card-footer/card-footer.md +0 -42
  122. package/src/components/card/card-header/card-header.md +0 -44
  123. package/src/components/checkbox/checkbox.md +0 -60
  124. package/src/components/collapse/collapse.md +0 -59
  125. package/src/components/container/container.md +0 -38
  126. package/src/components/decision-modal/decision-modal.md +0 -79
  127. package/src/components/divider/divider.md +0 -42
  128. package/src/components/field/field.md +0 -68
  129. package/src/components/field/outline/outline-field.md +0 -44
  130. package/src/components/form-group/form-group.md +0 -41
  131. package/src/components/gesture-indicator/gesture-indicator.md +0 -42
  132. package/src/components/image/image.md +0 -41
  133. package/src/components/layout/cell/cell.html +0 -1
  134. package/src/components/layout/cell/cell.md +0 -47
  135. package/src/components/layout/cell/cell.scss +0 -54
  136. package/src/components/layout/cell/cell.type.ts +0 -19
  137. package/src/components/layout/cell/cell.vue +0 -35
  138. package/src/components/layout/cell/index.ts +0 -2
  139. package/src/components/layout/grid/grid.md +0 -50
  140. package/src/components/modal/modal.md +0 -65
  141. package/src/components/page/page.md +0 -39
  142. package/src/components/present/present.md +0 -60
  143. package/src/components/radio/radio/radio.md +0 -53
  144. package/src/components/radio/radio-group/radio-group.md +0 -62
  145. package/src/components/refresher/refresher.md +0 -53
  146. package/src/components/route/route-navigator/route-navigator.md +0 -50
  147. package/src/components/route/route-outlet/route-outlet.md +0 -30
  148. package/src/components/route/route-provider/route-provider.md +0 -46
  149. package/src/components/route/route-wrapper/route-wrapper.md +0 -45
  150. package/src/components/segmented-field/segmented-field.md +0 -58
  151. package/src/components/skeleton/skeleton.md +0 -47
  152. package/src/components/switch/switch.md +0 -57
  153. package/src/components/tabs/tab/tab.md +0 -52
  154. package/src/components/tabs/tabs/tabs.md +0 -59
  155. package/src/components/toast/toast/toast.md +0 -56
  156. package/src/components/toast/toast-content/toast-content.md +0 -41
  157. package/src/components/toolbar/toolbar.md +0 -54
package/README.md CHANGED
@@ -55,7 +55,7 @@ Usage docs live **next to source** under `src/`. Authoring scaffold: [docs/templ
55
55
  |-----|----------|
56
56
  | [element.md](src/utils/element.md) | `isFormElement`, `blurCurrentActive` |
57
57
  | [events.md](src/utils/events.md) | `preventDefault` |
58
- | [style.md](src/utils/style.md) | `withPrefix`, `property`, `variable`, … |
58
+ | [style.md](src/utils/style.md) | `stylePrefix`, `property`, `variable`, … |
59
59
 
60
60
  ## Requirements
61
61
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toife/vue",
3
- "version": "3.1.3",
3
+ "version": "3.1.5",
4
4
  "description": "A Frontend framework for Vue",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -71,7 +71,7 @@ $border-width: sass.fn-naming-var("stroke", "width");
71
71
  &.divider {
72
72
  :deep(.#{$button}) {
73
73
  border-color: transparent;
74
- border-bottom-color: rgb(#{$action-border-color});
74
+ border-bottom-color: rgba(#{$action-border-color});
75
75
  }
76
76
  }
77
77
 
@@ -6,7 +6,7 @@ import { Present } from "../present";
6
6
  import { Button as CustomButton } from "../button";
7
7
  import { FormGroup } from "../form-group";
8
8
  import { type ActionEmit, type ActionButton, type ActionProps } from "./action.type";
9
- import { withPrefix } from "../../utils";
9
+ import { cssPrefix } from "../../utils";
10
10
  import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../app";
11
11
 
12
12
  // Component setup (props, emits, injects)
@@ -36,10 +36,10 @@ const actionAttrs = computed(() => {
36
36
  const role = props.role ?? appState?.role.value ?? "";
37
37
  return {
38
38
  class: [
39
- withPrefix("action"),
40
- withPrefix(["layer", "action"]),
41
- withPrefix(["role", role]),
42
- withPrefix(["shape", shape]),
39
+ cssPrefix("action"),
40
+ cssPrefix(["layer", "action"]),
41
+ cssPrefix(["role", role]),
42
+ cssPrefix(["shape", shape]),
43
43
  props.placement,
44
44
  {
45
45
  pop: pop.value,
@@ -13,8 +13,8 @@ $transition-duration: sass.fn-naming-var("motion", "duration");
13
13
  max-width: #{sass.fn-naming-var("viewport", "max-width")};
14
14
  height: #{sass.fn-naming-var("viewport", "height")};
15
15
  max-height: #{sass.fn-naming-var("viewport", "max-height")};
16
- background-color: rgb(#{$app-background-color});
17
- color: rgb(#{$app-color});
16
+ background-color: rgba(#{$app-background-color});
17
+ color: rgba(#{$app-color});
18
18
  transition:
19
19
  background-color #{$transition-duration} ease,
20
20
  color #{$transition-duration} ease,
@@ -5,6 +5,11 @@ import type { Ref } from "vue";
5
5
  */
6
6
  export type AppDirection = "left" | "right";
7
7
 
8
+ /**
9
+ * App Size Type
10
+ */
11
+ export type AppSize = "small" | "standard" | "large";
12
+
8
13
  /**
9
14
  * App Props Type
10
15
  */
@@ -15,6 +20,7 @@ export type AppProps = {
15
20
  shadow?: boolean;
16
21
  triple?: boolean;
17
22
  direction?: AppDirection;
23
+ size?: AppSize;
18
24
  };
19
25
 
20
26
  /**
@@ -1,7 +1,7 @@
1
1
  <style lang="scss" src="./app.scss" scoped></style>
2
2
  <template src="./app.html"></template>
3
3
  <script lang="ts" setup>
4
- import { withPrefix } from "../../utils";
4
+ import { cssPrefix } from "../../utils";
5
5
  import { computed, provide, toRefs } from "vue";
6
6
  import { Toast } from "../toast";
7
7
  import { Action, useAction } from "../action";
@@ -18,6 +18,7 @@ const props = withDefaults(defineProps<AppProps>(), {
18
18
  shadow: false,
19
19
  triple: false,
20
20
  direction: "left",
21
+ size: "standard",
21
22
  });
22
23
  const { shape, divider, role, shadow, triple, direction } = toRefs(props);
23
24
  const decisionModal = useDecisionModal();
@@ -28,7 +29,12 @@ const action = useAction();
28
29
  // Root layout classes for the application shell (global theme layer)
29
30
  const appAttrs = computed(() => {
30
31
  return {
31
- class: [withPrefix(["layer", "app"]), withPrefix(["shape", shape.value]), withPrefix("app")],
32
+ class: [
33
+ cssPrefix("app"),
34
+ cssPrefix(["layer", "app"]),
35
+ cssPrefix(["shape", shape.value]),
36
+ cssPrefix(["size", props.size]),
37
+ ],
32
38
  };
33
39
  });
34
40
 
@@ -5,7 +5,8 @@ $avatar: sass.fn-naming-prefix("avatar");
5
5
  $shape-pill: sass.fn-naming-prefix("shape-pill");
6
6
 
7
7
  // Property - layer: avatar
8
- $border-radius: sass.fn-naming-var("border-radius");
8
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
9
+ $radius-size: sass.fn-naming-var("radius-size");
9
10
  $border-width: sass.fn-naming-var("stroke", "width");
10
11
  $width: sass.fn-naming-var("width");
11
12
  $transition-duration: sass.fn-naming-var("motion", "duration");
@@ -18,12 +19,13 @@ $avatar-border-color: sass.fn-naming-var("avatar", "border-color");
18
19
  .#{$avatar} {
19
20
  position: relative;
20
21
  overflow: hidden;
21
- background-color: rgb(#{$avatar-background-color});
22
+ background-color: rgba(#{$avatar-background-color});
22
23
  width: #{$width};
23
24
  aspect-ratio: 1/1;
24
- border-radius: #{$border-radius};
25
+ border-radius: calc(min(#{$width}, #{$radius-size}) * #{$radius-ratio});
25
26
  background-repeat: no-repeat;
26
27
  background-size: cover;
28
+ background-position: center;
27
29
  transition:
28
30
  background-color #{$transition-duration} ease,
29
31
  color #{$transition-duration} ease,
@@ -38,6 +40,6 @@ $avatar-border-color: sass.fn-naming-var("avatar", "border-color");
38
40
  }
39
41
 
40
42
  &.divider {
41
- border: #{$border-width} solid rgb(#{$avatar-border-color});
43
+ border: #{$border-width} solid rgba(#{$avatar-border-color});
42
44
  }
43
45
  }
@@ -3,7 +3,7 @@
3
3
  <script lang="ts" setup>
4
4
  import { computed, inject } from "vue";
5
5
  import { type AvatarProps } from "./avatar.type";
6
- import { property, withPrefix } from "../../utils";
6
+ import { cssProperty, cssPrefix } from "../../utils";
7
7
  import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../app";
8
8
 
9
9
  // Component setup (props, emits, injects)
@@ -27,16 +27,16 @@ const avatarAttrs = computed(() => {
27
27
 
28
28
  return {
29
29
  class: [
30
- withPrefix(["layer", "avatar"]),
31
- withPrefix(["role", role]),
32
- withPrefix(["shape", shape]),
33
- withPrefix("avatar"),
30
+ cssPrefix(["layer", "avatar"]),
31
+ cssPrefix(["role", role]),
32
+ cssPrefix(["shape", shape]),
33
+ cssPrefix("avatar"),
34
34
  {
35
35
  divider: divider,
36
36
  },
37
37
  ],
38
38
  style: {
39
- [property("width")]: size,
39
+ [cssProperty("width")]: size,
40
40
  backgroundImage: backgroundImage,
41
41
  },
42
42
  };
@@ -5,13 +5,15 @@ $button: sass.fn-naming-prefix("button");
5
5
  $loader: sass.fn-naming-prefix("loader");
6
6
 
7
7
  // Property name
8
- $border-radius: sass.fn-naming-var("border-radius");
8
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
9
+ $radius-size: sass.fn-naming-var("radius-size");
9
10
  $border-width: sass.fn-naming-var("stroke", "width");
10
11
  $transition-duration: sass.fn-naming-var("motion", "duration");
11
12
  $spacing-x: sass.fn-naming-var("spacing", "x");
12
13
  $spacing-y: sass.fn-naming-var("spacing", "y");
13
14
 
14
15
  $button-color: sass.fn-naming-var("button", "color");
16
+ $button-color-disabled: sass.fn-naming-var("button", "color", "disabled");
15
17
 
16
18
  $button-border-color: sass.fn-naming-var("button", "border-color");
17
19
  $button-border-color-hover: sass.fn-naming-var("button", "border-color", "hover");
@@ -28,7 +30,7 @@ $button-background-color-disabled: sass.fn-naming-var("button", "background-colo
28
30
  $button-box-shadow-color-focus: sass.fn-naming-var("button", "box-shadow-color", "focus");
29
31
 
30
32
  $size-font-size: sass.fn-naming-var("font-size");
31
- $size-height: sass.fn-naming-var("height");
33
+ $size-control-block-size: sass.fn-naming-var("control-block-size");
32
34
  $size-coefficient-x: sass.fn-naming-var("coefficient-x");
33
35
  $size-coefficient-y: sass.fn-naming-var("coefficient-y");
34
36
  $size-line-height: sass.fn-naming-var("line-height");
@@ -39,13 +41,13 @@ $size-line-height: sass.fn-naming-var("line-height");
39
41
  align-items: center;
40
42
  position: relative;
41
43
  overflow: hidden;
42
- color: rgb(#{$button-color});
43
- background: rgb(#{$button-background-color});
44
- border-color: rgb(#{$button-border-color});
44
+ color: rgba(#{$button-color});
45
+ background: rgba(#{$button-background-color});
46
+ border-color: rgba(#{$button-border-color});
45
47
  border-style: solid;
46
48
  border-width: #{$border-width};
47
49
  white-space: nowrap;
48
- border-radius: #{$border-radius};
50
+ border-radius: calc(min(#{$size-control-block-size}, #{$radius-size}) * #{$radius-ratio});
49
51
  cursor: pointer;
50
52
  transition:
51
53
  color #{$transition-duration} ease,
@@ -57,34 +59,35 @@ $size-line-height: sass.fn-naming-var("line-height");
57
59
 
58
60
  padding: calc(#{$spacing-y} * #{$size-coefficient-y}) calc(#{$spacing-x} * #{$size-coefficient-x});
59
61
  font-size: #{$size-font-size};
60
- height: #{$size-height};
62
+ height: #{$size-control-block-size};
61
63
  line-height: #{$size-line-height};
62
64
 
63
65
  &:hover {
64
- border-color: rgb(#{$button-border-color-hover});
65
- background-color: rgb(#{$button-background-color-hover});
66
+ border-color: rgba(#{$button-border-color-hover});
67
+ background-color: rgba(#{$button-background-color-hover});
66
68
  }
67
69
 
68
70
  &.focus,
69
71
  &:focus {
70
- border-color: rgb(#{$button-border-color-focus});
71
- background-color: rgb(#{$button-background-color-focus});
72
+ border-color: rgba(#{$button-border-color-focus});
73
+ background-color: rgba(#{$button-background-color-focus});
72
74
 
73
75
  &.shadow {
74
- box-shadow: 0 0 0 0.25rem rgb(#{$button-box-shadow-color-focus}, 0.25);
76
+ box-shadow: 0 0 0 0.25rem rgba(#{$button-box-shadow-color-focus}, 0.25);
75
77
  }
76
78
  }
77
79
 
78
80
  &:active,
79
81
  &.active {
80
- border-color: rgb(#{$button-border-color-active});
81
- background-color: rgb(#{$button-background-color-active});
82
+ border-color: rgba(#{$button-border-color-active});
83
+ background-color: rgba(#{$button-background-color-active});
82
84
  }
83
85
 
84
86
  &:disabled,
85
87
  &.disabled {
86
- border-color: rgba(#{$button-border-color-disabled}, 0.5);
87
- background-color: rgba(#{$button-background-color-disabled}, 0.5);
88
+ border-color: rgba(#{$button-border-color-disabled});
89
+ background-color: rgba(#{$button-background-color-disabled});
90
+ color: rgba(#{$button-color-disabled});
88
91
  cursor: not-allowed;
89
92
  }
90
93
 
@@ -1,7 +1,9 @@
1
+ import { AppSize } from "../app";
2
+
1
3
  // Type definitions
2
4
  export type ButtonVariant = "fill" | "outline" | "text" | "link";
3
5
 
4
- export type ButtonSize = "small" | "standard" | "large";
6
+ export type ButtonSize = AppSize;
5
7
 
6
8
  export type ButtonProps = {
7
9
  role?: string;
@@ -3,7 +3,7 @@
3
3
  <script lang="ts" setup>
4
4
  import { computed, inject, ref } from "vue";
5
5
  import { type ButtonProps } from "./button.type";
6
- import { withPrefix } from "../../utils";
6
+ import { cssPrefix } from "../../utils";
7
7
  import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../app";
8
8
 
9
9
  // Component setup (props, emits, injects)
@@ -30,11 +30,11 @@ const buttonAttrs = computed(() => {
30
30
 
31
31
  return {
32
32
  class: [
33
- withPrefix(["layer", "button"]),
34
- withPrefix(["role", role]),
35
- withPrefix(["shape", shape]),
36
- withPrefix("button"),
37
- withPrefix(["size", props.size]),
33
+ cssPrefix(["layer", "button"]),
34
+ cssPrefix(["role", role]),
35
+ cssPrefix(["shape", shape]),
36
+ cssPrefix("button"),
37
+ cssPrefix(["size", props.size]),
38
38
  props.variant,
39
39
  {
40
40
  block: props.block,
@@ -46,7 +46,7 @@ const buttonAttrs = computed(() => {
46
46
  });
47
47
 
48
48
  const loaderAttrs = {
49
- class: [withPrefix("loader")],
49
+ class: [cssPrefix("loader")],
50
50
  } as const;
51
51
 
52
52
  // Methods
@@ -3,7 +3,7 @@
3
3
  <script lang="ts" setup>
4
4
  import { computed, provide, toRefs } from "vue";
5
5
  import { type CableProviderState, type CableProps } from "./cable.type";
6
- import { withPrefix } from "../../utils";
6
+ import { cssPrefix } from "../../utils";
7
7
  import { CABLE_PROVIDER_STATE_KEY } from "./cable.constants";
8
8
 
9
9
  // Component setup (props, emits, injects)
@@ -21,7 +21,7 @@ const { placement } = toRefs(props);
21
21
  // ----------------------------------------------------------------------------
22
22
  const cableAttrs = computed(() => {
23
23
  return {
24
- class: [withPrefix(["layer", "cable"]), withPrefix("cable"), placement.value],
24
+ class: [cssPrefix(["layer", "cable"]), cssPrefix("cable"), placement.value],
25
25
  };
26
26
  });
27
27
 
@@ -7,12 +7,14 @@ $card: sass.fn-naming-prefix("card");
7
7
  $card-background-color: sass.fn-naming-var("card", "background-color");
8
8
  $card-color: sass.fn-naming-var("card", "color");
9
9
 
10
- $border-radius: sass.fn-naming-var("border-radius");
10
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
11
+ $radius-size: sass.fn-naming-var("radius-size");
11
12
  $transition-duration: sass.fn-naming-var("motion", "duration");
13
+ $border-radius: calc(#{$radius-size} * #{$radius-ratio});
12
14
 
13
15
  .#{$card} {
14
- background-color: rgb(#{$card-background-color});
15
- color: rgb(#{$card-color});
16
+ background-color: rgba(#{$card-background-color});
17
+ color: rgba(#{$card-color});
16
18
  border-radius: #{$border-radius};
17
19
  transition:
18
20
  box-shadow #{$transition-duration} ease,
@@ -3,7 +3,7 @@
3
3
  <script lang="ts" setup>
4
4
  import { computed, inject, provide } from "vue";
5
5
  import { type CardProps, type CardProviderState } from "./card.type";
6
- import { withPrefix } from "../../../utils";
6
+ import { cssPrefix } from "../../../utils";
7
7
  import { type AppProviderState, APP_PROVIDER_STATE_KEY } from "../../app";
8
8
  import { CARD_PROVIDER_STATE_KEY } from "./card.constants";
9
9
 
@@ -33,10 +33,10 @@ const role = computed(() => {
33
33
  const cardAttrs = computed(() => {
34
34
  return {
35
35
  class: [
36
- withPrefix(["layer", "card"]),
37
- withPrefix(["role", role.value]),
38
- withPrefix(["shape", shape.value]),
39
- withPrefix("card"),
36
+ cssPrefix(["layer", "card"]),
37
+ cssPrefix(["role", role.value]),
38
+ cssPrefix(["shape", shape.value]),
39
+ cssPrefix("card"),
40
40
  {
41
41
  divider: divider.value,
42
42
  },
@@ -11,8 +11,8 @@ $padding-x: sass.fn-naming-var("spacing", "x");
11
11
  $transition-duration: sass.fn-naming-var("motion", "duration");
12
12
 
13
13
  .#{$card-body} {
14
- background-color: rgb(#{$card-background-color});
15
- color: rgb(#{$card-color});
14
+ background-color: rgba(#{$card-background-color});
15
+ color: rgba(#{$card-color});
16
16
  padding: calc(#{$padding-y} * 4) calc(#{$padding-x} * 4);
17
17
  transition:
18
18
  box-shadow #{$transition-duration} ease,
@@ -1,9 +1,9 @@
1
1
  <style lang="scss" src="./card-body.scss"></style>
2
2
  <template src="./card-body.html"></template>
3
3
  <script lang="ts" setup>
4
- import { withPrefix } from "../../../utils";
4
+ import { cssPrefix } from "../../../utils";
5
5
 
6
6
  const cardBodyAttrs = {
7
- class: [withPrefix("card-body")],
7
+ class: [cssPrefix("card-body")],
8
8
  } as const;
9
9
  </script>
@@ -15,8 +15,8 @@ $border: #{$border-width} solid transparent;
15
15
  $transition-duration: sass.fn-naming-var("motion", "duration");
16
16
 
17
17
  .#{$card-footer} {
18
- background-color: rgb(#{$card-background-color});
19
- color: rgb(#{$card-color});
18
+ background-color: rgba(#{$card-background-color});
19
+ color: rgba(#{$card-color});
20
20
  padding: calc(#{$padding-y} * 4) calc(#{$padding-x} * 4);
21
21
  border-top: #{$border};
22
22
  transition:
@@ -27,6 +27,6 @@ $transition-duration: sass.fn-naming-var("motion", "duration");
27
27
  border-radius #{$transition-duration} ease;
28
28
 
29
29
  &.divider {
30
- border-color: rgb(#{$card-border-color});
30
+ border-color: rgba(#{$card-border-color});
31
31
  }
32
32
  }
@@ -2,7 +2,7 @@
2
2
  <template src="./card-footer.html"></template>
3
3
  <script lang="ts" setup>
4
4
  import { computed, inject } from "vue";
5
- import { withPrefix } from "../../../utils";
5
+ import { cssPrefix } from "../../../utils";
6
6
  import { type CardProviderState, CARD_PROVIDER_STATE_KEY } from "../card";
7
7
 
8
8
  // Component setup (props, emits, injects)
@@ -15,7 +15,7 @@ const cardFooterAttrs = computed(() => {
15
15
  const divider = cardProviderState?.divider.value ?? false;
16
16
  return {
17
17
  class: [
18
- withPrefix("card-footer"),
18
+ cssPrefix("card-footer"),
19
19
  {
20
20
  divider,
21
21
  },
@@ -15,8 +15,8 @@ $border: #{$border-width} solid transparent;
15
15
  $transition-duration: sass.fn-naming-var("motion", "duration");
16
16
 
17
17
  .#{$card-header} {
18
- background-color: rgb(#{$card-background-color});
19
- color: rgb(#{$card-color});
18
+ background-color: rgba(#{$card-background-color});
19
+ color: rgba(#{$card-color});
20
20
  padding: calc(#{$padding-y} * 4) calc(#{$padding-x} * 4);
21
21
  border-bottom: #{$border};
22
22
  transition:
@@ -27,6 +27,6 @@ $transition-duration: sass.fn-naming-var("motion", "duration");
27
27
  border-radius #{$transition-duration} ease;
28
28
 
29
29
  &.divider {
30
- border-color: rgb(#{$card-border-color});
30
+ border-color: rgba(#{$card-border-color});
31
31
  }
32
32
  }
@@ -2,7 +2,7 @@
2
2
  <template src="./card-header.html"></template>
3
3
  <script lang="ts" setup>
4
4
  import { computed, inject } from "vue";
5
- import { withPrefix } from "../../../utils";
5
+ import { cssPrefix } from "../../../utils";
6
6
  import { type CardProviderState, CARD_PROVIDER_STATE_KEY } from "../card";
7
7
 
8
8
  // Component setup (props, emits, injects)
@@ -15,7 +15,7 @@ const cardHeaderAttrs = computed(() => {
15
15
  const divider = cardProviderState?.divider.value ?? false;
16
16
  return {
17
17
  class: [
18
- withPrefix("card-header"),
18
+ cssPrefix("card-header"),
19
19
  {
20
20
  divider,
21
21
  },
@@ -2,7 +2,7 @@
2
2
  v-bind="checkboxAttrs"
3
3
  :tabindex="disabled ? -1 : 0"
4
4
  :aria-checked="props.modelValue"
5
- @click="onCheckbox"
5
+ @pointerup="onCheckbox"
6
6
  @focus="onFocus"
7
7
  @blur="onBlur"
8
8
  @keydown="onKeydown"
@@ -17,7 +17,11 @@ $checkbox-background-color-unchecked: sass.fn-naming-var(
17
17
  $checkbox-background-color-checked: sass.fn-naming-var("checkbox", "background-color", "checked");
18
18
  $checkbox-background-color-disabled: sass.fn-naming-var("checkbox", "background-color", "disabled");
19
19
 
20
- $checkbox-color: sass.fn-naming-var("checkbox", "color");
20
+ $checkbox-color-checked: sass.fn-naming-var("checkbox", "color", "checked");
21
+ $checkbox-color-unchecked: sass.fn-naming-var("checkbox", "color", "unchecked");
22
+ $checkbox-color-hover: sass.fn-naming-var("checkbox", "color", "hover");
23
+ $checkbox-color-focus: sass.fn-naming-var("checkbox", "color", "focus");
24
+ $checkbox-color-disabled: sass.fn-naming-var("checkbox", "color", "disabled");
21
25
 
22
26
  $checkbox-border-color-hover: sass.fn-naming-var("checkbox", "border-color", "hover");
23
27
  $checkbox-border-color-focus: sass.fn-naming-var("checkbox", "border-color", "focus");
@@ -28,7 +32,10 @@ $checkbox-border-color-disabled: sass.fn-naming-var("checkbox", "border-color",
28
32
  $checkbox-box-shadow-color-focus: sass.fn-naming-var("checkbox", "box-shadow-color", "focus");
29
33
 
30
34
  $transition-duration: sass.fn-naming-var("motion", "duration");
31
- $border-radius: sass.fn-naming-var("border-radius");
35
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
36
+ $radius-size: sass.fn-naming-var("radius-size");
37
+ $size-control-mark-size: sass.fn-naming-var("control-mark-size");
38
+ $border-radius: calc(min(#{$size-control-mark-size}, #{$radius-size}) * #{$radius-ratio});
32
39
 
33
40
  .#{$checkbox} {
34
41
  display: inline-flex;
@@ -41,13 +48,14 @@ $border-radius: sass.fn-naming-var("border-radius");
41
48
 
42
49
  .#{$checkbox-icon} {
43
50
  flex-shrink: 0;
44
- width: 1.25rem;
45
- height: 1.25rem;
51
+ width: #{$size-control-mark-size};
52
+ height: #{$size-control-mark-size};
46
53
  display: flex;
47
54
  align-items: center;
48
55
  justify-content: center;
49
- border: 1px solid rgb(#{$checkbox-color});
56
+ border: 1px solid transparent;
50
57
  background-color: transparent;
58
+ border-radius: #{$border-radius};
51
59
  transition:
52
60
  box-shadow #{$transition-duration} ease,
53
61
  border-color #{$transition-duration} ease,
@@ -55,14 +63,13 @@ $border-radius: sass.fn-naming-var("border-radius");
55
63
  color #{$transition-duration} ease,
56
64
  border-radius #{$transition-duration} ease,
57
65
  transform #{$transition-duration} ease;
58
- border-radius: calc(#{$border-radius} * 0.5);
59
66
  box-sizing: border-box;
60
67
 
61
68
  &::after {
62
69
  content: "";
63
- width: 0.2rem;
64
- height: 0.5rem;
65
- border: solid rgb(#{$checkbox-color});
70
+ width: calc(#{$size-control-mark-size} * 0.2);
71
+ height: calc(#{$size-control-mark-size} * 0.5);
72
+ border: solid rgba(#{$checkbox-color-unchecked});
66
73
  border-width: 0 2px 2px 0;
67
74
  transform: rotate(45deg) scale(0);
68
75
  transform-origin: center;
@@ -75,23 +82,15 @@ $border-radius: sass.fn-naming-var("border-radius");
75
82
  }
76
83
  }
77
84
 
78
- &.#{$shape-rounded} .#{$checkbox-icon} {
79
- border-radius: calc(#{$border-radius} - 10%);
80
- }
81
-
82
- &.#{$shape-pill} .#{$checkbox-icon} {
83
- border-radius: 50%;
84
- }
85
-
86
85
  &:not(.on) {
87
86
  .#{$checkbox-icon} {
88
87
  background-color: transparent;
89
- border-color: rgb(#{$checkbox-border-color-unchecked});
88
+ border-color: rgba(#{$checkbox-border-color-unchecked});
90
89
  }
91
90
 
92
91
  &:not(.disabled):not(.readonly):hover {
93
92
  .#{$checkbox-icon} {
94
- border-color: rgb(#{$checkbox-border-color-hover});
93
+ border-color: rgba(#{$checkbox-border-color-hover});
95
94
  }
96
95
  }
97
96
  }
@@ -99,22 +98,23 @@ $border-radius: sass.fn-naming-var("border-radius");
99
98
  &.on {
100
99
  &.fill {
101
100
  .#{$checkbox-icon} {
102
- background-color: rgb(#{$checkbox-background-color-checked});
103
- border-color: rgb(#{$checkbox-border-color-checked});
101
+ background-color: rgba(#{$checkbox-background-color-checked});
102
+ border-color: rgba(#{$checkbox-border-color-checked});
104
103
 
105
104
  &::after {
106
105
  transform: rotate(45deg) scale(1);
106
+ border-color: rgba(#{$checkbox-color-checked});
107
107
  }
108
108
  }
109
109
  }
110
110
 
111
111
  &.outline {
112
112
  .#{$checkbox-icon} {
113
- border-color: rgb(#{$checkbox-border-color-checked});
113
+ border-color: rgba(#{$checkbox-border-color-checked});
114
114
 
115
115
  &::after {
116
116
  transform: rotate(45deg) scale(1);
117
- border-color: rgb(#{$checkbox-background-color-checked});
117
+ border-color: rgba(#{$checkbox-background-color-checked});
118
118
  }
119
119
  }
120
120
  }
@@ -126,8 +126,8 @@ $border-radius: sass.fn-naming-var("border-radius");
126
126
 
127
127
  &.on {
128
128
  .#{$checkbox-icon} {
129
- background-color: rgb(#{$checkbox-background-color-disabled});
130
- border-color: rgb(#{$checkbox-border-color-disabled});
129
+ background-color: rgba(#{$checkbox-background-color-disabled});
130
+ border-color: rgba(#{$checkbox-border-color-disabled});
131
131
  }
132
132
  }
133
133
  }
@@ -139,12 +139,12 @@ $border-radius: sass.fn-naming-var("border-radius");
139
139
  &.focus {
140
140
  &.shadow {
141
141
  .#{$checkbox-icon} {
142
- box-shadow: 0 0 0 0.25rem rgb(#{$checkbox-box-shadow-color-focus}, 0.25);
142
+ box-shadow: 0 0 0 0.25rem rgba(#{$checkbox-box-shadow-color-focus}, 0.25);
143
143
  }
144
144
  }
145
145
 
146
146
  .#{$checkbox-icon} {
147
- border-color: rgb(#{$checkbox-border-color-focus});
147
+ border-color: rgba(#{$checkbox-border-color-focus});
148
148
  }
149
149
  }
150
150
  }
@@ -1,8 +1,12 @@
1
+ import { AppSize } from "../app";
2
+
1
3
  export type CheckboxVariant = "fill" | "outline";
4
+ export type CheckboxSize = AppSize;
2
5
 
3
6
  export type CheckboxProps = {
4
7
  modelValue?: boolean;
5
8
  role?: string;
9
+ size?: CheckboxSize;
6
10
  shape?: string;
7
11
  variant?: CheckboxVariant;
8
12
  readonly?: boolean;