@raintonic/formaui 0.2.0 → 0.2.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 +7 -7
- package/README.md +145 -145
- package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs +0 -26
- package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +2 -2
- package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-accordion.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-badge.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-big-menu.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-checkbox.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-date-picker.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-divider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-drawer.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-empty-state.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-file-upload.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-list.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-menu.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-number-input.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-paginator.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-password-input.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-popover.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-radio.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-select.mjs +24 -24
- package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-side-panel.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-sidebar.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-skeleton.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-slider.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-spinner.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-stepper.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tab.mjs +10 -10
- package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tag.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tag.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-time-picker.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-select.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree-table.mjs +2 -2
- package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-components-tree.mjs +4 -4
- package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-core.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-dialog.mjs +36 -36
- package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-notification.mjs +2 -2
- package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -1
- package/fesm2022/raintonic-formaui-test-utils.mjs.map +1 -1
- package/fesm2022/raintonic-formaui.mjs.map +1 -1
- package/llms-full.txt +3 -97
- package/llms.txt +3 -3
- package/package.json +1 -1
- package/styles/index.scss +3 -3
- package/styles/partials/components/_button.scss +367 -0
- package/styles/partials/components/_dialog.scss +180 -0
- package/styles/partials/components/_overlay.scss +87 -0
- package/types/raintonic-formaui-cdk-overlay.d.ts +0 -1
- package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to FormaUI will be documented in this file.
|
|
4
|
-
|
|
5
|
-
## [0.1.0] - Unreleased
|
|
6
|
-
|
|
7
|
-
- Initial standalone release
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to FormaUI will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [0.1.0] - Unreleased
|
|
6
|
+
|
|
7
|
+
- Initial standalone release
|
package/README.md
CHANGED
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
# FormaUI
|
|
2
|
-
|
|
3
|
-
A modern, standalone Angular UI component library with built-in theming, CDK primitives, and tree-shakable imports.
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/formaui)
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
[](https://angular.dev)
|
|
8
|
-
|
|
9
|
-
## Features
|
|
10
|
-
|
|
11
|
-
- **45 standalone components** — no NgModules, just import and use
|
|
12
|
-
- **Tree-shakable** — secondary entry points via ng-packagr, import only what you need
|
|
13
|
-
- **Theming system** — CSS custom properties with light/dark themes out of the box
|
|
14
|
-
- **CDK layer** — overlay/portal system, drag-drop, virtual-scroll, form-field primitives
|
|
15
|
-
- **Signals-first** — reactive state management with Angular signals
|
|
16
|
-
- **Accessible** — built-in a11y support with testing utilities (axe-core)
|
|
17
|
-
- **Form integration** — components implement `RtFormFieldControl` for seamless `fui-form-field` integration
|
|
18
|
-
|
|
19
|
-
## Installation
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
npm install formaui
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
### Peer Dependencies
|
|
26
|
-
|
|
27
|
-
```json
|
|
28
|
-
{
|
|
29
|
-
"@angular/common": "^21.0.0",
|
|
30
|
-
"@angular/core": "^21.0.0",
|
|
31
|
-
"@angular/forms": "^21.0.0"
|
|
32
|
-
}
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
## Setup
|
|
36
|
-
|
|
37
|
-
Import the base styles in your `styles.scss`:
|
|
38
|
-
|
|
39
|
-
```scss
|
|
40
|
-
@use '@raintonic/formaui/styles' as fui;
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Usage
|
|
44
|
-
|
|
45
|
-
All imports use secondary entry points:
|
|
46
|
-
|
|
47
|
-
```typescript
|
|
48
|
-
import { ButtonDirective } from '@raintonic/formaui/components/button';
|
|
49
|
-
import { RtFormFieldComponent } from '@raintonic/formaui/components/form-field';
|
|
50
|
-
import { InputDirective } from '@raintonic/formaui/components/input';
|
|
51
|
-
import { ThemeService } from '@raintonic/formaui/services/theme';
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Button
|
|
55
|
-
|
|
56
|
-
```html
|
|
57
|
-
<button fui-button variant="primary">Save</button>
|
|
58
|
-
<button fui-button variant="outlined">Cancel</button>
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Form Field
|
|
62
|
-
|
|
63
|
-
```html
|
|
64
|
-
<fui-form-field>
|
|
65
|
-
<fui-label>Email</fui-label>
|
|
66
|
-
<input fuiInput type="email" />
|
|
67
|
-
</fui-form-field>
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
### Theme Switching
|
|
71
|
-
|
|
72
|
-
```typescript
|
|
73
|
-
import { ThemeService } from '@raintonic/formaui/services/theme';
|
|
74
|
-
|
|
75
|
-
export class AppComponent {
|
|
76
|
-
private theme = inject(ThemeService);
|
|
77
|
-
|
|
78
|
-
toggleDark() {
|
|
79
|
-
this.theme.toggleTheme();
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
## Components
|
|
85
|
-
|
|
86
|
-
All components use the `fui` prefix and are standalone.
|
|
87
|
-
|
|
88
|
-
| Category | Components |
|
|
89
|
-
|---|---|
|
|
90
|
-
| **Forms** | `autocomplete` `checkbox` `date-picker` `dynamic-form` `file-upload` `form-field` `input` `number-input` `password-input` `radio` `select` `slider` `time-picker` `toggle` `tree-select` |
|
|
91
|
-
| **Data** | `data-table` `list` `paginator` `tree` `tree-table` |
|
|
92
|
-
| **Layout** | `accordion` `card` `divider` `sidebar` `side-panel` `tab` `toolbar` |
|
|
93
|
-
| **Navigation** | `breadcrumb` `menu` `big-menu` `stepper` |
|
|
94
|
-
| **Feedback** | `alert` `badge` `empty-state` `progressbar` `skeleton` `spinner` `tag` `tooltip` |
|
|
95
|
-
| **Actions** | `button` `button-group` `drawer` `popover` |
|
|
96
|
-
| **Display** | `avatar` `icon` |
|
|
97
|
-
|
|
98
|
-
### Import Pattern
|
|
99
|
-
|
|
100
|
-
```typescript
|
|
101
|
-
import { <Component> } from '@raintonic/formaui/components/<name>';
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
## CDK
|
|
105
|
-
|
|
106
|
-
Low-level primitives for building custom components.
|
|
107
|
-
|
|
108
|
-
| Module | Description |
|
|
109
|
-
|---|---|
|
|
110
|
-
| `formaui/cdk/overlay` | Overlay and portal positioning system |
|
|
111
|
-
| `formaui/cdk/drag-drop` | Drag and drop functionality |
|
|
112
|
-
| `formaui/cdk/virtual-scroll` | Virtual scrolling for large lists |
|
|
113
|
-
| `formaui/cdk/form-field` | Form field infrastructure and control interface |
|
|
114
|
-
|
|
115
|
-
## Services
|
|
116
|
-
|
|
117
|
-
| Service | Import | Description |
|
|
118
|
-
|---|---|---|
|
|
119
|
-
| **Dialog** | `formaui/services/dialog` | Modal dialog management |
|
|
120
|
-
| **Notification** | `formaui/services/notification` | Toast notifications |
|
|
121
|
-
| **Theme** | `formaui/services/theme` | Runtime theme switching |
|
|
122
|
-
|
|
123
|
-
## Theming
|
|
124
|
-
|
|
125
|
-
FormaUI uses CSS custom properties (`--fui-*`) for all design tokens. Two themes are included:
|
|
126
|
-
|
|
127
|
-
- **Light** (default) — applied to `:root`
|
|
128
|
-
- **Dark** — toggled via `ThemeService`
|
|
129
|
-
|
|
130
|
-
Tokens cover spacing, typography, colors, motion, and elevation. Override any `--fui-*` variable to customize.
|
|
131
|
-
|
|
132
|
-
## Development
|
|
133
|
-
|
|
134
|
-
```bash
|
|
135
|
-
npm run build:lib # Build the library
|
|
136
|
-
npm test # Run tests (Jest)
|
|
137
|
-
npm run lint # Lint
|
|
138
|
-
npm run serve:docs # Serve docs app locally
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
Requires Node >= 22.16.0.
|
|
142
|
-
|
|
143
|
-
## License
|
|
144
|
-
|
|
145
|
-
[MIT](https://opensource.org/licenses/MIT)
|
|
1
|
+
# FormaUI
|
|
2
|
+
|
|
3
|
+
A modern, standalone Angular UI component library with built-in theming, CDK primitives, and tree-shakable imports.
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/@raintonic/formaui)
|
|
6
|
+
[](https://opensource.org/licenses/MIT)
|
|
7
|
+
[](https://angular.dev)
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **45 standalone components** — no NgModules, just import and use
|
|
12
|
+
- **Tree-shakable** — secondary entry points via ng-packagr, import only what you need
|
|
13
|
+
- **Theming system** — CSS custom properties with light/dark themes out of the box
|
|
14
|
+
- **CDK layer** — overlay/portal system, drag-drop, virtual-scroll, form-field primitives
|
|
15
|
+
- **Signals-first** — reactive state management with Angular signals
|
|
16
|
+
- **Accessible** — built-in a11y support with testing utilities (axe-core)
|
|
17
|
+
- **Form integration** — components implement `RtFormFieldControl` for seamless `fui-form-field` integration
|
|
18
|
+
|
|
19
|
+
## Installation
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @raintonic/formaui
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Peer Dependencies
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"@angular/common": "^21.0.0",
|
|
30
|
+
"@angular/core": "^21.0.0",
|
|
31
|
+
"@angular/forms": "^21.0.0"
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Setup
|
|
36
|
+
|
|
37
|
+
Import the base styles in your `styles.scss`:
|
|
38
|
+
|
|
39
|
+
```scss
|
|
40
|
+
@use '@raintonic/formaui/styles' as fui;
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Usage
|
|
44
|
+
|
|
45
|
+
All imports use secondary entry points:
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { ButtonDirective } from '@raintonic/formaui/components/button';
|
|
49
|
+
import { RtFormFieldComponent } from '@raintonic/formaui/components/form-field';
|
|
50
|
+
import { InputDirective } from '@raintonic/formaui/components/input';
|
|
51
|
+
import { ThemeService } from '@raintonic/formaui/services/theme';
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Button
|
|
55
|
+
|
|
56
|
+
```html
|
|
57
|
+
<button fui-button variant="primary">Save</button>
|
|
58
|
+
<button fui-button variant="outlined">Cancel</button>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Form Field
|
|
62
|
+
|
|
63
|
+
```html
|
|
64
|
+
<fui-form-field>
|
|
65
|
+
<fui-label>Email</fui-label>
|
|
66
|
+
<input fuiInput type="email" />
|
|
67
|
+
</fui-form-field>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Theme Switching
|
|
71
|
+
|
|
72
|
+
```typescript
|
|
73
|
+
import { ThemeService } from '@raintonic/formaui/services/theme';
|
|
74
|
+
|
|
75
|
+
export class AppComponent {
|
|
76
|
+
private theme = inject(ThemeService);
|
|
77
|
+
|
|
78
|
+
toggleDark() {
|
|
79
|
+
this.theme.toggleTheme();
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## Components
|
|
85
|
+
|
|
86
|
+
All components use the `fui` prefix and are standalone.
|
|
87
|
+
|
|
88
|
+
| Category | Components |
|
|
89
|
+
|---|---|
|
|
90
|
+
| **Forms** | `autocomplete` `checkbox` `date-picker` `dynamic-form` `file-upload` `form-field` `input` `number-input` `password-input` `radio` `select` `slider` `time-picker` `toggle` `tree-select` |
|
|
91
|
+
| **Data** | `data-table` `list` `paginator` `tree` `tree-table` |
|
|
92
|
+
| **Layout** | `accordion` `card` `divider` `sidebar` `side-panel` `tab` `toolbar` |
|
|
93
|
+
| **Navigation** | `breadcrumb` `menu` `big-menu` `stepper` |
|
|
94
|
+
| **Feedback** | `alert` `badge` `empty-state` `progressbar` `skeleton` `spinner` `tag` `tooltip` |
|
|
95
|
+
| **Actions** | `button` `button-group` `drawer` `popover` |
|
|
96
|
+
| **Display** | `avatar` `icon` |
|
|
97
|
+
|
|
98
|
+
### Import Pattern
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import { <Component> } from '@raintonic/formaui/components/<name>';
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
## CDK
|
|
105
|
+
|
|
106
|
+
Low-level primitives for building custom components.
|
|
107
|
+
|
|
108
|
+
| Module | Description |
|
|
109
|
+
|---|---|
|
|
110
|
+
| `formaui/cdk/overlay` | Overlay and portal positioning system |
|
|
111
|
+
| `formaui/cdk/drag-drop` | Drag and drop functionality |
|
|
112
|
+
| `formaui/cdk/virtual-scroll` | Virtual scrolling for large lists |
|
|
113
|
+
| `formaui/cdk/form-field` | Form field infrastructure and control interface |
|
|
114
|
+
|
|
115
|
+
## Services
|
|
116
|
+
|
|
117
|
+
| Service | Import | Description |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| **Dialog** | `formaui/services/dialog` | Modal dialog management |
|
|
120
|
+
| **Notification** | `formaui/services/notification` | Toast notifications |
|
|
121
|
+
| **Theme** | `formaui/services/theme` | Runtime theme switching |
|
|
122
|
+
|
|
123
|
+
## Theming
|
|
124
|
+
|
|
125
|
+
FormaUI uses CSS custom properties (`--fui-*`) for all design tokens. Two themes are included:
|
|
126
|
+
|
|
127
|
+
- **Light** (default) — applied to `:root`
|
|
128
|
+
- **Dark** — toggled via `ThemeService`
|
|
129
|
+
|
|
130
|
+
Tokens cover spacing, typography, colors, motion, and elevation. Override any `--fui-*` variable to customize.
|
|
131
|
+
|
|
132
|
+
## Development
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
npm run build:lib # Build the library
|
|
136
|
+
npm test # Run tests (Jest)
|
|
137
|
+
npm run lint # Lint
|
|
138
|
+
npm run serve:docs # Serve docs app locally
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Requires Node >= 22.16.0.
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
[MIT](https://opensource.org/licenses/MIT)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-cdk-drag-drop.mjs","sources":["../../../lib/cdk/drag-drop/drag-registry.service.ts","../../../lib/cdk/drag-drop/auto-scroller.ts","../../../lib/cdk/drag-drop/drag-ref.ts","../../../lib/cdk/drag-drop/fui-drag.directive.ts","../../../lib/cdk/drag-drop/fui-drop-zone.directive.ts","../../../lib/cdk/drag-drop/fui-sortable.directive.ts","../../../lib/cdk/drag-drop/raintonic-formaui-cdk-drag-drop.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\nimport { FuiActiveDrag, FuiDropZoneRef, FuiPoint, FuiSortableRef } from './drag-drop.types';\n\n@Injectable({ providedIn: 'root' })\nexport class FuiDragRegistryService {\n readonly activeDrag = signal<FuiActiveDrag | null>(null);\n\n private _dropZones = new Set<FuiDropZoneRef>();\n private _sortables = new Set<FuiSortableRef>();\n\n registerDropZone(zone: FuiDropZoneRef): void {\n this._dropZones.add(zone);\n }\n\n unregisterDropZone(zone: FuiDropZoneRef): void {\n this._dropZones.delete(zone);\n }\n\n registerSortable(sortable: FuiSortableRef): void {\n this._sortables.add(sortable);\n }\n\n unregisterSortable(sortable: FuiSortableRef): void {\n this._sortables.delete(sortable);\n }\n\n startDrag(drag: FuiActiveDrag): void {\n this.activeDrag.set(drag);\n }\n\n updateDrag(position: FuiPoint, _event: PointerEvent): void {\n const active = this.activeDrag();\n if (active) {\n active.currentPosition = position;\n this.activeDrag.set({ ...active });\n }\n }\n\n endDrag(_event: PointerEvent): void {\n this.activeDrag.set(null);\n }\n\n cancelDrag(): void {\n this.activeDrag.set(null);\n }\n\n getDropZoneAtPoint(point: FuiPoint): FuiDropZoneRef | null {\n const preview = this.activeDrag()?.previewElement;\n if (preview) {\n preview.style.pointerEvents = 'none';\n }\n const elementAtPoint =\n typeof document.elementFromPoint === 'function' ? document.elementFromPoint(point.x, point.y) : null;\n if (preview) {\n preview.style.pointerEvents = '';\n }\n if (!elementAtPoint) {\n return null;\n }\n for (const zone of this._dropZones) {\n if (zone.element.nativeElement.contains(elementAtPoint)) {\n return zone;\n }\n }\n return null;\n }\n\n getSortableAtPoint(point: FuiPoint): FuiSortableRef | null {\n const preview = this.activeDrag()?.previewElement;\n if (preview) {\n preview.style.pointerEvents = 'none';\n }\n const elementAtPoint =\n typeof document.elementFromPoint === 'function' ? document.elementFromPoint(point.x, point.y) : null;\n if (preview) {\n preview.style.pointerEvents = '';\n }\n if (!elementAtPoint) {\n return null;\n }\n for (const sortable of this._sortables) {\n if (sortable.element.nativeElement.contains(elementAtPoint)) {\n return sortable;\n }\n }\n return null;\n }\n}\n","import { FuiPoint } from './drag-drop.types';\n\nexport class FuiAutoScroller {\n private _rafId: number | null = null;\n private _scrollNode: HTMLElement | null = null;\n private readonly SCROLL_PROXIMITY_THRESHOLD = 30;\n private readonly MAX_SCROLL_SPEED = 15;\n\n checkAutoScroll(pointerPosition: FuiPoint): void {\n const scrollNode = this._getScrollableAtPoint(pointerPosition);\n if (!scrollNode) {\n this._stopAutoScroll();\n return;\n }\n this._scrollNode = scrollNode;\n const rect = scrollNode.getBoundingClientRect();\n let speedX = 0;\n let speedY = 0;\n\n if (pointerPosition.y - rect.top < this.SCROLL_PROXIMITY_THRESHOLD) {\n speedY = -this._calculateSpeed(pointerPosition.y - rect.top);\n }\n if (rect.bottom - pointerPosition.y < this.SCROLL_PROXIMITY_THRESHOLD) {\n speedY = this._calculateSpeed(rect.bottom - pointerPosition.y);\n }\n if (pointerPosition.x - rect.left < this.SCROLL_PROXIMITY_THRESHOLD) {\n speedX = -this._calculateSpeed(pointerPosition.x - rect.left);\n }\n if (rect.right - pointerPosition.x < this.SCROLL_PROXIMITY_THRESHOLD) {\n speedX = this._calculateSpeed(rect.right - pointerPosition.x);\n }\n\n if (speedX !== 0 || speedY !== 0) {\n this._startAutoScroll(speedX, speedY);\n } else {\n this._stopAutoScroll();\n }\n }\n\n stop(): void {\n this._stopAutoScroll();\n }\n\n destroy(): void {\n this._stopAutoScroll();\n }\n\n private _calculateSpeed(distanceFromEdge: number): number {\n const ratio = 1 - distanceFromEdge / this.SCROLL_PROXIMITY_THRESHOLD;\n return Math.ceil(ratio * this.MAX_SCROLL_SPEED);\n }\n\n private _startAutoScroll(speedX: number, speedY: number): void {\n if (this._rafId !== null) {\n cancelAnimationFrame(this._rafId);\n }\n const scroll = (): void => {\n if (this._scrollNode) {\n this._scrollNode.scrollTop += speedY;\n this._scrollNode.scrollLeft += speedX;\n }\n this._rafId = requestAnimationFrame(scroll);\n };\n this._rafId = requestAnimationFrame(scroll);\n }\n\n private _stopAutoScroll(): void {\n if (this._rafId !== null) {\n cancelAnimationFrame(this._rafId);\n this._rafId = null;\n }\n }\n\n private _getScrollableAtPoint(point: FuiPoint): HTMLElement | null {\n if (typeof document.elementFromPoint !== 'function') {\n return null;\n }\n let element = document.elementFromPoint(point.x, point.y) as HTMLElement | null;\n while (element) {\n const style = window.getComputedStyle(element);\n if ((style.overflowY === 'auto' || style.overflowY === 'scroll') && element.scrollHeight > element.clientHeight) {\n return element;\n }\n if ((style.overflowX === 'auto' || style.overflowX === 'scroll') && element.scrollWidth > element.clientWidth) {\n return element;\n }\n element = element.parentElement;\n }\n return null;\n }\n}\n","import { FuiPoint } from './drag-drop.types';\n\n/**\n * Internal helper that tracks positional state for a single drag operation.\n * Used by FuiDragDirective to keep the directive itself cleaner.\n */\nexport class FuiDragRef {\n startPosition: FuiPoint = { x: 0, y: 0 };\n currentPosition: FuiPoint = { x: 0, y: 0 };\n private _active = false;\n\n get active(): boolean {\n return this._active;\n }\n\n start(x: number, y: number): void {\n this.startPosition = { x, y };\n this.currentPosition = { x, y };\n this._active = true;\n }\n\n move(x: number, y: number): void {\n this.currentPosition = { x, y };\n }\n\n get distance(): FuiPoint {\n return {\n x: this.currentPosition.x - this.startPosition.x,\n y: this.currentPosition.y - this.startPosition.y,\n };\n }\n\n reset(): void {\n this.startPosition = { x: 0, y: 0 };\n this.currentPosition = { x: 0, y: 0 };\n this._active = false;\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n output,\n Renderer2,\n signal,\n TemplateRef,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { FuiDragRegistryService } from './drag-registry.service';\nimport { FuiAutoScroller } from './auto-scroller';\nimport { FuiDragRef } from './drag-ref';\nimport { FuiDragAxis, FuiDragEvent, FuiDropEvent, FuiPoint } from './drag-drop.types';\n\n@Directive({\n selector: '[fuiDrag]',\n standalone: true,\n host: {\n class: 'fui-drag',\n '[class.fui-drag--dragging]': '_isDragging()',\n '[attr.aria-grabbed]': '_isDragging()',\n '[attr.aria-roledescription]': '\"draggable item\"',\n tabindex: '0',\n '(pointerdown)': '_onPointerDown($event)',\n '(keydown)': '_onKeydown($event)',\n },\n})\nexport class FuiDragDirective implements OnDestroy {\n readonly fuiDragData = input<any>(null);\n readonly fuiDragDisabled = input(false);\n readonly fuiDragLockAxis = input<FuiDragAxis>('free');\n readonly fuiDragPreviewTemplate = input<TemplateRef<any> | null>(null);\n readonly fuiDragPlaceholderTemplate = input<TemplateRef<any> | null>(null);\n readonly fuiDragBoundary = input<string | ElementRef | null>(null);\n\n readonly fuiDragStarted = output<FuiDragEvent>();\n readonly fuiDragMoved = output<FuiDragEvent>();\n readonly fuiDragEnded = output<FuiDragEvent>();\n readonly fuiDragDropped = output<FuiDropEvent>();\n\n readonly element = inject(ElementRef<HTMLElement>);\n readonly _isDragging = signal(false);\n\n private readonly _registry = inject(FuiDragRegistryService);\n private readonly _renderer = inject(Renderer2);\n private readonly _document = inject(DOCUMENT);\n private readonly _ngZone = inject(NgZone);\n private readonly _autoScroller = new FuiAutoScroller();\n private readonly _dragRef = new FuiDragRef();\n\n private _previewElement: HTMLElement | null = null;\n private _placeholderElement: HTMLElement | null = null;\n private _pointerMoveHandler: ((e: PointerEvent) => void) | null = null;\n private _pointerUpHandler: ((e: PointerEvent) => void) | null = null;\n private _boundaryRect: DOMRect | null = null;\n\n // Keyboard drag state\n private _keyboardDragging = false;\n private _keyboardPosition: FuiPoint = { x: 0, y: 0 };\n private readonly KEYBOARD_STEP = 10;\n\n _onPointerDown(event: PointerEvent): void {\n if (this.fuiDragDisabled() || event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n\n const startPosition: FuiPoint = { x: event.clientX, y: event.clientY };\n this._dragRef.start(startPosition.x, startPosition.y);\n this._resolveBoundary();\n\n this._previewElement = this._createPreview();\n this._updatePreviewPosition(startPosition);\n this._document.body.appendChild(this._previewElement);\n\n // Create placeholder at source location\n this._placeholderElement = this._createPlaceholder();\n this.element.nativeElement.parentNode?.insertBefore(\n this._placeholderElement,\n this.element.nativeElement.nextSibling,\n );\n\n this._isDragging.set(true);\n\n this._registry.startDrag({\n source: this,\n previewElement: this._previewElement,\n placeholderElement: this._placeholderElement,\n startPosition,\n currentPosition: { ...startPosition },\n data: this.fuiDragData(),\n });\n\n this.fuiDragStarted.emit({\n source: this,\n data: this.fuiDragData(),\n pointerPosition: startPosition,\n distance: { x: 0, y: 0 },\n event,\n });\n\n this._ngZone.runOutsideAngular(() => {\n this._pointerMoveHandler = (e: PointerEvent): void => {\n this._onPointerMove(e);\n };\n this._pointerUpHandler = (e: PointerEvent): void => {\n this._onPointerUp(e);\n };\n this._document.addEventListener('pointermove', this._pointerMoveHandler);\n this._document.addEventListener('pointerup', this._pointerUpHandler);\n });\n }\n\n private _onPointerMove(event: PointerEvent): void {\n const position = this._applyConstraints({ x: event.clientX, y: event.clientY });\n this._dragRef.move(position.x, position.y);\n\n if (this._previewElement) {\n this._updatePreviewPosition(position);\n }\n\n this._autoScroller.checkAutoScroll(position);\n this._registry.updateDrag(position, event);\n\n this._ngZone.run(() => {\n this.fuiDragMoved.emit({\n source: this,\n data: this.fuiDragData(),\n pointerPosition: position,\n distance: this._dragRef.distance,\n event,\n });\n });\n }\n\n private _onPointerUp(event: PointerEvent): void {\n this._removeListeners();\n this._autoScroller.stop();\n\n const position: FuiPoint = { x: event.clientX, y: event.clientY };\n const dropZone = this._registry.getDropZoneAtPoint(position);\n\n if (dropZone && !dropZone.fuiDropZoneDisabled()) {\n const predicate = dropZone.fuiDropZonePredicate();\n const accepted = !predicate || predicate(this);\n\n if (accepted) {\n this._ngZone.run(() => {\n const dropEvent: FuiDropEvent = {\n source: this,\n dragData: this.fuiDragData(),\n dropZoneData: dropZone.fuiDropZoneData(),\n dropZone,\n isPointerOverContainer: true,\n };\n this.fuiDragDropped.emit(dropEvent);\n dropZone.fuiDropped.emit(dropEvent);\n });\n }\n }\n\n this._cleanupDrag();\n\n this._ngZone.run(() => {\n this._registry.endDrag(event);\n this.fuiDragEnded.emit({\n source: this,\n data: this.fuiDragData(),\n pointerPosition: position,\n distance: this._dragRef.distance,\n event,\n });\n this._isDragging.set(false);\n });\n\n this._dragRef.reset();\n }\n\n _onKeydown(event: KeyboardEvent): void {\n if (this.fuiDragDisabled()) {\n return;\n }\n\n if (!this._keyboardDragging) {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n this._startKeyboardDrag();\n }\n return;\n }\n\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n this._moveKeyboard(0, -this.KEYBOARD_STEP);\n break;\n case 'ArrowDown':\n event.preventDefault();\n this._moveKeyboard(0, this.KEYBOARD_STEP);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n this._moveKeyboard(-this.KEYBOARD_STEP, 0);\n break;\n case 'ArrowRight':\n event.preventDefault();\n this._moveKeyboard(this.KEYBOARD_STEP, 0);\n break;\n case 'Escape':\n event.preventDefault();\n this._cancelKeyboardDrag();\n break;\n case ' ':\n case 'Enter':\n event.preventDefault();\n this._endKeyboardDrag();\n break;\n }\n }\n\n private _startKeyboardDrag(): void {\n const rect = (this.element.nativeElement as HTMLElement).getBoundingClientRect();\n const startPosition: FuiPoint = {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n\n this._keyboardDragging = true;\n this._keyboardPosition = { ...startPosition };\n this._dragRef.start(startPosition.x, startPosition.y);\n\n this._previewElement = this._createPreview();\n this._updatePreviewPosition(startPosition);\n this._document.body.appendChild(this._previewElement);\n\n this._isDragging.set(true);\n this._registry.startDrag({\n source: this,\n previewElement: this._previewElement,\n startPosition,\n currentPosition: { ...startPosition },\n data: this.fuiDragData(),\n });\n }\n\n private _moveKeyboard(dx: number, dy: number): void {\n const axis = this.fuiDragLockAxis();\n if (axis === 'x') {\n dy = 0;\n }\n if (axis === 'y') {\n dx = 0;\n }\n\n this._keyboardPosition.x += dx;\n this._keyboardPosition.y += dy;\n this._dragRef.move(this._keyboardPosition.x, this._keyboardPosition.y);\n\n if (this._previewElement) {\n this._updatePreviewPosition(this._keyboardPosition);\n }\n }\n\n private _endKeyboardDrag(): void {\n const position = this._keyboardPosition;\n const dropZone = this._registry.getDropZoneAtPoint(position);\n\n if (dropZone && !dropZone.fuiDropZoneDisabled()) {\n const predicate = dropZone.fuiDropZonePredicate();\n const accepted = !predicate || predicate(this);\n\n if (accepted) {\n const dropEvent: FuiDropEvent = {\n source: this,\n dragData: this.fuiDragData(),\n dropZoneData: dropZone.fuiDropZoneData(),\n dropZone,\n isPointerOverContainer: true,\n };\n this.fuiDragDropped.emit(dropEvent);\n dropZone.fuiDropped.emit(dropEvent);\n }\n }\n\n this._cleanupDrag();\n this._registry.cancelDrag();\n this._isDragging.set(false);\n this._keyboardDragging = false;\n this._dragRef.reset();\n }\n\n private _cancelKeyboardDrag(): void {\n this._cleanupDrag();\n this._registry.cancelDrag();\n this._isDragging.set(false);\n this._keyboardDragging = false;\n this._dragRef.reset();\n }\n\n private _createPreview(): HTMLElement {\n const sourceEl = this.element.nativeElement;\n const rect = sourceEl.getBoundingClientRect();\n const preview = sourceEl.cloneNode(true) as HTMLElement;\n\n preview.classList.add('fui-drag-preview');\n preview.style.position = 'fixed';\n preview.style.width = `${rect.width}px`;\n preview.style.height = `${rect.height}px`;\n preview.style.zIndex = '10000';\n preview.style.pointerEvents = 'none';\n preview.style.margin = '0';\n\n return preview;\n }\n\n private _createPlaceholder(): HTMLElement {\n const sourceEl = this.element.nativeElement;\n const rect = sourceEl.getBoundingClientRect();\n const placeholder = this._document.createElement('div');\n\n placeholder.classList.add('fui-drag-placeholder');\n placeholder.style.width = `${rect.width}px`;\n placeholder.style.height = `${rect.height}px`;\n placeholder.style.boxSizing = 'border-box';\n\n return placeholder;\n }\n\n private _updatePreviewPosition(position: FuiPoint): void {\n if (!this._previewElement) {\n return;\n }\n const sourceRect = this.element.nativeElement.getBoundingClientRect();\n const offsetX = sourceRect.width / 2;\n const offsetY = sourceRect.height / 2;\n\n this._previewElement.style.left = `${position.x - offsetX}px`;\n this._previewElement.style.top = `${position.y - offsetY}px`;\n }\n\n private _applyConstraints(position: FuiPoint): FuiPoint {\n const axis = this.fuiDragLockAxis();\n const start = this._dragRef.startPosition;\n let { x, y } = position;\n\n if (axis === 'x') {\n y = start.y;\n } else if (axis === 'y') {\n x = start.x;\n }\n\n if (this._boundaryRect) {\n const rect = this._boundaryRect;\n x = Math.max(rect.left, Math.min(x, rect.right));\n y = Math.max(rect.top, Math.min(y, rect.bottom));\n }\n\n return { x, y };\n }\n\n /** Pattern allowing simple CSS selectors (tag, class, id, attribute selectors) */\n private static readonly _SAFE_SELECTOR_PATTERN = /^[a-zA-Z0-9\\-_.#\\[\\]=~|^$*:\" >,+()]+$/;\n\n private _resolveBoundary(): void {\n const boundary = this.fuiDragBoundary();\n if (!boundary) {\n this._boundaryRect = null;\n return;\n }\n\n let boundaryElement: HTMLElement | null = null;\n if (typeof boundary === 'string') {\n // Validate selector to prevent injection of malicious strings\n if (!FuiDragDirective._SAFE_SELECTOR_PATTERN.test(boundary)) {\n console.warn(`[FormaUI] Invalid drag boundary selector: \"${boundary}\"`);\n this._boundaryRect = null;\n return;\n }\n boundaryElement = this._document.querySelector(boundary);\n } else {\n boundaryElement = boundary.nativeElement;\n }\n\n this._boundaryRect = boundaryElement ? boundaryElement.getBoundingClientRect() : null;\n }\n\n private _cleanupDrag(): void {\n if (this._previewElement?.parentNode) {\n this._previewElement.parentNode.removeChild(this._previewElement);\n }\n this._previewElement = null;\n\n if (this._placeholderElement?.parentNode) {\n this._placeholderElement.parentNode.removeChild(this._placeholderElement);\n }\n this._placeholderElement = null;\n }\n\n private _removeListeners(): void {\n if (this._pointerMoveHandler) {\n this._document.removeEventListener('pointermove', this._pointerMoveHandler);\n this._pointerMoveHandler = null;\n }\n if (this._pointerUpHandler) {\n this._document.removeEventListener('pointerup', this._pointerUpHandler);\n this._pointerUpHandler = null;\n }\n }\n\n ngOnDestroy(): void {\n this._removeListeners();\n this._cleanupDrag();\n this._autoScroller.destroy();\n this._dragRef.reset();\n }\n}\n","import { Directive, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal } from '@angular/core';\nimport { FuiDragRegistryService } from './drag-registry.service';\nimport { FuiDragEvent, FuiDragSource, FuiDropEvent } from './drag-drop.types';\n\n@Directive({\n selector: '[fuiDropZone]',\n standalone: true,\n host: {\n class: 'fui-drop-zone',\n '[class.fui-drop-zone--active]': '_isActive()',\n '[class.fui-drop-zone--over]': '_isOver()',\n '[attr.aria-dropeffect]': '\"move\"',\n },\n})\nexport class FuiDropZoneDirective implements OnInit, OnDestroy {\n readonly fuiDropZoneData = input<any>(null);\n readonly fuiDropZoneDisabled = input(false);\n readonly fuiDropZonePredicate = input<((drag: FuiDragSource) => boolean) | null>(null);\n\n readonly fuiDropZoneEntered = output<FuiDragEvent>();\n readonly fuiDropZoneExited = output<FuiDragEvent>();\n readonly fuiDropped = output<FuiDropEvent>();\n\n readonly element = inject(ElementRef<HTMLElement>);\n readonly _isActive = signal(false);\n readonly _isOver = signal(false);\n\n private readonly _registry = inject(FuiDragRegistryService);\n private _wasOver = false;\n\n constructor() {\n effect(() => {\n const activeDrag = this._registry.activeDrag();\n if (this.fuiDropZoneDisabled()) {\n this._isActive.set(false);\n this._isOver.set(false);\n return;\n }\n\n if (activeDrag) {\n this._isActive.set(true);\n\n // Check if pointer is over this drop zone\n const rect = this.element.nativeElement.getBoundingClientRect();\n const pos = activeDrag.currentPosition;\n const isOver = pos.x >= rect.left && pos.x <= rect.right && pos.y >= rect.top && pos.y <= rect.bottom;\n\n this._isOver.set(isOver);\n\n if (isOver && !this._wasOver) {\n this.fuiDropZoneEntered.emit({\n source: activeDrag.source,\n data: activeDrag.data,\n pointerPosition: activeDrag.currentPosition,\n distance: {\n x: activeDrag.currentPosition.x - activeDrag.startPosition.x,\n y: activeDrag.currentPosition.y - activeDrag.startPosition.y,\n },\n dropZone: this,\n event: null!,\n });\n } else if (!isOver && this._wasOver) {\n this.fuiDropZoneExited.emit({\n source: activeDrag.source,\n data: activeDrag.data,\n pointerPosition: activeDrag.currentPosition,\n distance: {\n x: activeDrag.currentPosition.x - activeDrag.startPosition.x,\n y: activeDrag.currentPosition.y - activeDrag.startPosition.y,\n },\n dropZone: this,\n event: null!,\n });\n }\n\n this._wasOver = isOver;\n } else {\n this._isActive.set(false);\n this._isOver.set(false);\n this._wasOver = false;\n }\n });\n }\n\n ngOnInit(): void {\n this._registry.registerDropZone(this);\n }\n\n ngOnDestroy(): void {\n this._registry.unregisterDropZone(this);\n }\n}\n","import {\n contentChildren,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n OnDestroy,\n OnInit,\n output,\n signal,\n} from '@angular/core';\nimport { FuiDragRegistryService } from './drag-registry.service';\nimport { FuiDragDirective } from './fui-drag.directive';\nimport { FuiSortEvent, FuiSortableRef, FuiTransferEvent } from './drag-drop.types';\n\n@Directive({\n selector: '[fuiSortable]',\n standalone: true,\n host: {\n class: 'fui-sortable',\n '[class.fui-sortable--dragging]': '_hasDragging()',\n },\n})\nexport class FuiSortableDirective implements OnInit, OnDestroy {\n readonly fuiSortableData = input.required<any[]>();\n readonly fuiSortableDisabled = input(false);\n readonly fuiSortableOrientation = input<'vertical' | 'horizontal'>('vertical');\n readonly fuiSortableConnectedTo = input<FuiSortableDirective[]>([]);\n\n readonly fuiSortableSorted = output<FuiSortEvent>();\n readonly fuiSortableTransferred = output<FuiTransferEvent>();\n\n readonly element = inject(ElementRef<HTMLElement>);\n readonly _hasDragging = signal(false);\n\n readonly _dragItems = contentChildren(FuiDragDirective);\n\n private readonly _registry = inject(FuiDragRegistryService);\n private _activeDragStartIndex = -1;\n private _currentHoverIndex = -1;\n private _siblingRects: DOMRect[] = [];\n\n constructor() {\n effect(() => {\n const activeDrag = this._registry.activeDrag();\n if (this.fuiSortableDisabled()) {\n this._hasDragging.set(false);\n return;\n }\n\n if (activeDrag) {\n const dragItems = this._dragItems();\n const sourceIndex = dragItems.indexOf(activeDrag.source as FuiDragDirective);\n\n if (sourceIndex >= 0) {\n // Drag originated from this container\n this._hasDragging.set(true);\n\n if (this._activeDragStartIndex === -1) {\n this._activeDragStartIndex = sourceIndex;\n this._captureRects();\n }\n\n const insertIndex = this._getInsertionIndex(activeDrag.currentPosition);\n if (insertIndex !== this._currentHoverIndex) {\n this._currentHoverIndex = insertIndex;\n this._applyTransforms(sourceIndex, insertIndex);\n }\n } else {\n // Check if drag is over this container (cross-container)\n const rect = this.element.nativeElement.getBoundingClientRect();\n const pos = activeDrag.currentPosition;\n const isOver = pos.x >= rect.left && pos.x <= rect.right && pos.y >= rect.top && pos.y <= rect.bottom;\n\n if (isOver) {\n this._hasDragging.set(true);\n } else {\n this._hasDragging.set(false);\n }\n }\n } else {\n // Drag ended - check if we need to emit sort/transfer events\n if (this._hasDragging() && this._activeDragStartIndex >= 0) {\n this._finalizeDrop();\n }\n this._hasDragging.set(false);\n this._activeDragStartIndex = -1;\n this._currentHoverIndex = -1;\n this._clearTransforms();\n }\n });\n }\n\n ngOnInit(): void {\n this._registry.registerSortable(this);\n }\n\n ngOnDestroy(): void {\n this._registry.unregisterSortable(this);\n }\n\n private _captureRects(): void {\n const items = this._dragItems();\n this._siblingRects = items.map((item) => item.element.nativeElement.getBoundingClientRect());\n }\n\n private _getInsertionIndex(position: { x: number; y: number }): number {\n const orientation = this.fuiSortableOrientation();\n\n for (let i = 0; i < this._siblingRects.length; i++) {\n const rect = this._siblingRects[i];\n if (orientation === 'vertical') {\n const midY = rect.top + rect.height / 2;\n if (position.y < midY) {\n return i;\n }\n } else {\n const midX = rect.left + rect.width / 2;\n if (position.x < midX) {\n return i;\n }\n }\n }\n\n return this._siblingRects.length;\n }\n\n private _applyTransforms(sourceIndex: number, insertIndex: number): void {\n const items = this._dragItems();\n const orientation = this.fuiSortableOrientation();\n\n items.forEach((item, i) => {\n if (i === sourceIndex) {\n return; // Skip the dragged item\n }\n\n const el = item.element.nativeElement as HTMLElement;\n let offset = 0;\n\n if (sourceIndex < insertIndex) {\n // Dragging down/right: shift items between source+1..insert up/left\n if (i > sourceIndex && i < insertIndex) {\n const rect = this._siblingRects[sourceIndex];\n offset = orientation === 'vertical' ? -rect.height : -rect.width;\n }\n } else if (sourceIndex > insertIndex) {\n // Dragging up/left: shift items between insert..source-1 down/right\n if (i >= insertIndex && i < sourceIndex) {\n const rect = this._siblingRects[sourceIndex];\n offset = orientation === 'vertical' ? rect.height : rect.width;\n }\n }\n\n if (orientation === 'vertical') {\n el.style.transform = offset ? `translateY(${offset}px)` : '';\n } else {\n el.style.transform = offset ? `translateX(${offset}px)` : '';\n }\n el.style.transition = 'transform 150ms ease';\n });\n }\n\n private _clearTransforms(): void {\n const items = this._dragItems();\n items.forEach((item) => {\n const el = item.element.nativeElement as HTMLElement;\n el.style.transform = '';\n el.style.transition = '';\n });\n }\n\n private _finalizeDrop(): void {\n if (this._currentHoverIndex >= 0 && this._currentHoverIndex !== this._activeDragStartIndex) {\n const data = [...this.fuiSortableData()];\n const [moved] = data.splice(this._activeDragStartIndex, 1);\n const adjustedIndex =\n this._currentHoverIndex > this._activeDragStartIndex ? this._currentHoverIndex - 1 : this._currentHoverIndex;\n data.splice(adjustedIndex, 0, moved);\n\n this.fuiSortableSorted.emit({\n data,\n previousIndex: this._activeDragStartIndex,\n currentIndex: adjustedIndex,\n container: this,\n });\n }\n this._clearTransforms();\n }\n\n /** Called by external sortables for cross-container transfers. */\n emitTransfer(item: any, previousContainer: FuiSortableRef, previousIndex: number, currentIndex: number): void {\n this.fuiSortableTransferred.emit({\n item,\n previousContainer,\n container: this,\n previousIndex,\n currentIndex,\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-cdk-drag-drop.mjs","sources":["../../../lib/cdk/drag-drop/drag-registry.service.ts","../../../lib/cdk/drag-drop/auto-scroller.ts","../../../lib/cdk/drag-drop/drag-ref.ts","../../../lib/cdk/drag-drop/fui-drag.directive.ts","../../../lib/cdk/drag-drop/fui-drop-zone.directive.ts","../../../lib/cdk/drag-drop/fui-sortable.directive.ts","../../../lib/cdk/drag-drop/raintonic-formaui-cdk-drag-drop.ts"],"sourcesContent":["import { Injectable, signal } from '@angular/core';\r\nimport { FuiActiveDrag, FuiDropZoneRef, FuiPoint, FuiSortableRef } from './drag-drop.types';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FuiDragRegistryService {\r\n readonly activeDrag = signal<FuiActiveDrag | null>(null);\r\n\r\n private _dropZones = new Set<FuiDropZoneRef>();\r\n private _sortables = new Set<FuiSortableRef>();\r\n\r\n registerDropZone(zone: FuiDropZoneRef): void {\r\n this._dropZones.add(zone);\r\n }\r\n\r\n unregisterDropZone(zone: FuiDropZoneRef): void {\r\n this._dropZones.delete(zone);\r\n }\r\n\r\n registerSortable(sortable: FuiSortableRef): void {\r\n this._sortables.add(sortable);\r\n }\r\n\r\n unregisterSortable(sortable: FuiSortableRef): void {\r\n this._sortables.delete(sortable);\r\n }\r\n\r\n startDrag(drag: FuiActiveDrag): void {\r\n this.activeDrag.set(drag);\r\n }\r\n\r\n updateDrag(position: FuiPoint, _event: PointerEvent): void {\r\n const active = this.activeDrag();\r\n if (active) {\r\n active.currentPosition = position;\r\n this.activeDrag.set({ ...active });\r\n }\r\n }\r\n\r\n endDrag(_event: PointerEvent): void {\r\n this.activeDrag.set(null);\r\n }\r\n\r\n cancelDrag(): void {\r\n this.activeDrag.set(null);\r\n }\r\n\r\n getDropZoneAtPoint(point: FuiPoint): FuiDropZoneRef | null {\r\n const preview = this.activeDrag()?.previewElement;\r\n if (preview) {\r\n preview.style.pointerEvents = 'none';\r\n }\r\n const elementAtPoint =\r\n typeof document.elementFromPoint === 'function' ? document.elementFromPoint(point.x, point.y) : null;\r\n if (preview) {\r\n preview.style.pointerEvents = '';\r\n }\r\n if (!elementAtPoint) {\r\n return null;\r\n }\r\n for (const zone of this._dropZones) {\r\n if (zone.element.nativeElement.contains(elementAtPoint)) {\r\n return zone;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n getSortableAtPoint(point: FuiPoint): FuiSortableRef | null {\r\n const preview = this.activeDrag()?.previewElement;\r\n if (preview) {\r\n preview.style.pointerEvents = 'none';\r\n }\r\n const elementAtPoint =\r\n typeof document.elementFromPoint === 'function' ? document.elementFromPoint(point.x, point.y) : null;\r\n if (preview) {\r\n preview.style.pointerEvents = '';\r\n }\r\n if (!elementAtPoint) {\r\n return null;\r\n }\r\n for (const sortable of this._sortables) {\r\n if (sortable.element.nativeElement.contains(elementAtPoint)) {\r\n return sortable;\r\n }\r\n }\r\n return null;\r\n }\r\n}\r\n","import { FuiPoint } from './drag-drop.types';\r\n\r\nexport class FuiAutoScroller {\r\n private _rafId: number | null = null;\r\n private _scrollNode: HTMLElement | null = null;\r\n private readonly SCROLL_PROXIMITY_THRESHOLD = 30;\r\n private readonly MAX_SCROLL_SPEED = 15;\r\n\r\n checkAutoScroll(pointerPosition: FuiPoint): void {\r\n const scrollNode = this._getScrollableAtPoint(pointerPosition);\r\n if (!scrollNode) {\r\n this._stopAutoScroll();\r\n return;\r\n }\r\n this._scrollNode = scrollNode;\r\n const rect = scrollNode.getBoundingClientRect();\r\n let speedX = 0;\r\n let speedY = 0;\r\n\r\n if (pointerPosition.y - rect.top < this.SCROLL_PROXIMITY_THRESHOLD) {\r\n speedY = -this._calculateSpeed(pointerPosition.y - rect.top);\r\n }\r\n if (rect.bottom - pointerPosition.y < this.SCROLL_PROXIMITY_THRESHOLD) {\r\n speedY = this._calculateSpeed(rect.bottom - pointerPosition.y);\r\n }\r\n if (pointerPosition.x - rect.left < this.SCROLL_PROXIMITY_THRESHOLD) {\r\n speedX = -this._calculateSpeed(pointerPosition.x - rect.left);\r\n }\r\n if (rect.right - pointerPosition.x < this.SCROLL_PROXIMITY_THRESHOLD) {\r\n speedX = this._calculateSpeed(rect.right - pointerPosition.x);\r\n }\r\n\r\n if (speedX !== 0 || speedY !== 0) {\r\n this._startAutoScroll(speedX, speedY);\r\n } else {\r\n this._stopAutoScroll();\r\n }\r\n }\r\n\r\n stop(): void {\r\n this._stopAutoScroll();\r\n }\r\n\r\n destroy(): void {\r\n this._stopAutoScroll();\r\n }\r\n\r\n private _calculateSpeed(distanceFromEdge: number): number {\r\n const ratio = 1 - distanceFromEdge / this.SCROLL_PROXIMITY_THRESHOLD;\r\n return Math.ceil(ratio * this.MAX_SCROLL_SPEED);\r\n }\r\n\r\n private _startAutoScroll(speedX: number, speedY: number): void {\r\n if (this._rafId !== null) {\r\n cancelAnimationFrame(this._rafId);\r\n }\r\n const scroll = (): void => {\r\n if (this._scrollNode) {\r\n this._scrollNode.scrollTop += speedY;\r\n this._scrollNode.scrollLeft += speedX;\r\n }\r\n this._rafId = requestAnimationFrame(scroll);\r\n };\r\n this._rafId = requestAnimationFrame(scroll);\r\n }\r\n\r\n private _stopAutoScroll(): void {\r\n if (this._rafId !== null) {\r\n cancelAnimationFrame(this._rafId);\r\n this._rafId = null;\r\n }\r\n }\r\n\r\n private _getScrollableAtPoint(point: FuiPoint): HTMLElement | null {\r\n if (typeof document.elementFromPoint !== 'function') {\r\n return null;\r\n }\r\n let element = document.elementFromPoint(point.x, point.y) as HTMLElement | null;\r\n while (element) {\r\n const style = window.getComputedStyle(element);\r\n if ((style.overflowY === 'auto' || style.overflowY === 'scroll') && element.scrollHeight > element.clientHeight) {\r\n return element;\r\n }\r\n if ((style.overflowX === 'auto' || style.overflowX === 'scroll') && element.scrollWidth > element.clientWidth) {\r\n return element;\r\n }\r\n element = element.parentElement;\r\n }\r\n return null;\r\n }\r\n}\r\n","import { FuiPoint } from './drag-drop.types';\r\n\r\n/**\r\n * Internal helper that tracks positional state for a single drag operation.\r\n * Used by FuiDragDirective to keep the directive itself cleaner.\r\n */\r\nexport class FuiDragRef {\r\n startPosition: FuiPoint = { x: 0, y: 0 };\r\n currentPosition: FuiPoint = { x: 0, y: 0 };\r\n private _active = false;\r\n\r\n get active(): boolean {\r\n return this._active;\r\n }\r\n\r\n start(x: number, y: number): void {\r\n this.startPosition = { x, y };\r\n this.currentPosition = { x, y };\r\n this._active = true;\r\n }\r\n\r\n move(x: number, y: number): void {\r\n this.currentPosition = { x, y };\r\n }\r\n\r\n get distance(): FuiPoint {\r\n return {\r\n x: this.currentPosition.x - this.startPosition.x,\r\n y: this.currentPosition.y - this.startPosition.y,\r\n };\r\n }\r\n\r\n reset(): void {\r\n this.startPosition = { x: 0, y: 0 };\r\n this.currentPosition = { x: 0, y: 0 };\r\n this._active = false;\r\n }\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n inject,\r\n input,\r\n NgZone,\r\n OnDestroy,\r\n output,\r\n Renderer2,\r\n signal,\r\n TemplateRef,\r\n} from '@angular/core';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport { FuiDragRegistryService } from './drag-registry.service';\r\nimport { FuiAutoScroller } from './auto-scroller';\r\nimport { FuiDragRef } from './drag-ref';\r\nimport { FuiDragAxis, FuiDragEvent, FuiDropEvent, FuiPoint } from './drag-drop.types';\r\n\r\n@Directive({\r\n selector: '[fuiDrag]',\r\n standalone: true,\r\n host: {\r\n class: 'fui-drag',\r\n '[class.fui-drag--dragging]': '_isDragging()',\r\n '[attr.aria-grabbed]': '_isDragging()',\r\n '[attr.aria-roledescription]': '\"draggable item\"',\r\n tabindex: '0',\r\n '(pointerdown)': '_onPointerDown($event)',\r\n '(keydown)': '_onKeydown($event)',\r\n },\r\n})\r\nexport class FuiDragDirective implements OnDestroy {\r\n readonly fuiDragData = input<any>(null);\r\n readonly fuiDragDisabled = input(false);\r\n readonly fuiDragLockAxis = input<FuiDragAxis>('free');\r\n readonly fuiDragPreviewTemplate = input<TemplateRef<any> | null>(null);\r\n readonly fuiDragPlaceholderTemplate = input<TemplateRef<any> | null>(null);\r\n readonly fuiDragBoundary = input<string | ElementRef | null>(null);\r\n\r\n readonly fuiDragStarted = output<FuiDragEvent>();\r\n readonly fuiDragMoved = output<FuiDragEvent>();\r\n readonly fuiDragEnded = output<FuiDragEvent>();\r\n readonly fuiDragDropped = output<FuiDropEvent>();\r\n\r\n readonly element = inject(ElementRef<HTMLElement>);\r\n readonly _isDragging = signal(false);\r\n\r\n private readonly _registry = inject(FuiDragRegistryService);\r\n private readonly _renderer = inject(Renderer2);\r\n private readonly _document = inject(DOCUMENT);\r\n private readonly _ngZone = inject(NgZone);\r\n private readonly _autoScroller = new FuiAutoScroller();\r\n private readonly _dragRef = new FuiDragRef();\r\n\r\n private _previewElement: HTMLElement | null = null;\r\n private _placeholderElement: HTMLElement | null = null;\r\n private _pointerMoveHandler: ((e: PointerEvent) => void) | null = null;\r\n private _pointerUpHandler: ((e: PointerEvent) => void) | null = null;\r\n private _boundaryRect: DOMRect | null = null;\r\n\r\n // Keyboard drag state\r\n private _keyboardDragging = false;\r\n private _keyboardPosition: FuiPoint = { x: 0, y: 0 };\r\n private readonly KEYBOARD_STEP = 10;\r\n\r\n _onPointerDown(event: PointerEvent): void {\r\n if (this.fuiDragDisabled() || event.button !== 0) {\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n\r\n const startPosition: FuiPoint = { x: event.clientX, y: event.clientY };\r\n this._dragRef.start(startPosition.x, startPosition.y);\r\n this._resolveBoundary();\r\n\r\n this._previewElement = this._createPreview();\r\n this._updatePreviewPosition(startPosition);\r\n this._document.body.appendChild(this._previewElement);\r\n\r\n // Create placeholder at source location\r\n this._placeholderElement = this._createPlaceholder();\r\n this.element.nativeElement.parentNode?.insertBefore(\r\n this._placeholderElement,\r\n this.element.nativeElement.nextSibling,\r\n );\r\n\r\n this._isDragging.set(true);\r\n\r\n this._registry.startDrag({\r\n source: this,\r\n previewElement: this._previewElement,\r\n placeholderElement: this._placeholderElement,\r\n startPosition,\r\n currentPosition: { ...startPosition },\r\n data: this.fuiDragData(),\r\n });\r\n\r\n this.fuiDragStarted.emit({\r\n source: this,\r\n data: this.fuiDragData(),\r\n pointerPosition: startPosition,\r\n distance: { x: 0, y: 0 },\r\n event,\r\n });\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n this._pointerMoveHandler = (e: PointerEvent): void => {\r\n this._onPointerMove(e);\r\n };\r\n this._pointerUpHandler = (e: PointerEvent): void => {\r\n this._onPointerUp(e);\r\n };\r\n this._document.addEventListener('pointermove', this._pointerMoveHandler);\r\n this._document.addEventListener('pointerup', this._pointerUpHandler);\r\n });\r\n }\r\n\r\n private _onPointerMove(event: PointerEvent): void {\r\n const position = this._applyConstraints({ x: event.clientX, y: event.clientY });\r\n this._dragRef.move(position.x, position.y);\r\n\r\n if (this._previewElement) {\r\n this._updatePreviewPosition(position);\r\n }\r\n\r\n this._autoScroller.checkAutoScroll(position);\r\n this._registry.updateDrag(position, event);\r\n\r\n this._ngZone.run(() => {\r\n this.fuiDragMoved.emit({\r\n source: this,\r\n data: this.fuiDragData(),\r\n pointerPosition: position,\r\n distance: this._dragRef.distance,\r\n event,\r\n });\r\n });\r\n }\r\n\r\n private _onPointerUp(event: PointerEvent): void {\r\n this._removeListeners();\r\n this._autoScroller.stop();\r\n\r\n const position: FuiPoint = { x: event.clientX, y: event.clientY };\r\n const dropZone = this._registry.getDropZoneAtPoint(position);\r\n\r\n if (dropZone && !dropZone.fuiDropZoneDisabled()) {\r\n const predicate = dropZone.fuiDropZonePredicate();\r\n const accepted = !predicate || predicate(this);\r\n\r\n if (accepted) {\r\n this._ngZone.run(() => {\r\n const dropEvent: FuiDropEvent = {\r\n source: this,\r\n dragData: this.fuiDragData(),\r\n dropZoneData: dropZone.fuiDropZoneData(),\r\n dropZone,\r\n isPointerOverContainer: true,\r\n };\r\n this.fuiDragDropped.emit(dropEvent);\r\n dropZone.fuiDropped.emit(dropEvent);\r\n });\r\n }\r\n }\r\n\r\n this._cleanupDrag();\r\n\r\n this._ngZone.run(() => {\r\n this._registry.endDrag(event);\r\n this.fuiDragEnded.emit({\r\n source: this,\r\n data: this.fuiDragData(),\r\n pointerPosition: position,\r\n distance: this._dragRef.distance,\r\n event,\r\n });\r\n this._isDragging.set(false);\r\n });\r\n\r\n this._dragRef.reset();\r\n }\r\n\r\n _onKeydown(event: KeyboardEvent): void {\r\n if (this.fuiDragDisabled()) {\r\n return;\r\n }\r\n\r\n if (!this._keyboardDragging) {\r\n if (event.key === ' ' || event.key === 'Enter') {\r\n event.preventDefault();\r\n this._startKeyboardDrag();\r\n }\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case 'ArrowUp':\r\n event.preventDefault();\r\n this._moveKeyboard(0, -this.KEYBOARD_STEP);\r\n break;\r\n case 'ArrowDown':\r\n event.preventDefault();\r\n this._moveKeyboard(0, this.KEYBOARD_STEP);\r\n break;\r\n case 'ArrowLeft':\r\n event.preventDefault();\r\n this._moveKeyboard(-this.KEYBOARD_STEP, 0);\r\n break;\r\n case 'ArrowRight':\r\n event.preventDefault();\r\n this._moveKeyboard(this.KEYBOARD_STEP, 0);\r\n break;\r\n case 'Escape':\r\n event.preventDefault();\r\n this._cancelKeyboardDrag();\r\n break;\r\n case ' ':\r\n case 'Enter':\r\n event.preventDefault();\r\n this._endKeyboardDrag();\r\n break;\r\n }\r\n }\r\n\r\n private _startKeyboardDrag(): void {\r\n const rect = (this.element.nativeElement as HTMLElement).getBoundingClientRect();\r\n const startPosition: FuiPoint = {\r\n x: rect.left + rect.width / 2,\r\n y: rect.top + rect.height / 2,\r\n };\r\n\r\n this._keyboardDragging = true;\r\n this._keyboardPosition = { ...startPosition };\r\n this._dragRef.start(startPosition.x, startPosition.y);\r\n\r\n this._previewElement = this._createPreview();\r\n this._updatePreviewPosition(startPosition);\r\n this._document.body.appendChild(this._previewElement);\r\n\r\n this._isDragging.set(true);\r\n this._registry.startDrag({\r\n source: this,\r\n previewElement: this._previewElement,\r\n startPosition,\r\n currentPosition: { ...startPosition },\r\n data: this.fuiDragData(),\r\n });\r\n }\r\n\r\n private _moveKeyboard(dx: number, dy: number): void {\r\n const axis = this.fuiDragLockAxis();\r\n if (axis === 'x') {\r\n dy = 0;\r\n }\r\n if (axis === 'y') {\r\n dx = 0;\r\n }\r\n\r\n this._keyboardPosition.x += dx;\r\n this._keyboardPosition.y += dy;\r\n this._dragRef.move(this._keyboardPosition.x, this._keyboardPosition.y);\r\n\r\n if (this._previewElement) {\r\n this._updatePreviewPosition(this._keyboardPosition);\r\n }\r\n }\r\n\r\n private _endKeyboardDrag(): void {\r\n const position = this._keyboardPosition;\r\n const dropZone = this._registry.getDropZoneAtPoint(position);\r\n\r\n if (dropZone && !dropZone.fuiDropZoneDisabled()) {\r\n const predicate = dropZone.fuiDropZonePredicate();\r\n const accepted = !predicate || predicate(this);\r\n\r\n if (accepted) {\r\n const dropEvent: FuiDropEvent = {\r\n source: this,\r\n dragData: this.fuiDragData(),\r\n dropZoneData: dropZone.fuiDropZoneData(),\r\n dropZone,\r\n isPointerOverContainer: true,\r\n };\r\n this.fuiDragDropped.emit(dropEvent);\r\n dropZone.fuiDropped.emit(dropEvent);\r\n }\r\n }\r\n\r\n this._cleanupDrag();\r\n this._registry.cancelDrag();\r\n this._isDragging.set(false);\r\n this._keyboardDragging = false;\r\n this._dragRef.reset();\r\n }\r\n\r\n private _cancelKeyboardDrag(): void {\r\n this._cleanupDrag();\r\n this._registry.cancelDrag();\r\n this._isDragging.set(false);\r\n this._keyboardDragging = false;\r\n this._dragRef.reset();\r\n }\r\n\r\n private _createPreview(): HTMLElement {\r\n const sourceEl = this.element.nativeElement;\r\n const rect = sourceEl.getBoundingClientRect();\r\n const preview = sourceEl.cloneNode(true) as HTMLElement;\r\n\r\n preview.classList.add('fui-drag-preview');\r\n preview.style.position = 'fixed';\r\n preview.style.width = `${rect.width}px`;\r\n preview.style.height = `${rect.height}px`;\r\n preview.style.zIndex = '10000';\r\n preview.style.pointerEvents = 'none';\r\n preview.style.margin = '0';\r\n\r\n return preview;\r\n }\r\n\r\n private _createPlaceholder(): HTMLElement {\r\n const sourceEl = this.element.nativeElement;\r\n const rect = sourceEl.getBoundingClientRect();\r\n const placeholder = this._document.createElement('div');\r\n\r\n placeholder.classList.add('fui-drag-placeholder');\r\n placeholder.style.width = `${rect.width}px`;\r\n placeholder.style.height = `${rect.height}px`;\r\n placeholder.style.boxSizing = 'border-box';\r\n\r\n return placeholder;\r\n }\r\n\r\n private _updatePreviewPosition(position: FuiPoint): void {\r\n if (!this._previewElement) {\r\n return;\r\n }\r\n const sourceRect = this.element.nativeElement.getBoundingClientRect();\r\n const offsetX = sourceRect.width / 2;\r\n const offsetY = sourceRect.height / 2;\r\n\r\n this._previewElement.style.left = `${position.x - offsetX}px`;\r\n this._previewElement.style.top = `${position.y - offsetY}px`;\r\n }\r\n\r\n private _applyConstraints(position: FuiPoint): FuiPoint {\r\n const axis = this.fuiDragLockAxis();\r\n const start = this._dragRef.startPosition;\r\n let { x, y } = position;\r\n\r\n if (axis === 'x') {\r\n y = start.y;\r\n } else if (axis === 'y') {\r\n x = start.x;\r\n }\r\n\r\n if (this._boundaryRect) {\r\n const rect = this._boundaryRect;\r\n x = Math.max(rect.left, Math.min(x, rect.right));\r\n y = Math.max(rect.top, Math.min(y, rect.bottom));\r\n }\r\n\r\n return { x, y };\r\n }\r\n\r\n /** Pattern allowing simple CSS selectors (tag, class, id, attribute selectors) */\r\n private static readonly _SAFE_SELECTOR_PATTERN = /^[a-zA-Z0-9\\-_.#\\[\\]=~|^$*:\" >,+()]+$/;\r\n\r\n private _resolveBoundary(): void {\r\n const boundary = this.fuiDragBoundary();\r\n if (!boundary) {\r\n this._boundaryRect = null;\r\n return;\r\n }\r\n\r\n let boundaryElement: HTMLElement | null = null;\r\n if (typeof boundary === 'string') {\r\n // Validate selector to prevent injection of malicious strings\r\n if (!FuiDragDirective._SAFE_SELECTOR_PATTERN.test(boundary)) {\r\n console.warn(`[FormaUI] Invalid drag boundary selector: \"${boundary}\"`);\r\n this._boundaryRect = null;\r\n return;\r\n }\r\n boundaryElement = this._document.querySelector(boundary);\r\n } else {\r\n boundaryElement = boundary.nativeElement;\r\n }\r\n\r\n this._boundaryRect = boundaryElement ? boundaryElement.getBoundingClientRect() : null;\r\n }\r\n\r\n private _cleanupDrag(): void {\r\n if (this._previewElement?.parentNode) {\r\n this._previewElement.parentNode.removeChild(this._previewElement);\r\n }\r\n this._previewElement = null;\r\n\r\n if (this._placeholderElement?.parentNode) {\r\n this._placeholderElement.parentNode.removeChild(this._placeholderElement);\r\n }\r\n this._placeholderElement = null;\r\n }\r\n\r\n private _removeListeners(): void {\r\n if (this._pointerMoveHandler) {\r\n this._document.removeEventListener('pointermove', this._pointerMoveHandler);\r\n this._pointerMoveHandler = null;\r\n }\r\n if (this._pointerUpHandler) {\r\n this._document.removeEventListener('pointerup', this._pointerUpHandler);\r\n this._pointerUpHandler = null;\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._removeListeners();\r\n this._cleanupDrag();\r\n this._autoScroller.destroy();\r\n this._dragRef.reset();\r\n }\r\n}\r\n","import { Directive, effect, ElementRef, inject, input, OnDestroy, OnInit, output, signal } from '@angular/core';\r\nimport { FuiDragRegistryService } from './drag-registry.service';\r\nimport { FuiDragEvent, FuiDragSource, FuiDropEvent } from './drag-drop.types';\r\n\r\n@Directive({\r\n selector: '[fuiDropZone]',\r\n standalone: true,\r\n host: {\r\n class: 'fui-drop-zone',\r\n '[class.fui-drop-zone--active]': '_isActive()',\r\n '[class.fui-drop-zone--over]': '_isOver()',\r\n '[attr.aria-dropeffect]': '\"move\"',\r\n },\r\n})\r\nexport class FuiDropZoneDirective implements OnInit, OnDestroy {\r\n readonly fuiDropZoneData = input<any>(null);\r\n readonly fuiDropZoneDisabled = input(false);\r\n readonly fuiDropZonePredicate = input<((drag: FuiDragSource) => boolean) | null>(null);\r\n\r\n readonly fuiDropZoneEntered = output<FuiDragEvent>();\r\n readonly fuiDropZoneExited = output<FuiDragEvent>();\r\n readonly fuiDropped = output<FuiDropEvent>();\r\n\r\n readonly element = inject(ElementRef<HTMLElement>);\r\n readonly _isActive = signal(false);\r\n readonly _isOver = signal(false);\r\n\r\n private readonly _registry = inject(FuiDragRegistryService);\r\n private _wasOver = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const activeDrag = this._registry.activeDrag();\r\n if (this.fuiDropZoneDisabled()) {\r\n this._isActive.set(false);\r\n this._isOver.set(false);\r\n return;\r\n }\r\n\r\n if (activeDrag) {\r\n this._isActive.set(true);\r\n\r\n // Check if pointer is over this drop zone\r\n const rect = this.element.nativeElement.getBoundingClientRect();\r\n const pos = activeDrag.currentPosition;\r\n const isOver = pos.x >= rect.left && pos.x <= rect.right && pos.y >= rect.top && pos.y <= rect.bottom;\r\n\r\n this._isOver.set(isOver);\r\n\r\n if (isOver && !this._wasOver) {\r\n this.fuiDropZoneEntered.emit({\r\n source: activeDrag.source,\r\n data: activeDrag.data,\r\n pointerPosition: activeDrag.currentPosition,\r\n distance: {\r\n x: activeDrag.currentPosition.x - activeDrag.startPosition.x,\r\n y: activeDrag.currentPosition.y - activeDrag.startPosition.y,\r\n },\r\n dropZone: this,\r\n event: null!,\r\n });\r\n } else if (!isOver && this._wasOver) {\r\n this.fuiDropZoneExited.emit({\r\n source: activeDrag.source,\r\n data: activeDrag.data,\r\n pointerPosition: activeDrag.currentPosition,\r\n distance: {\r\n x: activeDrag.currentPosition.x - activeDrag.startPosition.x,\r\n y: activeDrag.currentPosition.y - activeDrag.startPosition.y,\r\n },\r\n dropZone: this,\r\n event: null!,\r\n });\r\n }\r\n\r\n this._wasOver = isOver;\r\n } else {\r\n this._isActive.set(false);\r\n this._isOver.set(false);\r\n this._wasOver = false;\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this._registry.registerDropZone(this);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._registry.unregisterDropZone(this);\r\n }\r\n}\r\n","import {\r\n contentChildren,\r\n Directive,\r\n effect,\r\n ElementRef,\r\n inject,\r\n input,\r\n OnDestroy,\r\n OnInit,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { FuiDragRegistryService } from './drag-registry.service';\r\nimport { FuiDragDirective } from './fui-drag.directive';\r\nimport { FuiSortEvent, FuiSortableRef, FuiTransferEvent } from './drag-drop.types';\r\n\r\n@Directive({\r\n selector: '[fuiSortable]',\r\n standalone: true,\r\n host: {\r\n class: 'fui-sortable',\r\n '[class.fui-sortable--dragging]': '_hasDragging()',\r\n },\r\n})\r\nexport class FuiSortableDirective implements OnInit, OnDestroy {\r\n readonly fuiSortableData = input.required<any[]>();\r\n readonly fuiSortableDisabled = input(false);\r\n readonly fuiSortableOrientation = input<'vertical' | 'horizontal'>('vertical');\r\n readonly fuiSortableConnectedTo = input<FuiSortableDirective[]>([]);\r\n\r\n readonly fuiSortableSorted = output<FuiSortEvent>();\r\n readonly fuiSortableTransferred = output<FuiTransferEvent>();\r\n\r\n readonly element = inject(ElementRef<HTMLElement>);\r\n readonly _hasDragging = signal(false);\r\n\r\n readonly _dragItems = contentChildren(FuiDragDirective);\r\n\r\n private readonly _registry = inject(FuiDragRegistryService);\r\n private _activeDragStartIndex = -1;\r\n private _currentHoverIndex = -1;\r\n private _siblingRects: DOMRect[] = [];\r\n\r\n constructor() {\r\n effect(() => {\r\n const activeDrag = this._registry.activeDrag();\r\n if (this.fuiSortableDisabled()) {\r\n this._hasDragging.set(false);\r\n return;\r\n }\r\n\r\n if (activeDrag) {\r\n const dragItems = this._dragItems();\r\n const sourceIndex = dragItems.indexOf(activeDrag.source as FuiDragDirective);\r\n\r\n if (sourceIndex >= 0) {\r\n // Drag originated from this container\r\n this._hasDragging.set(true);\r\n\r\n if (this._activeDragStartIndex === -1) {\r\n this._activeDragStartIndex = sourceIndex;\r\n this._captureRects();\r\n }\r\n\r\n const insertIndex = this._getInsertionIndex(activeDrag.currentPosition);\r\n if (insertIndex !== this._currentHoverIndex) {\r\n this._currentHoverIndex = insertIndex;\r\n this._applyTransforms(sourceIndex, insertIndex);\r\n }\r\n } else {\r\n // Check if drag is over this container (cross-container)\r\n const rect = this.element.nativeElement.getBoundingClientRect();\r\n const pos = activeDrag.currentPosition;\r\n const isOver = pos.x >= rect.left && pos.x <= rect.right && pos.y >= rect.top && pos.y <= rect.bottom;\r\n\r\n if (isOver) {\r\n this._hasDragging.set(true);\r\n } else {\r\n this._hasDragging.set(false);\r\n }\r\n }\r\n } else {\r\n // Drag ended - check if we need to emit sort/transfer events\r\n if (this._hasDragging() && this._activeDragStartIndex >= 0) {\r\n this._finalizeDrop();\r\n }\r\n this._hasDragging.set(false);\r\n this._activeDragStartIndex = -1;\r\n this._currentHoverIndex = -1;\r\n this._clearTransforms();\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this._registry.registerSortable(this);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._registry.unregisterSortable(this);\r\n }\r\n\r\n private _captureRects(): void {\r\n const items = this._dragItems();\r\n this._siblingRects = items.map((item) => item.element.nativeElement.getBoundingClientRect());\r\n }\r\n\r\n private _getInsertionIndex(position: { x: number; y: number }): number {\r\n const orientation = this.fuiSortableOrientation();\r\n\r\n for (let i = 0; i < this._siblingRects.length; i++) {\r\n const rect = this._siblingRects[i];\r\n if (orientation === 'vertical') {\r\n const midY = rect.top + rect.height / 2;\r\n if (position.y < midY) {\r\n return i;\r\n }\r\n } else {\r\n const midX = rect.left + rect.width / 2;\r\n if (position.x < midX) {\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n return this._siblingRects.length;\r\n }\r\n\r\n private _applyTransforms(sourceIndex: number, insertIndex: number): void {\r\n const items = this._dragItems();\r\n const orientation = this.fuiSortableOrientation();\r\n\r\n items.forEach((item, i) => {\r\n if (i === sourceIndex) {\r\n return; // Skip the dragged item\r\n }\r\n\r\n const el = item.element.nativeElement as HTMLElement;\r\n let offset = 0;\r\n\r\n if (sourceIndex < insertIndex) {\r\n // Dragging down/right: shift items between source+1..insert up/left\r\n if (i > sourceIndex && i < insertIndex) {\r\n const rect = this._siblingRects[sourceIndex];\r\n offset = orientation === 'vertical' ? -rect.height : -rect.width;\r\n }\r\n } else if (sourceIndex > insertIndex) {\r\n // Dragging up/left: shift items between insert..source-1 down/right\r\n if (i >= insertIndex && i < sourceIndex) {\r\n const rect = this._siblingRects[sourceIndex];\r\n offset = orientation === 'vertical' ? rect.height : rect.width;\r\n }\r\n }\r\n\r\n if (orientation === 'vertical') {\r\n el.style.transform = offset ? `translateY(${offset}px)` : '';\r\n } else {\r\n el.style.transform = offset ? `translateX(${offset}px)` : '';\r\n }\r\n el.style.transition = 'transform 150ms ease';\r\n });\r\n }\r\n\r\n private _clearTransforms(): void {\r\n const items = this._dragItems();\r\n items.forEach((item) => {\r\n const el = item.element.nativeElement as HTMLElement;\r\n el.style.transform = '';\r\n el.style.transition = '';\r\n });\r\n }\r\n\r\n private _finalizeDrop(): void {\r\n if (this._currentHoverIndex >= 0 && this._currentHoverIndex !== this._activeDragStartIndex) {\r\n const data = [...this.fuiSortableData()];\r\n const [moved] = data.splice(this._activeDragStartIndex, 1);\r\n const adjustedIndex =\r\n this._currentHoverIndex > this._activeDragStartIndex ? this._currentHoverIndex - 1 : this._currentHoverIndex;\r\n data.splice(adjustedIndex, 0, moved);\r\n\r\n this.fuiSortableSorted.emit({\r\n data,\r\n previousIndex: this._activeDragStartIndex,\r\n currentIndex: adjustedIndex,\r\n container: this,\r\n });\r\n }\r\n this._clearTransforms();\r\n }\r\n\r\n /** Called by external sortables for cross-container transfers. */\r\n emitTransfer(item: any, previousContainer: FuiSortableRef, previousIndex: number, currentIndex: number): void {\r\n this.fuiSortableTransferred.emit({\r\n item,\r\n previousContainer,\r\n container: this,\r\n previousIndex,\r\n currentIndex,\r\n });\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raintonic-formaui-cdk-form-field.mjs","sources":["../../../lib/cdk/form-field/form-control-base.ts","../../../lib/cdk/form-field/raintonic-formaui-cdk-form-field.ts"],"sourcesContent":["import { inject, Injector } from '@angular/core';\nimport { NgControl, Validators } from '@angular/forms';\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\n\n/**\n * Reference holder for NgControl resolved via the deferred Promise.resolve() pattern.\n * This avoids circular DI when a component provides both NG_VALUE_ACCESSOR and injects NgControl.\n */\nexport interface NgControlRef {\n ngControl: NgControl | null;\n}\n\n/**\n * Injects NgControl via the deferred `Promise.resolve()` pattern used throughout FormaUI.\n * Must be called inside a constructor (injection context).\n *\n * @returns A ref object whose `ngControl` property is populated asynchronously.\n */\nexport function injectNgControl(): NgControlRef {\n const injector = inject(Injector);\n const ref: NgControlRef = { ngControl: null };\n\n void Promise.resolve().then(() => {\n ref.ngControl = injector.get(NgControl, null, { self: true, optional: true });\n if (ref.ngControl != null) {\n ref.ngControl.valueAccessor = null; // Will be set by the component\n }\n });\n\n return ref;\n}\n\n/**\n * Updates the error state by comparing current control validity against the error-state matcher.\n * Call this in `ngDoCheck`.\n *\n * @param ngControl - The NgControl instance (may be null).\n * @param errorState - Writable signal holding the current error state.\n * @param errorStateMatcher - Consumer-provided matcher, or null to use the default.\n * @param defaultErrorStateMatcher - The injected DefaultErrorStateMatcher.\n * @param parentForm - The parent NgForm, if any.\n * @param parentFormGroup - The parent FormGroupDirective, if any.\n * @param stateChanges - Subject to notify of state changes.\n */\nexport function updateErrorState(\n ngControl: NgControl | null,\n errorState: { (): boolean; set: (v: boolean) => void },\n errorStateMatcher: ErrorStateMatcher | null,\n defaultErrorStateMatcher: DefaultErrorStateMatcher,\n parentForm: NgForm | null,\n parentFormGroup: FormGroupDirective | null,\n stateChanges: Subject<void>,\n): void {\n if (!ngControl?.control) return;\n\n const isOldState = errorState();\n const parent = parentFormGroup ?? parentForm;\n const matcher = errorStateMatcher ?? defaultErrorStateMatcher;\n const control = ngControl.control as FormControl;\n const isNewState = control ? matcher.isErrorState(control, parent) : false;\n\n if (isNewState !== isOldState) {\n errorState.set(isNewState);\n stateChanges.next();\n }\n}\n\n/**\n * Syncs the `required` signal from the form control's validators.\n * Call this in `ngDoCheck`.\n *\n * @param ngControl - The NgControl instance (may be null).\n * @param required - Writable signal holding the current required state.\n * @param stateChanges - Subject to notify of state changes.\n */\nexport function syncRequiredState(\n ngControl: NgControl | null,\n required: { (): boolean; set: (v: boolean) => void },\n stateChanges: Subject<void>,\n): void {\n if (!ngControl?.control) return;\n\n const req = ngControl.control.hasValidator(Validators.required) ?? false;\n if (req !== required()) {\n required.set(req);\n stateChanges.next();\n }\n}\n\n/**\n * Syncs the NgControl's disabled state into a local signal.\n * Call this in `ngDoCheck`.\n *\n * @param ngControl - The NgControl instance (may be null).\n * @param ngControlDisabled - Writable signal holding the mirrored disabled state.\n * @param stateChanges - Subject to notify of state changes.\n */\nexport function syncNgControlDisabled(\n ngControl: NgControl | null,\n ngControlDisabled: { (): boolean; set: (v: boolean) => void },\n stateChanges: Subject<void>,\n): void {\n if (!ngControl) return;\n\n const ncd = ngControl.disabled ?? false;\n if (ncd !== ngControlDisabled()) {\n ngControlDisabled.set(ncd);\n stateChanges.next();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAcA;;;;;AAKG;SACa,eAAe,GAAA;AAC7B,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,GAAG,GAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;IAE7C,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;QAC/B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7E,QAAA,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE;YACzB,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;QACrC;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,gBAAgB,CAC9B,SAA2B,EAC3B,UAAsD,EACtD,iBAA2C,EAC3C,wBAAkD,EAClD,UAAyB,EACzB,eAA0C,EAC1C,YAA2B,EAAA;IAE3B,IAAI,CAAC,SAAS,EAAE,OAAO;QAAE;AAEzB,IAAA,MAAM,UAAU,GAAG,UAAU,EAAE;AAC/B,IAAA,MAAM,MAAM,GAAG,eAAe,IAAI,UAAU;AAC5C,IAAA,MAAM,OAAO,GAAG,iBAAiB,IAAI,wBAAwB;AAC7D,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAsB;AAChD,IAAA,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK;AAE1E,IAAA,IAAI,UAAU,KAAK,UAAU,EAAE;AAC7B,QAAA,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1B,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;AAEA;;;;;;;AAOG;SACa,iBAAiB,CAC/B,SAA2B,EAC3B,QAAoD,EACpD,YAA2B,EAAA;IAE3B,IAAI,CAAC,SAAS,EAAE,OAAO;QAAE;AAEzB,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK;AACxE,IAAA,IAAI,GAAG,KAAK,QAAQ,EAAE,EAAE;AACtB,QAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;AAEA;;;;;;;AAOG;SACa,qBAAqB,CACnC,SAA2B,EAC3B,iBAA6D,EAC7D,YAA2B,EAAA;AAE3B,IAAA,IAAI,CAAC,SAAS;QAAE;AAEhB,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,IAAI,KAAK;AACvC,IAAA,IAAI,GAAG,KAAK,iBAAiB,EAAE,EAAE;AAC/B,QAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;;AC/GA;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"raintonic-formaui-cdk-form-field.mjs","sources":["../../../lib/cdk/form-field/form-control-base.ts","../../../lib/cdk/form-field/raintonic-formaui-cdk-form-field.ts"],"sourcesContent":["import { inject, Injector } from '@angular/core';\r\nimport { NgControl, Validators } from '@angular/forms';\r\nimport { FormControl, FormGroupDirective, NgForm } from '@angular/forms';\r\nimport { Subject } from 'rxjs';\r\nimport { DefaultErrorStateMatcher, ErrorStateMatcher } from '@raintonic/formaui/core';\r\n\r\n/**\r\n * Reference holder for NgControl resolved via the deferred Promise.resolve() pattern.\r\n * This avoids circular DI when a component provides both NG_VALUE_ACCESSOR and injects NgControl.\r\n */\r\nexport interface NgControlRef {\r\n ngControl: NgControl | null;\r\n}\r\n\r\n/**\r\n * Injects NgControl via the deferred `Promise.resolve()` pattern used throughout FormaUI.\r\n * Must be called inside a constructor (injection context).\r\n *\r\n * @returns A ref object whose `ngControl` property is populated asynchronously.\r\n */\r\nexport function injectNgControl(): NgControlRef {\r\n const injector = inject(Injector);\r\n const ref: NgControlRef = { ngControl: null };\r\n\r\n void Promise.resolve().then(() => {\r\n ref.ngControl = injector.get(NgControl, null, { self: true, optional: true });\r\n if (ref.ngControl != null) {\r\n ref.ngControl.valueAccessor = null; // Will be set by the component\r\n }\r\n });\r\n\r\n return ref;\r\n}\r\n\r\n/**\r\n * Updates the error state by comparing current control validity against the error-state matcher.\r\n * Call this in `ngDoCheck`.\r\n *\r\n * @param ngControl - The NgControl instance (may be null).\r\n * @param errorState - Writable signal holding the current error state.\r\n * @param errorStateMatcher - Consumer-provided matcher, or null to use the default.\r\n * @param defaultErrorStateMatcher - The injected DefaultErrorStateMatcher.\r\n * @param parentForm - The parent NgForm, if any.\r\n * @param parentFormGroup - The parent FormGroupDirective, if any.\r\n * @param stateChanges - Subject to notify of state changes.\r\n */\r\nexport function updateErrorState(\r\n ngControl: NgControl | null,\r\n errorState: { (): boolean; set: (v: boolean) => void },\r\n errorStateMatcher: ErrorStateMatcher | null,\r\n defaultErrorStateMatcher: DefaultErrorStateMatcher,\r\n parentForm: NgForm | null,\r\n parentFormGroup: FormGroupDirective | null,\r\n stateChanges: Subject<void>,\r\n): void {\r\n if (!ngControl?.control) return;\r\n\r\n const isOldState = errorState();\r\n const parent = parentFormGroup ?? parentForm;\r\n const matcher = errorStateMatcher ?? defaultErrorStateMatcher;\r\n const control = ngControl.control as FormControl;\r\n const isNewState = control ? matcher.isErrorState(control, parent) : false;\r\n\r\n if (isNewState !== isOldState) {\r\n errorState.set(isNewState);\r\n stateChanges.next();\r\n }\r\n}\r\n\r\n/**\r\n * Syncs the `required` signal from the form control's validators.\r\n * Call this in `ngDoCheck`.\r\n *\r\n * @param ngControl - The NgControl instance (may be null).\r\n * @param required - Writable signal holding the current required state.\r\n * @param stateChanges - Subject to notify of state changes.\r\n */\r\nexport function syncRequiredState(\r\n ngControl: NgControl | null,\r\n required: { (): boolean; set: (v: boolean) => void },\r\n stateChanges: Subject<void>,\r\n): void {\r\n if (!ngControl?.control) return;\r\n\r\n const req = ngControl.control.hasValidator(Validators.required) ?? false;\r\n if (req !== required()) {\r\n required.set(req);\r\n stateChanges.next();\r\n }\r\n}\r\n\r\n/**\r\n * Syncs the NgControl's disabled state into a local signal.\r\n * Call this in `ngDoCheck`.\r\n *\r\n * @param ngControl - The NgControl instance (may be null).\r\n * @param ngControlDisabled - Writable signal holding the mirrored disabled state.\r\n * @param stateChanges - Subject to notify of state changes.\r\n */\r\nexport function syncNgControlDisabled(\r\n ngControl: NgControl | null,\r\n ngControlDisabled: { (): boolean; set: (v: boolean) => void },\r\n stateChanges: Subject<void>,\r\n): void {\r\n if (!ngControl) return;\r\n\r\n const ncd = ngControl.disabled ?? false;\r\n if (ncd !== ngControlDisabled()) {\r\n ngControlDisabled.set(ncd);\r\n stateChanges.next();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;AAcA;;;;;AAKG;SACa,eAAe,GAAA;AAC7B,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AACjC,IAAA,MAAM,GAAG,GAAiB,EAAE,SAAS,EAAE,IAAI,EAAE;IAE7C,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;QAC/B,GAAG,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC7E,QAAA,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE;YACzB,GAAG,CAAC,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;QACrC;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,GAAG;AACZ;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,gBAAgB,CAC9B,SAA2B,EAC3B,UAAsD,EACtD,iBAA2C,EAC3C,wBAAkD,EAClD,UAAyB,EACzB,eAA0C,EAC1C,YAA2B,EAAA;IAE3B,IAAI,CAAC,SAAS,EAAE,OAAO;QAAE;AAEzB,IAAA,MAAM,UAAU,GAAG,UAAU,EAAE;AAC/B,IAAA,MAAM,MAAM,GAAG,eAAe,IAAI,UAAU;AAC5C,IAAA,MAAM,OAAO,GAAG,iBAAiB,IAAI,wBAAwB;AAC7D,IAAA,MAAM,OAAO,GAAG,SAAS,CAAC,OAAsB;AAChD,IAAA,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK;AAE1E,IAAA,IAAI,UAAU,KAAK,UAAU,EAAE;AAC7B,QAAA,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1B,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;AAEA;;;;;;;AAOG;SACa,iBAAiB,CAC/B,SAA2B,EAC3B,QAAoD,EACpD,YAA2B,EAAA;IAE3B,IAAI,CAAC,SAAS,EAAE,OAAO;QAAE;AAEzB,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK;AACxE,IAAA,IAAI,GAAG,KAAK,QAAQ,EAAE,EAAE;AACtB,QAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;QACjB,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;AAEA;;;;;;;AAOG;SACa,qBAAqB,CACnC,SAA2B,EAC3B,iBAA6D,EAC7D,YAA2B,EAAA;AAE3B,IAAA,IAAI,CAAC,SAAS;QAAE;AAEhB,IAAA,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,IAAI,KAAK;AACvC,IAAA,IAAI,GAAG,KAAK,iBAAiB,EAAE,EAAE;AAC/B,QAAA,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC;QAC1B,YAAY,CAAC,IAAI,EAAE;IACrB;AACF;;AC/GA;;AAEG;;;;"}
|