@nanahoshi/mona-ui 0.3.0 → 0.5.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.
Files changed (35) hide show
  1. package/card/package.json +4 -0
  2. package/collapsible/package.json +4 -0
  3. package/fesm2022/nanahoshi-mona-ui-button.mjs +1 -2
  4. package/fesm2022/nanahoshi-mona-ui-card.mjs +307 -0
  5. package/fesm2022/nanahoshi-mona-ui-collapsible.mjs +304 -0
  6. package/fesm2022/nanahoshi-mona-ui-common.mjs +19 -1
  7. package/fesm2022/nanahoshi-mona-ui-contextmenu.mjs +1 -1
  8. package/fesm2022/nanahoshi-mona-ui-dropdown-button.mjs +1 -1
  9. package/fesm2022/nanahoshi-mona-ui-expansion-panel.mjs +20 -9
  10. package/fesm2022/{nanahoshi-mona-ui-grid-grid-footer-cell.component-B6FBLtrr.mjs → nanahoshi-mona-ui-grid-grid-footer-cell.component-D-JCCvYJ.mjs} +2 -2
  11. package/fesm2022/{nanahoshi-mona-ui-grid-grid-footer-table-cell.directive-OJe4UYuw.mjs → nanahoshi-mona-ui-grid-grid-footer-table-cell.directive-7zwgl7u1.mjs} +2 -2
  12. package/fesm2022/{nanahoshi-mona-ui-grid-grid-list.component-DCd8K6ng.mjs → nanahoshi-mona-ui-grid-grid-list.component-n3eQNIza.mjs} +5 -5
  13. package/fesm2022/{nanahoshi-mona-ui-grid-grid-toggle.component-Dl8Hlkhj.mjs → nanahoshi-mona-ui-grid-grid-toggle.component-BhS7c7rW.mjs} +2 -2
  14. package/fesm2022/{nanahoshi-mona-ui-grid-grid-virtual-list.component-C5FRZlvv.mjs → nanahoshi-mona-ui-grid-grid-virtual-list.component-B4VB3xFw.mjs} +5 -5
  15. package/fesm2022/{nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-BRZUd8cE.mjs → nanahoshi-mona-ui-grid-nanahoshi-mona-ui-grid-A6Cq2a4Q.mjs} +11 -11
  16. package/fesm2022/nanahoshi-mona-ui-grid.mjs +1 -1
  17. package/fesm2022/nanahoshi-mona-ui-menubar.mjs +1 -1
  18. package/fesm2022/nanahoshi-mona-ui-popup-menu.mjs +18 -16
  19. package/fesm2022/nanahoshi-mona-ui-sidebar.mjs +2025 -0
  20. package/fesm2022/nanahoshi-mona-ui-skeleton.mjs +96 -0
  21. package/fesm2022/nanahoshi-mona-ui-split-button.mjs +1 -1
  22. package/fesm2022/nanahoshi-mona-ui-theme.mjs +71 -25
  23. package/fesm2022/nanahoshi-mona-ui-tooltip.mjs +49 -2
  24. package/package.json +17 -1
  25. package/sidebar/package.json +4 -0
  26. package/skeleton/package.json +4 -0
  27. package/types/nanahoshi-mona-ui-card.d.ts +104 -0
  28. package/types/nanahoshi-mona-ui-circular-progress-bar.d.ts +2 -1
  29. package/types/nanahoshi-mona-ui-collapsible.d.ts +92 -0
  30. package/types/nanahoshi-mona-ui-common.d.ts +6 -2
  31. package/types/nanahoshi-mona-ui-expansion-panel.d.ts +11 -3
  32. package/types/nanahoshi-mona-ui-popup-menu.d.ts +6 -4
  33. package/types/nanahoshi-mona-ui-sidebar.d.ts +695 -0
  34. package/types/nanahoshi-mona-ui-skeleton.d.ts +51 -0
  35. package/types/nanahoshi-mona-ui-theme.d.ts +28 -2
