@raqm/ui 0.0.0-stage → 0.1.1
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/CHANGELOG.md +22 -0
- package/LICENSE +21 -0
- package/NOTICE.md +28 -0
- package/README.md +126 -3
- package/combobox/README.md +17 -0
- package/fesm2022/raqm-ui-accordion.mjs +414 -0
- package/fesm2022/raqm-ui-accordion.mjs.map +1 -0
- package/fesm2022/raqm-ui-alert-dialog.mjs +457 -0
- package/fesm2022/raqm-ui-alert-dialog.mjs.map +1 -0
- package/fesm2022/raqm-ui-alert.mjs +195 -0
- package/fesm2022/raqm-ui-alert.mjs.map +1 -0
- package/fesm2022/raqm-ui-aspect-ratio.mjs +66 -0
- package/fesm2022/raqm-ui-aspect-ratio.mjs.map +1 -0
- package/fesm2022/raqm-ui-attachment.mjs +435 -0
- package/fesm2022/raqm-ui-attachment.mjs.map +1 -0
- package/fesm2022/raqm-ui-avatar.mjs +337 -0
- package/fesm2022/raqm-ui-avatar.mjs.map +1 -0
- package/fesm2022/raqm-ui-badge.mjs +68 -0
- package/fesm2022/raqm-ui-badge.mjs.map +1 -0
- package/fesm2022/raqm-ui-breadcrumb.mjs +309 -0
- package/fesm2022/raqm-ui-breadcrumb.mjs.map +1 -0
- package/fesm2022/raqm-ui-button-group.mjs +138 -0
- package/fesm2022/raqm-ui-button-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-button.mjs +295 -0
- package/fesm2022/raqm-ui-button.mjs.map +1 -0
- package/fesm2022/raqm-ui-calendar.mjs +1394 -0
- package/fesm2022/raqm-ui-calendar.mjs.map +1 -0
- package/fesm2022/raqm-ui-card.mjs +331 -0
- package/fesm2022/raqm-ui-card.mjs.map +1 -0
- package/fesm2022/raqm-ui-carousel.mjs +410 -0
- package/fesm2022/raqm-ui-carousel.mjs.map +1 -0
- package/fesm2022/raqm-ui-checkbox.mjs +86 -0
- package/fesm2022/raqm-ui-checkbox.mjs.map +1 -0
- package/fesm2022/raqm-ui-collapsible.mjs +266 -0
- package/fesm2022/raqm-ui-collapsible.mjs.map +1 -0
- package/fesm2022/raqm-ui-combobox.mjs +1584 -0
- package/fesm2022/raqm-ui-combobox.mjs.map +1 -0
- package/fesm2022/raqm-ui-command.mjs +1210 -0
- package/fesm2022/raqm-ui-command.mjs.map +1 -0
- package/fesm2022/raqm-ui-context-menu.mjs +723 -0
- package/fesm2022/raqm-ui-context-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-dialog.mjs +1214 -0
- package/fesm2022/raqm-ui-dialog.mjs.map +1 -0
- package/fesm2022/raqm-ui-drawer.mjs +687 -0
- package/fesm2022/raqm-ui-drawer.mjs.map +1 -0
- package/fesm2022/raqm-ui-dropdown-menu.mjs +1168 -0
- package/fesm2022/raqm-ui-dropdown-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-empty.mjs +272 -0
- package/fesm2022/raqm-ui-empty.mjs.map +1 -0
- package/fesm2022/raqm-ui-field.mjs +517 -0
- package/fesm2022/raqm-ui-field.mjs.map +1 -0
- package/fesm2022/raqm-ui-hover-card.mjs +828 -0
- package/fesm2022/raqm-ui-hover-card.mjs.map +1 -0
- package/fesm2022/raqm-ui-input-group.mjs +270 -0
- package/fesm2022/raqm-ui-input-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-input-otp.mjs +788 -0
- package/fesm2022/raqm-ui-input-otp.mjs.map +1 -0
- package/fesm2022/raqm-ui-input.mjs +73 -0
- package/fesm2022/raqm-ui-input.mjs.map +1 -0
- package/fesm2022/raqm-ui-item.mjs +495 -0
- package/fesm2022/raqm-ui-item.mjs.map +1 -0
- package/fesm2022/raqm-ui-kbd.mjs +80 -0
- package/fesm2022/raqm-ui-kbd.mjs.map +1 -0
- package/fesm2022/raqm-ui-label.mjs +44 -0
- package/fesm2022/raqm-ui-label.mjs.map +1 -0
- package/fesm2022/raqm-ui-menubar.mjs +536 -0
- package/fesm2022/raqm-ui-menubar.mjs.map +1 -0
- package/fesm2022/raqm-ui-native-select.mjs +131 -0
- package/fesm2022/raqm-ui-native-select.mjs.map +1 -0
- package/fesm2022/raqm-ui-navigation-menu.mjs +1399 -0
- package/fesm2022/raqm-ui-navigation-menu.mjs.map +1 -0
- package/fesm2022/raqm-ui-overlay-internal.mjs +185 -0
- package/fesm2022/raqm-ui-overlay-internal.mjs.map +1 -0
- package/fesm2022/raqm-ui-pagination.mjs +440 -0
- package/fesm2022/raqm-ui-pagination.mjs.map +1 -0
- package/fesm2022/raqm-ui-popover.mjs +1495 -0
- package/fesm2022/raqm-ui-popover.mjs.map +1 -0
- package/fesm2022/raqm-ui-progress.mjs +369 -0
- package/fesm2022/raqm-ui-progress.mjs.map +1 -0
- package/fesm2022/raqm-ui-questionnaire.mjs +1005 -0
- package/fesm2022/raqm-ui-questionnaire.mjs.map +1 -0
- package/fesm2022/raqm-ui-radio-group.mjs +151 -0
- package/fesm2022/raqm-ui-radio-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-resizable.mjs +439 -0
- package/fesm2022/raqm-ui-resizable.mjs.map +1 -0
- package/fesm2022/raqm-ui-scroll-area.mjs +510 -0
- package/fesm2022/raqm-ui-scroll-area.mjs.map +1 -0
- package/fesm2022/raqm-ui-select.mjs +1073 -0
- package/fesm2022/raqm-ui-select.mjs.map +1 -0
- package/fesm2022/raqm-ui-separator.mjs +103 -0
- package/fesm2022/raqm-ui-separator.mjs.map +1 -0
- package/fesm2022/raqm-ui-sheet.mjs +411 -0
- package/fesm2022/raqm-ui-sheet.mjs.map +1 -0
- package/fesm2022/raqm-ui-sidebar.mjs +1784 -0
- package/fesm2022/raqm-ui-sidebar.mjs.map +1 -0
- package/fesm2022/raqm-ui-skeleton.mjs +50 -0
- package/fesm2022/raqm-ui-skeleton.mjs.map +1 -0
- package/fesm2022/raqm-ui-slider.mjs +609 -0
- package/fesm2022/raqm-ui-slider.mjs.map +1 -0
- package/fesm2022/raqm-ui-spinner.mjs +137 -0
- package/fesm2022/raqm-ui-spinner.mjs.map +1 -0
- package/fesm2022/raqm-ui-switch.mjs +109 -0
- package/fesm2022/raqm-ui-switch.mjs.map +1 -0
- package/fesm2022/raqm-ui-table.mjs +271 -0
- package/fesm2022/raqm-ui-table.mjs.map +1 -0
- package/fesm2022/raqm-ui-tabs.mjs +536 -0
- package/fesm2022/raqm-ui-tabs.mjs.map +1 -0
- package/fesm2022/raqm-ui-textarea.mjs +37 -0
- package/fesm2022/raqm-ui-textarea.mjs.map +1 -0
- package/fesm2022/raqm-ui-toast.mjs +918 -0
- package/fesm2022/raqm-ui-toast.mjs.map +1 -0
- package/fesm2022/raqm-ui-toggle-group.mjs +462 -0
- package/fesm2022/raqm-ui-toggle-group.mjs.map +1 -0
- package/fesm2022/raqm-ui-toggle.mjs +158 -0
- package/fesm2022/raqm-ui-toggle.mjs.map +1 -0
- package/fesm2022/raqm-ui-tooltip.mjs +1226 -0
- package/fesm2022/raqm-ui-tooltip.mjs.map +1 -0
- package/fesm2022/raqm-ui.mjs +50 -0
- package/input-otp/README.md +12 -0
- package/package.json +275 -3
- package/styles/theme.css +4324 -0
- package/types/raqm-ui-accordion.d.ts +124 -0
- package/types/raqm-ui-alert-dialog.d.ts +81 -0
- package/types/raqm-ui-alert.d.ts +29 -0
- package/types/raqm-ui-aspect-ratio.d.ts +13 -0
- package/types/raqm-ui-attachment.d.ts +72 -0
- package/types/raqm-ui-avatar.d.ts +67 -0
- package/types/raqm-ui-badge.d.ts +20 -0
- package/types/raqm-ui-breadcrumb.d.ts +35 -0
- package/types/raqm-ui-button-group.d.ts +27 -0
- package/types/raqm-ui-button.d.ts +80 -0
- package/types/raqm-ui-calendar.d.ts +359 -0
- package/types/raqm-ui-card.d.ts +34 -0
- package/types/raqm-ui-carousel.d.ts +81 -0
- package/types/raqm-ui-checkbox.d.ts +24 -0
- package/types/raqm-ui-collapsible.d.ts +72 -0
- package/types/raqm-ui-combobox.d.ts +405 -0
- package/types/raqm-ui-command.d.ts +256 -0
- package/types/raqm-ui-context-menu.d.ts +196 -0
- package/types/raqm-ui-dialog.d.ts +232 -0
- package/types/raqm-ui-drawer.d.ts +121 -0
- package/types/raqm-ui-dropdown-menu.d.ts +319 -0
- package/types/raqm-ui-empty.d.ts +35 -0
- package/types/raqm-ui-field.d.ts +88 -0
- package/types/raqm-ui-hover-card.d.ts +139 -0
- package/types/raqm-ui-input-group.d.ts +45 -0
- package/types/raqm-ui-input-otp.d.ts +197 -0
- package/types/raqm-ui-input.d.ts +16 -0
- package/types/raqm-ui-item.d.ts +71 -0
- package/types/raqm-ui-kbd.d.ts +12 -0
- package/types/raqm-ui-label.d.ts +6 -0
- package/types/raqm-ui-menubar.d.ts +159 -0
- package/types/raqm-ui-native-select.d.ts +23 -0
- package/types/raqm-ui-navigation-menu.d.ts +230 -0
- package/types/raqm-ui-overlay-internal.d.ts +5 -0
- package/types/raqm-ui-pagination.d.ts +84 -0
- package/types/raqm-ui-popover.d.ts +235 -0
- package/types/raqm-ui-progress.d.ts +79 -0
- package/types/raqm-ui-questionnaire.d.ts +217 -0
- package/types/raqm-ui-radio-group.d.ts +48 -0
- package/types/raqm-ui-resizable.d.ts +98 -0
- package/types/raqm-ui-scroll-area.d.ts +132 -0
- package/types/raqm-ui-select.d.ts +205 -0
- package/types/raqm-ui-separator.d.ts +21 -0
- package/types/raqm-ui-sheet.d.ts +79 -0
- package/types/raqm-ui-sidebar.d.ts +285 -0
- package/types/raqm-ui-skeleton.d.ts +6 -0
- package/types/raqm-ui-slider.d.ts +129 -0
- package/types/raqm-ui-spinner.d.ts +32 -0
- package/types/raqm-ui-switch.d.ts +32 -0
- package/types/raqm-ui-table.d.ts +36 -0
- package/types/raqm-ui-tabs.d.ts +154 -0
- package/types/raqm-ui-textarea.d.ts +6 -0
- package/types/raqm-ui-toast.d.ts +190 -0
- package/types/raqm-ui-toggle-group.d.ts +167 -0
- package/types/raqm-ui-toggle.d.ts +42 -0
- package/types/raqm-ui-tooltip.d.ts +207 -0
- package/types/raqm-ui.d.ts +50 -0
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, inject, input, model } from "@angular/core";
|
|
3
|
+
var RaqmToggle = class RaqmToggle {
|
|
4
|
+
host = inject(ElementRef);
|
|
5
|
+
appearance = input("default", {
|
|
6
|
+
...ngDevMode ? { debugName: "appearance" } : /* istanbul ignore next */ {},
|
|
7
|
+
alias: "raqm-toggle",
|
|
8
|
+
transform: (value) => value === "outline" ? "outline" : "default"
|
|
9
|
+
});
|
|
10
|
+
small = input(false, {
|
|
11
|
+
...ngDevMode ? { debugName: "small" } : /* istanbul ignore next */ {},
|
|
12
|
+
transform: booleanAttribute
|
|
13
|
+
});
|
|
14
|
+
large = input(false, {
|
|
15
|
+
...ngDevMode ? { debugName: "large" } : /* istanbul ignore next */ {},
|
|
16
|
+
transform: booleanAttribute
|
|
17
|
+
});
|
|
18
|
+
activeSize = computed(() => {
|
|
19
|
+
const small = this.small();
|
|
20
|
+
const large = this.large();
|
|
21
|
+
if (small && large) throw new Error("raqm-toggle: use either small or large, not both.");
|
|
22
|
+
return large ? "large" : small ? "small" : "default";
|
|
23
|
+
}, ...ngDevMode ? [{ debugName: "activeSize" }] : /* istanbul ignore next */ []);
|
|
24
|
+
pressed = model(false, ...ngDevMode ? [{ debugName: "pressed" }] : /* istanbul ignore next */ []);
|
|
25
|
+
constructor() {
|
|
26
|
+
const element = this.host.nativeElement;
|
|
27
|
+
if (!element.hasAttribute("type")) element.setAttribute("type", "button");
|
|
28
|
+
}
|
|
29
|
+
onToggleClick() {
|
|
30
|
+
if (this.host.nativeElement.disabled) return;
|
|
31
|
+
this.pressed.update((value) => !value);
|
|
32
|
+
}
|
|
33
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
34
|
+
minVersion: "12.0.0",
|
|
35
|
+
version: "22.2.2",
|
|
36
|
+
ngImport: i0,
|
|
37
|
+
type: RaqmToggle,
|
|
38
|
+
deps: [],
|
|
39
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
40
|
+
});
|
|
41
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
42
|
+
minVersion: "17.1.0",
|
|
43
|
+
version: "22.2.2",
|
|
44
|
+
type: RaqmToggle,
|
|
45
|
+
isStandalone: true,
|
|
46
|
+
selector: "button[raqm-toggle]",
|
|
47
|
+
inputs: {
|
|
48
|
+
appearance: {
|
|
49
|
+
classPropertyName: "appearance",
|
|
50
|
+
publicName: "raqm-toggle",
|
|
51
|
+
isSignal: true,
|
|
52
|
+
isRequired: false,
|
|
53
|
+
transformFunction: null
|
|
54
|
+
},
|
|
55
|
+
small: {
|
|
56
|
+
classPropertyName: "small",
|
|
57
|
+
publicName: "small",
|
|
58
|
+
isSignal: true,
|
|
59
|
+
isRequired: false,
|
|
60
|
+
transformFunction: null
|
|
61
|
+
},
|
|
62
|
+
large: {
|
|
63
|
+
classPropertyName: "large",
|
|
64
|
+
publicName: "large",
|
|
65
|
+
isSignal: true,
|
|
66
|
+
isRequired: false,
|
|
67
|
+
transformFunction: null
|
|
68
|
+
},
|
|
69
|
+
pressed: {
|
|
70
|
+
classPropertyName: "pressed",
|
|
71
|
+
publicName: "pressed",
|
|
72
|
+
isSignal: true,
|
|
73
|
+
isRequired: false,
|
|
74
|
+
transformFunction: null
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
outputs: { pressed: "pressedChange" },
|
|
78
|
+
host: {
|
|
79
|
+
listeners: { "click": "onToggleClick()" },
|
|
80
|
+
properties: {
|
|
81
|
+
"attr.data-raqm-variant": "appearance()",
|
|
82
|
+
"attr.data-raqm-small": "activeSize() === \"small\" ? \"\" : null",
|
|
83
|
+
"attr.data-raqm-large": "activeSize() === \"large\" ? \"\" : null",
|
|
84
|
+
"attr.aria-pressed": "pressed() ? \"true\" : \"false\""
|
|
85
|
+
},
|
|
86
|
+
classAttribute: "raqm-toggle"
|
|
87
|
+
},
|
|
88
|
+
ngImport: i0,
|
|
89
|
+
template: "<ng-content />",
|
|
90
|
+
isInline: true,
|
|
91
|
+
styles: [":host{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;-webkit-user-select:none;user-select:none;vertical-align:middle;gap:calc(var(--raqm-spacing) * 1);border-radius:var(--raqm-radius-lg);font-size:var(--raqm-font-size-sm);font-weight:var(--raqm-font-weight-medium);transition-property:color,background-color,border-color,box-shadow;transition-duration:var(--raqm-duration-base);transition-timing-function:var(--raqm-ease-standard);outline:none;border:0;background-color:transparent;block-size:calc(var(--raqm-spacing) * 8);min-inline-size:calc(var(--raqm-spacing) * 8);padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-small]){block-size:calc(var(--raqm-spacing) * 7);min-inline-size:calc(var(--raqm-spacing) * 7);border-radius:min(var(--raqm-radius-md),12px);padding-inline:calc(var(--raqm-spacing) * 2.5);font-size:.8rem}:host([data-raqm-large]){block-size:calc(var(--raqm-spacing) * 9);min-inline-size:calc(var(--raqm-spacing) * 9);padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-variant=outline]){border:1px solid var(--raqm-input);background-color:transparent}:host(:hover){background-color:var(--raqm-muted);color:var(--raqm-foreground)}:host([aria-pressed=true]){background-color:var(--raqm-muted)}:host(:focus-visible){border-color:var(--raqm-ring);box-shadow:0 0 0 var(--raqm-focus-ring-width) var(--raqm-focus-ring-color)}:host([aria-invalid=true]){border-color:var(--raqm-invalid-border);box-shadow:0 0 0 var(--raqm-focus-ring-width) var(--raqm-invalid-ring)}:host(:disabled){pointer-events:none;opacity:var(--raqm-disabled-opacity)}\n"],
|
|
92
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
96
|
+
minVersion: "12.0.0",
|
|
97
|
+
version: "22.2.2",
|
|
98
|
+
ngImport: i0,
|
|
99
|
+
type: RaqmToggle,
|
|
100
|
+
decorators: [{
|
|
101
|
+
type: Component,
|
|
102
|
+
args: [{
|
|
103
|
+
selector: "button[raqm-toggle]",
|
|
104
|
+
template: "<ng-content />",
|
|
105
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
106
|
+
host: {
|
|
107
|
+
class: "raqm-toggle",
|
|
108
|
+
"[attr.data-raqm-variant]": "appearance()",
|
|
109
|
+
"[attr.data-raqm-small]": "activeSize() === \"small\" ? \"\" : null",
|
|
110
|
+
"[attr.data-raqm-large]": "activeSize() === \"large\" ? \"\" : null",
|
|
111
|
+
"[attr.aria-pressed]": "pressed() ? \"true\" : \"false\"",
|
|
112
|
+
"(click)": "onToggleClick()"
|
|
113
|
+
},
|
|
114
|
+
styles: [":host{display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;-webkit-user-select:none;user-select:none;vertical-align:middle;gap:calc(var(--raqm-spacing) * 1);border-radius:var(--raqm-radius-lg);font-size:var(--raqm-font-size-sm);font-weight:var(--raqm-font-weight-medium);transition-property:color,background-color,border-color,box-shadow;transition-duration:var(--raqm-duration-base);transition-timing-function:var(--raqm-ease-standard);outline:none;border:0;background-color:transparent;block-size:calc(var(--raqm-spacing) * 8);min-inline-size:calc(var(--raqm-spacing) * 8);padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-small]){block-size:calc(var(--raqm-spacing) * 7);min-inline-size:calc(var(--raqm-spacing) * 7);border-radius:min(var(--raqm-radius-md),12px);padding-inline:calc(var(--raqm-spacing) * 2.5);font-size:.8rem}:host([data-raqm-large]){block-size:calc(var(--raqm-spacing) * 9);min-inline-size:calc(var(--raqm-spacing) * 9);padding-inline:calc(var(--raqm-spacing) * 2.5)}:host([data-raqm-variant=outline]){border:1px solid var(--raqm-input);background-color:transparent}:host(:hover){background-color:var(--raqm-muted);color:var(--raqm-foreground)}:host([aria-pressed=true]){background-color:var(--raqm-muted)}:host(:focus-visible){border-color:var(--raqm-ring);box-shadow:0 0 0 var(--raqm-focus-ring-width) var(--raqm-focus-ring-color)}:host([aria-invalid=true]){border-color:var(--raqm-invalid-border);box-shadow:0 0 0 var(--raqm-focus-ring-width) var(--raqm-invalid-ring)}:host(:disabled){pointer-events:none;opacity:var(--raqm-disabled-opacity)}\n"]
|
|
115
|
+
}]
|
|
116
|
+
}],
|
|
117
|
+
ctorParameters: () => [],
|
|
118
|
+
propDecorators: {
|
|
119
|
+
appearance: [{
|
|
120
|
+
type: i0.Input,
|
|
121
|
+
args: [{
|
|
122
|
+
isSignal: true,
|
|
123
|
+
alias: "raqm-toggle",
|
|
124
|
+
required: false
|
|
125
|
+
}]
|
|
126
|
+
}],
|
|
127
|
+
small: [{
|
|
128
|
+
type: i0.Input,
|
|
129
|
+
args: [{
|
|
130
|
+
isSignal: true,
|
|
131
|
+
alias: "small",
|
|
132
|
+
required: false
|
|
133
|
+
}]
|
|
134
|
+
}],
|
|
135
|
+
large: [{
|
|
136
|
+
type: i0.Input,
|
|
137
|
+
args: [{
|
|
138
|
+
isSignal: true,
|
|
139
|
+
alias: "large",
|
|
140
|
+
required: false
|
|
141
|
+
}]
|
|
142
|
+
}],
|
|
143
|
+
pressed: [{
|
|
144
|
+
type: i0.Input,
|
|
145
|
+
args: [{
|
|
146
|
+
isSignal: true,
|
|
147
|
+
alias: "pressed",
|
|
148
|
+
required: false
|
|
149
|
+
}]
|
|
150
|
+
}, {
|
|
151
|
+
type: i0.Output,
|
|
152
|
+
args: ["pressedChange"]
|
|
153
|
+
}]
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
export { RaqmToggle };
|
|
157
|
+
|
|
158
|
+
//# sourceMappingURL=raqm-ui-toggle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"raqm-ui-toggle.mjs","names":[],"sources":["../../../projects/ui/toggle/toggle.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n booleanAttribute,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n} from '@angular/core';\r\n\r\n/**\r\n * Native `<button>` toggle with a two-way `pressed` model and a derived `aria-pressed`.\r\n * `small`/`large` are mutually exclusive; the application owns the accessible name.\r\n */\r\n@Component({\r\n selector: 'button[raqm-toggle]',\r\n template: '<ng-content />',\r\n styleUrl: './toggle.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'raqm-toggle',\r\n '[attr.data-raqm-variant]': 'appearance()',\r\n '[attr.data-raqm-small]': 'activeSize() === \"small\" ? \"\" : null',\r\n '[attr.data-raqm-large]': 'activeSize() === \"large\" ? \"\" : null',\r\n // Exposed as a real ARIA state, never a role override.\r\n '[attr.aria-pressed]': 'pressed() ? \"true\" : \"false\"',\r\n '(click)': 'onToggleClick()',\r\n },\r\n})\r\nexport class RaqmToggle {\r\n private readonly host = inject(ElementRef<HTMLButtonElement>);\r\n\r\n // Public appearance marker; bare `raqm-toggle` means the default appearance.\r\n readonly appearance = input<'default' | 'outline'>('default', {\r\n alias: 'raqm-toggle',\r\n transform: (value: unknown): 'default' | 'outline' =>\r\n value === 'outline' ? 'outline' : 'default',\r\n });\r\n\r\n // Public size API: full-word booleans; neither means the default.\r\n readonly small = input(false, { transform: booleanAttribute });\r\n readonly large = input(false, { transform: booleanAttribute });\r\n\r\n /** The resolved size; setting both attributes is rejected. */\r\n protected readonly activeSize = computed<'default' | 'small' | 'large'>(() => {\r\n const small = this.small();\r\n const large = this.large();\r\n if (small && large) {\r\n throw new Error('raqm-toggle: use either small or large, not both.');\r\n }\r\n return large ? 'large' : small ? 'small' : 'default';\r\n });\r\n\r\n // Two-way pressed state; the application owns the value.\r\n readonly pressed = model<boolean>(false);\r\n\r\n constructor() {\r\n // `button` is set only when no consumer `type` exists; an explicit native value is preserved.\r\n const element = this.host.nativeElement;\r\n if (!element.hasAttribute('type')) {\r\n element.setAttribute('type', 'button');\r\n }\r\n }\r\n\r\n /** Toggles once per native activation; the guard is defensive because disabled buttons already suppress click. */\r\n protected onToggleClick(): void {\r\n if (this.host.nativeElement.disabled) {\r\n return;\r\n }\r\n this.pressed.update((value) => !value);\r\n }\r\n}\r\n"],"mappings":";;AA8BA,IAAa,aAAb,MAAa,WAAU;CACJ,OAAO,OAAO,UAA6B;CAGnD,aAAa,MAA6B,WAAS;EAAA,GAAA,YAAA,EAAA,WAAA,aAAA,+BAAA,CAAA;EAC1D,OAAO;EACP,YAAY,UACV,UAAU,YAAY,YAAY;CAAS,CAAA;CAItC,QAAQ,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAClD,QAAQ,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,QAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAGxC,aAAa,eAA6C;EAC3E,MAAM,QAAQ,KAAK,MAAK;EACxB,MAAM,QAAQ,KAAK,MAAK;EACxB,IAAI,SAAS,OACX,MAAM,IAAI,MAAM,mDAAmD;EAErE,OAAO,QAAQ,UAAU,QAAQ,UAAU;CAC7C,GAAE,GAAA,YAAA,CAAA,EAAA,WAAA,aAAA,CAAA,+BAAA,CAAA,CAAA;CAGO,UAAU,MAAe,OAAM,GAAA,YAAA,CAAA,EAAA,WAAA,UAAA,CAAA,+BAAA,CAAA,CAAA;CAExC,cAAA;EAEE,MAAM,UAAU,KAAK,KAAK;EAC1B,IAAI,CAAC,QAAQ,aAAa,MAAM,GAC9B,QAAQ,aAAa,QAAQ,QAAQ;CAEzC;CAGU,gBAAa;EACrB,IAAI,KAAK,KAAK,cAAc,UAC1B;EAEF,KAAK,QAAQ,QAAQ,UAAU,CAAC,KAAK;CACvC;CAzCW,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAU,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAV,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAU,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,SAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,SAAA,EAAA,SAAA,gBAAA;EAAA,MAAA;GAAA,WAAA,EAAA,SAAA,kBAAA;GAAA,YAAA;IAAA,0BAAA;IAAA,wBAAA;IAAA,wBAAA;IAAA,qBAAA;GAAA;GAAA,gBAAA;EAAA;EAAA,UAAA;EAAA,UAbX;EAAgB,UAAA;EAAA,QAAA,CAAA,4kDAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAaf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAU,YAAA,CAAA;EAftB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAqB,UACrB;GAAgB,iBAET,wBAAwB;GAAM,MACzC;IACJ,OAAO;IACP,4BAA4B;IAC5B,0BAA0B;IAC1B,0BAA0B;IAE1B,uBAAuB;IACvB,WAAW;GACZ;GAAA,QAAA,CAAA,4kDAAA;EAAA,CAAA"}
|