css-zero 1.0.6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/css-zero/reset.css +34 -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/carousel.css +2 -2
  17. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/combobox.css +1 -1
  18. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/command.css +1 -0
  19. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/datepicker.css +0 -4
  20. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/flash.css +14 -4
  21. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/input.css +1 -1
  22. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/layouts.css +3 -9
  23. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/menu.css +2 -1
  24. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css +2 -2
  25. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/sidebar_menu.css +78 -0
  26. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/switch.css +2 -5
  27. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/table.css +1 -1
  28. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/tabs.css +2 -3
  29. data/lib/generators/css_zero/add/templates/app/assets/stylesheets/trix.css +2 -2
  30. data/lib/generators/css_zero/add/templates/app/javascript/controllers/check_all_controller.js +3 -3
  31. data/lib/generators/css_zero/add/templates/app/javascript/controllers/combobox_controller.js +1 -1
  32. data/lib/generators/css_zero/add/templates/app/javascript/controllers/command_controller.js +7 -5
  33. data/lib/generators/css_zero/add/templates/app/javascript/controllers/inputmask_controller.js +1 -1
  34. data/lib/generators/css_zero/add/templates/app/javascript/controllers/menu_controller.js +2 -2
  35. data/lib/generators/css_zero/add/templates/app/javascript/controllers/otp_input_controller.js +2 -2
  36. data/lib/generators/css_zero/add/templates/app/javascript/controllers/tabs_controller.js +5 -5
  37. data/lib/generators/css_zero/add/templates/app/javascript/controllers/turbo_confirm_controller.js +27 -0
  38. data/lib/generators/css_zero/install/install_generator.rb +0 -8
  39. data/lib/generators/css_zero/install/templates/app/views/layouts/application.html.erb +3 -7
  40. data/lib/generators/css_zero/scaffold/templates/index.html.erb.tt +0 -4
  41. data/lib/generators/css_zero/scaffold/templates/show.html.erb.tt +0 -4
  42. metadata +6 -5
  43. data/lib/generators/css_zero/install/templates/app/assets/stylesheets/application.css +0 -26
  44. /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: 60c8675345856b7bdf9990dc3af070ac0794334cca1f4ec8f2e88528d5c46cc2
4
+ data.tar.gz: 279165e953e06ba066d9b01b3ec9675481146413a75fa2ca782cf2f450108ded
5
5
  SHA512:
6
- metadata.gz: be7d3e8f370052305a2c7a8da5f4b7c8cd02742066fb487301e51b83d6ca316c5713f4a6bacd40df10f68b667acc40c219264014af8151614178eaa662ac5981
7
- data.tar.gz: ea8983f6eb11a7b5e8d45dd56d6c2211857a6161b494c3ba60a56968c3b6bdae584db94158137ed00930f8ed8c3aaaaf8ea43b42cd3c2f4734ce3d5ba0290ba2
6
+ metadata.gz: 18ed5851b5bff226129e2144b5be40544bd88799bf254b018736ffc75d1f97cfdbed47cb3510683f7f7f738f65648dc6fa6b1f589f46653fb9260b29eee41ebb
7
+ data.tar.gz: 0a22627f081ab2a08a21afa0e78ad5c7652b8e5134b8a97fe6774d97dfe838ad1fb608f062fe6d58ae56f4320170a6ef77f1482e05b26f6ca8a776e62bf4f1b9
@@ -356,11 +356,27 @@ 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;
364
380
  }
365
381
 
366
382
  /*
@@ -375,16 +391,16 @@ input:where([type='button'], [type='reset'], [type='submit']),
375
391
  Set color scheme to light and dark.
376
392
  */
377
393
 
378
- html {
394
+ :root {
379
395
  color-scheme: light dark;
380
396
  }
381
397
 
382
398
  /*
383
- Prevent page scroll when modal dialog is open.
399
+ Correct the arrow style of datalist in Chrome.
384
400
  */
385
401
 
386
- html:has(dialog:modal[open]) {
387
- overflow: hidden;
402
+ ::-webkit-calendar-picker-indicator {
403
+ line-height: 1em;
388
404
  }
389
405
 
390
406
  /*
@@ -392,29 +408,25 @@ html:has(dialog:modal[open]) {
392
408
  */
393
409
 
394
410
  option {
395
- padding-block: 3px;
411
+ padding: 2px 4px;
396
412
  }
397
413
 
398
414
  /*
399
- Make turbo frame become pseudo-box by default.
400
- */
401
-
402
- turbo-frame {
403
- display: contents;
404
- }
405
-
406
- /*
407
- Make elements with the HTML hidden attribute stay hidden by default.
415
+ Prevent page scroll when modal dialog is open.
408
416
  */
409
417
 
410
- [hidden]:where(:not([hidden='until-found'])) {
411
- display: none !important;
418
+ html:has(dialog:modal[open]) {
419
+ overflow: hidden;
412
420
  }
413
421
 
414
422
  /*
415
- Make elements with the HTML contents attribute become pseudo-box by default.
423
+ Remove all animations and transitions for people that prefer not to see them
416
424
  */
417
425
 
418
- [contents] {
419
- display: contents !important;
426
+ @media (prefers-reduced-motion: reduce) {
427
+ *, ::before, ::after, ::backdrop {
428
+ animation-duration: 0.01ms !important;
429
+ animation-iteration-count: 1 !important;
430
+ transition-duration: 0.01ms !important;
431
+ }
420
432
  }
@@ -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.0"
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;
@@ -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,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.0
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-15 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
- */