endfield-vision 2.2.0 → 2.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 (53) hide show
  1. package/README.md +5 -5
  2. package/README.ru.md +5 -5
  3. package/dist/components/Autocomplete.d.ts +37 -0
  4. package/dist/components/Autocomplete.d.ts.map +1 -0
  5. package/dist/components/Autocomplete.js +109 -0
  6. package/dist/components/Autocomplete.js.map +1 -0
  7. package/dist/components/Choice.d.ts +2 -1
  8. package/dist/components/Choice.d.ts.map +1 -1
  9. package/dist/components/Choice.js +3 -1
  10. package/dist/components/Choice.js.map +1 -1
  11. package/dist/components/CompletenessBadge.d.ts +21 -8
  12. package/dist/components/CompletenessBadge.d.ts.map +1 -1
  13. package/dist/components/CompletenessBadge.js +48 -15
  14. package/dist/components/CompletenessBadge.js.map +1 -1
  15. package/dist/components/ContextMenu.d.ts +5 -1
  16. package/dist/components/ContextMenu.d.ts.map +1 -1
  17. package/dist/components/ContextMenu.js +13 -7
  18. package/dist/components/ContextMenu.js.map +1 -1
  19. package/dist/components/NotificationCenter.d.ts.map +1 -1
  20. package/dist/components/NotificationCenter.js +2 -2
  21. package/dist/components/NotificationCenter.js.map +1 -1
  22. package/dist/components/Select.d.ts +5 -0
  23. package/dist/components/Select.d.ts.map +1 -1
  24. package/dist/components/Select.js +7 -3
  25. package/dist/components/Select.js.map +1 -1
  26. package/dist/components/Thumbnail.d.ts +65 -0
  27. package/dist/components/Thumbnail.d.ts.map +1 -0
  28. package/dist/components/Thumbnail.js +57 -0
  29. package/dist/components/Thumbnail.js.map +1 -0
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +2 -0
  33. package/dist/index.js.map +1 -1
  34. package/dist/lib/i18n-messages.d.ts +5 -0
  35. package/dist/lib/i18n-messages.d.ts.map +1 -1
  36. package/dist/lib/i18n-messages.js +10 -0
  37. package/dist/lib/i18n-messages.js.map +1 -1
  38. package/dist/styles/components/communication.css +161 -0
  39. package/dist/styles/components/records.css +8 -1
  40. package/dist/styles/tokens.css +3 -0
  41. package/package.json +1 -1
  42. package/src/components/Autocomplete.tsx +221 -0
  43. package/src/components/Choice.tsx +5 -2
  44. package/src/components/CompletenessBadge.tsx +102 -46
  45. package/src/components/ContextMenu.tsx +11 -5
  46. package/src/components/NotificationCenter.tsx +2 -1
  47. package/src/components/Select.tsx +12 -3
  48. package/src/components/Thumbnail.tsx +244 -0
  49. package/src/index.ts +15 -0
  50. package/src/lib/i18n-messages.ts +15 -0
  51. package/src/styles/components/communication.css +161 -0
  52. package/src/styles/components/records.css +8 -1
  53. package/src/styles/tokens.css +3 -0
@@ -758,6 +758,167 @@
758
758
  }
759
759
  }
760
760
 
