coveragebook_components 0.15.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/build/coco/{book.css → coco.css} +1158 -1796
  3. data/app/assets/build/coco/coco.js +11206 -10950
  4. data/app/assets/build/coco/tailwind.preset.js +2760 -0
  5. data/app/assets/css/base/setup.css +0 -43
  6. data/app/assets/css/base/tippy.css +40 -43
  7. data/app/assets/css/base/utils/text.css +0 -210
  8. data/app/assets/css/coco.css +34 -0
  9. data/app/assets/css/plugins/aspect.js +27 -0
  10. data/app/assets/css/plugins/colors.js +30 -0
  11. data/app/assets/css/plugins/icons.js +17 -0
  12. data/app/assets/css/plugins/layout.js +15 -0
  13. data/app/assets/css/plugins/text.js +183 -0
  14. data/app/assets/js/base/tippy/plugins/hide_on_esc.js +3 -1
  15. data/app/assets/js/coco/coco.js +0 -9
  16. data/app/assets/js/coco.js +5 -0
  17. data/app/assets/js/helpers/index.js +10 -2
  18. data/app/components/coco/buttons/button/button.css +5 -5
  19. data/app/components/coco/buttons/button_group/button_group.css +1 -1
  20. data/app/components/coco/buttons/color_picker_button/color_picker_button.css +1 -1
  21. data/app/components/coco/buttons/layout_picker_button/layout_picker_button.html.erb +5 -1
  22. data/app/components/coco/buttons/layout_picker_button/layout_picker_button.rb +2 -2
  23. data/app/components/coco/buttons/menu/menu.css +1 -1
  24. data/app/components/coco/buttons/menu_items/user_profile/user_profile.css +1 -1
  25. data/app/components/coco/component.rb +1 -1
  26. data/app/components/coco/concerns/acts_as_field_with_options.rb +0 -1
  27. data/app/components/coco/fields/button_component.rb +1 -1
  28. data/app/components/coco/fields/submit_component.rb +1 -1
  29. data/app/components/coco/indicators/badge/badge.css +1 -1
  30. data/app/components/coco/layout/panel/panel.css +1 -1
  31. data/app/components/coco/modals/modal/modal.css +1 -1
  32. data/app/components/coco/modals/modal_dialog/modal_dialog.css +1 -1
  33. data/app/components/coco/utilities/placeholder/placeholder.css +1 -1
  34. data/app/helpers/coco/components_helper.rb +253 -3
  35. data/app/helpers/coco/integration_helper.rb +26 -4
  36. data/config/exports.js +0 -0
  37. data/config/locales/coco.en.yml +0 -18
  38. data/config/tailwind.config.js +1 -83
  39. data/config/tailwind.preset.js +67 -0
  40. data/config/tokens.js +25 -21
  41. data/lib/coco/engine.rb +0 -4
  42. data/lib/coco.rb +1 -1
  43. metadata +12 -68
  44. data/app/assets/build/coco/app.css +0 -9711
  45. data/app/assets/build/coco/app.js +0 -25142
  46. data/app/assets/build/coco/book.js +0 -16548
  47. data/app/assets/css/app.css +0 -3
  48. data/app/assets/css/base/utils/colors.css +0 -30
  49. data/app/assets/css/base/utils/icons.css +0 -16
  50. data/app/assets/css/base/utils/layout.css +0 -13
  51. data/app/assets/css/book.css +0 -3
  52. data/app/assets/js/app.js +0 -11
  53. data/app/assets/js/book.js +0 -9
  54. data/app/assets/js/helpers/screenshot.js +0 -42
  55. data/app/assets/js/helpers/turbo_events.js +0 -13
  56. data/app/components/coco/app/application_layout/application_layout.css +0 -122
  57. data/app/components/coco/app/application_layout/application_layout.html.erb +0 -32
  58. data/app/components/coco/app/application_layout/application_layout.js +0 -36
  59. data/app/components/coco/app/application_layout/application_layout.rb +0 -16
  60. data/app/components/coco/app/contact_callout/contact_callout.css +0 -119
  61. data/app/components/coco/app/contact_callout/contact_callout.html.erb +0 -28
  62. data/app/components/coco/app/contact_callout/contact_callout.rb +0 -21
  63. data/app/components/coco/app/faqs/faqs.css +0 -38
  64. data/app/components/coco/app/faqs/faqs.html.erb +0 -12
  65. data/app/components/coco/app/faqs/faqs.rb +0 -14
  66. data/app/components/coco/app/header/header.css +0 -47
  67. data/app/components/coco/app/header/header.html.erb +0 -30
  68. data/app/components/coco/app/header/header.js +0 -11
  69. data/app/components/coco/app/header/header.rb +0 -33
  70. data/app/components/coco/app/nav_drawer/nav_drawer.css +0 -58
  71. data/app/components/coco/app/nav_drawer/nav_drawer.html.erb +0 -16
  72. data/app/components/coco/app/nav_drawer/nav_drawer.js +0 -24
  73. data/app/components/coco/app/nav_drawer/nav_drawer.rb +0 -32
  74. data/app/components/coco/app/plan_card/plan_card.css +0 -132
  75. data/app/components/coco/app/plan_card/plan_card.html.erb +0 -36
  76. data/app/components/coco/app/plan_card/plan_card.rb +0 -66
  77. data/app/components/coco/app/plan_confirmation/plan_confirmation.css +0 -53
  78. data/app/components/coco/app/plan_confirmation/plan_confirmation.html.erb +0 -16
  79. data/app/components/coco/app/plan_confirmation/plan_confirmation.rb +0 -18
  80. data/app/components/coco/app/plan_picker/plan_picker.css +0 -128
  81. data/app/components/coco/app/plan_picker/plan_picker.html.erb +0 -69
  82. data/app/components/coco/app/plan_picker/plan_picker.js +0 -56
  83. data/app/components/coco/app/plan_picker/plan_picker.rb +0 -25
  84. data/app/components/coco/app/sidebar_nav/item/item.css +0 -121
  85. data/app/components/coco/app/sidebar_nav/item/item.html.erb +0 -9
  86. data/app/components/coco/app/sidebar_nav/item/item.js +0 -80
  87. data/app/components/coco/app/sidebar_nav/item/item.rb +0 -48
  88. data/app/components/coco/app/sidebar_nav/menu/menu.css +0 -138
  89. data/app/components/coco/app/sidebar_nav/menu/menu.html.erb +0 -24
  90. data/app/components/coco/app/sidebar_nav/menu/menu.js +0 -12
  91. data/app/components/coco/app/sidebar_nav/menu/menu.rb +0 -46
  92. data/app/components/coco/app/sidebar_nav/navbar/navbar.css +0 -75
  93. data/app/components/coco/app/sidebar_nav/navbar/navbar.html.erb +0 -29
  94. data/app/components/coco/app/sidebar_nav/navbar/navbar.js +0 -28
  95. data/app/components/coco/app/sidebar_nav/navbar/navbar.rb +0 -50
  96. data/app/components/coco/app/slide_editor/slide_editor.css +0 -149
  97. data/app/components/coco/app/slide_editor/slide_editor.html.erb +0 -302
  98. data/app/components/coco/app/slide_editor/slide_editor.js +0 -269
  99. data/app/components/coco/app/slide_editor/slide_editor.rb +0 -114
  100. data/app/components/coco/book/editable_slide/editable_slide.css +0 -332
  101. data/app/components/coco/book/editable_slide/editable_slide.html.erb +0 -48
  102. data/app/components/coco/book/editable_slide/editable_slide.rb +0 -72
  103. data/app/components/coco/book/media_slide/media_slide.css +0 -7
  104. data/app/components/coco/book/media_slide/media_slide.html.erb +0 -3
  105. data/app/components/coco/book/media_slide/media_slide.rb +0 -12
  106. data/app/helpers/coco/app_components_helper.rb +0 -39
  107. data/app/helpers/coco/book_components_helper.rb +0 -11
  108. data/app/helpers/coco/core_components_helper.rb +0 -257
