@lmfaole/basics 0.3.0 → 0.5.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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -350
  3. package/basic-components/basic-accordion/README.md +53 -0
  4. package/{components → basic-components}/basic-accordion/index.d.ts +5 -5
  5. package/basic-components/basic-accordion/index.js +413 -0
  6. package/basic-components/basic-alert/README.md +48 -0
  7. package/basic-components/basic-alert/index.d.ts +53 -0
  8. package/basic-components/basic-alert/index.js +189 -0
  9. package/basic-components/basic-alert/register.js +3 -0
  10. package/basic-components/basic-carousel/README.md +108 -0
  11. package/basic-components/basic-carousel/index.d.ts +73 -0
  12. package/basic-components/basic-carousel/index.js +255 -0
  13. package/basic-components/basic-carousel/register.js +3 -0
  14. package/basic-components/basic-dialog/README.md +57 -0
  15. package/basic-components/basic-popover/README.md +56 -0
  16. package/basic-components/basic-summary-table/README.md +93 -0
  17. package/{components → basic-components}/basic-summary-table/index.js +188 -42
  18. package/basic-components/basic-table/README.md +89 -0
  19. package/{components → basic-components}/basic-table/index.js +203 -145
  20. package/basic-components/basic-tabs/README.md +63 -0
  21. package/basic-components/basic-tabs/register.d.ts +1 -0
  22. package/basic-components/basic-toast/README.md +62 -0
  23. package/basic-components/basic-toast/index.d.ts +68 -0
  24. package/basic-components/basic-toast/index.js +690 -0
  25. package/basic-components/basic-toast/register.d.ts +1 -0
  26. package/basic-components/basic-toast/register.js +3 -0
  27. package/basic-components/basic-toc/README.md +43 -0
  28. package/basic-components/basic-toc/register.d.ts +1 -0
  29. package/basic-styling/components/basic-accordion.css +99 -0
  30. package/basic-styling/components/basic-alert.css +27 -0
  31. package/basic-styling/components/basic-carousel.css +183 -0
  32. package/basic-styling/components/basic-dialog.css +41 -0
  33. package/basic-styling/components/basic-popover.css +52 -0
  34. package/basic-styling/components/basic-summary-table.css +98 -0
  35. package/basic-styling/components/basic-table.css +66 -0
  36. package/basic-styling/components/basic-tabs.css +61 -0
  37. package/basic-styling/components/basic-toast.css +102 -0
  38. package/basic-styling/components/basic-toc.css +30 -0
  39. package/basic-styling/components.css +11 -0
  40. package/basic-styling/forms.css +55 -0
  41. package/basic-styling/global.css +62 -0
  42. package/basic-styling/index.css +2 -0
  43. package/basic-styling/interaction.css +90 -0
  44. package/basic-styling/tokens/base.css +19 -0
  45. package/basic-styling/tokens/palette.css +229 -0
  46. package/basic-styling/tokens/palette.tokens.json +1787 -0
  47. package/index.d.ts +10 -7
  48. package/index.js +10 -7
  49. package/package.json +61 -76
  50. package/components/basic-accordion/index.js +0 -387
  51. package/readme.mdx +0 -6
  52. /package/{components → basic-components}/basic-accordion/register.d.ts +0 -0
  53. /package/{components → basic-components}/basic-accordion/register.js +0 -0
  54. /package/{components/basic-dialog → basic-components/basic-alert}/register.d.ts +0 -0
  55. /package/{components/basic-popover → basic-components/basic-carousel}/register.d.ts +0 -0
  56. /package/{components → basic-components}/basic-dialog/index.d.ts +0 -0
  57. /package/{components → basic-components}/basic-dialog/index.js +0 -0
  58. /package/{components/basic-summary-table → basic-components/basic-dialog}/register.d.ts +0 -0
  59. /package/{components → basic-components}/basic-dialog/register.js +0 -0
  60. /package/{components → basic-components}/basic-popover/index.d.ts +0 -0
  61. /package/{components → basic-components}/basic-popover/index.js +0 -0
  62. /package/{components/basic-table → basic-components/basic-popover}/register.d.ts +0 -0
  63. /package/{components → basic-components}/basic-popover/register.js +0 -0
  64. /package/{components → basic-components}/basic-summary-table/index.d.ts +0 -0
  65. /package/{components/basic-tabs → basic-components/basic-summary-table}/register.d.ts +0 -0
  66. /package/{components → basic-components}/basic-summary-table/register.js +0 -0
  67. /package/{components → basic-components}/basic-table/index.d.ts +0 -0
  68. /package/{components/basic-toc → basic-components/basic-table}/register.d.ts +0 -0
  69. /package/{components → basic-components}/basic-table/register.js +0 -0
  70. /package/{components → basic-components}/basic-tabs/index.d.ts +0 -0
  71. /package/{components → basic-components}/basic-tabs/index.js +0 -0
  72. /package/{components → basic-components}/basic-tabs/register.js +0 -0
  73. /package/{components → basic-components}/basic-toc/index.d.ts +0 -0
  74. /package/{components → basic-components}/basic-toc/index.js +0 -0
  75. /package/{components → basic-components}/basic-toc/register.js +0 -0
