@daffodil/design 0.89.0 → 0.91.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.
Files changed (209) hide show
  1. package/README.md +1 -0
  2. package/accordion/index.d.ts +8 -5
  3. package/article/README.md +1 -1
  4. package/article/index.d.ts +20 -0
  5. package/article/src/article-theme.scss +10 -0
  6. package/button/index.d.ts +4 -4
  7. package/button/src/button/button-base.scss +3 -3
  8. package/button/src/button/raised/raised-theme.scss +6 -16
  9. package/card/README.md +0 -8
  10. package/card/index.d.ts +7 -41
  11. package/card/src/card-base-theme.scss +2 -5
  12. package/card/src/card-base.scss +2 -2
  13. package/checkbox/README.md +0 -0
  14. package/checkbox/index.d.ts +177 -0
  15. package/fesm2022/daffodil-design-accordion.mjs +23 -14
  16. package/fesm2022/daffodil-design-accordion.mjs.map +1 -1
  17. package/fesm2022/daffodil-design-article.mjs +129 -5
  18. package/fesm2022/daffodil-design-article.mjs.map +1 -1
  19. package/fesm2022/daffodil-design-button.mjs +24 -20
  20. package/fesm2022/daffodil-design-button.mjs.map +1 -1
  21. package/fesm2022/daffodil-design-card.mjs +16 -63
  22. package/fesm2022/daffodil-design-card.mjs.map +1 -1
  23. package/fesm2022/daffodil-design-checkbox.mjs +317 -0
  24. package/fesm2022/daffodil-design-checkbox.mjs.map +1 -0
  25. package/fesm2022/daffodil-design-form-field.mjs +55 -162
  26. package/fesm2022/daffodil-design-form-field.mjs.map +1 -1
  27. package/fesm2022/daffodil-design-form.mjs +62 -0
  28. package/fesm2022/daffodil-design-form.mjs.map +1 -0
  29. package/fesm2022/daffodil-design-image.mjs +12 -4
  30. package/fesm2022/daffodil-design-image.mjs.map +1 -1
  31. package/fesm2022/daffodil-design-modal.mjs +55 -56
  32. package/fesm2022/daffodil-design-modal.mjs.map +1 -1
  33. package/fesm2022/daffodil-design-notification.mjs +14 -50
  34. package/fesm2022/daffodil-design-notification.mjs.map +1 -1
  35. package/fesm2022/daffodil-design-paginator.mjs +6 -11
  36. package/fesm2022/daffodil-design-paginator.mjs.map +1 -1
  37. package/fesm2022/daffodil-design-quantity-field.mjs +3 -5
  38. package/fesm2022/daffodil-design-quantity-field.mjs.map +1 -1
  39. package/fesm2022/daffodil-design-radio.mjs +304 -0
  40. package/fesm2022/daffodil-design-radio.mjs.map +1 -0
  41. package/fesm2022/daffodil-design-select.mjs +2 -2
  42. package/fesm2022/daffodil-design-select.mjs.map +1 -1
  43. package/fesm2022/daffodil-design-sidebar.mjs +6 -36
  44. package/fesm2022/daffodil-design-sidebar.mjs.map +1 -1
  45. package/fesm2022/daffodil-design-switch.mjs +48 -105
  46. package/fesm2022/daffodil-design-switch.mjs.map +1 -1
  47. package/fesm2022/daffodil-design-tabs.mjs +22 -14
  48. package/fesm2022/daffodil-design-tabs.mjs.map +1 -1
  49. package/fesm2022/daffodil-design-tag.mjs +131 -0
  50. package/fesm2022/daffodil-design-tag.mjs.map +1 -0
  51. package/fesm2022/daffodil-design-toast.mjs +56 -55
  52. package/fesm2022/daffodil-design-toast.mjs.map +1 -1
  53. package/fesm2022/daffodil-design-tree.mjs +4 -13
  54. package/fesm2022/daffodil-design-tree.mjs.map +1 -1
  55. package/fesm2022/daffodil-design.mjs +250 -774
  56. package/fesm2022/daffodil-design.mjs.map +1 -1
  57. package/form/README.md +75 -0
  58. package/form/index.d.ts +27 -0
  59. package/form-field/README.md +49 -39
  60. package/form-field/index.d.ts +58 -76
  61. package/image/README.md +27 -19
  62. package/image/index.d.ts +6 -1
  63. package/index.d.ts +180 -424
  64. package/input/README.md +32 -12
  65. package/modal/README.md +106 -16
  66. package/modal/index.d.ts +50 -21
  67. package/native-select/README.md +52 -15
  68. package/notification/index.d.ts +7 -38
  69. package/package.json +1 -1
  70. package/paginator/index.d.ts +1 -7
  71. package/radio/README.md +52 -0
  72. package/radio/index.d.ts +160 -0
  73. package/scss/core/error/error-to-string.scss +6 -6
  74. package/scss/core/map/map-get/map-get.scss +3 -3
  75. package/scss/layout/_breakpoint.scss +1 -1
  76. package/scss/theme.scss +4 -4
  77. package/scss/theming/_color-palettes.scss +21 -7
  78. package/scss/theming/_configure-theme.scss +11 -10
  79. package/scss/theming/_daff-theme.scss +5 -14
  80. package/scss/theming/_get-base-color.scss +2 -2
  81. package/scss/theming/_get-palette.scss +2 -2
  82. package/scss/theming/_get-theme-mode.scss +3 -3
  83. package/scss/theming/_index.scss +2 -1
  84. package/scss/theming/contrast/_index.scss +1 -0
  85. package/scss/theming/contrast/max-contrast/max-contrast.scss +47 -0
  86. package/scss/theming/contrast/max-contrast/max-contrast.spec.scss +57 -0
  87. package/scss/theming/contrast/text-contrast/text-contrast.scss +22 -16
  88. package/scss/theming/contrast/text-contrast/text-contrast.spec.scss +57 -0
  89. package/scss/theming/create-theme/_create-theme.scss +330 -0
  90. package/scss/theming/create-theme/_create-theme.spec.scss +122 -0
  91. package/scss/theming/create-theme/_index.scss +1 -0
  92. package/scss/theming/get-font-colors/_get-font-colors.scss +36 -0
  93. package/scss/theming/get-font-colors/_get-font-colors.spec.scss +72 -0
  94. package/scss/typography/mixins/_font-weight.scss +8 -14
  95. package/select/README.md +107 -4
  96. package/sidebar/README.md +0 -8
  97. package/sidebar/index.d.ts +3 -15
  98. package/switch/README.md +19 -27
  99. package/switch/index.d.ts +18 -48
  100. package/switch/src/switch-theme.scss +26 -18
  101. package/tabs/index.d.ts +7 -4
  102. package/tag/README.md +87 -0
  103. package/tag/index.d.ts +71 -0
  104. package/tag/src/tag-theme.scss +137 -0
  105. package/textarea/README.md +35 -5
  106. package/tree/index.d.ts +0 -6
  107. package/tree/src/tree-theme.scss +0 -4
  108. package/accordion/examples/index.d.ts +0 -20
  109. package/article/examples/index.d.ts +0 -50
  110. package/breadcrumb/examples/index.d.ts +0 -10
  111. package/button/examples/index.d.ts +0 -67
  112. package/callout/examples/index.d.ts +0 -41
  113. package/card/examples/index.d.ts +0 -62
  114. package/card/src/card/raised/raised-theme.scss +0 -28
  115. package/checkbox/examples/index.d.ts +0 -32
  116. package/container/examples/index.d.ts +0 -16
  117. package/fesm2022/daffodil-design-accordion-examples.mjs +0 -50
  118. package/fesm2022/daffodil-design-accordion-examples.mjs.map +0 -1
  119. package/fesm2022/daffodil-design-article-examples.mjs +0 -134
  120. package/fesm2022/daffodil-design-article-examples.mjs.map +0 -1
  121. package/fesm2022/daffodil-design-breadcrumb-examples.mjs +0 -46
  122. package/fesm2022/daffodil-design-breadcrumb-examples.mjs.map +0 -1
  123. package/fesm2022/daffodil-design-button-examples.mjs +0 -178
  124. package/fesm2022/daffodil-design-button-examples.mjs.map +0 -1
  125. package/fesm2022/daffodil-design-callout-examples.mjs +0 -116
  126. package/fesm2022/daffodil-design-callout-examples.mjs.map +0 -1
  127. package/fesm2022/daffodil-design-card-examples.mjs +0 -168
  128. package/fesm2022/daffodil-design-card-examples.mjs.map +0 -1
  129. package/fesm2022/daffodil-design-checkbox-examples.mjs +0 -76
  130. package/fesm2022/daffodil-design-checkbox-examples.mjs.map +0 -1
  131. package/fesm2022/daffodil-design-container-examples.mjs +0 -41
  132. package/fesm2022/daffodil-design-container-examples.mjs.map +0 -1
  133. package/fesm2022/daffodil-design-form-field-examples.mjs +0 -96
  134. package/fesm2022/daffodil-design-form-field-examples.mjs.map +0 -1
  135. package/fesm2022/daffodil-design-hero-examples.mjs +0 -121
  136. package/fesm2022/daffodil-design-hero-examples.mjs.map +0 -1
  137. package/fesm2022/daffodil-design-image-examples.mjs +0 -58
  138. package/fesm2022/daffodil-design-image-examples.mjs.map +0 -1
  139. package/fesm2022/daffodil-design-input-examples.mjs +0 -108
  140. package/fesm2022/daffodil-design-input-examples.mjs.map +0 -1
  141. package/fesm2022/daffodil-design-list-examples.mjs +0 -77
  142. package/fesm2022/daffodil-design-list-examples.mjs.map +0 -1
  143. package/fesm2022/daffodil-design-loading-icon-examples.mjs +0 -44
  144. package/fesm2022/daffodil-design-loading-icon-examples.mjs.map +0 -1
  145. package/fesm2022/daffodil-design-media-gallery-examples.mjs +0 -104
  146. package/fesm2022/daffodil-design-media-gallery-examples.mjs.map +0 -1
  147. package/fesm2022/daffodil-design-menu-examples.mjs +0 -50
  148. package/fesm2022/daffodil-design-menu-examples.mjs.map +0 -1
  149. package/fesm2022/daffodil-design-modal-examples.mjs +0 -51
  150. package/fesm2022/daffodil-design-modal-examples.mjs.map +0 -1
  151. package/fesm2022/daffodil-design-native-select-examples.mjs +0 -71
  152. package/fesm2022/daffodil-design-native-select-examples.mjs.map +0 -1
  153. package/fesm2022/daffodil-design-navbar-examples.mjs +0 -88
  154. package/fesm2022/daffodil-design-navbar-examples.mjs.map +0 -1
  155. package/fesm2022/daffodil-design-notification-examples.mjs +0 -102
  156. package/fesm2022/daffodil-design-notification-examples.mjs.map +0 -1
  157. package/fesm2022/daffodil-design-paginator-examples.mjs +0 -59
  158. package/fesm2022/daffodil-design-paginator-examples.mjs.map +0 -1
  159. package/fesm2022/daffodil-design-progress-bar-examples.mjs +0 -57
  160. package/fesm2022/daffodil-design-progress-bar-examples.mjs.map +0 -1
  161. package/fesm2022/daffodil-design-quantity-field-examples.mjs +0 -85
  162. package/fesm2022/daffodil-design-quantity-field-examples.mjs.map +0 -1
  163. package/fesm2022/daffodil-design-radio-examples.mjs +0 -31
  164. package/fesm2022/daffodil-design-radio-examples.mjs.map +0 -1
  165. package/fesm2022/daffodil-design-select-examples.mjs +0 -117
  166. package/fesm2022/daffodil-design-select-examples.mjs.map +0 -1
  167. package/fesm2022/daffodil-design-sidebar-examples.mjs +0 -109
  168. package/fesm2022/daffodil-design-sidebar-examples.mjs.map +0 -1
  169. package/fesm2022/daffodil-design-sticky-examples.mjs +0 -25
  170. package/fesm2022/daffodil-design-sticky-examples.mjs.map +0 -1
  171. package/fesm2022/daffodil-design-switch-examples.mjs +0 -110
  172. package/fesm2022/daffodil-design-switch-examples.mjs.map +0 -1
  173. package/fesm2022/daffodil-design-tabs-examples.mjs +0 -115
  174. package/fesm2022/daffodil-design-tabs-examples.mjs.map +0 -1
  175. package/fesm2022/daffodil-design-text-snippet-examples.mjs +0 -25
  176. package/fesm2022/daffodil-design-text-snippet-examples.mjs.map +0 -1
  177. package/fesm2022/daffodil-design-textarea-examples.mjs +0 -66
  178. package/fesm2022/daffodil-design-textarea-examples.mjs.map +0 -1
  179. package/fesm2022/daffodil-design-toast-examples.mjs +0 -147
  180. package/fesm2022/daffodil-design-toast-examples.mjs.map +0 -1
  181. package/fesm2022/daffodil-design-tree-examples.mjs +0 -104
  182. package/fesm2022/daffodil-design-tree-examples.mjs.map +0 -1
  183. package/form-field/examples/index.d.ts +0 -18
  184. package/hero/examples/index.d.ts +0 -45
  185. package/image/examples/index.d.ts +0 -10
  186. package/input/examples/index.d.ts +0 -10
  187. package/list/examples/index.d.ts +0 -29
  188. package/loading-icon/examples/index.d.ts +0 -16
  189. package/media-gallery/examples/index.d.ts +0 -38
  190. package/menu/examples/index.d.ts +0 -20
  191. package/modal/examples/index.d.ts +0 -15
  192. package/native-select/examples/index.d.ts +0 -10
  193. package/navbar/examples/index.d.ts +0 -31
  194. package/notification/examples/index.d.ts +0 -12
  195. package/paginator/examples/index.d.ts +0 -26
  196. package/progress-bar/examples/index.d.ts +0 -10
  197. package/quantity-field/examples/index.d.ts +0 -30
  198. package/radio/examples/index.d.ts +0 -13
  199. package/select/examples/index.d.ts +0 -28
  200. package/sidebar/examples/index.d.ts +0 -10
  201. package/sticky/examples/index.d.ts +0 -10
  202. package/switch/examples/index.d.ts +0 -46
  203. package/tabs/examples/index.d.ts +0 -12
  204. package/text-snippet/examples/index.d.ts +0 -10
  205. package/textarea/examples/index.d.ts +0 -10
  206. package/toast/examples/index.d.ts +0 -56
  207. package/tree/examples/index.d.ts +0 -18
  208. /package/{form-field → form}/src/error-message/error-message-theme.scss +0 -0
  209. /package/{form-field → form}/src/hint/hint-theme.scss +0 -0
