tldraw 3.16.0-canary.f60032f16651 → 3.16.0-canary.ffdf566dd0a8

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 (98) hide show
  1. package/dist-cjs/index.d.ts +32 -34
  2. package/dist-cjs/index.js +7 -2
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js +10 -1
  5. package/dist-cjs/lib/shapes/shared/usePrefersReducedMotion.js.map +2 -2
  6. package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
  7. package/dist-cjs/lib/ui/components/AccessibilityMenu.js +35 -0
  8. package/dist-cjs/lib/ui/components/AccessibilityMenu.js.map +7 -0
  9. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js +3 -3
  10. package/dist-cjs/lib/ui/components/MainMenu/DefaultMainMenuContent.js.map +2 -2
  11. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js +2 -0
  12. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanel.js.map +2 -2
  13. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js +168 -137
  14. package/dist-cjs/lib/ui/components/StylePanel/DefaultStylePanelContent.js.map +2 -2
  15. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js +3 -3
  16. package/dist-cjs/lib/ui/components/Toolbar/OverflowingToolbar.js.map +2 -2
  17. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js +3 -2
  18. package/dist-cjs/lib/ui/components/Toolbar/ToggleToolLockedButton.js.map +2 -2
  19. package/dist-cjs/lib/ui/components/menu-items.js +6 -0
  20. package/dist-cjs/lib/ui/components/menu-items.js.map +2 -2
  21. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js +11 -3
  22. package/dist-cjs/lib/ui/components/primitives/TldrawUiToolbar.js.map +2 -2
  23. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js +267 -0
  24. package/dist-cjs/lib/ui/components/primitives/TldrawUiTooltip.js.map +7 -0
  25. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js +1 -149
  26. package/dist-cjs/lib/ui/components/primitives/menus/TldrawUiMenuItem.js.map +2 -2
  27. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js +3 -2
  28. package/dist-cjs/lib/ui/context/TldrawUiContextProvider.js.map +2 -2
  29. package/dist-cjs/lib/ui/context/actions.js +15 -0
  30. package/dist-cjs/lib/ui/context/actions.js.map +2 -2
  31. package/dist-cjs/lib/ui/context/events.js.map +1 -1
  32. package/dist-cjs/lib/ui/hooks/useTools.js +9 -76
  33. package/dist-cjs/lib/ui/hooks/useTools.js.map +2 -2
  34. package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
  35. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +3 -0
  36. package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
  37. package/dist-cjs/lib/ui/version.js +3 -3
  38. package/dist-cjs/lib/ui/version.js.map +1 -1
  39. package/dist-esm/index.d.mts +32 -34
  40. package/dist-esm/index.mjs +11 -3
  41. package/dist-esm/index.mjs.map +2 -2
  42. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs +10 -1
  43. package/dist-esm/lib/shapes/shared/usePrefersReducedMotion.mjs.map +2 -2
  44. package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
  45. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs +19 -0
  46. package/dist-esm/lib/ui/components/AccessibilityMenu.mjs.map +7 -0
  47. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs +3 -5
  48. package/dist-esm/lib/ui/components/MainMenu/DefaultMainMenuContent.mjs.map +2 -2
  49. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs +3 -1
  50. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanel.mjs.map +2 -2
  51. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs +168 -137
  52. package/dist-esm/lib/ui/components/StylePanel/DefaultStylePanelContent.mjs.map +2 -2
  53. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs +3 -3
  54. package/dist-esm/lib/ui/components/Toolbar/OverflowingToolbar.mjs.map +2 -2
  55. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs +3 -2
  56. package/dist-esm/lib/ui/components/Toolbar/ToggleToolLockedButton.mjs.map +2 -2
  57. package/dist-esm/lib/ui/components/menu-items.mjs +6 -0
  58. package/dist-esm/lib/ui/components/menu-items.mjs.map +2 -2
  59. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs +11 -3
  60. package/dist-esm/lib/ui/components/primitives/TldrawUiToolbar.mjs.map +2 -2
  61. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs +237 -0
  62. package/dist-esm/lib/ui/components/primitives/TldrawUiTooltip.mjs.map +7 -0
  63. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs +3 -157
  64. package/dist-esm/lib/ui/components/primitives/menus/TldrawUiMenuItem.mjs.map +2 -2
  65. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs +3 -2
  66. package/dist-esm/lib/ui/context/TldrawUiContextProvider.mjs.map +2 -2
  67. package/dist-esm/lib/ui/context/actions.mjs +15 -0
  68. package/dist-esm/lib/ui/context/actions.mjs.map +2 -2
  69. package/dist-esm/lib/ui/context/events.mjs.map +1 -1
  70. package/dist-esm/lib/ui/hooks/useTools.mjs +10 -83
  71. package/dist-esm/lib/ui/hooks/useTools.mjs.map +2 -2
  72. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +3 -0
  73. package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
  74. package/dist-esm/lib/ui/version.mjs +3 -3
  75. package/dist-esm/lib/ui/version.mjs.map +1 -1
  76. package/package.json +3 -3
  77. package/src/index.ts +8 -2
  78. package/src/lib/shapes/shared/usePrefersReducedMotion.tsx +11 -1
  79. package/src/lib/tools/SelectTool/childStates/Translating.ts +1 -0
  80. package/src/lib/ui/components/AccessibilityMenu.tsx +20 -0
  81. package/src/lib/ui/components/MainMenu/DefaultMainMenuContent.tsx +4 -4
  82. package/src/lib/ui/components/StylePanel/DefaultStylePanel.tsx +3 -1
  83. package/src/lib/ui/components/StylePanel/DefaultStylePanelContent.tsx +171 -128
  84. package/src/lib/ui/components/Toolbar/OverflowingToolbar.tsx +3 -3
  85. package/src/lib/ui/components/Toolbar/ToggleToolLockedButton.tsx +14 -11
  86. package/src/lib/ui/components/menu-items.tsx +8 -0
  87. package/src/lib/ui/components/primitives/TldrawUiToolbar.tsx +19 -3
  88. package/src/lib/ui/components/primitives/TldrawUiTooltip.tsx +313 -0
  89. package/src/lib/ui/components/primitives/menus/TldrawUiMenuItem.tsx +2 -213
  90. package/src/lib/ui/context/TldrawUiContextProvider.tsx +23 -20
  91. package/src/lib/ui/context/actions.tsx +15 -0
  92. package/src/lib/ui/context/events.tsx +1 -1
  93. package/src/lib/ui/hooks/useTools.tsx +10 -118
  94. package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +3 -0
  95. package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +3 -0
  96. package/src/lib/ui/version.ts +3 -3
  97. package/src/lib/ui.css +57 -1
  98. package/tldraw.css +59 -1
