|
1 | 1 | import * as core from '@spyglassmc/core'
|
| 2 | +import { ColorFormat } from '@spyglassmc/core' |
2 | 3 | import type { JsonPairNode } from '@spyglassmc/json'
|
3 | 4 | import * as json from '@spyglassmc/json'
|
4 | 5 | import { JsonArrayNode, JsonBooleanNode, JsonNode, JsonNumberNode, JsonObjectNode, JsonStringNode } from '@spyglassmc/json'
|
@@ -260,13 +261,23 @@ function EnumHead({ type, optional, excludeStrings, node, ctx }: Props<Simplifie
|
260 | 261 | })
|
261 | 262 | }, [type.enumKind, value, ctx])
|
262 | 263 |
|
263 |
| - return <select value={value === undefined ? SPECIAL_UNSET : value} onInput={(e) => onChangeValue((e.target as HTMLSelectElement).value)}> |
264 |
| - {(value === undefined || optional) && <option value={SPECIAL_UNSET}>{locale('unset')}</option>} |
265 |
| - {(value !== undefined && !type.values.map(v => v.value).includes(value)) && <option value={value}>{value}</option>} |
266 |
| - {type.values.filter(v => !excludeStrings?.includes(v.value.toString())).map(value => |
267 |
| - <option value={value.value}>{formatIdentifier(value.identifier, value.attributes)}</option> |
268 |
| - )} |
269 |
| - </select> |
| 264 | + const color = type.attributes?.find(a => a.name === 'color')?.value |
| 265 | + const colorKind = color?.kind === 'literal' && color.value.kind === 'string' ? color.value.value : undefined |
| 266 | + const nodeColor = node?.color ? (Array.isArray(node.color) ? node.color : node.color.value ) : undefined |
| 267 | + const inputColor = nodeColor ? core.ColorPresentation.fromColorFormat(ColorFormat.HexRGB, nodeColor, core.Range.create(0)).text : undefined |
| 268 | + |
| 269 | + return <> |
| 270 | + <select value={value === undefined ? SPECIAL_UNSET : value} onInput={(e) => onChangeValue((e.target as HTMLSelectElement).value)}> |
| 271 | + {(value === undefined || optional) && <option value={SPECIAL_UNSET}>{locale('unset')}</option>} |
| 272 | + {(value !== undefined && !type.values.map(v => v.value).includes(value)) && <option value={value}>{value}</option>} |
| 273 | + {type.values.filter(v => !excludeStrings?.includes(v.value.toString())).map(value => |
| 274 | + <option value={value.value}>{formatIdentifier(value.identifier, value.attributes)}</option> |
| 275 | + )} |
| 276 | + </select> |
| 277 | + {colorKind === 'named' && nodeColor && <> |
| 278 | + <input class="short-input" type="color" value={inputColor} readonly disabled /> |
| 279 | + </>} |
| 280 | + </> |
270 | 281 | }
|
271 | 282 |
|
272 | 283 | function NumericHead({ type, node, ctx }: Props<NumericType>) {
|
|
0 commit comments