@youcan/celeste 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/ai/component-registry.json +30 -2
  2. package/ai/component-registry.md +5 -1
  3. package/ai/icons.md +1 -1
  4. package/ai/tokens.md +1 -1
  5. package/dist/celeste.css +189 -86
  6. package/dist/cjs/chunks/dist2.cjs +6 -0
  7. package/dist/cjs/chunks/fancy-button.cjs +1 -1
  8. package/dist/cjs/chunks/scroll-bar.cjs +1 -0
  9. package/dist/cjs/chunks/segmented-control-item.cjs +1 -1
  10. package/dist/cjs/chunks/segmented-control.cjs +18 -3
  11. package/dist/cjs/chunks/tab-menu-item.cjs +6 -2
  12. package/dist/cjs/chunks/tab-menu-list.cjs +53 -9
  13. package/dist/cjs/index.cjs +2 -0
  14. package/dist/cjs/use-tab-observer.cjs +42 -0
  15. package/dist/components/segmented-control/segmented-control.d.ts +2 -2
  16. package/dist/components/tab-menu/tab-menu-list.d.ts +14 -5
  17. package/dist/composables/index.d.ts +1 -0
  18. package/dist/composables/use-tab-observer.d.ts +14 -0
  19. package/dist/es/chunks/BubbleSelect.js +1 -1
  20. package/dist/es/chunks/CollapsibleRoot.js +1 -1
  21. package/dist/es/chunks/ComboboxInput.js +1 -1
  22. package/dist/es/chunks/ComboboxRoot.js +1 -1
  23. package/dist/es/chunks/DialogRoot.js +1 -1
  24. package/dist/es/chunks/DropdownMenuRoot.js +1 -1
  25. package/dist/es/chunks/MenuRoot.js +1 -1
  26. package/dist/es/chunks/MenuSub.js +1 -1
  27. package/dist/es/chunks/PaginationRoot.js +1 -1
  28. package/dist/es/chunks/PinInputRoot.js +1 -1
  29. package/dist/es/chunks/PopoverRoot.js +1 -1
  30. package/dist/es/chunks/ProgressIndicator.js +1 -1
  31. package/dist/es/chunks/RadioGroupRoot.js +1 -1
  32. package/dist/es/chunks/RovingFocusGroup.js +1 -1
  33. package/dist/es/chunks/SelectItemAlignedPosition.js +1 -1
  34. package/dist/es/chunks/TabsRoot.js +1 -1
  35. package/dist/es/chunks/ToggleGroupRoot.js +1 -1
  36. package/dist/es/chunks/TooltipRoot.js +1 -1
  37. package/dist/es/chunks/bar-chart.js +1 -1
  38. package/dist/es/chunks/calendar.js +1 -1
  39. package/dist/es/chunks/checkbox.js +1 -1
  40. package/dist/es/chunks/counter-input.js +1 -1
  41. package/dist/es/chunks/dist2.js +1 -1
  42. package/dist/es/chunks/dropdown-menu-sub.js +1 -1
  43. package/dist/es/chunks/fancy-button.js +1 -1
  44. package/dist/es/chunks/radio-group-item.js +1 -1
  45. package/dist/es/chunks/range-calendar.js +1 -1
  46. package/dist/es/chunks/scroll-area.js +1 -1
  47. package/dist/es/chunks/scroll-bar.js +2 -1
  48. package/dist/es/chunks/segmented-control-item.js +2 -2
  49. package/dist/es/chunks/segmented-control.js +20 -4
  50. package/dist/es/chunks/sidebar-provider.js +1 -1
  51. package/dist/es/chunks/slider.js +1 -1
  52. package/dist/es/chunks/switch.js +1 -1
  53. package/dist/es/chunks/tab-menu-item.js +6 -2
  54. package/dist/es/chunks/tab-menu-list.js +56 -10
  55. package/dist/es/index.js +2 -1
  56. package/dist/es/use-tab-observer.js +41 -0
  57. package/package.json +3 -3
  58. package/src/components/button/fancy-button.vue +14 -4
  59. package/src/components/segmented-control/segmented-control-item.vue +3 -3
  60. package/src/components/segmented-control/segmented-control.vue +35 -0
  61. package/src/components/switch/switch.vue +19 -18
  62. package/src/components/tab-menu/stories/tab-menu.stories.ts +39 -0
  63. package/src/components/tab-menu/tab-menu-item.vue +27 -28
  64. package/src/components/tab-menu/tab-menu-list.vue +85 -3
  65. package/src/composables/index.ts +1 -0
  66. package/src/composables/use-tab-observer.ts +51 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.11.0",
