vanilla-jui 1.7.10 → 1.7.11

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 (62) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/index.umd.js +1 -1
  3. package/dist/style.css +1 -1
  4. package/package.json +1 -1
  5. package/src/components/accordion.ts +1 -1
  6. package/src/components/flow.ts +1 -1
  7. package/src/components/form.ts +1 -1
  8. package/src/components/modal.ts +1 -1
  9. package/src/css/index.css +1 -2
  10. package/src/css/layout.css +156 -63
  11. package/src/css/status.css +0 -1
  12. package/src/css/themes/default/accordion.css +37 -1
  13. package/src/css/themes/default/avatar.css +23 -1
  14. package/src/css/themes/default/badge.css +20 -3
  15. package/src/css/themes/default/breadcrumb.css +65 -1
  16. package/src/css/themes/default/button.css +64 -11
  17. package/src/css/themes/default/drop.css +19 -1
  18. package/src/css/themes/default/editor.css +781 -7
  19. package/src/css/themes/default/form.css +650 -2
  20. package/src/css/themes/default/index.css +17 -14
  21. package/src/css/themes/default/loading.css +144 -2
  22. package/src/css/themes/default/menu.css +113 -125
  23. package/src/css/themes/default/modal.css +26 -4
  24. package/src/css/themes/default/offcanvas.css +19 -1
  25. package/src/css/themes/default/pagination.css +13 -1
  26. package/src/css/themes/default/swiper.css +99 -1
  27. package/src/css/themes/default/tabs.css +50 -1
  28. package/src/css/themes/default/theme-palette.css +24 -1
  29. package/src/css/themes/default/tip.css +36 -1
  30. package/src/css/themes/default/toast.css +42 -1
  31. package/src/css/themes/default/toolbar.css +29 -1
  32. package/src/css/themes/default/tooltip.css +8 -2
  33. package/src/css/themes/default/tree.css +40 -3
  34. package/src/css/accordion.css +0 -47
  35. package/src/css/avatar.css +0 -27
  36. package/src/css/badge.css +0 -8
  37. package/src/css/breadcrumb.css +0 -71
  38. package/src/css/button.css +0 -32
  39. package/src/css/components.css +0 -28
  40. package/src/css/divider.css +0 -9
  41. package/src/css/drop.css +0 -21
  42. package/src/css/editor.css +0 -794
  43. package/src/css/form.css +0 -657
  44. package/src/css/loading.css +0 -150
  45. package/src/css/menu.css +0 -74
  46. package/src/css/modal.css +0 -33
  47. package/src/css/offcanvas.css +0 -23
  48. package/src/css/pagination.css +0 -15
  49. package/src/css/popup.css +0 -66
  50. package/src/css/skeleton.css +0 -72
  51. package/src/css/swiper.css +0 -107
  52. package/src/css/tabs.css +0 -58
  53. package/src/css/tag.css +0 -36
  54. package/src/css/theme-palette.css +0 -28
  55. package/src/css/themes/default/popup.css +0 -7
  56. package/src/css/themes/default/tag.css +0 -85
  57. package/src/css/tip.css +0 -40
  58. package/src/css/toast.css +0 -54
  59. package/src/css/toolbar.css +0 -34
  60. package/src/css/tooltip.css +0 -12
  61. package/src/css/tree.css +0 -51
  62. /package/src/css/{flow.css → themes/default/flow.css} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vanilla-jui",
3
- "version": "1.7.10",
3
+ "version": "1.7.11",
4
4
  "private": false,
5
5
  "description": "A lightweight, reactive, and fully customizable vanilla JS UI library.",