761
+ /* ================================================================ */
762
+ /* Миниатюры и сетка превью */
763
+ /* ================================================================ */
764
+
765
+ .ev-thumb {
766
+ min-width: 0;
767
+ margin: 0;
768
+ }
769
+
770
+ /* Кадр без рамки: его отделяет подложка, как плитку внутри карточки. */
771
+ .ev-thumb-frame {
772
+ position: relative;
773
+ display: block;
774
+ width: 100%;
775
+ aspect-ratio: var(--ev-thumb-aspect, 4 / 3);
776
+ overflow: hidden;
777
+ padding: 0;
778
+ border: 0;
779
+ border-radius: var(--ev-radius-md);
780
+ background: var(--ev-surface-nested);
781
+ color: inherit;
782
+ font: inherit;
783
+ }
784
+
785
+ button.ev-thumb-frame {
786
+ cursor: zoom-in;
787
+ }
788
+
789
+ button.ev-thumb-frame::after {
790
+ content: '';
791
+ position: absolute;
792
+ inset: 0;
793
+ background: var(--ev-hover);
794
+ opacity: 0;
795
+ transition: opacity var(--ev-dur-fast) var(--ev-ease);
796
+ pointer-events: none;
797
+ }
798
+
799
+ button.ev-thumb-frame:hover::after {
800
+ opacity: 1;
801
+ }
802
+
803
+ button.ev-thumb-frame:focus-visible {
804
+ outline: none;
805
+ box-shadow: var(--ev-focus-ring);
806
+ }
807
+
808
+ .ev-thumb-img {
809
+ position: absolute;
810
+ inset: 0;
811
+ width: 100%;
812
+ height: 100%;
813
+ object-fit: cover;
814
+ transition: opacity var(--ev-dur-fast) var(--ev-ease);
815
+ }
816
+
817
+ .ev-thumb[data-fit='contain'] .ev-thumb-img {
818
+ object-fit: contain;
819
+ }
820
+
821
+ .ev-thumb[data-state='loading'] .ev-thumb-img {
822
+ opacity: 0;
823
+ }
824
+
825
+ .ev-thumb[data-state='error'] .ev-thumb-img {
826
+ display: none;
827
+ }
828
+
829
+ .ev-thumb-skeleton {
830
+ position: absolute;
831
+ inset: 0;
832
+ background: linear-gradient(90deg, var(--ev-tint-2) 0%, var(--ev-tint-4) 40%, var(--ev-tint-2) 80%);
833
+ background-size: 200% 100%;
834
+ animation: ev-shimmer 1.4s ease-in-out infinite;
835
+ }
836
+
837
+ .ev-thumb-error {
838
+ position: absolute;
839
+ inset: 0;
840
+ display: flex;
841
+ flex-direction: column;
842
+ align-items: center;
843
+ justify-content: center;
844
+ gap: var(--ev-space-2);
845
+ padding: var(--ev-space-3);
846
+ color: var(--ev-text-muted);
847
+ font-size: var(--ev-fs-xs);
848
+ text-align: center;
849
+ }
850
+
851
+ .ev-thumb-badge {
852
+ position: absolute;
853
+ top: var(--ev-space-2);
854
+ left: var(--ev-space-2);
855
+ display: inline-flex;
856
+ align-items: center;
857
+ gap: var(--ev-space-1);
858
+ max-width: calc(100% - var(--ev-space-4));
859
+ padding: 2px var(--ev-space-2);
860
+ overflow: hidden;
861
+ border-radius: var(--ev-radius-sm);
862
+ background: var(--ev-media-scrim);
863
+ color: var(--ev-on-media);
864
+ font-size: var(--ev-fs-xs);
865
+ font-weight: var(--ev-fw-medium);
866
+ line-height: var(--ev-lh-tight);
867
+ text-overflow: ellipsis;
868
+ white-space: nowrap;
869
+ }
870
+
871
+ .ev-thumb-overlay {
872
+ position: absolute;
873
+ top: 50%;
874
+ left: 50%;
875
+ display: flex;
876
+ align-items: center;
877
+ justify-content: center;
878
+ width: 40px;
879
+ height: 40px;
880
+ border-radius: var(--ev-radius-pill);
881
+ background: var(--ev-media-scrim);
882
+ color: var(--ev-on-media);
883
+ transform: translate(-50%, -50%);
884
+ pointer-events: none;
885
+ }
886
+
887
+ .ev-thumb-caption {
888
+ display: -webkit-box;
889
+ margin-top: var(--ev-space-2);
890
+ overflow: hidden;
891
+ color: var(--ev-text-secondary);
892
+ font-size: var(--ev-fs-sm);
893
+ line-height: var(--ev-lh-tight);
894
+ -webkit-box-orient: vertical;
895
+ -webkit-line-clamp: 2;
896
+ }
897
+
898
+ .ev-thumb-grid {
899
+ display: grid;
900
+ grid-template-columns: repeat(auto-fill, minmax(min(var(--ev-thumb-min, 140px), 100%), 1fr));
901
+ gap: var(--ev-space-4);
902
+ margin: 0;
903
+ padding: 0;
904
+ list-style: none;
905
+ }
906
+
907
+ .ev-thumb-grid > li {
908
+ min-width: 0;
909
+ }
910
+
911
+ @media (prefers-reduced-motion: reduce) {
912
+ .ev-thumb-skeleton {
913
+ animation: none;
914
+ }
915
+
916
+ .ev-thumb-img,
917
+ button.ev-thumb-frame::after {
918
+ transition: none;
919
+ }
920
+ }
921
+
761
922
  /* ================================================================ */
762
923
  /* Состояние связи */
763
924
  /* ================================================================ */
@@ -180,10 +180,17 @@
180
180
  transition: background var(--ev-dur-fast) var(--ev-ease);
181
181
  }
182
182
 
183
- .ev-completeness-btn:hover {
183
+ .ev-completeness-btn:hover,
184
+ .ev-completeness-link:hover {
184
185
  background: var(--ev-tone-edge);
185
186
  }
186
187
 
188
+ .ev-completeness-link {
189
+ text-decoration: none;
190
+ cursor: pointer;
191
+ transition: background var(--ev-dur-fast) var(--ev-ease);
192
+ }
193
+
187
194
  .ev-completeness-btn[aria-expanded='true'] .ev-completeness-chevron {
188
195
  transform: rotate(180deg);
189
196
  }
@@ -49,6 +49,9 @@
49
49
  /* Знак поверх произвольного цвета (образцы палитры): не зависит от темы и акцента. */
50
50
  --ev-on-dark: #ffffff;
51
51
  --ev-on-light: #0b0e14;
52
+ /* Значки поверх фото (Thumbnail): подложка и знак, одинаковы во всех темах. */
53
+ --ev-media-scrim: rgb(8 10 14 / 0.62);
54
+ --ev-on-media: #ffffff;
52
55
 
53
56
  /* --- Акцент (бренд). Менять только здесь. --- */
54
57
  --ev-accent-rgb: 123, 147, 255;