css-zero 1.0.6 → 1.1.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/css-zero/reset.css +42 -22
  3. data/app/assets/stylesheets/css-zero/sizes.css +4 -5
  4. data/app/assets/stylesheets/css-zero/{transition.css → transitions.css} +1 -9
  5. data/app/assets/stylesheets/css-zero/utilities.css +7 -11
  6. data/app/assets/stylesheets/css-zero/variables.css +2 -2
  7. data/lib/css_zero/version.rb +1 -1
  8. data/lib/generators/css_zero/add/USAGE +1 -1
  9. data/lib/generators/css_zero/add/resources.yml +9 -4
  10. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/accordion.css +7 -8
  11. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/alert.css +1 -2
  12. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/avatar.css +10 -1
  13. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/badge.css +1 -0
  14. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/breadcrumb.css +2 -2
  15. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/button.css +3 -4
  16. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/card.css +12 -0
  17. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/carousel.css +2 -2
  18. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/combobox.css +1 -1
  19. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/command.css +1 -0
  20. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/datepicker.css +0 -4
  21. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/flash.css +14 -4
  22. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/input.css +1 -1
  23. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/layouts.css +3 -9
  24. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/menu.css +2 -1
  25. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css +2 -2
  26. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sidebar_menu.css +78 -0
  27. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/switch.css +2 -5
  28. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/table.css +1 -1
  29. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/tabs.css +2 -3
  30. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/trix.css +2 -2
  31. data/lib/generators/css_zero/add/templates/app/javascript/controllers/check_all_controller.js +3 -3
  32. data/lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js +1 -1
  33. data/lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js +7 -5
  34. data/lib/generators/css_zero/add/templates/app/javascript/controllers/form_controller.js +9 -0
  35. data/lib/generators/css_zero/add/templates/app/javascript/controllers/inputmask_controller.js +1 -1
  36. data/lib/generators/css_zero/add/templates/app/javascript/controllers/menu_controller.js +2 -2
  37. data/lib/generators/css_zero/add/templates/app/javascript/controllers/otp_input_controller.js +2 -2
  38. data/lib/generators/css_zero/add/templates/app/javascript/controllers/tabs_controller.js +5 -5
  39. data/lib/generators/css_zero/add/templates/app/javascript/controllers/turbo_confirm_controller.js +27 -0
  40. data/lib/generators/css_zero/install/install_generator.rb +0 -8
  41. data/lib/generators/css_zero/install/templates/app/views/layouts/application.html.erb +3 -7
  42. data/lib/generators/css_zero/scaffold/templates/index.html.erb.tt +0 -4
  43. data/lib/generators/css_zero/scaffold/templates/show.html.erb.tt +0 -4
  44. metadata +6 -5
  45. data/lib/generators/css_zero/install/templates/app/assets/stylesheets/application.css +0 -26
  46. /data/app/assets/stylesheets/css-zero/{transform.css → transforms.css} +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 67a83bde437e4030d818d243509440e4889082ff844cd38fa13884215c067fb5
4
- data.tar.gz: 739a55c9999890cfb6e9094a0ee6fae3b5dd49dcf6ac935cce43ebe43c3317fb
3
+ metadata.gz: ca4ba5f195b039dc99ad2a107199081dfb0da78ef760a268eb855b7c5d0c30ed
4
+ data.tar.gz: b7be9902025802081b3de6a564be20a5da58d30eb4cd801bc13edb2628c6fc01
5
5
  SHA512:
6
- metadata.gz: be7d3e8f370052305a2c7a8da5f4b7c8cd02742066fb487301e51b83d6ca316c5713f4a6bacd40df10f68b667acc40c219264014af8151614178eaa662ac5981
7
- data.tar.gz: ea8983f6eb11a7b5e8d45dd56d6c2211857a6161b494c3ba60a56968c3b6bdae584db94158137ed00930f8ed8c3aaaaf8ea43b42cd3c2f4734ce3d5ba0290ba2
6
+ metadata.gz: d5870e49f90ccc0037f7bc0dac9d2193e87065d071ca6ba5be666b1e086cf39efc273c89c1ea7d1c7dea5005eac4b222cf188934f08718234f7c4b858fa44123
7
+ data.tar.gz: 560de3cb753cbca1f96dab58d30c6cb5dc184a3677d135514f2ca8ac0d3e3545d5e459a6992bc64e4b60db770549bee1192f0b3b938ee0fc09353c2ea533b0cd
@@ -356,11 +356,35 @@ input:where([type='button'], [type='reset'], [type='submit']),
356
356
  }
357
357
 
358
358
  /*
359
- Correct the arrow style of datalist in Chrome.
359
+ Make elements with the HTML hidden attribute stay hidden by default.
360
360
  */
361
361
 
