@sebgroup/green-core 3.23.0 → 3.24.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/assets/icons/regular/satellite.svg +6 -0
  2. package/assets/icons/solid/satellite.svg +5 -0
  3. package/components/button/button.component.js +6 -1
  4. package/components/calendar/calendar.component.js +2 -1
  5. package/components/context-menu/context-menu.component.js +3 -0
  6. package/components/datepicker/datepicker.component.js +57 -13
  7. package/components/icon/icons/index.d.ts +1 -0
  8. package/components/icon/icons/index.js +1 -0
  9. package/components/icon/icons/pure.d.ts +1 -0
  10. package/components/icon/icons/pure.js +1 -0
  11. package/components/icon/icons/satellite.component.d.ts +18 -0
  12. package/components/icon/icons/satellite.component.js +25 -0
  13. package/components/icon/icons/satellite.d.ts +2 -0
  14. package/components/icon/icons/satellite.js +6 -0
  15. package/components/link/link.styles.js +23 -3
  16. package/components/popover/popover.component.js +3 -2
  17. package/components/table/table.stories.data.js +186 -182
  18. package/custom-elements.json +27017 -26394
  19. package/gds-element.js +1 -1
  20. package/generated/mcp/alert/index.json +0 -1
  21. package/generated/mcp/avatar/index.json +0 -1
  22. package/generated/mcp/badge/index.json +0 -1
  23. package/generated/mcp/blur/index.json +0 -1
  24. package/generated/mcp/breadcrumbs/index.json +0 -1
  25. package/generated/mcp/button/index.json +0 -1
  26. package/generated/mcp/calendar/index.json +0 -1
  27. package/generated/mcp/card/index.json +0 -1
  28. package/generated/mcp/card-pattern-01/index.json +0 -1
  29. package/generated/mcp/checkbox/index.json +0 -1
  30. package/generated/mcp/coachmark/index.json +0 -1
  31. package/generated/mcp/components.json +1 -44
  32. package/generated/mcp/context-menu/index.json +0 -1
  33. package/generated/mcp/datepicker/index.json +0 -1
  34. package/generated/mcp/details/index.json +0 -1
  35. package/generated/mcp/dialog/index.json +0 -1
  36. package/generated/mcp/div/index.json +0 -1
  37. package/generated/mcp/divider/index.json +0 -1
  38. package/generated/mcp/dropdown/index.json +0 -1
  39. package/generated/mcp/fab/index.json +0 -1
  40. package/generated/mcp/filter-chips/index.json +0 -1
  41. package/generated/mcp/flex/index.json +0 -1
  42. package/generated/mcp/form-summary/index.json +0 -1
  43. package/generated/mcp/grid/index.json +0 -1
  44. package/generated/mcp/icon-satellite/angular.md +15 -0
  45. package/generated/mcp/icon-satellite/api.md +31 -0
  46. package/generated/mcp/icon-satellite/index.json +8 -0
  47. package/generated/mcp/icon-satellite/react.md +15 -0
  48. package/generated/mcp/icons.json +13 -1
  49. package/generated/mcp/index.json +1 -1
  50. package/generated/mcp/input/index.json +0 -1
  51. package/generated/mcp/link/index.json +0 -1
  52. package/generated/mcp/list/index.json +0 -1
  53. package/generated/mcp/list-item-pattern-01/index.json +0 -1
  54. package/generated/mcp/menu-button/index.json +0 -1
  55. package/generated/mcp/pagination/index.json +0 -1
  56. package/generated/mcp/popover/index.json +0 -1
  57. package/generated/mcp/radio/index.json +0 -1
  58. package/generated/mcp/rich-text/index.json +0 -1
  59. package/generated/mcp/segmented-control/index.json +0 -1
  60. package/generated/mcp/select/index.json +0 -1
  61. package/generated/mcp/signal/index.json +0 -1
  62. package/generated/mcp/spinner/index.json +0 -1
  63. package/generated/mcp/switch/index.json +0 -1
  64. package/generated/mcp/table/index.json +0 -1
  65. package/generated/mcp/tabs/index.json +0 -1
  66. package/generated/mcp/text/index.json +0 -1
  67. package/generated/mcp/textarea/index.json +0 -1
  68. package/generated/mcp/theme/index.json +0 -1
  69. package/generated/mcp/tokens.json +1 -1
  70. package/generated/mcp/video/index.json +0 -1
  71. package/generated/react/icons/icon-satellite/index.d.ts +691 -0
  72. package/generated/react/icons/icon-satellite/index.js +14 -0
  73. package/generated/react/index.d.ts +2 -1
  74. package/generated/react/index.js +2 -1
  75. package/package.json +2 -1
  76. package/utils/helpers/custom-element-scoping.js +1 -1
  77. package/utils/helpers/has-changed.d.ts +8 -0
  78. package/utils/helpers/has-changed.js +10 -0
  79. package/generated/mcp/alert/guidelines.md +0 -105
  80. package/generated/mcp/avatar/guidelines.md +0 -40
  81. package/generated/mcp/badge/guidelines.md +0 -56
  82. package/generated/mcp/blur/guidelines.md +0 -3
  83. package/generated/mcp/breadcrumbs/guidelines.md +0 -35
  84. package/generated/mcp/button/guidelines.md +0 -83
  85. package/generated/mcp/calendar/guidelines.md +0 -3
  86. package/generated/mcp/card/guidelines.md +0 -78
  87. package/generated/mcp/card-pattern-01/guidelines.md +0 -52
  88. package/generated/mcp/checkbox/guidelines.md +0 -91
  89. package/generated/mcp/coachmark/guidelines.md +0 -8
  90. package/generated/mcp/context-menu/guidelines.md +0 -33
  91. package/generated/mcp/datepicker/guidelines.md +0 -44
  92. package/generated/mcp/details/guidelines.md +0 -24
  93. package/generated/mcp/dialog/guidelines.md +0 -35
  94. package/generated/mcp/div/guidelines.md +0 -3
  95. package/generated/mcp/divider/guidelines.md +0 -24
  96. package/generated/mcp/dropdown/guidelines.md +0 -96
  97. package/generated/mcp/fab/guidelines.md +0 -27
  98. package/generated/mcp/filter-chips/guidelines.md +0 -47
  99. package/generated/mcp/flex/guidelines.md +0 -1
  100. package/generated/mcp/form-summary/guidelines.md +0 -39
  101. package/generated/mcp/grid/guidelines.md +0 -3
  102. package/generated/mcp/input/guidelines.md +0 -127
  103. package/generated/mcp/link/guidelines.md +0 -43
  104. package/generated/mcp/list/guidelines.md +0 -16
  105. package/generated/mcp/list-item-pattern-01/guidelines.md +0 -49
  106. package/generated/mcp/menu-button/guidelines.md +0 -39
  107. package/generated/mcp/pagination/guidelines.md +0 -24
  108. package/generated/mcp/popover/guidelines.md +0 -3
  109. package/generated/mcp/radio/guidelines.md +0 -74
  110. package/generated/mcp/rich-text/guidelines.md +0 -3
  111. package/generated/mcp/segmented-control/guidelines.md +0 -31
  112. package/generated/mcp/select/guidelines.md +0 -29
  113. package/generated/mcp/signal/guidelines.md +0 -14
  114. package/generated/mcp/spinner/guidelines.md +0 -6
  115. package/generated/mcp/switch/guidelines.md +0 -41
  116. package/generated/mcp/table/guidelines.md +0 -169
  117. package/generated/mcp/tabs/guidelines.md +0 -64
  118. package/generated/mcp/text/guidelines.md +0 -3
  119. package/generated/mcp/textarea/guidelines.md +0 -73
  120. package/generated/mcp/theme/guidelines.md +0 -3
  121. package/generated/mcp/video/guidelines.md +0 -3
