iron-cms 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +174 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/builds/iron.css +2 -0
  6. data/app/assets/config/iron_manifest.js +1 -0
  7. data/app/assets/images/iron/icons/sprite.svg +9425 -0
  8. data/app/assets/tailwind/iron/actiontext.css +550 -0
  9. data/app/assets/tailwind/iron/application.css +66 -0
  10. data/app/assets/tailwind/iron/components/button.css +74 -0
  11. data/app/assets/tailwind/iron/components/dropdown.css +42 -0
  12. data/app/assets/tailwind/iron/components/fieldset.css +18 -0
  13. data/app/assets/tailwind/iron/components/form.css +14 -0
  14. data/app/assets/tailwind/iron/components/icon-picker.css +9 -0
  15. data/app/assets/tailwind/iron/components/input.css +44 -0
  16. data/app/assets/tailwind/iron/components/page.css +7 -0
  17. data/app/assets/tailwind/iron/components/select.css +36 -0
  18. data/app/assets/tailwind/iron/components/sidebar.css +21 -0
  19. data/app/assets/tailwind/iron/components/textarea.css +27 -0
  20. data/app/controllers/concerns/iron/authentication.rb +66 -0
  21. data/app/controllers/concerns/iron/authorization.rb +11 -0
  22. data/app/controllers/concerns/iron/locale_aware.rb +20 -0
  23. data/app/controllers/concerns/iron/web_page.rb +18 -0
  24. data/app/controllers/iron/application_controller.rb +7 -0
  25. data/app/controllers/iron/block_definitions/field_definitions_controller.rb +8 -0
  26. data/app/controllers/iron/block_definitions_controller.rb +52 -0
  27. data/app/controllers/iron/blocks_controller.rb +12 -0
  28. data/app/controllers/iron/content_types/field_definitions_controller.rb +8 -0
  29. data/app/controllers/iron/content_types_controller.rb +52 -0
  30. data/app/controllers/iron/entries_controller.rb +103 -0
  31. data/app/controllers/iron/field_definitions_controller.rb +55 -0
  32. data/app/controllers/iron/first_runs_controller.rb +29 -0
  33. data/app/controllers/iron/home_controller.rb +6 -0
  34. data/app/controllers/iron/icons_controller.rb +10 -0
  35. data/app/controllers/iron/locales_controller.rb +52 -0
  36. data/app/controllers/iron/passwords_controller.rb +36 -0
  37. data/app/controllers/iron/references_controller.rb +11 -0
  38. data/app/controllers/iron/schemas_controller.rb +32 -0
  39. data/app/controllers/iron/sessions_controller.rb +32 -0
  40. data/app/controllers/iron/settings_controller.rb +23 -0
  41. data/app/controllers/iron/users_controller.rb +66 -0
  42. data/app/helpers/iron/application_helper.rb +25 -0
  43. data/app/helpers/iron/avatar_helper.rb +35 -0
  44. data/app/helpers/iron/block_helper.rb +4 -0
  45. data/app/helpers/iron/buttons_helper.rb +14 -0
  46. data/app/helpers/iron/components/badge_helper.rb +70 -0
  47. data/app/helpers/iron/components/dropdown_helper.rb +161 -0
  48. data/app/helpers/iron/content_types_helper.rb +11 -0
  49. data/app/helpers/iron/entries_helper.rb +13 -0
  50. data/app/helpers/iron/field_definitions_helper.rb +5 -0
  51. data/app/helpers/iron/form_builder.rb +43 -0
  52. data/app/helpers/iron/icons_helper.rb +30 -0
  53. data/app/helpers/iron/image_helper.rb +50 -0
  54. data/app/javascript/iron/application.js +6 -0
  55. data/app/javascript/iron/controllers/application.js +9 -0
  56. data/app/javascript/iron/controllers/element_controller.js +11 -0
  57. data/app/javascript/iron/controllers/file_upload_controller.js +18 -0
  58. data/app/javascript/iron/controllers/form_controller.js +7 -0
  59. data/app/javascript/iron/controllers/handle_controller.js +27 -0
  60. data/app/javascript/iron/controllers/icon_picker_controller.js +48 -0
  61. data/app/javascript/iron/controllers/index.js +4 -0
  62. data/app/javascript/iron/controllers/sortable_list_controller.js +125 -0
  63. data/app/javascript/iron/controllers/toggle_controller.js +14 -0
  64. data/app/javascript/iron/controllers/trix_controller.js +19 -0
  65. data/app/javascript/iron/lib/lexorank.js +51 -0
  66. data/app/jobs/iron/application_job.rb +4 -0
  67. data/app/jobs/iron/generate_entry_routes_job.rb +15 -0
  68. data/app/mailers/iron/application_mailer.rb +6 -0
  69. data/app/mailers/passwords_mailer.rb +6 -0
  70. data/app/models/concerns/iron/csv_serializable.rb +28 -0
  71. data/app/models/iron/account/joinable.rb +16 -0
  72. data/app/models/iron/account.rb +13 -0
  73. data/app/models/iron/application_record.rb +5 -0
  74. data/app/models/iron/block_definition/portable.rb +20 -0
  75. data/app/models/iron/block_definition.rb +10 -0
  76. data/app/models/iron/content_type/field_queryable.rb +101 -0
  77. data/app/models/iron/content_type/portable.rb +30 -0
  78. data/app/models/iron/content_type/titlable.rb +13 -0
  79. data/app/models/iron/content_type/web_publishable.rb +47 -0
  80. data/app/models/iron/content_type.rb +39 -0
  81. data/app/models/iron/content_types/collection.rb +6 -0
  82. data/app/models/iron/content_types/single.rb +9 -0
  83. data/app/models/iron/current.rb +12 -0
  84. data/app/models/iron/entry/deep_validation.rb +32 -0
  85. data/app/models/iron/entry/presentable.rb +40 -0
  86. data/app/models/iron/entry/schemable.rb +16 -0
  87. data/app/models/iron/entry/titlable.rb +35 -0
  88. data/app/models/iron/entry/web_publishable.rb +85 -0
  89. data/app/models/iron/entry.rb +16 -0
  90. data/app/models/iron/field/belongs_to_entry.rb +29 -0
  91. data/app/models/iron/field.rb +20 -0
  92. data/app/models/iron/field_definition/portable.rb +36 -0
  93. data/app/models/iron/field_definition.rb +42 -0
  94. data/app/models/iron/field_definitions/block.rb +23 -0
  95. data/app/models/iron/field_definitions/block_list.rb +8 -0
  96. data/app/models/iron/field_definitions/boolean.rb +7 -0
  97. data/app/models/iron/field_definitions/date.rb +7 -0
  98. data/app/models/iron/field_definitions/file.rb +67 -0
  99. data/app/models/iron/field_definitions/number.rb +7 -0
  100. data/app/models/iron/field_definitions/reference.rb +8 -0
  101. data/app/models/iron/field_definitions/reference_list.rb +8 -0
  102. data/app/models/iron/field_definitions/rich_text_area.rb +4 -0
  103. data/app/models/iron/field_definitions/text_area.rb +7 -0
  104. data/app/models/iron/field_definitions/text_field.rb +25 -0
  105. data/app/models/iron/fields/block.rb +40 -0
  106. data/app/models/iron/fields/block_list.rb +16 -0
  107. data/app/models/iron/fields/boolean.rb +7 -0
  108. data/app/models/iron/fields/date.rb +7 -0
  109. data/app/models/iron/fields/file.rb +29 -0
  110. data/app/models/iron/fields/number.rb +7 -0
  111. data/app/models/iron/fields/reference.rb +14 -0
  112. data/app/models/iron/fields/reference_list.rb +17 -0
  113. data/app/models/iron/fields/rich_text_area.rb +9 -0
  114. data/app/models/iron/fields/text_area.rb +7 -0
  115. data/app/models/iron/fields/text_field.rb +19 -0
  116. data/app/models/iron/first_run.rb +13 -0
  117. data/app/models/iron/icon_catalog.rb +45 -0
  118. data/app/models/iron/locale.rb +30 -0
  119. data/app/models/iron/reference.rb +8 -0
  120. data/app/models/iron/schema_archive.rb +71 -0
  121. data/app/models/iron/schema_exporter.rb +15 -0
  122. data/app/models/iron/schema_importer.rb +278 -0
  123. data/app/models/iron/session.rb +5 -0
  124. data/app/models/iron/user/role.rb +21 -0
  125. data/app/models/iron/user.rb +37 -0
  126. data/app/views/active_storage/blobs/_blob.html.erb +14 -0
  127. data/app/views/iron/block_definitions/_block_definition.html.erb +21 -0
  128. data/app/views/iron/block_definitions/_form.html.erb +46 -0
  129. data/app/views/iron/block_definitions/edit.html.erb +8 -0
  130. data/app/views/iron/block_definitions/index.html.erb +18 -0
  131. data/app/views/iron/block_definitions/new.html.erb +8 -0
  132. data/app/views/iron/block_definitions/show.html.erb +34 -0
  133. data/app/views/iron/blocks/new.turbo_stream.erb +6 -0
  134. data/app/views/iron/content_types/_content_type.html.erb +21 -0
  135. data/app/views/iron/content_types/_form.html.erb +137 -0
  136. data/app/views/iron/content_types/edit.html.erb +8 -0
  137. data/app/views/iron/content_types/index.html.erb +28 -0
  138. data/app/views/iron/content_types/new.html.erb +8 -0
  139. data/app/views/iron/content_types/show.html.erb +49 -0
  140. data/app/views/iron/entries/_entry.html.erb +17 -0
  141. data/app/views/iron/entries/_entry_option.html.erb +19 -0
  142. data/app/views/iron/entries/_form.html.erb +63 -0
  143. data/app/views/iron/entries/edit.html.erb +52 -0
  144. data/app/views/iron/entries/entry.html.erb +21 -0
  145. data/app/views/iron/entries/fields/_block.html.erb +92 -0
  146. data/app/views/iron/entries/fields/_block_list.html.erb +45 -0
  147. data/app/views/iron/entries/fields/_boolean.html.erb +13 -0
  148. data/app/views/iron/entries/fields/_date.html.erb +11 -0
  149. data/app/views/iron/entries/fields/_file.html.erb +60 -0
  150. data/app/views/iron/entries/fields/_number.html.erb +11 -0
  151. data/app/views/iron/entries/fields/_reference.html.erb +12 -0
  152. data/app/views/iron/entries/fields/_reference_item.html.erb +28 -0
  153. data/app/views/iron/entries/fields/_reference_list.html.erb +44 -0
  154. data/app/views/iron/entries/fields/_rich_text_area.html.erb +13 -0
  155. data/app/views/iron/entries/fields/_text_area.html.erb +11 -0
  156. data/app/views/iron/entries/fields/_text_field.html.erb +28 -0
  157. data/app/views/iron/entries/index.html.erb +21 -0
  158. data/app/views/iron/entries/new.html.erb +8 -0
  159. data/app/views/iron/entries/search.html.erb +33 -0
  160. data/app/views/iron/field_definitions/_field_definition.html.erb +37 -0
  161. data/app/views/iron/field_definitions/block/_form.html.erb +16 -0
  162. data/app/views/iron/field_definitions/block_list/_form.html.erb +13 -0
  163. data/app/views/iron/field_definitions/boolean/_form.html.erb +2 -0
  164. data/app/views/iron/field_definitions/date/_form.html.erb +2 -0
  165. data/app/views/iron/field_definitions/edit.html.erb +16 -0
  166. data/app/views/iron/field_definitions/file/_form.html.erb +40 -0
  167. data/app/views/iron/field_definitions/index.html.erb +14 -0
  168. data/app/views/iron/field_definitions/layouts/_form.html.erb +47 -0
  169. data/app/views/iron/field_definitions/new.html.erb +22 -0
  170. data/app/views/iron/field_definitions/number/_form.html.erb +2 -0
  171. data/app/views/iron/field_definitions/reference/_form.html.erb +13 -0
  172. data/app/views/iron/field_definitions/reference_list/_form.html.erb +13 -0
  173. data/app/views/iron/field_definitions/rich_text_area/_form.html.erb +2 -0
  174. data/app/views/iron/field_definitions/text_area/_form.html.erb +2 -0
  175. data/app/views/iron/field_definitions/text_field/_form.html.erb +17 -0
  176. data/app/views/iron/first_runs/show.html.erb +44 -0
  177. data/app/views/iron/home/show.html.erb +2 -0
  178. data/app/views/iron/icons/index.html.erb +21 -0
  179. data/app/views/iron/locales/_form.html.erb +24 -0
  180. data/app/views/iron/locales/_locale.html.erb +15 -0
  181. data/app/views/iron/locales/edit.html.erb +8 -0
  182. data/app/views/iron/locales/index.html.erb +12 -0
  183. data/app/views/iron/locales/new.html.erb +8 -0
  184. data/app/views/iron/passwords/edit.html.erb +7 -0
  185. data/app/views/iron/passwords/new.html.erb +26 -0
  186. data/app/views/iron/passwords_mailer/reset.html.erb +4 -0
  187. data/app/views/iron/passwords_mailer/reset.text.erb +2 -0
  188. data/app/views/iron/published_pages/show.html.erb +10 -0
  189. data/app/views/iron/references/new.turbo_stream.erb +6 -0
  190. data/app/views/iron/schemas/new.html.erb +57 -0
  191. data/app/views/iron/sessions/new.html.erb +36 -0
  192. data/app/views/iron/settings/show.html.erb +38 -0
  193. data/app/views/iron/shared/_icon_picker.html.erb +60 -0
  194. data/app/views/iron/users/_form.html.erb +21 -0
  195. data/app/views/iron/users/_user.html.erb +27 -0
  196. data/app/views/iron/users/edit.html.erb +12 -0
  197. data/app/views/iron/users/index.html.erb +21 -0
  198. data/app/views/iron/users/new.html.erb +29 -0
  199. data/app/views/iron/users/show.html.erb +21 -0
  200. data/app/views/layouts/action_text/contents/_content.html.erb +3 -0
  201. data/app/views/layouts/iron/_sidebar.html.erb +83 -0
  202. data/app/views/layouts/iron/_sidebar_item.html.erb +14 -0
  203. data/app/views/layouts/iron/_toast.html.erb +29 -0
  204. data/app/views/layouts/iron/application.html.erb +46 -0
  205. data/app/views/layouts/iron/authentication.html.erb +41 -0
  206. data/config/importmap.rb +9 -0
  207. data/config/routes.rb +40 -0
  208. data/db/migrate/20250422131656_initial_iron_schema.rb +105 -0
  209. data/db/migrate/20250427100754_create_iron_accounts.rb +10 -0
  210. data/db/migrate/20250427104020_add_role_to_iron_users.rb +5 -0
  211. data/db/migrate/20250428094923_add_default_iron_locale_to_iron_account.rb +5 -0
  212. data/db/migrate/20250504144731_create_join_table_content_types_field_definitions.rb +25 -0
  213. data/db/migrate/20250505090716_add_title_field_definition_to_iron_content_types.rb +5 -0
  214. data/db/migrate/20250512210352_create_iron_references.rb +11 -0
  215. data/db/migrate/20250524220355_add_referenced_entry_id_to_iron_fields.rb +5 -0
  216. data/db/migrate/20250529211703_add_metadata_to_iron_field_definitions.rb +5 -0
  217. data/db/migrate/20250529211704_add_value_boolean_to_iron_fields.rb +5 -0
  218. data/db/migrate/20250531172837_add_type_to_iron_content_types.rb +5 -0
  219. data/db/migrate/20250601080146_add_icon_to_iron_content_types.rb +5 -0
  220. data/db/migrate/20250609091605_add_web_publishing_to_iron_content_types.rb +7 -0
  221. data/db/migrate/20250609091813_add_route_to_iron_entries.rb +6 -0
  222. data/lib/generators/iron/pages/pages_generator.rb +34 -0
  223. data/lib/generators/iron/pages/templates/pages_controller.rb +14 -0
  224. data/lib/generators/iron/pages/templates/show.html.erb +9 -0
  225. data/lib/generators/iron/template/template_generator.rb +35 -0
  226. data/lib/generators/iron/template/templates/content_type.html.erb +5 -0
  227. data/lib/iron/cva.rb +69 -0
  228. data/lib/iron/engine.rb +42 -0
  229. data/lib/iron/image_analyzer.rb +26 -0
  230. data/lib/iron/lexorank/exceptions.rb +4 -0
  231. data/lib/iron/lexorank/rankable.rb +185 -0
  232. data/lib/iron/lexorank/rebalance_rank_job.rb +10 -0
  233. data/lib/iron/lexorank/utils.rb +77 -0
  234. data/lib/iron/lexorank.rb +7 -0
  235. data/lib/iron/routing.rb +66 -0
  236. data/lib/iron/sdk.rb +19 -0
  237. data/lib/iron/version.rb +3 -0
  238. data/lib/iron.rb +8 -0
  239. data/lib/puma/plugin/iron_tailwindcss.rb +78 -0
  240. metadata +458 -0
