vanilla-jui 1.4.0 → 1.4.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 (45) hide show
  1. package/dist/index.d.ts +1 -7
  2. package/dist/index.js +1 -1
  3. package/dist/index.umd.js +1 -1
  4. package/dist/style.css +1 -1
  5. package/package.json +1 -1
  6. package/src/components/offcanvas.ts +5 -44
  7. package/src/css/accordion.css +0 -45
  8. package/src/css/avatar.css +7 -33
  9. package/src/css/badge.css +11 -59
  10. package/src/css/breadcrumb.css +9 -32
  11. package/src/css/button.css +23 -224
  12. package/src/css/drop.css +7 -7
  13. package/src/css/flow.css +1 -1
  14. package/src/css/icon.css +0 -21
  15. package/src/css/index.css +4 -1
  16. package/src/css/loading.css +36 -20
  17. package/src/css/modal.css +15 -44
  18. package/src/css/offcanvas.css +14 -40
  19. package/src/css/popup.css +4 -4
  20. package/src/css/status.css +0 -2
  21. package/src/css/swiper.css +35 -50
  22. package/src/css/tabs.css +9 -32
  23. package/src/css/tag.css +16 -77
  24. package/src/css/themes/default/accordion.css +62 -0
  25. package/src/css/themes/default/avatar.css +39 -0
  26. package/src/css/themes/default/badge.css +63 -0
  27. package/src/css/themes/default/breadcrumb.css +28 -0
  28. package/src/css/themes/default/button.css +204 -0
  29. package/src/css/themes/default/drop.css +11 -0
  30. package/src/css/themes/default/index.css +16 -0
  31. package/src/css/themes/default/loading.css +23 -0
  32. package/src/css/themes/default/modal.css +40 -0
  33. package/src/css/themes/default/offcanvas.css +13 -0
  34. package/src/css/themes/default/popup.css +7 -0
  35. package/src/css/themes/default/swiper.css +35 -0
  36. package/src/css/themes/default/tabs.css +37 -0
  37. package/src/css/themes/default/tag.css +85 -0
  38. package/src/css/themes/default/tip.css +49 -0
  39. package/src/css/themes/default/toast.css +70 -0
  40. package/src/css/themes/default/tooltip.css +14 -0
  41. package/src/css/themes/index.css +1 -0
  42. package/src/css/tip.css +20 -39
  43. package/src/css/toast.css +18 -80
  44. package/src/css/tokens.css +7 -2
  45. package/src/css/tooltip.css +10 -10
@@ -18,7 +18,7 @@ import {
18
18
  } from '../utilities/dom.ts';
19
19
 
20
20
  export type OffcanvasDirection = 'top' | 'right' | 'bottom' | 'left';
21
- export type OffcanvasAnimation = 'slide' | 'push' | 'none';
21
+ export type OffcanvasAnimation = 'slide' | 'none';
22
22
 