@@ -1,7 +1,12 @@
1
1
  import "./base/polyfills";
2
+ import helpers from "@helpers/index";
3
+ import tippy from "./base/tippy";
2
4
  import Coco from "./coco/coco";
5
+ import CocoComponent from "./coco/component";
6
+ import tokens from "@config/tokens.js";
3
7
  import components from "./base/components";
4
8
 
5
9
  Coco.registerComponents(components);
6
10
 
7
11
  export default Coco;
12
+ export { Coco, CocoComponent, tippy, helpers, tokens };
@@ -1,7 +1,15 @@
1
+ import * as alpine from "./alpine";
1
2
  import * as color from "./color";
2
3
  import * as dom from "./dom";
3
4
  import * as lang from "./lang";
4
5
  import * as location from "./location";
5
- import * as turboEvents from "./turbo_events";
6
+ import * as path from "./path";
6
7
 
7
- export { color, dom, lang, location, turboEvents };
8
+ export default {
9
+ ...alpine,
10
+ ...color,
11
+ ...dom,
12
+ ...lang,
13
+ ...location,
14
+ ...path,
15
+ };
@@ -154,10 +154,10 @@
154
154
  }
155
155
 
156
156
  &[data-theme="toolbar-floating"] {
157
- @apply bg-white hover:bg-gray-100 active:bg-gray-200 border-gray-300;
157
+ @apply bg-white hover:bg-coco-gray-100 active:bg-coco-gray-200 border-coco-gray-300;
158
158
 
159
159
  &[data-state="active"] {
160
- @apply bg-gray-200;
160
+ @apply bg-coco-gray-200;
161
161
  }
162
162
  }
