@toife/vue 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/package.json +1 -1
  2. package/src/components/action/action.html +1 -1
  3. package/src/components/app/app.type.ts +6 -0
  4. package/src/components/app/app.vue +7 -1
  5. package/src/components/avatar/avatar.scss +3 -2
  6. package/src/components/button/button.scss +9 -6
  7. package/src/components/button/button.type.ts +3 -1
  8. package/src/components/card/card/card.scss +3 -1
  9. package/src/components/checkbox/checkbox.scss +9 -14
  10. package/src/components/checkbox/checkbox.type.ts +4 -0
  11. package/src/components/checkbox/checkbox.vue +2 -0
  12. package/src/components/decision-modal/decision-modal.scss +3 -1
  13. package/src/components/divider/divider.type.ts +2 -2
  14. package/src/components/divider/divider.vue +2 -2
  15. package/src/components/divider/index.ts +1 -1
  16. package/src/components/dropdown/dropdown.scss +5 -2
  17. package/src/components/dropdown/dropdown.type.ts +4 -1
  18. package/src/components/dropdown/dropdown.vue +4 -0
  19. package/src/components/field/field.type.ts +2 -2
  20. package/src/components/field/outline/outline.scss +9 -8
  21. package/src/components/form-group/form-group.type.ts +2 -2
  22. package/src/components/form-group/form-group.vue +2 -2
  23. package/src/components/gesture-indicator/gesture-indicator.scss +3 -1
  24. package/src/components/index.ts +1 -0
  25. package/src/components/layout/flex/flex.scss +0 -2
  26. package/src/components/layout/flex/flex.type.ts +3 -1
  27. package/src/components/layout/flex-item/flex-item.html +1 -0
  28. package/src/components/layout/flex-item/flex-item.scss +48 -0
  29. package/src/components/layout/flex-item/flex-item.type.ts +11 -0
  30. package/src/components/layout/flex-item/flex-item.vue +27 -0
  31. package/src/components/layout/flex-item/index.ts +2 -0
  32. package/src/components/layout/grid/grid.scss +0 -2
  33. package/src/components/layout/grid/grid.type.ts +1 -1
  34. package/src/components/layout/grid-item/grid-item.html +1 -0
  35. package/src/components/layout/grid-item/grid-item.scss +49 -0
  36. package/src/components/layout/grid-item/grid-item.type.ts +14 -0
  37. package/src/components/layout/grid-item/grid-item.vue +27 -0
  38. package/src/components/layout/grid-item/index.ts +2 -0
  39. package/src/components/layout/index.ts +2 -1
  40. package/src/components/modal/modal.scss +3 -1
  41. package/src/components/radio/radio/radio.scss +7 -5
  42. package/src/components/radio/radio/radio.type.ts +4 -0
  43. package/src/components/radio/radio/radio.vue +2 -0
  44. package/src/components/radio/radio-group/index.ts +1 -1
  45. package/src/components/radio/radio-group/radio-group.type.ts +2 -2
  46. package/src/components/radio/radio-group/radio-group.vue +2 -2
  47. package/src/components/refresher/refresher.html +4 -4
  48. package/src/components/refresher/refresher.scss +10 -4
  49. package/src/components/refresher/refresher.vue +3 -3
  50. package/src/components/skeleton/skeleton.scss +3 -1
  51. package/src/components/slide-range/index.ts +2 -0
  52. package/src/components/slide-range/slide-range.html +20 -0
  53. package/src/components/slide-range/slide-range.scss +161 -0
  54. package/src/components/slide-range/slide-range.type.ts +16 -0
  55. package/src/components/slide-range/slide-range.vue +229 -0
  56. package/src/components/switch/switch.scss +11 -22
  57. package/src/components/switch/switch.type.ts +5 -0
  58. package/src/components/switch/switch.vue +2 -0
  59. package/src/components/tabs/tabs/tabs.scss +135 -95
  60. package/src/components/tabs/tabs/tabs.type.ts +0 -1
  61. package/src/components/tabs/tabs/tabs.vue +6 -10
  62. package/src/components/toast/toast-content/toast-content.scss +3 -2
  63. package/src/components/toolbar/toolbar.html +1 -3
  64. package/src/components/toolbar/toolbar.scss +25 -40
  65. package/src/components/toolbar/toolbar.type.ts +2 -2
  66. package/src/components/toolbar/toolbar.vue +6 -6
  67. package/src/factory.ts +6 -2
  68. package/src/index.ts +1 -1
  69. package/src/components/action/action.md +0 -115
  70. package/src/components/app/app.md +0 -77
  71. package/src/components/avatar/avatar.md +0 -64
  72. package/src/components/button/button.md +0 -66
  73. package/src/components/cable/cable.md +0 -57
  74. package/src/components/card/card/card.md +0 -57
  75. package/src/components/card/card-body/card-body.md +0 -34
  76. package/src/components/card/card-footer/card-footer.md +0 -42
  77. package/src/components/card/card-header/card-header.md +0 -44
  78. package/src/components/checkbox/checkbox.md +0 -60
  79. package/src/components/collapse/collapse.md +0 -59
  80. package/src/components/container/container.md +0 -38
  81. package/src/components/decision-modal/decision-modal.md +0 -79
  82. package/src/components/divider/divider.md +0 -42
  83. package/src/components/field/field.md +0 -68
  84. package/src/components/field/outline/outline-field.md +0 -44
  85. package/src/components/form-group/form-group.md +0 -41
  86. package/src/components/gesture-indicator/gesture-indicator.md +0 -42
  87. package/src/components/image/image.md +0 -41
  88. package/src/components/layout/cell/cell.html +0 -1
  89. package/src/components/layout/cell/cell.md +0 -47
  90. package/src/components/layout/cell/cell.scss +0 -54
  91. package/src/components/layout/cell/cell.type.ts +0 -19
  92. package/src/components/layout/cell/cell.vue +0 -35
  93. package/src/components/layout/cell/index.ts +0 -2
  94. package/src/components/layout/grid/grid.md +0 -50
  95. package/src/components/modal/modal.md +0 -65
  96. package/src/components/page/page.md +0 -39
  97. package/src/components/present/present.md +0 -60
  98. package/src/components/radio/radio/radio.md +0 -53
  99. package/src/components/radio/radio-group/radio-group.md +0 -62
  100. package/src/components/refresher/refresher.md +0 -53
  101. package/src/components/route/route-navigator/route-navigator.md +0 -50
  102. package/src/components/route/route-outlet/route-outlet.md +0 -30
  103. package/src/components/route/route-provider/route-provider.md +0 -46
  104. package/src/components/route/route-wrapper/route-wrapper.md +0 -45
  105. package/src/components/segmented-field/segmented-field.md +0 -58
  106. package/src/components/skeleton/skeleton.md +0 -47
  107. package/src/components/switch/switch.md +0 -57
  108. package/src/components/tabs/tab/tab.md +0 -52
  109. package/src/components/tabs/tabs/tabs.md +0 -59
  110. package/src/components/toast/toast/toast.md +0 -56
  111. package/src/components/toast/toast-content/toast-content.md +0 -41
  112. package/src/components/toolbar/toolbar.md +0 -57