@@ -0,0 +1,14 @@
1
+ import "../../../../chunks/chunk.CAV4X6PU.js";
2
+ import { createElement } from "react";
3
+ import { IconSatellite as IconSatelliteClass } from "../../../../components/icon/icons/satellite.component.js";
4
+ import { getReactComponent } from "../../../../utils/react.js";
5
+ const IconSatellite = (props) => {
6
+ IconSatelliteClass.define();
7
+ const JSXElement = getReactComponent("gds-icon-satellite");
8
+ const propsWithClass = { ...props, class: props.className, ref: props.ref };
9
+ return createElement(JSXElement, propsWithClass);
10
+ };
11
+ IconSatellite.displayName = "IconSatellite";
12
+ export {
13
+ IconSatellite
14
+ };
@@ -26,8 +26,8 @@ export * from './grouped-list/index.js';
26
26
  export * from './img/index.js';
27
27
  export * from './input/index.js';
28
28
  export * from './link/index.js';
29
- export * from './mask/index.js';
30
29
  export * from './list/index.js';
30
+ export * from './mask/index.js';
31
31
  export * from './menu-button/index.js';
32
32
  export * from './pagination/index.js';
33
33
  export * from './backdrop/index.js';
@@ -315,6 +315,7 @@ export * from './icons/icon-robot/index.js';
315
315
  export * from './icons/icon-rocket/index.js';