@@ -1,13 +1,4 @@
1
- import {
2
- assertExists,
3
- createShapeId,
4
- Editor,
5
- GeoShapeGeoStyle,
6
- TLPointerEventInfo,
7
- TLShapeId,
8
- toRichText,
9
- useMaybeEditor,
10
- } from '@tldraw/editor'
1
+ import { Editor, GeoShapeGeoStyle, useMaybeEditor } from '@tldraw/editor'
11
2
  import * as React from 'react'
12
3
  import { EmbedDialog } from '../components/EmbedDialog'
13
4
  import { TLUiIconJsx } from '../components/primitives/TldrawUiIcon'
@@ -28,7 +19,6 @@ export interface TLUiToolItem<
28
19
  shortcutsLabel?: TranslationKey
29
20
  icon: IconType | TLUiIconJsx
30
21
  onSelect(source: TLUiEventSource): void
31
- onDragStart?(source: TLUiEventSource, info: TLPointerEventInfo): void
32
22
  /**
33
23
  * The keyboard shortcut for this tool. This is a string that can be a single key,
34
24
  * or a combination of keys.
@@ -136,27 +126,21 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
136
126
  onToolSelect(source, this)
137
127
  },
138
128
  },
139
- ...[...GeoShapeGeoStyle.values].map((geo) => ({
140
- id: geo,
141
- label: `tool.${geo}` as TLUiTranslationKey,
129
+ ...[...GeoShapeGeoStyle.values].map((id) => ({
130
+ id,
131
+ label: `tool.${id}` as TLUiTranslationKey,
142
132
  meta: {
143
- geo,
133
+ geo: id,
144
134
  },
145
- kbd: geo === 'rectangle' ? 'r' : geo === 'ellipse' ? 'o' : undefined,
146
- icon: ('geo-' + geo) as TLUiIconType,
135
+ kbd: id === 'rectangle' ? 'r' : id === 'ellipse' ? 'o' : undefined,
136
+ icon: ('geo-' + id) as TLUiIconType,
147
137
  onSelect(source: TLUiEventSource) {
148
138
  editor.run(() => {
149
- editor.setStyleForNextShapes(GeoShapeGeoStyle, geo)
139
+ editor.setStyleForNextShapes(GeoShapeGeoStyle, id)
150
140
  editor.setCurrentTool('geo')
151
- onToolSelect(source, this, `geo-${geo}`)
141
+ onToolSelect(source, this, `geo-${id}`)
152
142
  })
153
143
  },
154
- onDragStart(source: TLUiEventSource, info: TLPointerEventInfo) {
155
- onDragFromToolbarToCreateShape(editor, info, {
156
- createShape: (id) => editor.createShape({ id, type: 'geo', props: { geo } }),
157
- })
158
- trackEvent('drag-tool', { source, id: 'geo' })
159
- },
160
144
  })),
161
145
  {
162
146
  id: 'arrow',
@@ -167,17 +151,6 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
167
151
  editor.setCurrentTool('arrow')
168
152
  onToolSelect(source, this)
169
153
  },
170
- onDragStart(source: TLUiEventSource, info: TLPointerEventInfo) {
171
- onDragFromToolbarToCreateShape(editor, info, {
172
- createShape: (id) =>
173
- editor.createShape({
174
- id,
175
- type: 'arrow',
176
- props: { start: { x: 0, y: 0 }, end: { x: 200, y: 0 } },
177
- }),
178
- })
179
- trackEvent('drag-tool', { source, id: 'arrow' })
180
- },
181
154
  },
182
155
  {
183
156
  id: 'line',
@@ -198,12 +171,6 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
198
171
  editor.setCurrentTool('frame')
199
172
  onToolSelect(source, this)
200
173
  },
201
- onDragStart(source, info) {
202
- onDragFromToolbarToCreateShape(editor, info, {
203
- createShape: (id) => editor.createShape({ id, type: 'frame' }),
204
- })
205
- trackEvent('drag-tool', { source, id: 'frame' })
206
- },
207
174
  },
208
175
  {
209
176
  id: 'text',
@@ -214,17 +181,6 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
214
181
  editor.setCurrentTool('text')
215
182
  onToolSelect(source, this)
216
183
  },
217
- onDragStart(source, info) {
218
- onDragFromToolbarToCreateShape(editor, info, {
219
- createShape: (id) =>
220
- editor.createShape({ id, type: 'text', props: { richText: toRichText('Text') } }),
221
- onDragEnd: (id) => {
222
- editor.emit('select-all-text', { shapeId: id })
223
- editor.setEditingShape(id)
224
- },
225
- })
226
- trackEvent('drag-tool', { source, id: 'text' })
227
- },
228
184
  },
229
185
  {
230
186
  id: 'asset',
@@ -245,16 +201,6 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
245
201
  editor.setCurrentTool('note')
246
202
  onToolSelect(source, this)
247
203
  },
248
- onDragStart(source, info) {
249
- onDragFromToolbarToCreateShape(editor, info, {
250
- createShape: (id) => editor.createShape({ id, type: 'note' }),
251
- onDragEnd: (id) => {
252
- editor.emit('select-all-text', { shapeId: id })
253
- editor.setEditingShape(id)
254
- },
255
- })
256
- trackEvent('drag-tool', { source, id: 'note' })
257
- },
258
204
  },
259
205
  {
260
206
  id: 'laser',
@@ -298,7 +244,7 @@ export function ToolsProvider({ overrides, children }: TLUiToolsProviderProps) {
298
244
  }
299
245
 
300
246
  return tools
301
- }, [overrides, editor, helpers, onToolSelect, trackEvent])
247
+ }, [overrides, editor, helpers, onToolSelect])
302
248
 
303
249
  return <ToolsContext.Provider value={tools}>{children}</ToolsContext.Provider>
304
250
  }
@@ -313,57 +259,3 @@ export function useTools() {
313
259
 
314
260
  return ctx
315
261
  }
316
-
317
- /**
318
- * Options for {@link onDragFromToolbarToCreateShape}.
319
- * @public
320
- */
321
- export interface OnDragFromToolbarToCreateShapesOpts {
322
- /**
323
- * Create the shape being dragged. You don't need to worry about positioning it, as it'll be
324
- * immediately updated with the correct position.
325
- */
326
- createShape(id: TLShapeId): void
327
- /**
328
- * Called once the drag interaction has finished.
329
- */
330
- onDragEnd?(id: TLShapeId): void
331
- }
332
-
333
- /**
334
- * A helper method to use in {@link TLUiToolItem#onDragStart} to create a shape by dragging it from
335
- * the toolbar.
336
- * @public
337
- */
338
- export function onDragFromToolbarToCreateShape(
339
- editor: Editor,
340
- info: TLPointerEventInfo,
341
- opts: OnDragFromToolbarToCreateShapesOpts
342
- ) {
343
- const { x, y } = editor.inputs.currentPagePoint
344
-
345
- const stoppingPoint = editor.markHistoryStoppingPoint('drag shape tool')
346
- editor.setCurrentTool('select.translating')
347
-
348
- const id = createShapeId()
349
- opts.createShape(id)
350
- const shape = assertExists(editor.getShape(id), 'Shape not found')
351
-
352
- const { w, h } = editor.getShapePageBounds(id)!
353
- editor.updateShape({ id, type: shape.type, x: x - w / 2, y: y - h / 2 })
354
- editor.select(id)
355
-
356
- editor.setCurrentTool('select.translating', {
357
- ...info,
358
- target: 'shape',
359
- shape: editor.getShape(id),
360
- isCreating: true,
361
- creatingMarkId: stoppingPoint,
362
- onCreate() {
363
- editor.setCurrentTool('select.idle')
364
- editor.select(id)
365
- opts.onDragEnd?.(id)
366
- },
367
- })
368
- editor.getCurrentTool().setCurrentToolIdMask(shape.type)
369
- }
@@ -93,6 +93,8 @@ export type TLUiTranslationKey =
93
93
  | 'action.toggle-reduce-motion'