package/input/README.md CHANGED
@@ -1,15 +1,15 @@
1
1
  # Input
2
- The input component allows a native HTML input element to work with the form field component.
2
+ Input works alongside the native HTML input element, with additional custom styling and functionality.
3
3
 
4
4
  ## Overview
5
- The input component has the same functionality as a native HTML `<input>` element, with additional custom styling and functionality. It **cannot** be used by itself and must be contained within a [DaffFormFieldComponent](/libs/design/src/atoms/form/form-field/README.md).
5
+ Input has the same functionality as a native HTML input 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
  <design-land-example-viewer-container example="input-with-form-field"></design-land-example-viewer-container>
8
8
 
9
9
  ## Usage
10
10
 
11
11
  ### Within a standalone component
12
- To use form field in a standalone component, import `DaffInputComponent` directly into your custom component:
12
+ To use input in a standalone component, import `DaffInputComponent` directly into your custom component:
13
13
 
14
14
  ```ts
15
15
  import { DaffInputComponent } from '@daffodil/design/input';
@@ -25,7 +25,7 @@ export class CustomComponent {}
25
25
  ```
26
26
 
27
27
  ### Within a module (deprecated)
28
- To use form field in a module, import `DaffInputModule` into your custom module:
28
+ To use input in a module, import `DaffInputModule` into your custom module:
29
29
 