23
23
  export interface OffcanvasClassNames {
24
24
  root: string;
@@ -30,13 +30,7 @@ export interface OffcanvasClassNames {
30
30
  bottom: string;
31
31
  left: string;
32
32
  slide: string;
33
- push: string;
34
33
  none: string;
35
- pushBody: string;
36
- pushTop: string;
37
- pushRight: string;
38
- pushBottom: string;
39
- pushLeft: string;
40
34
  }
41
35
 
42
36
  export type OffcanvasClassNameConfig = Partial<OffcanvasClassNames>;
@@ -112,13 +106,7 @@ const DEFAULT_CLASS_NAMES: OffcanvasClassNames = {
112
106
  bottom: 'is-bottom',
113
107
  left: 'is-left',
114
108
  slide: 'is-slide',
115
- push: 'is-push',
116
109
  none: 'is-none',
117
- pushBody: 'offcanvas-push-body',
118
- pushTop: 'offcanvas-push-top',
119
- pushRight: 'offcanvas-push-right',
120
- pushBottom: 'offcanvas-push-bottom',
121
- pushLeft: 'offcanvas-push-left',
122
110
  };
123
111
 
124
112
  const OFFCANVAS_PROPS_SCHEMA = {
@@ -139,7 +127,7 @@ const OFFCANVAS_PROPS_SCHEMA = {
139
127
  animation: {
140
128
  default: 'slide',
141
129
  type: 'string',
142
- enum: ['slide', 'push', 'none'],
130
+ enum: ['slide', 'none'],
143
131
  },
144
132
  bgClose: { default: true, type: 'boolean' },
145
133
  escClose: { default: true, type: 'boolean' },
@@ -373,44 +361,31 @@ export class Offcanvas extends Component<
373
361
  }
374
362
 
375
363
  private renderPanel(): void {
376
- const { overlay, animation, direction, id, className } = this.props;
364
+ const { overlay, id, className } = this.props;
377
365
  const body = document.body;
378
366
 
379
367
  if (overlay && this._overlay) body.appendChild(this._overlay);
380
368
  if (this.dom.root) body.appendChild(this.dom.root);
381
369
 
382
370
  body.style.overflow = 'hidden';
383
- if (animation === 'push') {
384
- body.classList.add(className.pushBody);
385
- }
386
371
 
387
372
  timer.start(`oc-show-${id}`, 10, () => {
388
373
  if (!this.dom.root) return;
389
374
  this._overlay?.classList.add(className.active);
390
- if (animation === 'push') {
391
- body.classList.add(className[`push${capitalizeDirection(direction)}`]);
392
- }
393
375
  this.dom.root.classList.add(className.active);
394
376
  });
395
377
  }
396
378
 
397
379
  private removePanel(): void {
398
- const { animation, direction, id, className } = this.props;
380
+ const { id, className } = this.props;
399
381
  const body = document.body;
400
382
 
401
383
  this._overlay?.classList.remove(className.active);
402
384
  this.dom.root?.classList.remove(className.active);
403
385
 
404
- if (animation === 'push') {
405
- body.classList.remove(className[`push${capitalizeDirection(direction)}`]);
406
- }
407
-
408
386
  timer.start(`oc-remove-${id}`, 100, () => {
409
387
  this._overlay?.remove();
410
388
  this.dom.root?.remove();
411
- if (animation === 'push') {
412
- body.classList.remove(className.pushBody);
413
- }
414
389
  body.style.overflow = '';
415
390
  });
416
391
  }
@@ -458,7 +433,7 @@ export class Offcanvas extends Component<
458
433
  }
459
434
 
460
435
  onDestroy(): void {
461
- const { id, direction, className } = this.props;
436
+ const { id, className } = this.props;
462
437
 
463
438
  timer.cancel(`oc-show-${id}`);
464
439
  timer.cancel(`oc-remove-${id}`);
@@ -472,25 +447,11 @@ export class Offcanvas extends Component<
472
447
 
473
448
  const body = document.body;
474
449
  body.style.overflow = '';
475
- body.classList.remove(
476
- className.pushBody,
477
- className[`push${capitalizeDirection(direction)}`]
478
- );
479
450
 
480
451
  this._overlay = null;
481
452
  }
482
453
  }
483
454
 
484
- function capitalizeDirection(
485
- direction: OffcanvasDirection
486
- ): 'Top' | 'Right' | 'Bottom' | 'Left' {
487
- return `${direction[0].toUpperCase()}${direction.slice(1)}` as
488
- | 'Top'
489
- | 'Right'
490
- | 'Bottom'
491
- | 'Left';
492
- }
493
-
494
455
  export function createOffcanvas(options: OffcanvasProps = {}): Offcanvas {
495
456
  return new Offcanvas(options);
496
457
  }
