@dixy-ui/themes 0.1.0-beta.3 → 0.1.0-beta.4

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 (91) hide show
  1. package/dist/ansi-panes.css +74 -5
  2. package/dist/arcade/ornament.d.ts +3 -0
  3. package/dist/arcade/ornament.js +8 -0
  4. package/dist/arcade-cabinet.css +1086 -0
  5. package/dist/art-deco.css +74 -5
  6. package/dist/atomic-lounge.css +78 -5
  7. package/dist/authoring.d.ts +8 -8
  8. package/dist/azulejo-tile.css +78 -5
  9. package/dist/blueprint.css +74 -5
  10. package/dist/brutalist-concrete.css +78 -5
  11. package/dist/bytes.json +97 -62
  12. package/dist/candy-clay.css +80 -5
  13. package/dist/catalog.d.ts +294 -0
  14. package/dist/catalog.js +301 -0
  15. package/dist/character.d.ts +1 -1
  16. package/dist/character.js +6 -0
  17. package/dist/chrome.js +13 -3
  18. package/dist/compile-css.js +22 -5
  19. package/dist/dispatch.css +731 -0
  20. package/dist/diwali-lights.css +78 -5
  21. package/dist/documents.d.ts +115 -7
  22. package/dist/documents.js +10 -2
  23. package/dist/foundations.d.ts +8 -0
  24. package/dist/foundations.js +10 -0
  25. package/dist/frame-styles.d.ts +3 -0
  26. package/dist/frame-styles.js +6 -0
  27. package/dist/freighter.css +140 -15
  28. package/dist/glass-ui.css +74 -5
  29. package/dist/holi-colours.css +78 -5
  30. package/dist/ledger.css +566 -0
  31. package/dist/living-forest.css +80 -5
  32. package/dist/mainframe.css +764 -0
  33. package/dist/manifests.d.ts +144 -144
  34. package/dist/material-light.css +78 -5
  35. package/dist/neon-night-market.css +78 -5
  36. package/dist/ocean-depths.css +80 -5
  37. package/dist/orbital-hud.css +140 -15
  38. package/dist/organic-paint-launch.d.ts +9 -0
  39. package/dist/organic-paint-launch.js +121 -46
  40. package/dist/organic-paint.d.ts +1 -1
  41. package/dist/organic-settings.d.ts +109 -25
  42. package/dist/organic-settings.js +49 -0
  43. package/dist/papel-picado.css +78 -5
  44. package/dist/phosphor-terminal.css +78 -5
  45. package/dist/prism-glass.css +74 -5
  46. package/dist/recipes.d.ts +162 -0
  47. package/dist/recipes.js +164 -0
  48. package/dist/resolve.d.ts +18 -2
  49. package/dist/retro-os.css +74 -5
  50. package/dist/riso-zine.css +74 -5
  51. package/dist/save-point.css +948 -0
  52. package/dist/savepoint/ornament.d.ts +3 -0
  53. package/dist/savepoint/ornament.js +8 -0
  54. package/dist/scrapbook.css +74 -5
  55. package/dist/signal.css +563 -0
  56. package/dist/skins/arcade-cabinet.d.ts +68 -0
  57. package/dist/skins/arcade-cabinet.js +68 -0
  58. package/dist/skins/dispatch.d.ts +57 -0
  59. package/dist/skins/dispatch.js +57 -0
  60. package/dist/skins/ledger.d.ts +57 -0
  61. package/dist/skins/ledger.js +57 -0
  62. package/dist/skins/mainframe.d.ts +57 -0
  63. package/dist/skins/mainframe.js +57 -0
  64. package/dist/skins/save-point.d.ts +68 -0
  65. package/dist/skins/save-point.js +68 -0
  66. package/dist/skins/signal.d.ts +57 -0
  67. package/dist/skins/signal.js +57 -0
  68. package/dist/skins/sunset-drive.d.ts +68 -0
  69. package/dist/skins/sunset-drive.js +68 -0
  70. package/dist/solar-sail.css +74 -5
  71. package/dist/starters-launch.d.ts +24 -0
  72. package/dist/starters-launch.js +343 -0
  73. package/dist/studio-hardware.css +78 -5
  74. package/dist/sumi-ink.css +74 -5
  75. package/dist/sunset/ornament.d.ts +3 -0
  76. package/dist/sunset/ornament.js +8 -0
  77. package/dist/sunset-drive.css +1024 -0
  78. package/dist/swiss-poster.css +144 -15
  79. package/dist/tactile-atelier.css +80 -5
  80. package/dist/theme-document.schema.json +34 -6
  81. package/dist/theme-fix.d.ts +11 -0
  82. package/dist/theme-fix.js +32 -0
  83. package/dist/theme-fixes.d.ts +2 -0
  84. package/dist/theme-fixes.js +1 -0
  85. package/dist/theme-schema.d.ts +6 -6
  86. package/dist/theme-schema.js +2 -0
  87. package/dist/tokyo-transit.css +78 -5
  88. package/dist/winamp-signal.css +78 -5
  89. package/dist/y2k-titanium.css +146 -15
  90. package/dist/yule-knit.css +74 -5
  91. package/package.json +50 -3
