@daffodil/design 0.92.3 → 0.93.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.
Files changed (161) hide show
  1. package/accordion/README.md +4 -4
  2. package/beacon/README.md +61 -0
  3. package/beacon/src/beacon-theme.scss +61 -0
  4. package/breadcrumb/README.md +13 -35
  5. package/button/README.md +28 -50
  6. package/card/README.md +8 -22
  7. package/card/src/card/stroked/stroked-theme.scss +8 -1
  8. package/card/src/card-base-theme.scss +12 -1
  9. package/container/README.md +4 -26
  10. package/fesm2022/daffodil-design-accordion.mjs +15 -15
  11. package/fesm2022/daffodil-design-accordion.mjs.map +1 -1
  12. package/fesm2022/daffodil-design-article.mjs +30 -30
  13. package/fesm2022/daffodil-design-article.mjs.map +1 -1
  14. package/fesm2022/daffodil-design-beacon.mjs +48 -0
  15. package/fesm2022/daffodil-design-beacon.mjs.map +1 -0
  16. package/fesm2022/daffodil-design-breadcrumb.mjs +20 -20
  17. package/fesm2022/daffodil-design-breadcrumb.mjs.map +1 -1
  18. package/fesm2022/daffodil-design-button.mjs +37 -49
  19. package/fesm2022/daffodil-design-button.mjs.map +1 -1
  20. package/fesm2022/daffodil-design-callout.mjs +22 -22
  21. package/fesm2022/daffodil-design-callout.mjs.map +1 -1
  22. package/fesm2022/daffodil-design-card.mjs +31 -31
  23. package/fesm2022/daffodil-design-card.mjs.map +1 -1
  24. package/fesm2022/daffodil-design-checkbox.mjs +13 -13
  25. package/fesm2022/daffodil-design-checkbox.mjs.map +1 -1
  26. package/fesm2022/daffodil-design-container.mjs +7 -7
  27. package/fesm2022/daffodil-design-container.mjs.map +1 -1
  28. package/fesm2022/daffodil-design-form-field.mjs +13 -12
  29. package/fesm2022/daffodil-design-form-field.mjs.map +1 -1
  30. package/fesm2022/daffodil-design-form.mjs +9 -9
  31. package/fesm2022/daffodil-design-form.mjs.map +1 -1
  32. package/fesm2022/daffodil-design-hero.mjs +22 -22
  33. package/fesm2022/daffodil-design-hero.mjs.map +1 -1
  34. package/fesm2022/daffodil-design-image.mjs +8 -8
  35. package/fesm2022/daffodil-design-image.mjs.map +1 -1
  36. package/fesm2022/daffodil-design-input.mjs +12 -11
  37. package/fesm2022/daffodil-design-input.mjs.map +1 -1
  38. package/fesm2022/daffodil-design-link-set.mjs +16 -16
  39. package/fesm2022/daffodil-design-link-set.mjs.map +1 -1
  40. package/fesm2022/daffodil-design-list.mjs +20 -17
  41. package/fesm2022/daffodil-design-list.mjs.map +1 -1
  42. package/fesm2022/daffodil-design-loading-icon.mjs +7 -7
  43. package/fesm2022/daffodil-design-loading-icon.mjs.map +1 -1
  44. package/fesm2022/daffodil-design-media-gallery.mjs +13 -13
  45. package/fesm2022/daffodil-design-media-gallery.mjs.map +1 -1
  46. package/fesm2022/daffodil-design-menu.mjs +20 -20
  47. package/fesm2022/daffodil-design-menu.mjs.map +1 -1
  48. package/fesm2022/daffodil-design-modal.mjs +33 -27
  49. package/fesm2022/daffodil-design-modal.mjs.map +1 -1
  50. package/fesm2022/daffodil-design-native-select.mjs +5 -3
  51. package/fesm2022/daffodil-design-native-select.mjs.map +1 -1
  52. package/fesm2022/daffodil-design-navbar.mjs +9 -9
  53. package/fesm2022/daffodil-design-navbar.mjs.map +1 -1
  54. package/fesm2022/daffodil-design-notification.mjs +16 -16
  55. package/fesm2022/daffodil-design-notification.mjs.map +1 -1
  56. package/fesm2022/daffodil-design-paginator.mjs +8 -8
  57. package/fesm2022/daffodil-design-paginator.mjs.map +1 -1
  58. package/fesm2022/daffodil-design-progress-bar.mjs +11 -11
  59. package/fesm2022/daffodil-design-progress-bar.mjs.map +1 -1
  60. package/fesm2022/daffodil-design-quantity-field.mjs +13 -13
  61. package/fesm2022/daffodil-design-quantity-field.mjs.map +1 -1
  62. package/fesm2022/daffodil-design-radio.mjs +16 -16
  63. package/fesm2022/daffodil-design-radio.mjs.map +1 -1
  64. package/fesm2022/daffodil-design-select.mjs +11 -11
  65. package/fesm2022/daffodil-design-select.mjs.map +1 -1
  66. package/fesm2022/daffodil-design-sidebar.mjs +36 -30
  67. package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
  68. package/fesm2022/daffodil-design-spinner.mjs +8 -8
  69. package/fesm2022/daffodil-design-spinner.mjs.map +1 -1
  70. package/fesm2022/daffodil-design-switch.mjs +3 -3
  71. package/fesm2022/daffodil-design-switch.mjs.map +1 -1
  72. package/fesm2022/daffodil-design-tabs.mjs +17 -25
  73. package/fesm2022/daffodil-design-tabs.mjs.map +1 -1
  74. package/fesm2022/daffodil-design-tag.mjs +43 -35
  75. package/fesm2022/daffodil-design-tag.mjs.map +1 -1
  76. package/fesm2022/daffodil-design-testing.mjs +19 -0
  77. package/fesm2022/daffodil-design-testing.mjs.map +1 -0
  78. package/fesm2022/daffodil-design-text-snippet.mjs +3 -3
  79. package/fesm2022/daffodil-design-text-snippet.mjs.map +1 -1
  80. package/fesm2022/daffodil-design-textarea.mjs +3 -3
  81. package/fesm2022/daffodil-design-textarea.mjs.map +1 -1
  82. package/fesm2022/daffodil-design-toast.mjs +22 -22
  83. package/fesm2022/daffodil-design-toast.mjs.map +1 -1
  84. package/fesm2022/daffodil-design-tree.mjs +27 -25
  85. package/fesm2022/daffodil-design-tree.mjs.map +1 -1
  86. package/fesm2022/daffodil-design-youtube-player.mjs +22 -11
  87. package/fesm2022/daffodil-design-youtube-player.mjs.map +1 -1
  88. package/fesm2022/daffodil-design.mjs +126 -160
  89. package/fesm2022/daffodil-design.mjs.map +1 -1
  90. package/form/README.md +15 -6
  91. package/hero/README.md +14 -49
  92. package/image/README.md +6 -29
  93. package/input/README.md +8 -34
  94. package/list/README.md +29 -55
  95. package/list/src/list-theme.scss +16 -2
  96. package/media-gallery/README.md +36 -43
  97. package/menu/README.md +24 -55
  98. package/menu/src/menu-theme.scss +12 -2
  99. package/modal/README.md +15 -45
  100. package/native-select/README.md +8 -6
  101. package/navbar/README.md +18 -27
  102. package/notification/README.md +14 -49
  103. package/package.json +1 -1
  104. package/paginator/README.md +11 -31
  105. package/paginator/src/paginator-theme.scss +16 -2
  106. package/progress-bar/README.md +14 -41
  107. package/scss/global.scss +25 -2
  108. package/scss/theme.scss +2 -0
  109. package/select/README.md +5 -6
  110. package/select/src/select-theme.scss +10 -2
  111. package/sidebar/README.md +1 -1
  112. package/spinner/README.md +15 -9
  113. package/switch/README.md +17 -6
  114. package/tabs/README.md +39 -39
  115. package/tag/README.md +31 -31
  116. package/tag/src/tag-theme.scss +100 -3
  117. package/textarea/README.md +9 -7
  118. package/toast/README.md +55 -52
  119. package/tree/README.md +12 -43
  120. package/tree/src/tree-theme.scss +8 -4
  121. package/{accordion/index.d.ts → types/daffodil-design-accordion.d.ts} +1 -1
  122. package/types/daffodil-design-beacon.d.ts +26 -0
  123. package/{button/index.d.ts → types/daffodil-design-button.d.ts} +7 -8
  124. package/{input/index.d.ts → types/daffodil-design-input.d.ts} +4 -1
  125. package/{list/index.d.ts → types/daffodil-design-list.d.ts} +4 -1
  126. package/{menu/index.d.ts → types/daffodil-design-menu.d.ts} +3 -3
  127. package/{modal/index.d.ts → types/daffodil-design-modal.d.ts} +11 -5
  128. package/{native-select/index.d.ts → types/daffodil-design-native-select.d.ts} +3 -1
  129. package/{sidebar/index.d.ts → types/daffodil-design-sidebar.d.ts} +9 -3
  130. package/{tabs/index.d.ts → types/daffodil-design-tabs.d.ts} +0 -6
  131. package/types/daffodil-design-tag.d.ts +80 -0
  132. package/types/daffodil-design-testing.d.ts +11 -0
  133. package/{tree/index.d.ts → types/daffodil-design-tree.d.ts} +2 -0
  134. package/{youtube-player/index.d.ts → types/daffodil-design-youtube-player.d.ts} +15 -0
  135. package/{index.d.ts → types/daffodil-design.d.ts} +25 -67
  136. package/tag/index.d.ts +0 -71
  137. /package/{article/index.d.ts → types/daffodil-design-article.d.ts} +0 -0
  138. /package/{breadcrumb/index.d.ts → types/daffodil-design-breadcrumb.d.ts} +0 -0
  139. /package/{callout/index.d.ts → types/daffodil-design-callout.d.ts} +0 -0
  140. /package/{card/index.d.ts → types/daffodil-design-card.d.ts} +0 -0
  141. /package/{checkbox/index.d.ts → types/daffodil-design-checkbox.d.ts} +0 -0
  142. /package/{container/index.d.ts → types/daffodil-design-container.d.ts} +0 -0
  143. /package/{form-field/index.d.ts → types/daffodil-design-form-field.d.ts} +0 -0
  144. /package/{form/index.d.ts → types/daffodil-design-form.d.ts} +0 -0
  145. /package/{hero/index.d.ts → types/daffodil-design-hero.d.ts} +0 -0
  146. /package/{image/index.d.ts → types/daffodil-design-image.d.ts} +0 -0
  147. /package/{link-set/index.d.ts → types/daffodil-design-link-set.d.ts} +0 -0
  148. /package/{loading-icon/index.d.ts → types/daffodil-design-loading-icon.d.ts} +0 -0
  149. /package/{media-gallery/index.d.ts → types/daffodil-design-media-gallery.d.ts} +0 -0
  150. /package/{navbar/index.d.ts → types/daffodil-design-navbar.d.ts} +0 -0
  151. /package/{notification/index.d.ts → types/daffodil-design-notification.d.ts} +0 -0
  152. /package/{paginator/index.d.ts → types/daffodil-design-paginator.d.ts} +0 -0
  153. /package/{progress-bar/index.d.ts → types/daffodil-design-progress-bar.d.ts} +0 -0
  154. /package/{quantity-field/index.d.ts → types/daffodil-design-quantity-field.d.ts} +0 -0
  155. /package/{radio/index.d.ts → types/daffodil-design-radio.d.ts} +0 -0
  156. /package/{select/index.d.ts → types/daffodil-design-select.d.ts} +0 -0
  157. /package/{spinner/index.d.ts → types/daffodil-design-spinner.d.ts} +0 -0
  158. /package/{switch/index.d.ts → types/daffodil-design-switch.d.ts} +0 -0
  159. /package/{text-snippet/index.d.ts → types/daffodil-design-text-snippet.d.ts} +0 -0
  160. /package/{textarea/index.d.ts → types/daffodil-design-textarea.d.ts} +0 -0
  161. /package/{toast/index.d.ts → types/daffodil-design-toast.d.ts} +0 -0