94
94
  | 'action.toggle-keyboard-shortcuts.menu'
95
95
  | 'action.toggle-keyboard-shortcuts'
96
+ | 'action.toggle-ui-labels.menu'
97
+ | 'action.toggle-ui-labels'
96
98
  | 'action.toggle-edge-scrolling.menu'
97
99
  | 'action.toggle-edge-scrolling'
98
100
  | 'action.toggle-debug-mode.menu'
@@ -298,6 +300,7 @@ export type TLUiTranslationKey =
298
300
  | 'a11y.open-keyboard-shortcuts'
299
301
  | 'menu.title'
300
302
  | 'menu.theme'
303
+ | 'menu.accessibility'
301
304
  | 'menu.copy-as'
302
305
  | 'menu.edit'
303
306
  | 'menu.export-as'
@@ -94,6 +94,8 @@ export const DEFAULT_TRANSLATION = {
94
94
  'action.toggle-reduce-motion': 'Toggle reduce motion',
95
95
  'action.toggle-keyboard-shortcuts.menu': 'Keyboard shortcuts',
96
96
  'action.toggle-keyboard-shortcuts': 'Toggle keyboard shortcuts',
97
+ 'action.toggle-ui-labels.menu': 'UI labels',
98
+ 'action.toggle-ui-labels': 'Toggle UI labels',
97
99
  'action.toggle-edge-scrolling.menu': 'Edge scrolling',
98
100
  'action.toggle-edge-scrolling': 'Toggle edge scrolling',
99
101
  'action.toggle-debug-mode.menu': 'Debug mode',
@@ -299,6 +301,7 @@ export const DEFAULT_TRANSLATION = {
299
301
  'a11y.open-keyboard-shortcuts': 'Open keyboard shortcuts',
300
302
  'menu.title': 'Menu',
301
303
  'menu.theme': 'Theme',
304
+ 'menu.accessibility': 'Accessibility',
302
305
  'menu.copy-as': 'Copy as',
303
306
  'menu.edit': 'Edit',
304
307
  'menu.export-as': 'Export as',
@@ -1,9 +1,9 @@
1
1
  // This file is automatically generated by internal/scripts/refresh-assets.ts.
2
2
  // Do not edit manually. Or do, I'm a comment, not a cop.
3
3
 
4
- export const version = '3.16.0-canary.f60032f16651'
4
+ export const version = '3.16.0-canary.ffdf566dd0a8'
5
5
  export const publishDates = {
6
6
  major: '2024-09-13T14:36:29.063Z',
7
- minor: '2025-08-06T09:18:23.766Z',
8
- patch: '2025-08-06T09:18:23.766Z',
7
+ minor: '2025-08-06T13:55:07.190Z',
8
+ patch: '2025-08-06T13:55:07.190Z',
9
9
  }
package/src/lib/ui.css CHANGED
@@ -97,7 +97,7 @@
97
97
  opacity: 1;
98
98
  }
99
99
 
100
- .tlui-button[aria-expanded='true'][data-direction='left']::after {
100
+ .tlui-button[aria-expanded='true'][data-direction='left'] {
101
101
  background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
102
102
  opacity: 1;
103
103
  }
@@ -1000,6 +1000,12 @@
1000
1000
  max-width: 148px;
1001
1001
  }
1002
1002
 
1003
+ .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
1004
+ border-radius: 10px;
1005
+ outline: 2px solid var(--color-text);
1006
+ outline-offset: -5px;
1007
+ }
1008
+
1003
1009
  .tlui-style-panel::-webkit-scrollbar {
1004
1010
  display: none;
1005
1011
  }
