@svgrid/enterprise 3.1.21 → 3.1.23
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/SvGridBoard.svelte +39 -0
- package/dist/SvGridGallery.svelte +23 -0
- package/dist/SvGridRowCount.svelte +23 -0
- package/dist/SvGridRowCount.svelte.d.ts +6 -0
- package/dist/SvGridScheduler.svelte +25 -7
- package/dist/cdn/svgrid-enterprise.svelte-external.js +13838 -13554
- package/dist/designer/assets/GridFooter-DKMfZpL4.js +2 -0
- package/dist/designer/assets/GridMenus-DWDghydL.js +6 -0
- package/dist/designer/assets/{PinSplitter-C5AwA1xV.js → PinSplitter-BfIjd7pi.js} +1 -1
- package/dist/designer/assets/grid-extension.svelte-G1ng0xd2.js +1 -0
- package/dist/designer/assets/index-CHx3F4Ij.css +1 -0
- package/dist/designer/assets/{index-DLJjuVA4.js → index-CIxqRzKJ.js} +324 -324
- package/dist/designer/assets/merges-Bg-KqPEl.js +1 -0
- package/dist/designer/index.html +3 -3
- package/dist/expressions/compile.js +11 -7
- package/dist/expressions/evaluate.js +4 -0
- package/dist/expressions/expression-columns.d.ts +4 -1
- package/dist/expressions/expression-columns.js +12 -3
- package/dist/expressions/parse.js +19 -7
- package/dist/fields/RecordView.svelte +5 -2
- package/dist/fields/activity.svelte.d.ts +5 -2
- package/dist/fields/activity.svelte.js +4 -3
- package/dist/fields/grid-access.d.ts +1 -1
- package/dist/fields/grid-access.js +13 -3
- package/dist/fields/index.d.ts +18 -0
- package/dist/fields/index.js +31 -0
- package/dist/filter-labels.d.ts +16 -0
- package/dist/filter-labels.js +83 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +7 -0
- package/dist/install.js +8 -0
- package/dist/node/studio.js +12 -5
- package/dist/relative-date-core.d.ts +40 -0
- package/dist/relative-date-core.js +85 -0
- package/dist/relative-dates.d.ts +28 -0
- package/dist/relative-dates.js +61 -0
- package/dist/review/GhostCell.svelte +60 -0
- package/dist/review/GhostCell.svelte.d.ts +14 -0
- package/dist/review/RichCellMark.svelte +72 -0
- package/dist/review/RichCellMark.svelte.d.ts +8 -0
- package/dist/review/SvReviewPanel.svelte +759 -0
- package/dist/review/SvReviewPanel.svelte.d.ts +16 -0
- package/dist/review/adapters.d.ts +79 -0
- package/dist/review/adapters.js +119 -0
- package/dist/review/agent.d.ts +52 -0
- package/dist/review/agent.js +232 -0
- package/dist/review/card-marks.svelte.d.ts +42 -0
- package/dist/review/card-marks.svelte.js +51 -0
- package/dist/review/cluster.d.ts +26 -0
- package/dist/review/cluster.js +377 -0
- package/dist/review/equal.d.ts +9 -0
- package/dist/review/equal.js +35 -0
- package/dist/review/formats.d.ts +31 -0
- package/dist/review/formats.js +37 -0
- package/dist/review/ghost.d.ts +17 -0
- package/dist/review/ghost.js +104 -0
- package/dist/review/index.d.ts +42 -0
- package/dist/review/index.js +36 -0
- package/dist/review/messages.d.ts +113 -0
- package/dist/review/messages.js +135 -0
- package/dist/review/model.svelte.d.ts +262 -0
- package/dist/review/model.svelte.js +883 -0
- package/dist/review/pending-filter.d.ts +26 -0
- package/dist/review/pending-filter.js +71 -0
- package/dist/review/rich-cells.d.ts +1 -0
- package/dist/review/rich-cells.js +36 -0
- package/dist/review/types.d.ts +83 -0
- package/dist/review/types.js +7 -0
- package/dist/row-count.d.ts +28 -0
- package/dist/row-count.js +39 -0
- package/dist/sort-blanks.d.ts +8 -0
- package/dist/sort-blanks.js +47 -0
- package/dist/studio/ui-components.generated.js +1 -1
- package/dist/upgrade-prompt.d.ts +1 -1
- package/dist/version.d.ts +2 -2
- package/dist/version.js +2 -2
- package/dist/wc/GridFooter-CKC4L36O.js +162 -0
- package/dist/wc/{GridMenus-DVGuqp2l.js → GridMenus-h7RsvcmI.js} +320 -303
- package/dist/wc/{PinSplitter-Btco0txr.js → PinSplitter-BN6ybmjs.js} +1 -1
- package/dist/wc/grid-extension.svelte-CDf5EUyz.js +27 -0
- package/dist/wc/merges-DQTOlMWM.js +109 -0
- package/dist/wc/sv-sheet-element.js +6753 -6792
- package/package.json +9 -3
- package/dist/designer/assets/GridFooter-CKBVItAU.js +0 -2
- package/dist/designer/assets/GridMenus-Dzwu7M9r.js +0 -6
- package/dist/designer/assets/grid-extension.svelte-BZ7AqyJI.js +0 -1
- package/dist/designer/assets/index-WCxj6WfJ.css +0 -1
- package/dist/wc/GridFooter-BgoA77TJ.js +0 -145
- package/dist/wc/grid-extension.svelte-CucBS4FL.js +0 -20
package/dist/SvGridBoard.svelte
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
// `onCardMove` fires purely as a notification for persistence / mirroring
|
|
14
14
|
// Themes entirely from the grid's `--sg-*` tokens.
|
|
15
15
|
import { tick, untrack } from "svelte";
|
|
16
|
+
import { cardMarkFor, type CardMark } from "./review/card-marks.svelte";
|
|
16
17
|
import type {
|
|
17
18
|
ColumnDef,
|
|
18
19
|
RowData,
|
|
@@ -901,6 +902,19 @@
|
|
|
901
902
|
overRow = null;
|
|
902
903
|
}
|
|
903
904
|
}
|
|
905
|
+
// The rest of the lane (its "+ Add a card" row, the space under the list)
|
|
906
|
+
// takes a drop too, as the last card. Without it the marker from the last
|
|
907
|
+
// dragover stayed up there and the drop was lost.
|
|
908
|
+
function onLaneShellDragOver(e: DragEvent, laneId: string, swimId: string | null) {
|
|
909
|
+
if (!dragRow) return;
|
|
910
|
+
e.preventDefault();
|
|
911
|
+
if (e.dataTransfer) e.dataTransfer.dropEffect = "move";
|
|
912
|
+
if (!(e.target as Element).closest(".sv-board-lane-body")) {
|
|
913
|
+
overLane = laneId;
|
|
914
|
+
overSwim = swimId;
|
|
915
|
+
overRow = null;
|
|
916
|
+
}
|
|
917
|
+
}
|
|
904
918
|
function onLaneDrop(e: DragEvent, laneId: string, swimId: string | null) {
|
|
905
919
|
e.preventDefault();
|
|
906
920
|
const row = dragRow;
|
|
@@ -1142,6 +1156,12 @@
|
|
|
1142
1156
|
});
|
|
1143
1157
|
</script>
|
|
1144
1158
|
|
|
1159
|
+
{#snippet proposedMark(mark: CardMark | null)}
|
|
1160
|
+
<!-- Proposals from a change review (@svgrid/enterprise/review) waiting on this row. -->
|
|
1161
|
+
{#if mark}<span class="sv-card-proposed" title={mark.text}><span class="sv-card-proposed-dot" aria-hidden="true"></span>{mark.label}</span>{/if}
|
|
1162
|
+
{/snippet}
|
|
1163
|
+
|
|
1164
|
+
|
|
1145
1165
|
<div
|
|
1146
1166
|
class="sv-board"
|
|
1147
1167
|
class:is-swim={!!swimField}
|
|
@@ -1300,6 +1320,8 @@
|
|
|
1300
1320
|
class:is-collapsed={isCollapsed}
|
|
1301
1321
|
style={lane.color ? `--sv-board-accent: ${lane.color};` : undefined}
|
|
1302
1322
|
aria-label={laneTitle(lane)}
|
|
1323
|
+
ondragover={isCollapsed ? undefined : (e) => onLaneShellDragOver(e, lane.id, swimId)}
|
|
1324
|
+
ondrop={isCollapsed ? undefined : (e) => onLaneDrop(e, lane.id, swimId)}
|
|
1303
1325
|
>
|
|
1304
1326
|
<!-- A reorderable lane header is a keyboard handle (Ctrl+arrows move the lane). -->
|
|
1305
1327
|
<!-- svelte-ignore a11y_no_noninteractive_tabindex -->
|
|
@@ -1424,6 +1446,7 @@
|
|
|
1424
1446
|
onkeydown={(e) => onCardKeydown(e, row, lane.id)}
|
|
1425
1447
|
>
|
|
1426
1448
|
{#if isFlagged(row)}<span class="sv-board-card-flag" aria-label="Blocked"></span>{/if}
|
|
1449
|
+
{@render proposedMark(cardMarkFor(getRowId, row, indexOf.get(row) ?? 0))}
|
|
1427
1450
|
{#if isEditing}
|
|
1428
1451
|
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
1429
1452
|
<form
|
|
@@ -1892,6 +1915,22 @@
|
|
|
1892
1915
|
.sv-board-lane-body.is-virtual .sv-board-card {
|
|
1893
1916
|
margin-bottom: 8px;
|
|
1894
1917
|
}
|
|
1918
|
+
|
|
1919
|
+
.sv-card-proposed {
|
|
1920
|
+
display: inline-flex;
|
|
1921
|
+
align-items: center;
|
|
1922
|
+
gap: 5px;
|
|
1923
|
+
align-self: flex-start;
|
|
1924
|
+
margin-bottom: 4px;
|
|
1925
|
+
padding: 1px 7px;
|
|
1926
|
+
border-radius: 999px;
|
|
1927
|
+
font-size: 11px;
|
|
1928
|
+
font-weight: 600;
|
|
1929
|
+
color: color-mix(in srgb, var(--sg-warning, #d97706) 75%, var(--sg-fg, #111827));
|
|
1930
|
+
background: color-mix(in srgb, var(--sg-warning, #d97706) 14%, transparent);
|
|
1931
|
+
}
|
|
1932
|
+
.sv-card-proposed-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--sg-warning, #d97706); }
|
|
1933
|
+
|
|
1895
1934
|
.sv-board-card {
|
|
1896
1935
|
background: var(--sg-bg, #fff);
|
|
1897
1936
|
border: 1px solid var(--sg-border, #e4e7ec);
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// Themes entirely from the grid's `--sg-*` tokens.
|
|
16
16
|
import type { ColumnDef, GalleryConfig, RowData, TableFeatures } from "@svgrid/grid";
|
|
17
17
|
import { formatValueForExport, getGridExtension } from "@svgrid/grid";
|
|
18
|
+
import { cardMarkFor, type CardMark } from "./review/card-marks.svelte";
|
|
18
19
|
|
|
19
20
|
let {
|
|
20
21
|
data,
|
|
@@ -140,6 +141,12 @@
|
|
|
140
141
|
};
|
|
141
142
|
</script>
|
|
142
143
|
|
|
144
|
+
{#snippet proposedMark(mark: CardMark | null)}
|
|
145
|
+
<!-- Proposals from a change review (@svgrid/enterprise/review) waiting on this row. -->
|
|
146
|
+
{#if mark}<span class="sv-card-proposed" title={mark.text}><span class="sv-card-proposed-dot" aria-hidden="true"></span>{mark.label}</span>{/if}
|
|
147
|
+
{/snippet}
|
|
148
|
+
|
|
149
|
+
|
|
143
150
|
<div class="sv-gal" style:--sv-gal-card={`${cardWidth}px`} role="list" aria-label="Records">
|
|
144
151
|
{#each shown as row, i (keyOf(row, i))}
|
|
145
152
|
{@const url = coverUrl(row)}
|
|
@@ -168,6 +175,7 @@
|
|
|
168
175
|
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
169
176
|
<!-- svelte-ignore a11y_no_noninteractive_element_interactions -->
|
|
170
177
|
<div class="sv-gal-card" class:is-clickable={!!gallery.onCardClick} role="listitem" onclick={() => open(row)}>
|
|
178
|
+
{@render proposedMark(cardMarkFor(getRowId, row, i))}
|
|
171
179
|
{#if coverField}
|
|
172
180
|
<div class="sv-gal-cover" class:is-contain={gallery.coverFit === "contain"} class:is-empty={!url}>
|
|
173
181
|
{#if url}<img src={url} alt="" loading="lazy" decoding="async" />{/if}
|
|
@@ -283,4 +291,19 @@
|
|
|
283
291
|
.sv-gal-card, .sv-gal-cover img { transition: none; }
|
|
284
292
|
.sv-gal-card.is-clickable:hover, .sv-gal-card.is-clickable:hover .sv-gal-cover img { transform: none; }
|
|
285
293
|
}
|
|
294
|
+
|
|
295
|
+
.sv-card-proposed {
|
|
296
|
+
display: inline-flex;
|
|
297
|
+
align-items: center;
|
|
298
|
+
gap: 5px;
|
|
299
|
+
align-self: flex-start;
|
|
300
|
+
margin-bottom: 4px;
|
|
301
|
+
padding: 1px 7px;
|
|
302
|
+
border-radius: 999px;
|
|
303
|
+
font-size: 11px;
|
|
304
|
+
font-weight: 600;
|
|
305
|
+
color: color-mix(in srgb, var(--sg-warning, #d97706) 75%, var(--sg-fg, #111827));
|
|
306
|
+
background: color-mix(in srgb, var(--sg-warning, #d97706) 14%, transparent);
|
|
307
|
+
}
|
|
308
|
+
.sv-card-proposed-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--sg-warning, #d97706); }
|
|
286
309
|
</style>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
The status bar's row count ("250 rows", "12 of 250 rows" while filters hide
|
|
3
|
+
some), drawn by the grid's `statusBarRows` seam once enableRowCount() has
|
|
4
|
+
run. It sits outside the bar's live region: the grid already announces
|
|
5
|
+
filter results, so a count in there would be read out twice.
|
|
6
|
+
-->
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
let { ctrl }: { ctrl: any } = $props()
|
|
9
|
+
|
|
10
|
+
// When the server filters or pages, the grid holds one page and knows only
|
|
11
|
+
// `rowCount`, so that is both numbers.
|
|
12
|
+
const external = $derived(ctrl.props.externalFilter === true || ctrl.props.externalPagination === true)
|
|
13
|
+
const filtered = $derived(ctrl.paginationTotalRows as number)
|
|
14
|
+
const total = $derived(external ? filtered : ((ctrl.props.data?.length as number | undefined) ?? filtered))
|
|
15
|
+
const messages = $derived(ctrl.messages)
|
|
16
|
+
const fmt = (n: number) => n.toLocaleString()
|
|
17
|
+
const text = $derived(
|
|
18
|
+
(filtered !== total ? `${fmt(filtered)} ${messages.of} ` : "") +
|
|
19
|
+
`${fmt(total)} ${total === 1 ? messages.rowSuffix : messages.rowsSuffix}`,
|
|
20
|
+
)
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<span class="sv-grid-status-item sv-grid-status-rows">{text}</span>
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
// Themes entirely from the grid's `--sg-*` tokens; the model math lives in
|
|
17
17
|
// ./scheduler-model (pure + unit-tested).
|
|
18
18
|
import { untrack } from "svelte";
|
|
19
|
+
import { cardMarkFor } from "./review/card-marks.svelte";
|
|
19
20
|
import type {
|
|
20
21
|
ColumnDef,
|
|
21
22
|
RowData,
|
|
@@ -3232,6 +3233,12 @@
|
|
|
3232
3233
|
}
|
|
3233
3234
|
</script>
|
|
3234
3235
|
|
|
3236
|
+
{#snippet proposed(row: TData)}
|
|
3237
|
+
<!-- Proposals from a change review (@svgrid/enterprise/review) waiting on this event's row. -->
|
|
3238
|
+
{@const mark = cardMarkFor(getRowId, row, indexOf.get(row) ?? 0)}
|
|
3239
|
+
{#if mark}<span class="sv-sched-proposed" role="img" aria-label={mark.label} title="{mark.label}: {mark.text}"></span>{/if}
|
|
3240
|
+
{/snippet}
|
|
3241
|
+
|
|
3235
3242
|
<div class="sv-sched" role="group" aria-roledescription="calendar">
|
|
3236
3243
|
<!-- toolbar -->
|
|
3237
3244
|
<div class="sv-sched-toolbar">
|
|
@@ -3400,7 +3407,7 @@
|
|
|
3400
3407
|
onpointerdown={(e) => startMonthResize(e, s.event, "start")}
|
|
3401
3408
|
></span>
|
|
3402
3409
|
{/if}
|
|
3403
|
-
{#if scheduler.event}{@render scheduler.event(s.event.row)}{:else}{#if !s.event.allDay && !s.continuesLeft}<span class="sv-sched-dot"></span><span class="sv-sched-bar-time">{fmtTime(s.event.start)}</span>{/if}<span class="sv-sched-bar-title">{s.event.title}</span>{/if}
|
|
3410
|
+
{@render proposed(s.event.row)}{#if scheduler.event}{@render scheduler.event(s.event.row)}{:else}{#if !s.event.allDay && !s.continuesLeft}<span class="sv-sched-dot"></span><span class="sv-sched-bar-time">{fmtTime(s.event.start)}</span>{/if}<span class="sv-sched-bar-title">{s.event.title}</span>{/if}
|
|
3404
3411
|
{#if canEditBar && resizable && !s.continuesRight}
|
|
3405
3412
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
3406
3413
|
<span
|
|
@@ -3447,7 +3454,7 @@
|
|
|
3447
3454
|
<span class="sv-sched-agenda-time">
|
|
3448
3455
|
{ev.allDay ? "all day" : `${fmtTime(ev.start)} - ${fmtTime(ev.end)}`}
|
|
3449
3456
|
</span>
|
|
3450
|
-
<span class="sv-sched-agenda-title">{ev.title}</span>
|
|
3457
|
+
{@render proposed(ev.row)}<span class="sv-sched-agenda-title">{ev.title}</span>
|
|
3451
3458
|
{#if ev.resourceId}<span class="sv-sched-tag">{ev.resourceId}</span>{/if}
|
|
3452
3459
|
{/if}
|
|
3453
3460
|
</button>
|
|
@@ -3602,7 +3609,7 @@
|
|
|
3602
3609
|
<span class="sv-sched-chip-resize sv-sched-chip-resize-start" aria-hidden="true" onpointerdown={(e) => startTlDrag(e, it.event, "resize-start")}></span>
|
|
3603
3610
|
{/if}
|
|
3604
3611
|
{#if wpx >= 22}
|
|
3605
|
-
{#if scheduler.event}{@render scheduler.event(it.event.row)}{:else}{#if view === "timelineDay" && !it.event.allDay && !g.continuesLeft}<span class="sv-sched-bar-time">{fmtTime(it.event.start)}</span>{/if}<span class="sv-sched-bar-title">{it.event.title}</span>{/if}
|
|
3612
|
+
{@render proposed(it.event.row)}{#if scheduler.event}{@render scheduler.event(it.event.row)}{:else}{#if view === "timelineDay" && !it.event.allDay && !g.continuesLeft}<span class="sv-sched-bar-time">{fmtTime(it.event.start)}</span>{/if}<span class="sv-sched-bar-title">{it.event.title}</span>{/if}
|
|
3606
3613
|
{/if}
|
|
3607
3614
|
{#if canEdit && resizable && !g.continuesRight}
|
|
3608
3615
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
@@ -3745,7 +3752,7 @@
|
|
|
3745
3752
|
onpointerdown={(e) => startAllDayResize(e, s.event, "start")}
|
|
3746
3753
|
></span>
|
|
3747
3754
|
{/if}
|
|
3748
|
-
{#if scheduler.event}{@render scheduler.event(s.event.row)}{:else}<span class="sv-sched-bar-title">{s.event.title}</span>{/if}
|
|
3755
|
+
{@render proposed(s.event.row)}{#if scheduler.event}{@render scheduler.event(s.event.row)}{:else}<span class="sv-sched-bar-title">{s.event.title}</span>{/if}
|
|
3749
3756
|
{#if canEditBar && resizable && !s.continuesRight}
|
|
3750
3757
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
3751
3758
|
<span
|
|
@@ -3768,7 +3775,7 @@
|
|
|
3768
3775
|
>
|
|
3769
3776
|
{#each colAllDay(col) as ev (ev.key)}
|
|
3770
3777
|
<button type="button" class="sv-sched-chip" style={eventStyle(ev)} onclick={() => openEvent(ev)} oncontextmenu={(e) => openMenu(e, ev)}>
|
|
3771
|
-
<span class="sv-sched-chip-title">{ev.title}</span>
|
|
3778
|
+
{@render proposed(ev.row)}<span class="sv-sched-chip-title">{ev.title}</span>
|
|
3772
3779
|
</button>
|
|
3773
3780
|
{/each}
|
|
3774
3781
|
</div>
|
|
@@ -3861,7 +3868,7 @@
|
|
|
3861
3868
|
onpointerdown={(e) => startTimeDrag(e, p.event, col, "resize-start")}
|
|
3862
3869
|
></span>
|
|
3863
3870
|
{/if}
|
|
3864
|
-
{#if scheduler.event}{@render scheduler.event(p.event.row)}{:else}<span class="sv-sched-event-time">{fmtTime(isResize ? drag!.previewStart : p.event.start)}{isResize ? ` - ${fmtTime(drag!.previewEnd)}` : ""}</span><span class="sv-sched-event-title">{p.event.title}</span>{/if}
|
|
3871
|
+
{@render proposed(p.event.row)}{#if scheduler.event}{@render scheduler.event(p.event.row)}{:else}<span class="sv-sched-event-time">{fmtTime(isResize ? drag!.previewStart : p.event.start)}{isResize ? ` - ${fmtTime(drag!.previewEnd)}` : ""}</span><span class="sv-sched-event-title">{p.event.title}</span>{/if}
|
|
3865
3872
|
{#if canEdit && resizable}
|
|
3866
3873
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
3867
3874
|
<span
|
|
@@ -4012,7 +4019,7 @@
|
|
|
4012
4019
|
<span class="sv-sched-listpop-time">
|
|
4013
4020
|
{ev.allDay ? "all day" : `${fmtTime(ev.start)} - ${fmtTime(ev.end)}`}
|
|
4014
4021
|
</span>
|
|
4015
|
-
<span class="sv-sched-listpop-title">{ev.title}</span>
|
|
4022
|
+
{@render proposed(ev.row)}<span class="sv-sched-listpop-title">{ev.title}</span>
|
|
4016
4023
|
</button>
|
|
4017
4024
|
{/each}
|
|
4018
4025
|
</div>
|
|
@@ -4519,6 +4526,17 @@
|
|
|
4519
4526
|
}
|
|
4520
4527
|
.sv-sched-chip:hover { background: color-mix(in srgb, var(--sv-sched-accent) 26%, transparent); }
|
|
4521
4528
|
.sv-sched-chip-title { overflow: hidden; text-overflow: ellipsis; }
|
|
4529
|
+
.sv-sched-proposed {
|
|
4530
|
+
display: inline-block;
|
|
4531
|
+
flex: none;
|
|
4532
|
+
width: 7px;
|
|
4533
|
+
height: 7px;
|
|
4534
|
+
margin-right: 4px;
|
|
4535
|
+
border-radius: 50%;
|
|
4536
|
+
vertical-align: middle;
|
|
4537
|
+
background: var(--sg-warning, #d97706);
|
|
4538
|
+
box-shadow: 0 0 0 1.5px var(--sg-bg, #fff);
|
|
4539
|
+
}
|
|
4522
4540
|
|
|
4523
4541
|
/* time-grid */
|
|
4524
4542
|
.sv-sched-grid { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
|