package/dist/catalog.d.ts CHANGED
@@ -1300,5 +1300,299 @@ export declare const skinCatalog: readonly [{
1300
1300
  readonly material: "glossy";
1301
1301
  };
1302
1302
  readonly rendererSymbol: "GlassOrnament";
1303
+ }, {
1304
+ readonly id: "dixy/sunset-drive";
1305
+ readonly slug: "sunset-drive";
1306
+ readonly symbol: "sunsetDrive";
1307
+ readonly name: "Sunset Drive";
1308
+ readonly description: "Cruise the coast.";
1309
+ readonly detail: "80s coastal neon: a striped sun, a horizon grid and pink light.";
1310
+ readonly swatches: readonly ["#ff4fa3", "#ffb347", "#1b0b30"];
1311
+ readonly voice: {
1312
+ readonly eyebrow: "COAST HIGHWAY · 1986";
1313
+ readonly headline: "Cruise the coast.";
1314
+ readonly body: "Pink skies, palm shadows and a long drive home.";
1315
+ readonly primary: "Drive";
1316
+ readonly secondary: "Park it";
1317
+ };
1318
+ readonly appearance: "dark";
1319
+ readonly bodyFont: "figtree";
1320
+ readonly headingFont: "neon";
1321
+ readonly border: 1;
1322
+ readonly depth: "floating";
1323
+ readonly defaults: {
1324
+ readonly componentFinish: "inherit";
1325
+ readonly customAccent: false;
1326
+ readonly lightness: 0.54;
1327
+ readonly chroma: 0.2;
1328
+ readonly hue: 305;
1329
+ readonly density: "default";
1330
+ readonly ornament: "balanced";
1331
+ readonly relief: 1;
1332
+ readonly effects: "static";
1333
+ readonly accentColor: "pink";
1334
+ readonly neutralColor: "mauve";
1335
+ readonly radius: "lg";
1336
+ readonly shape: "pill";
1337
+ readonly appearance: "dark";
1338
+ readonly bodyFont: "figtree";
1339
+ readonly headingFont: "neon";
1340
+ readonly border: 1;
1341
+ readonly depth: "floating";
1342
+ readonly material: "glossy";
1343
+ };
1344
+ readonly rendererSymbol: "SunsetOrnament";
1345
+ }, {
1346
+ readonly id: "dixy/save-point";
1347
+ readonly slug: "save-point";
1348
+ readonly symbol: "savePoint";
1349
+ readonly name: "Save Point";
1350
+ readonly description: "Rest here?";
1351
+ readonly detail: "1994 menu windows: blue panels, white double borders, a blinking cursor.";
1352
+ readonly swatches: readonly ["#2b44b8", "#ffe066", "#05081c"];
1353
+ readonly voice: {
1354
+ readonly eyebrow: "CHAPTER 3 · SAVE POINT";
1355
+ readonly headline: "Rest here?";
1356
+ readonly body: "Your progress is safe. The party is ready when you are.";
1357
+ readonly primary: "Save";
1358
+ readonly secondary: "Continue";
1359
+ };
1360
+ readonly appearance: "dark";
1361
+ readonly bodyFont: "terminal";
1362
+ readonly headingFont: "pixel";
1363
+ readonly border: 2;
1364
+ readonly depth: "raised";
1365
+ readonly defaults: {
1366
+ readonly componentFinish: "inherit";
1367
+ readonly customAccent: false;
1368
+ readonly lightness: 0.54;
1369
+ readonly chroma: 0.2;
1370
+ readonly hue: 305;
1371
+ readonly density: "default";
1372
+ readonly ornament: "balanced";
1373
+ readonly relief: 1;
1374
+ readonly effects: "static";
1375
+ readonly accentColor: "yellow";
1376
+ readonly neutralColor: "slate";
1377
+ readonly radius: "sm";
1378
+ readonly shape: "rounded";
1379
+ readonly appearance: "dark";
1380
+ readonly bodyFont: "terminal";
1381
+ readonly headingFont: "pixel";
1382
+ readonly border: 2;
1383
+ readonly depth: "raised";
1384
+ readonly material: "matte";
1385
+ };
1386
+ readonly rendererSymbol: "SavePointOrnament";
1387
+ }, {
1388
+ readonly id: "dixy/arcade-cabinet";
1389
+ readonly slug: "arcade-cabinet";
1390
+ readonly symbol: "arcadeCabinet";
1391
+ readonly name: "Arcade Cabinet";
1392
+ readonly description: "Insert coin.";
1393
+ readonly detail: "Scanlines, chunky pixels, hard red shadows and marquee bulbs.";
1394
+ readonly swatches: readonly ["#ff3b3b", "#ffd400", "#050505"];
1395
+ readonly voice: {
1396
+ readonly eyebrow: "1UP · HI 042000";
1397
+ readonly headline: "Insert coin.";
1398
+ readonly body: "Three lives. One high score. No continues.";
1399
+ readonly primary: "Start";
1400
+ readonly secondary: "Quit";
1401
+ };
1402
+ readonly appearance: "dark";
1403
+ readonly bodyFont: "terminal";
1404
+ readonly headingFont: "pixel";
1405
+ readonly border: 2;
1406
+ readonly depth: "raised";
1407
+ readonly defaults: {
1408
+ readonly componentFinish: "inherit";
1409
+ readonly customAccent: false;
1410
+ readonly lightness: 0.54;
1411
+ readonly chroma: 0.2;
1412
+ readonly hue: 305;
1413
+ readonly density: "default";
1414
+ readonly ornament: "balanced";
1415
+ readonly relief: 1;
1416
+ readonly effects: "static";
1417
+ readonly accentColor: "red";
1418
+ readonly neutralColor: "neutral";
1419
+ readonly radius: "none";
1420
+ readonly shape: "square";
1421
+ readonly appearance: "dark";
1422
+ readonly bodyFont: "terminal";
1423
+ readonly headingFont: "pixel";
1424
+ readonly border: 2;
1425
+ readonly depth: "raised";
1426
+ readonly material: "matte";
1427
+ };
1428
+ readonly rendererSymbol: "ArcadeOrnament";
1429
+ }, {
1430
+ readonly id: "dixy/ledger";
1431
+ readonly slug: "ledger";
1432
+ readonly symbol: "ledger";
1433
+ readonly name: "Ledger";
1434
+ readonly description: "Cash position";
1435
+ readonly detail: "A quiet working theme: hairline rules, tabular figures, one green accent and faint ledger columns.";
1436
+ readonly swatches: readonly ["#0b6e4f", "#fbfbf9", "#16181d"];
1437
+ readonly voice: {
1438
+ readonly eyebrow: "Q3 · TREASURY";
1439
+ readonly headline: "Cash position";
1440
+ readonly body: "Balances reconcile nightly. Figures in USD thousands.";
1441
+ readonly primary: "Export CSV";
1442
+ readonly secondary: "Filters";
1443
+ };
1444
+ readonly appearance: "light";
1445
+ readonly bodyFont: "inter";
1446
+ readonly headingFont: "plex";
1447
+ readonly border: 1;
1448
+ readonly depth: "raised";
1449
+ readonly defaults: {
1450
+ readonly componentFinish: "inherit";
1451
+ readonly customAccent: false;
1452
+ readonly lightness: 0.54;
1453
+ readonly chroma: 0.2;
1454
+ readonly hue: 305;
1455
+ readonly density: "default";
1456
+ readonly ornament: "balanced";
1457
+ readonly relief: 1;
1458
+ readonly effects: "static";
1459
+ readonly accentColor: "jade";
1460
+ readonly neutralColor: "gray";
1461
+ readonly radius: "sm";
1462
+ readonly shape: "rounded";
1463
+ readonly appearance: "light";
1464
+ readonly bodyFont: "inter";
1465
+ readonly headingFont: "plex";
1466
+ readonly border: 1;
1467
+ readonly depth: "raised";
1468
+ readonly material: "matte";
1469
+ };
1470
+ readonly rendererSymbol: null;
1471
+ }, {
1472
+ readonly id: "dixy/mainframe";
1473
+ readonly slug: "mainframe";
1474
+ readonly symbol: "mainframe";
1475
+ readonly name: "Mainframe";
1476
+ readonly description: "Shipments";
1477
+ readonly detail: "A square enterprise grid: flat grey layers instead of shadows, one blue, dense 40px rows.";
1478
+ readonly swatches: readonly ["#0f5fd9", "#f4f4f4", "#161616"];
1479
+ readonly voice: {
1480
+ readonly eyebrow: "OPERATIONS / SHIPMENTS";
1481
+ readonly headline: "Shipments";
1482
+ readonly body: "1,284 active across 38 carriers. Updated two minutes ago.";
1483
+ readonly primary: "New shipment";
1484
+ readonly secondary: "Export";
1485
+ };
1486
+ readonly appearance: "light";
1487
+ readonly bodyFont: "plexSans";
1488
+ readonly headingFont: "plexSans";
1489
+ readonly border: 1;
1490
+ readonly depth: "none";
1491
+ readonly defaults: {
1492
+ readonly componentFinish: "inherit";
1493
+ readonly customAccent: false;
1494
+ readonly lightness: 0.54;
1495
+ readonly chroma: 0.2;
1496
+ readonly hue: 305;
1497
+ readonly density: "default";
1498
+ readonly ornament: "balanced";
1499
+ readonly relief: 1;
1500
+ readonly effects: "static";
1501
+ readonly accentColor: "blue";
1502
+ readonly neutralColor: "neutral";
1503
+ readonly radius: "none";
1504
+ readonly shape: "square";
1505
+ readonly appearance: "light";
1506
+ readonly bodyFont: "plexSans";
1507
+ readonly headingFont: "plexSans";
1508
+ readonly border: 1;
1509
+ readonly depth: "none";
1510
+ readonly material: "matte";
1511
+ };
1512
+ readonly rendererSymbol: null;
1513
+ }, {
1514
+ readonly id: "dixy/dispatch";
1515
+ readonly slug: "dispatch";
1516
+ readonly symbol: "dispatch";
1517
+ readonly name: "Dispatch";
1518
+ readonly description: "Ready when you are";
1519
+ readonly detail: "Black and white, bold type and pill controls. Colour is kept for status.";
1520
+ readonly swatches: readonly ["#000000", "#ffffff", "#eeeeee"];
1521
+ readonly voice: {
1522
+ readonly eyebrow: "LIVE · 842 IN TRANSIT";
1523
+ readonly headline: "Ready when you are";
1524
+ readonly body: "Every route, driver and delivery in one place. Colour only means something.";
1525
+ readonly primary: "New shipment";
1526
+ readonly secondary: "Export";
1527
+ };
1528
+ readonly appearance: "light";
1529
+ readonly bodyFont: "inter";
1530
+ readonly headingFont: "inter";
1531
+ readonly border: 1;
1532
+ readonly depth: "raised";
1533
+ readonly defaults: {
1534
+ readonly componentFinish: "inherit";
1535
+ readonly customAccent: false;
1536
+ readonly lightness: 0.54;
1537
+ readonly chroma: 0.2;
1538
+ readonly hue: 305;
1539
+ readonly density: "default";
1540
+ readonly ornament: "balanced";
1541
+ readonly relief: 1;
1542
+ readonly effects: "static";
1543
+ readonly accentColor: "neutral";
1544
+ readonly neutralColor: "neutral";
1545
+ readonly radius: "lg";
1546
+ readonly shape: "pill";
1547
+ readonly appearance: "light";
1548
+ readonly bodyFont: "inter";
1549
+ readonly headingFont: "inter";
1550
+ readonly border: 1;
1551
+ readonly depth: "raised";
1552
+ readonly material: "matte";
1553
+ };
1554
+ readonly rendererSymbol: null;
1555
+ }, {
1556
+ readonly id: "dixy/signal";
1557
+ readonly slug: "signal";
1558
+ readonly symbol: "signal";
1559
+ readonly name: "Signal";
1560
+ readonly description: "Make it easier to read";
1561
+ readonly detail: "High contrast, accessibility first: 2px edges, 44px targets, a thick focus ring with a yellow halo, no textures or ornament.";
1562
+ readonly swatches: readonly ["#000000", "#ffffff", "#ffbf00"];
1563
+ readonly voice: {
1564
+ readonly eyebrow: "SETTINGS · DISPLAY";
1565
+ readonly headline: "Make it easier to read";
1566
+ readonly body: "Clear type, strong edges and focus you can always see.";
1567
+ readonly primary: "Save changes";
1568
+ readonly secondary: "Cancel";
1569
+ };
1570
+ readonly appearance: "light";
1571
+ readonly bodyFont: "atkinson";
1572
+ readonly headingFont: "atkinson";
1573
+ readonly border: 2;
1574
+ readonly depth: "none";
1575
+ readonly defaults: {
1576
+ readonly componentFinish: "inherit";
1577
+ readonly customAccent: false;
1578
+ readonly lightness: 0.54;
1579
+ readonly chroma: 0.2;
1580
+ readonly hue: 305;
1581
+ readonly density: "default";
1582
+ readonly ornament: "balanced";
1583
+ readonly relief: 1;
1584
+ readonly effects: "static";
1585
+ readonly accentColor: "blue";
1586
+ readonly neutralColor: "neutral";
1587
+ readonly radius: "sm";
1588
+ readonly shape: "rounded";
1589
+ readonly appearance: "light";
1590
+ readonly bodyFont: "atkinson";
1591
+ readonly headingFont: "atkinson";
1592
+ readonly border: 2;
1593
+ readonly depth: "none";
1594
+ readonly material: "matte";
1595
+ };
1596
+ readonly rendererSymbol: null;
1303
1597
  }];