362
- ::-webkit-calendar-picker-indicator {
363
- line-height: 1em;
362
+ [hidden]:where(:not([hidden='until-found'])) {
363
+ display: none !important;
364
+ }
365
+
366
+ /*
367
+ Make elements with the HTML contents attribute become pseudo-box by default.
368
+ */
369
+
370
+ [contents] {
371
+ display: contents !important;
372
+ }
373
+
374
+ /*
375
+ Make turbo frame become pseudo-box by default.
376
+ */
377
+
378
+ turbo-frame {
379
+ display: contents;
380
+ }
381
+
382
+ /*
383
+ Make input validation wrapper become pseudo-box by default.
384
+ */
385
+
386
+ .field_with_errors {
387
+ display: contents;
364
388
  }
365
389
 
366
390
  /*
@@ -375,16 +399,16 @@ input:where([type='button'], [type='reset'], [type='submit']),
375
399
  Set color scheme to light and dark.
376
400
  */
377
401
 
378
- html {
402
+ :root {
379
403
  color-scheme: light dark;
380
404
  }
381
405
 
382
406
  /*
383
- Prevent page scroll when modal dialog is open.
407
+ Correct the arrow style of datalist in Chrome.
384
408
  */
385
409
 
386
- html:has(dialog:modal[open]) {
387
- overflow: hidden;
410
+ ::-webkit-calendar-picker-indicator {
411
+ line-height: 1em;
388
412
  }
389
413
 
390
414
  /*
@@ -392,29 +416,25 @@ html:has(dialog:modal[open]) {
392
416
  */
393
417
 
394
418
  option {
395
- padding-block: 3px;
396
- }
397
-
398
- /*
399
- Make turbo frame become pseudo-box by default.
400
- */
401
-
402
- turbo-frame {
403
- display: contents;
419
+ padding: 2px 4px;
404
420
  }
405
421
 
406
422
  /*
407
- Make elements with the HTML hidden attribute stay hidden by default.
423
+ Prevent page scroll when modal dialog is open.
408
424
  */
409
425
 
410
- [hidden]:where(:not([hidden='until-found'])) {
411
- display: none !important;
426
+ html:has(dialog:modal[open]) {
427
+ overflow: hidden;
412
428
  }
413
429
 
414
430
  /*
415
- Make elements with the HTML contents attribute become pseudo-box by default.
431
+ Remove all animations and transitions for people that prefer not to see them
416
432
  */
417
433
 
418
- [contents] {
419
- display: contents !important;
434
+ @media (prefers-reduced-motion: reduce) {
435
+ *, ::before, ::after, ::backdrop {
436
+ animation-duration: 0.01ms !important;
437
+ animation-iteration-count: 1 !important;
438
+ transition-duration: 0.01ms !important;
439
+ }
420
440
  }
@@ -93,9 +93,8 @@
93
93
  /****************************************************************
94
94
  * Breakpoints
95
95
  *****************************************************************/
96
- --breakpoint-sm: 40rem; /* 640px */
97
- --breakpoint-md: 48rem; /* 768px */
98
- --breakpoint-lg: 64rem; /* 1024px */
99
- --breakpoint-xl: 80rem; /* 1280px */
100
- --breakpoint-2xl: 96rem; /* 1536px */
96
+ --breakpoint-sm: 40rem; /* Mobile 640px */
97
+ --breakpoint-md: 48rem; /* Tablet 768px */
98
+ --breakpoint-lg: 64rem; /* Laptop 1024px */
99
+ --breakpoint-xl: 80rem; /* Desktop 1280px */
101
100
  }
@@ -6,6 +6,7 @@
6
6
  *****************************************************************/
7
7
  --transition: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, translate, scale, rotate, filter, backdrop-filter;
8
8
  --transition-colors: color, background-color, border-color, text-decoration-color, fill, stroke;
9
+ --transition-transform: transform, translate, scale, rotate;
9
10
 
10
11
  /****************************************************************
11
12
  * Transition Timing
@@ -20,13 +21,4 @@
20
21
  --time-500: 500ms;
21
22
  --time-700: 700ms;
22
23
  --time-1000: 1000ms;
23
-
24
- /****************************************************************
25
- * Transition Timing Function
26
- * Variables for controlling the easing of CSS transitions.
27
- * transition-timing-function: var(--ease-in);
28
- *****************************************************************/
29
- --ease-in: cubic-bezier(0.4, 0, 1, 1);
30
- --ease-out: cubic-bezier(0, 0, 0.2, 1);
31
- --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
32
24
  }
@@ -26,7 +26,7 @@
26
26
  .self-center { align-self: center; }
27
27
 
28
28
  .gap { column-gap: var(--column-gap, 0.5rem); row-gap: var(--row-gap, 1rem); }
29
- .gap-half { column-gap: 0.5rem; row-gap: 0.5rem; }
29
+ .gap-half { column-gap: 0.25rem; row-gap: 0.5rem; }
30
30
 
31
31
  /****************************************************************
32
32
  * Text
@@ -56,7 +56,6 @@
56
56
 
57
57
  .leading-none { line-height: var(--leading-none); }
58
58
  .leading-tight { line-height: var(--leading-tight); }
59
- .leading-normal { line-height: var(--leading-normal); }
60
59
 
61
60
  .text-start { text-align: start; }
62
61
  .text-end { text-align: end; }
@@ -147,10 +146,12 @@
147
146
  .sticky { position: sticky; }
148
147
 
149
148
  .min-i-0 { min-inline-size: 0; }
149
+ .max-i-none { max-inline-size: none; }
150
150
  .max-i-full { max-inline-size: 100%; }
151
151
 
152
152
  .b-full { block-size: 100%; }
153
153
  .i-full { inline-size: 100%; }
154
+
154
155
  .i-min { inline-size: min-content; }
155
156
 
156
157
  .overflow-x-auto { overflow-x: auto; scroll-snap-type: x mandatory; }
@@ -319,15 +320,17 @@
319
320
  /****************************************************************
320
321
  * Hiding/Showing
321
322
  *****************************************************************/
322
- .show\@sm, .show\@md, .show\@lg { display: none; }
323
+ .show\@sm, .show\@md, .show\@lg, .show\@xl { display: none; }
323
324
 
324
325
  .show\@sm { @media (width >= 40rem) { display: flex; } }
325
326
  .show\@md { @media (width >= 48rem) { display: flex; } }
326
327
  .show\@lg { @media (width >= 64rem) { display: flex; } }
328
+ .show\@xl { @media (width >= 80rem) { display: flex; } }
327
329
 
328
330
  .hide\@sm { @media (width >= 40rem) { display: none; } }
329
331
  .hide\@md { @media (width >= 48rem) { display: none; } }
330
332
  .hide\@lg { @media (width >= 64rem) { display: none; } }
333
+ .hide\@xl { @media (width >= 80rem) { display: none; } }
331
334
 
332
335
  .hide\@pwa { @media (display-mode: standalone) { display: none; } }
333
336
  .hide\@browser { @media (display-mode: browser) { display: none; } }
@@ -337,11 +340,4 @@
337
340
  /****************************************************************
338
341
  * Accessibility
339
342
  *****************************************************************/
340
- .sr-only {
341
- block-size: 1px;
342
- clip-path: inset(50%);
343
- inline-size: 1px;
344
- overflow: hidden;
345
- position: absolute;
346
- white-space: nowrap;
347
- }
343
+ .sr-only { block-size: 1px; clip-path: inset(50%); inline-size: 1px; overflow: hidden; position: absolute; white-space: nowrap; }
@@ -4,6 +4,6 @@
4
4
  @import url("effects.css");
5
5
  @import url("filters.css");
6
6
  @import url("sizes.css");
7
- @import url("transform.css");
8
- @import url("transition.css");
7
+ @import url("transforms.css");
8
+ @import url("transitions.css");
9
9
  @import url("typography.css");
@@ -1,3 +1,3 @@
1
1
  module CssZero
2
- VERSION = "1.0.6"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -2,7 +2,7 @@ Description:
2
2
  This will add components into your project.
3
3
 
4
4
  Components:
5
- accordion alert autoanimate autosave avatar badge breadcrumb button card carousel chart check_all combobox command collapsible datepicker dialog dropdown flash form fullscreen group hotkey input input_concerns inputmask layouts lightbox local_time navigation pagination popover progress prose sheet skeleton sortable switch table tabs trix upload_preview toggle web_share
5
+ accordion alert autoanimate autosave avatar badge breadcrumb button card carousel chart check_all combobox command collapsible datepicker dialog dropdown flash form fullscreen group hotkey input input_concerns inputmask layouts lightbox local_time navigation pagination popover progress prose sheet skeleton sortable switch table tabs trix turbo_confirm upload_preview toggle web_share
6
6
 
7
7
  Example:
8
8
  bin/rails generate css_zero:add [components...]
@@ -28,6 +28,8 @@ chart:
28
28
  - app/javascript/controllers/chart_controller.js
29
29
  check_all:
30
30
  - app/javascript/controllers/check_all_controller.js
31
+ collapsible:
32
+ - app/javascript/controllers/collapsible_controller.js
31
33
  combobox:
32
34
  - app/assets/stylesheets/combobox.css
33
35
  - app/javascript/controllers/combobox_controller.js
@@ -36,8 +38,6 @@ command:
36
38
  - app/assets/stylesheets/command.css
37
39
  - app/javascript/controllers/command_controller.js
38
40
  - app/assets/images/search.svg
39
- collapsible:
40
- - app/javascript/controllers/collapsible_controller.js
41
41
  datepicker:
42
42
  - app/assets/stylesheets/datepicker.css
43
43
  - app/javascript/controllers/datepicker_controller.js
@@ -80,7 +80,9 @@ inputmask:
80
80
  - app/javascript/controllers/inputmask_controller.js
81
81
  layouts:
82
82
  - app/assets/stylesheets/layouts.css
83
+ - app/assets/stylesheets/sidebar_menu.css
83
84
  - app/assets/images/menu.svg
85
+ - app/assets/images/chevron-right.svg
84
86
  lightbox:
85
87
  - app/assets/stylesheets/lightbox.css
86
88
  - app/javascript/controllers/lightbox_controller.js
@@ -118,14 +120,17 @@ table:
118
120
  tabs:
119
121
  - app/assets/stylesheets/tabs.css
120
122
  - app/javascript/controllers/tabs_controller.js
123
+ toggle:
124
+ - app/assets/stylesheets/toggle.css
121
125
  trix:
122
126
  - app/assets/stylesheets/trix.css
127
+ turbo_confirm:
128
+ - app/assets/stylesheets/dialog.css
129
+ - app/javascript/controllers/turbo_confirm_controller.js
123
130
  upload_preview:
124
131
  - app/javascript/controllers/upload_preview_controller.js
125
132
  - app/assets/images/default-picture.webp
126
133
  - app/assets/images/camera.svg
127
134
  - app/assets/images/minus.svg
128
- toggle:
129
- - app/assets/stylesheets/toggle.css
130
135
  web_share:
131
136
  - app/javascript/controllers/web_share_controller.js
@@ -14,18 +14,13 @@
14
14
  &[open]::details-content {
15
15
  block-size: auto;
16
16
  }
17
-
18
- &[open] summary::after {
19
- transform: var(--rotate-180);
20
- }
21
17
  }
22
18
 
23
19
  summary {
24
20
  align-items: center;
25
- cursor: pointer;
21
+ cursor: default;
26
22
  display: flex;
27
23
  font-weight: var(--font-medium);
28
- justify-content: space-between;
29
24
  padding-block: var(--size-4);
30
25
 
31
26
  &:hover {
@@ -47,8 +42,12 @@
47
42
  content: "";
48
43
  filter: var(--color-filter-text);
49
44
  inline-size: var(--size-4);
50
- transition-duration: var(--time-200);
51
- transition-property: transform;
45
+ margin-inline-start: auto;
46
+ transition: transform var(--time-200);
47
+ }
48
+
49
+ details[open] > &::after {
50
+ transform: var(--rotate-180);
52
51
  }
53
52
  }
54
53
  }
@@ -1,7 +1,6 @@
1
1
  .alert {
2
- border-color: var(--alert-border-color, var(--color-border));
2
+ border: 1px solid var(--alert-border-color, var(--color-border));
3
3
  border-radius: var(--rounded-lg);
4
- border-width: var(--border);
5
4
  color: var(--alert-color, var(--color-text));
6
5
  font-size: var(--text-sm);
7
6
  inline-size: var(--size-full);
@@ -10,8 +10,8 @@
10
10
  overflow: hidden;
11
11
 
12
12
  &:is(.btn) {
13
- --btn-block-size: auto;
14
13
  --btn-icon-color: none;
14
+ --btn-inline-size: var(--size);
15
15
  --btn-padding: 0;
16
16
  --btn-radius: var(--radius);
17
17
  }
@@ -40,3 +40,12 @@
40
40
  user-select: none;
41
41
  }
42
42
  }