@@ -0,0 +1,96 @@
1
+ import * as i0 from '@angular/core';
2
+ import { computed, input, Component } from '@angular/core';
3
+ import { classInputToClass } from '@nanahoshi/mona-ui/common';
4
+ import { twMerge } from 'tailwind-merge';
5
+ import { cva } from 'class-variance-authority';
6
+
7
+ const skeletonBaseThemeVariants = cva(`
8
+ block shrink-0
9
+ bg-accent
10
+ motion-safe:animate-pulse
11
+ `, {
12
+ variants: {
13
+ rounded: {
14
+ small: "rounded-sm",
15
+ medium: "rounded-md",
16
+ large: "rounded-lg",
17
+ full: "rounded-full",
18
+ none: "rounded-none"
19
+ }
20
+ }
21
+ });
22
+
23
+ /**
24
+ * @description
25
+ * A placeholder block standing in for content that has not loaded yet. Size it with `width` and
26
+ * `height`, or with utility classes for anything more involved.
27
+ *
28
+ * It is decorative, so it is hidden from assistive technology. Mark the region it fills with
29
+ * `aria-busy` and describe what is loading there instead.
30
+ */
31
+ class SkeletonComponent {
32
+ constructor() {
33
+ this.baseClass = computed(() => {
34
+ const variantClass = skeletonBaseThemeVariants({ rounded: this.rounded() });
35
+ return twMerge(variantClass, this.userClass());
36
+ }, /* @ts-ignore */
37
+ ...(ngDevMode ? [{ debugName: "baseClass" }] : /* istanbul ignore next */ []));
38
+ this.heightString = computed(() => this.toCssSize(this.height()), /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "heightString" }] : /* istanbul ignore next */ []));
40
+ this.widthString = computed(() => this.toCssSize(this.width()), /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "widthString" }] : /* istanbul ignore next */ []));
42
+ /**
43
+ * @description Height of the placeholder. Numbers are treated as pixels.
44
+ * @default "1rem"
45
+ */
46
+ this.height = input("1rem", /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "height" }] : /* istanbul ignore next */ []));
48
+ /**
49
+ * @description Border-radius preset applied to the placeholder.
50
+ * @default "medium"
51
+ */
52
+ this.rounded = input("medium", /* @ts-ignore */
53
+ ...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
54
+ /**
55
+ * @description Additional CSS classes merged onto the host element via `tailwind-merge`.
56
+ * @default ""
57
+ */
58
+ this.userClass = input("", { ...(ngDevMode ? { debugName: "userClass" } : /* istanbul ignore next */ {}), alias: "class",
59
+ transform: value => classInputToClass(value) });
60
+ /**
61
+ * @description Width of the placeholder. Numbers are treated as pixels.
62
+ * @default "100%"
63
+ */
64
+ this.width = input("100%", /* @ts-ignore */
65
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
66
+ }
67
+ toCssSize(value) {
68
+ return typeof value === "number" ? `${value}px` : value;
69
+ }
70
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
71
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.6", type: SkeletonComponent, isStandalone: true, selector: "mona-skeleton", inputs: { height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "attr.aria-hidden": "'true'", "class": "baseClass()", "style.height": "heightString()", "style.width": "widthString()" } }, ngImport: i0, template: ``, isInline: true }); }
72
+ }
73
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SkeletonComponent, decorators: [{
74
+ type: Component,
75
+ args: [{
76
+ selector: "mona-skeleton",
77
+ template: ``,
78
+ host: {
79
+ "[attr.aria-hidden]": "'true'",
80
+ "[class]": "baseClass()",
81
+ "[style.height]": "heightString()",
82
+ "[style.width]": "widthString()"
83
+ }
84
+ }]
85
+ }], propDecorators: { height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], userClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }] } });
86
+
87
+ /*
88
+ * Public API Surface of @nanahoshi/mona-ui/skeleton
89
+ */
90
+
91
+ /**
92
+ * Generated bundle index. Do not edit.
93
+ */
94
+
95
+ export { SkeletonComponent };
96
+ //# sourceMappingURL=nanahoshi-mona-ui-skeleton.mjs.map
@@ -371,7 +371,7 @@ class SplitButtonComponent {
371
371
  });
372
372
  }
