bullet_train-themes-hayabusa 1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bt-link +0 -0
- data/MIT-LICENSE +20 -0
- data/README.md +28 -0
- data/Rakefile +8 -0
- data/app/assets/config/bullet_train_themes_hayabusa_manifest.js +0 -0
- data/app/assets/stylesheets/hayabusa/actiontext.css +26 -0
- data/app/assets/stylesheets/hayabusa/application.css +33 -0
- data/app/assets/stylesheets/hayabusa/electron.css +46 -0
- data/app/assets/stylesheets/hayabusa/fields/cloudinary_image.css +58 -0
- data/app/assets/stylesheets/hayabusa/fields/date_field.css +19 -0
- data/app/assets/stylesheets/hayabusa/fields/index.css +5 -0
- data/app/assets/stylesheets/hayabusa/fields/phone_field.css +7 -0
- data/app/assets/stylesheets/hayabusa/fields/super_select.css +103 -0
- data/app/assets/stylesheets/hayabusa/fields/trix_editor.css +90 -0
- data/app/assets/stylesheets/hayabusa/mailer.scss +359 -0
- data/app/assets/stylesheets/hayabusa/tailwind/colors.css +25 -0
- data/app/assets/stylesheets/hayabusa/tailwind/components.css +151 -0
- data/app/assets/stylesheets/hayabusa/tailwind/dark-mode.css +218 -0
- data/app/assets/stylesheets/hayabusa/tailwind/utilities.css +49 -0
- data/app/assets/stylesheets/hayabusa/turn.css +44 -0
- data/app/assets/stylesheets/hayabusa.tailwind.css +5 -0
- data/app/assets/stylesheets/tailwindcss/base.css +1 -0
- data/app/assets/stylesheets/tailwindcss/components.css +1 -0
- data/app/assets/stylesheets/tailwindcss/utilities.css +1 -0
- data/app/javascript/application.hayabusa.js +0 -0
- data/app/views/themes/hayabusa/_alert.html.erb +13 -0
- data/app/views/themes/hayabusa/_box.html.erb +66 -0
- data/app/views/themes/hayabusa/_breadcrumb.html.erb +23 -0
- data/app/views/themes/hayabusa/_cell.html.erb +41 -0
- data/app/views/themes/hayabusa/_decision_line.html.erb +12 -0
- data/app/views/themes/hayabusa/_line.html.erb +3 -0
- data/app/views/themes/hayabusa/_notices.html.erb +15 -0
- data/app/views/themes/hayabusa/_page.html.erb +12 -0
- data/app/views/themes/hayabusa/_title.html.erb +20 -0
- data/app/views/themes/hayabusa/attributes/_base.html.erb +30 -0
- data/app/views/themes/hayabusa/attributes/_block.html.erb +9 -0
- data/app/views/themes/hayabusa/breadcrumbs/_actions.html.erb +22 -0
- data/app/views/themes/hayabusa/commentary/_box.html.erb +13 -0
- data/app/views/themes/hayabusa/conversations/_card.html.erb +21 -0
- data/app/views/themes/hayabusa/conversations/_comment.html.erb +26 -0
- data/app/views/themes/hayabusa/conversations/_message.html.erb +136 -0
- data/app/views/themes/hayabusa/conversations/_thread_border.html.erb +3 -0
- data/app/views/themes/hayabusa/fields/_field.html.erb +81 -0
- data/app/views/themes/hayabusa/forms/_errors.html.erb +14 -0
- data/app/views/themes/hayabusa/layouts/_account.html.erb +139 -0
- data/app/views/themes/hayabusa/layouts/_devise.html.erb +11 -0
- data/app/views/themes/hayabusa/layouts/_head.html.erb +8 -0
- data/app/views/themes/hayabusa/layouts/_mailer.html.erb +429 -0
- data/app/views/themes/hayabusa/memberships/_photos.html.erb +18 -0
- data/app/views/themes/hayabusa/menu/_heading.html.erb +3 -0
- data/app/views/themes/hayabusa/menu/_item.html.erb +16 -0
- data/app/views/themes/hayabusa/menu/_section.html.erb +7 -0
- data/app/views/themes/hayabusa/workflow/_box.html.erb +30 -0
- data/config/routes.rb +2 -0
- data/lib/bullet_train/themes/hayabusa/engine.rb +12 -0
- data/lib/bullet_train/themes/hayabusa/version.rb +7 -0
- data/lib/bullet_train/themes/hayabusa.rb +15 -0
- data/lib/tasks/bullet_train/themes/hayabusa_tasks.rake +53 -0
- data/tailwind.hayabusa.config.js +96 -0
- metadata +146 -0
@@ -0,0 +1,136 @@
|
|
1
|
+
<% new_message ||= false %>
|
2
|
+
<% current_author = defined?(current_user) ? current_user : send(BulletTrain::Conversations.current_participant_helper_method) %>
|
3
|
+
<% current_user_message = message.author == current_author %>
|
4
|
+
<% avatar = capture do %>
|
5
|
+
<% if message.membership %>
|
6
|
+
<img src="<%= membership_profile_photo_url(message.membership) %>" title="<%= message.user_name %>" alt="<%= message.user_name %>" class="w-6 h-6 rounded-full <%= current_user_message ? 'order-2' : 'order-1' %>">
|
7
|
+
<% elsif message.participant %>
|
8
|
+
<div class="<%= current_user_message ? 'order-2' : 'order-1' %>">
|
9
|
+
<% if BulletTrain::Conversations.respond_to?(:participant_avatar_partial) && BulletTrain::Conversations.participant_avatar_partial %>
|
10
|
+
<%= render BulletTrain::Conversations.participant_avatar_partial, participant: message.participant %>
|
11
|
+
<% end %>
|
12
|
+
</div>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
15
|
+
<% next_message ||= message.next_message %>
|
16
|
+
|
17
|
+
<%# A message series is a series of messages by the same user, each message within 5 minutes of the previous message. It has nothing to do with replies and message threads %>
|
18
|
+
<% next_message_in_series = (message.author == next_message&.author) && (message.created_at > next_message.created_at - 5.minutes) && (message.parent_message_id == next_message&.parent_message_id || message.id == next_message.parent_message_id)%>
|
19
|
+
<% if next_message_in_series %>
|
20
|
+
<% avatar = nil %>
|
21
|
+
<% end %>
|
22
|
+
|
23
|
+
<%# We set this to true when rendering the messages for the reply view. All messages in the thread are shown in order without any other messages from the conversation %>
|
24
|
+
<% show_as_thread ||= false %>
|
25
|
+
|
26
|
+
<%# placeholder messages are used when displaying a reply to a message that we need to show out of order with the rest %>
|
27
|
+
<% placeholder_message ||= false %>
|
28
|
+
|
29
|
+
<% if avatar.nil? %>
|
30
|
+
<% avatar = capture do %>
|
31
|
+
<div style="height: 24px; width: 24px;" class="<%= current_user_message ? 'order-2' : 'order-1' %>"></div>
|
32
|
+
<% end %>
|
33
|
+
<% end %>
|
34
|
+
|
35
|
+
<% rounding_modifier = message_corner_class(next_message_in_series, current_user_message) %>
|
36
|
+
|
37
|
+
<% timestamp = next_message_in_series || show_as_thread ? '' : time_ago_in_words(message.created_at) + " ago" %>
|
38
|
+
|
39
|
+
<% threaded_message = message.threaded? %>
|
40
|
+
<% thread_started_by_current_user = message.thread_origin_user == current_author %>
|
41
|
+
<% last_message_in_thread = !placeholder_message && threaded_message && (message.next_message.nil? || message.next_message.thread_id != message.thread_id)%>
|
42
|
+
<% out_of_thread_message = !show_as_thread && threaded_message && message.reply? && message.previous_message != message.previous_message_in_thread %>
|
43
|
+
<% has_replies = message.replies.any? && message.next_message == message.next_message_in_thread %>
|
44
|
+
<% border_side = thread_started_by_current_user ? :left : :right %>
|
45
|
+
<% show_borders = !show_as_thread && threaded_message %>
|
46
|
+
|
47
|
+
<% if out_of_thread_message %>
|
48
|
+
<%= render 'account/shared/message', message: message.thread_origin_message, next_message: message, placeholder_message: true, show_as_thread: show_as_thread %>
|
49
|
+
<% end %>
|
50
|
+
|
51
|
+
|
52
|
+
<div class="chat-message"
|
53
|
+
<% unless show_as_thread %>
|
54
|
+
data-reply-target="message"
|
55
|
+
data-user="<%= message.author.label_string %>"
|
56
|
+
data-message-id="<%= message.parent_message_id || message.id %>"
|
57
|
+
data-action="mouseleave->reply#hideReplyButton"
|
58
|
+
<% end %>
|
59
|
+
>
|
60
|
+
<div class="group flex <%= 'justify-end' if current_user_message %> <%= 'opacity-20' if new_message %> items-stretch">
|
61
|
+
<% if show_borders %>
|
62
|
+
<% if (has_replies || placeholder_message) %>
|
63
|
+
<%= message_thread_border(side: border_side, position: :start) unless show_as_thread %>
|
64
|
+
<% end %>
|
65
|
+
<% if message.reply? && ((current_user_message && thread_started_by_current_user) || (!current_user_message && !thread_started_by_current_user) ) %>
|
66
|
+
<%= message_thread_border(side: border_side, position: (last_message_in_thread ? :end : :middle)) %>
|
67
|
+
<% end %>
|
68
|
+
<% end %>
|
69
|
+
|
70
|
+
|
71
|
+
<div class="flex flex-col <%= 'mb-0.5' if next_message_in_series %>">
|
72
|
+
<div class="flex items-end relative <%= 'justify-end' if current_user_message %>" data-action="<%= 'click->reply#preventDefault' if show_as_thread %>">
|
73
|
+
<div class="flex flex-col space-y-2 text-xs max-w-xs mx-2 <%= current_user_message ? 'order-1 items-end' : 'order-3 items-start' %> z-10 transition-all duration-300"
|
74
|
+
data-action="<%= 'mouseenter->reply#showReplyButton click->reply#showReplyButton' unless placeholder_message || show_as_thread %>" data-show-class="<%= current_user_message ? 'mr-10' : 'ml-10' %>"
|
75
|
+
>
|
76
|
+
<% if placeholder_message %>
|
77
|
+
<div class="cursor-pointer" data-thread-url="<%= url_for([:thread, :account, message.thread_origin_message || message]) %>" data-action="click->reply#reply"><span class="px-2 py-1 text-xs text-gray-300 rounded-lg inline-block <%= rounding_modifier %> border-primary-300 border break-words sm:max-w-sm max-w-tiny"><%= Nokogiri::HTML.fragment(trix_sanitize(message.body)).text.truncate(80) %></span></div>
|
78
|
+
<% else %>
|
79
|
+
<div><span class="px-4 py-2 rounded-lg inline-block <%= rounding_modifier %> <%= current_user_message ? ' bg-primary-600 text-white' : ' bg-gray-300 text-gray-600' %> "><%= trix_sanitize(message.body) %></span></div>
|
80
|
+
<% end %>
|
81
|
+
</div>
|
82
|
+
<%= avatar %>
|
83
|
+
<% unless placeholder_message || show_as_thread %>
|
84
|
+
<div class="order-2 absolute text-gray-400 bottom-1 hover:text-gray-500 <%= current_user_message ? 'right-10' : 'left-10' %> z-0">
|
85
|
+
<button
|
86
|
+
data-action="click->reply#reply"
|
87
|
+
data-thread-url="<%= url_for([:thread, :account, message.thread_origin_message || message]) %>"
|
88
|
+
>
|
89
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-4 w-4 stroke-current" fill="none" viewBox="0 0 24 24">
|
90
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6" />
|
91
|
+
</svg>
|
92
|
+
</button>
|
93
|
+
</div>
|
94
|
+
<% end %>
|
95
|
+
</div>
|
96
|
+
<% if message.replies.any? && !show_as_thread %>
|
97
|
+
<div class="<%= 'text-right' if current_user_message %>">
|
98
|
+
<button class="text-xs text-primary-400 text-right mr-12 ml-12" data-thread-url="<%= url_for([:thread, :account, message.thread_origin_message || message]) %>" data-action="reply#reply"><%= message.replies.size %> <%= t("conversations/messages.navigation.reply").pluralize(message.replies.size) %></button>
|
99
|
+
</div>
|
100
|
+
<% end %>
|
101
|
+
|
102
|
+
</div>
|
103
|
+
</div>
|
104
|
+
<% unless next_message_in_series || placeholder_message %>
|
105
|
+
<div class="flex">
|
106
|
+
<% if show_borders && !last_message_in_thread %>
|
107
|
+
<% if (thread_started_by_current_user && current_user_message) || (!thread_started_by_current_user && !current_user_message) %>
|
108
|
+
<%= message_thread_border(side: border_side, position: :middle) %>
|
109
|
+
<% end %>
|
110
|
+
<% end %>
|
111
|
+
|
112
|
+
<div class="flex flex-grow order-1 <%= current_user_message ? 'justify-end items-end pr-8' : 'justify-start items-start pl-8' %> <%= 'mb-3' unless next_message_in_series %>">
|
113
|
+
<div class="<%= show_as_thread ? 'text-gray-400' : 'text-gray-300' %> text-sm">
|
114
|
+
<strong><%= message.author.name %></strong>
|
115
|
+
<%= timestamp %>
|
116
|
+
</div>
|
117
|
+
</div>
|
118
|
+
</div>
|
119
|
+
<% end %>
|
120
|
+
<% if message.replies.any? && false %>
|
121
|
+
<div class="mb-4">
|
122
|
+
<% message.replies.each do |reply| %>
|
123
|
+
<div class="flex text-xs font-extralight text-gray-300 ml-12">
|
124
|
+
<div class="<%= 'w-full' if current_user_message %>"></div>
|
125
|
+
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 682" class="w-5 h-5 stroke-current mt-4 text-gray-50 fill-current">
|
126
|
+
<path d="M0 57.7c.1 145.1 4.1 224 14.5 281.1 19.4 106.3 65.2 156.4 166.3 181.7 48.7 12.1 111.4 18.8 211.7 22.5 23.8.9 196.6 2.8 268.2 3H683l.2 67.8.3 67.8 170.3-102.1L1024 477.3l-170.2-102-170.3-102-.3 67.8-.2 67.9h-75.8c-184.7 0-266.9-4.8-327.2-19-34.2-8.1-62.8-21.1-81.2-37-36.1-31.3-52.3-76.8-58.8-165.5-2-28-3-69.2-3-127.8V0H0v57.7z"/>
|
127
|
+
</svg>
|
128
|
+
<div class="flex flex-col mr-10 min-w-max">
|
129
|
+
<div class="pt-0 mr-2 ml-4 text-xxs"><%= reply.membership.label_string %> reply: </div>
|
130
|
+
<div class="bg-gray-100 rounded py-2 px-4 mt-0 text-gray-400 max-w-md"><%= reply.body.html_safe %></div>
|
131
|
+
</div>
|
132
|
+
</div>
|
133
|
+
<% end %>
|
134
|
+
</div>
|
135
|
+
<% end %>
|
136
|
+
</div>
|
@@ -0,0 +1,81 @@
|
|
1
|
+
<% yield %>
|
2
|
+
|
3
|
+
<%
|
4
|
+
form ||= current_fields_form
|
5
|
+
# returns a struct with `label`, `placeholder`, and `help` methods.
|
6
|
+
labels = labels_for(form, method)
|
7
|
+
options ||= {}
|
8
|
+
options[:id] ||= id_for(form, method)
|
9
|
+
# options[:disabled] ||= !field_editable?(form.object, method) if user_signed_in?
|
10
|
+
options[:placeholder] ||= labels.placeholder if labels.placeholder
|
11
|
+
other_options ||= {}
|
12
|
+
other_options[:help] = [other_options[:help], labels.help].compact.join(" ")
|
13
|
+
|
14
|
+
errors = [method, method.to_s.gsub(/_id$/, '').to_sym].uniq.map { |attribute| form.object.errors.full_messages_for(attribute) }.flatten
|
15
|
+
has_errors = errors.any? || content_for(:error).present? || other_options[:error].present?
|
16
|
+
|
17
|
+
options[:class] = "#{options[:class]} block w-full rounded-md shadow-sm font-light text-sm"
|
18
|
+
|
19
|
+
options[:class] += if has_errors
|
20
|
+
" pr-10 border-red-500 text-red-900 placeholder-red-500 focus:outline-none focus:ring-red-500 focus:border-red-500 dark:bg-darkPrimary-800 dark:text-darkPrimary-300"
|
21
|
+
else
|
22
|
+
" focus:ring-primary-500 focus:border-primary-500 border-gray-300 dark:bg-darkPrimary-800 dark:border-darkPrimary-900 dark:text-darkPrimary-300"
|
23
|
+
end
|
24
|
+
|
25
|
+
%>
|
26
|
+
|
27
|
+
<div class="<%= 'required' if presence_validated?(form.object, method) %>">
|
28
|
+
|
29
|
+
<% # the label. %>
|
30
|
+
<% unless other_options[:hide_label] == true %>
|
31
|
+
<% if content_for? :label %>
|
32
|
+
<%= yield :label %>
|
33
|
+
<% flush_content_for :label %>
|
34
|
+
<% else %>
|
35
|
+
<% # allow the label to be defined via an inline option or else one of the locale yaml definitions. %>
|
36
|
+
<% label = (other_options[:label].presence || labels.label || legacy_label_for(form, method)) %>
|
37
|
+
<%= form.label method, label&.html_safe, class: 'block', for: options[:id] %>
|
38
|
+
<% end %>
|
39
|
+
<% end %>
|
40
|
+
|
41
|
+
<div class="mt-1.5">
|
42
|
+
|
43
|
+
<% # the actual field. %>
|
44
|
+
<% if content_for? :field %>
|
45
|
+
<%= yield :field %>
|
46
|
+
<% flush_content_for :field %>
|
47
|
+
<% else %>
|
48
|
+
<% # e.g. form.text_field(method, options) %>
|
49
|
+
<%= form.send(helper, method, options) %>
|
50
|
+
<% end %>
|
51
|
+
|
52
|
+
</div>
|
53
|
+
|
54
|
+
<% # any error messages. %>
|
55
|
+
<% if has_errors %>
|
56
|
+
<p class="mt-1.5 text-xs text-red">
|
57
|
+
<%= errors.map { |error| error + ". " }.join %>
|
58
|
+
<%= yield :error %>
|
59
|
+
<% flush_content_for :error %>
|
60
|
+
<% if other_options[:hide_custom_error].blank? %>
|
61
|
+
<%= other_options[:error]&.html_safe %>
|
62
|
+
<% end %>
|
63
|
+
</p>
|
64
|
+
<% end %>
|
65
|
+
|
66
|
+
<% # any help text. %>
|
67
|
+
<% if content_for?(:help) || other_options[:help] || content_for?(:after_help) %>
|
68
|
+
<p class="mt-1.5 text-xs text-gray-500">
|
69
|
+
<%= yield :help %>
|
70
|
+
<% flush_content_for :help %>
|
71
|
+
<%= other_options[:help]&.html_safe %>
|
72
|
+
<%= yield :after_help %>
|
73
|
+
<% flush_content_for :after_help %>
|
74
|
+
</p>
|
75
|
+
<% end %>
|
76
|
+
|
77
|
+
<% if other_options[:icon] %>
|
78
|
+
<div class="pre-icon os-icon <%= other_options[:icon] %>"></div>
|
79
|
+
<% end %>
|
80
|
+
|
81
|
+
</div>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<% attributes ||= [] %>
|
2
|
+
<% attributes.select! { |attribute| form.object.errors[attribute].any? } %>
|
3
|
+
<% if form.object.errors[:base].any? || form.object.errors.present? || attributes.any? %>
|
4
|
+
<%= render 'account/shared/alert', color: 'red' do %>
|
5
|
+
<% if form.object.errors[:base].any? || attributes.any? %>
|
6
|
+
<%= form.object.errors[:base].join(' ') %>
|
7
|
+
<% attributes.each do |attribute| %>
|
8
|
+
<%= resource.class.human_attribute_name(attribute) %> <%= resource.errors[attribute].to_sentence %>.
|
9
|
+
<% end %>
|
10
|
+
<% else %>
|
11
|
+
Please correct the errors below.
|
12
|
+
<% end %>
|
13
|
+
<% end %>
|
14
|
+
<% end %>
|
@@ -0,0 +1,139 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class="theme-<%= BulletTrain::Themes::Hayabusa.color %>">
|
3
|
+
<head>
|
4
|
+
<%= render 'shared/layouts/head' %>
|
5
|
+
</head>
|
6
|
+
<body class="bg-light-gradient text-gray-700 text-sm font-normal dark:bg-dark-gradient dark:text-darkPrimary-300">
|
7
|
+
<div class="p-4 bg-primary-900 electron-draggable electron-title-bar hidden electron-mobile-only"></div>
|
8
|
+
<div class="md:p-5 main-container-padding">
|
9
|
+
<div class="h-screen md:h-auto overflow-hidden flex main-container"
|
10
|
+
data-controller="mobile-menu"
|
11
|
+
data-mobile-menu-hidden-class="hidden"
|
12
|
+
data-mobile-menu-show-event-name-value="mobile-menu:show"
|
13
|
+
data-mobile-menu-hide-event-name-value="mobile-menu:hide"
|
14
|
+
>
|
15
|
+
|
16
|
+
<% menu = capture do %>
|
17
|
+
<!-- Navbar top style -->
|
18
|
+
<div class="flex items-center flex-shrink-0 p-4 md:rounded-tl-lg electron-draggable electron-title-bar dark:bg-black dark:bg-opacity-10">
|
19
|
+
<%= image_tag image_path("logo/logo.png"), class: 'h-5 w-auto mx-auto' %>
|
20
|
+
|
21
|
+
<div class="lg:hidden absolute right-0">
|
22
|
+
<button class="ml-1 flex items-center justify-center h-10 w-10 rounded-full focus:outline-none focus:ring-2 focus:ring-inset focus:ring-white dark:ring-transparent"
|
23
|
+
data-action="reveal#hide"
|
24
|
+
>
|
25
|
+
<span class="sr-only">Close Application Menu</span>
|
26
|
+
<svg class="h-6 w-6 text-pink-400" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
27
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
28
|
+
</svg>
|
29
|
+
</button>
|
30
|
+
</div>
|
31
|
+
</div>
|
32
|
+
|
33
|
+
<nav class="flex-1 space-y-1 overflow-y-auto select-none">
|
34
|
+
<div class="flex-shrink-0 flex shadow px-5 py-4">
|
35
|
+
<div class="flex-shrink-0 w-full group block no-underline">
|
36
|
+
<div class="flex items-center">
|
37
|
+
<div class="inline-block rounded-full border border-pink-400 p-1">
|
38
|
+
<%= image_tag membership_profile_photo_url(current_membership), class: 'h-9 w-9 rounded-full', alt: current_user.name %>
|
39
|
+
</div>
|
40
|
+
<div class="ml-3">
|
41
|
+
<div class="text-primary-500">
|
42
|
+
<%= current_user.name %>
|
43
|
+
</div>
|
44
|
+
<div class="text-2xs tracking-widest uppercase text-pink-400 group-hover:text-primary-400 group-hover:underline dark:text-gray-500">
|
45
|
+
<%= current_team.name %>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
</div>
|
50
|
+
</div>
|
51
|
+
|
52
|
+
<div class="px-5 py-4 menu">
|
53
|
+
<%= render 'account/shared/menu' %>
|
54
|
+
</div>
|
55
|
+
</nav>
|
56
|
+
<% end %>
|
57
|
+
|
58
|
+
<div class="lg:hidden hidden"
|
59
|
+
data-mobile-menu-target="wrapper"
|
60
|
+
|
61
|
+
data-controller="reveal"
|
62
|
+
data-reveal-away-value="true"
|
63
|
+
data-reveal-hide-keys-value="escape"
|
64
|
+
|
65
|
+
data-action="mobile-menu:show->reveal#show mobile-menu:hide->reveal#hide mobile-menu-toggle->reveal#toggle reveal:hidden->mobile-menu#hideWrapper"
|
66
|
+
>
|
67
|
+
<div class="fixed inset-0 flex z-40">
|
68
|
+
<button
|
69
|
+
data-action="reveal#hide"
|
70
|
+
|
71
|
+
hidden
|
72
|
+
data-reveal
|
73
|
+
data-transition
|
74
|
+
data-transition-enter="transition-opacity ease-linear duration-200"
|
75
|
+
data-transition-enter-start="opacity-0"
|
76
|
+
data-transition-enter-end="opacity-100"
|
77
|
+
data-transition-leave="transition-opacity ease-linear duration-200"
|
78
|
+
data-transition-leave-start="opacity-100"
|
79
|
+
data-transition-leave-end="opacity-0"
|
80
|
+
|
81
|
+
class="fixed inset-0" aria-hidden="true"
|
82
|
+
>
|
83
|
+
<div class="absolute inset-0 bg-light-gradient opacity-75"></div>
|
84
|
+
</button>
|
85
|
+
<div
|
86
|
+
hidden
|
87
|
+
data-reveal
|
88
|
+
data-transition
|
89
|
+
data-transition-enter="transition ease-in-out duration-200 transform"
|
90
|
+
data-transition-enter-start="-trandarkPrimary-x-full"
|
91
|
+
data-transition-enter-end="trandarkPrimary-x-0"
|
92
|
+
data-transition-leave="transition ease-in-out duration-200 transform"
|
93
|
+
data-transition-leave-start="trandarkPrimary-x-0"
|
94
|
+
data-transition-leave-end="-trandarkPrimary-x-full"
|
95
|
+
|
96
|
+
class="relative flex-1 flex flex-col max-w-xs w-full pb-4 bg-hayabusa_gray-400 shadow-xl"
|
97
|
+
>
|
98
|
+
<%= menu %>
|
99
|
+
</div>
|
100
|
+
<div class="flex-shrink-0 w-14" aria-hidden="true"></div>
|
101
|
+
</div>
|
102
|
+
</div>
|
103
|
+
|
104
|
+
<div class="hidden lg:flex lg:flex-shrink-0 overflow-y-auto bg-hayabusa_gray-400">
|
105
|
+
<div class="w-64">
|
106
|
+
<%= menu %>
|
107
|
+
</div>
|
108
|
+
</div>
|
109
|
+
|
110
|
+
<div class="flex flex-col w-0 flex-1 overflow-y-auto dark:bg-darkPrimary-800 ">
|
111
|
+
<main class="flex-1 relative z-0 focus:outline-none" tabindex="0">
|
112
|
+
<div class="flex flex-row items-center electron-draggable">
|
113
|
+
<button class="mobile-menu-trigger lg:hidden h-12 w-12 ml-1 flex-none inline-flex items-center justify-center rounded-md text-gray-500 hover:text-gray-900 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-blue-500"
|
114
|
+
data-action="mobile-menu#toggle"
|
115
|
+
>
|
116
|
+
<span class="sr-only">Open Application Menu</span>
|
117
|
+
<svg class="h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
|
118
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
|
119
|
+
</svg>
|
120
|
+
</button>
|
121
|
+
|
122
|
+
<nav class="flex px-1 lg:px-4 py-2 overflow-x-auto select-none" aria-label="Breadcrumb">
|
123
|
+
<ol class="breadcrumb whitespace-nowrap flex items-center space-x-3 py-0.5 pr-3">
|
124
|
+
<%= render('breadcrumbs').strip.html_safe %>
|
125
|
+
</ol>
|
126
|
+
</nav>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
<div class="py-2 px-1">
|
130
|
+
<div class="mx-auto px-4 sm:px-6 py-4">
|
131
|
+
<%= yield %>
|
132
|
+
</div>
|
133
|
+
</div>
|
134
|
+
</main>
|
135
|
+
</div>
|
136
|
+
</div>
|
137
|
+
</div>
|
138
|
+
</body>
|
139
|
+
</html>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class="theme-<%= BulletTrain::Themes::Hayabusa.color %>">
|
3
|
+
<head>
|
4
|
+
<%= render 'shared/layouts/head' %>
|
5
|
+
</head>
|
6
|
+
<body class="bg-light-gradient text-gray-700 text-sm font-normal electron-draggable dark:bg-dark-gradient dark:text-darkPrimary-300">
|
7
|
+
<div data-turn-enter data-turn-exit>
|
8
|
+
<%= yield %>
|
9
|
+
</div>
|
10
|
+
</body>
|
11
|
+
</html>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<%= stylesheet_link_tag 'https://rsms.me/inter/inter.css', media: 'all', 'data-turbo-track': 'reload' %>
|
2
|
+
<link href="<%= image_path('logo/favicon.png') %>" rel="shortcut icon" />
|
3
|
+
<link href="<%= image_path('logo/icon.png') %>" rel="apple-touch-icon" />
|
4
|
+
<%= javascript_include_tag 'application', 'data-turbo-track': 'reload' %>
|
5
|
+
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
|
6
|
+
<%= javascript_include_tag 'application.hayabusa', 'data-turbo-track': 'reload' %>
|
7
|
+
<%= stylesheet_link_tag 'application.hayabusa', media: 'all', 'data-turbo-track': 'reload' %>
|
8
|
+
<%= render 'layouts/head' %>
|