@anydigital/bricks 0.25.0 → 0.26.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +62 -44
- package/_config.yml +5 -0
- package/{src/bricks/__html.liquid → _includes/bricks/html.liquid} +11 -11
- package/{src/bricks/__html.njk → _includes/bricks/html.njk} +8 -8
- package/assets/breakout.css +150 -0
- package/bricks.gemspec +16 -0
- package/package.json +3 -3
- /package/{src/bricks/_gtm.liquid → _includes/bricks/gtm.liquid} +0 -0
- /package/{src/bricks/_gtm.njk → _includes/bricks/gtm.njk} +0 -0
- /package/{src/bricks/_nav.liquid → _includes/bricks/nav.liquid} +0 -0
- /package/{dist → assets}/bricks.css +0 -0
package/README.md
CHANGED
|
@@ -1,32 +1,36 @@
|
|
|
1
|
-
# *Any*
|
|
1
|
+
# `bricks[.css]` <sup><sub>by *Any*digital</sub></sup>
|
|
2
2
|
|
|
3
|
-
Framework-agnostic CSS utilities and single-file
|
|
3
|
+
Framework-agnostic, Tailwind-compatible CSS utilities and single-file `bricks` for modern web development.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<!--section:css-h2-->
|
|
6
|
+
|
|
7
|
+
## CSS 'Bricks' <br><sub>from https://github.com/anydigital/bricks</sub> <a id="bricks"></a>
|
|
6
8
|
|
|
7
|
-
###
|
|
9
|
+
### Install CSS
|
|
10
|
+
|
|
11
|
+
Via CDN:
|
|
8
12
|
|
|
9
13
|
```html
|
|
10
|
-
<link
|
|
14
|
+
<link href="https://cdn.jsdelivr.net/npm/@anydigital/bricks@0/dist/bricks.min.css" rel="stylesheet" />
|
|
11
15
|
```
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
Or import source styles via npm:
|
|
14
18
|
|
|
15
19
|
```sh
|
|
16
20
|
npm install @anydigital/bricks
|
|
17
21
|
```
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```css
|
|
23
|
+
```css {data-caption=.css}
|
|
22
24
|
@import "@anydigital/bricks";
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
<details><summary>
|
|
28
|
+
|
|
29
|
+
### `_base.css` styles
|
|
26
30
|
|
|
27
|
-
|
|
31
|
+
</summary>
|
|
28
32
|
|
|
29
|
-
|
|
33
|
+
#### Overflow Control
|
|
30
34
|
|
|
31
35
|
Prevents horizontal overflow and scrolling on the entire page:
|
|
32
36
|
|
|
@@ -39,7 +43,7 @@ body {
|
|
|
39
43
|
|
|
40
44
|
This is automatically applied when you include the stylesheet.
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
#### Full Viewport Height
|
|
43
47
|
|
|
44
48
|
Ensures the body element takes at least the full height of the viewport using dynamic viewport height for better mobile support:
|
|
45
49
|
|
|
@@ -51,7 +55,26 @@ body {
|
|
|
51
55
|
|
|
52
56
|
This is automatically applied when you include the stylesheet.
|
|
53
57
|
|
|
54
|
-
|
|
58
|
+
#### Flexbox Layout
|
|
59
|
+
|
|
60
|
+
Sets up a flexible column layout structure:
|
|
61
|
+
|
|
62
|
+
```css
|
|
63
|
+
body {
|
|
64
|
+
display: flex;
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
body > main {
|
|
69
|
+
flex-grow: 1;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The body becomes a flex container with column direction, and `main` elements automatically grow to fill available space. This is useful for creating sticky footers and full-height layouts.
|
|
74
|
+
|
|
75
|
+
This is automatically applied when you include the stylesheet.
|
|
76
|
+
|
|
77
|
+
#### Typography Enhancements
|
|
55
78
|
|
|
56
79
|
Improves text rendering and readability:
|
|
57
80
|
|
|
@@ -69,7 +92,13 @@ body {
|
|
|
69
92
|
|
|
70
93
|
This is automatically applied when you include the stylesheet.
|
|
71
94
|
|
|
72
|
-
|
|
95
|
+
</details>
|
|
96
|
+
|
|
97
|
+
<details><summary>
|
|
98
|
+
|
|
99
|
+
### `_prose.css` Tailwind Typography enhancements
|
|
100
|
+
|
|
101
|
+
</summary>
|
|
73
102
|
|
|
74
103
|
The `.prose` class provides enhanced typography for article content and long-form text with container-like behavior:
|
|
75
104
|
|
|
@@ -112,7 +141,9 @@ The `.prose` class provides enhanced typography for article content and long-for
|
|
|
112
141
|
|
|
113
142
|
- Code blocks with `data-caption` attribute display the caption above the code block (styled with 50% opacity, italic, and `1.5em` bottom margin)
|
|
114
143
|
|
|
115
|
-
|
|
144
|
+
</details>
|
|
145
|
+
|
|
146
|
+
### `_prism.css` enhancements
|
|
116
147
|
|
|
117
148
|
Includes specialized styling for Prism.js, specifically focusing on treeview components:
|
|
118
149
|
|
|
@@ -122,7 +153,11 @@ Includes specialized styling for Prism.js, specifically focusing on treeview com
|
|
|
122
153
|
- Last-child entry names have no `::before` pseudo-element
|
|
123
154
|
- Supports complex file tree visualizations out of the box
|
|
124
155
|
|
|
125
|
-
|
|
156
|
+
<details><summary>
|
|
157
|
+
|
|
158
|
+
### `_util.css` helpers
|
|
159
|
+
|
|
160
|
+
</summary>
|
|
126
161
|
|
|
127
162
|
#### Scrollbar Inversion
|
|
128
163
|
|
|
@@ -159,26 +194,9 @@ This ensures the icon and the text stay together on the same line. If you need n
|
|
|
159
194
|
|
|
160
195
|
This is automatically included when you import the stylesheet.
|
|
161
196
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
Sets up a flexible column layout structure:
|
|
165
|
-
|
|
166
|
-
```css
|
|
167
|
-
body {
|
|
168
|
-
display: flex;
|
|
169
|
-
flex-direction: column;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
body > main {
|
|
173
|
-
flex-grow: 1;
|
|
174
|
-
}
|
|
175
|
-
```
|
|
197
|
+
</details>
|
|
176
198
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
This is automatically applied when you include the stylesheet.
|
|
180
|
-
|
|
181
|
-
### Breakout CSS
|
|
199
|
+
### `breakout-css` included
|
|
182
200
|
|
|
183
201
|
Includes [breakout-css](https://github.com/anydigital/breakout-css) utilities for breaking out images and figures beyond their container width. Use the `.breakout` class to allow elements to extend beyond their parent container:
|
|
184
202
|
|
|
@@ -192,11 +210,11 @@ The breakout container has `10%` inline padding and a max-width of `calc(10% + 6
|
|
|
192
210
|
|
|
193
211
|
<!--section:njk-liquid-h2-->
|
|
194
212
|
|
|
195
|
-
## Universal Template 'Bricks' <small>(`.njk` & `.liquid`)</small> <sub>from https://github.com/anydigital/bricks</sub>
|
|
213
|
+
## Universal Template 'Bricks' <small>(`.njk` & `.liquid`)</small> <br><sub>from https://github.com/anydigital/bricks</sub>
|
|
196
214
|
|
|
197
|
-
The package includes reusable templates in the
|
|
215
|
+
The package includes reusable templates in the `./src/bricks/` directory. These are useful for common web development patterns.
|
|
198
216
|
|
|
199
|
-
###
|
|
217
|
+
### Install Templates
|
|
200
218
|
|
|
201
219
|
```sh
|
|
202
220
|
npm install @anydigital/bricks
|
|
@@ -283,8 +301,12 @@ A navigation template `bricks/_nav.{njk|liquid}` that renders a list of navigati
|
|
|
283
301
|
</nav>
|
|
284
302
|
```
|
|
285
303
|
|
|
304
|
+
<details><summary>
|
|
305
|
+
|
|
286
306
|
### Google Tag Manager <small>(`_gtm.*`)</small>
|
|
287
307
|
|
|
308
|
+
</summary>
|
|
309
|
+
|
|
288
310
|
A template `bricks/_gtm.{njk|liquid}` for embedding Google Tag Manager scripts in your pages.
|
|
289
311
|
|
|
290
312
|
**Parameters:**
|
|
@@ -298,8 +320,4 @@ A template `bricks/_gtm.{njk|liquid}` for embedding Google Tag Manager scripts i
|
|
|
298
320
|
- https://github.com/anydigital/bricks/blob/main/bricks/__html.njk
|
|
299
321
|
- https://github.com/anydigital/bricks/blob/main/bricks/__html.liquid
|
|
300
322
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
## License
|
|
304
|
-
|
|
305
|
-
MIT
|
|
323
|
+
</details>
|
package/_config.yml
ADDED
|
@@ -4,32 +4,32 @@
|
|
|
4
4
|
<meta charset="utf-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover">
|
|
6
6
|
<title>
|
|
7
|
-
{{
|
|
7
|
+
{%- if title %}{{ title | strip_html | append: ' | ' }}{% endif -%}
|
|
8
8
|
{{- site.title -}}
|
|
9
9
|
</title>
|
|
10
10
|
<link rel="icon" href="/favicon.ico">
|
|
11
11
|
|
|
12
12
|
{%- for href in site.styles %}
|
|
13
|
-
<link rel="stylesheet" href="{{ href }}">
|
|
13
|
+
<link rel="stylesheet" href="{{ href | relative_url }}">
|
|
14
14
|
{%- endfor %}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
<style>
|
|
16
|
+
{{ site.inline_styles | join: '\n' }}
|
|
17
|
+
</style>
|
|
18
18
|
|
|
19
19
|
{%- for src in site.scripts %}
|
|
20
20
|
<script src="{{ src }}" defer></script>
|
|
21
21
|
{%- endfor %}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
<script type="module">
|
|
23
|
+
{{ site.inline_scripts | join: '\n' }}
|
|
24
|
+
</script>
|
|
25
25
|
|
|
26
26
|
{{ content_for_header }}
|
|
27
|
-
{%
|
|
27
|
+
{% include bricks/gtm.liquid %}
|
|
28
28
|
</head>
|
|
29
29
|
|
|
30
30
|
<body>
|
|
31
|
-
{%
|
|
31
|
+
{% include bricks/gtm.liquid for_body=true %}
|
|
32
|
+
|
|
32
33
|
{{ body }}
|
|
33
|
-
{% # %}
|
|
34
34
|
</body>
|
|
35
35
|
</html>
|
|
@@ -12,23 +12,23 @@
|
|
|
12
12
|
{%- for href in site.styles %}
|
|
13
13
|
<link rel="stylesheet" href="{{ href }}" />
|
|
14
14
|
{%- endfor %}
|
|
15
|
-
{# prettier-ignore-start #}
|
|
16
|
-
|
|
17
|
-
{# prettier-ignore-end #}
|
|
15
|
+
{# prettier-ignore-start #}<style>
|
|
16
|
+
{{ site.inline_styles | d([]) | join('\n') }}
|
|
17
|
+
</style>{# prettier-ignore-end #}
|
|
18
18
|
|
|
19
19
|
{%- for src in site.scripts %}
|
|
20
20
|
<script src="{{ src }}" defer></script>
|
|
21
21
|
{%- endfor %}
|
|
22
|
-
{# prettier-ignore-start #}
|
|
23
|
-
|
|
24
|
-
{# prettier-ignore-end #}
|
|
22
|
+
{# prettier-ignore-start #}<script type="module">
|
|
23
|
+
{{ site.inline_scripts | d([]) | join('\n') }}
|
|
24
|
+
</script>{# prettier-ignore-end #}
|
|
25
25
|
|
|
26
26
|
{{ content_for_header }}
|
|
27
|
-
{% include 'bricks/
|
|
27
|
+
{% include 'bricks/gtm.njk' %}
|
|
28
28
|
</head>
|
|
29
29
|
|
|
30
30
|
<body>
|
|
31
|
-
{% set for_body = true %}{% include 'bricks/
|
|
31
|
+
{% set for_body = true %}{% include 'bricks/gtm.njk' %}
|
|
32
32
|
{% block body %}
|
|
33
33
|
{% endblock %}
|
|
34
34
|
</body>
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/* Breakout CSS - Framework-agnostic utilities for breaking out images and figures */
|
|
2
|
+
|
|
3
|
+
.breakout {
|
|
4
|
+
/* Prepare the container for breakout elements */
|
|
5
|
+
padding-inline: 10%;
|
|
6
|
+
max-width: calc(10% + 65ch + 10%);
|
|
7
|
+
|
|
8
|
+
/* Direct children, or wrapped in <p> for Markdown support */
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.breakout > img:not(does-not-exist):not(.does-not-exist),.breakout > picture:not(does-not-exist):not(.does-not-exist),.breakout > figure:not(does-not-exist):not(.does-not-exist),.breakout > canvas:not(does-not-exist):not(.does-not-exist),.breakout > audio:not(does-not-exist):not(.does-not-exist),.breakout > table:not(does-not-exist):not(.does-not-exist),.breakout > pre:not(does-not-exist):not(.does-not-exist),.breakout > iframe:not(does-not-exist):not(.does-not-exist),.breakout > object:not(does-not-exist):not(.does-not-exist),.breakout > embed:not(does-not-exist):not(.does-not-exist),.breakout > video:not(does-not-exist):not(.does-not-exist),.breakout > .breakout-item:not(does-not-exist),.breakout > .breakout-item-max:not(does-not-exist),.breakout > p > img:not(.does-not-exist),.breakout > p > picture:not(.does-not-exist),.breakout > p > figure:not(.does-not-exist),.breakout > p > canvas:not(.does-not-exist),.breakout > p > audio:not(.does-not-exist),.breakout > p > table:not(.does-not-exist),.breakout > p > pre:not(.does-not-exist),.breakout > p > iframe:not(.does-not-exist),.breakout > p > object:not(.does-not-exist),.breakout > p > embed:not(.does-not-exist),.breakout > p > video:not(.does-not-exist),.breakout > p > .breakout-item,.breakout > p > .breakout-item-max {
|
|
12
|
+
width: -moz-fit-content;
|
|
13
|
+
width: fit-content;
|
|
14
|
+
min-width: 100%;
|
|
15
|
+
max-width: 125%;
|
|
16
|
+
margin-left: 50%;
|
|
17
|
+
transform: translateX(-50%);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/*** .does-not-exist is used below to avoid !important-s @TODO ***/
|
|
21
|
+
|
|
22
|
+
/* Respect inline blocks' min-width */
|
|
23
|
+
|
|
24
|
+
.breakout > img:not(does-not-exist):not(.does-not-exist),.breakout > picture:not(does-not-exist):not(.does-not-exist),.breakout > figure:not(does-not-exist):not(.does-not-exist),.breakout > canvas:not(does-not-exist):not(.does-not-exist),.breakout > audio:not(does-not-exist):not(.does-not-exist),.breakout > p > img:not(.does-not-exist),.breakout > p > picture:not(.does-not-exist),.breakout > p > figure:not(.does-not-exist),.breakout > p > canvas:not(.does-not-exist),.breakout > p > audio:not(.does-not-exist) {
|
|
25
|
+
min-width: auto;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Tables are so special :( */
|
|
29
|
+
|
|
30
|
+
.breakout > table:not(does-not-exist):not(.does-not-exist),.breakout > p > table:not(.does-not-exist) {
|
|
31
|
+
/* Let them full-bleed */
|
|
32
|
+
width: -moz-max-content;
|
|
33
|
+
width: max-content;
|
|
34
|
+
min-width: auto;
|
|
35
|
+
max-width: 100vw;
|
|
36
|
+
padding-inline: 7.5%;
|
|
37
|
+
|
|
38
|
+
/* Let them scroll */
|
|
39
|
+
display: block;
|
|
40
|
+
overflow-x: auto;
|
|
41
|
+
-webkit-overflow-scrolling: touch; /* Smooth scroll for iOS */
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Max out the width of the element */
|
|
45
|
+
|
|
46
|
+
.breakout > .breakout-item-max:not(does-not-exist),.breakout > p > .breakout-item-max {
|
|
47
|
+
width: 125% !important; /* !important is for cases like figure.breakout-item-max @TODO */
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.breakout-headings h2:not([class]),.breakout-headings h3:not([class]),.breakout-headings h4:not([class]),.breakout-headings hr {
|
|
51
|
+
position: relative;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.breakout-headings h2:not([class])::before {
|
|
55
|
+
content: "";
|
|
56
|
+
display: block;
|
|
57
|
+
position: absolute;
|
|
58
|
+
background-color: rgba(0, 0, 0, 5%);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.breakout-headings h3:not([class])::before {
|
|
62
|
+
content: "";
|
|
63
|
+
display: block;
|
|
64
|
+
position: absolute;
|
|
65
|
+
background-color: rgba(0, 0, 0, 5%);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.breakout-headings h4:not([class])::before {
|
|
69
|
+
content: "";
|
|
70
|
+
display: block;
|
|
71
|
+
position: absolute;
|
|
72
|
+
background-color: rgba(0, 0, 0, 5%);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
.breakout-headings hr:not(.does-not-exist)::before {
|
|
76
|
+
content: "";
|
|
77
|
+
display: block;
|
|
78
|
+
position: absolute;
|
|
79
|
+
background-color: rgba(0, 0, 0, 5%);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.breakout-headings h2:not([class])::before {
|
|
83
|
+
width: 10em;
|
|
84
|
+
right: 100%;
|
|
85
|
+
margin-right: 1rem;
|
|
86
|
+
height: 0.3em;
|
|
87
|
+
top: 50%;
|
|
88
|
+
transform: translateY(-50%);
|
|
89
|
+
background: linear-gradient(
|
|
90
|
+
to left,
|
|
91
|
+
rgba(0, 0, 0, 10%),
|
|
92
|
+
rgba(0, 0, 0, 5%) 10%,
|
|
93
|
+
transparent
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.breakout-headings h3:not([class])::before {
|
|
98
|
+
width: 10em;
|
|
99
|
+
right: 100%;
|
|
100
|
+
margin-right: 1rem;
|
|
101
|
+
height: 0.3em;
|
|
102
|
+
top: 50%;
|
|
103
|
+
transform: translateY(-50%);
|
|
104
|
+
background: linear-gradient(
|
|
105
|
+
to left,
|
|
106
|
+
rgba(0, 0, 0, 10%),
|
|
107
|
+
rgba(0, 0, 0, 5%) 10%,
|
|
108
|
+
transparent
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.breakout-headings h4:not([class])::before {
|
|
113
|
+
width: 10em;
|
|
114
|
+
right: 100%;
|
|
115
|
+
margin-right: 1rem;
|
|
116
|
+
height: 0.3em;
|
|
117
|
+
top: 50%;
|
|
118
|
+
transform: translateY(-50%);
|
|
119
|
+
background: linear-gradient(
|
|
120
|
+
to left,
|
|
121
|
+
rgba(0, 0, 0, 10%),
|
|
122
|
+
rgba(0, 0, 0, 5%) 10%,
|
|
123
|
+
transparent
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.breakout-headings hr {
|
|
128
|
+
height: 0.75rem;
|
|
129
|
+
border: none;
|
|
130
|
+
overflow: visible;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.breakout-headings hr::before {
|
|
134
|
+
width: 100vw;
|
|
135
|
+
left: 50%;
|
|
136
|
+
height: 100%;
|
|
137
|
+
transform: translateX(-50%);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.breakout-headings hr + h2::before {
|
|
141
|
+
display: none !important;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.breakout-headings hr + h3::before {
|
|
145
|
+
display: none !important;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.breakout-headings hr + h4::before {
|
|
149
|
+
display: none !important;
|
|
150
|
+
}
|
package/bricks.gemspec
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
Gem::Specification.new do |spec|
|
|
4
|
+
spec.name = "bricks"
|
|
5
|
+
spec.version = "0.25.0"
|
|
6
|
+
spec.authors = ["Anton Staroverov"]
|
|
7
|
+
|
|
8
|
+
spec.summary = "Framework-agnostic CSS utilities and single-file Liquid 'bricks' for modern web development."
|
|
9
|
+
spec.homepage = "https://github.com/anydigital/bricks"
|
|
10
|
+
spec.license = "MIT"
|
|
11
|
+
|
|
12
|
+
spec.files = Dir.glob("{_includes,assets}/**/*")
|
|
13
|
+
# puts "spec.files: #{spec.files.inspect}"
|
|
14
|
+
|
|
15
|
+
spec.add_runtime_dependency "jekyll", ">= 3.5", "< 5.0"
|
|
16
|
+
end
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anydigital/bricks",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.26.0-alpha.2",
|
|
4
4
|
"description": "Framework-agnostic CSS utilities and single-file Liquid 'bricks' for modern web development.",
|
|
5
5
|
"style": "./src/bricks.css",
|
|
6
6
|
"exports": {
|
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
"./dist": "./dist/bricks.css"
|
|
9
9
|
},
|
|
10
10
|
"scripts": {
|
|
11
|
-
"postcss": "postcss src/bricks.css -o
|
|
12
|
-
"build": "npm run postcss -- --no-map",
|
|
11
|
+
"postcss": "postcss src/bricks.css -o assets/bricks.css",
|
|
12
|
+
"build": "npm run postcss -- --no-map && cp ./node_modules/@anydigital/breakout-css/dist/breakout.css ./assets/",
|
|
13
13
|
"start": "npm run postcss -- --watch",
|
|
14
14
|
"prepublishOnly": "npm run build"
|
|
15
15
|
},
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|