43
+
44
+ .avatar-group {
45
+ align-items: center;
46
+ display: flex;
47
+
48
+ > :not(:last-child) {
49
+ margin-inline-end: calc(var(--size-2) * -1);
50
+ }
51
+ }
@@ -7,6 +7,7 @@
7
7
  display: inline-flex;
8
8
  font-size: var(--text-xs);
9
9
  font-weight: var(--font-semibold);
10
+ line-height: var(--leading-4);
10
11
  padding: var(--size-0_5) var(--size-2_5);
11
12
  }
12
13
 
@@ -1,10 +1,10 @@
1
1
  .breadcrumb {
2
2
  align-items: center;
3
3
  color: var(--color-text-subtle);
4
+ column-gap: var(--size-1);
4
5
  display: flex;
5
6
  flex-wrap: wrap;
6
7
  font-size: var(--text-sm);
7
- gap: var(--size-1);
8
8
  overflow-wrap: break-word;
9
9
 
10
10
  a {
@@ -20,6 +20,6 @@
20
20
  }
21
21
 
22
22
  @media (width >= 40rem) {
23
- gap: var(--size-2);
23
+ column-gap: var(--size-2);
24
24
  }
25
25
  }
@@ -4,18 +4,18 @@
4
4
 
5
5
  align-items: center;
