css-zero 4.0.0 → 4.0.2

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 (23) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +15 -0
  3. data/lib/css_zero/version.rb +1 -1
  4. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/accordion.css +6 -3
  5. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/avatar.css +35 -2
  6. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/badge.css +7 -10
  7. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/button.css +2 -2
  8. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/card.css +10 -1
  9. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/combobox.css +11 -2
  10. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/command.css +1 -4
  11. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/datepicker.css +1 -1
  12. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/dialog.css +11 -3
  13. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/list.css +18 -9
  14. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/pagination.css +2 -1
  15. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/popover.css +2 -2
  16. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/progress.css +2 -2
  17. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/separator.css +2 -2
  18. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css +4 -5
  19. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sidebar_menu.css +2 -2
  20. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/switch.css +2 -2
  21. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/tabs.css +2 -2
  22. data/lib/generators/css_zero/add/templates/app/javascript/controllers/sound_controller.js +1 -1
  23. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 04cec12c858b6be6c57e4e48f6a583a72642980a4fd43c2b818d9222511d040f
4
- data.tar.gz: 96f41f6ab36dc4d3eda5ca6e9c733157277ff73cfef80ceb574f79731ca29f74
3
+ metadata.gz: 69a344da6cc617d2132cb91f0ba9912e68194ad31b5d751657c3bb69cd56ffe3
4
+ data.tar.gz: 822f6f73459d60c11e97cb87174419ea533e9d48de2c686b1c9b35b6f58494ea
5
5
  SHA512:
6
- metadata.gz: 9c112fdc7c2b6b92481b1ed64eb893fa49467d9c4fbe793aa8ddfc872a2c175192ffecdfc98af12380e79df78bfcaaa567be8133d0ceb8b673f794520a835ac7
7
- data.tar.gz: 5ef514bc01e61e09a752bd3f0ba31af8ff4c6b041a08bf9126bd8e33e0dce9af395b14883a7f4d39efb1d425c51da7a7cfec64e93e5f58360f0b67b974f75300
6
+ metadata.gz: cd7f4fb30f2d00e6c505736ef0e3434da566997fc451d6d3748b8b5a63c800721eecd747ca4c7688c5ccdd6a355ad9ab4b7182dcc8aefb8a42aabf6c60b6ef76
7
+ data.tar.gz: 0ac061455ac6952b5f7dcbe9fdf6714d4ced0245c75558c56816b5d998c282f09249512551384dbc49a7ebdaef8085596038110071ce7d6e6433498e69d479a8
data/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ ## 4.0.2 - 2026-08-09
2
+ - Introduce --btn-column-gap
3
+ - Add avatar badge
4
+ - Improve badge
5
+ - Introduce --card-padding
6
+ - Remove command group separator
7
+ - Improve list
8
+ - Improve separator
9
+ - Update cuelume to 0.2.2
10
+
11
+ ## 4.0.1 - 2026-08-02
12
+ - Revert spring animations
13
+ - Add .dialog__footer subcomponent
14
+ - Add .card__footer subcomponent
15
+
1
16
  ## 4.0.0 - 2026-07-27
2
17
  - Use CSS variable for OTP input font family
3
18
  - Use CSS only popover (Anchor positioning)
@@ -1,3 +1,3 @@
1
1
  module CssZero
2
- VERSION = "4.0.0"
2
+ VERSION = "4.0.2"
3
3
  end
