@sdaia-ds/mcp 0.0.0-stage → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/README.md +212 -2
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +291 -0
  4. package/dist/index.js.map +1 -0
  5. package/knowledge/actions/breadcrumb.md +50 -0
  6. package/knowledge/actions/button-menu.md +82 -0
  7. package/knowledge/actions/button-split.md +69 -0
  8. package/knowledge/actions/button.md +101 -0
  9. package/knowledge/actions/content-switcher.md +66 -0
  10. package/knowledge/actions/date-picker.md +115 -0
  11. package/knowledge/actions/floating-button.md +100 -0
  12. package/knowledge/actions/horizontal-tabs.md +52 -0
  13. package/knowledge/actions/link.md +76 -0
  14. package/knowledge/actions/modal.md +103 -0
  15. package/knowledge/actions/pagination.md +69 -0
  16. package/knowledge/actions/radio-button.md +88 -0
  17. package/knowledge/actions/switch.md +87 -0
  18. package/knowledge/actions/tag.md +69 -0
  19. package/knowledge/ai/agent-activity.md +65 -0
  20. package/knowledge/ai/agent-card.md +65 -0
  21. package/knowledge/ai/agent-handoff.md +65 -0
  22. package/knowledge/ai/ai-citation.md +78 -0
  23. package/knowledge/ai/ai-code-block.md +86 -0
  24. package/knowledge/ai/ai-disclaimer.md +84 -0
  25. package/knowledge/ai/ai-message-bubble.md +81 -0
  26. package/knowledge/ai/ai-message.md +118 -0
  27. package/knowledge/ai/ai-prompt-input.md +93 -0
  28. package/knowledge/ai/ai-states.md +107 -0
  29. package/knowledge/ai/ai-status-indicator.md +81 -0
  30. package/knowledge/ai/ai-suggested-prompts.md +62 -0
  31. package/knowledge/ai/ai-thinking-indicator.md +94 -0
  32. package/knowledge/ai/artifact-viewer.md +105 -0
  33. package/knowledge/ai/citation.md +61 -0
  34. package/knowledge/ai/context-manager.md +111 -0
  35. package/knowledge/ai/prompt-context.md +72 -0
  36. package/knowledge/ai/prompt-suggestion.md +68 -0
  37. package/knowledge/ai/prompt-template.md +71 -0
  38. package/knowledge/ai/prompt-variable.md +61 -0
  39. package/knowledge/ai/reasoning-trace.md +106 -0
  40. package/knowledge/ai/source-explorer.md +117 -0
  41. package/knowledge/ai/source-group.md +59 -0
  42. package/knowledge/ai/source-reference.md +70 -0
  43. package/knowledge/ai/thinking-panel.md +77 -0
  44. package/knowledge/ai/tool-activity-feed.md +67 -0
  45. package/knowledge/ai/tool-call-card.md +66 -0
  46. package/knowledge/ai/tool-status-row.md +72 -0
  47. package/knowledge/ai/tool-timeline-item.md +71 -0
  48. package/knowledge/ai/voice-session.md +93 -0
  49. package/knowledge/feedback/alert.md +106 -0
  50. package/knowledge/feedback/badge.md +86 -0
  51. package/knowledge/feedback/card.md +54 -0
  52. package/knowledge/feedback/feedback-overview.md +37 -0
  53. package/knowledge/feedback/feedback.md +46 -0
  54. package/knowledge/feedback/help-icon.md +57 -0
  55. package/knowledge/feedback/loading-indicator.md +76 -0
  56. package/knowledge/feedback/notification-banner.md +73 -0
  57. package/knowledge/feedback/notification-popup.md +87 -0
  58. package/knowledge/feedback/notifications.md +158 -0
  59. package/knowledge/feedback/progress-bar.md +69 -0
  60. package/knowledge/feedback/rating-overview.md +58 -0
  61. package/knowledge/feedback/rating.md +64 -0
  62. package/knowledge/feedback/skeleton-avatar.md +48 -0
  63. package/knowledge/feedback/skeleton.md +53 -0
  64. package/knowledge/feedback/toast.md +74 -0
  65. package/knowledge/feedback/tooltip.md +72 -0
  66. package/knowledge/form/autocomplete.md +100 -0
  67. package/knowledge/form/checkbox.md +95 -0
  68. package/knowledge/form/date-time-field.md +63 -0
  69. package/knowledge/form/error-summary.md +56 -0
  70. package/knowledge/form/field-group.md +57 -0
  71. package/knowledge/form/file-uploader.md +60 -0
  72. package/knowledge/form/form-section.md +58 -0
  73. package/knowledge/form/number-input.md +92 -0
  74. package/knowledge/form/otp-input.md +83 -0
  75. package/knowledge/form/password-input.md +49 -0
  76. package/knowledge/form/range-slider.md +71 -0
  77. package/knowledge/form/rich-text-editor.md +106 -0
  78. package/knowledge/form/select.md +113 -0
  79. package/knowledge/form/signature.md +83 -0
  80. package/knowledge/form/slider.md +66 -0
  81. package/knowledge/form/text-area.md +90 -0
  82. package/knowledge/form/text-input.md +132 -0
  83. package/knowledge/form/time-input.md +44 -0
  84. package/knowledge/form/time-picker.md +73 -0
  85. package/knowledge/foundations/accessibility.md +97 -0
  86. package/knowledge/foundations/colors.md +1113 -0
  87. package/knowledge/foundations/figma.md +30 -0
  88. package/knowledge/foundations/icon-usage.md +114 -0
  89. package/knowledge/foundations/icons.md +16 -0
  90. package/knowledge/foundations/motion.md +39 -0
  91. package/knowledge/foundations/radius.md +17 -0
  92. package/knowledge/foundations/responsive.md +64 -0
  93. package/knowledge/foundations/rtl.md +106 -0
  94. package/knowledge/foundations/spacing.md +27 -0
  95. package/knowledge/foundations/theme.md +115 -0
  96. package/knowledge/foundations/tokens.json +12080 -0
  97. package/knowledge/foundations/typography.md +45 -0
  98. package/knowledge/general/accordion.md +79 -0
  99. package/knowledge/general/activity.md +44 -0
  100. package/knowledge/general/app-shell.md +64 -0
  101. package/knowledge/general/area-chart.md +89 -0
  102. package/knowledge/general/audio-player.md +85 -0
  103. package/knowledge/general/avatar-group.md +50 -0
  104. package/knowledge/general/avatar.md +61 -0
  105. package/knowledge/general/carousel-image.md +103 -0
  106. package/knowledge/general/chart.md +25 -0
  107. package/knowledge/general/chip.md +90 -0
  108. package/knowledge/general/code-snippet.md +80 -0
  109. package/knowledge/general/column-chart.md +84 -0
  110. package/knowledge/general/context-menu.md +55 -0
  111. package/knowledge/general/digital-stamp.md +77 -0
  112. package/knowledge/general/divider.md +65 -0
  113. package/knowledge/general/donut-chart.md +75 -0
  114. package/knowledge/general/draggable-list.md +43 -0
  115. package/knowledge/general/dropdown.md +90 -0
  116. package/knowledge/general/empty-state.md +60 -0
  117. package/knowledge/general/filtration.md +85 -0
  118. package/knowledge/general/footer.md +59 -0
  119. package/knowledge/general/line-chart.md +95 -0
  120. package/knowledge/general/list.md +91 -0
  121. package/knowledge/general/media-gallery.md +85 -0
  122. package/knowledge/general/media-viewer.md +78 -0
  123. package/knowledge/general/menu.md +66 -0
  124. package/knowledge/general/metric.md +92 -0
  125. package/knowledge/general/nav-bar.md +62 -0
  126. package/knowledge/general/nav-header.md +125 -0
  127. package/knowledge/general/number.md +72 -0
  128. package/knowledge/general/page-template.md +80 -0
  129. package/knowledge/general/pdf-viewer.md +91 -0
  130. package/knowledge/general/pie-chart-panel.md +86 -0
  131. package/knowledge/general/popover.md +115 -0
  132. package/knowledge/general/progress-circle.md +63 -0
  133. package/knowledge/general/quote.md +64 -0
  134. package/knowledge/general/radial-stepper.md +72 -0
  135. package/knowledge/general/scatter-chart.md +62 -0
  136. package/knowledge/general/second-nav-header.md +55 -0
  137. package/knowledge/general/slideout-menu.md +92 -0
  138. package/knowledge/general/stepper.md +42 -0
  139. package/knowledge/general/structured-list.md +52 -0
  140. package/knowledge/general/table-bulk-actions-bar.md +66 -0
  141. package/knowledge/general/table-of-content.md +49 -0
  142. package/knowledge/general/table.md +113 -0
  143. package/knowledge/general/tree-view.md +55 -0
  144. package/knowledge/general/vertical-tabs.md +48 -0
  145. package/knowledge/general/video-player.md +88 -0
  146. package/knowledge/manifest.json +919 -0
  147. package/knowledge/patterns/buttons-with-sdaia-touch.md +34 -0
  148. package/knowledge/patterns/sdaia-logo-animation.md +35 -0
  149. package/knowledge/patterns/switch-with-sdaia-touch.md +29 -0
  150. package/knowledge/setup.md +125 -0
  151. package/package.json +45 -4
