@sentropic/design-system-vue 0.1.0 → 0.3.0

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/dist/styles.css CHANGED
@@ -2344,10 +2344,13 @@
2344
2344
 
2345
2345
  .st-forceGraph svg { display: block; overflow: visible; }
2346
2346
 
2347
+ .st-forceGraph__svg--panning { cursor: grabbing; }
2348
+
2347
2349
  .st-forceGraph__edge {
2348
2350
  stroke: var(--st-semantic-border-strong);
2349
2351
  stroke-width: 1;
2350
2352
  opacity: 0.55;
2353
+ transition: opacity 120ms ease, stroke-width 120ms ease;
2351
2354
  }
2352
2355
 
2353
2356
  .st-forceGraph__edge--weak {
@@ -2356,6 +2359,19 @@
2356
2359
  opacity: 0.5;
2357
2360
  }
2358
2361
 
2362
+ .st-forceGraph__edge--hovered {
2363
+ opacity: 0.9;
2364
+ stroke-width: 2;
2365
+ }
2366
+
2367
+ /* Invisible wide hit target for edge hover */
2368
+ .st-forceGraph__edgeHit {
2369
+ stroke: transparent;
2370
+ stroke-width: 10;
2371
+ fill: none;
2372
+ cursor: crosshair;
2373
+ }
2374
+
2359
2375
  .st-forceGraph__node { transition: opacity 120ms ease; }
2360
2376
  .st-forceGraph__node--dim { opacity: 0.3; }
2361
2377
 
@@ -2375,14 +2391,14 @@
2375
2391
  outline-offset: 1px;
2376
2392
  }
2377
2393
 