6
6
  background-color: var(--btn-background);
7
+ block-size: var(--btn-block-size, auto);
7
8
  border-radius: var(--btn-radius, var(--rounded-md));
8
9
  border: 1px solid var(--btn-border-color, var(--color-border));
9
10
  box-shadow: var(--btn-box-shadow, var(--shadow-xs));
10
11
  color: var(--btn-color, var(--color-text));
11
- cursor: pointer;
12
+ column-gap: var(--size-2);
13
+ cursor: default;
12
14
  display: inline-flex;
13
15
  font-size: var(--btn-font-size, var(--text-sm));
14
16
  font-weight: var(--btn-font-weight, var(--font-medium));
15
- gap: var(--size-2);
16
17
  inline-size: var(--btn-inline-size, auto);
17
18
  justify-content: var(--btn-justify-content, center);
18
- min-block-size: var(--btn-block-size, var(--size-9));
19
19
  padding: var(--btn-padding, .375rem 1rem);
20
20
  text-align: center;
21
21
  white-space: nowrap;
@@ -70,7 +70,6 @@
70
70
 
71
71
  .btn--plain {
72
72
  --btn-background: transparent;
73
- --btn-block-size: auto;
74
73
  --btn-border-color: transparent;
75
74
  --btn-hover-color: transparent;
76
75
  --btn-padding: 0;
@@ -5,3 +5,15 @@
5
5
  padding: var(--size-6);
6
6
  box-shadow: var(--shadow-sm);
7
7
  }
8
+
9
+ .card-selectable {
10
+ background-color: var(--color-bg);
11
+ border-radius: var(--rounded-xl);
12
+ border-width: var(--border);
13
+ padding: var(--size-3);
14
+
15
+ &:has(:checked) {
16
+ background-color: var(--color-secondary);
17
+ border-color: var(--color-primary);
18
+ }
19
+ }
@@ -1,12 +1,12 @@
1
1
  .carousel {
2
2
  align-items: center;
3
+ column-gap: var(--size-4);
3
4
  display: flex;
4
- gap: var(--size-4);
5
5
  }
6
6
 
