@lmb-it/kitsconcerto-native 0.1.286 → 0.1.288

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.
@@ -1207,111 +1207,189 @@ const defaultTheme = {
1207
1207
  // same rule `Input.inputGroup` carries: React Native's ViewStyle wants
1208
1208
  // `borderWidth: 1`, web treats the bare `1` as `1px`, and one shared
1209
1209
  // declaration then renders the same frame on both.
1210
+ /* ─── ImageCropper ────────────────────────────────────────
1211
+ ⛔ EVERY NUMBER HERE IS MEASURED OFF THE MOCKUP,
1212
+ `UML/UI/ClientPortal/AlphaMatch - Image Cropper.dc.html`, which is
1213
+ the design source for this component. Changing one of them is a
1214
+ design change, not a tidy-up — check the mockup first.
1215
+
1216
+ ⚠️ THE STAGE AND ITS CHROME DO NOT INVERT WITH THE COLOUR MODE. A
1217
+ photograph has to read against the stage in light mode and dark
1218
+ mode alike, so the dark surfaces below are literals and the alpha
1219
+ families (literal in both modes by construction) carry the rest.
1220
+ The light chrome — header, footer, card — goes through tokens. */
1210
1221
  ImageCropper: {
1211
1222
  root: {
1212
1223
  style: {
1213
1224
  backgroundColor: "surface-card",
1214
- borderRadius: 16,
1225
+ borderRadius: 20,
1215
1226
  overflow: "hidden"
1227
+ /* ⚠️ THE CARD'S DROP SHADOW IS NOT HERE. On web
1228
+ `IStyleClasses` types `shadowColor`/`shadowOpacity`/
1229
+ `shadowRadius`/`shadowOffset`/`elevation` as `null` —
1230
+ they are the NATIVE spelling, and putting them in a slot
1231
+ is a type error in the web project (the `handle` slot
1232
+ below is the pre-existing instance of exactly that).
1233
+ Each platform file applies the mockup's
1234
+ `0 24px 64px rgba(0,0,0,.35)` in its own spelling:
1235
+ `boxShadow` on web, `shadow*` on native. */
1216
1236
  }
1217
1237
  },
1218
1238
  header: {
1219
1239
  style: {
1220
- paddingLeft: 16,
1221
- paddingRight: 16,
1222
- paddingTop: 12,
1223
- paddingBottom: 12,
1240
+ paddingLeft: 24,
1241
+ paddingRight: 24,
1242
+ paddingTop: 18,
1243
+ paddingBottom: 18,
1224
1244
  borderBottomWidth: 1,
1225
- borderColor: "border"
1245
+ borderColor: "#F0F1F3",
1246
+ gap: 12
1226
1247
  }
1227
1248
  },
1228
1249
  title: {
1229
- style: { fontSize: 16, fontWeight: "600", fontColor: "text-primary" }
1250
+ style: {
1251
+ fontSize: 17,
1252
+ fontWeight: "800",
1253
+ fontColor: "text-primary",
1254
+ /* ⚠️ A STRING WITH UNITS. `letterSpacing` is typed
1255
+ `LetterSpacing<0 | (string & {})>`, so a bare -0.17 does
1256
+ not compile — and the mockup writes `-.01em` anyway. */
1257
+ letterSpacing: "-0.01em"
1258
+ }
1230
1259
  },
1231
1260
  content: {
1232
- style: { padding: 16, gap: 12 }
1261
+ style: {
1262
+ paddingLeft: 24,
1263
+ paddingRight: 24,
1264
+ paddingTop: 22,
1265
+ paddingBottom: 22,
1266
+ /* The mockup's left column: stage, then the tool row, 14 apart. */
1267
+ gap: 14
1268
+ }
1233
1269
  },
1234
1270
  /* The stage. Dark on purpose: a photo reads against it in either
1235
1271
  colour mode, and a light stage makes every pale image look like
1236
1272
  it has no edges. */
1237
1273
  container: {
1238
1274
  style: {
1239
- backgroundColor: "black-alpha-90",
1240
- borderRadius: 12,
1275
+ backgroundColor: "#0E1A1C",
1276
+ borderRadius: 14,
1241
1277
  overflow: "hidden"
1242
1278
  }
1243
1279
  },
1244
1280
  footer: {
1245
1281
  style: {
1246
- paddingLeft: 16,
1247
- paddingRight: 16,
1248
- paddingTop: 12,
1249
- paddingBottom: 12,
1282
+ paddingLeft: 24,
1283
+ paddingRight: 24,
1284
+ paddingTop: 14,
1285
+ paddingBottom: 14,
1250
1286
  borderTopWidth: 1,
1251
- borderColor: "border",
1252
- gap: 8
1287
+ borderColor: "#F0F1F3",
1288
+ gap: 10
1253
1289
  }
1254
1290
  },
1255
- icon: { style: { fontColor: "text-primary" } },
1256
- text: { style: { fontSize: 12, fontColor: "text-secondary" } },
1291
+ icon: { style: { fontColor: "#6B7280" } },
1292
+ text: { style: { fontSize: 12.5, fontColor: "#9CA3AF" } },
1257
1293
  /* ⛔ THE SCRIM IS AN ALPHA TOKEN, NOT A SOLID. `black-alpha-*` is
1258
- literal in both colour modes — a scrim that inverted in dark mode
1259
- would light UP the area the user is cropping away. */
1260
- shade: { style: { backgroundColor: "black-alpha-60" } },
1294
+ literal in both colour modes — a scrim that inverted in dark mode
1295
+ would light UP the area the user is cropping away.
1296
+
1297
+ ⚠️ 0.66, NOT 0.74. The mockup uses two different dims and they
1298
+ are not interchangeable: 0.66 is the scrim around the window,
1299
+ 0.74 is the full-stage overlay while saving. */
1300
+ shade: { style: { backgroundColor: "rgba(6,14,16,0.66)" } },
1261
1301
  cropWindow: { style: { borderWidth: 2, borderColor: "#FFFFFF" } },
1262
- gridLine: { style: { backgroundColor: "white-alpha-40" } },
1302
+ gridLine: { style: { backgroundColor: "white-alpha-50" } },
1303
+ /* ⚠️ A ROUND KNOB WITH A TEAL RING, not a bare square. Against a
1304
+ photo a flat white square disappears into any pale area; the ring
1305
+ and the drop shadow are what keep a grip findable on a bright
1306
+ image, and the mockup draws the ring in the accent so a grip
1307
+ never reads as part of the picture.
1308
+
1309
+ ⚠️ THE SIZE HERE IS THE CORNER KNOB'S. The four EDGE grips are
1310
+ bars, not circles — the platform files size those from
1311
+ `HANDLE_BAR_LONG` / `HANDLE_BAR_SHORT`, because one slot cannot
1312
+ carry two shapes. */
1263
1313
  handle: {
1264
1314
  style: {
1265
1315
  backgroundColor: "#FFFFFF",
1266
- borderRadius: 2,
1267
- width: 14,
1268
- height: 14
1316
+ borderRadius: 999,
1317
+ width: 16,
1318
+ height: 16,
1319
+ borderWidth: 3,
1320
+ borderColor: "#20AAB0"
1321
+ /* ⛔ NO `shadow*`/`elevation` HERE, AND THIS IS THE ONE THAT
1322
+ BROKE A RELEASE. They are the NATIVE spelling; on web
1323
+ `IStyleClasses` types all five as `null`, so they are a
1324
+ type ERROR — and `packages/types` is built with
1325
+ `tsc -p tsconfig.web.json`, an EMITTING build that
1326
+ `publish.yml` runs as its first step and that must exit
1327
+ zero. Five keys here failed that step and the release
1328
+ never reached npm.
1329
+ The grip's drop shadow is applied by the platform file
1330
+ instead: `boxShadow` in `index.web.tsx`. Native renders
1331
+ no grips at all — it fixes the window and moves the
1332
+ image — so there is nothing to spell there. */
1269
1333
  }
1270
1334
  },
1271
1335
  zoomChip: {
1272
1336
  style: {
1273
1337
  backgroundColor: "black-alpha-60",
1274
1338
  fontColor: "#FFFFFF",
1275
- borderRadius: 999,
1339
+ borderRadius: 13,
1276
1340
  paddingLeft: 10,
1277
1341
  paddingRight: 10,
1278
- paddingTop: 2,
1279
- paddingBottom: 2,
1280
- fontSize: 12,
1281
- fontWeight: "600"
1342
+ height: 26,
1343
+ fontSize: 11.5,
1344
+ fontWeight: "700"
1282
1345
  }
1283
1346
  },
1347
+ /* The mockup rings the preview in white and floats it, rather than
1348
+ outlining it — an outline on a photo reads as part of the photo. */
1284
1349
  previewFrame: {
1285
1350
  style: {
1286
- borderWidth: 1,
1287
- borderColor: "border",
1351
+ borderWidth: 4,
1352
+ borderColor: "#FFFFFF",
1288
1353
  borderRadius: 12,
1289
1354
  overflow: "hidden",
1290
- backgroundColor: "bg-subtle"
1355
+ backgroundColor: "#E5E7EB"
1356
+ /* The float — `0 4px 14px rgba(0,0,0,.14)` — is applied by
1357
+ each platform file, for the reason given on `root`. */
1291
1358
  }
1292
1359
  },
1360
+ /* ⛔ THE DROP TARGET LIVES ON THE STAGE, NOT INSTEAD OF IT. It used
1361
+ to be a light box that replaced the dark stage entirely, so
1362
+ choosing a photo made the whole component change colour. The
1363
+ mockup keeps the stage and insets a dashed frame inside it. */
1293
1364
  dropZone: {
1294
1365
  style: {
1295
- borderWidth: 1,
1366
+ borderWidth: 1.5,
1296
1367
  borderStyle: "dashed",
1297
- borderColor: "border-strong",
1298
- borderRadius: 12,
1299
- backgroundColor: "bg-subtle",
1300
- padding: 24
1368
+ borderColor: "white-alpha-20",
1369
+ borderRadius: 14,
1370
+ backgroundColor: "#0E1A1C",
1371
+ padding: 20,
1372
+ gap: 9
1301
1373
  }
1302
1374
  },
1303
- progressFill: { style: { backgroundColor: "primary", height: 4 } },
1375
+ progressFill: { style: { backgroundColor: "#20AAB0", height: 5, borderRadius: 999 } },
1304
1376
  /* ⛔ THE SHAPE SLOT, AND IT CARRIES THE *RECTANGLE'S* RADIUS. The
1305
- circle is NOT a 999 pill set here — `maskShape: 'circle'` makes
1306
- the component use a true 50%, because a pill radius on a window
1307
- that is wider than it is tall gives a STADIUM, not a circle.
1308
- That is exactly what shipped for one render of the 16:9 cover
1309
- story: 999 leaked out of this slot into the rectangle case and
1310
- drew a lozenge. What belongs here is the corner rounding a
1311
- RECTANGULAR window should have; the circle overrides it. */
1312
- mask: { style: { borderRadius: 12 } },
1313
- track: { style: { backgroundColor: "bg-accent", borderRadius: 999, height: 4 } },
1314
- thumb: { style: { backgroundColor: "primary", borderRadius: 999 } }
1377
+ circle is NOT a 999 pill set here — `maskShape: 'circle'` makes
1378
+ the component use a true 50%, because a pill radius on a window
1379
+ that is wider than it is tall gives a STADIUM, not a circle.
1380
+ That is exactly what shipped for one render of the 16:9 cover
1381
+ story: 999 leaked out of this slot into the rectangle case and
1382
+ drew a lozenge. What belongs here is the corner rounding a
1383
+ RECTANGULAR window should have; the circle overrides it.
1384
+
1385
+ ⚠️ 3, NOT 12 — the mockup's cover window is very nearly square
1386
+ cornered, because a banner crop with 12px corners does not match
1387
+ the banner it is cropped for. */
1388
+ mask: { style: { borderRadius: 3 } },
1389
+ /* The zoom rail sits on the dark stage on a phone, so its unfilled
1390
+ half is a white alpha rather than a surface token. */
1391
+ track: { style: { backgroundColor: "white-alpha-20", borderRadius: 999, height: 4 } },
1392
+ thumb: { style: { backgroundColor: "#20AAB0", borderRadius: 999 } }
1315
1393
  },
1316
1394
  Sidebar: {
1317
1395
  root: {