@politiet/sheriff-web-components 2.13.0 → 2.14.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 (139) hide show
  1. package/custom-elements.json +3996 -1344
  2. package/dist/controllers/index.d.ts +3 -0
  3. package/dist/controllers/index.d.ts.map +1 -0
  4. package/dist/controllers/index.js +3 -0
  5. package/dist/controllers/index.js.map +1 -0
  6. package/dist/controllers/sds-drag-drop-controller.d.ts +25 -0
  7. package/dist/controllers/sds-drag-drop-controller.d.ts.map +1 -0
  8. package/dist/controllers/sds-drag-drop-controller.js +52 -0
  9. package/dist/controllers/sds-drag-drop-controller.js.map +1 -0
  10. package/dist/controllers/sds-file-preview-controller.d.ts +38 -0
  11. package/dist/controllers/sds-file-preview-controller.d.ts.map +1 -0
  12. package/dist/controllers/sds-file-preview-controller.js +90 -0
  13. package/dist/controllers/sds-file-preview-controller.js.map +1 -0
  14. package/dist/frameworks/preact.d.ts +14 -1
  15. package/dist/frameworks/preact.d.ts.map +1 -1
  16. package/dist/frameworks/react.d.ts +30 -1
  17. package/dist/frameworks/react.d.ts.map +1 -1
  18. package/dist/frameworks/solidjs.d.ts +4 -0
  19. package/dist/frameworks/solidjs.d.ts.map +1 -1
  20. package/dist/frameworks/svelte.d.ts +4 -0
  21. package/dist/frameworks/svelte.d.ts.map +1 -1
  22. package/dist/frameworks/vue.d.ts +24 -1
  23. package/dist/frameworks/vue.d.ts.map +1 -1
  24. package/dist/index.d.ts +8 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +4 -0
  27. package/dist/index.js.map +1 -1
  28. package/dist/mixins/sds-dialog-target-mixin.d.ts.map +1 -1
  29. package/dist/mixins/sds-dialog-target-mixin.js +10 -0
  30. package/dist/mixins/sds-dialog-target-mixin.js.map +1 -1
  31. package/dist/react-wrappers/SDSDialogWrapper.d.ts +1 -0
  32. package/dist/react-wrappers/SDSDialogWrapper.d.ts.map +1 -1
  33. package/dist/react-wrappers/SDSDialogWrapper.js +1 -0
  34. package/dist/react-wrappers/SDSDialogWrapper.js.map +1 -1
  35. package/dist/react-wrappers/SDSFileUploadFileListWrapper.d.ts +3 -0
  36. package/dist/react-wrappers/SDSFileUploadFileListWrapper.d.ts.map +1 -0
  37. package/dist/react-wrappers/SDSFileUploadFileListWrapper.js +10 -0
  38. package/dist/react-wrappers/SDSFileUploadFileListWrapper.js.map +1 -0
  39. package/dist/react-wrappers/SDSFileUploadItemWrapper.d.ts +6 -0
  40. package/dist/react-wrappers/SDSFileUploadItemWrapper.d.ts.map +1 -0
  41. package/dist/react-wrappers/SDSFileUploadItemWrapper.js +12 -0
  42. package/dist/react-wrappers/SDSFileUploadItemWrapper.js.map +1 -0
  43. package/dist/react-wrappers/SDSFileUploadWrapper.d.ts +12 -0
  44. package/dist/react-wrappers/SDSFileUploadWrapper.d.ts.map +1 -0
  45. package/dist/react-wrappers/SDSFileUploadWrapper.js +18 -0
  46. package/dist/react-wrappers/SDSFileUploadWrapper.js.map +1 -0
  47. package/dist/react-wrappers/SDSSearchWrapper.d.ts +15 -0
  48. package/dist/react-wrappers/SDSSearchWrapper.d.ts.map +1 -0
  49. package/dist/react-wrappers/SDSSearchWrapper.js +19 -0
  50. package/dist/react-wrappers/SDSSearchWrapper.js.map +1 -0
  51. package/dist/react-wrappers/index.d.ts +4 -0
  52. package/dist/react-wrappers/index.d.ts.map +1 -1
  53. package/dist/react-wrappers/index.js +4 -0
  54. package/dist/react-wrappers/index.js.map +1 -1
  55. package/dist/sds-button/sds-button.component.d.ts +0 -1
  56. package/dist/sds-button/sds-button.component.d.ts.map +1 -1
  57. package/dist/sds-button/sds-button.component.js +10 -16
  58. package/dist/sds-button/sds-button.component.js.map +1 -1
  59. package/dist/sds-button/sds-button.styles.d.ts.map +1 -1
  60. package/dist/sds-button/sds-button.styles.js +7 -2
  61. package/dist/sds-button/sds-button.styles.js.map +1 -1
  62. package/dist/sds-dialog/sds-dialog.component.d.ts.map +1 -1
  63. package/dist/sds-dialog/sds-dialog.component.js +11 -1
  64. package/dist/sds-dialog/sds-dialog.component.js.map +1 -1
  65. package/dist/sds-file-upload/sds-file-upload.d.ts +102 -0
  66. package/dist/sds-file-upload/sds-file-upload.d.ts.map +1 -0
  67. package/dist/sds-file-upload/sds-file-upload.js +384 -0
  68. package/dist/sds-file-upload/sds-file-upload.js.map +1 -0
  69. package/dist/sds-file-upload/sds-file-upload.styles.d.ts +2 -0
  70. package/dist/sds-file-upload/sds-file-upload.styles.d.ts.map +1 -0
  71. package/dist/sds-file-upload/sds-file-upload.styles.js +234 -0
  72. package/dist/sds-file-upload/sds-file-upload.styles.js.map +1 -0
  73. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.d.ts +14 -0
  74. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.d.ts.map +1 -0
  75. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.js +26 -0
  76. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.js.map +1 -0
  77. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.styles.d.ts +2 -0
  78. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.styles.d.ts.map +1 -0
  79. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.styles.js +19 -0
  80. package/dist/sds-file-upload-file-list/sds-file-upload-file-list.styles.js.map +1 -0
  81. package/dist/sds-file-upload-item/assets/u-progress.js +2 -0
  82. package/dist/sds-file-upload-item/sds-file-upload-item.d.ts +62 -0
  83. package/dist/sds-file-upload-item/sds-file-upload-item.d.ts.map +1 -0
  84. package/dist/sds-file-upload-item/sds-file-upload-item.js +205 -0
  85. package/dist/sds-file-upload-item/sds-file-upload-item.js.map +1 -0
  86. package/dist/sds-file-upload-item/sds-file-upload-item.styles.d.ts +2 -0
  87. package/dist/sds-file-upload-item/sds-file-upload-item.styles.d.ts.map +1 -0
  88. package/dist/sds-file-upload-item/sds-file-upload-item.styles.js +227 -0
  89. package/dist/sds-file-upload-item/sds-file-upload-item.styles.js.map +1 -0
  90. package/dist/sds-radio/sds-radio.d.ts +53 -1
  91. package/dist/sds-radio/sds-radio.d.ts.map +1 -1
  92. package/dist/sds-radio/sds-radio.js +218 -41
  93. package/dist/sds-radio/sds-radio.js.map +1 -1
  94. package/dist/sds-radio/sds-radio.styles.js +36 -36
  95. package/dist/sds-radio/sds-radio.styles.js.map +1 -1
  96. package/dist/sds-radio-group/sds-radio-group.d.ts +4 -2
  97. package/dist/sds-radio-group/sds-radio-group.d.ts.map +1 -1
  98. package/dist/sds-radio-group/sds-radio-group.js +10 -3
  99. package/dist/sds-radio-group/sds-radio-group.js.map +1 -1
  100. package/dist/sds-search/sds-search.component.d.ts +128 -0
  101. package/dist/sds-search/sds-search.component.d.ts.map +1 -0
  102. package/dist/sds-search/sds-search.component.js +345 -0
  103. package/dist/sds-search/sds-search.component.js.map +1 -0
  104. package/dist/sds-search/sds-search.d.ts +13 -0
  105. package/dist/sds-search/sds-search.d.ts.map +1 -0
  106. package/dist/sds-search/sds-search.js +18 -0
  107. package/dist/sds-search/sds-search.js.map +1 -0
  108. package/dist/sds-search/sds-search.styles.d.ts +2 -0
  109. package/dist/sds-search/sds-search.styles.d.ts.map +1 -0
  110. package/dist/sds-search/sds-search.styles.js +74 -0
  111. package/dist/sds-search/sds-search.styles.js.map +1 -0
  112. package/dist/sds-textfield/sds-textfield.component.d.ts +4 -1
  113. package/dist/sds-textfield/sds-textfield.component.d.ts.map +1 -1
  114. package/dist/sds-textfield/sds-textfield.component.js +20 -5
  115. package/dist/sds-textfield/sds-textfield.component.js.map +1 -1
  116. package/dist/sds-textfield/sds-textfield.styles.d.ts.map +1 -1
  117. package/dist/sds-textfield/sds-textfield.styles.js +11 -0
  118. package/dist/sds-textfield/sds-textfield.styles.js.map +1 -1
  119. package/dist/sheriff-web-components.js +1104 -375
  120. package/dist/skill/SKILL.md +136 -42
  121. package/dist/skill/references/components.md +332 -35
  122. package/dist/skill/references/react-wrappers.md +41 -9
  123. package/dist/utils/file-validation.d.ts +31 -0
  124. package/dist/utils/file-validation.d.ts.map +1 -0
  125. package/dist/utils/file-validation.js +57 -0
  126. package/dist/utils/file-validation.js.map +1 -0
  127. package/dist/utils/format-bytes.d.ts +6 -0
  128. package/dist/utils/format-bytes.d.ts.map +1 -0
  129. package/dist/utils/format-bytes.js +13 -0
  130. package/dist/utils/format-bytes.js.map +1 -0
  131. package/dist/utils/video-thumbnail.d.ts +8 -0
  132. package/dist/utils/video-thumbnail.d.ts.map +1 -0
  133. package/dist/utils/video-thumbnail.js +77 -0
  134. package/dist/utils/video-thumbnail.js.map +1 -0
  135. package/dist/version.d.ts +1 -1
  136. package/dist/version.js +1 -1
  137. package/dist/version.js.map +1 -1
  138. package/package.json +24 -4
  139. package/web-types.json +3452 -1048