@@ -2,12 +2,12 @@
2
2
  Textarea works alongside the HTML textarea element, with additional custom styling and functionality.
3
3
 
4
4
  ## Overview
5
- Textarea has the same functionality as a native HTML textarea element, with additional custom styling and functionality. It **cannot** be used by itself and must be contained within a [form field](/libs/design/src/atoms/form/form-field/README.md).
5
+ Textarea has the same functionality as a native HTML textarea element, with additional custom styling and functionality. It **cannot** be used by itself and must be contained within a [form field](/libs/design/form-field/README.md).
6
6
 
7
7
  <daff-docs-example-viewer example="basic-textarea"></daff-docs-example-viewer>
8
8
 
9
9
  ## Usage
10
- To use textarea, import `DaffTextareaComponent` directly into your custom component:
10
+ Import `DaffTextareaComponent` into your component:
11
11
 
12
12
  ```ts
13
13
  import { DaffTextareaComponent } from '@daffodil/design/textarea';
@@ -25,7 +25,6 @@ export class CustomComponent {}
25
25
  ## Anatomy
26
26
  Textarea must be used inside `<daff-form-field>` to enable proper state management and provide enhanced UI features such as hints, error messages, prefixes, and suffixes. The form field component also ensures accessibility compliance. For more details, see the [form field documentation](/libs/design/form-field/README.md).
27
27
 
28
- ### Basic structure
29
28
  ```html
