css-zero 4.2.2 → 4.3.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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/app/assets/stylesheets/css-zero/utilities.css +2 -2
  4. data/lib/css_zero/version.rb +1 -1
  5. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/avatar.css +0 -1
  6. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/card.css +1 -1
  7. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/combobox.css +2 -2
  8. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/command.css +1 -1
  9. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/datepicker.css +5 -0
  10. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/dialog.css +0 -4
  11. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/dropzone.css +1 -1
  12. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/group.css +0 -2
  13. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/input_otp.css +1 -1
  14. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/layouts.css +1 -1
  15. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/lexxy.css +1 -1
  16. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/popover.css +0 -4
  17. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css +0 -4
  18. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sidebar_menu.css +0 -4
  19. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/switch.css +0 -1
  20. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/toggle.css +1 -1
  21. data/lib/generators/css_zero/add/templates/app/javascript/controllers/autosave_controller.js +24 -8
  22. data/lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js +1 -1
  23. data/lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js +10 -2
  24. data/lib/generators/css_zero/add/templates/app/javascript/controllers/dropzone_controller.js +2 -2
  25. data/lib/generators/css_zero/add/templates/app/javascript/controllers/inputmask_controller.js +1 -1
  26. data/lib/generators/css_zero/add/templates/app/javascript/controllers/menu_controller.js +9 -74
  27. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 14a22c54b379b8a90a4144a252413a0cc388b140781ffdbe98101f00aa9f4ff3
4
- data.tar.gz: 04061c71ca6daef8635b92d8691508c5726e7b6e20f9aba4c8c9f9994d73c20a
3
+ metadata.gz: a53c87ec617153d3c974fb2efdbd0c957cc8cc16d96d3cab89de42bbc3a0b285
4
+ data.tar.gz: b4e6faacece7a73849e72afc821679bf13db9bd8fdf6765b20fd7454c9568441
5
5
  SHA512:
6
- metadata.gz: 538545d4c41977daedaf54485fc5e796b42621484e8017c27cf768ca9ec58f1ab0e52fe2155e5cd24ace58fe957737c344b1d776f975a0ae3d22abb22e8e06f4
7
- data.tar.gz: 209ec906573f718d1d621fed9d7099d7938e69079e0cd3ee6765018b0a06043b1e3b14d53cc9233aba62b9fc6f23e704a491809cd5e0bce9f2681627103a1e75
6
+ metadata.gz: ef07f360edf5fd8ea89cb3c576ab46bb181eae6b12bfda9b299a414e6676b47ac9f253f82000e1e029cea5b038fb7f6f2962157e601272a2b96edefe1faa728d
7
+ data.tar.gz: 1ba0cee5571959c133711ecf2988ddb502684c4b5bb98e7b296c5a23b2a0ca928b0f07ee2ad7285df90e2ef1df1b11645b683bdde9ee051782c5a3a147a587b5
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## 4.3.0 - 2026-09-20
2
+ - Rename .overflow-x-auto and .overflow-y-auto to .overflow-i-auto and .overflow-b-auto
3
+ - Remove scroll snap from overflow utilities
4
+ - Use logical overflow properties in command and sidebar
5
+ - Refactor command
6
+ - Remove Safari exit animation guard from dialog, popover and sheet
7
+ - Remove obsolete ::-webkit-details-marker rule from sidebar menu
8
+ - Replace deprecated clip with clip-path in combobox and toggle
9
+ - Remove redundant padding fallback from card
10
+ - Remove redundant default declarations from avatar, group and switch
11
+ - Update activestorage to 8.1.301
12
+ - Update combobox-nav to 3.0.2
13
+ - Update dropzone to 7.4.4
14
+ - Update input-otp-zero to 0.0.4
15
+ - Update lexxy to 0.9.32
16
+ - Update maska to 3.2.1
17
+ - Update tom-select to 2.6.2
18
+
19
+ ## 4.2.3 - 2026-09-07
20
+ - Prevent month header from wrapping in datepicker
21
+ - Refactor autosave
22
+ - Rebuild menu on top of roving-ux
23
+
1
24
  ## 4.2.2 - 2026-08-29
2
25
  - Use position-try shorthand in popover
3
26
  - Adjust dialog transition durations
@@ -151,8 +151,8 @@
151
151
  .i-min { inline-size: min-content; }
152
152
  .i-fit { inline-size: fit-content; }
153
153
 