@@ -1,72 +1,27 @@
1
1
  @layer components {
2
- .j-accordion {
3
- --accordion-border: 1px solid var(--ui-border-subtle);
4
- --accordion-icon-size: var(--font-size-lg);
5
- }
6
-
7
2
  .j-accordion .accordion-header {
8
3
  display: flex;
9
4
  align-items: center;
10
5
  cursor: pointer;
11
- padding: var(--accordion-header-padding,
12
- var(--s2) var(--s3));
13
- margin: var(--accordion-header-margin, 0);
14
- border-bottom: var(--accordion-border);
15
- font-size: var(--accordion-header-font-size, var(--font-size-md));
16
- font-weight: var(--font-medium);
17
6
  user-select: none;
18
7
  }
19
8
 
20
- .j-accordion .accordion-header:hover:not(.is-active) {
21
- background: var(--accordion-header-hover-background, var(--ui-surface-hover));
22
- }
23
-
24
- .j-accordion .accordion-header.is-active {
25
- border-color: transparent;
26
- }
27
-
28
9
  .j-accordion .accordion-header .header-title {
29
10
  flex: 1;
30
11
  text-align: left;
31
- font-size: var(--accordion-title-font-size, var(--font-size-md));
32
- }
33
-
34
- .j-accordion .accordion-header.is-active .header-title {
35
- font-weight: var(--font-bold);
36
12
  }
37
13
 
38
14
  .j-accordion .accordion-header .header-arrow {
39
15
  display: flex;
40
16
  justify-content: center;
41
17
  align-items: center;
42
- width: var(--accordion-icon-size);
43
- height: var(--accordion-icon-size);
44
- transition: transform 0.3s ease-out;
45
- transform: rotate(0deg);
46
- }
47
-
48
- .j-accordion .accordion-header.is-active .header-arrow {
49
- transform: rotate(180deg);
50
18
  }
51
19
 
52
20
  .j-accordion .accordion-panel {
53
21
  display: none;
54
- margin: 0;
55
22
  }
56
23
 
57
24
  .j-accordion .accordion-panel.is-active {
58
25
  display: block;
59
26
  }
60
-
61
- .j-accordion .accordion-panel .panel-content {
62
- margin: var(--accordion-panel-content-margin, 0);
63
- padding: var(--accordion-panel-content-padding,
64
- 0 var(--s3) var(--s2));
65
- border-bottom: var(--accordion-border);
66
- font-size: var(--accordion-font-size, var(--font-size-md));
67
- }
68
-
69
- .j-accordion .accordion-panel:last-child .panel-content {
70
- border-bottom: none;
71
- }
72
27
  }
@@ -1,16 +1,19 @@
1
1
  @layer components {
2
2
  .j-avatar {
3
- --avatar-size: var(--el-height-md);
4
-
5
3
  display: inline-block;
6
4
  vertical-align: middle;
7
- border-radius: var(--avatar-border-radius, var(--radius-md));
8
5
  width: var(--avatar-size);
9
6
  height: var(--avatar-size);
10
7
  overflow: hidden;
11
8
  user-select: none;
12
9
  object-fit: cover;
13
- box-shadow: var(--avatar-box-shadow, var(--shadow-sm));
10
+ box-shadow: var(--avatar-box-shadow);
11
+ border: var(--avatar-border);
12
+ border-radius: var(--avatar-border-radius);
13
+ background: var(--avatar-bg);
14
+ color: var(--avatar-fg);
15
+ font-size: var(--avatar-font-size);
16
+ font-weight: var(--avatar-font-weight);
14
17
  }
15
18
 
16
19
  .j-avatar img,
@@ -18,22 +21,7 @@
18
21
  margin: 0;
19
22
  }
20
23
 
21
- .j-avatar.is-sm {
22
- --avatar-size: var(--el-height-2xs);
23
- }
24
-
25
- .j-avatar.is-lg {
26
- --avatar-size: var(--el-height-lg);
27
- }
28
-
29
- .j-avatar.is-round {
30
- border-radius: 0.5rem;
31
- }
32
-
33
24
  .j-avatar.is-text {
34
- background-color: var(--tone-subtle);
35
- color: var(--tone-solid);
36
- font-weight: var(--font-medium);
37
25
  display: flex;
38
26
  justify-content: center;
39
27
  align-items: center;
@@ -45,18 +33,4 @@
45
33
  align-items: center;
46
34
  flex-wrap: nowrap;
47
35
  }
48
-
49
- .j-avatar-group .j-avatar {
50
- border: 1.5px solid var(--avatar-border-color, var(--ui-bg));
51
- }
52
-
53
- .j-avatar-group .j-avatar:not(:first-child) {
54
- margin-inline-start: calc(var(--space) * -3);
55
- }
56
-
57
- .j-avatar-group .j-avatar:last-child {
58
- font-size: var(--font-size-sm, 0.75rem);
59
- background-color: var(--ui-bg);
60
- box-shadow: var(--avatar-box-shadow, var(--shadow-sm));
61
- }
62
36
  }
