@rt-tools/ui-kit-v2 0.41.0 → 0.43.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/fesm2022/rt-tools-ui-kit-v2-calendar.mjs +4 -4
- package/fesm2022/rt-tools-ui-kit-v2-calendar.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs +22 -0
- package/fesm2022/rt-tools-ui-kit-v2-core.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs +155 -100
- package/fesm2022/rt-tools-ui-kit-v2-date-picker.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs +2 -2
- package/fesm2022/rt-tools-ui-kit-v2-date-range.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs +1778 -18
- package/fesm2022/rt-tools-ui-kit-v2-page-header.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +22 -5
- package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs +34 -11
- package/fesm2022/rt-tools-ui-kit-v2-stepper.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs +725 -47
- package/fesm2022/rt-tools-ui-kit-v2-tabs.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs +6 -0
- package/fesm2022/rt-tools-ui-kit-v2-workspace-details.mjs.map +1 -1
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs +217 -6
- package/fesm2022/rt-tools-ui-kit-v2-workspace.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/components/calendar/CONTEXT.md +4 -2
- package/src/lib/components/calendar/rt-calendar.component.scss +29 -2
- package/src/lib/components/date-picker/CONTEXT.md +5 -0
- package/src/lib/components/date-picker/panel/CONTEXT.md +42 -0
- package/src/lib/components/date-picker/panel/rt-date-panel.component.scss +55 -2
- package/src/lib/components/page-header/CONTEXT.md +35 -1
- package/src/lib/components/page-header/bar/rt-page-bar.component.scss +161 -0
- package/src/lib/components/page-header/rail/rt-page-actions.component.scss +115 -0
- package/src/lib/components/page-header/rail/rt-page-phone-menu.component.scss +129 -0
- package/src/lib/components/page-header/rail/rt-page-rail.component.scss +281 -0
- package/src/lib/components/page-header/rail/rt-page-user.component.scss +76 -0
- package/src/lib/components/page-header/rt-page-header.component.scss +5 -0
- package/src/lib/components/page-header/stories/component/test-page-header-vertical.component.scss +72 -0
- package/src/lib/components/page-header/stories/component/test-page-table.component.scss +81 -0
- package/src/lib/components/page-header/user/rt-page-header-user.component.scss +6 -0
- package/src/lib/components/stepper/CONTEXT.md +34 -2
- package/src/lib/components/stepper/rt-stepper.component.scss +62 -43
- package/src/lib/components/tabs/CONTEXT.md +30 -1
- package/src/lib/components/tabs/rt-tabs-arrows.scss +140 -0
- package/src/lib/components/tabs/rt-tabs-more-menu.scss +126 -0
- package/src/lib/components/tabs/rt-tabs-more.component.scss +29 -0
- package/src/lib/components/tabs/rt-tabs.component.scss +18 -61
- package/src/lib/components/workspace/CONTEXT.md +11 -1
- package/src/lib/components/workspace/rt-workspace.component.scss +51 -3
- package/src/rich-editor/lib/components/chat/CONTEXT.md +12 -2
- package/src/rich-editor/lib/components/chat/rt-chat-messenger.scss +9 -3
- package/src/rich-editor/lib/components/chat/rt-chat-translation.scss +92 -0
- package/types/rt-tools-ui-kit-v2-calendar.d.ts +13 -1
- package/types/rt-tools-ui-kit-v2-core.d.ts +9 -1
- package/types/rt-tools-ui-kit-v2-date-picker.d.ts +157 -5
- package/types/rt-tools-ui-kit-v2-page-header.d.ts +202 -2
- package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +25 -0
- package/types/rt-tools-ui-kit-v2-stepper.d.ts +20 -6
- package/types/rt-tools-ui-kit-v2-tabs.d.ts +120 -1
- package/types/rt-tools-ui-kit-v2-workspace.d.ts +33 -1
|
@@ -2,15 +2,15 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ViewEncapsulation, afterRenderEffect, booleanAttribute, computed, forwardRef, inject, input, linkedSignal, numberAttribute, output, signal, viewChild, viewChildren } from "@angular/core";
|
|
3
3
|
import { BlockDirective, ElemDirective, ModDirective } from "@rt-tools/core";
|
|
4
4
|
import { BreakpointsService, RT_KIT_LABELS, RT_KIT_LOCALE } from "@rt-tools/ui-kit-v2/core";
|
|
5
|
+
import { RtButtonDirective } from "@rt-tools/ui-kit-v2/button";
|
|
6
|
+
import { ERtCalendarDayState, RtCalendarComponent } from "@rt-tools/ui-kit-v2/calendar";
|
|
7
|
+
import { RtIconButtonComponent } from "@rt-tools/ui-kit-v2/icon-button";
|
|
8
|
+
import { RtToggleButtonGroupComponent } from "@rt-tools/ui-kit-v2/toggle-button-group";
|
|
5
9
|
import { RtBottomSheetComponent } from "@rt-tools/ui-kit-v2/bottom-sheet";
|
|
6
10
|
import { RtFormControlBase } from "@rt-tools/ui-kit-v2/form-control";
|
|
7
|
-
import { RtIconButtonComponent } from "@rt-tools/ui-kit-v2/icon-button";
|
|
8
11
|
import { RtPopoverDirective } from "@rt-tools/ui-kit-v2/popover";
|
|
9
12
|
import * as i1 from "@rt-tools/ui-kit-v2/radius";
|
|
10
13
|
import { RtRadiusDirective } from "@rt-tools/ui-kit-v2/radius";
|
|
11
|
-
import { RtButtonDirective } from "@rt-tools/ui-kit-v2/button";
|
|
12
|
-
import { ERtCalendarDayState, RtCalendarComponent } from "@rt-tools/ui-kit-v2/calendar";
|
|
13
|
-
import { RtToggleButtonGroupComponent } from "@rt-tools/ui-kit-v2/toggle-button-group";
|
|
14
14
|
const DAY_RE = /^(\d{4})-(\d{2})-(\d{2})$/;
|
|
15
15
|
const TIME_RE = /^(\d{2}):(\d{2})$/;
|
|
16
16
|
const DAY_LENGTH_MS = 864e5;
|
|
@@ -133,6 +133,30 @@ function rtDateMonth(month, ctx) {
|
|
|
133
133
|
days
|
|
134
134
|
};
|
|
135
135
|
}
|
|
136
|
+
function outsideDay(ms, min, max) {
|
|
137
|
+
const key = msToDay(ms);
|
|
138
|
+
return {
|
|
139
|
+
key,
|
|
140
|
+
dayOfMonth: Number(key.slice(8)),
|
|
141
|
+
crossed: !rtDateInBounds(key, min, max)
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function rtDatePanelMonth(month, ctx) {
|
|
145
|
+
const base = rtDateMonth(month, ctx);
|
|
146
|
+
const first = dayToMs(base.days[0].key);
|
|
147
|
+
const last = dayToMs(base.days[base.days.length - 1].key);
|
|
148
|
+
const lead = base.leadingBlanks.length;
|
|
149
|
+
const tail = (WEEK - (lead + base.days.length) % WEEK) % WEEK;
|
|
150
|
+
return {
|
|
151
|
+
...base,
|
|
152
|
+
days: base.days.map((day) => day.disabled ? {
|
|
153
|
+
...day,
|
|
154
|
+
state: ERtCalendarDayState.Busy
|
|
155
|
+
} : day),
|
|
156
|
+
leadingDays: Array.from({ length: lead }, (_, i) => outsideDay(first - (lead - i) * DAY_LENGTH_MS, ctx.min, ctx.max)),
|
|
157
|
+
trailingDays: Array.from({ length: tail }, (_, i) => outsideDay(last + (i + 1) * DAY_LENGTH_MS, ctx.min, ctx.max))
|
|
158
|
+
};
|
|
159
|
+
}
|
|
136
160
|
function rtDateWeekdays(locale) {
|
|
137
161
|
const format = new Intl.DateTimeFormat(locale, {
|
|
138
162
|
weekday: "short",
|
|
@@ -140,7 +164,10 @@ function rtDateWeekdays(locale) {
|
|
|
140
164
|
});
|
|
141
165
|
const monday = Date.UTC(2024, 0, 1);
|
|
142
166
|
const shift = rtDateFirstDay(locale) - 1;
|
|
143
|
-
return Array.from({ length: WEEK }, (_, i) =>
|
|
167
|
+
return Array.from({ length: WEEK }, (_, i) => {
|
|
168
|
+
const name = format.format(monday + (i + shift) % WEEK * DAY_LENGTH_MS);
|
|
169
|
+
return name.charAt(0).toLocaleUpperCase(locale) + name.slice(1);
|
|
170
|
+
});
|
|
144
171
|
}
|
|
145
172
|
function rtDateMonths(year, locale, min, max) {
|
|
146
173
|
const format = new Intl.DateTimeFormat(locale, {
|
|
@@ -231,9 +258,93 @@ function rtDateGridKey(key, day, firstDay, min, max) {
|
|
|
231
258
|
if (low !== null && rank(target) < rank(low)) return low;
|
|
232
259
|
return high !== null && rank(target) > rank(high) ? high : target;
|
|
233
260
|
}
|
|
261
|
+
const SAMPLE_DAY = new Date(2026, 0, 31);
|
|
262
|
+
const DEFAULT_LAYOUT = {
|
|
263
|
+
order: [
|
|
264
|
+
"day",
|
|
265
|
+
"month",
|
|
266
|
+
"year"
|
|
267
|
+
],
|
|
268
|
+
separator: "."
|
|
269
|
+
};
|
|
270
|
+
const YEAR_LEN$1 = 4;
|
|
271
|
+
const PART_MAX_LEN = 2;
|
|
272
|
+
const DAY_GROUPS = 3;
|
|
273
|
+
const TIME_GROUPS = 2;
|
|
274
|
+
const TEXT_RE = /^[\d\s.,/:\-T]+$/;
|
|
275
|
+
function isDatePart(type) {
|
|
276
|
+
return type === "day" || type === "month" || type === "year";
|
|
277
|
+
}
|
|
278
|
+
function dayText(day, layout) {
|
|
279
|
+
const [year, month, date] = day.split("-");
|
|
280
|
+
const parts = {
|
|
281
|
+
day: date,
|
|
282
|
+
month,
|
|
283
|
+
year
|
|
284
|
+
};
|
|
285
|
+
return layout.order.map((part) => parts[part]).join(layout.separator);
|
|
286
|
+
}
|
|
287
|
+
function readDay(groups, layout) {
|
|
288
|
+
const parts = {};
|
|
289
|
+
layout.order.forEach((part, index) => {
|
|
290
|
+
parts[part] = groups[index];
|
|
291
|
+
});
|
|
292
|
+
const { day, month, year } = parts;
|
|
293
|
+
if (day === void 0 || month === void 0 || year?.length !== YEAR_LEN$1) return null;
|
|
294
|
+
if (day.length > PART_MAX_LEN || month.length > PART_MAX_LEN) return null;
|
|
295
|
+
return `${year}-${month.padStart(PART_MAX_LEN, "0")}-${day.padStart(PART_MAX_LEN, "0")}`;
|
|
296
|
+
}
|
|
297
|
+
function readTime(groups) {
|
|
298
|
+
if (groups.length !== TIME_GROUPS) return null;
|
|
299
|
+
const [hour, minute] = groups;
|
|
300
|
+
if (minute.length !== PART_MAX_LEN || hour.length > PART_MAX_LEN) return null;
|
|
301
|
+
return `${hour.padStart(PART_MAX_LEN, "0")}:${minute}`;
|
|
302
|
+
}
|
|
303
|
+
function readGroups(groups, type, layout) {
|
|
304
|
+
if (type === "time") return readTime(groups);
|
|
305
|
+
if (type === "date") return groups.length === DAY_GROUPS ? readDay(groups, layout) : null;
|
|
306
|
+
if (groups.length !== 5) return null;
|
|
307
|
+
const day = readDay(groups.slice(0, DAY_GROUPS), layout);
|
|
308
|
+
const time = readTime(groups.slice(DAY_GROUPS));
|
|
309
|
+
return day === null || time === null ? null : `${day}T${time}`;
|
|
310
|
+
}
|
|
311
|
+
function rtDateLayout(locale) {
|
|
312
|
+
const parts = new Intl.DateTimeFormat(locale, {
|
|
313
|
+
day: "2-digit",
|
|
314
|
+
month: "2-digit",
|
|
315
|
+
year: "numeric"
|
|
316
|
+
}).formatToParts(SAMPLE_DAY);
|
|
317
|
+
const order = parts.map((part) => part.type).filter((type) => isDatePart(type));
|
|
318
|
+
const separator = parts.find((part) => part.type === "literal")?.value.trim() ?? "";
|
|
319
|
+
if (order.length !== DAY_GROUPS || separator === "") return DEFAULT_LAYOUT;
|
|
320
|
+
return {
|
|
321
|
+
order,
|
|
322
|
+
separator
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
function rtDateText(value, type, layout) {
|
|
326
|
+
if (type === "time" || rtDateRead(value, type) === null) return value;
|
|
327
|
+
if (type === "date") return dayText(value, layout);
|
|
328
|
+
const [day, time] = value.split("T");
|
|
329
|
+
return `${dayText(day, layout)} ${time}`;
|
|
330
|
+
}
|
|
331
|
+
function rtDateShape(type, layout, letters) {
|
|
332
|
+
const time = `${letters.hour}:${letters.minute}`;
|
|
333
|
+
if (type === "time") return time;
|
|
334
|
+
const day = layout.order.map((part) => letters[part]).join(layout.separator);
|
|
335
|
+
return type === "date" ? day : `${day} ${time}`;
|
|
336
|
+
}
|
|
337
|
+
function rtDateParse(text, type, layout) {
|
|
338
|
+
const iso = rtDateRead(text, type);
|
|
339
|
+
if (iso !== null) return iso;
|
|
340
|
+
const value = text.trim();
|
|
341
|
+
if (!TEXT_RE.test(value)) return null;
|
|
342
|
+
const candidate = readGroups(value.match(/\d+/g) ?? [], type, layout);
|
|
343
|
+
return candidate === null ? null : rtDateRead(candidate, type);
|
|
344
|
+
}
|
|
234
345
|
const BEM_BLOCK$1 = "rt-date-panel";
|
|
235
346
|
const MONTH_LEN = 7;
|
|
236
|
-
const YEAR_LEN
|
|
347
|
+
const YEAR_LEN = 4;
|
|
237
348
|
const ESCAPE_BACK = {
|
|
238
349
|
days: null,
|
|
239
350
|
months: "days",
|
|
@@ -257,11 +368,11 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
257
368
|
this.draftDay = linkedSignal(() => rtDateSplit(this.value(), this.type()).day, ...ngDevMode ? [{ debugName: "draftDay" }] : /* istanbul ignore next */ []);
|
|
258
369
|
this.draftTime = linkedSignal(() => rtDateSplit(this.value(), this.type()).time, ...ngDevMode ? [{ debugName: "draftTime" }] : /* istanbul ignore next */ []);
|
|
259
370
|
this.shownMonth = linkedSignal(() => (this.draftDay() ?? this.today()).slice(0, MONTH_LEN), ...ngDevMode ? [{ debugName: "shownMonth" }] : /* istanbul ignore next */ []);
|
|
260
|
-
this.year = linkedSignal(() => Number(this.shownMonth().slice(0, YEAR_LEN
|
|
371
|
+
this.year = linkedSignal(() => Number(this.shownMonth().slice(0, YEAR_LEN)), ...ngDevMode ? [{ debugName: "year" }] : /* istanbul ignore next */ []);
|
|
261
372
|
this.split = computed(() => this.sheet() && this.type() === "datetime-local", ...ngDevMode ? [{ debugName: "split" }] : /* istanbul ignore next */ []);
|
|
262
373
|
this.showDate = computed(() => this.type() !== "time" && !(this.split() && this.tab() === "time"), ...ngDevMode ? [{ debugName: "showDate" }] : /* istanbul ignore next */ []);
|
|
263
374
|
this.showTime = computed(() => this.type() !== "date" && !(this.split() && this.tab() === "date"), ...ngDevMode ? [{ debugName: "showTime" }] : /* istanbul ignore next */ []);
|
|
264
|
-
this.months = computed(() => [
|
|
375
|
+
this.months = computed(() => [rtDatePanelMonth(this.shownMonth(), {
|
|
265
376
|
locale: this.#locale(),
|
|
266
377
|
today: this.today(),
|
|
267
378
|
chosen: this.draftDay(),
|
|
@@ -279,8 +390,8 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
279
390
|
const cells = this.yearCells();
|
|
280
391
|
return `${cells[0].label} – ${cells[cells.length - 1].label}`;
|
|
281
392
|
}, ...ngDevMode ? [{ debugName: "yearSpan" }] : /* istanbul ignore next */ []);
|
|
282
|
-
this.chosenYear = computed(() => this.draftDay()?.slice(0, YEAR_LEN
|
|
283
|
-
this.currentYear = computed(() => this.today().slice(0, YEAR_LEN
|
|
393
|
+
this.chosenYear = computed(() => this.draftDay()?.slice(0, YEAR_LEN) ?? null, ...ngDevMode ? [{ debugName: "chosenYear" }] : /* istanbul ignore next */ []);
|
|
394
|
+
this.currentYear = computed(() => this.today().slice(0, YEAR_LEN), ...ngDevMode ? [{ debugName: "currentYear" }] : /* istanbul ignore next */ []);
|
|
284
395
|
this.currentMonth = computed(() => this.today().slice(0, MONTH_LEN), ...ngDevMode ? [{ debugName: "currentMonth" }] : /* istanbul ignore next */ []);
|
|
285
396
|
this.canPrevYears = computed(() => rtDateCanPageYears(this.yearStart(), -1, this.min(), this.max()), ...ngDevMode ? [{ debugName: "canPrevYears" }] : /* istanbul ignore next */ []);
|
|
286
397
|
this.canNextYears = computed(() => rtDateCanPageYears(this.yearStart(), 1, this.min(), this.max()), ...ngDevMode ? [{ debugName: "canNextYears" }] : /* istanbul ignore next */ []);
|
|
@@ -294,7 +405,12 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
294
405
|
max: this.max()
|
|
295
406
|
}), ...ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []);
|
|
296
407
|
this.todayOff = computed(() => !rtDateInBounds(this.today(), this.min(), this.max()), ...ngDevMode ? [{ debugName: "todayOff" }] : /* istanbul ignore next */ []);
|
|
408
|
+
this.hasFooter = computed(() => this.type() !== "date" || this.isTodayButtonShown(), ...ngDevMode ? [{ debugName: "hasFooter" }] : /* istanbul ignore next */ []);
|
|
297
409
|
this.canApply = computed(() => this.#draftValue() !== "", ...ngDevMode ? [{ debugName: "canApply" }] : /* istanbul ignore next */ []);
|
|
410
|
+
this.draftText = computed(() => {
|
|
411
|
+
const parts = this.#draftValue().split("T");
|
|
412
|
+
return parts.length < 2 ? "" : `${rtDateText(parts[0], "date", rtDateLayout(this.#locale()))}, ${parts[1]}`;
|
|
413
|
+
}, ...ngDevMode ? [{ debugName: "draftText" }] : /* istanbul ignore next */ []);
|
|
298
414
|
this.tabs = computed(() => [{
|
|
299
415
|
value: "date",
|
|
300
416
|
label: this.t().uiDate
|
|
@@ -314,6 +430,10 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
314
430
|
...ngDevMode ? { debugName: "sheet" } : /* istanbul ignore next */ {},
|
|
315
431
|
transform: booleanAttribute
|
|
316
432
|
});
|
|
433
|
+
this.isTodayButtonShown = input(true, {
|
|
434
|
+
...ngDevMode ? { debugName: "isTodayButtonShown" } : /* istanbul ignore next */ {},
|
|
435
|
+
transform: booleanAttribute
|
|
436
|
+
});
|
|
317
437
|
this.now = input(null, ...ngDevMode ? [{ debugName: "now" }] : /* istanbul ignore next */ []);
|
|
318
438
|
this.picked = output();
|
|
319
439
|
this.closed = output();
|
|
@@ -358,7 +478,7 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
358
478
|
this.shownMonth.set(rtDateAddMonths(this.shownMonth(), delta));
|
|
359
479
|
}
|
|
360
480
|
openMonths() {
|
|
361
|
-
this.year.set(Number(this.shownMonth().slice(0, YEAR_LEN
|
|
481
|
+
this.year.set(Number(this.shownMonth().slice(0, YEAR_LEN)));
|
|
362
482
|
this.view.set("months");
|
|
363
483
|
}
|
|
364
484
|
pageYear(delta) {
|
|
@@ -391,6 +511,9 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
391
511
|
const value = this.#draftValue();
|
|
392
512
|
if (value !== "") this.#emit(value);
|
|
393
513
|
}
|
|
514
|
+
reset() {
|
|
515
|
+
this.#emit("");
|
|
516
|
+
}
|
|
394
517
|
#emit(value) {
|
|
395
518
|
this.picked.emit(value);
|
|
396
519
|
this.closed.emit();
|
|
@@ -463,6 +586,13 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
463
586
|
isRequired: false,
|
|
464
587
|
transformFunction: null
|
|
465
588
|
},
|
|
589
|
+
isTodayButtonShown: {
|
|
590
|
+
classPropertyName: "isTodayButtonShown",
|
|
591
|
+
publicName: "isTodayButtonShown",
|
|
592
|
+
isSignal: true,
|
|
593
|
+
isRequired: false,
|
|
594
|
+
transformFunction: null
|
|
595
|
+
},
|
|
466
596
|
now: {
|
|
467
597
|
classPropertyName: "now",
|
|
468
598
|
publicName: "now",
|
|
@@ -490,8 +620,8 @@ var RtDatePanelComponent = class RtDatePanelComponent {
|
|
|
490
620
|
isSignal: true
|
|
491
621
|
}],
|
|
492
622
|
ngImport: i0,
|
|
493
|
-
template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n fullWidth\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n</ng-container>\n",
|
|
494
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-1)}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-
|
|
623
|
+
template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n size=\"md\"\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-hours-title\" aria-hidden=\"true\">{{ t().uiHours }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-minutes-title\" aria-hidden=\"true\">{{ t().uiMinutes }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (hasFooter()) {\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n @if (sheet()) {\n <span rtElem=\"value\" qa-dataid=\"date-panel-value\">{{ draftText() }}</span>\n } @else {\n <button\n rtButton\n rtElem=\"lead\"\n qa-dataid=\"date-panel-now\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-reset\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiReset\"\n [attr.aria-label]=\"t().uiReset\"\n (click)=\"reset()\"></button>\n }\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n }\n</ng-container>\n",
|
|
624
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-2)}.rt-date-panel__time:not(:first-child){align-self:stretch;border-inline-start:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);padding-inline-start:var(--rt-space-4)}.rt-date-panel__tabs{align-self:center}.rt-date-panel__time-group{display:flex;flex-direction:column;gap:var(--rt-space-2)}.rt-date-panel__time-title{padding:var(--rt-space-1) 0;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);text-align:center}.rt-date-panel__lead{margin-inline-end:auto}.rt-date-panel__value{align-self:center;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);margin-inline-end:auto}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__column .rt-date-panel__cell{min-inline-size:calc(var(--rt-size-10) * 1.5);padding-inline:var(--rt-space-4) 0;text-align:start}.rt-date-panel__column .rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary-subtle);color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__time-group{flex:1 1 0}}\n"],
|
|
495
625
|
dependencies: [
|
|
496
626
|
{
|
|
497
627
|
kind: "directive",
|
|
@@ -625,8 +755,8 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
625
755
|
"[class.rt-date-panel--with-time]": "type() !== 'date'",
|
|
626
756
|
"(keydown.escape)": "onEscape()"
|
|
627
757
|
},
|
|
628
|
-
template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n fullWidth\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"secondary\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n </div>\n\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n</ng-container>\n",
|
|
629
|
-
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-1)}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-
|
|
758
|
+
template: "<ng-container rtBlock=\"rt-date-panel\">\n @if (split()) {\n <rt-toggle-button-group\n rtElem=\"tabs\"\n qa-dataid=\"date-panel-tabs\"\n size=\"md\"\n [ariaLabel]=\"t().uiDate + ' | ' + t().uiTime\"\n [options]=\"tabs()\"\n [value]=\"tab()\"\n (valueChange)=\"tab.set($event)\" />\n }\n\n <div rtElem=\"body\">\n @if (showDate()) {\n @if (view() === 'days') {\n <rt-calendar\n rtElem=\"calendar\"\n qa-dataid=\"date-panel-calendar\"\n grid\n titleAction\n headerTitle\n [months]=\"months()\"\n [weekdayLabels]=\"weekdays()\"\n [canPrev]=\"canPrev()\"\n [canNext]=\"canNext()\"\n [activeKey]=\"activeKey()\"\n [prevAriaLabel]=\"t().uiPrevMonth\"\n [nextAriaLabel]=\"t().uiNextMonth\"\n (prevMonth)=\"page(-1)\"\n (nextMonth)=\"page(1)\"\n (dayClick)=\"pickDay($event)\"\n (gridKey)=\"onGridKey($event)\"\n (titleClick)=\"openMonths()\" />\n } @else if (view() === 'months') {\n <div rtElem=\"months\" qa-dataid=\"date-panel-months\" role=\"group\" [attr.aria-label]=\"t().uiChooseMonth\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-year\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYear\"\n [disabled]=\"!canPrevYear()\"\n (clicked)=\"pageYear(-1)\" />\n <button\n rtElem=\"year\"\n qa-dataid=\"date-panel-year\"\n type=\"button\"\n [attr.aria-label]=\"t().uiChooseYear\"\n (click)=\"openYears()\">\n {{ year() }}\n </button>\n <rt-icon-button\n qa-dataid=\"date-panel-next-year\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYear\"\n [disabled]=\"!canNextYear()\"\n (clicked)=\"pageYear(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of monthCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-month\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentMonth() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === shownMonth()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMonth(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n } @else {\n <div rtElem=\"months\" qa-dataid=\"date-panel-years\" role=\"group\" [attr.aria-label]=\"t().uiChooseYear\">\n <div rtElem=\"months-header\">\n <rt-icon-button\n qa-dataid=\"date-panel-prev-years\"\n icon=\"chevron-left\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiPrevYears\"\n [disabled]=\"!canPrevYears()\"\n (clicked)=\"pageYears(-1)\" />\n <span rtElem=\"span\" qa-dataid=\"date-panel-span\">{{ yearSpan() }}</span>\n <rt-icon-button\n qa-dataid=\"date-panel-next-years\"\n icon=\"chevron-right\"\n variant=\"ghost\"\n iconColor=\"muted\"\n radius=\"full\"\n [ariaLabel]=\"t().uiNextYears\"\n [disabled]=\"!canNextYears()\"\n (clicked)=\"pageYears(1)\" />\n </div>\n <div rtElem=\"month-grid\">\n @for (cell of yearCells(); track cell.key) {\n <button\n rtElem=\"cell\"\n qa-dataid=\"date-panel-year-cell\"\n type=\"button\"\n [attr.data-key]=\"cell.key\"\n [attr.data-current]=\"cell.key === currentYear() ? '' : null\"\n [attr.aria-pressed]=\"cell.key === chosenYear()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickYear(cell)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n }\n }\n\n @if (showTime()) {\n <div rtElem=\"time\" qa-dataid=\"date-panel-time\">\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-hours-title\" aria-hidden=\"true\">{{ t().uiHours }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-hours\" role=\"group\" [attr.aria-label]=\"t().uiHours\">\n @for (cell of columns().hours; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-hour\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftHour()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickHour(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n <div rtElem=\"time-group\">\n <span rtElem=\"time-title\" qa-dataid=\"date-panel-minutes-title\" aria-hidden=\"true\">{{ t().uiMinutes }}</span>\n <div rtElem=\"column\" qa-dataid=\"date-panel-minutes\" role=\"group\" [attr.aria-label]=\"t().uiMinutes\">\n @for (cell of columns().minutes; track cell.value) {\n <button\n #timeCell\n rtElem=\"cell\"\n qa-dataid=\"date-panel-minute\"\n type=\"button\"\n [attr.aria-pressed]=\"cell.value === draftMinute()\"\n [disabled]=\"cell.disabled\"\n (click)=\"pickMinute(cell.value)\">\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n </div>\n }\n </div>\n\n @if (hasFooter()) {\n <div rtElem=\"footer\">\n @switch (type()) {\n @case ('date') {\n <button\n rtButton\n qa-dataid=\"date-panel-today\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiToday\"\n [attr.aria-label]=\"t().uiToday\"\n [disabled]=\"todayOff()\"\n (click)=\"pickToday()\"></button>\n }\n @case ('time') {\n <button\n rtButton\n qa-dataid=\"date-panel-now\"\n theme=\"secondary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-done\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiDone\"\n [attr.aria-label]=\"t().uiDone\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n @default {\n @if (sheet()) {\n <span rtElem=\"value\" qa-dataid=\"date-panel-value\">{{ draftText() }}</span>\n } @else {\n <button\n rtButton\n rtElem=\"lead\"\n qa-dataid=\"date-panel-now\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiNow\"\n [attr.aria-label]=\"t().uiNow\"\n (click)=\"pickNow()\"></button>\n <button\n rtButton\n qa-dataid=\"date-panel-reset\"\n theme=\"primary\"\n appearance=\"text\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiReset\"\n [attr.aria-label]=\"t().uiReset\"\n (click)=\"reset()\"></button>\n }\n <button\n rtButton\n qa-dataid=\"date-panel-apply\"\n size=\"sm\"\n type=\"button\"\n [label]=\"t().uiApply\"\n [attr.aria-label]=\"t().uiApply\"\n [disabled]=\"!canApply()\"\n (click)=\"apply()\"></button>\n }\n }\n </div>\n }\n</ng-container>\n",
|
|
759
|
+
styles: ["@charset \"UTF-8\";@layer rt-kit.components{.rt-date-panel{--rt-date-panel-cell-size: var(--rt-control-height-sm);--rt-date-panel-cell-radius: var(--rt-radius-md);--rt-date-panel-divider-width: var(--rt-border-width-thin);--rt-date-panel-current-ring: inset 0 0 0 var(--rt-border-width-thin) var(--rt-color-action-primary);--rt-date-panel-column-height: calc(var(--rt-date-panel-cell-size) * 7 + var(--rt-space-0-5) * 6);display:flex;flex-direction:column;padding:var(--rt-space-4);gap:var(--rt-space-4)}.rt-date-panel__body{display:flex;align-items:flex-start;gap:var(--rt-space-4)}.rt-date-panel .rt-date-panel__calendar{--rt-calendar-month-count: 1;--rt-calendar-day-justify: center}.rt-date-panel__calendar,.rt-date-panel__months{flex:1 1 auto;min-inline-size:calc(var(--rt-size-10) * 7)}.rt-date-panel__months-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:var(--rt-space-4)}.rt-date-panel__year{padding:var(--rt-space-1) var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__year:hover{background:var(--rt-color-bg-subtle)}.rt-date-panel__year:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__span{color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__month-grid{display:grid;gap:var(--rt-space-1);grid-template-columns:repeat(3,1fr)}.rt-date-panel__month-grid .rt-date-panel__cell{font-weight:var(--rt-font-weight-medium)}.rt-date-panel__month-grid .rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-hover)}.rt-date-panel__month-grid .rt-date-panel__cell[data-current]:not([aria-pressed=true]){color:var(--rt-color-action-primary)}.rt-date-panel__month-grid .rt-date-panel__cell:disabled{color:var(--rt-color-text-disabled);opacity:1}.rt-date-panel__time{display:flex;gap:var(--rt-space-2)}.rt-date-panel__time:not(:first-child){align-self:stretch;border-inline-start:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);padding-inline-start:var(--rt-space-4)}.rt-date-panel__tabs{align-self:center}.rt-date-panel__time-group{display:flex;flex-direction:column;gap:var(--rt-space-2)}.rt-date-panel__time-title{padding:var(--rt-space-1) 0;color:var(--rt-color-text-muted);font-size:var(--rt-text-xs);text-align:center}.rt-date-panel__lead{margin-inline-end:auto}.rt-date-panel__value{align-self:center;color:var(--rt-color-text-muted);font-size:var(--rt-text-sm);margin-inline-end:auto}.rt-date-panel__column{position:relative;display:flex;flex-direction:column;gap:var(--rt-space-0-5);max-block-size:var(--rt-date-panel-column-height);overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}.rt-date-panel__cell{flex:0 0 auto;padding:0 var(--rt-space-2);border:none;border-radius:var(--rt-date-panel-cell-radius);background:none;color:var(--rt-color-text-primary);cursor:pointer;font:inherit;font-size:var(--rt-text-sm);font-variant-numeric:tabular-nums;min-block-size:var(--rt-date-panel-cell-size);min-inline-size:var(--rt-control-height-md)}.rt-date-panel__cell:hover:not(:disabled,[aria-pressed=true]){background:var(--rt-color-bg-subtle)}.rt-date-panel__cell:focus-visible{outline:var(--rt-focus-ring-width) solid var(--rt-focus-ring-color);outline-offset:var(--rt-focus-ring-offset)}.rt-date-panel__cell[data-current]:not([aria-pressed=true]){box-shadow:var(--rt-date-panel-current-ring)}.rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary);color:var(--rt-color-action-on-primary)}.rt-date-panel__cell:disabled{color:var(--rt-color-text-muted);cursor:not-allowed;opacity:.45}.rt-date-panel__column .rt-date-panel__cell{min-inline-size:calc(var(--rt-size-10) * 1.5);padding-inline:var(--rt-space-4) 0;text-align:start}.rt-date-panel__column .rt-date-panel__cell[aria-pressed=true]{background:var(--rt-color-action-primary-subtle);color:var(--rt-color-text-primary);font-weight:var(--rt-font-weight-semibold)}.rt-date-panel__footer{display:flex;justify-content:flex-end;padding-top:var(--rt-space-2);border-top:var(--rt-date-panel-divider-width) solid var(--rt-color-border-subtle);gap:var(--rt-space-2)}.rt-date-panel:not(.rt-date-panel--with-time) .rt-date-panel__footer{justify-content:center}.rt-date-panel--sheet{--rt-date-panel-cell-size: calc(var(--rt-size-10) + var(--rt-size-1));padding-inline:var(--rt-space-5)}.rt-date-panel--sheet .rt-date-panel__calendar{--rt-calendar-day-size: var(--rt-date-panel-cell-size)}.rt-date-panel--sheet .rt-date-panel__body{flex-direction:column;align-items:stretch}.rt-date-panel--sheet .rt-date-panel__calendar,.rt-date-panel--sheet .rt-date-panel__months{min-inline-size:0}.rt-date-panel--sheet .rt-date-panel__time{justify-content:center}.rt-date-panel--sheet .rt-date-panel__time-group{flex:1 1 0}}\n"]
|
|
630
760
|
}]
|
|
631
761
|
}],
|
|
632
762
|
ctorParameters: () => [],
|
|
@@ -683,6 +813,14 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
683
813
|
required: false
|
|
684
814
|
}]
|
|
685
815
|
}],
|
|
816
|
+
isTodayButtonShown: [{
|
|
817
|
+
type: i0.Input,
|
|
818
|
+
args: [{
|
|
819
|
+
isSignal: true,
|
|
820
|
+
alias: "isTodayButtonShown",
|
|
821
|
+
required: false
|
|
822
|
+
}]
|
|
823
|
+
}],
|
|
686
824
|
now: [{
|
|
687
825
|
type: i0.Input,
|
|
688
826
|
args: [{
|
|
@@ -701,90 +839,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
701
839
|
}]
|
|
702
840
|
}
|
|
703
841
|
});
|
|
704
|
-
const SAMPLE_DAY = new Date(2026, 0, 31);
|
|
705
|
-
const DEFAULT_LAYOUT = {
|
|
706
|
-
order: [
|
|
707
|
-
"day",
|
|
708
|
-
"month",
|
|
709
|
-
"year"
|
|
710
|
-
],
|
|
711
|
-
separator: "."
|
|
712
|
-
};
|
|
713
|
-
const YEAR_LEN = 4;
|
|
714
|
-
const PART_MAX_LEN = 2;
|
|
715
|
-
const DAY_GROUPS = 3;
|
|
716
|
-
const TIME_GROUPS = 2;
|
|
717
|
-
const TEXT_RE = /^[\d\s.,/:\-T]+$/;
|
|
718
|
-
function isDatePart(type) {
|
|
719
|
-
return type === "day" || type === "month" || type === "year";
|
|
720
|
-
}
|
|
721
|
-
function dayText(day, layout) {
|
|
722
|
-
const [year, month, date] = day.split("-");
|
|
723
|
-
const parts = {
|
|
724
|
-
day: date,
|
|
725
|
-
month,
|
|
726
|
-
year
|
|
727
|
-
};
|
|
728
|
-
return layout.order.map((part) => parts[part]).join(layout.separator);
|
|
729
|
-
}
|
|
730
|
-
function readDay(groups, layout) {
|
|
731
|
-
const parts = {};
|
|
732
|
-
layout.order.forEach((part, index) => {
|
|
733
|
-
parts[part] = groups[index];
|
|
734
|
-
});
|
|
735
|
-
const { day, month, year } = parts;
|
|
736
|
-
if (day === void 0 || month === void 0 || year?.length !== YEAR_LEN) return null;
|
|
737
|
-
if (day.length > PART_MAX_LEN || month.length > PART_MAX_LEN) return null;
|
|
738
|
-
return `${year}-${month.padStart(PART_MAX_LEN, "0")}-${day.padStart(PART_MAX_LEN, "0")}`;
|
|
739
|
-
}
|
|
740
|
-
function readTime(groups) {
|
|
741
|
-
if (groups.length !== TIME_GROUPS) return null;
|
|
742
|
-
const [hour, minute] = groups;
|
|
743
|
-
if (minute.length !== PART_MAX_LEN || hour.length > PART_MAX_LEN) return null;
|
|
744
|
-
return `${hour.padStart(PART_MAX_LEN, "0")}:${minute}`;
|
|
745
|
-
}
|
|
746
|
-
function readGroups(groups, type, layout) {
|
|
747
|
-
if (type === "time") return readTime(groups);
|
|
748
|
-
if (type === "date") return groups.length === DAY_GROUPS ? readDay(groups, layout) : null;
|
|
749
|
-
if (groups.length !== 5) return null;
|
|
750
|
-
const day = readDay(groups.slice(0, DAY_GROUPS), layout);
|
|
751
|
-
const time = readTime(groups.slice(DAY_GROUPS));
|
|
752
|
-
return day === null || time === null ? null : `${day}T${time}`;
|
|
753
|
-
}
|
|
754
|
-
function rtDateLayout(locale) {
|
|
755
|
-
const parts = new Intl.DateTimeFormat(locale, {
|
|
756
|
-
day: "2-digit",
|
|
757
|
-
month: "2-digit",
|
|
758
|
-
year: "numeric"
|
|
759
|
-
}).formatToParts(SAMPLE_DAY);
|
|
760
|
-
const order = parts.map((part) => part.type).filter((type) => isDatePart(type));
|
|
761
|
-
const separator = parts.find((part) => part.type === "literal")?.value.trim() ?? "";
|
|
762
|
-
if (order.length !== DAY_GROUPS || separator === "") return DEFAULT_LAYOUT;
|
|
763
|
-
return {
|
|
764
|
-
order,
|
|
765
|
-
separator
|
|
766
|
-
};
|
|
767
|
-
}
|
|
768
|
-
function rtDateText(value, type, layout) {
|
|
769
|
-
if (type === "time" || rtDateRead(value, type) === null) return value;
|
|
770
|
-
if (type === "date") return dayText(value, layout);
|
|
771
|
-
const [day, time] = value.split("T");
|
|
772
|
-
return `${dayText(day, layout)} ${time}`;
|
|
773
|
-
}
|
|
774
|
-
function rtDateShape(type, layout, letters) {
|
|
775
|
-
const time = `${letters.hour}:${letters.minute}`;
|
|
776
|
-
if (type === "time") return time;
|
|
777
|
-
const day = layout.order.map((part) => letters[part]).join(layout.separator);
|
|
778
|
-
return type === "date" ? day : `${day} ${time}`;
|
|
779
|
-
}
|
|
780
|
-
function rtDateParse(text, type, layout) {
|
|
781
|
-
const iso = rtDateRead(text, type);
|
|
782
|
-
if (iso !== null) return iso;
|
|
783
|
-
const value = text.trim();
|
|
784
|
-
if (!TEXT_RE.test(value)) return null;
|
|
785
|
-
const candidate = readGroups(value.match(/\d+/g) ?? [], type, layout);
|
|
786
|
-
return candidate === null ? null : rtDateRead(candidate, type);
|
|
787
|
-
}
|
|
788
842
|
const BEM_BLOCK = "rt-date-picker";
|
|
789
843
|
var RtDatePickerComponent = class RtDatePickerComponent extends RtFormControlBase {
|
|
790
844
|
constructor() {
|
|
@@ -1005,6 +1059,7 @@ var RtDatePickerComponent = class RtDatePickerComponent extends RtFormControlBas
|
|
|
1005
1059
|
"max",
|
|
1006
1060
|
"minuteStep",
|
|
1007
1061
|
"sheet",
|
|
1062
|
+
"isTodayButtonShown",
|
|
1008
1063
|
"now"
|
|
1009
1064
|
],
|
|
1010
1065
|
outputs: ["picked", "closed"]
|
|
@@ -1173,6 +1228,6 @@ i0.ɵɵngDeclareClassMetadata({
|
|
|
1173
1228
|
}]
|
|
1174
1229
|
}
|
|
1175
1230
|
});
|
|
1176
|
-
export { RT_DATE_YEAR_SPAN, RtDatePickerComponent, rtDateAddMonths, rtDateCanPage, rtDateCanPageYears, rtDateFirstDay, rtDateGridKey, rtDateInBounds, rtDateLayout, rtDateMonth, rtDateMonths, rtDateNow, rtDateParse, rtDateRead, rtDateShape, rtDateSplit, rtDateText, rtDateTime, rtDateTimeColumns, rtDateWeekdays, rtDateWrite, rtDateYearSpanStart, rtDateYears };
|
|
1231
|
+
export { RT_DATE_YEAR_SPAN, RtDatePanelComponent, RtDatePickerComponent, rtDateAddMonths, rtDateCanPage, rtDateCanPageYears, rtDateFirstDay, rtDateGridKey, rtDateInBounds, rtDateLayout, rtDateMonth, rtDateMonths, rtDateNow, rtDatePanelMonth, rtDateParse, rtDateRead, rtDateShape, rtDateSplit, rtDateText, rtDateTime, rtDateTimeColumns, rtDateWeekdays, rtDateWrite, rtDateYearSpanStart, rtDateYears };
|
|
1177
1232
|
|
|
1178
1233
|
//# sourceMappingURL=rt-tools-ui-kit-v2-date-picker.mjs.map
|