7
7
  .carousel__content {
8
+ column-gap: var(--size-4);
8
9
  display: flex;
9
- gap: var(--size-4);
10
10
  inline-size: var(--size-full);
11
11
  overflow-x: hidden;
12
12
  scroll-behavior: smooth;
@@ -1,4 +1,4 @@
1
- @import url("https://esm.sh/tom-select@2.4.1/dist/css/tom-select.min.css");
1
+ @import url("https://esm.sh/tom-select@2.4.2/dist/css/tom-select.min.css");
2
2
 
3
3
  .ts-control {
4
4
  align-items: center;
@@ -27,6 +27,7 @@
27
27
  display: flex;
28
28
  flex-direction: column;
29
29
  padding: var(--size-1);
30
+ row-gap: 1px;
30
31
  }
31
32
 
32
33
  .command__group-header {
@@ -1,9 +1,5 @@
1
1
  @import url("https://esm.sh/flatpickr@4.6.13/dist/flatpickr.min.css");
2
2
 
3
- .input--datepicker {
4
- cursor: pointer;
5
- }
6
-
7
3
  .flatpickr-calendar {
8
4
  background: var(--color-bg);
9
5
  border: 1px solid var(--color-border);
@@ -2,15 +2,15 @@
2
2
  align-items: center;
3
3
  animation: appear-then-fade 4s 300ms both;
4
4
  backdrop-filter: var(--blur-sm) var(--contrast-75);
5
- background-color: rgb(from var(--color-text) r g b / .65);
5
+ background-color: var(--flash-background, rgb(from var(--color-text) r g b / .65));
6
6
  border-radius: var(--rounded-full);
7
- color: var(--color-text-reversed);
7
+ color: var(--flash-color, var(--color-text-reversed));
8
+ column-gap: var(--size-2);
8
9
  display: flex;
9
10
  font-size: var(--text-fluid-base);
10
- gap: var(--size-2);
11
11
  justify-content: center;
12
12
  line-height: var(--leading-none);
13
- margin-block-start: var(--flash-position, 0);
13
+ margin-block-start: var(--flash-position, var(--size-4));
14
14
  margin-inline: auto;
15
15
  min-block-size: var(--size-11);
16
16
  padding: var(--size-1) var(--size-4);
@@ -21,6 +21,16 @@
21
21
  }
22
22
  }
23
23
 
24
+ .flash--positive {
25
+ --flash-background: var(--color-positive);
26
+ --flash-color: white;
27
+ }
28
+
29
+ .flash--negative {
30
+ --flash-background: var(--color-negative);
31
+ --flash-color: white;
32
+ }
33
+
24
34
  .flash--extended {
25
35
  animation-name: appear-then-fade-extended;
26
36
  animation-duration: 12s;
@@ -1,12 +1,12 @@
1
1
  .input {
2
2
  appearance: none;
3
3
  background-color: var(--input-background, var(--color-bg));
4
+ block-size: var(--input-block-size, auto);
4
5
  border: 1px solid var(--input-border-color, var(--color-border));
5
6
  border-radius: var(--input-radius, var(--rounded-md));
6
7
  box-shadow: var(--input-box-shadow, var(--shadow-xs));
7
8
  font-size: var(--input-font-size, var(--text-sm));
8
9
  inline-size: var(--input-inline-size, var(--size-full));
9
- min-block-size: var(--input-block-size, var(--size-9));
10
10
  padding: var(--input-padding, .375rem .75rem);
11
11
 
12
12
  &:is(textarea[rows=auto]) {
@@ -8,13 +8,7 @@
8
8
  @media (width >= 48rem) {
9
9
  --sidebar-border-width: var(--border);
10
10
  --sidebar-padding: var(--size-2);
11
- --sidebar-width: 220px;
12
- }
13
-
14
- @media (width >= 64rem) {
15
- --sidebar-border-width: var(--border);
16
- --sidebar-padding: var(--size-2);
17
- --sidebar-width: 280px;
11
+ --sidebar-width: var(--max-i-3xs);
18
12
  }
19
13
  }
20
14
 
@@ -42,8 +36,8 @@
42
36
  background-color: rgb(from var(--color-border-light) r g b / .5);
43
37
  border-block-end-width: var(--border);
44
38
  block-size: var(--size-16);
39
+ column-gap: var(--size-4);
45
40
  display: flex;
46
- gap: var(--size-4);
47
41
  grid-area: header;
48
42
  padding-inline: var(--size-4);
49
43
  }
@@ -54,9 +48,9 @@
54
48
  display: flex;
55
49
  flex-direction: column;
56
50
  grid-area: sidebar;
57
- gap: var(--size-2);
58
51
  overflow-x: hidden;
59
52
  padding: var(--sidebar-padding, 0);
53
+ row-gap: var(--size-2);
60
54
  }
61
55
 
62
56
  #main {
@@ -2,7 +2,7 @@
2
2
  display: flex;
3
3
  flex-direction: column;
4
4
  padding: var(--size-1);
5
- gap: var(--size-1);
5
+ row-gap: var(--size-1);
6
6
  }
7
7
 
8
8
  .menu__header {
@@ -14,6 +14,7 @@
14
14
  .menu__group {
15
15
  display: flex;
16
16
  flex-direction: column;
17
+ row-gap: 1px;
17
18
  }
18
19
 
19
20
  .menu__separator {
@@ -4,7 +4,7 @@
4
4
  box-shadow: var(--shadow-lg);
5
5
  block-size: var(--size-full);
6
6
  color: var(--color-text);
7
- inline-size: var(--size-3-4);
7
+ inline-size: var(--sheet-size, var(--size-3-4));
8
8
  margin-inline: var(--sheet-margin);
9
9
  max-block-size: unset;
10
10
 
@@ -36,7 +36,7 @@
36
36
  }
37
37
 
38
38
  @media (width >= 40rem) {
39
- max-inline-size: var(--max-i-sm);
39
+ max-inline-size: var(--sheet-size, var(--max-i-sm));
40
40
  }
41
41
  }
42
42
 
