@ibobbyts/svelte-ui-utils 0.2.2 → 0.2.3

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 (37) hide show
  1. package/README.md +50 -17
  2. package/dist/{modal → dialog}/ConfirmDialog.svelte +25 -8
  3. package/dist/{modal → dialog}/ConfirmDialog.svelte.d.ts +11 -2
  4. package/dist/dialog/ConfirmDialog.svelte.d.ts.map +1 -0
  5. package/dist/dialog/CsvUploadDialog.svelte +207 -0
  6. package/dist/dialog/CsvUploadDialog.svelte.d.ts +59 -0
  7. package/dist/dialog/CsvUploadDialog.svelte.d.ts.map +1 -0
  8. package/dist/{modal/Modal.svelte → dialog/Dialog.svelte} +37 -15
  9. package/dist/{modal/Modal.svelte.d.ts → dialog/Dialog.svelte.d.ts} +14 -6
  10. package/dist/dialog/Dialog.svelte.d.ts.map +1 -0
  11. package/dist/dialog/ImagePreviewDialog.svelte +75 -0
  12. package/dist/dialog/ImagePreviewDialog.svelte.d.ts +38 -0
  13. package/dist/dialog/ImagePreviewDialog.svelte.d.ts.map +1 -0
  14. package/dist/dialog/InputDialog.svelte +131 -0
  15. package/dist/dialog/InputDialog.svelte.d.ts +45 -0
  16. package/dist/dialog/InputDialog.svelte.d.ts.map +1 -0
  17. package/dist/dialog/PasswordCopyDialog.svelte +95 -0
  18. package/dist/dialog/PasswordCopyDialog.svelte.d.ts +40 -0
  19. package/dist/dialog/PasswordCopyDialog.svelte.d.ts.map +1 -0
  20. package/dist/dialog/index.d.ts +8 -0
  21. package/dist/dialog/index.d.ts.map +1 -0
  22. package/dist/dialog/index.js +6 -0
  23. package/dist/dialog/types.d.ts +4 -0
  24. package/dist/dialog/types.d.ts.map +1 -0
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/modal/index.d.ts +2 -3
  29. package/dist/modal/index.d.ts.map +1 -1
  30. package/dist/modal/index.js +2 -2
  31. package/dist/style.css +213 -33
  32. package/package.json +7 -2
  33. package/dist/modal/ConfirmDialog.svelte.d.ts.map +0 -1
  34. package/dist/modal/Modal.svelte.d.ts.map +0 -1
  35. package/dist/modal/types.d.ts +0 -3
  36. package/dist/modal/types.d.ts.map +0 -1
  37. /package/dist/{modal → dialog}/types.js +0 -0
package/dist/style.css CHANGED
@@ -1194,22 +1194,31 @@
1194
1194
  opacity: 0.55;
1195
1195
  }
1196
1196
 