30
29
  <daff-form-field>
31
30
  <daff-form-label>Comments</daff-form-label>
@@ -33,7 +32,7 @@ Textarea must be used inside `<daff-form-field>` to enable proper state manageme
33
32
  </daff-form-field>
34
33
  ```
35
34
 
36
- ## States
35
+ ## Features
37
36
 
38
37
  ### Disabled
39
38
  Textarea can be disabled in two ways: using Angular's reactive forms with `FormControl` or with the native HTML `disabled` attribute.
@@ -47,12 +46,15 @@ Textarea supports validation and error messages through Angular's form validatio
47
46
 
48
47
  Multiple error messages can be displayed conditionally based on the type of validation error. The form field component handles the styling and positioning of error messages.
49
48
 
50
- ## Hints
49
+ ### Hints
51
50
  Hints provide additional context or instructions to help users complete the textarea field correctly. Use `<daff-hint>` within the form field to display helpful information below the textarea. Unlike error messages, hints are always visible and provide guidance rather than validation feedback.
52
51
 
53
52
  <daff-docs-example-viewer example="textarea-hint"></daff-docs-example-viewer>
54
53
 
55
54
  ## Accessibility
56
- When `<daff-form-label>` is used within `<daff-form-field>`, the label automatically associates with the textarea using the `for` and `id` attributes.
57
55
 
58
- If a `<daff-form-label>` is not specified, use the `<label>` element to associate text with form elements explicitly. The `for` attribute of the label must exactly match the `id` of the form control.
56
+ ### Built-in behavior
57
+ - When `<daff-form-label>` is used within `<daff-form-field>`, the label automatically associates with the textarea using the `for` and `id` attributes.
58
+
59
+ ### Developer responsibilities
60
+ - If a `<daff-form-label>` is not specified, use the `<label>` element to associate text with form elements explicitly. The `for` attribute of the label must exactly match the `id` of the form control.
package/toast/README.md CHANGED
@@ -4,81 +4,79 @@ Toasts are notifications that provide application-level information. They are de
4
4
  ## Overview
5
5
  Toasts communicate updates about actions or events that require attention but are not directly tied to specific page content.
6
6
 
7
- For short messages tied to page-level content or actions, use the [Notification](/libs/design/notification/README.md) component.
7
+ For short messages tied to page-level content or actions, use the [notification](/libs/design/notification/README.md) component.
8
8
 
9
9
  <daff-docs-example-viewer example="default-toast"></daff-docs-example-viewer>
10
10
 
11
11
  ## Usage
12
- Add `provideDaffToast()` to the root provider of your application to enable toast functionality:
12
+ Add `provideDaffToast()` to your application's root providers:
13
13
 
14
14
  ```ts
15
+ import { ApplicationConfig } from '@angular/core';
15
16
  import { provideDaffToast } from '@daffodil/design/toast';
16
17
 
17
- @NgModule({
18
+ export const appConfig: ApplicationConfig = {
18
19
  providers: [
19
20
  provideDaffToast(),
20
- ]
21
- )}
22
-
23
- export class AppModule {}
21
+ ],
22
+ };
24
23
  ```
25
24
 
26
- ## Anatomy
27
- When opening a toast with the `DaffToastService`, you can provide a `title`, `message`, and `actions` to define its content.
28
-
29
- **Title**\
30
- The primary text that summarizes the purpose of the toast.
31
-
32
- **Message**\
33
- Provides additional details or context about the toast. Keep this brief—ideally one to two short sentences.
34
-
35
- **Actions**\
36
- Include actionable buttons related to the toast. **A maximum of two buttons is recommended** to keep the toast concise.
25
+ Then inject `DaffToastService` to open toasts from your component:
37
26
 
38
27
  ```ts
