@visns-studio/visns-components 5.15.4 → 5.15.5

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.
@@ -0,0 +1,185 @@
1
+ // Additional styles for Verkada camera modal
2
+ .cameraSpec {
3
+ font-size: 12px;
4
+ color: #6b7280;
5
+ margin-bottom: 4px;
6
+ line-height: 1.4;
7
+ }
8
+
9
+ .noModel {
10
+ color: #ef4444;
11
+ font-style: italic;
12
+ font-size: 13px;
13
+ margin-bottom: 8px;
14
+ }
15
+
16
+ .cameraPreview {
17
+ background: #f9fafb;
18
+ border: 1px solid #e5e7eb;
19
+ border-radius: 8px;
20
+ padding: 16px;
21
+ margin: 16px 0;
22
+
23
+ h4 {
24
+ margin: 0 0 12px 0;
25
+ color: #374151;
26
+ font-size: 16px;
27
+ font-weight: 600;
28
+ }
29
+ }
30
+
31
+ .cameraSpecs {
32
+ display: flex;
33
+ flex-direction: column;
34
+ gap: 6px;
35
+ }
36
+
37
+ .specRow {
38
+ display: flex;
39
+ font-size: 13px;
40
+ line-height: 1.4;
41
+ color: #4b5563;
42
+
43
+ strong {
44
+ width: 100px;
45
+ flex-shrink: 0;
46
+ color: #374151;
47
+ font-weight: 500;
48
+ }
49
+ }
50
+
51
+ .directionHelper {
52
+ font-size: 11px;
53
+ color: #9ca3af;
54
+ margin-top: 4px;
55
+ text-align: center;
56
+ }
57
+
58
+ .directionControl {
59
+ background: #f8fafc;
60
+ border: 1px solid #e2e8f0;
61
+ border-radius: 6px;
62
+ padding: 12px;
63
+ margin: 8px 0;
64
+
65
+ label {
66
+ display: block;
67
+ font-size: 13px;
68
+ font-weight: 500;
69
+ color: #374151;
70
+ margin-bottom: 8px;
71
+ }
72
+ }
73
+
74
+ .directionSlider {
75
+ width: 100%;
76
+ height: 6px;
77
+ border-radius: 3px;
78
+ background: #e2e8f0;
79
+ outline: none;
80
+ opacity: 0.7;
81
+ transition: opacity 0.2s;
82
+ margin-bottom: 8px;
83
+
84
+ &:hover {
85
+ opacity: 1;
86
+ }
87
+
88
+ &::-webkit-slider-thumb {
89
+ appearance: none;
90
+ width: 20px;
91
+ height: 20px;
92
+ border-radius: 50%;
93
+ background: #3b82f6;
94
+ cursor: pointer;
95
+ box-shadow: 0 2px 6px rgba(59, 130, 246, 0.4);
96
+ transition: all 0.2s ease;
97
+
98
+ &:hover {
99
+ background: #2563eb;
100
+ transform: scale(1.1);
101
+ }
102
+ }
103
+
104
+ &::-moz-range-thumb {
105
+ width: 20px;
106
+ height: 20px;
107
+ border-radius: 50%;
108
+ background: #3b82f6;
109
+ cursor: pointer;
110
+ border: none;
111
+ box-shadow: 0 2px 6px rgba(59, 130, 246, 0.4);
112
+ }
113
+ }
114
+
115
+ .cameraModelName {
116
+ font-size: 14px;
117
+ color: #1f2937;
118
+ margin-bottom: 12px;
119
+ padding-bottom: 8px;
120
+ border-bottom: 1px solid #e5e7eb;
121
+
122
+ strong {
123
+ font-weight: 600;
124
+ }
125
+ }
126
+
127
+ .cameraSpecGrid {
128
+ display: grid;
129
+ grid-template-columns: 1fr 1fr;
130
+ gap: 8px;
131
+ margin-bottom: 12px;
132
+ }
133
+
134
+ .specItem {
135
+ display: flex;
136
+ flex-direction: column;
137
+ gap: 2px;
138
+ }
139
+
140
+ .specLabel {
141
+ font-size: 11px;
142
+ font-weight: 500;
143
+ color: #6b7280;
144
+ text-transform: uppercase;
145
+ letter-spacing: 0.05em;
146
+ }
147
+
148
+ .specValue {
149
+ font-size: 12px;
150
+ color: #374151;
151
+ font-weight: 500;
152
+
153
+ &.indoor {
154
+ color: #059669;
155
+ }
156
+
157
+ &.outdoor {
158
+ color: #d97706;
159
+ }
160
+ }
161
+
162
+ .cameraFeatures {
163
+ margin-bottom: 12px;
164
+
165
+ .specLabel {
166
+ display: block;
167
+ margin-bottom: 6px;
168
+ }
169
+ }
170
+
171
+ .featuresList {
172
+ display: flex;
173
+ flex-wrap: wrap;
174
+ gap: 4px;
175
+ }
176
+
177
+ .featureTag {
178
+ background: #f1f5f9;
179
+ color: #475569;
180
+ font-size: 10px;
181
+ font-weight: 500;
182
+ padding: 2px 6px;
183
+ border-radius: 4px;
184
+ border: 1px solid #e2e8f0;
185
+ }
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+
3
+ // Wrapper component to render Lucide icons for cameras
4
+ const CameraIcon = ({ icon: IconComponent, size = 16, className = '', ...props }) => {
5
+ if (!IconComponent) {
6
+ return null;
7
+ }
8
+
9
+ return (
10
+ <IconComponent
11
+ size={size}
12
+ className={className}
13
+ {...props}
14
+ />
15
+ );
16
+ };
17
+
18
+ export default CameraIcon;
package/src/index.js CHANGED
@@ -15,6 +15,7 @@ import Autocomplete from './components/Autocomplete';
15
15
  import Breadcrumb from './components/Breadcrumb';
16
16
  import BusinessCardOcr from './components/BusinessCardOcr';
17
17
  import Call from './components/Call';
18
+ import CameraPlacement from './components/CameraPlacement';
18
19
  import ClientAssociationManager from './components/ClientAssociationManager';
19
20
  import CustomFetch from './components/Fetch';
20
21
  import Download from './components/Download';
@@ -93,6 +94,7 @@ export {
93
94
  Breadcrumb,
94
95
  BusinessCardOcr,
95
96
  Call,
97
+ CameraPlacement,
96
98
  CellWithTooltip,
97
99
  ClientAssociationManager,
98
100
  ClientLogin,