@@ -0,0 +1,49 @@
1
+ @use "@toife/sass-layer" as sass;
2
+ @use "sass:map";
3
+ @use "sass:list";
4
+
5
+ $grid-item: sass.fn-naming-prefix("grid-item");
6
+ $grid-item-row: sass.fn-naming-var("grid-item", "row");
7
+ $grid-item-column: sass.fn-naming-var("grid-item", "column");
8
+ $grid-item-justify: sass.fn-naming-var("grid-item", "justify");
9
+ $grid-item-align: sass.fn-naming-var("grid-item", "align");
10
+
11
+ .#{$grid-item} {
12
+ display: grid;
13
+ box-sizing: border-box;
14
+ min-width: 0;
15
+ grid-column: #{$grid-item-column};
16
+ grid-row: #{$grid-item-row};
17
+ justify-self: #{$grid-item-justify};
18
+ align-self: #{$grid-item-align};
19
+
20
+ $bp-names: map.keys(sass.$breakpoints);
21
+ $bp-count: list.length($bp-names);
22
+
23
+ @for $i from 1 through $bp-count {
24
+ $bp-name: list.nth($bp-names, $i);
25
+ $bp-min: map.get(sass.$breakpoints, $bp-name);
26
+
27
+ @media (min-width: $bp-min) {
28
+ grid-column: #{sass.fn-naming-cascade-dvar(
29
+ ("grid-item", "column"),
30
+ $bp-names,
31
+ $i,
32
+ $grid-item-column
33
+ )};
34
+ grid-row: #{sass.fn-naming-cascade-dvar(("grid-item", "row"), $bp-names, $i, $grid-item-row)};
35
+ justify-self: #{sass.fn-naming-cascade-dvar(
36
+ ("grid-item", "justify"),
37
+ $bp-names,
38
+ $i,
39
+ $grid-item-justify
40
+ )};
41
+ align-self: #{sass.fn-naming-cascade-dvar(
42
+ ("grid-item", "align"),
43
+ $bp-names,
44
+ $i,
45
+ $grid-item-align
46
+ )};
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,14 @@
1
+ export type GridItemJustify = "start" | "end" | "center" | "stretch";
2
+ export type GridItemAlign = "start" | "end" | "center" | "stretch";
3
+
4
+ export type GridItemOption = {
5
+ breakpoint?: string;
6
+ row?: number;
7
+ column?: number;
8
+ justify?: GridItemJustify;
9
+ align?: GridItemAlign;
10
+ };
11
+
12
+ export type GridItemProps = {
13
+ options?: GridItemOption[];
14
+ };
@@ -0,0 +1,27 @@
1
+ <style lang="scss" src="./grid-item.scss" scoped></style>
2
+ <template src="./grid-item.html"></template>
3
+ <script lang="ts" setup>
4
+ import { computed } from "vue";
5
+ import { withPrefix, property } from "../../../utils";
6
+ import type { GridItemProps } from "./grid-item.type";
7
+
8
+ const props = withDefaults(defineProps<GridItemProps>(), {
9
+ options: () => [],
10
+ });
11
+
12
+ const gridItemAttrs = computed(() => {
13
+ const style = props.options.map((option) => {
14
+ return {
15
+ [property(["grid-item", "row", option?.breakpoint || ""])]: option.row,
16
+ [property(["grid-item", "column", option?.breakpoint || ""])]: option.column,
17
+ [property(["grid-item", "justify", option?.breakpoint || ""])]: option.justify,
18
+ [property(["grid-item", "align", option?.breakpoint || ""])]: option.align,
19
+ };
20
+ });
21
+
22
+ return {
23
+ class: [withPrefix("grid-item")],
24
+ style,
25
+ };
26
+ });
27
+ </script>
@@ -0,0 +1,2 @@
1
+ export { default as GridItem } from "./grid-item.vue";
2
+ export * from "./grid-item.type";
@@ -1,3 +1,4 @@
1
1
  export * from "./grid";
