@ketvietlab/ketsuite 0.1.20 → 0.1.24
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/cli.js +9 -3
- package/dist/cli.js.map +1 -1
- package/dist/demo/crm.d.ts +3 -0
- package/dist/demo/crm.d.ts.map +1 -0
- package/dist/demo/crm.js +418 -0
- package/dist/demo/crm.js.map +1 -0
- package/dist/demo/partner.d.ts +8 -0
- package/dist/demo/partner.d.ts.map +1 -0
- package/dist/demo/partner.js +179 -0
- package/dist/demo/partner.js.map +1 -0
- package/dist/demo/product.d.ts +25 -0
- package/dist/demo/product.d.ts.map +1 -0
- package/dist/demo/product.js +579 -0
- package/dist/demo/product.js.map +1 -0
- package/dist/demo/purchase.d.ts +4 -0
- package/dist/demo/purchase.d.ts.map +1 -0
- package/dist/demo/purchase.js +58 -0
- package/dist/demo/purchase.js.map +1 -0
- package/dist/demo/sale.d.ts +4 -0
- package/dist/demo/sale.d.ts.map +1 -0
- package/dist/demo/sale.js +52 -0
- package/dist/demo/sale.js.map +1 -0
- package/dist/demo/seed.d.ts +14 -0
- package/dist/demo/seed.d.ts.map +1 -0
- package/dist/demo/seed.js +88 -0
- package/dist/demo/seed.js.map +1 -0
- package/dist/demo/stock.d.ts +7 -0
- package/dist/demo/stock.d.ts.map +1 -0
- package/dist/demo/stock.js +26 -0
- package/dist/demo/stock.js.map +1 -0
- package/dist/demo/user.d.ts +4 -0
- package/dist/demo/user.d.ts.map +1 -0
- package/dist/demo/user.js +41 -0
- package/dist/demo/user.js.map +1 -0
- package/dist/demo/util.d.ts +7 -0
- package/dist/demo/util.d.ts.map +1 -0
- package/dist/demo/util.js +19 -0
- package/dist/demo/util.js.map +1 -0
- package/dist/modules/backend/design/client/backend-shell.d.mts +2 -2
- package/dist/modules/backend/design/client/backend-shell.d.mts.map +1 -1
- package/dist/modules/backend/design/client/backend-shell.mjs +1 -1
- package/dist/modules/backend/design/client/backend-shell.mjs.map +3 -3
- package/dist/modules/backend/design/content.css +9 -9
- package/dist/modules/backend/design/controls.css +5 -5
- package/dist/modules/backend/design/forms.css +12 -5
- package/dist/modules/backend/design/foundation.css +3 -3
- package/dist/modules/backend/design/lists.css +23 -24
- package/dist/modules/backend/design/user-workflow.css +2 -2
- package/dist/modules/backend/screen.d.ts.map +1 -1
- package/dist/modules/backend/screen.js +11 -2
- package/dist/modules/backend/screen.js.map +1 -1
- package/dist/modules/crm/functions/access.d.ts +3 -0
- package/dist/modules/crm/functions/access.d.ts.map +1 -0
- package/dist/modules/crm/functions/access.js +89 -0
- package/dist/modules/crm/functions/access.js.map +1 -0
- package/dist/modules/crm/functions/activities.d.ts +3 -0
- package/dist/modules/crm/functions/activities.d.ts.map +1 -0
- package/dist/modules/crm/functions/activities.js +174 -0
- package/dist/modules/crm/functions/activities.js.map +1 -0
- package/dist/modules/crm/functions/cases.d.ts +3 -0
- package/dist/modules/crm/functions/cases.d.ts.map +1 -0
- package/dist/modules/crm/functions/cases.js +585 -0
- package/dist/modules/crm/functions/cases.js.map +1 -0
- package/dist/modules/crm/functions/configuration.d.ts +3 -0
- package/dist/modules/crm/functions/configuration.d.ts.map +1 -0
- package/dist/modules/crm/functions/configuration.js +331 -0
- package/dist/modules/crm/functions/configuration.js.map +1 -0
- package/dist/modules/crm/functions/gamification.d.ts +3 -0
- package/dist/modules/crm/functions/gamification.d.ts.map +1 -0
- package/dist/modules/crm/functions/gamification.js +58 -0
- package/dist/modules/crm/functions/gamification.js.map +1 -0
- package/dist/modules/crm/functions/index.d.ts +4 -0
- package/dist/modules/crm/functions/index.d.ts.map +1 -0
- package/dist/modules/crm/functions/index.js +33 -0
- package/dist/modules/crm/functions/index.js.map +1 -0
- package/dist/modules/crm/functions/modal-context.d.ts +3 -0
- package/dist/modules/crm/functions/modal-context.d.ts.map +1 -0
- package/dist/modules/crm/functions/modal-context.js +248 -0
- package/dist/modules/crm/functions/modal-context.js.map +1 -0
- package/dist/modules/crm/functions/previews.d.ts +3 -0
- package/dist/modules/crm/functions/previews.d.ts.map +1 -0
- package/dist/modules/crm/functions/previews.js +20 -0
- package/dist/modules/crm/functions/previews.js.map +1 -0
- package/dist/modules/crm/functions/shared.d.ts +31 -0
- package/dist/modules/crm/functions/shared.d.ts.map +1 -0
- package/dist/modules/crm/functions/shared.js +194 -0
- package/dist/modules/crm/functions/shared.js.map +1 -0
- package/dist/modules/crm/index.d.ts +1 -1
- package/dist/modules/crm/index.d.ts.map +1 -1
- package/dist/modules/crm/index.js +2 -2
- package/dist/modules/crm/index.js.map +1 -1
- package/dist/modules/crm/messages.d.ts +4 -1
- package/dist/modules/crm/messages.d.ts.map +1 -1
- package/dist/modules/crm/messages.js +6 -0
- package/dist/modules/crm/messages.js.map +1 -1
- package/dist/modules/crm/record-modal-labels.d.ts +9 -0
- package/dist/modules/crm/record-modal-labels.d.ts.map +1 -0
- package/dist/modules/crm/record-modal-labels.js +36 -0
- package/dist/modules/crm/record-modal-labels.js.map +1 -0
- package/dist/modules/crm/types.d.ts +5 -0
- package/dist/modules/crm/types.d.ts.map +1 -1
- package/dist/modules/crm/types.js +9 -0
- package/dist/modules/crm/types.js.map +1 -1
- package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts +352 -0
- package/dist/modules/crm_backend/client/crm-configuration-modal.d.mts.map +1 -0
- package/dist/modules/crm_backend/client/crm-configuration-modal.mjs +2 -0
- package/dist/modules/crm_backend/client/crm-configuration-modal.mjs.map +7 -0
- package/dist/modules/crm_backend/index.d.ts.map +1 -1
- package/dist/modules/crm_backend/index.js +5 -1
- package/dist/modules/crm_backend/index.js.map +1 -1
- package/dist/modules/crm_backend/islands.d.ts +27 -0
- package/dist/modules/crm_backend/islands.d.ts.map +1 -1
- package/dist/modules/crm_backend/islands.js +22 -0
- package/dist/modules/crm_backend/islands.js.map +1 -1
- package/dist/modules/crm_backend/messages.d.ts +30 -0
- package/dist/modules/crm_backend/messages.d.ts.map +1 -1
- package/dist/modules/crm_backend/messages.js +30 -0
- package/dist/modules/crm_backend/messages.js.map +1 -1
- package/dist/modules/crm_backend/modal/configuration-modal-view.d.ts +55 -0
- package/dist/modules/crm_backend/modal/configuration-modal-view.d.ts.map +1 -0
- package/dist/modules/crm_backend/modal/configuration-modal-view.js +601 -0
- package/dist/modules/crm_backend/modal/configuration-modal-view.js.map +1 -0
- package/dist/modules/crm_backend/routes.d.ts.map +1 -1
- package/dist/modules/crm_backend/routes.js +107 -368
- package/dist/modules/crm_backend/routes.js.map +1 -1
- package/dist/modules/crm_backend/screens/configuration.d.ts +24 -32
- package/dist/modules/crm_backend/screens/configuration.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/configuration.js +183 -274
- package/dist/modules/crm_backend/screens/configuration.js.map +1 -1
- package/dist/modules/crm_backend/screens/index.d.ts +2 -2
- package/dist/modules/crm_backend/screens/index.d.ts.map +1 -1
- package/dist/modules/crm_backend/screens/index.js +1 -1
- package/dist/modules/crm_backend/screens/index.js.map +1 -1
- package/dist/modules/product/functions.d.ts +14 -1
- package/dist/modules/product/functions.d.ts.map +1 -1
- package/dist/modules/product/functions.js +36 -31
- package/dist/modules/product/functions.js.map +1 -1
- package/dist/modules/product/product-modal-context.d.ts +3 -0
- package/dist/modules/product/product-modal-context.d.ts.map +1 -0
- package/dist/modules/product/product-modal-context.js +171 -0
- package/dist/modules/product/product-modal-context.js.map +1 -0
- package/dist/modules/product_backend/client/product-modal.d.mts +143 -0
- package/dist/modules/product_backend/client/product-modal.d.mts.map +1 -0
- package/dist/modules/product_backend/client/product-modal.mjs +2 -0
- package/dist/modules/product_backend/client/product-modal.mjs.map +7 -0
- package/dist/modules/product_backend/index.d.ts.map +1 -1
- package/dist/modules/product_backend/index.js +16 -0
- package/dist/modules/product_backend/index.js.map +1 -1
- package/dist/modules/product_backend/islands.d.ts +1 -0
- package/dist/modules/product_backend/islands.d.ts.map +1 -1
- package/dist/modules/product_backend/islands.js +9 -0
- package/dist/modules/product_backend/islands.js.map +1 -1
- package/dist/modules/product_backend/modal/product-modal-view.d.ts +43 -0
- package/dist/modules/product_backend/modal/product-modal-view.d.ts.map +1 -0
- package/dist/modules/product_backend/modal/product-modal-view.js +602 -0
- package/dist/modules/product_backend/modal/product-modal-view.js.map +1 -0
- package/dist/modules/product_backend/routes.d.ts.map +1 -1
- package/dist/modules/product_backend/routes.js +44 -330
- package/dist/modules/product_backend/routes.js.map +1 -1
- package/dist/modules/product_backend/screens/detail.d.ts.map +1 -1
- package/dist/modules/product_backend/screens/detail.js +6 -108
- package/dist/modules/product_backend/screens/detail.js.map +1 -1
- package/dist/modules/product_backend/screens/index.d.ts +0 -1
- package/dist/modules/product_backend/screens/index.d.ts.map +1 -1
- package/dist/modules/product_backend/screens/index.js +0 -1
- package/dist/modules/product_backend/screens/index.js.map +1 -1
- package/dist/modules/product_backend/screens/list.d.ts +3 -1
- package/dist/modules/product_backend/screens/list.d.ts.map +1 -1
- package/dist/modules/product_backend/screens/list.js +6 -5
- package/dist/modules/product_backend/screens/list.js.map +1 -1
- package/dist/modules/user/authorization.d.ts.map +1 -1
- package/dist/modules/user/authorization.js +114 -0
- package/dist/modules/user/authorization.js.map +1 -1
- package/dist/modules/user/functions.d.ts.map +1 -1
- package/dist/modules/user/functions.js +2 -0
- package/dist/modules/user/functions.js.map +1 -1
- package/dist/modules/user/user-modal-context.d.ts +3 -0
- package/dist/modules/user/user-modal-context.d.ts.map +1 -0
- package/dist/modules/user/user-modal-context.js +151 -0
- package/dist/modules/user/user-modal-context.js.map +1 -0
- package/dist/modules/user_backend/client/user-modal.d.mts +72 -0
- package/dist/modules/user_backend/client/user-modal.d.mts.map +1 -0
- package/dist/modules/user_backend/client/user-modal.mjs +2 -0
- package/dist/modules/user_backend/client/user-modal.mjs.map +7 -0
- package/dist/modules/user_backend/index.d.ts.map +1 -1
- package/dist/modules/user_backend/index.js +9 -0
- package/dist/modules/user_backend/index.js.map +1 -1
- package/dist/modules/user_backend/islands.d.ts +15 -0
- package/dist/modules/user_backend/islands.d.ts.map +1 -0
- package/dist/modules/user_backend/islands.js +14 -0
- package/dist/modules/user_backend/islands.js.map +1 -0
- package/dist/modules/user_backend/messages.d.ts +30 -0
- package/dist/modules/user_backend/messages.d.ts.map +1 -1
- package/dist/modules/user_backend/messages.js +30 -0
- package/dist/modules/user_backend/messages.js.map +1 -1
- package/dist/modules/user_backend/modal/user-modal-view.d.ts +26 -0
- package/dist/modules/user_backend/modal/user-modal-view.d.ts.map +1 -0
- package/dist/modules/user_backend/modal/user-modal-view.js +320 -0
- package/dist/modules/user_backend/modal/user-modal-view.js.map +1 -0
- package/dist/modules/user_backend/routes.d.ts.map +1 -1
- package/dist/modules/user_backend/routes.js +15 -3
- package/dist/modules/user_backend/routes.js.map +1 -1
- package/dist/permission-catalogue.d.ts.map +1 -1
- package/dist/permission-catalogue.js +8 -0
- package/dist/permission-catalogue.js.map +1 -1
- package/dist/scaffold/index.js +1 -1
- package/dist/ui/client/activity.css +6 -6
- package/dist/ui/client/calendar.css +6 -6
- package/dist/ui/client/flow-app.css +1 -1
- package/dist/ui/client/mail.css +6 -6
- package/dist/ui/client/record-modal-form.d.ts +67 -0
- package/dist/ui/client/record-modal-form.d.ts.map +1 -0
- package/dist/ui/client/record-modal-form.js +45 -0
- package/dist/ui/client/record-modal-form.js.map +1 -0
- package/dist/ui/client/record-modal.d.ts +97 -6
- package/dist/ui/client/record-modal.d.ts.map +1 -1
- package/dist/ui/client/record-modal.js +330 -64
- package/dist/ui/client/record-modal.js.map +1 -1
- package/dist/ui/index.d.ts +2 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +2 -1
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/layout.d.ts.map +1 -1
- package/dist/ui/layout.js +5 -3
- package/dist/ui/layout.js.map +1 -1
- package/dist/ui/nav.d.ts +7 -0
- package/dist/ui/nav.d.ts.map +1 -1
- package/dist/ui/nav.js +1 -1
- package/dist/ui/nav.js.map +1 -1
- package/dist/ui/record-modal.d.ts +15 -0
- package/dist/ui/record-modal.d.ts.map +1 -1
- package/dist/ui/record-modal.js +12 -0
- package/dist/ui/record-modal.js.map +1 -1
- package/dist/ui/table.d.ts.map +1 -1
- package/dist/ui/table.js +1 -1
- package/dist/ui/table.js.map +1 -1
- package/package.json +4 -4
- package/dist/modules/crm/functions.d.ts +0 -10
- package/dist/modules/crm/functions.d.ts.map +0 -1
- package/dist/modules/crm/functions.js +0 -1394
- package/dist/modules/crm/functions.js.map +0 -1
- package/dist/modules/product_backend/screens/create.d.ts +0 -16
- package/dist/modules/product_backend/screens/create.d.ts.map +0 -1
- package/dist/modules/product_backend/screens/create.js +0 -86
- package/dist/modules/product_backend/screens/create.js.map +0 -1
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
|
|
34
34
|
[data-ui="activity-title"] {
|
|
35
35
|
margin: 0;
|
|
36
|
-
font-size: 0.
|
|
36
|
+
font-size: 0.9375rem;
|
|
37
37
|
}
|
|
38
38
|
[data-ui="activity-schedule-trigger"] {
|
|
39
39
|
flex: 0 0 auto;
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
align-items: center;
|
|
58
58
|
gap: var(--admin-gap-sm);
|
|
59
59
|
color: var(--admin-ink-secondary);
|
|
60
|
-
font-size: 0.
|
|
60
|
+
font-size: 0.875rem;
|
|
61
61
|
}
|
|
62
62
|
[data-ui="activity-field"] > :is(input, select, textarea) {
|
|
63
63
|
grid-column: 2;
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
align-items: center;
|
|
74
74
|
gap: var(--admin-gap-xs);
|
|
75
75
|
color: var(--admin-ink-secondary);
|
|
76
|
-
font-size: 0.
|
|
76
|
+
font-size: 0.875rem;
|
|
77
77
|
}
|
|
78
78
|
[data-ui="activity-submit"] {
|
|
79
79
|
flex: 0 0 auto;
|
|
@@ -124,14 +124,14 @@
|
|
|
124
124
|
[data-ui="activity-loading"],
|
|
125
125
|
[data-ui="activity-empty"] {
|
|
126
126
|
color: var(--admin-ink-muted);
|
|
127
|
-
font-size: 0.
|
|
127
|
+
font-size: 0.8125rem;
|
|
128
128
|
}
|
|
129
129
|
[data-ui="activity-state"] {
|
|
130
130
|
padding: 0.2rem 0.5rem;
|
|
131
131
|
border-radius: 999px;
|
|
132
132
|
background: var(--admin-neutral-soft);
|
|
133
133
|
color: var(--admin-status-fixed-ink);
|
|
134
|
-
font-size: 0.
|
|
134
|
+
font-size: 0.8125rem;
|
|
135
135
|
font-weight: 700;
|
|
136
136
|
}
|
|
137
137
|
[data-ui="activity-item-note"] {
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
[data-ui="activity-attachments"] {
|
|
145
145
|
margin: var(--admin-gap-sm) 0;
|
|
146
146
|
padding-inline-start: 1.25rem;
|
|
147
|
-
font-size: 0.
|
|
147
|
+
font-size: 0.875rem;
|
|
148
148
|
}
|
|
149
149
|
[data-ui="activity-complete"],
|
|
150
150
|
[data-ui="activity-reschedule"] {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
}
|
|
18
18
|
[data-ui="calendar-range"] {
|
|
19
19
|
color: var(--admin-ink-muted);
|
|
20
|
-
font-size: 0.
|
|
20
|
+
font-size: 0.875rem;
|
|
21
21
|
}
|
|
22
22
|
[data-ui="calendar-navigation"],
|
|
23
23
|
[data-ui="calendar-views"] {
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
[data-ui="calendar-create-title"] {
|
|
48
48
|
grid-column: 1 / -1;
|
|
49
49
|
margin: 0;
|
|
50
|
-
font-size: 0.
|
|
50
|
+
font-size: 0.9375rem;
|
|
51
51
|
}
|
|
52
52
|
[data-ui="calendar-field"] {
|
|
53
53
|
display: grid;
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
align-items: center;
|
|
56
56
|
gap: var(--admin-gap-sm);
|
|
57
57
|
color: var(--admin-ink-secondary);
|
|
58
|
-
font-size: 0.
|
|
58
|
+
font-size: 0.875rem;
|
|
59
59
|
}
|
|
60
60
|
/* Only the placement; the control itself is `form-control`, which is where the
|
|
61
61
|
focus ring, the disabled state and the invalid state live. */
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
}
|
|
112
112
|
[data-ui="calendar-day-label"] {
|
|
113
113
|
color: var(--admin-ink-muted);
|
|
114
|
-
font-size: 0.
|
|
114
|
+
font-size: 0.8125rem;
|
|
115
115
|
}
|
|
116
116
|
[data-ui="calendar-day-events"] {
|
|
117
117
|
display: grid;
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
[data-ui="calendar-week"] [data-ui="calendar-event"],
|
|
130
130
|
[data-ui="calendar-month"] [data-ui="calendar-event"] {
|
|
131
131
|
padding: 0.35rem;
|
|
132
|
-
font-size: 0.
|
|
132
|
+
font-size: 0.8125rem;
|
|
133
133
|
}
|
|
134
134
|
[data-ui="calendar-event-title"] {
|
|
135
135
|
min-inline-size: 0;
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
[data-ui="calendar-event-location"],
|
|
140
140
|
[data-ui="calendar-event-organizer"] {
|
|
141
141
|
color: var(--admin-ink-muted);
|
|
142
|
-
font-size: 0.
|
|
142
|
+
font-size: 0.8125rem;
|
|
143
143
|
}
|
|
144
144
|
@media (max-width: 63.9375rem) {
|
|
145
145
|
[data-ui="calendar-head"] {
|
package/dist/ui/client/mail.css
CHANGED
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
[data-ui="chatter-title"] {
|
|
24
24
|
margin: 0;
|
|
25
|
-
font-size: 0.
|
|
25
|
+
font-size: 0.9375rem;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
[data-ui="chatter-heading"],
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
[data-ui="chatter-followers"],
|
|
37
37
|
[data-ui="chatter-time"] {
|
|
38
38
|
color: var(--admin-ink-muted);
|
|
39
|
-
font-size: 0.
|
|
39
|
+
font-size: 0.8125rem;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
[data-ui="chatter-follow"],
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
align-items: center;
|
|
79
79
|
gap: var(--admin-gap-xs);
|
|
80
80
|
color: var(--admin-ink-secondary);
|
|
81
|
-
font-size: 0.
|
|
81
|
+
font-size: 0.875rem;
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
[data-ui="chatter-body"] {
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
background: var(--admin-surface);
|
|
91
91
|
color: var(--admin-ink);
|
|
92
92
|
font: inherit;
|
|
93
|
-
font-size: 0.
|
|
93
|
+
font-size: 0.875rem;
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
[data-ui="chatter-compose-actions"] > div {
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
[data-ui="chatter-attachments"] {
|
|
134
134
|
margin: var(--admin-gap-sm) 0 0;
|
|
135
135
|
padding-inline-start: 1.25rem;
|
|
136
|
-
font-size: 0.
|
|
136
|
+
font-size: 0.875rem;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
[data-ui="chatter-deliveries"] {
|
|
@@ -153,7 +153,7 @@
|
|
|
153
153
|
border-radius: 999px;
|
|
154
154
|
background: var(--admin-surface);
|
|
155
155
|
color: var(--admin-ink-secondary);
|
|
156
|
-
font-size: 0.
|
|
156
|
+
font-size: 0.8125rem;
|
|
157
157
|
font-weight: 600;
|
|
158
158
|
}
|
|
159
159
|
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { FieldOption, FieldProps } from '@ketvietlab/design-system';
|
|
2
|
+
import type { JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
|
|
3
|
+
/**
|
|
4
|
+
* The form a record modal's runtime submits. A `command` becomes the hidden
|
|
5
|
+
* `__command` field; without one, the submitting button names it.
|
|
6
|
+
*/
|
|
7
|
+
export declare const RecordModalForm: (props: {
|
|
8
|
+
kind: string;
|
|
9
|
+
fields: readonly FieldProps[];
|
|
10
|
+
actions?: readonly JSXChild[];
|
|
11
|
+
command?: string | null;
|
|
12
|
+
/** Lets a button outside this form submit it via the HTML `form` attribute. */
|
|
13
|
+
id?: string;
|
|
14
|
+
}) => TemplateResult;
|
|
15
|
+
/**
|
|
16
|
+
* The control of a select whose choice changes what the rest of the form offers.
|
|
17
|
+
* Use it as a design-system field's `control`; `data-record-state` makes the
|
|
18
|
+
* runtime re-render the view with the new choice.
|
|
19
|
+
*/
|
|
20
|
+
export declare const recordStateSelectControl: (props: {
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
state: string;
|
|
24
|
+
value: string;
|
|
25
|
+
options: readonly FieldOption[];
|
|
26
|
+
required?: boolean;
|
|
27
|
+
disabled?: boolean;
|
|
28
|
+
invalid?: boolean;
|
|
29
|
+
}) => TemplateResult;
|
|
30
|
+
/**
|
|
31
|
+
* Opens a dialog of the open record. `id` reaches the dialog as `params.id`;
|
|
32
|
+
* without it the dialog opens for a new child (for example a new team member).
|
|
33
|
+
*/
|
|
34
|
+
export declare const RecordDialogTrigger: (props: {
|
|
35
|
+
dialog: string;
|
|
36
|
+
id?: string | null;
|
|
37
|
+
children: JSXChild;
|
|
38
|
+
}) => TemplateResult;
|
|
39
|
+
/**
|
|
40
|
+
* A bare form for an action that names no field of its own — generate, remove.
|
|
41
|
+
* `data-layout="actions"` opts the form out of the record-form grid (built for a
|
|
42
|
+
* field/label pair), which would otherwise stretch a lone submit button to fill it.
|
|
43
|
+
*/
|
|
44
|
+
export declare const RecordActionForm: (props: {
|
|
45
|
+
kind: string;
|
|
46
|
+
command: string;
|
|
47
|
+
hidden?: Record<string, string>;
|
|
48
|
+
children: JSXChild;
|
|
49
|
+
}) => TemplateResult;
|
|
50
|
+
/**
|
|
51
|
+
* A form with no field or button of its own, submitted only through the HTML
|
|
52
|
+
* `form` attribute on buttons placed elsewhere — a menu whose every item names
|
|
53
|
+
* its own command on itself, so one empty form serves the whole menu.
|
|
54
|
+
*/
|
|
55
|
+
export declare const RecordCommandForm: (props: {
|
|
56
|
+
kind: string;
|
|
57
|
+
id: string;
|
|
58
|
+
}) => TemplateResult;
|
|
59
|
+
/**
|
|
60
|
+
* Marks its child as a labeled close control the runtime's own click handler
|
|
61
|
+
* recognizes from anywhere in the record's body — distinct from
|
|
62
|
+
* `data-ui="modal-close"`, the icon-only corner control's own styling hook.
|
|
63
|
+
*/
|
|
64
|
+
export declare const RecordCloseTrigger: (props: {
|
|
65
|
+
children: JSXChild;
|
|
66
|
+
}) => TemplateResult;
|
|
67
|
+
//# sourceMappingURL=record-modal-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-modal-form.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/ui/client/record-modal-form.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGtE;;;GAGG;AACH,eAAO,MAAM,eAAe,UAAW;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,UAAU,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,+EAA+E;IAC/E,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,KAAG,cAaH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,UAAW;IAC9C,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,KAAG,cAgBH,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,UAAW;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,cAIH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,UAAW;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,QAAQ,EAAE,QAAQ,CAAA;CACnB,KAAG,cAQH,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,UAAW;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,KAAG,cAEvE,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,UAAW;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,KAAG,cAElE,CAAA"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@ketvietlab/ketjs-view/jsx-runtime";
|
|
2
|
+
// Record-modal form markup, owned by the kit.
|
|
3
|
+
//
|
|
4
|
+
// A record modal's views are module code; markup belongs to `ketsuite/ui`. These
|
|
5
|
+
// are the pieces a view needs beyond the design system's fields and buttons: the
|
|
6
|
+
// form the runtime submits (optionally naming its command), a select whose choice
|
|
7
|
+
// feeds view state before anything is submitted, and a trigger that opens a dialog
|
|
8
|
+
// of the same record.
|
|
9
|
+
import { ActionGroup, Field } from '@ketvietlab/design-system';
|
|
10
|
+
import { RECORD_COMMAND_FIELD } from './record-modal.js';
|
|
11
|
+
/**
|
|
12
|
+
* The form a record modal's runtime submits. A `command` becomes the hidden
|
|
13
|
+
* `__command` field; without one, the submitting button names it.
|
|
14
|
+
*/
|
|
15
|
+
export const RecordModalForm = (props) => (_jsxs("form", { "data-ui": "record-form", method: "post", action: "", "data-record-kind": props.kind, id: props.id, children: [props.command ? (_jsx("input", { type: "hidden", name: RECORD_COMMAND_FIELD, value: props.command, autocomplete: "off" })) : (''), _jsx("div", { "data-ui": "form-grid", children: props.fields.map((item) => Field(item)) }), props.actions?.length ? _jsx("div", { "data-ui": "form-actions", children: ActionGroup({ actions: props.actions }) }) : ''] }));
|
|
16
|
+
/**
|
|
17
|
+
* The control of a select whose choice changes what the rest of the form offers.
|
|
18
|
+
* Use it as a design-system field's `control`; `data-record-state` makes the
|
|
19
|
+
* runtime re-render the view with the new choice.
|
|
20
|
+
*/
|
|
21
|
+
export const recordStateSelectControl = (props) => (_jsx("select", { "data-ui": "field-control", "data-record-state": props.state, id: props.id, name: props.name, required: props.required === true, disabled: props.disabled === true, "aria-invalid": props.invalid ? 'true' : null, children: props.options.map((option) => (_jsx("option", { value: option.value, selected: option.value === props.value, children: option.label }))) }));
|
|
22
|
+
/**
|
|
23
|
+
* Opens a dialog of the open record. `id` reaches the dialog as `params.id`;
|
|
24
|
+
* without it the dialog opens for a new child (for example a new team member).
|
|
25
|
+
*/
|
|
26
|
+
export const RecordDialogTrigger = (props) => (_jsx("span", { "data-record-dialog": props.dialog, "data-record-param-id": props.id ?? null, children: props.children }));
|
|
27
|
+
/**
|
|
28
|
+
* A bare form for an action that names no field of its own — generate, remove.
|
|
29
|
+
* `data-layout="actions"` opts the form out of the record-form grid (built for a
|
|
30
|
+
* field/label pair), which would otherwise stretch a lone submit button to fill it.
|
|
31
|
+
*/
|
|
32
|
+
export const RecordActionForm = (props) => (_jsxs("form", { "data-ui": "record-form", "data-layout": "actions", method: "post", action: "", "data-record-kind": props.kind, children: [_jsx("input", { type: "hidden", name: RECORD_COMMAND_FIELD, value: props.command, autocomplete: "off" }), Object.entries(props.hidden ?? {}).map(([name, value]) => (_jsx("input", { type: "hidden", name: name, value: value, autocomplete: "off" }))), props.children] }));
|
|
33
|
+
/**
|
|
34
|
+
* A form with no field or button of its own, submitted only through the HTML
|
|
35
|
+
* `form` attribute on buttons placed elsewhere — a menu whose every item names
|
|
36
|
+
* its own command on itself, so one empty form serves the whole menu.
|
|
37
|
+
*/
|
|
38
|
+
export const RecordCommandForm = (props) => (_jsx("form", { id: props.id, "data-record-kind": props.kind, method: "post", action: "", hidden: true }));
|
|
39
|
+
/**
|
|
40
|
+
* Marks its child as a labeled close control the runtime's own click handler
|
|
41
|
+
* recognizes from anywhere in the record's body — distinct from
|
|
42
|
+
* `data-ui="modal-close"`, the icon-only corner control's own styling hook.
|
|
43
|
+
*/
|
|
44
|
+
export const RecordCloseTrigger = (props) => (_jsx("span", { "data-record-close": "true", children: props.children }));
|
|
45
|
+
//# sourceMappingURL=record-modal-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-modal-form.js","sourceRoot":"","sources":["../../../../../../../packages/ketsuite/src/ui/client/record-modal-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IslandController, JSXChild, TemplateResult } from '@ketvietlab/ketjs-view';
|
|
2
|
-
import { RECORD_PARAM, RECORD_TAB_PARAM, readRecordModalTarget, recordModalClosedHref, recordModalHref } from '../record-modal.tsx';
|
|
2
|
+
import { RECORD_NEW_ID, RECORD_PARAM, RECORD_TAB_PARAM, readRecordModalTarget, recordModalClosedHref, recordModalCreateHref, recordModalHref } from '../record-modal.tsx';
|
|
3
3
|
export type RecordIssue = {
|
|
4
4
|
field: string | null;
|
|
5
5
|
code: string;
|
|
@@ -35,6 +35,8 @@ export type RecordContextEnvelope<Data> = {
|
|
|
35
35
|
export type RecordModalContext<Data> = {
|
|
36
36
|
kind: string;
|
|
37
37
|
id: string;
|
|
38
|
+
/** The modal was opened by a create action (`record=<kind>:new`); there is no record yet. */
|
|
39
|
+
creating: boolean;
|
|
38
40
|
tab: string;
|
|
39
41
|
data: Data;
|
|
40
42
|
/** Translate a key the context shipped, interpolating `{name}` params. */
|
|
@@ -43,7 +45,13 @@ export type RecordModalContext<Data> = {
|
|
|
43
45
|
fieldError: (name: string) => string | null;
|
|
44
46
|
/** What was typed into a field before a refused submit, or the fallback. */
|
|
45
47
|
draft: (name: string, fallback?: string) => string;
|
|
46
|
-
/**
|
|
48
|
+
/** Whether a checkbox/radio value was selected before the view re-rendered. */
|
|
49
|
+
draftChecked: (name: string, value?: string, fallback?: boolean) => boolean;
|
|
50
|
+
/**
|
|
51
|
+
* A submit has been in flight long enough to be worth saying so. A command the
|
|
52
|
+
* server answers at once never sets it, so a button bound to it does not flash
|
|
53
|
+
* its spinner; the runtime stops a second submit either way.
|
|
54
|
+
*/
|
|
47
55
|
busy: boolean;
|
|
48
56
|
dialog: {
|
|
49
57
|
name: string;
|
|
@@ -58,26 +66,51 @@ export type RecordUploads = Record<string, {
|
|
|
58
66
|
id: string;
|
|
59
67
|
name: string | null;
|
|
60
68
|
}>;
|
|
69
|
+
/** One extra call of a multi-step command — see `RecordModalCommand.also`. */
|
|
70
|
+
export type RecordModalCommandStep<Data> = {
|
|
71
|
+
fn: string;
|
|
72
|
+
input: (form: FormData, context: RecordModalContext<Data>, uploads: RecordUploads) => Record<string, unknown>;
|
|
73
|
+
/** Skip this step — a module not installed, a permission the viewer lacks. */
|
|
74
|
+
when?: (context: RecordModalContext<Data>) => boolean;
|
|
75
|
+
};
|
|
61
76
|
export type RecordModalCommand<Data> = {
|
|
62
77
|
fn: string;
|
|
63
78
|
/** Map the submitted form to the function's input. */
|
|
64
79
|
input: (form: FormData, context: RecordModalContext<Data>, uploads: RecordUploads) => Record<string, unknown>;
|
|
80
|
+
/**
|
|
81
|
+
* Further calls made right after `fn`/`input` succeeds, in order, as part of
|
|
82
|
+
* the same user-facing action — one busy state, one success notice, one set
|
|
83
|
+
* of field refusals — stopping at the first one that fails. For an edit that
|
|
84
|
+
* spans functions in different modules that cannot call one another (a
|
|
85
|
+
* single `product.saveTemplate` cannot also configure stock tracking or
|
|
86
|
+
* tax), this is what lets one "Save" button still read as one save.
|
|
87
|
+
*/
|
|
88
|
+
also?: readonly RecordModalCommandStep<Data>[];
|
|
65
89
|
/**
|
|
66
90
|
* File fields stored through `/files` before the function runs, each mapped to
|
|
67
91
|
* the attachment's metadata (`resModel`, `resId`, `resField`, `public`). The
|
|
68
92
|
* stored attachment ids reach `input` as its third argument.
|
|
69
93
|
*/
|
|
70
94
|
upload?: Record<string, (form: FormData, context: RecordModalContext<Data>) => Record<string, string>>;
|
|
95
|
+
/** A destructive command asks first; declining leaves the record untouched. */
|
|
96
|
+
confirm?: (context: RecordModalContext<Data>) => string | null;
|
|
71
97
|
/**
|
|
72
98
|
* What happens after success. Defaults to `close`. `reload` reads the record
|
|
73
99
|
* again behind a loading state and closes a dialog; `refresh` reads it again in
|
|
74
100
|
* place, keeping the tab, the open dialog and any islands mounted in them.
|
|
101
|
+
* `open` is for a create command: the modal switches to the record it created
|
|
102
|
+
* (the id from `created`, else the function value's `id`) on the tab named by
|
|
103
|
+
* `openTab`, replacing the `:new` history entry.
|
|
75
104
|
*/
|
|
76
|
-
after?: 'close' | 'reload' | 'refresh' | 'stay' | {
|
|
105
|
+
after?: 'close' | 'reload' | 'refresh' | 'stay' | 'open' | {
|
|
77
106
|
tab: string;
|
|
78
107
|
} | {
|
|
79
108
|
dialog: string | null;
|
|
80
109
|
};
|
|
110
|
+
/** The id of the record a create command made, read from the function's value. */
|
|
111
|
+
created?: (value: unknown) => string | null;
|
|
112
|
+
/** Tab to open on the created record when `after` is `open`. */
|
|
113
|
+
openTab?: string;
|
|
81
114
|
};
|
|
82
115
|
export type RecordModalTab<Data> = {
|
|
83
116
|
id: string;
|
|
@@ -93,14 +126,40 @@ export type RecordModalDialog<Data> = {
|
|
|
93
126
|
export type RecordModalDefinition<Data> = {
|
|
94
127
|
kind: string;
|
|
95
128
|
size?: 'default' | 'large';
|
|
96
|
-
/**
|
|
129
|
+
/**
|
|
130
|
+
* Caps a tabbed record's fixed height (a CSS length or `min()`/`calc()`
|
|
131
|
+
* expression) below the viewport-filling default, for a record whose own
|
|
132
|
+
* content is shorter than that — see `ModalSheet.fixedHeight`. Ignored for a
|
|
133
|
+
* record with one tab or none, since those never turn on `height: 'fixed'`.
|
|
134
|
+
*/
|
|
135
|
+
fixedHeight?: string;
|
|
136
|
+
/**
|
|
137
|
+
* A permission-checked read returning `{ data, messages }`. For a create action
|
|
138
|
+
* the default input is `{}` (no id): the read returns the empty record's defaults,
|
|
139
|
+
* the choices its form needs and the viewer's permissions.
|
|
140
|
+
*/
|
|
97
141
|
context: {
|
|
98
142
|
fn: string;
|
|
99
|
-
input?: (id: string) => Record<string, unknown>;
|
|
143
|
+
input?: (id: string, creating: boolean) => Record<string, unknown>;
|
|
100
144
|
};
|
|
101
145
|
title: (context: RecordModalContext<Data>) => string;
|
|
102
146
|
description?: (context: RecordModalContext<Data>) => string | null;
|
|
147
|
+
/**
|
|
148
|
+
* What state this record is in, beside the modal's title: a badge, not a
|
|
149
|
+
* strip. It stays put while the body scrolls, and a reader looking at the
|
|
150
|
+
* title learns the state without reading down into the form.
|
|
151
|
+
*/
|
|
152
|
+
status?: (context: RecordModalContext<Data>) => JSXChild;
|
|
153
|
+
/** A strip above the body — a customer, a summary — for what a badge cannot hold. */
|
|
103
154
|
header?: (context: RecordModalContext<Data>) => JSXChild;
|
|
155
|
+
/**
|
|
156
|
+
* A footer strip below the body, outside the scrolling area and the same on
|
|
157
|
+
* every tab — the natural home for a record's primary actions (save, close,
|
|
158
|
+
* more) so they stay reachable without hunting through the tab that happens
|
|
159
|
+
* to hold the save button. Return `undefined` (not `''`) to render no footer
|
|
160
|
+
* at all, e.g. while creating, when the create form owns its own submit.
|
|
161
|
+
*/
|
|
162
|
+
actions?: (context: RecordModalContext<Data>) => JSXChild | undefined;
|
|
104
163
|
tabs?: readonly RecordModalTab<Data>[];
|
|
105
164
|
/** The body of a record without tabs. */
|
|
106
165
|
body?: (context: RecordModalContext<Data>) => JSXChild;
|
|
@@ -112,7 +171,15 @@ export type RecordModalDefinition<Data> = {
|
|
|
112
171
|
* built-in English defaults, because `messages` arrive with the context.
|
|
113
172
|
*/
|
|
114
173
|
labels?: Record<string, string> | (() => Record<string, string>);
|
|
174
|
+
/**
|
|
175
|
+
* Keep read contexts in memory so reopening a record shows at once and is read
|
|
176
|
+
* again quietly (stale-while-revalidate). On by default; set `false` for a kind
|
|
177
|
+
* whose context must never be shown before a fresh read.
|
|
178
|
+
*/
|
|
179
|
+
cache?: boolean;
|
|
115
180
|
};
|
|
181
|
+
/** How many record contexts one island keeps for instant reopening. */
|
|
182
|
+
export declare const RECORD_MODAL_CACHE_SIZE = 30;
|
|
116
183
|
/**
|
|
117
184
|
* English defaults for every label the runtime itself shows. A module passes its
|
|
118
185
|
* own language through `labels`; these only guarantee a reader never sees a key.
|
|
@@ -134,6 +201,30 @@ export declare const RECORD_COMMAND_FIELD = "__command";
|
|
|
134
201
|
export declare const RECORD_DIALOG_ATTRIBUTE = "data-record-dialog";
|
|
135
202
|
/** Whether anything in a layer was typed into since it rendered. Same rule as route modals. */
|
|
136
203
|
export declare const recordLayerHasDraft: (layer: HTMLElement) => boolean;
|
|
204
|
+
/**
|
|
205
|
+
* How long a command may run before its button says so. Below this the answer
|
|
206
|
+
* arrives while the reader is still lifting their finger, and a spinner shown
|
|
207
|
+
* and withdrawn inside that window is noise; above it, silence would read as a
|
|
208
|
+
* click that did nothing.
|
|
209
|
+
*/
|
|
210
|
+
export declare const BUSY_AFTER_MS = 400;
|
|
211
|
+
/**
|
|
212
|
+
* A flag that turns on late and off at once. Work that finishes inside the
|
|
213
|
+
* window never raises it, so a progress indicator bound to it appears only when
|
|
214
|
+
* there is progress to report, and never flashes on its way back out.
|
|
215
|
+
*/
|
|
216
|
+
export declare const delayedFlag: (show: (value: boolean) => void, after?: number) => {
|
|
217
|
+
set: (running: boolean) => void;
|
|
218
|
+
stop: () => void;
|
|
219
|
+
};
|
|
220
|
+
/**
|
|
221
|
+
* Where a click is asking to go: the link it landed on, or the row it landed
|
|
222
|
+
* in. A table row carries its destination on the row itself (`rowLink: false`),
|
|
223
|
+
* so the whole row is one target rather than a link around the first cell. The
|
|
224
|
+
* shell would navigate such a row through the navigation layer, which fetches
|
|
225
|
+
* the collection again and leaves the modal unopened, so this reads it first.
|
|
226
|
+
*/
|
|
227
|
+
export declare const openerHref: (element: Element | null) => string | null;
|
|
137
228
|
/**
|
|
138
229
|
* Create the island controller for one record kind.
|
|
139
230
|
*
|
|
@@ -146,5 +237,5 @@ export declare const createRecordModal: <Data>(definition: RecordModalDefinition
|
|
|
146
237
|
* appears and disposes it when the host leaves; props must be JSON.
|
|
147
238
|
*/
|
|
148
239
|
export declare const recordIsland: (name: string, props: Record<string, unknown>) => TemplateResult;
|
|
149
|
-
export { RECORD_PARAM, RECORD_TAB_PARAM, recordModalHref, recordModalClosedHref, readRecordModalTarget };
|
|
240
|
+
export { RECORD_NEW_ID, RECORD_PARAM, RECORD_TAB_PARAM, recordModalHref, recordModalCreateHref, recordModalClosedHref, readRecordModalTarget, };
|
|
150
241
|
//# sourceMappingURL=record-modal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-modal.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/ui/client/record-modal.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAExF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EAErB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAI5B,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,KAAK,GAAG,OAAO,IACxC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC1B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AAqBhF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAU,KAAK,GAAG,OAAO,QAChD,MAAM,SACL,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YACrB;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,KACzD,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CA4BjC,CAAA;AAID,mEAAmE;AACnE,MAAM,MAAM,qBAAqB,CAAC,IAAI,IAAI;IACxC,IAAI,EAAE,IAAI,CAAA;IACV,4FAA4F;IAC5F,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,CAAC,IAAI,IAAI;IACrC,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,IAAI,CAAA;IACV,0EAA0E;IAC1E,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAA;IAC5D,gEAAgE;IAChE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAC3C,4EAA4E;IAC5E,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;IAClD,
|
|
1
|
+
{"version":3,"file":"record-modal.d.ts","sourceRoot":"","sources":["../../../../../../packages/ketsuite/src/ui/client/record-modal.tsx"],"names":[],"mappings":"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"}
|