@tldraw/tlschema 3.16.0-internal.a478398270c6 → 3.16.0-internal.f8b97f0c414f
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/README.md +1 -1
- package/dist-cjs/index.d.ts +26 -22
- package/dist-cjs/index.js +2 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/records/TLShape.js.map +2 -2
- package/dist-cjs/shapes/ShapeWithCrop.js.map +1 -1
- package/dist-cjs/shapes/TLArrowShape.js +15 -2
- package/dist-cjs/shapes/TLArrowShape.js.map +2 -2
- package/dist-cjs/store-migrations.js +34 -2
- package/dist-cjs/store-migrations.js.map +2 -2
- package/dist-cjs/styles/TLColorStyle.js +277 -421
- package/dist-cjs/styles/TLColorStyle.js.map +2 -2
- package/dist-esm/index.d.mts +26 -22
- package/dist-esm/index.mjs +3 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/records/TLShape.mjs.map +2 -2
- package/dist-esm/shapes/TLArrowShape.mjs +15 -2
- package/dist-esm/shapes/TLArrowShape.mjs.map +2 -2
- package/dist-esm/store-migrations.mjs +34 -2
- package/dist-esm/store-migrations.mjs.map +2 -2
- package/dist-esm/styles/TLColorStyle.mjs +277 -421
- package/dist-esm/styles/TLColorStyle.mjs.map +2 -2
- package/package.json +14 -17
- package/src/__tests__/migrationTestUtils.ts +3 -2
- package/src/index.ts +2 -0
- package/src/migrations.test.ts +45 -0
- package/src/records/TLShape.ts +8 -4
- package/src/shapes/ShapeWithCrop.ts +5 -2
- package/src/shapes/TLArrowShape.ts +15 -2
- package/src/store-migrations.ts +45 -2
- package/src/styles/TLColorStyle.ts +266 -406
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/styles/TLColorStyle.ts"],
|
|
4
|
-
"sourcesContent": ["import { Expand } from '@tldraw/utils'\nimport { T } from '@tldraw/validate'\nimport { StyleProp } from './StyleProp'\n\n/** @public */\nexport const defaultColorNames = [\n\t'black',\n\t'grey',\n\t'light-violet',\n\t'violet',\n\t'blue',\n\t'light-blue',\n\t'yellow',\n\t'orange',\n\t'green',\n\t'light-green',\n\t'light-red',\n\t'red',\n\t'white',\n] as const\n\n/** @public */\nexport interface TLDefaultColorThemeColor {\n\tsolid: string\n\tsemi: string\n\tpattern: string\n\tfill: string // same as solid\n\tframe: {\n\t\theadingStroke: string\n\t\theadingFill: string\n\t\tstroke: string\n\t\tfill: string\n\t\ttext: string\n\t}\n\tnote: {\n\t\tfill: string\n\t\ttext: string\n\t}\n\thighlight: {\n\t\tsrgb: string\n\t\tp3: string\n\t}\n}\n\n/** @public */\nexport type TLDefaultColorTheme = Expand<\n\t{\n\t\tid: 'light' | 'dark'\n\t\ttext: string\n\t\tbackground: string\n\t\tsolid: string\n\t} & Record<(typeof defaultColorNames)[number], TLDefaultColorThemeColor>\n>\n\n/** @public */\nexport const DefaultColorThemePalette: {\n\tlightMode: TLDefaultColorTheme\n\tdarkMode: TLDefaultColorTheme\n} = {\n\tlightMode: {\n\t\tid: 'light',\n\t\ttext: '#000000',\n\t\tbackground: '#f9fafb',\n\t\tsolid: '#fcfffe',\n\t\tblack: {\n\t\t\tsolid: '#1d1d1d',\n\t\t\tfill: '#1d1d1d',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#717171',\n\t\t\t\theadingFill: '#ffffff',\n\t\t\t\tstroke: '#717171',\n\t\t\t\tfill: '#ffffff',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#FCE19C',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#e8e8e8',\n\t\t\tpattern: '#494949',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#fddd00',\n\t\t\t\tp3: 'color(display-p3 0.972 0.8205 0.05)',\n\t\t\t},\n\t\t},\n\t\tblue: {\n\t\t\tsolid: '#4465e9',\n\t\t\tfill: '#4465e9',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6681ec',\n\t\t\t\theadingFill: '#f9fafe',\n\t\t\t\tstroke: '#6681ec',\n\t\t\t\tfill: '#f9fafe',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#8AA3FF',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#dce1f8',\n\t\t\tpattern: '#6681ee',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#10acff',\n\t\t\t\tp3: 'color(display-p3 0.308 0.6632 0.9996)',\n\t\t\t},\n\t\t},\n\t\tgreen: {\n\t\t\tsolid: '#099268',\n\t\t\tfill: '#099268',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#37a684',\n\t\t\t\theadingFill: '#f8fcfa',\n\t\t\t\tstroke: '#37a684',\n\t\t\t\tfill: '#f8fcfa',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#6FC896',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#d3e9e3',\n\t\t\tpattern: '#39a785',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#00ffc8',\n\t\t\t\tp3: 'color(display-p3 0.2536 0.984 0.7981)',\n\t\t\t},\n\t\t},\n\t\tgrey: {\n\t\t\tsolid: '#9fa8b2',\n\t\t\tfill: '#9fa8b2',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#aaaaab',\n\t\t\t\theadingFill: '#fbfcfc',\n\t\t\t\tstroke: '#aaaaab',\n\t\t\t\tfill: '#fcfcfd',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#C0CAD3',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#eceef0',\n\t\t\tpattern: '#bcc3c9',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#cbe7f1',\n\t\t\t\tp3: 'color(display-p3 0.8163 0.9023 0.9416)',\n\t\t\t},\n\t\t},\n\t\t'light-blue': {\n\t\t\tsolid: '#4ba1f1',\n\t\t\tfill: '#4ba1f1',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6cb2f3',\n\t\t\t\theadingFill: '#f8fbfe',\n\t\t\t\tstroke: '#6cb2f3',\n\t\t\t\tfill: '#fafcff',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#9BC4FD',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#ddedfa',\n\t\t\tpattern: '#6fbbf8',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#00f4ff',\n\t\t\t\tp3: 'color(display-p3 0.1512 0.9414 0.9996)',\n\t\t\t},\n\t\t},\n\t\t'light-green': {\n\t\t\tsolid: '#4cb05e',\n\t\t\tfill: '#4cb05e',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6dbe7c',\n\t\t\t\theadingFill: '#f8fcf9',\n\t\t\t\tstroke: '#6dbe7c',\n\t\t\t\tfill: '#fafdfa',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#98D08A',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#dbf0e0',\n\t\t\tpattern: '#65cb78',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#65f641',\n\t\t\t\tp3: 'color(display-p3 0.563 0.9495 0.3857)',\n\t\t\t},\n\t\t},\n\t\t'light-red': {\n\t\t\tsolid: '#f87777',\n\t\t\tfill: '#f87777',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#f89090',\n\t\t\t\theadingFill: '#fffafa',\n\t\t\t\tstroke: '#f89090',\n\t\t\t\tfill: '#fffbfb',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#F7A5A1',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#f4dadb',\n\t\t\tpattern: '#fe9e9e',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ff7fa3',\n\t\t\t\tp3: 'color(display-p3 0.9988 0.5301 0.6397)',\n\t\t\t},\n\t\t},\n\t\t'light-violet': {\n\t\t\tsolid: '#e085f4',\n\t\t\tfill: '#e085f4',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#e59bf5',\n\t\t\t\theadingFill: '#fefaff',\n\t\t\t\tstroke: '#e59bf5',\n\t\t\t\tfill: '#fefbff',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#DFB0F9',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#f5eafa',\n\t\t\tpattern: '#e9acf8',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ff88ff',\n\t\t\t\tp3: 'color(display-p3 0.9676 0.5652 0.9999)',\n\t\t\t},\n\t\t},\n\t\torange: {\n\t\t\tsolid: '#e16919',\n\t\t\tfill: '#e16919',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#e68544',\n\t\t\t\theadingFill: '#fef9f6',\n\t\t\t\tstroke: '#e68544',\n\t\t\t\tfill: '#fef9f6',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#FAA475',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#f8e2d4',\n\t\t\tpattern: '#f78438',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ffa500',\n\t\t\t\tp3: 'color(display-p3 0.9988 0.6905 0.266)',\n\t\t\t},\n\t\t},\n\t\tred: {\n\t\t\tsolid: '#e03131',\n\t\t\tfill: '#e03131',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#e55757',\n\t\t\t\theadingFill: '#fef7f7',\n\t\t\t\tstroke: '#e55757',\n\t\t\t\tfill: '#fef9f9',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#FC8282',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#f4dadb',\n\t\t\tpattern: '#e55959',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ff636e',\n\t\t\t\tp3: 'color(display-p3 0.9992 0.4376 0.45)',\n\t\t\t},\n\t\t},\n\t\tviolet: {\n\t\t\tsolid: '#ae3ec9',\n\t\t\tfill: '#ae3ec9',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#bc62d3',\n\t\t\t\theadingFill: '#fcf7fd',\n\t\t\t\tstroke: '#bc62d3',\n\t\t\t\tfill: '#fdf9fd',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#DB91FD',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#ecdcf2',\n\t\t\tpattern: '#bd63d3',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#c77cff',\n\t\t\t\tp3: 'color(display-p3 0.7469 0.5089 0.9995)',\n\t\t\t},\n\t\t},\n\t\tyellow: {\n\t\t\tsolid: '#f1ac4b',\n\t\t\tfill: '#f1ac4b',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#f3bb6c',\n\t\t\t\theadingFill: '#fefcf8',\n\t\t\t\tstroke: '#f3bb6c',\n\t\t\t\tfill: '#fffdfa',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#FED49A',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tsemi: '#f9f0e6',\n\t\t\tpattern: '#fecb92',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#fddd00',\n\t\t\t\tp3: 'color(display-p3 0.972 0.8705 0.05)',\n\t\t\t},\n\t\t},\n\t\twhite: {\n\t\t\tsolid: '#FFFFFF',\n\t\t\tfill: '#FFFFFF',\n\t\t\tsemi: '#f5f5f5',\n\t\t\tpattern: '#f9f9f9',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#7d7d7d',\n\t\t\t\theadingFill: '#ffffff',\n\t\t\t\tstroke: '#7d7d7d',\n\t\t\t\tfill: '#ffffff',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#FFFFFF',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ffffff',\n\t\t\t\tp3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t},\n\tdarkMode: {\n\t\tid: 'dark',\n\t\ttext: 'hsl(210, 17%, 98%)',\n\t\tbackground: 'hsl(240, 5%, 6.5%)',\n\t\tsolid: '#010403',\n\n\t\tblack: {\n\t\t\tsolid: '#f2f2f2',\n\t\t\tfill: '#f2f2f2',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#5c5c5c',\n\t\t\t\theadingFill: '#252525',\n\t\t\t\tstroke: '#5c5c5c',\n\t\t\t\tfill: '#0c0c0c',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#2c2c2c',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#2c3036',\n\t\t\tpattern: '#989898',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#d2b700',\n\t\t\t\tp3: 'color(display-p3 0.8078 0.6225 0.0312)',\n\t\t\t},\n\t\t},\n\t\tblue: {\n\t\t\tsolid: '#4f72fc', // 3c60f0\n\t\t\tfill: '#4f72fc',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#384994',\n\t\t\t\theadingFill: '#1C2036',\n\t\t\t\tstroke: '#384994',\n\t\t\t\tfill: '#11141f',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#2A3F98',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#262d40',\n\t\t\tpattern: '#3a4b9e',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#0079d2',\n\t\t\t\tp3: 'color(display-p3 0.0032 0.4655 0.7991)',\n\t\t\t},\n\t\t},\n\t\tgreen: {\n\t\t\tsolid: '#099268',\n\t\t\tfill: '#099268',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#10513C',\n\t\t\t\theadingFill: '#14241f',\n\t\t\t\tstroke: '#10513C',\n\t\t\t\tfill: '#0E1614',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#014429',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#253231',\n\t\t\tpattern: '#366a53',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#009774',\n\t\t\t\tp3: 'color(display-p3 0.0085 0.582 0.4604)',\n\t\t\t},\n\t\t},\n\t\tgrey: {\n\t\t\tsolid: '#9398b0',\n\t\t\tfill: '#9398b0',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#42474D',\n\t\t\t\theadingFill: '#23262A',\n\t\t\t\tstroke: '#42474D',\n\t\t\t\tfill: '#151719',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#56595F',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#33373c',\n\t\t\tpattern: '#7c8187',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#9cb4cb',\n\t\t\t\tp3: 'color(display-p3 0.6299 0.7012 0.7856)',\n\t\t\t},\n\t\t},\n\t\t'light-blue': {\n\t\t\tsolid: '#4dabf7',\n\t\t\tfill: '#4dabf7',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#075797',\n\t\t\t\theadingFill: '#142839',\n\t\t\t\tstroke: '#075797',\n\t\t\t\tfill: '#0B1823',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#1F5495',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#2a3642',\n\t\t\tpattern: '#4d7aa9',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#00bdc8',\n\t\t\t\tp3: 'color(display-p3 0.0023 0.7259 0.7735)',\n\t\t\t},\n\t\t},\n\t\t'light-green': {\n\t\t\tsolid: '#40c057',\n\t\t\tfill: '#40c057',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#1C5427',\n\t\t\t\theadingFill: '#18251A',\n\t\t\t\tstroke: '#1C5427',\n\t\t\t\tfill: '#0F1911',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#21581D',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#2a3830',\n\t\t\tpattern: '#4e874e',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#00a000',\n\t\t\t\tp3: 'color(display-p3 0.2711 0.6172 0.0195)',\n\t\t\t},\n\t\t},\n\t\t'light-red': {\n\t\t\tsolid: '#ff8787',\n\t\t\tfill: '#ff8787',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6f3232', // Darker and desaturated variant of solid\n\t\t\t\theadingFill: '#341818', // Deep, muted dark red\n\t\t\t\tstroke: '#6f3232', // Matches headingStroke\n\t\t\t\tfill: '#181212', // Darker, muted background shade\n\t\t\t\ttext: '#f2f2f2', // Consistent bright text color\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#7a3333', // Medium-dark, muted variant of solid\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#3c2b2b', // Subdued, darker neutral-red tone\n\t\t\tpattern: '#a56767', // Existing pattern shade retained\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#db005b',\n\t\t\t\tp3: 'color(display-p3 0.7849 0.0585 0.3589)',\n\t\t\t},\n\t\t},\n\t\t'light-violet': {\n\t\t\tsolid: '#e599f7',\n\t\t\tfill: '#e599f7',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6c367a',\n\t\t\t\theadingFill: '#2D2230',\n\t\t\t\tstroke: '#6c367a',\n\t\t\t\tfill: '#1C151E',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#762F8E',\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#383442',\n\t\t\tpattern: '#9770a9',\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#c400c7',\n\t\t\t\tp3: 'color(display-p3 0.7024 0.0403 0.753)',\n\t\t\t},\n\t\t},\n\t\torange: {\n\t\t\tsolid: '#f76707',\n\t\t\tfill: '#f76707',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#773a0e', // Darker, muted version of solid\n\t\t\t\theadingFill: '#2f1d13', // Deep, warm, muted background\n\t\t\t\tstroke: '#773a0e', // Matches headingStroke\n\t\t\t\tfill: '#1c1512', // Darker, richer muted background\n\t\t\t\ttext: '#f2f2f2', // Bright text for contrast\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#7c3905', // Muted dark variant for note fill\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#3b2e27', // Muted neutral-orange tone\n\t\t\tpattern: '#9f552d', // Retained existing shade\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#d07a00',\n\t\t\t\tp3: 'color(display-p3 0.7699 0.4937 0.0085)',\n\t\t\t},\n\t\t},\n\t\tred: {\n\t\t\tsolid: '#e03131',\n\t\t\tfill: '#e03131',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#701e1e', // Darker, muted variation of solid\n\t\t\t\theadingFill: '#301616', // Deep, muted reddish backdrop\n\t\t\t\tstroke: '#701e1e', // Matches headingStroke\n\t\t\t\tfill: '#1b1313', // Rich, dark muted background\n\t\t\t\ttext: '#f2f2f2', // Bright text for readability\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#7e201f', // Muted dark variant for note fill\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#382726', // Dark neutral-red tone\n\t\t\tpattern: '#8f3734', // Existing pattern color retained\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#de002c',\n\t\t\t\tp3: 'color(display-p3 0.7978 0.0509 0.2035)',\n\t\t\t},\n\t\t},\n\t\tviolet: {\n\t\t\tsolid: '#ae3ec9',\n\t\t\tfill: '#ae3ec9',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#6d1583', // Darker, muted variation of solid\n\t\t\t\theadingFill: '#27152e', // Deep, rich muted violet backdrop\n\t\t\t\tstroke: '#6d1583', // Matches headingStroke\n\t\t\t\tfill: '#1b0f21', // Darker muted violet background\n\t\t\t\ttext: '#f2f2f2', // Consistent bright text color\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#5f1c70', // Muted dark variant for note fill\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#342938', // Dark neutral-violet tone\n\t\t\tpattern: '#763a8b', // Retained existing pattern color\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#9e00ee',\n\t\t\t\tp3: 'color(display-p3 0.5651 0.0079 0.8986)',\n\t\t\t},\n\t\t},\n\t\tyellow: {\n\t\t\tsolid: '#ffc034',\n\t\t\tfill: '#ffc034',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#684e12', // Darker, muted variant of solid\n\t\t\t\theadingFill: '#2a2113', // Rich, muted dark-yellow background\n\t\t\t\tstroke: '#684e12', // Matches headingStroke\n\t\t\t\tfill: '#1e1911', // Darker muted shade for background fill\n\t\t\t\ttext: '#f2f2f2', // Bright text color for readability\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#8a5e1c', // Muted, dark complementary variant\n\t\t\t\ttext: '#f2f2f2',\n\t\t\t},\n\t\t\tsemi: '#3b352b', // Dark muted neutral-yellow tone\n\t\t\tpattern: '#fecb92', // Existing shade retained\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#d2b700',\n\t\t\t\tp3: 'color(display-p3 0.8078 0.7225 0.0312)',\n\t\t\t},\n\t\t},\n\t\twhite: {\n\t\t\tsolid: '#f3f3f3',\n\t\t\tfill: '#f3f3f3',\n\t\t\tsemi: '#f5f5f5',\n\t\t\tpattern: '#f9f9f9',\n\t\t\tframe: {\n\t\t\t\theadingStroke: '#ffffff',\n\t\t\t\theadingFill: '#ffffff',\n\t\t\t\tstroke: '#ffffff',\n\t\t\t\tfill: '#ffffff',\n\t\t\t\ttext: '#000000',\n\t\t\t},\n\t\t\tnote: {\n\t\t\t\tfill: '#eaeaea',\n\t\t\t\ttext: '#1d1d1d',\n\t\t\t},\n\t\t\thighlight: {\n\t\t\t\tsrgb: '#ffffff',\n\t\t\t\tp3: 'color(display-p3 1 1 1)',\n\t\t\t},\n\t\t},\n\t},\n}\n\n/** @public */\nexport function getDefaultColorTheme(opts: { isDarkMode: boolean }): TLDefaultColorTheme {\n\treturn opts.isDarkMode ? DefaultColorThemePalette.darkMode : DefaultColorThemePalette.lightMode\n}\n\n/** @public */\nexport const DefaultColorStyle = StyleProp.defineEnum('tldraw:color', {\n\tdefaultValue: 'black',\n\tvalues: defaultColorNames,\n})\n\n/** @public */\nexport const DefaultLabelColorStyle = StyleProp.defineEnum('tldraw:labelColor', {\n\tdefaultValue: 'black',\n\tvalues: defaultColorNames,\n})\n\n/** @public */\nexport type TLDefaultColorStyle = T.TypeOf<typeof DefaultColorStyle>\n"],
|
|
5
|
-
"mappings": "AAEA,SAAS,iBAAiB;AAGnB,MAAM,oBAAoB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD;
|
|
4
|
+
"sourcesContent": ["import { Expand } from '@tldraw/utils'\nimport { T } from '@tldraw/validate'\nimport { StyleProp } from './StyleProp'\n\n/** @public */\nexport const defaultColorNames = [\n\t'black',\n\t'grey',\n\t'light-violet',\n\t'violet',\n\t'blue',\n\t'light-blue',\n\t'yellow',\n\t'orange',\n\t'green',\n\t'light-green',\n\t'light-red',\n\t'red',\n\t'white',\n] as const\n\n/** @public */\nexport interface TLDefaultColorThemeColor {\n\tsolid: string\n\tsemi: string\n\tpattern: string\n\tfill: string // usually same as solid\n\tframeHeadingStroke: string\n\tframeHeadingFill: string\n\tframeStroke: string\n\tframeFill: string\n\tframeText: string\n\tnoteFill: string\n\tnoteText: string\n\thighlightSrgb: string\n\thighlightP3: string\n}\n\n/** @public */\nexport type TLDefaultColorTheme = Expand<\n\t{\n\t\tid: 'light' | 'dark'\n\t\ttext: string\n\t\tbackground: string\n\t\tsolid: string\n\t} & Record<(typeof defaultColorNames)[number], TLDefaultColorThemeColor>\n>\n\n/** @public */\nexport const DefaultColorThemePalette: {\n\tlightMode: TLDefaultColorTheme\n\tdarkMode: TLDefaultColorTheme\n} = {\n\tlightMode: {\n\t\tid: 'light',\n\t\ttext: '#000000',\n\t\tbackground: '#f9fafb',\n\t\tsolid: '#fcfffe',\n\t\tblack: {\n\t\t\tsolid: '#1d1d1d',\n\t\t\tfill: '#1d1d1d',\n\t\t\tframeHeadingStroke: '#717171',\n\t\t\tframeHeadingFill: '#ffffff',\n\t\t\tframeStroke: '#717171',\n\t\t\tframeFill: '#ffffff',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#FCE19C',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#e8e8e8',\n\t\t\tpattern: '#494949',\n\t\t\thighlightSrgb: '#fddd00',\n\t\t\thighlightP3: 'color(display-p3 0.972 0.8205 0.05)',\n\t\t},\n\t\tblue: {\n\t\t\tsolid: '#4465e9',\n\t\t\tfill: '#4465e9',\n\t\t\tframeHeadingStroke: '#6681ec',\n\t\t\tframeHeadingFill: '#f9fafe',\n\t\t\tframeStroke: '#6681ec',\n\t\t\tframeFill: '#f9fafe',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#8AA3FF',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#dce1f8',\n\t\t\tpattern: '#6681ee',\n\t\t\thighlightSrgb: '#10acff',\n\t\t\thighlightP3: 'color(display-p3 0.308 0.6632 0.9996)',\n\t\t},\n\t\tgreen: {\n\t\t\tsolid: '#099268',\n\t\t\tfill: '#099268',\n\t\t\tframeHeadingStroke: '#37a684',\n\t\t\tframeHeadingFill: '#f8fcfa',\n\t\t\tframeStroke: '#37a684',\n\t\t\tframeFill: '#f8fcfa',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#6FC896',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#d3e9e3',\n\t\t\tpattern: '#39a785',\n\t\t\thighlightSrgb: '#00ffc8',\n\t\t\thighlightP3: 'color(display-p3 0.2536 0.984 0.7981)',\n\t\t},\n\t\tgrey: {\n\t\t\tsolid: '#9fa8b2',\n\t\t\tfill: '#9fa8b2',\n\t\t\tframeHeadingStroke: '#aaaaab',\n\t\t\tframeHeadingFill: '#fbfcfc',\n\t\t\tframeStroke: '#aaaaab',\n\t\t\tframeFill: '#fcfcfd',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#C0CAD3',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#eceef0',\n\t\t\tpattern: '#bcc3c9',\n\t\t\thighlightSrgb: '#cbe7f1',\n\t\t\thighlightP3: 'color(display-p3 0.8163 0.9023 0.9416)',\n\t\t},\n\t\t'light-blue': {\n\t\t\tsolid: '#4ba1f1',\n\t\t\tfill: '#4ba1f1',\n\t\t\tframeHeadingStroke: '#6cb2f3',\n\t\t\tframeHeadingFill: '#f8fbfe',\n\t\t\tframeStroke: '#6cb2f3',\n\t\t\tframeFill: '#fafcff',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#9BC4FD',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#ddedfa',\n\t\t\tpattern: '#6fbbf8',\n\t\t\thighlightSrgb: '#00f4ff',\n\t\t\thighlightP3: 'color(display-p3 0.1512 0.9414 0.9996)',\n\t\t},\n\t\t'light-green': {\n\t\t\tsolid: '#4cb05e',\n\t\t\tfill: '#4cb05e',\n\t\t\tframeHeadingStroke: '#6dbe7c',\n\t\t\tframeHeadingFill: '#f8fcf9',\n\t\t\tframeStroke: '#6dbe7c',\n\t\t\tframeFill: '#fafdfa',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#98D08A',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#dbf0e0',\n\t\t\tpattern: '#65cb78',\n\t\t\thighlightSrgb: '#65f641',\n\t\t\thighlightP3: 'color(display-p3 0.563 0.9495 0.3857)',\n\t\t},\n\t\t'light-red': {\n\t\t\tsolid: '#f87777',\n\t\t\tfill: '#f87777',\n\t\t\tframeHeadingStroke: '#f89090',\n\t\t\tframeHeadingFill: '#fffafa',\n\t\t\tframeStroke: '#f89090',\n\t\t\tframeFill: '#fffbfb',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#F7A5A1',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#f4dadb',\n\t\t\tpattern: '#fe9e9e',\n\t\t\thighlightSrgb: '#ff7fa3',\n\t\t\thighlightP3: 'color(display-p3 0.9988 0.5301 0.6397)',\n\t\t},\n\t\t'light-violet': {\n\t\t\tsolid: '#e085f4',\n\t\t\tfill: '#e085f4',\n\t\t\tframeHeadingStroke: '#e59bf5',\n\t\t\tframeHeadingFill: '#fefaff',\n\t\t\tframeStroke: '#e59bf5',\n\t\t\tframeFill: '#fefbff',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#DFB0F9',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#f5eafa',\n\t\t\tpattern: '#e9acf8',\n\t\t\thighlightSrgb: '#ff88ff',\n\t\t\thighlightP3: 'color(display-p3 0.9676 0.5652 0.9999)',\n\t\t},\n\t\torange: {\n\t\t\tsolid: '#e16919',\n\t\t\tfill: '#e16919',\n\t\t\tframeHeadingStroke: '#e68544',\n\t\t\tframeHeadingFill: '#fef9f6',\n\t\t\tframeStroke: '#e68544',\n\t\t\tframeFill: '#fef9f6',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#FAA475',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#f8e2d4',\n\t\t\tpattern: '#f78438',\n\t\t\thighlightSrgb: '#ffa500',\n\t\t\thighlightP3: 'color(display-p3 0.9988 0.6905 0.266)',\n\t\t},\n\t\tred: {\n\t\t\tsolid: '#e03131',\n\t\t\tfill: '#e03131',\n\t\t\tframeHeadingStroke: '#e55757',\n\t\t\tframeHeadingFill: '#fef7f7',\n\t\t\tframeStroke: '#e55757',\n\t\t\tframeFill: '#fef9f9',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#FC8282',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#f4dadb',\n\t\t\tpattern: '#e55959',\n\t\t\thighlightSrgb: '#ff636e',\n\t\t\thighlightP3: 'color(display-p3 0.9992 0.4376 0.45)',\n\t\t},\n\t\tviolet: {\n\t\t\tsolid: '#ae3ec9',\n\t\t\tfill: '#ae3ec9',\n\t\t\tframeHeadingStroke: '#bc62d3',\n\t\t\tframeHeadingFill: '#fcf7fd',\n\t\t\tframeStroke: '#bc62d3',\n\t\t\tframeFill: '#fdf9fd',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#DB91FD',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#ecdcf2',\n\t\t\tpattern: '#bd63d3',\n\t\t\thighlightSrgb: '#c77cff',\n\t\t\thighlightP3: 'color(display-p3 0.7469 0.5089 0.9995)',\n\t\t},\n\t\tyellow: {\n\t\t\tsolid: '#f1ac4b',\n\t\t\tfill: '#f1ac4b',\n\t\t\tframeHeadingStroke: '#f3bb6c',\n\t\t\tframeHeadingFill: '#fefcf8',\n\t\t\tframeStroke: '#f3bb6c',\n\t\t\tframeFill: '#fffdfa',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#FED49A',\n\t\t\tnoteText: '#000000',\n\t\t\tsemi: '#f9f0e6',\n\t\t\tpattern: '#fecb92',\n\t\t\thighlightSrgb: '#fddd00',\n\t\t\thighlightP3: 'color(display-p3 0.972 0.8705 0.05)',\n\t\t},\n\t\twhite: {\n\t\t\tsolid: '#FFFFFF',\n\t\t\tfill: '#FFFFFF',\n\t\t\tsemi: '#f5f5f5',\n\t\t\tpattern: '#f9f9f9',\n\t\t\tframeHeadingStroke: '#7d7d7d',\n\t\t\tframeHeadingFill: '#ffffff',\n\t\t\tframeStroke: '#7d7d7d',\n\t\t\tframeFill: '#ffffff',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#FFFFFF',\n\t\t\tnoteText: '#000000',\n\t\t\thighlightSrgb: '#ffffff',\n\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t},\n\t},\n\tdarkMode: {\n\t\tid: 'dark',\n\t\ttext: 'hsl(210, 17%, 98%)',\n\t\tbackground: 'hsl(240, 5%, 6.5%)',\n\t\tsolid: '#010403',\n\n\t\tblack: {\n\t\t\tsolid: '#f2f2f2',\n\t\t\tfill: '#f2f2f2',\n\t\t\tframeHeadingStroke: '#5c5c5c',\n\t\t\tframeHeadingFill: '#252525',\n\t\t\tframeStroke: '#5c5c5c',\n\t\t\tframeFill: '#0c0c0c',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#2c2c2c',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#2c3036',\n\t\t\tpattern: '#989898',\n\t\t\thighlightSrgb: '#d2b700',\n\t\t\thighlightP3: 'color(display-p3 0.8078 0.6225 0.0312)',\n\t\t},\n\t\tblue: {\n\t\t\tsolid: '#4f72fc', // 3c60f0\n\t\t\tfill: '#4f72fc',\n\t\t\tframeHeadingStroke: '#384994',\n\t\t\tframeHeadingFill: '#1C2036',\n\t\t\tframeStroke: '#384994',\n\t\t\tframeFill: '#11141f',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#2A3F98',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#262d40',\n\t\t\tpattern: '#3a4b9e',\n\t\t\thighlightSrgb: '#0079d2',\n\t\t\thighlightP3: 'color(display-p3 0.0032 0.4655 0.7991)',\n\t\t},\n\t\tgreen: {\n\t\t\tsolid: '#099268',\n\t\t\tfill: '#099268',\n\t\t\tframeHeadingStroke: '#10513C',\n\t\t\tframeHeadingFill: '#14241f',\n\t\t\tframeStroke: '#10513C',\n\t\t\tframeFill: '#0E1614',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#014429',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#253231',\n\t\t\tpattern: '#366a53',\n\t\t\thighlightSrgb: '#009774',\n\t\t\thighlightP3: 'color(display-p3 0.0085 0.582 0.4604)',\n\t\t},\n\t\tgrey: {\n\t\t\tsolid: '#9398b0',\n\t\t\tfill: '#9398b0',\n\t\t\tframeHeadingStroke: '#42474D',\n\t\t\tframeHeadingFill: '#23262A',\n\t\t\tframeStroke: '#42474D',\n\t\t\tframeFill: '#151719',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#56595F',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#33373c',\n\t\t\tpattern: '#7c8187',\n\t\t\thighlightSrgb: '#9cb4cb',\n\t\t\thighlightP3: 'color(display-p3 0.6299 0.7012 0.7856)',\n\t\t},\n\t\t'light-blue': {\n\t\t\tsolid: '#4dabf7',\n\t\t\tfill: '#4dabf7',\n\t\t\tframeHeadingStroke: '#075797',\n\t\t\tframeHeadingFill: '#142839',\n\t\t\tframeStroke: '#075797',\n\t\t\tframeFill: '#0B1823',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#1F5495',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#2a3642',\n\t\t\tpattern: '#4d7aa9',\n\t\t\thighlightSrgb: '#00bdc8',\n\t\t\thighlightP3: 'color(display-p3 0.0023 0.7259 0.7735)',\n\t\t},\n\t\t'light-green': {\n\t\t\tsolid: '#40c057',\n\t\t\tfill: '#40c057',\n\t\t\tframeHeadingStroke: '#1C5427',\n\t\t\tframeHeadingFill: '#18251A',\n\t\t\tframeStroke: '#1C5427',\n\t\t\tframeFill: '#0F1911',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#21581D',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#2a3830',\n\t\t\tpattern: '#4e874e',\n\t\t\thighlightSrgb: '#00a000',\n\t\t\thighlightP3: 'color(display-p3 0.2711 0.6172 0.0195)',\n\t\t},\n\t\t'light-red': {\n\t\t\tsolid: '#ff8787',\n\t\t\tfill: '#ff8787',\n\t\t\tframeHeadingStroke: '#6f3232', // Darker and desaturated variant of solid\n\t\t\tframeHeadingFill: '#341818', // Deep, muted dark red\n\t\t\tframeStroke: '#6f3232', // Matches headingStroke\n\t\t\tframeFill: '#181212', // Darker, muted background shade\n\t\t\tframeText: '#f2f2f2', // Consistent bright text color\n\t\t\tnoteFill: '#7a3333', // Medium-dark, muted variant of solid\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#3c2b2b', // Subdued, darker neutral-red tone\n\t\t\tpattern: '#a56767', // Existing pattern shade retained\n\t\t\thighlightSrgb: '#db005b',\n\t\t\thighlightP3: 'color(display-p3 0.7849 0.0585 0.3589)',\n\t\t},\n\t\t'light-violet': {\n\t\t\tsolid: '#e599f7',\n\t\t\tfill: '#e599f7',\n\t\t\tframeHeadingStroke: '#6c367a',\n\t\t\tframeHeadingFill: '#2D2230',\n\t\t\tframeStroke: '#6c367a',\n\t\t\tframeFill: '#1C151E',\n\t\t\tframeText: '#f2f2f2',\n\t\t\tnoteFill: '#762F8E',\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#383442',\n\t\t\tpattern: '#9770a9',\n\t\t\thighlightSrgb: '#c400c7',\n\t\t\thighlightP3: 'color(display-p3 0.7024 0.0403 0.753)',\n\t\t},\n\t\torange: {\n\t\t\tsolid: '#f76707',\n\t\t\tfill: '#f76707',\n\t\t\tframeHeadingStroke: '#773a0e', // Darker, muted version of solid\n\t\t\tframeHeadingFill: '#2f1d13', // Deep, warm, muted background\n\t\t\tframeStroke: '#773a0e', // Matches headingStroke\n\t\t\tframeFill: '#1c1512', // Darker, richer muted background\n\t\t\tframeText: '#f2f2f2', // Bright text for contrast\n\t\t\tnoteFill: '#7c3905', // Muted dark variant for note fill\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#3b2e27', // Muted neutral-orange tone\n\t\t\tpattern: '#9f552d', // Retained existing shade\n\t\t\thighlightSrgb: '#d07a00',\n\t\t\thighlightP3: 'color(display-p3 0.7699 0.4937 0.0085)',\n\t\t},\n\t\tred: {\n\t\t\tsolid: '#e03131',\n\t\t\tfill: '#e03131',\n\t\t\tframeHeadingStroke: '#701e1e', // Darker, muted variation of solid\n\t\t\tframeHeadingFill: '#301616', // Deep, muted reddish backdrop\n\t\t\tframeStroke: '#701e1e', // Matches headingStroke\n\t\t\tframeFill: '#1b1313', // Rich, dark muted background\n\t\t\tframeText: '#f2f2f2', // Bright text for readability\n\t\t\tnoteFill: '#7e201f', // Muted dark variant for note fill\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#382726', // Dark neutral-red tone\n\t\t\tpattern: '#8f3734', // Existing pattern color retained\n\t\t\thighlightSrgb: '#de002c',\n\t\t\thighlightP3: 'color(display-p3 0.7978 0.0509 0.2035)',\n\t\t},\n\t\tviolet: {\n\t\t\tsolid: '#ae3ec9',\n\t\t\tfill: '#ae3ec9',\n\t\t\tframeHeadingStroke: '#6d1583', // Darker, muted variation of solid\n\t\t\tframeHeadingFill: '#27152e', // Deep, rich muted violet backdrop\n\t\t\tframeStroke: '#6d1583', // Matches headingStroke\n\t\t\tframeFill: '#1b0f21', // Darker muted violet background\n\t\t\tframeText: '#f2f2f2', // Consistent bright text color\n\t\t\tnoteFill: '#5f1c70', // Muted dark variant for note fill\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#342938', // Dark neutral-violet tone\n\t\t\tpattern: '#763a8b', // Retained existing pattern color\n\t\t\thighlightSrgb: '#9e00ee',\n\t\t\thighlightP3: 'color(display-p3 0.5651 0.0079 0.8986)',\n\t\t},\n\t\tyellow: {\n\t\t\tsolid: '#ffc034',\n\t\t\tfill: '#ffc034',\n\t\t\tframeHeadingStroke: '#684e12', // Darker, muted variant of solid\n\t\t\tframeHeadingFill: '#2a2113', // Rich, muted dark-yellow background\n\t\t\tframeStroke: '#684e12', // Matches headingStroke\n\t\t\tframeFill: '#1e1911', // Darker muted shade for background fill\n\t\t\tframeText: '#f2f2f2', // Bright text color for readability\n\t\t\tnoteFill: '#8a5e1c', // Muted, dark complementary variant\n\t\t\tnoteText: '#f2f2f2',\n\t\t\tsemi: '#3b352b', // Dark muted neutral-yellow tone\n\t\t\tpattern: '#fecb92', // Existing shade retained\n\t\t\thighlightSrgb: '#d2b700',\n\t\t\thighlightP3: 'color(display-p3 0.8078 0.7225 0.0312)',\n\t\t},\n\t\twhite: {\n\t\t\tsolid: '#f3f3f3',\n\t\t\tfill: '#f3f3f3',\n\t\t\tsemi: '#f5f5f5',\n\t\t\tpattern: '#f9f9f9',\n\t\t\tframeHeadingStroke: '#ffffff',\n\t\t\tframeHeadingFill: '#ffffff',\n\t\t\tframeStroke: '#ffffff',\n\t\t\tframeFill: '#ffffff',\n\t\t\tframeText: '#000000',\n\t\t\tnoteFill: '#eaeaea',\n\t\t\tnoteText: '#1d1d1d',\n\t\t\thighlightSrgb: '#ffffff',\n\t\t\thighlightP3: 'color(display-p3 1 1 1)',\n\t\t},\n\t},\n}\n\n/** @public */\nexport function getDefaultColorTheme(opts: { isDarkMode: boolean }): TLDefaultColorTheme {\n\treturn opts.isDarkMode ? DefaultColorThemePalette.darkMode : DefaultColorThemePalette.lightMode\n}\n\n/** @public */\nexport const DefaultColorStyle = StyleProp.defineEnum('tldraw:color', {\n\tdefaultValue: 'black',\n\tvalues: defaultColorNames,\n})\n\n/** @public */\nexport const DefaultLabelColorStyle = StyleProp.defineEnum('tldraw:labelColor', {\n\tdefaultValue: 'black',\n\tvalues: defaultColorNames,\n})\n\n/** @public */\nexport type TLDefaultColorStyle = T.TypeOf<typeof DefaultColorStyle>\n\nconst defaultColorNamesSet = new Set(defaultColorNames)\n\n/** @public */\nexport function isDefaultThemeColor(\n\tcolor: TLDefaultColorStyle\n): color is (typeof defaultColorNames)[number] {\n\treturn defaultColorNamesSet.has(color as (typeof defaultColorNames)[number])\n}\n\n/** @public */\nexport function getColorValue(\n\ttheme: TLDefaultColorTheme,\n\tcolor: TLDefaultColorStyle,\n\tvariant: keyof TLDefaultColorThemeColor\n): string {\n\tif (!isDefaultThemeColor(color)) {\n\t\treturn color\n\t}\n\n\treturn theme[color][variant]\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tldraw/tlschema",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "3.16.0-internal.
|
|
3
|
+
"description": "tldraw infinite canvas SDK (schema).",
|
|
4
|
+
"version": "3.16.0-internal.f8b97f0c414f",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "tldraw Inc.",
|
|
7
7
|
"email": "hello@tldraw.com"
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
},
|
|
18
18
|
"keywords": [
|
|
19
19
|
"tldraw",
|
|
20
|
+
"sdk",
|
|
20
21
|
"drawing",
|
|
21
22
|
"app",
|
|
22
23
|
"development",
|
|
@@ -31,33 +32,29 @@
|
|
|
31
32
|
"src"
|
|
32
33
|
],
|
|
33
34
|
"scripts": {
|
|
34
|
-
"test-ci": "
|
|
35
|
-
"test": "yarn run -T
|
|
36
|
-
"test-coverage": "
|
|
35
|
+
"test-ci": "yarn run -T vitest run --passWithNoTests",
|
|
36
|
+
"test": "yarn run -T vitest --passWithNoTests",
|
|
37
|
+
"test-coverage": "yarn run -T vitest run --coverage --passWithNoTests",
|
|
37
38
|
"format": "yarn run -T prettier --write --cache \"src/**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
38
39
|
"build": "yarn run -T tsx ../../internal/scripts/build-package.ts",
|
|
39
40
|
"build-api": "yarn run -T tsx ../../internal/scripts/build-api.ts",
|
|
40
41
|
"prepack": "yarn run -T tsx ../../internal/scripts/prepack.ts",
|
|
41
42
|
"postpack": "../../internal/scripts/postpack.sh",
|
|
42
43
|
"pack-tarball": "yarn pack",
|
|
43
|
-
"lint": "yarn run -T tsx ../../internal/scripts/lint.ts"
|
|
44
|
+
"lint": "yarn run -T tsx ../../internal/scripts/lint.ts",
|
|
45
|
+
"context": "yarn run -T tsx ../../internal/scripts/context.ts"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
46
48
|
"kleur": "^4.1.5",
|
|
47
49
|
"lazyrepo": "0.0.0-alpha.27",
|
|
48
|
-
"react": "^18.3.1"
|
|
49
|
-
|
|
50
|
-
"jest": {
|
|
51
|
-
"preset": "../../internal/config/jest/node/jest-preset.js",
|
|
52
|
-
"moduleNameMapper": {
|
|
53
|
-
"^~(.*)": "<rootDir>/src/$1"
|
|
54
|
-
}
|
|
50
|
+
"react": "^18.3.1",
|
|
51
|
+
"vitest": "^3.2.4"
|
|
55
52
|
},
|
|
56
53
|
"dependencies": {
|
|
57
|
-
"@tldraw/state": "3.16.0-internal.
|
|
58
|
-
"@tldraw/store": "3.16.0-internal.
|
|
59
|
-
"@tldraw/utils": "3.16.0-internal.
|
|
60
|
-
"@tldraw/validate": "3.16.0-internal.
|
|
54
|
+
"@tldraw/state": "3.16.0-internal.f8b97f0c414f",
|
|
55
|
+
"@tldraw/store": "3.16.0-internal.f8b97f0c414f",
|
|
56
|
+
"@tldraw/utils": "3.16.0-internal.f8b97f0c414f",
|
|
57
|
+
"@tldraw/validate": "3.16.0-internal.f8b97f0c414f"
|
|
61
58
|
},
|
|
62
59
|
"peerDependencies": {
|
|
63
60
|
"react": "^18.2.0 || ^19.0.0",
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Migration, MigrationId } from '@tldraw/store'
|
|
2
2
|
import { mockUniqueId, structuredClone } from '@tldraw/utils'
|
|
3
|
+
import { vi } from 'vitest'
|
|
3
4
|
import { createTLSchema } from '../createTLSchema'
|
|
4
5
|
|
|
5
6
|
let nextNanoId = 0
|
|
@@ -9,9 +10,9 @@ export const testSchema = createTLSchema()
|
|
|
9
10
|
|
|
10
11
|
// mock all migrator fns
|
|
11
12
|
for (const migration of testSchema.sortedMigrations) {
|
|
12
|
-
;(migration as any).up =
|
|
13
|
+
;(migration as any).up = vi.fn(migration.up as any)
|
|
13
14
|
if (typeof migration.down === 'function') {
|
|
14
|
-
;(migration as any).down =
|
|
15
|
+
;(migration as any).down = vi.fn(migration.down as any)
|
|
15
16
|
}
|
|
16
17
|
}
|
|
17
18
|
|
package/src/index.ts
CHANGED
|
@@ -114,6 +114,7 @@ export {
|
|
|
114
114
|
isShape,
|
|
115
115
|
isShapeId,
|
|
116
116
|
rootShapeMigrations,
|
|
117
|
+
type GlobalShapePropsMap,
|
|
117
118
|
type TLDefaultShape,
|
|
118
119
|
type TLParentId,
|
|
119
120
|
type TLShape,
|
|
@@ -230,6 +231,7 @@ export {
|
|
|
230
231
|
defaultColorNames,
|
|
231
232
|
DefaultColorStyle,
|
|
232
233
|
DefaultColorThemePalette,
|
|
234
|
+
getColorValue,
|
|
233
235
|
getDefaultColorTheme,
|
|
234
236
|
type TLDefaultColorStyle,
|
|
235
237
|
type TLDefaultColorTheme,
|
package/src/migrations.test.ts
CHANGED
|
@@ -227,6 +227,50 @@ describe('Store removing Icon and Code shapes', () => {
|
|
|
227
227
|
})
|
|
228
228
|
})
|
|
229
229
|
|
|
230
|
+
describe('Fixing index keys', () => {
|
|
231
|
+
const { up, down } = getTestMigration(storeVersions.FixIndexKeys)
|
|
232
|
+
test('up works as expected', () => {
|
|
233
|
+
const snapshot = [
|
|
234
|
+
ShapeRecord.create({
|
|
235
|
+
type: 'shape',
|
|
236
|
+
id: 'shape:1',
|
|
237
|
+
parentId: 'page:any',
|
|
238
|
+
index: 'a0',
|
|
239
|
+
} as any),
|
|
240
|
+
ShapeRecord.create({
|
|
241
|
+
type: 'shape',
|
|
242
|
+
id: 'shape:2',
|
|
243
|
+
parentId: 'page:any',
|
|
244
|
+
index: 'a00',
|
|
245
|
+
} as any),
|
|
246
|
+
ShapeRecord.create({
|
|
247
|
+
type: 'shape',
|
|
248
|
+
id: 'shape:3',
|
|
249
|
+
parentId: 'page:any',
|
|
250
|
+
index: 'a111',
|
|
251
|
+
} as any),
|
|
252
|
+
]
|
|
253
|
+
const fixed = snapshot.map((shape) => up(shape))
|
|
254
|
+
expect(fixed.find((s) => s.id === 'shape:1')?.index).toBe('a0')
|
|
255
|
+
expect(fixed.find((s) => s.id === 'shape:2')?.index).not.toBe('a00')
|
|
256
|
+
expect(fixed.find((s) => s.id === 'shape:2')?.index).toMatch(/^a0[1-9A-Za-z]{3}$/)
|
|
257
|
+
expect(fixed.find((s) => s.id === 'shape:3')?.index).toBe('a111')
|
|
258
|
+
})
|
|
259
|
+
|
|
260
|
+
test('down works as expected', () => {
|
|
261
|
+
const snapshot = [
|
|
262
|
+
ShapeRecord.create({
|
|
263
|
+
type: 'shape',
|
|
264
|
+
id: 'shape:1',
|
|
265
|
+
parentId: 'page:any',
|
|
266
|
+
index: 'a00',
|
|
267
|
+
} as any),
|
|
268
|
+
]
|
|
269
|
+
const unchanged = snapshot.map((shape) => down(shape))
|
|
270
|
+
expect(unchanged.find((s) => s.id === 'shape:1')?.index).toBe('a00')
|
|
271
|
+
})
|
|
272
|
+
})
|
|
273
|
+
|
|
230
274
|
describe('Adding export background', () => {
|
|
231
275
|
const { up } = getTestMigration(instanceVersions.AddTransparentExportBgs)
|
|
232
276
|
test('up works as expected', () => {
|
|
@@ -1385,6 +1429,7 @@ describe('Add rich text', () => {
|
|
|
1385
1429
|
['text shape', getTestMigration(textShapeVersions.AddRichText)],
|
|
1386
1430
|
['geo shape', getTestMigration(geoShapeVersions.AddRichText)],
|
|
1387
1431
|
['note shape', getTestMigration(noteShapeVersions.AddRichText)],
|
|
1432
|
+
['arrow shape', getTestMigration(arrowShapeVersions.AddRichText)],
|
|
1388
1433
|
] as const
|
|
1389
1434
|
|
|
1390
1435
|
for (const [shapeName, { up }] of migrations) {
|
package/src/records/TLShape.ts
CHANGED
|
@@ -52,12 +52,16 @@ export type TLDefaultShape =
|
|
|
52
52
|
* @public */
|
|
53
53
|
export type TLUnknownShape = TLBaseShape<string, object>
|
|
54
54
|
|
|
55
|
+
/** @public */
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
57
|
+
export interface GlobalShapePropsMap {}
|
|
58
|
+
|
|
55
59
|
/**
|
|
56
60
|
* The set of all shapes that are available in the editor, including unknown shapes.
|
|
57
61
|
*
|
|
58
62
|
* @public
|
|
59
63
|
*/
|
|
60
|
-
export type TLShape = TLDefaultShape |
|
|
64
|
+
export type TLShape = TLDefaultShape | GlobalShapePropsMap[keyof GlobalShapePropsMap]
|
|
61
65
|
|
|
62
66
|
/** @public */
|
|
63
67
|
export type TLShapePartial<T extends TLShape = TLShape> = T extends T
|
|
@@ -70,7 +74,7 @@ export type TLShapePartial<T extends TLShape = TLShape> = T extends T
|
|
|
70
74
|
: never
|
|
71
75
|
|
|
72
76
|
/** @public */
|
|
73
|
-
export type TLShapeId = RecordId<
|
|
77
|
+
export type TLShapeId = RecordId<TLShape>
|
|
74
78
|
|
|
75
79
|
/** @public */
|
|
76
80
|
export type TLParentId = TLPageId | TLShapeId
|
|
@@ -81,7 +85,7 @@ export const rootShapeVersions = createMigrationIds('com.tldraw.shape', {
|
|
|
81
85
|
HoistOpacity: 2,
|
|
82
86
|
AddMeta: 3,
|
|
83
87
|
AddWhite: 4,
|
|
84
|
-
}
|
|
88
|
+
})
|
|
85
89
|
|
|
86
90
|
/** @public */
|
|
87
91
|
export const rootShapeMigrations = createRecordMigrationSequence({
|
|
@@ -202,7 +206,7 @@ export function createShapeRecordType(shapes: Record<string, SchemaPropsInfo>) {
|
|
|
202
206
|
createShapeValidator(type, props, meta)
|
|
203
207
|
)
|
|
204
208
|
)
|
|
205
|
-
),
|
|
209
|
+
) as any,
|
|
206
210
|
}).withDefaultProperties(() => ({
|
|
207
211
|
x: 0,
|
|
208
212
|
y: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { VecModel } from '../misc/geometry-types'
|
|
2
|
-
import {
|
|
2
|
+
import { TLShape } from '../records/TLShape'
|
|
3
3
|
|
|
4
4
|
/** @public */
|
|
5
5
|
export interface TLShapeCrop {
|
|
@@ -9,4 +9,7 @@ export interface TLShapeCrop {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
/** @public */
|
|
12
|
-
export type ShapeWithCrop =
|
|
12
|
+
export type ShapeWithCrop = Extract<
|
|
13
|
+
TLShape,
|
|
14
|
+
{ props: { w: number; h: number; crop: TLShapeCrop | null } }
|
|
15
|
+
>
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createMigrationSequence } from '@tldraw/store'
|
|
2
2
|
import { T } from '@tldraw/validate'
|
|
3
|
+
import { TLRichText, richTextValidator, toRichText } from '../misc/TLRichText'
|
|
3
4
|
import { VecModel, vecModelValidator } from '../misc/geometry-types'
|
|
4
5
|
import { createBindingId } from '../records/TLBinding'
|
|
5
6
|
import { TLShapeId, createShapePropsMigrationIds } from '../records/TLShape'
|
|
@@ -67,7 +68,7 @@ export interface TLArrowShapeProps {
|
|
|
67
68
|
start: VecModel
|
|
68
69
|
end: VecModel
|
|
69
70
|
bend: number
|
|
70
|
-
|
|
71
|
+
richText: TLRichText
|
|
71
72
|
labelPosition: number
|
|
72
73
|
scale: number
|
|
73
74
|
elbowMidPoint: number
|
|
@@ -90,7 +91,7 @@ export const arrowShapeProps: RecordProps<TLArrowShape> = {
|
|
|
90
91
|
start: vecModelValidator,
|
|
91
92
|
end: vecModelValidator,
|
|
92
93
|
bend: T.number,
|
|
93
|
-
|
|
94
|
+
richText: richTextValidator,
|
|
94
95
|
labelPosition: T.number,
|
|
95
96
|
scale: T.nonZeroNumber,
|
|
96
97
|
elbowMidPoint: T.number,
|
|
@@ -104,6 +105,7 @@ export const arrowShapeVersions = createShapePropsMigrationIds('arrow', {
|
|
|
104
105
|
ExtractBindings: 4,
|
|
105
106
|
AddScale: 5,
|
|
106
107
|
AddElbow: 6,
|
|
108
|
+
AddRichText: 7,
|
|
107
109
|
})
|
|
108
110
|
|
|
109
111
|
function propsMigration(migration: TLPropsMigration) {
|
|
@@ -254,5 +256,16 @@ export const arrowShapeMigrations = createMigrationSequence({
|
|
|
254
256
|
delete props.elbowMidPoint
|
|
255
257
|
},
|
|
256
258
|
}),
|
|
259
|
+
propsMigration({
|
|
260
|
+
id: arrowShapeVersions.AddRichText,
|
|
261
|
+
up: (props) => {
|
|
262
|
+
props.richText = toRichText(props.text)
|
|
263
|
+
delete props.text
|
|
264
|
+
},
|
|
265
|
+
// N.B. Explicitly no down state so that we force clients to update.
|
|
266
|
+
// down: (props) => {
|
|
267
|
+
// delete props.richText
|
|
268
|
+
// },
|
|
269
|
+
}),
|
|
257
270
|
],
|
|
258
271
|
})
|
package/src/store-migrations.ts
CHANGED
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { createMigrationIds, createMigrationSequence } from '@tldraw/store'
|
|
2
|
-
import { objectMapEntries } from '@tldraw/utils'
|
|
2
|
+
import { IndexKey, objectMapEntries } from '@tldraw/utils'
|
|
3
|
+
import { TLPage } from './records/TLPage'
|
|
3
4
|
import { TLShape } from './records/TLShape'
|
|
5
|
+
import { TLLineShape } from './shapes/TLLineShape'
|
|
4
6
|
|
|
5
7
|
const Versions = createMigrationIds('com.tldraw.store', {
|
|
6
8
|
RemoveCodeAndIconShapeTypes: 1,
|
|
7
9
|
AddInstancePresenceType: 2,
|
|
8
10
|
RemoveTLUserAndPresenceAndAddPointer: 3,
|
|
9
11
|
RemoveUserDocument: 4,
|
|
12
|
+
FixIndexKeys: 5,
|
|
10
13
|
} as const)
|
|
11
14
|
|
|
12
15
|
export { Versions as storeVersions }
|
|
@@ -23,7 +26,8 @@ export const storeMigrations = createMigrationSequence({
|
|
|
23
26
|
for (const [id, record] of objectMapEntries(store)) {
|
|
24
27
|
if (
|
|
25
28
|
record.typeName === 'shape' &&
|
|
26
|
-
|
|
29
|
+
'type' in record &&
|
|
30
|
+
(record.type === 'icon' || record.type === 'code')
|
|
27
31
|
) {
|
|
28
32
|
delete store[id]
|
|
29
33
|
}
|
|
@@ -63,5 +67,44 @@ export const storeMigrations = createMigrationSequence({
|
|
|
63
67
|
}
|
|
64
68
|
},
|
|
65
69
|
},
|
|
70
|
+
{
|
|
71
|
+
id: Versions.FixIndexKeys,
|
|
72
|
+
scope: 'record',
|
|
73
|
+
up: (record) => {
|
|
74
|
+
if (['shape', 'page'].includes(record.typeName) && 'index' in record) {
|
|
75
|
+
const recordWithIndex = record as TLShape | TLPage
|
|
76
|
+
// Our newer fractional indexed library (more correctly) validates that indices
|
|
77
|
+
// do not end with 0. ('a0' being an exception)
|
|
78
|
+
if (recordWithIndex.index.endsWith('0') && recordWithIndex.index !== 'a0') {
|
|
79
|
+
recordWithIndex.index = (recordWithIndex.index.slice(0, -1) +
|
|
80
|
+
getNRandomBase62Digits(3)) as IndexKey
|
|
81
|
+
}
|
|
82
|
+
// Line shapes have 'points' that have indices as well.
|
|
83
|
+
if (record.typeName === 'shape' && (recordWithIndex as TLShape).type === 'line') {
|
|
84
|
+
const lineShape = recordWithIndex as TLLineShape
|
|
85
|
+
for (const [_, point] of objectMapEntries(lineShape.props.points)) {
|
|
86
|
+
if (point.index.endsWith('0') && point.index !== 'a0') {
|
|
87
|
+
point.index = (point.index.slice(0, -1) + getNRandomBase62Digits(3)) as IndexKey
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
down: () => {
|
|
94
|
+
// noop
|
|
95
|
+
// Enables tlsync to support older clients so as to not force people to refresh immediately after deploying.
|
|
96
|
+
},
|
|
97
|
+
},
|
|
66
98
|
],
|
|
67
99
|
})
|
|
100
|
+
|
|
101
|
+
const BASE_62_DIGITS_WITHOUT_ZERO = '123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
|
|
102
|
+
const getRandomBase62Digit = () => {
|
|
103
|
+
return BASE_62_DIGITS_WITHOUT_ZERO.charAt(
|
|
104
|
+
Math.floor(Math.random() * BASE_62_DIGITS_WITHOUT_ZERO.length)
|
|
105
|
+
)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const getNRandomBase62Digits = (n: number) => {
|
|
109
|
+
return Array.from({ length: n }, getRandomBase62Digit).join('')
|
|
110
|
+
}
|