turbo_material 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +247 -0
- data/Rakefile +8 -0
- data/app/assets/config/turbo_material_manifest.js +3 -0
- data/app/assets/dist/turbo_material/tailwind.css +1 -0
- data/app/assets/javascripts/turbo_material/material_checkbox_controller.js +12 -0
- data/app/assets/javascripts/turbo_material/material_chips_input_controller.js +140 -0
- data/app/assets/javascripts/turbo_material/material_chips_select_controller.js +111 -0
- data/app/assets/javascripts/turbo_material/material_dialog_controller.js +27 -0
- data/app/assets/javascripts/turbo_material/material_input_controller.js +10 -0
- data/app/assets/javascripts/turbo_material/material_list_controller.js +57 -0
- data/app/assets/javascripts/turbo_material/material_menu_surface_controller.js +11 -0
- data/app/assets/javascripts/turbo_material/material_radio_controller.js +10 -0
- data/app/assets/javascripts/turbo_material/material_ripple_controller.js +10 -0
- data/app/assets/javascripts/turbo_material/material_select_controller.js +10 -0
- data/app/assets/javascripts/turbo_material/material_switch_controller.js +14 -0
- data/app/assets/stylesheets/turbo_material/application.css +15 -0
- data/app/assets/stylesheets/turbo_material/application.tailwind.css +3 -0
- data/app/controllers/turbo_material/application_controller.rb +4 -0
- data/app/helpers/turbo_material/application_helper.rb +7 -0
- data/app/helpers/turbo_material/checkbox_helper.rb +7 -0
- data/app/helpers/turbo_material/chips_input_helper.rb +7 -0
- data/app/helpers/turbo_material/chips_select_helper.rb +7 -0
- data/app/helpers/turbo_material/input_helper.rb +7 -0
- data/app/helpers/turbo_material/modal_helper.rb +7 -0
- data/app/helpers/turbo_material/radio_helper.rb +7 -0
- data/app/helpers/turbo_material/select_helper.rb +7 -0
- data/app/helpers/turbo_material/switch_helper.rb +7 -0
- data/app/helpers/turbo_material/textarea_helper.rb +7 -0
- data/app/jobs/turbo_material/application_job.rb +4 -0
- data/app/mailers/turbo_material/application_mailer.rb +6 -0
- data/app/models/turbo_material/application_record.rb +5 -0
- data/app/views/components/_checkbox.html.erb +25 -0
- data/app/views/components/_chips_input.html.erb +36 -0
- data/app/views/components/_chips_input_options.html.erb +20 -0
- data/app/views/components/_chips_select.html.erb +56 -0
- data/app/views/components/_input.html.erb +32 -0
- data/app/views/components/_modal.html.erb +37 -0
- data/app/views/components/_radio.html.erb +28 -0
- data/app/views/components/_select.html.erb +67 -0
- data/app/views/components/_switch.html.erb +34 -0
- data/app/views/components/_textarea.html.erb +30 -0
- data/app/views/layouts/turbo_material/application.html.erb +21 -0
- data/config/importmap.rb +4 -0
- data/config/routes.rb +2 -0
- data/config/tailwind.config.js +26 -0
- data/lib/tasks/turbo_material_tasks.rake +4 -0
- data/lib/turbo_material/engine.rb +44 -0
- data/lib/turbo_material/version.rb +3 -0
- data/lib/turbo_material.rb +6 -0
- metadata +164 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 744972b70aa57b3a3f41156bce396e31de349171b1c925d97233d05e80e2407b
|
4
|
+
data.tar.gz: c4572e273f07217c9e66468cd19721ed56dc41fa64b029ee770d632f2ab82619
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d2bf5fabb54f3cbf94bf63fa03f852e0a78ffe22f7e62d70552668e6b4accf3f7a093e50774d6a8f04583e63730ec904195a9bd5835ae15566ab67de3064508c
|
7
|
+
data.tar.gz: 2c79b8bd8819ae634366d512348df27aa6a3614aa815731dd3839f0f60bcb91b95c0e4c33533115cbc075f22596d85ea9d138c626142014e6413833d34dbe465
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright Sergey Moiseev
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,247 @@
|
|
1
|
+
# Material Components for Hotwire Turbo
|
2
|
+
|
3
|
+
This gem implements drop-in implementation for [Material Design](https://material.io/) in [Turbo](https://turbo.hotwire.dev/). It is based on [Material Components for the Web](https://github.com/material-components/material-components-web) as it's being most feature rich implementation at the moment.
|
4
|
+
|
5
|
+
## Requirements
|
6
|
+
|
7
|
+
* Ruby 3.3+ (might work with older versions, but not tested)
|
8
|
+
* Rails 7.1+ (Turbo is hard requirement for complex components like server based Chips)
|
9
|
+
* Turbo
|
10
|
+
* Stimulus
|
11
|
+
* Importmaps
|
12
|
+
* Tailwind
|
13
|
+
|
14
|
+
That list is based on the project from which this library is being extracted. If you like to make it less demanding, feel free to submit PRs. Only strict requirements are Turbo and Stimulus.
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
Add following to your `app/javascript/controllers/index.js` after `eagerLoadControllersFrom("controllers", application)` line:
|
19
|
+
|
20
|
+
```javascript
|
21
|
+
eagerLoadControllersFrom("turbo_material", application)
|
22
|
+
```
|
23
|
+
Add following to your `app/view/layouts/application.html.erb` in `<head>` section:
|
24
|
+
|
25
|
+
```erb
|
26
|
+
<link href="//cdn.jsdelivr.net/npm/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet">
|
27
|
+
<script src="//cdn.jsdelivr.net/npm/material-components-web@latest/dist/material-components-web.min.js"></script>
|
28
|
+
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
|
29
|
+
<%= stylesheet_link_tag "turbo_material/tailwind.css" %>
|
30
|
+
```
|
31
|
+
|
32
|
+
### Material Components for Web customizations
|
33
|
+
|
34
|
+
For supporting custom styling for you components, consider including following in your application stylesheet:
|
35
|
+
|
36
|
+
```css
|
37
|
+
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,600;1,400;1,600&display=swap');
|
38
|
+
|
39
|
+
html, body, label {
|
40
|
+
font-family: 'Roboto', sans-serif;
|
41
|
+
}
|
42
|
+
|
43
|
+
html, body {
|
44
|
+
scroll-behavior: smooth;
|
45
|
+
}
|
46
|
+
|
47
|
+
html [id], body [id] {
|
48
|
+
scroll-margin: 120px !important;
|
49
|
+
}
|
50
|
+
|
51
|
+
:root {
|
52
|
+
--real-primary: #5d7dd4;
|
53
|
+
--real-secondary: #607D8B;
|
54
|
+
--real-warn: rgb(244, 67, 54);
|
55
|
+
|
56
|
+
--mdc-theme-primary: var(--real-primary);
|
57
|
+
--mdc-theme-secondary: var(--real-secondary);
|
58
|
+
--mdc-dialog-z-index: 100;
|
59
|
+
--mdc-ripple-color: white;
|
60
|
+
}
|
61
|
+
|
62
|
+
.turbo-progress-bar {
|
63
|
+
background-color: #77a1d6;
|
64
|
+
filter: brightness(90%);
|
65
|
+
}
|
66
|
+
|
67
|
+
.mdc-button.menu-item {
|
68
|
+
--mdc-theme-primary: white;
|
69
|
+
}
|
70
|
+
|
71
|
+
.mdc-button--accent:not(.mdc-button--raised):not([disabled]) {
|
72
|
+
color: #77a1d6;
|
73
|
+
color: var(--mdc-theme-secondary, #77a1d6);
|
74
|
+
}
|
75
|
+
|
76
|
+
.mdc-button--accent.mdc-button--raised:not([disabled]) {
|
77
|
+
background-color: #77a1d6;
|
78
|
+
background-color: var(--mdc-theme-secondary, #77a1d6);
|
79
|
+
}
|
80
|
+
|
81
|
+
.mdc-button.mdc-button--accent .mdc-button__ripple::before, .mdc-button.mdc-button--accent .mdc-button__ripple::after {
|
82
|
+
background-color: #77a1d6;
|
83
|
+
background-color: var(--mdc-theme-secondary, #77a1d6);
|
84
|
+
}
|
85
|
+
|
86
|
+
.mdc-button--warn:not(.mdc-button--raised):not([disabled]) {
|
87
|
+
color: rgb(244, 67, 54);
|
88
|
+
color: var(--real-warn, rgb(244, 67, 54));
|
89
|
+
}
|
90
|
+
|
91
|
+
.mdc-button--warn.mdc-button--raised:not([disabled]) {
|
92
|
+
background-color: rgb(244, 67, 54);
|
93
|
+
background-color: var(--real-warn, rgb(244, 67, 54));
|
94
|
+
}
|
95
|
+
|
96
|
+
.mdc-button.mdc-button--warn .mdc-button__ripple::before, .mdc-button.mdc-button--warn .mdc-button__ripple::after {
|
97
|
+
background-color: rgb(244, 67, 54);
|
98
|
+
background-color: var(--real-warn, rgb(244, 67, 54));
|
99
|
+
}
|
100
|
+
|
101
|
+
.mdc-button--white:not(.mdc-button--raised):not([disabled]) {
|
102
|
+
color: white;
|
103
|
+
}
|
104
|
+
|
105
|
+
.mdc-button--white.mdc-button--raised:not([disabled]) {
|
106
|
+
background-color: white;
|
107
|
+
}
|
108
|
+
|
109
|
+
.mdc-button.mdc-button--white .mdc-button__ripple::before, .mdc-button.mdc-button--white .mdc-button__ripple::after {
|
110
|
+
background-color: white;
|
111
|
+
}
|
112
|
+
|
113
|
+
.mdc-text-field:not(.mdc-text-field--label-floating) .iti__flag-container {
|
114
|
+
display: none !important;
|
115
|
+
}
|
116
|
+
|
117
|
+
.mdc-drawer .mdc-deprecated-list-item {
|
118
|
+
margin: 0;
|
119
|
+
border-radius: 0;
|
120
|
+
}
|
121
|
+
|
122
|
+
aside.mdc-drawer:not(.mdc-drawer--right) {
|
123
|
+
box-shadow: 0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%);
|
124
|
+
}
|
125
|
+
|
126
|
+
aside.mdc-drawer.main-drawer {
|
127
|
+
background-color: #2d323e;
|
128
|
+
}
|
129
|
+
|
130
|
+
.mdc-drawer--right.mdc-drawer--dismissible {
|
131
|
+
right: 0 !important;
|
132
|
+
left: initial !important;
|
133
|
+
}
|
134
|
+
|
135
|
+
.mdc-drawer--right.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content {
|
136
|
+
margin-right: 16rem !important;
|
137
|
+
margin-left: 0 !important;
|
138
|
+
}
|
139
|
+
|
140
|
+
.mdc-drawer--right.mdc-drawer.mdc-drawer--open.mdc-drawer--closing + .mdc-drawer-app-content {
|
141
|
+
transition: margin-right 200ms 15ms linear;
|
142
|
+
}
|
143
|
+
|
144
|
+
.mdc-drawer--right.mdc-drawer.mdc-drawer--open.mdc-drawer--openening.mdc-drawer--closing + .mdc-drawer-app-content {
|
145
|
+
transition: margin-right 200ms 15ms linear;
|
146
|
+
}
|
147
|
+
|
148
|
+
.mdc-drawer--right.mdc-drawer--animate {
|
149
|
+
transform: translateX(100%) !important;
|
150
|
+
}
|
151
|
+
|
152
|
+
.mdc-drawer--right.mdc-drawer--closing {
|
153
|
+
transform: translateX(100%) !important;
|
154
|
+
}
|
155
|
+
|
156
|
+
.mdc-drawer--right.mdc-drawer--opening {
|
157
|
+
transform: translateX(0) !important;
|
158
|
+
}
|
159
|
+
|
160
|
+
.mdc-dialog__title::before {
|
161
|
+
content: none !important;
|
162
|
+
}
|
163
|
+
|
164
|
+
.mdc-dialog__title {
|
165
|
+
padding-top: 1rem;
|
166
|
+
}
|
167
|
+
|
168
|
+
.clip-path-bottom {
|
169
|
+
clip-path: inset(-8px -8px 0px -8px);
|
170
|
+
}
|
171
|
+
|
172
|
+
.clip-path-top {
|
173
|
+
clip-path: inset(0px -8px -8px -8px);
|
174
|
+
}
|
175
|
+
|
176
|
+
.mdc-drawer.mdc-drawer--open:not(.mdc-drawer--closing) + .mdc-drawer-app-content .mdc-top-app-bar {
|
177
|
+
width: calc(100vw - 16rem);
|
178
|
+
}
|
179
|
+
|
180
|
+
.mdc-text-field .field_with_errors {
|
181
|
+
width: 100%;
|
182
|
+
}
|
183
|
+
|
184
|
+
.bg-secondary .mdc-tab-indicator .mdc-tab-indicator__content--underline {
|
185
|
+
border-color: white !important;
|
186
|
+
}
|
187
|
+
|
188
|
+
.bg-secondary .mdc-tab--active .mdc-tab__text-label {
|
189
|
+
color: white !important;
|
190
|
+
}
|
191
|
+
|
192
|
+
.bg-secondary .mdc-tab .mdc-tab__icon {
|
193
|
+
color: white !important;
|
194
|
+
}
|
195
|
+
|
196
|
+
.bg-secondary .mdc-tab--active .mdc-tab__icon {
|
197
|
+
color: white !important;
|
198
|
+
}
|
199
|
+
|
200
|
+
.bg-secondary .mdc-tab:not(.mdc-tab--active) .mdc-tab__text-label {
|
201
|
+
color: white !important;
|
202
|
+
}
|
203
|
+
|
204
|
+
.mdc-chip.red {
|
205
|
+
background-color: #f44336 !important;
|
206
|
+
color: white !important;
|
207
|
+
}
|
208
|
+
|
209
|
+
.mdc-chip.red .mdc-chip__icon {
|
210
|
+
color: white !important;
|
211
|
+
}
|
212
|
+
```
|
213
|
+
|
214
|
+
## Installation
|
215
|
+
Add this line to your application's Gemfile:
|
216
|
+
|
217
|
+
```ruby
|
218
|
+
gem "turbo_material"
|
219
|
+
```
|
220
|
+
|
221
|
+
And then execute:
|
222
|
+
```bash
|
223
|
+
$ bundle
|
224
|
+
```
|
225
|
+
|
226
|
+
Or install it yourself as:
|
227
|
+
```bash
|
228
|
+
$ gem install turbo_material
|
229
|
+
```
|
230
|
+
|
231
|
+
## Lookbook documentation for components
|
232
|
+
|
233
|
+
Gem implements [Lookbook](https://lookbook.build) documentation for all components. I am considering implementing a way to pass it's previews to lookbook in hosting application, but for now, to use it, please checkout gem source code and use it like this:
|
234
|
+
|
235
|
+
```bash
|
236
|
+
bundle install
|
237
|
+
cd test/dummy
|
238
|
+
foreman start -f Procfile.dev
|
239
|
+
```
|
240
|
+
|
241
|
+
and then open [http://localhost:3000/lookbook](http://localhost:3000/lookbook) in your browser.
|
242
|
+
|
243
|
+
## Contributing
|
244
|
+
This gem is open for new contributions. Use [Material Components for Web documentation](https://github.com/material-components/material-components-web/tree/master/packages) as a references for missing functionality.
|
245
|
+
|
246
|
+
## License
|
247
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
/*! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:Inter var,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}[multiple],[type=date],[type=datetime-local],[type=email],[type=month],[type=number],[type=password],[type=search],[type=tel],[type=text],[type=time],[type=url],[type=week],select,textarea{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;border-color:#6b7280;border-radius:0;border-width:1px;font-size:1rem;line-height:1.5rem;padding:.5rem .75rem}[multiple]:focus,[type=date]:focus,[type=datetime-local]:focus,[type=email]:focus,[type=month]:focus,[type=number]:focus,[type=password]:focus,[type=search]:focus,[type=tel]:focus,[type=text]:focus,[type=time]:focus,[type=url]:focus,[type=week]:focus,select:focus,textarea:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);border-color:#2563eb;box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}input::-moz-placeholder,textarea::-moz-placeholder{color:#6b7280;opacity:1}input::placeholder,textarea::placeholder{color:#6b7280;opacity:1}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-date-and-time-value{min-height:1.5em}::-webkit-datetime-edit,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-meridiem-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-year-field{padding-bottom:0;padding-top:0}select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3E%3Cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='m6 8 4 4 4-4'/%3E%3C/svg%3E");background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;padding-right:2.5rem;-webkit-print-color-adjust:exact;print-color-adjust:exact}[multiple]{background-image:none;background-position:0 0;background-repeat:unset;background-size:initial;padding-right:.75rem;-webkit-print-color-adjust:unset;print-color-adjust:unset}[type=checkbox],[type=radio]{--tw-shadow:0 0 #0000;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#6b7280;border-width:1px;color:#2563eb;display:inline-block;flex-shrink:0;height:1rem;padding:0;-webkit-print-color-adjust:exact;print-color-adjust:exact;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:1rem}[type=checkbox]{border-radius:0}[type=radio]{border-radius:100%}[type=checkbox]:focus,[type=radio]:focus{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:2px;--tw-ring-offset-color:#fff;--tw-ring-color:#2563eb;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);outline:2px solid #0000;outline-offset:2px}[type=checkbox]:checked,[type=radio]:checked{background-color:currentColor;background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:#0000}[type=checkbox]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Cpath d='M12.207 4.793a1 1 0 0 1 0 1.414l-5 5a1 1 0 0 1-1.414 0l-2-2a1 1 0 0 1 1.414-1.414L6.5 9.086l4.293-4.293a1 1 0 0 1 1.414 0z'/%3E%3C/svg%3E")}[type=radio]:checked{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E")}[type=checkbox]:checked:focus,[type=checkbox]:checked:hover,[type=checkbox]:indeterminate,[type=radio]:checked:focus,[type=radio]:checked:hover{background-color:currentColor;border-color:#0000}[type=checkbox]:indeterminate{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3E%3Cpath stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}[type=checkbox]:indeterminate:focus,[type=checkbox]:indeterminate:hover{background-color:currentColor;border-color:#0000}[type=file]{background:unset;border-color:inherit;border-radius:0;border-width:0;font-size:unset;line-height:inherit;padding:0}[type=file]:focus{outline:1px solid ButtonText;outline:1px auto -webkit-focus-ring-color}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-bottom:3em;margin-top:3em}.prose :where(blockquote):not(:where([class~=not-prose] *)){border-left-color:var(--tw-prose-quote-borders);border-left-width:.25rem;color:var(--tw-prose-quotes);font-style:italic;font-weight:500;margin-bottom:1.6em;margin-top:1.6em;padding-left:1em;quotes:"\201C""\201D""\2018""\2019"}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:2.25em;font-weight:800;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose :where(h1 strong):not(:where([class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.5em;font-weight:700;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose :where(h2 strong):not(:where([class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-size:1.25em;font-weight:600;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose :where(h3 strong):not(:where([class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose :where(h4 strong):not(:where([class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose] *)){background-color:var(--tw-prose-pre-bg);border-radius:.375rem;color:var(--tw-prose-pre-code);font-size:.875em;font-weight:400;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;overflow-x:auto;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose] *)){background-color:initial;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;font-weight:inherit;line-height:inherit;padding:0}.prose :where(pre code):not(:where([class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose] *)){font-size:.875em;line-height:1.7142857;margin-bottom:2em;margin-top:2em;table-layout:auto;text-align:left;width:100%}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-th-borders);border-bottom-width:1px}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em;vertical-align:bottom}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-color:var(--tw-prose-td-borders);border-bottom-width:1px}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-color:var(--tw-prose-th-borders);border-top-width:1px}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:1rem;line-height:1.75}.prose :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose :where(video):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(figure):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose :where(li):not(:where([class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.7142857}.prose-sm :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.8888889em;margin-top:.8888889em}.prose-sm :where(blockquote):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.1111111em}.prose-sm :where(h1):not(:where([class~=not-prose] *)){font-size:2.1428571em;line-height:1.2;margin-bottom:.8em;margin-top:0}.prose-sm :where(h2):not(:where([class~=not-prose] *)){font-size:1.4285714em;line-height:1.4;margin-bottom:.8em;margin-top:1.6em}.prose-sm :where(h3):not(:where([class~=not-prose] *)){font-size:1.2857143em;line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.5555556em}.prose-sm :where(h4):not(:where([class~=not-prose] *)){line-height:1.4285714;margin-bottom:.5714286em;margin-top:1.4285714em}.prose-sm :where(img):not(:where([class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(video):not(:where([class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure):not(:where([class~=not-prose] *)){margin-bottom:1.7142857em;margin-top:1.7142857em}.prose-sm :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-sm :where(figcaption):not(:where([class~=not-prose] *)){font-size:.8571429em;line-height:1.3333333;margin-top:.6666667em}.prose-sm :where(code):not(:where([class~=not-prose] *)){font-size:.8571429em}.prose-sm :where(h2 code):not(:where([class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose] *)){font-size:.8888889em}.prose-sm :where(pre):not(:where([class~=not-prose] *)){border-radius:.25rem;font-size:.8571429em;line-height:1.6666667;margin-bottom:1.6666667em;margin-top:1.6666667em;padding:.6666667em 1em}.prose-sm :where(ol):not(:where([class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(ul):not(:where([class~=not-prose] *)){margin-bottom:1.1428571em;margin-top:1.1428571em;padding-left:1.5714286em}.prose-sm :where(li):not(:where([class~=not-prose] *)){margin-bottom:.2857143em;margin-top:.2857143em}.prose-sm :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.4285714em}.prose-sm :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.1428571em}.prose-sm :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.1428571em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.5714286em;margin-top:.5714286em}.prose-sm :where(hr):not(:where([class~=not-prose] *)){margin-bottom:2.8571429em;margin-top:2.8571429em}.prose-sm :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-sm :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-sm :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-sm :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose] *)){font-size:.8571429em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose] *)){padding-bottom:.6666667em;padding-left:1em;padding-right:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.6666667em 1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-sm :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-base{font-size:1rem;line-height:1.75}.prose-base :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em}.prose-base :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:1.2em;margin-top:1.2em}.prose-base :where(blockquote):not(:where([class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-left:1em}.prose-base :where(h1):not(:where([class~=not-prose] *)){font-size:2.25em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:0}.prose-base :where(h2):not(:where([class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:1em;margin-top:2em}.prose-base :where(h3):not(:where([class~=not-prose] *)){font-size:1.25em;line-height:1.6;margin-bottom:.6em;margin-top:1.6em}.prose-base :where(h4):not(:where([class~=not-prose] *)){line-height:1.5;margin-bottom:.5em;margin-top:1.5em}.prose-base :where(img):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(video):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-base :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-base :where(figcaption):not(:where([class~=not-prose] *)){font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose-base :where(code):not(:where([class~=not-prose] *)){font-size:.875em}.prose-base :where(h2 code):not(:where([class~=not-prose] *)){font-size:.875em}.prose-base :where(h3 code):not(:where([class~=not-prose] *)){font-size:.9em}.prose-base :where(pre):not(:where([class~=not-prose] *)){border-radius:.375rem;font-size:.875em;line-height:1.7142857;margin-bottom:1.7142857em;margin-top:1.7142857em;padding:.8571429em 1.1428571em}.prose-base :where(ol):not(:where([class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(ul):not(:where([class~=not-prose] *)){margin-bottom:1.25em;margin-top:1.25em;padding-left:1.625em}.prose-base :where(li):not(:where([class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-base :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose-base :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose-base :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose-base :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose-base :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.75em;margin-top:.75em}.prose-base :where(hr):not(:where([class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-base :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-base :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-base :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-base :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-base :where(table):not(:where([class~=not-prose] *)){font-size:.875em;line-height:1.7142857}.prose-base :where(thead th):not(:where([class~=not-prose] *)){padding-bottom:.5714286em;padding-left:.5714286em;padding-right:.5714286em}.prose-base :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-base :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-base :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.5714286em}.prose-base :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-base :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-base :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose-base :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-lg{font-size:1.125rem;line-height:1.7777778}.prose-lg :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-lg :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1.2222222em;line-height:1.4545455;margin-bottom:1.0909091em;margin-top:1.0909091em}.prose-lg :where(blockquote):not(:where([class~=not-prose] *)){margin-bottom:1.6666667em;margin-top:1.6666667em;padding-left:1em}.prose-lg :where(h1):not(:where([class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.8333333em;margin-top:0}.prose-lg :where(h2):not(:where([class~=not-prose] *)){font-size:1.6666667em;line-height:1.3333333;margin-bottom:1.0666667em;margin-top:1.8666667em}.prose-lg :where(h3):not(:where([class~=not-prose] *)){font-size:1.3333333em;line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-lg :where(h4):not(:where([class~=not-prose] *)){line-height:1.5555556;margin-bottom:.4444444em;margin-top:1.7777778em}.prose-lg :where(img):not(:where([class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(video):not(:where([class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure):not(:where([class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em}.prose-lg :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-lg :where(figcaption):not(:where([class~=not-prose] *)){font-size:.8888889em;line-height:1.5;margin-top:1em}.prose-lg :where(code):not(:where([class~=not-prose] *)){font-size:.8888889em}.prose-lg :where(h2 code):not(:where([class~=not-prose] *)){font-size:.8666667em}.prose-lg :where(h3 code):not(:where([class~=not-prose] *)){font-size:.875em}.prose-lg :where(pre):not(:where([class~=not-prose] *)){border-radius:.375rem;font-size:.8888889em;line-height:1.75;margin-bottom:2em;margin-top:2em;padding:1em 1.5em}.prose-lg :where(ol):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(ul):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5555556em}.prose-lg :where(li):not(:where([class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-lg :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.4444444em}.prose-lg :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.3333333em}.prose-lg :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em}.prose-lg :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.8888889em;margin-top:.8888889em}.prose-lg :where(hr):not(:where([class~=not-prose] *)){margin-bottom:3.1111111em;margin-top:3.1111111em}.prose-lg :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-lg :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-lg :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-lg :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-lg :where(table):not(:where([class~=not-prose] *)){font-size:.8888889em;line-height:1.5}.prose-lg :where(thead th):not(:where([class~=not-prose] *)){padding-bottom:.75em;padding-left:.75em;padding-right:.75em}.prose-lg :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-lg :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-lg :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.75em}.prose-lg :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-lg :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-lg :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose-lg :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-xl{font-size:1.25rem;line-height:1.8}.prose-xl :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em}.prose-xl :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1.2em;line-height:1.5;margin-bottom:1em;margin-top:1em}.prose-xl :where(blockquote):not(:where([class~=not-prose] *)){margin-bottom:1.6em;margin-top:1.6em;padding-left:1.0666667em}.prose-xl :where(h1):not(:where([class~=not-prose] *)){font-size:2.8em;line-height:1;margin-bottom:.8571429em;margin-top:0}.prose-xl :where(h2):not(:where([class~=not-prose] *)){font-size:1.8em;line-height:1.1111111;margin-bottom:.8888889em;margin-top:1.5555556em}.prose-xl :where(h3):not(:where([class~=not-prose] *)){font-size:1.5em;line-height:1.3333333;margin-bottom:.6666667em;margin-top:1.6em}.prose-xl :where(h4):not(:where([class~=not-prose] *)){line-height:1.6;margin-bottom:.6em;margin-top:1.8em}.prose-xl :where(img):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-xl :where(video):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-xl :where(figure):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-xl :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-xl :where(figcaption):not(:where([class~=not-prose] *)){font-size:.9em;line-height:1.5555556;margin-top:1em}.prose-xl :where(code):not(:where([class~=not-prose] *)){font-size:.9em}.prose-xl :where(h2 code):not(:where([class~=not-prose] *)){font-size:.8611111em}.prose-xl :where(h3 code):not(:where([class~=not-prose] *)){font-size:.9em}.prose-xl :where(pre):not(:where([class~=not-prose] *)){border-radius:.5rem;font-size:.9em;line-height:1.7777778;margin-bottom:2em;margin-top:2em;padding:1.1111111em 1.3333333em}.prose-xl :where(ol):not(:where([class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em;padding-left:1.6em}.prose-xl :where(ul):not(:where([class~=not-prose] *)){margin-bottom:1.2em;margin-top:1.2em;padding-left:1.6em}.prose-xl :where(li):not(:where([class~=not-prose] *)){margin-bottom:.6em;margin-top:.6em}.prose-xl :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.4em}.prose-xl :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.4em}.prose-xl :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.8em;margin-top:.8em}.prose-xl :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.2em}.prose-xl :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.2em}.prose-xl :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.2em}.prose-xl :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.2em}.prose-xl :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.8em;margin-top:.8em}.prose-xl :where(hr):not(:where([class~=not-prose] *)){margin-bottom:2.8em;margin-top:2.8em}.prose-xl :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-xl :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-xl :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-xl :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-xl :where(table):not(:where([class~=not-prose] *)){font-size:.9em;line-height:1.5555556}.prose-xl :where(thead th):not(:where([class~=not-prose] *)){padding-bottom:.8888889em;padding-left:.6666667em;padding-right:.6666667em}.prose-xl :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-xl :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-xl :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.8888889em .6666667em}.prose-xl :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-xl :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-xl :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose-xl :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-2xl{font-size:1.5rem;line-height:1.6666667}.prose-2xl :where(p):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em}.prose-2xl :where([class~=lead]):not(:where([class~=not-prose] *)){font-size:1.25em;line-height:1.4666667;margin-bottom:1.0666667em;margin-top:1.0666667em}.prose-2xl :where(blockquote):not(:where([class~=not-prose] *)){margin-bottom:1.7777778em;margin-top:1.7777778em;padding-left:1.1111111em}.prose-2xl :where(h1):not(:where([class~=not-prose] *)){font-size:2.6666667em;line-height:1;margin-bottom:.875em;margin-top:0}.prose-2xl :where(h2):not(:where([class~=not-prose] *)){font-size:2em;line-height:1.0833333;margin-bottom:.8333333em;margin-top:1.5em}.prose-2xl :where(h3):not(:where([class~=not-prose] *)){font-size:1.5em;line-height:1.2222222;margin-bottom:.6666667em;margin-top:1.5555556em}.prose-2xl :where(h4):not(:where([class~=not-prose] *)){line-height:1.5;margin-bottom:.6666667em;margin-top:1.6666667em}.prose-2xl :where(img):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-2xl :where(video):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-2xl :where(figure):not(:where([class~=not-prose] *)){margin-bottom:2em;margin-top:2em}.prose-2xl :where(figure>*):not(:where([class~=not-prose] *)){margin-bottom:0;margin-top:0}.prose-2xl :where(figcaption):not(:where([class~=not-prose] *)){font-size:.8333333em;line-height:1.6;margin-top:1em}.prose-2xl :where(code):not(:where([class~=not-prose] *)){font-size:.8333333em}.prose-2xl :where(h2 code):not(:where([class~=not-prose] *)){font-size:.875em}.prose-2xl :where(h3 code):not(:where([class~=not-prose] *)){font-size:.8888889em}.prose-2xl :where(pre):not(:where([class~=not-prose] *)){border-radius:.5rem;font-size:.8333333em;line-height:1.8;margin-bottom:2em;margin-top:2em;padding:1.2em 1.6em}.prose-2xl :where(ol):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5833333em}.prose-2xl :where(ul):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em;margin-top:1.3333333em;padding-left:1.5833333em}.prose-2xl :where(li):not(:where([class~=not-prose] *)){margin-bottom:.5em;margin-top:.5em}.prose-2xl :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.4166667em}.prose-2xl :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.4166667em}.prose-2xl :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-bottom:.8333333em;margin-top:.8333333em}.prose-2xl :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.3333333em}.prose-2xl :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em}.prose-2xl :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.3333333em}.prose-2xl :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.3333333em}.prose-2xl :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-bottom:.6666667em;margin-top:.6666667em}.prose-2xl :where(hr):not(:where([class~=not-prose] *)){margin-bottom:3em;margin-top:3em}.prose-2xl :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-2xl :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-2xl :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-2xl :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose-2xl :where(table):not(:where([class~=not-prose] *)){font-size:.8333333em;line-height:1.4}.prose-2xl :where(thead th):not(:where([class~=not-prose] *)){padding-bottom:.8em;padding-left:.6em;padding-right:.6em}.prose-2xl :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-2xl :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-2xl :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.8em .6em}.prose-2xl :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose-2xl :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose-2xl :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose-2xl :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.prose-invert{--tw-prose-body:var(--tw-prose-invert-body);--tw-prose-headings:var(--tw-prose-invert-headings);--tw-prose-lead:var(--tw-prose-invert-lead);--tw-prose-links:var(--tw-prose-invert-links);--tw-prose-bold:var(--tw-prose-invert-bold);--tw-prose-counters:var(--tw-prose-invert-counters);--tw-prose-bullets:var(--tw-prose-invert-bullets);--tw-prose-hr:var(--tw-prose-invert-hr);--tw-prose-quotes:var(--tw-prose-invert-quotes);--tw-prose-quote-borders:var(--tw-prose-invert-quote-borders);--tw-prose-captions:var(--tw-prose-invert-captions);--tw-prose-code:var(--tw-prose-invert-code);--tw-prose-pre-code:var(--tw-prose-invert-pre-code);--tw-prose-pre-bg:var(--tw-prose-invert-pre-bg);--tw-prose-th-borders:var(--tw-prose-invert-th-borders);--tw-prose-td-borders:var(--tw-prose-invert-td-borders)}.prose-slate{--tw-prose-body:#334155;--tw-prose-headings:#0f172a;--tw-prose-lead:#475569;--tw-prose-links:#0f172a;--tw-prose-bold:#0f172a;--tw-prose-counters:#64748b;--tw-prose-bullets:#cbd5e1;--tw-prose-hr:#e2e8f0;--tw-prose-quotes:#0f172a;--tw-prose-quote-borders:#e2e8f0;--tw-prose-captions:#64748b;--tw-prose-code:#0f172a;--tw-prose-pre-code:#e2e8f0;--tw-prose-pre-bg:#1e293b;--tw-prose-th-borders:#cbd5e1;--tw-prose-td-borders:#e2e8f0;--tw-prose-invert-body:#cbd5e1;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#94a3b8;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#94a3b8;--tw-prose-invert-bullets:#475569;--tw-prose-invert-hr:#334155;--tw-prose-invert-quotes:#f1f5f9;--tw-prose-invert-quote-borders:#334155;--tw-prose-invert-captions:#94a3b8;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#cbd5e1;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#475569;--tw-prose-invert-td-borders:#334155}.prose-gray{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151}.prose-zinc{--tw-prose-body:#3f3f46;--tw-prose-headings:#18181b;--tw-prose-lead:#52525b;--tw-prose-links:#18181b;--tw-prose-bold:#18181b;--tw-prose-counters:#71717a;--tw-prose-bullets:#d4d4d8;--tw-prose-hr:#e4e4e7;--tw-prose-quotes:#18181b;--tw-prose-quote-borders:#e4e4e7;--tw-prose-captions:#71717a;--tw-prose-code:#18181b;--tw-prose-pre-code:#e4e4e7;--tw-prose-pre-bg:#27272a;--tw-prose-th-borders:#d4d4d8;--tw-prose-td-borders:#e4e4e7;--tw-prose-invert-body:#d4d4d8;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#a1a1aa;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#a1a1aa;--tw-prose-invert-bullets:#52525b;--tw-prose-invert-hr:#3f3f46;--tw-prose-invert-quotes:#f4f4f5;--tw-prose-invert-quote-borders:#3f3f46;--tw-prose-invert-captions:#a1a1aa;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d4d4d8;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#52525b;--tw-prose-invert-td-borders:#3f3f46}.prose-neutral{--tw-prose-body:#404040;--tw-prose-headings:#171717;--tw-prose-lead:#525252;--tw-prose-links:#171717;--tw-prose-bold:#171717;--tw-prose-counters:#737373;--tw-prose-bullets:#d4d4d4;--tw-prose-hr:#e5e5e5;--tw-prose-quotes:#171717;--tw-prose-quote-borders:#e5e5e5;--tw-prose-captions:#737373;--tw-prose-code:#171717;--tw-prose-pre-code:#e5e5e5;--tw-prose-pre-bg:#262626;--tw-prose-th-borders:#d4d4d4;--tw-prose-td-borders:#e5e5e5;--tw-prose-invert-body:#d4d4d4;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#a3a3a3;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#a3a3a3;--tw-prose-invert-bullets:#525252;--tw-prose-invert-hr:#404040;--tw-prose-invert-quotes:#f5f5f5;--tw-prose-invert-quote-borders:#404040;--tw-prose-invert-captions:#a3a3a3;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d4d4d4;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#525252;--tw-prose-invert-td-borders:#404040}.prose-stone{--tw-prose-body:#44403c;--tw-prose-headings:#1c1917;--tw-prose-lead:#57534e;--tw-prose-links:#1c1917;--tw-prose-bold:#1c1917;--tw-prose-counters:#78716c;--tw-prose-bullets:#d6d3d1;--tw-prose-hr:#e7e5e4;--tw-prose-quotes:#1c1917;--tw-prose-quote-borders:#e7e5e4;--tw-prose-captions:#78716c;--tw-prose-code:#1c1917;--tw-prose-pre-code:#e7e5e4;--tw-prose-pre-bg:#292524;--tw-prose-th-borders:#d6d3d1;--tw-prose-td-borders:#e7e5e4;--tw-prose-invert-body:#d6d3d1;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#a8a29e;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#a8a29e;--tw-prose-invert-bullets:#57534e;--tw-prose-invert-hr:#44403c;--tw-prose-invert-quotes:#f5f5f4;--tw-prose-invert-quote-borders:#44403c;--tw-prose-invert-captions:#a8a29e;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d6d3d1;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#57534e;--tw-prose-invert-td-borders:#44403c}.prose-red{--tw-prose-links:#dc2626;--tw-prose-invert-links:#ef4444}.prose-orange{--tw-prose-links:#ea580c;--tw-prose-invert-links:#f97316}.prose-amber{--tw-prose-links:#d97706;--tw-prose-invert-links:#f59e0b}.prose-yellow{--tw-prose-links:#ca8a04;--tw-prose-invert-links:#eab308}.prose-lime{--tw-prose-links:#65a30d;--tw-prose-invert-links:#84cc16}.prose-green{--tw-prose-links:#16a34a;--tw-prose-invert-links:#22c55e}.prose-emerald{--tw-prose-links:#059669;--tw-prose-invert-links:#10b981}.prose-teal{--tw-prose-links:#0d9488;--tw-prose-invert-links:#14b8a6}.prose-cyan{--tw-prose-links:#0891b2;--tw-prose-invert-links:#06b6d4}.prose-sky{--tw-prose-links:#0284c7;--tw-prose-invert-links:#0ea5e9}.prose-blue{--tw-prose-links:#2563eb;--tw-prose-invert-links:#3b82f6}.prose-indigo{--tw-prose-links:#4f46e5;--tw-prose-invert-links:#6366f1}.prose-violet{--tw-prose-links:#7c3aed;--tw-prose-invert-links:#8b5cf6}.prose-purple{--tw-prose-links:#9333ea;--tw-prose-invert-links:#a855f7}.prose-fuchsia{--tw-prose-links:#c026d3;--tw-prose-invert-links:#d946ef}.prose-pink{--tw-prose-links:#db2777;--tw-prose-invert-links:#ec4899}.prose-rose{--tw-prose-links:#e11d48;--tw-prose-invert-links:#f43f5e}.fixed{position:fixed}.relative{position:relative}.\!top-6{top:1.5rem!important}.flex{display:flex}.grid{display:grid}.\!hidden{display:none!important}.hidden{display:none}.\!h-full{height:100%!important}.\!h-max{height:-moz-max-content!important;height:max-content!important}.max-h-64{max-height:16rem}.\!min-h-\[14rem\]{min-height:14rem!important}.\!w-full{width:100%!important}.w-full{width:100%}.\!min-w-\[36rem\]{min-width:36rem!important}.max-w-prose{max-width:65ch}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.overflow-y-auto{overflow-y:auto}.p-2{padding:.5rem}.\!pt-8{padding-top:2rem!important}.pb-1{padding-bottom:.25rem}.font-sans{font-family:Inter var,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.capitalize{text-transform:capitalize}.\!text-white{--tw-text-opacity:1!important;color:rgb(255 255 255/var(--tw-text-opacity))!important}.text-red-500{--tw-text-opacity:1;color:rgb(239 68 68/var(--tw-text-opacity))}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus";
|
2
|
+
|
3
|
+
export default class extends Controller {
|
4
|
+
connect() {
|
5
|
+
const checkbox = mdc.checkbox.MDCCheckbox.attachTo(this.element.querySelector('.mdc-checkbox'));
|
6
|
+
const formField = mdc.formField.MDCFormField.attachTo(this.element);
|
7
|
+
formField.input = checkbox;
|
8
|
+
}
|
9
|
+
|
10
|
+
disconnect() {
|
11
|
+
}
|
12
|
+
}
|
@@ -0,0 +1,140 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus";
|
2
|
+
import { get } from "@rails/request.js";
|
3
|
+
import { useClickOutside } from 'stimulus-use';
|
4
|
+
|
5
|
+
export default class extends Controller {
|
6
|
+
opened = false;
|
7
|
+
static targets = [ "input", "hidden", "field", "panel" ];
|
8
|
+
static outlets = [ "material-list" ];
|
9
|
+
|
10
|
+
static values = {
|
11
|
+
url: String,
|
12
|
+
suffix: String,
|
13
|
+
name: String
|
14
|
+
}
|
15
|
+
|
16
|
+
|
17
|
+
connect() {
|
18
|
+
this.inputEl = this.element.querySelector(".mdc-text-field");
|
19
|
+
this.chipsetEl = this.element.querySelector(".mdc-chip-set");
|
20
|
+
mdc.textField.MDCTextField.attachTo(this.inputEl);
|
21
|
+
this.chips = mdc.chips.MDCChipSet.attachTo(this.chipsetEl);
|
22
|
+
useClickOutside(this);
|
23
|
+
}
|
24
|
+
|
25
|
+
chipTemplate(label, value) {
|
26
|
+
return `<div class="mdc-chip__text">${label}</div><i data-action="click->material-chips-input#removeChip" data-value="${value}" class="material-icons mdc-chip__icon mdc-chip__icon--trailing" tabindex="0" role="button">cancel</i>`;
|
27
|
+
}
|
28
|
+
|
29
|
+
addChip(content, value) {
|
30
|
+
const chipEl = document.createElement('div');
|
31
|
+
chipEl.classList.add('mdc-chip');
|
32
|
+
if (this.chipCssValue) {
|
33
|
+
chipEl.classList.add(this.chipCssValue);
|
34
|
+
}
|
35
|
+
chipEl.dataset.value = value;
|
36
|
+
chipEl.innerHTML = content;
|
37
|
+
this.chipsetEl.insertBefore(chipEl, this.hiddenTarget);
|
38
|
+
this.chips.addChip(chipEl);
|
39
|
+
this.hiddenTarget.value = this.chips.chipsList.map((chip) => chip.root.dataset.value).join(',');
|
40
|
+
this.search();
|
41
|
+
}
|
42
|
+
|
43
|
+
removeChip(event) {
|
44
|
+
event.stopPropagation();
|
45
|
+
event.preventDefault();
|
46
|
+
const chip = this.element.querySelector(`.mdc-chip[data-value="${event.target.dataset.value}"]`);
|
47
|
+
this.chipsetEl.removeChild(chip);
|
48
|
+
if (this.chipsetEl.children.length === 0) {
|
49
|
+
this.inputEl.foundation.adapter.floatLabel(false);
|
50
|
+
}
|
51
|
+
this.hiddenTarget.value = this.chips.chipsList.map((chip) => chip.root.dataset.value).join(',');
|
52
|
+
this.search();
|
53
|
+
}
|
54
|
+
|
55
|
+
open() {
|
56
|
+
if ((this.opened && this.panelTarget.classList.contains('mdc-menu-surface--open')) || (parseInt(this.panelTarget.dataset.size) === 0)) return;
|
57
|
+
|
58
|
+
this.opened = true;
|
59
|
+
this.panelTarget.classList.add("mdc-menu-surface--open");
|
60
|
+
}
|
61
|
+
|
62
|
+
toggle() {
|
63
|
+
if (this.opened) {
|
64
|
+
this.close();
|
65
|
+
} else {
|
66
|
+
this.open();
|
67
|
+
}
|
68
|
+
}
|
69
|
+
|
70
|
+
close(event) {
|
71
|
+
if (!this.opened) return;
|
72
|
+
|
73
|
+
this.opened = false;
|
74
|
+
this.panelTarget.classList.remove("mdc-menu-surface--open");
|
75
|
+
if(event) {
|
76
|
+
event.preventDefault();
|
77
|
+
event.stopPropagation();
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
clickOutside(event) {
|
82
|
+
if (!this.opened) {
|
83
|
+
return;
|
84
|
+
} else {
|
85
|
+
this.close(event);
|
86
|
+
}
|
87
|
+
}
|
88
|
+
|
89
|
+
|
90
|
+
select(user) {
|
91
|
+
this.close();
|
92
|
+
this.inputTarget.value = "";
|
93
|
+
this.addChip(this.chipTemplate(user.dataset.name, user.dataset.value), user.dataset.value);
|
94
|
+
}
|
95
|
+
|
96
|
+
focusNext(event) {
|
97
|
+
if (!this.opened) return;
|
98
|
+
|
99
|
+
this.materialListOutlet.focusNext();
|
100
|
+
if(event) {
|
101
|
+
event.preventDefault();
|
102
|
+
event.stopPropagation();
|
103
|
+
}
|
104
|
+
}
|
105
|
+
|
106
|
+
focusPrevious(event) {
|
107
|
+
if (!this.opened) return;
|
108
|
+
|
109
|
+
this.materialListOutlet.focusPrevious();
|
110
|
+
if(event) {
|
111
|
+
event.preventDefault();
|
112
|
+
event.stopPropagation();
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
confirmSelection(event) {
|
117
|
+
if (!this.opened) return;
|
118
|
+
|
119
|
+
this.select(this.materialListOutlet.list.listElements[event.detail.index]);
|
120
|
+
if(event) {
|
121
|
+
event.preventDefault();
|
122
|
+
event.stopPropagation();
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
disconnect() {
|
127
|
+
}
|
128
|
+
|
129
|
+
search() {
|
130
|
+
let params = new URLSearchParams();
|
131
|
+
params.append("query", this.inputTarget.value);
|
132
|
+
params.append("suffix", this.suffixValue);
|
133
|
+
params.append("name", this.nameValue);
|
134
|
+
params.append("opened", this.opened);
|
135
|
+
params.append("exclude", this.hiddenTarget.value);
|
136
|
+
get(`${this.urlValue}?${params.toString()}`, {
|
137
|
+
responseKind: "turbo-stream",
|
138
|
+
});
|
139
|
+
}
|
140
|
+
}
|
@@ -0,0 +1,111 @@
|
|
1
|
+
import { Controller } from "@hotwired/stimulus";
|
2
|
+
import { post, destroy, get, patch } from "@rails/request.js";
|
3
|
+
|
4
|
+
export default class extends Controller {
|
5
|
+
static values = {
|
6
|
+
selected: Array,
|
7
|
+
url: String,
|
8
|
+
confirmable: Boolean,
|
9
|
+
modalUrl: String,
|
10
|
+
modalName: String,
|
11
|
+
queryString: String,
|
12
|
+
chipCss: String,
|
13
|
+
}
|
14
|
+
|
15
|
+
static targets = [ "hidden" ];
|
16
|
+
|
17
|
+
connect() {
|
18
|
+
this.select = mdc.select.MDCSelect.attachTo(this.element);
|
19
|
+
this.chipsetEl = this.element.querySelector(".mdc-chip-set");
|
20
|
+
this.materialChipset = mdc.chips.MDCChipSet.attachTo(this.chipsetEl);
|
21
|
+
if (this.selectedValue.length > 0) {
|
22
|
+
this.select.foundation.adapter.floatLabel(true);
|
23
|
+
this.selectedValue.forEach(item => {
|
24
|
+
let listItem = this.element.querySelector(`.mdc-deprecated-list-item[data-value="${item}"]`);
|
25
|
+
this.addChip(this.chipTemplate(listItem.dataset.label, listItem.dataset.value, listItem.dataset.confirmed), listItem.dataset.value);
|
26
|
+
listItem.classList.add('!hidden');
|
27
|
+
});
|
28
|
+
}
|
29
|
+
this.select.listen('MDCSelect:change', (event) => {
|
30
|
+
const selected = this.element.querySelector(`.mdc-deprecated-list-item[data-value="${event.detail.value}"]`);
|
31
|
+
selected.classList.add('!hidden');
|
32
|
+
this.addChip(this.chipTemplate(selected.dataset.label, selected.dataset.value, selected.dataset.confirmed), selected.dataset.value);
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
addChip(content, value) {
|
37
|
+
const chipEl = document.createElement('div');
|
38
|
+
chipEl.classList.add('mdc-chip');
|
39
|
+
if (this.chipCssValue) {
|
40
|
+
chipEl.classList.add(this.chipCssValue);
|
41
|
+
}
|
42
|
+
chipEl.dataset.value = value;
|
43
|
+
chipEl.innerHTML = content;
|
44
|
+
this.chipsetEl.appendChild(chipEl);
|
45
|
+
this.materialChipset.addChip(chipEl);
|
46
|
+
if (this.hasHiddenTarget) {
|
47
|
+
this.hiddenTarget.value = this.materialChipset.chipsList.map((chip) => chip.root.dataset.value).join(',');
|
48
|
+
}
|
49
|
+
if (this.urlValue) {
|
50
|
+
post(this.urlValue, {
|
51
|
+
body: {
|
52
|
+
id: value,
|
53
|
+
},
|
54
|
+
responseKind: "turbo-stream",
|
55
|
+
});
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
removeChip(event) {
|
60
|
+
event.stopPropagation();
|
61
|
+
event.preventDefault();
|
62
|
+
const chip = this.element.querySelector(`.mdc-chip[data-value="${event.target.dataset.value}"]`);
|
63
|
+
this.chipsetEl.removeChild(chip);
|
64
|
+
if (this.hasHiddenTarget) {
|
65
|
+
this.hiddenTarget.value = this.materialChipset.chipsList.map((chip) => chip.root.dataset.value).join(',');
|
66
|
+
}
|
67
|
+
const selected = this.element.querySelector(`.mdc-deprecated-list-item[data-value="${event.target.dataset.value}"]`);
|
68
|
+
selected.classList.remove('!hidden');
|
69
|
+
if (this.urlValue) {
|
70
|
+
destroy(`${this.urlValue}/${event.target.dataset.value}`, {
|
71
|
+
responseKind: "turbo-stream",
|
72
|
+
});
|
73
|
+
}
|
74
|
+
if (this.chipsetEl.children.length === 0) {
|
75
|
+
this.select.foundation.adapter.floatLabel(false);
|
76
|
+
}
|
77
|
+
}
|
78
|
+
|
79
|
+
toggle(event) {
|
80
|
+
if (this.confirmableValue) {
|
81
|
+
event.stopPropagation();
|
82
|
+
event.preventDefault();
|
83
|
+
const item = this.element.querySelector(`.mdc-deprecated-list-item[data-value="${event.target.parentElement.dataset.value}"]`);
|
84
|
+
item.dataset.confirmed = item.dataset.confirmed === 'true' ? 'false' : 'true';
|
85
|
+
if (item.dataset.confirmed === 'true') {
|
86
|
+
let params = new URLSearchParams(this.queryStringValue);
|
87
|
+
params.append("name", this.modalNameValue);
|
88
|
+
params.append("id", event.target.parentElement.dataset.value);
|
89
|
+
|
90
|
+
get(`${this.modalUrlValue}?${params.toString()}`, {
|
91
|
+
responseKind: "turbo-stream",
|
92
|
+
});
|
93
|
+
} else {
|
94
|
+
patch(`${this.urlValue}/${event.target.parentElement.dataset.value}/toggle`, {
|
95
|
+
body: {
|
96
|
+
confirmed: false,
|
97
|
+
},
|
98
|
+
responseKind: "turbo-stream"
|
99
|
+
});
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
chipTemplate(label, value, confirmed) {
|
105
|
+
const confirm_label = (confirmed === 'false' && this.confirmableValue) ? ' (unconfirmed)' : '';
|
106
|
+
return `<div class="mdc-chip__text" data-action="click->material-chips-select#toggle">${label}${confirm_label}</div><i data-action="click->material-chips-select#removeChip" data-value="${value}" class="material-icons mdc-chip__icon mdc-chip__icon--trailing" tabindex="0" role="button">cancel</i>`;
|
107
|
+
}
|
108
|
+
|
109
|
+
disconnect() {
|
110
|
+
}
|
111
|
+
}
|