@@ -1064,6 +1070,26 @@
1064
1070
  }
1065
1071
  }
1066
1072
 
1073
+ /* Accessibility subheadings */
1074
+
1075
+ .tlui-style-panel__section .tlui-style-panel__subheading,
1076
+ .tlui-style-panel__section__common .tlui-style-panel__subheading,
1077
+ .tlui-style-panel__subheading + .tlui-slider__container {
1078
+ margin: 0;
1079
+ padding: var(--space-2) var(--space-3) 0px var(--space-4);
1080
+ font-size: 12px;
1081
+ font-weight: inherit;
1082
+ line-height: inherit;
1083
+ }
1084
+
1085
+ .tlui-style-panel .tlui-style-panel__subheading:nth-of-type(1) {
1086
+ padding-top: var(--space-3);
1087
+ }
1088
+
1089
+ .tlui-style-panel__subheading + .tlui-slider__container {
1090
+ padding-top: 0px;
1091
+ }
1092
+
1067
1093
  /* --------------------- Bottom --------------------- */
1068
1094
 
1069
1095
  .tlui-layout__bottom {
@@ -1222,6 +1248,36 @@
1222
1248
  transition: transform 0.15s ease-out 0.05s;
1223
1249
  }
1224
1250
 
1251
+ /* ------------------- Tooltip -------------------- */
1252
+
1253
+ .tlui-tooltip {
1254
+ font-size: 12px;
1255
+ padding: 2px 8px;
1256
+ border-radius: 4px;
1257
+ background-color: var(--color-tooltip);
1258
+ box-shadow: none;
1259
+ color: var(--color-text-shadow);
1260
+ max-width: 400px;
1261
+ width: fit-content;
1262
+ text-align: center;
1263
+ pointer-events: none;
1264
+ will-change: transform, opacity;
1265
+ z-index: 2;
1266
+ }
1267
+
1268
+ .tlui-tooltip__arrow {
1269
+ fill: var(--color-tooltip);
1270
+ will-change: opacity;
1271
+ }
1272
+
1273
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip) {
1274
+ z-index: var(--layer-toasts) !important;
1275
+ }
1276
+
1277
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip[data-should-animate='true']) {
1278
+ transition: all 0.1s ease-out;
1279
+ }
1280
+
1225
1281
  /* ------------------- Debug panel ------------------ */