@@ -0,0 +1,43 @@
1
+ # `basic-toc`
2
+
3
+ Generated table-of-contents navigation from the nearest `<main>`.
4
+
5
+ ## Register
6
+
7
+ ```js
8
+ import "@lmfaole/basics/basic-components/basic-toc/register";
9
+ ```
10
+
11
+ ## Example
12
+
13
+ ```html
14
+ <basic-toc data-title="Innhold">
15
+ <nav aria-label="Innhold" data-page-toc-nav></nav>
16
+ </basic-toc>
17
+ ```
18
+
19
+ ## Props
20
+
21
+ | Prop | Description | Type | Default | Options |
22
+ | --- | --- | --- | --- | --- |
23
+ | `data-title` | Accessible label applied to the generated nav. | string | `Innhold` | any string |
24
+ | `data-heading-selector` | Selector used to collect headings from the nearest `<main>`. | CSS selector | `h1, h2, h3, h4, h5, h6` | any CSS selector |
25
+
26
+ ## Markup Hooks
27
+
28
+ | Hook | Description | Type | Default | Options |
29
+ | --- | --- | --- | --- | --- |
30
+ | `data-page-toc-nav` | Container where the generated outline links are rendered. | descendant element attribute | required | present on one descendant element |
31
+
32
+ ## Behavior
33
+
34
+ - Generates missing heading ids automatically
35
+ - Gives duplicate headings unique fragment ids
36
+ - Ignores hidden headings
37
+ - Rebuilds the outline when matching headings are added or changed
38
+
39
+ ## Markup Contract
40
+
41
+ - Render the element inside the same `<main>` that contains the content it should index
42
+ - Provide a descendant element with `data-page-toc-nav` for the generated links
43
+ - Keep layout and styling outside the package
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,99 @@
1
+ basic-accordion {
2
+ --basic-accordion-padding: var(--basic-panel-padding);
3
+ display: grid;
4
+ gap: 0;
5
+ }
6
+
7
+ basic-accordion > details {
8
+ margin: 0;
9
+ border-inline: var(--basic-border-width) solid var(--basic-color-border);
10
+ background: var(--basic-color-surface);
11
+ }
12
+
13
+ basic-accordion > details > summary {
14
+ --basic-interaction-border-rest: transparent;
15
+ --basic-interaction-border-hover: transparent;
16
+ --basic-interaction-border-active: transparent;
17
+ --basic-interaction-border-selected: transparent;
18
+ list-style: none;
19
+ display: flex;
20
+ align-items: center;
21
+ justify-content: space-between;
22
+ padding: var(--basic-control-padding-block) var(--basic-control-padding-inline);
23
+ color: inherit;
24
+ font-weight: 600;
25
+ text-align: left;
26
+ cursor: pointer;
27
+ background: transparent;
28
+ }
29
+
30
+ basic-accordion > details > summary::-webkit-details-marker {
31
+ display: none;
32
+ }
33
+
34
+ basic-accordion > details > summary::after {
35
+ content: "+";
36
+ flex: none;
37
+ color: var(--basic-color-text-muted);
38
+ font-size: var(--basic-font-size-title);
39
+ line-height: 1;
40
+ }
41
+
42
+ basic-accordion > details:first-child {
43
+ border-block-start: var(--basic-border-width) solid var(--basic-color-border);
44
+ border-start-start-radius: var(--basic-radius);
45
+ border-start-end-radius: var(--basic-radius);
46
+ }
47
+
48
+ basic-accordion > details:first-child > summary {
49
+ border-start-start-radius: var(--basic-radius);
50
+ border-start-end-radius: var(--basic-radius);
51
+ }
52
+
53
+ basic-accordion > details + details {
54
+ border-block-start: var(--basic-border-width) solid var(--basic-color-border);
55
+ }
56
+
57
+ basic-accordion > details:last-child {
58
+ border-block-end: var(--basic-border-width) solid var(--basic-color-border);
59
+ border-end-start-radius: var(--basic-radius);
60
+ border-end-end-radius: var(--basic-radius);
61
+ }
62
+
63
+ basic-accordion > details:last-child:not([open]) > summary {
64
+ border-end-start-radius: var(--basic-radius);
65
+ border-end-end-radius: var(--basic-radius);
66
+ }
67
+
68
+ basic-accordion > details[open] > summary {
69
+ border-block-end: var(--basic-border-width) solid var(--basic-color-border-selected);
70
+ }
71
+
72
+ basic-accordion > details[open] > summary::after {
73
+ content: "-";
74
+ color: inherit;
75
+ }
76
+
77
+ basic-accordion > details[open] {
78
+ padding-block-end: var(--basic-accordion-padding);
79
+ }
80
+
81
+ basic-accordion > details[open] > summary + :where(*) {
82
+ margin-block-start: var(--basic-accordion-padding);
83
+ }
84
+
85
+ basic-accordion > details > :where(:not(summary)) {
86
+ margin-block: 0;
87
+ margin-inline: var(--basic-accordion-padding);
88
+ }
89
+
90
+ basic-accordion > details > :not(summary) + :not(summary) {
91
+ margin-block-start: var(--basic-flow-space);
92
+ }
93
+
94
+ basic-accordion > details[data-disabled] > summary,
95
+ basic-accordion > details[disabled] > summary,
96
+ basic-accordion > details[aria-disabled="true"] > summary {
97
+ color: var(--basic-color-text-muted);
98
+ cursor: default;
99
+ }
@@ -0,0 +1,27 @@
1
+ basic-alert {
2
+ display: block;
3
+ padding: var(--basic-panel-padding);
4
+ border: var(--basic-border-width) solid var(--basic-color-border);
5
+ border-radius: var(--basic-radius);
6
+ background: var(--basic-color-surface-muted);
7
+ }
8
+
9
+ basic-alert > :where(*) {
10
+ margin-block: 0;
11
+ }
12
+
13
+ basic-alert > :where(* + *) {
14
+ margin-block-start: var(--basic-flow-space);
15
+ }
16
+
17
+ basic-alert [data-alert-close] {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ padding: var(--basic-control-padding-block) var(--basic-control-padding-inline);
22
+ border: var(--basic-border-width) solid var(--basic-color-border);
23
+ border-radius: var(--basic-radius-pill);
24
+ background: var(--basic-color-surface);
25
+ color: inherit;
26
+ cursor: pointer;
27
+ }
@@ -0,0 +1,183 @@
1
+ basic-carousel {
2
+ --basic-carousel-gap: var(--basic-space-4);
3
+ --basic-carousel-controls-gap: var(--basic-space-3);
4
+ --basic-carousel-button-size: 2.75rem;
5
+ --basic-carousel-marker-size: 1.75rem;
6
+ --basic-carousel-item-width: 90%;
7
+ --basic-carousel-track-padding: var(--basic-space-1);
8
+ --basic-carousel-snap-align: center;
9
+ display: block;
10
+ }
11
+
12
+ basic-carousel[data-basic-carousel-snapping="start"] {
13
+ --basic-carousel-snap-align: start;
14
+ }
15
+
16
+ basic-carousel[data-basic-carousel-snapping="end"] {
17
+ --basic-carousel-snap-align: end;
18
+ }
19
+
20
+ basic-carousel [data-carousel-track] {
21
+ display: flex;
22
+ align-items: stretch;
23
+ gap: var(--basic-carousel-gap);
24
+ min-inline-size: 0;
25
+ margin: 0;
26
+ padding: var(--basic-carousel-track-padding);
27
+ overflow-x: auto;
28
+ overscroll-behavior-inline: contain;
29
+ scroll-behavior: smooth;
30
+ scroll-snap-type: x mandatory;
31
+ }
32
+
33
+ basic-carousel :is(ol, ul)[data-carousel-track] {
34
+ list-style: none;
35
+ padding-inline-start: var(--basic-carousel-track-padding);
36
+ }
37
+
38
+ basic-carousel [data-carousel-track] > * {
39
+ box-sizing: border-box;
40
+ flex: 0 0 var(--basic-carousel-item-width);
41
+ inline-size: var(--basic-carousel-item-width);
42
+ min-inline-size: 0;
43
+ padding: var(--basic-panel-padding);
44
+ border: var(--basic-border-width) solid var(--basic-color-border);
45
+ border-radius: var(--basic-radius);
46
+ background: var(--basic-color-surface);
47
+ scroll-snap-align: var(--basic-carousel-snap-align);
48
+ scroll-snap-stop: always;
49
+ }
50
+
51
+ basic-carousel [data-carousel-track] > * > :where(*) {
52
+ margin-block: 0;
53
+ }
54
+
55
+ basic-carousel [data-carousel-track] > * > :where(* + *) {
56
+ margin-block-start: var(--basic-flow-space);
57
+ }
58
+
59
+ basic-carousel [data-carousel-track] > * > p:first-child {
60
+ color: var(--basic-color-text-muted);
61
+ font-size: 0.875rem;
62
+ font-weight: 700;
63
+ letter-spacing: 0.06em;
64
+ text-transform: uppercase;
65
+ }
66
+
67
+ basic-carousel [data-carousel-track] > * > a {
68
+ color: inherit;
69
+ font-weight: 600;
70
+ }
71
+
72
+ @supports (scroll-marker-group: after) {
73
+ basic-carousel {
74
+ display: grid;
75
+ grid-template-columns: auto minmax(0, 1fr) auto;
76
+ grid-template-rows: minmax(0, auto) auto;
77
+ gap: var(--basic-carousel-controls-gap);
78
+ align-items: start;
79
+ }
80
+
81
+ basic-carousel:is([data-basic-carousel-controls="markers"], [data-basic-carousel-controls="none"]) {
82
+ grid-template-columns: minmax(0, 1fr);
83
+ }
84
+
85
+ basic-carousel [data-carousel-track] {
86
+ grid-column: 1 / -1;
87
+ grid-row: 1;
88
+ scroll-marker-group: after;
89
+ }
90
+
91
+ basic-carousel:is([data-basic-carousel-controls="markers"], [data-basic-carousel-controls="none"]) [data-carousel-track] {
92
+ grid-column: 1;
93
+ }
94
+
95
+ basic-carousel:is([data-basic-carousel-controls="arrows"], [data-basic-carousel-controls="none"]) [data-carousel-track] {
96
+ scroll-marker-group: none;
97
+ }
98
+
99
+ basic-carousel [data-carousel-track]::scroll-button(inline-start),
100
+ basic-carousel [data-carousel-track]::scroll-button(inline-end) {
101
+ display: inline-flex;
102
+ align-items: center;
103
+ align-self: center;
104
+ justify-content: center;
105
+ inline-size: var(--basic-carousel-button-size);
106
+ block-size: var(--basic-carousel-button-size);
107
+ margin: 0;
108
+ padding: 0;
109
+ border: var(--basic-border-width) solid var(--basic-color-border);
110
+ border-radius: var(--basic-radius-pill);
111
+ background: var(--basic-color-surface);
112
+ color: inherit;
113
+ cursor: pointer;
114
+ grid-row: 2;
115
+ }
116
+
117
+ basic-carousel:is([data-basic-carousel-controls="markers"], [data-basic-carousel-controls="none"]) [data-carousel-track]::scroll-button(inline-start),
118
+ basic-carousel:is([data-basic-carousel-controls="markers"], [data-basic-carousel-controls="none"]) [data-carousel-track]::scroll-button(inline-end) {
119
+ display: none;
120
+ }
121
+
122
+ basic-carousel [data-carousel-track]::scroll-button(inline-start) {
123
+ content: "<" / "Previous slide";
124
+ grid-column: 1;
125
+ justify-self: end;
126
+ }
127
+
128
+ basic-carousel [data-carousel-track]::scroll-button(inline-end) {
129
+ content: ">" / "Next slide";
130
+ grid-column: 3;
131
+ justify-self: start;
132
+ }
133
+
134
+ basic-carousel [data-carousel-track]::scroll-button(*):disabled {
135
+ opacity: 0.45;
136
+ cursor: not-allowed;
137
+ }
138
+
139
+ basic-carousel [data-carousel-track]::scroll-marker-group {
140
+ display: flex;
141
+ flex-wrap: nowrap;
142
+ align-items: center;
143
+ align-self: center;
144
+ justify-content: center;
145
+ gap: var(--basic-space-2);
146
+ min-block-size: var(--basic-carousel-button-size);
147
+ grid-column: 2;
148
+ grid-row: 2;
149
+ }
150
+
151
+ basic-carousel[data-basic-carousel-controls="markers"] [data-carousel-track]::scroll-marker-group {
152
+ grid-column: 1;
153
+ }
154
+
155
+ basic-carousel:is([data-basic-carousel-controls="arrows"], [data-basic-carousel-controls="none"]) [data-carousel-track]::scroll-marker-group {
156
+ display: none;
157
+ }
158
+
159
+ basic-carousel [data-carousel-track] > *::scroll-marker {
160
+ content: attr(data-basic-carousel-marker) / attr(data-basic-carousel-marker-label);
161
+ display: inline-flex;
162
+ align-items: center;
163
+ justify-content: center;
164
+ min-inline-size: var(--basic-carousel-marker-size);
165
+ block-size: var(--basic-carousel-marker-size);
166
+ padding-inline: var(--basic-space-2);
167
+ border: var(--basic-border-width) solid var(--basic-color-border);
168
+ border-radius: var(--basic-radius-pill);
169
+ background: var(--basic-color-surface);
170
+ color: inherit;
171
+ font-size: 0.875rem;
172
+ font-weight: 600;
173
+ }
174
+
175
+ basic-carousel:is([data-basic-carousel-controls="arrows"], [data-basic-carousel-controls="none"]) [data-carousel-track] > *::scroll-marker {
176
+ content: none;
177
+ }
178
+
179
+ basic-carousel [data-carousel-track] > *::scroll-marker:target-current {
180
+ border-color: var(--basic-color-border-selected);
181
+ background: var(--basic-color-surface-selected);
182
+ }
183
+ }
@@ -0,0 +1,41 @@
1
+ basic-dialog {
2
+ --basic-dialog-control-gap: var(--basic-space-2);
3
+ --basic-dialog-panel-gap: var(--basic-flow-space);
4
+ --basic-dialog-panel-padding: var(--basic-panel-padding);
5
+ }
6
+
7
+ basic-dialog [data-dialog-open],
8
+ basic-dialog [data-dialog-close] {
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+ gap: var(--basic-dialog-control-gap);
13
+ padding: var(--basic-control-padding-block) var(--basic-control-padding-inline);
14
+ border: var(--basic-border-width) solid var(--basic-color-border);
15
+ border-radius: var(--basic-radius-pill);
16
+ background: var(--basic-color-surface);
17
+ color: inherit;
18
+ cursor: pointer;
19
+ }
20
+
21
+ basic-dialog [data-dialog-panel] {
22
+ width: min(var(--basic-dialog-width, 32rem), var(--basic-dialog-max-width, calc(100vw - 2rem)));
23
+ max-width: var(--basic-dialog-max-width, calc(100vw - 2rem));
24
+ padding: var(--basic-dialog-panel-padding);
25
+ border: var(--basic-border-width) solid var(--basic-color-border);
26
+ border-radius: var(--basic-radius);
27
+ background: var(--basic-color-surface);
28
+ }
29
+
30
+ basic-dialog [data-dialog-panel] > :where(*) {
31
+ margin-block: 0;
32
+ }
33
+
34
+ basic-dialog [data-dialog-panel] > :where(* + *) {
35
+ margin-block-start: var(--basic-dialog-panel-gap);
36
+ }
37
+
38
+ basic-dialog [data-dialog-title] {
39
+ font-size: var(--basic-font-size-title);
40
+ line-height: 1.2;
41
+ }
@@ -0,0 +1,52 @@
1
+ basic-popover {
2
+ --basic-popover-control-gap: var(--basic-space-2);
3
+ --basic-popover-panel-gap: var(--basic-flow-space);
4
+ --basic-popover-panel-padding: var(--basic-panel-padding);
5
+ display: inline-block;
6
+ }
7
+
8
+ basic-popover [data-popover-open],
9
+ basic-popover [data-popover-close] {
10
+ --basic-interaction-surface-selected: var(--basic-color-surface-muted);
11
+ --basic-interaction-border-selected: var(--basic-color-border);
12
+ display: inline-flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ gap: var(--basic-popover-control-gap);
16
+ padding: var(--basic-control-padding-block) var(--basic-control-padding-inline);
17
+ border: var(--basic-border-width) solid var(--basic-color-border);
18
+ border-radius: var(--basic-radius-pill);
19
+ background: var(--basic-color-surface);
20
+ color: inherit;
21
+ cursor: pointer;
22
+ }
23
+
24
+ basic-popover [data-popover-panel] {
25
+ width: min(var(--basic-popover-width, 20rem), var(--basic-popover-max-width, calc(100vw - 2rem)));
26
+ max-width: var(--basic-popover-max-width, calc(100vw - 2rem));
27
+ padding: var(--basic-popover-panel-padding);
28
+ border: var(--basic-border-width) solid var(--basic-color-border);
29
+ border-radius: var(--basic-radius);
30
+ background: var(--basic-color-surface);
31
+ color: inherit;
32
+ }
33
+
34
+ basic-popover [data-popover-panel] > :where(*) {
35
+ margin-block: 0;
36
+ }
37
+
38
+ basic-popover [data-popover-panel] > :where(* + *) {
39
+ margin-block-start: var(--basic-popover-panel-gap);
40
+ }
41
+
42
+ basic-popover [data-popover-panel] label {
43
+ display: flex;
44
+ align-items: center;
45
+ gap: var(--basic-space-2);
46
+ color: var(--basic-color-text-muted);
47
+ }
48
+
49
+ basic-popover [data-popover-title] {
50
+ font-size: var(--basic-font-size-title);
51
+ line-height: 1.2;
52
+ }
@@ -0,0 +1,98 @@
1
+ basic-summary-table {
2
+ --basic-summary-table-caption-gap: var(--basic-flow-space);
3
+ --basic-summary-table-cell-padding-block: var(--basic-space-3);
4
+ --basic-summary-table-cell-padding-inline: var(--basic-space-4);
5
+ --basic-summary-table-row-background-zebra: color-mix(
6
+ in oklch,
7
+ var(--basic-color-surface-muted) 48%,
8
+ var(--basic-color-surface)
9
+ );
10
+
11
+ display: block;
12
+ overflow-x: auto;
13
+ }
14
+
15
+ basic-summary-table table {
16
+ width: 100%;
17
+ min-width: var(--basic-summary-table-min-width, 32rem);
18
+ border-collapse: collapse;
19
+ border: var(--basic-border-width) solid var(--basic-color-border);
20
+ background: var(--basic-color-surface);
21
+ }
22
+
23
+ basic-summary-table caption {
24
+ margin-bottom: var(--basic-summary-table-caption-gap);
25
+ color: var(--basic-color-text);
26
+ font-weight: 700;
27
+ text-align: left;
28
+ }
29
+
30
+ basic-summary-table tr {
31
+ text-align: right;
32
+
33
+ *:first-child {
34
+ text-align: left;
35
+ }
36
+ }
37
+
38
+ basic-summary-table th,
39
+ basic-summary-table td {
40
+ padding: var(--basic-summary-table-cell-padding-block) var(--basic-summary-table-cell-padding-inline);
41
+ border: 0 solid var(--basic-color-border);
42
+ vertical-align: top;
43
+ }
44
+
45
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) th,
46
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) td {
47
+ border-block-end-width: var(--basic-border-width);
48
+ }
49
+
50
+ basic-summary-table:is([data-separators="columns"], [data-separators="both"]) tr > :is(th, td):not(:last-child) {
51
+ border-inline-end-width: var(--basic-border-width);
52
+ }
53
+
54
+ basic-summary-table td {
55
+ font-variant-numeric: tabular-nums;
56
+ }
57
+
58
+ basic-summary-table thead th {
59
+ background: var(--basic-color-surface-muted);
60
+ font-weight: 700;
61
+ }
62
+
63
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tbody tr:last-child th,
64
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tbody tr:last-child td {
65
+ border-block-end-width: 0;
66
+ }
67
+
68
+ basic-summary-table tbody th {
69
+ font-weight: 600;
70
+ }
71
+
72
+ basic-summary-table[data-zebra] tbody tr:nth-child(even) > :is(th, td) {
73
+ background: var(--basic-summary-table-row-background-zebra);
74
+ }
75
+
76
+ basic-summary-table tbody td {
77
+ color: var(--basic-color-text-muted);
78
+ }
79
+
80
+ basic-summary-table tfoot th,
81
+ basic-summary-table tfoot td {
82
+ border-block-end: 0;
83
+ background: var(--basic-color-surface-muted);
84
+ font-weight: 700;
85
+ }
86
+
87
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tfoot th,
88
+ basic-summary-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tfoot td {
89
+ border-block-start: calc(var(--basic-border-width) * 2) solid var(--basic-color-border);
90
+ }
91
+
92
+ basic-summary-table tfoot td[data-summary-empty] {
93
+ color: var(--basic-color-text-muted);
94
+ }
95
+
96
+ basic-summary-table tfoot td[data-summary-total] {
97
+ color: inherit;
98
+ }
@@ -0,0 +1,66 @@
1
+ basic-table {
2
+ --basic-table-caption-gap: var(--basic-flow-space);
3
+ --basic-table-cell-padding-block: var(--basic-space-3);
4
+ --basic-table-cell-padding-inline: var(--basic-space-4);
5
+ --basic-table-row-background-zebra: color-mix(
6
+ in oklch,
7
+ var(--basic-color-surface-muted) 48%,
8
+ var(--basic-color-surface)
9
+ );
10
+ display: block;
11
+ overflow-x: auto;
12
+ }
13
+
14
+ basic-table table {
15
+ width: 100%;
16
+ min-width: var(--basic-table-min-width, 32rem);
17
+ border-collapse: collapse;
18
+ border: var(--basic-border-width) solid var(--basic-color-border);
19
+ background: var(--basic-color-surface);
20
+ }
21
+
22
+ basic-table caption {
23
+ margin-bottom: var(--basic-table-caption-gap);
24
+ color: var(--basic-color-text);
25
+ font-weight: 700;
26
+ text-align: left;
27
+ }
28
+
29
+ basic-table th,
30
+ basic-table td {
31
+ padding: var(--basic-table-cell-padding-block) var(--basic-table-cell-padding-inline);
32
+ border: 0 solid var(--basic-color-border);
33
+ vertical-align: top;
34
+ text-align: left;
35
+ }
36
+
37
+ basic-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) th,
38
+ basic-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) td {
39
+ border-block-end-width: var(--basic-border-width);
40
+ }
41
+
42
+ basic-table:is([data-separators="columns"], [data-separators="both"]) tr > :is(th, td):not(:last-child) {
43
+ border-inline-end-width: var(--basic-border-width);
44
+ }
45
+
46
+ basic-table thead th {
47
+ background: var(--basic-color-surface-muted);
48
+ font-weight: 700;
49
+ }
50
+
51
+ basic-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tbody tr:last-child th,
52
+ basic-table:is(:not([data-separators]), [data-separators="rows"], [data-separators="both"]) tbody tr:last-child td {
53
+ border-block-end-width: 0;
54
+ }
55
+
56
+ basic-table tbody th {
57
+ font-weight: 600;
58
+ }
59
+
60
+ basic-table[data-zebra] tbody tr:nth-child(even) > :is(th, td) {
61
+ background: var(--basic-table-row-background-zebra);
62
+ }
63
+
64
+ basic-table tbody td {
65
+ color: var(--basic-color-text-muted);
66
+ }
@@ -0,0 +1,61 @@
1
+ basic-tabs {
2
+ --basic-tabs-list-gap: var(--basic-space-1);
3
+ --basic-tabs-list-padding-inline: var(--basic-space-2);
4
+ --basic-tabs-list-padding-block-start: var(--basic-space-2);
5
+ --basic-tabs-panel-padding: var(--basic-panel-padding);
6
+ --basic-tabs-panel-background: var(--basic-color-surface-selected);
7
+ --basic-tabs-panel-border: var(--basic-color-border-selected);
8
+ display: grid;
9
+ gap: 0;
10
+ }
11
+
12
+ basic-tabs [data-tabs-list] {
13
+ display: flex;
14
+ flex-wrap: wrap;
15
+ align-items: flex-end;
16
+ gap: var(--basic-tabs-list-gap);
17
+ padding-inline: var(--basic-tabs-list-padding-inline);
18
+ padding-block-start: var(--basic-tabs-list-padding-block-start);
19
+ }
20
+
21
+ basic-tabs [data-tab] {
22
+ --basic-interaction-text-rest: var(--basic-color-text-muted);
23
+ --basic-interaction-text-hover: var(--basic-color-text);
24
+ --basic-interaction-text-active: var(--basic-color-text);
25
+ --basic-interaction-text-selected: var(--basic-color-text);
26
+ display: inline-flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ margin: 0;
30
+ padding: var(--basic-control-padding-block) var(--basic-control-padding-inline);
31
+ border: var(--basic-border-width) solid var(--basic-color-border);
32
+ border-radius: var(--basic-radius) var(--basic-radius) 0 0;
33
+ background: transparent;
34
+ cursor: pointer;
35
+ position: relative;
36
+ z-index: 1;
37
+ }
38
+
39
+ basic-tabs [data-tab][aria-selected="true"] {
40
+ border-bottom-color: var(--basic-tabs-panel-background);
41
+ font-weight: 600;
42
+ z-index: 2;
43
+ }
44
+
45
+ basic-tabs [data-tab-panel] {
46
+ margin-block-start: calc(var(--basic-border-width) * -1);
47
+ padding: var(--basic-tabs-panel-padding);
48
+ border: var(--basic-border-width) solid var(--basic-tabs-panel-border);
49
+ border-radius: var(--basic-radius);
50
+ background: var(--basic-tabs-panel-background);
51
+ position: relative;
52
+ z-index: 0;
53
+ }
54
+
55
+ basic-tabs [data-tab-panel] > :where(*) {
56
+ margin-block: 0;
57
+ }
58
+
59
+ basic-tabs [data-tab-panel] > :where(* + *) {
60
+ margin-block-start: var(--basic-flow-space);
61
+ }