163
163
 
@@ -303,18 +303,18 @@
303
303
  }
304
304
 
305
305
  &[data-theme="neutral-dark"] {
306
- @apply bg-background-dark-1 text-content-light-1 hover:bg-gray-700 active:bg-gray-600 antialiased;
306
+ @apply bg-background-dark-1 text-content-light-1 hover:bg-coco-gray-700 active:bg-coco-gray-600 antialiased;
307
307
 
308
308
  &[data-state="loading"] {
309
309
  @apply bg-background-dark-1;
310
310
  }
311
311
 
312
312
  &[data-state="active"] {
313
- @apply bg-gray-600;
313
+ @apply bg-coco-gray-600;
314
314
  }
315
315
 
316
316
  &[data-disabled="true"] {
317
- @apply bg-gray-300;
317
+ @apply bg-coco-gray-300;
318
318
  }
319
319
  }
320
320
 
@@ -17,7 +17,7 @@
17
17
  }
18
18
 
19
19
  .divider {
20
- @apply w-0 border-l border-gray-300 self-stretch;
20
+ @apply w-0 border-l border-coco-gray-300 self-stretch;
21
21
  }
22
22
 
23
23
  &[data-align="end"] {
@@ -7,7 +7,7 @@
7
7
  }
8
8
 
9
9
  .picker-button-color {
10
- @apply w-full h-full block rounded-full bg-white border border-gray-900;
10
+ @apply w-full h-full block rounded-full bg-white border border-coco-gray-900;
11
11
  }
12
12
 