6
6
  "keywords": [
@@ -124,7 +124,7 @@ const DEFAULT_CLASS_NAMES: AccordionClassNames = {
124
124
  root: 'j-accordion',
125
125
  header: 'accordion-header',
126
126
  title: 'header-title',
127
- arrow: 'header-arrow j-button is-icon is-ghost is-sm',
127
+ arrow: 'header-arrow j-button is-ghost is-sm is-icon',
128
128
  panel: 'accordion-panel',
129
129
  content: 'panel-content',
130
130
  };
@@ -330,7 +330,7 @@ const DEFAULT_CLASS_NAMES: FlowClassNames = {
330
330
  button: 'j-button',
331
331
  reset: 'is-ghost flow-reset',
332
332
  back: 'is-ghost flow-back',
333
- next: 'is-primary flow-next',
333
+ next: 'is-solid flow-next',
334
334
  };
335
335
 
336
336
  const FLOW_STEP_RULE = {
@@ -199,7 +199,7 @@ const DEFAULT_CLASS_NAMES: FormClassNames = {
199
199
  helpInvalid: 'is-invalid',
200
200
  buttons: 'form-buttons',
201
201
  button: 'j-button',
202
- submitBtn: 'is-primary',
202
+ submitBtn: 'is-solid',
203
203
  resetBtn: 'is-ghost',
204
204
  input: 'j-input',
205
205
  textarea: 'j-textarea',
@@ -139,7 +139,7 @@ const DEFAULT_CLASS_NAMES: ModalClassNames = {
139
139
  button: 'j-button',
140
140
  closeBtn: 'is-icon is-sm is-ghost',
141
141
  cancelBtn: 'is-ghost',
142
- confirmBtn: 'is-primary',
142
+ confirmBtn: 'is-solid',
143
143
  };
144
144
 
145
145
  function createDefaultText(): ModalText {
package/src/css/index.css CHANGED
@@ -1,4 +1,4 @@
1
- @layer tokens, gradient, layout, icon, font, components, themes, animation, status;
1
+ @layer tokens, layout, animation, gradient, icon, font, components, status;
2
2
 
3
3
  @import url('./tokens.css');
4
4
  @import url('./layout.css');
@@ -7,7 +7,6 @@
7
7
  @import url('./icon.css');
8
8
  @import url('./font.css');
9
9
 
10
- @import url('./components.css');
11
10
  @import url('./themes/index.css');
12
11
 
13
12
  @import url('./status.css');
@@ -19,6 +19,11 @@
19
19
  color-scheme: dark;
20
20
  }
21
21
 
22
+ html,
23
+ body {
24
+ height: 100%;
25
+ }
26
+
22
27
  body {
23
28
  tab-size: 4;
24
29
  scroll-behavior: smooth;
@@ -27,7 +32,7 @@
27
32
  Arial, sans-serif;
28
33
  color: var(--ui-fg);
29
34
  background-color: var(--ui-bg);
30
- min-width: var(--screen-xs, 320px);
35
+ min-width: 320px;
31
36
  font-size: var(--font-size-md);
32
37
  margin: 0;
33
38
  }
@@ -142,10 +147,10 @@
142
147
  }
143
148
 
144
149
  /* ==============================
145
- * 响应式 Flex 布局系统
146
- * 列类名 flex-col-* 避免与 Tailwind 冲突
147
- * 建议:Flex 更适合一维排列(如导航、表单)
148
- * ============================ */
150
+ * 响应式 Flex 布局系统
151
+ * 列类名 flex-col-* 避免与 Tailwind 冲突
152
+ * 建议:Flex 更适合一维排列(如导航、表单)
153
+ * ============================ */
149
154
 
150
155
  /* 容器:居中 + 最大宽度 */
151
156
  .container {
@@ -272,8 +277,8 @@
272
277
  }
273
278
 
274
279
  /* ============================================
275
- 小屏幕 sm (≥576px)
276
- ============================================ */
280
+ 小屏幕 sm (≥576px)
281
+ ============================================ */
277
282
  @media (min-width: 576px) {
278
283
  .flex-col-sm-1 {
279
284
  --span: 1;
@@ -325,8 +330,8 @@
325
330
  }
326
331
 
327
332
  /* ============================================
328
- 中屏幕 md (≥768px)
329
- ============================================ */
333
+ 中屏幕 md (≥768px)
334
+ ============================================ */
330
335
  @media (min-width: 768px) {
331
336
  .flex-col-md-1 {
332
337
  --span: 1;
@@ -378,8 +383,8 @@
378
383
  }
379
384
 
380
385
  /* ============================================
381
- 大屏幕 lg (≥992px)
382
- ============================================ */
386
+ 大屏幕 lg (≥992px)
387
+ ============================================ */
383
388
  @media (min-width: 992px) {
384
389
  .flex-col-lg-1 {
385
390
  --span: 1;
@@ -431,8 +436,8 @@
431
436
  }
432
437
 
433
438
  /* ============================================
434
- 超大屏幕 xl (≥1200px)
435
- ============================================ */
439
+ 超大屏幕 xl (≥1200px)
440
+ ============================================ */
436
441
  @media (min-width: 1200px) {
437
442
  .flex-col-xl-1 {
438
443
  --span: 1;
@@ -484,8 +489,8 @@
484
489
  }
485
490
 
486
491
  /* ============================================
487
- 超大屏幕 xxl (≥1400px) - 可选
488
- ============================================ */
492
+ 超大屏幕 xxl (≥1400px) - 可选
493
+ ============================================ */
489
494
  @media (min-width: 1400px) {
490
495
  .flex-col-xxl-1 {
491
496
  --span: 1;
@@ -537,10 +542,10 @@
537
542
  }
538
543
 
539
544
  /* ==============================
540
- * 响应式 Grid 布局系统
541
- * 类名前缀 grid- 避免命名冲突
542
- * 建议:Grid 更适合二维布局(如卡片网格、仪表盘)
543
- * ============================== */
545
+ * 响应式 Grid 布局系统
546
+ * 类名前缀 grid- 避免命名冲突
547
+ * 建议:Grid 更适合二维布局(如卡片网格、仪表盘)
548
+ * ============================== */
544
549
 
545
550
  /* Grid 容器:自动 gap + 响应式列 */
546
551
  .grid-container {
@@ -601,9 +606,9 @@
601
606
  }
602
607
 
603
608
  /*
604
- * 自动填充:最小宽度 + 自适应列数
605
- * 建议:grid-cols-auto-* 用于自适应卡片布局(如商品列表),非常实用。
606
- */
609
+ * 自动填充:最小宽度 + 自适应列数
610
+ * 建议:grid-cols-auto-* 用于自适应卡片布局(如商品列表),非常实用。
611
+ */
607
612
  .grid-col-auto-150 {
608
613
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
609
614
  }
@@ -793,84 +798,172 @@
793
798
  aspect-ratio: auto;
794
799
  }
795
800
 
796
- /* columns */
797
- /* .columns-auto {
798
- columns: auto;
801
+ .w-full {
802
+ width: 100%;
799
803
  }
800
804
 
801
- .columns-6xs {
802
- columns: var(--columns-6xs);
805
+ .w-half {
806
+ width: 50%;
803
807
  }
804
808
 
805
- .columns-5xs {
806
- columns: var(--columns-5xs);
809
+ .w-screen {
810
+ width: 100vw;
807
811
  }
808
812
 
809
- .columns-4xs {
810
- columns: var(--columns-4xs);
813
+ /* ============================================
814
+ Divider
815
+ ============================================ */
816
+ .divider {
817
+ align-self: stretch;
818
+ border-color: currentColor;
819
+ border-left-width: 1px;
820
+ border-top-width: 1px;
821
+ opacity: 0.1;
811
822
  }
812
823
 
813
- .columns-3xs {
814
- columns: var(--columns-3xs);
824
+ /* ============================================
825
+ Skeleton
826
+ ============================================ */
827
+ .j-skeleton {
828
+ display: block;
829
+ width: 100%;
830
+ min-height: var(--el-height-2xs);
831
+ border-radius: var(--radius-sm);
832
+ background: var(--ui-surface-muted);
833
+ color: transparent;
834
+ pointer-events: none;
835
+ user-select: none;
836
+ animation: animate-pulse 1.5s cubic-bezier(0.4, 0, 0.6, 1) infinite;
815
837
  }
816
838
 
817
- .columns-2xs {
818
- columns: var(--columns-2xs);
839
+ .j-skeleton::selection {
840
+ color: transparent;
841
+ background: transparent;
819
842
  }
820
843
 
821
- .columns-xs {
822
- columns: var(--columns-xs);
844
+ .j-skeleton.skeleton-inline {
845
+ display: inline-block;
846
+ width: 8rem;
847
+ vertical-align: middle;
823
848
  }
824
849
 
825
- .columns-sm {
826
- columns: var(--columns-sm);
850
+ .j-skeleton.skeleton-text {
851
+ height: var(--el-height-sm);
852
+ min-height: var(--el-height-sm);
827
853
  }
828
854
 
829
- .columns-md {
830
- columns: var(--columns-md);
855
+ .j-skeleton.skeleton-title {
856
+ width: 60%;
857
+ height: var(--el-height-md);
858
+ min-height: var(--el-height-md);
831
859
  }
832
860
 
833
- .columns-lg {
834
- columns: var(--columns-lg);
861
+ .j-skeleton.skeleton-block {
862
+ height: calc(var(--el-height-md) * 4);
863
+ min-height: calc(var(--el-height-md) * 4);
835
864
  }
836
865
 
837
- .columns-xl {
838
- columns: var(--columns-xl);
866
+ .j-skeleton.skeleton-avatar,
867
+ .j-skeleton.skeleton-circle {
868
+ aspect-ratio: 1;
869
+ border-radius: 999px;
839
870
  }
840
871
 
841
- .columns-2xl {
842
- columns: var(--columns-2xl);
872
+ .j-skeleton.skeleton-avatar {
873
+ width: var(--el-height-md);
874
+ min-height: var(--el-height-md);
843
875
  }
844
876
 
845
- .columns-3xl {
846
- columns: var(--columns-3xl);
877
+ .j-skeleton.skeleton-button {
878
+ width: 5rem;
879
+ min-height: var(--el-height-md);
847
880
  }
848
881
 
849
- .columns-4xl {
850
- columns: var(--columns-4xl);
882
+ .j-skeleton.skeleton-image {
883
+ aspect-ratio: 16 / 9;
884
+ min-height: 0;
851
885
  }
852
886
 
853
- .columns-5xl {
854
- columns: var(--columns-5xl);
887
+ .j-skeleton.skeleton-static,
888
+ .j-skeleton[aria-busy='false'] {
889
+ animation: none;
855
890
  }
856
891
 
857
- .columns-6xl {
858
- columns: var(--columns-6xl);
892
+ @media (prefers-reduced-motion: reduce) {
893
+ .j-skeleton {
894
+ animation: none;
895
+ }
859
896
  }
860
897
 
861
- .columns-7xl {
862
- columns: var(--columns-7xl);
863
- } */
898
+ /* ============================================
899
+ Popup
900
+ ============================================ */
901
+ .j-popup-layout {
902
+ background: var(--ui-popup-bg);
903
+ backdrop-filter: blur(4px);
904
+ padding: var(--s4);
864
905
 
865
- .w-full {
906
+ display: flex;
907
+ position: fixed;
908
+ top: 0;
909
+ left: 0;
866
910
  width: 100%;
911
+ height: 100%;
912
+ z-index: var(--z-popup);
867
913
  }
868
914
 
869
- .w-half {
870
- width: 50%;
915
+ .j-popup-layout,
916
+ .j-popup-layout.is-center,
917
+ .j-popup-layout.is-center-center {
918
+ justify-content: center;
919
+ align-items: center;
871
920
  }
872
921
 
873
- .w-screen {
874
- width: 100vw;
922
+ .j-popup-layout.is-top,
923
+ .j-popup-layout.is-top-center {
924
+ justify-content: center;
925
+ align-items: flex-start;
926
+ }
927
+
928
+ .j-popup-layout.is-bottom,
929
+ .j-popup-layout.is-bottom-center {
930
+ justify-content: center;
931
+ align-items: flex-end;
932
+ }
933
+
934
+ .j-popup-layout.is-left,
935
+ .j-popup-layout.is-left-center {
936
+ justify-content: flex-start;
937
+ align-items: center;
938
+ }
939
+
940
+ .j-popup-layout.is-right,
941
+ .j-popup-layout.is-right-center {
942
+ justify-content: flex-end;
943
+ align-items: center;
944
+ }
945
+
946
+ .j-popup-layout.is-top-left,
947
+ .j-popup-layout.is-left-top {
948
+ justify-content: flex-start;
949
+ align-items: flex-start;
950
+ }
951
+
952
+ .j-popup-layout.is-top-right,
953
+ .j-popup-layout.is-right-top {
954
+ justify-content: flex-end;
955
+ align-items: flex-start;
956
+ }
957
+
958
+ .j-popup-layout.is-bottom-left,
959
+ .j-popup-layout.is-left-bottom {
960
+ justify-content: flex-start;
961
+ align-items: flex-end;
962
+ }
963
+
964
+ .j-popup-layout.is-bottom-right,
965
+ .j-popup-layout.is-right-bottom {
966
+ justify-content: flex-end;
967
+ align-items: flex-end;
875
968
  }
876
969
  }
@@ -53,7 +53,6 @@
53
53
  user-select: none;
54
54
  }
55
55
 
56
- /* [aria-hidden='true'], */
57
56
  [hidden] {
58
57
  display: none;
59
58
  }
@@ -1,7 +1,14 @@
1
- @layer themes {
1
+ @layer components {
2
2
  .j-accordion {
3
3
  --accordion-border: 1px solid var(--ui-border-subtle);
4
4
  --accordion-icon-transform: rotate(0deg);
5
+
6
+ display: flex;
7
+ flex-direction: column;
8
+ }
9
+
10
+ .j-accordion[data-direction='horizontal'] {
11
+ flex-direction: row;
5
12
  }
6
13
 
7
14
  .j-accordion .accordion-header {
@@ -10,6 +17,11 @@
10
17
  font-weight: var(--font-medium);
11
18
  font-size: var(--font-size-md);
12
19
  border-bottom: var(--accordion-border);
20
+
21
+ display: flex;
22
+ align-items: center;
23
+ cursor: pointer;
24
+ user-select: none;
13
25
  }
14
26
 
15
27
  .j-accordion[data-direction='horizontal'] .accordion-header {
@@ -32,8 +44,18 @@
32
44
  border-right: 0;
33
45
  }
34
46
 
47
+ .j-accordion .accordion-header .header-title {
48
+ flex: 1;
49
+ text-align: left;
50
+ }
51
+
35
52
  .j-accordion .accordion-header .header-arrow {
36
53
  transform: var(--accordion-icon-transform);
54
+
55
+ display: flex;
56
+ justify-content: center;
57
+ align-items: center;
58
+ transition: transform 0.3s ease-out;
37
59
  }
38
60
 
39
61
  .j-accordion .accordion-header .header-arrow svg {
@@ -58,6 +80,8 @@
58
80
  margin: 0;
59
81
  font-size: var(--font-size-md);
60
82
  border-bottom: var(--accordion-border);
83
+
84
+ position: relative;
61
85
  }
62
86
 
63
87
  .j-accordion .accordion-panel[aria-hidden='false'] {
@@ -85,5 +109,17 @@
85
109
  .j-accordion .accordion-panel .panel-content {
86
110
  margin: 0;
87
111
  padding: 0 var(--s3) var(--s2);
112
+
113
+ position: relative;
114
+ min-height: inherit;
115
+ }
116
+
117
+ .j-accordion[data-direction='horizontal']
118
+ .accordion-panel[aria-hidden='false']
119
+ .panel-content {
120
+ display: flex;
121
+ flex-direction: column;
122
+ justify-content: center;
123
+ height: 100%;
88
124
  }
89
125
  }
@@ -1,4 +1,4 @@
1
- @layer themes {
1
+ @layer components {
2
2
  .j-avatar {
3
3
  --avatar-size: var(--el-height-md);
4
4
  --avatar-border-radius: var(--radius-sm);
@@ -13,12 +13,23 @@
13
13
  color: var(--avatar-fg);
14
14
  font-size: var(--avatar-font-size);
15
15
  font-weight: var(--avatar-font-weight);
16
+
17
+ display: inline-block;
18
+ vertical-align: middle;
19
+ overflow: hidden;
20
+ user-select: none;
21
+ object-fit: cover;
16
22
  }
17
23
 
18
24
  .j-avatar img {
19
25
  border-radius: var(--avatar-border-radius);
20
26
  }
21
27
 
28
+ .j-avatar img,
29
+ .j-avatar svg {
30
+ margin: 0;
31
+ }
32
+
22
33
  .j-avatar.is-2xs {
23
34
  --avatar-size: var(--el-height-2xs);
24
35
  }
@@ -51,6 +62,17 @@
51
62
  --avatar-bg: var(--tone-subtle);
52
63
  --avatar-fg: var(--tone-solid);
53
64
  --avatar-font-weight: var(--font-medium);
65
+
66
+ display: flex;
67
+ justify-content: center;
68
+ align-items: center;
69
+ }
70
+
71
+ .j-avatar-group {
72
+ display: flex;
73
+ justify-content: center;
74
+ align-items: center;
75
+ flex-wrap: nowrap;
54
76
  }
55
77
 
56
78
  .j-avatar-group .j-avatar {
@@ -1,4 +1,4 @@
1
- @layer themes {
1
+ @layer components {
2
2
  .j-badge {
3
3
  --badge-padding: 0 calc(var(--space) * 1.5);
4
4
  --badge-min-width: 1.25rem;
@@ -23,6 +23,11 @@
23
23
  color: var(--badge-fg);
24
24
  background-color: var(--badge-bg);
25
25
  box-shadow: var(--badge-box-shadow);
26
+
27
+ display: inline-flex;
28
+ justify-content: center;
29
+ align-items: center;
30
+ user-select: none;
26
31
  }
27
32
 
28
33
  .j-badge svg {
@@ -46,18 +51,30 @@
46
51
  --badge-fg: var(--ui-bg);
47
52
  }
48
53
 
49
- .j-badge.is-primary {
54
+ .j-badge.is-solid {
50
55
  --badge-bg: var(--tone-solid);
51
56
  --badge-fg: var(--tone-fg);
52
57
  --badge-border-color: var(--tone-solid);
53
58
  }
54
59
 
55
- .j-badge.is-secondary {
60
+ .j-badge.is-soft {
56
61
  --badge-bg: var(--tone-soft);
57
62
  --badge-fg: var(--tone-text);
58
63
  --badge-border-color: var(--tone-soft);
59
64
  }
60
65
 
66
+ .j-badge.is-wash {
67
+ --badge-bg: var(--tone-wash);
68
+ --badge-fg: var(--tone-text);
69
+ --badge-border-color: var(--tone-wash);
70
+ }
71
+
72
+ .j-badge.is-primary {
73
+ --badge-bg: var(--state-info);
74
+ --badge-fg: var(--state-info-fg);
75
+ --badge-border-color: var(--state-info);
76
+ }
77
+
61
78
  .j-badge.is-success {
62
79
  --badge-bg: var(--state-success);
63
80
  --badge-fg: var(--state-success-fg);
@@ -1,4 +1,4 @@
1
- @layer themes {
1
+ @layer components {
2
2
  .j-breadcrumb {
3
3
  --breadcrumb-font-size: var(--font-size-md);
4
4
  --breadcrumb-fg: var(--ui-fg-muted);
@@ -9,6 +9,42 @@
9
9
 
10
10
  font-size: var(--breadcrumb-font-size);
11
11
  color: var(--breadcrumb-fg);
12
+
13
+ white-space: nowrap;
14
+ user-select: none;
15
+ }
16
+
17
+ .j-breadcrumb > ol,
18
+ .j-breadcrumb > ul {
19
+ display: flex;
20
+ flex-wrap: wrap;
21
+ justify-content: flex-start;
22
+ align-items: flex-start;
23
+ margin: 0;
24
+ padding: 0;
25
+ }
26
+
27
+ .j-breadcrumb > ol li,
28
+ .j-breadcrumb > ul li {
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: center;
32
+ }
33
+
34
+ .j-breadcrumb li + li::before {
35
+ content: '/';
36
+ }
37
+
38
+ .j-breadcrumb.is-dot li + li::before {
39
+ content: '•';
40
+ }
41
+
42
+ .j-breadcrumb.is-arrow li + li::before {
43
+ content: '>';
44
+ }
45
+
46
+ .j-breadcrumb.is-dash li + li::before {
47
+ content: '–';
12
48
  }
13
49
 
14
50
  .j-breadcrumb svg {
@@ -30,17 +66,45 @@
30
66
  gap: var(--space);
31
67
  color: var(--breadcrumb-link-fg);
32
68
  padding: var(--breadcrumb-item-padding);
69
+
70
+ display: flex;
71
+ align-items: center;
72
+ justify-content: center;
73
+ text-decoration: none;
33
74
  }
34
75
 
35
76
  .j-breadcrumb a:hover {
36
77
  --breadcrumb-link-fg: var(--tone-solid);
37
78
  }
38
79
 
80
+ .j-breadcrumb a span {
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+ }
85
+
39
86
  .j-breadcrumb li + li::before {
40
87
  color: var(--breadcrumb-divider-fg);
41
88
  }
42
89
 
43
90
  .j-breadcrumb li.is-active a {
44
91
  --breadcrumb-link-fg: var(--ui-fg-muted);
92
+
93
+ cursor: default;
94
+ pointer-events: none;
95
+ }
96
+
97
+ .j-breadcrumb li:first-child a {
98
+ padding-inline-start: 0;
99
+ }
100
+
101
+ .j-breadcrumb.is-center ul,
102
+ .j-breadcrumb.is-center ol {
103
+ justify-content: center;
104
+ }
105
+
106
+ .j-breadcrumb.is-right ul,
107
+ .j-breadcrumb.is-right ol {
108
+ justify-content: flex-end;
45
109
  }
46
110
  }