@ikenga/pkg-sales 0.2.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/LICENSE +201 -0
- package/README.md +61 -0
- package/dist/app.js +161 -0
- package/dist/features/sales/sales-view.js +837 -0
- package/dist/index.html +52 -0
- package/dist/lib/app-kit-css.js +3 -0
- package/dist/lib/bridge.js +182 -0
- package/dist/lib/sales-css.js +4 -0
- package/dist/lib/tokens-css.js +3 -0
- package/dist/lib/ui.js +107 -0
- package/dist/sales.css +459 -0
- package/manifest.json +59 -0
- package/package.json +26 -0
package/dist/sales.css
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/* sales.css — domain residue for com.ikenga.sales.
|
|
2
|
+
*
|
|
3
|
+
* Only sales-local classes live here:
|
|
4
|
+
* - .sl-* Forecast view layout (.sl-forecast-kpis, .sl-forecast-kpi, etc.)
|
|
5
|
+
* - .sl-won-* Won view layout (.sl-won-wrap, .sl-won-table, .sl-won-badge)
|
|
6
|
+
* - Kanban + pipeline overrides specific to this domain (.kb-mini-avatar.is-agent,
|
|
7
|
+
* .split-row-when.is-urgent already in kit — no re-derive needed)
|
|
8
|
+
*
|
|
9
|
+
* Kit primitives (.frame*, .ip-split*, .dense-row*, .btn*, .tag, .chip, .badge,
|
|
10
|
+
* .atelier-state*, .nav-group*, .nav-item*, .kb-*, .seg*, .split-*, etc.) are
|
|
11
|
+
* consumed from app-kit-css.js — never re-derived here.
|
|
12
|
+
*
|
|
13
|
+
* Inject order: tokens-css → app-kit-css → sales-css (this file).
|
|
14
|
+
* data-workspace="sessions" on <html> → warm amber-ochre tint for active nav + accents.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/* ── Reduced motion gate ── */
|
|
18
|
+
@media (prefers-reduced-motion: reduce) {
|
|
19
|
+
.split-row { transition: none; }
|
|
20
|
+
.kb-card { transition: none; }
|
|
21
|
+
.kb-card:hover { transform: none; }
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ── Forecast view (.sl-*) ─────────────────────────────────────────────────── */
|
|
25
|
+
|
|
26
|
+
.sl-forecast-wrap {
|
|
27
|
+
display: flex;
|
|
28
|
+
flex-direction: column;
|
|
29
|
+
gap: 16px;
|
|
30
|
+
padding: 16px;
|
|
31
|
+
overflow-y: auto;
|
|
32
|
+
height: 100%;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.sl-forecast-kpis {
|
|
36
|
+
display: grid;
|
|
37
|
+
grid-template-columns: repeat(4, 1fr);
|
|
38
|
+
gap: 10px;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.sl-forecast-kpi {
|
|
42
|
+
background: var(--bg-surface, var(--bg-base));
|
|
43
|
+
border: 1px solid var(--border-soft, rgba(0,0,0,0.08));
|
|
44
|
+
border-radius: 8px;
|
|
45
|
+
padding: 14px 16px;
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
gap: 4px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.sl-kpi-k {
|
|
52
|
+
font-family: var(--font-mono, monospace);
|
|
53
|
+
font-size: 10px;
|
|
54
|
+
font-weight: 500;
|
|
55
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
56
|
+
text-transform: uppercase;
|
|
57
|
+
letter-spacing: 0.08em;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.sl-kpi-v {
|
|
61
|
+
font-family: var(--font-display, Georgia, serif);
|
|
62
|
+
font-size: 26px;
|
|
63
|
+
font-weight: 500;
|
|
64
|
+
font-style: normal;
|
|
65
|
+
color: var(--fg);
|
|
66
|
+
margin-top: 4px;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.sl-kpi-sub {
|
|
70
|
+
font-size: 0.7rem;
|
|
71
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
72
|
+
font-family: var(--font-mono, monospace);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.sl-forecast-card {
|
|
76
|
+
background: var(--bg-surface, var(--bg-base));
|
|
77
|
+
border: 1px solid var(--border-soft, rgba(0,0,0,0.08));
|
|
78
|
+
border-radius: 8px;
|
|
79
|
+
overflow: hidden;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.sl-forecast-card-h {
|
|
83
|
+
padding: 10px 14px;
|
|
84
|
+
font-size: 0.8rem;
|
|
85
|
+
font-weight: 600;
|
|
86
|
+
color: var(--fg-muted);
|
|
87
|
+
border-bottom: 1px solid var(--border-soft, rgba(0,0,0,0.06));
|
|
88
|
+
text-transform: uppercase;
|
|
89
|
+
letter-spacing: 0.04em;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.sl-funnel-row {
|
|
93
|
+
display: flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
gap: 10px;
|
|
96
|
+
padding: 8px 14px;
|
|
97
|
+
border-bottom: 1px solid var(--border-soft, rgba(0,0,0,0.04));
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.sl-funnel-row:last-child {
|
|
101
|
+
border-bottom: none;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.sl-funnel-name {
|
|
105
|
+
width: 100px;
|
|
106
|
+
font-size: 0.78rem;
|
|
107
|
+
color: var(--fg);
|
|
108
|
+
flex-shrink: 0;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
.sl-funnel-bar {
|
|
112
|
+
flex: 1;
|
|
113
|
+
height: 22px;
|
|
114
|
+
border-radius: var(--radius-xs, 3px);
|
|
115
|
+
background: var(--bg-sunken, rgba(0,0,0,0.06));
|
|
116
|
+
position: relative;
|
|
117
|
+
overflow: hidden;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.sl-funnel-bar-fill {
|
|
121
|
+
position: absolute;
|
|
122
|
+
left: 0;
|
|
123
|
+
top: 0;
|
|
124
|
+
height: 100%;
|
|
125
|
+
background: var(--bg-raised, rgba(128,128,128,0.3));
|
|
126
|
+
border: 1px solid var(--border-soft, rgba(0,0,0,0.08));
|
|
127
|
+
border-radius: var(--radius-xs, 3px);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.sl-funnel-bar-wt {
|
|
131
|
+
position: absolute;
|
|
132
|
+
left: 0;
|
|
133
|
+
top: 0;
|
|
134
|
+
height: 100%;
|
|
135
|
+
background: var(--primary, hsl(215,70%,55%));
|
|
136
|
+
border-radius: var(--radius-xs, 3px);
|
|
137
|
+
opacity: 0.9;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.sl-funnel-val {
|
|
141
|
+
width: 72px;
|
|
142
|
+
font-size: 0.72rem;
|
|
143
|
+
font-family: var(--font-mono, monospace);
|
|
144
|
+
color: var(--fg-muted);
|
|
145
|
+
text-align: right;
|
|
146
|
+
flex-shrink: 0;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.sl-months {
|
|
150
|
+
display: flex;
|
|
151
|
+
align-items: flex-end;
|
|
152
|
+
gap: 16px;
|
|
153
|
+
padding: 14px;
|
|
154
|
+
height: 170px;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.sl-month {
|
|
158
|
+
display: flex;
|
|
159
|
+
flex-direction: column;
|
|
160
|
+
align-items: center;
|
|
161
|
+
gap: 4px;
|
|
162
|
+
flex: 1;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.sl-month-bar-wrap {
|
|
166
|
+
flex: 1;
|
|
167
|
+
display: flex;
|
|
168
|
+
align-items: flex-end;
|
|
169
|
+
width: 100%;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
.sl-month-bar {
|
|
173
|
+
width: 100%;
|
|
174
|
+
background: var(--primary, hsl(215,70%,55%));
|
|
175
|
+
border-radius: 3px 3px 0 0;
|
|
176
|
+
opacity: 0.7;
|
|
177
|
+
min-height: 4px;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.sl-month-val {
|
|
181
|
+
font-size: 0.65rem;
|
|
182
|
+
font-family: var(--font-mono, monospace);
|
|
183
|
+
color: var(--fg-muted);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.sl-month-lab {
|
|
187
|
+
font-size: 0.65rem;
|
|
188
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
189
|
+
text-transform: uppercase;
|
|
190
|
+
letter-spacing: 0.04em;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/* ── Won view (.sl-won-*) ───────────────────────────────────────────────────── */
|
|
194
|
+
|
|
195
|
+
.sl-won-wrap {
|
|
196
|
+
display: flex;
|
|
197
|
+
flex-direction: column;
|
|
198
|
+
gap: 16px;
|
|
199
|
+
padding: 16px;
|
|
200
|
+
overflow-y: auto;
|
|
201
|
+
height: 100%;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.sl-won-kpis {
|
|
205
|
+
display: grid;
|
|
206
|
+
grid-template-columns: repeat(4, 1fr);
|
|
207
|
+
gap: 10px;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.sl-won-table-wrap {
|
|
211
|
+
background: var(--bg-surface, var(--bg-base));
|
|
212
|
+
border: 1px solid var(--border-soft, rgba(0,0,0,0.08));
|
|
213
|
+
border-radius: 8px;
|
|
214
|
+
overflow: hidden;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
.sl-won-table {
|
|
218
|
+
width: 100%;
|
|
219
|
+
border-collapse: collapse;
|
|
220
|
+
font-size: 0.8rem;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.sl-won-table thead tr {
|
|
224
|
+
background: var(--bg-inset, rgba(0,0,0,0.04));
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.sl-won-table th {
|
|
228
|
+
padding: 8px 12px;
|
|
229
|
+
text-align: left;
|
|
230
|
+
font-size: 0.7rem;
|
|
231
|
+
font-weight: 600;
|
|
232
|
+
color: var(--fg-muted);
|
|
233
|
+
text-transform: uppercase;
|
|
234
|
+
letter-spacing: 0.04em;
|
|
235
|
+
border-bottom: 1px solid var(--border-soft, rgba(0,0,0,0.08));
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.sl-won-table td {
|
|
239
|
+
padding: 9px 12px;
|
|
240
|
+
border-bottom: 1px solid var(--border-soft, rgba(0,0,0,0.04));
|
|
241
|
+
color: var(--fg);
|
|
242
|
+
vertical-align: middle;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.sl-won-table tbody tr:last-child td {
|
|
246
|
+
border-bottom: none;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.sl-won-table tbody tr:hover td {
|
|
250
|
+
background: var(--bg-hover, rgba(0,0,0,0.025));
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.sl-won-badge {
|
|
254
|
+
display: inline-flex;
|
|
255
|
+
align-items: center;
|
|
256
|
+
padding: 2px 6px;
|
|
257
|
+
border-radius: 4px;
|
|
258
|
+
font-size: 0.65rem;
|
|
259
|
+
font-weight: 500;
|
|
260
|
+
background: var(--bg-inset, rgba(0,0,0,0.08));
|
|
261
|
+
color: var(--fg-muted);
|
|
262
|
+
text-transform: capitalize;
|
|
263
|
+
letter-spacing: 0.02em;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.sl-won-amt {
|
|
267
|
+
font-family: var(--font-mono, monospace);
|
|
268
|
+
font-size: 0.8rem;
|
|
269
|
+
font-weight: 600;
|
|
270
|
+
color: var(--live, hsl(150,48%,52%));
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/* ── Kanban domain overrides ────────────────────────────────────────────────── */
|
|
274
|
+
|
|
275
|
+
/* Stage dot colours per the screen doc */
|
|
276
|
+
.kb-col[data-stage="lead"] .kb-col-dot { background: var(--fg-faint, rgba(128,128,128,0.4)); }
|
|
277
|
+
.kb-col[data-stage="qualified"] .kb-col-dot { background: var(--systemic, hsl(140,55%,42%)); }
|
|
278
|
+
.kb-col[data-stage="proposal"] .kb-col-dot { background: var(--primary, hsl(215,70%,55%)); }
|
|
279
|
+
.kb-col[data-stage="negotiation"] .kb-col-dot { background: var(--achievement, hsl(38,85%,52%)); }
|
|
280
|
+
.kb-col[data-stage="closing"] .kb-col-dot { background: var(--live, hsl(348,72%,52%)); }
|
|
281
|
+
|
|
282
|
+
/* Deal row ux-mode dots */
|
|
283
|
+
.ux-dot {
|
|
284
|
+
display: inline-block;
|
|
285
|
+
width: 7px;
|
|
286
|
+
height: 7px;
|
|
287
|
+
border-radius: 50%;
|
|
288
|
+
flex-shrink: 0;
|
|
289
|
+
margin-right: 4px;
|
|
290
|
+
}
|
|
291
|
+
.ux-dot.ux-confirm { background: var(--achievement, hsl(38,85%,52%)); }
|
|
292
|
+
.ux-dot.ux-silent { background: var(--fg-faint, rgba(128,128,128,0.4)); }
|
|
293
|
+
.ux-dot.ux-approve { background: var(--primary, hsl(215,70%,55%)); }
|
|
294
|
+
|
|
295
|
+
/* Next-action chip in list rows */
|
|
296
|
+
.next-chip {
|
|
297
|
+
display: inline-flex;
|
|
298
|
+
align-items: center;
|
|
299
|
+
gap: 3px;
|
|
300
|
+
font-size: 0.68rem;
|
|
301
|
+
color: var(--fg-muted);
|
|
302
|
+
background: var(--bg-inset, rgba(0,0,0,0.06));
|
|
303
|
+
border-radius: 4px;
|
|
304
|
+
padding: 2px 6px;
|
|
305
|
+
max-width: 180px;
|
|
306
|
+
white-space: nowrap;
|
|
307
|
+
overflow: hidden;
|
|
308
|
+
text-overflow: ellipsis;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* Stage chip in detail pane */
|
|
312
|
+
.stage-chip {
|
|
313
|
+
display: inline-flex;
|
|
314
|
+
align-items: center;
|
|
315
|
+
gap: 4px;
|
|
316
|
+
font-size: 0.7rem;
|
|
317
|
+
font-weight: 600;
|
|
318
|
+
padding: 3px 8px;
|
|
319
|
+
border-radius: 5px;
|
|
320
|
+
background: var(--bg-inset, rgba(0,0,0,0.07));
|
|
321
|
+
color: var(--fg-muted);
|
|
322
|
+
text-transform: capitalize;
|
|
323
|
+
letter-spacing: 0.03em;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/* Hot filter (Closing soon — achievement tint) */
|
|
327
|
+
.nav-item.is-hot .nav-item-count {
|
|
328
|
+
color: var(--achievement, hsl(38,85%,52%));
|
|
329
|
+
font-weight: 700;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/* Deal amount in list rows */
|
|
333
|
+
.split-row-amt {
|
|
334
|
+
font-family: var(--font-mono, monospace);
|
|
335
|
+
font-size: 0.78rem;
|
|
336
|
+
font-weight: 600;
|
|
337
|
+
color: var(--fg);
|
|
338
|
+
white-space: nowrap;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* Age / urgency */
|
|
342
|
+
.split-row-when {
|
|
343
|
+
font-size: 0.68rem;
|
|
344
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
345
|
+
font-family: var(--font-mono, monospace);
|
|
346
|
+
white-space: nowrap;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.split-row-when.is-urgent {
|
|
350
|
+
color: var(--danger, hsl(0,65%,52%));
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
/* F-03 · Selected-row accent rail → explicit warm-primary (design uses
|
|
354
|
+
var(--primary), not the sessions amber-ochre --tint-fg-active). */
|
|
355
|
+
.split-row.is-selected .split-row-accent,
|
|
356
|
+
.split-row.is-on .split-row-accent {
|
|
357
|
+
background: var(--primary, hsl(20,50%,34%));
|
|
358
|
+
border-radius: 2px;
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/* F-02 · Pipeline list-pane head — sticky Fraunces "Sales" title + mono
|
|
362
|
+
count above the stage groups. Ported from the design's .pl-list-head /
|
|
363
|
+
.pl-list-title / .pl-list-meta (not an app-kit primitive). */
|
|
364
|
+
.sl-list-head {
|
|
365
|
+
display: flex;
|
|
366
|
+
align-items: center;
|
|
367
|
+
justify-content: space-between;
|
|
368
|
+
padding: var(--space-3, 12px) var(--space-4, 16px);
|
|
369
|
+
border-bottom: 1px solid var(--border-soft);
|
|
370
|
+
position: sticky;
|
|
371
|
+
top: 0;
|
|
372
|
+
background: var(--bg-surface);
|
|
373
|
+
z-index: 6;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.sl-list-title {
|
|
377
|
+
font-family: var(--font-display, Georgia, serif);
|
|
378
|
+
font-weight: 500;
|
|
379
|
+
font-size: var(--text-h3, 18px);
|
|
380
|
+
color: var(--fg);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
.sl-list-meta {
|
|
384
|
+
font-family: var(--font-mono, monospace);
|
|
385
|
+
font-size: 10.5px;
|
|
386
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
387
|
+
letter-spacing: 0.04em;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/* F-05 · Detail-pane title → Fraunces 28px (design spec). The app-kit
|
|
391
|
+
primitive sets Fraunces at --text-h2 (24px); sales bumps it to 28px to
|
|
392
|
+
match the locked sales design's .pl-detail-title. */
|
|
393
|
+
.split-detail-title {
|
|
394
|
+
font-family: var(--font-display, Georgia, serif);
|
|
395
|
+
font-size: 28px;
|
|
396
|
+
font-weight: 500;
|
|
397
|
+
line-height: 1.15;
|
|
398
|
+
letter-spacing: -0.012em;
|
|
399
|
+
color: var(--fg);
|
|
400
|
+
margin: 0 0 var(--space-2, 8px);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/* F-06 / F-07 / F-08 · The facts grid (3-col card), next-action card
|
|
404
|
+
(live-tinted border + bg), and next-action head (UPPERCASE mono 10px)
|
|
405
|
+
are all consumed verbatim from the app-kit primitives (.split-facts,
|
|
406
|
+
.split-next, .split-next-head) — no sales-local override. The previous
|
|
407
|
+
2-col plain-grid / un-tinted overrides were drift and have been removed
|
|
408
|
+
so the kit's design-correct rules apply. */
|
|
409
|
+
|
|
410
|
+
/* Activity timeline in detail pane */
|
|
411
|
+
.split-timeline {
|
|
412
|
+
display: flex;
|
|
413
|
+
flex-direction: column;
|
|
414
|
+
gap: 8px;
|
|
415
|
+
margin-top: 12px;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.split-tl-row {
|
|
419
|
+
display: flex;
|
|
420
|
+
gap: 10px;
|
|
421
|
+
align-items: flex-start;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
.split-tl-dot {
|
|
425
|
+
width: 7px;
|
|
426
|
+
height: 7px;
|
|
427
|
+
border-radius: 50%;
|
|
428
|
+
background: var(--fg-faint, rgba(128,128,128,0.4));
|
|
429
|
+
flex-shrink: 0;
|
|
430
|
+
margin-top: 5px;
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
.split-tl-body {
|
|
434
|
+
flex: 1;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
.split-tl-title {
|
|
438
|
+
font-size: 0.78rem;
|
|
439
|
+
color: var(--fg);
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
.split-tl-when {
|
|
443
|
+
font-size: 0.65rem;
|
|
444
|
+
color: var(--fg-faint, var(--fg-muted));
|
|
445
|
+
font-family: var(--font-mono, monospace);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* Seg toggle (list/kanban) injected into sidebar nav-group */
|
|
449
|
+
.nav-view-seg {
|
|
450
|
+
margin: 4px 8px 6px;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/* Kanban board horizontal scroll mask */
|
|
454
|
+
.kb-board-wrap {
|
|
455
|
+
overflow-x: auto;
|
|
456
|
+
height: 100%;
|
|
457
|
+
-webkit-mask-image: linear-gradient(to right, black calc(100% - 40px), transparent 100%);
|
|
458
|
+
mask-image: linear-gradient(to right, black calc(100% - 40px), transparent 100%);
|
|
459
|
+
}
|
package/manifest.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "com.ikenga.sales",
|
|
3
|
+
"name": "Sales",
|
|
4
|
+
"version": "0.2.0",
|
|
5
|
+
"ikenga_api": "1",
|
|
6
|
+
"kind": "embedded",
|
|
7
|
+
"author": { "name": "Royalti", "key": "royalti" },
|
|
8
|
+
|
|
9
|
+
"ui": {
|
|
10
|
+
"nav": [
|
|
11
|
+
{
|
|
12
|
+
"id": "sales.index",
|
|
13
|
+
"label": "Sales",
|
|
14
|
+
"icon": "trending-up",
|
|
15
|
+
"section": "ops",
|
|
16
|
+
"route": "/pkg/com.ikenga.sales/"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"routes": [
|
|
20
|
+
{
|
|
21
|
+
"path": "/",
|
|
22
|
+
"kind": "iframe",
|
|
23
|
+
"source": "dist/index.html"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"csp": {
|
|
27
|
+
"script-src": ["'self'", "'unsafe-inline'", "https://esm.sh"],
|
|
28
|
+
"style-src": ["'self'", "'unsafe-inline'", "https://esm.sh"],
|
|
29
|
+
"font-src": ["'self'", "https://esm.sh", "data:"],
|
|
30
|
+
"connect-src": ["'self'", "https://esm.sh"]
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
"capabilities": {
|
|
35
|
+
"sqlite": { "db": "ikenga.local" }
|
|
36
|
+
},
|
|
37
|
+
|
|
38
|
+
"permissions": {
|
|
39
|
+
"shell.execute": [],
|
|
40
|
+
"fs.read": [],
|
|
41
|
+
"fs.write": [],
|
|
42
|
+
"net": ["https://esm.sh"],
|
|
43
|
+
"sqlite.tables": [
|
|
44
|
+
"sales_deals",
|
|
45
|
+
"sales_activities",
|
|
46
|
+
"sales_forecasts",
|
|
47
|
+
"sales_lead_scores",
|
|
48
|
+
"contacts"
|
|
49
|
+
],
|
|
50
|
+
"vault.keys": []
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
"requires": [
|
|
54
|
+
{
|
|
55
|
+
"kind": "skill",
|
|
56
|
+
"name": "skill-sales"
|
|
57
|
+
}
|
|
58
|
+
]
|
|
59
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ikenga/pkg-sales",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Sales — Pipeline, Forecast, Won over the production sales schema. Multi-file iframe pkg; deterministic CSS vendoring build.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/Royalti-io/ikenga-pkgs.git",
|
|
9
|
+
"directory": "packages/apps/sales"
|
|
10
|
+
},
|
|
11
|
+
"publishConfig": {
|
|
12
|
+
"access": "public"
|
|
13
|
+
},
|
|
14
|
+
"type": "module",
|
|
15
|
+
"files": [
|
|
16
|
+
"manifest.json",
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@ikenga/tokens": "^0.3.0"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "node scripts/build.mjs"
|
|
25
|
+
}
|
|
26
|
+
}
|