@archerjessop/utilities 4.4.0 → 4.6.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.
@@ -6,8 +6,65 @@
6
6
  --color-danger: #dc3545;
7
7
  --color-warning: #ffc107;
8
8
  --color-info: #17a2b8;
9
-
10
- /* Generic UI Colors */
9
+
10
+ --color-prop-price: #c92020ff;
11
+ --color-prop-price-hover: #a01818ff;
12
+
13
+ --color-prop-name: #007bff;
14
+ --color-prop-name-hover: #0056b3;
15
+
16
+ --color-prop-lead-status: #28a745;
17
+ --color-prop-lead-status-hover: #1e7e34;
18
+
19
+ --color-prop-lead-status-taken: #c92020ff;
20
+ --color-prop-lead-status-taken-hover: #a01818ff;
21
+
22
+ --color-prop-cashflow-positive: #28a745;
23
+ --color-prop-cashflow-positive-hover: #1e7e34;
24
+ --color-prop-cashflow-negative: #dc3545;
25
+ --color-prop-cashflow-negative-hover: #a71d2aff;
26
+
27
+ --color-prop-cocr-15: #6c757d;
28
+ --color-prop-cocr-15-hover: #5a6268;
29
+ --color-prop-cocr-30: #17a2b8;
30
+ --color-prop-cocr-30-hover: #117a8b;
31
+
32
+ --color-prop-cap: #2c79cc;
33
+ --color-prop-cap-hover: #0056b3;
34
+
35
+ --color-prop-noi: #dc3545;
36
+ --color-prop-noi-hover: #a71d2aff;
37
+
38
+ --color-prop-equity: #fd7e14;
39
+ --color-prop-equity-hover: #e8590cff;
40
+
41
+ --color-prop-dom: #6610f2;
42
+ --color-prop-dom-hover: #520dc2;
43
+
44
+ --color-prop-seller-fi: #b65b11;
45
+ --color-prop-seller-fi-hover: #8c430e;
46
+
47
+ --color-prop-down: #6f42c1;
48
+ --color-prop-down-hover: #5936a2;
49
+
50
+ --color-prop-contact: #343a40;
51
+ --color-prop-contact-hover: #23272b;
52
+
53
+ --color-prop-dscr: #e25f6c;
54
+ --color-prop-dscr-hover: #c92020ff;
55
+
56
+ --color-prop-sf: #53dbf0;
57
+ --color-prop-sf-hover: #2ecce3;
58
+
59
+ --color-prop-net: #649670;
60
+ --color-prop-net-hover: #3d6b47;
61
+
62
+ --color-prop-assignment: #e83e8c;
63
+ --color-prop-assignment-hover: #c82375;
64
+
65
+
66
+
67
+ /* Extension UI Colors */
11
68
  --bg-footer: #ededed;
12
69
  --border-footer: #919090ff;
13
70
  --text-primary: #212529;
@@ -42,6 +42,207 @@
42
42
  flex-shrink: 0;
43
43
  }
44
44
 