2
2
  export * from "./flex";
3
- export * from "./cell";
3
+ export * from "./grid-item";
4
+ export * from "./flex-item";
@@ -9,12 +9,14 @@ $viewport-width: sass.fn-naming-var("viewport", "width");
9
9
  $viewport-max-width: sass.fn-naming-var("viewport", "max-width");
10
10
  $viewport-height: sass.fn-naming-var("viewport", "height");
11
11
  $viewport-max-height: sass.fn-naming-var("viewport", "max-height");
12
- $border-radius: sass.fn-naming-var("border-radius");
12
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
13
+ $radius-size: sass.fn-naming-var("radius-size");
13
14
  $safe-area-top: sass.fn-naming-var("safe-area", "top");
14
15
  $safe-area-bottom: sass.fn-naming-var("safe-area", "bottom");
15
16
  $safe-area-left: sass.fn-naming-var("safe-area", "left");
16
17
  $safe-area-right: sass.fn-naming-var("safe-area", "right");
17
18
  $transition-duration: sass.fn-naming-var("motion", "duration");
19
+ $border-radius: calc(min(#{$viewport-width}, #{$radius-size}) * #{$radius-ratio});
18
20
 
19
21
  .#{$modal} {
20
22
  background: rgb(#{$modal-background-color});
@@ -22,7 +22,9 @@ $radio-border-color-disabled: sass.fn-naming-var("radio", "border-color", "disab
22
22
  $radio-box-shadow-color-focus: sass.fn-naming-var("radio", "box-shadow-color", "focus");
23
23
 
24
24
  $transition-duration: sass.fn-naming-var("motion", "duration");
25
- $border-radius: sass.fn-naming-var("border-radius");
25
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
26
+
27
+ $size-control-mark-size: sass.fn-naming-var("control-mark-size");
26
28
 
27
29
  .#{$radio} {
28
30
  display: inline-flex;
@@ -35,8 +37,8 @@ $border-radius: sass.fn-naming-var("border-radius");
35
37
 
36
38
  .#{$radio-icon} {
37
39
  flex-shrink: 0;
38
- width: 1.25rem;
39
- height: 1.25rem;
40
+ width: #{$size-control-mark-size};
41
+ height: #{$size-control-mark-size};
40
42
  display: flex;
41
43
  align-items: center;
42
44
  justify-content: center;
@@ -54,8 +56,8 @@ $border-radius: sass.fn-naming-var("border-radius");
54
56
 
55
57
  &::after {
56
58
  content: "";
57
- width: 0.5rem;
58
- height: 0.5rem;
59
+ width: calc(#{$size-control-mark-size} * 0.5);
60
+ height: calc(#{$size-control-mark-size} * 0.5);
59
61
  border-radius: 50%;
60
62
  background-color: rgb(#{$radio-color});
61
63
  transform: scale(0);
@@ -1,9 +1,13 @@
1
+ import { AppSize } from "@/components/app";
2
+
1
3
  export type RadioVariant = "fill" | "outline";
4
+ export type RadioSize = AppSize;
2
5
 
3
6
  // Type definitions
4
7
  export type RadioProps = {
5
8
  value: string | number;
6
9
  role?: string;
10
+ size?: RadioSize;
7
11
  variant?: RadioVariant;
8
12
  disabled?: boolean;
9
13
  readonly?: boolean;
@@ -11,6 +11,7 @@ import { type RadioGroupProviderState, RADIO_GROUP_PROVIDER_STATE_KEY } from "..
11
11
  // ----------------------------------------------------------------------------
12
12
  const props = withDefaults(defineProps<RadioProps>(), {
13
13
  disabled: false,
14
+ size: "standard",
14
15
  shadow: undefined,
15
16
  });
16
17
  const appState = inject<AppProviderState>(APP_PROVIDER_STATE_KEY);
@@ -43,6 +44,7 @@ const radioAttrs = computed(() => {
43
44
  class: [
44
45
  withPrefix(["layer", "radio"]),
45
46
  withPrefix(["role", role]),
47
+ withPrefix(["size", props.size]),
46
48
  withPrefix("radio"),
47
49
  variant,
48
50
  {
@@ -2,6 +2,6 @@ export { default as RadioGroup } from "./radio-group.vue";
2
2
  export type {
3
3
  RadioGroupProps,
4
4
  RadioGroupProviderState,
5
- RadioGroupOrientation,
5
+ RadioGroupDirection,
6
6
  } from "./radio-group.type";
7
7
  export { RADIO_GROUP_PROVIDER_STATE_KEY } from "./radio-group.constants";
@@ -1,7 +1,7 @@
1
1
  import type { ComputedRef } from "vue";
2
2
  import type { RadioVariant } from "../radio/radio.type";
3
3
 
4
- export type RadioGroupOrientation = "horizontal" | "vertical";
4
+ export type RadioGroupDirection = "horizontal" | "vertical";
5
5
 
6
6
  export type RadioGroupProps = {
7
7
  modelValue?: string | number;
@@ -10,7 +10,7 @@ export type RadioGroupProps = {
10
10
  disabled?: boolean;
11
11
  readonly?: boolean;
12
12
  shadow?: boolean;
13
- orientation?: RadioGroupOrientation;
13
+ direction?: RadioGroupDirection;
14
14
  };
15
15
 
16
16
  export type RadioGroupEmit = {
@@ -13,7 +13,7 @@ const props = withDefaults(defineProps<RadioGroupProps>(), {
13
13
  disabled: false,
14
14
  readonly: false,
15
15
  variant: "fill",
16
- orientation: "vertical",
16
+ direction: "vertical",
17
17
  shadow: undefined,
18
18
  });
19
19
  const emit = defineEmits<RadioGroupEmit>();
@@ -37,7 +37,7 @@ const shadow = computed(() => {
37
37
 
38
38
  const radioGroupAttrs = computed(() => {
39
39
  return {
40
- class: [withPrefix("radio-group"), props.orientation],
40
+ class: [withPrefix("radio-group"), props.direction],
41
41
  };
42
42
  });
43
43
 
@@ -1,6 +1,6 @@
1
- <div v-bind="refresherAttrs" v-show="calculateOffset > 0">
2
- <slot name="icon" :offset="calculateOffset" :refreshing="refreshing"></slot>
3
- </div>
4
1
  <div v-bind="containerAttrs" ref="container">
5
- <slot></slot>
2
+ <div v-bind="refresherIconAttrs" v-show="calculateOffset > 0">
3
+ <slot name="icon" :offset="calculateOffset" :refreshing="refreshing"></slot>
4
+ </div>
5
+ <slot :offset="calculateOffset" :refreshing="refreshing"></slot>
6
6
  </div>
@@ -1,8 +1,8 @@
1
1
  @use "@toife/sass-layer" as sass;
2
2
 
3
3
  // Class
4
- $refresher: sass.fn-naming-prefix("refresher");
5
- $container: sass.fn-naming-prefix("refresher-container");
4
+ $refresher-icon: sass.fn-naming-prefix("refresher-icon");
5
+ $container: sass.fn-naming-prefix("refresher");
6
6
 
7
7
  // Variables
8
8
  $safe-area-top: sass.fn-naming-var("safe-area", "top");
@@ -12,12 +12,18 @@ $offset: sass.fn-naming-var("refresher-offset");
12
12
  .#{$container} {
13
13
  width: 100%;
14
14
  height: 100%;
15
- position: relative;
15
+ max-width: 100%;
16
+ max-height: 100%;
17
+ position: absolute;
18
+ top: 0;
19
+ left: 0;
20
+ right: 0;
21
+ bottom: 0;
16
22
  overflow: auto;
17
23
  }
18
24
 
19
25
  // Refresher
20
- .#{$refresher} {
26
+ .#{$refresher-icon} {
21
27
  display: flex;
22
28
  justify-content: center;
23
29
  align-items: center;
@@ -29,13 +29,13 @@ const calculateOffset = computed(() => {
29
29
  return props.offset !== undefined ? props.offset : moveOffset.value / 2;
30
30
  });
31
31
 
32
- const refresherAttrs = computed(() => {
32
+ const refresherIconAttrs = computed(() => {
33
33
  return {
34
34
  style: {
35
35
  [property("refresher-offset")]: `${calculateOffset.value}px`,
36
36
  },
37
37
  class: [
38
- withPrefix("refresher"),
38
+ withPrefix("refresher-icon"),
39
39
  {
40
40
  moving: calculateOffset.value > 0,
41
41
  },
@@ -45,7 +45,7 @@ const refresherAttrs = computed(() => {
45
45
 
46
46
  const containerAttrs = computed(() => {
47
47
  return {
48
- class: [withPrefix("refresher-container")],
48
+ class: [withPrefix("refresher")],
49
49
  };
50
50
  });
51
51
 
@@ -8,8 +8,10 @@ $skeleton-width: sass.fn-naming-var("skeleton", "width");
8
8
  $skeleton-height: sass.fn-naming-var("skeleton", "height");
9
9
  $skeleton-background-color: sass.fn-naming-var("skeleton", "background-color");
10
10
 
11
- $border-radius: sass.fn-naming-var("border-radius");
11
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
12
12
  $transition-duration: sass.fn-naming-var("motion", "duration");
13
+ $radius-size: sass.fn-naming-var("radius-size");
14
+ $border-radius: calc(#{$radius-size} * #{$radius-ratio});
13
15
 
14
16
  .#{$skeleton} {
15
17
  width: #{$skeleton-width};
@@ -0,0 +1,2 @@
1
+ export { default as SlideRange } from "./slide-range.vue";
2
+ export type { SlideRangeProps, SlideRangeEmit } from "./slide-range.type";
@@ -0,0 +1,20 @@
1
+ <div v-bind="slideRangeAttrs">
2
+ <div v-bind="trackContainerAttrs" ref="container">
3
+ <div v-bind="trackBodyAttrs">
4
+ <div v-bind="trackBackAttrs" @click="onClickPath" @touchend="onClickPath"></div>
5
+ <div v-bind="trackFrontAttrs" @click="onClickPath" @touchend="onClickPath"></div>
6
+ <div
7
+ v-for="value in ranges"
8
+ :key="value"
9
+ v-bind="nodeAttrs(value)"
10
+ @click="onNodeSelect(value)"
11
+ @touchend="onNodeSelect(value)"
12
+ ></div>
13
+ </div>
14
+
15
+ <div v-bind="thumbAttrs" ref="point">
16
+ <div v-bind="thumbInnerAttrs"></div>
17
+ <span v-if="percent > 0 && isShowTooltip" v-bind="tooltipAttrs">{{ displayValue }}</span>
18
+ </div>
19
+ </div>
20
+ </div>
@@ -0,0 +1,161 @@
1
+ @use "@toife/sass-layer" as sass;
2
+
3
+ // Class name
4
+ $slide-range: sass.fn-naming-prefix("slide-range");
5
+ $slide-range-track-container: sass.fn-naming-prefix("slide-range-track-container");
6
+ $slide-range-track-body: sass.fn-naming-prefix("slide-range-track-body");
7
+ $slide-range-track: sass.fn-naming-prefix("slide-range-track");
8
+ $slide-range-node: sass.fn-naming-prefix("slide-range-node");
9
+ $slide-range-thumb: sass.fn-naming-prefix("slide-range-thumb");
10
+ $slide-range-thumb-inner: sass.fn-naming-prefix("slide-range-thumb-inner");
11
+ $slide-range-tooltip: sass.fn-naming-prefix("slide-range-tooltip");
12
+ $shape-pill: sass.fn-naming-prefix("shape-pill");
13
+ $shape-rounded: sass.fn-naming-prefix("shape-rounded");
14
+ $shape-flat: sass.fn-naming-prefix("shape-flat");
15
+ $property-border-radius: sass.fn-naming-property("border-radius");
16
+
17
+ // Property name
18
+ $spacing-x: sass.fn-naming-var("spacing", "x");
19
+ $border-width: sass.fn-naming-var("stroke", "width");
20
+ $radius-ratio: sass.fn-naming-var("radius-ratio");
21
+ $radius-size: sass.fn-naming-var("radius-size");
22
+
23
+ $slide-range-background-color: sass.fn-naming-var("slide-range", "background-color");
24
+ $slide-range-background-color-hover: sass.fn-naming-var("slide-range", "background-color", "hover");
25
+ $slide-range-background-color-focus: sass.fn-naming-var("slide-range", "background-color", "focus");
26
+ $slide-range-background-color-active: sass.fn-naming-var(
27
+ "slide-range",
28
+ "background-color",
29
+ "active"
30
+ );
31
+ $slide-range-border-color: sass.fn-naming-var("slide-range", "border-color");
32
+ $slide-range-border-color-hover: sass.fn-naming-var("slide-range", "border-color", "hover");
33
+ $slide-range-border-color-focus: sass.fn-naming-var("slide-range", "border-color", "focus");
34
+ $slide-range-border-color-active: sass.fn-naming-var("slide-range", "border-color", "active");
35
+ $slide-range-percent: sass.fn-naming-var("slide-range", "percent");
36
+ $slide-range-position: sass.fn-naming-var("slide-range", "position");
37
+ $slide-range-tooltip-background-color: sass.fn-naming-var(
38
+ "slide-range",
39
+ "tooltip-background-color"
40
+ );
41
+ $slide-range-tooltip-color: sass.fn-naming-var("slide-range", "tooltip-color");
42
+
43
+ .#{$slide-range} {
44
+ display: flex;
45
+ justify-content: center;
46
+ align-items: center;
47
+ width: 100%;
48
+
49
+ &.#{$shape-pill} {
50
+ #{$property-border-radius}: 50%;
51
+
52
+ .#{$slide-range-tooltip} {
53
+ border-radius: 3px;
54
+ }
55
+ }
56
+
57
+ &.#{$shape-rounded} {
58
+ #{$property-border-radius}: 2px;
59
+
60
+ .#{$slide-range-tooltip} {
61
+ border-radius: 2px;
62
+ }
63
+ }
64
+
65
+ &.#{$shape-flat} {
66
+ #{$property-border-radius}: 0;
67
+
68
+ .#{$slide-range-tooltip} {
69
+ border-radius: 0;
70
+ }
71
+ }
72
+
73
+ &.disabled,
74
+ &.readonly {
75
+ opacity: 0.6;
76
+ }
77
+
78
+ &.disabled {
79
+ cursor: not-allowed;
80
+ }
81
+
82
+ .#{$slide-range-track-container} {
83
+ position: relative;
84
+ margin: calc(#{$spacing-x} * 2) #{$spacing-x};
85
+ width: calc(100% - #{$spacing-x} * 2);
86
+ height: 1rem;
87
+ touch-action: none;
88
+ }
89
+
90
+ .#{$slide-range-track-body} {
91
+ position: relative;
92
+ width: 100%;
93
+ height: 1px;
94
+ top: 50%;
95
+ transform: translateY(-50%);
96
+ }
97
+
98
+ .#{$slide-range-track} {
99
+ position: absolute;
100
+ top: 0;
101
+ left: 0;
102
+ height: 1px;
103
+
104
+ &.back {
105
+ width: 100%;
106
+ background-color: rgb(#{$slide-range-border-color});
107
+ }
108
+
109
+ &.front {
110
+ width: #{$slide-range-percent};
111
+ background-color: rgb(#{$slide-range-border-color-active});
112
+ }
113
+ }
114
+
115
+ .#{$slide-range-node} {
116
+ position: absolute;
117
+ left: #{$slide-range-position};
118
+ top: -3.5px;
119
+ height: 8px;
120
+ width: 8px;
121
+ border-radius: calc(min(8px, #{$radius-size}) * #{$radius-ratio});
122
+ transform: rotate(45deg);
123
+ background-color: rgb(#{$slide-range-background-color});
124
+ border: 1px solid rgb(#{$slide-range-border-color});
125
+
126
+ &.active {
127
+ border-color: rgb(#{$slide-range-border-color-active});
128
+ background-color: rgb(#{$slide-range-background-color-active});
129
+ }
130
+ }
131
+
132
+ .#{$slide-range-thumb} {
133
+ position: absolute;
134
+ left: #{$slide-range-percent};
135
+ top: 2px;
136
+ height: 100%;
137
+
138
+ .#{$slide-range-thumb-inner} {
139
+ position: absolute;
140
+ width: 12px;
141
+ height: 12px;
142
+ border: 1px solid rgb(#{$slide-range-border-color-active});
143
+ border-radius: calc(12px * #{$radius-ratio});
144
+ background-color: rgb(#{$slide-range-background-color});
145
+ transform: translateX(calc(-50% + 2px)) rotate(45deg);
146
+ }
147
+
148
+ .#{$slide-range-tooltip} {
149
+ position: absolute;
150
+ top: -23px;
151
+ left: calc(50% + 0.15rem);
152
+ transform: translateX(-50%);
153
+ padding: 0 calc(#{$spacing-x} * 0.5);
154
+ font-size: 0.6rem;
155
+ line-height: 0.9rem;
156
+ white-space: nowrap;
157
+ color: rgb(#{$slide-range-tooltip-color});
158
+ background-color: rgb(#{$slide-range-tooltip-background-color});
159
+ }
160
+ }
161
+ }
@@ -0,0 +1,16 @@
1
+ export type SlideRangeProps = {
2
+ modelValue?: string | number;
3
+ min?: number;
4
+ max?: number;
5
+ step?: number;
6
+ unit?: string;
7
+ disabled?: boolean;
8
+ readonly?: boolean;
9
+ role?: string;
10
+ shape?: string;
11
+ };
12
+
13
+ export type SlideRangeEmit = {
14
+ (e: "update:modelValue", value: string): void;
15
+ (e: "change", value: string): void;
16
+ };