154
- .overflow-x-auto { overflow-x: auto; scroll-snap-type: x mandatory; }
155
- .overflow-y-auto { overflow-y: auto; scroll-snap-type: y mandatory; }
154
+ .overflow-i-auto { overflow-inline: auto; }
155
+ .overflow-b-auto { overflow-block: auto; }
156
156
  .overflow-hidden { overflow: hidden; }
157
157
 
158
158
  .object-contain { object-fit: contain; }
@@ -1,3 +1,3 @@
1
1
  module CssZero
2
- VERSION = "4.2.2"
2
+ VERSION = "4.3.0"
3
3
  end
@@ -22,7 +22,6 @@
22
22
  }
23
23
 
24
24
  img {
25
- aspect-ratio: var(--aspect-square);
26
25
  block-size: var(--size-full);
27
26
  border-radius: var(--avatar-radius);
28
27
  inline-size: var(--size-full);
@@ -4,7 +4,7 @@
4
4
  border-radius: var(--rounded-xl);
5
5
  border-width: var(--border);
6
6
  box-shadow: var(--shadow-sm);
7
- padding: var(--card-padding, var(--size-4));
7
+ padding: var(--card-padding);
8
8
  }
9
9
 
10
10
  .card__footer {
@@ -1,4 +1,4 @@
1
- @import url("https://esm.sh/tom-select@2.6.1/dist/css/tom-select.min.css");
1
+ @import url("https://esm.sh/tom-select@2.6.2/dist/css/tom-select.min.css");
2
2
 
3
3
  .ts-control {
4
4
  align-items: center;
@@ -135,5 +135,5 @@
135
135
  }
136
136
 
137
137
  [data-controller~="combobox"] {
138
- clip: rect(0 0 0 0); position: absolute;
138
+ clip-path: inset(50%); position: absolute;
139
139
  }
@@ -16,7 +16,7 @@
16
16
 
17
17
  .command__list {
18
18
  max-block-size: 300px;
19
- overflow-y: auto;
19
+ overflow-block: auto;
20
20
 
21
21
  &:not(:has(.command__item:not([hidden]))) {
22
22
  display: none;
@@ -40,6 +40,11 @@
40
40
  color: var(--color-text);
41
41
  }
42
42
 
43
+ .flatpickr-current-month {
44
+ inline-size: 85%;
45
+ padding-block-start: 6.48px;
46
+ }
47
+
43
48
  span.cur-month {
44
49
  font-size: var(--text-sm);
45
50
  font-weight: var(--font-medium);
@@ -38,10 +38,6 @@
38
38
  &[open]::backdrop { opacity: 0; }
39
39
  }
40
40
 
41
- @supports (-webkit-hyphens: none) {
42
- transition-behavior: normal;
43
- }
44
-
45
41
  @media (width >= 40rem) {
46
42
  max-inline-size: var(--dialog-size, var(--max-i-sm));
47
43
  }
@@ -1,4 +1,4 @@
1
- @import url("https://esm.sh/@deltablot/dropzone@7.4.3/dist/dropzone.css");
1
+ @import url("https://esm.sh/@deltablot/dropzone@7.4.4/dist/dropzone.css");
2
2
 
3
3
  .dropzone {
4
4
  border: 2px dashed var(--color-border);
@@ -1,5 +1,4 @@
1
1
  .group {
2
- align-items: stretch;
3
2
  display: flex;
4
3
  flex-direction: row;
5
4
  inline-size: fit-content;
@@ -22,7 +21,6 @@
22
21
  }
23
22
 
24
23
  .group-vertical {
25
- align-items: stretch;
26
24
  display: flex;
27
25
  flex-direction: column;
28
26
  inline-size: fit-content;
@@ -1,4 +1,4 @@
1
- @import url("https://esm.sh/input-otp-zero@0.0.3/dist/input-otp-zero.css");
1
+ @import url("https://esm.sh/input-otp-zero@0.0.4/dist/input-otp-zero.css");
2
2
 
3
3
  input-otp {
4
4
  --input-otp-gap: var(--size-2);
@@ -57,7 +57,7 @@
57
57
  display: flex;
58
58
  flex-direction: column;
59
59
  grid-area: sidebar;
60
- overflow-x: hidden;
60
+ overflow-inline: hidden;
61
61
  padding: var(--sidebar-padding, 0);
62
62
  row-gap: var(--size-2);
63
63
  view-transition-name: sidebar;
@@ -1,4 +1,4 @@
1
- @import url("https://esm.sh/@37signals/lexxy@0.9.24/dist/stylesheets/lexxy.css");
1
+ @import url("https://esm.sh/@37signals/lexxy@0.9.32/dist/stylesheets/lexxy.css");
2
2
 
3
3
  :root {
4
4
  --lexxy-color-ink: var(--color-text);
@@ -31,10 +31,6 @@
31
31
  opacity: 0; transform: var(--scale-95);
32
32
  }
33
33
  }
34
-
35
- @supports (-webkit-hyphens: none) {
36
- transition-behavior: normal;
37
- }
38
34
  }
39
35
 
40
36
  .popover--unanchored {
@@ -39,10 +39,6 @@
39
39
  &[open]::backdrop { opacity: 0; }
40
40
  }
41
41
 
42
- @supports (-webkit-hyphens: none) {
43
- transition-behavior: normal;
44
- }
45
-
46
42
  @media (width >= 40rem) {
47
43
  max-inline-size: var(--sheet-size, var(--max-i-sm));
48
44
  }
@@ -41,10 +41,6 @@
41
41
  details[open] > &::after {
42
42
  transform: var(--rotate-90);
43
43
  }
44
-
45
- &::-webkit-details-marker {
46
- display: none;
47
- }
48
44
  }
49
45
  }
50
46
 
@@ -30,7 +30,6 @@
30
30
  block-size: var(--switch-size);
31
31
  border-radius: var(--rounded-full);
32
32
  content: "";
33
- display: block;
34
33
  transition-duration: var(--time-150);
35
34
  transition-property: translate;
36
35
  transition-timing-function: var(--ease-out-3);
@@ -3,7 +3,7 @@
3
3
  }