@@ -0,0 +1,78 @@
1
+ .sidebar-menu {
2
+ display: flex;
3
+ flex-direction: column;
4
+ row-gap: var(--size-4);
5
+ block-size: var(--size-full);
6
+ }
7
+
8
+ .sidebar-menu__button {
9
+ --btn-background: transparent;
10
+ --btn-border-color: transparent;
11
+ --btn-box-shadow: none;
12
+ --btn-font-weight: var(--font-normal);
13
+ --btn-hover-color: var(--color-secondary);
14
+ --btn-justify-content: start;
15
+ --btn-outline-size: 0;
16
+ --btn-inline-size: var(--size-full);
17
+ --btn-padding: var(--size-1) var(--size-2);
18
+
19
+ &:focus-visible {
20
+ --btn-background: var(--color-secondary);
21
+ }
22
+
23
+ &:is(summary) {
24
+ &::after {
25
+ background-image: url("chevron-right.svg");
26
+ background-size: cover;
27
+ block-size: var(--size-4);
28
+ content: "";
29
+ filter: var(--color-filter-text);
30
+ inline-size: var(--size-4);
31
+ margin-inline-start: auto;
32
+ min-inline-size: var(--size-4);
33
+ transition: transform var(--time-200);
34
+ }
35
+
36
+ details[open] > &::after {
37
+ transform: var(--rotate-90);
38
+ }
39
+
40
+ &::-webkit-details-marker {
41
+ display: none;
42
+ }
43
+ }
44
+ }
45
+
46
+ .sidebar-menu__content {
47
+ display: flex;
48
+ flex-direction: column;
49
+ row-gap: var(--size-4);
50
+ overflow-y: scroll;
51
+ }
52
+
53
+ .sidebar-menu__group {
54
+ display: flex;
55
+ flex-direction: column;
56
+ }
57
+
58
+ .sidebar-menu__group-label {
59
+ color: var(--color-text-subtle);
60
+ font-size: var(--text-xs);
61
+ font-weight: var(--font-medium);
62
+ padding: var(--size-1_5) var(--size-2);
63
+ }
64
+
65
+ .sidebar-menu__items {
66
+ display: flex;
67
+ flex-direction: column;
68
+ row-gap: var(--size-1);
69
+ }
70
+
71
+ .sidebar-menu__sub {
72
+ border-inline-start-width: var(--border);
73
+ display: flex;
74
+ flex-direction: column;
75
+ margin-inline-start: var(--size-4);
76
+ padding: var(--size-0_5) var(--size-2);
77
+ row-gap: var(--size-1);
78
+ }
@@ -5,10 +5,8 @@
5
5
  border-radius: var(--rounded-full);
6
6
  border-width: var(--border-2);
7
7
  block-size: var(--size-5);
8
- cursor: pointer;
9
8
  inline-size: var(--size-9);
10
- transition-duration: var(--time-150);
11
- transition-property: var(--transition-colors);
9
+ transition: background-color var(--time-150);
12
10
 
13
11
  &:checked {
14
12
  background-color: var(--color-primary);
@@ -25,8 +23,7 @@
25
23
  border-radius: var(--rounded-full);
26
24
  content: "";
27
25
  display: block;
28
- transition-duration: var(--time-150);
29
- transition-property: margin;
26
+ transition: margin var(--time-150);
30
27
  }
31
28
 
32
29
  &:focus-visible {
@@ -1,4 +1,4 @@
1
- .table {
1
+ :where(.table) {
2
2
  caption-side: bottom;
3
3
  font-size: var(--text-sm);
4
4
  inline-size: var(--size-full);
@@ -1,7 +1,7 @@
1
1
  .tabs {
2
2
  display: flex;
3
3
  flex-direction: column;
4
- gap: var(--size-2);
4
+ row-gap: var(--size-2);
5
5
  }
6
6
 
7
7
  .tabs__list {
@@ -9,14 +9,13 @@
9
9
  block-size: var(--size-9);
10
10
  border-radius: var(--rounded-md);
11
11
  color: var(--color-text-subtle);
12
+ column-gap: var(--size-2);
12
13
  display: inline-flex;
13
- gap: var(--size-2);
14
14
  padding: var(--size-1);
15
15
  }
16
16
 
17
17
  .btn--tab {
18
18
  --btn-background: transparent;
19
- --btn-block-size: auto;
20
19
  --btn-border-color: transparent;
21
20
  --btn-box-shadow: none;
22
21
  --btn-hover-color: transparent;
@@ -30,14 +30,14 @@ trix-toolbar {
30
30
  .trix-button-row {
31
31
  background-color: var(--color-bg);
32
32
  border-block-width: 1px;
33
+ column-gap: 1px;
33
34
  padding-block: var(--size-1_5);
34
- gap: 1px;
35
35
  }
36
36
 
37
37
  .trix-button-group {
38
38
  border: 0 !important;
39
+ column-gap: 1px;
39
40
  margin: 0 !important;
40
- gap: 1px;
41
41
  }
42
42
 
43
43
  .trix-button {
@@ -12,7 +12,7 @@ export default class extends Controller {
12
12
  }
13
13
 
14
14
  #checkDependants() {
15
- this.dependantTargets.forEach(e => e.checked = this.dependeeTarget.checked)
15
+ this.dependantTargets.forEach(it => it.checked = this.dependeeTarget.checked)
16
16
  }
17
17
 
18
18
  #checkDependee() {
@@ -25,10 +25,10 @@ export default class extends Controller {
25
25
  }
26
26
 
27
27
  get #atLeastOneChecked() {
28
- return this.dependantTargets.some(e => e.checked)
28
+ return this.hasDependantTarget && this.dependantTargets.some(it => it.checked)
29
29
  }
30
30
 
31
31
  get #allChecked() {
32
- return this.dependantTargets.every(e => e.checked)
32
+ return this.hasDependantTarget && this.dependantTargets.every(it => it.checked)
33
33
  }
34
34
  }
@@ -1,6 +1,6 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
2
  import { get } from "https://esm.sh/@rails/request.js@0.0.11?standalone"
3
- import TomSelect from "https://esm.sh/tom-select@2.4.1/base?standalone"
3
+ import TomSelect from "https://esm.sh/tom-select@2.4.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" } }
@@ -11,7 +11,7 @@ export default class extends Controller {
11
11
  }
12
12
 
13
13
  connect() {
14
- this.combobox = new Combobox(this.inputTarget, this.listTarget)
14
+ this.combobox = new Combobox(this.inputTarget, this.listTarget, { firstOptionSelectionMode: "selected" })
15
15
  }
16
16
 