30
30
  ```ts
31
31
  import { NgModule } from '@angular/core';
@@ -33,7 +33,7 @@ import { DaffInputModule } from '@daffodil/design/input';
33
33
  import { CustomComponent } from './custom.component';
34
34
 
35
35
  @NgModule({
36
- declarations: [
36
+ declarations: [
37
37
  CustomComponent,
38
38
  ],
39
39
  exports: [
@@ -46,21 +46,41 @@ import { CustomComponent } from './custom.component';
46
46
  export class CustomComponentModule { }
47
47
  ```
48
48
 
49
+ > **Warning**
50
+ >
49
51
  > This method is deprecated. It's recommended to update all custom components to standalone.
50
52
 
51
- ## Examples
53
+ ## Anatomy
54
+ Input 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).
52
55
 
53
- ### Disabled input
54
- The input in this example is disabled using the native HTML disabled attribute.
56
+ ### Basic structure
57
+ ```html
58
+ <daff-form-field>
59
+ <daff-form-label>First Name</daff-form-label>
60
+ <input daff-input type="text" name="first-name" />
61
+ </daff-form-field>
62
+ ```
63
+
64
+ ## States
65
+
66
+ ### Disabled
67
+ Input can be disabled in two ways: using Angular's reactive forms with `FormControl` or with the native HTML `disabled` attribute.
55
68
 
56
69
  <design-land-example-viewer-container example="input-disabled"></design-land-example-viewer-container>
57
70
 
58
- ### Input with error messages
59
- The input in this example uses the `ReactiveFormsModule` to display errors.
71
+ ### Error
72
+ Input supports validation and error messages through Angular's form validation system. Use `<daff-error-message>` within the form field to display context-specific error messages. Error messages automatically appear when the input is invalid and has been touched or submitted.
60
73
 
61
74
  <design-land-example-viewer-container example="input-error"></design-land-example-viewer-container>
62
75
 
63
- ### Input with hint
64
- The input in this example has a hint.
76
+ 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.
77
+
78
+ ## Hints
79
+ Hints provide additional context or instructions to help users complete the input field correctly. Use `<daff-hint>` within the form field to display helpful information below the input. Unlike error messages, hints are always visible and provide guidance rather than validation feedback.
65
80
 
66
81
  <design-land-example-viewer-container example="input-hint"></design-land-example-viewer-container>
82
+
83
+ ## Accessibility
84
+ When `<daff-form-label>` is used within `<daff-form-field>`, the label automatically associates with the input using the `for` and `id` attributes.
85
+
86
+ 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/modal/README.md CHANGED
@@ -1,9 +1,21 @@
1
1
  # Modal
2
- Modal is a dynamically rendered element that floats above the rest of a page's content. It can be especially useful for interstitials that require additional user feedback.
2
+ Modal is a dynamically rendered element that floats above the rest of a page's content, requiring user interaction before returning to the main application.
3
+
4
+ ## Overview
5
+ Modals are used to capture information or attention. They overlay the main content and prevent interaction with the page until the modal is dismissed.
3
6
 
4
- ## Basic Modal
5
7
  <design-land-example-viewer-container example="basic-modal"></design-land-example-viewer-container>
6
8
 
9
+ ## Best practices
10
+
11
+ **When to use**
12
+ - Display important information that require a user response
13
+ - Display non-essential but detailed content related to the underlying page
14
+
15
+ **When not to use**
16
+ - To display critical information or warnings
17
+ - To provide status feedback or messages (use [Notification](/libs/design/notification/README.md) or [Toast](/libs/design/toast/README.md) instead)
18
+
7
19
  ## Usage
8
20
 
9
21
  ### Within a standalone component
@@ -46,31 +58,106 @@ export class CustomComponentModule { }
46
58
 
47
59
  > This method is deprecated. It's recommended to update all custom components to standalone.
48
60
 
49
- ## Supported Content Types
50
- A modal includes minimally pre-styled components and directives to help structure the content in your modal.
61
+ ## Anatomy
62
+ A modal consists of the following contents, displayed in the order listed:
51
63
 
52
64
  ### Header
53
- Header can be added to a modal by using `<daff-modal-header>`. The header includes a title and an optional close button.
65
+ **`<daff-modal-header>`**: The header section containing the title and optional close button.
54
66
 
55
67
  #### Title
56
- Title can be added to the header by using the `[daffModalTitle]` directive.
68
+ **`[daffModalTitle]`**: The primary text summarizing the modal.
57
69
 
58
- #### Close Button
70
+ #### Close button
59
71
  The close button in the header is shown by default but can be hidden by setting the `dismissible` property to `false` on the header.
60
72
 
61
73
  ### Content
62
- Content can be added to a modal by using `<daff-modal-content>`. It should only be used once. It's a wrapper container that can be used to place all additional components and text content within a modal. The content container allows for a ton of control and customization because it's minimally pre-styled and serves as a wrapping and spacing container that is scrollable.
74
+ **`<daff-modal-content>`**: The scrollable container for the modal's main content. Use this once per modal to wrap all body content.
63
75
 
64
76
  ### Actions
65
- Buttons can be added to a modal by using `<daff-modal-actions>`. This container will always be positioned at the bottom of a modal. The horizontal alignment of the actions is set to `end`.
77
+ **`<daff-modal-actions>`**: The container for action buttons, positioned at the bottom of the modal with right-aligned buttons. If two buttons are needed, place the primary button the left and the secondary button on the right.
78
+
79
+ ### Basic structure
80
+ ```html
81
+ <daff-modal-header>
82
+ <h2 daffModalTitle>Modal Title</h2>
83
+ </daff-modal-header>
84
+ <daff-modal-content>
85
+ <p>Modal content goes here</p>
86
+ </daff-modal-content>
87
+ <daff-modal-actions>
88
+ <button daff-button>Cancel</button>
89
+ <button daff-button color="primary">Confirm</button>
90
+ </daff-modal-actions>
91
+ ```
66
92
 