@@ -0,0 +1,86 @@
1
+ # Badge
2
+
3
+ ## Metadata
4
+ - Component: Badge
5
+ - Slug: `badge`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add badge`
8
+ - Import: `import { Badge } from '@/components/ui/Badge'`
9
+ - Installed files: `Badge.tsx`, `Badge.types.ts`, `Badge.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/badge
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add badge`. It copies the source into your components folder (`components/ui/Badge/`, under `src/` when the project has one); import it as `@/components/ui/Badge`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `children?` | `ReactNode` | — | Label text |
18
+ | `size?` | `'sm' \| 'md' \| 'lg'` | 'md' | Size of the badge |
19
+ | `variant?` | `'soft' \| 'solid'` | 'soft' | Visual style |
20
+ | `color?` | `'neutral' \| 'primary' \| 'secondary' \| 'tertiary' \| 'info' \| 'warning' \| 'error'` | 'neutral' | Color scheme |
21
+ | `pill?` | `boolean` | false | Pill shape (rounded-full) |
22
+ | `iconOnly?` | `boolean` | false | Icon-only mode (no text) |
23
+ | `leadingIcon?` | `ReactNode` | — | Leading icon element |
24
+ | `trailingIcon?` | `ReactNode` | — | Trailing icon element |
25
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
26
+
27
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `dir`.
28
+
29
+ ## Options (allowed values)
30
+ - `size`: `'sm'` \| `'md'` \| `'lg'` — Size of the badge
31
+ - `variant`: `'soft'` \| `'solid'` — Visual style
32
+ - `color`: `'neutral'` \| `'primary'` \| `'secondary'` \| `'tertiary'` \| `'info'` \| `'warning'` \| `'error'` — Color scheme
33
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
34
+
35
+ ## Accessibility
36
+ - Icon-only usage must include an accessible label (`aria-label`).
37
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
38
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
39
+
40
+ ## Design tokens used
41
+ Keep these consistent (resolve values with `get_tokens`):
42
+ - `var(--ds-color-)`
43
+ - `var(--ds-color-bg-danger-strong)`
44
+ - `var(--ds-color-bg-danger-subtle)`
45
+ - `var(--ds-color-bg-default)`
46
+ - `var(--ds-color-bg-emphasis-low)`
47
+ - `var(--ds-color-bg-info-strong)`
48
+ - `var(--ds-color-bg-info-subtle)`
49
+ - `var(--ds-color-bg-success-strong)`
50
+ - `var(--ds-color-bg-success-subtle)`
51
+ - `var(--ds-color-bg-warning-strong)`
52
+ - `var(--ds-color-bg-warning-subtle)`
53
+ - `var(--ds-color-border-danger-strong)`
54
+ - `var(--ds-color-border-default-strong)`
55
+ - `var(--ds-color-border-info-strong)`
56
+ - `var(--ds-color-border-success-strong)`
57
+ - `var(--ds-color-border-warning-strong)`
58
+ - `var(--ds-color-text-danger)`
59
+ - `var(--ds-color-text-default)`
60
+ - `var(--ds-color-text-info)`
61
+ - `var(--ds-color-text-on-color)`
62
+ - `var(--ds-color-text-success)`
63
+ - `var(--ds-color-text-warning)`
64
+ - `var(--ds-radius-full)`
65
+ - `var(--ds-radius-xs)`
66
+ - `var(--ds-spacing-md)`
67
+ - `var(--ds-spacing-sm)`
68
+ - `var(--ds-spacing-xs)`
69
+ - `var(--ds-spacing-xxs)`
70
+ - `var(--ds-themes-badge-)`
71
+ - `var(--ds-themes-badge-badge-background-brand-tertiary-soft)`
72
+ - `var(--ds-themes-badge-badge-background-brand-tertiary-solid)`
73
+ - `var(--ds-themes-badge-badge-background-gold-soft)`
74
+ - `var(--ds-themes-badge-badge-background-gold-solid)`
75
+ - `var(--ds-themes-badge-badge-border-brand-tertiary-soft)`
76
+ - `var(--ds-themes-badge-badge-border-gold-soft)`
77
+ - `var(--ds-themes-text-)`
78
+ - `var(--ds-themes-text-text-brand-tertiary)`
79
+
80
+ ## AI usage guidance
81
+ When generating UI:
82
+ - Install with `npx sdaia-ui@latest add badge` (after `npx sdaia-ui@latest init`), then import `{ Badge }` from `@/components/ui/Badge`.
83
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
84
+ - Use only the documented option values listed under "Options".
85
+ - Pass icons via `<DgaIcon data={…} className="size-icon-sm" />` from `@platformscode/icons` only — see `get_foundations` (`icon-usage`). Never emoji, Lucide, or random icons (e.g. `pizza01Stroke` for dark mode).
86
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,54 @@
1
+ # Card
2
+
3
+ ## Metadata
4
+ - Component: Card
5
+ - Slug: `card`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add card`
8
+ - Import: `import { Card } from '@/components/ui/Card'`
9
+ - Installed files: `Card.tsx`, `Card.types.ts`, `Card.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/card
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add card`. It copies the source into your components folder (`components/ui/Card/`, under `src/` when the project has one); import it as `@/components/ui/Card`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `children?` | `ReactNode` | — | Render children inside the card surface (radius, padding, bg). |
18
+ | `surface?` | `'solid' \| 'glass'` | 'solid' | Surface treatment — `'solid'` (default) or `'glass'` (translucent liquid-glass material). |
19
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
20
+
21
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `dir`.
22
+
23
+ ## Options (allowed values)
24
+ - `surface`: `'solid'` \| `'glass'` — Surface treatment of the card.
25
+ - `'solid'` (default) — opaque raised background.
26
+ - `'glass'` — translucent liquid-glass material (blurred backdrop +
27
+ beveled edge highlight). Reads best placed over imagery or color.
28
+
29
+ The visual is provided by the shared `.glass-surface` utility, so it is
30
+ theme-aware (light / dark) and identical across every component that
31
+ exposes a `surface` prop.
32
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
33
+
34
+ ## Deprecated props
35
+ Do not use in new code:
36
+ - `direction`
37
+
38
+ ## Accessibility
39
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
40
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
41
+
42
+ ## Design tokens used
43
+ Keep these consistent (resolve values with `get_tokens`):
44
+ - `var(--ds-color-bg-raised)`
45
+ - `var(--ds-radius-l)`
46
+ - `var(--ds-spacing-2xl)`
47
+ - `var(--ds-spacing-xl)`
48
+
49
+ ## AI usage guidance
50
+ When generating UI:
51
+ - Install with `npx sdaia-ui@latest add card` (after `npx sdaia-ui@latest init`), then import `{ Card }` from `@/components/ui/Card`.
52
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
53
+ - Use only the documented option values listed under "Options".
54
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,37 @@
1
+ # Feedback Overview
2
+
3
+ ## Metadata
4
+ - Component: Feedback Overview
5
+ - Slug: `feedback-overview`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add feedback-overview`
8
+ - Import: `import { FeedbackOverview } from '@/components/ui/FeedbackOverview'`
9
+ - Installed files: `FeedbackOverview.tsx`, `FeedbackOverview.types.ts`, `FeedbackOverview.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/feedback-overview
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add feedback-overview`. It copies the source into your components folder (`components/ui/FeedbackOverview/`, under `src/` when the project has one); import it as `@/components/ui/FeedbackOverview`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `label?` | `ReactNode` | — | The label shown alongside the reaction buttons. |
18
+ | `labelPlacement?` | `'top' \| 'inline' \| 'bottom'` | 'top' | Where the label is placed relative to the reactions. |
19
+
20
+ ## Options (allowed values)
21
+ - `labelPlacement`: `'top'` \| `'inline'` \| `'bottom'` — Where the label is placed relative to the reactions.
22
+
23
+ ## Accessibility
24
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
25
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
26
+
27
+ ## Design tokens used
28
+ Keep these consistent (resolve values with `get_tokens`):
29
+ - `var(--ds-color-text-paragraph)`
30
+ - `var(--ds-spacing-xs)`
31
+
32
+ ## AI usage guidance
33
+ When generating UI:
34
+ - Install with `npx sdaia-ui@latest add feedback-overview` (after `npx sdaia-ui@latest init`), then import `{ FeedbackOverview }` from `@/components/ui/FeedbackOverview`.
35
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
36
+ - Use only the documented option values listed under "Options".
37
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,46 @@
1
+ # Feedback
2
+
3
+ ## Metadata
4
+ - Component: Feedback
5
+ - Slug: `feedback`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add feedback`
8
+ - Import: `import { Feedback } from '@/components/ui/Feedback'`
9
+ - Installed files: `Feedback.tsx`, `Feedback.types.ts`, `Feedback.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/feedback
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add feedback`. It copies the source into your components folder (`components/ui/Feedback/`, under `src/` when the project has one); import it as `@/components/ui/Feedback`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `type?` | `FeedbackType` | 'thumb' | Glyph family — `thumb` (like / dislike) or `emoji` (dislike / neutral / like). |
18
+ | `size?` | `FeedbackSize` | 'md' | — |
19
+ | `value?` | `FeedbackValue \| null` | — | Controlled value. Pass `null` to deselect. |
20
+ | `defaultValue?` | `FeedbackValue \| null` | null | Initial value when uncontrolled. |
21
+ | `onValueChange?` | `(value: FeedbackValue \| null) => void` | — | Fired with the new value (`null` when the active reaction is pressed again). |
22
+ | `disabled?` | `boolean` | false | Disables every reaction button. |
23
+ | `labels?` | `Partial<FeedbackLabels>` | — | Override built-in accessible names (English defaults) to localize the reactions. |
24
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
25
+
26
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `onChange`, `defaultValue`, `dir`.
27
+
28
+ ## Options (allowed values)
29
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
30
+
31
+ ## Accessibility
32
+ - Built-in strings (button names, announcements) come from `labels`; pass translated strings for Arabic or other languages.
33
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
34
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
35
+
36
+ ## Design tokens used
37
+ Keep these consistent (resolve values with `get_tokens`):
38
+ - `var(--ds-spacing-xs)`
39
+
40
+ ## AI usage guidance
41
+ When generating UI:
42
+ - Install with `npx sdaia-ui@latest add feedback` (after `npx sdaia-ui@latest init`), then import `{ Feedback }` from `@/components/ui/Feedback`.
43
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
44
+ - Use only the documented option values listed under "Options".
45
+ - Express the disabled state with the `disabled` prop, not custom styling.
46
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,57 @@
1
+ # Help Icon
2
+
3
+ ## Metadata
4
+ - Component: Help Icon
5
+ - Slug: `help-icon`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add help-icon`
8
+ - Import: `import { HelpIcon } from '@/components/ui/HelpIcon'`
9
+ - Installed files: `HelpIcon.tsx`, `HelpIcon.types.ts`, `HelpIcon.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/helpicon
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add help-icon`. It copies the source into your components folder (`components/ui/HelpIcon/`, under `src/` when the project has one); import it as `@/components/ui/HelpIcon`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `placement?` | `'top' \| 'bottom' \| 'left' \| 'right'` | 'top' | Side on which the tooltip appears relative to the trigger icon. In RTL the left/right placements are mirrored automatically. |
18
+ | `align?` | `'start' \| 'center' \| 'end'` | 'start' | Alignment of the beak (arrow) along the tooltip edge. For top/bottom placements this controls horizontal position; for left/right placements it controls vertical position. |
19
+ | `open?` | `boolean` | — | Whether the tooltip is currently visible. When provided the component operates in controlled mode. When omitted the component is uncontrolled and shows on hover/focus. |
20
+ | `onOpenChange?` | `(open: boolean) => void` | — | Callback fired when the tooltip open state should change (hover / focus, leaving, or Escape). Use this together with `open` for controlled mode. |
21
+ | `title?` | `ReactNode` | — | Title text displayed at the top of the tooltip. |
22
+ | `description?` | `ReactNode` | — | Description / body text displayed below the title. |
23
+ | `dir?` | `'ltr' \| 'rtl'` | — | Layout direction — applied to the root and the tooltip, and used to mirror left/right placements. Unset inherits the page direction (read when the tooltip opens). |
24
+ | `labels?` | `Partial<HelpIconLabels>` | — | Localised built-in strings (trigger button name). |
25
+
26
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `title`, `dir`.
27
+
28
+ ## Options (allowed values)
29
+ - `placement`: `'top'` \| `'bottom'` \| `'left'` \| `'right'` — Which side the tooltip appears on relative to the trigger icon.
30
+ - `align`: `'start'` \| `'center'` \| `'end'` — Where the beak (arrow) sits along the tooltip edge.
31
+ - `dir`: `'ltr'` \| `'rtl'` — Layout direction — applied to the root and the tooltip, and used to mirror
32
+ left/right placements. Unset inherits the page direction (read when the tooltip opens).
33
+
34
+ ## Deprecated props
35
+ Do not use in new code:
36
+ - `rtl` — Pass `true` when the component is rendered inside a `dir="rtl"` context.
37
+
38
+ ## Accessibility
39
+ - Built-in strings (button names, announcements) come from `labels`; pass translated strings for Arabic or other languages.
40
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
41
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
42
+
43
+ ## Design tokens used
44
+ Keep these consistent (resolve values with `get_tokens`):
45
+ - `var(--ds-color-bg-default)`
46
+ - `var(--ds-color-border-brand)`
47
+ - `var(--ds-color-icon-default)`
48
+ - `var(--ds-color-icon-default-500)`
49
+ - `var(--ds-radius-full)`
50
+
51
+ ## AI usage guidance
52
+ When generating UI:
53
+ - Install with `npx sdaia-ui@latest add help-icon` (after `npx sdaia-ui@latest init`), then import `{ HelpIcon }` from `@/components/ui/HelpIcon`.
54
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
55
+ - Use only the documented option values listed under "Options".
56
+ - Pass icons via `<DgaIcon data={…} className="size-icon-sm" />` from `@platformscode/icons` only — see `get_foundations` (`icon-usage`). Never emoji, Lucide, or random icons (e.g. `pizza01Stroke` for dark mode).
57
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,76 @@
1
+ # Loading Indicator
2
+
3
+ ## Metadata
4
+ - Component: Loading Indicator
5
+ - Slug: `loading-indicator`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add loading-indicator`
8
+ - Import: `import { LoadingIndicator } from '@/components/ui/LoadingIndicator'`
9
+ - Installed files: `LoadingIndicator.tsx`, `LoadingIndicator.types.ts`, `LoadingIndicator.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/loading-indicator
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add loading-indicator`. It copies the source into your components folder (`components/ui/LoadingIndicator/`, under `src/` when the project has one); import it as `@/components/ui/LoadingIndicator`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `indicatorStyle?` | `'arc' \| 'ring' \| 'radial'` | 'arc' | Visual geometry of the spinner (Figma "Style"). |
18
+ | `color?` | `'neutral' \| 'primary'` | 'neutral' | Color theme for the graphic (Figma "Color"). |
19
+ | `size?` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | 'xs' | Size of the graphic and matching label typography. |
20
+ | `showLabel?` | `boolean` | true | When true, shows supporting text below the graphic. |
21
+ | `label?` | `ReactNode` | — | Supporting text for this instance (e.g. "Fetching data..."); keep it short because the status is announced to screen readers. Falls back to `labels.loading`. |
22
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
23
+ | `labels?` | `Partial<LoadingIndicatorLabels>` | — | Override built-in strings (English defaults) to localize the indicator. |
24
+
25
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `dir`, `color`.
26
+
27
+ ## Options (allowed values)
28
+ - `indicatorStyle`: `'arc'` \| `'ring'` \| `'radial'` — Spinner geometry style.
29
+ - `arc` → open arc without a track
30
+ - `ring` → track + partial stroke
31
+ - `radial` → Style "Radial Spinner" (spokes)
32
+ - `color`: `'neutral'` \| `'primary'` — Accent palette. Maps to Figma `Color=Neutral` and `Color=Primary`.
33
+ - `size`: `'xs'` \| `'sm'` \| `'md'` \| `'lg'` \| `'xl'` — Size scale. Maps to Figma `xSmall` … `xLarge`.
34
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
35
+
36
+ ## Deprecated props
37
+ Do not use in new code:
38
+ - `supportingText`
39
+
40
+ ## Accessibility
41
+ - Built-in strings (button names, announcements) come from `labels`; pass translated strings for Arabic or other languages.
42
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
43
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
44
+
45
+ ## Design tokens used
46
+ Keep these consistent (resolve values with `get_tokens`):
47
+ - `var(--ds-brand-primary-100)`
48
+ - `var(--ds-brand-primary-200)`
49
+ - `var(--ds-brand-primary-25)`
50
+ - `var(--ds-brand-primary-300)`
51
+ - `var(--ds-brand-primary-50)`
52
+ - `var(--ds-brand-primary-700)`
53
+ - `var(--ds-brand-primary-800)`
54
+ - `var(--ds-brand-primary-900)`
55
+ - `var(--ds-brand-primary-950)`
56
+ - `var(--ds-color-bg-brand)`
57
+ - `var(--ds-color-bg-emphasis-medium)`
58
+ - `var(--ds-color-bg-emphasis-strong)`
59
+ - `var(--ds-color-bg-inverse)`
60
+ - `var(--ds-color-border-default)`
61
+ - `var(--ds-color-border-muted)`
62
+ - `var(--ds-color-icon-brand)`
63
+ - `var(--ds-color-icon-default-400)`
64
+ - `var(--ds-color-icon-default-500)`
65
+ - `var(--ds-color-text-default)`
66
+ - `var(--ds-color-text-display)`
67
+ - `var(--ds-color-text-paragraph)`
68
+ - `var(--ds-spacing-lg)`
69
+ - `var(--ds-spacing-sm)`
70
+
71
+ ## AI usage guidance
72
+ When generating UI:
73
+ - Install with `npx sdaia-ui@latest add loading-indicator` (after `npx sdaia-ui@latest init`), then import `{ LoadingIndicator }` from `@/components/ui/LoadingIndicator`.
74
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
75
+ - Use only the documented option values listed under "Options".
76
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,73 @@
1
+ # Notification Banner
2
+
3
+ ## Metadata
4
+ - Component: Notification Banner
5
+ - Slug: `notification-banner`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add notification-banner`
8
+ - Import: `import { NotificationBanner } from '@/components/ui/NotificationBanner'`
9
+ - Installed files: `NotificationBanner.tsx`, `NotificationBanner.types.ts`, `NotificationBanner.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/notification-banner
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add notification-banner`. It copies the source into your components folder (`components/ui/NotificationBanner/`, under `src/` when the project has one); import it as `@/components/ui/NotificationBanner`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `layout?` | `'inline' \| 'stacked'` | 'inline' | Layout orientation. - `inline` — media on the start edge, text and actions stacked next to it. - `stacked` — media row on top, text and actions stacked below. |
18
+ | `type?` | `'leading-icon' \| 'avatar' \| 'progress' \| 'image'` | 'leading-icon' | Which media slot is rendered. - `leading-icon` — rounded featured icon (pass via `icon`). - `avatar` — 40 px avatar (pass via `avatar`). - `progress` — avatar + inline `ProgressBar` (pass value via `progress`). - `image` — image block (pass via `imageSrc`). |
19
+ | `title` | `ReactNode` | — | Title text (required) |
20
+ | `description?` | `ReactNode` | — | Supporting description text |
21
+ | `icon?` | `ReactNode` | — | Icon to render inside the featured-icon slot — only used when `type="leading-icon"`. Defaults to `<AlertCircleIcon />` when omitted. |
22
+ | `avatar?` | `NotificationBannerAvatar` | — | Avatar slot content — only used when `type="avatar"` or `type="progress"`. |
23
+ | `imageSrc?` | `string` | — | Image source — only used when `type="image"`. |
24
+ | `imageAlt?` | `string` | '' | Image alt text — only used when `type="image"`. |
25
+ | `progress?` | `number` | — | Progress value 0–100 — only used when `type="progress"`. The progress bar renders only when a value is provided. |
26
+ | `actions?` | `ReactNode` | — | Action buttons rendered in the actions row. Typically one or two `<Button variant="transparent" />` elements. |
27
+ | `onDismiss?` | `() => void` | — | Invoked when the close button is clicked. |
28
+ | `hideCloseButton?` | `boolean` | false | Hide the close button entirely. |
29
+ | `labels?` | `Partial<NotificationBannerLabels>` | — | Override built-in strings (English defaults) to localize the banner. |
30
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
31
+
32
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `title`, `dir`.
33
+
34
+ ## Options (allowed values)
35
+ - `layout`: `'inline'` \| `'stacked'` — Layout orientation — inline puts the media on the start edge, stacked puts it above the content.
36
+ - `type`: `'leading-icon'` \| `'avatar'` \| `'progress'` \| `'image'` — Media type rendered alongside the title/description.
37
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
38
+
39
+ ## Deprecated props
40
+ Do not use in new code:
41
+ - `dismissLabel`
42
+ - `rtl`
43
+
44
+ ## Accessibility
45
+ - Built-in strings (button names, announcements) come from `labels`; pass translated strings for Arabic or other languages.
46
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
47
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
48
+
49
+ ## Design tokens used
50
+ Keep these consistent (resolve values with `get_tokens`):
51
+ - `var(--ds-color-bg-muted)`
52
+ - `var(--ds-color-bg-subtle)`
53
+ - `var(--ds-color-border-on-default)`
54
+ - `var(--ds-color-icon-default)`
55
+ - `var(--ds-color-text-display)`
56
+ - `var(--ds-color-text-paragraph)`
57
+ - `var(--ds-radius-full)`
58
+ - `var(--ds-radius-m)`
59
+ - `var(--ds-spacing-lg)`
60
+ - `var(--ds-spacing-md)`
61
+ - `var(--ds-spacing-none)`
62
+ - `var(--ds-spacing-xl)`
63
+ - `var(--ds-spacing-xs)`
64
+ - `var(--ds-text-leading-line-heights-text-md)`
65
+ - `var(--ds-text-leading-line-heights-text-sm)`
66
+
67
+ ## AI usage guidance
68
+ When generating UI:
69
+ - Install with `npx sdaia-ui@latest add notification-banner` (after `npx sdaia-ui@latest init`), then import `{ NotificationBanner }` from `@/components/ui/NotificationBanner`.
70
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
71
+ - Use only the documented option values listed under "Options".
72
+ - Pass icons via `<DgaIcon data={…} className="size-icon-sm" />` from `@platformscode/icons` only — see `get_foundations` (`icon-usage`). Never emoji, Lucide, or random icons (e.g. `pizza01Stroke` for dark mode).
73
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.
@@ -0,0 +1,87 @@
1
+ # Notification Popup
2
+
3
+ ## Metadata
4
+ - Component: Notification Popup
5
+ - Slug: `notification-popup`
6
+ - Category: Feedback
7
+ - Install: `npx sdaia-ui@latest add notification-popup`
8
+ - Import: `import { NotificationPopup } from '@/components/ui/NotificationPopup'`
9
+ - Installed files: `NotificationPopup.tsx`, `NotificationPopup.types.ts`, `NotificationPopup.variants.ts`, `index.ts`
10
+ - Docs: https://ds.nacew.com/components/notification-popup
11
+
12
+ > **Hard rule:** `sdaia-ui` is a CLI, not a runtime package — NEVER run `npm install sdaia-ui` and NEVER `import … from 'sdaia-ui'`. Run `npx sdaia-ui@latest init` once per project (Tailwind CSS v4, tokens, the IBM Plex Sans Arabic font, the `@/` alias on Vite, `cn`), then `npx sdaia-ui@latest add notification-popup`. It copies the source into your components folder (`components/ui/NotificationPopup/`, under `src/` when the project has one); import it as `@/components/ui/NotificationPopup`. The files are yours: prefer props and composition over editing them. `npx sdaia-ui@latest update` never overwrites a file you changed: it keeps it and says it has updates; `diff` shows them and `update --force` takes them.
13
+
14
+ ## Props
15
+ | Prop | Type | Default | Description |
16
+ | --- | --- | --- | --- |
17
+ | `type?` | `'success' \| 'error' \| 'warning' \| 'alert' \| 'input'` | 'success' | Popup type. - `success` / `error` / `warning` — 360 px wide, single centered action button. - `alert` — 360 px wide, two side-by-side action buttons. - `input` — 480 px wide, supports `children` (e.g. radio rows) and `footer` (consent text), with actions rendered as a stacked full-width column. |
18
+ | `surface?` | `'solid' \| 'glass'` | 'solid' | Surface treatment — `'solid'` (default) or `'glass'` (translucent liquid-glass material). |
19
+ | `title` | `ReactNode` | — | Title text (required). |
20
+ | `description?` | `ReactNode` | — | Supporting description text under the title. |
21
+ | `icon?` | `ReactNode` | — | Override the default per-type icon. Defaults per type: - `success` → `TickIcon` - `error` → `CloseIcon` - `warning` → `AlertCircleIcon` - `alert` → `BellIcon` - `input` → `AlertCircleIcon` |
22
+ | `actions?` | `ReactNode` | — | Action buttons rendered in the actions row. Typically one or two `<Button />` elements — the wrapping row's layout is selected automatically based on `type`, or explicitly via `actionsLayout` if you need to override (e.g. a warning popup with two side-by-side buttons). |
23
+ | `actionsLayout?` | `'single' \| 'pair' \| 'stacked'` | — | Override the default actions-row layout. - `single` → one centered button (default for success / error / warning) - `pair` → two side-by-side buttons with `gap-md`, both `flex-1` (default for `alert`) - `stacked` → vertical stack of full-width buttons (default for `input`) |
24
+ | `children?` | `ReactNode` | — | Extra content rendered between the header and the actions row. Used by the `input` type for the radio-row list. |
25
+ | `footer?` | `ReactNode` | — | Footer content rendered under the actions row. Used by the `input` type for the consent / Privacy Policy text. |
26
+ | `dir?` | `'ltr' \| 'rtl'` | — | Text direction. Inherits from the document when omitted. |
27
+
28
+ Also accepts standard `<div>` HTML attributes (`className`, `style`, `onClick`, `aria-*`, …) — except: `title`, `dir`.
29
+
30
+ ## Options (allowed values)
31
+ - `type`: `'success'` \| `'error'` \| `'warning'` \| `'alert'` \| `'input'` — Visual/semantic variant — drives icon, featured-icon background, and layout differences.
32
+ - `surface`: `'solid'` \| `'glass'` — Surface treatment of the popup card.
33
+ - `'solid'` (default) — opaque subtle background with a hairline border.
34
+ - `'glass'` — translucent liquid-glass material (blurred backdrop +
35
+ beveled edge highlight). Reads best placed over imagery or color.
36
+
37
+ The visual is provided by the shared `.glass-surface` utility, so it is
38
+ theme-aware (light / dark) and identical across every component that
39
+ exposes a `surface` prop.
40
+ - `actionsLayout`: `'single'` \| `'pair'` \| `'stacked'` — Override the default actions-row layout.
41
+ - `single` → one centered button (default for success / error / warning)
42
+ - `pair` → two side-by-side buttons with `gap-md`, both `flex-1`
43
+ (default for `alert`)
44
+ - `stacked` → vertical stack of full-width buttons (default for `input`)
45
+ - `dir`: `'ltr'` \| `'rtl'` — Text direction. Inherits from the document when omitted.
46
+
47
+ ## Deprecated props
48
+ Do not use in new code:
49
+ - `rtl`
50
+
51
+ ## Accessibility
52
+ - Don't remove the focus ring or replace interactive elements with `div`s; keep the control keyboard-operable.
53
+ - For contrast, keyboard patterns and RTL rules, call `get_foundations` (`accessibility`, `rtl`).
54
+
55
+ ## Design tokens used
56
+ Keep these consistent (resolve values with `get_tokens`):
57
+ - `var(--ds-color-bg-brand)`
58
+ - `var(--ds-color-bg-danger-strong)`
59
+ - `var(--ds-color-bg-subtle)`
60
+ - `var(--ds-color-bg-success-strong)`
61
+ - `var(--ds-color-bg-warning-strong)`
62
+ - `var(--ds-color-border-on-default)`
63
+ - `var(--ds-color-border-warning-subtle)`
64
+ - `var(--ds-color-icon-brand-subtle)`
65
+ - `var(--ds-color-icon-oncolor)`
66
+ - `var(--ds-color-text-display)`
67
+ - `var(--ds-color-text-paragraph)`
68
+ - `var(--ds-color-text-paragraph-muted)`
69
+ - `var(--ds-radius-full)`
70
+ - `var(--ds-radius-xl)`
71
+ - `var(--ds-spacing-3xl)`
72
+ - `var(--ds-spacing-7xl)`
73
+ - `var(--ds-spacing-lg)`
74
+ - `var(--ds-spacing-md)`
75
+ - `var(--ds-spacing-none)`
76
+ - `var(--ds-spacing-xl)`
77
+ - `var(--ds-text-leading-line-heights-text-md)`
78
+ - `var(--ds-text-leading-line-heights-text-sm)`
79
+ - `var(--ds-text-leading-line-heights-text-xl)`
80
+
81
+ ## AI usage guidance
82
+ When generating UI:
83
+ - Install with `npx sdaia-ui@latest add notification-popup` (after `npx sdaia-ui@latest init`), then import `{ NotificationPopup }` from `@/components/ui/NotificationPopup`.
84
+ - NEVER run `npm install sdaia-ui` and NEVER `import` from the `sdaia-ui` package — it is a source-copying CLI, not a component library.
85
+ - Use only the documented option values listed under "Options".
86
+ - Pass icons via `<DgaIcon data={…} className="size-icon-sm" />` from `@platformscode/icons` only — see `get_foundations` (`icon-usage`). Never emoji, Lucide, or random icons (e.g. `pizza01Stroke` for dark mode).
87
+ - Pick one theme per screen: dark is `.theme-dark` (or `.dark`) on `<html>`; style surrounding layout with DS tokens (`get_tokens`), never hardcoded colors.