package/src/css/badge.css CHANGED
@@ -3,64 +3,16 @@
3
3
  display: inline-flex;
4
4
  justify-content: center;
5
5
  align-items: center;
6
- padding: 0 var(--badge-padding, calc(var(--space) * 1.5));
7
- min-width: var(--badge-min-width, 1.25rem);
8
- height: var(--badge-height, 1.25rem);
9
- line-height: var(--badge-line-height, var(--line-height-self));
10
- font-size: var(--badge-font-size, var(--font-size-sm));
11
- font-weight: var(--badge-font-weight, var(--font-medium));
12
- border-radius: var(--badge-radius, 500px);
13
- border: 1px solid var(--badge-border-color, var(--ui-border));
14
- color: var(--badge-color, var(--ui-fg));
15
- background-color: var(--badge-background, var(--ui-bg));
16
- box-shadow: var(--badge-box-shadow, none);
17
- }
18
-
19
- .j-badge.is-sm {
20
- --badge-padding: calc(var(--space) * 0.75);
21
- --badge-min-width: 1rem;
22
- --badge-height: 1rem;
23
- --badge-font-size: 0.625rem;
24
- }
25
-
26
- .j-badge.is-contrast {
27
- --badge-background: var(--ui-fg);
28
- --badge-color: var(--ui-bg);
29
- }
30
-
31
- .j-badge.is-primary {
32
- --badge-background: var(--tone-solid);
33
- --badge-color: var(--tone-fg);
34
- --badge-border-color: var(--tone-solid);
35
- }
36
-
37
- .j-badge.is-secondary {
38
- --badge-background: var(--tone-soft);
39
- --badge-color: var(--tone-text);
40
- --badge-border-color: var(--tone-soft);
41
- }
42
-
43
- .j-badge.is-success {
44
- --badge-background: var(--state-success);
45
- --badge-color: var(--state-success-fg);
46
- --badge-border-color: var(--state-success);
47
- }
48
-
49
- .j-badge.is-warning {
50
- --badge-background: var(--state-warning);
51
- --badge-color: var(--state-warning-fg);
52
- --badge-border-color: var(--state-warning);
53
- }
54
-
55
- .j-badge.is-danger {
56
- --badge-background: var(--state-danger);
57
- --badge-color: var(--state-danger-fg);
58
- --badge-border-color: var(--state-danger);
59
- }
60
-
61
- .j-badge.is-error {
62
- --badge-border-color: var(--state-danger-subtle);
63
- --badge-background: var(--state-danger-subtle);
64
- --badge-color: var(--state-danger-text);
6
+ padding: var(--badge-padding);
7
+ min-width: var(--badge-min-width);
8
+ height: var(--badge-height);
9
+ line-height: var(--badge-line-height);
10
+ font-size: var(--badge-font-size);
11
+ font-weight: var(--badge-font-weight);
12
+ border-radius: var(--badge-radius);
13
+ border: 1px solid var(--badge-border-color);
14
+ color: var(--badge-fg);
15
+ background-color: var(--badge-bg);
16
+ box-shadow: var(--badge-box-shadow);
65
17
  }
66
18
  }