1197
- .suu-modal-backdrop {
1197
+ .suu-dialog-backdrop {
1198
1198
  position: fixed;
1199
1199
  inset: 0;
1200
1200
  z-index: 1100;
1201
1201
  display: grid;
1202
1202
  place-items: center;
1203
1203
  padding: 24px;
1204
- background: rgb(15 23 42 / 0.46);
1204
+ background: transparent;
1205
1205
  color: var(--suu-color-text);
1206
1206
  font-family: var(--suu-font);
1207
1207
  }
1208
1208
 
1209
- .suu-modal {
1209
+ .suu-dialog-backdrop[data-dimmed='true'] {
1210
+ background: rgb(15 23 42 / var(--suu-dialog-backdrop-opacity, 0.46));
1211
+ }
1212
+
1213
+ .suu-dialog-backdrop[data-blurred='true'] {
1214
+ backdrop-filter: blur(var(--suu-dialog-backdrop-blur, 6px));
1215
+ }
1216
+
1217
+ .suu-dialog {
1218
+ position: relative;
1210
1219
  display: grid;
1211
1220
  grid-template-rows: auto minmax(0, 1fr) auto;
1212
- width: min(100%, var(--suu-modal-width, 38rem));
1221
+ width: min(100%, var(--suu-dialog-width, 38rem));
1213
1222
  max-height: min(720px, calc(100vh - 48px));
1214
1223
  overflow: hidden;
1215
1224
  border: 1px solid var(--suu-color-border);
@@ -1218,54 +1227,66 @@
1218
1227
  box-shadow: var(--suu-shadow);
1219
1228
  }
1220
1229
 
1221
- .suu-modal--sm {
1222
- --suu-modal-width: 30rem;
1230
+ .suu-dialog--sm {
1231
+ --suu-dialog-width: 30rem;
1223
1232
  }
1224
1233
 
1225
- .suu-modal--md {
1226
- --suu-modal-width: 42rem;
1234
+ .suu-dialog--md {
1235
+ --suu-dialog-width: 42rem;
1227
1236
  }
1228
1237
 
1229
- .suu-modal--lg {
1230
- --suu-modal-width: 58rem;
1238
+ .suu-dialog--lg {
1239
+ --suu-dialog-width: 58rem;
1231
1240
  }
1232
1241
 
1233
- .suu-modal:focus {
1242
+ .suu-dialog:focus {
1234
1243
  outline: none;
1235
1244
  }
1236
1245
 
1237
- .suu-modal__header,
1238
- .suu-modal__footer {
1246
+ .suu-dialog__countdown {
1247
+ position: absolute;
1248
+ top: 0;
1249
+ right: 0;
1250
+ left: 0;
1251
+ z-index: 1;
1252
+ height: 3px;
1253
+ background: var(--suu-color-accent);
1254
+ transform-origin: left center;
1255
+ animation: suu-dialog-countdown var(--suu-dialog-countdown-duration) linear forwards;
1256
+ }
1257
+
1258
+ .suu-dialog__header,
1259
+ .suu-dialog__footer {
1239
1260
  display: flex;
1240
1261
  gap: 12px;
1241
1262
  align-items: center;
1242
1263
  padding: 16px 18px;
1243
1264
  }
1244
1265
 
1245
- .suu-modal__header {
1266
+ .suu-dialog__header {
1246
1267
  justify-content: space-between;
1247
1268
  border-bottom: 1px solid var(--suu-color-border);
1248
1269
  }
1249
1270
 
1250
- .suu-modal__heading {
1271
+ .suu-dialog__heading {
1251
1272
  min-width: 0;
1252
1273
  }
1253
1274
 
1254
- .suu-modal__title {
1275
+ .suu-dialog__title {
1255
1276
  margin: 0;
1256
1277
  color: var(--suu-color-text);
1257
1278
  font-size: 1.125rem;
1258
1279
  line-height: 1.3;
1259
1280
  }
1260
1281
 
1261
- .suu-modal__description,
1282
+ .suu-dialog__description,
1262
1283
  .suu-confirm-dialog__message {
1263
1284
  margin: 6px 0 0;
1264
1285
  color: var(--suu-color-muted);
1265
1286
  line-height: 1.5;
1266
1287
  }
1267
1288
 
1268
- .suu-modal__close {
1289
+ .suu-dialog__close {
1269
1290
  display: inline-grid;
1270
1291
  flex: 0 0 auto;
1271
1292
  place-items: center;
@@ -1279,14 +1300,14 @@
1279
1300
  cursor: pointer;
1280
1301
  }
1281
1302
 
1282
- .suu-modal__close:hover,
1283
- .suu-modal__close:focus-visible {
1303
+ .suu-dialog__close:hover,
1304
+ .suu-dialog__close:focus-visible {
1284
1305
  background: var(--suu-color-surface);
1285
1306
  color: var(--suu-color-text);
1286
1307
  outline: none;
1287
1308
  }
1288
1309
 
1289
- .suu-modal__close svg {
1310
+ .suu-dialog__close svg {
1290
1311
  width: 1.1rem;
1291
1312
  height: 1.1rem;
1292
1313
  fill: none;
@@ -1295,19 +1316,19 @@
1295
1316
  stroke-linecap: round;
1296
1317
  }
1297
1318
 
1298
- .suu-modal__body {
1319
+ .suu-dialog__body {
1299
1320
  min-height: 0;
1300
1321
  overflow: auto;
1301
1322
  padding: 18px;
1302
1323
  }
1303
1324
 
1304
- .suu-modal__footer {
1325
+ .suu-dialog__footer {
1305
1326
  justify-content: flex-end;
1306
1327
  border-top: 1px solid var(--suu-color-border);
1307
1328
  background: color-mix(in srgb, var(--suu-color-surface) 64%, var(--suu-color-bg));
1308
1329
  }
1309
1330
 
1310
- .suu-modal__button {
1331
+ .suu-dialog__button {
1311
1332
  min-height: 38px;
1312
1333
  padding: 7px 14px;
1313
1334
  border: 1px solid var(--suu-color-border);
@@ -1319,49 +1340,208 @@
1319
1340
  font-weight: 650;
1320
1341
  }
1321
1342
 
1322
- .suu-modal__button:hover:not(:disabled),
1323
- .suu-modal__button:focus-visible {
1343
+ .suu-dialog__button:hover:not(:disabled),
1344
+ .suu-dialog__button:focus-visible {
1324
1345
  border-color: var(--suu-color-accent);
1325
1346
  outline: none;
1326
1347
  }
1327
1348
 
1328
- .suu-modal__button:disabled {
1349
+ .suu-dialog__button:disabled {
1329
1350
  cursor: not-allowed;
1330
1351
  opacity: 0.55;
1331
1352
  }
1332
1353
 
1333
- .suu-modal__button--primary {
1354
+ .suu-dialog__button--primary {
1334
1355
  border-color: var(--suu-color-accent);
1335
1356
  background: var(--suu-color-accent);
1336
1357
  color: var(--suu-color-accent-text);
1337
1358
  }
1338
1359
 
1339
- .suu-modal__button--danger {
1360
+ .suu-dialog__button--danger {
1340
1361
  border-color: var(--suu-color-error);
1341
1362
  background: var(--suu-color-error);
1342
1363
  color: #ffffff;
1343
1364
  }
1344
1365
 
1366
+ @keyframes suu-dialog-countdown {
1367
+ from {
1368
+ transform: scaleX(1);
1369
+ }
1370
+
1371
+ to {
1372
+ transform: scaleX(0);
1373
+ }
1374
+ }
1375
+
1345
1376
  .suu-confirm-dialog__message {
1346
1377
  margin-top: 0;
1347
1378
  }
1348
1379
 
1380
+ .suu-input-dialog,
1381
+ .suu-csv-upload-dialog,
1382
+ .suu-password-copy-dialog {
1383
+ display: grid;
1384
+ gap: 14px;
1385
+ }
1386
+
1387
+ .suu-input-dialog__message,
1388
+ .suu-csv-upload-dialog__selected,
1389
+ .suu-password-copy-dialog__message {
1390
+ margin: 0;
1391
+ color: var(--suu-color-muted);
1392
+ line-height: 1.5;
1393
+ }
1394
+
1395
+ .suu-password-copy-dialog__value {
1396
+ display: grid;
1397
+ gap: 6px;
1398
+ }
1399
+
1400
+ .suu-password-copy-dialog__label {
1401
+ color: var(--suu-color-text);
1402
+ font-weight: 650;
1403
+ }
1404
+
1405
+ .suu-password-copy-dialog__code {
1406
+ display: block;
1407
+ overflow-x: auto;
1408
+ padding: 12px;
1409
+ border: 1px solid var(--suu-color-border);
1410
+ border-radius: var(--suu-radius);
1411
+ background: var(--suu-color-surface);
1412
+ color: var(--suu-color-text);
1413
+ font-family:
1414
+ ui-monospace,
1415
+ SFMono-Regular,
1416
+ Menlo,
1417
+ Monaco,
1418
+ Consolas,
1419
+ 'Liberation Mono',
1420
+ monospace;
1421
+ font-size: 1rem;
1422
+ line-height: 1.5;
1423
+ white-space: nowrap;
1424
+ }
1425
+
1426
+ .suu-input-dialog__field,
1427
+ .suu-csv-upload-dialog__field {
1428
+ display: grid;
1429
+ gap: 6px;
1430
+ color: var(--suu-color-text);
1431
+ font-weight: 650;
1432
+ }
1433
+
1434
+ .suu-input-dialog__field input,
1435
+ .suu-csv-upload-dialog__field input {
1436
+ min-height: 40px;
1437
+ width: 100%;
1438
+ border: 1px solid var(--suu-color-border);
1439
+ border-radius: var(--suu-radius);
1440
+ background: var(--suu-color-bg);
1441
+ color: var(--suu-color-text);
1442
+ font: inherit;
1443
+ }
1444
+
1445
+ .suu-input-dialog__field input {
1446
+ padding: 8px 10px;
1447
+ }
1448
+
1449
+ .suu-input-dialog__field input:focus,
1450
+ .suu-csv-upload-dialog__field input:focus {
1451
+ border-color: var(--suu-color-accent);
1452
+ outline: 2px solid color-mix(in srgb, var(--suu-color-accent) 22%, transparent);
1453
+ outline-offset: 1px;
1454
+ }
1455
+
1456
+ .suu-csv-upload-dialog__center {
1457
+ display: flex;
1458
+ justify-content: center;
1459
+ }
1460
+
1461
+ .suu-dialog__alert {
1462
+ padding: 10px 12px;
1463
+ border: 1px solid var(--suu-color-border);
1464
+ border-radius: var(--suu-radius);
1465
+ line-height: 1.5;
1466
+ }
1467
+
1468
+ .suu-dialog__alert--error {
1469
+ border-color: color-mix(in srgb, var(--suu-color-error) 38%, var(--suu-color-border));
1470
+ background: color-mix(in srgb, var(--suu-color-error) 10%, var(--suu-color-bg));
1471
+ color: var(--suu-color-error);
1472
+ }
1473
+
1474
+ .suu-dialog__alert--success {
1475
+ border-color: color-mix(in srgb, var(--suu-color-success) 38%, var(--suu-color-border));
1476
+ background: color-mix(in srgb, var(--suu-color-success) 10%, var(--suu-color-bg));
1477
+ color: var(--suu-color-success);
1478
+ }
1479
+
1480
+ .suu-dialog__status {
1481
+ display: inline-flex;
1482
+ gap: 8px;
1483
+ align-items: center;
1484
+ color: var(--suu-color-muted);
1485
+ }
1486
+
1487
+ .suu-dialog__spinner {
1488
+ width: 1rem;
1489
+ height: 1rem;
1490
+ border: 2px solid color-mix(in srgb, var(--suu-color-muted) 28%, transparent);
1491
+ border-top-color: var(--suu-color-accent);
1492
+ border-radius: 999px;
1493
+ animation: suu-dropdown-spinner 700ms linear infinite;
1494
+ }
1495
+
1496
+ .suu-csv-upload-dialog__instructions {
1497
+ padding: 14px;
1498
+ border: 1px solid var(--suu-color-border);
1499
+ border-radius: var(--suu-radius);
1500
+ background: var(--suu-color-surface);
1501
+ }
1502
+
1503
+ .suu-csv-upload-dialog__instructions h3 {
1504
+ margin: 0 0 8px;
1505
+ color: var(--suu-color-text);
1506
+ font-size: 0.95rem;
1507
+ }
1508
+
1509
+ .suu-csv-upload-dialog__instructions ul {
1510
+ margin: 0;
1511
+ padding-left: 1.2rem;
1512
+ color: var(--suu-color-muted);
1513
+ line-height: 1.5;
1514
+ }
1515
+
1516
+ .suu-image-preview-dialog {
1517
+ display: grid;
1518
+ place-items: center;
1519
+ }
1520
+
1521
+ .suu-image-preview-dialog img {
1522
+ display: block;
1523
+ max-width: 100%;
1524
+ max-height: min(70vh, 640px);
1525
+ border-radius: var(--suu-radius);
1526
+ object-fit: contain;
1527
+ }
1528
+
1349
1529
  @media (max-width: 640px) {
1350
- .suu-modal-backdrop {
1530
+ .suu-dialog-backdrop {
1351
1531
  align-items: end;
1352
1532
  padding: 12px;
1353
1533
  }
1354
1534
 
1355
- .suu-modal {
1535
+ .suu-dialog {
1356
1536
  max-height: calc(100vh - 24px);
1357
1537
  }
1358
1538
 
1359
- .suu-modal__footer {
1539
+ .suu-dialog__footer {
1360
1540
  flex-direction: column-reverse;
1361
1541
  align-items: stretch;
1362
1542
  }
1363
1543
 
1364
- .suu-modal__button {
1544
+ .suu-dialog__button {
1365
1545
  width: 100%;
1366
1546
  }
1367
1547
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ibobbyts/svelte-ui-utils",
3
- "version": "0.2.2",
4
- "description": "Reusable Svelte 5 UI utilities for toast notifications, dropdown search, and data tables.",
3
+ "version": "0.2.3",
4
+ "description": "Reusable Svelte 5 UI utilities for dialogs, toast notifications, dropdown search, and data tables.",
5
5
  "type": "module",
6
6
  "license": "MIT",
7
7
  "repository": {
@@ -42,6 +42,11 @@
42
42
  "types": "./dist/dropdown-search/state.d.ts",
43
43
  "default": "./dist/dropdown-search/state.js"
44
44
  },
45
+ "./dialog": {
46
+ "types": "./dist/dialog/index.d.ts",
47
+ "svelte": "./dist/dialog/index.js",
48
+ "default": "./dist/dialog/index.js"
49
+ },
45
50
  "./modal": {
46
51
  "types": "./dist/modal/index.d.ts",
47
52
  "svelte": "./dist/modal/index.js",
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConfirmDialog.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/modal/ConfirmDialog.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAwDjE,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId,QAAA,MAAM,aAAa;;;;;;;aAfgf,mBAAmB;WAAS,SAAS;;;;gBAAkI,CAAC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS;eAAa,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;cAAY,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;;;;;;;cAenrB,CAAC;AACvF,KAAK,aAAa,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAC1D,eAAe,aAAa,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Modal.svelte.d.ts","sourceRoot":"","sources":["../../src/lib/modal/Modal.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsH5C,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IAC9G,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AACD,KAAK,gCAAgC,CAAC,KAAK,EAAE,KAAK,IAAI,KAAK,GACvD,CAAC,KAAK,SAAS;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,GACzB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GACnC,GAAG,GACH;IAAE,QAAQ,CAAC,EAAE,GAAG,CAAA;CAAE,GAClB,EAAE,CAAC,CAAC;AAId,QAAA,MAAM,KAAK;;;;;WAf6X,SAAS;;;;iBAAiI,MAAM,GAAG,SAAS;kBAAgB,MAAM,GAAG,SAAS;cAAY,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;;;;;;;;;cAe1gB,CAAC;AAC/E,KAAK,KAAK,GAAG,YAAY,CAAC,OAAO,KAAK,CAAC,CAAC;AAC1C,eAAe,KAAK,CAAC"}
@@ -1,3 +0,0 @@
1
- export type ModalSize = 'sm' | 'md' | 'lg';
2
- export type ConfirmDialogIntent = 'default' | 'danger';
3
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/modal/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,QAAQ,CAAC"}
File without changes