@youcan/celeste 0.19.0 → 0.21.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.21.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.21.0",
4
+ "generatedAt": "2026-10-09T20:04:00.780Z",
5
5
  "components": {
6
6
  "Alert": {
7
7
  "name": "Alert",
@@ -1335,6 +1335,10 @@
1335
1335
  }
1336
1336
  ],
1337
1337
  "slots": [
1338
+ {
1339
+ "name": "trigger",
1340
+ "type": "{}"
1341
+ },
1338
1342
  {
1339
1343
  "name": "swatches",
1340
1344
  "type": "{}"
@@ -5207,6 +5211,17 @@
5207
5211
  "required": false,
5208
5212
  "default": "\"Add stop\""
5209
5213
  },
5214
+ {
5215
+ "name": "align",
5216
+ "type": "\"start\" | \"center\" | \"end\"",
5217
+ "values": [
5218
+ "start",
5219
+ "center",
5220
+ "end"
5221
+ ],
5222
+ "required": false,
5223
+ "default": "\"start\""
5224
+ },
5210
5225
  {
5211
5226
  "name": "angleLabel",
5212
5227
  "type": "string",
@@ -5309,6 +5324,18 @@
5309
5324
  "required": false,
5310
5325
  "default": "\"Remove stop\""
5311
5326
  },
5327
+ {
5328
+ "name": "side",
5329
+ "type": "\"top\" | \"right\" | \"bottom\" | \"left\"",
5330
+ "values": [
5331
+ "top",
5332
+ "right",
5333
+ "bottom",
5334
+ "left"
5335
+ ],
5336
+ "required": false,
5337
+ "default": "\"bottom\""
5338
+ },
5312
5339
  {
5313
5340
  "name": "swatches",
5314
5341
  "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.21.0",
4
+ "generatedAt": "2026-10-09T20:03:57.574Z",
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.21.0",
4
+ "generatedAt": "2026-10-09T20:03:57.574Z",
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] {
@@ -3094,24 +3094,24 @@ to {
3094
3094
  cursor: pointer;
3095
3095
  }.celeste-color-slider .slider-track[data-v-3ca280fa] {
3096
3096
  background: linear-gradient(to right, #f00 0%, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%);
3097
- }.celeste-picker-trigger[data-v-d9442cfd] {
3097
+ }.celeste-picker-trigger[data-v-bf0ff694] {
3098
3098
  gap: var(--spacing-12);
3099
3099
  }
3100
- .celeste-picker-trigger .celeste-selected-color[data-v-d9442cfd] {
3100
+ .celeste-picker-trigger .celeste-selected-color[data-v-bf0ff694] {
3101
3101
  --color-tile-size: 20px;
3102
3102
  display: block;
3103
3103
  width: var(--color-tile-size);
3104
3104
  height: var(--color-tile-size);
3105
3105
  border: 1px solid var(--color-bg-soft-200);
3106
3106
  border-radius: var(--radius-4);
3107
- background-color: var(--v6500f742);
3107
+ background-color: var(--v819487ba);
3108
3108
  }
3109
- .celeste-color-picker-wrapper[data-v-d9442cfd] {
3109
+ .celeste-color-picker-wrapper[data-v-bf0ff694] {
3110
3110
  display: grid;
3111
3111
  box-sizing: border-box;
3112
3112
  width: 272px;
3113
3113
  }
3114
- .celeste-color-picker-wrapper .celeste-color-picker[data-v-d9442cfd] {
3114
+ .celeste-color-picker-wrapper .celeste-color-picker[data-v-bf0ff694] {
3115
3115
  display: flex;
3116
3116
  flex-direction: column;
3117
3117
  align-items: center;
@@ -3119,71 +3119,71 @@ to {
3119
3119
  padding: var(--spacing-16);
3120
3120
  gap: var(--spacing-12);
3121
3121
  }
3122
- .celeste-color-picker-wrapper .celeste-color-picker[data-v-d9442cfd] > * {
3122
+ .celeste-color-picker-wrapper .celeste-color-picker[data-v-bf0ff694] > * {
3123
3123
  box-sizing: border-box;
3124
3124
  }
3125
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel[data-v-d9442cfd] {
3125
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel[data-v-bf0ff694] {
3126
3126
  display: flex;
3127
3127
  flex-direction: column;
3128
3128
  width: 100%;
3129
3129
  gap: var(--spacing-4);
3130
3130
  }
3131
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-selected-color-format[data-v-d9442cfd] {
3131
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-selected-color-format[data-v-bf0ff694] {
3132
3132
  text-transform: uppercase;
3133
3133
  }
3134
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls[data-v-d9442cfd] {
3134
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls[data-v-bf0ff694] {
3135
3135
  display: flex;
3136
3136
  width: 100%;
3137
3137
  height: 32px;
3138
3138
  }
3139
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-sip[data-v-d9442cfd] {
3139
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-sip[data-v-bf0ff694] {
3140
3140
  border-start-end-radius: 0;
3141
3141
  border-end-end-radius: 0;
3142
3142
  }
3143
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-sip[data-v-d9442cfd]:focus-within {
3143
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-sip[data-v-bf0ff694]:focus-within {
3144
3144
  z-index: 2;
3145
3145
  }
3146
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls[data-v-d9442cfd] > * {
3146
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls[data-v-bf0ff694] > * {
3147
3147
  box-sizing: border-box;
3148
3148
  height: 100%;
3149
3149
  }
3150
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs[data-v-d9442cfd] {
3150
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs[data-v-bf0ff694] {
3151
3151
  display: flex;
3152
3152
  }
3153
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd] {
3153
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694] {
3154
3154
  margin-inline-start: -1px;
3155
3155
  border-radius: 0;
3156
3156
  }
3157
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:focus-within {
3157
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:focus-within {
3158
3158
  z-index: 2;
3159
3159
  }
3160
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:last-child {
3160
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:last-child {
3161
3161
  border-start-end-radius: var(--radius-8);
3162
3162
  border-end-end-radius: var(--radius-8);
3163
3163
  }
3164
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:first-child:nth-last-child(4), .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:first-child:nth-last-child(4) ~ * {
3164
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:first-child:nth-last-child(4), .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:first-child:nth-last-child(4) ~ * {
3165
3165
  flex: 1;
3166
3166
  }
3167
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:first-child:nth-last-child(2) {
3167
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:first-child:nth-last-child(2) {
3168
3168
  flex: 3;
3169
3169
  }
3170
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-d9442cfd]:last-child:nth-child(2) {
3170
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs .color-input[data-v-bf0ff694]:last-child:nth-child(2) {
3171
3171
  flex: 1;
3172
3172
  }
3173
- .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs:first-child:last-child .color-input[data-v-d9442cfd]:first-child {
3173
+ .celeste-color-picker-wrapper .celeste-color-picker .celeste-color-control-panel .celeste-color-controls .celeste-color-format-inputs:first-child:last-child .color-input[data-v-bf0ff694]:first-child {
3174
3174
  border-start-start-radius: var(--radius-8);
3175
3175
  border-end-start-radius: var(--radius-8);
3176
3176
  }
3177
- .celeste-color-picker-wrapper .celeste-color-swatches[data-v-d9442cfd] {
3177
+ .celeste-color-picker-wrapper .celeste-color-swatches[data-v-bf0ff694] {
3178
3178
  display: flex;
3179
3179
  flex-direction: column;
3180
3180
  padding: var(--radius-16);
3181
3181
  border-block-start: 1px solid var(--color-stroke-soft-200);
3182
3182
  }
3183
- [data-v-d9442cfd] .celeste-color-format {
3183
+ [data-v-bf0ff694] .celeste-color-format {
3184
3184
  text-transform: uppercase;
3185
3185
  }
3186
- [data-v-d9442cfd] .celeste-color-thumb {
3186
+ [data-v-bf0ff694] .celeste-color-thumb {
3187
3187
  position: absolute;
3188
3188
  width: 12px;
3189
3189
  height: 12px;
@@ -3191,18 +3191,18 @@ to {
3191
3191
  border-radius: 50%;
3192
3192
  box-shadow: 0 0 0 2px var(--color-bg-white-0), var(--shadow-toggle-switch);
3193
3193
  }
3194
- [data-v-d9442cfd] .celeste-color-slider {
3194
+ [data-v-bf0ff694] .celeste-color-slider {
3195
3195
  --track-height: 8px;
3196
3196
  width: 100%;
3197
3197
  padding-block: var(--spacing-4);
3198
3198
  }
3199
- [data-v-d9442cfd] .celeste-color-slider .slider-track {
3199
+ [data-v-bf0ff694] .celeste-color-slider .slider-track {
3200
3200
  position: relative;
3201
3201
  width: 100%;
3202
3202
  height: var(--track-height);
3203
3203
  border-radius: calc(var(--track-height) / 2);
3204
3204
  }
3205
- [data-v-d9442cfd] .celeste-color-slider .slider-track .celeste-color-thumb {
3205
+ [data-v-bf0ff694] .celeste-color-slider .slider-track .celeste-color-thumb {
3206
3206
  top: calc(var(--track-height) / 2);
3207
3207
  }.celeste-dropdown-empty-list[data-v-4423b209] {
3208
3208
  display: flex;
@@ -54,7 +54,7 @@ var color_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0,
54
54
  },
55
55
  emits: ["update:modelValue"],
56
56
  setup(__props, { emit: __emit }) {
57
- (0, vue.useCssVars)((_ctx) => ({ "v6500f742": _ctx.modelValue }));
57
+ (0, vue.useCssVars)((_ctx) => ({ "v819487ba": _ctx.modelValue }));
58
58
  const props = __props;
59
59
  const emit = __emit;
60
60
  const delegatedProps = require_use_delegated_props.useDelegatedProps(props, "class");
@@ -214,15 +214,15 @@ var color_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0,
214
214
  return (_ctx, _cache) => {
215
215
  return (0, vue.openBlock)(), (0, vue.createBlock)((0, vue.unref)(require_popover.popover_default), null, {
216
216
  default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_popover_trigger.popover_trigger_default), null, {
217
- default: (0, vue.withCtx)(() => [(0, vue.createVNode)((0, vue.unref)(require_button.button_default), {
217
+ default: (0, vue.withCtx)(() => [(0, vue.renderSlot)(_ctx.$slots, "trigger", {}, () => [(0, vue.createVNode)((0, vue.unref)(require_button.button_default), {
218
218
  class: "celeste-picker-trigger",
219
219
  intent: "neutral",
220
220
  variant: "stroke"
221
221
  }, {
222
222
  default: (0, vue.withCtx)(() => [_cache[53] || (_cache[53] = (0, vue.createElementVNode)("span", { class: "celeste-selected-color" }, null, -1)), (0, vue.createTextVNode)(" " + (0, vue.toDisplayString)(__props.label), 1)]),
223
223
  _: 1
224
- })]),
225
- _: 1
224
+ })], true)]),
225
+ _: 3
226
226
  }), (0, vue.createVNode)((0, vue.unref)(require_popover_content.popover_content_default), { dismissible: false }, {
227
227
  default: (0, vue.withCtx)(() => [(0, vue.createElementVNode)("div", (0, vue.mergeProps)({ class: "celeste-color-picker-wrapper" }, (0, vue.unref)(forwarded)), [(0, vue.createElementVNode)("div", _hoisted_1, [
228
228
  (0, vue.createVNode)((0, vue.unref)(require_color_area.color_area_default), {
@@ -471,7 +471,7 @@ var color_picker_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0,
471
471
  });
472
472
  //#endregion
473
473
  //#region src/components/color-picker/color-picker.vue
474
- var color_picker_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(color_picker_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-d9442cfd"]]);
474
+ var color_picker_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(color_picker_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-bf0ff694"]]);
475
475
  //#endregion
476
476
  Object.defineProperty(exports, "color_picker_default", {
477
477
  enumerable: true,
@@ -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,
@@ -29,9 +29,11 @@ declare global {
29
29
  EyeDropper?: EyeDropperConstructor | undefined;
30
30
  }
31
31
  }
32
- declare var __VLS_198: {};
32
+ declare var __VLS_14: {}, __VLS_200: {};
33
33
  type __VLS_Slots = {} & {
34
- swatches?: (props: typeof __VLS_198) => any;
34
+ trigger?: (props: typeof __VLS_14) => any;
35
+ } & {
36
+ swatches?: (props: typeof __VLS_200) => any;
35
37
  };
36
38
  declare const __VLS_base: import('vue').DefineComponent<ColorPickerProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
37
39
  "update:modelValue": (value: string) => any;
@@ -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;
@@ -56,7 +56,7 @@ var color_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
56
56
  },
57
57
  emits: ["update:modelValue"],
58
58
  setup(__props, { emit: __emit }) {
59
- useCssVars((_ctx) => ({ "v6500f742": _ctx.modelValue }));
59
+ useCssVars((_ctx) => ({ "v819487ba": _ctx.modelValue }));
60
60
  const props = __props;
61
61
  const emit = __emit;
62
62
  const delegatedProps = useDelegatedProps(props, "class");
@@ -216,15 +216,15 @@ var color_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
216
216
  return (_ctx, _cache) => {
217
217
  return openBlock(), createBlock(unref(popover_default), null, {
218
218
  default: withCtx(() => [createVNode(unref(popover_trigger_default), null, {
219
- default: withCtx(() => [createVNode(unref(button_default), {
219
+ default: withCtx(() => [renderSlot(_ctx.$slots, "trigger", {}, () => [createVNode(unref(button_default), {
220
220
  class: "celeste-picker-trigger",
221
221
  intent: "neutral",
222
222
  variant: "stroke"
223
223
  }, {
224
224
  default: withCtx(() => [_cache[53] || (_cache[53] = createElementVNode("span", { class: "celeste-selected-color" }, null, -1)), createTextVNode(" " + toDisplayString(__props.label), 1)]),
225
225
  _: 1
226
- })]),
227
- _: 1
226
+ })], true)]),
227
+ _: 3
228
228
  }), createVNode(unref(popover_content_default), { dismissible: false }, {
229
229
  default: withCtx(() => [createElementVNode("div", mergeProps({ class: "celeste-color-picker-wrapper" }, unref(forwarded)), [createElementVNode("div", _hoisted_1, [
230
230
  createVNode(unref(color_area_default), {
@@ -470,6 +470,6 @@ var color_picker_default = /*#__PURE__*/ _plugin_vue_export_helper_default(/* @_
470
470
  });
471
471
  };
472
472
  }
473
- }), [["__scopeId", "data-v-d9442cfd"]]);
473
+ }), [["__scopeId", "data-v-bf0ff694"]]);
474
474
  //#endregion
475
475
  export { color_picker_default as t };
@@ -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.21.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.21.0",
56
+ "@youcan/celeste-tokens": "0.21.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@chromatic-com/storybook": "^5.3.0",
@@ -279,14 +279,16 @@ function handleColorValueKeyDown(event: KeyboardEvent, key: ColorKey) {
279
279
  <template>
280
280
  <Popover>
281
281
  <PopoverTrigger>
282
- <Button
283
- class="celeste-picker-trigger"
284
- intent="neutral"
285
- variant="stroke"
286
- >
287
- <span class="celeste-selected-color" />
288
- {{ label }}
289
- </Button>
282
+ <slot name="trigger">
283
+ <Button
284
+ class="celeste-picker-trigger"
285
+ intent="neutral"
286
+ variant="stroke"
287
+ >
288
+ <span class="celeste-selected-color" />
289
+ {{ label }}
290
+ </Button>
291
+ </slot>
290
292
  </PopoverTrigger>
291
293
  <PopoverContent :dismissible="false">
292
294
  <div class="celeste-color-picker-wrapper" v-bind="forwarded">
@@ -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">
@@ -114,3 +114,21 @@ export const CustomLabel: Story = {
114
114
  `,
115
115
  }),
116
116
  };
117
+
118
+ export const CustomTrigger: Story = {
119
+ args: {},
120
+ render: (args: Story['args']) => ({
121
+ components: { ColorPicker },
122
+ setup() {
123
+ const color = ref('#E11D48');
124
+ return { args, color };
125
+ },
126
+ template: `
127
+ <ColorPicker v-model="color" v-bind="args">
128
+ <template #trigger>
129
+ <button type="button" :aria-label="color" :style="{ width: '48px', height: '48px', border: 0, borderRadius: '12px', background: color, cursor: 'pointer' }" />
130
+ </template>
131
+ </ColorPicker>
132
+ `,
133
+ }),
134
+ };
@@ -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
+ };