forty-cdk 0.7.0 → 0.9.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/README.md +3 -3
- package/aspect-ratio/README.md +19 -0
- package/avatar/README.md +3 -3
- package/breadcrumbs/README.md +12 -0
- package/calendar/README.md +20 -17
- package/context-menu/README.md +20 -19
- package/date-picker/README.md +22 -63
- package/dialog/README.md +1 -1
- package/drag-drop/README.md +2 -2
- package/dropdown-menu/README.md +20 -19
- package/fesm2022/forty-cdk-accordion.mjs +2 -15
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -1
- package/fesm2022/forty-cdk-aspect-ratio.mjs +11 -15
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -1
- package/fesm2022/forty-cdk-avatar.mjs +8 -4
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -1
- package/fesm2022/forty-cdk-breadcrumbs.mjs +32 -21
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -1
- package/fesm2022/forty-cdk-button.mjs +253 -20
- package/fesm2022/forty-cdk-button.mjs.map +1 -1
- package/fesm2022/forty-cdk-calendar.mjs +119 -76
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -1
- package/fesm2022/forty-cdk-checkbox.mjs +2 -15
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -1
- package/fesm2022/forty-cdk-combobox.mjs +124 -97
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -1
- package/fesm2022/forty-cdk-context-menu.mjs +11 -2
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-core.mjs +1513 -1176
- package/fesm2022/forty-cdk-core.mjs.map +1 -1
- package/fesm2022/forty-cdk-date-field.mjs +3 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-date-picker.mjs +35 -70
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -1
- package/fesm2022/forty-cdk-date-range-field.mjs +25 -106
- package/fesm2022/forty-cdk-date-range-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-dialog.mjs +31 -17
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -1
- package/fesm2022/forty-cdk-disclosure.mjs +2 -15
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -1
- package/fesm2022/forty-cdk-drag-drop.mjs +81 -15
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -1
- package/fesm2022/forty-cdk-drawer.mjs +37 -23
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -1
- package/fesm2022/forty-cdk-dropdown-menu.mjs +11 -2
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-field.mjs +2 -15
- package/fesm2022/forty-cdk-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-fieldset.mjs +2 -15
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -1
- package/fesm2022/forty-cdk-file-upload.mjs +44 -46
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -1
- package/fesm2022/forty-cdk-input.mjs +2 -15
- package/fesm2022/forty-cdk-input.mjs.map +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs +30 -8
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +87 -3
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -1
- package/fesm2022/forty-cdk-menu.mjs +17 -2
- package/fesm2022/forty-cdk-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-menubar.mjs +7 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -1
- package/fesm2022/forty-cdk-meter.mjs +31 -29
- package/fesm2022/forty-cdk-meter.mjs.map +1 -1
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -1
- package/fesm2022/forty-cdk-number-input.mjs +1 -1
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -1
- package/fesm2022/forty-cdk-otp-input.mjs +4 -17
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -1
- package/fesm2022/forty-cdk-pane-resizer.mjs +2 -15
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -1
- package/fesm2022/forty-cdk-popover.mjs +44 -7
- package/fesm2022/forty-cdk-popover.mjs.map +1 -1
- package/fesm2022/forty-cdk-progress.mjs +25 -14
- package/fesm2022/forty-cdk-progress.mjs.map +1 -1
- package/fesm2022/forty-cdk-radio-group.mjs +6 -5
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -1
- package/fesm2022/forty-cdk-search.mjs +136 -38
- package/fesm2022/forty-cdk-search.mjs.map +1 -1
- package/fesm2022/forty-cdk-select.mjs +308 -162
- package/fesm2022/forty-cdk-select.mjs.map +1 -1
- package/fesm2022/forty-cdk-separator.mjs +1 -15
- package/fesm2022/forty-cdk-separator.mjs.map +1 -1
- package/fesm2022/forty-cdk-slider.mjs +79 -90
- package/fesm2022/forty-cdk-slider.mjs.map +1 -1
- package/fesm2022/forty-cdk-stepper.mjs +13 -6
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -1
- package/fesm2022/forty-cdk-switch.mjs +2 -15
- package/fesm2022/forty-cdk-switch.mjs.map +1 -1
- package/fesm2022/forty-cdk-table.mjs +420 -138
- package/fesm2022/forty-cdk-table.mjs.map +1 -1
- package/fesm2022/forty-cdk-time-field.mjs +3 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-time-picker.mjs +61 -129
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -1
- package/fesm2022/forty-cdk-time-range-field.mjs +64 -111
- package/fesm2022/forty-cdk-time-range-field.mjs.map +1 -1
- package/fesm2022/forty-cdk-toggle.mjs +5 -6
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -1
- package/fesm2022/forty-cdk-toolbar.mjs +10 -3
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -1
- package/fesm2022/forty-cdk-tree.mjs +36 -19
- package/fesm2022/forty-cdk-tree.mjs.map +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs +34 -18
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/file-upload/README.md +4 -4
- package/listbox/README.md +1 -1
- package/menu/README.md +15 -0
- package/meter/README.md +12 -10
- package/package.json +1 -1
- package/popover/README.md +1 -1
- package/progress/README.md +3 -1
- package/radio-group/README.md +2 -2
- package/search/README.md +34 -15
- package/select/README.md +7 -1
- package/signal-forms/README.md +1 -1
- package/stepper/README.md +13 -0
- package/table/README.md +31 -36
- package/time-range-field/README.md +17 -12
- package/toggle/README.md +1 -1
- package/toolbar/README.md +4 -4
- package/tree/README.md +11 -9
- package/types/forty-cdk-accordion.d.ts +3 -20
- package/types/forty-cdk-aspect-ratio.d.ts +11 -20
- package/types/forty-cdk-avatar.d.ts +2 -2
- package/types/forty-cdk-breadcrumbs.d.ts +18 -8
- package/types/forty-cdk-button.d.ts +6 -22
- package/types/forty-cdk-calendar.d.ts +33 -9
- package/types/forty-cdk-checkbox.d.ts +2 -20
- package/types/forty-cdk-combobox.d.ts +66 -9
- package/types/forty-cdk-context-menu.d.ts +11 -3
- package/types/forty-cdk-core.d.ts +702 -313
- package/types/forty-cdk-date-field.d.ts +1 -0
- package/types/forty-cdk-date-picker.d.ts +21 -31
- package/types/forty-cdk-date-range-field.d.ts +1 -0
- package/types/forty-cdk-dialog.d.ts +21 -7
- package/types/forty-cdk-disclosure.d.ts +3 -20
- package/types/forty-cdk-drag-drop.d.ts +42 -7
- package/types/forty-cdk-drawer.d.ts +21 -6
- package/types/forty-cdk-dropdown-menu.d.ts +11 -3
- package/types/forty-cdk-field.d.ts +1 -20
- package/types/forty-cdk-fieldset.d.ts +1 -20
- package/types/forty-cdk-file-upload.d.ts +31 -34
- package/types/forty-cdk-input.d.ts +1 -20
- package/types/forty-cdk-internationalized-date.d.ts +10 -6
- package/types/forty-cdk-listbox.d.ts +34 -2
- package/types/forty-cdk-menu.d.ts +22 -5
- package/types/forty-cdk-menubar.d.ts +14 -8
- package/types/forty-cdk-meter.d.ts +29 -27
- package/types/forty-cdk-navigation-menu.d.ts +7 -2
- package/types/forty-cdk-otp-input.d.ts +6 -23
- package/types/forty-cdk-pane-resizer.d.ts +1 -20
- package/types/forty-cdk-popover.d.ts +50 -7
- package/types/forty-cdk-progress.d.ts +31 -11
- package/types/forty-cdk-radio-group.d.ts +8 -7
- package/types/forty-cdk-search.d.ts +137 -34
- package/types/forty-cdk-select.d.ts +122 -125
- package/types/forty-cdk-separator.d.ts +1 -20
- package/types/forty-cdk-slider.d.ts +7 -17
- package/types/forty-cdk-stepper.d.ts +20 -4
- package/types/forty-cdk-switch.d.ts +1 -20
- package/types/forty-cdk-table.d.ts +70 -39
- package/types/forty-cdk-time-field.d.ts +1 -0
- package/types/forty-cdk-time-picker.d.ts +47 -77
- package/types/forty-cdk-time-range-field.d.ts +30 -5
- package/types/forty-cdk-toggle.d.ts +9 -4
- package/types/forty-cdk-toolbar.d.ts +1 -0
- package/types/forty-cdk-tree.d.ts +21 -1
package/README.md
CHANGED
|
@@ -36,9 +36,9 @@ Optional — install only if you use the matching entry point / primitives:
|
|
|
36
36
|
|
|
37
37
|
## Primitives
|
|
38
38
|
|
|
39
|
-
Each primitive lives under [`
|
|
39
|
+
Each primitive lives in its own folder under `projects/forty-cdk/` (e.g. [`accordion/`](accordion), [`dialog/`](dialog)) with its own `README.md` and a minimal styleless usage example.
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
Every primitive ships as its own **secondary entry point** — import `ForDialog` from `forty-cdk/dialog`, `ForAccordion` from `forty-cdk/accordion`, and so on — backed by the shared `forty-cdk/core` entry point. The `@internationalized/date` adapters live in a dedicated `forty-cdk/internationalized-date` entry point so that optional peer stays truly optional. The main `forty-cdk` barrel is **intentionally empty** (it exports no symbols): always import from the specific `forty-cdk/<primitive>` entry point. Standalone directives plus `"sideEffects": false` mean your bundle only ever includes the primitives you import.
|
|
42
42
|
|
|
43
43
|
## Directive → host element matrix
|
|
44
44
|
|
|
@@ -335,7 +335,7 @@ Tests run on Vitest via the Angular CLI builder `@angular/build:unit-test`:
|
|
|
335
335
|
```bash
|
|
336
336
|
pnpm test # all specs, single pass
|
|
337
337
|
pnpm exec ng test forty-cdk --watch # watch mode
|
|
338
|
-
pnpm exec ng test forty-cdk --include "
|
|
338
|
+
pnpm exec ng test forty-cdk --include "../accordion/src/accordion.spec.ts" # single file (path relative to projects/forty-cdk/src/)
|
|
339
339
|
pnpm exec ng test forty-cdk --filter "Enter and Space select" # tests by name (regex)
|
|
340
340
|
```
|
|
341
341
|
|
package/aspect-ratio/README.md
CHANGED
|
@@ -4,6 +4,25 @@ A container that keeps its content at a fixed width-to-height ratio.
|
|
|
4
4
|
|
|
5
5
|
Pure visual utility — it locks an element's box via the native CSS `aspect-ratio` property, with no ARIA semantics. Reach for it to reserve space for media before it loads (preventing layout shift), keep cards on a grid uniform, or wrap responsive iframes.
|
|
6
6
|
|
|
7
|
+
## Why this exists
|
|
8
|
+
|
|
9
|
+
A fixed, never-changing ratio is one line of CSS — you don't need this primitive for that:
|
|
10
|
+
|
|
11
|
+
```css
|
|
12
|
+
.card-cover {
|
|
13
|
+
aspect-ratio: 16 / 9;
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
`[forAspectRatio]` earns its place when the ratio is **dynamic or must be validated**. It is more than the static declaration:
|
|
18
|
+
|
|
19
|
+
- **Reactive `ratio` input.** Bind `[ratio]="ratio()"` and the host style recomputes as the value changes — no manual style writes.
|
|
20
|
+
- **Invalid-value guarding.** `0`, negative, and non-finite ratios fall back to `1`, so a bad computed value never emits invalid CSS.
|
|
21
|
+
- **SSR-safe.** The `aspect-ratio` style is bound declaratively (never touched imperatively), so it renders identically on the server and hydrates cleanly.
|
|
22
|
+
- **Consistent headless API.** Same shape as the other primitives, so it composes the same way.
|
|
23
|
+
|
|
24
|
+
If your ratio is a literal constant, prefer the CSS property directly and keep the bundle leaner. Import `[forAspectRatio]` when reactivity or validation buys you something.
|
|
25
|
+
|
|
7
26
|
## Anatomy
|
|
8
27
|
|
|
9
28
|
```html
|
package/avatar/README.md
CHANGED
|
@@ -78,9 +78,9 @@ export class DemoAvatar {
|
|
|
78
78
|
|
|
79
79
|
### `ForAvatarImage`
|
|
80
80
|
|
|
81
|
-
| Property
|
|
82
|
-
|
|
|
83
|
-
| `(
|
|
81
|
+
| Property | Type | Description |
|
|
82
|
+
| -------------------- | ------------------------- | ------------------------------------------------------------------- |
|
|
83
|
+
| `(loadStatusChange)` | `output<ForAvatarStatus>` | Output. Emits whenever the lifecycle transitions.<br>**Default:** — |
|
|
84
84
|
|
|
85
85
|
| Data attribute | Values |
|
|
86
86
|
| -------------- | ------------------------------------------ |
|
package/breadcrumbs/README.md
CHANGED
|
@@ -40,6 +40,18 @@ export class DemoBreadcrumbs {}
|
|
|
40
40
|
|
|
41
41
|
The root defaults its label to `Breadcrumb`. Override it with `ariaLabel="…"` (or point a native `aria-labelledby` at a visible heading) when a page hosts more than one breadcrumb trail.
|
|
42
42
|
|
|
43
|
+
### Localizing the label
|
|
44
|
+
|
|
45
|
+
`Breadcrumb` is verbalized by screen readers, so translate it per injector scope with `provideForBreadcrumbsDefaults`. Configure it at the application root, or in any component's `providers` to scope the translation to a subtree. A per-instance `[ariaLabel]` still wins over the scope default.
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
import { provideForBreadcrumbsDefaults } from 'forty-cdk/breadcrumbs';
|
|
49
|
+
|
|
50
|
+
bootstrapApplication(App, {
|
|
51
|
+
providers: [provideForBreadcrumbsDefaults({ label: 'Ruta de navegación' })],
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
43
55
|
## API
|
|
44
56
|
|
|
45
57
|
### `ForBreadcrumbs`
|
package/calendar/README.md
CHANGED
|
@@ -26,6 +26,8 @@ bootstrapApplication(App, {
|
|
|
26
26
|
|
|
27
27
|
`@internationalized/date` is a widely-used immutable date primitive; it works in every browser today with no polyfill, and its reference-equality-on-mutation makes it signal-friendly. Both `@internationalized/date` adapters operate on the **Gregorian** calendar today — `createDate` always builds a Gregorian date, so the grid stays Gregorian regardless of the runtime locale. True non-Gregorian calendar systems are deferred to the planned `Temporal.PlainDate` adapter ([#354](https://github.com/tutkli/forty-cdk/issues/354)), a non-breaking addition once the Temporal API is broadly available across browsers — the `DateAdapter<D>` seam means adopting it later is a drop-in, not a migration.
|
|
28
28
|
|
|
29
|
+
**Calendar system (Gregorian).** The adapter seam abstracts the date _library_ and locale-aware _formatting_, not the calendar _system_'s month structure. The grid, the month picker and the date field assume a Gregorian-structured year — exactly twelve months, `month` **1-12**, the year ending at month 12. Adapters over calendars with a different month structure (e.g. a 13-month year) are out of scope; calendar-system pluggability would be revisited with the `Temporal.PlainDate` adapter track ([#354](https://github.com/tutkli/forty-cdk/issues/354)). The optional `compareDate` hook overrides day-only _ordering_ only — it does not make the grid non-Gregorian.
|
|
30
|
+
|
|
29
31
|
## Anatomy
|
|
30
32
|
|
|
31
33
|
```html
|
|
@@ -121,21 +123,22 @@ The library is styleless: style the boolean `data-*` hooks on `[forCalendarCell]
|
|
|
121
123
|
|
|
122
124
|
### `ForCalendar`
|
|
123
125
|
|
|
124
|
-
| Property | Type | Description
|
|
125
|
-
| ------------------- | -------------------------------------- |
|
|
126
|
-
| `value` | `model<D \| null>` | Two-way bindable selected date, or `null`. Used in `selectionMode="single"`. `(valueChange)` fires only on internal selection.<br>**Default:** `null`
|
|
127
|
-
| `selectionMode` | `input<'single' \| 'range'>` | `'single'` (default) keeps the single-date `value` flow. `'range'` switches to anchor → commit and exposes `range`.<br>**Default:** `'single'`
|
|
128
|
-
| `range` | `model<DateRange<D> \| null>` | Two-way bindable committed range. Only used in `selectionMode="range"`. `(rangeChange)` fires only on internal commits/clears.<br>**Default:** `null`
|
|
129
|
-
| `minRangeLength` | `input<number \| null>` | Minimum inclusive day count. A commit shorter than this is a no-op.<br>**Default:** `null` (no minimum)
|
|
130
|
-
| `maxRangeLength` | `input<number \| null>` | Maximum inclusive day count. A commit longer than this is a no-op.<br>**Default:** `null` (no maximum)
|
|
131
|
-
| `min` | `input<D \| null>` | Minimum selectable date (inclusive). Earlier dates are unavailable.<br>**Default:** `null`
|
|
132
|
-
| `max` | `input<D \| null>` | Maximum selectable date (inclusive). Later dates are unavailable.<br>**Default:** `null`
|
|
133
|
-
| `isDateUnavailable` | `input<(date: D) => boolean>` | Per-date predicate marking a date unavailable (present but not selectable).<br>**Default:** `() => false`
|
|
134
|
-
| `dateLabel` | `input<CalendarDateLabelFormatter<D>>` | Formats each gridcell's `aria-label` (full accessible date).<br>**Default:** localized full date, outside-month days suffixed
|
|
135
|
-
| `disabled` | `input<boolean>` | Disables the whole calendar (no focus movement, no selection). Reflected as `data-disabled`.<br>**Default:** —
|
|
136
|
-
| `readonly` | `input<boolean>` | Read-only: dates stay focusable, selection is blocked. Reflected as `data-readonly`.<br>**Default:** —
|
|
137
|
-
| `firstDayOfWeek` | `input<number \| null>` | First column's weekday, **0-6** (`0` = Sunday).<br>**Default:** `null` → the adapter's value (or `provideForCalendarDefaults`)
|
|
138
|
-
| `
|
|
126
|
+
| Property | Type | Description |
|
|
127
|
+
| ------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
128
|
+
| `value` | `model<D \| null>` | Two-way bindable selected date, or `null`. Used in `selectionMode="single"`. `(valueChange)` fires only on internal selection.<br>**Default:** `null` |
|
|
129
|
+
| `selectionMode` | `input<'single' \| 'range'>` | `'single'` (default) keeps the single-date `value` flow. `'range'` switches to anchor → commit and exposes `range`.<br>**Default:** `'single'` |
|
|
130
|
+
| `range` | `model<DateRange<D> \| null>` | Two-way bindable committed range. Only used in `selectionMode="range"`. `(rangeChange)` fires only on internal commits/clears.<br>**Default:** `null` |
|
|
131
|
+
| `minRangeLength` | `input<number \| null>` | Minimum inclusive day count. A commit shorter than this is a no-op.<br>**Default:** `null` (no minimum) |
|
|
132
|
+
| `maxRangeLength` | `input<number \| null>` | Maximum inclusive day count. A commit longer than this is a no-op.<br>**Default:** `null` (no maximum) |
|
|
133
|
+
| `min` | `input<D \| null>` | Minimum selectable date (inclusive). Earlier dates are unavailable.<br>**Default:** `null` |
|
|
134
|
+
| `max` | `input<D \| null>` | Maximum selectable date (inclusive). Later dates are unavailable.<br>**Default:** `null` |
|
|
135
|
+
| `isDateUnavailable` | `input<(date: D) => boolean>` | Per-date predicate marking a date unavailable (present but not selectable).<br>**Default:** `() => false` |
|
|
136
|
+
| `dateLabel` | `input<CalendarDateLabelFormatter<D>>` | Formats each gridcell's `aria-label` (full accessible date).<br>**Default:** localized full date, outside-month days suffixed |
|
|
137
|
+
| `disabled` | `input<boolean>` | Disables the whole calendar (no focus movement, no selection). Reflected as `data-disabled`.<br>**Default:** — |
|
|
138
|
+
| `readonly` | `input<boolean>` | Read-only: dates stay focusable, selection is blocked. Reflected as `data-readonly`.<br>**Default:** — |
|
|
139
|
+
| `firstDayOfWeek` | `input<number \| null>` | First column's weekday, **0-6** (`0` = Sunday).<br>**Default:** `null` → the adapter's value (or `provideForCalendarDefaults`) |
|
|
140
|
+
| `locale` | `input<string \| null>` | BCP 47 locale for the heading, weekday headers, month-picker options and cell `aria-label` names. The calendar system stays Gregorian.<br>**Default:** `null` → the runtime's default locale |
|
|
141
|
+
| `dir` | `input<'ltr' \| 'rtl' \| null>` | Writing direction.<br>**Default:** `null` resolves the ambient direction; reflected to the host `dir` and mirrors horizontal arrows |
|
|
139
142
|
|
|
140
143
|
### Data attributes
|
|
141
144
|
|
|
@@ -161,9 +164,9 @@ Set `selectionMode="range"` and bind `[(range)]` to get date-range selection. In
|
|
|
161
164
|
</div>
|
|
162
165
|
```
|
|
163
166
|
|
|
164
|
-
**Interaction model.** Click (or `Enter` / `Space`) a first cell to set the anchor; the grid enters selecting state. Click (or `Enter` / `Space`) a second cell
|
|
167
|
+
**Interaction model.** Click (or `Enter` / `Space`) a first cell to set the anchor; the grid enters selecting state. Click (or `Enter` / `Space`) a second cell **in either direction** to commit the range — clicking before the anchor commits the inverted band `[click, anchor]` (matching the hover preview), it does not start over. There is no separate "start over" gesture and no explicit Escape-to-cancel: once a range is committed, the next click begins a fresh anchor.
|
|
165
168
|
|
|
166
|
-
**Keyboard in range mode.** `Enter` / `Space` on the focused cell sets the anchor on the first press and commits on the second (same key as single mode). While selecting, arrow / `Home` / `End` / `PageUp` / `PageDown` move the keyboard focus and update the preview
|
|
169
|
+
**Keyboard in range mode.** `Enter` / `Space` on the focused cell sets the anchor on the first press and commits on the second (same key as single mode). While selecting, arrow / `Home` / `End` / `PageUp` / `PageDown` move the keyboard focus and update the preview cursor (the keyboard equivalent of pointer hover); moving before the anchor previews — and commits — the inverted band.
|
|
167
170
|
|
|
168
171
|
**`min` / `max` / `isDateUnavailable`** still gate both endpoints. An unavailable or out-of-bounds date cannot become an anchor or an end.
|
|
169
172
|
|
package/context-menu/README.md
CHANGED
|
@@ -99,25 +99,26 @@ Angular resolves `ng-template` DI at the template's **declaration** site, not wh
|
|
|
99
99
|
|
|
100
100
|
### `ForContextMenu`
|
|
101
101
|
|
|
102
|
-
| Property
|
|
103
|
-
|
|
|
104
|
-
| `open`
|
|
105
|
-
| `side`
|
|
106
|
-
| `align`
|
|
107
|
-
| `sideOffset`
|
|
108
|
-
| `alignOffset`
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
112
|
-
| `
|
|
113
|
-
| `
|
|
114
|
-
| `
|
|
115
|
-
| `
|
|
116
|
-
| `
|
|
117
|
-
| `
|
|
118
|
-
| `
|
|
119
|
-
| `
|
|
120
|
-
| `
|
|
102
|
+
| Property | Type | Description |
|
|
103
|
+
| --------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
104
|
+
| `open` | `model<boolean>` | Two-way bindable. Whether the menu is shown.<br>**Default:** `false` |
|
|
105
|
+
| `side` | `input<string>` | Anchor side relative to the pointer.<br>**Default:** `'bottom'` |
|
|
106
|
+
| `align` | `input<string>` | Alignment along `side` (`'start'` / `'center'` / `'end'`).<br>**Default:** `'start'` |
|
|
107
|
+
| `sideOffset` | `input<number>` | Gap (px) between the pointer and the menu along the main axis.<br>**Default:** `0` |
|
|
108
|
+
| `alignOffset` | `input<number>` | Gap (px) along the cross axis (parallel to `side`).<br>**Default:** `0` |
|
|
109
|
+
| `fallbackAxisSideDirection` | `input<'none' \| 'start' \| 'end'>` | When both sides of the preferred axis overflow, lets `flip` drop the menu to a perpendicular side instead of clipping. `'none'` keeps only the opposite same-axis placement.<br>**Default:** `'none'` |
|
|
110
|
+
| `loop` | `input<boolean>` | Whether arrow navigation wraps.<br>**Default:** `true` |
|
|
111
|
+
| `dir` | `input<string>` | Writing direction. In RTL, ArrowLeft opens submenus and ArrowRight closes them — the swap is automatic. Inherited by every nested `[forMenuSub]` underneath unless overridden.<br>**Default:** `'ltr'` |
|
|
112
|
+
| `disabled` | `input<boolean>` | When `true`, the contextmenu event falls through to the native browser menu.<br>**Default:** `false` |
|
|
113
|
+
| `dismissible` | `input<boolean>` | When `false`, Escape and outside interactions don't close.<br>**Default:** `true` |
|
|
114
|
+
| `returnFocus` | `input<boolean>` | When `true`, focus returns to the trigger element on close.<br>**Default:** `true` |
|
|
115
|
+
| `ariaLabel` | `input<string \| null>` | Manual `aria-label` on `[forMenuContent]`.<br>**Default:** `null` |
|
|
116
|
+
| `escapeKeyDown` | `output<VetoableNativeEvent<KeyboardEvent>>` | Output. Escape pressed while the menu is the topmost dismissable layer.<br>**Default:** — |
|
|
117
|
+
| `pointerDownOutside` | `output<VetoableNativeEvent<PointerEvent>>` | Output. Pointer-down on a target outside content + trigger.<br>**Default:** — |
|
|
118
|
+
| `focusOutside` | `output<VetoableNativeEvent<FocusEvent>>` | Output. Focus moves outside content + trigger.<br>**Default:** — |
|
|
119
|
+
| `interactOutside` | `output<VetoableNativeEvent<PointerEvent \| FocusEvent>>` | Output. Composite — fires alongside the two above (and shares their veto state).<br>**Default:** — |
|
|
120
|
+
| `autoFocusOnOpen` | `output<VetoableEvent>` | Output. Just before the imperative focus move on mount.<br>**Default:** — |
|
|
121
|
+
| `autoFocusOnClose` | `output<VetoableEvent>` | Output. Just before the imperative focus move on unmount.<br>**Default:** — |
|
|
121
122
|
|
|
122
123
|
Same vetoable dismiss API as DropdownMenu. Call `preventDefault()` on the emitted veto to suppress the directive's default action; the original DOM event, when present, is on `.event`.
|
|
123
124
|
|
package/date-picker/README.md
CHANGED
|
@@ -140,26 +140,29 @@ The library is styleless: presence in the DOM is the consumer's job (`@if (open(
|
|
|
140
140
|
|
|
141
141
|
### `ForDatePicker`
|
|
142
142
|
|
|
143
|
-
| Property | Type | Description
|
|
144
|
-
| ------------------- | ------------------------------------------------ |
|
|
145
|
-
| `value` | `model<D \| null>` | Two-way bindable selected date. `(valueChange)` fires only on internal commits.<br>**Default:** `null`
|
|
146
|
-
| `open` | `model<boolean>` | Two-way bindable surface visibility. `(openChange)` fires only on internal transitions.<br>**Default:** `false`
|
|
147
|
-
| `minDate` | `input<D \| null>` | Minimum selectable date (inclusive). Forward to the projected calendar's `[min]`.<br>**Default:** `null`
|
|
148
|
-
| `maxDate` | `input<D \| null>` | Maximum selectable date (inclusive). Forward to the projected calendar's `[max]`.<br>**Default:** `null`
|
|
149
|
-
| `isDateUnavailable` | `input<(date: D) => boolean>` | Per-date predicate. Forward to the projected calendar's `[isDateUnavailable]`.<br>**Default:** `() => false`
|
|
150
|
-
| `closeOnSelect` | `input<boolean>` | Close the surface after a date is picked. Honoured only at `granularity="day"`.<br>**Default:** `true`
|
|
151
|
-
| `granularity` | `input<'day' \| 'hour' \| 'minute' \| 'second'>` | Date-time precision. `'day'` (default) is a pure date picker; coarser-than-day off composes a time field.<br>**Default:** `'day'`
|
|
152
|
-
| `hourCycle` | `input<12 \| 24 \| null>` | 12/24-hour cycle for the value display (and typically the projected `[forTimeField]`).<br>**Default:** `null` → locale
|
|
153
|
-
| `modal` | `input<boolean>` | Trap focus + inert background + scroll lock (centered dialog) instead of an anchored popover.<br>**Default:** `false`
|
|
154
|
-
| `dismissible` | `input<boolean>` | Escape / outside-pointer dismiss the surface.<br>**Default:** `true`
|
|
155
|
-
| `returnFocus` | `input<boolean>` | Return focus to the trigger on close.<br>**Default:** `true`
|
|
156
|
-
| `formatOptions` | `input<Intl.DateTimeFormatOptions>` | Options for the text rendered by `[forDatePickerValue]`.<br>**Default:** `{ year: 'numeric', month: 'long', day: 'numeric' }`
|
|
157
|
-
| `
|
|
158
|
-
| `
|
|
159
|
-
| `
|
|
143
|
+
| Property | Type | Description |
|
|
144
|
+
| ------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
145
|
+
| `value` | `model<D \| null>` | Two-way bindable selected date. `(valueChange)` fires only on internal commits.<br>**Default:** `null` |
|
|
146
|
+
| `open` | `model<boolean>` | Two-way bindable surface visibility. `(openChange)` fires only on internal transitions.<br>**Default:** `false` |
|
|
147
|
+
| `minDate` | `input<D \| null>` | Minimum selectable date (inclusive). Forward to the projected calendar's `[min]`.<br>**Default:** `null` |
|
|
148
|
+
| `maxDate` | `input<D \| null>` | Maximum selectable date (inclusive). Forward to the projected calendar's `[max]`.<br>**Default:** `null` |
|
|
149
|
+
| `isDateUnavailable` | `input<(date: D) => boolean>` | Per-date predicate. Forward to the projected calendar's `[isDateUnavailable]`.<br>**Default:** `() => false` |
|
|
150
|
+
| `closeOnSelect` | `input<boolean>` | Close the surface after a date is picked. Honoured only at `granularity="day"`.<br>**Default:** `true` |
|
|
151
|
+
| `granularity` | `input<'day' \| 'hour' \| 'minute' \| 'second'>` | Date-time precision. `'day'` (default) is a pure date picker; coarser-than-day off composes a time field.<br>**Default:** `'day'` |
|
|
152
|
+
| `hourCycle` | `input<12 \| 24 \| null>` | 12/24-hour cycle for the value display (and typically the projected `[forTimeField]`).<br>**Default:** `null` → locale |
|
|
153
|
+
| `modal` | `input<boolean>` | Trap focus + inert background + scroll lock (centered dialog) instead of an anchored popover.<br>**Default:** `false` |
|
|
154
|
+
| `dismissible` | `input<boolean>` | Escape / outside-pointer dismiss the surface.<br>**Default:** `true` |
|
|
155
|
+
| `returnFocus` | `input<boolean>` | Return focus to the trigger on close.<br>**Default:** `true` |
|
|
156
|
+
| `formatOptions` | `input<Intl.DateTimeFormatOptions>` | Options for the text rendered by `[forDatePickerValue]`.<br>**Default:** `{ year: 'numeric', month: 'long', day: 'numeric' }` |
|
|
157
|
+
| `locale` | `input<string \| null>` | BCP 47 locale for the text rendered by `[forDatePickerValue]`. Not forwarded to the projected calendar — bind its `[locale]` too.<br>**Default:** `null` → runtime locale |
|
|
158
|
+
| `placeholder` | `input<string>` | Fallback text for `[forDatePickerValue]` when empty.<br>**Default:** `''` |
|
|
159
|
+
| `side` / `align` | `input` | Anchored placement (popover mode only).<br>**Default:** `'bottom'` / `'start'` |
|
|
160
|
+
| `dir` | `input<'ltr' \| 'rtl' \| null>` | Writing direction.<br>**Default:** `null` resolves the ambient direction; reflected to the host `dir` |
|
|
160
161
|
|
|
161
162
|
Plus the shared `FormUiControl` inputs from the base (`disabled`, `readonly`, `required`, `invalid`, `pending`, `dirty`, `name`, `errors`, and the `touched` model) and the floating tunables (`sideOffset`, `alignOffset`, `avoidCollisions`, `collisionPadding`, `sticky`, `hideWhenDetached`).
|
|
162
163
|
|
|
164
|
+
> **`locale` only styles the trigger display.** It drives the text rendered by `[forDatePickerValue]` (both here and on `ForDateRangePicker`); it is **not** forwarded to the projected `ForCalendar`. Bind the calendar's own `[locale]` to localize its heading / weekday / cell labels, exactly as you forward `[min]` / `[max]`.
|
|
165
|
+
|
|
163
166
|
> **Why `minDate` / `maxDate`, not `min` / `max`?** `ForDatePicker` is a `FormValueControl`, and `FormUiControl` reserves `min` / `max` for numeric validators (`InputSignal<number | undefined>`). A date-typed `min` / `max` would break that contract, so the date bounds use the `*Date` suffix. (`ForCalendar` is not a form control, so it keeps `min` / `max`.)
|
|
164
167
|
|
|
165
168
|
### Data attributes
|
|
@@ -265,53 +268,9 @@ Bind the calendar **and** the time field **one-way** to `picker.value()` (not `[
|
|
|
265
268
|
|
|
266
269
|
The value display (`[forDatePickerValue]`) automatically appends the time to its formatting when `granularity > 'day'` and you haven't set time fields in `formatOptions`.
|
|
267
270
|
|
|
268
|
-
## Range selection
|
|
269
|
-
|
|
270
|
-
Set `selectionMode="range"` on both the picker root and the projected calendar and bind `[(range)]` to a `DateRange<D> | null` signal.
|
|
271
|
-
|
|
272
|
-
```ts
|
|
273
|
-
import { type DateRange } from 'forty-cdk/date-picker';
|
|
274
|
-
|
|
275
|
-
readonly dateRange = signal<DateRange<CalendarDate> | null>(null);
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
```html
|
|
279
|
-
<div
|
|
280
|
-
forDatePicker
|
|
281
|
-
selectionMode="range"
|
|
282
|
-
[(range)]="dateRange"
|
|
283
|
-
[(open)]="open"
|
|
284
|
-
[ariaLabel]="'Choose date range'"
|
|
285
|
-
>
|
|
286
|
-
<button forDatePickerTrigger>
|
|
287
|
-
<span forDatePickerValue [placeholder]="'Pick a range'"></span>
|
|
288
|
-
</button>
|
|
289
|
-
|
|
290
|
-
@if (open()) {
|
|
291
|
-
<div forDatePickerContent>
|
|
292
|
-
<div forCalendar selectionMode="range" [(range)]="dateRange">
|
|
293
|
-
<!-- …header + grid… -->
|
|
294
|
-
</div>
|
|
295
|
-
</div>
|
|
296
|
-
}
|
|
297
|
-
</div>
|
|
298
|
-
```
|
|
299
|
-
|
|
300
|
-
**`formattedValue` in range mode.** `[forDatePickerValue]` renders `start – end` using the adapter's `format` for each endpoint. The separator defaults to `' – '` and is configurable via `[rangeSeparator]`.
|
|
301
|
-
|
|
302
|
-
**`closeOnSelect` in range mode.** The surface closes when a full range is committed (both endpoints set). Clicking the first cell (anchor) keeps the surface open; clicking the second (end) commits and closes. Set `[closeOnSelect]="false"` to keep it open after commit.
|
|
303
|
-
|
|
304
|
-
**v1 scope.** Range mode is day-granular only (`granularity` / time is not supported in v1). The `[(range)]` model is not a `FormValueControl` target — it does not integrate with `[formField]` in v1. `minRangeLength` / `maxRangeLength` are configured on the projected `[forCalendar]` directly.
|
|
305
|
-
|
|
306
|
-
| New input / model | Type | Description |
|
|
307
|
-
| ----------------- | ----------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
308
|
-
| `selectionMode` | `input<'single' \| 'range'>` | `'single'` keeps the existing `value` flow. `'range'` switches to range mode. |
|
|
309
|
-
| `range` | `model<DateRange<D> \| null>` | Two-way bindable committed range. `(rangeChange)` fires only on commit / clear. Default `null`. |
|
|
310
|
-
| `rangeSeparator` | `input<string>` | String placed between start and end in the formatted display. Default `' – '`. |
|
|
311
|
-
|
|
312
|
-
## Range as a Signal Forms value — `ForDateRangePicker`
|
|
271
|
+
## Range selection — `ForDateRangePicker`
|
|
313
272
|
|
|
314
|
-
|
|
273
|
+
For date-range selection use the dedicated `ForDateRangePicker` root (selector `[forDateRangePicker]`). It is the root **and** the form value, implementing `FormValueControl<DateRange<D> | null>`, so the committed range auto-wires with `[formField]` exactly like any other control.
|
|
315
274
|
|
|
316
275
|
It reuses the same pieces — `[forDatePickerTrigger]`, `[forDatePickerContent]`, `[forDatePickerValue]`, `[forDatePickerAnchor]` — through a shared base, and provides `FOR_DATE_PICKER_CONTEXT` so they resolve under it. Project a `[forCalendar]` in `selectionMode="range"` and bind its range to the picker's `value`; the two-click anchor → commit flow keeps `value` `null` until both endpoints are chosen (the form never sees a half-entered range), and `start <= end` is an invariant. Range is day-granular in v1 (no time composition).
|
|
317
276
|
|
package/dialog/README.md
CHANGED
|
@@ -203,7 +203,7 @@ Set them once for a scope with `provideForDialogDefaults({ animateEnter, animate
|
|
|
203
203
|
| `returnFocus` | — | Focus returns to the previously focused element on close.<br>**Default:** `true` |
|
|
204
204
|
| `initialFocus` | — | `'first'` (first focusable inside) or `'container'` (the dialog host).<br>**Default:** `'first'` |
|
|
205
205
|
| `ariaLabel` | — | Manual `aria-label` if no `[forDialogTitle]` is rendered.<br>**Default:** `null` |
|
|
206
|
-
| `
|
|
206
|
+
| `dismiss` | `OutputEmitterRef<ForDialogCloseReason>` | Output. Dialog wants to be unmounted. Reasons: `'escape'`, `'backdrop'`, `'pointerDownOutside'`, `'focusOutside'`, `'closeButton'`, `'programmatic'`.<br>**Default:** — |
|
|
207
207
|
| `escapeKeyDown` | `OutputEmitterRef<VetoableNativeEvent<KeyboardEvent>>` | Output. Escape while this dialog is the topmost dismissable layer.<br>**Default:** — |
|
|
208
208
|
| `pointerDownOutside` | `OutputEmitterRef<VetoableNativeEvent<PointerEvent>>` | Output. Pointer-down outside the dialog.<br>**Default:** — |
|
|
209
209
|
| `focusOutside` | `OutputEmitterRef<VetoableNativeEvent<FocusEvent>>` | Output. Focus moves outside the dialog.<br>**Default:** — |
|
package/drag-drop/README.md
CHANGED
|
@@ -348,7 +348,7 @@ for the full analysis.
|
|
|
348
348
|
```
|
|
349
349
|
|
|
350
350
|
```ts
|
|
351
|
-
onDrop(event: ForDragDropEvent
|
|
351
|
+
onDrop(event: ForDragDropEvent): void {
|
|
352
352
|
this.items.set(
|
|
353
353
|
moveItemInArray(this.items(), event.previousIndex, event.currentIndex),
|
|
354
354
|
);
|
|
@@ -373,7 +373,7 @@ onDrop(event: ForDragDropEvent<MyItem>): void {
|
|
|
373
373
|
```
|
|
374
374
|
|
|
375
375
|
```ts
|
|
376
|
-
onDrop(event: ForDragDropEvent
|
|
376
|
+
onDrop(event: ForDragDropEvent): void {
|
|
377
377
|
if (event.previousContainer === event.container) {
|
|
378
378
|
this.updateList(event.container, (arr) =>
|
|
379
379
|
moveItemInArray(arr, event.previousIndex, event.currentIndex),
|
package/dropdown-menu/README.md
CHANGED
|
@@ -117,25 +117,26 @@ Angular resolves `ng-template` DI at the template's **declaration** site, not wh
|
|
|
117
117
|
|
|
118
118
|
### `ForDropdownMenu`
|
|
119
119
|
|
|
120
|
-
| Property
|
|
121
|
-
|
|
|
122
|
-
| `open`
|
|
123
|
-
| `side`
|
|
124
|
-
| `align`
|
|
125
|
-
| `sideOffset`
|
|
126
|
-
| `alignOffset`
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
| `
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
120
|
+
| Property | Type | Description |
|
|
121
|
+
| --------------------------- | --------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
122
|
+
| `open` | `model<boolean>` | Two-way bindable. Whether the menu is shown.<br>**Default:** `false` |
|
|
123
|
+
| `side` | `input<string>` | Anchor side of `[forMenuContent]` against the trigger.<br>**Default:** `'bottom'` |
|
|
124
|
+
| `align` | `input<string>` | Alignment along `side` (`'start'` / `'center'` / `'end'`).<br>**Default:** `'start'` |
|
|
125
|
+
| `sideOffset` | `input<number>` | Gap (px) between the trigger and the content along the main axis.<br>**Default:** `4` |
|
|
126
|
+
| `alignOffset` | `input<number>` | Gap (px) along the cross axis (parallel to `side`).<br>**Default:** `0` |
|
|
127
|
+
| `fallbackAxisSideDirection` | `input<'none' \| 'start' \| 'end'>` | When both sides of the preferred axis overflow, lets `flip` drop the menu to a perpendicular side instead of clipping. `'none'` keeps only the opposite same-axis placement.<br>**Default:** `'none'` |
|
|
128
|
+
| `loop` | `input<boolean>` | Whether arrow navigation wraps at the ends.<br>**Default:** `true` |
|
|
129
|
+
| `dir` | `input<string>` | Writing direction. In RTL, ArrowLeft opens submenus and ArrowRight closes them — the swap is automatic. Inherited by every nested `[forMenuSub]` underneath unless overridden.<br>**Default:** `'ltr'` |
|
|
130
|
+
| `disabled` | `input<boolean>` | When `true`, trigger interactions are ignored.<br>**Default:** `false` |
|
|
131
|
+
| `dismissible` | `input<boolean>` | When `false`, Escape and outside interactions don't close.<br>**Default:** `true` |
|
|
132
|
+
| `returnFocus` | `input<boolean>` | When `true`, focus returns to the trigger on close.<br>**Default:** `true` |
|
|
133
|
+
| `ariaLabel` | `input<string \| null>` | Manual `aria-label` on `[forMenuContent]` if the trigger isn't a meaningful name.<br>**Default:** `null` |
|
|
134
|
+
| `escapeKeyDown` | `output<VetoableNativeEvent<KeyboardEvent>>` | Output. Escape pressed while the menu is the topmost dismissable layer.<br>**Default:** — |
|
|
135
|
+
| `pointerDownOutside` | `output<VetoableNativeEvent<PointerEvent>>` | Output. Pointer-down on a target outside content + trigger.<br>**Default:** — |
|
|
136
|
+
| `focusOutside` | `output<VetoableNativeEvent<FocusEvent>>` | Output. Focus moves outside content + trigger.<br>**Default:** — |
|
|
137
|
+
| `interactOutside` | `output<VetoableNativeEvent<PointerEvent \| FocusEvent>>` | Output. Composite — fires alongside the two above (and shares their veto state).<br>**Default:** — |
|
|
138
|
+
| `autoFocusOnOpen` | `output<VetoableEvent>` | Output. Just before focus moves to the first / last enabled item on mount.<br>**Default:** — |
|
|
139
|
+
| `autoFocusOnClose` | `output<VetoableEvent>` | Output. Just before focus returns to the trigger on unmount.<br>**Default:** — |
|
|
139
140
|
|
|
140
141
|
Every output above is vetoable — each handler receives a `VetoableEvent` (or `VetoableNativeEvent<E>` when there is a native DOM event). Call `preventDefault()` on the emitted veto to suppress the directive's default action; the original DOM event, when present, is on `.event`.
|
|
141
142
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, inject, input, booleanAttribute, model, Directive, computed, signal, ElementRef } from '@angular/core';
|
|
3
|
-
import { Collection, injectTextDirection, moveIndex, IdGenerator, adoptHostId, registerHandle, reflectDisabled, resolveListNavigation
|
|
3
|
+
import { Collection, injectTextDirection, moveIndex, IdGenerator, adoptHostId, registerHandle, reflectDisabled, resolveListNavigation } from 'forty-cdk/core';
|
|
4
4
|
|
|
5
5
|
const FOR_ACCORDION_CONTEXT = new InjectionToken('FOR_ACCORDION_CONTEXT');
|
|
6
6
|
const FOR_ACCORDION_ITEM_CONTEXT = new InjectionToken('FOR_ACCORDION_ITEM_CONTEXT');
|
|
@@ -346,22 +346,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImpor
|
|
|
346
346
|
}]
|
|
347
347
|
}], ctorParameters: () => [] });
|
|
348
348
|
|
|
349
|
-
const FALLBACK = {};
|
|
350
|
-
const { token, provideDefaults } = createDefaults('FOR_ACCORDION_DEFAULTS', FALLBACK);
|
|
351
|
-
/** Token holding the resolved accordion defaults for the current scope. */
|
|
352
|
-
const FOR_ACCORDION_DEFAULTS = token;
|
|
353
|
-
/**
|
|
354
|
-
* Configures forty-cdk accordion defaults for this injector scope. Partial
|
|
355
|
-
* overrides inherit unspecified keys from the parent scope (or library
|
|
356
|
-
* defaults at the root).
|
|
357
|
-
*/
|
|
358
|
-
function provideForAccordionDefaults(defaults = {}) {
|
|
359
|
-
return provideDefaults(defaults);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
349
|
/**
|
|
363
350
|
* Generated bundle index. Do not edit.
|
|
364
351
|
*/
|
|
365
352
|
|
|
366
|
-
export { FOR_ACCORDION_CONTEXT,
|
|
353
|
+
export { FOR_ACCORDION_CONTEXT, FOR_ACCORDION_ITEM_CONTEXT, ForAccordion, ForAccordionContent, ForAccordionItem, ForAccordionTrigger };
|
|
367
354
|
//# sourceMappingURL=forty-cdk-accordion.mjs.map
|