39
- open() {
40
- this.toast = this.toastService.open({
41
- title: 'Update Available' + ' ' + this.count++,
42
- message: 'A new version of this page is available.',
43
- actions: [
44
- { content: 'Update', color: 'theme-contrast', size: 'sm', eventEmitter: this.update },
45
- { content: 'Remind me later', type: 'flat', size: 'sm', eventEmitter: this.closeToast },
46
- ],
47
- });
28
+ import { DaffToastService } from '@daffodil/design/toast';
29
+
30
+ @Component({
31
+ selector: 'custom-component',
32
+ templateUrl: './custom-component.component.html',
33
+ })
34
+ export class CustomComponent {
35
+ constructor(private toastService: DaffToastService) {}
48
36
  }
49
37
  ```
50
38
 
51
- ## Dismissal
52
- Toasts can be dismissed automatically via a timed duration or manually with a close button.
39
+ ## Anatomy
40
+ A toast is composed of a title, message, and optional actions:
53
41
 
54
- `duration` and `dismissible` can be configured when opening a toast with the `DaffToastService`.
42
+ ```ts
43
+ this.toastService.open({
44
+ title: 'Update available',
45
+ message: 'A new version of this page is available.',
46
+ actions: [
47
+ { content: 'Update', color: 'theme-contrast', size: 'sm' },
48
+ { content: 'Remind me later', type: 'flat', size: 'sm' },
49
+ ],
50
+ });
51
+ ```
55
52
 
56
- ### Timed duration
57
- By default, toasts without actions dismiss automatically after `5000ms`. Toasts with actions remain visible until dismissed manually or until an action is taken.
53
+ - **`title`**: The primary text that summarizes the purpose of the toast.
54
+ - **`message`**: Additional details or context about the toast. Keep this brief ideally one to two short sentences.
55
+ - **`actions`**: Actionable buttons related to the toast. A maximum of two buttons is recommended to keep the toast concise.
56
+
57
+ ## Features
58
58
 
59
- > Actionable toasts should remain persistent. If a duration is required, make sure it is long enough for users to engage with the actions.
59
+ ### Dismissal
60
+ Toasts can be dismissed automatically via a timed duration or manually with a close button. Both `duration` and `dismissible` can be configured when opening a toast with the `DaffToastService`.
60
61
 
61
- <daff-docs-example-viewer example="toast-with-custom-duration"></daff-docs-example-viewer>
62
+ By default, toasts without actions dismiss automatically after `5000ms`. Toasts with actions remain visible until dismissed manually or until an action is taken.
62
63
 
63
- ### Close button
64
- The close button is hidden by default. When a toast contains actions, the `dismissible` property is ignored.
64
+ <daff-docs-example-viewer example="custom-duration-toast"></daff-docs-example-viewer>
65
65
 
66
- For non-actionable toasts, the close button can be displayed by setting `dismissible: true`.
66
+ For non-actionable toasts, set `dismissible: true` to display a close button. When a toast contains actions, the `dismissible` property is ignored.
67
67
 
68
68
  <daff-docs-example-viewer example="dismissible-toast"></daff-docs-example-viewer>
69
69
 
70
- ## Stacking
70
+ ### Stack limit
71
71
  A maximum of three toasts can be displayed at once. Toasts stack vertically with the most recent toast at the top.
72
72
 
73
- ## Statuses
73
+ ### Statuses
74
74
  Toast status can be set when opening a toast through the `DaffToastService` by using a `DaffStatus` value.
75
75
 
76
76
  <daff-docs-example-viewer example="toast-status"></daff-docs-example-viewer>
77
77
 
78
- ## Positions
79
- On desktop, toasts appear in the top-right corner by default.
80
-
81
- You can customize their position using the `position` property in `provideDaffToast()`:
78
+ ### Positions
79
+ On desktop, toasts appear in the top-right corner by default. Customize their position using the `position` property in `provideDaffToast()`:
82
80
 
83
81
  ```ts
84
82
  providers: [
@@ -91,16 +89,21 @@ providers: [
91
89
  ],
92
90
  ```
93
91
 
94
- > Note: On mobile, toasts always appear in the bottom-center position, regardless of configuration settings.
92
+ > **Note**
93
+ >
94
+ > On mobile, toasts always appear in the bottom-center position, regardless of configuration settings.
95
+
96
+ ## Best practices
97
+ - Keep messages brief — toasts are temporary and easy to miss.
98
+ - Limit actions to two buttons so the toast stays scannable.
99
+ - Avoid setting a duration on actionable toasts, as they may disappear before the user can interact with them.
95
100
 
96
101
  ## Accessibility
97
- Toasts announce their messages using appropriate ARIA roles:
98
- - `role="status"` (default): Equivalent to `aria-live="polite"`, announcing messages without interrupting the user.
99
- - role="alertdialog": Used when a toast contains actions. The toast will be focus trapped, and focus immediately moves to the actions.
100
102
 
101
- Avoid setting a duration on actionable toasts, as they may disappear before the user can interact with them.
103
+ ### Built-in behavior
104
+ - Toasts without actions use `role="status"` (equivalent to `aria-live="polite"`), announcing messages without interrupting the user.
105
+ - Toasts with actions use `role="alertdialog"`, are focus trapped, and focus moves immediately to the actions.
106
+ - `ESC` dismisses a focus trapped actionable toast.
102
107
 
103
- ### Keyboard Interactions
104
- | Key | Action |
105
- | ----- | ------ |
106
- | `ESC` | Dismisses a toast if it has actions and is focus trapped. |
108
+ ### Developer responsibilities
109
+ - Avoid setting a duration on actionable toasts so users have time to interact with them.
package/tree/README.md CHANGED
@@ -2,14 +2,13 @@
2
2
  Trees display hierarchical information in a nested, expandable format.
3
3
 
4
4
  ## Overview
5
- Trees help users navigate complex structures by organizing content into parent and child relationships. They're commonly used for navigation menus, file browsers, and category lists. For flat lists without nested content, use the [navigation list](/libs/design/list/README.md) instead.
5
+ Trees help users navigate complex structures by organizing content into parent and child relationships. They're commonly used for navigation menus, file browsers, and category lists. For flat lists without nested content, use the [Navigation List](/libs/design/list/README.md) instead.
6
6
 
7
7
  <daff-docs-example-viewer example="basic-tree"></daff-docs-example-viewer>
8
8
 
9
9
  ## Usage
10
10
 
11
- ### Within a standalone component
12
- To use tree in a standalone component, import `DAFF_TREE_COMPONENTS` directly into your custom component:
11
+ Import `DAFF_TREE_COMPONENTS` into your component:
13
12
 
14
13
  ```ts
15
14
  import { DAFF_TREE_COMPONENTS } from '@daffodil/design/tree';
@@ -24,48 +23,13 @@ import { DAFF_TREE_COMPONENTS } from '@daffodil/design/tree';
24
23
  export class CustomComponent {}
25
24
  ```
26
25
 
27
- ### Within a module (deprecated)
28
- To use tree in a module, import `DaffTreeModule` into your custom module:
29
-
30
- ```ts
31
- import { NgModule } from '@angular/core';
32
- import { DaffTreeModule } from '@daffodil/design/tree';
33
- import { CustomComponent } from './custom.component';
34
-
35
- @NgModule({
36
- declarations: [
37
- CustomComponent,
38
- ],
39
- exports: [
40
- CustomComponent,
41
- ],
42
- imports: [
43
- DaffTreeModule,
44
- ],
45
- })
46
- export class CustomComponentModule { }
47
- ```
48
-
49
- > **Warning**
50
- >
51
- > This method is deprecated. It's recommended to update all custom components to standalone.
26
+ > **Deprecation notice:**
27
+ >
28
+ > `DaffTreeModule` is deprecated. Use the standalone component imports instead.
52
29
 
53
30
  ## Anatomy
54
- A tree consists of the following parts:
55
-
56
- ### Container
57
- `<daff-tree>`: The main wrapper that holds the tree and accepts your data.
58
-
59
- ### Node templates
60
- Define how each tree item looks:
31
+ A tree is composed of a container, node templates, and tree items:
61
32
 
62
- - `#daffTreeItemWithChildrenTpl`: For items that can expand to show children. Click handling and icons are added automatically.
63
- - `#daffTreeItemTpl`: For items at the end of a branch with no children.
64
-
65
- ### Tree item
66
- `[daffTreeItem]`: Added to links or buttons inside your templates to connect them to the tree.
67
-
68
- ### Basic structure
69
33
  ```html
70
34
  <daff-tree [tree]="treeData">
71
35
  <ng-template #daffTreeItemWithChildrenTpl let-node>
@@ -78,10 +42,15 @@ Define how each tree item looks:
78
42
  </daff-tree>
79
43
  ```
80
44
 
45
+ - **`<daff-tree>`**: The main wrapper that holds the tree and accepts your data.
46
+ - **`#daffTreeItemWithChildrenTpl`**: The template for items that can expand to show children. Click handling and icons are added automatically.
47
+ - **`#daffTreeItemTpl`**: The template for items at the end of a branch with no children.
48
+ - **`[daffTreeItem]`**: Added to links or buttons inside your templates to connect them to the tree.
49
+
81
50
  ## Accessibility
82
51
  The tree follows the [disclosure navigation menu](https://www.w3.org/WAI/ARIA/apg/patterns/disclosure/examples/disclosure-navigation/) pattern rather than the [tree view](https://www.w3.org/WAI/ARIA/apg/patterns/treeview/) pattern.
83
52
 
84
- ### Daffodil provides
53
+ ### Built-in behavior
85
54
  - Unique `id` automatically assigned to each tree item
86
55
  - `aria-expanded` indicating whether a parent item is open or closed
87
56
 
@@ -15,8 +15,10 @@
15
15
  background-color: $base;
16
16
  color: daff-color($neutral, 90);
17
17
 
18
- &:hover {
19
- background-color: daff-color($neutral, 20);
18
+ @media (hover: hover) {
19
+ &:hover {
20
+ background-color: daff-color($neutral, 20);
21
+ }
20
22
  }
21
23
 
22
24
  &::after {
@@ -37,8 +39,10 @@
37
39
  background-color: $base;
38
40
  color: daff-color($neutral, 20);
39
41
 
40
- &:hover {
41
- background-color: daff-color($neutral, 90);
42
+ @media (hover: hover) {
43
+ &:hover {
44
+ background-color: daff-color($neutral, 90);
45
+ }
42
46
  }
43
47
 
44
48
  &::after {
@@ -66,7 +66,7 @@ declare class DaffAccordionItemComponent implements OnInit, DaffOpenable, DaffDi
66
66
  /**
67
67
  * @docs-private
68
68
  */
69
- get open(): boolean;
69
+ get open(): i0.ModelSignal<boolean>;
70
70
  /**
71
71
  * Reveals the contents of the accordion item.
72
72
  */
@@ -0,0 +1,26 @@
1
+ import * as i0 from '@angular/core';
2
+ import * as i1 from '@daffodil/design';
3
+
4
+ /**
5
+ * The cadence of the beacon ring, e.g. how long one expand-and-fade cycle takes.
6
+ *
7
+ * - `slow` - a relaxed 3.6s cycle.
8
+ * - `normal` - the default 2.4s cycle.
9
+ * - `fast` - an urgent 1.2s cycle.
10
+ */
11
+ type DaffBeaconSpeed = 'slow' | 'normal' | 'fast';
12
+
13
+ /**
14
+ * DaffBeaconComponent is a small indicator that draws visual attention to a specific location or element.
15
+ */
16
+ declare class DaffBeaconComponent {
17
+ /**
18
+ * How fast the beacon pulses.
19
+ */
20
+ speed: i0.InputSignal<DaffBeaconSpeed>;
21
+ constructor();
22
+ static ɵfac: i0.ɵɵFactoryDeclaration<DaffBeaconComponent, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaffBeaconComponent, "daff-beacon", never, { "speed": { "alias": "speed"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, [{ directive: typeof i1.DaffColorableDirective; inputs: { "color": "color"; }; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: { "status": "status"; }; outputs: {}; }, { directive: typeof i1.DaffSizableDirective; inputs: { "size": "size"; }; outputs: {}; }]>;
24
+ }
25
+
26
+ export { DaffBeaconComponent };
@@ -33,12 +33,11 @@ declare class DaffButtonBaseDirective implements DaffDisableable {
33
33
  /**
34
34
  * Sets the tabindex.
35
35
  */
36
- tabindex: number;
36
+ tabindex: i0.InputSignal<number>;
37
37
  /**
38
38
  * The disabled state of the button.
39
39
  */
40
- get disabled(): any;
41
- set disabled(value: any);
40
+ get disabled(): boolean;
42
41
  /**
43
42
  * @docs-private
44
43
  *
@@ -52,7 +51,7 @@ declare class DaffButtonBaseDirective implements DaffDisableable {
52
51
  */
53
52
  get buttonSize(): _daffodil_design_button.DaffButtonSize;
54
53
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffButtonBaseDirective, never>;
55
- static ɵdir: i0.ɵɵDirectiveDeclaration<DaffButtonBaseDirective, "[daffButtonBase]", never, { "tabindex": { "alias": "tabindex"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, ["_prefix", "_suffix"], never, true, [{ directive: typeof i1.DaffArticleEncapsulatedDirective; inputs: {}; outputs: {}; }, { directive: typeof DaffButtonSizableDirective; inputs: { "size": "size"; }; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: { "status": "status"; }; outputs: {}; }, { directive: typeof i1.DaffColorableDirective; inputs: { "color": "color"; }; outputs: {}; }, { directive: typeof i1.DaffDisableableDirective; inputs: { "disabled": "disabled"; }; outputs: {}; }, { directive: typeof i1.DaffLoadableDirective; inputs: { "loading": "loading"; }; outputs: {}; }]>;
54
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DaffButtonBaseDirective, "[daffButtonBase]", never, { "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; }, {}, ["_prefix", "_suffix"], never, true, [{ directive: typeof i1.DaffArticleEncapsulatedDirective; inputs: {}; outputs: {}; }, { directive: typeof DaffButtonSizableDirective; inputs: { "size": "size"; }; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: { "status": "status"; }; outputs: {}; }, { directive: typeof i1.DaffColorableDirective; inputs: { "color": "color"; }; outputs: {}; }, { directive: typeof i1.DaffDisableableDirective; inputs: { "disabled": "disabled"; }; outputs: {}; }, { directive: typeof i1.DaffLoadableDirective; inputs: { "loading": "loading"; }; outputs: {}; }]>;
56
55
  }
57
56
 
58
57
  /**
@@ -77,9 +76,9 @@ declare class DaffButtonComponent extends DaffButtonBaseDirective {
77
76
  /**
78
77
  * Whether or not the button displays a shadow.
79
78
  */
80
- elevated: boolean;
79
+ elevated: i0.InputSignal<boolean>;
81
80
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffButtonComponent, never>;
82
- static ɵcmp: i0.ɵɵComponentDeclaration<DaffButtonComponent, "button[daff-button],a[daff-button]", never, { "elevated": { "alias": "elevated"; "required": false; }; }, {}, never, ["[daffPrefix]", "*", "[daffSuffix]"], true, never>;
81
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaffButtonComponent, "button[daff-button],a[daff-button]", never, { "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; }, {}, never, ["[daffPrefix]", "*", "[daffSuffix]"], true, never>;
83
82
  }
84
83
 
85
84
  /**
@@ -175,9 +174,9 @@ declare class DaffStrokedButtonComponent extends DaffButtonBaseDirective {
175
174
  /**
176
175
  * Whether or not the button displays a shadow.
177
176
  */
178
- elevated: boolean;
177
+ elevated: i0.InputSignal<boolean>;
179
178
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffStrokedButtonComponent, never>;
180
- static ɵcmp: i0.ɵɵComponentDeclaration<DaffStrokedButtonComponent, "button[daff-stroked-button],a[daff-stroked-button]", never, { "elevated": { "alias": "elevated"; "required": false; }; }, {}, never, ["[daffPrefix]", "*", "[daffSuffix]"], true, never>;
179
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaffStrokedButtonComponent, "button[daff-stroked-button],a[daff-stroked-button]", never, { "elevated": { "alias": "elevated"; "required": false; "isSignal": true; }; }, {}, never, ["[daffPrefix]", "*", "[daffSuffix]"], true, never>;
181
180
  }
182
181
 
183
182
  /**
@@ -19,7 +19,10 @@ declare class DaffInputComponent extends DaffFormFieldControl<string> implements
19
19
  * Implemented as part of DaffFormFieldControl.
20
20
  */
21
21
  focused: boolean;
22
- private get _id();
22
+ /**
23
+ * @docs-private
24
+ */
25
+ get _id(): string;
23
26
  /**
24
27
  * @docs-private
25
28
  *
@@ -54,7 +54,10 @@ declare class DaffListItemComponent {
54
54
  */
55
55
  _prefix: DaffPrefixDirective;
56
56
  constructor(elementRef: ElementRef);
57
- private get _isAnchor();
57
+ /**
58
+ * @docs-private
59
+ */
60
+ get _isAnchor(): boolean;
58
61
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffListItemComponent, never>;
59
62
  static ɵcmp: i0.ɵɵComponentDeclaration<DaffListItemComponent, "daff-list-item,a[daff-list-item]", never, { "active": { "alias": "active"; "required": false; }; }, {}, ["_prefix"], ["[daffPrefix]", "*"], true, never>;
60
63
  }
@@ -56,8 +56,8 @@ declare class DaffMenuActivatorDirective implements OnDestroy {
56
56
  private viewContainerRef;
57
57
  private cdRef;
58
58
  private _destroyed$;
59
- private _open;
60
59
  private _defaultMenuId;
60
+ protected _open: boolean;
61
61
  readonly isOpen: i0.WritableSignal<boolean>;
62
62
  /**
63
63
  * The menu content to display when activated.
@@ -71,7 +71,7 @@ declare class DaffMenuActivatorDirective implements OnDestroy {
71
71
  /**
72
72
  * The resolved menu ID.
73
73
  */
74
- private menuId;
74
+ protected menuId: i0.Signal<string>;
75
75
  /**
76
76
  * @docs-private
77
77
  */
@@ -139,7 +139,7 @@ declare class DaffMenuComponent implements AfterContentInit, AfterViewInit {
139
139
  /**
140
140
  * @docs-private
141
141
  *
142
- * Handle keyboard navigation
142
+ * Handles keyboard navigation.
143
143
  */
144
144
  handleKeydown(event: KeyboardEvent): void;
145
145
  /**
@@ -1,10 +1,10 @@
1
1
  import * as rxjs from 'rxjs';
2
2
  import { Observable } from 'rxjs';
3
+ import * as i0 from '@angular/core';
4
+ import { Type, AfterContentInit, AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef } from '@angular/core';
3
5
  import { ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
4
6
  import * as i2 from '@angular/cdk/portal';
5
7
  import { ComponentPortal } from '@angular/cdk/portal';
6
- import * as i0 from '@angular/core';
7
- import { Type, AfterContentInit, AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef } from '@angular/core';
8
8
  import * as i1 from '@daffodil/design';
9
9
  import { DaffOpenable, DaffOpenableDirective, DaffFocusStackService } from '@daffodil/design';
10
10
  import * as i3 from '@angular/cdk/overlay';
@@ -91,7 +91,10 @@ declare class DaffModalComponent implements AfterContentInit, AfterViewInit, OnD
91
91
  private openDirective;
92
92
  private _focusStack;
93
93
  private changeDetector;
94
- private closing;
94
+ /**
95
+ * @docs-private
96
+ */
97
+ readonly closing: i0.WritableSignal<boolean>;
95
98
  private _ariaLabelledBy;
96
99
  /**
97
100
  * @docs-private
@@ -137,7 +140,7 @@ declare class DaffModalComponent implements AfterContentInit, AfterViewInit, OnD
137
140
  /**
138
141
  * Tracks the open state of the modal.
139
142
  */
140
- get open(): boolean;
143
+ get open(): i0.ModelSignal<boolean>;
141
144
  /**
142
145
  * @docs-private
143
146
  *
@@ -179,7 +182,10 @@ declare class DaffModalHeaderComponent {
179
182
  */
180
183
  declare class DaffModalTitleDirective {
181
184
  private modal;
182
- private _id;
185
+ /**
186
+ * @docs-private
187
+ */
188
+ _id: string;
183
189
  constructor(modal: DaffModalComponent);
184
190
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffModalTitleDirective, [{ optional: true; }]>;
185
191
  static ɵdir: i0.ɵɵDirectiveDeclaration<DaffModalTitleDirective, "[daffModalTitle]", never, {}, {}, never, never, true, never>;
@@ -26,9 +26,11 @@ declare class DaffNativeSelectComponent extends DaffFormFieldControl<string> imp
26
26
  */
27
27
  focused: boolean;
28
28
  /**
29
+ * @docs-private
30
+ *
29
31
  * Implemented as part of DaffFormFieldControl.
30
32
  */
31
- private get _id();
33
+ get _id(): string;
32
34
  constructor(
33
35
  /**
34
36
  * @docs-private
@@ -94,7 +94,7 @@ declare class DaffSidebarComponent implements DaffOpenable {
94
94
  /**
95
95
  * @docs-private
96
96
  */
97
- get open(): boolean;
97
+ get open(): i0.ModelSignal<boolean>;
98
98
  constructor(_elementRef: ElementRef<HTMLElement>, _ngZone: NgZone, _focusTrapFactory: ConfigurableFocusTrapFactory, _focusStack: DaffFocusStackService, openDirective: DaffOpenableDirective, _doc: any);
99
99
  private _focusTrap;
100
100
  /**
@@ -207,8 +207,14 @@ declare class DaffSidebarViewportComponent implements AfterContentChecked, OnDes
207
207
  * right when there are child sidebars.
208
208
  */
209
209
  private _shift;
210
- private _isPaddedLeft;
211
- private _isPaddedRight;
210
+ /**
211
+ * @docs-private
212
+ */
213
+ _isPaddedLeft: boolean;
214
+ /**
215
+ * @docs-private
216
+ */
217
+ _isPaddedRight: boolean;
212
218
  /**
213
219
  * @docs-private
214
220
  *
@@ -176,12 +176,6 @@ declare class DaffTabsComponent implements AfterContentInit, OnInit {
176
176
  * The tab that is selected on initial load. If it's not used, the first tab in the tablist will be selected by default.
177
177
  */
178
178
  initiallySelected: string;
179
- /**
180
- * @docs-private
181
- *
182
- * aria-label for the tab.
183
- */
184
- private externalAriaLabel;
185
179
  /**
186
180
  * `aria-label` to label the tablist.
187
181
  */
@@ -0,0 +1,80 @@
1
+ import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
2
+ import * as i0 from '@angular/core';
3
+ import { EventEmitter } from '@angular/core';
4
+ import * as i1 from '@daffodil/design';
5
+ import { DaffSizableDirective, DaffSizeSmallType, DaffSizeMediumType, DaffSizeLargeType, DaffDisableable, DaffPrefixDirective, DaffStatus, DaffDisableableDirective, DaffStatusableDirective } from '@daffodil/design';
6
+
7
+ /**
8
+ * The size types that the DaffTagComponent can implement.
9
+ */
10
+ type DaffTagSize = DaffSizeSmallType | DaffSizeMediumType | DaffSizeLargeType;
11
+ declare class DaffTagSizableDirective extends DaffSizableDirective<DaffTagSize> {
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<DaffTagSizableDirective, never>;
13
+ static ɵdir: i0.ɵɵDirectiveDeclaration<DaffTagSizableDirective, never, never, {}, {}, never, never, true, never>;
14
+ }
15
+
16
+ /**
17
+ * DaffTagComponent is an interactive indicator and filter that can be edited or removed, used to represent selections, categories, or applied filters.
18
+ *
19
+ * @example
20
+ * ```html
21
+ * <daff-tag [dismissible]="true" (closeTag)="onCloseTag()">
22
+ * <fa-icon daffPrefix [icon]="faCircleCheck"></fa-icon>
23
+ * Label
24
+ * </daff-tag>
25
+ * ```
26
+ */
27
+ declare class DaffTagComponent implements DaffDisableable {
28
+ private size;
29
+ private disabledDirective;
30
+ private statusable;
31
+ /**
32
+ * @docs-private
33
+ */
34
+ faTimes: _fortawesome_fontawesome_common_types.IconDefinition;
35
+ /**
36
+ * @docs-private
37
+ */
38
+ _prefix: DaffPrefixDirective;
39
+ /**
40
+ * @docs-private
41
+ *
42
+ * Internal function to access the disabled property of the DaffDisableableDirective.
43
+ */
44
+ get disabled(): boolean;
45
+ /**
46
+ * @deprecated Deprecated in version 0.93.0. Deprecated in version 0.93.1. Will be removed in version 0.96.0.
47
+ *
48
+ * Sets the status on the tag.
49
+ */
50
+ get status(): DaffStatus;
51
+ set status(value: DaffStatus);
52
+ /**
53
+ * Whether the tag can be dismissed by the user.
54
+ * Displays a close icon if `true`.
55
+ */
56
+ dismissible: boolean;
57
+ /**
58
+ * Emits when the tag is closed.
59
+ */
60
+ closeTag: EventEmitter<void>;
61
+ /**
62
+ * @docs-private
63
+ *
64
+ * Internal handler for the close icon click.
65
+ */
66
+ onCloseTag(event: Event): void;
67
+ constructor(size: DaffTagSizableDirective, disabledDirective: DaffDisableableDirective, statusable: DaffStatusableDirective);
68
+ static ɵfac: i0.ɵɵFactoryDeclaration<DaffTagComponent, never>;
69
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaffTagComponent, "daff-tag", never, { "status": { "alias": "status"; "required": false; }; "dismissible": { "alias": "dismissible"; "required": false; }; }, { "closeTag": "closeTag"; }, ["_prefix"], ["[daffPrefix]", "*"], true, [{ directive: typeof i1.DaffArticleEncapsulatedDirective; inputs: {}; outputs: {}; }, { directive: typeof DaffTagSizableDirective; inputs: { "size": "size"; }; outputs: {}; }, { directive: typeof i1.DaffColorableDirective; inputs: { "color": "color"; }; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DaffDisableableDirective; inputs: { "disabled": "disabled"; }; outputs: {}; }]>;
70
+ static ngAcceptInputType_dismissible: unknown;
71
+ }
72
+
73
+ /**
74
+ * @docs-private
75
+ *
76
+ * `DAFF_TAG_COMPONENTS` imports all the available components and directives.
77
+ */
78
+ declare const DAFF_TAG_COMPONENTS: readonly [typeof DaffTagComponent, typeof DaffTagSizableDirective, typeof DaffPrefixDirective];
79
+
80
+ export { DAFF_TAG_COMPONENTS, DaffTagComponent, DaffTagSizableDirective };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Replaces the element's native focus/blur methods with ones that dispatch the corresponding events directly,
3
+ * so tests do not depend on the document actually having focus. Chrome only
4
+ * moves `document.activeElement` without firing focus events when the document
5
+ * is unfocused, which makes native-focus-driven tests order-dependent.
6
+ *
7
+ * This originally comes from https://github.com/angular/components/blob/7d09f9153fabfe4cdd13a096d9e6d43f472812e5/src/cdk/testing/testbed/fake-events/element-focus.ts#L30
8
+ */
9
+ declare function patchElementFocus(element: HTMLElement): void;
10
+
11
+ export { patchElementFocus };