4
4
 
5
5
  .btn--toggle [type="checkbox"] {
6
- position: absolute; clip: rect(0, 0, 0, 0);
6
+ position: absolute; clip-path: inset(50%);
7
7
  }
8
8
 
9
9
  .btn--toggle:has(:checked) {
@@ -16,15 +16,9 @@ export default class extends Controller {
16
16
  !this.#dirty && this.#scheduleSave()
17
17
  }
18
18
 
19
- async #save() {
19
+ #save() {
20
20
  this.#resetTimer()
21
- this.#toggleSaving(true)
22
- await this.#submitForm(this.element)
23
- this.#toggleSaving(false)
24
- }
25
-
26
- async #submitForm(form) {
27
- return await new FetchRequest(form.method, form.action, { body: new FormData(form) }).perform()
21
+ this.#submit()
28
22
  }
29
23
 
30
24
  #scheduleSave() {
@@ -36,11 +30,33 @@ export default class extends Controller {
36
30
  this.#timer = null
37
31
  }
38
32
 
33
+ async #submit() {
34
+ this.#toggleSaving(true)
35
+ await this.#performRequest()
36
+ this.#toggleSaving(false)
37
+ }
38
+
39
39
  #toggleSaving(saving) {
40
40
  this.element.ariaBusy = saving
41
41
  this.submitTarget.disabled = saving
42
42
  }
43
43
 
44
+ #performRequest() {
45
+ return new FetchRequest(this.#method, this.#action, { body: this.#body }).perform()
46
+ }
47
+
48
+ get #method() {
49
+ return this.element.method
50
+ }
51
+
52
+ get #action() {
53
+ return this.element.action
54
+ }
55
+
56
+ get #body() {
57
+ return new FormData(this.element)
58
+ }
59
+
44
60
  get #dirty() {
45
61
  return !!this.#timer
46
62
  }
@@ -1,6 +1,6 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
2
  import { get } from "https://esm.sh/@rails/request.js@0.0.13?standalone"
3
- import TomSelect from "https://esm.sh/tom-select@2.6.1/base?standalone"
3
+ import TomSelect from "https://esm.sh/tom-select@2.6.2/base?standalone"
4
4
 