@@ -1,12 +1,16 @@
1
1
  ---
2
2
  name: sheriff-web-components
3
3
  description: >
4
- Assists developers using @politiet/sheriff-web-components — Lit-based custom
5
- elements with the sds-* prefix. Covers all 22 components (alert, button, card,
6
- checkbox, chip, details, dialog, heading, icon, loader, radio, select, stepper,
7
- switch, tag, text, textarea, textfield), React wrappers, form-associated
8
- elements, slots, events, and data-palette theming. Use when the user references
9
- sds-* components, @politiet/sheriff-web-components imports, or React wrappers.
4
+ Assists developers using @politiet/sheriff-web-components made of Lit-based custom
5
+ elements with the sds-* prefix. Covers all 33 components (alert, button, card,
6
+ checkbox, checkbox-group, chip, details, details-group, dialog,
7
+ environment-banner, file-upload, file-upload-item, file-upload-file-list,
8
+ heading, icon, internal-header, loader, notification,
9
+ popover, process, process-step, radio, radio-group, search, select, stepper,
10
+ stepper-step, switch, tag, text, textarea, textfield, tooltip), React
11
+ wrappers, framework type definitions, form-associated elements, slots,
12
+ events, and data-palette theming. Use when the user references sds-*
13
+ components, @politiet/sheriff-web-components imports, or React wrappers.
10
14
  Do not use for CSS-only questions, icon loading configuration, or SSR/RSC usage.
