@phenx-inc/ctlsurf 0.3.13 → 0.3.14

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 (33) hide show
  1. package/bin/ctlsurf-worker.js +38 -22
  2. package/out/headless/index.mjs +247 -1
  3. package/out/headless/index.mjs.map +4 -4
  4. package/out/main/index.js +303 -46
  5. package/out/preload/index.js +5 -0
  6. package/out/renderer/assets/{cssMode-CYoo4t9f.js → cssMode-G_SDogBL.js} +3 -3
  7. package/out/renderer/assets/{freemarker2--UQnPZsn.js → freemarker2-BzEus0h2.js} +1 -1
  8. package/out/renderer/assets/{handlebars-DVDrmX0C.js → handlebars-Et995f6O.js} +1 -1
  9. package/out/renderer/assets/{html-D1-cXoLy.js → html-D4wgKxPD.js} +1 -1
  10. package/out/renderer/assets/{htmlMode-f5nBuprq.js → htmlMode-DSxpefzL.js} +3 -3
  11. package/out/renderer/assets/{index-65hyKM_8.css → index-AQ346NMi.css} +386 -0
  12. package/out/renderer/assets/{index-D23nru43.js → index-ByJTqkiQ.js} +318 -22
  13. package/out/renderer/assets/{javascript-CcarFzBL.js → javascript-CzLoo8aq.js} +2 -2
  14. package/out/renderer/assets/{jsonMode-BvF-xK9U.js → jsonMode-BrwPy7fY.js} +3 -3
  15. package/out/renderer/assets/{liquid-CHLtUKl2.js → liquid-BsfPf6YG.js} +1 -1
  16. package/out/renderer/assets/{lspLanguageFeatures-B9aNeatS.js → lspLanguageFeatures-CxLZ421s.js} +1 -1
  17. package/out/renderer/assets/{mdx-HGDrkifZ.js → mdx-CPvHIsAR.js} +1 -1
  18. package/out/renderer/assets/{python-B_dPzjJ6.js → python-Dr7dCUjG.js} +1 -1
  19. package/out/renderer/assets/{razor-CHheM4ot.js → razor-a7zjD7Y3.js} +1 -1
  20. package/out/renderer/assets/{tsMode-CdC3i1gG.js → tsMode-B7KLV2X6.js} +1 -1
  21. package/out/renderer/assets/{typescript-BX6guVRK.js → typescript-Cjuzf37q.js} +1 -1
  22. package/out/renderer/assets/{xml-CpS-pOPE.js → xml-Yz9xINtk.js} +1 -1
  23. package/out/renderer/assets/{yaml-Du0AjOHW.js → yaml-DtKnp5J0.js} +1 -1
  24. package/out/renderer/index.html +2 -2
  25. package/package.json +1 -1
  26. package/src/main/ctlsurfApi.ts +11 -0
  27. package/src/main/index.ts +20 -0
  28. package/src/main/orchestrator.ts +37 -0
  29. package/src/main/ticketStore.ts +252 -0
  30. package/src/preload/index.ts +10 -0
  31. package/src/renderer/App.tsx +21 -0
  32. package/src/renderer/components/TicketPanel.tsx +308 -0
  33. package/src/renderer/styles.css +386 -0
@@ -8413,3 +8413,389 @@ html, body, #root {
8413
8413
  display: flex;
8414
8414
  gap: 4px;
8415
8415
  }
