css-zero 0.0.44 → 0.0.45
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/lib/css_zero/version.rb +1 -1
- data/lib/generators/css_zero/add/USAGE +1 -1
- data/lib/generators/css_zero/add/resources.yml +8 -0
- data/lib/generators/css_zero/add/templates/app/assets/stylesheets/dialog.css +2 -2
- data/lib/generators/css_zero/add/templates/app/assets/stylesheets/menu.css +39 -0
- data/lib/generators/css_zero/add/templates/app/assets/stylesheets/popover.css +41 -0
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/autoselect_controller.js +1 -1
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/dialog_controller.js +1 -5
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/fullscreen_controller.js +1 -1
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/hotkey_controller.js +1 -1
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/menu_controller.js +36 -0
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js +54 -0
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/tabs_controller.js +17 -11
- data/lib/generators/css_zero/add/templates/app/javascript/controllers/web_share_controller.js +3 -3
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fd059d67d4f761e329571d4e4eefac0325a6cf14224717ed3581a7ffe7acaf0e
|
4
|
+
data.tar.gz: 13afe2beaba626b1925504904160f01ab1c5589eb87d3bbe2baa9009c3e04cc2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5bfb100356389b839542aa74775abce26f05fc0f8816df589fabb91af96892b28fac6fe2179bb8aa11476595ae7457ce0a33b9faef7b91d771151ef2100f581b
|
7
|
+
data.tar.gz: 340f487beff85601804945afe83121df0c2ac1cf42ddd8fa80261a746754f788e8a31f2264b159de654745a7ee56dfa8b89e37175bdcbcdd5d9ca37aa32ae436
|
data/README.md
CHANGED
@@ -19,7 +19,8 @@ bin/rails generate css_zero:install
|
|
19
19
|
Add only the components you need. (Optional)
|
20
20
|
|
21
21
|
```
|
22
|
-
bin/rails generate css_zero:add
|
22
|
+
bin/rails generate css_zero:add --help
|
23
|
+
bin/rails generate css_zero:add layouts flash button input switch table ...
|
23
24
|
```
|
24
25
|
|
25
26
|
### Requirements
|
data/lib/css_zero/version.rb
CHANGED
@@ -2,7 +2,7 @@ Description:
|
|
2
2
|
This will add components into your project.
|
3
3
|
|
4
4
|
Components:
|
5
|
-
accordion alert avatar badge breadcrumb button card carousel
|
5
|
+
accordion alert avatar badge breadcrumb button card carousel check_all command collapsible dialog dropdown flash fullscreen hotkey input input_concerns layouts lightbox local_time pagination progress prose sheet skeleton switch table tabs upload_preview toggle web_share
|
6
6
|
|
7
7
|
Example:
|
8
8
|
bin/rails generate css_zero:add [components...]
|
@@ -32,6 +32,11 @@ dialog:
|
|
32
32
|
- app/assets/stylesheets/dialog.css
|
33
33
|
- app/javascript/controllers/dialog_controller.js
|
34
34
|
- app/assets/images/x.svg
|
35
|
+
dropdown:
|
36
|
+
- app/assets/stylesheets/popover.css
|
37
|
+
- app/javascript/controllers/popover_controller.js
|
38
|
+
- app/assets/stylesheets/menu.css
|
39
|
+
- app/javascript/controllers/menu_controller.js
|
35
40
|
flash:
|
36
41
|
- app/assets/stylesheets/flash.css
|
37
42
|
- app/javascript/controllers/element_removal_controller.js
|
@@ -68,6 +73,9 @@ pagination:
|
|
68
73
|
- app/assets/images/chevron-right.svg
|
69
74
|
- app/assets/images/chevron-left.svg
|
70
75
|
- app/assets/images/ellipsis.svg
|
76
|
+
popover:
|
77
|
+
- app/assets/stylesheets/popover.css
|
78
|
+
- app/javascript/controllers/popover_controller.js
|
71
79
|
progress:
|
72
80
|
- app/assets/stylesheets/progress.css
|
73
81
|
prose:
|
@@ -1,12 +1,12 @@
|
|
1
1
|
.dialog {
|
2
2
|
background-color: var(--color-bg);
|
3
|
-
border-width: var(--border);
|
4
3
|
border-radius: var(--rounded-lg);
|
4
|
+
border-width: var(--border);
|
5
5
|
box-shadow: var(--shadow-lg);
|
6
6
|
color: var(--color-text);
|
7
7
|
inline-size: var(--size-full);
|
8
8
|
margin: auto;
|
9
|
-
max-inline-size: var(--
|
9
|
+
max-inline-size: var(--max-i-lg);
|
10
10
|
|
11
11
|
&::backdrop {
|
12
12
|
background-color: rgba(0, 0, 0, .8);
|
@@ -0,0 +1,39 @@
|
|
1
|
+
.menu {
|
2
|
+
display: flex;
|
3
|
+
flex-direction: column;
|
4
|
+
padding: var(--size-1);
|
5
|
+
gap: var(--size-1);
|
6
|
+
}
|
7
|
+
|
8
|
+
.menu__header {
|
9
|
+
font-size: var(--text-xs);
|
10
|
+
font-weight: var(--font-semibold);
|
11
|
+
padding: var(--size-1_5) var(--size-2);
|
12
|
+
}
|
13
|
+
|
14
|
+
.menu__group {
|
15
|
+
display: flex;
|
16
|
+
flex-direction: column;
|
17
|
+
}
|
18
|
+
|
19
|
+
.menu__separator {
|
20
|
+
margin-inline: -0.25rem;
|
21
|
+
}
|
22
|
+
|
23
|
+
.menu__item {
|
24
|
+
--btn-border-color: transparent;
|
25
|
+
--btn-font-weight: var(--font-normal);
|
26
|
+
--btn-justify-content: start;
|
27
|
+
--btn-outline-size: 0;
|
28
|
+
--btn-padding: var(--size-1_5) var(--size-2);
|
29
|
+
|
30
|
+
.menu:not(:hover) &:focus {
|
31
|
+
--btn-background: var(--color-secondary);
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
.menu__item-key {
|
36
|
+
color: var(--color-text-subtle);
|
37
|
+
font-size: var(--text-xs);
|
38
|
+
margin-inline-start: auto;
|
39
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
.popover {
|
2
|
+
background-color: var(--color-bg);
|
3
|
+
border-radius: var(--rounded-md);
|
4
|
+
border-width: var(--border);
|
5
|
+
box-shadow: var(--shadow-md);
|
6
|
+
color: var(--color-text);
|
7
|
+
margin-block: var(--size-1);
|
8
|
+
inline-size: var(--popover-size, max-content);
|
9
|
+
inset-inline-start: var(--popover-position, 0);
|
10
|
+
|
11
|
+
/* Setup animation */
|
12
|
+
opacity: 0;
|
13
|
+
transform: var(--scale-95);
|
14
|
+
transition-behavior: allow-discrete;
|
15
|
+
transition-duration: var(--time-150);
|
16
|
+
transition-property: display, overlay, opacity, transform;
|
17
|
+
|
18
|
+
/* In animation */
|
19
|
+
&[open] {
|
20
|
+
opacity: 1; transform: var(--scale-100);
|
21
|
+
}
|
22
|
+
|
23
|
+
/* Out animation */
|
24
|
+
@starting-style {
|
25
|
+
&[open] {
|
26
|
+
opacity: 0; transform: var(--scale-95);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
.popover--flip {
|
32
|
+
inset-block-end: 100%;
|
33
|
+
}
|
34
|
+
|
35
|
+
.popover--start {
|
36
|
+
--popover-position: 0;
|
37
|
+
}
|
38
|
+
|
39
|
+
.popover--end {
|
40
|
+
--popover-position: auto;
|
41
|
+
}
|
@@ -3,10 +3,6 @@ import { Controller } from "@hotwired/stimulus"
|
|
3
3
|
export default class extends Controller {
|
4
4
|
static targets = [ "menu" ]
|
5
5
|
|
6
|
-
show() {
|
7
|
-
this.menuTarget.show()
|
8
|
-
}
|
9
|
-
|
10
6
|
showModal() {
|
11
7
|
this.menuTarget.showModal()
|
12
8
|
}
|
@@ -16,6 +12,6 @@ export default class extends Controller {
|
|
16
12
|
}
|
17
13
|
|
18
14
|
closeOnClickOutside({ target }) {
|
19
|
-
|
15
|
+
target.nodeName === "DIALOG" && this.close()
|
20
16
|
}
|
21
17
|
}
|
@@ -2,7 +2,7 @@ import { Controller } from "@hotwired/stimulus"
|
|
2
2
|
|
3
3
|
export default class extends Controller {
|
4
4
|
click(event) {
|
5
|
-
|
5
|
+
this.#isClickable && !this.#shouldIgnore(event) && this.element.click()
|
6
6
|
}
|
7
7
|
|
8
8
|
#shouldIgnore(event) {
|
@@ -0,0 +1,36 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
static targets = [ "item" ]
|
5
|
+
static values = { index: Number }
|
6
|
+
|
7
|
+
indexValueChanged() {
|
8
|
+
this.#removeTabstops()
|
9
|
+
this.#focusCurrentItem()
|
10
|
+
}
|
11
|
+
|
12
|
+
prev() {
|
13
|
+
this.indexValue > 0 && this.indexValue--
|
14
|
+
}
|
15
|
+
|
16
|
+
next() {
|
17
|
+
this.indexValue < this.#lastIndex && this.indexValue++
|
18
|
+
}
|
19
|
+
|
20
|
+
reset() {
|
21
|
+
this.indexValue = 0
|
22
|
+
}
|
23
|
+
|
24
|
+
#removeTabstops() {
|
25
|
+
this.itemTargets.forEach(item => item.tabIndex = -1)
|
26
|
+
}
|
27
|
+
|
28
|
+
#focusCurrentItem() {
|
29
|
+
this.itemTargets[this.indexValue].tabIndex = 0
|
30
|
+
this.itemTargets[this.indexValue].focus()
|
31
|
+
}
|
32
|
+
|
33
|
+
get #lastIndex() {
|
34
|
+
return this.itemTargets.length -1
|
35
|
+
}
|
36
|
+
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus"
|
2
|
+
|
3
|
+
const BOTTOM_THRESHOLD = 0
|
4
|
+
|
5
|
+
export default class extends Controller {
|
6
|
+
static targets = [ "button", "menu" ]
|
7
|
+
static classes = [ "flip" ]
|
8
|
+
|
9
|
+
#closeTimer
|
10
|
+
|
11
|
+
show() {
|
12
|
+
this.#resetTimer()
|
13
|
+
this.menuTarget.show()
|
14
|
+
this.#updateExpanded()
|
15
|
+
this.#orient()
|
16
|
+
}
|
17
|
+
|
18
|
+
close() {
|
19
|
+
this.menuTarget.close()
|
20
|
+
this.#updateExpanded()
|
21
|
+
}
|
22
|
+
|
23
|
+
closeLater() {
|
24
|
+
this.#closeTimer = setTimeout(() => this.close(), 300)
|
25
|
+
}
|
26
|
+
|
27
|
+
toggle() {
|
28
|
+
this.menuTarget.open ? this.close() : this.show()
|
29
|
+
}
|
30
|
+
|
31
|
+
closeOnClickOutside({ target }) {
|
32
|
+
!this.element.contains(target) && this.close()
|
33
|
+
}
|
34
|
+
|
35
|
+
#resetTimer() {
|
36
|
+
clearTimeout(this.#closeTimer)
|
37
|
+
}
|
38
|
+
|
39
|
+
#orient() {
|
40
|
+
this.menuTarget.classList.toggle(this.flipClass, this.#distanceToBottom < BOTTOM_THRESHOLD)
|
41
|
+
}
|
42
|
+
|
43
|
+
#updateExpanded() {
|
44
|
+
this.buttonTarget.ariaExpanded = this.menuTarget.open
|
45
|
+
}
|
46
|
+
|
47
|
+
get #distanceToBottom() {
|
48
|
+
return window.innerHeight - this.#boundingClientRect.bottom
|
49
|
+
}
|
50
|
+
|
51
|
+
get #boundingClientRect() {
|
52
|
+
return this.menuTarget.getBoundingClientRect()
|
53
|
+
}
|
54
|
+
}
|
@@ -4,32 +4,38 @@ export default class extends Controller {
|
|
4
4
|
static targets = [ "button", "tab" ]
|
5
5
|
static values = { index: Number }
|
6
6
|
|
7
|
-
indexValueChanged() {
|
8
|
-
this.#
|
7
|
+
indexValueChanged(index, previousIndex) {
|
8
|
+
this.#showCurrentTab()
|
9
|
+
this.#focusCurrentButton(previousIndex !== undefined)
|
9
10
|
}
|
10
11
|
|
11
|
-
select({
|
12
|
-
this.indexValue =
|
12
|
+
select({ target }) {
|
13
|
+
this.indexValue = this.buttonTargets.indexOf(target)
|
13
14
|
}
|
14
15
|
|
15
16
|
prev() {
|
16
|
-
|
17
|
+
this.indexValue > 0 && this.indexValue--
|
17
18
|
}
|
18
19
|
|
19
20
|
next() {
|
20
|
-
|
21
|
+
this.indexValue < this.#lastIndex && this.indexValue++
|
21
22
|
}
|
22
23
|
|
23
|
-
#
|
24
|
-
this.buttonTargets.forEach((
|
25
|
-
|
24
|
+
#showCurrentTab() {
|
25
|
+
this.buttonTargets.forEach((button, index) => {
|
26
|
+
button.ariaSelected = index == this.indexValue
|
27
|
+
button.tabIndex = index == this.indexValue ? 0 : -1
|
26
28
|
})
|
27
29
|
|
28
|
-
this.tabTargets.forEach((
|
29
|
-
|
30
|
+
this.tabTargets.forEach((tab, index) => {
|
31
|
+
tab.hidden = index !== this.indexValue
|
30
32
|
})
|
31
33
|
}
|
32
34
|
|
35
|
+
#focusCurrentButton(shouldFocus) {
|
36
|
+
shouldFocus && this.buttonTargets[this.indexValue].focus()
|
37
|
+
}
|
38
|
+
|
33
39
|
get #lastIndex() {
|
34
40
|
return this.tabTargets.length -1
|
35
41
|
}
|
data/lib/generators/css_zero/add/templates/app/javascript/controllers/web_share_controller.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
import { Controller } from "@hotwired/stimulus"
|
2
2
|
|
3
|
+
const APPLICATION_NAME = "my_application"
|
4
|
+
|
3
5
|
export default class extends Controller {
|
4
6
|
static values = { title: String, text: String, url: String, file: String }
|
5
7
|
|
6
|
-
#applicationName = 'MyApplication'
|
7
|
-
|
8
8
|
connect() {
|
9
9
|
this.element.hidden = !navigator.canShare
|
10
10
|
}
|
@@ -34,7 +34,7 @@ export default class extends Controller {
|
|
34
34
|
async #getFileObject() {
|
35
35
|
const response = await fetch(this.fileValue)
|
36
36
|
const blob = await response.blob()
|
37
|
-
const randomPrefix = `${
|
37
|
+
const randomPrefix = `${APPLICATION_NAME}_${Math.random().toString(36).slice(2)}`
|
38
38
|
const fileName = `${randomPrefix}.${blob.type.split('/').pop()}`
|
39
39
|
|
40
40
|
return new File([ blob ], fileName, { type: blob.type })
|
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: 0.0.
|
4
|
+
version: 0.0.45
|
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: 2024-10-
|
11
|
+
date: 2024-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: lazaronixon@hotmail.com
|
@@ -70,6 +70,8 @@ files:
|
|
70
70
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/input.css
|
71
71
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/layouts.css
|
72
72
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/lightbox.css
|
73
|
+
- lib/generators/css_zero/add/templates/app/assets/stylesheets/menu.css
|
74
|
+
- lib/generators/css_zero/add/templates/app/assets/stylesheets/popover.css
|
73
75
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/progress.css
|
74
76
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/prose.css
|
75
77
|
- lib/generators/css_zero/add/templates/app/assets/stylesheets/sheet.css
|
@@ -92,6 +94,8 @@ files:
|
|
92
94
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/hotkey_controller.js
|
93
95
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/lightbox_controller.js
|
94
96
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/local_time_controller.js
|
97
|
+
- lib/generators/css_zero/add/templates/app/javascript/controllers/menu_controller.js
|
98
|
+
- lib/generators/css_zero/add/templates/app/javascript/controllers/popover_controller.js
|
95
99
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/revealable_input_controller.js
|
96
100
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/tabs_controller.js
|
97
101
|
- lib/generators/css_zero/add/templates/app/javascript/controllers/upload_preview_controller.js
|