5
5
  export default class extends Controller {
6
6
  static values = { url: String, optionCreate: { type: String, default: "Add" }, noResults: { type: String, default: "No results found" } }
@@ -1,5 +1,5 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
- import Combobox from "https://esm.sh/@github/combobox-nav@3.0.1?standalone"
2
+ import Combobox from "https://esm.sh/@github/combobox-nav@3.0.2?standalone"
3
3
  import debounce from "https://esm.sh/just-debounce-it@3.2.0?standalone"
4
4
 
5
5
  export default class extends Controller {
@@ -19,7 +19,7 @@ export default class extends Controller {
19
19
  }
20
20
 
21
21
  filter({ target }) {
22
- this.itemTargets.forEach(it => this.#matches(it.dataset.value, target.value) ? it.removeAttribute("hidden") : it.toggleAttribute("hidden", true))
22
+ this.itemTargets.forEach(it => this.#matches(it.dataset.value, target.value) ? this.#show(it) : this.#hide(it))
23
23
  }
24
24
 
25
25
  commit({ target }) {
@@ -29,4 +29,12 @@ export default class extends Controller {
29
29
  #matches(text, potentialMatch) {
30
30
  return text.toLowerCase().includes(potentialMatch.toLowerCase())
31
31
  }
32
+
33
+ #show(element) {
34
+ element.toggleAttribute("hidden", false)
35
+ }
36
+
37
+ #hide(element) {
38
+ element.toggleAttribute("hidden", true)
39
+ }
32
40
  }
@@ -1,6 +1,6 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
- import { DirectUpload } from "https://esm.sh/@rails/activestorage@8.1.300?standalone"
3
- import Dropzone from "https://esm.sh/@deltablot/dropzone@7.4.3?standalone"
2
+ import { DirectUpload } from "https://esm.sh/@rails/activestorage@8.1.301?standalone"
3
+ import Dropzone from "https://esm.sh/@deltablot/dropzone@7.4.4?standalone"
4
4
 
5
5
  export default class extends Controller {
6
6
  static values = {
@@ -1,5 +1,5 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
- import { MaskInput } from "https://esm.sh/maska@3.2.0?standalone"
2
+ import { MaskInput } from "https://esm.sh/maska@3.2.1?standalone"
3
3
 
4
4
  export default class extends Controller {
5
5
  connect() {
@@ -1,8 +1,8 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
+ import { rovingIndex } from "https://esm.sh/roving-ux@1.0.5?standalone"
2
3
 
3
4
  export default class extends Controller {
4
5
  static targets = [ "item" ]
5
- static values = { index: Number }
6
6
 
7
7
  #observer
8
8
 
@@ -18,85 +18,20 @@ export default class extends Controller {
18
18
  this.#observer.disconnect()
19
19
  }
20
20
 
21
- navigate(event) {
22
- switch (event.key) {
23
- case " ":
24
- case "Enter":
25
- this.#cancel(event)
26
- this.#activate(event.target)
27
- break
28
- case "ArrowUp":
29
- this.#cancel(event)
30
- this.#prev()
31
- break
32
- case "ArrowDown":
33
- this.#cancel(event)
34
- this.#next()
35
- break
36
- case "Home":
37
- this.#cancel(event)
38
- this.#first()
39
- break
40
- case "End":
41
- this.#cancel(event)
42
- this.#last()
43
- break
44
- }
45
- }
46
-
47
- #cancel(event) {
48
- event.stopPropagation()
49
- event.preventDefault()
50
- }
51
-
52
- #activate(menuItem) {
53
- menuItem.click()
54
- }
55
-
56
21
  #reset([ entry ]) {
57
- entry.isIntersecting && this.#first()
58
- }
59
-
60
- #prev() {
61
- if (this.indexValue > 0) {
62
- this.indexValue--
63
- this.#update()
64
- }
65
- }
66
-
67
- #next() {
68
- if (this.indexValue < this.#lastIndex) {
69
- this.indexValue++
70
- this.#update()
71
- }
72
- }
73
-
74
- #first() {
75
- this.indexValue = 0
76
- this.#update()
77
- }
78
-
79
- #last() {
80
- this.indexValue = this.#lastIndex
81
- this.#update()
82
- }
83
-
84
- #update() {
85
- this.#updateTabstops()
86
- this.#focusItemAtIndex()
22
+ entry.isIntersecting && this.#start()
87
23
  }
88
24
 
89
- #updateTabstops() {
90
- this.itemTargets.forEach((it, index) => {
91
- it.tabIndex = index === this.indexValue ? 0 : -1
92
- })
25
+ #start() {
26
+ this.#rovingIndex()
27
+ this.#focus()
93
28
  }
94
29
 
95
- #focusItemAtIndex() {
96
- this.itemTargets[this.indexValue].focus()
30
+ #rovingIndex() {
31
+ rovingIndex({ element: this.element, target: "[data-menu-target='item']" })
97
32
  }
98
33
 
99
- get #lastIndex() {
100
- return this.itemTargets.length -1
34
+ #focus() {
35
+ this.itemTargets[0].focus()
101
36
  }
102
37
  }
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.2.2
4
+ version: 4.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lázaro Nixon