13
13
  [data-component="color-picker"] {
@@ -16,7 +16,11 @@
16
16
  class="layout-picker-option"
17
17
  :class="{'layout-picker-option-current': typeof selectedLayout !== 'undefined' && selectedLayout === '<%= options[:name] %>'}"
18
18
  aria-label="<%= options[:name] %>">
19
- <%= coco_svg(options[:thumbnail]) %>
19
+ <% if options[:thumbnail] %>
20
+ <%= coco_svg(options[:thumbnail]) %>
21
+ <% else %>
22
+ <%= options[:icon] %>
23
+ <% end %>
20
24
  </button>
21
25
  <% end %>
22
26
  </div>
@@ -9,8 +9,8 @@ module Coco
9
9
  Coco::Button.new(**args)
10
10
  end
11
11
 
12
- renders_many :layouts, ->(name:, thumbnail:, **layout_options) do
13
- @layout_options << {name: name, thumbnail: thumbnail, **layout_options}
12
+ renders_many :layouts, ->(name:, thumbnail: nil, **layout_options, &block) do
13
+ @layout_options << {name: name, thumbnail: thumbnail, **layout_options, icon: block&.call}
14
14
  end
15
15
 
16
16
  attr_reader :layout_options, :size, :resize
@@ -65,7 +65,7 @@
65
65
  }
66
66
 
67
67
  .divider {
68
- @apply h-0 border-t border-gray-300;
68
+ @apply h-0 border-t border-coco-gray-300;
69
69
  }
70
70
  }
71
71
  }
@@ -16,7 +16,7 @@
16
16
  }
17
17
 
18
18
  .user-profile-email {
19
- @apply text-gray-500 label-sm italic truncate;
19
+ @apply text-coco-gray-500 label-sm italic truncate;
20
20
  }
21
21
  }
22
22
  }
@@ -3,7 +3,7 @@ module Coco
3
3
  include Concerns::AcceptsTagAttributes
4
4
  include Concerns::HasName
5
5
  include Concerns::Translatable
6
- include Coco::CoreComponentsHelper
6
+ include Coco::ComponentsHelper
7
7
  include Coco::AlpineHelper
8
8
 
9
9
  def accepts_options?
@@ -3,7 +3,6 @@ module Coco
3
3
  module ActsAsFieldWithOptions
4
4
  extend ActiveSupport::Concern
5
5
  include Concerns::HasName
6
- include AppComponentsHelper
7
6
 
8
7
  def combine_options!
9
8
  @options[:data] ||= {}
@@ -2,7 +2,7 @@ module Coco
2
2
  module Fields
3
3
  class ButtonComponent < ViewComponent::Form::ButtonComponent
4
4
  include Concerns::ActsAsFieldWithOptions
5
- include Coco::CoreComponentsHelper
5
+ include Coco::ComponentsHelper
6
6
 
7
7
  def call
8
8
  coco_button(**options) do
@@ -2,7 +2,7 @@ module Coco
2
2
  module Fields
3
3
  class SubmitComponent < ViewComponent::Form::SubmitComponent
4
4
  include Concerns::ActsAsFieldWithOptions
5
- include Coco::CoreComponentsHelper
5
+ include Coco::ComponentsHelper
6
6
 
7
7
  def call
8
8
  coco_button(**options, type: :submit) do
@@ -24,7 +24,7 @@
24
24
  }
25
25
 
26
26
  &[data-theme="neutral-muted"] {
27
- @apply bg-gray-300 text-content-dark-3;
27
+ @apply bg-coco-gray-300 text-content-dark-3;
28
28
  }
29
29
 