373
373
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SplitButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
374
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: SplitButtonComponent, isStandalone: true, selector: "mona-split-button", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, menuButtonAriaLabel: { classPropertyName: "menuButtonAriaLabel", publicName: "menuButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, popupWidth: { classPropertyName: "popupWidth", publicName: "popupWidth", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick", menuItemClick: "menuItemClick" }, host: { properties: { "class": "classes()" } }, queries: [{ propertyName: "menuItemComponents", predicate: PopupMenuToken, isSignal: true }, { propertyName: "groupTemplate", first: true, predicate: SplitButtonMenuGroupTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "iconTemplate", first: true, predicate: SplitButtonMenuItemIconTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "mainButtonTextTemplate", first: true, predicate: SplitButtonTextTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "menuButtonTemplate", first: true, predicate: SplitButtonMenuButtonTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "shortcutTemplate", first: true, predicate: SplitButtonMenuItemShortcutTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "textTemplate", first: true, predicate: SplitButtonMenuItemTextTemplateDirective, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "menuButtonRef", first: true, predicate: ["menuButton"], descendants: true, isSignal: true }, { propertyName: "popupMenuRef", first: true, predicate: ["popupMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n monaButton\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled()\"\n [look]=\"look()\"\n [size]=\"size()\"\n [rounded]=\"rounded()\"\n class=\"rounded-tr-none rounded-br-none\"\n [attr.aria-label]=\"splitButtonAriaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\"\n [tabindex]=\"disabled() ? -1 : 0\"\n #mainButton>\n @if (mainButtonTextTemplate()) {\n <ng-container [ngTemplateOutlet]=\"mainButtonTextTemplate()\"></ng-container>\n } @else {\n <span>{{ text() }}</span>\n }\n</button>\n<button\n monaButton\n [disabled]=\"disabled()\"\n [iconOnly]=\"true\"\n [look]=\"look()\"\n [size]=\"size()\"\n [rounded]=\"rounded()\"\n class=\"rounded-tl-none rounded-bl-none border-l-0\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"menuId\"\n [attr.aria-label]=\"menuButtonAriaLabel()\"\n [tabindex]=\"disabled() ? -1 : 0\"\n #menuButton>\n @if (menuButtonTemplate()) {\n <ng-container [ngTemplateOutlet]=\"menuButtonTemplate()\"></ng-container>\n } @else {\n <svg lucideChevronDown [size]=\"16\"></svg>\n }\n</button>\n\n<mona-popup-menu\n [anchorConnectionPoint]=\"'bottomleft'\"\n [anchor]=\"mainButton\"\n [items]=\"menuItems()\"\n (menuClick)=\"onMenuItemClick($event)\"\n (open)=\"onMenuOpen()\"\n (close)=\"onMenuClose()\"\n [offset]=\"{ horizontal: 0, vertical: 2 }\"\n [popupConnectionPoint]=\"'topleft'\"\n [rounded]=\"popupMenuRounded()\"\n [size]=\"size()\"\n [target]=\"menuButton\"\n [trigger]=\"'click'\"\n [id]=\"menuId\"\n [minWidth]=\"popupWidth() || undefined\"\n #popupMenu>\n @if (groupTemplate()) {\n <ng-template monaPopupMenuGroupTemplate let-group>\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n </ng-template>\n }\n @if (iconTemplate()) {\n <ng-template monaPopupMenuIconTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"iconTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (shortcutTemplate()) {\n <ng-template monaPopupMenuShortcutTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"shortcutTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (textTemplate()) {\n <ng-template monaPopupMenuTextTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"textTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n</mona-popup-menu>\n", dependencies: [{ kind: "directive", type: ButtonDirective, selector: "button[monaButton]", inputs: ["aria-haspopup", "disabled", "iconOnly", "loading", "look", "rounded", "selected", "size", "tabindex", "toggleable", "class"], outputs: ["disabledChange", "loadingChange", "lookChange", "selectedChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopupMenuComponent, selector: "mona-popup-menu", inputs: ["anchor", "anchorConnectionPoint", "items", "id", "minWidth", "offset", "popupConnectionPoint", "precise", "rounded", "size", "target", "trigger", "width"], outputs: ["close", "menuClick", "navigate", "open"] }, { kind: "directive", type: PopupMenuGroupTemplateDirective, selector: "ng-template[monaPopupMenuGroupTemplate]" }, { kind: "directive", type: PopupMenuIconTemplateDirective, selector: "ng-template[monaPopupMenuIconTemplate]" }, { kind: "directive", type: PopupMenuShortcutTemplateDirective, selector: "ng-template[monaPopupMenuShortcutTemplate]" }, { kind: "directive", type: PopupMenuTextTemplateDirective, selector: "ng-template[monaPopupMenuTextTemplate]" }, { kind: "component", type: LucideChevronDown, selector: "svg[lucideChevronDown]" }] }); }
374
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.6", type: SplitButtonComponent, isStandalone: true, selector: "mona-split-button", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledby: { classPropertyName: "ariaLabelledby", publicName: "aria-labelledby", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, look: { classPropertyName: "look", publicName: "look", isSignal: true, isRequired: false, transformFunction: null }, menuButtonAriaLabel: { classPropertyName: "menuButtonAriaLabel", publicName: "menuButtonAriaLabel", isSignal: true, isRequired: false, transformFunction: null }, popupWidth: { classPropertyName: "popupWidth", publicName: "popupWidth", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, userClass: { classPropertyName: "userClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { buttonClick: "buttonClick", menuItemClick: "menuItemClick" }, host: { properties: { "class": "classes()" } }, queries: [{ propertyName: "menuItemComponents", predicate: PopupMenuToken, isSignal: true }, { propertyName: "groupTemplate", first: true, predicate: SplitButtonMenuGroupTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "iconTemplate", first: true, predicate: SplitButtonMenuItemIconTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "mainButtonTextTemplate", first: true, predicate: SplitButtonTextTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "menuButtonTemplate", first: true, predicate: SplitButtonMenuButtonTemplateDirective, descendants: true, read: TemplateRef, isSignal: true }, { propertyName: "shortcutTemplate", first: true, predicate: SplitButtonMenuItemShortcutTemplateDirective, read: TemplateRef, isSignal: true }, { propertyName: "textTemplate", first: true, predicate: SplitButtonMenuItemTextTemplateDirective, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "menuButtonRef", first: true, predicate: ["menuButton"], descendants: true, isSignal: true }, { propertyName: "popupMenuRef", first: true, predicate: ["popupMenu"], descendants: true, isSignal: true }], ngImport: i0, template: "<button\n monaButton\n (click)=\"buttonClick.emit($event)\"\n [disabled]=\"disabled()\"\n [look]=\"look()\"\n [size]=\"size()\"\n [rounded]=\"rounded()\"\n class=\"rounded-tr-none rounded-br-none\"\n [attr.aria-label]=\"splitButtonAriaLabel() || null\"\n [attr.aria-labelledby]=\"ariaLabelledby() || null\"\n [tabindex]=\"disabled() ? -1 : 0\"\n #mainButton>\n @if (mainButtonTextTemplate()) {\n <ng-container [ngTemplateOutlet]=\"mainButtonTextTemplate()\"></ng-container>\n } @else {\n <span>{{ text() }}</span>\n }\n</button>\n<button\n monaButton\n [disabled]=\"disabled()\"\n [iconOnly]=\"true\"\n [look]=\"look()\"\n [size]=\"size()\"\n [rounded]=\"rounded()\"\n class=\"rounded-tl-none rounded-bl-none border-l-0\"\n [attr.aria-haspopup]=\"'menu'\"\n [attr.aria-expanded]=\"menuOpen()\"\n [attr.aria-controls]=\"menuId\"\n [attr.aria-label]=\"menuButtonAriaLabel()\"\n [tabindex]=\"disabled() ? -1 : 0\"\n #menuButton>\n @if (menuButtonTemplate()) {\n <ng-container [ngTemplateOutlet]=\"menuButtonTemplate()\"></ng-container>\n } @else {\n <svg lucideChevronDown [size]=\"16\"></svg>\n }\n</button>\n\n<mona-popup-menu\n [anchorConnectionPoint]=\"'bottomleft'\"\n [anchor]=\"mainButton\"\n [items]=\"menuItems()\"\n (menuClick)=\"onMenuItemClick($event)\"\n (open)=\"onMenuOpen()\"\n (close)=\"onMenuClose()\"\n [offset]=\"{ horizontal: 0, vertical: 2 }\"\n [popupConnectionPoint]=\"'topleft'\"\n [rounded]=\"popupMenuRounded()\"\n [size]=\"size()\"\n [target]=\"menuButton\"\n [trigger]=\"'click'\"\n [id]=\"menuId\"\n [minWidth]=\"popupWidth() || undefined\"\n #popupMenu>\n @if (groupTemplate()) {\n <ng-template monaPopupMenuGroupTemplate let-group>\n <ng-container\n [ngTemplateOutlet]=\"groupTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: group }\"></ng-container>\n </ng-template>\n }\n @if (iconTemplate()) {\n <ng-template monaPopupMenuIconTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"iconTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (shortcutTemplate()) {\n <ng-template monaPopupMenuShortcutTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"shortcutTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n @if (textTemplate()) {\n <ng-template monaPopupMenuTextTemplate let-item>\n <ng-container\n [ngTemplateOutlet]=\"textTemplate()\"\n [ngTemplateOutletContext]=\"{ $implicit: item }\"></ng-container>\n </ng-template>\n }\n</mona-popup-menu>\n", dependencies: [{ kind: "directive", type: ButtonDirective, selector: "button[monaButton]", inputs: ["aria-haspopup", "disabled", "iconOnly", "loading", "look", "rounded", "selected", "size", "tabindex", "toggleable", "class"], outputs: ["disabledChange", "loadingChange", "lookChange", "selectedChange"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopupMenuComponent, selector: "mona-popup-menu", inputs: ["anchor", "anchorConnectionPoint", "items", "id", "minWidth", "offset", "popupConnectionPoint", "precise", "rounded", "size", "target", "trigger", "width", "class"], outputs: ["close", "menuClick", "navigate", "open"] }, { kind: "directive", type: PopupMenuGroupTemplateDirective, selector: "ng-template[monaPopupMenuGroupTemplate]" }, { kind: "directive", type: PopupMenuIconTemplateDirective, selector: "ng-template[monaPopupMenuIconTemplate]" }, { kind: "directive", type: PopupMenuShortcutTemplateDirective, selector: "ng-template[monaPopupMenuShortcutTemplate]" }, { kind: "directive", type: PopupMenuTextTemplateDirective, selector: "ng-template[monaPopupMenuTextTemplate]" }, { kind: "component", type: LucideChevronDown, selector: "svg[lucideChevronDown]" }] }); }
375
375
  }