@@ -1,8 +1,11 @@
1
1
  :where(.accordion) {
2
2
  details {
3
- border-block-end-width: var(--border);
4
3
  font-size: var(--text-sm);
5
4
 
5
+ &:not(:last-child) {
6
+ border-block-end-width: var(--border);
7
+ }
8
+
6
9
  &::details-content {
7
10
  block-size: 0;
8
11
  opacity: 0;
@@ -47,9 +50,9 @@
47
50
  margin-inline-start: auto;
48
51
  mask-image: url("chevron-down.svg");
49
52
  mask-size: cover;
50
- transition-duration: var(--time-300);
53
+ transition-duration: var(--time-200);
51
54
  transition-property: transform;
52
- transition-timing-function: var(--ease-spring-2);
55
+ transition-timing-function: var(--ease-out-3);
53
56
  }
54
57
 
55
58
  details[open] > &::after {
@@ -1,4 +1,6 @@
1
1
  .avatar {
2
+ --avatar-badge-size: calc(var(--avatar-size) * .3125);
3
+ --avatar-box-shadow: 0 0 0 2px var(--color-bg);
2
4
  --avatar-radius: var(--rounded-full);
3
5
  --avatar-size: var(--size-8);
4
6
 
@@ -7,7 +9,7 @@
7
9
  display: flex;
8
10
  flex-shrink: 0;
9
11
  inline-size: var(--avatar-size);
10
- overflow: hidden;
12
+ position: relative;
11
13
 
12
14
  &.btn {
13
15
  --btn-inline-size: var(--avatar-size);
@@ -22,6 +24,7 @@
22
24
  img {
23
25
  aspect-ratio: var(--aspect-square);
24
26
  block-size: var(--size-full);
27
+ border-radius: var(--avatar-radius);
25
28
  inline-size: var(--size-full);
26
29
  object-fit: cover;
27
30
  }
@@ -31,11 +34,37 @@
31
34
  background-color: var(--color-border-light);
32
35
  block-size: var(--size-full);
33
36
  border-radius: var(--avatar-radius);
37
+ color: var(--color-text-subtle);
34
38
  display: flex;
35
- font-size: calc(var(--avatar-size) * .4);
39
+ font-size: calc(var(--avatar-size) * .5);
36
40
  inline-size: var(--size-full);
37
41
  justify-content: center;
38
42
  user-select: none;
43
+
44
+ .icon {
45
+ --icon-size: 1em;
46
+ }
47
+ }
48
+ }
49
+
50
+ .avatar__badge {
51
+ background-color: var(--avatar-badge-color, var(--color-primary));
52
+ block-size: var(--avatar-badge-size);
53
+ border-radius: var(--rounded-full);
54
+ box-shadow: var(--avatar-box-shadow);
55
+ inline-size: var(--avatar-badge-size);
56
+ inset: auto 0 0 auto;
57
+ position: absolute;
58
+
59
+ &:has(.icon) {
60
+ align-items: center;
61
+ color: var(--color-text-reversed);
62
+ display: flex;
63
+ justify-content: center;
64
+ }
65
+
66
+ .icon {
67
+ --icon-size: calc(var(--avatar-badge-size) * .75);
39
68
  }
40
69
  }
41
70
 
@@ -43,6 +72,10 @@
43
72
  align-items: center;
44
73
  display: flex;
45
74
 
75
+ > .avatar {
76
+ box-shadow: var(--avatar-box-shadow);
77
+ }
78
+
46
79
  > :not(:last-child) {
47
80
  margin-inline-end: calc(var(--size-2) * -1);
48
81
  }
@@ -3,46 +3,43 @@
3
3
  background-color: var(--badge-background, var(--color-bg));
4
4
  border: 1px solid var(--badge-border-color, var(--color-border));
5
5
  border-radius: var(--badge-radius, var(--rounded-3xl));
6
- box-shadow: var(--badge-box-shadow, none);
7
6
  color: var(--badge-color, var(--color-text));
8
7
  column-gap: var(--size-1);
9
8
  display: inline-flex;
9
+ flex-shrink: 0;
10
10
  font-size: var(--text-xs);
11
11
  font-weight: var(--font-medium);
12
12
  justify-content: center;
13
+ line-height: var(--leading-tight);
13
14
  min-inline-size: var(--badge-min-inline-size, 0);
14
15
  padding: var(--badge-padding, .125rem .5rem);
16
+ white-space: nowrap;
17
+
18
+ .icon {
19
+ --icon-size: 1em;
20
+ }
15
21
  }
16
22
 
17
23
  .badge--primary {
18
24
  --badge-background: var(--color-primary);
19
25
  --badge-border-color: transparent;
20
- --badge-box-shadow: var(--shadow-sm);
21
26
  --badge-color: var(--color-text-reversed);
22
27
  }
23
28
 
24
29
  .badge--secondary {
25
30
  --badge-background: var(--color-secondary);
26
31
  --badge-border-color: transparent;
27
- --badge-box-shadow: none;
28
32
  --badge-color: var(--color-text);
29
33
  }
30
34
 
31
35
  .badge--positive {
32
36
  --badge-background: var(--color-positive);
33
37
  --badge-border-color: transparent;
34
- --badge-box-shadow: var(--shadow-sm);
35
38
  --badge-color: white;
36
39
  }
37
40
 
38
41
  .badge--negative {
39
42
  --badge-background: var(--color-negative);
40
43
  --badge-border-color: transparent;
41
- --badge-box-shadow: var(--shadow-sm);
42
44
  --badge-color: white;
43
45
  }
44
-
45
- .badge--number {
46
- --badge-min-inline-size: var(--size-5);
47
- --badge-radius: var(--rounded-full);
48
- }
@@ -6,7 +6,7 @@
6
6
  border-radius: var(--btn-radius, var(--rounded-lg));
7
7
  box-shadow: var(--btn-box-shadow, var(--shadow-xs));
8
8
  color: var(--btn-color, var(--color-text));
9
- column-gap: var(--size-1_5);
9
+ column-gap: var(--btn-column-gap, var(--size-1_5));
10
10
  cursor: var(--btn-cursor, default);
11
11
  display: inline-flex;
12
12
  font-size: var(--btn-font-size, var(--text-sm));
@@ -79,7 +79,7 @@
79
79
  .btn--feedback {
80
80
  transition-duration: var(--time-150);
81
81
  transition-property: transform;
82
- transition-timing-function: var(--ease-spring-2);
82
+ transition-timing-function: var(--ease-out-3);
83
83
 
84
84
  &:active {
85
85
  transform: scale(0.97);
@@ -1,7 +1,16 @@
1
1
  .card {
2
+ --card-padding: var(--size-4);
2
3
  background-color: var(--color-surface);
3
4
  border-radius: var(--rounded-xl);
4
5
  border-width: var(--border);
5
6
  box-shadow: var(--shadow-sm);
6
- padding: var(--size-4);
7
+ padding: var(--card-padding, var(--size-4));
8
+ }
9
+
10
+ .card__footer {
11
+ background-color: rgb(from var(--color-border-light) r g b / .5);
12
+ border-block-start-width: var(--border);
13
+ margin-block-end: calc(var(--card-padding) * -1);
14
+ margin-inline: calc(var(--card-padding) * -1);
15
+ padding: var(--card-padding);
7
16
  }
@@ -14,6 +14,10 @@
14
14
  > input {
15
15
  color: inherit; font-size: inherit;
16
16
  }
17
+
18
+ &:focus-within {
19
+ outline: 2px solid var(--color-selected-dark);
20
+ }
17
21
  }
18
22
 
19
23
  .ts-dropdown {
@@ -26,9 +30,9 @@
26
30
 
27
31
  /* Setup transition */
28
32
  transition-behavior: allow-discrete;
29
- transition-duration: var(--time-300);
33
+ transition-duration: var(--time-100);
30
34
  transition-property: display, opacity, transform;
31
- transition-timing-function: var(--ease-spring-2);
35
+ transition-timing-function: var(--ease-out-3);
32
36
 
33
37
  /* Exit stage to */
34
38
  opacity: 0;
@@ -84,6 +88,11 @@
84
88
  background-color: transparent !important;
85
89
  }
86
90
 
91
+ .no-results {
92
+ color: var(--color-text-subtle);
93
+ text-align: center;
94
+ }
95
+
87
96
  .spinner {
88
97
  margin: var(--size-1) 0 0;
89
98
  }
@@ -23,10 +23,6 @@
23
23
  }
24
24
  }
25
25
 
26
- .command__group:not(:first-child) {
27
- border-block-start-width: var(--border);
28
- }
29
-
30
26
  .command__group {
31
27
  display: flex;
32
28
  flex-direction: column;
@@ -62,5 +58,6 @@
62
58
  .command__item-key {
63
59
  color: var(--color-text-subtle);
64
60
  font-size: var(--text-xs);
61
+ letter-spacing: var(--tracking-widest);
65
62
  margin-inline-start: auto;
66
63
  }
@@ -13,7 +13,7 @@
13
13
  inline-size: var(--datepicker-size);
14
14
 
15
15
  &.animate.open {
16
- animation: datepicker-in var(--time-300) var(--ease-spring-2);
16
+ animation: datepicker-in var(--time-100) var(--ease-out-3);
17
17
  }
18
18
 
19
19
  .flatpickr-innerContainer {
@@ -1,5 +1,5 @@
1
1
  .dialog {
2
- background-color: var(--color-bg);
2
+ background-color: var(--color-surface);
3
3
  border-radius: var(--rounded-xl);
4
4
  border-width: var(--border);
5
5
  color: var(--color-text);
@@ -13,9 +13,9 @@
13
13
 
14
14
  /* Setup transition */
15
15
  transition-behavior: allow-discrete;
16
- transition-duration: var(--time-300);
16
+ transition-duration: var(--time-100);
17
17
  transition-property: display, overlay, opacity, transform;
18
- transition-timing-function: var(--ease-spring-2);
18
+ transition-timing-function: var(--ease-out-3);
19
19
 
20
20
  &::backdrop {
21
21
  transition-behavior: allow-discrete;
@@ -51,6 +51,14 @@
51
51
  padding: var(--size-4);
52
52
  }
53
53
 
54
+ .dialog__footer {
55
+ background-color: rgb(from var(--color-border-light) r g b / .5);
56
+ border-block-start-width: var(--border);
57
+ margin-block-end: calc(var(--size-4) * -1);
58
+ margin-inline: calc(var(--size-4) * -1);
59
+ padding: var(--size-4);
60
+ }
61
+
54
62
  .dialog__close {
55
63
  inset-block-start: var(--size-3);
56
64
  inset-inline-end: var(--size-3);
@@ -1,27 +1,36 @@
1
1
  .list {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- row-gap: var(--size-4);
4
+ row-gap: var(--list-gap, var(--size-4));
5
5
  }
6
6
 
7
7
  .list-row {
8
- background-color: var(--item-background, transparent);
9
- border: 1px solid var(--item-border-color, var(--color-border));
8
+ background-color: var(--list-background, transparent);
9
+ border: 1px solid var(--list-border-color, var(--color-border));
10
10
  border-radius: var(--rounded-xl);
11
11
  font-size: var(--text-sm);
12
- padding: var(--size-4);
12
+ padding: var(--list-padding, .625rem .75rem);
13
+ }
14
+
15
+ .list-row__media {
16
+ align-self: start;
17
+ block-size: var(--list-row-media-size, 2.5rem);
18
+ border-radius: var(--rounded-md);
19
+ flex-shrink: 0;
20
+ inline-size: var(--list-row-media-size, 2.5rem);
21
+ object-fit: cover;
13
22
  }
14
23
 
15
24
  .list-row--muted {
16
- --item-background: rgb(from var(--color-border-light) r g b / .5);
25
+ --list-background: rgb(from var(--color-border-light) r g b / .5);
17
26
  }
18
27
 
19
28
  .list-row--borderless {
20
- --item-border-color: transparent;
29
+ --list-border-color: transparent;
21
30
  }
22
31
 
23
32
  .list-row--link:hover {
24
- --item-background: rgb(from var(--color-border-light) r g b / .5);
33
+ --list-background: rgb(from var(--color-border-light) r g b / .5);
25
34
  }
26
35
 
27
36
  .list-row--link:focus-visible {
@@ -29,6 +38,6 @@
29
38
  }
30
39
 
31
40
  .list-row--check:has(:checked) {
32
- --item-background: rgb(from var(--color-border-light) r g b / .5);
33
- --item-border-color: var(--color-primary);
41
+ --list-background: rgb(from var(--color-border-light) r g b / .5);
42
+ --list-border-color: var(--color-primary);
34
43
  }
@@ -11,7 +11,8 @@
11
11
  --btn-cursor: pointer;
12
12
 
13
13
  &[aria-current="page"] {
14
+ --btn-background: var(--color-surface);
14
15
  --btn-border-color: var(--color-border);
16
+ --btn-box-shadow: var(--shadow-xs);
15
17
  }
16
18
  }
17
-
@@ -13,9 +13,9 @@
13
13
 
14
14
  /* Setup transition */
15
15
  transition-behavior: allow-discrete;
16
- transition-duration: var(--time-300);
16
+ transition-duration: var(--time-100);
17
17
  transition-property: display, opacity, overlay, transform;
18
- transition-timing-function: var(--ease-spring-2);
18
+ transition-timing-function: var(--ease-out-3);
19
19
 
20
20
  /* Exit stage to */
21
21
  opacity: 0; transform: var(--scale-95);
@@ -1,9 +1,9 @@
1
1
  .progress {
2
- --progress-bar-color: rgb(from var(--color-primary) r g b / .2);
2
+ --progress-bar-color: var(--color-border-light);
3
3
  --progress-value-color: var(--color-primary);
4
4
 
5
5
  background-color: var(--progress-bar-color);
6
- block-size: var(--size-2);
6
+ block-size: var(--size-1);
7
7
  border-radius: var(--rounded-full);
8
8
  inline-size: var(--size-full);
9
9
  overflow: hidden;
@@ -2,12 +2,12 @@
2
2
  background-color: var(--sep-color, var(--color-border));
3
3
  block-size: 1px;
4
4
  flex-shrink: 0;
5
- inline-size: var(--sep-size, var(--size-full));
5
+ inline-size: var(--size-full);
6
6
  }
7
7
 
8
8
  .separator-vertical {
9
+ align-self: stretch;
9
10
  background-color: var(--sep-color, var(--color-border));
10
- block-size: var(--sep-size, var(--size-full));
11
11
  flex-shrink: 0;
12
12
  inline-size: 1px;
13
13
  }
@@ -1,5 +1,5 @@
1
1
  .sheet {
2
- background-color: var(--color-bg);
2
+ background-color: var(--color-surface);
3
3
  block-size: var(--size-full);
4
4
  border-inline-width: var(--sheet-border);
5
5
  box-shadow: var(--shadow-lg);
@@ -14,9 +14,9 @@
14
14
 
15
15
  /* Setup transition */
16
16
  transition-behavior: allow-discrete;
17
- transition-duration: var(--time-300);
17
+ transition-duration: var(--time-200);
18
18
  transition-property: display, overlay, opacity, transform;
19
- transition-timing-function: var(--ease-spring-2);
19
+ transition-timing-function: var(--ease-out-3);
20
20
 
21
21
  &::backdrop {
22
22
  transition-behavior: allow-discrete;
@@ -61,8 +61,7 @@
61
61
  }
62
62
 
63
63
  .sheet__content {
64
- block-size: var(--size-full);
65
- padding: var(--size-6);
64
+ block-size: inherit; padding: var(--size-4);
66
65
  }
67
66
 
68
67
  .sheet__close {
@@ -33,9 +33,9 @@
33
33
  mask-image: url("chevron-right.svg");
34
34
  mask-size: cover;
35
35
  min-inline-size: var(--size-4);
36
- transition-duration: var(--time-300);
36
+ transition-duration: var(--time-200);
37
37
  transition-property: transform;
38
- transition-timing-function: var(--ease-spring-2);
38
+ transition-timing-function: var(--ease-out-3);
39
39
  }
40
40
 
41
41
  details[open] > &::after {
@@ -31,9 +31,9 @@
31
31
  border-radius: var(--rounded-full);
32
32
  content: "";
33
33
  display: block;
34
- transition-duration: var(--time-300);
34
+ transition-duration: var(--time-150);
35
35
  transition-property: translate;
36
- transition-timing-function: var(--ease-spring-2);
36
+ transition-timing-function: var(--ease-out-3);
37
37
  }
38
38
 
39
39
  &:focus-visible {
@@ -23,9 +23,9 @@
23
23
  inset: anchor(top) anchor(right) anchor(bottom) anchor(left);
24
24
  position: absolute;
25
25
  position-anchor: --tabs-selected;
26
- transition-duration: var(--time-300);
26
+ transition-duration: var(--time-150);
27
27
  transition-property: inset;
28
- transition-timing-function: var(--ease-spring-2);
28
+ transition-timing-function: var(--ease-in-out-3);
29
29
  }
30
30
  }
31
31
 
@@ -1,5 +1,5 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
- import { play } from "https://esm.sh/cuelume@0.1.2?standalone"
2
+ import { play } from "https://esm.sh/cuelume@0.2.2?standalone"
3
3
 
4
4
  export default class extends Controller {
5
5
  static values = { connect: String, disconnect: String }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: css-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0
4
+ version: 4.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lázaro Nixon