@@ -1,33 +1,15 @@
1
1
  @layer components {
2
2
 
3
- .j-breadcrumb,
4
- .j-breadcrumb.is-md {
5
- font-size: var(--breadcrumb-font-size, var(--font-size-md));
6
- color: var(--breadcrumb-color, var(--ui-fg-muted));
3
+ .j-breadcrumb {
4
+ font-size: var(--breadcrumb-font-size);
5
+ color: var(--breadcrumb-fg);
7
6
  white-space: nowrap;
8
7
  user-select: none;
9
8
  }
10
9
 
11
- .j-breadcrumb.is-sm {
12
- --breadcrumb-font-size: var(--font-size-sm);
13
- }
14
-
15
- .j-breadcrumb.is-lg {
16
- --breadcrumb-font-size: var(--font-size-lg);
17
- }
18
-
19
- .j-breadcrumb svg,
20
- .j-breadcrumb.is-md svg {
21
- width: var(--breadcrumb-icon-size, var(--font-size-md));
22
- height: var(--breadcrumb-icon-size, var(--font-size-md));
23
- }
24
-
25
- .j-breadcrumb.is-sm svg {
26
- --breadcrumb-icon-size: var(--font-size-sm);
27
- }
28
-
29
- .j-breadcrumb.is-lg svg {
30
- --breadcrumb-icon-size: var(--font-size-lg);
10
+ .j-breadcrumb svg {
11
+ width: var(--breadcrumb-icon-size);
12
+ height: var(--breadcrumb-icon-size);
31
13
  }
32
14
 
33
15
  .j-breadcrumb>ol,
@@ -52,7 +34,7 @@
52
34
  }
53
35
 
54
36
  .j-breadcrumb li+li::before {
55
- color: var(--breadcrumb-item-separator-color, var(--ui-fg-soft));
37
+ color: var(--breadcrumb-divider-fg);
56
38
  content: '/';
57
39
  }
58
40
 
@@ -73,15 +55,11 @@
73
55
  align-items: center;
74
56
  justify-content: center;
75
57
  gap: var(--space);
76
- color: var(--breadcrumb-link-color, var(--tone-text));
77
- padding: var(--breadcrumb-item-padding-vertical, 0) var(--breadcrumb-item-padding-horizontal, var(--s2));
58
+ color: var(--breadcrumb-link-fg);
59
+ padding: var(--breadcrumb-item-padding);
78
60
  text-decoration: none;
79
61
  }
80
62
 
81
- .j-breadcrumb a:hover {
82
- color: var(--breadcrumb-link-hover-color, var(--tone-solid));
83
- }
84
-
85
63
  .j-breadcrumb a span {
86
64
  display: flex;
87
65
  align-items: center;
@@ -89,7 +67,6 @@
89
67
  }
90
68
 
91
69
  .j-breadcrumb li.is-active a {
92
- --breadcrumb-link-color: var(--ui-fg-muted);
93
70
  cursor: default;
94
71
  pointer-events: none;
95
72
  }
@@ -4,20 +4,21 @@
4
4
  justify-content: center;
5
5
  align-items: center;
6
6
  flex-wrap: nowrap;
7
- gap: var(--button-gap, var(--space) calc(var(--space) * 1.5));
7
+ gap: var(--btn-gap);
8
8
  position: relative;
9
9
  white-space: nowrap;
10
- font-weight: var(--button-font-weight, var(--font-medium));
11
- font-size: var(--button-font-size, var(--font-size-md));
12
- height: var(--button-height, var(--el-height-md));
13
- line-height: var(--button-line-height, var(--line-height-self));
14
- background-color: var(--button-background, transparent);
15
- padding: var(--button-padding, 0 var(--s3));
16
- border-width: var(--button-border-width, 1px);
17
- border-style: var(--button-border-style, solid);
18
- border-color: var(--button-border-color, transparent);
19
- border-radius: var(--button-border-radius, var(--radius-md));
20
- box-shadow: var(--button-box-shadow, var(--shadow-sm));
10
+ font-weight: var(--btn-font-weight);
11
+ font-size: var(--btn-font-size);
12
+ height: var(--btn-height);
13
+ line-height: var(--btn-line-height);
14
+ color: var(--btn-fg);
15
+ background-color: var(--btn-bg);
16
+ padding: var(--btn-padding);
17
+ border-width: var(--btn-border-width);
18
+ border-style: var(--btn-border-style);
19
+ border-color: var(--btn-border-color);
20
+ border-radius: var(--btn-border-radius);
21
+ box-shadow: var(--btn-box-shadow);
21
22
  appearance: button;
22
23
  user-select: none;
23
24
  touch-action: manipulation;
@@ -29,7 +30,7 @@
29
30
  }
30
31
 
31
32
  .j-button svg {
32
- width: var(--font-size-md);
33
+ width: var(--btn-svg-size);
33
34
  fill: currentColor;
34
35
  }
35
36
 
@@ -38,113 +39,16 @@
38
39
  color: inherit;
39
40
  }
40
41
 