45
+ /* ===== METRICS GRID ===== */
46
+
47
+ .metrics-grid {
48
+ display: grid;
49
+ grid-template-columns: repeat(9, 1fr);
50
+ gap: var(--grid-gap);
51
+ font-size: var(--font-size-md);
52
+ width: 100%;
53
+ }
54
+
55
+ .metric-column {
56
+ display: flex;
57
+ flex-direction: column;
58
+ gap: var(--spacing-md);
59
+ min-width: 0;
60
+ }
61
+
62
+ .metric {
63
+ display: flex;
64
+ flex-direction: column;
65
+ gap: var(--spacing-xs);
66
+ min-width: 0;
67
+ overflow: hidden;
68
+ padding: var(--spacing-sm);
69
+ }
70
+
71
+ .metric-label {
72
+ font-weight: var(--font-weight-medium);
73
+ color: var(--text-secondary);
74
+ font-size: var(--font-size-sm);
75
+ text-transform: uppercase;
76
+ letter-spacing: 0.5px;
77
+ white-space: nowrap;
78
+ overflow: hidden;
79
+ text-overflow: ellipsis;
80
+ }
81
+
82
+ .metric-value {
83
+ font-weight: var(--font-weight-semibold);
84
+ font-size: var(--font-size-lg);
85
+ white-space: nowrap;
86
+ overflow: hidden;
87
+ text-overflow: ellipsis;
88
+ color: var(--text-primary);
89
+ line-height: 1.2;
90
+ }
91
+
92
+ /* ===== METRIC COLOR CLASSES ===== */
93
+
94
+ .prop-price {
95
+ color: var(--color-prop-price);
96
+ }
97
+
98
+ .prop-price:hover {
99
+ color: var(--color-prop-price-hover);
100
+ }
101
+
102
+ .prop-name {
103
+ color: var(--color-prop-name);
104
+ }
105
+
106
+ .prop-name:hover {
107
+ color: var(--color-prop-name-hover);
108
+ }
109
+
110
+ .prop-lead-status {
111
+ color: var(--color-prop-lead-status);
112
+ }
113
+
114
+ .prop-lead-status:hover {
115
+ color: var(--color-prop-lead-status-hover);
116
+ }
117
+
118
+ .prop-lead-status.taken {
119
+ color: var(--color-prop-lead-status-taken);
120
+ }
121
+
122
+ .prop-lead-status.taken:hover {
123
+ color: var(--color-prop-lead-status-taken-hover);
124
+ }
125
+
126
+ .prop-cashflow {
127
+ color: var(--color-prop-cashflow-positive);
128
+ }
129
+
130
+ .prop-cashflow:hover {
131
+ color: var(--color-prop-cashflow-positive-hover);
132
+ }
133
+
134
+ .prop-cashflow.negative {
135
+ color: var(--color-prop-cashflow-negative);
136
+ }
137
+
138
+ .prop-cashflow.negative:hover {
139
+ color: var(--color-prop-cashflow-negative-hover);
140
+ }
141
+
142
+ .prop-cocr-15 {
143
+ color: var(--color-prop-cocr-15);
144
+ }
145
+
146
+ .prop-cocr-15:hover {
147
+ color: var(--color-prop-cocr-15-hover);
148
+ }
149
+
150
+ .prop-cocr-30 {
151
+ color: var(--color-prop-cocr-30);
152
+ }
153
+
154
+ .prop-cocr-30:hover {
155
+ color: var(--color-prop-cocr-30-hover);
156
+ }
157
+
158
+ .prop-cap {
159
+ color: var(--color-prop-cap);
160
+ }
161
+
162
+ .prop-cap:hover {
163
+ color: var(--color-prop-cap-hover);
164
+ }
165
+
166
+ .prop-noi {
167
+ color: var(--color-prop-noi);
168
+ }
169
+
170
+ .prop-noi:hover {
171
+ color: var(--color-prop-noi-hover);
172
+ }
173
+
174
+ .prop-equity {
175
+ color: var(--color-prop-equity);
176
+ }
177
+
178
+ .prop-equity:hover {
179
+ color: var(--color-prop-equity-hover);
180
+ }
181
+
182
+ .prop-dom {
183
+ color: var(--color-prop-dom);
184
+ }
185
+
186
+ .prop-dom:hover {
187
+ color: var(--color-prop-dom-hover);
188
+ }
189
+
190
+ .prop-seller-fi {
191
+ color: var(--color-prop-seller-fi);
192
+ }
193
+
194
+ .prop-seller-fi:hover {
195
+ color: var(--color-prop-seller-fi-hover);
196
+ }
197
+
198
+ .prop-down {
199
+ color: var(--color-prop-down);
200
+ }
201
+
202
+ .prop-down:hover {
203
+ color: var(--color-prop-down-hover);
204
+ }
205
+
206
+ .prop-contact {
207
+ color: var(--color-prop-contact);
208
+ }
209
+
210
+ .prop-contact:hover {
211
+ color: var(--color-prop-contact-hover);
212
+ }
213
+
214
+ .prop-dscr {
215
+ color: var(--color-prop-dscr);
216
+ }
217
+
218
+ .prop-dscr:hover {
219
+ color: var(--color-prop-dscr-hover);
220
+ }
221
+
222
+ .prop-sf {
223
+ color: var(--color-prop-sf);
224
+ }
225
+
226
+ .prop-sf:hover {
227
+ color: var(--color-prop-sf-hover);
228
+ }
229
+
230
+ .prop-net {
231
+ color: var(--color-prop-net);
232
+ }
233
+
234
+ .prop-net:hover {
235
+ color: var(--color-prop-net-hover);
236
+ }
237
+
238
+ .prop-assignment {
239
+ color: var(--color-prop-assignment);
240
+ }
241
+
242
+ .prop-assignment:hover {
243
+ color: var(--color-prop-assignment-hover);
244
+ }
245
+
45
246
  /* ===== FORM CONTROLS ===== */
46
247
 
47
248
  .dropdown {
@@ -94,58 +295,51 @@
94
295
  fill: currentColor;
95
296
  }
96
297
 
97
- /* ===== METRICS GRID ===== */
298
+ /* ===== GENERIC UTILITY CLASSES ===== */
98
299
 