8416
+
8417
+ /* ─── Ticket drawer ──────────────────────────────── */
8418
+
8419
+ .ticket-scrim {
8420
+ position: fixed;
8421
+ inset: 0;
8422
+ background: rgba(13, 14, 22, 0.55);
8423
+ backdrop-filter: blur(2px);
8424
+ opacity: 0;
8425
+ pointer-events: none;
8426
+ transition: opacity 0.2s ease;
8427
+ z-index: 90;
8428
+ }
8429
+ .ticket-scrim.open {
8430
+ opacity: 1;
8431
+ pointer-events: auto;
8432
+ }
8433
+
8434
+ .ticket-drawer {
8435
+ position: fixed;
8436
+ top: 0;
8437
+ right: 0;
8438
+ bottom: 0;
8439
+ width: 380px;
8440
+ background: linear-gradient(180deg, #20243a 0%, #1b1e2e 100%);
8441
+ border-left: 1px solid #343860;
8442
+ box-shadow: -16px 0 48px rgba(0, 0, 0, 0.5);
8443
+ display: flex;
8444
+ flex-direction: column;
8445
+ transform: translateX(100%);
8446
+ transition: transform 0.24s cubic-bezier(0.32, 0.72, 0, 1);
8447
+ z-index: 100;
8448
+ }
8449
+ .ticket-drawer.open {
8450
+ transform: translateX(0);
8451
+ }
8452
+
8453
+ /* ── header ── */
8454
+ .ticket-drawer-header {
8455
+ display: flex;
8456
+ align-items: flex-start;
8457
+ justify-content: space-between;
8458
+ padding: 16px 16px 14px;
8459
+ border-bottom: 1px solid #2a2b3d;
8460
+ }
8461
+ .ticket-drawer-heading {
8462
+ display: flex;
8463
+ gap: 11px;
8464
+ align-items: center;
8465
+ }
8466
+ .ticket-drawer-badge {
8467
+ width: 34px;
8468
+ height: 34px;
8469
+ border-radius: 9px;
8470
+ background: rgba(122, 162, 247, 0.14);
8471
+ border: 1px solid rgba(122, 162, 247, 0.3);
8472
+ display: flex;
8473
+ align-items: center;
8474
+ justify-content: center;
8475
+ font-size: 16px;
8476
+ flex-shrink: 0;
8477
+ }
8478
+ .ticket-drawer-headtext {
8479
+ display: flex;
8480
+ flex-direction: column;
8481
+ gap: 1px;
8482
+ }
8483
+ .ticket-drawer-title {
8484
+ font-size: 14px;
8485
+ font-weight: 650;
8486
+ color: #d5dbf5;
8487
+ letter-spacing: 0.01em;
8488
+ }
8489
+ .ticket-drawer-subtitle {
8490
+ font-size: 11.5px;
8491
+ color: #6b739b;
8492
+ }
8493
+ .ticket-drawer-subtitle strong {
8494
+ color: #7aa2f7;
8495
+ font-weight: 600;
8496
+ }
8497
+ .ticket-drawer-warn {
8498
+ color: #e0af68;
8499
+ }
8500
+ .ticket-drawer-close {
8501
+ background: none;
8502
+ border: none;
8503
+ color: #565f89;
8504
+ font-size: 20px;
8505
+ line-height: 1;
8506
+ cursor: pointer;
8507
+ padding: 2px 6px;
8508
+ border-radius: 6px;
8509
+ transition: background 0.12s ease, color 0.12s ease;
8510
+ }
8511
+ .ticket-drawer-close:hover {
8512
+ color: #d5dbf5;
8513
+ background: rgba(255, 255, 255, 0.06);
8514
+ }
8515
+
8516
+ /* ── body ── */
8517
+ .ticket-drawer-body {
8518
+ flex: 1;
8519
+ overflow-y: auto;
8520
+ padding: 16px;
8521
+ display: flex;
8522
+ flex-direction: column;
8523
+ gap: 16px;
8524
+ }
8525
+
8526
+ .ticket-field {
8527
+ display: flex;
8528
+ flex-direction: column;
8529
+ gap: 7px;
8530
+ }
8531
+ .ticket-field-label {
8532
+ font-size: 10.5px;
8533
+ font-weight: 600;
8534
+ color: #6b739b;
8535
+ text-transform: uppercase;
8536
+ letter-spacing: 0.07em;
8537
+ }
8538
+
8539
+ .ticket-field input,
8540
+ .ticket-field textarea {
8541
+ background: #15161f;
8542
+ border: 1px solid #2a2b3d;
8543
+ border-radius: 8px;
8544
+ color: #d5dbf5;
8545
+ font-size: 13px;
8546
+ font-family: inherit;
8547
+ padding: 9px 11px;
8548
+ outline: none;
8549
+ transition: border-color 0.14s ease, box-shadow 0.14s ease;
8550
+ }
8551
+ .ticket-field input::placeholder,
8552
+ .ticket-field textarea::placeholder {
8553
+ color: #4a4f6e;
8554
+ }
8555
+ .ticket-field input:focus,
8556
+ .ticket-field textarea:focus {
8557
+ border-color: #7aa2f7;
8558
+ box-shadow: 0 0 0 3px rgba(122, 162, 247, 0.13);
8559
+ }
8560
+ .ticket-input-title {
8561
+ font-size: 14px !important;
8562
+ font-weight: 550;
8563
+ }
8564
+ .ticket-field textarea {
8565
+ resize: vertical;
8566
+ line-height: 1.5;
8567
+ }
8568
+
8569
+ /* ── segmented pill controls ── */
8570
+ .ticket-segmented {
8571
+ display: flex;
8572
+ flex-wrap: wrap;
8573
+ gap: 6px;
8574
+ }
8575
+ .ticket-seg {
8576
+ display: inline-flex;
8577
+ align-items: center;
8578
+ gap: 6px;
8579
+ background: #15161f;
8580
+ border: 1px solid #2a2b3d;
8581
+ border-radius: 999px;
8582
+ color: #8088ac;
8583
+ font-size: 12px;
8584
+ font-family: inherit;
8585
+ font-weight: 550;
8586
+ padding: 5px 11px 5px 9px;
8587
+ cursor: pointer;
8588
+ transition: background 0.13s ease, border-color 0.13s ease, color 0.13s ease;
8589
+ }
8590
+ .ticket-seg:hover {
8591
+ border-color: #3b3d57;
8592
+ color: #c0caf5;
8593
+ }
8594
+ .ticket-seg-dot {
8595
+ width: 7px;
8596
+ height: 7px;
8597
+ border-radius: 50%;
8598
+ flex-shrink: 0;
8599
+ }
8600
+ .ticket-seg.active {
8601
+ font-weight: 650;
8602
+ }
8603
+
8604
+ .ticket-drawer-error {
8605
+ background: rgba(247, 118, 142, 0.13);
8606
+ border: 1px solid rgba(247, 118, 142, 0.38);
8607
+ color: #f7768e;
8608
+ font-size: 12px;
8609
+ border-radius: 8px;
8610
+ padding: 8px 10px;
8611
+ }
8612
+
8613
+ /* ── footer ── */
8614
+ .ticket-drawer-footer {
8615
+ display: flex;
8616
+ align-items: center;
8617
+ justify-content: space-between;
8618
+ gap: 8px;
8619
+ padding: 12px 16px;
8620
+ border-top: 1px solid #2a2b3d;
8621
+ background: rgba(13, 14, 22, 0.35);
8622
+ }
8623
+ .ticket-drawer-hint {
8624
+ font-size: 11px;
8625
+ color: #565f89;
8626
+ }
8627
+ .ticket-drawer-footer-btns {
8628
+ display: flex;
8629
+ gap: 8px;
8630
+ }
8631
+ .ticket-btn-secondary,
8632
+ .ticket-btn-primary {
8633
+ font-size: 12.5px;
8634
+ font-family: inherit;
8635
+ font-weight: 600;
8636
+ border-radius: 8px;
8637
+ padding: 8px 14px;
8638
+ cursor: pointer;
8639
+ transition: background 0.13s ease, border-color 0.13s ease, transform 0.06s ease;
8640
+ }
8641
+ .ticket-btn-secondary {
8642
+ background: transparent;
8643
+ color: #c0caf5;
8644
+ border: 1px solid #2a2b3d;
8645
+ }
8646
+ .ticket-btn-secondary:hover {
8647
+ background: rgba(255, 255, 255, 0.05);
8648
+ border-color: #3b3d57;
8649
+ }
8650
+ .ticket-btn-primary {
8651
+ background: linear-gradient(180deg, #8db0fa 0%, #7aa2f7 100%);
8652
+ color: #11131f;
8653
+ border: 1px solid #7aa2f7;
8654
+ }
8655
+ .ticket-btn-primary:hover:not(:disabled) {
8656
+ background: linear-gradient(180deg, #9bbcfb 0%, #89b4fa 100%);
8657
+ }
8658
+ .ticket-btn-primary:active:not(:disabled) {
8659
+ transform: translateY(1px);
8660
+ }
8661
+ .ticket-btn-primary:disabled {
8662
+ opacity: 0.4;
8663
+ cursor: not-allowed;
8664
+ }
8665
+
8666
+ /* ── titlebar tickets icon ── */
8667
+ .ticket-tag-icon {
8668
+ display: inline-block;
8669
+ vertical-align: -2px;
8670
+ margin-right: 5px;
8671
+ }
8672
+
8673
+ /* ── drawer badge / back button ── */
8674
+ .ticket-drawer-badge {
8675
+ color: #7aa2f7;
8676
+ }
8677
+ .ticket-drawer-back {
8678
+ width: 34px;
8679
+ height: 34px;
8680
+ border-radius: 9px;
8681
+ background: rgba(122, 162, 247, 0.1);
8682
+ border: 1px solid rgba(122, 162, 247, 0.28);
8683
+ color: #7aa2f7;
8684
+ font-size: 22px;
8685
+ line-height: 1;
8686
+ cursor: pointer;
8687
+ flex-shrink: 0;
8688
+ transition: background 0.12s ease;
8689
+ }
8690
+ .ticket-drawer-back:hover {
8691
+ background: rgba(122, 162, 247, 0.2);
8692
+ }
8693
+
8694
+ /* ── ticket list ── */
8695
+ .ticket-list-body {
8696
+ flex: 1;
8697
+ overflow-y: auto;
8698
+ padding: 12px;
8699
+ display: flex;
8700
+ flex-direction: column;
8701
+ gap: 7px;
8702
+ }
8703
+ .ticket-list-msg {
8704
+ color: #6b739b;
8705
+ font-size: 12.5px;
8706
+ padding: 16px 4px;
8707
+ text-align: center;
8708
+ }
8709
+
8710
+ .ticket-empty {
8711
+ display: flex;
8712
+ flex-direction: column;
8713
+ align-items: center;
8714
+ gap: 5px;
8715
+ padding: 48px 16px;
8716
+ text-align: center;
8717
+ }
8718
+ .ticket-empty-icon {
8719
+ color: #3b3d57;
8720
+ margin-bottom: 4px;
8721
+ }
8722
+ .ticket-empty-title {
8723
+ font-size: 13.5px;
8724
+ font-weight: 600;
8725
+ color: #8088ac;
8726
+ }
8727
+ .ticket-empty-hint {
8728
+ font-size: 12px;
8729
+ color: #565f89;
8730
+ }
8731
+
8732
+ /* ── ticket card ── */
8733
+ .ticket-card {
8734
+ display: flex;
8735
+ align-items: stretch;
8736
+ gap: 10px;
8737
+ background: #15161f;
8738
+ border: 1px solid #262a3f;
8739
+ border-radius: 10px;
8740
+ padding: 10px 11px 10px 0;
8741
+ cursor: pointer;
8742
+ text-align: left;
8743
+ font-family: inherit;
8744
+ overflow: hidden;
8745
+ transition: border-color 0.13s ease, background 0.13s ease, transform 0.06s ease;
8746
+ }
8747
+ .ticket-card:hover {
8748
+ border-color: #3d425f;
8749
+ background: #181a26;
8750
+ }
8751
+ .ticket-card:active {
8752
+ transform: scale(0.99);
8753
+ }
8754
+ .ticket-card-bar {
8755
+ width: 3px;
8756
+ border-radius: 3px;
8757
+ flex-shrink: 0;
8758
+ align-self: stretch;
8759
+ }
8760
+ .ticket-card-main {
8761
+ flex: 1;
8762
+ min-width: 0;
8763
+ display: flex;
8764
+ flex-direction: column;
8765
+ gap: 5px;
8766
+ }
8767
+ .ticket-card-title {
8768
+ font-size: 13px;
8769
+ font-weight: 550;
8770
+ color: #d5dbf5;
8771
+ white-space: nowrap;
8772
+ overflow: hidden;
8773
+ text-overflow: ellipsis;
8774
+ }
8775
+ .ticket-card-meta {
8776
+ display: flex;
8777
+ align-items: center;
8778
+ gap: 10px;
8779
+ }
8780
+ .ticket-card-status {
8781
+ display: inline-flex;
8782
+ align-items: center;
8783
+ gap: 5px;
8784
+ font-size: 11px;
8785
+ font-weight: 600;
8786
+ }
8787
+ .ticket-card-date {
8788
+ font-size: 11px;
8789
+ color: #565f89;
8790
+ }
8791
+ .ticket-card-pri {
8792
+ align-self: center;
8793
+ font-size: 10px;
8794
+ font-weight: 700;
8795
+ letter-spacing: 0.04em;
8796
+ text-transform: uppercase;
8797
+ border: 1px solid;
8798
+ border-radius: 999px;
8799
+ padding: 2px 8px;
8800
+ flex-shrink: 0;
8801
+ }