4
- "generatedAt": "2026-09-04T15:37:14.866Z",
3
+ "version": "0.12.0",
4
+ "generatedAt": "2026-09-04T17:20:36.110Z",
5
5
  "components": {
6
6
  "Alert": {
7
7
  "name": "Alert",
@@ -9466,6 +9466,16 @@
9466
9466
  "file": "src/components/tab-menu/tab-menu-list.vue",
9467
9467
  "import": "@youcan/celeste",
9468
9468
  "props": [
9469
+ {
9470
+ "name": "align",
9471
+ "type": "\"start\" | \"center\"",
9472
+ "values": [
9473
+ "start",
9474
+ "center"
9475
+ ],
9476
+ "required": false,
9477
+ "default": "\"start\""
9478
+ },
9469
9479
  {
9470
9480
  "name": "as",
9471
9481
  "type": "AsTag | Component",
@@ -9478,16 +9488,34 @@
9478
9488
  "required": false,
9479
9489
  "description": "Render the child element instead of this component's own, merging props onto it."
9480
9490
  },
9491
+ {
9492
+ "name": "bordered",
9493
+ "type": "boolean",
9494
+ "required": false,
9495
+ "default": "true"
9496
+ },
9481
9497
  {
9482
9498
  "name": "class",
9483
9499
  "type": "ClassValue",
9484
9500
  "required": false
9485
9501
  },
9502
+ {
9503
+ "name": "fill",
9504
+ "type": "boolean",
9505
+ "required": false,
9506
+ "default": "false"
9507
+ },
9486
9508
  {
9487
9509
  "name": "loop",
9488
9510
  "type": "boolean",
9489
9511
  "required": false,
9490
9512
  "description": "When `true`, keyboard navigation will loop from last tab to first, and vice versa."
9513
+ },
9514
+ {
9515
+ "name": "scrollable",
9516
+ "type": "boolean",
9517
+ "required": false,
9518
+ "default": "false"
9491
9519
  }
9492
9520
  ],
9493
9521
  "events": [],
@@ -1,6 +1,6 @@
1
1
  # Celeste Component Registry
2
2
 
3
- > Generated from source for `@youcan/celeste@0.11.0`. Do not edit.
3
+ > Generated from source for `@youcan/celeste@0.12.0`. Do not edit.
4
4
  > Regenerate with `pnpm --filter @youcan/celeste codegen:registry`.
5
5
 
6
6
  Every component below is imported from `@youcan/celeste`:
@@ -3036,10 +3036,14 @@ reach for when several look similar, see the `celeste-ui` skill.
3036
3036
 
3037
3037
  **Props**
3038
3038
 
3039
+ - `align`: `start` | `center` — default `"start"`
3039
3040
  - `as`: `AsTag | Component` — Element or component to render as.
3040
3041
  - `asChild`: `boolean` — Render the child element instead of this component's own, merging props onto it.
3042
+ - `bordered`: `boolean` — default `true`
3041
3043
  - `class`: `ClassValue`
3044
+ - `fill`: `boolean` — default `false`
3042
3045
  - `loop`: `boolean` — When `true`, keyboard navigation will loop from last tab to first, and vice versa.
3046
+ - `scrollable`: `boolean` — default `false`
3043
3047
 
3044
3048
  **Slots**
3045
3049
 
package/ai/icons.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Celeste Icons
2
2
 
3
- > Generated from `@youcan/celeste-icons@0.11.0`. Do not edit.
3
+ > Generated from `@youcan/celeste-icons@0.12.0`. Do not edit.
4
4
 
5
5
  **3148 icons.** Render one as a class, not a component:
6
6
 
package/ai/tokens.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Celeste Design Tokens
2
2
 
3
- > Generated from `@youcan/celeste-tokens@0.11.0`. Do not edit.
3
+ > Generated from `@youcan/celeste-tokens@0.12.0`. Do not edit.
4
4
 
5
5
  **352 tokens.** Use them as CSS custom properties: `var(--color-text-sub-600)`.
6
6
 
package/dist/celeste.css CHANGED
@@ -2067,8 +2067,9 @@ to {
2067
2067
  initial-value: rgba(0, 0, 0, 0);
2068
2068
  inherits: false;
2069
2069
  }
2070
- .celeste-fbutton[data-v-970a57eb] {
2070
+ .celeste-fbutton[data-v-262bd031] {
2071
2071
  display: inline-flex;
2072
+ position: relative;
2072
2073
  box-sizing: border-box;
2073
2074
  align-items: center;
2074
2075
  justify-content: center;
@@ -2081,96 +2082,138 @@ to {
2081
2082
  text-decoration: none;
2082
2083
  cursor: pointer;
2083
2084
  }
2084
- .celeste-fbutton[data-v-970a57eb]:disabled {
2085
+ .celeste-fbutton[data-v-262bd031]:disabled {
2085
2086
  background-color: var(--color-bg-weak-50);
2086
2087
  color: var(--color-text-disabled-300);
2087
2088
  cursor: default;
2088
2089
  }
2089
- .celeste-fbutton[data-v-970a57eb] i {
2090
+ .celeste-fbutton[data-v-262bd031] i {
2090
2091
  flex-shrink: 0;
2091
2092
  width: 20px;
2092
2093
  height: 20px;
2093
2094
  }
2094
- .celeste-fbutton[data-v-970a57eb]:focus {
2095
+ .celeste-fbutton[data-v-262bd031]:focus {
2095
2096
  outline: none;
2096
2097
  }
2097
- .celeste-fbutton-xs[data-v-970a57eb] {
2098
+ .celeste-fbutton-xs[data-v-262bd031] {
2098
2099
  gap: var(--spacing-4);
2099
2100
  height: 32px;
2100
2101
  padding: var(--spacing-6) var(--spacing-8);
2101
2102
  border-radius: var(--radius-8);
2102
2103
  }
2103
- .celeste-fbutton-sm[data-v-970a57eb] {
2104
+ .celeste-fbutton-sm[data-v-262bd031] {
2104
2105
  gap: var(--spacing-6);
2105
2106
  height: 36px;
2106
2107
  padding: var(--spacing-8) var(--spacing-10);
2107
2108
  border-radius: var(--radius-8);
2108
2109
  }
2109
- .celeste-fbutton-md[data-v-970a57eb] {
2110
+ .celeste-fbutton-md[data-v-262bd031] {
2110
2111
  gap: var(--spacing-6);
2111
2112
  height: 40px;
2112
2113
  padding: var(--spacing-10) var(--spacing-12);
2113
2114
  border-radius: var(--radius-10);
2114
2115
  }
2115
- .celeste-fbutton-primary[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled) {
2116
+ .celeste-fbutton-primary[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled) {
2116
2117
  --celeste-fbutton-bg-start: rgb(255 255 255 / 16%);
2117
2118
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2118
2119
  background: linear-gradient(180deg, var(--celeste-fbutton-bg-start) 0%, var(--celeste-fbutton-bg-end) 100%), var(--color-primary-base);
2119
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-primary);
2120
+ box-shadow: var(--shadow-fancy-buttons-primary);
2120
2121
  color: var(--color-text-white-0);
2121
2122
  }
2122
- .celeste-fbutton-primary[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):hover {
2123
+ .celeste-fbutton-primary[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled)::before {
2124
+ content: "";
2125
+ position: absolute;
2126
+ padding: 1px;
2127
+ border-radius: inherit;
2128
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0) 100%);
2129
+ -webkit-mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2130
+ mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2131
+ -webkit-mask-clip: content-box, border-box;
2132
+ mask-clip: content-box, border-box;
2133
+ -webkit-mask-composite: xor;
2134
+ mask-composite: exclude;
2135
+ inset: 0;
2136
+ }
2137
+ .celeste-fbutton-primary[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):hover {
2123
2138
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2124
2139
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2125
2140
  }
2126
- .celeste-fbutton-primary[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):focus {
2141
+ .celeste-fbutton-primary[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):focus {
2127
2142
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2128
2143
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2129
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-primary), var(--shadow-buttons-primary-focus);
2144
+ box-shadow: var(--shadow-fancy-buttons-primary), var(--shadow-buttons-primary-focus);
2130
2145
  }
2131
- .celeste-fbutton-neutral[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled) {
2146
+ .celeste-fbutton-neutral[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled) {
2132
2147
  --celeste-fbutton-bg-start: rgb(255 255 255 / 16%);
2133
2148
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2134
2149
  background: linear-gradient(180deg, var(--celeste-fbutton-bg-start) 0%, var(--celeste-fbutton-bg-end) 100%), var(--color-bg-strong-950);
2135
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-neutral);
2150
+ box-shadow: var(--shadow-fancy-buttons-neutral);
2136
2151
  color: var(--color-text-white-0);
2137
2152
  }
2138
- .celeste-fbutton-neutral[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):hover {
2153
+ .celeste-fbutton-neutral[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled)::before {
2154
+ content: "";
2155
+ position: absolute;
2156
+ padding: 1px;
2157
+ border-radius: inherit;
2158
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0) 100%);
2159
+ -webkit-mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2160
+ mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2161
+ -webkit-mask-clip: content-box, border-box;
2162
+ mask-clip: content-box, border-box;
2163
+ -webkit-mask-composite: xor;
2164
+ mask-composite: exclude;
2165
+ inset: 0;
2166
+ }
2167
+ .celeste-fbutton-neutral[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):hover {
2139
2168
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2140
2169
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2141
2170
  }
2142
- .celeste-fbutton-neutral[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):focus {
2171
+ .celeste-fbutton-neutral[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):focus {
2143
2172
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2144
2173
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2145
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-neutral), var(--shadow-buttons-important-focus);
2174
+ box-shadow: var(--shadow-fancy-buttons-neutral), var(--shadow-buttons-important-focus);
2146
2175
  }
2147
- .celeste-fbutton-error[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled) {
2176
+ .celeste-fbutton-error[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled) {
2148
2177
  --celeste-fbutton-bg-start: rgb(255 255 255 / 16%);
2149
2178
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2150
2179
  background: linear-gradient(180deg, var(--celeste-fbutton-bg-start) 0%, var(--celeste-fbutton-bg-end) 100%), var(--color-state-error-base);
2151
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-error);
2180
+ box-shadow: var(--shadow-fancy-buttons-error);
2152
2181
  color: var(--color-text-white-0);
2153
2182
  }
2154
- .celeste-fbutton-error[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):hover {
2183
+ .celeste-fbutton-error[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled)::before {
2184
+ content: "";
2185
+ position: absolute;
2186
+ padding: 1px;
2187
+ border-radius: inherit;
2188
+ background: linear-gradient(180deg, rgba(255, 255, 255, 0.12) 0%, rgba(255, 255, 255, 0) 100%);
2189
+ -webkit-mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2190
+ mask-image: linear-gradient(#fff 0 0), linear-gradient(#fff 0 0);
2191
+ -webkit-mask-clip: content-box, border-box;
2192
+ mask-clip: content-box, border-box;
2193
+ -webkit-mask-composite: xor;
2194
+ mask-composite: exclude;
2195
+ inset: 0;
2196
+ }
2197
+ .celeste-fbutton-error[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):hover {
2155
2198
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2156
2199
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2157
2200
  }
2158
- .celeste-fbutton-error[data-v-970a57eb]:not(.celeste-fbutton-basic, :disabled):focus {
2201
+ .celeste-fbutton-error[data-v-262bd031]:not(.celeste-fbutton-basic, :disabled):focus {
2159
2202
  --celeste-fbutton-bg-start: rgb(255 255 255 / 24%);
2160
2203
  --celeste-fbutton-bg-end: rgb(255 255 255 / 0%);
2161
- box-shadow: inset 0 1px 0.5px 0.5px hsla(0, 0%, 100%, 0.12), var(--shadow-fancy-buttons-error), var(--shadow-buttons-error-focus);
2204
+ box-shadow: var(--shadow-fancy-buttons-error), var(--shadow-buttons-error-focus);
2162
2205
  }
2163
- .celeste-fbutton-basic[data-v-970a57eb] {
2206
+ .celeste-fbutton-basic[data-v-262bd031] {
2164
2207
  background: var(--color-bg-white-0);
2165
2208
  box-shadow: var(--shadow-fancy-buttons-stroke);
2166
2209
  color: var(--color-text-sub-600);
2167
2210
  }
2168
- .celeste-fbutton-basic[data-v-970a57eb]:hover {
2211
+ .celeste-fbutton-basic[data-v-262bd031]:hover {
2169
2212
  background: var(--color-bg-weak-50);
2170
2213
  box-shadow: none;
2171
2214
  color: var(--text-strong-950);
2172
2215
  }
2173
- .celeste-fbutton-basic[data-v-970a57eb]:focus {
2216
+ .celeste-fbutton-basic[data-v-262bd031]:focus {
2174
2217
  background: var(--color-bg-weak-50);
2175
2218
  box-shadow: var(--shadow-buttons-important-focus);
2176
2219
  color: var(--text-strong-950);
@@ -4305,37 +4348,37 @@ to {
4305
4348
  }.celeste-switch {
4306
4349
  --width: 26px;
4307
4350
  --height: 16px;
4351
+ --thumb-size: 12px;
4352
+ --thumb-inset: 1px;
4353
+ --travel: calc(var(--width) - var(--thumb-size) - var(--thumb-inset) * 2 - 2px);
4308
4354
  --bg-color: var(--color-bg-soft-200);
4309
- --animation-function: cubic-bezier(0.18, 0.89, 0.43, 1.19);
4310
4355
  position: relative;
4356
+ box-sizing: border-box;
4311
4357
  width: var(--width);
4312
4358
  height: var(--height);
4313
- transition: background var(--animation-fast) ease-out;
4359
+ transition: background-color var(--animation-fast) ease-out;
4314
4360
  border: 1px solid transparent;
4315
4361
  border-radius: var(--radius-full);
4316
4362
  background-color: var(--bg-color);
4317
4363
  cursor: pointer;
4318
4364
  }
4319
4365
  .celeste-switch .celeste-switch-thumb {
4320
- --thumb-size: 12px;
4321
4366
  --thumb-hole: 4px;
4367
+ --direction: 1;
4322
4368
  position: absolute;
4323
4369
  box-sizing: border-box;
4324
4370
  width: var(--thumb-size);
4325
4371
  height: var(--thumb-size);
4326
- transform: translateY(-50%);
4327
- transition-property: inset-inline-start, width, height;
4328
- transition-duration: var(--animation-fast);
4329
- transition-timing-function: var(--animation-function), ease-out, ease-out;
4372
+ transform: translateY(-50%) scale(var(--thumb-scale, 1));
4373
+ transition: transform var(--animation-fast) ease-out;
4330
4374
  border-radius: var(--radius-full);
4331
4375
  background-color: var(--color-static-white);
4332
4376
  box-shadow: var(--shadow-toggle-switch);
4333
4377
  inset-block-start: 50%;
4334
- inset-inline-start: 1px;
4335
- will-change: transform;
4378
+ inset-inline-start: var(--thumb-inset);
4336
4379
  }
4337
4380
  .celeste-switch .celeste-switch-thumb[data-state=checked] {
4338
- inset-inline-start: calc(100% - var(--thumb-size) - 1px);
4381
+ transform: translateY(-50%) translateX(calc(var(--travel) * var(--direction))) scale(var(--thumb-scale, 1));
4339
4382
  }
4340
4383
  .celeste-switch .celeste-switch-thumb::before {
4341
4384
  content: "";
@@ -4343,31 +4386,32 @@ to {
4343
4386
  width: var(--thumb-hole);
4344
4387
  height: var(--thumb-hole);
4345
4388
  margin: auto;
4346
- transition: background var(--animation-fast) ease-out;
4389
+ transition: background-color var(--animation-fast) ease-out;
4347
4390
  border-radius: var(--radius-full);
4348
4391
  background-color: var(--bg-color);
4349
4392
  inset: var(--spacing-0);
4350
4393
  }
4394
+ :dir(rtl) .celeste-switch .celeste-switch-thumb {
4395
+ --direction: -1;
4396
+ }
4351
4397
  .celeste-switch[aria-checked=true] {
4352
4398
  --bg-color: var(--color-primary-base);
4353
4399
  }
4354
4400
  .celeste-switch:disabled {
4355
4401
  --bg-color: var(--color-bg-white-0);
4402
+ --thumb-inset: var(--spacing-2);
4403
+ --travel: calc(var(--width) - var(--thumb-size) - var(--thumb-inset) - 2px);
4356
4404
  border-color: var(--color-stroke-soft-200);
4357
4405
  background-color: var(--bg-color);
4358
4406
  pointer-events: none;
4359
4407
  }
4360
4408
  .celeste-switch:disabled .celeste-switch-thumb {
4361
- inset-inline-start: var(--spacing-2);
4362
4409
  border-color: var(--color-bg-soft-200);
4363
4410
  background-color: var(--color-bg-soft-200);
4364
4411
  box-shadow: none;
4365
4412
  }
4366
- .celeste-switch:disabled .celeste-switch-thumb[data-state=checked] {
4367
- inset-inline-start: calc(100% - var(--thumb-size));
4368
- }
4369
- .celeste-switch:active:not(:disabled) .celeste-switch-thumb {
4370
- --thumb-size: 10px;
4413
+ .celeste-switch:active:not(:disabled) {
4414
+ --thumb-scale: 0.833;
4371
4415
  }
4372
4416
  .celeste-switch:hover:not(:active, :disabled) {
4373
4417
  --bg-color: var(--color-bg-sub-300);
@@ -4379,7 +4423,7 @@ to {
4379
4423
  flex: 1;
4380
4424
  }
4381
4425
 
4382
- .celeste-tab-menu-list[data-v-3c860830] {
4426
+ .celeste-tab-menu-list[data-v-bf1363bf] {
4383
4427
  display: flex;
4384
4428
  align-items: center;
4385
4429
  justify-content: flex-start;
@@ -4387,17 +4431,59 @@ to {
4387
4431
  padding: var(--spacing-10);
4388
4432
  gap: var(--spacing-8);
4389
4433
  }
4390
- .celeste-tab-menu-list[data-orientation='horizontal'][data-v-3c860830] {
4434
+ .celeste-tab-menu-list[data-orientation='horizontal'][data-v-bf1363bf] {
4435
+ position: relative;
4391
4436
  flex-direction: row;
4392
4437
  padding: var(--spacing-0);
4393
- border-block: 1px solid var(--color-stroke-soft-200);
4394
4438
  gap: 24px;
4395
4439
  }
4396
- .celeste-tab-menu-list[data-orientation='vertical'][data-v-3c860830] {
4440
+ .celeste-tab-menu-list[data-orientation='horizontal'][data-bordered='true'][data-v-bf1363bf] {
4441
+ border-block: 1px solid var(--color-stroke-soft-200);
4442
+ }
4443
+ .celeste-tab-menu-list[data-orientation='vertical'][data-v-bf1363bf] {
4397
4444
  flex-direction: column;
4398
4445
  }
4446
+ .celeste-tab-menu-list[data-scrollable='true'][data-v-bf1363bf] {
4447
+ overflow-x: auto;
4448
+ scrollbar-width: none;
4449
+ }
4450
+ .celeste-tab-menu-list[data-scrollable='true'][data-v-bf1363bf]::-webkit-scrollbar {
4451
+ display: none;
4452
+ }
4453
+ .celeste-tab-menu-list[data-fill='true'][data-v-bf1363bf] .celeste-tab-menu-item {
4454
+ flex: 1 1 0;
4455
+ width: auto;
4456
+ }
4457
+ .celeste-tab-menu-list[data-align='center'][data-v-bf1363bf] .celeste-tab-menu-item {
4458
+ justify-content: center;
4459
+ }
4460
+ .celeste-tab-menu-list[data-align='center'][data-v-bf1363bf] .celeste-tab-menu-item-label {
4461
+ flex: 0 1 auto;
4462
+ }
4463
+ .celeste-tab-menu-indicator[data-v-bf1363bf] {
4464
+ position: absolute;
4465
+ bottom: -1px;
4466
+ left: 0;
4467
+ height: 2px;
4468
+ transition-property: transform, width;
4469
+ transition-duration: 0s;
4470
+ transition-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
4471
+ opacity: 0;
4472
+ background-color: var(--color-primary-base);
4473
+ pointer-events: none;
4474
+ }
4475
+ .celeste-tab-menu-list[data-scrollable='true'] > .celeste-tab-menu-indicator[data-v-bf1363bf] {
4476
+ bottom: 0;
4477
+ }
4478
+ .celeste-tab-menu-indicator[data-ready='true'][data-v-bf1363bf] {
4479
+ transition-duration: var(--animation-normal);
4480
+ opacity: 1;
4481
+ }
4482
+ .celeste-tab-menu-list[data-orientation='vertical'] > .celeste-tab-menu-indicator[data-v-bf1363bf] {
4483
+ display: none;
4484
+ }
4399
4485
 
4400
- .celeste-tab-menu-item[data-v-3c27e2e4] {
4486
+ .celeste-tab-menu-item[data-v-512ad887] {
4401
4487
  --animation-function: cubic-bezier(0, 0, 0.2, 1);
4402
4488
 
4403
4489
  display: inline-flex;
@@ -4405,74 +4491,73 @@ to {
4405
4491
  justify-content: flex-start;
4406
4492
  width: 100%;
4407
4493
  padding: var(--spacing-8);
4408
- transition: all var(--animation-fast) var(--animation-function);
4494
+ transition:
4495
+ background-color var(--animation-fast) var(--animation-function),
4496
+ color var(--animation-fast) var(--animation-function);
4409
4497
  border: none;
4410
4498
  border-radius: var(--radius-8);
4411
4499
  color: var(--color-text-sub-600);
4412
- font-size: var(--font-size-10);
4500
+ font: var(--label-sm);
4413
4501
  cursor: pointer;
4414
4502
  gap: var(--spacing-6);
4415
4503
  }
4416
- .celeste-tab-menu-item[data-v-3c27e2e4] i {
4504
+ .celeste-tab-menu-item[data-v-512ad887] i {
4417
4505
  width: 20px;
4418
4506
  height: 20px;
4507
+ transition: color var(--animation-fast) var(--animation-function);
4419
4508
  }
4420
- .celeste-tab-menu-item[data-v-3c27e2e4]:focus {
4509
+ .celeste-tab-menu-item[data-v-512ad887]:focus {
4421
4510
  outline: none;
4422
4511
  }
4423
- .celeste-tab-menu-item[data-orientation='horizontal'][data-v-3c27e2e4] {
4424
- position: relative;
4512
+ .celeste-tab-menu-item[data-orientation='horizontal'][data-v-512ad887] {
4425
4513
  width: -moz-fit-content;
4426
4514
  width: fit-content;
4427
4515
  padding-block: var(--spacing-14);
4428
4516
  padding-inline: var(--spacing-0);
4517
+ background-color: var(--color-bg-white-0);
4429
4518
  }
4430
- .celeste-tab-menu-item[data-orientation='horizontal'][data-v-3c27e2e4]::after {
4431
- content: '';
4432
- display: block;
4433
- position: absolute;
4434
- inset-inline: 0;
4435
- inset-block-end: 0;
4436
- width: 100%;
4437
- height: 2px;
4438
- transition: all var(--animation-fast) var(--animation-function);
4439
- background-color: transparent;
4440
- }
4441
- .celeste-tab-menu-item[data-orientation='vertical'][data-state='active'][data-v-3c27e2e4] {
4442
- background-color: var(--color-bg-weak-50);
4443
- }
4444
- .celeste-tab-menu-item[data-orientation='horizontal'][data-state='active'][data-v-3c27e2e4] {
4519
+ .celeste-tab-menu-item[data-orientation='vertical'][data-v-512ad887] {
4445
4520
  background-color: var(--color-bg-white-0);
4446
4521
  }
4447
- .celeste-tab-menu-item[data-orientation='horizontal'][data-state='active'][data-v-3c27e2e4]::after {
4448
- background-color: var(--color-primary-base);
4522
+ .celeste-tab-menu-item[data-orientation='vertical'][data-v-512ad887]:hover,.celeste-tab-menu-item[data-orientation='vertical'][data-state='active'][data-v-512ad887] {
4523
+ background-color: var(--color-bg-weak-50);
4524
+ }
4525
+ .celeste-tab-menu-item[data-orientation='vertical'] .celeste-tab-menu-item-postfix[data-v-512ad887] {
4526
+ display: inline-flex;
4527
+ transform: scale(0.75);
4528
+ transition:
4529
+ transform var(--animation-fast) var(--animation-function),
4530
+ opacity var(--animation-fast) var(--animation-function);
4531
+ opacity: 0;
4532
+ }
4533
+ .celeste-tab-menu-item[data-orientation='vertical'][data-state='active'] .celeste-tab-menu-item-postfix[data-v-512ad887] {
4534
+ transform: scale(1);
4535
+ opacity: 1;
4449
4536
  }
4450
- .celeste-tab-menu-item[data-state='active'][data-v-3c27e2e4] i {
4537
+ .celeste-tab-menu-item[data-state='active'][data-v-512ad887] i {
4451
4538
  color: var(--color-primary-base);
4452
4539
  }
4453
- .celeste-tab-menu-item[data-state='active'] span[data-v-3c27e2e4] {
4540
+ .celeste-tab-menu-item[data-state='active'] span[data-v-512ad887] {
4454
4541
  color: var(--color-text-strong-950);
4455
4542
  }
4456
- .celeste-tab-menu-item[data-state='inactive'][data-v-3c27e2e4] {
4457
- background-color: var(--color-bg-white-0);
4458
- }
4459
- .celeste-tab-menu-item .celeste-tab-menu-item-label[data-v-3c27e2e4] {
4543
+ .celeste-tab-menu-item .celeste-tab-menu-item-label[data-v-512ad887] {
4460
4544
  flex: 1;
4461
4545
  overflow: hidden;
4462
- font-size: var(--font-size-2);
4463
4546
  text-align: start;
4464
4547
  text-overflow: ellipsis;
4465
4548
  white-space: nowrap;
4466
4549
  }
4467
4550
 
4468
- .celeste-segmented-control-item[data-v-e184b1ba] {
4551
+ .celeste-segmented-control-item[data-v-efe57652] {
4469
4552
  display: flex;
4553
+ position: relative;
4554
+ z-index: 1;
4470
4555
  align-items: center;
4471
4556
  gap: var(--spacing-6);
4472
4557
  justify-content: center;
4473
4558
  width: 100%;
4474
4559
  padding: var(--spacing-4);
4475
- transition: all var(--animation-fast) ease-out;
4560
+ transition: color var(--animation-normal) ease-out;
4476
4561
  border: none;
4477
4562
  border-radius: var(--radius-6);
4478
4563
  background-color: transparent;
@@ -4480,16 +4565,14 @@ to {
4480
4565
  font: var(--label-sm);
4481
4566
  cursor: pointer;
4482
4567
  }
4483
- .celeste-segmented-control-item[data-state='on'][data-v-e184b1ba] {
4484
- background-color: var(--color-bg-white-0);
4485
- box-shadow: var(--shadow-toggle-switch);
4568
+ .celeste-segmented-control-item[data-state='on'][data-v-efe57652] {
4486
4569
  color: var(--color-text-strong-950);
4487
4570
  pointer-events: none;
4488
4571
  }
4489
- .celeste-segmented-control-item[data-state='off'][data-v-e184b1ba]:hover {
4572
+ .celeste-segmented-control-item[data-state='off'][data-v-efe57652]:hover {
4490
4573
  color: var(--color-text-sub-600);
4491
4574
  }
4492
- .celeste-segmented-control-item[data-v-e184b1ba]:disabled {
4575
+ .celeste-segmented-control-item[data-v-efe57652]:disabled {
4493
4576
  color: var(--color-text-disabled-300);
4494
4577
  pointer-events: none;
4495
4578
  -webkit-user-select: none;
@@ -5291,18 +5374,38 @@ to {
5291
5374
  .celeste-select-item[data-state=checked][data-v-3fe18f57] .i-celeste-check-line {
5292
5375
  display: none;
5293
5376
  }
5294
- .celeste-segmented-control[data-v-fe40de14] {
5377
+ .celeste-segmented-control[data-v-9a13a9a8] {
5295
5378
  display: flex;
5379
+ position: relative;
5296
5380
  gap: var(--spacing-4);
5381
+ isolation: isolate;
5297
5382
  align-items: center;
5298
5383
  width: 100%;
5299
5384
  padding: var(--spacing-4);
5300
5385
  border-radius: var(--radius-10);
5301
5386
  background-color: var(--color-bg-weak-50);
5302
5387
  }
5303
- .celeste-segmented-control[data-orientation='vertical'][data-v-fe40de14] {
5388
+ .celeste-segmented-control[data-orientation='vertical'][data-v-9a13a9a8] {
5304
5389
  flex-direction: column;
5305
5390
  }
5391
+ .celeste-segmented-control-indicator[data-v-9a13a9a8] {
5392
+ position: absolute;
5393
+ z-index: -1;
5394
+ top: 0;
5395
+ left: 0;
5396
+ transition-property: transform, width, height;
5397
+ transition-duration: 0s;
5398
+ transition-timing-function: cubic-bezier(0.65, 0, 0.35, 1);
5399
+ border-radius: var(--radius-6);
5400
+ opacity: 0;
5401
+ background-color: var(--color-bg-white-0);
5402
+ box-shadow: var(--shadow-toggle-switch);
5403
+ pointer-events: none;
5404
+ }
5405
+ .celeste-segmented-control-indicator[data-ready='true'][data-v-9a13a9a8] {
5406
+ transition-duration: var(--animation-normal);
5407
+ opacity: 1;
5408
+ }
5306
5409
 
5307
5410
  .celeste-sheet-close[data-v-a922d9c4] {
5308
5411
  position: absolute;
@@ -512,6 +512,12 @@ Object.defineProperty(exports, "useMounted", {
512
512
  return useMounted;
513
513
  }
514
514
  });
515
+ Object.defineProperty(exports, "useMutationObserver", {
516
+ enumerable: true,
517
+ get: function() {
518
+ return useMutationObserver;
519
+ }
520
+ });
515
521
  Object.defineProperty(exports, "useResizeObserver", {
516
522
  enumerable: true,
517
523
  get: function() {
@@ -38,7 +38,7 @@ var fancy_button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0,
38
38
  });
39
39
  //#endregion
40
40
  //#region src/components/button/fancy-button.vue
41
- var fancy_button_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(fancy_button_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-970a57eb"]]);
41
+ var fancy_button_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(fancy_button_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-262bd031"]]);
42
42
  //#endregion
43
43
  Object.defineProperty(exports, "fancy_button_default", {
44
44
  enumerable: true,
@@ -12,6 +12,7 @@ const require_use_delegated_props = require("../use-delegated-props.cjs");
12
12
  require("../use-chart-motion.cjs");
13
13
  require("../use-locale.cjs");
14
14
  require("../use-sidebar.cjs");
15
+ require("../use-tab-observer.cjs");
15
16
  let vue = require("vue");
16
17
  //#region ../../node_modules/.pnpm/reka-ui@2.10.1_vue@3.5.41_typescript@6.0.3_/node_modules/reka-ui/dist/ScrollArea/ScrollAreaRoot.js
17
18
  var [injectScrollAreaRootContext, provideScrollAreaRootContext] = /*#__PURE__*/ require_createContext.createContext("ScrollAreaRoot");
@@ -198,7 +198,7 @@ var segmented_control_item_vue_vue_type_script_setup_true_lang_default = /*@__PU
198
198
  });
199
199
  //#endregion
200
200
  //#region src/components/segmented-control/segmented-control-item.vue
201
- var segmented_control_item_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(segmented_control_item_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e184b1ba"]]);
201
+ var segmented_control_item_default = /*#__PURE__*/ require__plugin_vue_export_helper._plugin_vue_export_helper_default(segmented_control_item_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-efe57652"]]);
202
202
  //#endregion
203
203
  Object.defineProperty(exports, "segmented_control_item_default", {
204
204
  enumerable: true,