67
- ## Dismissing a Modal
68
- A modal can be dismissed via the close button or the `ESC` key. The close button is shown by default but can be hidden by setting the `dismissible` property to `false` on `<daff-modal-header>`. Additionally, the `[daffModalClose]` directive can be added to a `<button>` HTML element.
93
+ ## Dismissing a modal
94
+ A modal can be dismissed via:
95
+ - The close button in the header (shown by default)
96
+ - The `ESC` key
97
+ - A button with the `[daffModalClose]` directive within `<daff-modal-actions>`.
69
98
 
70
- ## Accessibility
71
- Modal works with the ARIA `role="dialog"` and `aria-modal="true"` attributes to provide an accessible experience. The first tabbable element will receive focus when a modal is opened.
99
+ To hide the close button, set `dismissible` to `false` on `<daff-modal-header>`:
72
100
 
73
- `aria-labelledby` is assigned the `[daffModalTitle]` string when it's used. If there is no title, `aria-labelledby` should be set in the configurations through the `DaffModalService`.
101
+ ```html
102
+ <daff-modal-header [dismissible]="false">
103
+ <h2 daffModalTitle>Modal Title</h2>
104
+ </daff-modal-header>
105
+ ```
106
+
107
+ ### Position configuration
108
+ By default, modals are horizontally and vertically centered on the screen. You can position a modal at the top of the screen by passing a `position` configuration when opening the modal:
109
+
110
+ ```ts
111
+ constructor(private modalService: DaffModalService) {}
112
+
113
+ showModal() {
114
+ this.modal = this.modalService.open(
115
+ ModalContentComponent,
116
+ {
117
+ position: {
118
+ vertical: 'top',
119
+ },
120
+ },
121
+ );
122
+ }
123
+ ```
124
+
125
+ You can also adjust how far from the top the modal appears by setting `offsetTop`:
126
+
127
+ ```ts
128
+ showModal() {
129
+ this.modal = this.modalService.open(
130
+ ModalContentComponent,
131
+ {
132
+ position: {
133
+ vertical: 'top',
134
+ offsetTop: '5rem',
135
+ }
136
+ },
137
+ );
138
+ }
139
+ ```
140
+
141
+ > Note: The horizontal position is always centered and cannot be customized.
142
+
143
+ ## Accessibility
144
+ Modal implements the [Dialog (Modal) WAI-ARIA design pattern](https://www.w3.org/WAI/ARIA/apg/patterns/dialog-modal/).
145
+
146
+ ### Daffodil provides
147
+ - `role="dialog"`
148
+ - `aria-modal="true"`
149
+ - `aria-labelledby` linked to the `[daffModalTitle]` element
150
+ - When opened, focus moves to the first tabbable element within the modal
151
+ - Focus is trapped within the modal while open
152
+ - When closed, focus returns to the element that triggered the modal
153
+
154
+ ### Developer responsibilities
155
+ - Provide an `aria-labelledby` through the `DafffModalService` if `[daffModalTitle]` is not used
156
+ - Add `aria-haspopup="dialog"` to the element that opens the modal
157
+
158
+ ```html
159
+ <button daff-button (click)="showModal()" aria-haspopup="dialog">Open Modal</button>
160
+ ```
74
161
 
75
162
  ```ts
76
163
  constructor(private modalService: DaffModalService) {}
@@ -83,5 +170,8 @@ showModal() {
83
170
  }
84
171
  ```
85
172
 
86
- ### Keyboard Interactions
87
- A modal can be closed by choosing one of the actions buttons, the close button in the header, or it can be dismissed by pressing the `ESC` key.
173
+ ### Keyboard interactions
174
+ | Key | Action |
175
+ | --- | ------ |
176
+ | `Tab` | Moves focus to the next focusable element within the modal. |
177
+ | `ESC` | Closes the modal and returns focus to the triggering element. |
package/modal/index.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import * as rxjs from 'rxjs';
2
- import { AnimationEvent } from '@angular/animations';
3
2
  import { ConfigurableFocusTrapFactory } from '@angular/cdk/a11y';
4
3
  import * as i2 from '@angular/cdk/portal';
5
4
  import { ComponentPortal } from '@angular/cdk/portal';
6
5
  import * as i0 from '@angular/core';
7
- import { Type, AfterContentInit, AfterViewInit, OnDestroy, EventEmitter, ElementRef, ChangeDetectorRef, ComponentRef } from '@angular/core';
6
+ import { Type, AfterContentInit, AfterViewInit, OnDestroy, ElementRef, ChangeDetectorRef, ComponentRef } from '@angular/core';
8
7
  import * as i1 from '@daffodil/design';
9
8
  import { DaffOpenable, DaffOpenableDirective, DaffFocusStackService } from '@daffodil/design';
10
9
  import * as i3 from '@angular/cdk/overlay';
@@ -14,14 +13,39 @@ import * as i4 from '@daffodil/design/button';
14
13
  import * as i5 from '@fortawesome/angular-fontawesome';
15
14
  import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
16
15
 
16
+ type DaffModalVerticalPosition = 'top' | 'center';
17
+ interface DaffModalPosition {
18
+ /**
19
+ * The vertical position of the modal. Can be 'top' or 'center'.
20
+ */
21
+ vertical?: DaffModalVerticalPosition;
22
+ /**
23
+ * Optional offset from the top edge. Defaults to `10rem`.
24
+ */
25
+ offsetTop?: string;
26
+ }
17
27
  interface DaffModalConfiguration {
18
28
  /**
19
29
  * A hook for what to do when the backdrop behind a
20
30
  * DaffModalComponent is interacted with.
21
31
  */
22
32
  onBackdropClicked?: () => void;
23
- /** Sets the `aria-labelledby` property on the modal */
33
+ /** Sets the `aria-labelledby` property on the modal. */
24
34
  ariaLabelledBy?: string;
35
+ /**
36
+ * The position of the modal. If not provided, defaults to centered horizontally and vertically.
37
+ * Horizontal position is always center.
38
+ *
39
+ * @example
40
+ * ```ts
41
+ * // Center (default)
42
+ * { vertical: 'center' }
43
+ *
44
+ * // Top with offset
45
+ * { vertical: 'top', offsetTop: '2rem' }
46
+ * ```
47
+ */
48
+ position?: DaffModalPosition;
25
49
  }
26
50
 
27
51
  declare class DaffModalService {
@@ -31,8 +55,10 @@ declare class DaffModalService {
31
55
  private defaultConfiguration;
32
56
  private _attachModal;
33
57
  private _attachModalContent;
58
+ private _createPositionStrategy;
34
59
  private _createOverlayRef;
35
60
  private _removeModal;
61
+ private _closeAllModals;
36
62
  open(component: Type<any>, configuration?: Partial<DaffModalConfiguration>): DaffModalComponent;
37
63
  close(component: DaffModalComponent): void;
38
64
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffModalService, never>;
@@ -46,17 +72,21 @@ declare class DaffModalComponent implements AfterContentInit, AfterViewInit, OnD
46
72
  private openDirective;
47
73
  private _focusStack;
48
74
  private changeDetector;
75
+ private closing;
49
76
  private _ariaLabelledBy;
77
+ /**
78
+ * @docs-private
79
+ *
80
+ * By default, the `aria-labelledby` of the modal is set to the `id` of the modal title.
81
+ */
50
82
  get ariaLabelledBy(): string;
51
83
  set ariaLabelledBy(value: string);
52
84
  /**
85
+ * @docs-private
86
+ *
53
87
  * The CDK Portal outlet used to portal content into the modal.
54
88
  */
55
89
  private _portalOutlet;
56
- /**
57
- * Event fired when the close animation is completed.
58
- */
59
- animationCompleted: EventEmitter<any>;
60
90
  /**
61
91
  * Private subject for closed animation completion events.
62
92
  */
@@ -64,7 +94,7 @@ declare class DaffModalComponent implements AfterContentInit, AfterViewInit, OnD
64
94
  /**
65
95
  * Observable that emits when the close animation is completed.
66
96
  */
67
- readonly closedAnimationCompleted$: rxjs.Observable<AnimationEvent>;
97
+ readonly closedAnimationCompleted$: rxjs.Observable<boolean>;
68
98
  /**
69
99
  * @docs-private
70
100
  */
@@ -80,32 +110,31 @@ declare class DaffModalComponent implements AfterContentInit, AfterViewInit, OnD
80
110
  */
81
111
  ngAfterViewInit(): void;
82
112
  /**
113
+ * @docs-private
114
+ *
83
115
  * Helper method to attach portable content to modal.
84
116
  */
85
117
  attachContent(portal: ComponentPortal<any>): any;
86
- /** Animation hook that controls the entrance and exit animations of the modal. */
87
118
  /**
88
- * @docs-private
119
+ * Tracks the open state of the modal.
89
120
  */
90
- get fadeState(): string;
91
- /**
92
- * Animation event that can used to hook into when
93
- * animations are fully completed. We use this in the DaffModalService
94
- * to determine when to actually remove the dynamically rendered element from the DOM
95
- * so that the animation does not clip as the element is removed.
96
- */
97
- animationDone(e: AnimationEvent): void;
98
121
  get open(): boolean;
99
122
  /**
100
- * Reveals the modal
123
+ * @docs-private
124
+ *
125
+ * Reveals the modal.
101
126
  */
102
127
  reveal(): void;
103
128
  /**
104
- * Hides the modal
129
+ * @docs-private
130
+ *
131
+ * Hides the modal.
105
132
  */
106
133
  hide(): void;
107
134
  /**
108
- * Toggles the visibility of the modal
135
+ * @docs-private
136
+ *
137
+ * Toggles the visibility of the modal.
109
138
  */
110
139
  toggle(): void;
111
140
  /**
@@ -1,25 +1,62 @@
1
- # Native select
2
- The native select component allows a native HTML select element to work with the form field component.
1
+ # Native Select
2
+ Native select works alongside the HTML select element, with additional custom styling and functionality.
3
3
 
4
4
  ## Overview
5
- The native select component has the same functionality as a native HTML `<select>` element, with additional custom styling and functionality. It **cannot** be used by itself and must be contained within a [DaffFormFieldComponent](/libs/design/src/atoms/form/form-field/README.md).
5
+ Native select has the same functionality as a native HTML select 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
- <design-land-example-viewer-container example="default-select"></design-land-example-viewer-container>
7
+ <design-land-example-viewer-container example="basic-native-select"></design-land-example-viewer-container>
8
8
 
9
- ## Examples
9
+ ## Usage
10
+ To use native select, import `DAFF_NATIVE_SELECT_COMPONENTS` directly into your custom component:
10
11
 
11
- ### Disabled select
12
- <design-land-example-viewer-container example="disabled-select"></design-land-example-viewer-container>
12
+ ```ts
13
+ import { DAFF_NATIVE_SELECT_COMPONENTS } from '@daffodil/design/native-select';
13
14
 
14
- ### Select with error messages
15
- The select in this example uses the `ReactiveFormsModule` to display errors.
15
+ @Component({
16
+ selector: 'custom-component',
17
+ templateUrl: './custom-component.component.html',
18
+ imports: [
19
+ DAFF_NATIVE_SELECT_COMPONENTS,
20
+ ],
21
+ })
22
+ export class CustomComponent {}
23
+ ```
16
24
 
17
- <design-land-example-viewer-container example="select-with-error"></design-land-example-viewer-container>
25
+ ## Anatomy
26
+ Native select 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).
18
27
 
19
- ### Select with hint
20
- The select in this example has a hint.
28
+ ### Basic structure
29
+ ```html
30
+ <daff-form-field>
31
+ <daff-form-label>Sort By</daff-form-label>
32
+ <select daff-native-select>
33
+ <option value="price-low-high">Price: Low to High</option>
34
+ <option value="price-high-low">Price: High to Low</option>
35
+ <option value="newest">Newest Arrivals</option>
36
+ </select>
37
+ </daff-form-field>
38
+ ```
21
39
 
22
- <design-land-example-viewer-container example="select-with-hint"></design-land-example-viewer-container>
40
+ ## States
23
41
 
24
- ### Loading select
25
- <design-land-example-viewer-container example="skeleton-select"></design-land-example-viewer-container>
42
+ ### Disabled
43
+ Native select can be disabled in two ways: using Angular's reactive forms with `FormControl` or with the native HTML `disabled` attribute.
44
+
45
+ <design-land-example-viewer-container example="native-select-disabled"></design-land-example-viewer-container>
46
+
47
+ ### Error
48
+ Native select supports validation and error messages through Angular's form validation system. Use `<daff-error-message>` within the form field to display context-specific error messages. Error messages automatically appear when the select is invalid and has been touched or submitted.
49
+
50
+ <design-land-example-viewer-container example="native-select-error"></design-land-example-viewer-container>
51
+
52
+ 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.
53
+
54
+ ## Hints
55
+ Hints provide additional context or instructions to help users complete the select field correctly. Use `<daff-hint>` within the form field to display helpful information below the select. Unlike error messages, hints are always visible and provide guidance rather than validation feedback.
56
+
57
+ <design-land-example-viewer-container example="native-select-hint"></design-land-example-viewer-container>
58
+
59
+ ## Accessibility
60
+ When `<daff-form-label>` is used within `<daff-form-field>`, the label automatically associates with the select using the `for` and `id` attributes.
61
+
62
+ 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.
@@ -2,28 +2,10 @@ import * as i0 from '@angular/core';
2
2
  import { EventEmitter } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import * as i1 from '@daffodil/design';
5
- import { DaffPrefixDirective, DaffStatusableDirective } from '@daffodil/design';
5
+ import { DaffPrefixDirective, DaffStatusableDirective, DaffOrientableDirective } from '@daffodil/design';
6
6
  import * as i3 from '@fortawesome/angular-fontawesome';
7
7
  import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
8
8
 
9
- /**
10
- * The available orientations for a notification.
11
- *
12
- * | Orientation | Description |
13
- * | -- | -- |
14
- * | `vertical` | Stacks notification content from top to bottom. This is the default orientation. |
15
- * | `horizontal` | Places notification content side-by-side. |
16
- */
17
- type DaffNotificationOrientation = 'horizontal' | 'vertical';
18
- /**
19
- * Enum for representing the available notification orientations.
20
- * See {@link DaffNotificationOrientation} for descriptions of each orientation.
21
- */
22
- declare enum DaffNotificationOrientationEnum {
23
- Horizontal = "horizontal",
24
- Vertical = "vertical"
25
- }
26
-
27
9
  /**
28
10
  * Actions is used to include actionable buttons related to the notification (e.g., dismiss, navigate).
29
11
  *
@@ -60,6 +42,7 @@ declare class DaffNotificationActionsDirective {
60
42
  */
61
43
  declare class DaffNotificationComponent {
62
44
  private statusDirective;
45
+ private orientation;
63
46
  /**
64
47
  * @docs-private
65
48
  */
@@ -83,11 +66,7 @@ declare class DaffNotificationComponent {
83
66
  * Displays a close icon if `true`.
84
67
  */
85
68
  dismissible: boolean;
86
- constructor(statusDirective: DaffStatusableDirective);
87
- /**
88
- * The orientation of a notification.
89
- */
90
- orientation: DaffNotificationOrientation;
69
+ constructor(statusDirective: DaffStatusableDirective, orientation: DaffOrientableDirective);
91
70
  /**
92
71
  * Emits when the notification is closed.
93
72
  */
@@ -99,8 +78,7 @@ declare class DaffNotificationComponent {
99
78
  */
100
79
  onCloseNotification(event: Event): void;
101
80
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffNotificationComponent, never>;
102
- static ɵcmp: i0.ɵɵComponentDeclaration<DaffNotificationComponent, "daff-notification", never, { "dismissible": { "alias": "dismissible"; "required": false; }; "orientation": { "alias": "orientation"; "required": false; }; }, { "closeNotification": "closeNotification"; }, ["_prefix", "_actions"], ["[daffPrefix]", "[daffNotificationTitle]", "[daffNotificationMessage]", "[daffNotificationActions]"], true, [{ directive: typeof i1.DaffArticleEncapsulatedDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: { "status": "status"; }; outputs: {}; }]>;
103
- static ngAcceptInputType_orientation: DaffNotificationOrientation | null | undefined;
81
+ static ɵcmp: i0.ɵɵComponentDeclaration<DaffNotificationComponent, "daff-notification", never, { "dismissible": { "alias": "dismissible"; "required": false; }; }, { "closeNotification": "closeNotification"; }, ["_prefix", "_actions"], ["[daffPrefix]", "[daffNotificationTitle]", "[daffNotificationMessage]", "[daffNotificationActions]"], true, [{ directive: typeof i1.DaffArticleEncapsulatedDirective; inputs: {}; outputs: {}; }, { directive: typeof i1.DaffStatusableDirective; inputs: { "status": "status"; }; outputs: {}; }, { directive: typeof i1.DaffOrientableDirective; inputs: { "orientation": "orientation"; }; outputs: {}; }]>;
104
82
  }
105
83
 
106
84
  /**
@@ -130,27 +108,18 @@ declare class DaffNotificationTitleDirective {
130
108
  static ɵdir: i0.ɵɵDirectiveDeclaration<DaffNotificationTitleDirective, "[daffNotificationTitle]", never, {}, {}, never, never, true, never>;
131
109
  }
132
110
 
133
- /**
134
- * @deprecated in favor of DaffNotificationMessageDirective. Deprecated in version 0.88.0. Will be removed in version 0.91.0.
135
- */
136
- declare class DaffNotificationSubtitleDirective {
137
- static ɵfac: i0.ɵɵFactoryDeclaration<DaffNotificationSubtitleDirective, never>;
138
- static ɵdir: i0.ɵɵDirectiveDeclaration<DaffNotificationSubtitleDirective, "[daffNotificationSubtitle]", never, {}, {}, never, never, true, never>;
139
- }
140
-
141
111
  /**
142
112
  * @deprecated in favor of {@link DAFF_NOTIFICATION_COMPONENTS}. Deprecated in version 0.78.0. Will be removed in version 1.0.0.
143
113
  */
144
114
  declare class DaffNotificationModule {
145
115
  static ɵfac: i0.ɵɵFactoryDeclaration<DaffNotificationModule, never>;
146
- static ɵmod: i0.ɵɵNgModuleDeclaration<DaffNotificationModule, never, [typeof i1$1.CommonModule, typeof i1.DaffPrefixSuffixModule, typeof i3.FontAwesomeModule, typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective, typeof DaffNotificationSubtitleDirective], [typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective, typeof DaffNotificationSubtitleDirective, typeof i1.DaffPrefixSuffixModule]>;
116
+ static ɵmod: i0.ɵɵNgModuleDeclaration<DaffNotificationModule, never, [typeof i1$1.CommonModule, typeof i1.DaffPrefixSuffixModule, typeof i3.FontAwesomeModule, typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective], [typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective, typeof i1.DaffPrefixSuffixModule]>;
147
117
  static ɵinj: i0.ɵɵInjectorDeclaration<DaffNotificationModule>;
148
118
  }
149
119
 
150
120
  /**
151
121
  * @docs-private
152
122
  */
153
- declare const DAFF_NOTIFICATION_COMPONENTS: readonly [typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective, typeof DaffNotificationSubtitleDirective, typeof DaffPrefixDirective];
123
+ declare const DAFF_NOTIFICATION_COMPONENTS: readonly [typeof DaffNotificationComponent, typeof DaffNotificationActionsDirective, typeof DaffNotificationMessageDirective, typeof DaffNotificationTitleDirective, typeof DaffPrefixDirective];
154
124
 
155
- export { DAFF_NOTIFICATION_COMPONENTS, DaffNotificationActionsDirective, DaffNotificationComponent, DaffNotificationMessageDirective, DaffNotificationModule, DaffNotificationOrientationEnum, DaffNotificationSubtitleDirective, DaffNotificationTitleDirective };
156
- export type { DaffNotificationOrientation };
125
+ export { DAFF_NOTIFICATION_COMPONENTS, DaffNotificationActionsDirective, DaffNotificationComponent, DaffNotificationMessageDirective, DaffNotificationModule, DaffNotificationTitleDirective };
package/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@daffodil/design","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/design"]}}},"version":"0.89.0","author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"homepage":"https://github.com/graycoreio/daffodil","description":"A consistent, sane api driver that works with different ecommerce systems.","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"peerDependencies":{"@angular/animations":"^20.0.0","@angular/common":"^20.0.0","@angular/core":"^20.0.0","@angular/forms":"^20.0.0","@angular/cdk":"^20.0.0","@daffodil/core":"0.89.0","@fortawesome/angular-fontawesome":"^3.0.0","@fortawesome/fontawesome-svg-core":"^7.0.1","@fortawesome/free-solid-svg-icons":"^7.0.1","@fortawesome/free-brands-svg-icons":"^7.0.1","@fortawesome/free-regular-svg-icons":"^7.0.1","modern-normalize":"^3.0.1","rxjs":"7.8.1"},"optionalDependencies":{"@faker-js/faker":"^9.8.0"},"exports":{"./scss/global":{"sass":"./scss/global.scss"},"./scss/theme":{"sass":"./scss/theme.scss"},"./scss/utilities":{"sass":"./scss/utilities.scss"},"./scss/typography":{"sass":"./scss/typography/_index.scss"},"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","default":"./fesm2022/daffodil-design.mjs"},"./article":{"types":"./article/index.d.ts","default":"./fesm2022/daffodil-design-article.mjs"},"./breadcrumb":{"types":"./breadcrumb/index.d.ts","default":"./fesm2022/daffodil-design-breadcrumb.mjs"},"./accordion":{"types":"./accordion/index.d.ts","default":"./fesm2022/daffodil-design-accordion.mjs"},"./button":{"types":"./button/index.d.ts","default":"./fesm2022/daffodil-design-button.mjs"},"./callout":{"types":"./callout/index.d.ts","default":"./fesm2022/daffodil-design-callout.mjs"},"./card":{"types":"./card/index.d.ts","default":"./fesm2022/daffodil-design-card.mjs"},"./container":{"types":"./container/index.d.ts","default":"./fesm2022/daffodil-design-container.mjs"},"./form-field":{"types":"./form-field/index.d.ts","default":"./fesm2022/daffodil-design-form-field.mjs"},"./hero":{"types":"./hero/index.d.ts","default":"./fesm2022/daffodil-design-hero.mjs"},"./image":{"types":"./image/index.d.ts","default":"./fesm2022/daffodil-design-image.mjs"},"./input":{"types":"./input/index.d.ts","default":"./fesm2022/daffodil-design-input.mjs"},"./link-set":{"types":"./link-set/index.d.ts","default":"./fesm2022/daffodil-design-link-set.mjs"},"./list":{"types":"./list/index.d.ts","default":"./fesm2022/daffodil-design-list.mjs"},"./loading-icon":{"types":"./loading-icon/index.d.ts","default":"./fesm2022/daffodil-design-loading-icon.mjs"},"./media-gallery":{"types":"./media-gallery/index.d.ts","default":"./fesm2022/daffodil-design-media-gallery.mjs"},"./menu":{"types":"./menu/index.d.ts","default":"./fesm2022/daffodil-design-menu.mjs"},"./modal":{"types":"./modal/index.d.ts","default":"./fesm2022/daffodil-design-modal.mjs"},"./native-select":{"types":"./native-select/index.d.ts","default":"./fesm2022/daffodil-design-native-select.mjs"},"./navbar":{"types":"./navbar/index.d.ts","default":"./fesm2022/daffodil-design-navbar.mjs"},"./notification":{"types":"./notification/index.d.ts","default":"./fesm2022/daffodil-design-notification.mjs"},"./paginator":{"types":"./paginator/index.d.ts","default":"./fesm2022/daffodil-design-paginator.mjs"},"./progress-bar":{"types":"./progress-bar/index.d.ts","default":"./fesm2022/daffodil-design-progress-bar.mjs"},"./quantity-field":{"types":"./quantity-field/index.d.ts","default":"./fesm2022/daffodil-design-quantity-field.mjs"},"./select":{"types":"./select/index.d.ts","default":"./fesm2022/daffodil-design-select.mjs"},"./sidebar":{"types":"./sidebar/index.d.ts","default":"./fesm2022/daffodil-design-sidebar.mjs"},"./switch":{"types":"./switch/index.d.ts","default":"./fesm2022/daffodil-design-switch.mjs"},"./tabs":{"types":"./tabs/index.d.ts","default":"./fesm2022/daffodil-design-tabs.mjs"},"./text-snippet":{"types":"./text-snippet/index.d.ts","default":"./fesm2022/daffodil-design-text-snippet.mjs"},"./textarea":{"types":"./textarea/index.d.ts","default":"./fesm2022/daffodil-design-textarea.mjs"},"./toast":{"types":"./toast/index.d.ts","default":"./fesm2022/daffodil-design-toast.mjs"},"./tree":{"types":"./tree/index.d.ts","default":"./fesm2022/daffodil-design-tree.mjs"},"./youtube-player":{"types":"./youtube-player/index.d.ts","default":"./fesm2022/daffodil-design-youtube-player.mjs"},"./article/examples":{"types":"./article/examples/index.d.ts","default":"./fesm2022/daffodil-design-article-examples.mjs"},"./breadcrumb/examples":{"types":"./breadcrumb/examples/index.d.ts","default":"./fesm2022/daffodil-design-breadcrumb-examples.mjs"},"./accordion/examples":{"types":"./accordion/examples/index.d.ts","default":"./fesm2022/daffodil-design-accordion-examples.mjs"},"./button/examples":{"types":"./button/examples/index.d.ts","default":"./fesm2022/daffodil-design-button-examples.mjs"},"./callout/examples":{"types":"./callout/examples/index.d.ts","default":"./fesm2022/daffodil-design-callout-examples.mjs"},"./card/examples":{"types":"./card/examples/index.d.ts","default":"./fesm2022/daffodil-design-card-examples.mjs"},"./checkbox/examples":{"types":"./checkbox/examples/index.d.ts","default":"./fesm2022/daffodil-design-checkbox-examples.mjs"},"./container/examples":{"types":"./container/examples/index.d.ts","default":"./fesm2022/daffodil-design-container-examples.mjs"},"./form-field/examples":{"types":"./form-field/examples/index.d.ts","default":"./fesm2022/daffodil-design-form-field-examples.mjs"},"./hero/examples":{"types":"./hero/examples/index.d.ts","default":"./fesm2022/daffodil-design-hero-examples.mjs"},"./image/examples":{"types":"./image/examples/index.d.ts","default":"./fesm2022/daffodil-design-image-examples.mjs"},"./input/examples":{"types":"./input/examples/index.d.ts","default":"./fesm2022/daffodil-design-input-examples.mjs"},"./list/examples":{"types":"./list/examples/index.d.ts","default":"./fesm2022/daffodil-design-list-examples.mjs"},"./loading-icon/examples":{"types":"./loading-icon/examples/index.d.ts","default":"./fesm2022/daffodil-design-loading-icon-examples.mjs"},"./media-gallery/examples":{"types":"./media-gallery/examples/index.d.ts","default":"./fesm2022/daffodil-design-media-gallery-examples.mjs"},"./menu/examples":{"types":"./menu/examples/index.d.ts","default":"./fesm2022/daffodil-design-menu-examples.mjs"},"./modal/examples":{"types":"./modal/examples/index.d.ts","default":"./fesm2022/daffodil-design-modal-examples.mjs"},"./native-select/examples":{"types":"./native-select/examples/index.d.ts","default":"./fesm2022/daffodil-design-native-select-examples.mjs"},"./navbar/examples":{"types":"./navbar/examples/index.d.ts","default":"./fesm2022/daffodil-design-navbar-examples.mjs"},"./notification/examples":{"types":"./notification/examples/index.d.ts","default":"./fesm2022/daffodil-design-notification-examples.mjs"},"./paginator/examples":{"types":"./paginator/examples/index.d.ts","default":"./fesm2022/daffodil-design-paginator-examples.mjs"},"./progress-bar/examples":{"types":"./progress-bar/examples/index.d.ts","default":"./fesm2022/daffodil-design-progress-bar-examples.mjs"},"./quantity-field/examples":{"types":"./quantity-field/examples/index.d.ts","default":"./fesm2022/daffodil-design-quantity-field-examples.mjs"},"./radio/examples":{"types":"./radio/examples/index.d.ts","default":"./fesm2022/daffodil-design-radio-examples.mjs"},"./select/examples":{"types":"./select/examples/index.d.ts","default":"./fesm2022/daffodil-design-select-examples.mjs"},"./sidebar/examples":{"types":"./sidebar/examples/index.d.ts","default":"./fesm2022/daffodil-design-sidebar-examples.mjs"},"./sticky/examples":{"types":"./sticky/examples/index.d.ts","default":"./fesm2022/daffodil-design-sticky-examples.mjs"},"./switch/examples":{"types":"./switch/examples/index.d.ts","default":"./fesm2022/daffodil-design-switch-examples.mjs"},"./tabs/examples":{"types":"./tabs/examples/index.d.ts","default":"./fesm2022/daffodil-design-tabs-examples.mjs"},"./text-snippet/examples":{"types":"./text-snippet/examples/index.d.ts","default":"./fesm2022/daffodil-design-text-snippet-examples.mjs"},"./textarea/examples":{"types":"./textarea/examples/index.d.ts","default":"./fesm2022/daffodil-design-textarea-examples.mjs"},"./toast/examples":{"types":"./toast/examples/index.d.ts","default":"./fesm2022/daffodil-design-toast-examples.mjs"},"./tree/examples":{"types":"./tree/examples/index.d.ts","default":"./fesm2022/daffodil-design-tree-examples.mjs"}},"module":"fesm2022/daffodil-design.mjs","typings":"index.d.ts","sideEffects":false,"dependencies":{"tslib":"^2.3.0"}}
1
+ {"name":"@daffodil/design","nx":{"targets":{"build":{"outputs":["{workspaceRoot}/dist/design"]}}},"version":"0.91.0","author":"Graycore LLC","license":"MIT","bugs":{"url":"https://github.com/graycoreio/daffodil/issues"},"homepage":"https://github.com/graycoreio/daffodil","description":"A consistent, sane api driver that works with different ecommerce systems.","repository":{"type":"git","url":"https://github.com/graycoreio/daffodil"},"peerDependencies":{"@angular/animations":"^20.0.0","@angular/common":"^20.0.0","@angular/core":"^20.0.0","@angular/forms":"^20.0.0","@angular/cdk":"^20.0.0","@daffodil/core":"0.91.0","@fortawesome/angular-fontawesome":"^3.0.0","@fortawesome/fontawesome-svg-core":"^7.0.1","@fortawesome/free-solid-svg-icons":"^7.0.1","@fortawesome/free-brands-svg-icons":"^7.0.1","@fortawesome/free-regular-svg-icons":"^7.0.1","modern-normalize":"^3.0.1","rxjs":"^7.0.0"},"optionalDependencies":{"@faker-js/faker":"^9.8.0"},"exports":{"./scss/global":{"sass":"./scss/global.scss"},"./scss/theme":{"sass":"./scss/theme.scss"},"./scss/utilities":{"sass":"./scss/utilities.scss"},"./scss/typography":{"sass":"./scss/typography/_index.scss"},"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","default":"./fesm2022/daffodil-design.mjs"},"./article":{"types":"./article/index.d.ts","default":"./fesm2022/daffodil-design-article.mjs"},"./accordion":{"types":"./accordion/index.d.ts","default":"./fesm2022/daffodil-design-accordion.mjs"},"./breadcrumb":{"types":"./breadcrumb/index.d.ts","default":"./fesm2022/daffodil-design-breadcrumb.mjs"},"./button":{"types":"./button/index.d.ts","default":"./fesm2022/daffodil-design-button.mjs"},"./callout":{"types":"./callout/index.d.ts","default":"./fesm2022/daffodil-design-callout.mjs"},"./card":{"types":"./card/index.d.ts","default":"./fesm2022/daffodil-design-card.mjs"},"./checkbox":{"types":"./checkbox/index.d.ts","default":"./fesm2022/daffodil-design-checkbox.mjs"},"./container":{"types":"./container/index.d.ts","default":"./fesm2022/daffodil-design-container.mjs"},"./form":{"types":"./form/index.d.ts","default":"./fesm2022/daffodil-design-form.mjs"},"./form-field":{"types":"./form-field/index.d.ts","default":"./fesm2022/daffodil-design-form-field.mjs"},"./hero":{"types":"./hero/index.d.ts","default":"./fesm2022/daffodil-design-hero.mjs"},"./image":{"types":"./image/index.d.ts","default":"./fesm2022/daffodil-design-image.mjs"},"./input":{"types":"./input/index.d.ts","default":"./fesm2022/daffodil-design-input.mjs"},"./link-set":{"types":"./link-set/index.d.ts","default":"./fesm2022/daffodil-design-link-set.mjs"},"./list":{"types":"./list/index.d.ts","default":"./fesm2022/daffodil-design-list.mjs"},"./loading-icon":{"types":"./loading-icon/index.d.ts","default":"./fesm2022/daffodil-design-loading-icon.mjs"},"./media-gallery":{"types":"./media-gallery/index.d.ts","default":"./fesm2022/daffodil-design-media-gallery.mjs"},"./menu":{"types":"./menu/index.d.ts","default":"./fesm2022/daffodil-design-menu.mjs"},"./modal":{"types":"./modal/index.d.ts","default":"./fesm2022/daffodil-design-modal.mjs"},"./native-select":{"types":"./native-select/index.d.ts","default":"./fesm2022/daffodil-design-native-select.mjs"},"./navbar":{"types":"./navbar/index.d.ts","default":"./fesm2022/daffodil-design-navbar.mjs"},"./notification":{"types":"./notification/index.d.ts","default":"./fesm2022/daffodil-design-notification.mjs"},"./paginator":{"types":"./paginator/index.d.ts","default":"./fesm2022/daffodil-design-paginator.mjs"},"./progress-bar":{"types":"./progress-bar/index.d.ts","default":"./fesm2022/daffodil-design-progress-bar.mjs"},"./quantity-field":{"types":"./quantity-field/index.d.ts","default":"./fesm2022/daffodil-design-quantity-field.mjs"},"./radio":{"types":"./radio/index.d.ts","default":"./fesm2022/daffodil-design-radio.mjs"},"./select":{"types":"./select/index.d.ts","default":"./fesm2022/daffodil-design-select.mjs"},"./sidebar":{"types":"./sidebar/index.d.ts","default":"./fesm2022/daffodil-design-sidebar.mjs"},"./switch":{"types":"./switch/index.d.ts","default":"./fesm2022/daffodil-design-switch.mjs"},"./tabs":{"types":"./tabs/index.d.ts","default":"./fesm2022/daffodil-design-tabs.mjs"},"./tag":{"types":"./tag/index.d.ts","default":"./fesm2022/daffodil-design-tag.mjs"},"./text-snippet":{"types":"./text-snippet/index.d.ts","default":"./fesm2022/daffodil-design-text-snippet.mjs"},"./textarea":{"types":"./textarea/index.d.ts","default":"./fesm2022/daffodil-design-textarea.mjs"},"./toast":{"types":"./toast/index.d.ts","default":"./fesm2022/daffodil-design-toast.mjs"},"./tree":{"types":"./tree/index.d.ts","default":"./fesm2022/daffodil-design-tree.mjs"},"./youtube-player":{"types":"./youtube-player/index.d.ts","default":"./fesm2022/daffodil-design-youtube-player.mjs"}},"module":"fesm2022/daffodil-design.mjs","typings":"index.d.ts","sideEffects":false,"dependencies":{"tslib":"^2.6.2"}}
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnChanges, ElementRef, EventEmitter } from '@angular/core';
2
+ import { OnChanges, EventEmitter } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import * as i2 from '@angular/router';
5
5
  import { Params } from '@angular/router';
@@ -7,7 +7,6 @@ import * as i3 from '@fortawesome/angular-fontawesome';
7
7
  import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome-common-types';
8
8
 
9
9
  declare class DaffPaginatorComponent implements OnChanges {
10
- private elementRef;
11
10
  /**
12
11
  * @docs-private
13
12
  */
@@ -16,11 +15,6 @@ declare class DaffPaginatorComponent implements OnChanges {
16
15
  * @docs-private
17
16
  */
18
17
  faChevronLeft: _fortawesome_fontawesome_common_types.IconDefinition;
19
- /**
20
- * @docs-private
21
- */
22
- _paginatorId: string;
23
- constructor(elementRef: ElementRef);
24
18
  /**
25
19
  * The total number of pages the paginator tracks. This number can change dynamically, but the end user is responsible for keeping numberOfPages
26
20
  * and currentPage in sync. For example, if the numberOfPages is dynamically changed to a value less than the currentPage, the paginator will break.