@@ -0,0 +1,550 @@
1
+ /*
2
+ * Default Trix editor styles. See Action Text overwrites below.
3
+ */
4
+
5
+ @layer components {
6
+ trix-editor {
7
+ border: 1px solid #bbb;
8
+ border-radius: 3px;
9
+ margin: 0;
10
+ padding: 0.4em 0.6em;
11
+ min-height: 5em;
12
+ outline: none;
13
+ }
14
+
15
+ trix-toolbar * {
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ trix-toolbar .trix-button-row {
20
+ display: flex;
21
+ flex-wrap: nowrap;
22
+ justify-content: space-between;
23
+ overflow-x: auto;
24
+ }
25
+
26
+ trix-toolbar .trix-button-group {
27
+ display: flex;
28
+ margin-bottom: 10px;
29
+ border: 1px solid #bbb;
30
+ border-top-color: #ccc;
31
+ border-bottom-color: #888;
32
+ border-radius: 3px;
33
+ }
34
+ trix-toolbar .trix-button-group:not(:first-child) {
35
+ margin-left: 1.5vw;
36
+ }
37
+ @media (max-width: 768px) {
38
+ trix-toolbar .trix-button-group:not(:first-child) {
39
+ margin-left: 0;
40
+ }
41
+ }
42
+
43
+ trix-toolbar .trix-button-group-spacer {
44
+ flex-grow: 1;
45
+ }
46
+ @media (max-width: 768px) {
47
+ trix-toolbar .trix-button-group-spacer {
48
+ display: none;
49
+ }
50
+ }
51
+
52
+ trix-toolbar .trix-button {
53
+ position: relative;
54
+ float: left;
55
+ color: rgba(0, 0, 0, 0.6);
56
+ font-size: 0.75em;
57
+ font-weight: 600;
58
+ white-space: nowrap;
59
+ padding: 0 0.5em;
60
+ margin: 0;
61
+ outline: none;
62
+ border: none;
63
+ border-bottom: 1px solid #ddd;
64
+ border-radius: 0;
65
+ background: transparent;
66
+ }
67
+ trix-toolbar .trix-button:not(:first-child) {
68
+ border-left: 1px solid #ccc;
69
+ }
70
+ trix-toolbar .trix-button.trix-active {
71
+ background: #cbeefa;
72
+ color: black;
73
+ }
74
+ trix-toolbar .trix-button:not(:disabled) {
75
+ cursor: pointer;
76
+ }
77
+ trix-toolbar .trix-button:disabled {
78
+ color: rgba(0, 0, 0, 0.125);
79
+ }
80
+ @media (max-width: 768px) {
81
+ trix-toolbar .trix-button {
82
+ letter-spacing: -0.01em;
83
+ padding: 0 0.3em;
84
+ }
85
+ }
86
+
87
+ trix-toolbar .trix-button--icon {
88
+ font-size: inherit;
89
+ width: 2.6em;
90
+ height: 1.6em;
91
+ max-width: calc(0.8em + 4vw);
92
+ text-indent: -9999px;
93
+ }
94
+ @media (max-width: 768px) {
95
+ trix-toolbar .trix-button--icon {
96
+ height: 2em;
97
+ max-width: calc(0.8em + 3.5vw);
98
+ }
99
+ }
100
+ trix-toolbar .trix-button--icon::before {
101
+ display: inline-block;
102
+ position: absolute;
103
+ top: 0;
104
+ right: 0;
105
+ bottom: 0;
106
+ left: 0;
107
+ opacity: 0.6;
108
+ content: "";
109
+ background-position: center;
110
+ background-repeat: no-repeat;
111
+ background-size: contain;
112
+ }
113
+ @media (max-width: 768px) {
114
+ trix-toolbar .trix-button--icon::before {
115
+ right: 6%;
116
+ left: 6%;
117
+ }
118
+ }
119
+ trix-toolbar .trix-button--icon.trix-active::before {
120
+ opacity: 1;
121
+ }
122
+ trix-toolbar .trix-button--icon:disabled::before {
123
+ opacity: 0.125;
124
+ }
125
+
126
+ trix-toolbar .trix-button--icon-attach::before {
127
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M10.5%2018V7.5c0-2.25%203-2.25%203%200V18c0%204.125-6%204.125-6%200V7.5c0-6.375%209-6.375%209%200V18%22%20stroke%3D%22%23000%22%20stroke-width%3D%222%22%20stroke-miterlimit%3D%2210%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%2F%3E%3C%2Fsvg%3E");
128
+ top: 8%;
129
+ bottom: 4%;
130
+ }
131
+
132
+ trix-toolbar .trix-button--icon-bold::before {
133
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M6.522%2019.242a.5.5%200%200%201-.5-.5V5.35a.5.5%200%200%201%20.5-.5h5.783c1.347%200%202.46.345%203.24.982.783.64%201.216%201.562%201.216%202.683%200%201.13-.587%202.129-1.476%202.71a.35.35%200%200%200%20.049.613c1.259.56%202.101%201.742%202.101%203.22%200%201.282-.483%202.334-1.363%203.063-.876.726-2.132%201.12-3.66%201.12h-5.89ZM9.27%207.347v3.362h1.97c.766%200%201.347-.17%201.733-.464.38-.291.587-.716.587-1.27%200-.53-.183-.928-.513-1.198-.334-.273-.838-.43-1.505-.43H9.27Zm0%205.606v3.791h2.389c.832%200%201.448-.177%201.853-.497.399-.315.614-.786.614-1.423%200-.62-.22-1.077-.63-1.385-.418-.313-1.053-.486-1.905-.486H9.27Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
134
+ }
135
+
136
+ trix-toolbar .trix-button--icon-italic::before {
137
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M9%205h6.5v2h-2.23l-2.31%2010H13v2H6v-2h2.461l2.306-10H9V5Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
138
+ }
139
+
140
+ trix-toolbar .trix-button--icon-link::before {
141
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M18.948%205.258a4.337%204.337%200%200%200-6.108%200L11.217%206.87a.993.993%200%200%200%200%201.41c.392.39%201.027.39%201.418%200l1.623-1.613a2.323%202.323%200%200%201%203.271%200%202.29%202.29%200%200%201%200%203.251l-2.393%202.38a3.021%203.021%200%200%201-4.255%200l-.05-.049a1.007%201.007%200%200%200-1.418%200%20.993.993%200%200%200%200%201.41l.05.049a5.036%205.036%200%200%200%207.091%200l2.394-2.38a4.275%204.275%200%200%200%200-6.072Zm-13.683%2013.6a4.337%204.337%200%200%200%206.108%200l1.262-1.255a.993.993%200%200%200%200-1.41%201.007%201.007%200%200%200-1.418%200L9.954%2017.45a2.323%202.323%200%200%201-3.27%200%202.29%202.29%200%200%201%200-3.251l2.344-2.331a2.579%202.579%200%200%201%203.631%200c.392.39%201.027.39%201.419%200a.993.993%200%200%200%200-1.41%204.593%204.593%200%200%200-6.468%200l-2.345%202.33a4.275%204.275%200%200%200%200%206.072Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
142
+ }
143
+
144
+ trix-toolbar .trix-button--icon-strike::before {
145
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M6%2014.986c.088%202.647%202.246%204.258%205.635%204.258%203.496%200%205.713-1.728%205.713-4.463%200-.275-.02-.536-.062-.781h-3.461c.398.293.573.654.573%201.123%200%201.035-1.074%201.787-2.646%201.787-1.563%200-2.773-.762-2.91-1.924H6ZM6.432%2010h3.763c-.632-.314-.914-.715-.914-1.273%200-1.045.977-1.739%202.432-1.739%201.475%200%202.52.723%202.617%201.914h2.764c-.05-2.548-2.11-4.238-5.39-4.238-3.145%200-5.392%201.719-5.392%204.316%200%20.363.04.703.12%201.02ZM4%2011a1%201%200%201%200%200%202h15a1%201%200%201%200%200-2H4Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
146
+ }
147
+
148
+ trix-toolbar .trix-button--icon-quote::before {
149
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M4.581%208.471c.44-.5%201.056-.834%201.758-.995C8.074%207.17%209.201%207.822%2010%208.752c1.354%201.578%201.33%203.555.394%205.277-.941%201.731-2.788%203.163-4.988%203.56a.622.622%200%200%201-.653-.317c-.113-.205-.121-.49.16-.764.294-.286.567-.566.791-.835.222-.266.413-.54.524-.815.113-.28.156-.597.026-.908-.128-.303-.39-.524-.72-.69a3.02%203.02%200%200%201-1.674-2.7c0-.905.283-1.59.72-2.088Zm9.419%200c.44-.5%201.055-.834%201.758-.995%201.734-.306%202.862.346%203.66%201.276%201.355%201.578%201.33%203.555.395%205.277-.941%201.731-2.789%203.163-4.988%203.56a.622.622%200%200%201-.653-.317c-.113-.205-.122-.49.16-.764.294-.286.567-.566.791-.835.222-.266.412-.54.523-.815.114-.28.157-.597.026-.908-.127-.303-.39-.524-.72-.69a3.02%203.02%200%200%201-1.672-2.701c0-.905.283-1.59.72-2.088Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
150
+ }
151
+
152
+ trix-toolbar .trix-button--icon-heading-1::before {
153
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21.5%207.5v-3h-12v3H14v13h3v-13h4.5ZM9%2013.5h3.5v-3h-10v3H6v7h3v-7Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
154
+ }
155
+
156
+ trix-toolbar .trix-button--icon-code::before {
157
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M3.293%2011.293a1%201%200%200%200%200%201.414l4%204a1%201%200%201%200%201.414-1.414L5.414%2012l3.293-3.293a1%201%200%200%200-1.414-1.414l-4%204Zm13.414%205.414%204-4a1%201%200%200%200%200-1.414l-4-4a1%201%200%201%200-1.414%201.414L18.586%2012l-3.293%203.293a1%201%200%200%200%201.414%201.414Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
158
+ }
159
+
160
+ trix-toolbar .trix-button--icon-bullet-list::before {
161
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M5%207.5a1.5%201.5%200%201%200%200-3%201.5%201.5%200%200%200%200%203ZM8%206a1%201%200%200%201%201-1h11a1%201%200%201%201%200%202H9a1%201%200%200%201-1-1Zm1%205a1%201%200%201%200%200%202h11a1%201%200%201%200%200-2H9Zm0%206a1%201%200%201%200%200%202h11a1%201%200%201%200%200-2H9Zm-2.5-5a1.5%201.5%200%201%201-3%200%201.5%201.5%200%200%201%203%200ZM5%2019.5a1.5%201.5%200%201%200%200-3%201.5%201.5%200%200%200%200%203Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
162
+ }
163
+
164
+ trix-toolbar .trix-button--icon-number-list::before {
165
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M3%204h2v4H4V5H3V4Zm5%202a1%201%200%200%201%201-1h11a1%201%200%201%201%200%202H9a1%201%200%200%201-1-1Zm1%205a1%201%200%201%200%200%202h11a1%201%200%201%200%200-2H9Zm0%206a1%201%200%201%200%200%202h11a1%201%200%201%200%200-2H9Zm-3.5-7H6v1l-1.5%202H6v1H3v-1l1.667-2H3v-1h2.5ZM3%2017v-1h3v4H3v-1h2v-.5H4v-1h1V17H3Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
166
+ }
167
+
168
+ trix-toolbar .trix-button--icon-undo::before {
169
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M3%2014a1%201%200%200%200%201%201h6a1%201%200%201%200%200-2H6.257c2.247-2.764%205.151-3.668%207.579-3.264%202.589.432%204.739%202.356%205.174%205.405a1%201%200%200%200%201.98-.283c-.564-3.95-3.415-6.526-6.825-7.095C11.084%207.25%207.63%208.377%205%2011.39V8a1%201%200%200%200-2%200v6Zm2-1Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
170
+ }
171
+
172
+ trix-toolbar .trix-button--icon-redo::before {
173
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M21%2014a1%201%200%200%201-1%201h-6a1%201%200%201%201%200-2h3.743c-2.247-2.764-5.151-3.668-7.579-3.264-2.589.432-4.739%202.356-5.174%205.405a1%201%200%200%201-1.98-.283c.564-3.95%203.415-6.526%206.826-7.095%203.08-.513%206.534.614%209.164%203.626V8a1%201%200%201%201%202%200v6Zm-2-1Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
174
+ }
175
+
176
+ trix-toolbar .trix-button--icon-decrease-nesting-level::before {
177
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M5%206a1%201%200%200%201%201-1h12a1%201%200%201%201%200%202H6a1%201%200%200%201-1-1Zm4%205a1%201%200%201%200%200%202h9a1%201%200%201%200%200-2H9Zm-3%206a1%201%200%201%200%200%202h12a1%201%200%201%200%200-2H6Zm-3.707-5.707a1%201%200%200%200%200%201.414l2%202a1%201%200%201%200%201.414-1.414L4.414%2012l1.293-1.293a1%201%200%200%200-1.414-1.414l-2%202Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
178
+ }
179
+
180
+ trix-toolbar .trix-button--icon-increase-nesting-level::before {
181
+ background-image: url("data:image/svg+xml,%3Csvg%20width%3D%2224%22%20height%3D%2224%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20d%3D%22M5%206a1%201%200%200%201%201-1h12a1%201%200%201%201%200%202H6a1%201%200%200%201-1-1Zm4%205a1%201%200%201%200%200%202h9a1%201%200%201%200%200-2H9Zm-3%206a1%201%200%201%200%200%202h12a1%201%200%201%200%200-2H6Zm-2.293-2.293%202-2a1%201%200%200%200%200-1.414l-2-2a1%201%200%201%200-1.414%201.414L3.586%2012l-1.293%201.293a1%201%200%201%200%201.414%201.414Z%22%20fill%3D%22%23000%22%2F%3E%3C%2Fsvg%3E");
182
+ }
183
+
184
+ trix-toolbar .trix-dialogs {
185
+ position: relative;
186
+ }
187
+
188
+ trix-toolbar .trix-dialog {
189
+ position: absolute;
190
+ top: 0;
191
+ left: 0;
192
+ right: 0;
193
+ font-size: 0.75em;
194
+ padding: 15px 10px;
195
+ background: #fff;
196
+ box-shadow: 0 0.3em 1em #ccc;
197
+ border-top: 2px solid #888;
198
+ border-radius: 5px;
199
+ z-index: 5;
200
+ }
201
+
202
+ trix-toolbar .trix-input--dialog {
203
+ font-size: inherit;
204
+ font-weight: normal;
205
+ padding: 0.5em 0.8em;
206
+ margin: 0 10px 0 0;
207
+ border-radius: 3px;
208
+ border: 1px solid #bbb;
209
+ background-color: #fff;
210
+ box-shadow: none;
211
+ outline: none;
212
+ -webkit-appearance: none;
213
+ -moz-appearance: none;
214
+ }
215
+ trix-toolbar .trix-input--dialog.validate:invalid {
216
+ box-shadow: #f00 0px 0px 1.5px 1px;
217
+ }
218
+
219
+ trix-toolbar .trix-button--dialog {
220
+ font-size: inherit;
221
+ padding: 0.5em;
222
+ border-bottom: none;
223
+ }
224
+
225
+ trix-toolbar .trix-dialog--link {
226
+ max-width: 600px;
227
+ }
228
+
229
+ trix-toolbar .trix-dialog__link-fields {
230
+ display: flex;
231
+ align-items: baseline;
232
+ }
233
+ trix-toolbar .trix-dialog__link-fields .trix-input {
234
+ flex: 1;
235
+ }
236
+ trix-toolbar .trix-dialog__link-fields .trix-button-group {
237
+ flex: 0 0 content;
238
+ margin: 0;
239
+ }
240
+
241
+ trix-editor [data-trix-mutable]:not(.attachment__caption-editor) {
242
+ -webkit-user-select: none;
243
+ -moz-user-select: none;
244
+ -ms-user-select: none;
245
+ user-select: none;
246
+ }
247
+
248
+ trix-editor [data-trix-mutable]::-moz-selection,
249
+ trix-editor [data-trix-cursor-target]::-moz-selection,
250
+ trix-editor [data-trix-mutable] ::-moz-selection {
251
+ background: none;
252
+ }
253
+
254
+ trix-editor [data-trix-mutable]::selection,
255
+ trix-editor [data-trix-cursor-target]::selection,
256
+ trix-editor [data-trix-mutable] ::selection {
257
+ background: none;
258
+ }
259
+
260
+ trix-editor
261
+ .attachment__caption-editor:focus[data-trix-mutable]::-moz-selection {
262
+ background: highlight;
263
+ }
264
+
265
+ trix-editor .attachment__caption-editor:focus[data-trix-mutable]::selection {
266
+ background: highlight;
267
+ }
268
+
269
+ trix-editor [data-trix-mutable].attachment.attachment--file {
270
+ box-shadow: 0 0 0 2px highlight;
271
+ border-color: transparent;
272
+ }
273
+
274
+ trix-editor [data-trix-mutable].attachment img {
275
+ box-shadow: 0 0 0 2px highlight;
276
+ }
277
+
278
+ trix-editor .attachment {
279
+ position: relative;
280
+ }
281
+ trix-editor .attachment:hover {
282
+ cursor: default;
283
+ }
284
+
285
+ trix-editor .attachment--preview .attachment__caption:hover {
286
+ cursor: text;
287
+ }
288
+
289
+ trix-editor .attachment__progress {
290
+ position: absolute;
291
+ z-index: 1;
292
+ height: 20px;
293
+ top: calc(50% - 10px);
294
+ left: 5%;
295
+ width: 90%;
296
+ opacity: 0.9;
297
+ transition: opacity 200ms ease-in;
298
+ }
299
+ trix-editor .attachment__progress[value="100"] {
300
+ opacity: 0;
301
+ }
302
+
303
+ trix-editor .attachment__caption-editor {
304
+ display: inline-block;
305
+ width: 100%;
306
+ margin: 0;
307
+ padding: 0;
308
+ font-size: inherit;
309
+ font-family: inherit;
310
+ line-height: inherit;
311
+ color: inherit;
312
+ text-align: center;
313
+ vertical-align: top;
314
+ border: none;
315
+ outline: none;
316
+ -webkit-appearance: none;
317
+ -moz-appearance: none;
318
+ }
319
+
320
+ trix-editor .attachment__toolbar {
321
+ position: absolute;
322
+ z-index: 1;
323
+ top: -0.9em;
324
+ left: 0;
325
+ width: 100%;
326
+ text-align: center;
327
+ }
328
+
329
+ trix-editor .trix-button-group {
330
+ display: inline-flex;
331
+ }
332
+
333
+ trix-editor .trix-button {
334
+ position: relative;
335
+ float: left;
336
+ color: #666;
337
+ white-space: nowrap;
338
+ font-size: 80%;
339
+ padding: 0 0.8em;
340
+ margin: 0;
341
+ outline: none;
342
+ border: none;
343
+ border-radius: 0;
344
+ background: transparent;
345
+ }
346
+ trix-editor .trix-button:not(:first-child) {
347
+ border-left: 1px solid #ccc;
348
+ }
349
+ trix-editor .trix-button.trix-active {
350
+ background: #cbeefa;
351
+ }
352
+ trix-editor .trix-button:not(:disabled) {
353
+ cursor: pointer;
354
+ }
355
+
356
+ trix-editor .trix-button--remove {
357
+ text-indent: -9999px;
358
+ display: inline-block;
359
+ padding: 0;
360
+ outline: none;
361
+ width: 1.8em;
362
+ height: 1.8em;
363
+ line-height: 1.8em;
364
+ border-radius: 50%;
365
+ background-color: #fff;
366
+ border: 2px solid highlight;
367
+ box-shadow: 1px 1px 6px rgba(0, 0, 0, 0.25);
368
+ }
369
+ trix-editor .trix-button--remove::before {
370
+ display: inline-block;
371
+ position: absolute;
372
+ top: 0;
373
+ right: 0;
374
+ bottom: 0;
375
+ left: 0;
376
+ opacity: 0.7;
377
+ content: "";
378
+ background-image: url("data:image/svg+xml,%3Csvg%20height%3D%2224%22%20width%3D%2224%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Cpath%20d%3D%22M19%206.41%2017.59%205%2012%2010.59%206.41%205%205%206.41%2010.59%2012%205%2017.59%206.41%2019%2012%2013.41%2017.59%2019%2019%2017.59%2013.41%2012z%22%2F%3E%3Cpath%20d%3D%22M0%200h24v24H0z%22%20fill%3D%22none%22%2F%3E%3C%2Fsvg%3E");
379
+ background-position: center;
380
+ background-repeat: no-repeat;
381
+ background-size: 90%;
382
+ }
383
+ trix-editor .trix-button--remove:hover {
384
+ border-color: #333;
385
+ }
386
+ trix-editor .trix-button--remove:hover::before {
387
+ opacity: 1;
388
+ }
389
+
390
+ trix-editor .attachment__metadata-container {
391
+ position: relative;
392
+ }
393
+
394
+ trix-editor .attachment__metadata {
395
+ position: absolute;
396
+ left: 50%;
397
+ top: 2em;
398
+ transform: translate(-50%, 0);
399
+ max-width: 90%;
400
+ padding: 0.1em 0.6em;
401
+ font-size: 0.8em;
402
+ color: #fff;
403
+ background-color: rgba(0, 0, 0, 0.7);
404
+ border-radius: 3px;
405
+ }
406
+ trix-editor .attachment__metadata .attachment__name {
407
+ display: inline-block;
408
+ max-width: 100%;
409
+ vertical-align: bottom;
410
+ overflow: hidden;
411
+ text-overflow: ellipsis;
412
+ white-space: nowrap;
413
+ }
414
+ trix-editor .attachment__metadata .attachment__size {
415
+ margin-left: 0.2em;
416
+ white-space: nowrap;
417
+ }
418
+
419
+ .trix-content {
420
+ line-height: 1.5;
421
+ overflow-wrap: break-word;
422
+ word-break: break-word;
423
+ }
424
+ .trix-content * {
425
+ box-sizing: border-box;
426
+ margin: 0;
427
+ padding: 0;
428
+ }
429
+ .trix-content h1 {
430
+ font-size: 1.2em;
431
+ line-height: 1.2;
432
+ }
433
+ .trix-content blockquote {
434
+ border: 0 solid #ccc;
435
+ border-left-width: 0.3em;
436
+ margin-left: 0.3em;
437
+ padding-left: 0.6em;
438
+ }
439
+ .trix-content [dir="rtl"] blockquote,
440
+ .trix-content blockquote[dir="rtl"] {
441
+ border-width: 0;
442
+ border-right-width: 0.3em;
443
+ margin-right: 0.3em;
444
+ padding-right: 0.6em;
445
+ }
446
+ .trix-content li {
447
+ margin-left: 1em;
448
+ }
449
+ .trix-content [dir="rtl"] li {
450
+ margin-right: 1em;
451
+ }
452
+ .trix-content pre {
453
+ display: inline-block;
454
+ width: 100%;
455
+ vertical-align: top;
456
+ font-family: monospace;
457
+ font-size: 0.9em;
458
+ padding: 0.5em;
459
+ white-space: pre;
460
+ background-color: #eee;
461
+ overflow-x: auto;
462
+ }
463
+ .trix-content img {
464
+ max-width: 100%;
465
+ height: auto;
466
+ }
467
+ .trix-content .attachment {
468
+ display: inline-block;
469
+ position: relative;
470
+ max-width: 100%;
471
+ }
472
+ .trix-content .attachment a {
473
+ color: inherit;
474
+ text-decoration: none;
475
+ }
476
+ .trix-content .attachment a:hover,
477
+ .trix-content .attachment a:visited:hover {
478
+ color: inherit;
479
+ }
480
+ .trix-content .attachment__caption {
481
+ text-align: center;
482
+ }
483
+ .trix-content
484
+ .attachment__caption
485
+ .attachment__name
486
+ + .attachment__size::before {
487
+ content: " \2022 ";
488
+ }
489
+ .trix-content .attachment--preview {
490
+ width: 100%;
491
+ text-align: center;
492
+ }
493
+ .trix-content .attachment--preview .attachment__caption {
494
+ color: #666;
495
+ font-size: 0.9em;
496
+ line-height: 1.2;
497
+ }
498
+ .trix-content .attachment--file {
499
+ color: #333;
500
+ line-height: 1;
501
+ margin: 0 2px 2px 2px;
502
+ padding: 0.4em 1em;
503
+ border: 1px solid #bbb;
504
+ border-radius: 5px;
505
+ }
506
+ .trix-content .attachment-gallery {
507
+ display: flex;
508
+ flex-wrap: wrap;
509
+ position: relative;
510
+ }
511
+ .trix-content .attachment-gallery .attachment {
512
+ flex: 1 0 33%;
513
+ padding: 0 0.5em;
514
+ max-width: 33%;
515
+ }
516
+ .trix-content .attachment-gallery.attachment-gallery--2 .attachment,
517
+ .trix-content .attachment-gallery.attachment-gallery--4 .attachment {
518
+ flex-basis: 50%;
519
+ max-width: 50%;
520
+ }
521
+
522
+ /*
523
+ * We need to override trix.css’s image gallery styles to accommodate the
524
+ * <action-text-attachment> element we wrap around attachments. Otherwise,
525
+ * images in galleries will be squished by the max-width: 33%; rule.
526
+ */
527
+ .trix-content .attachment-gallery > action-text-attachment,
528
+ .trix-content .attachment-gallery > .attachment {
529
+ flex: 1 0 33%;
530
+ padding: 0 0.5em;
531
+ max-width: 33%;
532
+ }
533
+
534
+ .trix-content
535
+ .attachment-gallery.attachment-gallery--2
536
+ > action-text-attachment,
537
+ .trix-content .attachment-gallery.attachment-gallery--2 > .attachment,
538
+ .trix-content
539
+ .attachment-gallery.attachment-gallery--4
540
+ > action-text-attachment,
541
+ .trix-content .attachment-gallery.attachment-gallery--4 > .attachment {
542
+ flex-basis: 50%;
543
+ max-width: 50%;
544
+ }
545
+
546
+ .trix-content action-text-attachment .attachment {
547
+ padding: 0 !important;
548
+ max-width: 100% !important;
549
+ }
550
+ }
@@ -0,0 +1,66 @@
1
+ @import 'tailwindcss';
2
+
3
+ @source "../../../views/**/*.erb";
4
+ @source "../../../helpers/**/*.rb";
5
+ @source "../../../javascript/**/*.js";
6
+
7
+ @import './components/input.css';
8
+ @import './components/textarea.css';
9
+ @import './components/button.css';
10
+ @import './components/select.css';
11
+ @import './components/dropdown.css';
12
+ @import './components/fieldset.css';
13
+ @import './components/page.css';
14
+ @import './components/sidebar.css';
15
+ @import './components/form.css';
16
+ @import './components/icon-picker.css';
17
+ @import './actiontext.css';
18
+
19
+ @plugin '@tailwindcss/typography';
20
+
21
+ @theme {
22
+ --font-sans:
23
+ 'Inter', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji',
24
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
25
+
26
+ --animate-appear-then-fade: appear-then-fade 5s 300ms both;
27
+
28
+ @keyframes appear-then-fade {
29
+ 0%,
30
+ 100% {
31
+ opacity: 0;
32
+ transform: translateY(100%);
33
+ }
34
+ 1%,
35
+ 80% {
36
+ opacity: 1;
37
+ transform: translateY(0);
38
+ }
39
+ }
40
+ }
41
+
42
+ /*
43
+ The default border color has changed to `currentColor` in Tailwind CSS v4,
44
+ so we've added these compatibility styles to make sure everything still
45
+ looks the same as it did with Tailwind CSS v3.
46
+
47
+ If we ever want to remove these styles, we need to add an explicit border
48
+ color utility to any element that depends on these defaults.
49
+ */
50
+ @layer base {
51
+ *,
52
+ ::after,
53
+ ::before,
54
+ ::backdrop,
55
+ ::file-selector-button {
56
+ border-color: var(--color-gray-200, currentColor);
57
+ }
58
+ }
59
+
60
+ @layer components {
61
+ [data-controller~="sortable-list"] {
62
+ [data-sortable-list-target~="item"].dragging {
63
+ @apply opacity-0;
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,74 @@
1
+ @utility btn {
2
+ /* ---------- base ------------------------------------------------------ */
3
+ @apply relative isolate inline-flex items-center justify-center gap-x-2 rounded-lg border font-semibold text-base/6;
4
+ /* sizing */
5
+ @apply px-[calc(--spacing(3.5)-1px)] py-[calc(--spacing(2.5)-1px)] sm:px-[calc(--spacing(3)-1px)] sm:py-[calc(--spacing(1.5)-1px)] sm:text-sm/6;
6
+ /* focus ring */
7
+ @apply focus:outline focus:outline-2 focus:outline-offset-2 focus:outline-stone-400;
8
+ /* disabled */
9
+ @apply disabled:opacity-50;
10
+
11
+ /* embedded icons ------------------------------------------------------- */
12
+ & > *[data-slot="icon"] {
13
+ @apply -mx-0.5 my-0.5 size-5 shrink-0 text-[--btn-icon] sm:my-1 sm:size-4;
14
+ }
15
+
16
+ /* “solid” -------------------------------------------------------------- */
17
+ &[data-variant="solid"],
18
+ &:not([data-variant]) {
19
+ /* implicit default */
20
+ @apply border-transparent bg-(--btn-bg)
21
+ before:absolute before:inset-0 before:-z-10
22
+ before:rounded-[calc(var(--radius-lg)-1px)]
23
+ before:bg-(--btn-bg) before:shadow-sm dark:before:hidden
24
+ dark:border-white/5
25
+ after:absolute after:inset-0 after:-z-10
26
+ after:rounded-[calc(var(--radius-lg)-1px)]
27
+ after:shadow-[inset_0_1px_var(--theme--color-white/15%)]
28
+ dark:after:-inset-px dark:after:rounded-lg
29
+ hover:after:bg-(--btn-hover-overlay)
30
+ active:after:bg-(--btn-hover-overlay)
31
+ disabled:before:shadow-none disabled:after:shadow-none;
32
+ }
33
+
34
+ /* “outline” ------------------------------------------------------------ */
35
+ &[data-variant="outline"] {
36
+ @apply border-stone-950/10 text-stone-950
37
+ hover:bg-stone-950/[2.5%] active:bg-stone-950/[2.5%]
38
+ dark:border-white/15 dark:text-white
39
+ dark:hover:bg-white/5 dark:active:bg-white/5
40
+ [--btn-icon:var(--color-stone-500)]
41
+ hover:[--btn-icon:var(--color-stone-700)]
42
+ active:[--btn-icon:var(--color-stone-700)]
43
+ dark:hover:[--btn-icon:var(--color-stone-400)]
44
+ dark:active:[--btn-icon:var(--color-stone-400)];
45
+ }
46
+
47
+ /* “plain” -------------------------------------------------------------- */
48
+ &[data-variant="plain"] {
49
+ @apply border-transparent text-stone-950
50
+ hover:bg-stone-950/5 active:bg-stone-950/5
51
+ dark:text-white dark:hover:bg-white/10 dark:active:bg-white/10
52
+ [--btn-icon:var(--color-stone-500)]
53
+ hover:[--btn-icon:var(--color-stone-700)]
54
+ active:[--btn-icon:var(--color-stone-700)]
55
+ dark:hover:[--btn-icon:var(--color-stone-400)]
56
+ dark:active:[--btn-icon:var(--color-stone-400)];
57
+ }
58
+
59
+ /* ---------- semantic colors (primary, accent, destructive) ----------- */
60
+ &[data-color="primary"],
61
+ &:not([data-color]) {
62
+ @apply text-white [--btn-bg:var(--color-stone-600)] [--btn-border:var(--color-stone-700)]/90 [--btn-hover-overlay:var(--color-white)]/10 [--btn-icon:var(--color-stone-400)] hover:[--btn-icon:var(--color-stone-300)] active:[--btn-icon:var(--color-stone-300)];
63
+ }
64
+ &[data-color="accent"] {
65
+ @apply text-white [--btn-bg:var(--color-sky-500)] [--btn-border:var(--color-sky-600)]/80 [--btn-hover-overlay:var(--color-white)]/10 [--btn-icon:var(--color-white)]/60 hover:[--btn-icon:var(--color-white)]/80 active:[--btn-icon:var(--color-white)]/80;
66
+ }
67
+ &[data-color="destructive"] {
68
+ @apply text-white [--btn-bg:var(--color-red-600)] [--btn-border:var(--color-red-700)]/90 [--btn-hover-overlay:var(--color-white)]/10 [--btn-icon:var(--color-red-300)] hover:[--btn-icon:var(--color-red-200)] active:[--btn-icon:var(--color-red-200)];
69
+ }
70
+ }
71
+
72
+ @utility btn-touch-target {
73
+ @apply absolute left-1/2 top-1/2 size-[max(100%,2.75rem)] -translate-x-1/2 -translate-y-1/2 [@media(pointer:fine)]:hidden;
74
+ }