@weeehaoooz/talos-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs +237 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button-group.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs +93 -0
- package/fesm2022/weeehaoooz-talos-ui-button-button.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs +438 -0
- package/fesm2022/weeehaoooz-talos-ui-core.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs +233 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-badge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs +361 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-status-tag.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs +312 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-timeline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs +235 -0
- package/fesm2022/weeehaoooz-talos-ui-data-display-trend-indicator.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs +462 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-category-bar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs +805 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-heatmap.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs +267 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-donut.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs +351 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-mini-gauge.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs +566 -0
- package/fesm2022/weeehaoooz-talos-ui-data-viz-sparkline.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs +534 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-alert.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs +446 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-dialog.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs +376 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-snackbar.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-feedback-tooltip.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs +242 -0
- package/fesm2022/weeehaoooz-talos-ui-form-affix.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs +514 -0
- package/fesm2022/weeehaoooz-talos-ui-form-autocomplete.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs +548 -0
- package/fesm2022/weeehaoooz-talos-ui-form-checkbox.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs +692 -0
- package/fesm2022/weeehaoooz-talos-ui-form-chips.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs +761 -0
- package/fesm2022/weeehaoooz-talos-ui-form-color-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs +872 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs +119 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs +135 -0
- package/fesm2022/weeehaoooz-talos-ui-form-date-time-range-picker.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs +666 -0
- package/fesm2022/weeehaoooz-talos-ui-form-drop-zone.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs +147 -0
- package/fesm2022/weeehaoooz-talos-ui-form-form-field.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs +33 -0
- package/fesm2022/weeehaoooz-talos-ui-form-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs +455 -0
- package/fesm2022/weeehaoooz-talos-ui-form-otp.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs +379 -0
- package/fesm2022/weeehaoooz-talos-ui-form-password-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs +297 -0
- package/fesm2022/weeehaoooz-talos-ui-form-radio.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs +661 -0
- package/fesm2022/weeehaoooz-talos-ui-form-range-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs +346 -0
- package/fesm2022/weeehaoooz-talos-ui-form-rating.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs +896 -0
- package/fesm2022/weeehaoooz-talos-ui-form-select-input.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs +252 -0
- package/fesm2022/weeehaoooz-talos-ui-form-slide-toggle.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs +916 -0
- package/fesm2022/weeehaoooz-talos-ui-form-transfer-list.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs +851 -0
- package/fesm2022/weeehaoooz-talos-ui-layout.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs +897 -0
- package/fesm2022/weeehaoooz-talos-ui-nav.mjs.map +1 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs +17058 -0
- package/fesm2022/weeehaoooz-talos-ui.mjs.map +1 -0
- package/package.json +203 -0
- package/schematics/collection.json +10 -0
- package/schematics/ng-add/index.d.ts +3 -0
- package/schematics/ng-add/index.js +99 -0
- package/schematics/ng-add/schema.d.ts +10 -0
- package/schematics/ng-add/schema.js +2 -0
- package/schematics/ng-add/schema.json +52 -0
- package/styles/_alert.scss +56 -0
- package/styles/_badge.scss +279 -0
- package/styles/_button-group.scss +470 -0
- package/styles/_buttons.scss +442 -0
- package/styles/_card.scss +18 -0
- package/styles/_dialog.scss +116 -0
- package/styles/_drop-zone.scss +19 -0
- package/styles/_form-controls.scss +660 -0
- package/styles/_slide-toggle.scss +171 -0
- package/styles/_status-tag.scss +108 -0
- package/styles/_timeline.scss +19 -0
- package/styles/_tooltip.scss +32 -0
- package/styles/_typography.scss +279 -0
- package/styles/_variables.scss +590 -0
- package/styles/index.scss +15 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts +59 -0
- package/types/weeehaoooz-talos-ui-button-button-group.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts +38 -0
- package/types/weeehaoooz-talos-ui-button-button.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-core.d.ts +95 -0
- package/types/weeehaoooz-talos-ui-core.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts +119 -0
- package/types/weeehaoooz-talos-ui-data-display-badge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts +135 -0
- package/types/weeehaoooz-talos-ui-data-display-status-tag.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-data-display-timeline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts +83 -0
- package/types/weeehaoooz-talos-ui-data-display-trend-indicator.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts +255 -0
- package/types/weeehaoooz-talos-ui-data-viz-category-bar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts +204 -0
- package/types/weeehaoooz-talos-ui-data-viz-heatmap.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts +101 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-donut.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-data-viz-mini-gauge.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts +161 -0
- package/types/weeehaoooz-talos-ui-data-viz-sparkline.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts +212 -0
- package/types/weeehaoooz-talos-ui-feedback-alert.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts +259 -0
- package/types/weeehaoooz-talos-ui-feedback-dialog.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts +147 -0
- package/types/weeehaoooz-talos-ui-feedback-snackbar.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts +32 -0
- package/types/weeehaoooz-talos-ui-feedback-tooltip.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts +88 -0
- package/types/weeehaoooz-talos-ui-form-affix.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts +113 -0
- package/types/weeehaoooz-talos-ui-form-autocomplete.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts +165 -0
- package/types/weeehaoooz-talos-ui-form-checkbox.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts +152 -0
- package/types/weeehaoooz-talos-ui-form-chips.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts +144 -0
- package/types/weeehaoooz-talos-ui-form-color-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts +138 -0
- package/types/weeehaoooz-talos-ui-form-date-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts +148 -0
- package/types/weeehaoooz-talos-ui-form-date-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts +44 -0
- package/types/weeehaoooz-talos-ui-form-date-time-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts +48 -0
- package/types/weeehaoooz-talos-ui-form-date-time-range-picker.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts +227 -0
- package/types/weeehaoooz-talos-ui-form-drop-zone.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts +42 -0
- package/types/weeehaoooz-talos-ui-form-form-field.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts +15 -0
- package/types/weeehaoooz-talos-ui-form-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts +111 -0
- package/types/weeehaoooz-talos-ui-form-otp.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts +145 -0
- package/types/weeehaoooz-talos-ui-form-password-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts +84 -0
- package/types/weeehaoooz-talos-ui-form-radio.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts +181 -0
- package/types/weeehaoooz-talos-ui-form-range-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts +110 -0
- package/types/weeehaoooz-talos-ui-form-rating.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts +195 -0
- package/types/weeehaoooz-talos-ui-form-select-input.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts +79 -0
- package/types/weeehaoooz-talos-ui-form-slide-toggle.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts +192 -0
- package/types/weeehaoooz-talos-ui-form-transfer-list.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts +286 -0
- package/types/weeehaoooz-talos-ui-layout.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts +384 -0
- package/types/weeehaoooz-talos-ui-nav.d.ts.map +1 -0
- package/types/weeehaoooz-talos-ui.d.ts +5050 -0
- package/types/weeehaoooz-talos-ui.d.ts.map +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 weeehaoooz
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# @weeehaoooz/talos-ui
|
|
2
|
+
|
|
3
|
+
A modern, high-performance, and accessible UI component library for Angular 20+.
|
|
4
|
+
|
|
5
|
+
Built natively with Angular signals, standalone components, native control flow, and WCAG AA accessibility standards.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- ⚡ **Native Angular Signals**: Fine-grained reactive state management with signals and computed values.
|
|
12
|
+
- 🎯 **Modern Architecture**: Standalone components, directive-driven API, zero legacy `NgModules`.
|
|
13
|
+
- 🎨 **Flexible Design System**: CSS variables / design tokens with light & dark theme support.
|
|
14
|
+
- ♿ **Accessible by Default**: WCAG AA compliance, ARIA attributes, and full keyboard navigation.
|
|
15
|
+
- 🧩 **Rich Component Set**:
|
|
16
|
+
- **Button**: Buttons, Button Groups, Icon Buttons
|
|
17
|
+
- **Form Controls**: Input, Autocomplete, Select, Checkbox, Radio, Slide Toggle, Chips, Range Slider, Drop Zone, Date & Time Pickers
|
|
18
|
+
- **Feedback**: Dialog, Alert, Snackbar, Tooltip
|
|
19
|
+
- **Data Display**: Badge, Status Tag
|
|
20
|
+
- **Data Visualization**: Category Bar, Heatmap
|
|
21
|
+
- **Layout & Nav**: Tabs, Breadcrumbs, Containers, Shell
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Quick Start / Installation
|
|
26
|
+
|
|
27
|
+
### Recommended: Angular CLI `ng add`
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
ng add @weeehaoooz/talos-ui
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The schematic automatically:
|
|
34
|
+
1. Installs peer dependencies (`@angular/cdk`, `@lucide/angular`, `date-fns`, `rxjs`).
|
|
35
|
+
2. Adds the Talos SCSS design tokens & global styles to your project.
|
|
36
|
+
3. Sets up optional dark mode theme attributes.
|
|
37
|
+
|
|
38
|
+
### Manual Installation
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install @weeehaoooz/talos-ui @angular/cdk @lucide/angular date-fns rxjs
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
#### Global Styles Setup
|
|
45
|
+
|
|
46
|
+
Import the stylesheet in your `src/styles.scss`:
|
|
47
|
+
|
|
48
|
+
```scss
|
|
49
|
+
@use '@weeehaoooz/talos-ui/styles/index';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Basic Example
|
|
55
|
+
|
|
56
|
+
```typescript
|
|
57
|
+
import { Component, signal } from '@angular/core';
|
|
58
|
+
import { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';
|
|
59
|
+
import { TalosAlertComponent } from '@weeehaoooz/talos-ui/feedback/alert';
|
|
60
|
+
|
|
61
|
+
@Component({
|
|
62
|
+
selector: 'app-root',
|
|
63
|
+
imports: [TalosButtonDirective, TalosAlertComponent],
|
|
64
|
+
template: `
|
|
65
|
+
<talos-alert type="success" title="Success">
|
|
66
|
+
Talos UI is installed and running!
|
|
67
|
+
</talos-alert>
|
|
68
|
+
|
|
69
|
+
<button talosButton variant="primary" (click)="onClick()">
|
|
70
|
+
Click Me
|
|
71
|
+
</button>
|
|
72
|
+
`
|
|
73
|
+
})
|
|
74
|
+
export class AppComponent {
|
|
75
|
+
onClick() {
|
|
76
|
+
console.log('Button clicked');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## License
|
|
84
|
+
|
|
85
|
+
MIT
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, input, signal, Directive, model, contentChildren, effect, Component, NgModule } from '@angular/core';
|
|
3
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
4
|
+
import { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';
|
|
5
|
+
import { TalosTooltipDirective, TalosTooltipComponent } from '@weeehaoooz/talos-ui/feedback/tooltip';
|
|
6
|
+
|
|
7
|
+
class TalosButtonGroupItemDirective {
|
|
8
|
+
elementRef = inject(ElementRef);
|
|
9
|
+
/** Value associated with this button item in selection mode */
|
|
10
|
+
value = input(undefined, /* @ts-ignore */
|
|
11
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
12
|
+
/** Explicit selected / active state override */
|
|
13
|
+
selected = signal(false, /* @ts-ignore */
|
|
14
|
+
...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
|
|
15
|
+
/** Focus target method */
|
|
16
|
+
focus() {
|
|
17
|
+
this.elementRef.nativeElement.focus();
|
|
18
|
+
}
|
|
19
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupItemDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
20
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosButtonGroupItemDirective, isStandalone: true, selector: "button[talosButtonGroupItem], a[talosButtonGroupItem], [talos-button-group-item]", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.is-selected": "selected()", "class.is-active": "selected()", "attr.aria-pressed": "selected() ? \"true\" : \"false\"" }, classAttribute: "talos-button-group-item" }, ngImport: i0 });
|
|
21
|
+
}
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupItemDirective, decorators: [{
|
|
23
|
+
type: Directive,
|
|
24
|
+
args: [{
|
|
25
|
+
selector: 'button[talosButtonGroupItem], a[talosButtonGroupItem], [talos-button-group-item]',
|
|
26
|
+
host: {
|
|
27
|
+
'class': 'talos-button-group-item',
|
|
28
|
+
'[class.is-selected]': 'selected()',
|
|
29
|
+
'[class.is-active]': 'selected()',
|
|
30
|
+
'[attr.aria-pressed]': 'selected() ? "true" : "false"'
|
|
31
|
+
}
|
|
32
|
+
}]
|
|
33
|
+
}], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }] } });
|
|
34
|
+
|
|
35
|
+
class TalosButtonGroupComponent {
|
|
36
|
+
elementRef = inject(ElementRef);
|
|
37
|
+
/** Layout orientation: horizontal or vertical */
|
|
38
|
+
orientation = input('horizontal', /* @ts-ignore */
|
|
39
|
+
...(ngDevMode ? [{ debugName: "orientation" }] : /* istanbul ignore next */ []));
|
|
40
|
+
/** Visual variant style */
|
|
41
|
+
variant = input('attached', /* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
43
|
+
/** Button size propagation */
|
|
44
|
+
size = input('md', /* @ts-ignore */
|
|
45
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
46
|
+
/** Selection behavior: none, single (radio), or multiple (checkbox) */
|
|
47
|
+
selectionMode = input('none', /* @ts-ignore */
|
|
48
|
+
...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
|
|
49
|
+
/** Model value for single or multiple selection */
|
|
50
|
+
value = model(undefined, /* @ts-ignore */
|
|
51
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
52
|
+
/** Apply fully rounded pill shape */
|
|
53
|
+
pill = input(false, /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "pill" }] : /* istanbul ignore next */ []));
|
|
55
|
+
/** Disable all buttons in group */
|
|
56
|
+
disabled = input(false, /* @ts-ignore */
|
|
57
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
58
|
+
/** Child items using TalosButtonGroupItemDirective */
|
|
59
|
+
items = contentChildren(TalosButtonGroupItemDirective, { ...(ngDevMode ? { debugName: "items" } : /* istanbul ignore next */ {}), descendants: true });
|
|
60
|
+
/** Child directives using TalosButtonDirective */
|
|
61
|
+
buttons = contentChildren(TalosButtonDirective, { ...(ngDevMode ? { debugName: "buttons" } : /* istanbul ignore next */ {}), descendants: true });
|
|
62
|
+
selectionModel = new SelectionModel(false, []);
|
|
63
|
+
constructor() {
|
|
64
|
+
// Sync SelectionModel mode when selectionMode changes
|
|
65
|
+
effect(() => {
|
|
66
|
+
const mode = this.selectionMode();
|
|
67
|
+
const isMulti = mode === 'multiple';
|
|
68
|
+
const currentVal = this.value();
|
|
69
|
+
const initial = currentVal !== undefined
|
|
70
|
+
? (Array.isArray(currentVal) ? currentVal : [currentVal])
|
|
71
|
+
: [];
|
|
72
|
+
this.selectionModel = new SelectionModel(isMulti, initial);
|
|
73
|
+
this.syncChildSelectionStates();
|
|
74
|
+
});
|
|
75
|
+
// Sync external model value changes to internal selection model
|
|
76
|
+
effect(() => {
|
|
77
|
+
const val = this.value();
|
|
78
|
+
if (val !== undefined && this.selectionMode() !== 'none') {
|
|
79
|
+
const selectedValues = Array.isArray(val) ? val : [val];
|
|
80
|
+
this.selectionModel.clear();
|
|
81
|
+
selectedValues.forEach(v => this.selectionModel.select(v));
|
|
82
|
+
this.syncChildSelectionStates();
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
// Propagate item selected state changes
|
|
86
|
+
effect(() => {
|
|
87
|
+
const childItems = this.items();
|
|
88
|
+
this.syncChildSelectionStates();
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
syncChildSelectionStates() {
|
|
92
|
+
const childItems = this.items();
|
|
93
|
+
if (!childItems || childItems.length === 0)
|
|
94
|
+
return;
|
|
95
|
+
childItems.forEach((item, index) => {
|
|
96
|
+
const itemVal = item.value() !== undefined ? item.value() : index;
|
|
97
|
+
const isSelected = this.selectionModel.isSelected(itemVal);
|
|
98
|
+
item.selected.set(isSelected);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
onClick(event) {
|
|
102
|
+
if (this.disabled())
|
|
103
|
+
return;
|
|
104
|
+
const mode = this.selectionMode();
|
|
105
|
+
if (mode === 'none')
|
|
106
|
+
return;
|
|
107
|
+
const target = event.target;
|
|
108
|
+
const buttonEl = target.closest('button, a');
|
|
109
|
+
if (!buttonEl)
|
|
110
|
+
return;
|
|
111
|
+
const childItems = this.items();
|
|
112
|
+
const childButtons = this.buttons();
|
|
113
|
+
// Match clicked button to item directive or index
|
|
114
|
+
let matchedValue = undefined;
|
|
115
|
+
let matchedItem = undefined;
|
|
116
|
+
if (childItems && childItems.length > 0) {
|
|
117
|
+
childItems.forEach((item, index) => {
|
|
118
|
+
if (item.elementRef.nativeElement === buttonEl || item.elementRef.nativeElement.contains(buttonEl)) {
|
|
119
|
+
matchedValue = item.value() !== undefined ? item.value() : index;
|
|
120
|
+
matchedItem = item;
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (matchedValue === undefined && childButtons && childButtons.length > 0) {
|
|
125
|
+
const allButtons = Array.from(this.elementRef.nativeElement.querySelectorAll('button, a'));
|
|
126
|
+
const index = allButtons.indexOf(buttonEl);
|
|
127
|
+
if (index !== -1) {
|
|
128
|
+
matchedValue = index;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (matchedValue !== undefined) {
|
|
132
|
+
if (mode === 'single') {
|
|
133
|
+
this.selectionModel.clear();
|
|
134
|
+
this.selectionModel.select(matchedValue);
|
|
135
|
+
this.value.set(matchedValue);
|
|
136
|
+
}
|
|
137
|
+
else if (mode === 'multiple') {
|
|
138
|
+
this.selectionModel.toggle(matchedValue);
|
|
139
|
+
this.value.set(this.selectionModel.selected);
|
|
140
|
+
}
|
|
141
|
+
this.syncChildSelectionStates();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
onKeydown(event) {
|
|
145
|
+
const isHoriz = this.orientation() === 'horizontal';
|
|
146
|
+
const focusableButtons = Array.from(this.elementRef.nativeElement.querySelectorAll('button:not([disabled]), a:not([disabled])'));
|
|
147
|
+
if (focusableButtons.length === 0)
|
|
148
|
+
return;
|
|
149
|
+
const activeEl = document.activeElement;
|
|
150
|
+
let currentIndex = focusableButtons.indexOf(activeEl);
|
|
151
|
+
if (currentIndex === -1)
|
|
152
|
+
return;
|
|
153
|
+
let targetIndex = -1;
|
|
154
|
+
if ((isHoriz && event.key === 'ArrowRight') || (!isHoriz && event.key === 'ArrowDown')) {
|
|
155
|
+
targetIndex = (currentIndex + 1) % focusableButtons.length;
|
|
156
|
+
}
|
|
157
|
+
else if ((isHoriz && event.key === 'ArrowLeft') || (!isHoriz && event.key === 'ArrowUp')) {
|
|
158
|
+
targetIndex = (currentIndex - 1 + focusableButtons.length) % focusableButtons.length;
|
|
159
|
+
}
|
|
160
|
+
else if (event.key === 'Home') {
|
|
161
|
+
targetIndex = 0;
|
|
162
|
+
}
|
|
163
|
+
else if (event.key === 'End') {
|
|
164
|
+
targetIndex = focusableButtons.length - 1;
|
|
165
|
+
}
|
|
166
|
+
if (targetIndex !== -1) {
|
|
167
|
+
event.preventDefault();
|
|
168
|
+
focusableButtons[targetIndex].focus();
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "22.1.1", type: TalosButtonGroupComponent, isStandalone: true, selector: "talos-button-group", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, pill: { classPropertyName: "pill", publicName: "pill", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, host: { listeners: { "keydown": "onKeydown($event)", "click": "onClick($event)" }, properties: { "class.talos-button-group-horizontal": "orientation() === \"horizontal\"", "class.talos-button-group-vertical": "orientation() === \"vertical\"", "class.talos-button-group-attached": "variant() === \"attached\"", "class.talos-button-group-segmented": "variant() === \"segmented\" || variant() === \"pill\"", "class.talos-button-group-outline": "variant() === \"outline\"", "class.talos-button-group-subtle": "variant() === \"subtle\"", "class.talos-button-group-pill": "pill() || variant() === \"pill\"", "class.talos-button-group-sm": "size() === \"sm\"", "class.talos-button-group-md": "size() === \"md\"", "class.talos-button-group-lg": "size() === \"lg\"", "attr.role": "selectionMode() !== \"none\" ? \"radiogroup\" : \"group\"", "attr.aria-orientation": "orientation()" }, classAttribute: "talos-button-group" }, queries: [{ propertyName: "items", predicate: TalosButtonGroupItemDirective, descendants: true, isSignal: true }, { propertyName: "buttons", predicate: TalosButtonDirective, descendants: true, isSignal: true }], ngImport: i0, template: `<ng-content></ng-content>`, isInline: true });
|
|
173
|
+
}
|
|
174
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupComponent, decorators: [{
|
|
175
|
+
type: Component,
|
|
176
|
+
args: [{
|
|
177
|
+
selector: 'talos-button-group',
|
|
178
|
+
template: `<ng-content></ng-content>`,
|
|
179
|
+
host: {
|
|
180
|
+
'class': 'talos-button-group',
|
|
181
|
+
'[class.talos-button-group-horizontal]': 'orientation() === "horizontal"',
|
|
182
|
+
'[class.talos-button-group-vertical]': 'orientation() === "vertical"',
|
|
183
|
+
'[class.talos-button-group-attached]': 'variant() === "attached"',
|
|
184
|
+
'[class.talos-button-group-segmented]': 'variant() === "segmented" || variant() === "pill"',
|
|
185
|
+
'[class.talos-button-group-outline]': 'variant() === "outline"',
|
|
186
|
+
'[class.talos-button-group-subtle]': 'variant() === "subtle"',
|
|
187
|
+
'[class.talos-button-group-pill]': 'pill() || variant() === "pill"',
|
|
188
|
+
'[class.talos-button-group-sm]': 'size() === "sm"',
|
|
189
|
+
'[class.talos-button-group-md]': 'size() === "md"',
|
|
190
|
+
'[class.talos-button-group-lg]': 'size() === "lg"',
|
|
191
|
+
'[attr.role]': 'selectionMode() !== "none" ? "radiogroup" : "group"',
|
|
192
|
+
'[attr.aria-orientation]': 'orientation()',
|
|
193
|
+
'(keydown)': 'onKeydown($event)',
|
|
194
|
+
'(click)': 'onClick($event)'
|
|
195
|
+
}
|
|
196
|
+
}]
|
|
197
|
+
}], ctorParameters: () => [], propDecorators: { orientation: [{ type: i0.Input, args: [{ isSignal: true, alias: "orientation", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], pill: [{ type: i0.Input, args: [{ isSignal: true, alias: "pill", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TalosButtonGroupItemDirective), { ...{ descendants: true }, isSignal: true }] }], buttons: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => TalosButtonDirective), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
198
|
+
|
|
199
|
+
class TalosButtonGroupModule {
|
|
200
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
201
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupModule, imports: [TalosButtonGroupComponent,
|
|
202
|
+
TalosButtonGroupItemDirective,
|
|
203
|
+
TalosTooltipDirective,
|
|
204
|
+
TalosTooltipComponent,
|
|
205
|
+
TalosButtonDirective], exports: [TalosButtonGroupComponent,
|
|
206
|
+
TalosButtonGroupItemDirective,
|
|
207
|
+
TalosTooltipDirective,
|
|
208
|
+
TalosTooltipComponent,
|
|
209
|
+
TalosButtonDirective] });
|
|
210
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupModule, imports: [TalosTooltipComponent] });
|
|
211
|
+
}
|
|
212
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonGroupModule, decorators: [{
|
|
213
|
+
type: NgModule,
|
|
214
|
+
args: [{
|
|
215
|
+
imports: [
|
|
216
|
+
TalosButtonGroupComponent,
|
|
217
|
+
TalosButtonGroupItemDirective,
|
|
218
|
+
TalosTooltipDirective,
|
|
219
|
+
TalosTooltipComponent,
|
|
220
|
+
TalosButtonDirective
|
|
221
|
+
],
|
|
222
|
+
exports: [
|
|
223
|
+
TalosButtonGroupComponent,
|
|
224
|
+
TalosButtonGroupItemDirective,
|
|
225
|
+
TalosTooltipDirective,
|
|
226
|
+
TalosTooltipComponent,
|
|
227
|
+
TalosButtonDirective
|
|
228
|
+
]
|
|
229
|
+
}]
|
|
230
|
+
}] });
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* Generated bundle index. Do not edit.
|
|
234
|
+
*/
|
|
235
|
+
|
|
236
|
+
export { TalosButtonGroupComponent, TalosButtonGroupItemDirective, TalosButtonGroupModule };
|
|
237
|
+
//# sourceMappingURL=weeehaoooz-talos-ui-button-button-group.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weeehaoooz-talos-ui-button-button-group.mjs","sources":["../../../projects/talos-ui/button/button-group/button-group-item/button-group-item.directive.ts","../../../projects/talos-ui/button/button-group/button-group/button-group.component.ts","../../../projects/talos-ui/button/button-group/button-group.module.ts","../../../projects/talos-ui/button/button-group/weeehaoooz-talos-ui-button-button-group.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input, signal } from '@angular/core';\n\n@Directive({\n selector: 'button[talosButtonGroupItem], a[talosButtonGroupItem], [talos-button-group-item]',\n host: {\n 'class': 'talos-button-group-item',\n '[class.is-selected]': 'selected()',\n '[class.is-active]': 'selected()',\n '[attr.aria-pressed]': 'selected() ? \"true\" : \"false\"'\n }\n})\nexport class TalosButtonGroupItemDirective {\n readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Value associated with this button item in selection mode */\n readonly value = input<any>(undefined);\n\n /** Explicit selected / active state override */\n readonly selected = signal<boolean>(false);\n\n /** Focus target method */\n focus(): void {\n this.elementRef.nativeElement.focus();\n }\n}\n","import {\n Component,\n ElementRef,\n inject,\n input,\n model,\n contentChildren,\n effect,\n HostListener\n} from '@angular/core';\nimport { SelectionModel } from '@angular/cdk/collections';\nimport { TalosButtonDirective, ButtonSize } from '@weeehaoooz/talos-ui/button/button';\n\nimport { TalosButtonGroupItemDirective } from '../button-group-item/button-group-item.directive';\n\nexport type ButtonGroupOrientation = 'horizontal' | 'vertical';\nexport type ButtonGroupVariant = 'attached' | 'segmented' | 'outline' | 'subtle' | 'pill';\nexport type ButtonGroupSelectionMode = 'none' | 'single' | 'multiple';\n\n@Component({\n selector: 'talos-button-group',\n template: `<ng-content></ng-content>`,\n host: {\n 'class': 'talos-button-group',\n '[class.talos-button-group-horizontal]': 'orientation() === \"horizontal\"',\n '[class.talos-button-group-vertical]': 'orientation() === \"vertical\"',\n '[class.talos-button-group-attached]': 'variant() === \"attached\"',\n '[class.talos-button-group-segmented]': 'variant() === \"segmented\" || variant() === \"pill\"',\n '[class.talos-button-group-outline]': 'variant() === \"outline\"',\n '[class.talos-button-group-subtle]': 'variant() === \"subtle\"',\n '[class.talos-button-group-pill]': 'pill() || variant() === \"pill\"',\n '[class.talos-button-group-sm]': 'size() === \"sm\"',\n '[class.talos-button-group-md]': 'size() === \"md\"',\n '[class.talos-button-group-lg]': 'size() === \"lg\"',\n '[attr.role]': 'selectionMode() !== \"none\" ? \"radiogroup\" : \"group\"',\n '[attr.aria-orientation]': 'orientation()',\n '(keydown)': 'onKeydown($event)',\n '(click)': 'onClick($event)'\n }\n})\nexport class TalosButtonGroupComponent {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Layout orientation: horizontal or vertical */\n readonly orientation = input<ButtonGroupOrientation>('horizontal');\n\n /** Visual variant style */\n readonly variant = input<ButtonGroupVariant>('attached');\n\n /** Button size propagation */\n readonly size = input<ButtonSize>('md');\n\n /** Selection behavior: none, single (radio), or multiple (checkbox) */\n readonly selectionMode = input<ButtonGroupSelectionMode>('none');\n\n /** Model value for single or multiple selection */\n readonly value = model<any>(undefined);\n\n /** Apply fully rounded pill shape */\n readonly pill = input<boolean>(false);\n\n /** Disable all buttons in group */\n readonly disabled = input<boolean>(false);\n\n /** Child items using TalosButtonGroupItemDirective */\n readonly items = contentChildren(TalosButtonGroupItemDirective, { descendants: true });\n\n /** Child directives using TalosButtonDirective */\n readonly buttons = contentChildren(TalosButtonDirective, { descendants: true });\n\n private selectionModel = new SelectionModel<any>(false, []);\n\n constructor() {\n // Sync SelectionModel mode when selectionMode changes\n effect(() => {\n const mode = this.selectionMode();\n const isMulti = mode === 'multiple';\n const currentVal = this.value();\n\n const initial = currentVal !== undefined\n ? (Array.isArray(currentVal) ? currentVal : [currentVal])\n : [];\n\n this.selectionModel = new SelectionModel<any>(isMulti, initial);\n this.syncChildSelectionStates();\n });\n\n // Sync external model value changes to internal selection model\n effect(() => {\n const val = this.value();\n if (val !== undefined && this.selectionMode() !== 'none') {\n const selectedValues = Array.isArray(val) ? val : [val];\n this.selectionModel.clear();\n selectedValues.forEach(v => this.selectionModel.select(v));\n this.syncChildSelectionStates();\n }\n });\n\n // Propagate item selected state changes\n effect(() => {\n const childItems = this.items();\n this.syncChildSelectionStates();\n });\n }\n\n private syncChildSelectionStates(): void {\n const childItems = this.items();\n if (!childItems || childItems.length === 0) return;\n\n childItems.forEach((item, index) => {\n const itemVal = item.value() !== undefined ? item.value() : index;\n const isSelected = this.selectionModel.isSelected(itemVal);\n item.selected.set(isSelected);\n });\n }\n\n onClick(event: MouseEvent): void {\n if (this.disabled()) return;\n const mode = this.selectionMode();\n if (mode === 'none') return;\n\n const target = event.target as HTMLElement;\n const buttonEl = target.closest('button, a') as HTMLElement;\n if (!buttonEl) return;\n\n const childItems = this.items();\n const childButtons = this.buttons();\n\n // Match clicked button to item directive or index\n let matchedValue: any = undefined;\n let matchedItem: TalosButtonGroupItemDirective | undefined = undefined;\n\n if (childItems && childItems.length > 0) {\n childItems.forEach((item, index) => {\n if (item.elementRef.nativeElement === buttonEl || item.elementRef.nativeElement.contains(buttonEl)) {\n matchedValue = item.value() !== undefined ? item.value() : index;\n matchedItem = item;\n }\n });\n }\n\n if (matchedValue === undefined && childButtons && childButtons.length > 0) {\n const allButtons = Array.from(this.elementRef.nativeElement.querySelectorAll('button, a'));\n const index = allButtons.indexOf(buttonEl);\n if (index !== -1) {\n matchedValue = index;\n }\n }\n\n if (matchedValue !== undefined) {\n if (mode === 'single') {\n this.selectionModel.clear();\n this.selectionModel.select(matchedValue);\n this.value.set(matchedValue);\n } else if (mode === 'multiple') {\n this.selectionModel.toggle(matchedValue);\n this.value.set(this.selectionModel.selected);\n }\n this.syncChildSelectionStates();\n }\n }\n\n onKeydown(event: KeyboardEvent): void {\n const isHoriz = this.orientation() === 'horizontal';\n const focusableButtons = Array.from(\n this.elementRef.nativeElement.querySelectorAll<HTMLButtonElement | HTMLAnchorElement>('button:not([disabled]), a:not([disabled])')\n );\n\n if (focusableButtons.length === 0) return;\n\n const activeEl = document.activeElement as HTMLElement;\n let currentIndex = focusableButtons.indexOf(activeEl as any);\n\n if (currentIndex === -1) return;\n\n let targetIndex = -1;\n\n if ((isHoriz && event.key === 'ArrowRight') || (!isHoriz && event.key === 'ArrowDown')) {\n targetIndex = (currentIndex + 1) % focusableButtons.length;\n } else if ((isHoriz && event.key === 'ArrowLeft') || (!isHoriz && event.key === 'ArrowUp')) {\n targetIndex = (currentIndex - 1 + focusableButtons.length) % focusableButtons.length;\n } else if (event.key === 'Home') {\n targetIndex = 0;\n } else if (event.key === 'End') {\n targetIndex = focusableButtons.length - 1;\n }\n\n if (targetIndex !== -1) {\n event.preventDefault();\n focusableButtons[targetIndex].focus();\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { TalosButtonGroupComponent } from './button-group/button-group.component';\nimport { TalosButtonGroupItemDirective } from './button-group-item/button-group-item.directive';\nimport { TalosTooltipDirective, TalosTooltipComponent } from '@weeehaoooz/talos-ui/feedback/tooltip';\nimport { TalosButtonDirective } from '@weeehaoooz/talos-ui/button/button';\n\n@NgModule({\n imports: [\n TalosButtonGroupComponent,\n TalosButtonGroupItemDirective,\n TalosTooltipDirective,\n TalosTooltipComponent,\n TalosButtonDirective\n ],\n exports: [\n TalosButtonGroupComponent,\n TalosButtonGroupItemDirective,\n TalosTooltipDirective,\n TalosTooltipComponent,\n TalosButtonDirective\n ]\n})\nexport class TalosButtonGroupModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, ElementRef, input, Directive } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
class TalosButtonDirective {
|
|
5
|
+
elementRef = inject(ElementRef);
|
|
6
|
+
/** Button visual style variant */
|
|
7
|
+
variant = input('primary', /* @ts-ignore */
|
|
8
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
9
|
+
/** Button size variant */
|
|
10
|
+
size = input('md', /* @ts-ignore */
|
|
11
|
+
...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
|
|
12
|
+
/** Whether button has square aspect ratio for icon-only display */
|
|
13
|
+
iconOnly = input(false, /* @ts-ignore */
|
|
14
|
+
...(ngDevMode ? [{ debugName: "iconOnly" }] : /* istanbul ignore next */ []));
|
|
15
|
+
/** Expand button to fill 100% width of parent container */
|
|
16
|
+
fullWidth = input(false, /* @ts-ignore */
|
|
17
|
+
...(ngDevMode ? [{ debugName: "fullWidth" }] : /* istanbul ignore next */ []));
|
|
18
|
+
/** Apply fully rounded pill shape */
|
|
19
|
+
pill = input(false, /* @ts-ignore */
|
|
20
|
+
...(ngDevMode ? [{ debugName: "pill" }] : /* istanbul ignore next */ []));
|
|
21
|
+
/** Show loading spinner and disable interactive events */
|
|
22
|
+
loading = input(false, /* @ts-ignore */
|
|
23
|
+
...(ngDevMode ? [{ debugName: "loading" }] : /* istanbul ignore next */ []));
|
|
24
|
+
/** Disable button interaction */
|
|
25
|
+
disabled = input(false, /* @ts-ignore */
|
|
26
|
+
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
27
|
+
/** Micro-interaction animation preset to apply */
|
|
28
|
+
animation = input('none', /* @ts-ignore */
|
|
29
|
+
...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
|
|
30
|
+
/** Convenience boolean signal for spinning icon / continuous refresh state */
|
|
31
|
+
spinning = input(false, /* @ts-ignore */
|
|
32
|
+
...(ngDevMode ? [{ debugName: "spinning" }] : /* istanbul ignore next */ []));
|
|
33
|
+
/** Convenience boolean signal for pop / scale bounce feedback */
|
|
34
|
+
popping = input(false, /* @ts-ignore */
|
|
35
|
+
...(ngDevMode ? [{ debugName: "popping" }] : /* istanbul ignore next */ []));
|
|
36
|
+
/** Contextual temporary feedback state (e.g. green success pop or red error shake) */
|
|
37
|
+
feedback = input(null, /* @ts-ignore */
|
|
38
|
+
...(ngDevMode ? [{ debugName: "feedback" }] : /* istanbul ignore next */ []));
|
|
39
|
+
onPointerDown(event) {
|
|
40
|
+
if (this.disabled() || this.loading())
|
|
41
|
+
return;
|
|
42
|
+
const pe = event;
|
|
43
|
+
const el = this.elementRef.nativeElement;
|
|
44
|
+
const rect = el.getBoundingClientRect();
|
|
45
|
+
const x = pe.clientX - rect.left;
|
|
46
|
+
const y = pe.clientY - rect.top;
|
|
47
|
+
el.style.setProperty('--ripple-x', `${x}px`);
|
|
48
|
+
el.style.setProperty('--ripple-y', `${y}px`);
|
|
49
|
+
}
|
|
50
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
51
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.1.1", type: TalosButtonDirective, isStandalone: true, selector: "button[talosButton], a[talosButton], button[talos-btn], a[talos-btn]", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, iconOnly: { classPropertyName: "iconOnly", publicName: "iconOnly", isSignal: true, isRequired: false, transformFunction: null }, fullWidth: { classPropertyName: "fullWidth", publicName: "fullWidth", isSignal: true, isRequired: false, transformFunction: null }, pill: { classPropertyName: "pill", publicName: "pill", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, animation: { classPropertyName: "animation", publicName: "animation", isSignal: true, isRequired: false, transformFunction: null }, spinning: { classPropertyName: "spinning", publicName: "spinning", isSignal: true, isRequired: false, transformFunction: null }, popping: { classPropertyName: "popping", publicName: "popping", isSignal: true, isRequired: false, transformFunction: null }, feedback: { classPropertyName: "feedback", publicName: "feedback", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "pointerdown": "onPointerDown($event)" }, properties: { "class.talos-btn-primary": "variant() === \"primary\"", "class.talos-btn-secondary": "variant() === \"secondary\"", "class.talos-btn-outline": "variant() === \"outline\"", "class.talos-btn-ghost": "variant() === \"ghost\" || variant() === \"subtle\"", "class.talos-btn-danger": "variant() === \"danger\"", "class.talos-btn-success": "variant() === \"success\"", "class.talos-btn-link": "variant() === \"link\"", "class.talos-btn-sm": "size() === \"sm\"", "class.talos-btn-md": "size() === \"md\"", "class.talos-btn-lg": "size() === \"lg\"", "class.talos-btn-icon": "iconOnly()", "class.talos-btn-full": "fullWidth()", "class.talos-btn-pill": "pill()", "class.is-loading": "loading()", "class.talos-anim-spin": "animation() === \"spin\" || spinning()", "class.talos-anim-spin-once": "animation() === \"spin-once\"", "class.talos-anim-pop": "animation() === \"pop\" || popping()", "class.talos-anim-shake": "animation() === \"shake\"", "class.talos-anim-pulse": "animation() === \"pulse\"", "class.talos-anim-bounce": "animation() === \"bounce\"", "class.talos-feedback-success": "feedback() === \"success\"", "class.talos-feedback-error": "feedback() === \"error\"", "attr.disabled": "(disabled() || loading()) ? true : null", "attr.aria-disabled": "(disabled() || loading()) ? \"true\" : null" }, classAttribute: "talos-btn" }, ngImport: i0 });
|
|
52
|
+
}
|
|
53
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.1", ngImport: i0, type: TalosButtonDirective, decorators: [{
|
|
54
|
+
type: Directive,
|
|
55
|
+
args: [{
|
|
56
|
+
selector: 'button[talosButton], a[talosButton], button[talos-btn], a[talos-btn]',
|
|
57
|
+
host: {
|
|
58
|
+
'class': 'talos-btn',
|
|
59
|
+
'[class.talos-btn-primary]': 'variant() === "primary"',
|
|
60
|
+
'[class.talos-btn-secondary]': 'variant() === "secondary"',
|
|
61
|
+
'[class.talos-btn-outline]': 'variant() === "outline"',
|
|
62
|
+
'[class.talos-btn-ghost]': 'variant() === "ghost" || variant() === "subtle"',
|
|
63
|
+
'[class.talos-btn-danger]': 'variant() === "danger"',
|
|
64
|
+
'[class.talos-btn-success]': 'variant() === "success"',
|
|
65
|
+
'[class.talos-btn-link]': 'variant() === "link"',
|
|
66
|
+
'[class.talos-btn-sm]': 'size() === "sm"',
|
|
67
|
+
'[class.talos-btn-md]': 'size() === "md"',
|
|
68
|
+
'[class.talos-btn-lg]': 'size() === "lg"',
|
|
69
|
+
'[class.talos-btn-icon]': 'iconOnly()',
|
|
70
|
+
'[class.talos-btn-full]': 'fullWidth()',
|
|
71
|
+
'[class.talos-btn-pill]': 'pill()',
|
|
72
|
+
'[class.is-loading]': 'loading()',
|
|
73
|
+
'[class.talos-anim-spin]': 'animation() === "spin" || spinning()',
|
|
74
|
+
'[class.talos-anim-spin-once]': 'animation() === "spin-once"',
|
|
75
|
+
'[class.talos-anim-pop]': 'animation() === "pop" || popping()',
|
|
76
|
+
'[class.talos-anim-shake]': 'animation() === "shake"',
|
|
77
|
+
'[class.talos-anim-pulse]': 'animation() === "pulse"',
|
|
78
|
+
'[class.talos-anim-bounce]': 'animation() === "bounce"',
|
|
79
|
+
'[class.talos-feedback-success]': 'feedback() === "success"',
|
|
80
|
+
'[class.talos-feedback-error]': 'feedback() === "error"',
|
|
81
|
+
'[attr.disabled]': '(disabled() || loading()) ? true : null',
|
|
82
|
+
'[attr.aria-disabled]': '(disabled() || loading()) ? "true" : null',
|
|
83
|
+
'(pointerdown)': 'onPointerDown($event)'
|
|
84
|
+
}
|
|
85
|
+
}]
|
|
86
|
+
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], iconOnly: [{ type: i0.Input, args: [{ isSignal: true, alias: "iconOnly", required: false }] }], fullWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "fullWidth", required: false }] }], pill: [{ type: i0.Input, args: [{ isSignal: true, alias: "pill", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], animation: [{ type: i0.Input, args: [{ isSignal: true, alias: "animation", required: false }] }], spinning: [{ type: i0.Input, args: [{ isSignal: true, alias: "spinning", required: false }] }], popping: [{ type: i0.Input, args: [{ isSignal: true, alias: "popping", required: false }] }], feedback: [{ type: i0.Input, args: [{ isSignal: true, alias: "feedback", required: false }] }] } });
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Generated bundle index. Do not edit.
|
|
90
|
+
*/
|
|
91
|
+
|
|
92
|
+
export { TalosButtonDirective };
|
|
93
|
+
//# sourceMappingURL=weeehaoooz-talos-ui-button-button.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"weeehaoooz-talos-ui-button-button.mjs","sources":["../../../projects/talos-ui/button/button/button.directive.ts","../../../projects/talos-ui/button/button/weeehaoooz-talos-ui-button-button.ts"],"sourcesContent":["import { Directive, ElementRef, inject, input } from '@angular/core';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'outline' | 'ghost' | 'subtle' | 'danger' | 'success' | 'link';\nexport type ButtonSize = 'sm' | 'md' | 'lg';\nexport type ButtonAnimation = 'spin' | 'spin-once' | 'pop' | 'shake' | 'pulse' | 'bounce' | 'none';\nexport type ButtonFeedbackState = 'success' | 'error' | null;\n\n@Directive({\n selector: 'button[talosButton], a[talosButton], button[talos-btn], a[talos-btn]',\n host: {\n 'class': 'talos-btn',\n '[class.talos-btn-primary]': 'variant() === \"primary\"',\n '[class.talos-btn-secondary]': 'variant() === \"secondary\"',\n '[class.talos-btn-outline]': 'variant() === \"outline\"',\n '[class.talos-btn-ghost]': 'variant() === \"ghost\" || variant() === \"subtle\"',\n '[class.talos-btn-danger]': 'variant() === \"danger\"',\n '[class.talos-btn-success]': 'variant() === \"success\"',\n '[class.talos-btn-link]': 'variant() === \"link\"',\n '[class.talos-btn-sm]': 'size() === \"sm\"',\n '[class.talos-btn-md]': 'size() === \"md\"',\n '[class.talos-btn-lg]': 'size() === \"lg\"',\n '[class.talos-btn-icon]': 'iconOnly()',\n '[class.talos-btn-full]': 'fullWidth()',\n '[class.talos-btn-pill]': 'pill()',\n '[class.is-loading]': 'loading()',\n '[class.talos-anim-spin]': 'animation() === \"spin\" || spinning()',\n '[class.talos-anim-spin-once]': 'animation() === \"spin-once\"',\n '[class.talos-anim-pop]': 'animation() === \"pop\" || popping()',\n '[class.talos-anim-shake]': 'animation() === \"shake\"',\n '[class.talos-anim-pulse]': 'animation() === \"pulse\"',\n '[class.talos-anim-bounce]': 'animation() === \"bounce\"',\n '[class.talos-feedback-success]': 'feedback() === \"success\"',\n '[class.talos-feedback-error]': 'feedback() === \"error\"',\n '[attr.disabled]': '(disabled() || loading()) ? true : null',\n '[attr.aria-disabled]': '(disabled() || loading()) ? \"true\" : null',\n '(pointerdown)': 'onPointerDown($event)'\n }\n})\nexport class TalosButtonDirective {\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Button visual style variant */\n readonly variant = input<ButtonVariant>('primary');\n\n /** Button size variant */\n readonly size = input<ButtonSize>('md');\n\n /** Whether button has square aspect ratio for icon-only display */\n readonly iconOnly = input<boolean>(false);\n\n /** Expand button to fill 100% width of parent container */\n readonly fullWidth = input<boolean>(false);\n\n /** Apply fully rounded pill shape */\n readonly pill = input<boolean>(false);\n\n /** Show loading spinner and disable interactive events */\n readonly loading = input<boolean>(false);\n\n /** Disable button interaction */\n readonly disabled = input<boolean>(false);\n\n /** Micro-interaction animation preset to apply */\n readonly animation = input<ButtonAnimation>('none');\n\n /** Convenience boolean signal for spinning icon / continuous refresh state */\n readonly spinning = input<boolean>(false);\n\n /** Convenience boolean signal for pop / scale bounce feedback */\n readonly popping = input<boolean>(false);\n\n /** Contextual temporary feedback state (e.g. green success pop or red error shake) */\n readonly feedback = input<ButtonFeedbackState>(null);\n\n onPointerDown(event: Event): void {\n if (this.disabled() || this.loading()) return;\n const pe = event as PointerEvent;\n const el = this.elementRef.nativeElement;\n const rect = el.getBoundingClientRect();\n const x = pe.clientX - rect.left;\n const y = pe.clientY - rect.top;\n el.style.setProperty('--ripple-x', `${x}px`);\n el.style.setProperty('--ripple-y', `${y}px`);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|