@youcan/celeste 0.10.4 → 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 (69) 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 +12 -2
  5. package/dist/celeste.css +193 -89
  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/chunks/text-input-affix.cjs +1 -1
  14. package/dist/cjs/index.cjs +2 -0
  15. package/dist/cjs/use-tab-observer.cjs +42 -0
  16. package/dist/components/segmented-control/segmented-control.d.ts +2 -2
  17. package/dist/components/tab-menu/tab-menu-list.d.ts +14 -5
  18. package/dist/composables/index.d.ts +1 -0
  19. package/dist/composables/use-tab-observer.d.ts +14 -0
  20. package/dist/es/chunks/BubbleSelect.js +1 -1
  21. package/dist/es/chunks/CollapsibleRoot.js +1 -1
  22. package/dist/es/chunks/ComboboxInput.js +1 -1
  23. package/dist/es/chunks/ComboboxRoot.js +1 -1
  24. package/dist/es/chunks/DialogRoot.js +1 -1
  25. package/dist/es/chunks/DropdownMenuRoot.js +1 -1
  26. package/dist/es/chunks/MenuRoot.js +1 -1
  27. package/dist/es/chunks/MenuSub.js +1 -1
  28. package/dist/es/chunks/PaginationRoot.js +1 -1
  29. package/dist/es/chunks/PinInputRoot.js +1 -1
  30. package/dist/es/chunks/PopoverRoot.js +1 -1
  31. package/dist/es/chunks/ProgressIndicator.js +1 -1
  32. package/dist/es/chunks/RadioGroupRoot.js +1 -1
  33. package/dist/es/chunks/RovingFocusGroup.js +1 -1
  34. package/dist/es/chunks/SelectItemAlignedPosition.js +1 -1
  35. package/dist/es/chunks/TabsRoot.js +1 -1
  36. package/dist/es/chunks/ToggleGroupRoot.js +1 -1
  37. package/dist/es/chunks/TooltipRoot.js +1 -1
  38. package/dist/es/chunks/bar-chart.js +1 -1
  39. package/dist/es/chunks/calendar.js +1 -1
  40. package/dist/es/chunks/checkbox.js +1 -1
  41. package/dist/es/chunks/counter-input.js +1 -1
  42. package/dist/es/chunks/dist2.js +1 -1
  43. package/dist/es/chunks/dropdown-menu-sub.js +1 -1
  44. package/dist/es/chunks/fancy-button.js +1 -1
  45. package/dist/es/chunks/radio-group-item.js +1 -1
  46. package/dist/es/chunks/range-calendar.js +1 -1
  47. package/dist/es/chunks/scroll-area.js +1 -1
  48. package/dist/es/chunks/scroll-bar.js +2 -1
  49. package/dist/es/chunks/segmented-control-item.js +2 -2
  50. package/dist/es/chunks/segmented-control.js +20 -4
  51. package/dist/es/chunks/sidebar-provider.js +1 -1
  52. package/dist/es/chunks/slider.js +1 -1
  53. package/dist/es/chunks/switch.js +1 -1
  54. package/dist/es/chunks/tab-menu-item.js +6 -2
  55. package/dist/es/chunks/tab-menu-list.js +56 -10
  56. package/dist/es/chunks/text-input-affix.js +1 -1
  57. package/dist/es/index.js +2 -1
  58. package/dist/es/use-tab-observer.js +41 -0
  59. package/package.json +3 -3
  60. package/src/components/button/fancy-button.vue +14 -4
  61. package/src/components/segmented-control/segmented-control-item.vue +3 -3
  62. package/src/components/segmented-control/segmented-control.vue +35 -0
  63. package/src/components/switch/switch.vue +19 -18
  64. package/src/components/tab-menu/stories/tab-menu.stories.ts +39 -0
  65. package/src/components/tab-menu/tab-menu-item.vue +27 -28
  66. package/src/components/tab-menu/tab-menu-list.vue +85 -3
  67. package/src/components/text-input/text-input-affix.vue +1 -0
  68. package/src/composables/index.ts +1 -0
  69. package/src/composables/use-tab-observer.ts +51 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.10.4",
4
- "generatedAt": "2026-08-29T09:03:41.551Z",
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.10.4`. 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.10.4`. 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,8 +1,8 @@
1
1
  # Celeste Design Tokens
2
2
 
3
- > Generated from `@youcan/celeste-tokens@0.10.4`. Do not edit.
3
+ > Generated from `@youcan/celeste-tokens@0.12.0`. Do not edit.
4
4
 
5
- **347 tokens.** Use them as CSS custom properties: `var(--color-text-sub-600)`.
5
+ **352 tokens.** Use them as CSS custom properties: `var(--color-text-sub-600)`.
6
6
 
7
7
  **70 are semantic** — they change automatically under `[data-theme="dark"]`.