2378
-
2394
+ /* Selection highlight: slightly thicker stroke ring, full opacity. */
2379
2395
  .st-forceGraph__node--selected .st-forceGraph__dot {
2380
2396
  fill-opacity: 1;
2381
2397
  stroke: var(--st-semantic-border-interactive, #0f62fe);
2382
2398
  stroke-width: 2.5;
2383
2399
  }
2384
2400
 
2385
-
2401
+ /* Focus (keyboard/programmatic focus): stronger ring + slight scale. */
2386
2402
  .st-forceGraph__node--focus .st-forceGraph__dot {
2387
2403
  fill-opacity: 1;
2388
2404
  stroke: var(--st-semantic-border-interactive, #0f62fe);
@@ -2424,10 +2440,170 @@
2424
2440
 
2425
2441
  .st-forceGraph__tooltipLabel { font-weight: 600; }
2426
2442
  .st-forceGraph__tooltipMeta { opacity: 0.85; }
2443
+ .st-forceGraph__tooltipRelation {
2444
+ opacity: 0.75;
2445
+ font-style: italic;
2446
+ font-size: 0.6875rem;
2447
+ }
2448
+
2449
+ /* Reset view button */
2450
+ .st-forceGraph__resetBtn {
2451
+ background: var(--st-semantic-surface-overlay, rgba(0,0,0,0.55));
2452
+ border: none;
2453
+ border-radius: var(--st-radius-sm, 0.25rem);
2454
+ color: var(--st-semantic-text-inverse, #fff);
2455
+ cursor: pointer;
2456
+ font-size: 1rem;
2457
+ line-height: 1;
2458
+ padding: 0.25rem 0.5rem;
2459
+ position: absolute;
2460
+ bottom: 0.5rem;
2461
+ right: 0.5rem;
2462
+ opacity: 0.8;
2463
+ transition: opacity 120ms ease;
2464
+ z-index: 2;
2465
+ }
2466
+
2467
+ .st-forceGraph__resetBtn:hover,
2468
+ .st-forceGraph__resetBtn:focus-visible {
2469
+ opacity: 1;
2470
+ }
2471
+
2472
+ .st-forceGraph__resetBtn:focus-visible {
2473
+ outline: 2px solid var(--st-semantic-border-interactive);
2474
+ outline-offset: 2px;
2475
+ }
2476
+
2477
+ /* Legend overlay */
2478
+ .st-forceGraph__legend {
2479
+ background: var(--st-semantic-surface-overlay, rgba(0,0,0,0.45));
2480
+ border-radius: var(--st-radius-sm, 0.25rem);
2481
+ color: var(--st-semantic-text-inverse, #fff);
2482
+ display: flex;
2483
+ flex-direction: column;
2484
+ font-size: 0.6875rem;
2485
+ gap: 0.25rem;
2486
+ padding: 0.375rem 0.5rem;
2487
+ pointer-events: none;
2488
+ position: absolute;
2489
+ bottom: 0.5rem;
2490
+ left: 0.5rem;
2491
+ z-index: 2;
2492
+ }
2493
+
2494
+ .st-forceGraph__legendEntry {
2495
+ align-items: center;
2496
+ display: flex;
2497
+ gap: 0.375rem;
2498
+ }
2499
+
2500
+ .st-forceGraph__legendSwatch {
2501
+ flex-shrink: 0;
2502
+ }
2503
+
2504
+ .st-forceGraph__legendLabel {
2505
+ white-space: nowrap;
2506
+ }
2507
+
2508
+ .st-forceGraph__legendShape {
2509
+ fill-opacity: 0.9;
2510
+ stroke: var(--st-semantic-surface-default, #fff);
2511
+ stroke-width: 1;
2512
+ }
2513
+
2514
+ .st-forceGraph__legendShape--category1 { fill: var(--st-semantic-data-category1); }
2515
+ .st-forceGraph__legendShape--category2 { fill: var(--st-semantic-data-category2); }
2516
+ .st-forceGraph__legendShape--category3 { fill: var(--st-semantic-data-category3); }
2517
+ .st-forceGraph__legendShape--category4 { fill: var(--st-semantic-data-category4); }
2518
+ .st-forceGraph__legendShape--category5 { fill: var(--st-semantic-data-category5); }
2519
+ .st-forceGraph__legendShape--category6 { fill: var(--st-semantic-data-category6); }
2520
+ .st-forceGraph__legendShape--category7 { fill: var(--st-semantic-data-category7); }
2521
+ .st-forceGraph__legendShape--category8 { fill: var(--st-semantic-data-category8); }
2522
+
2523
+ .st-forceGraph__legendEdge {
2524
+ stroke: var(--st-semantic-border-strong, #888);
2525
+ stroke-width: 1.5;
2526
+ opacity: 0.8;
2527
+ }
2528
+
2529
+ .st-forceGraph__legendEdge--weak {
2530
+ stroke: var(--st-semantic-border-subtle, #aaa);
2531
+ stroke-dasharray: 3 3;
2532
+ opacity: 0.65;
2533
+ }
2427
2534
 
2428
2535
  @media (prefers-reduced-motion: reduce) {
2429
2536
  .st-forceGraph__node,
2430
- .st-forceGraph__dot { transition: none; }
2537
+ .st-forceGraph__dot,
2538
+ .st-forceGraph__edge,
2539
+ .st-forceGraph__resetBtn { transition: none; }
2540
+ }
2541
+
2542
+ /* GraphLegend standalone component */
2543
+ .st-graphLegend {
2544
+ background: var(--st-semantic-surface-overlay, rgba(0,0,0,0.45));
2545
+ border-radius: var(--st-radius-sm, 0.25rem);
2546
+ color: var(--st-semantic-text-inverse, #fff);
2547
+ display: inline-flex;
2548
+ flex-direction: column;
2549
+ font-size: 0.6875rem;
2550
+ gap: 0.25rem;
2551
+ padding: 0.375rem 0.5rem;
2552
+ }
2553
+
2554
+ .st-graphLegend__title {
2555
+ font-size: 0.625rem;
2556
+ font-weight: 600;
2557
+ letter-spacing: 0.04em;
2558
+ margin: 0 0 0.125rem;
2559
+ opacity: 0.75;
2560
+ text-transform: uppercase;
2561
+ }
2562
+
2563
+ .st-graphLegend__list {
2564
+ display: flex;
2565
+ flex-direction: column;
2566
+ gap: 0.25rem;
2567
+ list-style: none;
2568
+ margin: 0;
2569
+ padding: 0;
2570
+ }
2571
+
2572
+ .st-graphLegend__entry {
2573
+ align-items: center;
2574
+ display: flex;
2575
+ gap: 0.375rem;
2576
+ }
2577
+
2578
+ .st-graphLegend__swatch { flex-shrink: 0; }
2579
+
2580
+ .st-graphLegend__label { white-space: nowrap; }
2581
+
2582
+ .st-graphLegend__shape {
2583
+ fill-opacity: 0.9;
2584
+ stroke: var(--st-semantic-surface-default, #fff);
2585
+ stroke-width: 1;
2586
+ }
2587
+
2588
+ .st-graphLegend__shape--category1 { fill: var(--st-semantic-data-category1); }
2589
+ .st-graphLegend__shape--category2 { fill: var(--st-semantic-data-category2); }
2590
+ .st-graphLegend__shape--category3 { fill: var(--st-semantic-data-category3); }
2591
+ .st-graphLegend__shape--category4 { fill: var(--st-semantic-data-category4); }
2592
+ .st-graphLegend__shape--category5 { fill: var(--st-semantic-data-category5); }
2593
+ .st-graphLegend__shape--category6 { fill: var(--st-semantic-data-category6); }
2594
+ .st-graphLegend__shape--category7 { fill: var(--st-semantic-data-category7); }
2595
+ .st-graphLegend__shape--category8 { fill: var(--st-semantic-data-category8); }
2596
+
2597
+ .st-graphLegend__edge {
2598
+ stroke: var(--st-semantic-border-strong, #888);
2599
+ stroke-width: 1.5;
2600
+ opacity: 0.8;
2601
+ }
2602
+
2603
+ .st-graphLegend__edge--weak {
2604
+ stroke: var(--st-semantic-border-subtle, #aaa);
2605
+ stroke-dasharray: 3 3;
2606
+ opacity: 0.65;
2431
2607
  }
2432
2608
 
2433
2609
  .st-form {
@@ -6364,3 +6540,239 @@
6364
6540
  .st-search__input { width: 100%; }
6365
6541
  .st-fileUploader__name { font-weight: 600; }
6366
6542
 
6543
+ /* --- Parité 0.3.0 : BackToTop, MediaContent, TableOfContents, Notification, Transcription, DisplaySettings --- */
6544
+ .st-backToTop {
6545
+ align-items: center;
6546
+ background: var(--st-component-control-background, var(--st-semantic-surface-contrast, #0f172a));
6547
+ border: 1px solid var(--st-component-control-border, #334155);
6548
+ border-radius: 999px;
6549
+ bottom: var(--st-spacing-4, 1rem);
6550
+ color: var(--st-semantic-text-inverse, #fff);
6551
+ cursor: var(--st-cursor-interactive, pointer);
6552
+ display: inline-flex;
6553
+ gap: 0.5rem;
6554
+ opacity: 0;
6555
+ padding: 0.6rem 0.8rem;
6556
+ position: fixed;
6557
+ pointer-events: none;
6558
+ right: var(--st-spacing-4, 1rem);
6559
+ transform: translateY(0.75rem);
6560
+ transition: opacity var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
6561
+ transform var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
6562
+ z-index: var(--st-zindex-toast, 70);
6563
+ }
6564
+ .st-backToTop:not([aria-hidden="true"]) {
6565
+ opacity: 1;
6566
+ pointer-events: auto;
6567
+ transform: translateY(0);
6568
+ }
6569
+ .st-backToTop:hover:not(:disabled),
6570
+ .st-backToTop:focus-visible {
6571
+ background: var(--st-component-control-hoverBackground, var(--st-semantic-surface-subtle));
6572
+ box-shadow: 0 0 0 2px var(--st-component-control-focusRing, #38bdf8);
6573
+ outline: none;
6574
+ }
6575
+ .st-backToTop:focus-visible {
6576
+ outline: 2px solid var(--st-component-control-focusRing, #38bdf8);
6577
+ outline-offset: 2px;
6578
+ }
6579
+ .st-backToTop__label { font-size: 0.8125rem; font-weight: 600; line-height: 1.2; }
6580
+ .st-backToTop__icon { align-items: center; display: inline-flex; }
6581
+ @media (max-width: 38rem) {
6582
+ .st-backToTop__label { display: none; }
6583
+ }
6584
+ @media (prefers-reduced-motion: reduce) {
6585
+ .st-backToTop { transition: none; }
6586
+ }
6587
+
6588
+ .st-mediaContent {
6589
+ border: 1px solid var(--st-semantic-border-subtle);
6590
+ border-radius: 0.5rem;
6591
+ margin: 0;
6592
+ overflow: hidden;
6593
+ }
6594
+ .st-mediaContent__media {
6595
+ aspect-ratio: var(--st-mediaContent-ratio);
6596
+ background: var(--st-semantic-surface-subtle);
6597
+ overflow: hidden;
6598
+ }
6599
+ .st-mediaContent__media > img,
6600
+ .st-mediaContent__media > video {
6601
+ block-size: 100%;
6602
+ inline-size: 100%;
6603
+ object-fit: cover;
6604
+ display: block;
6605
+ }
6606
+ .st-mediaContent__caption {
6607
+ background: var(--st-semantic-surface-primary);
6608
+ color: var(--st-semantic-text-primary);
6609
+ font-size: 0.875rem;
6610
+ padding: 0.6rem 0.75rem;
6611
+ }
6612
+ .st-mediaContent__title { color: var(--st-semantic-text-primary); font-weight: 600; margin: 0; }
6613
+ .st-mediaContent__caption p { margin: 0.25rem 0 0; }
6614
+ .st-mediaContent__byline { color: var(--st-semantic-text-secondary); }
6615
+
6616
+ .st-tableOfContents {
6617
+ border: 1px solid var(--st-semantic-border-subtle);
6618
+ border-radius: 0.5rem;
6619
+ padding: 0.75rem 0.875rem;
6620
+ }
6621
+ .st-tableOfContents__title {
6622
+ color: var(--st-semantic-text-primary);
6623
+ font-size: 0.8125rem;
6624
+ font-weight: 600;
6625
+ margin-bottom: 0.5rem;
6626
+ text-transform: uppercase;
6627
+ }
6628
+ .st-tableOfContents__list { list-style: none; margin: 0; padding-left: 0; }
6629
+ .st-tableOfContents__item {
6630
+ padding-inline-start: calc(var(--st-tableOfContents-level) * var(--st-spacing-4, 1rem));
6631
+ }
6632
+ .st-tableOfContents__item + .st-tableOfContents__item { margin-top: 0.125rem; }
6633
+ .st-tableOfContents__link {
6634
+ color: var(--st-semantic-text-secondary);
6635
+ display: inline-block;
6636
+ padding: 0.25rem 0;
6637
+ text-decoration: none;
6638
+ }
6639
+ .st-tableOfContents__link:hover,
6640
+ .st-tableOfContents__link:focus-visible {
6641
+ color: var(--st-semantic-text-primary);
6642
+ text-decoration: underline;
6643
+ text-underline-offset: 0.15em;
6644
+ background: var(--st-component-control-hoverBackground, var(--st-semantic-surface-subtle));
6645
+ }
6646
+ .st-tableOfContents__link[aria-current="location"] {
6647
+ color: var(--st-semantic-text-primary);
6648
+ font-weight: 600;
6649
+ }
6650
+
6651
+ .st-notification {
6652
+ background: var(--st-component-notification-background, var(--st-semantic-surface-raised));
6653
+ border: 1px solid var(--st-component-notification-border, var(--st-semantic-border-subtle));
6654
+ border-left-width: var(--st-component-notification-accentWidth, 0.25rem);
6655
+ border-left-style: solid;
6656
+ border-left-color: var(--st-component-notification-accent, var(--st-semantic-feedback-info));
6657
+ border-radius: 0;
6658
+ color: var(--st-component-notification-text, var(--st-semantic-text-primary));
6659
+ display: flex;
6660
+ gap: var(--st-spacing-4, 1rem);
6661
+ justify-content: space-between;
6662
+ padding: var(--st-spacing-4, 1rem);
6663
+ width: min(100%, 32rem);
6664
+ }
6665
+ .st-notification--info {
6666
+ --st-component-notification-accent: var(--st-component-notification-infoAccent, var(--st-semantic-feedback-info));
6667
+ }
6668
+ .st-notification--success {
6669
+ --st-component-notification-accent: var(--st-component-notification-successAccent, var(--st-semantic-feedback-success));
6670
+ }
6671
+ .st-notification--warning {
6672
+ --st-component-notification-accent: var(--st-component-notification-warningAccent, var(--st-semantic-feedback-warning));
6673
+ }
6674
+ .st-notification--error {
6675
+ --st-component-notification-accent: var(--st-component-notification-errorAccent, var(--st-semantic-feedback-error));
6676
+ }
6677
+ .st-notification__content { display: grid; gap: 0.25rem; flex: 1; min-width: 0; }
6678
+ .st-notification__title { font-size: 0.9375rem; margin: 0; }
6679
+ .st-notification__message {
6680
+ color: var(--st-semantic-text-secondary);
6681
+ font-size: 0.875rem;
6682
+ line-height: 1.5;
6683
+ margin: 0;
6684
+ }
6685
+ .st-notification__meta { align-items: start; display: flex; flex-shrink: 0; gap: 0.5rem; }
6686
+ .st-notification__actions { align-items: start; display: flex; gap: var(--st-spacing-2, 0.5rem); }
6687
+ .st-notification__close {
6688
+ align-items: center;
6689
+ background: transparent;
6690
+ border: 1px solid var(--st-semantic-border-subtle);
6691
+ border-radius: var(--st-border-radius-full, 999px);
6692
+ color: var(--st-semantic-text-secondary);
6693
+ cursor: var(--st-cursor-interactive, pointer);
6694
+ display: inline-flex;
6695
+ font-size: 0.875rem;
6696
+ height: 1.75rem;
6697
+ justify-content: center;
6698
+ min-width: 1.75rem;
6699
+ padding: 0;
6700
+ width: 1.75rem;
6701
+ }
6702
+ .st-notification__close:hover {
6703
+ background: var(--st-component-control-hoverBackground, var(--st-semantic-surface-subtle));
6704
+ }
6705
+
6706
+ .st-transcription {
6707
+ border: 1px solid var(--st-semantic-border-subtle);
6708
+ border-radius: 0.5rem;
6709
+ padding: 0.75rem 1rem;
6710
+ }
6711
+ .st-transcription summary {
6712
+ color: var(--st-semantic-text-primary);
6713
+ cursor: var(--st-cursor-interactive, pointer);
6714
+ font-weight: 600;
6715
+ list-style: none;
6716
+ }
6717
+ .st-transcription summary::marker { color: var(--st-semantic-text-secondary); }
6718
+ .st-transcription__content { margin-top: 0.75rem; }
6719
+ .st-transcription__list { margin: 0; padding-left: 1rem; }
6720
+ .st-transcription__item + .st-transcription__item { margin-top: 0.625rem; }
6721
+ .st-transcription__meta { color: var(--st-semantic-text-secondary); font-size: 0.8125rem; margin: 0; }
6722
+ .st-transcription__speaker { font-weight: 600; }
6723
+ .st-transcription__text { color: var(--st-semantic-text-primary); margin: 0.2rem 0 0; }
6724
+ .st-transcription__sr-only {
6725
+ position: absolute;
6726
+ width: 1px;
6727
+ height: 1px;
6728
+ padding: 0;
6729
+ margin: -1px;
6730
+ overflow: hidden;
6731
+ clip: rect(0, 0, 0, 0);
6732
+ white-space: nowrap;
6733
+ border: 0;
6734
+ }
6735
+
6736
+ .st-displaySettings {
6737
+ border: 1px solid var(--st-semantic-border-subtle);
6738
+ border-radius: 0.5rem;
6739
+ padding: 0.75rem 0.875rem;
6740
+ }
6741
+ .st-displaySettings__title {
6742
+ color: var(--st-semantic-text-primary);
6743
+ font-size: 0.8125rem;
6744
+ font-weight: 600;
6745
+ margin: 0;
6746
+ text-transform: uppercase;
6747
+ }
6748
+ .st-displaySettings__grid { display: grid; gap: 0.75rem; margin-top: 0.75rem; }
6749
+ .st-displaySettings__field {
6750
+ display: grid;
6751
+ gap: 0.35rem;
6752
+ color: var(--st-semantic-text-secondary);
6753
+ font-size: 0.875rem;
6754
+ }
6755
+ .st-displaySettings__label { font-weight: 600; }
6756
+ .st-displaySettings select,
6757
+ .st-displaySettings input[type="checkbox"] {
6758
+ appearance: auto;
6759
+ width: 100%;
6760
+ border: 1px solid var(--st-component-control-border, var(--st-semantic-border-subtle));
6761
+ border-radius: 0.375rem;
6762
+ color: var(--st-semantic-text-primary);
6763
+ background: var(--st-component-control-background, var(--st-semantic-surface-primary));
6764
+ padding: 0.5rem 0.65rem;
6765
+ font: inherit;
6766
+ }
6767
+ .st-displaySettings input[type="checkbox"] {
6768
+ width: fit-content;
6769
+ min-width: 1.2rem;
6770
+ min-height: 1.2rem;
6771
+ margin: 0;
6772
+ }
6773
+ .st-displaySettings__field--switch {
6774
+ align-items: center;
6775
+ grid-template-columns: 1fr auto;
6776
+ gap: 0.5rem;
6777
+ }
6778
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sentropic/design-system-vue",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Vue 3 components for the Sentropic design system.",
5
5
  "type": "module",
6
6
  "publishConfig": {