316
316
  export * from './icons/icon-run-shortcut/index.js';
317
317
  export * from './icons/icon-safari/index.js';
318
+ export * from './icons/icon-satellite/index.js';
318
319
  export * from './icons/icon-school/index.js';
319
320
  export * from './icons/icon-scissors/index.js';
320
321
  export * from './icons/icon-search-menu/index.js';
@@ -26,8 +26,8 @@ export * from "./grouped-list/index.js";
26
26
  export * from "./img/index.js";
27
27
  export * from "./input/index.js";
28
28
  export * from "./link/index.js";
29
- export * from "./mask/index.js";
30
29
  export * from "./list/index.js";
30
+ export * from "./mask/index.js";
31
31
  export * from "./menu-button/index.js";
32
32
  export * from "./pagination/index.js";
33
33
  export * from "./backdrop/index.js";
@@ -315,6 +315,7 @@ export * from "./icons/icon-robot/index.js";
315
315
  export * from "./icons/icon-rocket/index.js";
316
316
  export * from "./icons/icon-run-shortcut/index.js";
317
317
  export * from "./icons/icon-safari/index.js";
318
+ export * from "./icons/icon-satellite/index.js";
318
319
  export * from "./icons/icon-school/index.js";
319
320
  export * from "./icons/icon-scissors/index.js";
320
321
  export * from "./icons/icon-search-menu/index.js";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sebgroup/green-core",
3
3
  "description": "A carefully crafted set of Web Components, laying the foundation of the Green Design System.",
4
- "version": "3.23.0",
4
+ "version": "3.24.1",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
7
7
  "type": "module",
@@ -189,6 +189,7 @@
189
189
  "./components/icon/icons/search-menu.js",
190
190
  "./components/icon/icons/scissors.js",
191
191
  "./components/icon/icons/school.js",
192
+ "./components/icon/icons/satellite.js",
192
193
  "./components/icon/icons/safari.js",
193
194
  "./components/icon/icons/run-shortcut.js",
194
195
  "./components/icon/icons/rocket.js",
@@ -1,6 +1,6 @@
1
1
  import "../../chunks/chunk.CAV4X6PU.js";
2
2
  import { html as litHtml } from "lit";