11
15
  ---
12
16
 
@@ -17,17 +21,20 @@ description: >
17
21
  When looking up component details not covered here, read the source directly:
18
22
 
19
23
  - Most components: `packages/sheriff/web-components/src/sds-{name}/sds-{name}.ts`
20
- - Exception components (alert, button, heading, icon, text): `packages/sheriff/web-components/src/sds-{name}/sds-{name}.component.ts`
24
+ - Exception components (alert, button, dialog, environment-banner, heading, icon, internal-header, select, text, textfield): `packages/sheriff/web-components/src/sds-{name}/sds-{name}.component.ts`
25
+ - Styles and CSS custom properties: `packages/sheriff/web-components/src/sds-{name}/sds-{name}.styles.ts`
21
26
  - Usage examples: `packages/sheriff/web-components/src/sds-{name}/sds-{name}.stories.ts`
22
- - Documentation: `packages/sheriff/web-components/src/sds-{name}/sds-{name}.mdx`
27
+ - Documentation: `packages/sheriff/web-components/src/sds-{name}/sds-{name}.mdx`, `variables.mdx` (CSS variables), `guidelines.mdx` (design guidance)
28
+
29
+ Inside an installed package the same files live under `node_modules/@politiet/sheriff-web-components/dist/sds-{name}/`.
23
30
 