1226
1282
 
1227
1283
  .tlui-debug-panel {
package/tldraw.css CHANGED
@@ -167,6 +167,7 @@
167
167
  --color-selected: hsl(214, 84%, 56%);
168
168
  --color-selected-contrast: hsl(0, 0%, 100%);
169
169
  --color-focus: hsl(219, 65%, 50%);
170
+ --color-tooltip: hsla(200, 14%, 4%, 1);
170
171
  /* Text */
171
172
  --color-text: hsl(0, 0%, 0%);
172
173
  --color-text-0: hsl(0, 0%, 11%);
@@ -222,6 +223,7 @@
222
223
  --color-selected: hsl(217, 89%, 61%);
223
224
  --color-selected-contrast: hsl(0, 0%, 100%);
224
225
  --color-focus: hsl(217, 76%, 80%);
226
+ --color-tooltip: hsla(0, 0%, 100%, 1);
225
227
  /* Text */
226
228
  --color-text: hsl(210, 17%, 98%);
227
229
  --color-text-0: hsl(0, 9%, 94%);
@@ -1875,7 +1877,7 @@ it from receiving any pointer events or affecting the cursor. */
1875
1877
  opacity: 1;
1876
1878
  }
1877
1879
 
1878
- .tlui-button[aria-expanded='true'][data-direction='left']::after {
1880
+ .tlui-button[aria-expanded='true'][data-direction='left'] {
1879
1881
  background: linear-gradient(270deg, rgba(144, 144, 144, 0) 0%, var(--color-muted-2) 100%);
1880
1882
  opacity: 1;
1881
1883
  }
@@ -2778,6 +2780,12 @@ it from receiving any pointer events or affecting the cursor. */
2778
2780
  max-width: 148px;
2779
2781
  }