3
- const VER_SUFFIX = "-3deb38";
3
+ const VER_SUFFIX = "-808a82";
4
4
  class ScopedElementRegistry {
5
5
  static get instance() {
6
6
  if (!globalThis.__gdsElementLookupTable?.[VER_SUFFIX])
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A `hasChanged` function for Lit reactive properties that treats `Date` values as equal when they
3
+ * represent the same point in time, rather than requiring referential equality. Use this on
4
+ * `Date`-typed properties (e.g. `value`) to avoid triggering reactive side effects, such as `@watch`
5
+ * handlers, when an equivalent but new `Date` instance is assigned - a common occurrence when a value
6
+ * is bound from a framework wrapper that re-renders with freshly created `Date` objects.
7
+ */
8
+ export declare function dateHasChanged<T>(value: T, oldValue: T): boolean;
@@ -0,0 +1,10 @@
1
+ import "../../chunks/chunk.CAV4X6PU.js";
2
+ function dateHasChanged(value, oldValue) {
3
+ if (value instanceof Date && oldValue instanceof Date) {
4
+ return value.getTime() !== oldValue.getTime();
5
+ }
6
+ return value !== oldValue;
7
+ }
8
+ export {
9
+ dateHasChanged
10
+ };
@@ -1,105 +0,0 @@
1
- # Alert
2
-
3
- An alert displays important messages, feedback, or time-sensitive information.
4
-
5
-
6
- ## Overview
7
-
8
- ### Variants
9
-
10
- A set of predefined styles that convey different meanings and states through consistent visual treatment each with specific icons.
11
-
12
- #### Information
13
-
14
- Used for _passive_, non-critical updates like tips or background information. It's quiet and unobtrusive.
15
-
16
- #### Notice
17
-
18
- Used for _actionable_, attention-worthy updates that are still non-critical, like a change in a process or a reminder to do something soon.
19
-
20
- #### Positive
21
-
22
- Confirms successful actions, such as form submissions, with a success message, optional next steps, and possible brand reinforcement.
23
-
24
- #### Warning
25
-
26
- Highlights non-critical issues, such as upcoming deadlines, with a concise issue summary, optional duration estimate, and suggested actions.
27
-
28
- #### Negative
29
-
30
- Communicates critical issues or errors, such as system outages, with a clear problem description, optional apology for system issues, and resolution guidance.
31
-
32
- ### Action button
33
-
34
- Alert supports an optional action button with customisable text to trigger relevant actions.
35
-
36
- ### Dismissible
37
-
38
- Alerts can be configured as `dismissible` in order to show a close button in the upper right corner. This also enabled closing the alert by pressing the escape key.
39
-
40
- ### Auto-dismiss
41
-
42
- Alert can also be set up to use an auto-dismiss timer. In this configuration, a timer progress bar will be shown at the bottom of the alert, and the alert will close once the timer reaches the end.
43
-
44
- ### Placement
45
-
46
- The most important rule is to place the alert near the issue that triggered it.
47
-
48
- #### Global alert
49
-
50
- Used for system-wide messages.
51
-
52
- * Placed above the header and takes full width of the screen.
53
-
54
- * The icon, text content, and action button should be center-aligned horizontally.
55
-
56
- * The dismiss button is placed at the far right.
57
-
58
- #### Page alert
59
-
60
- Used for messages affecting the entire page (e.g., _Bankgiro is down_).
61
-
62
- * Placed at the top of the page, below the header.
63
-
64
- #### Group alert
65
-
66
- Used for messages related to a specific module (e.g., _Transaction listing is unavailable_).
67
-
68
- * Placed within the module, at the top.
69
-
70
- #### Specific alert
71
-
72
- Used for messages related to specific content (e.g., _Negative balance_).
73
-
74
- * Placed directly in the content area, close to the element it concerns (such as a table or field).
75
-
76
- ### Guidelines
77
-
78
- Select the appropriate variant to match the message’s intent, such as using positive for success messages or negative for errors. Also ensure a meaningful label property is set to describe the alert’s purpose for accessibility. A label should always be set when using alert.
79
-
80
- Choose the role property carefully, using alert for critical messages and status for informational updates, to align with ARIA best practices.
81
-
82
- For toast-like messages, like save confirmations and other non-critical messages, auto-dismiss can be used to avoid interrupting user workflows.
83
-
84
-
85
- ## UX Guidelines
86
-
87
- ### Writing UX text for alerts
88
-
89
- ### Alert with a heading
90
-
91
- ### Alert without a heading
92
-
93
- ### Alert with a button
94
-
95
- ### Alert with a link
96
-
97
- ### Using buttons and links together
98
-
99
- ### Information alert
100
-
101
- ### Success alert
102
-
103
- ### Warning alert
104
-
105
- ### Critical and error alert
@@ -1,40 +0,0 @@
1
- # Avatar
2
-
3
- An avatar represents a user, entity, or object. It is typically displayed as an image, initials, or icon, and helps identify ownership, participation, or presence in the interface.
4
-
5
-
6
- ## Overview
7
-
8
- ### Usage
9
-
10
- Use an avatar when you need to represent a user, such as in lists, messages, or account-related contexts. It provides quick visual recognition and helps users understand who is involved in a specific action or piece of content. Avatars are especially useful in collaborative or communication-heavy interfaces where multiple people are present.
11
-
12
- ### Variants
13
-
14
- The avatar comes in two shapes:
15
-
16
- - **Circular**
17
- Used in more prominent or personal contexts, such as the top header or profile-related areas.
18
- - **Squared**
19
- Used to represent products, accounts, or organizations. This includes cases like specific account types, funds, or company logos.
20
-
21
-
22
-
23
- ### Sizes
24
-
25
- The avatar is available in four sizes:
26
-
27
- - **XS**
28
- - **S**
29
- - **M**
30
- - **L**
31
-
32
-
33
-
34
- ### Grouped avatars
35
-
36
- Avatars can be grouped to represent multiple users, for example in shared ownership or collaborative contexts. The avatars are displayed in a horizontal stack with a slight overlap to save space and create a cohesive visual unit.
37
-
38
- To maintain clarity, a maximum of three avatars should be visible at the same time. If more users are included, the remaining count is shown as a “+X” indicator, such as “+2”.
39
-
40
-
@@ -1,56 +0,0 @@
1
- # Badge
2
-
3
- A compact visual indicator for status, counts and notifications.
4
-
5
-
6
- ## Overview
7
-
8
- ### Usage
9
-
10
- Badges are especially useful for:
11
-
12
- * **Status indicators** – Showing that something is new, in progress, needs attention, or has been successfully completed.
13
-
14
- * **Counters** – Indicating the number of new messages, notifications, or tasks.
15
-
16
- * **Contextual highlights** – Marking a feature as beta or signaling updates users should be aware of.
17
-
18
-
19
- Use badges sparingly – too many can create visual noise and reduce their impact. Always ensure that the badge color, icon and label clearly support the intended message.
20
-
21
- ### Variants
22
-
23
- A set of predefined styles that convey different meanings and states through consistent visual treatment.
24
-
25
- * **Information** – For general updates or tips that help the user understand context.
26
-
27
- * **Notice** – For neutral alerts or flags that are not critical but still relevant.
28
-
29
- * **Positive** – For confirming success or a completed action (e.g., “Active” or “Paid”).
30
-
31
- * **Warning** – For potential issues users should be cautious about.
32
-
33
- * **Negative** – For errors, failed states, or items requiring immediate attention.
34
-
35
- ### Size
36
-
37
- Available in large (default) and small sizes to accommodate different UI contexts and content requirements.
38
-
39
- ### Notification mode
40
-
41
- Optimised for notification indicators.
42
-
43
- ### Rounded
44
-
45
- The rounded property transforms the badge's appearance by applying fully circular corners, making it ideal for numerical indicators or status markers.
46
-
47
- ### Lead and trail slots
48
-
49
- The badge component supports both lead and trail slots, enabling the placement of icons or additional content before or after the main text.
50
-
51
-
52
- ## UX Guidelines
53
-
54
- ### Writing UX text for badges
55
-
56
- ### Our most common statuses
@@ -1,3 +0,0 @@
1
- # Blur
2
-
3
- The Blur component is used to apply a blur effect over content, often used to obscure sensitive or background information.
@@ -1,35 +0,0 @@
1
- # Breadcrumbs
2
-
3
- A breadcrumb is a secondary navigation showing the website hierarchy.
4
-
5
-
6
- ## Overview
7
-
8
- ### When to use it
9
-
10
- Use for sites and applications that have a substantial amount of pages present deeper down in site structures.
11
-
12
- ### Desktop
13
-
14
- The full path may not take up more than one row in the layout.
15
-
16
- ### Mobile
17
-
18
- For mobile views we only display the link to the parent page, as the full path tends to take too much space.
19
-
20
- The same version may be used in shallow hierarchies where there still is a need to easily move one step up, or back to the page from where you came.
21
-
22
- ### Overflow
23
-
24
- The breadcrumbs component is designed with flexibility in mind, allowing developers to implement \* custom overflow solutions that best fit their specific needs.
25
-
26
-
27
- ## UX Guidelines
28
-
29
- ### Writing UX text for breadcrums
30
-
31
- ### Be clear and simple
32
-
33
- ### Breadcrumbs on mobile web
34
-
35
- ### Breadcrumbs in native apps
@@ -1,83 +0,0 @@
1
- # Button
2
-
3
- A button can be tapped or clicked to perform an action.
4
-
5
-
6
- ## Overview
7
-
8
- ### Variants and ranks
9
-
10
- Variant is used to communicate the intent of the button, such as positive, negative, notice.
11
-
12
- Rank determines the priority of the button, and can be primary, secondary or tertiary. All variants are each available in those three ranks.
13
-
14
- ### Neutral
15
-
16
- This is our default button used for most cases. Carefully choose what rank to use and avoid using more than one primary button for each context.
17
-
18
- ### Brand
19
-
20
- Our brand button is used in specific scenarios, such as hero areas, login or brand enforcing messages.
21
-
22
- ### Negative
23
-
24
- Used for destructive actions such as "Delete". Also used for sell actions (e.g. selling stocks or funds).
25
-
26
- ### Notice
27
-
28
- Use only for the notice alert and for buy actions (e.g. buying stocks or funds).
29
-
30
- ### Icon button
31
-
32
- Use an icon button only when the icon is universally understood and can stand on its own, such as a close or expand icon.
33
-
34
- If the action is not immediately clear, use a regular button with a text label instead to ensure clarity and accessibility.
35
-
36
- The icon button comes in the same ranks and variants as regular buttons.
37
-
38
- ### Split button
39
-
40
- The split button always has a primary action. This action is most likely to be used by the customer as the default action. The users can click on the icon button to reveal a context menu providing secondary or additional options.
41
-
42
- ### Next and back button
43
-
44
- Used inside flows to signal the direction forward or backward.
45
-
46
- Back button comes in both primary and secondary state depending on what suits the content. The next button comes as primary only.
47
-
48
- ### Size
49
-
50
- Buttons can be xs, small, medium or large. The default size is medium.
51
- Choose size depending on context. Avoid to mix different sizes in the same context.
52
-
53
- ### Desktop placements
54
-
55
- - **Left**: In overviews and widgets, the user tends to read from top to bottom following the left side, therefore the buttons are kept to the left. Place the primary button furthest to the left.
56
- - **Right**: Modals and flows move the user forward (interpreted as to the right in western culture), therefore the buttons are placed to the right. Place the primary button furthest to the right.
57
-
58
-
59
-
60
- ### In a mobile device
61
-
62
- - **One button**, use the full width of the content area.
63
- - **Two buttons**, aim to place them side by side. It is allowed to stack them if needed.
64
- - **Three buttons**, consider the need for all of them. "cancel or close" might be x in the top right corner. Worst case scenario: place two buttons side by side and one tertiary button under.
65
-
66
-
67
-
68
- ### Do’s and don’ts
69
-
70
- Only use one primary action in the same context of several actions.
71
-
72
-
73
- ## UX Guidelines
74
-
75
- ### Writing UX text for buttons
76
-
77
- ### Use commands and requests in the button
78
-
79
- ### Avoid Perform and Okay
80
-
81
- ### Standard button texts
82
-
83
- ### Do’s and don’ts
@@ -1,3 +0,0 @@
1
- # Calendar
2
-
3
- The calendar displays a grid of selectable dates.
@@ -1,78 +0,0 @@
1
- # Card
2
-
3
- The card groups related content into a single container.
4
-
5
-
6
- ## Overview
7
-
8
- ### Variants
9
-
10
- ### Brand cards
11
-
12
- Brand-01 and brand-02 can only be used in special contexts and with specific content. This will be added as guidelines. Since we do not have any matching action components for now you can only slot text, link and icon.
13
-
14
- ### Interactions
15
-
16
- #### Default
17
-
18
- The entire card area is not clickable. The slotted content can contain one or several clickable elements, such as button and link.
19
-
20
- #### Linked
21
-
22
- The entire card area is clickable. The slotted content can include one decorative element. This element must be inert (non-interactive) since the whole card already functions as the clickable target.
23
-
24
- ### Usage
25
-
26
- Don't mix linked and default cards in the same group or grid. Interactions should be consistent across a set of cards to ensure a predictable and accessible experience. If you must use both in the same view, do it with care, for example, by visually separating them or clearly communicating the interaction difference.
27
-
28
- #### Why this matters:
29
-
30
- - **Consistency** – users should understand how a card behaves before they interact with it. Mixing types can make it unclear whether the whole card or only parts are clickable.
31
- - **Accessibility** – linked cards rely on different interaction logic and focus handling compared to cards with multiple actions. Mixing them can create confusion for keyboard and screen-reader users.
32
- - **Visual clarity** – linked cards use hover and press states that don’t apply to default cards, which can create inconsistent visual feedback.
33
-
34
- &nbsp;
35
-
36
- ### Card on card
37
-
38
- Cards can be placed inside other cards to create hierarchy and visual grouping. This also goes for a card inside a modal since the card and the modal have the same base tokens. To support this, we use elevated color tokens that ensure proper contrast and consistency across both light and dark mode.
39
-
40
- #### How it works
41
-
42
- When nesting cards or placing cards in modals, the inner card should always contrast against its parent background. This is handled through paired color tokens and creates a clear visual separation between layers without relying on shadows alone.
43
-
44
- #### Light mode behavior
45
-
46
- Always use the “-2” token for the nested card to maintain correct contrast and hierarchy.
47
-
48
- - A **grey card (neutral-01)** can contain a **white card (neutral-01-2)**
49
- - A **white card (neutral-02)** can contain a **grey card (neutral-02-2)**
50
-
51
- &nbsp;
52
-
53
- #### Dark mode behavior
54
-
55
- In dark mode, base card variants share the same surface value. The elevated variants (“-2”) are adjusted to create subtle contrast between layers. This ensures that nested cards remain distinguishable and maintain a clear sense of hierarchy.
56
-
57
- - **Neutral-01** and **Neutral-02** share the same base value
58
- - **Neutral-01-2** and **Neutral-02-2** use slightly adjusted values to create elevation and separation between nested cards. (MIGHT NEED UPDATE!)
59
-
60
- &nbsp;
61
-
62
- #### In Figma
63
-
64
- Elevated cards are available as **variants** of the Card component. We call them ”Raised”.
65
-
66
- - Select the appropriate **variant** based on the card’s context (base or nested).
67
- - Use the **“-2” variants** when placing a card inside another card or modal.
68
- - Avoid manually changing fill colors, always switch variants instead.
69
-
70
- (A card instance in a card needs a bit of a trick. You need to add the card instance in your slot AFTER you place the slot in your card. This will be much easier as soon as we rebuild the cards to use the new feature with actual slots, that will remove the obsticle of you needing to create a lot of slot components).
71
-
72
- #### Card on card guidelines
73
-
74
- - Use nested cards to group related content or create visual hierarchy.
75
- - Always use the paired “-2” variants/tokens for inner cards.
76
- - Think of the “-2” variants as an elevation step, they define how surfaces stack.
77
-
78
- ### Do's and don'ts
@@ -1,52 +0,0 @@
1
- # Card pattern 01
2
-
3
- Card pattern 01 is a pre-built composition based on the card component.
4
-
5
-
6
- ## Overview
7
-
8
- ### Slots
9
-
10
- All card patterns are built on top of the base card component. Card pattern 01 is available in both interaction types – default card and linked card, and uses slots to build flexible yet consistent layouts.
11
-
12
- Each variant consists of:
13
-
14
- - **header slot** – img, icon or custom
15
- - **main area** – includes heading and excerpt
16
- - **footer** **slot** – supports actions depending on card type (see below).
17
-
18
-
19
-
20
- ### Header
21
-
22
- #### Empty
23
-
24
- No header content.
25
-
26
- #### Image
27
-
28
- Can be 16:9 (landscape) or 1:1 (portrait).
29
-
30
- #### Custom
31
-
32
- Allows placement of custom content.
33
-
34
- ### Footer
35
-
36
- ### Decorative elements
37
-
38
- The footer on a linked card upports two types of decorative elements: a label, set via the `label` property, and slotted elements, such as an icon button.
39
-
40
- Note: All decorative elements are always inert.
41
-
42
- ### Empty
43
-
44
- The footer will not show if the card is linked without a label, or if no slotted elements are provided.
45
-
46
- ### Actions
47
-
48
- Note: This only applies to the default card (not linked).
49
-
50
- ### Variants
51
-
52
- In card pattern 01, you can choose between two variants: `neutral-01` and `neutral-02`. The `neutral-02` variant can also be outlined.
@@ -1,91 +0,0 @@
1
- # Checkbox
2
-
3
- A checkbox is a form control that allows users to select one or multiple options.
4
-
5
-
6
- ## Overview
7
-
8
- ### Variants
9
-
10
- - **Default**
11
- - **Contained**: Coming soon Used on its own or together with other form components.
12
-
13
-
14
-
15
- ### Features
16
-
17
- #### Label
18
-
19
- All individual checkboxes must have a label to ensure clarity and accessibility. When checkboxes are grouped, the group must have a header label. Labels help users understand the purpose of the checkboxes, including those using assistive technologies.
20
-
21
- #### Optional field indicator
22
-
23
- Only use in the header label. We only ask for required information. If some fields are optional, we let users know by adding "(optional)" in brackets next to the field label. The word "(optional)" is shown in regular font weight to distinguish it from the label.
24
-
25
- ### Support text
26
-
27
- This can be used for both the header and individual checkboxes. Use this to explain how to fill in the field, for example how to count or what to include. Contained checkboxes don’t have support text for the individual checkboxes.
28
-
29
- ### Contextual help
30
-
31
- If the label and support text are not enough to explain a field, we can use the info icon. Clicking the icon shows additional support text between the label support and the field.
32
-
33
- - Use a tooltip if space is limited.
34
- - Use a modal for large amounts of text.
35
-
36
-
37
-
38
- ### Error message
39
-
40
- Used to indicate that a single checkbox must be checked or that a group of checkboxes has errors.
41
-
42
- ### Indeterminate state
43
-
44
- Used when a checkbox is partially selected, typically in parent-child relationships within nested checkboxes. Not available for the contained variant.
45
-
46
- ### Behaviour:
47
-
48
- - If some child checkboxes are selected, the parent shows the indeterminate state.
49
- - If all child checkboxes are selected, the parent appears selected.
50
- - Selecting a parent checkbox (whether unselected or in the indeterminate state) selects all child checkboxes.
51
- - Deselecting the parent checkbox deselects all child checkboxes.
52
-
53
-
54
-
55
- ### Alignment
56
-
57
- Checkboxes can be aligned horizontal or vertical.
58
-
59
- - **Vertical**: This is the default alignment. It's easier to read and scan the available options.
60
- - **Horizontal**: Only used for a small set of options if the page shouldn't be to long, but try to avoid.
61
-
62
-
63
-
64
- ### Do's and don'ts
65
-
66
- ### Read only
67
-
68
- The read only shows the selected state without allowing it to be changed. When several checkboxes represent a group of choices, the read only retain enough context for users to understand both selected and unselected options when that information is relevant.
69
-
70
- [Read more about the read only pattern](https://seb.io/patterns/read-only)
71
-
72
-
73
- ## UX Guidelines
74
-
75
- ### Writing UX text for checkboxes
76
-
77
- ### Stand-alone checkbox
78
-
79
- ### Use the “I” form
80
-
81
- ### Don't
82
-
83
- ### Avoid negations
84
-
85
- ### Avoid questions
86
-
87
- ### Multiple options
88
-
89
- ### Do
90
-
91
- ### Don't
@@ -1,8 +0,0 @@
1
- # Coachmark
2
-
3
- Coachmarks guide users through interface features.
4
-
5
-
6
- ## UX Guidelines
7
-
8
- ### Writing UX text for coach marks