41
- /* size */
42
- .j-button.is-sm {
43
- font-size: var(--font-size-sm);
44
- height: var(--button-height-sm, var(--el-height-sm));
45
- padding: var(--button-padding-sm, var(--space) var(--s2));
46
- }
47
-
48
- .j-button.is-lg {
49
- font-size: var(--font-size-lg);
50
- height: var(--button-height-lg, var(--el-height-lg));
51
- padding: var(--button-padding-lg, var(--s3) var(--s4));
52
- }
53
-
54
- /* variant */
55
- .j-button.is-default {
56
- --button-background: var(--ui-bg);
57
- --button-border-color: var(--ui-border);
58
- color: var(--ui-fg);
59
- }
60
-
61
- .j-button.is-contrast {
62
- --button-background: var(--ui-fg);
63
- color: var(--ui-bg);
64
- }
65
-
66
- .j-button.is-primary {
67
- --button-background: var(--tone-solid);
68
- color: var(--tone-fg);
69
- }
70
-
71
- .j-button.is-secondary {
72
- --button-border-color: transparent;
73
- --button-background: var(--tone-soft);
74
- color: var(--tone-text);
75
- }
76
-
77
- .j-button.is-outline {
78
- --button-background: transparent;
79
- --button-border-color: var(--tone-solid);
80
- color: var(--tone-solid);
81
- }
82
-
83
- .j-button.is-ghost {
84
- --button-box-shadow: none;
85
- transition-property: none;
86
- }
87
-
88
- .j-button.is-text {
89
- --button-border-color: transparent;
90
- height: var(--button-text-height, auto);
91
- padding: var(--button-text-padding, 0);
92
- box-shadow: var(--button-text-box-shadow, none);
93
- }
94
-
95
- .j-button.is-icon {
96
- aspect-ratio: var(--aspect-icon, 1);
97
- padding: var(--icon-padding, 0);
98
- }
99
-
100
- .j-button.is-danger {
101
- --button-background: var(--state-danger);
102
- color: var(--state-danger-fg);
103
- }
104
-
105
- .j-button.is-warning {
106
- --button-background: var(--state-warning);
107
- color: var(--state-warning-fg);
108
- }
109
-
110
- .j-button.is-success {
111
- --button-background: var(--state-success);
112
- color: var(--state-success-fg);
113
- }
114
-
115
- .j-button.is-error {
116
- --button-background: var(--state-danger-subtle);
117
- color: var(--state-danger-text);
118
- }
119
-
120
- .j-button[class*='is-surface-'] {
121
- --button-border-color: var(--ui-border);
122
- color: var(--ui-fg);
123
- }
124
-
125
- .j-button.is-surface-sm {
126
- --button-background: var(--ui-surface-subtle);
127
- }
128
-
129
- .j-button.is-surface-md {
130
- --button-background: var(--ui-surface-muted);
131
- }
132
-
133
- .j-button.is-surface-lg {
134
- --button-background: var(--ui-surface-active);
135
- }
136
-
137
42
  /* group */
138
43
  .j-button-group {
139
- --button-padding: 0 var(--s2);
140
44
  display: flex;
141
45
  margin: 0;
46
+ box-shadow: var(--btn-group-box-shadow);
142
47
  }
143
48
 
144
49
  .j-button-group .j-button:not(:first-child) {
145
50
  border-top-left-radius: 0;
146
51
  border-bottom-left-radius: 0;
147
- /* margin-left: -1px; */
148
52
  }
149
53
 
150
54
  .j-button-group .j-button:not(:last-child) {
@@ -153,8 +57,10 @@
153
57
  }
154
58
 
155
59
  .j-button-group .j-button:not(:first-child):not(:last-child) {
156
- border-block-width: var(--button-border-width, 1px);
157
- border-inline-width: 0;
60
+ border-top-width: var(--btn-border-width);
61
+ border-bottom-width: var(--btn-border-width);
62
+ border-left-width: 0;
63
+ border-right-width: 0;
158
64
  }
159
65
 
160
66
  .j-button-group.is-vertical {
@@ -173,8 +79,10 @@
173
79
  }
174
80
 
175
81
  .j-button-group.is-vertical .j-button:not(:last-child):not(:first-child) {
176
- border-block-width: 0;
177
- border-inline-width: var(--button-border-width, 1px);
82
+ border-left-width: var(--btn-border-width);
83
+ border-right-width: var(--btn-border-width);
84
+ border-top-width: 0;
85
+ border-bottom-width: 0;
178
86
  }
179
87
 
