@hyalo/angular 0.0.0-stage → 0.3.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 +95 -0
- package/LICENSE +21 -0
- package/README.md +45 -2
- package/fesm2022/hyalo-angular-accordion.mjs +230 -0
- package/fesm2022/hyalo-angular-accordion.mjs.map +1 -0
- package/fesm2022/hyalo-angular-alert.mjs +171 -0
- package/fesm2022/hyalo-angular-alert.mjs.map +1 -0
- package/fesm2022/hyalo-angular-aspect-ratio.mjs +64 -0
- package/fesm2022/hyalo-angular-aspect-ratio.mjs.map +1 -0
- package/fesm2022/hyalo-angular-avatar.mjs +169 -0
- package/fesm2022/hyalo-angular-avatar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-badge.mjs +268 -0
- package/fesm2022/hyalo-angular-badge.mjs.map +1 -0
- package/fesm2022/hyalo-angular-bento.mjs +132 -0
- package/fesm2022/hyalo-angular-bento.mjs.map +1 -0
- package/fesm2022/hyalo-angular-blocks.mjs +985 -0
- package/fesm2022/hyalo-angular-blocks.mjs.map +1 -0
- package/fesm2022/hyalo-angular-border-beam.mjs +73 -0
- package/fesm2022/hyalo-angular-border-beam.mjs.map +1 -0
- package/fesm2022/hyalo-angular-breadcrumb.mjs +77 -0
- package/fesm2022/hyalo-angular-breadcrumb.mjs.map +1 -0
- package/fesm2022/hyalo-angular-button-group.mjs +90 -0
- package/fesm2022/hyalo-angular-button-group.mjs.map +1 -0
- package/fesm2022/hyalo-angular-button.mjs +204 -0
- package/fesm2022/hyalo-angular-button.mjs.map +1 -0
- package/fesm2022/hyalo-angular-card.mjs +221 -0
- package/fesm2022/hyalo-angular-card.mjs.map +1 -0
- package/fesm2022/hyalo-angular-carousel.mjs +709 -0
- package/fesm2022/hyalo-angular-carousel.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chapter-nav.mjs +336 -0
- package/fesm2022/hyalo-angular-chapter-nav.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs +5 -0
- package/fesm2022/hyalo-angular-chart-engine-DSJop6He.mjs.map +1 -0
- package/fesm2022/hyalo-angular-chart.mjs +391 -0
- package/fesm2022/hyalo-angular-chart.mjs.map +1 -0
- package/fesm2022/hyalo-angular-choice.mjs +789 -0
- package/fesm2022/hyalo-angular-choice.mjs.map +1 -0
- package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs +40 -0
- package/fesm2022/hyalo-angular-code-block-highlight-B20d5C76.mjs.map +1 -0
- package/fesm2022/hyalo-angular-code-block.mjs +161 -0
- package/fesm2022/hyalo-angular-code-block.mjs.map +1 -0
- package/fesm2022/hyalo-angular-command.mjs +193 -0
- package/fesm2022/hyalo-angular-command.mjs.map +1 -0
- package/fesm2022/hyalo-angular-copy.mjs +138 -0
- package/fesm2022/hyalo-angular-copy.mjs.map +1 -0
- package/fesm2022/hyalo-angular-core.mjs +424 -0
- package/fesm2022/hyalo-angular-core.mjs.map +1 -0
- package/fesm2022/hyalo-angular-description-list.mjs +57 -0
- package/fesm2022/hyalo-angular-description-list.mjs.map +1 -0
- package/fesm2022/hyalo-angular-dialog.mjs +600 -0
- package/fesm2022/hyalo-angular-dialog.mjs.map +1 -0
- package/fesm2022/hyalo-angular-divider.mjs +66 -0
- package/fesm2022/hyalo-angular-divider.mjs.map +1 -0
- package/fesm2022/hyalo-angular-empty-state.mjs +123 -0
- package/fesm2022/hyalo-angular-empty-state.mjs.map +1 -0
- package/fesm2022/hyalo-angular-field.mjs +344 -0
- package/fesm2022/hyalo-angular-field.mjs.map +1 -0
- package/fesm2022/hyalo-angular-filter.mjs +309 -0
- package/fesm2022/hyalo-angular-filter.mjs.map +1 -0
- package/fesm2022/hyalo-angular-hotspot.mjs +225 -0
- package/fesm2022/hyalo-angular-hotspot.mjs.map +1 -0
- package/fesm2022/hyalo-angular-hover-card.mjs +233 -0
- package/fesm2022/hyalo-angular-hover-card.mjs.map +1 -0
- package/fesm2022/hyalo-angular-icon.mjs +385 -0
- package/fesm2022/hyalo-angular-icon.mjs.map +1 -0
- package/fesm2022/hyalo-angular-image-compare.mjs +168 -0
- package/fesm2022/hyalo-angular-image-compare.mjs.map +1 -0
- package/fesm2022/hyalo-angular-interaction.mjs +446 -0
- package/fesm2022/hyalo-angular-interaction.mjs.map +1 -0
- package/fesm2022/hyalo-angular-kbd.mjs +41 -0
- package/fesm2022/hyalo-angular-kbd.mjs.map +1 -0
- package/fesm2022/hyalo-angular-lightbox.mjs +228 -0
- package/fesm2022/hyalo-angular-lightbox.mjs.map +1 -0
- package/fesm2022/hyalo-angular-link.mjs +42 -0
- package/fesm2022/hyalo-angular-link.mjs.map +1 -0
- package/fesm2022/hyalo-angular-list.mjs +131 -0
- package/fesm2022/hyalo-angular-list.mjs.map +1 -0
- package/fesm2022/hyalo-angular-marquee.mjs +197 -0
- package/fesm2022/hyalo-angular-marquee.mjs.map +1 -0
- package/fesm2022/hyalo-angular-menu.mjs +423 -0
- package/fesm2022/hyalo-angular-menu.mjs.map +1 -0
- package/fesm2022/hyalo-angular-mesh.mjs +126 -0
- package/fesm2022/hyalo-angular-mesh.mjs.map +1 -0
- package/fesm2022/hyalo-angular-motion.mjs +620 -0
- package/fesm2022/hyalo-angular-motion.mjs.map +1 -0
- package/fesm2022/hyalo-angular-navbar.mjs +343 -0
- package/fesm2022/hyalo-angular-navbar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-navigation-menu.mjs +222 -0
- package/fesm2022/hyalo-angular-navigation-menu.mjs.map +1 -0
- package/fesm2022/hyalo-angular-number-ticker.mjs +174 -0
- package/fesm2022/hyalo-angular-number-ticker.mjs.map +1 -0
- package/fesm2022/hyalo-angular-overlay.mjs +163 -0
- package/fesm2022/hyalo-angular-overlay.mjs.map +1 -0
- package/fesm2022/hyalo-angular-pagination.mjs +187 -0
- package/fesm2022/hyalo-angular-pagination.mjs.map +1 -0
- package/fesm2022/hyalo-angular-popover-overlay-kit-6wPwnxln.mjs +3 -0
- package/fesm2022/hyalo-angular-popover.mjs +516 -0
- package/fesm2022/hyalo-angular-popover.mjs.map +1 -0
- package/fesm2022/hyalo-angular-progress.mjs +209 -0
- package/fesm2022/hyalo-angular-progress.mjs.map +1 -0
- package/fesm2022/hyalo-angular-progressive-blur.mjs +73 -0
- package/fesm2022/hyalo-angular-progressive-blur.mjs.map +1 -0
- package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs +186 -0
- package/fesm2022/hyalo-angular-refraction-renderer-5ZA-kfsA.mjs.map +1 -0
- package/fesm2022/hyalo-angular-refraction.mjs +178 -0
- package/fesm2022/hyalo-angular-refraction.mjs.map +1 -0
- package/fesm2022/hyalo-angular-scroll-area.mjs +93 -0
- package/fesm2022/hyalo-angular-scroll-area.mjs.map +1 -0
- package/fesm2022/hyalo-angular-scroll-to-top.mjs +127 -0
- package/fesm2022/hyalo-angular-scroll-to-top.mjs.map +1 -0
- package/fesm2022/hyalo-angular-segmented.mjs +223 -0
- package/fesm2022/hyalo-angular-segmented.mjs.map +1 -0
- package/fesm2022/hyalo-angular-select.mjs +561 -0
- package/fesm2022/hyalo-angular-select.mjs.map +1 -0
- package/fesm2022/hyalo-angular-sidebar.mjs +241 -0
- package/fesm2022/hyalo-angular-sidebar.mjs.map +1 -0
- package/fesm2022/hyalo-angular-skeleton.mjs +131 -0
- package/fesm2022/hyalo-angular-skeleton.mjs.map +1 -0
- package/fesm2022/hyalo-angular-sparkline.mjs +110 -0
- package/fesm2022/hyalo-angular-sparkline.mjs.map +1 -0
- package/fesm2022/hyalo-angular-split-text.mjs +126 -0
- package/fesm2022/hyalo-angular-split-text.mjs.map +1 -0
- package/fesm2022/hyalo-angular-stat.mjs +193 -0
- package/fesm2022/hyalo-angular-stat.mjs.map +1 -0
- package/fesm2022/hyalo-angular-stepper.mjs +254 -0
- package/fesm2022/hyalo-angular-stepper.mjs.map +1 -0
- package/fesm2022/hyalo-angular-table.mjs +335 -0
- package/fesm2022/hyalo-angular-table.mjs.map +1 -0
- package/fesm2022/hyalo-angular-tabs.mjs +324 -0
- package/fesm2022/hyalo-angular-tabs.mjs.map +1 -0
- package/fesm2022/hyalo-angular-theme.mjs +94 -0
- package/fesm2022/hyalo-angular-theme.mjs.map +1 -0
- package/fesm2022/hyalo-angular-timeline.mjs +157 -0
- package/fesm2022/hyalo-angular-timeline.mjs.map +1 -0
- package/fesm2022/hyalo-angular-toast.mjs +323 -0
- package/fesm2022/hyalo-angular-toast.mjs.map +1 -0
- package/fesm2022/hyalo-angular.mjs +2 -0
- package/package.json +329 -3
- package/styles/hyalo-core.css +25 -0
- package/styles/hyalo.css +17 -0
- package/styles/overlays/dialog.css +9 -0
- package/styles/overlays/popover.css +9 -0
- package/styles/overlays/select.css +9 -0
- package/styles/overlays/toast.css +8 -0
- package/styles/palettes/aurora.css +47 -0
- package/styles/palettes/ember.css +47 -0
- package/styles/palettes/graphite.css +47 -0
- package/styles/palettes/ocean.css +47 -0
- package/styles/palettes/orchid.css +47 -0
- package/styles/palettes/rose.css +47 -0
- package/styles/parts/card.css +49 -0
- package/styles/parts/dialog.css +116 -0
- package/styles/parts/drawer.css +124 -0
- package/styles/parts/field.css +44 -0
- package/styles/parts/glass.css +139 -0
- package/styles/parts/motion.css +101 -0
- package/styles/parts/navbar.css +55 -0
- package/styles/parts/popover.css +27 -0
- package/styles/parts/presence.css +55 -0
- package/styles/parts/reset.css +42 -0
- package/styles/parts/select.css +46 -0
- package/styles/parts/themes.css +105 -0
- package/styles/parts/toast.css +128 -0
- package/styles/parts/tokens.css +151 -0
- package/styles/parts/typography.css +81 -0
- package/types/hyalo-angular-accordion.d.ts +74 -0
- package/types/hyalo-angular-alert.d.ts +47 -0
- package/types/hyalo-angular-aspect-ratio.d.ts +13 -0
- package/types/hyalo-angular-avatar.d.ts +39 -0
- package/types/hyalo-angular-badge.d.ts +82 -0
- package/types/hyalo-angular-bento.d.ts +25 -0
- package/types/hyalo-angular-blocks.d.ts +272 -0
- package/types/hyalo-angular-border-beam.d.ts +15 -0
- package/types/hyalo-angular-breadcrumb.d.ts +22 -0
- package/types/hyalo-angular-button-group.d.ts +19 -0
- package/types/hyalo-angular-button.d.ts +89 -0
- package/types/hyalo-angular-card.d.ts +61 -0
- package/types/hyalo-angular-carousel.d.ts +147 -0
- package/types/hyalo-angular-chapter-nav.d.ts +79 -0
- package/types/hyalo-angular-chart.d.ts +90 -0
- package/types/hyalo-angular-choice.d.ts +259 -0
- package/types/hyalo-angular-code-block.d.ts +46 -0
- package/types/hyalo-angular-command.d.ts +41 -0
- package/types/hyalo-angular-copy.d.ts +39 -0
- package/types/hyalo-angular-core.d.ts +210 -0
- package/types/hyalo-angular-description-list.d.ts +16 -0
- package/types/hyalo-angular-dialog.d.ts +171 -0
- package/types/hyalo-angular-divider.d.ts +12 -0
- package/types/hyalo-angular-empty-state.d.ts +30 -0
- package/types/hyalo-angular-field.d.ts +141 -0
- package/types/hyalo-angular-filter.d.ts +122 -0
- package/types/hyalo-angular-hotspot.d.ts +70 -0
- package/types/hyalo-angular-hover-card.d.ts +47 -0
- package/types/hyalo-angular-icon.d.ts +122 -0
- package/types/hyalo-angular-image-compare.d.ts +55 -0
- package/types/hyalo-angular-interaction.d.ts +131 -0
- package/types/hyalo-angular-kbd.d.ts +5 -0
- package/types/hyalo-angular-lightbox.d.ts +67 -0
- package/types/hyalo-angular-link.d.ts +5 -0
- package/types/hyalo-angular-list.d.ts +30 -0
- package/types/hyalo-angular-marquee.d.ts +48 -0
- package/types/hyalo-angular-menu.d.ts +105 -0
- package/types/hyalo-angular-mesh.d.ts +36 -0
- package/types/hyalo-angular-motion.d.ts +218 -0
- package/types/hyalo-angular-navbar.d.ts +110 -0
- package/types/hyalo-angular-navigation-menu.d.ts +47 -0
- package/types/hyalo-angular-number-ticker.d.ts +52 -0
- package/types/hyalo-angular-overlay.d.ts +40 -0
- package/types/hyalo-angular-pagination.d.ts +59 -0
- package/types/hyalo-angular-popover.d.ts +152 -0
- package/types/hyalo-angular-progress.d.ts +46 -0
- package/types/hyalo-angular-progressive-blur.d.ts +14 -0
- package/types/hyalo-angular-refraction.d.ts +46 -0
- package/types/hyalo-angular-scroll-area.d.ts +18 -0
- package/types/hyalo-angular-scroll-to-top.d.ts +31 -0
- package/types/hyalo-angular-segmented.d.ts +79 -0
- package/types/hyalo-angular-select.d.ts +176 -0
- package/types/hyalo-angular-sidebar.d.ts +57 -0
- package/types/hyalo-angular-skeleton.d.ts +34 -0
- package/types/hyalo-angular-sparkline.d.ts +19 -0
- package/types/hyalo-angular-split-text.d.ts +24 -0
- package/types/hyalo-angular-stat.d.ts +56 -0
- package/types/hyalo-angular-stepper.d.ts +63 -0
- package/types/hyalo-angular-table.d.ts +125 -0
- package/types/hyalo-angular-tabs.d.ts +102 -0
- package/types/hyalo-angular-theme.d.ts +46 -0
- package/types/hyalo-angular-timeline.d.ts +36 -0
- package/types/hyalo-angular-toast.d.ts +79 -0
- package/types/hyalo-angular.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyalo-angular-blocks.mjs","names":[],"sources":["../../../projects/hyalo/blocks/blocks.ts","../../../projects/hyalo/blocks/hero-block.html","../../../projects/hyalo/blocks/pricing-block.html","../../../projects/hyalo/blocks/feature-block.html","../../../projects/hyalo/blocks/testimonials-block.html","../../../projects/hyalo/blocks/product-block.html","../../../projects/hyalo/blocks/dashboard-block.html","../../../projects/hyalo/blocks/kpi-strip-block.html","../../../projects/hyalo/blocks/activity-block.html","../../../projects/hyalo/blocks/filter-toolbar-block.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\nimport { HyButton } from '@hyalo/angular/button';\nimport { HyCard } from '@hyalo/angular/card';\nimport { HyNumberTicker } from '@hyalo/angular/number-ticker';\nimport { HyStat } from '@hyalo/angular/stat';\nimport { HyFilterBar, type HyFilterField, type HyFilterToken } from '@hyalo/angular/filter';\n\n@Component({\n selector: 'hy-hero-block',\n imports: [HyButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './hero-block.html',\n styleUrl: './hero-block.css',\n})\nexport class HyHeroBlock {\n readonly eyebrow = input('');\n readonly heading = input.required<string>();\n readonly description = input('');\n readonly actionHref = input('');\n readonly actionLabel = input('Get started');\n}\nexport interface HyPricingPlan {\n readonly id: string;\n readonly name: string;\n readonly description: string;\n readonly monthly: number;\n readonly annual: number;\n readonly features: readonly string[];\n readonly href: string;\n readonly featured?: boolean;\n}\n@Component({\n selector: 'hy-pricing-block',\n imports: [HyCard, HyButton, HyNumberTicker],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './pricing-block.html',\n styleUrl: './pricing-block.css',\n})\nexport class HyPricingBlock {\n readonly heading = input('Plans for your next chapter');\n readonly plans = input.required<readonly HyPricingPlan[]>();\n readonly billing = model<'monthly' | 'annual'>('monthly');\n readonly locale = input<string>();\n readonly currencyFormat = input<Intl.NumberFormatOptions>({\n style: 'currency',\n currency: 'USD',\n maximumFractionDigits: 0,\n });\n readonly monthlyLabel = input('Monthly');\n readonly annualLabel = input('Annual');\n readonly billingLabel = input('Billing period');\n readonly actionLabel = input('Choose');\n}\nexport interface HyFeature {\n readonly id: string;\n readonly title: string;\n readonly description: string;\n}\n@Component({\n selector: 'hy-feature-block',\n imports: [HyCard],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './feature-block.html',\n styleUrl: './feature-block.css',\n})\nexport class HyFeatureBlock {\n readonly heading = input('Built for the way you work');\n readonly features = input.required<readonly HyFeature[]>();\n}\nexport interface HyTestimonial {\n readonly id: string;\n readonly quote: string;\n readonly author: string;\n readonly role: string;\n}\n@Component({\n selector: 'hy-testimonials-block',\n imports: [HyCard],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './testimonials-block.html',\n styleUrl: './testimonials-block.css',\n})\nexport class HyTestimonialsBlock {\n readonly heading = input('Trusted by thoughtful teams');\n readonly items = input.required<readonly HyTestimonial[]>();\n}\n@Component({\n selector: 'hy-product-block',\n imports: [HyButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './product-block.html',\n styleUrl: './product-block.css',\n})\nexport class HyProductBlock {\n readonly category = input('');\n readonly heading = input.required<string>();\n readonly description = input('');\n readonly price = input.required<string>();\n readonly actionHref = input.required<string>();\n readonly actionLabel = input('View product');\n}\n@Component({\n selector: 'hy-dashboard-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './dashboard-block.html',\n styleUrl: './dashboard-block.css',\n})\nexport class HyDashboardBlock {}\nexport interface HyKpi {\n readonly id: string;\n readonly label: string;\n readonly value: number;\n readonly trend?: string;\n readonly prefix?: string;\n readonly suffix?: string;\n}\n@Component({\n selector: 'hy-kpi-strip-block',\n imports: [HyStat],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './kpi-strip-block.html',\n styleUrl: './kpi-strip-block.css',\n})\nexport class HyKpiStripBlock {\n readonly items = input.required<readonly HyKpi[]>();\n readonly locale = input<string>();\n}\nexport interface HyActivity {\n readonly id: string;\n readonly heading: string;\n readonly description: string;\n readonly time: string;\n readonly dateTime: string;\n}\n@Component({\n selector: 'hy-activity-block',\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './activity-block.html',\n styleUrl: './activity-block.css',\n})\nexport class HyActivityBlock {\n readonly heading = input('Recent activity');\n readonly items = input.required<readonly HyActivity[]>();\n}\n@Component({\n selector: 'hy-filter-toolbar-block',\n imports: [HyFilterBar],\n changeDetection: ChangeDetectionStrategy.OnPush,\n templateUrl: './filter-toolbar-block.html',\n})\nexport class HyFilterToolbarBlock<C extends HyFilterToken> {\n readonly fields = input.required<readonly HyFilterField<C>[]>();\n readonly clauses = model<readonly C[]>([]);\n readonly label = input('Filter results');\n}\n","<section>\n <div>\n <p class=\"eyebrow\">{{ eyebrow() }}</p>\n <h2>{{ heading() }}</h2>\n <p>{{ description() }}</p>\n <div class=\"actions\">\n @if (actionHref()) {\n <a hyButton [href]=\"actionHref()\">{{ actionLabel() }}</a>\n }\n <ng-content select=\"[hyBlockActions]\" />\n </div>\n </div>\n <div class=\"stage\"><ng-content select=\"[hyBlockMedia]\" /></div>\n</section>\n","<section>\n <h2>{{ heading() }}</h2>\n <div class=\"billing\" role=\"group\" [attr.aria-label]=\"billingLabel()\">\n <button\n type=\"button\"\n [attr.aria-pressed]=\"billing() === 'monthly'\"\n (click)=\"billing.set('monthly')\"\n >\n {{ monthlyLabel() }}</button\n ><button\n type=\"button\"\n [attr.aria-pressed]=\"billing() === 'annual'\"\n (click)=\"billing.set('annual')\"\n >\n {{ annualLabel() }}\n </button>\n </div>\n <div class=\"plans\">\n @for (plan of plans(); track plan.id) {\n <hy-card material=\"tinted\" [class.featured]=\"plan.featured\"\n ><h3>{{ plan.name }}</h3>\n <p>{{ plan.description }}</p>\n <strong\n ><hy-number-ticker\n [value]=\"billing() === 'monthly' ? plan.monthly : plan.annual\"\n [locale]=\"locale()\"\n [format]=\"currencyFormat()\"\n /></strong>\n <p>{{ billing() === 'monthly' ? monthlyLabel() : annualLabel() }}</p>\n <ul>\n @for (feature of plan.features; track feature) {\n <li>{{ feature }}</li>\n }\n </ul>\n <a hyButton [href]=\"plan.href\">{{ actionLabel() }} {{ plan.name }}</a></hy-card\n >\n }\n </div>\n</section>\n","<section>\n <h2>{{ heading() }}</h2>\n <div class=\"grid\">\n @for (feature of features(); track feature.id) {\n <hy-card material=\"tinted\"\n ><h3>{{ feature.title }}</h3>\n <p>{{ feature.description }}</p></hy-card\n >\n }\n <ng-content />\n </div>\n</section>\n","<section>\n <h2>{{ heading() }}</h2>\n <div class=\"wall\">\n @for (item of items(); track item.id) {\n <hy-card material=\"tinted\"\n ><figure>\n <blockquote>{{ item.quote }}</blockquote>\n <figcaption>\n <strong>{{ item.author }}</strong\n ><span>{{ item.role }}</span>\n </figcaption>\n </figure></hy-card\n >\n }\n </div>\n</section>\n","<section>\n <div class=\"media\"><ng-content select=\"[hyBlockMedia]\" /></div>\n <div>\n <p>{{ category() }}</p>\n <h2>{{ heading() }}</h2>\n <p>{{ description() }}</p>\n <strong>{{ price() }}</strong>\n <div class=\"choices\"><ng-content select=\"[hyBlockOptions]\" /></div>\n <a hyButton [href]=\"actionHref()\">{{ actionLabel() }}</a\n ><ng-content />\n </div>\n</section>\n","<div class=\"shell\">\n <aside><ng-content select=\"[hyBlockSidebar]\" /></aside>\n <div class=\"main\">\n <header><ng-content select=\"[hyBlockToolbar]\" /></header>\n <ng-content />\n </div>\n</div>\n","<div class=\"strip\">\n @for (item of items(); track item.id) {\n <hy-stat\n [label]=\"item.label\"\n [value]=\"item.value\"\n [trend]=\"item.trend ?? ''\"\n [prefix]=\"item.prefix ?? ''\"\n [suffix]=\"item.suffix ?? ''\"\n [locale]=\"locale()\"\n />\n }\n</div>\n","<section>\n <h2>{{ heading() }}</h2>\n <ol>\n @for (item of items(); track item.id) {\n <li>\n <div>\n <strong>{{ item.heading }}</strong>\n <p>{{ item.description }}</p>\n </div>\n <time [attr.datetime]=\"item.dateTime\">{{ item.time }}</time>\n </li>\n }\n </ol>\n <ng-content />\n</section>\n","<hy-filter-bar\n [fields]=\"fields()\"\n [clauses]=\"clauses()\"\n (clausesChange)=\"clauses.set($event)\"\n [label]=\"label()\"\n ><ng-content\n/></hy-filter-bar>\n"],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, booleanAttribute, computed, inject, input } from "@angular/core";
|
|
3
|
+
import { HyMotion, injectHyVisibility } from "@hyalo/angular/motion";
|
|
4
|
+
var HyBorderBeam = class HyBorderBeam {
|
|
5
|
+
animated = input(false, {
|
|
6
|
+
...ngDevMode ? { debugName: "animated" } : /* istanbul ignore next */ {},
|
|
7
|
+
transform: booleanAttribute
|
|
8
|
+
});
|
|
9
|
+
motion = inject(HyMotion);
|
|
10
|
+
visible = injectHyVisibility();
|
|
11
|
+
moving = computed(() => this.animated() && this.motion.enabled() && this.visible(), ...ngDevMode ? [{ debugName: "moving" }] : /* istanbul ignore next */ []);
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
13
|
+
minVersion: "12.0.0",
|
|
14
|
+
version: "22.2.3",
|
|
15
|
+
ngImport: i0,
|
|
16
|
+
type: HyBorderBeam,
|
|
17
|
+
deps: [],
|
|
18
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
19
|
+
});
|
|
20
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
21
|
+
minVersion: "17.1.0",
|
|
22
|
+
version: "22.2.3",
|
|
23
|
+
type: HyBorderBeam,
|
|
24
|
+
isStandalone: true,
|
|
25
|
+
selector: "hy-border-beam",
|
|
26
|
+
inputs: { animated: {
|
|
27
|
+
classPropertyName: "animated",
|
|
28
|
+
publicName: "animated",
|
|
29
|
+
isSignal: true,
|
|
30
|
+
isRequired: false,
|
|
31
|
+
transformFunction: null
|
|
32
|
+
} },
|
|
33
|
+
host: {
|
|
34
|
+
attributes: { "aria-hidden": "true" },
|
|
35
|
+
properties: { "class.moving": "moving()" }
|
|
36
|
+
},
|
|
37
|
+
ngImport: i0,
|
|
38
|
+
template: "",
|
|
39
|
+
isInline: true,
|
|
40
|
+
styles: [":host{display:block;position:absolute;inset:0;border:1px solid var(--hy-line-strong);border-radius:inherit;pointer-events:none;overflow:clip}:host:before{content:\"\";position:absolute;inset:-100%;background:conic-gradient(from 0deg,transparent 75%,var(--hy-primary),transparent);opacity:.45;animation:hy-beam 8s linear infinite;animation-play-state:paused;-webkit-mask-image:radial-gradient(ellipse,transparent 60%,black 62%);mask-image:radial-gradient(ellipse,transparent 60%,black 62%)}:host(.moving):before{animation-play-state:running}@keyframes hy-beam{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce),(forced-colors:active){:host:before{display:none}}\n"],
|
|
41
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
45
|
+
minVersion: "12.0.0",
|
|
46
|
+
version: "22.2.3",
|
|
47
|
+
ngImport: i0,
|
|
48
|
+
type: HyBorderBeam,
|
|
49
|
+
decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{
|
|
52
|
+
selector: "hy-border-beam",
|
|
53
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
54
|
+
host: {
|
|
55
|
+
"aria-hidden": "true",
|
|
56
|
+
"[class.moving]": "moving()"
|
|
57
|
+
},
|
|
58
|
+
template: "",
|
|
59
|
+
styles: [":host{display:block;position:absolute;inset:0;border:1px solid var(--hy-line-strong);border-radius:inherit;pointer-events:none;overflow:clip}:host:before{content:\"\";position:absolute;inset:-100%;background:conic-gradient(from 0deg,transparent 75%,var(--hy-primary),transparent);opacity:.45;animation:hy-beam 8s linear infinite;animation-play-state:paused;-webkit-mask-image:radial-gradient(ellipse,transparent 60%,black 62%);mask-image:radial-gradient(ellipse,transparent 60%,black 62%)}:host(.moving):before{animation-play-state:running}@keyframes hy-beam{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce),(forced-colors:active){:host:before{display:none}}\n"]
|
|
60
|
+
}]
|
|
61
|
+
}],
|
|
62
|
+
propDecorators: { animated: [{
|
|
63
|
+
type: i0.Input,
|
|
64
|
+
args: [{
|
|
65
|
+
isSignal: true,
|
|
66
|
+
alias: "animated",
|
|
67
|
+
required: false
|
|
68
|
+
}]
|
|
69
|
+
}] }
|
|
70
|
+
});
|
|
71
|
+
export { HyBorderBeam };
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=hyalo-angular-border-beam.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyalo-angular-border-beam.mjs","names":[],"sources":["../../../projects/hyalo/border-beam/border-beam.ts"],"sourcesContent":["import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\nimport { HyMotion, injectHyVisibility } from '@hyalo/angular/motion';\n@Component({\n selector: 'hy-border-beam',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { 'aria-hidden': 'true', '[class.moving]': 'moving()' },\n template: '',\n styleUrl: './border-beam.css',\n})\nexport class HyBorderBeam {\n readonly animated = input(false, { transform: booleanAttribute });\n private readonly motion = inject(HyMotion);\n private readonly visible = injectHyVisibility();\n protected readonly moving = computed(\n () => this.animated() && this.motion.enabled() && this.visible(),\n );\n}\n"],"mappings":";;;AAgBA,IAAa,eAAb,MAAa,aAAY;CACd,WAAW,MAAM,OAAK;EAAA,GAAA,YAAA,EAAA,WAAA,WAAA,+BAAA,CAAA;EAAI,WAAW;CAAgB,CAAA;CAC7C,SAAS,OAAO,QAAQ;CACxB,UAAU,mBAAkB;CAC1B,SAAS,eACpB,KAAK,SAAQ,KAAM,KAAK,OAAO,QAAO,KAAM,KAAK,QAAO,GAC/D,GAAA,YAAA,CAAA,EAAA,WAAA,SAAA,CAAA,+BAAA,CAAA,CAAA;CANU,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAY,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAZ,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAY,cAAA;EAAA,UAAA;EAAA,QAAA,EAAA,UAAA;GAAA,mBAAA;GAAA,YAAA;GAAA,UAAA;GAAA,YAAA;GAAA,mBAAA;EAAA,EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,eAAA,OAAA;GAAA,YAAA,EAAA,gBAAA,WAAA;EAAA;EAAA,UAAA;EAAA,UAHb;EAAE,UAAA;EAAA,QAAA,CAAA,wqBAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAGD,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAY,YAAA,CAAA;EAPxB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAgB,iBACT,wBAAwB;GAAM,MACzC;IAAE,eAAe;IAAQ,kBAAkB;GAAU;GAAE,UACnD;GAAE,QAAA,CAAA,wqBAAA;EAAA,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, input } from "@angular/core";
|
|
3
|
+
var HyBreadcrumb = class HyBreadcrumb {
|
|
4
|
+
items = input.required(...ngDevMode ? [{ debugName: "items" }] : /* istanbul ignore next */ []);
|
|
5
|
+
label = input("Breadcrumb", ...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
7
|
+
minVersion: "12.0.0",
|
|
8
|
+
version: "22.2.3",
|
|
9
|
+
ngImport: i0,
|
|
10
|
+
type: HyBreadcrumb,
|
|
11
|
+
deps: [],
|
|
12
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
13
|
+
});
|
|
14
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
15
|
+
minVersion: "17.0.0",
|
|
16
|
+
version: "22.2.3",
|
|
17
|
+
type: HyBreadcrumb,
|
|
18
|
+
isStandalone: true,
|
|
19
|
+
selector: "hy-breadcrumb",
|
|
20
|
+
inputs: {
|
|
21
|
+
items: {
|
|
22
|
+
classPropertyName: "items",
|
|
23
|
+
publicName: "items",
|
|
24
|
+
isSignal: true,
|
|
25
|
+
isRequired: true,
|
|
26
|
+
transformFunction: null
|
|
27
|
+
},
|
|
28
|
+
label: {
|
|
29
|
+
classPropertyName: "label",
|
|
30
|
+
publicName: "label",
|
|
31
|
+
isSignal: true,
|
|
32
|
+
isRequired: false,
|
|
33
|
+
transformFunction: null
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
ngImport: i0,
|
|
37
|
+
template: "<nav [attr.aria-label]=\"label()\">\r\n <ol>\r\n @for (item of items(); track $index; let last = $last) {\r\n <li>\r\n @if (item.href && !last) {\r\n <a [href]=\"item.href\">{{ item.label }}</a>\r\n } @else {\r\n <span [attr.aria-current]=\"last ? 'page' : null\">{{ item.label }}</span>\r\n }\r\n @if (!last) {\r\n <span class=\"separator\" aria-hidden=\"true\">/</span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n</nav>\r\n",
|
|
38
|
+
styles: [":host{display:block}ol{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;list-style:none;margin:0;padding:0}li{display:flex;align-items:center;gap:.5rem}a{color:var(--hy-ink-2);text-underline-offset:.25em;padding-block:.5rem}span[aria-current]{color:var(--hy-ink);font-weight:600}.separator{color:var(--hy-ink-3)}:is(button,a,input):focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}\n"],
|
|
39
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
43
|
+
minVersion: "12.0.0",
|
|
44
|
+
version: "22.2.3",
|
|
45
|
+
ngImport: i0,
|
|
46
|
+
type: HyBreadcrumb,
|
|
47
|
+
decorators: [{
|
|
48
|
+
type: Component,
|
|
49
|
+
args: [{
|
|
50
|
+
selector: "hy-breadcrumb",
|
|
51
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
52
|
+
template: "<nav [attr.aria-label]=\"label()\">\r\n <ol>\r\n @for (item of items(); track $index; let last = $last) {\r\n <li>\r\n @if (item.href && !last) {\r\n <a [href]=\"item.href\">{{ item.label }}</a>\r\n } @else {\r\n <span [attr.aria-current]=\"last ? 'page' : null\">{{ item.label }}</span>\r\n }\r\n @if (!last) {\r\n <span class=\"separator\" aria-hidden=\"true\">/</span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n</nav>\r\n",
|
|
53
|
+
styles: [":host{display:block}ol{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;list-style:none;margin:0;padding:0}li{display:flex;align-items:center;gap:.5rem}a{color:var(--hy-ink-2);text-underline-offset:.25em;padding-block:.5rem}span[aria-current]{color:var(--hy-ink);font-weight:600}.separator{color:var(--hy-ink-3)}:is(button,a,input):focus-visible{outline:2px solid var(--hy-primary);outline-offset:3px}\n"]
|
|
54
|
+
}]
|
|
55
|
+
}],
|
|
56
|
+
propDecorators: {
|
|
57
|
+
items: [{
|
|
58
|
+
type: i0.Input,
|
|
59
|
+
args: [{
|
|
60
|
+
isSignal: true,
|
|
61
|
+
alias: "items",
|
|
62
|
+
required: true
|
|
63
|
+
}]
|
|
64
|
+
}],
|
|
65
|
+
label: [{
|
|
66
|
+
type: i0.Input,
|
|
67
|
+
args: [{
|
|
68
|
+
isSignal: true,
|
|
69
|
+
alias: "label",
|
|
70
|
+
required: false
|
|
71
|
+
}]
|
|
72
|
+
}]
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
export { HyBreadcrumb };
|
|
76
|
+
|
|
77
|
+
//# sourceMappingURL=hyalo-angular-breadcrumb.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyalo-angular-breadcrumb.mjs","names":[],"sources":["../../../projects/hyalo/breadcrumb/breadcrumb.ts","../../../projects/hyalo/breadcrumb/breadcrumb.html"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nexport interface HyBreadcrumbItem {\r\n readonly label: string;\r\n readonly href?: string;\r\n}\r\n@Component({\r\n selector: 'hy-breadcrumb',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n templateUrl: './breadcrumb.html',\r\n styleUrl: './breadcrumb.css',\r\n})\r\nexport class HyBreadcrumb {\r\n readonly items = input.required<readonly HyBreadcrumbItem[]>();\r\n readonly label = input('Breadcrumb');\r\n}\r\n","<nav [attr.aria-label]=\"label()\">\r\n <ol>\r\n @for (item of items(); track $index; let last = $last) {\r\n <li>\r\n @if (item.href && !last) {\r\n <a [href]=\"item.href\">{{ item.label }}</a>\r\n } @else {\r\n <span [attr.aria-current]=\"last ? 'page' : null\">{{ item.label }}</span>\r\n }\r\n @if (!last) {\r\n <span class=\"separator\" aria-hidden=\"true\">/</span>\r\n }\r\n </li>\r\n }\r\n </ol>\r\n</nav>\r\n"],"mappings":";;AAWA,IAAa,eAAb,MAAa,aAAY;CACd,QAAQ,MAAM,SAAuC,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CACrD,QAAQ,MAAM,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAFzB,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAY,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAZ,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAY,cAAA;EAAA,UAAA;EAAA,QAAA;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;EAAA;EAAA,UAAA;EAAA,UCXzB;EAgBA,QAAA,CAAA,6ZAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;ADLa,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAY,YAAA,CAAA;EANxB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAe,iBACR,wBAAwB;GAAM,UAAA;GAAA,QAAA,CAAA,6ZAAA;EAAA,CAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, input } from "@angular/core";
|
|
3
|
+
var HyButtonGroup = class HyButtonGroup {
|
|
4
|
+
label = input.required(...ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []);
|
|
5
|
+
orientation = input("horizontal", ...ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []);
|
|
6
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
7
|
+
minVersion: "12.0.0",
|
|
8
|
+
version: "22.2.3",
|
|
9
|
+
ngImport: i0,
|
|
10
|
+
type: HyButtonGroup,
|
|
11
|
+
deps: [],
|
|
12
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
13
|
+
});
|
|
14
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
15
|
+
minVersion: "17.1.0",
|
|
16
|
+
version: "22.2.3",
|
|
17
|
+
type: HyButtonGroup,
|
|
18
|
+
isStandalone: true,
|
|
19
|
+
selector: "hy-button-group",
|
|
20
|
+
inputs: {
|
|
21
|
+
label: {
|
|
22
|
+
classPropertyName: "label",
|
|
23
|
+
publicName: "label",
|
|
24
|
+
isSignal: true,
|
|
25
|
+
isRequired: true,
|
|
26
|
+
transformFunction: null
|
|
27
|
+
},
|
|
28
|
+
orientation: {
|
|
29
|
+
classPropertyName: "orientation",
|
|
30
|
+
publicName: "orientation",
|
|
31
|
+
isSignal: true,
|
|
32
|
+
isRequired: false,
|
|
33
|
+
transformFunction: null
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
host: {
|
|
37
|
+
attributes: { "role": "group" },
|
|
38
|
+
properties: {
|
|
39
|
+
"attr.aria-label": "label()",
|
|
40
|
+
"attr.data-orientation": "orientation()"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
ngImport: i0,
|
|
44
|
+
template: "<ng-content />",
|
|
45
|
+
isInline: true,
|
|
46
|
+
styles: [":host{display:inline-flex;flex-wrap:wrap;gap:var(--hy-space-1);padding:var(--hy-space-1);border:1px solid var(--hy-line);border-radius:var(--hy-radius-m)}:host([data-orientation=\"vertical\"]){flex-direction:column}\n"],
|
|
47
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
51
|
+
minVersion: "12.0.0",
|
|
52
|
+
version: "22.2.3",
|
|
53
|
+
ngImport: i0,
|
|
54
|
+
type: HyButtonGroup,
|
|
55
|
+
decorators: [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{
|
|
58
|
+
selector: "hy-button-group",
|
|
59
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
60
|
+
host: {
|
|
61
|
+
role: "group",
|
|
62
|
+
"[attr.aria-label]": "label()",
|
|
63
|
+
"[attr.data-orientation]": "orientation()"
|
|
64
|
+
},
|
|
65
|
+
template: "<ng-content />",
|
|
66
|
+
styles: [":host{display:inline-flex;flex-wrap:wrap;gap:var(--hy-space-1);padding:var(--hy-space-1);border:1px solid var(--hy-line);border-radius:var(--hy-radius-m)}:host([data-orientation=\"vertical\"]){flex-direction:column}\n"]
|
|
67
|
+
}]
|
|
68
|
+
}],
|
|
69
|
+
propDecorators: {
|
|
70
|
+
label: [{
|
|
71
|
+
type: i0.Input,
|
|
72
|
+
args: [{
|
|
73
|
+
isSignal: true,
|
|
74
|
+
alias: "label",
|
|
75
|
+
required: true
|
|
76
|
+
}]
|
|
77
|
+
}],
|
|
78
|
+
orientation: [{
|
|
79
|
+
type: i0.Input,
|
|
80
|
+
args: [{
|
|
81
|
+
isSignal: true,
|
|
82
|
+
alias: "orientation",
|
|
83
|
+
required: false
|
|
84
|
+
}]
|
|
85
|
+
}]
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
export { HyButtonGroup };
|
|
89
|
+
|
|
90
|
+
//# sourceMappingURL=hyalo-angular-button-group.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyalo-angular-button-group.mjs","names":[],"sources":["../../../projects/hyalo/button-group/button-group.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\n/** Groups native buttons. For mutually exclusive choices use HySegmented. */\r\n@Component({\r\n selector: 'hy-button-group',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n role: 'group',\r\n '[attr.aria-label]': 'label()',\r\n '[attr.data-orientation]': 'orientation()',\r\n },\r\n template: '<ng-content />',\r\n styleUrl: './button-group.css',\r\n})\r\nexport class HyButtonGroup {\r\n readonly label = input.required<string>();\r\n readonly orientation = input<'horizontal' | 'vertical'>('horizontal');\r\n}\r\n"],"mappings":";;AAaA,IAAa,gBAAb,MAAa,cAAa;CACf,QAAQ,MAAM,SAAkB,GAAA,YAAA,CAAA,EAAA,WAAA,QAAA,CAAA,+BAAA,CAAA,CAAA;CAChC,cAAc,MAAiC,cAAa,GAAA,YAAA,CAAA,EAAA,WAAA,cAAA,CAAA,+BAAA,CAAA,CAAA;CAF1D,OAAA,OAAA,GAAA,mBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,UAAA;EAAA,MAAA;EAAa,MAAA,CAAA;EAAA,QAAA,GAAA,gBAAA;CAAA,CAAA;CAAb,OAAA,OAAA,GAAA,qBAAA;EAAA,YAAA;EAAA,SAAA;EAAA,MAAA;EAAa,cAAA;EAAA,UAAA;EAAA,QAAA;GAAA,OAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;GAAA,aAAA;IAAA,mBAAA;IAAA,YAAA;IAAA,UAAA;IAAA,YAAA;IAAA,mBAAA;GAAA;EAAA;EAAA,MAAA;GAAA,YAAA,EAAA,QAAA,QAAA;GAAA,YAAA;IAAA,mBAAA;IAAA,yBAAA;GAAA;EAAA;EAAA,UAAA;EAAA,UAHd;EAAgB,UAAA;EAAA,QAAA,CAAA,2NAAA;EAAA,iBAAA,GAAA,wBAAA;CAAA,CAAA;;AAGf,GAAA,yBAAA;CAAA,YAAA;CAAA,SAAA;CAAA,UAAA;CAAA,MAAA;CAAa,YAAA,CAAA;EAXzB,MAAA;EACW,MAAA,CAAA;GAAA,UAAA;GAAiB,iBACV,wBAAwB;GAAM,MACzC;IACJ,MAAM;IACN,qBAAqB;IACrB,2BAA2B;GAC5B;GAAA,UACS;GAAgB,QAAA,CAAA,2NAAA;EAAA,CAAA"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, inject, input } from "@angular/core";
|
|
3
|
+
import * as i1 from "@hyalo/angular/core";
|
|
4
|
+
import { HY_CONFIG, HyAppearance, HyFidelity, HyInteractive } from "@hyalo/angular/core";
|
|
5
|
+
var HyButton = class HyButton {
|
|
6
|
+
config = inject(HY_CONFIG);
|
|
7
|
+
appearance = inject(HyAppearance);
|
|
8
|
+
fidelity = inject(HyFidelity);
|
|
9
|
+
el = inject(ElementRef).nativeElement;
|
|
10
|
+
isButton = this.el.tagName === "BUTTON";
|
|
11
|
+
variant = input("solid", ...ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []);
|
|
12
|
+
size = input(this.config.size, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
|
|
13
|
+
tone = input(this.config.tone, ...ngDevMode ? [{ debugName: "tone" }] : /* istanbul ignore next */ []);
|
|
14
|
+
iconOnly = input(false, {
|
|
15
|
+
...ngDevMode ? { debugName: "iconOnly" } : /* istanbul ignore next */ {},
|
|
16
|
+
transform: booleanAttribute
|
|
17
|
+
});
|
|
18
|
+
loading = input(false, {
|
|
19
|
+
...ngDevMode ? { debugName: "loading" } : /* istanbul ignore next */ {},
|
|
20
|
+
transform: booleanAttribute
|
|
21
|
+
});
|
|
22
|
+
disabled = input(false, {
|
|
23
|
+
...ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {},
|
|
24
|
+
transform: booleanAttribute
|
|
25
|
+
});
|
|
26
|
+
material = computed(() => {
|
|
27
|
+
if (this.variant() !== "glass") return null;
|
|
28
|
+
return this.fidelity.tier() === "low" ? "solid" : this.appearance.material() ?? this.config.material;
|
|
29
|
+
}, ...ngDevMode ? [{ debugName: "material" }] : /* istanbul ignore next */ []);
|
|
30
|
+
blocked = computed(() => this.loading() || !this.isButton && this.disabled(), ...ngDevMode ? [{ debugName: "blocked" }] : /* istanbul ignore next */ []);
|
|
31
|
+
constructor() {
|
|
32
|
+
this.el.addEventListener("click", (event) => {
|
|
33
|
+
if (!this.blocked()) return;
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
event.stopImmediatePropagation();
|
|
36
|
+
}, { capture: true });
|
|
37
|
+
}
|
|
38
|
+
static ɵfac = i0.ɵɵngDeclareFactory({
|
|
39
|
+
minVersion: "12.0.0",
|
|
40
|
+
version: "22.2.3",
|
|
41
|
+
ngImport: i0,
|
|
42
|
+
type: HyButton,
|
|
43
|
+
deps: [],
|
|
44
|
+
target: i0.ɵɵFactoryTarget.Component
|
|
45
|
+
});
|
|
46
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({
|
|
47
|
+
minVersion: "17.0.0",
|
|
48
|
+
version: "22.2.3",
|
|
49
|
+
type: HyButton,
|
|
50
|
+
isStandalone: true,
|
|
51
|
+
selector: "button[hyButton], a[hyButton]",
|
|
52
|
+
inputs: {
|
|
53
|
+
variant: {
|
|
54
|
+
classPropertyName: "variant",
|
|
55
|
+
publicName: "variant",
|
|
56
|
+
isSignal: true,
|
|
57
|
+
isRequired: false,
|
|
58
|
+
transformFunction: null
|
|
59
|
+
},
|
|
60
|
+
size: {
|
|
61
|
+
classPropertyName: "size",
|
|
62
|
+
publicName: "size",
|
|
63
|
+
isSignal: true,
|
|
64
|
+
isRequired: false,
|
|
65
|
+
transformFunction: null
|
|
66
|
+
},
|
|
67
|
+
tone: {
|
|
68
|
+
classPropertyName: "tone",
|
|
69
|
+
publicName: "tone",
|
|
70
|
+
isSignal: true,
|
|
71
|
+
isRequired: false,
|
|
72
|
+
transformFunction: null
|
|
73
|
+
},
|
|
74
|
+
iconOnly: {
|
|
75
|
+
classPropertyName: "iconOnly",
|
|
76
|
+
publicName: "iconOnly",
|
|
77
|
+
isSignal: true,
|
|
78
|
+
isRequired: false,
|
|
79
|
+
transformFunction: null
|
|
80
|
+
},
|
|
81
|
+
loading: {
|
|
82
|
+
classPropertyName: "loading",
|
|
83
|
+
publicName: "loading",
|
|
84
|
+
isSignal: true,
|
|
85
|
+
isRequired: false,
|
|
86
|
+
transformFunction: null
|
|
87
|
+
},
|
|
88
|
+
disabled: {
|
|
89
|
+
classPropertyName: "disabled",
|
|
90
|
+
publicName: "disabled",
|
|
91
|
+
isSignal: true,
|
|
92
|
+
isRequired: false,
|
|
93
|
+
transformFunction: null
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
host: {
|
|
97
|
+
properties: {
|
|
98
|
+
"class.hy-glass": "variant() === \"glass\"",
|
|
99
|
+
"attr.data-material": "material()",
|
|
100
|
+
"attr.data-thickness": "variant() === \"glass\" ? \"thin\" : null",
|
|
101
|
+
"attr.data-variant": "variant()",
|
|
102
|
+
"attr.data-size": "size()",
|
|
103
|
+
"attr.data-tone": "tone()",
|
|
104
|
+
"attr.data-icon-only": "iconOnly() || null",
|
|
105
|
+
"attr.data-loading": "loading() || null",
|
|
106
|
+
"attr.aria-busy": "loading() || null",
|
|
107
|
+
"attr.aria-disabled": "blocked() || null",
|
|
108
|
+
"attr.disabled": "isButton && disabled() ? \"\" : null",
|
|
109
|
+
"attr.tabindex": "!isButton && disabled() ? -1 : null"
|
|
110
|
+
},
|
|
111
|
+
classAttribute: "hy-button"
|
|
112
|
+
},
|
|
113
|
+
hostDirectives: [{ directive: i1.HyInteractive }],
|
|
114
|
+
ngImport: i0,
|
|
115
|
+
template: "<span class=\"hy-button__label\"><ng-content /></span>\r\n@if (loading()) {\r\n <!-- Inline, so a button does not pull in the icon registry. -->\r\n <span class=\"hy-button__spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\" /></svg>\r\n </span>\r\n}\r\n",
|
|
116
|
+
styles: [":host{--_c: var(--hy-primary);--_on: var(--hy-primary-ink);--_h: var(--hy-control-md);--_px: var(--hy-space-4);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--hy-space-2);block-size:var(--_h);min-inline-size:var(--_h);padding-inline:var(--_px);border:1px solid transparent;border-radius:var(--hy-button-radius, var(--hy-radius-pill));font:inherit;font-size:var(--hy-step-0);font-weight:var(--hy-button-font-weight, 560);line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--hy-dur-quick) var(--hy-ease-out),color var(--hy-dur-quick) var(--hy-ease-out),box-shadow var(--hy-dur-quick) var(--hy-ease-out),scale var(--hy-dur-quick) var(--hy-ease-out),translate var(--hy-dur-settle) var(--hy-ease-out),--hy-glow var(--hy-dur-settle) var(--hy-ease-out)}:host([data-size=\"sm\"]){--_h: var(--hy-control-sm);--_px: var(--hy-space-3);font-size:var(--hy-step--1);letter-spacing:var(--hy-tracking-small)}:host([data-size=\"lg\"]){--_h: var(--hy-control-lg);--_px: var(--hy-space-6);font-size:var(--hy-step-1)}:host([data-icon-only]){padding-inline:0;inline-size:var(--_h)}:host([data-tone=\"secondary\"]){--_c: var(--hy-secondary, var(--hy-primary));--_on: var(--hy-secondary-ink, var(--hy-primary-ink))}:host([data-tone=\"neutral\"]){--_c: var(--hy-ink);--_on: var(--hy-bg)}:host([data-tone=\"danger\"]){--_c: var(--hy-danger);--_on: var(--hy-danger-ink)}:host([data-tone=\"success\"]){--_c: var(--hy-success);--_on: var(--hy-bg)}:host([data-tone=\"warning\"]){--_c: var(--hy-warning);--_on: var(--hy-bg)}:host([data-variant=\"solid\"]){background-color:var(--_c);color:var(--_on);box-shadow:inset 0 1px #ffffff38,0 6px 16px -8px color-mix(in srgb,var(--_c) 70%,transparent)}:host([data-variant=\"solid\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 88%,var(--hy-ink))}:host([data-variant=\"glass\"]){color:var(--hy-ink)}:host([data-variant=\"glass\"][data-hover]){--hy-glow: .25}:host([data-variant=\"soft\"]){background-color:color-mix(in srgb,var(--_c) 13%,transparent);color:var(--_c)}:host([data-variant=\"soft\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 20%,transparent)}:host([data-variant=\"ghost\"]){background-color:transparent;color:var(--_c)}:host([data-variant=\"ghost\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 10%,transparent)}:host([data-press]){scale:.97;transition-duration:min(.1s,var(--hy-dur-quick))}:host([data-variant=\"solid\"][data-press]){background-color:color-mix(in srgb,var(--_c) 78%,var(--hy-ink))}:host([data-variant=\"soft\"][data-press]){background-color:color-mix(in srgb,var(--_c) 26%,transparent)}:host([data-variant=\"ghost\"][data-press]){background-color:color-mix(in srgb,var(--_c) 16%,transparent)}:host([data-variant=\"glass\"][data-press]){--hy-glow: .45}:host(:focus-visible){outline:none;box-shadow:var(--hy-focus-ring)}:host(:disabled),:host([aria-disabled=\"true\"]:not([data-loading])){opacity:.45;cursor:not-allowed;pointer-events:none}:host([data-loading]){cursor:progress}.hy-button__label{display:inline-flex;align-items:center;gap:inherit}:host([data-loading]) .hy-button__label{visibility:hidden}.hy-button__spinner{position:absolute;inset:0;display:grid;place-items:center}.hy-button__spinner svg{inline-size:1.25em;block-size:1.25em;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;animation:hy-spin .8s linear infinite}@keyframes hy-spin{to{rotate:1turn}}@media(prefers-reduced-motion:reduce){.hy-button__spinner svg{animation-duration:2.4s}}@media(forced-colors:active){:host{border-color:ButtonText}}\n"],
|
|
117
|
+
changeDetection: i0.ChangeDetectionStrategy.OnPush
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
i0.ɵɵngDeclareClassMetadata({
|
|
121
|
+
minVersion: "12.0.0",
|
|
122
|
+
version: "22.2.3",
|
|
123
|
+
ngImport: i0,
|
|
124
|
+
type: HyButton,
|
|
125
|
+
decorators: [{
|
|
126
|
+
type: Component,
|
|
127
|
+
args: [{
|
|
128
|
+
selector: "button[hyButton], a[hyButton]",
|
|
129
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
130
|
+
hostDirectives: [HyInteractive],
|
|
131
|
+
host: {
|
|
132
|
+
class: "hy-button",
|
|
133
|
+
"[class.hy-glass]": "variant() === \"glass\"",
|
|
134
|
+
"[attr.data-material]": "material()",
|
|
135
|
+
"[attr.data-thickness]": "variant() === \"glass\" ? \"thin\" : null",
|
|
136
|
+
"[attr.data-variant]": "variant()",
|
|
137
|
+
"[attr.data-size]": "size()",
|
|
138
|
+
"[attr.data-tone]": "tone()",
|
|
139
|
+
"[attr.data-icon-only]": "iconOnly() || null",
|
|
140
|
+
"[attr.data-loading]": "loading() || null",
|
|
141
|
+
"[attr.aria-busy]": "loading() || null",
|
|
142
|
+
"[attr.aria-disabled]": "blocked() || null",
|
|
143
|
+
"[attr.disabled]": "isButton && disabled() ? \"\" : null",
|
|
144
|
+
"[attr.tabindex]": "!isButton && disabled() ? -1 : null"
|
|
145
|
+
},
|
|
146
|
+
template: "<span class=\"hy-button__label\"><ng-content /></span>\r\n@if (loading()) {\r\n <!-- Inline, so a button does not pull in the icon registry. -->\r\n <span class=\"hy-button__spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\" /></svg>\r\n </span>\r\n}\r\n",
|
|
147
|
+
styles: [":host{--_c: var(--hy-primary);--_on: var(--hy-primary-ink);--_h: var(--hy-control-md);--_px: var(--hy-space-4);position:relative;display:inline-flex;align-items:center;justify-content:center;gap:var(--hy-space-2);block-size:var(--_h);min-inline-size:var(--_h);padding-inline:var(--_px);border:1px solid transparent;border-radius:var(--hy-button-radius, var(--hy-radius-pill));font:inherit;font-size:var(--hy-step-0);font-weight:var(--hy-button-font-weight, 560);line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--hy-dur-quick) var(--hy-ease-out),color var(--hy-dur-quick) var(--hy-ease-out),box-shadow var(--hy-dur-quick) var(--hy-ease-out),scale var(--hy-dur-quick) var(--hy-ease-out),translate var(--hy-dur-settle) var(--hy-ease-out),--hy-glow var(--hy-dur-settle) var(--hy-ease-out)}:host([data-size=\"sm\"]){--_h: var(--hy-control-sm);--_px: var(--hy-space-3);font-size:var(--hy-step--1);letter-spacing:var(--hy-tracking-small)}:host([data-size=\"lg\"]){--_h: var(--hy-control-lg);--_px: var(--hy-space-6);font-size:var(--hy-step-1)}:host([data-icon-only]){padding-inline:0;inline-size:var(--_h)}:host([data-tone=\"secondary\"]){--_c: var(--hy-secondary, var(--hy-primary));--_on: var(--hy-secondary-ink, var(--hy-primary-ink))}:host([data-tone=\"neutral\"]){--_c: var(--hy-ink);--_on: var(--hy-bg)}:host([data-tone=\"danger\"]){--_c: var(--hy-danger);--_on: var(--hy-danger-ink)}:host([data-tone=\"success\"]){--_c: var(--hy-success);--_on: var(--hy-bg)}:host([data-tone=\"warning\"]){--_c: var(--hy-warning);--_on: var(--hy-bg)}:host([data-variant=\"solid\"]){background-color:var(--_c);color:var(--_on);box-shadow:inset 0 1px #ffffff38,0 6px 16px -8px color-mix(in srgb,var(--_c) 70%,transparent)}:host([data-variant=\"solid\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 88%,var(--hy-ink))}:host([data-variant=\"glass\"]){color:var(--hy-ink)}:host([data-variant=\"glass\"][data-hover]){--hy-glow: .25}:host([data-variant=\"soft\"]){background-color:color-mix(in srgb,var(--_c) 13%,transparent);color:var(--_c)}:host([data-variant=\"soft\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 20%,transparent)}:host([data-variant=\"ghost\"]){background-color:transparent;color:var(--_c)}:host([data-variant=\"ghost\"][data-hover]){background-color:color-mix(in srgb,var(--_c) 10%,transparent)}:host([data-press]){scale:.97;transition-duration:min(.1s,var(--hy-dur-quick))}:host([data-variant=\"solid\"][data-press]){background-color:color-mix(in srgb,var(--_c) 78%,var(--hy-ink))}:host([data-variant=\"soft\"][data-press]){background-color:color-mix(in srgb,var(--_c) 26%,transparent)}:host([data-variant=\"ghost\"][data-press]){background-color:color-mix(in srgb,var(--_c) 16%,transparent)}:host([data-variant=\"glass\"][data-press]){--hy-glow: .45}:host(:focus-visible){outline:none;box-shadow:var(--hy-focus-ring)}:host(:disabled),:host([aria-disabled=\"true\"]:not([data-loading])){opacity:.45;cursor:not-allowed;pointer-events:none}:host([data-loading]){cursor:progress}.hy-button__label{display:inline-flex;align-items:center;gap:inherit}:host([data-loading]) .hy-button__label{visibility:hidden}.hy-button__spinner{position:absolute;inset:0;display:grid;place-items:center}.hy-button__spinner svg{inline-size:1.25em;block-size:1.25em;fill:none;stroke:currentColor;stroke-width:1.75;stroke-linecap:round;animation:hy-spin .8s linear infinite}@keyframes hy-spin{to{rotate:1turn}}@media(prefers-reduced-motion:reduce){.hy-button__spinner svg{animation-duration:2.4s}}@media(forced-colors:active){:host{border-color:ButtonText}}\n"]
|
|
148
|
+
}]
|
|
149
|
+
}],
|
|
150
|
+
ctorParameters: () => [],
|
|
151
|
+
propDecorators: {
|
|
152
|
+
variant: [{
|
|
153
|
+
type: i0.Input,
|
|
154
|
+
args: [{
|
|
155
|
+
isSignal: true,
|
|
156
|
+
alias: "variant",
|
|
157
|
+
required: false
|
|
158
|
+
}]
|
|
159
|
+
}],
|
|
160
|
+
size: [{
|
|
161
|
+
type: i0.Input,
|
|
162
|
+
args: [{
|
|
163
|
+
isSignal: true,
|
|
164
|
+
alias: "size",
|
|
165
|
+
required: false
|
|
166
|
+
}]
|
|
167
|
+
}],
|
|
168
|
+
tone: [{
|
|
169
|
+
type: i0.Input,
|
|
170
|
+
args: [{
|
|
171
|
+
isSignal: true,
|
|
172
|
+
alias: "tone",
|
|
173
|
+
required: false
|
|
174
|
+
}]
|
|
175
|
+
}],
|
|
176
|
+
iconOnly: [{
|
|
177
|
+
type: i0.Input,
|
|
178
|
+
args: [{
|
|
179
|
+
isSignal: true,
|
|
180
|
+
alias: "iconOnly",
|
|
181
|
+
required: false
|
|
182
|
+
}]
|
|
183
|
+
}],
|
|
184
|
+
loading: [{
|
|
185
|
+
type: i0.Input,
|
|
186
|
+
args: [{
|
|
187
|
+
isSignal: true,
|
|
188
|
+
alias: "loading",
|
|
189
|
+
required: false
|
|
190
|
+
}]
|
|
191
|
+
}],
|
|
192
|
+
disabled: [{
|
|
193
|
+
type: i0.Input,
|
|
194
|
+
args: [{
|
|
195
|
+
isSignal: true,
|
|
196
|
+
alias: "disabled",
|
|
197
|
+
required: false
|
|
198
|
+
}]
|
|
199
|
+
}]
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
export { HyButton };
|
|
203
|
+
|
|
204
|
+
//# sourceMappingURL=hyalo-angular-button.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hyalo-angular-button.mjs","names":[],"sources":["../../../projects/hyalo/button/button.ts","../../../projects/hyalo/button/button.html"],"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} from '@angular/core';\r\nimport {\r\n HyAppearance,\r\n HY_CONFIG,\r\n HyFidelity,\r\n HyInteractive,\r\n type HySize,\r\n type HyTone,\r\n} from '@hyalo/angular/core';\r\n\r\n/**\r\n * - `solid`: filled with the tone colour. The main action on a view.\r\n * - `glass`: a glass surface with tone-coloured text.\r\n * - `soft`: a light wash of the tone colour.\r\n * - `ghost`: text only, a surface appears on hover.\r\n */\r\nexport type HyButtonVariant = 'solid' | 'glass' | 'soft' | 'ghost';\r\n\r\n/**\r\n * Button and link button.\r\n *\r\n * ```html\r\n * <button hyButton (click)=\"save()\">Save</button>\r\n * <a hyButton variant=\"glass\" routerLink=\"/pricing\">Pricing</a>\r\n * <button hyButton iconOnly aria-label=\"Close\"><hy-icon name=\"x\" /></button>\r\n * ```\r\n *\r\n * It stays a native `<button>` or `<a>`, so forms, routing and keyboard\r\n * behaviour work as usual. A press dims and shrinks it the moment the\r\n * pointer goes down. Add `hyMagnetic` for the magnetic hover effect, or\r\n * `hyRipple` for a press ripple.\r\n *\r\n * While `loading`, the button keeps its focus and width, sets `aria-busy`\r\n * and ignores clicks. A disabled link gets `aria-disabled` and leaves the\r\n * tab order, since links have no native disabled state.\r\n */\r\n@Component({\r\n // Attribute selector so the host stays a native <button> or <a>.\r\n // eslint-disable-next-line @angular-eslint/component-selector\r\n selector: 'button[hyButton], a[hyButton]',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n hostDirectives: [HyInteractive],\r\n host: {\r\n class: 'hy-button',\r\n '[class.hy-glass]': 'variant() === \"glass\"',\r\n '[attr.data-material]': 'material()',\r\n // Buttons are small chips of glass, so they get the thinnest material.\r\n '[attr.data-thickness]': 'variant() === \"glass\" ? \"thin\" : null',\r\n '[attr.data-variant]': 'variant()',\r\n '[attr.data-size]': 'size()',\r\n '[attr.data-tone]': 'tone()',\r\n '[attr.data-icon-only]': 'iconOnly() || null',\r\n '[attr.data-loading]': 'loading() || null',\r\n '[attr.aria-busy]': 'loading() || null',\r\n '[attr.aria-disabled]': 'blocked() || null',\r\n '[attr.disabled]': 'isButton && disabled() ? \"\" : null',\r\n '[attr.tabindex]': '!isButton && disabled() ? -1 : null',\r\n },\r\n templateUrl: './button.html',\r\n styleUrl: './button.css',\r\n})\r\nexport class HyButton {\r\n private readonly config = inject(HY_CONFIG);\r\n private readonly appearance = inject(HyAppearance);\r\n private readonly fidelity = inject(HyFidelity);\r\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\r\n protected readonly isButton = this.el.tagName === 'BUTTON';\r\n\r\n /** Visual style. */\r\n readonly variant = input<HyButtonVariant>('solid');\r\n /** Height and padding. Defaults to the configured size. */\r\n readonly size = input<HySize>(this.config.size);\r\n /** Colour role. Defaults to the configured tone. */\r\n readonly tone = input<HyTone>(this.config.tone);\r\n /** Square button for a single icon. Give it an `aria-label`. */\r\n readonly iconOnly = input(false, { transform: booleanAttribute });\r\n /** Shows a spinner and blocks clicks without dropping focus. */\r\n readonly loading = input(false, { transform: booleanAttribute });\r\n /** Disables the button. On links this sets `aria-disabled`. */\r\n readonly disabled = input(false, { transform: booleanAttribute });\r\n\r\n /** Glass follows the configured material and goes solid on the low tier. */\r\n protected readonly material = computed(() => {\r\n if (this.variant() !== 'glass') return null;\r\n return this.fidelity.tier() === 'low'\r\n ? 'solid'\r\n : (this.appearance.material() ?? this.config.material);\r\n });\r\n\r\n /** True when clicks should be ignored. */\r\n protected readonly blocked = computed(\r\n () => this.loading() || (!this.isButton && this.disabled()),\r\n );\r\n\r\n constructor() {\r\n // A capture listener on the element runs before the app's own (click)\r\n // handlers, so a blocked click never reaches them.\r\n this.el.addEventListener(\r\n 'click',\r\n (event) => {\r\n if (!this.blocked()) return;\r\n event.preventDefault();\r\n event.stopImmediatePropagation();\r\n },\r\n { capture: true },\r\n );\r\n }\r\n}\r\n","<span class=\"hy-button__label\"><ng-content /></span>\r\n@if (loading()) {\r\n <!-- Inline, so a button does not pull in the icon registry. -->\r\n <span class=\"hy-button__spinner\" aria-hidden=\"true\">\r\n <svg viewBox=\"0 0 24 24\"><path d=\"M21 12a9 9 0 1 1-6.219-8.56\" /></svg>\r\n </span>\r\n}\r\n"],"mappings":"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"}
|