17
17
  disconnect() {
@@ -38,22 +38,24 @@ export default class extends Controller {
38
38
  }
39
39
 
40
40
  #reset() {
41
- this.listTarget.querySelectorAll(`.${this.selectedClass}`).forEach(element => {
42
- element.classList.remove(this.selectedClass)
41
+ this.listTarget.querySelectorAll(`.${this.selectedClass}`).forEach(it => {
42
+ it.classList.remove(this.selectedClass)
43
43
  })
44
44
  }
45
45
 
46
46
  #selectMatches(value) {
47
- this.listTarget.querySelectorAll(`[data-value*="${value.toLowerCase()}"]`).forEach(element => {
48
- element.classList.add(this.selectedClass)
47
+ this.listTarget.querySelectorAll(`[data-value*="${value.toLowerCase()}"]`).forEach(it => {
48
+ it.classList.add(this.selectedClass)
49
49
  })
50
50
  }
51
51
 
52
52
  #activate() {
53
53
  this.listTarget.classList.add(this.activeClass)
54
+ this.combobox.resetSelection()
54
55
  }
55
56
 
56
57
  #deactivate() {
57
58
  this.listTarget.classList.remove(this.activeClass)
59
+ this.combobox.resetSelection()
58
60
  }
59
61
  }
@@ -1,12 +1,21 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
+ import debounce from "https://esm.sh/lodash.debounce@4.0.8?standalone"
2
3
 