180
88
  .j-button-group.is-vertical .j-button:first-child {
@@ -184,113 +92,4 @@
184
92
  .j-button-group.is-vertical .j-button:last-child {
185
93
  border-bottom-left-radius: var(--radius-md);
186
94
  }
187
-
188
- /* disabled */
189
- .j-button:disabled {
190
- opacity: var(--opacity-disabled, 0.5);
191
- }
192
-
193
- /* status */
194
- .j-button:not(:disabled) {
195
- cursor: pointer;
196
- }
197
-
198
- .j-button:not(:disabled):hover {
199
- opacity: var(--opacity-hover);
200
- }
201
-
202
- .j-button:not(:disabled):active {
203
- opacity: var(--opacity-active);
204
- }
205
-
206
- .j-button:not(:disabled).is-active,
207
- .j-button:not(:disabled):focus-visible {
208
- outline: 2px solid var(--button-ring, var(--tone-solid));
209
- outline-offset: 1px;
210
- border-color: transparent;
211
- }
212
-
213
- .j-button.is-default:hover:not(:disabled) {
214
- background-color: var(--ui-surface-hover);
215
- }
216
-
217
- .j-button.is-outline:hover:not(:disabled),
218
- .j-button.is-ghost:hover:not(:disabled) {
219
- background-color: var(--tone-subtle);
220
- }
221
-
222
- .j-button.is-text:not(:disabled):active,
223
- .j-button.is-text:not(:disabled):focus-visible,
224
- .j-button.is-text:not(:disabled).is-active {
225
- outline: none;
226
- color: var(--tone-solid);
227
- text-decoration: underline;
228
- text-underline-offset: var(--space);
229
- }
230
-
231
- .j-button.is-contrast:not(:disabled):active,
232
- .j-button.is-contrast:not(:disabled):focus-visible {
233
- --button-ring: var(--ui-fg);
234
- }
235
-
236
- .j-button.is-success:not(:disabled):active,
237
- .j-button.is-success:not(:disabled):focus-visible {
238
- --button-ring: var(--state-success);
239
- }
240
-
241
- .j-button.is-warning:not(:disabled):active,
242
- .j-button.is-warning:not(:disabled):focus-visible {
243
- --button-ring: var(--state-warning);
244
- }
245
-
246
- .j-button.is-danger:not(:disabled):active,
247
- .j-button.is-danger:not(:disabled):focus-visible {
248
- --button-ring: var(--state-danger);
249
- }
250
-
251
- .j-button.is-error:not(:disabled):active,
252
- .j-button.is-error:not(:disabled):focus-visible {
253
- --button-ring: var(--state-danger-subtle);
254
- }
255
-
256
- .j-button.is-surface-sm:not(:disabled):active,
257
- .j-button.is-surface-sm:not(:disabled):focus-visible {
258
- --button-ring: var(--ui-surface-hover);
259
- }
260
-
261
- .j-button.is-surface-md:not(:disabled):active,
262
- .j-button.is-surface-md:not(:disabled):focus-visible {
263
- --button-ring: var(--ui-border);
264
- }
265
-
266
- .j-button.is-surface-lg:not(:disabled):active,
267
- .j-button.is-surface-lg:not(:disabled):focus-visible {
268
- --button-ring: var(--ui-border-strong);
269
- }
270
-
271
- .j-button-group .j-button:active,
272
- .j-button-group .j-button:focus-visible {
273
- outline: none;
274
- --button-border-color: transparent;
275
- --button-box-shadow: 0 0 0 2px var(--tone-solid);
276
- z-index: 1;
277
- }
278
-
279
- .j-button-group .j-button.is-primary:not(:disabled):active,
280
- .j-button-group .j-button.is-primary:not(:disabled):focus-visible,
281
- .j-button-group .j-button:focus-within {
282
- outline: 2px solid var(--button-ring, var(--tone-solid));
283
- outline-offset: 1px;
284
- --button-border-color: transparent;
285
- --button-box-shadow: var(--shadow-sm);
286
- }
287
-
288
- .j-button-group .j-button:focus-within {
289
- z-index: 1;
290
- --button-border-color: transparent;
291
- }
292
-
293
- .j-button-group.is-vertical .j-button:focus-within {
294
- z-index: auto
295
- }
296
95
  }