376
376
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.6", ngImport: i0, type: SplitButtonComponent, decorators: [{
377
377
  type: Component,
@@ -195,6 +195,52 @@ function clamp(value, minimum, maximum) {
195
195
  return Math.min(Math.max(value, minimum), maximum);
196
196
  }
197
197
 
198
+ function createDefaultThemeEffects() {
199
+ return Object.freeze({
200
+ "--mona-effect-control-background-color": "var(--color-input-background)",
201
+ "--mona-effect-control-fallback-background-color": "var(--color-input-background)",
202
+ "--mona-effect-control-background-image": "none",
203
+ "--mona-effect-control-backdrop-filter": "none",
204
+ "--mona-effect-raised-background-color": "var(--color-surface-raised)",
205
+ "--mona-effect-raised-fallback-background-color": "var(--color-surface-raised)",
206
+ "--mona-effect-raised-background-image": "none",
207
+ "--mona-effect-raised-backdrop-filter": "none",
208
+ "--mona-effect-overlay-background-color": "var(--color-surface-overlay)",
209
+ "--mona-effect-overlay-fallback-background-color": "var(--color-surface-overlay)",
210
+ "--mona-effect-overlay-background-image": "none",
211
+ "--mona-effect-overlay-backdrop-filter": "none"
212
+ });
213
+ }
214
+ function createDefaultThemeShape() {
215
+ return Object.freeze({
216
+ "--radius-sm": "0.25rem",
217
+ "--radius-md": "0.375rem",
218
+ "--radius-lg": "0.5rem"
219
+ });
220
+ }
221
+ /**
222
+ * Builds the sidebar's own colour roles. The sidebar is a persistent chrome region rather than page
223
+ * content, so it is given a surface of its own instead of borrowing the page's — which is what lets a
224
+ * theme sit it slightly apart from the content beside it without every consumer restyling it.
225
+ *
226
+ * Only `background` has to be chosen per theme. Hover defaults to the neutral interaction roles, while
227
+ * the sidebar's primary pair follows the selected-state roles. This keeps ordinary navigation quiet,
228
+ * reserves identity colour for the current item, and makes runtime primary-palette changes flow through
229
+ * without rebuilding the sidebar recipe.
230
+ */
231
+ function createSidebarColorRoles(seeds) {
232
+ return Object.freeze({
233
+ "--color-sidebar": seeds.background,
234
+ "--color-sidebar-foreground": seeds.foreground ?? "var(--color-foreground)",
235
+ "--color-sidebar-primary": seeds.primary ?? "var(--color-selected)",
236
+ "--color-sidebar-primary-foreground": seeds.primaryForeground ?? "var(--color-selected-foreground)",
237
+ "--color-sidebar-accent": seeds.accent ?? "var(--color-hover)",
238
+ "--color-sidebar-accent-foreground": seeds.accentForeground ?? "var(--color-foreground)",
239
+ "--color-sidebar-border": seeds.border ?? "var(--color-border)",
240
+ "--color-sidebar-ring": seeds.ring ?? "var(--color-focus-indicator)"
241
+ });
242
+ }
243
+
198
244
  const generatedRoles$2 = generateThemeColorPalette({
199
245
  primary: "#583573",
200
246
  secondary: "#3A3B40",
@@ -209,6 +255,8 @@ const dark$5 = Object.freeze({
209
255
  "--color-surface-muted": "#161718",
210
256
  "--color-surface-raised": "#242528",
211
257
  "--color-surface-overlay": "#161718",
258
+ "--color-card": "var(--color-surface-raised)",
259
+ "--color-card-foreground": "var(--color-foreground)",
212
260
  "--color-foreground": "#D6D6D8",
213
261
  "--color-muted-foreground": "#A8A8AD",
214
262
  "--color-input-background": "#1D1E20",
@@ -269,6 +317,9 @@ const dark$5 = Object.freeze({
269
317
  "--color-destructive-foreground": "var(--color-error-foreground)",
270
318
  "--color-input": "var(--color-border-control)",
271
319
  "--color-disabled": "var(--color-disabled-foreground)",
320
+ // Anna's canvas is already dark, so the sidebar recedes below it rather than lifting off it —
321
+ // the same relationship its scrollbar track and popovers use.
322
+ ...createSidebarColorRoles({ background: "var(--color-surface-muted)" }),
272
323
  "--color-chart-1": "#A174C2",
273
324
  "--color-chart-2": "#6F4A8A",
274
325
  "--color-chart-3": "#4DA3FF",
@@ -293,30 +344,6 @@ const dark$4 = Object.freeze({
293
344
  });
294
345
  const annaThemeShadows = Object.freeze({ dark: dark$4 });
295
346
 
296
- function createDefaultThemeEffects() {
297
- return Object.freeze({
298
- "--mona-effect-control-background-color": "var(--color-input-background)",
299
- "--mona-effect-control-fallback-background-color": "var(--color-input-background)",
300
- "--mona-effect-control-background-image": "none",
301
- "--mona-effect-control-backdrop-filter": "none",
302
- "--mona-effect-raised-background-color": "var(--color-surface-raised)",
303
- "--mona-effect-raised-fallback-background-color": "var(--color-surface-raised)",
304
- "--mona-effect-raised-background-image": "none",
305
- "--mona-effect-raised-backdrop-filter": "none",
306
- "--mona-effect-overlay-background-color": "var(--color-surface-overlay)",
307
- "--mona-effect-overlay-fallback-background-color": "var(--color-surface-overlay)",
308
- "--mona-effect-overlay-background-image": "none",
309
- "--mona-effect-overlay-backdrop-filter": "none"
310
- });
311
- }
312
- function createDefaultThemeShape() {
313
- return Object.freeze({
314
- "--radius-sm": "0.25rem",
315
- "--radius-md": "0.375rem",
316
- "--radius-lg": "0.5rem"
317
- });
318
- }
319
-
320
347
  const motion$1 = Object.freeze({
321
348
  "--mona-motion-fast": "150ms",
322
349
  "--mona-motion-standard": "150ms"
@@ -364,6 +391,8 @@ const light$3 = Object.freeze({
364
391
  "--color-surface-muted": "#f3f4f5",
365
392
  "--color-surface-raised": "#fbfbfb",
366
393
  "--color-surface-overlay": "#f9f9fa",
394
+ "--color-card": "var(--mona-effect-raised-background-color)",
395
+ "--color-card-foreground": "var(--color-foreground)",
367
396
  "--color-foreground": "#252525",
368
397
  "--color-muted-foreground": "#6f7074",
369
398
  "--color-input-background": "#f3f4f5",
@@ -416,6 +445,9 @@ const light$3 = Object.freeze({
416
445
  "--color-destructive-foreground": "var(--color-error-foreground)",
417
446
  "--color-input": "var(--color-border-control)",
418
447
  "--color-disabled": "var(--color-disabled-foreground)",
448
+ // Navigation is part of Luna's raised glass layer. Reduced-transparency mode replaces this with
449
+ // the exact opaque raised fallback during runtime profile resolution.
450
+ ...createSidebarColorRoles({ background: "var(--mona-effect-raised-background-color)" }),
419
451
  "--color-chart-1": "#3f6be2",
420
452
  "--color-chart-2": "#667085",
421
453
  "--color-chart-3": "#4f8a70",
@@ -437,6 +469,8 @@ const dark$3 = Object.freeze({
437
469
  "--color-surface-muted": "#252527",
438
470
  "--color-surface-raised": "#202022",
439
471
  "--color-surface-overlay": "#262628",
472
+ "--color-card": "var(--mona-effect-raised-background-color)",
473
+ "--color-card-foreground": "var(--color-foreground)",
440
474
  "--color-foreground": "#f5f5f6",
441
475
  "--color-muted-foreground": "#a9aaae",
442
476
  "--color-input-background": "#252527",
@@ -489,6 +523,8 @@ const dark$3 = Object.freeze({
489
523
  "--color-destructive-foreground": "var(--color-error-foreground)",
490
524
  "--color-input": "var(--color-border-control)",
491
525
  "--color-disabled": "var(--color-disabled-foreground)",
526
+ // Keep navigation on the same independent raised-glass material as the light profile.
527
+ ...createSidebarColorRoles({ background: "var(--mona-effect-raised-background-color)" }),
492
528
  "--color-chart-1": "#7f9bf0",
493
529
  "--color-chart-2": "#9ba3b2",
494
530
  "--color-chart-3": "#70aa8e",
@@ -686,6 +722,8 @@ const light$1 = Object.freeze({
686
722
  "--color-surface-muted": "oklch(96.7% 0.001 286.375)",
687
723
  "--color-surface-raised": "oklch(100% 0 0)",
688
724
  "--color-surface-overlay": "oklch(100% 0 0)",
725
+ "--color-card": "var(--color-surface-raised)",
726
+ "--color-card-foreground": "var(--color-foreground)",
689
727
  "--color-foreground": "oklch(14.1% 0.005 285.823)",
690
728
  "--color-muted-foreground": "oklch(55.2% 0.016 285.938)",
691
729
  "--color-input-background": "oklch(100% 0 0)",
@@ -725,6 +763,9 @@ const light$1 = Object.freeze({
725
763
  "--color-destructive-foreground": "var(--color-error-foreground)",
726
764
  "--color-input": "var(--color-border-control)",
727
765
  "--color-disabled": "var(--color-disabled-foreground)",
766
+ // Mona's content sits on pure white, so the sidebar takes the canvas tone to read as chrome
767
+ // rather than as another card.
768
+ ...createSidebarColorRoles({ background: "var(--color-canvas)" }),
728
769
  "--color-chart-1": "oklch(20.5% 0.006 285.885)",
729
770
  "--color-chart-2": "oklch(37.1% 0.008 285.805)",
730
771
  "--color-chart-3": "oklch(55.2% 0.010 285.938)",
@@ -746,6 +787,8 @@ const dark$1 = Object.freeze({
746
787
  "--color-surface-muted": "oklch(20.5% 0.006 285.885)",
747
788
  "--color-surface-raised": "oklch(24% 0.006 286.033)",
748
789
  "--color-surface-overlay": "oklch(27.4% 0.006 286.033)",
790
+ "--color-card": "var(--color-surface-raised)",
791
+ "--color-card-foreground": "var(--color-foreground)",
749
792
  "--color-foreground": "oklch(98.5% 0 0)",
750
793
  "--color-muted-foreground": "oklch(70.5% 0.015 286.067)",
751
794
  "--color-input-background": "oklch(20.5% 0.006 285.885)",
@@ -785,6 +828,9 @@ const dark$1 = Object.freeze({
785
828
  "--color-destructive-foreground": "var(--color-error-foreground)",
786
829
  "--color-input": "var(--color-border-control)",
787
830
  "--color-disabled": "var(--color-disabled-foreground)",
831
+ // Dark mode inverts the relationship: the canvas is the darkest tone, so the sidebar lifts off it
832
+ // instead of sinking into it.
833
+ ...createSidebarColorRoles({ background: "var(--color-surface-muted)" }),
788
834
  "--color-chart-1": "oklch(92.2% 0.004 286.320)",
789
835
  "--color-chart-2": "oklch(80.5% 0.008 286.067)",
790
836
  "--color-chart-3": "oklch(70.5% 0.010 286.067)",
@@ -1152,5 +1198,5 @@ function provideThemeColorPalette(registration) {
1152
1198
  * Generated bundle index. Do not edit.
1153
1199
  */
1154
1200
 
1155
- export { THEME_STRATEGY, ThemeService, flattenThemeProfile, generateThemeColorPalette, provideThemeColorPalette, provideThemeFamily, provideThemeOptions, provideThemeOverrides };
1201
+ export { THEME_STRATEGY, ThemeService, createSidebarColorRoles, flattenThemeProfile, generateThemeColorPalette, provideThemeColorPalette, provideThemeFamily, provideThemeOptions, provideThemeOverrides };
1156
1202
  //# sourceMappingURL=nanahoshi-mona-ui-theme.mjs.map
@@ -356,6 +356,7 @@ class TooltipDirective {
356
356
  #injector;
357
357
  #popupService;
358
358
  #renderer;
359
+ #selfTitleWrites;
359
360
  #currentAnchor;
360
361
  #hideTimeoutId;
361
362
  #mutationObserver;
@@ -369,6 +370,7 @@ class TooltipDirective {
369
370
  this.#injector = inject(EnvironmentInjector);
370
371
  this.#popupService = inject(PopupService);
371
372
  this.#renderer = inject(Renderer2);
373
+ this.#selfTitleWrites = new Map();
372
374
  this.#currentAnchor = null;
373
375
  this.#hideTimeoutId = null;
374
376
  this.#mutationObserver = null;
@@ -441,8 +443,13 @@ class TooltipDirective {
441
443
  this.#mutationObserver?.disconnect();
442
444
  this.#mutationObserver = null;
443
445
  if (this.mode() === "content") {
444
- this.#mutationObserver = new MutationObserver(() => this.#refreshSubscription());
445
- this.#mutationObserver.observe(this.#host.nativeElement, { childList: true, subtree: true });
446
+ this.#mutationObserver = new MutationObserver(records => this.#onMutations(records));
447
+ this.#mutationObserver.observe(this.#host.nativeElement, {
448
+ attributeFilter: ["title"],
449
+ attributes: true,
450
+ childList: true,
451
+ subtree: true
452
+ });
446
453
  }
447
454
  }
448
455
  });
@@ -497,6 +504,7 @@ class TooltipDirective {
497
504
  this.#currentAnchor = null;
498
505
  }
499
506
  this.#renderer.removeAttribute(anchor, "aria-describedby");
507
+ this.#markSelfTitleWrite(anchor);
500
508
  this.#renderer.setAttribute(anchor, "title", text);
501
509
  component.destroy();
502
510
  this.hidden.emit();
@@ -542,6 +550,9 @@ class TooltipDirective {
542
550
  }
543
551
  this.#popupRef?.close();
544
552
  const title = targetElement.getAttribute("title") || "";
553
+ if (title) {
554
+ this.#markSelfTitleWrite(targetElement);
555
+ }
545
556
  this.#renderer.removeAttribute(targetElement, "title");
546
557
  if (this.mode() === "host") {
547
558
  this.originalTitle.set(title);
@@ -561,6 +572,42 @@ class TooltipDirective {
561
572
  }
562
573
  }
563
574
  }
575
+ /**
576
+ * The directive strips a `title` while its tooltip is open and restores it on close. Those writes
577
+ * reach the observer too, so each one is booked ahead of time and cancelled out here — otherwise
578
+ * showing a tooltip would tear down and rebuild the very subscriptions driving it.
579
+ */
580
+ #isSelfTitleWrite(element) {
581
+ const pending = this.#selfTitleWrites.get(element) ?? 0;
582
+ if (pending <= 0) {
583
+ return false;
584
+ }
585
+ if (pending === 1) {
586
+ this.#selfTitleWrites.delete(element);
587
+ }
588
+ else {
589
+ this.#selfTitleWrites.set(element, pending - 1);
590
+ }
591
+ return true;
592
+ }
593
+ #markSelfTitleWrite(element) {
594
+ this.#selfTitleWrites.set(element, (this.#selfTitleWrites.get(element) ?? 0) + 1);
595
+ }
596
+ #onMutations(records) {
597
+ // Mapped rather than short circuited, so every self inflicted record is still cancelled out.
598
+ const externalChanges = records.map(record => {
599
+ if (record.type !== "attributes") {
600
+ return true;
601
+ }
602
+ if (record.attributeName !== "title") {
603
+ return false;
604
+ }
605
+ return !this.#isSelfTitleWrite(record.target);
606
+ });
607
+ if (externalChanges.some(Boolean)) {
608
+ this.#refreshSubscription();
609
+ }
610
+ }
564
611
  #refreshSubscription() {
565
612
  if (this.#subscription) {
566
613
  this.#subscription.unsubscribe();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nanahoshi/mona-ui",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "A very light Angular UI framework",
5
5
  "author": "Nanahoshi",
6
6
  "repository": {
@@ -85,6 +85,10 @@
85
85
  "types": "./types/nanahoshi-mona-ui-calendar.d.ts",
86
86
  "default": "./fesm2022/nanahoshi-mona-ui-calendar.mjs"
87
87
  },
88
+ "./card": {
89
+ "types": "./types/nanahoshi-mona-ui-card.d.ts",
90
+ "default": "./fesm2022/nanahoshi-mona-ui-card.mjs"
91
+ },
88
92
  "./check-box": {
89
93
  "types": "./types/nanahoshi-mona-ui-check-box.d.ts",
90
94
  "default": "./fesm2022/nanahoshi-mona-ui-check-box.mjs"
@@ -97,6 +101,10 @@
97
101
  "types": "./types/nanahoshi-mona-ui-circular-progress-bar.d.ts",
98
102
  "default": "./fesm2022/nanahoshi-mona-ui-circular-progress-bar.mjs"
99
103
  },
104
+ "./collapsible": {
105
+ "types": "./types/nanahoshi-mona-ui-collapsible.d.ts",
106
+ "default": "./fesm2022/nanahoshi-mona-ui-collapsible.mjs"
107
+ },
100
108
  "./color-gradient": {
101
109
  "types": "./types/nanahoshi-mona-ui-color-gradient.d.ts",
102
110
  "default": "./fesm2022/nanahoshi-mona-ui-color-gradient.mjs"
@@ -257,6 +265,14 @@
257
265
  "types": "./types/nanahoshi-mona-ui-scroll-view.d.ts",
258
266
  "default": "./fesm2022/nanahoshi-mona-ui-scroll-view.mjs"
259
267
  },
268
+ "./sidebar": {
269
+ "types": "./types/nanahoshi-mona-ui-sidebar.d.ts",
270
+ "default": "./fesm2022/nanahoshi-mona-ui-sidebar.mjs"
271
+ },
272
+ "./skeleton": {
273
+ "types": "./types/nanahoshi-mona-ui-skeleton.d.ts",
274
+ "default": "./fesm2022/nanahoshi-mona-ui-skeleton.mjs"
275
+ },
260
276
  "./slider": {
261
277
  "types": "./types/nanahoshi-mona-ui-slider.d.ts",
262
278
  "default": "./fesm2022/nanahoshi-mona-ui-slider.mjs"
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/nanahoshi-mona-ui-sidebar.mjs",
3
+ "typings": "../types/nanahoshi-mona-ui-sidebar.d.ts"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../fesm2022/nanahoshi-mona-ui-skeleton.mjs",
3
+ "typings": "../types/nanahoshi-mona-ui-skeleton.d.ts"
4
+ }
@@ -0,0 +1,104 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { TemplateRef } from '@angular/core';
3
+ import * as class_variance_authority_types from 'class-variance-authority/types';
4
+ import { VariantInputs } from '@nanahoshi/mona-ui/internal';
5
+ import { VariantProps } from 'class-variance-authority';
6
+ import { ClassInputType } from '@nanahoshi/mona-ui/common';
7
+
8
+ declare class CardContentDirective {
9
+ readonly templateRef: TemplateRef<any>;
10
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardContentDirective, never>;
11
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CardContentDirective, "[monaCardContent]", never, {}, {}, never, never, true, never>;
12
+ }
13
+
14
+ declare const cardBaseThemeVariants: (props?: ({
15
+ rounded?: "small" | "medium" | "large" | "xlarge" | "xxlarge" | "none" | null | undefined;
16
+ hasFooter?: boolean | null | undefined;
17
+ hasHeader?: boolean | null | undefined;
18
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
19
+ type CardBaseVariantProps = VariantProps<typeof cardBaseThemeVariants>;
20
+ type CardBaseVariantInput = VariantInputs<CardBaseVariantProps>;
21
+ type CardVariantProps = CardBaseVariantProps;
22
+ type CardVariantInput = Omit<CardBaseVariantInput, "hasFooter" | "hasHeader">;
23
+
24
+ declare class CardComponent implements CardVariantInput {
25
+ #private;
26
+ protected readonly actionsCellClass: string;
27
+ protected readonly actionTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown>[]>;
28
+ protected readonly baseClass: _angular_core.Signal<string>;
29
+ protected readonly contentDirective: _angular_core.Signal<CardContentDirective | undefined>;
30
+ protected readonly descriptionCellClass: string;
31
+ protected readonly descriptionId: _angular_core.Signal<string | null>;
32
+ protected readonly descriptionTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
33
+ protected readonly footerClass: _angular_core.Signal<string>;
34
+ protected readonly footerTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
35
+ protected readonly headerClass: _angular_core.Signal<string>;
36
+ protected readonly headerTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
37
+ protected readonly titleCellClass: string;
38
+ protected readonly titleId: _angular_core.Signal<string | null>;
39
+ protected readonly titleTemplate: _angular_core.Signal<_angular_core.TemplateRef<unknown> | null>;
40
+ /**
41
+ * @description Controls the border radius applied to the card and its header/footer regions.
42
+ * @default "medium"
43
+ */
44
+ readonly rounded: _angular_core.InputSignal<"small" | "medium" | "large" | "xlarge" | "xxlarge" | "none" | null | undefined>;
45
+ /**
46
+ * @description Additional CSS classes merged onto the host element via `tailwind-merge`.
47
+ * @default ""
48
+ */
49
+ readonly userClass: _angular_core.InputSignal<string>;
50
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardComponent, never>;
51
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardComponent, "mona-card", never, { "rounded": { "alias": "rounded"; "required": false; "isSignal": true; }; "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["contentDirective"], never, true, never>;
52
+ }
53
+
54
+ declare class CardFooterComponent {
55
+ #private;
56
+ private readonly footerTemplate;
57
+ /**
58
+ * @description Additional CSS classes merged onto the rendered footer element via `tailwind-merge`.
59
+ * @default ""
60
+ */
61
+ readonly userClass: _angular_core.InputSignal<ClassInputType>;
62
+ constructor();
63
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardFooterComponent, never>;
64
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardFooterComponent, "mona-card-footer", never, { "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
65
+ }
66
+
67
+ declare class CardHeaderComponent {
68
+ #private;
69
+ private readonly actionDirective;
70
+ private readonly descriptionDirective;
71
+ private readonly headerTemplate;
72
+ private readonly titleDirective;
73
+ /**
74
+ * @description Additional CSS classes merged onto the rendered header element via `tailwind-merge`.
75
+ * @default ""
76
+ */
77
+ readonly userClass: _angular_core.InputSignal<ClassInputType>;
78
+ constructor();
79
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardHeaderComponent, never>;
80
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CardHeaderComponent, "mona-card-header", never, { "userClass": { "alias": "class"; "required": false; "isSignal": true; }; }, {}, ["actionDirective", "descriptionDirective", "titleDirective"], ["*"], true, never>;
81
+ }
82
+
83
+ declare class CardActionDirective {
84
+ readonly templateRef: TemplateRef<any>;
85
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardActionDirective, never>;
86
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CardActionDirective, "[monaCardAction]", never, {}, {}, never, never, true, never>;
87
+ }
88
+
89
+ declare class CardDescriptionDirective {
90
+ readonly id: string;
91
+ readonly templateRef: TemplateRef<any>;
92
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardDescriptionDirective, never>;
93
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CardDescriptionDirective, "[monaCardDescription]", never, {}, {}, never, never, true, never>;
94
+ }
95
+
96
+ declare class CardTitleDirective {
97
+ readonly id: string;
98
+ readonly templateRef: TemplateRef<any>;
99
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CardTitleDirective, never>;
100
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<CardTitleDirective, "[monaCardTitle]", never, {}, {}, never, never, true, never>;
101
+ }
102
+
103
+ export { CardActionDirective, CardComponent, CardContentDirective, CardDescriptionDirective, CardFooterComponent, CardHeaderComponent, CardTitleDirective };
104
+ export type { CardVariantProps };
@@ -22,8 +22,9 @@ declare const circularProgressBarBaseThemeVariants: (props?: ({
22
22
  } & class_variance_authority_types.ClassProp) | undefined) => string;
23
23
  type CircularProgressBarBaseVariantProps = VariantProps<typeof circularProgressBarBaseThemeVariants>;
24
24
  type CircularProgressBarBaseVariantInput = VariantInputs<CircularProgressBarBaseVariantProps>;
25
+ type CircularProgressBarVariantInput = CircularProgressBarBaseVariantInput;
25
26
 
26
- declare class CircularProgressBarComponent implements CircularProgressBarBaseVariantInput {
27
+ declare class CircularProgressBarComponent implements CircularProgressBarVariantInput {
27
28
  protected readonly baseClasses: _angular_core.Signal<string>;
28
29
  protected readonly center: _angular_core.Signal<{
29
30
  x: number;