@youcan/celeste 0.19.0 → 0.20.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.
package/ai/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Celeste agent indexes
2
2
 
3
- Generated from source for `@youcan/celeste@0.19.0`. Do not edit.
3
+ Generated from source for `@youcan/celeste@0.20.0`. Do not edit.
4
4
 
5
5
  - `component-registry.json` — every component's props, events, slots, story and usage example, and
6
6
  every exported helper such as `toast`
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.19.0",
4
- "generatedAt": "2026-10-09T18:24:41.483Z",
3
+ "version": "0.20.0",
4
+ "generatedAt": "2026-10-09T19:10:43.716Z",
5
5
  "components": {
6
6
  "Alert": {
7
7
  "name": "Alert",
@@ -5207,6 +5207,17 @@
5207
5207
  "required": false,
5208
5208
  "default": "\"Add stop\""
5209
5209
  },
5210
+ {
5211
+ "name": "align",
5212
+ "type": "\"start\" | \"center\" | \"end\"",
5213
+ "values": [
5214
+ "start",
5215
+ "center",
5216
+ "end"
5217
+ ],
5218
+ "required": false,
5219
+ "default": "\"start\""
5220
+ },
5210
5221
  {
5211
5222
  "name": "angleLabel",
5212
5223
  "type": "string",
@@ -5309,6 +5320,18 @@
5309
5320
  "required": false,
5310
5321
  "default": "\"Remove stop\""
5311
5322
  },
5323
+ {
5324
+ "name": "side",
5325
+ "type": "\"top\" | \"right\" | \"bottom\" | \"left\"",
5326
+ "values": [
5327
+ "top",
5328
+ "right",
5329
+ "bottom",
5330
+ "left"
5331
+ ],
5332
+ "required": false,
5333
+ "default": "\"bottom\""
5334
+ },
5312
5335
  {
5313
5336
  "name": "swatches",
5314
5337
  "type": "string[]",
package/ai/icons.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.19.0",
4
- "generatedAt": "2026-10-09T18:24:36.461Z",
3
+ "version": "0.20.0",
4
+ "generatedAt": "2026-10-09T19:10:38.848Z",
5
5
  "prefix": "celeste",
6
6
  "icons": [
7
7
  {
package/ai/tokens.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.19.0",
4
- "generatedAt": "2026-10-09T18:24:36.461Z",
3
+ "version": "0.20.0",
4
+ "generatedAt": "2026-10-09T19:10:38.848Z",
5
5
  "tokens": [
6
6
  {
7
7
  "name": "animation-extra-fast",
package/dist/celeste.css CHANGED
@@ -2757,7 +2757,7 @@ to {
2757
2757
  scale: 0.98;
2758
2758
  opacity: 0;
2759
2759
  }
2760
- }.celeste-gradient-trigger[data-v-3f165d2c] {
2760
+ }.celeste-gradient-trigger[data-v-9b399aff] {
2761
2761
  display: flex;
2762
2762
  align-items: center;
2763
2763
  width: 100%;
@@ -2773,33 +2773,33 @@ to {
2773
2773
  cursor: pointer;
2774
2774
  gap: var(--spacing-8);
2775
2775
  }
2776
- .celeste-gradient-trigger[data-v-3f165d2c]:hover {
2776
+ .celeste-gradient-trigger[data-v-9b399aff]:hover {
2777
2777
  background: var(--color-bg-weak-50);
2778
2778
  }
2779
- .celeste-gradient-trigger i[data-v-3f165d2c] {
2779
+ .celeste-gradient-trigger i[data-v-9b399aff] {
2780
2780
  flex: none;
2781
2781
  width: 16px;
2782
2782
  height: 16px;
2783
2783
  color: var(--color-icon-sub-600);
2784
2784
  }
2785
- .celeste-gradient-swatch[data-v-3f165d2c] {
2785
+ .celeste-gradient-swatch[data-v-9b399aff] {
2786
2786
  flex: none;
2787
2787
  width: 24px;
2788
2788
  height: 24px;
2789
2789
  border-radius: var(--radius-full);
2790
2790
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
2791
2791
  }
2792
- .celeste-gradient-swatch[data-empty=true][data-v-3f165d2c] {
2792
+ .celeste-gradient-swatch[data-empty=true][data-v-9b399aff] {
2793
2793
  background: linear-gradient(135deg, transparent 47%, var(--color-stroke-sub-300) 47% 53%, transparent 53%), var(--color-bg-white-0);
2794
2794
  }
2795
- .celeste-gradient-summary[data-v-3f165d2c] {
2795
+ .celeste-gradient-summary[data-v-9b399aff] {
2796
2796
  flex: 1;
2797
2797
  min-width: 0;
2798
2798
  overflow: hidden;
2799
2799
  text-overflow: ellipsis;
2800
2800
  white-space: nowrap;
2801
2801
  }
2802
- .celeste-gradient-picker[data-v-3f165d2c] {
2802
+ .celeste-gradient-picker[data-v-9b399aff] {
2803
2803
  display: flex;
2804
2804
  flex-direction: column;
2805
2805
  width: 304px;
@@ -2807,29 +2807,29 @@ to {
2807
2807
  overflow-y: auto;
2808
2808
  overscroll-behavior: contain;
2809
2809
  }
2810
- .celeste-gradient-section[data-v-3f165d2c] {
2810
+ .celeste-gradient-section[data-v-9b399aff] {
2811
2811
  display: flex;
2812
2812
  flex-direction: column;
2813
2813
  padding: var(--spacing-16);
2814
2814
  gap: var(--spacing-12);
2815
2815
  }
2816
- .celeste-gradient-fill[data-v-3f165d2c] {
2816
+ .celeste-gradient-fill[data-v-9b399aff] {
2817
2817
  position: absolute;
2818
2818
  inset: 0;
2819
2819
  border-radius: inherit;
2820
2820
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
2821
2821
  pointer-events: none;
2822
2822
  }
2823
- .celeste-gradient-hint[data-v-3f165d2c] {
2823
+ .celeste-gradient-hint[data-v-9b399aff] {
2824
2824
  color: var(--color-text-sub-600);
2825
2825
  font: var(--paragraph-sm);
2826
2826
  }
2827
- .celeste-gradient-presets[data-v-3f165d2c] {
2827
+ .celeste-gradient-presets[data-v-9b399aff] {
2828
2828
  display: grid;
2829
2829
  grid-template-columns: repeat(6, 1fr);
2830
2830
  gap: var(--spacing-8);
2831
2831
  }
2832
- .celeste-gradient-preset[data-v-3f165d2c] {
2832
+ .celeste-gradient-preset[data-v-9b399aff] {
2833
2833
  aspect-ratio: 1;
2834
2834
  padding: 0;
2835
2835
  transition: box-shadow 200ms ease-out;
@@ -2838,24 +2838,24 @@ to {
2838
2838
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
2839
2839
  cursor: pointer;
2840
2840
  }
2841
- .celeste-gradient-preset[data-empty=true][data-v-3f165d2c] {
2841
+ .celeste-gradient-preset[data-empty=true][data-v-9b399aff] {
2842
2842
  background: linear-gradient(135deg, transparent 47%, var(--color-stroke-sub-300) 47% 53%, transparent 53%), var(--color-bg-white-0);
2843
2843
  }
2844
- .celeste-gradient-preset[data-v-3f165d2c]:hover, .celeste-gradient-preset[data-v-3f165d2c]:focus-visible {
2844
+ .celeste-gradient-preset[data-v-9b399aff]:hover, .celeste-gradient-preset[data-v-9b399aff]:focus-visible {
2845
2845
  outline: none;
2846
2846
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843), 0 0 0 2px var(--color-bg-white-0), 0 0 0 4px var(--color-primary-base);
2847
2847
  }
2848
- .celeste-gradient-preview[data-v-3f165d2c] {
2848
+ .celeste-gradient-preview[data-v-9b399aff] {
2849
2849
  position: relative;
2850
2850
  height: 144px;
2851
2851
  border-radius: var(--radius-12);
2852
2852
  background: repeating-conic-gradient(#e5e5e5 0 25%, #fff 0 50%) 0 0/8px 8px;
2853
2853
  touch-action: none;
2854
2854
  }
2855
- .celeste-gradient-preview[data-linear=true][data-v-3f165d2c] {
2855
+ .celeste-gradient-preview[data-linear=true][data-v-9b399aff] {
2856
2856
  cursor: grab;
2857
2857
  }
2858
- .celeste-gradient-ring[data-v-3f165d2c] {
2858
+ .celeste-gradient-ring[data-v-9b399aff] {
2859
2859
  position: absolute;
2860
2860
  top: calc(50% - 40px);
2861
2861
  left: calc(50% - 40px);
@@ -2866,11 +2866,11 @@ to {
2866
2866
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
2867
2867
  pointer-events: none;
2868
2868
  }
2869
- .celeste-gradient-ring span[data-v-3f165d2c] {
2869
+ .celeste-gradient-ring span[data-v-9b399aff] {
2870
2870
  position: absolute;
2871
2871
  inset: -2px;
2872
2872
  }
2873
- .celeste-gradient-ring span[data-v-3f165d2c]::after {
2873
+ .celeste-gradient-ring span[data-v-9b399aff]::after {
2874
2874
  content: "";
2875
2875
  position: absolute;
2876
2876
  top: -6px;
@@ -2881,12 +2881,12 @@ to {
2881
2881
  background: var(--color-static-white);
2882
2882
  box-shadow: 0 1px 3px rgba(14, 18, 27, 0.2509803922);
2883
2883
  }
2884
- .celeste-gradient-row[data-v-3f165d2c] {
2884
+ .celeste-gradient-row[data-v-9b399aff] {
2885
2885
  display: flex;
2886
2886
  align-items: center;
2887
2887
  gap: var(--spacing-8);
2888
2888
  }
2889
- .celeste-gradient-type[data-v-3f165d2c] {
2889
+ .celeste-gradient-type[data-v-9b399aff] {
2890
2890
  width: 40px;
2891
2891
  height: 40px;
2892
2892
  padding: var(--spacing-4);
@@ -2895,26 +2895,26 @@ to {
2895
2895
  background: var(--color-bg-white-0);
2896
2896
  cursor: pointer;
2897
2897
  }
2898
- .celeste-gradient-type[data-active=true][data-v-3f165d2c] {
2898
+ .celeste-gradient-type[data-active=true][data-v-9b399aff] {
2899
2899
  border-color: var(--color-primary-base);
2900
2900
  box-shadow: 0 0 0 2px var(--color-primary-alpha-10);
2901
2901
  }
2902
- .celeste-gradient-type span[data-v-3f165d2c] {
2902
+ .celeste-gradient-type span[data-v-9b399aff] {
2903
2903
  display: block;
2904
2904
  height: 100%;
2905
2905
  border-radius: var(--radius-6);
2906
2906
  background: linear-gradient(var(--color-bg-white-0), var(--color-text-soft-400));
2907
2907
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
2908
2908
  }
2909
- .celeste-gradient-type[data-type=radial] span[data-v-3f165d2c] {
2909
+ .celeste-gradient-type[data-type=radial] span[data-v-9b399aff] {
2910
2910
  background: radial-gradient(var(--color-bg-white-0), var(--color-text-soft-400));
2911
2911
  }
2912
- .celeste-gradient-number[data-v-3f165d2c] {
2912
+ .celeste-gradient-number[data-v-9b399aff] {
2913
2913
  flex: none;
2914
2914
  width: 80px;
2915
2915
  margin-inline-start: auto;
2916
2916
  }
2917
- .celeste-gradient-bar[data-v-3f165d2c] {
2917
+ .celeste-gradient-bar[data-v-9b399aff] {
2918
2918
  position: relative;
2919
2919
  height: 24px;
2920
2920
  border-radius: var(--radius-full);
@@ -2922,7 +2922,7 @@ to {
2922
2922
  cursor: copy;
2923
2923
  touch-action: none;
2924
2924
  }
2925
- .celeste-gradient-handle[data-v-3f165d2c] {
2925
+ .celeste-gradient-handle[data-v-9b399aff] {
2926
2926
  position: absolute;
2927
2927
  top: calc(50% - 10px);
2928
2928
  width: 20px;
@@ -2935,25 +2935,25 @@ to {
2935
2935
  cursor: grab;
2936
2936
  touch-action: none;
2937
2937
  }
2938
- .celeste-gradient-handle[data-active=true][data-v-3f165d2c] {
2938
+ .celeste-gradient-handle[data-active=true][data-v-9b399aff] {
2939
2939
  box-shadow: 0 0 0 2px var(--color-primary-base), 0 1px 3px rgba(14, 18, 27, 0.2509803922);
2940
2940
  }
2941
- .celeste-gradient-handle[data-removing=true][data-v-3f165d2c] {
2941
+ .celeste-gradient-handle[data-removing=true][data-v-9b399aff] {
2942
2942
  opacity: 0.3;
2943
2943
  }
2944
- .celeste-gradient-eyebrow[data-v-3f165d2c] {
2944
+ .celeste-gradient-eyebrow[data-v-9b399aff] {
2945
2945
  flex: 1;
2946
2946
  color: var(--color-text-soft-400);
2947
2947
  font: var(--subheading-xxs);
2948
2948
  letter-spacing: 0.06em;
2949
2949
  text-transform: uppercase;
2950
2950
  }
2951
- .celeste-gradient-label[data-v-3f165d2c] {
2951
+ .celeste-gradient-label[data-v-9b399aff] {
2952
2952
  flex: 1;
2953
2953
  color: var(--color-text-sub-600);
2954
2954
  font: var(--label-xs);
2955
2955
  }
2956
- .celeste-gradient-current[data-v-3f165d2c] {
2956
+ .celeste-gradient-current[data-v-9b399aff] {
2957
2957
  position: relative;
2958
2958
  flex: none;
2959
2959
  width: 32px;
@@ -2961,16 +2961,16 @@ to {
2961
2961
  border-radius: var(--radius-8);
2962
2962
  background: repeating-conic-gradient(#e5e5e5 0 25%, #fff 0 50%) 0 0/8px 8px;
2963
2963
  }
2964
- .celeste-gradient-hex[data-v-3f165d2c] {
2964
+ .celeste-gradient-hex[data-v-9b399aff] {
2965
2965
  flex: 1;
2966
2966
  min-width: 0;
2967
2967
  }
2968
- .celeste-gradient-color[data-v-3f165d2c] {
2968
+ .celeste-gradient-color[data-v-9b399aff] {
2969
2969
  display: flex;
2970
2970
  height: 200px;
2971
2971
  gap: var(--spacing-8);
2972
2972
  }
2973
- .celeste-gradient-area[data-v-3f165d2c] {
2973
+ .celeste-gradient-area[data-v-9b399aff] {
2974
2974
  position: relative;
2975
2975
  flex: 1;
2976
2976
  border-radius: var(--radius-10);
@@ -2978,7 +2978,7 @@ to {
2978
2978
  cursor: crosshair;
2979
2979
  touch-action: none;
2980
2980
  }
2981
- .celeste-gradient-slider[data-v-3f165d2c] {
2981
+ .celeste-gradient-slider[data-v-9b399aff] {
2982
2982
  position: relative;
2983
2983
  flex: none;
2984
2984
  width: 24px;
@@ -2987,19 +2987,19 @@ to {
2987
2987
  cursor: pointer;
2988
2988
  touch-action: none;
2989
2989
  }
2990
- .celeste-gradient-slider[data-hue=true][data-v-3f165d2c] {
2990
+ .celeste-gradient-slider[data-hue=true][data-v-9b399aff] {
2991
2991
  background: linear-gradient(#f00, #ff0, #0f0, #0ff, #00f, #f0f, #f00);
2992
2992
  }
2993
- .celeste-gradient-slider .celeste-gradient-knob[data-v-3f165d2c] {
2993
+ .celeste-gradient-slider .celeste-gradient-knob[data-v-9b399aff] {
2994
2994
  left: 50%;
2995
2995
  }
2996
- .celeste-gradient-area[data-v-3f165d2c]:focus-visible,
2997
- .celeste-gradient-slider[data-v-3f165d2c]:focus-visible,
2998
- .celeste-gradient-handle[data-v-3f165d2c]:focus-visible {
2996
+ .celeste-gradient-area[data-v-9b399aff]:focus-visible,
2997
+ .celeste-gradient-slider[data-v-9b399aff]:focus-visible,
2998
+ .celeste-gradient-handle[data-v-9b399aff]:focus-visible {
2999
2999
  outline: 2px solid var(--color-primary-base);
3000
3000
  outline-offset: 2px;
3001
3001
  }
3002
- .celeste-gradient-knob[data-v-3f165d2c] {
3002
+ .celeste-gradient-knob[data-v-9b399aff] {
3003
3003
  position: absolute;
3004
3004
  width: 20px;
3005
3005
  height: 20px;
@@ -3009,17 +3009,17 @@ to {
3009
3009
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1215686275), 0 1px 3px rgba(14, 18, 27, 0.2509803922);
3010
3010
  pointer-events: none;
3011
3011
  }
3012
- .celeste-gradient-used[data-v-3f165d2c] {
3012
+ .celeste-gradient-used[data-v-9b399aff] {
3013
3013
  padding-top: var(--spacing-12);
3014
3014
  border-top: 1px solid var(--color-stroke-soft-200);
3015
3015
  gap: var(--spacing-8);
3016
3016
  }
3017
- .celeste-gradient-swatches[data-v-3f165d2c] {
3017
+ .celeste-gradient-swatches[data-v-9b399aff] {
3018
3018
  display: flex;
3019
3019
  flex-wrap: wrap;
3020
3020
  gap: var(--spacing-8);
3021
3021
  }
3022
- .celeste-gradient-swatches button[data-v-3f165d2c] {
3022
+ .celeste-gradient-swatches button[data-v-9b399aff] {
3023
3023
  width: 28px;
3024
3024
  height: 28px;
3025
3025
  padding: 0;
@@ -3028,15 +3028,15 @@ to {
3028
3028
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843);
3029
3029
  cursor: pointer;
3030
3030
  }
3031
- .celeste-gradient-swatches button[data-v-3f165d2c]:hover, .celeste-gradient-swatches button[data-v-3f165d2c]:focus-visible {
3031
+ .celeste-gradient-swatches button[data-v-9b399aff]:hover, .celeste-gradient-swatches button[data-v-9b399aff]:focus-visible {
3032
3032
  outline: none;
3033
3033
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1019607843), 0 0 0 2px var(--color-bg-white-0), 0 0 0 3px var(--color-stroke-sub-300);
3034
3034
  }
3035
- .celeste-gradient-footer[data-v-3f165d2c] {
3035
+ .celeste-gradient-footer[data-v-9b399aff] {
3036
3036
  padding: var(--spacing-8);
3037
3037
  border-top: 1px solid var(--color-stroke-soft-200);
3038
3038
  }
3039
- .celeste-gradient-remove[data-v-3f165d2c] {
3039
+ .celeste-gradient-remove[data-v-9b399aff] {
3040
3040
  display: flex;
3041
3041
  align-items: center;
3042
3042
  width: 100%;
@@ -3049,11 +3049,11 @@ to {
3049
3049
  cursor: pointer;
3050
3050
  gap: var(--spacing-8);
3051
3051
  }
3052
- .celeste-gradient-remove[data-v-3f165d2c]:hover {
3052
+ .celeste-gradient-remove[data-v-9b399aff]:hover {
3053
3053
  background: var(--color-bg-weak-50);
3054
3054
  color: var(--color-text-strong-950);
3055
3055
  }
3056
- .celeste-gradient-remove i[data-v-3f165d2c] {
3056
+ .celeste-gradient-remove i[data-v-9b399aff] {
3057
3057
  width: 20px;
3058
3058
  height: 20px;
3059
3059
  }.celeste-select-icon[data-v-c6783f07] {
@@ -114,7 +114,9 @@ var gradient_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
114
114
  "#000000",
115
115
  "#335cff",
116
116
  "#e1116f"
117
- ] }
117
+ ] },
118
+ side: { default: "bottom" },
119
+ align: { default: "start" }
118
120
  },
119
121
  emits: ["update:modelValue"],
120
122
  setup(__props, { emit: __emit }) {
@@ -369,7 +371,8 @@ var gradient_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
369
371
  }), (0, vue.createVNode)((0, vue.unref)(require_popover_content.popover_content_default), {
370
372
  dismissible: false,
371
373
  "show-tail": false,
372
- align: "start",
374
+ side: __props.side,
375
+ align: __props.align,
373
376
  onOpenAutoFocus: _cache[5] || (_cache[5] = (0, vue.withModifiers)(() => {}, ["prevent"]))
374
377
  }, {
375
378
  default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", _hoisted_4, [!state.value ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_5, [(0, vue.createElementVNode)("span", _hoisted_6, (0, vue.toDisplayString)(__props.emptyHint), 1), (0, vue.createElementVNode)("div", _hoisted_7, [(0, vue.createElementVNode)("button", {
@@ -617,7 +620,7 @@ var gradient_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
617
620
  }, [_cache[12] || (_cache[12] = (0, vue.createElementVNode)("i", { class: "i-celeste-delete-bin-line" }, null, -1)), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(__props.removeLabel), 1)])])
618
621
  ], 64)) : (0, vue.createCommentVNode)("", true)])]),
619
622
  _: 1
620
- })]),
623
+ }, 8, ["side", "align"])]),
621
624
  _: 1
622
625
  }, 8, ["open"]);
623
626
  };
@@ -625,7 +628,7 @@ var gradient_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
625
628
  });
626
629
  //#endregion
627
630
  //#region src/components/color-picker/gradient-picker.vue
628
- var gradient_picker_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(gradient_picker_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3f165d2c"]]);
631
+ var gradient_picker_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(gradient_picker_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-9b399aff"]]);
629
632
  //#endregion
630
633
  Object.defineProperty(exports, "gradient_picker_default", {
631
634
  enumerable: true,
@@ -1,3 +1,4 @@
1
+ import { PopoverContentProps } from '../popover';
1
2
  export interface GradientPickerProps {
2
3
  modelValue?: string;
3
4
  placeholder?: string;
@@ -18,6 +19,8 @@ export interface GradientPickerProps {
18
19
  removeLabel?: string;
19
20
  presets?: string[];
20
21
  swatches?: string[];
22
+ side?: PopoverContentProps['side'];
23
+ align?: PopoverContentProps['align'];
21
24
  }
22
25
  export interface GradientPickerEmits {
23
26
  'update:modelValue': [value: string];
@@ -29,6 +32,8 @@ declare const __VLS_export: import('vue').DefineComponent<GradientPickerProps, {
29
32
  }>, {
30
33
  placeholder: string;
31
34
  modelValue: string;
35
+ align: "center" | "start" | "end";
36
+ side: "bottom" | "left" | "right" | "top";
32
37
  swatches: string[];
33
38
  emptyHint: string;
34
39
  noneLabel: string;
@@ -116,7 +116,9 @@ var gradient_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
116
116
  "#000000",
117
117
  "#335cff",
118
118
  "#e1116f"
119
- ] }
119
+ ] },
120
+ side: { default: "bottom" },
121
+ align: { default: "start" }
120
122
  },
121
123
  emits: ["update:modelValue"],
122
124
  setup(__props, { emit: __emit }) {
@@ -371,7 +373,8 @@ var gradient_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
371
373
  }), createVNode(unref(popover_content_default), {
372
374
  dismissible: false,
373
375
  "show-tail": false,
374
- align: "start",
376
+ side: __props.side,
377
+ align: __props.align,
375
378
  onOpenAutoFocus: _cache[5] || (_cache[5] = withModifiers(() => {}, ["prevent"]))
376
379
  }, {
377
380
  default: withCtx(() => [createElementVNode("div", _hoisted_4, [!state.value ? (openBlock(), createElementBlock("div", _hoisted_5, [createElementVNode("span", _hoisted_6, toDisplayString(__props.emptyHint), 1), createElementVNode("div", _hoisted_7, [createElementVNode("button", {
@@ -619,11 +622,11 @@ var gradient_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/*
619
622
  }, [_cache[12] || (_cache[12] = createElementVNode("i", { class: "i-celeste-delete-bin-line" }, null, -1)), createTextVNode(" " + toDisplayString(__props.removeLabel), 1)])])
620
623
  ], 64)) : createCommentVNode("", true)])]),
621
624
  _: 1
622
- })]),
625
+ }, 8, ["side", "align"])]),
623
626
  _: 1
624
627
  }, 8, ["open"]);
625
628
  };
626
629
  }
627
- }), [["__scopeId", "data-v-3f165d2c"]]);
630
+ }), [["__scopeId", "data-v-9b399aff"]]);
628
631
  //#endregion
629
632
  export { gradient_picker_default as t };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@youcan/celeste",
3
3
  "type": "module",
4
- "version": "0.19.0",
4
+ "version": "0.20.0",
5
5
  "author": "YouCan <tech@youcan.shop>",
6
6
  "repository": {
7
7
  "type": "git",
@@ -52,8 +52,8 @@
52
52
  "reka-ui": "~2.10.5",
53
53
  "tinycolor2": "^1.6.0",
54
54
  "vue-sonner": "^2.0.9",
55
- "@youcan/celeste-icons": "0.19.0",
56
- "@youcan/celeste-tokens": "0.19.0"
55
+ "@youcan/celeste-icons": "0.20.0",
56
+ "@youcan/celeste-tokens": "0.20.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@chromatic-com/storybook": "^5.3.0",
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import type { PopoverContentProps } from '../popover';
2
3
  import type { GradientType } from '@/utils/gradient';
3
4
  import tinycolor from 'tinycolor2';
4
5
  import { computed, reactive, ref, watch } from 'vue';
@@ -28,6 +29,8 @@ export interface GradientPickerProps {
28
29
  removeLabel?: string;
29
30
  presets?: string[];
30
31
  swatches?: string[];
32
+ side?: PopoverContentProps['side'];
33
+ align?: PopoverContentProps['align'];
31
34
  }
32
35
 
33
36
  export interface GradientPickerEmits {
@@ -39,6 +42,8 @@ interface State { type: GradientType; angle: number; shape?: string; stops: Stop
39
42
 
40
43
  const props = withDefaults(defineProps<GradientPickerProps>(), {
41
44
  modelValue: '',
45
+ side: 'bottom',
46
+ align: 'start',
42
47
  placeholder: 'No gradient chosen',
43
48
  emptyHint: 'Select a gradient to begin editing',
44
49
  noneLabel: 'None',
@@ -326,7 +331,8 @@ const canSip = 'EyeDropper' in window;
326
331
  <PopoverContent
327
332
  :dismissible="false"
328
333
  :show-tail="false"
329
- align="start"
334
+ :side="side"
335
+ :align="align"
330
336
  @open-auto-focus.prevent
331
337
  >
332
338
  <div class="celeste-gradient-picker">
@@ -35,3 +35,14 @@ export const Empty: Story = {
35
35
  template: `<div style="display: grid; width: 280px; gap: 8px;"><GradientPicker v-model="gradient" /><code>{{ gradient }}</code></div>`,
36
36
  }),
37
37
  };
38
+
39
+ export const Side: Story = {
40
+ render: () => ({
41
+ components: { GradientPicker },
42
+ setup() {
43
+ const gradient = ref('linear-gradient(135deg, #3B82F6 0%, #EC4899 100%)');
44
+ return { gradient };
45
+ },
46
+ template: `<div style="display: grid; width: 280px; margin: 480px 0 0 360px; gap: 8px;"><GradientPicker v-model="gradient" side="left" /><code>{{ gradient }}</code></div>`,
47
+ }),
48
+ };