3
4
  export default class extends Controller {
4
5
  static targets = [ "cancel" ]
5
6
 
7
+ initialize() {
8
+ this.search = debounce(this.search.bind(this), 500)
9
+ }
10
+
6
11
  submit() {
7
12
  this.element.requestSubmit()
8
13
  }
9
14
 
15
+ search() {
16
+ this.element.requestSubmit()
17
+ }
18
+
10
19
  cancel() {
11
20
  this.cancelTarget?.click()
12
21
  }
@@ -1,5 +1,5 @@
1
1
  import { Controller } from "@hotwired/stimulus"
2
- import { MaskInput } from "https://esm.sh/maska@3.0.4?standalone"
2
+ import { MaskInput } from "https://esm.sh/maska@3.1.0?standalone"
3
3
 
4
4
  export default class extends Controller {
5
5
  connect() {
@@ -45,8 +45,8 @@ export default class extends Controller {
45
45
  }
46
46
 
47
47
  #updateTabstops() {
48
- this.itemTargets.forEach((element, index) => {
49
- element.tabIndex = index === this.indexValue ? 0 : -1
48
+ this.itemTargets.forEach((it, index) => {
49
+ it.tabIndex = index === this.indexValue ? 0 : -1
50
50
  })
51
51
  }
52
52
 
@@ -14,8 +14,8 @@ export default class extends Controller {
14
14
  }
15
15
 
16
16
  #requestOTP() {
17
- navigator.credentials.get(this.#options).then(otp => {
18
- this.element.value = otp.code
17
+ navigator.credentials.get(this.#options).then(it => {
18
+ this.element.value = it.code
19
19
  }).catch(error => {})
20
20
  }
21
21
 
@@ -30,13 +30,13 @@ export default class extends Controller {
30
30
  }
31
31
 
32
32
  #showCurrentTab() {
33
- this.buttonTargets.forEach((element, index) => {
34
- element.ariaSelected = index === this.indexValue
35
- element.tabIndex = index === this.indexValue ? 0 : -1
33
+ this.buttonTargets.forEach((it, index) => {
34
+ it.ariaSelected = index === this.indexValue
35
+ it.tabIndex = index === this.indexValue ? 0 : -1
36
36
  })
37
37
 
38
- this.tabTargets.forEach((element, index) => {
39
- element.hidden = index !== this.indexValue
38
+ this.tabTargets.forEach((it, index) => {
39
+ it.hidden = index !== this.indexValue
40
40
  })
41
41
  }
42
42
 
@@ -0,0 +1,27 @@
1
+ import { Controller } from "@hotwired/stimulus"
2
+
3
+ export default class extends Controller {
4
+ static targets = [ "title", "text" ]
5
+ static values = { defaultConfirmText: { type: String, default: "This action cannot be undone and may have permanent consequences." } }
6
+
7
+ #confirmCallback = null
8
+
9
+ connect() {
10
+ Turbo.config.forms.confirm = this.#confirm.bind(this)
11
+ }
12
+
13
+ disconnect() {
14
+ Turbo.config.forms.confirm = null
15
+ }
16
+
17
+ submit({ target }) {
18
+ this.#confirmCallback?.(target.returnValue === "confirm")
19
+ }
20
+
21
+ #confirm(message, target) {
22
+ this.titleTarget.textContent = message
23
+ this.textTarget.textContent = target.dataset.turboConfirmText || this.defaultConfirmTextValue
24
+ this.element.showModal()
25
+ return new Promise(resolve => (this.#confirmCallback = resolve))
26
+ }
27
+ }
@@ -9,10 +9,6 @@ class CssZero::InstallGenerator < Rails::Generators::Base
9
9
  copy_file "app/assets/stylesheets/base.css"
10
10
  end
11
11
 
12
- def copy_application_css
13
- copy_file "app/assets/stylesheets/application.css", force: true if sprockets?
14
- end
15
-
16
12
  def copy_application_layout
17
13
  template "app/views/layouts/application.html.erb", force: true
18
14
  end
@@ -26,8 +22,4 @@ class CssZero::InstallGenerator < Rails::Generators::Base
26
22
  def importmaps?
27
23
  Rails.root.join("config/importmap.rb").exist?
28
24
  end
29
-
30
- def sprockets?
31
- Rails.root.join("app/assets/config/manifest.js").exist?
32
- end
33
25
  end
@@ -18,17 +18,10 @@
18
18
  <link rel="apple-touch-icon" href="/icon.png">
19
19
 
20
20
  <%- style_link_target = options[:skip_asset_pipeline] ? "\"application\"" : ":app" -%>
21
- <%- if options[:skip_hotwire] || options[:skip_javascript] -%>
22
- <%%= stylesheet_link_tag "css-zero/reset" %>
23
- <%%= stylesheet_link_tag "css-zero/variables" %>
24
- <%%= stylesheet_link_tag <%= style_link_target %> %>
25
- <%%= stylesheet_link_tag "css-zero/utilities" %>
26
- <%- else -%>
27
21
  <%%= stylesheet_link_tag "css-zero/reset", "data-turbo-track": "reload" %>
28
22
  <%%= stylesheet_link_tag "css-zero/variables", "data-turbo-track": "reload" %>
29
23
  <%%= stylesheet_link_tag <%= style_link_target %>, "data-turbo-track": "reload" %>
30
24
  <%%= stylesheet_link_tag "css-zero/utilities", "data-turbo-track": "reload" %>
31
- <%- end -%>
32
25
  <%- if importmaps? -%>
33
26
  <%%= javascript_importmap_tags %>
34
27
  <%- else -%>
@@ -44,6 +37,9 @@
44
37
  </header>
45
38
 
46
39
  <main id="main">
40
+ <%% if notice.present? %>
41
+ <div popover class="flash" style="--flash-position: 5rem;" data-controller="element-removal" data-action="animationend->element-removal#remove" role="alert"><%%= notice %></div>
42
+ <%% end %>
47
43
  <div class="container">
48
44
  <%%= yield %>
49
45
  </div>
@@ -1,7 +1,3 @@
1
- <%% if notice.present? %>
2
- <div popover class="flash" style="--flash-position: 5rem;" data-controller="element-removal" data-action="animationend->element-removal#remove" role="alert"><%%= notice %></div>
3
- <%% end %>
4
-
5
1
  <%% content_for :title, "<%= human_name.pluralize %>" %>
6
2
 
7
3
  <div class="flex items-center justify-between mbe-4">
@@ -1,7 +1,3 @@
1
- <%% if notice.present? %>
2
- <div popover class="flash" style="--flash-position: 5rem;" data-controller="element-removal" data-action="animationend->element-removal#remove" role="alert"><%%= notice %></div>
3
- <%% end %>
4
-
5
1
  <%%= render @<%= singular_table_name %> %>
6
2
 
7
3
  <div class="flex flex-wrap items-center gap mbs-6" style="--row-gap: .5rem">
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: css-zero
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lázaro Nixon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-06 00:00:00.000000000 Z
11
+ date: 2025-02-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: lazaronixon@hotmail.com
@@ -25,8 +25,8 @@ files:
25
25
  - app/assets/stylesheets/css-zero/filters.css
26
26
  - app/assets/stylesheets/css-zero/reset.css
27
27
  - app/assets/stylesheets/css-zero/sizes.css
28
- - app/assets/stylesheets/css-zero/transform.css
29
- - app/assets/stylesheets/css-zero/transition.css
28
+ - app/assets/stylesheets/css-zero/transforms.css
29
+ - app/assets/stylesheets/css-zero/transitions.css
30
30
  - app/assets/stylesheets/css-zero/typography.css
31
31
  - app/assets/stylesheets/css-zero/utilities.css
32
32
  - app/assets/stylesheets/css-zero/variables.css
@@ -80,6 +80,7 @@ files:
80
80
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/progress.css
81
81
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/prose.css
82
82
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css
83
+ - lib/generators/css_zero/add/templates/app/assets/stylesheets/sidebar_menu.css
83
84
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/skeleton.css
84
85
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/switch.css
85
86
  - lib/generators/css_zero/add/templates/app/assets/stylesheets/table.css
@@ -113,6 +114,7 @@ files:
113
114
  - lib/generators/css_zero/add/templates/app/javascript/controllers/revealable_input_controller.js
114
115
  - lib/generators/css_zero/add/templates/app/javascript/controllers/sortable_controller.js
115
116
  - lib/generators/css_zero/add/templates/app/javascript/controllers/tabs_controller.js
117
+ - lib/generators/css_zero/add/templates/app/javascript/controllers/turbo_confirm_controller.js
116
118
  - lib/generators/css_zero/add/templates/app/javascript/controllers/upload_preview_controller.js
117
119
  - lib/generators/css_zero/add/templates/app/javascript/controllers/web_share_controller.js
118
120
  - lib/generators/css_zero/authentication/authentication_generator.rb
@@ -123,7 +125,6 @@ files:
123
125
  - lib/generators/css_zero/controller/templates/view.html.erb.tt
124
126
  - lib/generators/css_zero/install/USAGE
125
127
  - lib/generators/css_zero/install/install_generator.rb
126
- - lib/generators/css_zero/install/templates/app/assets/stylesheets/application.css
127
128
  - lib/generators/css_zero/install/templates/app/assets/stylesheets/base.css
128
129
  - lib/generators/css_zero/install/templates/app/views/layouts/application.html.erb
129
130
  - lib/generators/css_zero/mailer/mailer_generator.rb
@@ -1,26 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS (and SCSS, if configured) file within this directory, lib/assets/stylesheets, or any plugin's
6
- * vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require css-zero/reset
14
- *= require css-zero/animations
15
- *= require css-zero/borders
16
- *= require css-zero/colors
17
- *= require css-zero/effects
18
- *= require css-zero/filters
19
- *= require css-zero/sizes
20
- *= require css-zero/transform
21
- *= require css-zero/transition
22
- *= require css-zero/typography
23
- *= require_tree .
24
- *= require_self
25
- *= require css-zero/utilities
26
- */