1304
1598
  export type BuiltInSkinId = (typeof skinCatalog)[number]["id"];
package/dist/catalog.js CHANGED
@@ -1333,4 +1333,305 @@ export const skinCatalog = [
1333
1333
  },
1334
1334
  rendererSymbol: "GlassOrnament",
1335
1335
  },
1336
+ {
1337
+ id: "dixy/sunset-drive",
1338
+ slug: "sunset-drive",
1339
+ symbol: "sunsetDrive",
1340
+ name: "Sunset Drive",
1341
+ description: "Cruise the coast.",
1342
+ detail: "80s coastal neon: a striped sun, a horizon grid and pink light.",
1343
+ swatches: ["#ff4fa3", "#ffb347", "#1b0b30"],
1344
+ voice: {
1345
+ eyebrow: "COAST HIGHWAY · 1986",
1346
+ headline: "Cruise the coast.",
1347
+ body: "Pink skies, palm shadows and a long drive home.",
1348
+ primary: "Drive",
1349
+ secondary: "Park it",
1350
+ },
1351
+ appearance: "dark",
1352
+ bodyFont: "figtree",
1353
+ headingFont: "neon",
1354
+ border: 1,
1355
+ depth: "floating",
1356
+ defaults: {
1357
+ componentFinish: "inherit",
1358
+ customAccent: false,
1359
+ lightness: 0.54,
1360
+ chroma: 0.2,
1361
+ hue: 305,
1362
+ density: "default",
1363
+ ornament: "balanced",
1364
+ relief: 1,
1365
+ effects: "static",
1366
+ accentColor: "pink",
1367
+ neutralColor: "mauve",
1368
+ radius: "lg",
1369
+ shape: "pill",
1370
+ appearance: "dark",
1371
+ bodyFont: "figtree",
1372
+ headingFont: "neon",
1373
+ border: 1,
1374
+ depth: "floating",
1375
+ material: "glossy",
1376
+ },
1377
+ rendererSymbol: "SunsetOrnament",
1378
+ },
1379
+ {
1380
+ id: "dixy/save-point",
1381
+ slug: "save-point",
1382
+ symbol: "savePoint",
1383
+ name: "Save Point",
1384
+ description: "Rest here?",
1385
+ detail: "1994 menu windows: blue panels, white double borders, a blinking cursor.",
1386
+ swatches: ["#2b44b8", "#ffe066", "#05081c"],
1387
+ voice: {
1388
+ eyebrow: "CHAPTER 3 · SAVE POINT",
1389
+ headline: "Rest here?",
1390
+ body: "Your progress is safe. The party is ready when you are.",
1391
+ primary: "Save",
1392
+ secondary: "Continue",
1393
+ },
1394
+ appearance: "dark",
1395
+ bodyFont: "terminal",
1396
+ headingFont: "pixel",
1397
+ border: 2,
1398
+ depth: "raised",
1399
+ defaults: {
1400
+ componentFinish: "inherit",
1401
+ customAccent: false,
1402
+ lightness: 0.54,
1403
+ chroma: 0.2,
1404
+ hue: 305,
1405
+ density: "default",
1406
+ ornament: "balanced",
1407
+ relief: 1,
1408
+ effects: "static",
1409
+ accentColor: "yellow",
1410
+ neutralColor: "slate",
1411
+ radius: "sm",
1412
+ shape: "rounded",
1413
+ appearance: "dark",
1414
+ bodyFont: "terminal",
1415
+ headingFont: "pixel",
1416
+ border: 2,
1417
+ depth: "raised",
1418
+ material: "matte",
1419
+ },
1420
+ rendererSymbol: "SavePointOrnament",
1421
+ },
1422
+ {
1423
+ id: "dixy/arcade-cabinet",
1424
+ slug: "arcade-cabinet",
1425
+ symbol: "arcadeCabinet",
1426
+ name: "Arcade Cabinet",
1427
+ description: "Insert coin.",
1428
+ detail: "Scanlines, chunky pixels, hard red shadows and marquee bulbs.",
1429
+ swatches: ["#ff3b3b", "#ffd400", "#050505"],
1430
+ voice: {
1431
+ eyebrow: "1UP · HI 042000",
1432
+ headline: "Insert coin.",
1433
+ body: "Three lives. One high score. No continues.",
1434
+ primary: "Start",
1435
+ secondary: "Quit",
1436
+ },
1437
+ appearance: "dark",
1438
+ bodyFont: "terminal",
1439
+ headingFont: "pixel",
1440
+ border: 2,
1441
+ depth: "raised",
1442
+ defaults: {
1443
+ componentFinish: "inherit",
1444
+ customAccent: false,
1445
+ lightness: 0.54,
1446
+ chroma: 0.2,
1447
+ hue: 305,
1448
+ density: "default",
1449
+ ornament: "balanced",
1450
+ relief: 1,
1451
+ effects: "static",
1452
+ accentColor: "red",
1453
+ neutralColor: "neutral",
1454
+ radius: "none",
1455
+ shape: "square",
1456
+ appearance: "dark",
1457
+ bodyFont: "terminal",
1458
+ headingFont: "pixel",
1459
+ border: 2,
1460
+ depth: "raised",
1461
+ material: "matte",
1462
+ },
1463
+ rendererSymbol: "ArcadeOrnament",
1464
+ },
1465
+ {
1466
+ id: "dixy/ledger",
1467
+ slug: "ledger",
1468
+ symbol: "ledger",
1469
+ name: "Ledger",
1470
+ description: "Cash position",
1471
+ detail: "A quiet working theme: hairline rules, tabular figures, one green accent and faint ledger columns.",
1472
+ swatches: ["#0b6e4f", "#fbfbf9", "#16181d"],
1473
+ voice: {
1474
+ eyebrow: "Q3 · TREASURY",
1475
+ headline: "Cash position",
1476
+ body: "Balances reconcile nightly. Figures in USD thousands.",
1477
+ primary: "Export CSV",
1478
+ secondary: "Filters",
1479
+ },
1480
+ appearance: "light",
1481
+ bodyFont: "inter",
1482
+ headingFont: "plex",
1483
+ border: 1,
1484
+ depth: "raised",
1485
+ defaults: {
1486
+ componentFinish: "inherit",
1487
+ customAccent: false,
1488
+ lightness: 0.54,
1489
+ chroma: 0.2,
1490
+ hue: 305,
1491
+ density: "default",
1492
+ ornament: "balanced",
1493
+ relief: 1,
1494
+ effects: "static",
1495
+ accentColor: "jade",
1496
+ neutralColor: "gray",
1497
+ radius: "sm",
1498
+ shape: "rounded",
1499
+ appearance: "light",
1500
+ bodyFont: "inter",
1501
+ headingFont: "plex",
1502
+ border: 1,
1503
+ depth: "raised",
1504
+ material: "matte",
1505
+ },
1506
+ rendererSymbol: null,
1507
+ },
1508
+ {
1509
+ id: "dixy/mainframe",
1510
+ slug: "mainframe",
1511
+ symbol: "mainframe",
1512
+ name: "Mainframe",
1513
+ description: "Shipments",
1514
+ detail: "A square enterprise grid: flat grey layers instead of shadows, one blue, dense 40px rows.",
1515
+ swatches: ["#0f5fd9", "#f4f4f4", "#161616"],
1516
+ voice: {
1517
+ eyebrow: "OPERATIONS / SHIPMENTS",
1518
+ headline: "Shipments",
1519
+ body: "1,284 active across 38 carriers. Updated two minutes ago.",
1520
+ primary: "New shipment",
1521
+ secondary: "Export",
1522
+ },
1523
+ appearance: "light",
1524
+ bodyFont: "plexSans",
1525
+ headingFont: "plexSans",
1526
+ border: 1,
1527
+ depth: "none",
1528
+ defaults: {
1529
+ componentFinish: "inherit",
1530
+ customAccent: false,
1531
+ lightness: 0.54,
1532
+ chroma: 0.2,
1533
+ hue: 305,
1534
+ density: "default",
1535
+ ornament: "balanced",
1536
+ relief: 1,
1537
+ effects: "static",
1538
+ accentColor: "blue",
1539
+ neutralColor: "neutral",
1540
+ radius: "none",
1541
+ shape: "square",
1542
+ appearance: "light",
1543
+ bodyFont: "plexSans",
1544
+ headingFont: "plexSans",
1545
+ border: 1,
1546
+ depth: "none",
1547
+ material: "matte",
1548
+ },
1549
+ rendererSymbol: null,
1550
+ },
1551
+ {
1552
+ id: "dixy/dispatch",
1553
+ slug: "dispatch",
1554
+ symbol: "dispatch",
1555
+ name: "Dispatch",
1556
+ description: "Ready when you are",
1557
+ detail: "Black and white, bold type and pill controls. Colour is kept for status.",
1558
+ swatches: ["#000000", "#ffffff", "#eeeeee"],
1559
+ voice: {
1560
+ eyebrow: "LIVE · 842 IN TRANSIT",
1561
+ headline: "Ready when you are",
1562
+ body: "Every route, driver and delivery in one place. Colour only means something.",
1563
+ primary: "New shipment",
1564
+ secondary: "Export",
1565
+ },
1566
+ appearance: "light",
1567
+ bodyFont: "inter",
1568
+ headingFont: "inter",
1569
+ border: 1,
1570
+ depth: "raised",
1571
+ defaults: {
1572
+ componentFinish: "inherit",
1573
+ customAccent: false,
1574
+ lightness: 0.54,
1575
+ chroma: 0.2,
1576
+ hue: 305,
1577
+ density: "default",
1578
+ ornament: "balanced",
1579
+ relief: 1,
1580
+ effects: "static",
1581
+ accentColor: "neutral",
1582
+ neutralColor: "neutral",
1583
+ radius: "lg",
1584
+ shape: "pill",
1585
+ appearance: "light",
1586
+ bodyFont: "inter",
1587
+ headingFont: "inter",
1588
+ border: 1,
1589
+ depth: "raised",
1590
+ material: "matte",
1591
+ },
1592
+ rendererSymbol: null,
1593
+ },
1594
+ {
1595
+ id: "dixy/signal",
1596
+ slug: "signal",
1597
+ symbol: "signal",
1598
+ name: "Signal",
1599
+ description: "Make it easier to read",
1600
+ detail: "High contrast, accessibility first: 2px edges, 44px targets, a thick focus ring with a yellow halo, no textures or ornament.",
1601
+ swatches: ["#000000", "#ffffff", "#ffbf00"],
1602
+ voice: {
1603
+ eyebrow: "SETTINGS · DISPLAY",
1604
+ headline: "Make it easier to read",
1605
+ body: "Clear type, strong edges and focus you can always see.",
1606
+ primary: "Save changes",
1607
+ secondary: "Cancel",
1608
+ },
1609
+ appearance: "light",
1610
+ bodyFont: "atkinson",
1611
+ headingFont: "atkinson",
1612
+ border: 2,
1613
+ depth: "none",
1614
+ defaults: {
1615
+ componentFinish: "inherit",
1616
+ customAccent: false,
1617
+ lightness: 0.54,
1618
+ chroma: 0.2,
1619
+ hue: 305,
1620
+ density: "default",
1621
+ ornament: "balanced",
1622
+ relief: 1,
1623
+ effects: "static",
1624
+ accentColor: "blue",
1625
+ neutralColor: "neutral",
1626
+ radius: "sm",
1627
+ shape: "rounded",
1628
+ appearance: "light",
1629
+ bodyFont: "atkinson",
1630
+ headingFont: "atkinson",
1631
+ border: 2,
1632
+ depth: "none",
1633
+ material: "matte",
1634
+ },
1635
+ rendererSymbol: null,
1636
+ },
1336
1637
  ];
