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