24
31
  ## Architecture
25
32
 
26
33
  1. Components that dispatch events extend `LitElement` via `SDSEventDispatcherMixin`.
27
- 2. Properties use `@property({ reflect: true })` — settable as HTML attributes or JS properties.
28
- 3. Content distribution uses named slots (`slot="before"`, `slot="after"`) and a default slot.
29
- 4. Form-associated components implement `ElementInternals` with `formAssociated = true`.
30
- 5. Events dispatch via `dispatchSheriffEvent()` as `CustomEvent` with `bubbles: true, composed: true`.
34
+ 2. Properties use `@property({ reflect: true })`, so they are settable as HTML attributes or JS properties.
35
+ 3. Content distribution uses named slots (`slot="before"`, `slot="after"`, `slot="label"`, …) and a default slot.
36
+ 4. Form-associated components implement `ElementInternals` with `formAssociated = true` and `delegatesFocus`.
37
+ 5. Events dispatch via `dispatchSheriffEvent()` as `CustomEvent` with `bubbles: true, composed: true`. **The event name is used verbatim — there is no automatic `sds-` prefix.** Some components dispatch native-sounding names (`change`, `toggle`, `close`), others dispatch prefixed names (`sds-remove`, `sds-update`).
31
38
  6. Color theming uses the `data-palette` attribute (see `@politiet/sheriff-css-framework` skill for palette details).
32
39
 
33
40
  ## Prerequisites
@@ -66,37 +73,80 @@ import '@politiet/sheriff-web-components/sds-button';
66
73
  import '@politiet/sheriff-web-components/sds-textfield';
