x4js 2.3.28 → 2.3.29
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/aicontext.md +380 -19
- package/package.json +7 -3
- package/src/components/bargraph/bargraph.module.scss +44 -0
- package/src/components/bargraph/bargraph.ts +362 -0
- package/src/components/base.scss +71 -1
- package/src/components/calendar/calendar.module.scss +6 -5
- package/src/components/calendar/calendar.ts +14 -8
- package/src/components/canvas/canvas.ts +5 -4
- package/src/components/carousel/carousel.module.scss +165 -0
- package/src/components/carousel/carousel.ts +423 -0
- package/src/components/chart/chart.module.scss +8 -0
- package/src/components/chart/chart.ts +170 -12
- package/src/components/combobox/combobox.module.scss +2 -1
- package/src/components/components.ts +3 -0
- package/src/components/gantt/gantt.module.scss +462 -0
- package/src/components/gantt/gantt.ts +1254 -0
- package/src/components/knob/knob.module.scss +113 -0
- package/src/components/knob/knob.ts +355 -0
- package/src/components/mapview/mapview.module.scss +177 -0
- package/src/components/mapview/mapview.ts +764 -0
- package/src/components/planner/planner.module.scss +688 -0
- package/src/components/planner/planner.ts +1792 -0
- package/src/components/radio/radio.module.scss +4 -1
- package/src/components/slider/slider.module.scss +22 -20
- package/src/components/switch/switch.module.scss +68 -44
- package/src/components/switch/switch.ts +6 -3
- package/src/components/tag/tag.module.scss +4 -4
- package/src/components/textedit/textedit.module.scss +5 -2
- package/src/components/themes.scss +19 -6
- package/src/core/core_i18n.ts +65 -0
- package/src/core/core_tools.ts +44 -0
- package/src/x4doc.ts +3 -0
|
@@ -0,0 +1,688 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ___ ___ __
|
|
3
|
+
* \ \/ / / _
|
|
4
|
+
* \ / /_| |_
|
|
5
|
+
* / \____ _|
|
|
6
|
+
* /__/\__\ |_|
|
|
7
|
+
*
|
|
8
|
+
* @file planner.module.scss
|
|
9
|
+
* @author Etienne Cochard
|
|
10
|
+
*
|
|
11
|
+
* @copyright (c) 2026 R-libre ingenierie
|
|
12
|
+
*
|
|
13
|
+
* Use of this source code is governed by an MIT-style license
|
|
14
|
+
* that can be found in the LICENSE file or at https://opensource.org/licenses/MIT.
|
|
15
|
+
**/
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
--planner-background: var( --background-primary );
|
|
19
|
+
--planner-border: var( --border );
|
|
20
|
+
--planner-border-focus: var( --border-focus );
|
|
21
|
+
|
|
22
|
+
--planner-header-color: var( --text-ternary );
|
|
23
|
+
--planner-day-color: var( --text-primary ); // the number of a day, in the header
|
|
24
|
+
--planner-off-color: var( --text-secondary ); // the days off, in the header
|
|
25
|
+
--planner-today-background: var( --accent-background ); // the title of today: in the header, its number in the month
|
|
26
|
+
--planner-today-color: var( --accent-color );
|
|
27
|
+
--planner-today-column: var( --accent-background-light ); // behind today, at half of it
|
|
28
|
+
|
|
29
|
+
--planner-off-background: var( --background-ternary ); // the days off, the hours out of the working ones
|
|
30
|
+
--planner-line-color: var( --border-light ); // between the days, the hours off
|
|
31
|
+
--planner-step-color: var( --border-light ); // the steps between the working hours, at half of it
|
|
32
|
+
--planner-hour-line-color: var( --border ); // the working hours
|
|
33
|
+
--planner-hour-color: var( --text-secondary );
|
|
34
|
+
--planner-hour-color-work: var( --text-ternary );
|
|
35
|
+
|
|
36
|
+
--planner-edge-background: var( --color-primary-a90 ); // the marks of the events out of the view: the darkest blue, seen through (themes.scss: the dark theme has its own)
|
|
37
|
+
--planner-edge-color: var( --accent-color );
|
|
38
|
+
--planner-edge-shadow: 0 1px 2px rgba( 0, 0, 0, 0.25 );
|
|
39
|
+
--planner-edge-opacity: 0.6; // the events under them show through; 1 under the pointer
|
|
40
|
+
|
|
41
|
+
--planner-now-color: var( --accent-background ); // the line of now
|
|
42
|
+
--planner-now-tag: var( --accent-background ); // its time, in the hours
|
|
43
|
+
--planner-now-text: var( --accent-color );
|
|
44
|
+
|
|
45
|
+
--planner-event-background: var( --planner-background ); // under its tint: the grid does not show through
|
|
46
|
+
--planner-event-color: var( --accent-background ); // its border, its texts, its tint: its colour, or this one
|
|
47
|
+
--planner-event-tint: 0.12; // the opacity of its colour on its background
|
|
48
|
+
--planner-event-radius: 2px;
|
|
49
|
+
--planner-event-title: var( --text-primary ); // its texts: the ones of the theme, readable on any colour
|
|
50
|
+
--planner-event-text: var( --text-ternary ); // its times, its text
|
|
51
|
+
--planner-event-selected: var( --accent-background );
|
|
52
|
+
|
|
53
|
+
--planner-range-background: var( --accent-background-light );
|
|
54
|
+
--planner-range-border: var( --accent-background );
|
|
55
|
+
|
|
56
|
+
--planner-out-color: var( --text-secondary ); // the days of the month before and after it
|
|
57
|
+
--planner-more-color: var( --text-ternary );
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.x4planner {
|
|
61
|
+
display: flex;
|
|
62
|
+
flex-direction: column;
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
outline: none;
|
|
65
|
+
user-select: none;
|
|
66
|
+
border: 1px solid var( --planner-border );
|
|
67
|
+
background-color: var( --planner-background );
|
|
68
|
+
|
|
69
|
+
&:focus {
|
|
70
|
+
border-color: var( --planner-border-focus );
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// disabled (inert: nothing reaches it): faded as a Box
|
|
74
|
+
&[disabled] {
|
|
75
|
+
opacity: var( --box-disabled-opacity );
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// the days, over their columns: the name of the day, its number under it; today, its number in a round of the accent
|
|
79
|
+
> .head {
|
|
80
|
+
position: relative;
|
|
81
|
+
flex-shrink: 0;
|
|
82
|
+
height: 64px;
|
|
83
|
+
border-bottom: 1px solid var( --planner-hour-line-color );
|
|
84
|
+
|
|
85
|
+
.day {
|
|
86
|
+
position: absolute;
|
|
87
|
+
top: 0;
|
|
88
|
+
bottom: 0;
|
|
89
|
+
display: flex;
|
|
90
|
+
flex-direction: column;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
gap: 2px;
|
|
94
|
+
box-sizing: border-box;
|
|
95
|
+
overflow: hidden;
|
|
96
|
+
white-space: nowrap;
|
|
97
|
+
border-left: 1px solid var( --planner-line-color );
|
|
98
|
+
|
|
99
|
+
.name {
|
|
100
|
+
font-size: 0.7rem;
|
|
101
|
+
letter-spacing: 0.05em;
|
|
102
|
+
text-transform: uppercase;
|
|
103
|
+
color: var( --planner-header-color );
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.num {
|
|
107
|
+
width: 34px;
|
|
108
|
+
height: 34px;
|
|
109
|
+
line-height: 34px;
|
|
110
|
+
border-radius: 50%;
|
|
111
|
+
text-align: center;
|
|
112
|
+
font-size: 1.3rem;
|
|
113
|
+
color: var( --planner-day-color );
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
&.off {
|
|
117
|
+
.name,
|
|
118
|
+
.num {
|
|
119
|
+
color: var( --planner-off-color );
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// the tint of its column behind it (its own layer: its opacity is not the one of the texts)
|
|
124
|
+
&.today {
|
|
125
|
+
isolation: isolate;
|
|
126
|
+
|
|
127
|
+
&::before {
|
|
128
|
+
content: "";
|
|
129
|
+
position: absolute;
|
|
130
|
+
inset: 0;
|
|
131
|
+
z-index: -1;
|
|
132
|
+
background-color: var( --planner-today-column );
|
|
133
|
+
opacity: 0.5;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.name {
|
|
137
|
+
color: var( --planner-today-background );
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.num {
|
|
141
|
+
color: var( --planner-today-color );
|
|
142
|
+
background-color: var( --planner-today-background );
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// the events of whole days, under the days
|
|
149
|
+
> .band {
|
|
150
|
+
position: relative;
|
|
151
|
+
flex-shrink: 0;
|
|
152
|
+
border-bottom: 1px solid var( --planner-hour-line-color );
|
|
153
|
+
|
|
154
|
+
> .day {
|
|
155
|
+
position: absolute;
|
|
156
|
+
top: 0;
|
|
157
|
+
bottom: 0;
|
|
158
|
+
box-sizing: border-box;
|
|
159
|
+
border-left: 1px solid var( --planner-line-color );
|
|
160
|
+
|
|
161
|
+
&.off {
|
|
162
|
+
background-color: var( --planner-off-background );
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
// alone in it: its opacity is the one of its background
|
|
166
|
+
&.today {
|
|
167
|
+
background-color: var( --planner-today-column );
|
|
168
|
+
opacity: 0.5;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
> .range {
|
|
173
|
+
top: 1px;
|
|
174
|
+
bottom: 1px;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
> .body {
|
|
179
|
+
flex: 1;
|
|
180
|
+
min-height: 0;
|
|
181
|
+
overflow-x: hidden;
|
|
182
|
+
overflow-y: auto;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.canvas {
|
|
186
|
+
position: relative;
|
|
187
|
+
|
|
188
|
+
> .layer,
|
|
189
|
+
> .marks,
|
|
190
|
+
> .hours {
|
|
191
|
+
position: absolute;
|
|
192
|
+
inset: 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
> .marks,
|
|
196
|
+
> .hours {
|
|
197
|
+
pointer-events: none;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// behind the events: a path for the days off and the hours out of the working ones, one for
|
|
202
|
+
// the lines of the steps and between the days, one for the lines of the working hours
|
|
203
|
+
.grid {
|
|
204
|
+
position: absolute;
|
|
205
|
+
left: 0;
|
|
206
|
+
top: 0;
|
|
207
|
+
pointer-events: none;
|
|
208
|
+
|
|
209
|
+
path {
|
|
210
|
+
fill: none;
|
|
211
|
+
stroke-width: 1;
|
|
212
|
+
shape-rendering: crispEdges;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
.off {
|
|
216
|
+
fill: var( --planner-off-background );
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.today {
|
|
220
|
+
fill: var( --planner-today-column );
|
|
221
|
+
fill-opacity: 0.5;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.step {
|
|
225
|
+
stroke: var( --planner-step-color );
|
|
226
|
+
stroke-opacity: 0.5;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
.line {
|
|
230
|
+
stroke: var( --planner-line-color );
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.hour {
|
|
234
|
+
stroke: var( --planner-hour-line-color );
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.hours .hour {
|
|
239
|
+
position: absolute;
|
|
240
|
+
left: 0;
|
|
241
|
+
width: 44px;
|
|
242
|
+
text-align: right;
|
|
243
|
+
transform: translateY( -50% );
|
|
244
|
+
font-size: 0.72rem;
|
|
245
|
+
font-variant-numeric: tabular-nums;
|
|
246
|
+
color: var( --planner-hour-color );
|
|
247
|
+
|
|
248
|
+
&.work {
|
|
249
|
+
color: var( --planner-hour-color-work );
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// under the time of now
|
|
253
|
+
&.covered {
|
|
254
|
+
visibility: hidden;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// the view of a day: its column is the view, no tint behind today
|
|
259
|
+
&.day-view {
|
|
260
|
+
> .head .day.today::before {
|
|
261
|
+
display: none;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
> .band > .day.today {
|
|
265
|
+
background-color: transparent;
|
|
266
|
+
opacity: 1;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
.grid .today {
|
|
270
|
+
fill: none;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
// now: a line across the days, over the events; paler across today
|
|
275
|
+
.now {
|
|
276
|
+
position: absolute;
|
|
277
|
+
height: 1px;
|
|
278
|
+
z-index: 3;
|
|
279
|
+
pointer-events: none;
|
|
280
|
+
background-color: var( --planner-now-color );
|
|
281
|
+
|
|
282
|
+
&.today {
|
|
283
|
+
opacity: 0.2;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// the events out of the view: a mark at the top or the bottom of the view, in the middle of their day
|
|
288
|
+
.edge {
|
|
289
|
+
position: absolute;
|
|
290
|
+
z-index: 4;
|
|
291
|
+
width: 40px;
|
|
292
|
+
height: 18px;
|
|
293
|
+
line-height: 18px;
|
|
294
|
+
margin-left: -20px;
|
|
295
|
+
border-radius: 9px;
|
|
296
|
+
text-align: center;
|
|
297
|
+
font-size: 0.72rem;
|
|
298
|
+
font-weight: 600;
|
|
299
|
+
cursor: pointer;
|
|
300
|
+
color: var( --planner-edge-color );
|
|
301
|
+
background-color: var( --planner-edge-background );
|
|
302
|
+
box-shadow: var( --planner-edge-shadow );
|
|
303
|
+
opacity: var( --planner-edge-opacity );
|
|
304
|
+
|
|
305
|
+
&:hover {
|
|
306
|
+
opacity: 1;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// a tab on the edge of the view: its corners against it square
|
|
310
|
+
&.up {
|
|
311
|
+
border-top-left-radius: 0;
|
|
312
|
+
border-top-right-radius: 0;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// 2px less under its text: against the bottom of the view
|
|
316
|
+
&.down {
|
|
317
|
+
height: 16px;
|
|
318
|
+
margin-top: -16px;
|
|
319
|
+
border-bottom-left-radius: 0;
|
|
320
|
+
border-bottom-right-radius: 0;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// its time, in the hours on the left: a tag, its point on the line
|
|
325
|
+
.now-time {
|
|
326
|
+
position: absolute;
|
|
327
|
+
left: 4px;
|
|
328
|
+
width: 48px;
|
|
329
|
+
box-sizing: border-box;
|
|
330
|
+
transform: translateY( -50% );
|
|
331
|
+
padding: 1px 9px 1px 4px;
|
|
332
|
+
clip-path: polygon( 0 0, calc( 100% - 7px ) 0, 100% 50%, calc( 100% - 7px ) 100%, 0 100% );
|
|
333
|
+
text-align: right;
|
|
334
|
+
font-size: 0.7rem;
|
|
335
|
+
font-weight: 700;
|
|
336
|
+
font-variant-numeric: tabular-nums;
|
|
337
|
+
z-index: 3;
|
|
338
|
+
pointer-events: none;
|
|
339
|
+
color: var( --planner-now-text );
|
|
340
|
+
background-color: var( --planner-now-tag );
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
// the range selected: on a day, on days of the band
|
|
344
|
+
.marks > .range,
|
|
345
|
+
.band > .range {
|
|
346
|
+
position: absolute;
|
|
347
|
+
box-sizing: border-box;
|
|
348
|
+
border-radius: 4px;
|
|
349
|
+
pointer-events: none;
|
|
350
|
+
border: 1px solid var( --planner-range-border );
|
|
351
|
+
background-color: var( --planner-range-background );
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.range-label {
|
|
355
|
+
position: absolute;
|
|
356
|
+
font-size: 0.8rem;
|
|
357
|
+
pointer-events: none;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
// an event in its colour (the accent of the theme by default): its top border, its icon, and a tint
|
|
361
|
+
// of it on its background, drawn on a layer of its own (its opacity is not the one of the texts)
|
|
362
|
+
.event {
|
|
363
|
+
box-sizing: border-box;
|
|
364
|
+
overflow: hidden;
|
|
365
|
+
isolation: isolate;
|
|
366
|
+
font-size: 0.8rem;
|
|
367
|
+
line-height: 1.3;
|
|
368
|
+
color: var( --planner-event-title );
|
|
369
|
+
background-color: var( --planner-event-background );
|
|
370
|
+
border-top: 2px solid var( --planner-event-color );
|
|
371
|
+
border-radius: var( --planner-event-radius );
|
|
372
|
+
|
|
373
|
+
&::before {
|
|
374
|
+
content: "";
|
|
375
|
+
position: absolute;
|
|
376
|
+
inset: 0;
|
|
377
|
+
z-index: -1;
|
|
378
|
+
border-radius: inherit;
|
|
379
|
+
background-color: var( --planner-event-color );
|
|
380
|
+
opacity: var( --planner-event-tint );
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
&.colored {
|
|
384
|
+
--planner-event-color: var( --planner-color );
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
// its title, its icon on its right
|
|
388
|
+
.head {
|
|
389
|
+
display: flex;
|
|
390
|
+
align-items: center;
|
|
391
|
+
gap: 4px;
|
|
392
|
+
min-width: 0;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// a little transparent: softer on the tint
|
|
396
|
+
.title {
|
|
397
|
+
flex: 1;
|
|
398
|
+
min-width: 0;
|
|
399
|
+
font-weight: 600;
|
|
400
|
+
white-space: nowrap;
|
|
401
|
+
overflow: hidden;
|
|
402
|
+
text-overflow: ellipsis;
|
|
403
|
+
opacity: 0.85;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
.icon {
|
|
407
|
+
width: 14px;
|
|
408
|
+
height: 14px;
|
|
409
|
+
min-width: 14px;
|
|
410
|
+
color: var( --planner-event-color );
|
|
411
|
+
fill: currentColor;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.time,
|
|
415
|
+
.text {
|
|
416
|
+
color: var( --planner-event-text );
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
.time {
|
|
420
|
+
white-space: nowrap;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// inside it: its outer edge is the one of the event, its radius too
|
|
424
|
+
&.selected {
|
|
425
|
+
outline: 2px solid var( --planner-event-selected );
|
|
426
|
+
outline-offset: -2px;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
// moved, not copied: where it was
|
|
430
|
+
&.faded {
|
|
431
|
+
opacity: 0.35;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
// where it goes, over the others
|
|
435
|
+
&.dragging {
|
|
436
|
+
z-index: 2;
|
|
437
|
+
opacity: 0.8;
|
|
438
|
+
pointer-events: none;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
&:not( .readonly ) .event {
|
|
443
|
+
cursor: grab;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
// in a day: its title, its times, its text on as many lines as it has room for
|
|
447
|
+
.layer > .event {
|
|
448
|
+
position: absolute;
|
|
449
|
+
display: flex;
|
|
450
|
+
flex-direction: column;
|
|
451
|
+
padding: 2px 6px;
|
|
452
|
+
|
|
453
|
+
.text {
|
|
454
|
+
margin-top: 4px;
|
|
455
|
+
min-height: 0;
|
|
456
|
+
overflow: hidden;
|
|
457
|
+
white-space: pre-line;
|
|
458
|
+
font-style: italic;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
// on a small one: on one line, the times cut before the title
|
|
462
|
+
&.small {
|
|
463
|
+
flex-direction: row;
|
|
464
|
+
align-items: center;
|
|
465
|
+
gap: 6px;
|
|
466
|
+
padding: 0 6px;
|
|
467
|
+
|
|
468
|
+
.head {
|
|
469
|
+
flex-shrink: 0;
|
|
470
|
+
max-width: 100%;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
.time {
|
|
474
|
+
min-width: 0;
|
|
475
|
+
overflow: hidden;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.text {
|
|
479
|
+
display: none;
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// its top and its bottom, small enough on a small event to leave room to move it
|
|
484
|
+
.grip {
|
|
485
|
+
position: absolute;
|
|
486
|
+
left: 0;
|
|
487
|
+
right: 0;
|
|
488
|
+
height: min( 6px, 25% );
|
|
489
|
+
cursor: ns-resize;
|
|
490
|
+
|
|
491
|
+
&.start {
|
|
492
|
+
top: 0;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
&.end {
|
|
496
|
+
bottom: 0;
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// in the band: its title on one line, its left and right ends
|
|
502
|
+
.band > .event {
|
|
503
|
+
position: absolute;
|
|
504
|
+
display: flex;
|
|
505
|
+
align-items: center;
|
|
506
|
+
padding: 0 6px;
|
|
507
|
+
|
|
508
|
+
.head {
|
|
509
|
+
flex: 1;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
.grip {
|
|
513
|
+
position: absolute;
|
|
514
|
+
top: 0;
|
|
515
|
+
bottom: 0;
|
|
516
|
+
width: 6px;
|
|
517
|
+
cursor: ew-resize;
|
|
518
|
+
|
|
519
|
+
&.start {
|
|
520
|
+
left: 0;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
&.end {
|
|
524
|
+
right: 0;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
// while an event is moved or stretched, a range selected: the cursor wherever the pointer is
|
|
530
|
+
&.moving,
|
|
531
|
+
&.moving * {
|
|
532
|
+
cursor: grabbing !important;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
&.sizing .layer,
|
|
536
|
+
&.sizing .layer * {
|
|
537
|
+
cursor: ns-resize !important;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
&.sizing .band,
|
|
541
|
+
&.sizing .band * {
|
|
542
|
+
cursor: ew-resize !important;
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
// the month: its weeks, the days off narrower
|
|
546
|
+
> .month {
|
|
547
|
+
flex: 1;
|
|
548
|
+
min-height: 0;
|
|
549
|
+
display: flex;
|
|
550
|
+
flex-direction: column;
|
|
551
|
+
|
|
552
|
+
> .names {
|
|
553
|
+
flex-shrink: 0;
|
|
554
|
+
display: grid;
|
|
555
|
+
grid-template-columns: var( --planner-cols );
|
|
556
|
+
height: 30px;
|
|
557
|
+
border-bottom: 1px solid var( --planner-hour-line-color );
|
|
558
|
+
|
|
559
|
+
.name {
|
|
560
|
+
display: flex;
|
|
561
|
+
align-items: center;
|
|
562
|
+
justify-content: center;
|
|
563
|
+
color: var( --planner-header-color );
|
|
564
|
+
|
|
565
|
+
&.off {
|
|
566
|
+
color: var( --planner-off-color );
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
> .cells {
|
|
572
|
+
position: relative;
|
|
573
|
+
flex: 1;
|
|
574
|
+
min-height: 0;
|
|
575
|
+
display: grid;
|
|
576
|
+
grid-template-columns: var( --planner-cols );
|
|
577
|
+
grid-template-rows: repeat( var( --planner-rows ), minmax( 0, 1fr ) );
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
.day {
|
|
581
|
+
display: flex;
|
|
582
|
+
flex-direction: column;
|
|
583
|
+
min-width: 0;
|
|
584
|
+
min-height: 0;
|
|
585
|
+
overflow: hidden;
|
|
586
|
+
padding: 2px 4px 4px;
|
|
587
|
+
border-right: 1px solid var( --planner-line-color );
|
|
588
|
+
border-bottom: 1px solid var( --planner-line-color );
|
|
589
|
+
|
|
590
|
+
&.off {
|
|
591
|
+
background-color: var( --planner-off-background );
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
&.out .num {
|
|
595
|
+
color: var( --planner-out-color );
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// its number in a round of the accent
|
|
599
|
+
&.today .num {
|
|
600
|
+
align-self: flex-end;
|
|
601
|
+
width: 20px;
|
|
602
|
+
border-radius: 50%;
|
|
603
|
+
text-align: center;
|
|
604
|
+
color: var( --planner-today-color );
|
|
605
|
+
background-color: var( --planner-today-background );
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
&.range {
|
|
609
|
+
background-color: var( --planner-range-background );
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// where the event moved goes
|
|
613
|
+
&.drop {
|
|
614
|
+
outline: 2px solid var( --planner-range-border );
|
|
615
|
+
outline-offset: -2px;
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
// as high as the round of today: the lists of the days start at the same height
|
|
619
|
+
.num {
|
|
620
|
+
flex-shrink: 0;
|
|
621
|
+
height: 20px;
|
|
622
|
+
line-height: 20px;
|
|
623
|
+
text-align: right;
|
|
624
|
+
font-size: 0.8rem;
|
|
625
|
+
color: var( --planner-header-color );
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
.list {
|
|
629
|
+
flex: 1;
|
|
630
|
+
min-height: 0;
|
|
631
|
+
overflow: hidden;
|
|
632
|
+
display: flex;
|
|
633
|
+
flex-direction: column;
|
|
634
|
+
gap: 2px;
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
.more {
|
|
638
|
+
flex-shrink: 0;
|
|
639
|
+
height: 18px;
|
|
640
|
+
font-size: 0.75rem;
|
|
641
|
+
cursor: pointer;
|
|
642
|
+
color: var( --planner-more-color );
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// a line of 18px, its gap of 2px: MONTH_LINE in planner.ts; positioned, for its tint
|
|
647
|
+
.event {
|
|
648
|
+
position: relative;
|
|
649
|
+
flex-shrink: 0;
|
|
650
|
+
display: flex;
|
|
651
|
+
align-items: center;
|
|
652
|
+
gap: 4px;
|
|
653
|
+
height: 18px;
|
|
654
|
+
padding: 0 4px;
|
|
655
|
+
font-size: 0.75rem;
|
|
656
|
+
|
|
657
|
+
.time {
|
|
658
|
+
flex-shrink: 0;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
.head {
|
|
662
|
+
flex: 1;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
// the ghost, under the pointer
|
|
666
|
+
&.dragging {
|
|
667
|
+
position: absolute;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
&.month {
|
|
673
|
+
> .head,
|
|
674
|
+
> .band,
|
|
675
|
+
> .body {
|
|
676
|
+
display: none;
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
// no sub grid: the lines of the hours alone
|
|
681
|
+
&.nosubgrid .grid .step {
|
|
682
|
+
display: none;
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
&:not( .month ) > .month {
|
|
686
|
+
display: none;
|
|
687
|
+
}
|
|
688
|
+
}
|