99
- .metrics-grid {
100
- display: grid;
101
- grid-template-columns: repeat(9, 1fr);
102
- gap: var(--grid-gap);
103
- font-size: var(--font-size-md);
104
- width: 100%;
300
+ /* Color utilities */
301
+ .color-primary {
302
+ color: var(--color-primary) !important;
105
303
  }
106
304
 
107
- .metric-column {
108
- display: flex;
109
- flex-direction: column;
110
- gap: var(--spacing-md);
111
- min-width: 0;
305
+ .color-primary:hover {
306
+ color: var(--color-primary-hover) !important;
112
307
  }
113
308
 
114
- .metric {
115
- display: flex;
116
- flex-direction: column;
117
- gap: var(--spacing-xs);
118
- min-width: 0;
119
- overflow: hidden;
120
- padding: var(--spacing-sm);
309
+ .color-danger {
310
+ color: var(--color-danger) !important;
121
311
  }
122
312
 
123
- .metric-label {
124
- font-weight: var(--font-weight-medium);
125
- color: var(--text-secondary);
126
- font-size: var(--font-size-sm);
127
- text-transform: uppercase;
128
- letter-spacing: 0.5px;
129
- white-space: nowrap;
130
- overflow: hidden;
131
- text-overflow: ellipsis;
313
+ .color-warning {
314
+ color: var(--color-warning) !important;
132
315
  }
133
316
 
134
- .metric-value {
135
- font-weight: var(--font-weight-semibold);
136
- font-size: var(--font-size-lg);
137
- white-space: nowrap;
138
- overflow: hidden;
139
- text-overflow: ellipsis;
140
- color: var(--text-primary);
141
- line-height: 1.2;
317
+ .color-success {
318
+ color: var(--color-success) !important;
142
319
  }
143
320
 
144
- /* ===== UTILITY CLASSES ===== */
321
+ /* Weight utilities */
322
+ .weight-normal {
323
+ font-weight: var(--font-weight-normal) !important;
324
+ }
145
325
 
146
- .clickable {
326
+ .weight-medium {
327
+ font-weight: var(--font-weight-medium) !important;
328
+ }
329
+
330
+ .weight-semibold {
331
+ font-weight: var(--font-weight-semibold) !important;
332
+ }
333
+
334
+ .clickable-not-selectable {
147
335
  cursor: pointer;
336
+ user-select: none;
337
+ }
338
+
339
+ .clickable {
340
+ cursor: pointer !important;
148
341
  color: var(--color-primary) !important;
342
+ transition: color 0.2s ease;
149
343
  }
150
344
 
151
345
  .clickable:hover {
@@ -153,6 +347,16 @@
153
347
  text-decoration: underline;
154
348
  }
155
349
 
350
+ .triangle::after {
351
+ content: ' ▶';
352
+ font-size: 14px;
353
+ color: inherit;
354
+ margin-left: 4px;
355
+ vertical-align: initial;
356
+ display: inline-block;
357
+ }
358
+
359
+ /* Loading state */
156
360
  .loading {
157
361
  color: var(--color-warning) !important;
158
362
  position: relative;
@@ -160,17 +364,22 @@
160
364
 
161
365
  .loading::after {
162
366
  content: "•••";
163
- animation: pulse 1.5s ease-in-out infinite;
367
+ animation: loading-pulse 1.5s ease-in-out infinite;
368
+ }
369
+
370
+ @keyframes loading-pulse {
371
+ 0%, 100% { opacity: 0.3; }
372
+ 50% { opacity: 1; }
164
373
  }
165
374
 
375
+ /* State modifiers */
166
376
  .negative {
167
377
  color: var(--color-danger) !important;
168
- font-weight: var(--font-weight-semibold);
378
+ font-weight: var(--font-weight-semibold) !important;
169
379
  }
170
380
 
171
- @keyframes pulse {
172
- 0%, 100% { opacity: 0.3; }
173
- 50% { opacity: 1; }
381
+ .positive {
382
+ color: var(--color-success) !important;
174
383
  }
175
384
 
176
385
  /* ===== RESPONSIVE DESIGN ===== */
@@ -218,4 +427,10 @@
218
427
  .btn-primary {
219
428
  justify-content: center;
220
429
  }
430
+
431
+ .triangle-down::after,
432
+ .triangle-up::after,
433
+ .triangle-right::after {
434
+ right: 0px;
435
+ }
221
436
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@archerjessop/utilities",
3
- "version": "4.4.0",
3
+ "version": "4.6.0",
4
4
  "description": "Shared utilities for ArcherJessop property analysis tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",