67
74
  ```
68
75
 
76
+ Every component has its own subpath export matching its tag name (`./sds-alert` … `./sds-tooltip`).
77
+
69
78
  ## Component Quick Reference
70
79
 
71
- All components use the `sds-` prefix. Sizes are `"lg"` | `"md"` | `"sm"` (default `"md"`).
72
-
73
- | Component | Description | Key Props |
74
- | -------------------- | -------------------------------------------- | ---------------------------------------------------------------- |
75
- | `sds-alert` | Contextual alert banner | `variant`, `data-palette`, `removable-label`, `size` |
76
- | `sds-button` | Button or link-as-button | `variant`, `size`, `type`, `disabled`, `loading`, `icon`, `href` |
77
- | `sds-card` | Content container; link card when `link` set | `link` |
78
- | `sds-checkbox` | Single checkbox | `label`, `name`, `value`, `checked`, `error` |
79
- | `sds-checkbox-group` | Grouped checkboxes with legend | `legend`, `error-message`, `help-text` |
80
- | `sds-chip` | Selectable or removable chip/pill | `variant`, `checked`, `name`, `value` |
81
- | `sds-details` | Expandable accordion | `open`, `standalone`, `name` (exclusive group) |
82
- | `sds-dialog` | Modal/dialog wrapping native `<dialog>` | `open`, `modal`, `closedby` |
83
- | `sds-heading` | Semantic heading | `level`, `size` |
84
- | `sds-icon` | Dynamic SVG icon | `name`, `size`, `label`, `data-palette` |
85
- | `sds-loader` | Loading spinner | `size`, `contrast` |
86
- | `sds-notification` | **Deprecated** — use `sds-alert` | `variant`, `removable-label` |
87
- | `sds-radio` | Single radio button | `label`, `name`, `value`, `checked` |
88
- | `sds-radio-group` | Grouped radios with legend | `legend`, `direction`, `error-message` |
89
- | `sds-select` | Dropdown select | `label`, `name`, `default-value`, `error-message` |
90
- | `sds-stepper` | Step indicator for multi-step flows | `orientation` |
91
- | `sds-stepper-step` | Individual step in stepper | `complete`, `interactive`, `active` |
92
- | `sds-switch` | Toggle switch | `label`, `name`, `checked`, `reverse`, `hide-label` |
93
- | `sds-tag` | Non-interactive label/badge | `size`, `data-palette` |
94
- | `sds-text` | Text container with typography | `size`, `strong`, `tall` |
95
- | `sds-textarea` | Multi-line text input | `label`, `name`, `counter`, `error-message` |
96
- | `sds-textfield` | Single-line text input | `label`, `name`, `type`, `error-message` |
80
+ All components use the `sds-` prefix. Sizes are `"lg"` | `"md"` | `"sm"`, default `"md"` — **except `sds-button`, which defaults to `"lg"`**. `sds-heading` and `sds-text` use the wider `"xl" | "lg" | "md" | "sm" | "xs"` scale.
81
+
82
+ | Component | Description | Key Props |
83
+ | --------------------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------ |
84
+ | `sds-alert` | Contextual alert banner | `variant`, `size`, `removable-label`, `data-palette` |
85
+ | `sds-button` | Button or link-as-button | `variant`, `size`, `type`, `disabled`, `loading`, `icon`, `inverted`, `label`, `href`, `command` |
86
+ | `sds-card` | Content container; link card when `link` set | `link` |
87
+ | `sds-checkbox` | Single checkbox | `label`, `name`, `value`, `checked`, `error`, `help-text` |
88
+ | `sds-checkbox-group` | Grouped checkboxes with legend | `legend`, `error-message`, `help-text` |
89
+ | `sds-chip` | Selectable or removable chip/pill | `variant`, `checked`, `name`, `value`, `size` |
90
+ | `sds-details` | Expandable accordion | `open`, `standalone`, `name` (exclusive group) |
91
+ | `sds-details-group` | Wraps `sds-details` into one accordion group | `outlined`, `name` (makes the group exclusive) |
92
+ | `sds-dialog` | Modal/dialog wrapping native `<dialog>` | `open`, `modal`, `closedby`, `close-button-label` |
93
+ | `sds-environment-banner` | Environment/build strip for internal apps | `env`, `build` |
94
+ | `sds-file-upload` | File picker with drag and drop (beta) | `name`, `accept`, `multiple`, `max-size-in-bytes`, `error-message`, `hide-file-list` |
95
+ | `sds-file-upload-item` | One file row with remove button and progress | `file`, `size-in-bytes`, `uploaded-percent`, `error-message`, `for` |
96
+ | `sds-file-upload-file-list` | List container for `sds-file-upload-item` | — |
97
+ | `sds-heading` | Semantic heading | `level`, `size` |
98
+ | `sds-icon` | Dynamic SVG icon | `name`, `size`, `label`, `color` |
99
+ | `sds-internal-header` | App header for internal (non-public) apps | `app-name`, `home-href` |
100
+ | `sds-loader` | Loading spinner | `size`, `contrast` |
101
+ | `sds-notification` | **Deprecated** — use `sds-alert` | `variant`, `removable-label` |
102
+ | `sds-popover` | Anchored popover built on the Popover API | `placement`, `autoplacement`, `overscroll` |
103
+ | `sds-process` | Timeline / process list | `heading-level` |
104
+ | `sds-process-step` | Individual step in a process | `heading`, `timestamp` |
105
+ | `sds-radio` | Single radio button | `label`, `name`, `value`, `checked`, `hide-label` |
106
+ | `sds-radio-group` | Grouped radios with legend | `legend`, `direction`, `error-message` |
107
+ | `sds-search` | Search field with search button | `label`, `hide-label`, `name`, `button-variant` |
108
+ | `sds-select` | Dropdown select | `label`, `name`, `default-value`, `error-message` |
109
+ | `sds-stepper` | Step indicator for multi-step flows | `orientation` |
110
+ | `sds-stepper-step` | Individual step in a stepper | `complete`, `interactive`, `active` |
111
+ | `sds-switch` | Toggle switch | `label`, `name`, `checked`, `reverse`, `hide-label` |
112
+ | `sds-tag` | Non-interactive label/badge | `size`, `data-palette` |
113
+ | `sds-text` | Text container with typography | `size`, `strong`, `subtle`, `tall` |
114
+ | `sds-textarea` | Multi-line text input | `label`, `name`, `counter`, `autosize`, `error-message` |
115
+ | `sds-textfield` | Single-line text input | `label`, `hide-label`, `name`, `type`, `error-message` |
116
+ | `sds-tooltip` | Hover/focus tooltip anchored to a trigger | `id` (required), `placement` |
97
117
 
98
118
  For full component API (all props, slots, events, code examples), see `references/components.md`.
99
119
 
120
+ ## `data-palette` Support
121
+
122
+ `data-palette` works on **every** component and is inherited from any ancestor container, with three exceptions:
123
+
124
+ - `sds-alert`: `data-palette` is a typed component property, so it must be set **on the alert itself** (it does not inherit from a container). Accepted values are only `info` | `success` | `attention` | `danger`; it also selects the alert's status icon.
125
+ - `sds-tooltip` and `sds-environment-banner`: fixed colors, palette has no effect. The environment banner colors itself from `env`.
126
+ - `sds-loader`: the palette variant is designed for a loader sitting **on** a palette-colored surface. Add `contrast` to flip it back for a plain background.
127
+
128
+ `sds-tag` additionally accepts `data-palette="danger-action"` (deep red), which is not a general framework palette.
129
+
130
+ ## Form-Associated Components
131
+
132
+ `sds-button`, `sds-checkbox`, `sds-chip`, `sds-file-upload`, `sds-radio`, `sds-search`, `sds-select`, `sds-switch`, `sds-textarea`, and `sds-textfield` are form-associated: they participate in `<form>` submission, validation, and reset without extra wiring. Set both `name` and `value` for the value to be submitted. `sds-switch` submits `"on"` / `"off"`. `sds-file-upload` only needs `name` and submits the selected files, and it has no `readonly`.
133
+
134
+ Shared props from the form-control mixin: `name`, `disabled`, `readonly`. In a `sds-checkbox-group` / `sds-radio-group`, setting `disabled` or `readonly` on the group propagates to children unless the child sets it explicitly.
135
+
136
+ ### Slotted labels
137
+
138
+ `sds-checkbox`, `sds-radio`, `sds-select`, `sds-switch`, `sds-textarea`, and `sds-textfield` accept a `label` slot as an alternative to the `label` attribute, for labels that need markup:
139
+
140
+ ```html
141
+ <sds-textfield name="orgnr">
142
+ <span slot="label">Org.nr <sds-icon name="info-material-outlined" size="sm"></sds-icon></span>
143
+ </sds-textfield>
144
+ ```
145
+
146
+ The attribute is the default slot content, so use one or the other — not both.
147
+
148
+ `sds-file-upload` has **only** the `label` slot, no `label` attribute.
149
+
100
150
  ## React Wrappers
101
151
 
102
152
  React versions before v19 do not natively handle web component events. Use the provided wrappers from `@politiet/sheriff-web-components/react-wrappers`:
@@ -116,10 +166,20 @@ function MyForm() {
116
166
  }
117
167
  ```