8
8
  Always prefer a semantic token over the primitive it resolves to: `--color-text-sub-600`
@@ -23,6 +23,16 @@ to follow the OS. Never hard-code a dark colour.
23
23
 
24
24
  ---
25
25
 
26
+ ## breakpoint
27
+
28
+ - `--breakpoint-2xl`: 1536px
29
+ - `--breakpoint-lg`: 1024px
30
+ - `--breakpoint-md`: 768px
31
+ - `--breakpoint-sm`: 640px
32
+ - `--breakpoint-xl`: 1280px
33
+
34
+ ---
35
+
26
36
  ## color
27
37
 
28
38
  ### Semantic — prefer these
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);
@@ -2326,16 +2369,17 @@ to {
2326
2369
  .celeste-select-icon[data-v-c6783f07] > :where(i, svg, img) {
2327
2370
  width: 100%;
2328
2371
  height: 100%;
2329
- }.celeste-text-input-affix[data-v-440f2745] {
2372
+ }.celeste-text-input-affix[data-v-a6d421c4] {
2330
2373
  display: flex;
2374
+ flex-shrink: 0;
2331
2375
  align-items: center;
2332
2376
  color: var(--celeste-text-input-affix-color);
2333
2377
  }
2334
- .celeste-text-input-affix[inline=false][data-v-440f2745] {
2378
+ .celeste-text-input-affix[inline=false][data-v-a6d421c4] {
2335
2379
  padding-inline: var(--spacing-10);
2336
2380
  background-color: var(--celeste-text-input-affix-background-color);
2337
2381
  }
2338
- .celeste-text-input-affix[askbd=true][data-v-440f2745] {
2382
+ .celeste-text-input-affix[askbd=true][data-v-a6d421c4] {
2339
2383
  width: -moz-fit-content;
2340
2384
  width: fit-content;
2341
2385
  height: -moz-fit-content;
@@ -4304,37 +4348,37 @@ to {
4304
4348
  }.celeste-switch {
4305
4349
  --width: 26px;
4306
4350
  --height: 16px;
4351
+ --thumb-size: 12px;
4352
+ --thumb-inset: 1px;
4353
+ --travel: calc(var(--width) - var(--thumb-size) - var(--thumb-inset) * 2 - 2px);
4307
4354
  --bg-color: var(--color-bg-soft-200);
4308
- --animation-function: cubic-bezier(0.18, 0.89, 0.43, 1.19);
4309
4355
  position: relative;
4356
+ box-sizing: border-box;
4310
4357
  width: var(--width);
4311
4358
  height: var(--height);
4312
- transition: background var(--animation-fast) ease-out;
4359
+ transition: background-color var(--animation-fast) ease-out;
4313
4360
  border: 1px solid transparent;
4314
4361
  border-radius: var(--radius-full);
4315
4362
  background-color: var(--bg-color);
4316
4363
  cursor: pointer;
4317
4364
  }
4318
4365
  .celeste-switch .celeste-switch-thumb {
4319
- --thumb-size: 12px;
4320
4366
  --thumb-hole: 4px;
4367
+ --direction: 1;
4321
4368
  position: absolute;
4322
4369
  box-sizing: border-box;
4323
4370
  width: var(--thumb-size);
4324
4371
  height: var(--thumb-size);
4325
- transform: translateY(-50%);
4326
- transition-property: inset-inline-start, width, height;
4327
- transition-duration: var(--animation-fast);
4328
- 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;
4329
4374
  border-radius: var(--radius-full);
4330
4375
  background-color: var(--color-static-white);
4331
4376
  box-shadow: var(--shadow-toggle-switch);
4332
4377
  inset-block-start: 50%;
4333
- inset-inline-start: 1px;
4334
- will-change: transform;
4378
+ inset-inline-start: var(--thumb-inset);
4335
4379
  }
4336
4380
  .celeste-switch .celeste-switch-thumb[data-state=checked] {
4337
- inset-inline-start: calc(100% - var(--thumb-size) - 1px);
4381
+ transform: translateY(-50%) translateX(calc(var(--travel) * var(--direction))) scale(var(--thumb-scale, 1));
4338
4382
  }
4339
4383
  .celeste-switch .celeste-switch-thumb::before {
4340
4384
  content: "";
@@ -4342,31 +4386,32 @@ to {
4342
4386
  width: var(--thumb-hole);
4343
4387
  height: var(--thumb-hole);
4344
4388
  margin: auto;
4345
- transition: background var(--animation-fast) ease-out;
4389
+ transition: background-color var(--animation-fast) ease-out;
4346
4390
  border-radius: var(--radius-full);
4347
4391
  background-color: var(--bg-color);
4348
4392
  inset: var(--spacing-0);
4349
4393
  }
4394
+ :dir(rtl) .celeste-switch .celeste-switch-thumb {
4395
+ --direction: -1;
4396
+ }
4350
4397
  .celeste-switch[aria-checked=true] {
4351
4398
  --bg-color: var(--color-primary-base);
4352
4399
  }
4353
4400
  .celeste-switch:disabled {
4354
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);
4355
4404
  border-color: var(--color-stroke-soft-200);
4356
4405
  background-color: var(--bg-color);
4357
4406
  pointer-events: none;
4358
4407
  }
4359
4408
  .celeste-switch:disabled .celeste-switch-thumb {
4360
- inset-inline-start: var(--spacing-2);
4361
4409
  border-color: var(--color-bg-soft-200);
4362
4410
  background-color: var(--color-bg-soft-200);
4363
4411
  box-shadow: none;
4364
4412
  }
4365
- .celeste-switch:disabled .celeste-switch-thumb[data-state=checked] {
4366
- inset-inline-start: calc(100% - var(--thumb-size));
4367
- }
4368
- .celeste-switch:active:not(:disabled) .celeste-switch-thumb {
4369
- --thumb-size: 10px;
4413
+ .celeste-switch:active:not(:disabled) {
4414
+ --thumb-scale: 0.833;
4370
4415
  }
4371
4416
  .celeste-switch:hover:not(:active, :disabled) {
4372
4417
  --bg-color: var(--color-bg-sub-300);
@@ -4378,7 +4423,7 @@ to {
4378
4423
  flex: 1;
4379
4424
  }
4380
4425
 
4381
- .celeste-tab-menu-list[data-v-3c860830] {
4426
+ .celeste-tab-menu-list[data-v-bf1363bf] {
4382
4427
  display: flex;
4383
4428
  align-items: center;
4384
4429
  justify-content: flex-start;
@@ -4386,17 +4431,59 @@ to {
4386
4431
  padding: var(--spacing-10);
4387
4432
  gap: var(--spacing-8);
4388
4433
  }
4389
- .celeste-tab-menu-list[data-orientation='horizontal'][data-v-3c860830] {
4434
+ .celeste-tab-menu-list[data-orientation='horizontal'][data-v-bf1363bf] {
4435
+ position: relative;
4390
4436
  flex-direction: row;
4391
4437
  padding: var(--spacing-0);
4392
- border-block: 1px solid var(--color-stroke-soft-200);
4393
4438
  gap: 24px;
4394
4439
  }
4395
- .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] {
4396
4444
  flex-direction: column;
4397
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
+ }
4398
4485
 
4399
- .celeste-tab-menu-item[data-v-3c27e2e4] {
4486
+ .celeste-tab-menu-item[data-v-512ad887] {
4400
4487
  --animation-function: cubic-bezier(0, 0, 0.2, 1);
4401
4488
 
4402
4489
  display: inline-flex;
@@ -4404,74 +4491,73 @@ to {
4404
4491
  justify-content: flex-start;
4405
4492
  width: 100%;
4406
4493
  padding: var(--spacing-8);
4407
- 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);
4408
4497
  border: none;
4409
4498
  border-radius: var(--radius-8);
4410
4499
  color: var(--color-text-sub-600);
4411
- font-size: var(--font-size-10);
4500
+ font: var(--label-sm);
4412
4501
  cursor: pointer;
4413
4502
  gap: var(--spacing-6);
4414
4503
  }
4415
- .celeste-tab-menu-item[data-v-3c27e2e4] i {
4504
+ .celeste-tab-menu-item[data-v-512ad887] i {
4416
4505
  width: 20px;
4417
4506
  height: 20px;
4507
+ transition: color var(--animation-fast) var(--animation-function);
4418
4508
  }
4419
- .celeste-tab-menu-item[data-v-3c27e2e4]:focus {
4509
+ .celeste-tab-menu-item[data-v-512ad887]:focus {
4420
4510
  outline: none;
4421
4511
  }
4422
- .celeste-tab-menu-item[data-orientation='horizontal'][data-v-3c27e2e4] {
4423
- position: relative;
4512
+ .celeste-tab-menu-item[data-orientation='horizontal'][data-v-512ad887] {
4424
4513
  width: -moz-fit-content;
4425
4514
  width: fit-content;
4426
4515
  padding-block: var(--spacing-14);
4427
4516
  padding-inline: var(--spacing-0);
4517
+ background-color: var(--color-bg-white-0);
4428
4518
  }
4429
- .celeste-tab-menu-item[data-orientation='horizontal'][data-v-3c27e2e4]::after {
4430
- content: '';
4431
- display: block;
4432
- position: absolute;
4433
- inset-inline: 0;
4434
- inset-block-end: 0;
4435
- width: 100%;
4436
- height: 2px;
4437
- transition: all var(--animation-fast) var(--animation-function);
4438
- background-color: transparent;
4439
- }
4440
- .celeste-tab-menu-item[data-orientation='vertical'][data-state='active'][data-v-3c27e2e4] {
4441
- background-color: var(--color-bg-weak-50);
4442
- }
4443
- .celeste-tab-menu-item[data-orientation='horizontal'][data-state='active'][data-v-3c27e2e4] {
4519
+ .celeste-tab-menu-item[data-orientation='vertical'][data-v-512ad887] {
4444
4520
  background-color: var(--color-bg-white-0);
4445
4521
  }
4446
- .celeste-tab-menu-item[data-orientation='horizontal'][data-state='active'][data-v-3c27e2e4]::after {
4447
- 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;
4448
4532
  }
4449
- .celeste-tab-menu-item[data-state='active'][data-v-3c27e2e4] i {
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;
4536
+ }
4537
+ .celeste-tab-menu-item[data-state='active'][data-v-512ad887] i {
4450
4538
  color: var(--color-primary-base);
4451
4539
  }
4452
- .celeste-tab-menu-item[data-state='active'] span[data-v-3c27e2e4] {
4540
+ .celeste-tab-menu-item[data-state='active'] span[data-v-512ad887] {
4453
4541
  color: var(--color-text-strong-950);
4454
4542
  }
4455
- .celeste-tab-menu-item[data-state='inactive'][data-v-3c27e2e4] {
4456
- background-color: var(--color-bg-white-0);
4457
- }
4458
- .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] {
4459
4544
  flex: 1;
4460
4545
  overflow: hidden;
4461
- font-size: var(--font-size-2);
4462
4546
  text-align: start;
4463
4547
  text-overflow: ellipsis;
4464
4548
  white-space: nowrap;
4465
4549
  }
4466
4550
 
4467
- .celeste-segmented-control-item[data-v-e184b1ba] {
4551
+ .celeste-segmented-control-item[data-v-efe57652] {
4468
4552
  display: flex;
4553
+ position: relative;
4554
+ z-index: 1;
4469
4555
  align-items: center;
4470
4556
  gap: var(--spacing-6);
4471
4557
  justify-content: center;
4472
4558
  width: 100%;
4473
4559
  padding: var(--spacing-4);
4474
- transition: all var(--animation-fast) ease-out;
4560
+ transition: color var(--animation-normal) ease-out;
4475
4561
  border: none;
4476
4562
  border-radius: var(--radius-6);
4477
4563
  background-color: transparent;
@@ -4479,16 +4565,14 @@ to {
4479
4565
  font: var(--label-sm);
4480
4566
  cursor: pointer;
4481
4567
  }
4482
- .celeste-segmented-control-item[data-state='on'][data-v-e184b1ba] {
4483
- background-color: var(--color-bg-white-0);
4484
- box-shadow: var(--shadow-toggle-switch);
4568
+ .celeste-segmented-control-item[data-state='on'][data-v-efe57652] {
4485
4569
  color: var(--color-text-strong-950);
4486
4570
  pointer-events: none;
4487
4571
  }
4488
- .celeste-segmented-control-item[data-state='off'][data-v-e184b1ba]:hover {
4572
+ .celeste-segmented-control-item[data-state='off'][data-v-efe57652]:hover {
4489
4573
  color: var(--color-text-sub-600);
4490
4574
  }
4491
- .celeste-segmented-control-item[data-v-e184b1ba]:disabled {
4575
+ .celeste-segmented-control-item[data-v-efe57652]:disabled {
4492
4576
  color: var(--color-text-disabled-300);
4493
4577
  pointer-events: none;
4494
4578
  -webkit-user-select: none;
@@ -5290,18 +5374,38 @@ to {
5290
5374
  .celeste-select-item[data-state=checked][data-v-3fe18f57] .i-celeste-check-line {
5291
5375
  display: none;
5292
5376
  }
5293
- .celeste-segmented-control[data-v-fe40de14] {
5377
+ .celeste-segmented-control[data-v-9a13a9a8] {
5294
5378
  display: flex;
5379
+ position: relative;
5295
5380
  gap: var(--spacing-4);
5381
+ isolation: isolate;
5296
5382
  align-items: center;
5297
5383
  width: 100%;
5298
5384
  padding: var(--spacing-4);
5299
5385
  border-radius: var(--radius-10);
5300
5386
  background-color: var(--color-bg-weak-50);
5301
5387
  }
5302
- .celeste-segmented-control[data-orientation='vertical'][data-v-fe40de14] {
5388
+ .celeste-segmented-control[data-orientation='vertical'][data-v-9a13a9a8] {
5303
5389
  flex-direction: column;
5304
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
+ }
5305
5409
 
5306
5410
  .celeste-sheet-close[data-v-a922d9c4] {
5307
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");