30
30
  &[data-theme="primary"] {
@@ -8,7 +8,7 @@
8
8
 
9
9
  /* Only style Coco panels that are not rendered inside legacy panel components */
10
10
  &:not([data-component="panel"] [data-component="panel"]) {
11
- @apply block bg-content-light-1 border border-gray-300 shadow-md rounded-xl;
11
+ @apply block bg-content-light-1 border border-coco-gray-300 shadow-md rounded-xl;
12
12
 
13
13
  .panel-content {
14
14
  @apply block;
@@ -82,7 +82,7 @@
82
82
  @apply max-w-2xl mx-auto;
83
83
 
84
84
  [data-component="modal-dialog"] {
85
- @apply border border-gray-300 shadow-md rounded-xl;
85
+ @apply border border-coco-gray-300 shadow-md rounded-xl;
86
86
  }
87
87
  }
88
88
  }
@@ -9,7 +9,7 @@
9
9
 
10
10
  .modal-dialog-header {
11
11
  @apply relative flex items-center;
12
- @apply px-4 sm:px-8 h-14 sm:h-16 border-b border-gray-300 rounded-t-xl bg-white;
12
+ @apply px-4 sm:px-8 h-14 sm:h-16 border-b border-coco-gray-300 rounded-t-xl bg-white;
13
13
  }
14
14
 
15
15
  .modal-dialog-title {
@@ -3,7 +3,7 @@
3
3
  @apply p-4;
4
4
 
5
5
  &[data-boxed="true"] {
6
- @apply border border-dashed border-gray-400 bg-gray-50;
6
+ @apply border border-dashed border-coco-gray-400 bg-coco-gray-50;
7
7
  }
8
8
 
9
9
  &[data-prose="true"] {
@@ -1,7 +1,257 @@
1
1
  module Coco
2
2
  module ComponentsHelper
3
- include Coco::CoreComponentsHelper
4
- include Coco::BookComponentsHelper
5
- include Coco::AppComponentsHelper
3
+ include ActionView::Helpers::UrlHelper
4
+
5
+ # Buttons
6
+
7
+ def coco_button(*args, **kwargs, &block)
8
+ href, content = if block
9
+ [args.first, nil]
10
+ else
11
+ (args.size == 1) ? [nil, args.first] : args[0..2].reverse!
12
+ end
13
+
14
+ button = if kwargs.key?(:action) || kwargs.key?(:method) || kwargs.key?(:params)
15
+ "Coco::ButtonTo"
16
+ else
17
+ "Coco::Button"
18
+ end
19
+
20
+ component = button.constantize.new(href: href, **kwargs)
21
+ component = component.with_content(content) if !block && content.present?
22
+
23
+ render(component, &block)
24
+ end
25
+
26
+ def coco_button_group(**, &block)
27
+ render Coco::ButtonGroup.new(**), &block
28
+ end
29
+
30
+ def coco_menu_button(**, &block)
31
+ render Coco::MenuButton.new(**), &block
32
+ end
33
+
34
+ def coco_menu_item(type, **, &block)
35
+ render coco_component("menu_items/#{type}", **), &block
36
+ end
37
+
38
+ def coco_confirm_button(href = nil, **, &block)
39
+ render Coco::ConfirmButton.new(href: href, **), &block
40
+ end
41
+
42
+ def coco_color_picker_button(**, &block)
43
+ render Coco::ColorPickerButton.new(**), &block
44
+ end
45
+
46
+ def coco_image_picker_button(**, &block)
47
+ render Coco::ImagePickerButton.new(**), &block
48
+ end
49
+
50
+ def coco_layout_picker_button(**, &block)
51
+ render Coco::LayoutPickerButton.new(**), &block
52
+ end
53
+
54
+ def coco_toolbar(**, &block)
55
+ render Coco::Toolbar.new(**), &block
56
+ end
57
+
58
+ def coco_option_bar(**, &block)
59
+ render Coco::OptionBar.new(**), &block
60
+ end
61
+
62
+ # Embeds
63
+
64
+ def coco_embed(platform, url = nil, **)
65
+ case platform
66
+ when :youtube
67
+ render Coco::YoutubeEmbed.new(url: url, **)
68
+ else
69
+ raise ArgumentError, "`#{platform}` is not a valid embed type"
70
+ end
71
+ end
72
+
73
+ # Forms (WIP)
74
+
75
+ def coco_form_with(**, &block)
76
+ form_with(**, builder: Coco::AppFormBuilder, &block)
77
+ end
78
+
79
+ def coco_form_for(*, **, &block)
80
+ form_for(*, **, builder: Coco::AppFormBuilder, &block)
81
+ end
82
+
83
+ def coco_fields(**, &block)
84
+ fields(**, builder: Coco::AppFormBuilder, &block)
85
+ end
86
+
87
+ # Images
88
+
89
+ def coco_svg(path = nil, **)
90
+ render Coco::Svg.new(path: path, **)
91
+ end
92
+
93
+ def coco_image(src = nil, **)
94
+ render Coco::Image.new(src: src, **)
95
+ end
96
+
97
+ def coco_avatar(src, name = nil, **)
98
+ render Coco::Avatar.new(src: src, name: name, **)
99
+ end
100
+
101
+ def coco_icon(icon_name = nil, **, &block)
102
+ render Coco::Icon.new(name: icon_name, **), &block
103
+ end
104
+
105
+ # Indicators
106
+
107
+ def coco_stamp(type = nil, **)
108
+ props = case type
109
+ when :success, :positive
110
+ {icon: :check_circle, theme: :positive}
111
+ when :error, :negative
112
+ {icon: :alert_circle, theme: :negative}
113
+ when :warning
114
+ {icon: :alert_triangle, theme: :warning}
115
+ when :info
116
+ {icon: :info, theme: :info}
117
+ else
118
+ {}
119
+ end
120
+
121
+ render Coco::Stamp.new(**props, **)
122
+ end
123
+
124
+ def coco_badge(text, **)
125
+ render Coco::Badge.new(**).with_content(text)
126
+ end
127
+
128
+ # Layout
129
+
130
+ def coco_spacer(size = Coco::Spacer::DEFAULT, **)
131
+ render Coco::Spacer.new(size:, **)
132
+ end
133
+ alias_method :space, :coco_spacer
134
+
135
+ def coco_stack(spacing: Coco::Spacer::DEFAULT, **, &block)
136
+ render Coco::Stack.new(spacing:, **), &block
137
+ end
138
+
139
+ def coco_panel(**, &block)
140
+ render Coco::Panel.new(**), &block
141
+ end
142
+
143
+ def coco_page(id, **, &block)
144
+ render Coco::Page.new(id: id, **), &block
145
+ end
146
+
147
+ # Messaging
148
+
149
+ def coco_notice(**, &block)
150
+ render Coco::Notice.new(**), &block
151
+ end
152
+
153
+ def coco_snackbar(**, &block)
154
+ render Coco::Snackbar.new(**), &block
155
+ end
156
+
157
+ def coco_toast(**, &block)
158
+ render Coco::Toast.new(**), &block
159
+ end
160
+
161
+ def coco_system_banner(**, &block)
162
+ render Coco::SystemBanner.new(**), &block
163
+ end
164
+
165
+ # Modals
166
+
167
+ def coco_modal(name = "default", **, &block)
168
+ render(Coco::Modal.new(name: name, **), &block)
169
+ end
170
+
171
+ def coco_modal_dialog(name = "default", **, &block)
172
+ render(Coco::Modal.new(name: name, **)) do |modal|
173
+ modal.with_container_dialog(&block)
174
+ end
175
+ end
176
+
177
+ def coco_modal_lightbox(name = "default", scroll_top: nil, **, &block)
178
+ render(Coco::Modal.new(name: name, scroll_top: scroll_top, **)) do |modal|
179
+ modal.with_container_lightbox(&block)
180
+ end
181
+ end
182
+
183
+ # Navigation
184
+
185
+ def coco_link(*args, **, &block)
186
+ href, content = if block
187
+ [args.first, nil]
188
+ else
189
+ (args.size == 1) ? [nil, args.first] : args[0..2].reverse!
190
+ end
191
+
192
+ link = Coco::Link.new(href: href, **)
193
+ link = link.with_content(content) if !block && content.present?
194
+
195
+ render(link, &block)
196
+ end
197
+
198
+ def coco_link_to(name = nil, options = nil, html_options = nil, &block)
199
+ html_options, options, name = options, name, block if block
200
+ options ||= {}
201
+ html_options = Coco::ActionViewHelper.convert_options_to_data_attributes(options, html_options)
202
+
203
+ href = Coco::ActionViewHelper.url_target(name, options)
204
+
205
+ if block
206
+ coco_link(href, **html_options.symbolize_keys!, &block)
207
+ else
208
+ coco_link(name, href, **html_options.symbolize_keys!)
209
+ end
210
+ end
211
+
212
+ def coco_button_to(name = nil, options = nil, html_options = nil, &block)
213
+ html_options, options = options, name if block
214
+ options ||= {}
215
+ html_options ||= {}
216
+ html_options.symbolize_keys!
217
+
218
+ button = Coco::ButtonTo.new(action: options, type: :submit, **html_options)
219
+ button = button.with_content(name) unless block
220
+ render(button, &block)
221
+ end
222
+
223
+ def coco_pager_button(direction, **, &block)
224
+ render Coco::PagerButton.new(direction:, **), &block
225
+ end
226
+
227
+ # Typography
228
+
229
+ def coco_prose(**, &block)
230
+ render Coco::Prose.new(**), &block
231
+ end
232
+
233
+ def coco_seamless_textarea(**, &block)
234
+ render Coco::SeamlessTextarea.new(**), &block
235
+ end
236
+
237
+ # Utilties (internal)
238
+
239
+ def coco_placeholder(text_content = nil, **, &block)
240
+ render Coco::Placeholder.new(text_content:, **), &block
241
+ end
242
+
243
+ # General
244
+
245
+ def coco_tag(*, **, &block)
246
+ render Coco::Tag.new(*, **), &block
247
+ end
248
+
249
+ def coco_component(name, *, **)
250
+ resolve_component("coco/#{name}", *, **)
251
+ end
252
+
253
+ def resolve_component(...)
254
+ Coco::ComponentResolver.new(...)
255
+ end
6
256
  end
7
257
  end
@@ -1,11 +1,33 @@
1
1
  module Coco
2
2
  module IntegrationHelper
3
- def coco_stylesheet_tag(context, dev: ENV["COCO_PATH"], **)
4
- stylesheet_link_tag("coco#{"/dev" if dev}/#{context}", **)
3
+ def coco_stylesheet_tag(dev: ENV["COCO_PATH"], **)
4
+ stylesheet_link_tag("coco#{"/dev" if dev}/coco", **)
5
5
  end
6
6
 
7
- def coco_stylesheet_file_path(context, dev: ENV["COCO_PATH"], **opts)
8
- File.join(Coco::Engine.root, "app/assets/build/coco#{"/dev" if dev}/#{context}.css")
7
+ def coco_stylesheet_file_path(...)
8
+ IntegrationHelper.stylesheet_file_path(...)
9
+ end
10
+
11
+ def coco_javascript_file_path(...)
12
+ IntegrationHelper.javascript_file_path(...)
13
+ end
14
+
15
+ def coco_tailwind_preset_path(...)
16
+ IntegrationHelper.tailwind_preset_path(...)
17
+ end
18
+
19
+ class << self
20
+ def stylesheet_file_path(dev: ENV["COCO_PATH"], **opts)
21
+ File.join(Coco::Engine.root, "app/assets/build/coco#{"/dev" if dev}/coco.css")
22
+ end
23
+
24
+ def javascript_file_path(dev: ENV["COCO_PATH"], **opts)
25
+ File.join(Coco::Engine.root, "app/assets/build/coco#{"/dev" if dev}/coco.js")
26
+ end
27
+
28
+ def tailwind_preset_path
29
+ File.join(Coco::Engine.root, "app/assets/build/coco/tailwind.preset.js")
30
+ end
9
31
  end
10
32
  end
11
33
  end
data/config/exports.js ADDED
File without changes
@@ -1,23 +1,5 @@
1
1
  en:
2
2
  coco:
3
- app:
4
- slide_editor:
5
- bg_color_picker:
6
- label: "Background colour"
7
- bg_image_picker:
8
- label: "Background image"
9
- blank_state: "Drag a jpg, png or gif onto the slide area or..."
10
- text_color_picker:
11
- label: "Text colour"
12
- layout_picker:
13
- label: "Layout"
14
- undo_button:
15
- tooltip: "Undo"
16
- redo_button:
17
- tooltip: "Redo"
18
- save_button:
19
- label: "Save"
20
- saving_label: "Saving..."
21
3
  test:
22
4
  translatable:
23
5
  greeting: "Hello"
@@ -1,94 +1,12 @@
1
1
  /** @type {import('tailwindcss').Config} */
2
2
 
3
- const defaultTheme = require("tailwindcss/defaultTheme");
4
3
  const { cocoPath } = require("./utils.js");
5
- const { fontSize, fontFamily, colors, screens } = require("./tokens.js");
6
4
 
7
5
  module.exports = {
6
+ presets: [require("./tailwind.preset.js")],
8
7
  content: [
9
8
  cocoPath("@components/**/*.{erb,rb,js}", true),
10
9
  cocoPath("@assets/**/*.{erb,rb}", true),
11
- cocoPath("@previews/**/*.{erb,rb}", true),
12
- ],
13
- safelist: [
14
- {
15
- pattern: /tippy-.+/,
16
- },
17
10
  ],
18
11
  blocklist: ["container"],
19
- theme: {
20
- colors,
21
- screens,
22
- fontFamily: {
23
- display: [fontFamily.displaySans, ...defaultTheme.fontFamily.sans],
24
- body: [fontFamily.bodySans, ...defaultTheme.fontFamily.sans],
25
- branded: [fontFamily.displaySerif, ...defaultTheme.fontFamily.serif],
26
- },
27
- extend: {
28
- fontSize,
29
- containers: {
30
- "slide-fluid": "700px",
31
- },
32
- aspectRatio: {
33
- slide: "16 / 10",
34
- },
35
- animation: {
36
- spin: "spin 1.5s linear infinite",
37
- "spin-reverse": "spin 1.5s linear infinite reverse",
38
- },
39
- spacing: {
40
- 13: "3.25rem",
41
- 15: "3.75rem",
42
- 18: "4.5rem",
43
- },
44
- customForms: () => ({
45
- DEFAULT: {
46
- checkbox: {
47
- "&:indeterminate": {
48
- background:
49
- "url(\"data:image/svg+xml,%3Csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='8' height='2' x='4' y='7' rx='1'/%3E%3C/svg%3E\");",
50
- borderColor: "transparent",
51
- backgroundColor: "currentColor",
52
- backgroundSize: "100% 100%",
53
- backgroundPosition: "center",
54
- backgroundRepeat: "no-repeat",
55
- },
56
- },
57
- },
58
- }),
59
- },
60
- },
61
- corePlugins: {
62
- aspectRatio: false,
63
- },
64
- plugins: [
65
- require("@tailwindcss/forms"),
66
- require("@tailwindcss/container-queries"),
67
-
68
- ({ matchUtilities, theme }) => {
69
- // Safari 14-compatible aspect ratio
70
- matchUtilities(
71
- {
72
- aspect: (value) => ({
73
- "@supports (aspect-ratio: 1 / 1)": {
74
- aspectRatio: value,
75
- },
76
- "@supports not (aspect-ratio: 1 / 1)": {
77
- "&::before": {
78
- content: '""',
79
- float: "left",
80
- paddingTop: `calc(100% / (${value}))`,
81
- },
82
- "&::after": {
83
- clear: "left",
84
- content: '""',
85
- display: "block",
86
- },
87
- },
88
- }),
89
- },
90
- { values: theme("aspectRatio") }
91
- );
92
- },
93
- ],
94
12
  };