118
168
 
119
- React 19+ supports custom elements natively — can use web components directly without wrappers.
169
+ React 19+ supports custom elements natively — can use web components directly without wrappers. Event props on raw elements must match the event name exactly: `onclose`, `oncancel`, `ontoggle` (lowercase). React treats camelCase `onClose`/`onCancel`/`onToggle` as its own synthetic events and never fires them on custom elements. They are only typed for backwards compatibility and marked deprecated.
120
170
 
121
171
  For the full list of available wrappers and event mappings, see `references/react-wrappers.md`.
122
172
 
173
+ ## Framework Type Definitions
174
+
175
+ Type-only subpath exports register the `sds-*` tags with a framework's JSX/template typings, so custom elements type-check without wrappers. Import once in a global `.d.ts`:
176
+
177
+ ```ts
178
+ /// <reference types="@politiet/sheriff-web-components/framework/react" />
179
+ ```
180
+
181
+ Available: `framework/react`, `framework/preact`, `framework/vue`, `framework/svelte`, `framework/solidjs`. These ship types only and they emit no runtime code, so you still need to import the components themselves to register them.
182
+
123
183
  ## Common Patterns
124
184
 
125
185
  ### Form layout
@@ -139,16 +199,37 @@ For the full list of available wrappers and event mappings, see `references/reac
139
199
  ### Dialog with actions
140
200
 
141
201
  ```html