@@ -9,7 +9,7 @@ import { type ThemeChrome } from "./chrome.ts";
9
9
  export declare const controlStyles: readonly ["standard", "botanical", "pixel", "instrument", "hardware", "glass", "stitched", "pearl", "clay", "brass", "chrome", "halo"];
10
10
  export declare const motionStyles: readonly ["standard", "snappy", "stepped", "springy", "weighted", "drift"];
11
11
  export declare const stateStyles: readonly ["standard", "led", "marching", "inlay", "glow", "stamp"];
12
- export declare const focusStyles: readonly ["ring", "double", "dashed", "glow", "offset"];
12
+ export declare const focusStyles: readonly ["ring", "double", "dashed", "glow", "offset", "halo"];
13
13
  export declare const dividerStyles: readonly ["line", "dashed", "dotted", "double", "groove"];
14
14
  export declare const selectionStyles: readonly ["accent", "inverse", "highlighter"];
15
15
  export declare const scrollbarStyles: readonly ["native", "thin", "accent"];
package/dist/character.js CHANGED
@@ -43,6 +43,7 @@ export const focusStyles = [
43
43
  "dashed",
44
44
  "glow",
45
45
  "offset",
46
+ "halo",
46
47
  ];
47
48
  export const dividerStyles = [
48
49
  "line",
@@ -393,6 +394,11 @@ function detailCSS(c, S, theme) {
393
394
  rules.push(`${focus} { outline-width:2px; outline-offset:2px; box-shadow:0 0 0 6px ${mix("var(--dixy-color-border-focus)", 28)}; }`);
394
395
  if (d.focus === "offset")
395
396
  rules.push(`${focus} { outline-width:2px; outline-offset:5px; }`);
397
+ // High-contrast: a solid 3px ring plus a yellow halo outside it, visible on any surface.
398
+ // Skin and material rules set box-shadow at higher specificity (fields at 0,5,0), so the
399
+ // halo is important: a focus indicator has to win over decoration.
400
+ if (d.focus === "halo")
401
+ rules.push(`${focus} { --dixy-focus-halo:0 0 0 8px var(--dixy-color-yellow-9); outline-style:solid; outline-width:3px; outline-offset:2px; box-shadow:var(--dixy-focus-halo) !important; }`);
396
402
  const lines = {
397
403
  dashed: (a) => `repeating-linear-gradient(${a},${EDGE} 0 6px,transparent 6px 10px)`,
398
404
  dotted: (a) => `repeating-linear-gradient(${a},${EDGE} 0 2px,transparent 2px 5px)`,
package/dist/chrome.js CHANGED
@@ -187,9 +187,19 @@ function cornerCSS(style, frame) {
187
187
  return "";
188
188
  case "pixel":
189
189
  return `${frame} { border-radius:0; --dixy-chrome-bar-radius:0px; }`;
190
- case "notched":
191
- // Clip-path also clips outer shadows, so notched windows lean on inset relief.
192
- return `${frame} { border-radius:0; --dixy-chrome-bar-radius:0px; clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px); }`;
190
+ case "notched": {
191
+ // corner-shape draws the border along the bevel (and keeps outer
192
+ // shadows). Without it, clip-path cuts the corners off — border and
193
+ // all — so an overlay redraws the four diagonals in the edge colour.
194
+ const w = "var(--dixy-skin-frame-width,1px)";
195
+ const line = (to) => `linear-gradient(${to},transparent 50%,var(--dixy-skin-edge) 50% calc(50% + ${w}),transparent calc(50% + ${w}))`;
196
+ return `${frame} { border-radius:0; --dixy-chrome-bar-radius:0px; }
197
+ @supports (corner-shape:bevel) { ${frame} { border-radius:10px; corner-shape:bevel; } }
198
+ @supports not (corner-shape:bevel) {
199
+ ${frame} { clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 10px,100% calc(100% - 10px),calc(100% - 10px) 100%,10px 100%,0 calc(100% - 10px),0 10px); }
200
+ ${frame}::after { content:""; position:absolute; inset:calc(${w} * -1); pointer-events:none; z-index:1; background:${line("to bottom right")} top left/10px 10px no-repeat,${line("to bottom left")} top right/10px 10px no-repeat,${line("to top right")} bottom left/10px 10px no-repeat,${line("to top left")} bottom right/10px 10px no-repeat; }
201
+ }`;
202
+ }
193
203
  case "round":
194
204
  return `${frame} { border-radius:16px; --dixy-chrome-bar-radius:13px; }`;
195
205
  }