2780
2782
 
2783
+ .tlui-style-panel[data-show-ui-labels='true'] .tlui-button[data-isactive='true'] {
2784
+ border-radius: 10px;
2785
+ outline: 2px solid var(--color-text);
2786
+ outline-offset: -5px;
2787
+ }
2788
+
2781
2789
  .tlui-style-panel::-webkit-scrollbar {
2782
2790
  display: none;
2783
2791
  }
@@ -2842,6 +2850,26 @@ it from receiving any pointer events or affecting the cursor. */
2842
2850
  }
2843
2851
  }
2844
2852
 
2853
+ /* Accessibility subheadings */
2854
+
2855
+ .tlui-style-panel__section .tlui-style-panel__subheading,
2856
+ .tlui-style-panel__section__common .tlui-style-panel__subheading,
2857
+ .tlui-style-panel__subheading + .tlui-slider__container {
2858
+ margin: 0;
2859
+ padding: var(--space-2) var(--space-3) 0px var(--space-4);
2860
+ font-size: 12px;
2861
+ font-weight: inherit;
2862
+ line-height: inherit;
2863
+ }
2864
+
2865
+ .tlui-style-panel .tlui-style-panel__subheading:nth-of-type(1) {
2866
+ padding-top: var(--space-3);
2867
+ }
2868
+
2869
+ .tlui-style-panel__subheading + .tlui-slider__container {
2870
+ padding-top: 0px;
2871
+ }
2872
+
2845
2873
  /* --------------------- Bottom --------------------- */
2846
2874
 
2847
2875
  .tlui-layout__bottom {
@@ -3000,6 +3028,36 @@ it from receiving any pointer events or affecting the cursor. */
3000
3028
  transition: transform 0.15s ease-out 0.05s;
3001
3029
  }
3002
3030
 
3031
+ /* ------------------- Tooltip -------------------- */
3032
+
3033
+ .tlui-tooltip {
3034
+ font-size: 12px;
3035
+ padding: 2px 8px;
3036
+ border-radius: 4px;
3037
+ background-color: var(--color-tooltip);
3038
+ box-shadow: none;
3039
+ color: var(--color-text-shadow);
3040
+ max-width: 400px;
3041
+ width: fit-content;
3042
+ text-align: center;
3043
+ pointer-events: none;
3044
+ will-change: transform, opacity;
3045
+ z-index: 2;
3046
+ }
3047
+
3048
+ .tlui-tooltip__arrow {
3049
+ fill: var(--color-tooltip);
3050
+ will-change: opacity;
3051
+ }
3052
+
3053
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip) {
3054
+ z-index: var(--layer-toasts) !important;
3055
+ }
3056
+
3057
+ [data-radix-popper-content-wrapper]:has(.tlui-tooltip[data-should-animate='true']) {
3058
+ transition: all 0.1s ease-out;
3059
+ }
3060
+
3003
3061
  /* ------------------- Debug panel ------------------ */
3004
3062
 
3005
3063
  .tlui-debug-panel {