142
- <sds-dialog modal closedby="any">
202
+ <sds-button command="show-modal" commandfor="confirm-dialog">Delete…</sds-button>
203
+
204
+ <sds-dialog id="confirm-dialog" modal closedby="any">
143
205
  <sds-heading level="h2" size="md" slot="header">Confirm</sds-heading>
144
206
  <sds-text>Are you sure?</sds-text>
145
207
  <div slot="footer" class="sds-stack-x-2xs">
146
- <sds-button size="md">Confirm</sds-button>
147
- <sds-button size="md" variant="secondary" data-command="close">Cancel</sds-button>
208
+ <sds-button size="md" data-palette="danger">Confirm</sds-button>
209
+ <sds-button size="md" variant="secondary" command="close">Cancel</sds-button>
148
210
  </div>
149
211
  </sds-dialog>
150
212
  ```
151
213
 
214
+ `command="show-modal"` needs `commandfor` pointing at the dialog's `id`, and it also wires `aria-haspopup`/`aria-expanded`/`aria-controls` on the trigger. `command="close"` (or the legacy `data-command="close"`) works on any button inside the dialog without `commandfor`.
215
+
216
+ ### Popover and tooltip
217
+
218
+ ```html
219
+ <sds-button popovertarget="filters">Filters</sds-button>
220
+ <sds-popover id="filters" placement="bottom-start">
221
+ <sds-checkbox label="Open cases" name="open"></sds-checkbox>
222
+ </sds-popover>
223
+
224
+ <!-- Tooltip: the trigger references the tooltip id, the tooltip is a sibling -->
225
+ <span style="position: relative; display: inline-block;">
226
+ <sds-button aria-describedby="orgnr-tip" variant="secondary" icon>
227
+ <sds-icon name="info-material-outlined" label="Om org.nr"></sds-icon>
228
+ </sds-button>
229
+ <sds-tooltip id="orgnr-tip">Organisasjonsnummer</sds-tooltip>
230
+ </span>
231
+ ```
232
+
152
233
  ### Alert with title
153
234
 
154
235
  ```html
@@ -164,9 +245,22 @@ For the full list of available wrappers and event mappings, see `references/reac
164
245
  <sds-button variant="primary" data-palette="danger">Delete</sds-button>
165
246
  ```
166
247
 
248
+ ### Icon-only button
249
+
250
+ Put the accessible name on the button via `label` (it becomes `aria-label` on the internal `<button>`), and leave the icon undescribed:
251
+
252
+ ```html
253
+ <sds-button variant="tertiary" icon label="Search">
254
+ <sds-icon name="search-material-outlined"></sds-icon>
255
+ </sds-button>
256
+ ```
257
+
167
258
  ## Error Handling
168
259
 
169
260
  - **Component does not render or render weird**: Verify the CSS framework is imported. This is needed for CSS custom properties.
170
261
  - **Events do not fire in React (pre-v19)**: Confirm React wrappers are used instead of web components.
262
+ - **`onClose`/`onToggle` never fires in React 19**: On raw `sds-*` elements use lowercase `onclose`/`ontoggle`/`oncancel`, or use the wrapper, where camelCase is correct.
263
+ - **Event listener never fires**: Check the exact event name in `references/components.md`. `sds-details`/`sds-popover`/`sds-tooltip` dispatch `toggle` (not `sds-toggle`) and `sds-dialog` dispatches `close` (not `sds-close`, which is deprecated).
171
264
  - **Icons do not load**: Check the icon name format (`{name}-{source}-{variant}`) and network access to jsDelivr CDN. If in secure/isolated network, use Artifactory. If needed, see `@politiet/sheriff-icons` for icon skill.
172
265
  - **Form values not submitted**: Ensure the component has both `name` and `value` attributes set.
266
+ - **`data-palette` seems ignored**: On `sds-alert` it must be set on the element itself, and only `info`/`success`/`attention`/`danger` are valid. `sds-tooltip` and `sds-environment-banner` do not support palettes.