neo_components 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.
- checksums.yaml +7 -0
- data/app/assets/icons/academy.svg +3 -0
- data/app/assets/icons/adjustments-horizontal.svg +3 -0
- data/app/assets/icons/adjustments-vertical.svg +3 -0
- data/app/assets/icons/arrow-down-tray.svg +3 -0
- data/app/assets/icons/arrow-left.svg +3 -0
- data/app/assets/icons/arrow-long-down.svg +3 -0
- data/app/assets/icons/arrow-long-right.svg +3 -0
- data/app/assets/icons/arrow-long-up.svg +3 -0
- data/app/assets/icons/arrow-right.svg +3 -0
- data/app/assets/icons/arrow-up-tray.svg +3 -0
- data/app/assets/icons/arrow-uturn-left.svg +3 -0
- data/app/assets/icons/arrow-uturn-right.svg +3 -0
- data/app/assets/icons/assign-user.svg +13 -0
- data/app/assets/icons/at-symbol.svg +3 -0
- data/app/assets/icons/bars-4.svg +3 -0
- data/app/assets/icons/bell.svg +3 -0
- data/app/assets/icons/book.svg +3 -0
- data/app/assets/icons/bookmark.svg +3 -0
- data/app/assets/icons/building-office-2.svg +3 -0
- data/app/assets/icons/calendar.svg +3 -0
- data/app/assets/icons/celebration.svg +15 -0
- data/app/assets/icons/check-badge-solid.svg +3 -0
- data/app/assets/icons/check-circle-solid.svg +3 -0
- data/app/assets/icons/check-circle.svg +3 -0
- data/app/assets/icons/check-list.svg +12 -0
- data/app/assets/icons/check.svg +3 -0
- data/app/assets/icons/chevron-double-right.svg +3 -0
- data/app/assets/icons/chevron-down.svg +3 -0
- data/app/assets/icons/chevron-left.svg +3 -0
- data/app/assets/icons/chevron-right.svg +3 -0
- data/app/assets/icons/chevron-up.svg +3 -0
- data/app/assets/icons/circle-stack.svg +3 -0
- data/app/assets/icons/clipboard-document-check-solid.svg +4 -0
- data/app/assets/icons/clipboard-document-check.svg +3 -0
- data/app/assets/icons/clock.svg +3 -0
- data/app/assets/icons/complete.svg +3 -0
- data/app/assets/icons/course.svg +3 -0
- data/app/assets/icons/device-phone-mobile.svg +3 -0
- data/app/assets/icons/document-arrow-up.svg +4 -0
- data/app/assets/icons/document-text.svg +4 -0
- data/app/assets/icons/ellipsis-vertical.svg +3 -0
- data/app/assets/icons/exclaimation-circle-solid.svg +3 -0
- data/app/assets/icons/eye.svg +4 -0
- data/app/assets/icons/flag.svg +3 -0
- data/app/assets/icons/funnel.svg +3 -0
- data/app/assets/icons/green-circle.svg +3 -0
- data/app/assets/icons/green-tick.svg +3 -0
- data/app/assets/icons/grid.svg +6 -0
- data/app/assets/icons/home.svg +3 -0
- data/app/assets/icons/i-vector.svg +3 -0
- data/app/assets/icons/lessons.svg +11 -0
- data/app/assets/icons/magnifying-glass.svg +3 -0
- data/app/assets/icons/minus.svg +3 -0
- data/app/assets/icons/numbered-list.svg +3 -0
- data/app/assets/icons/pencil.svg +3 -0
- data/app/assets/icons/play.svg +3 -0
- data/app/assets/icons/plus.svg +3 -0
- data/app/assets/icons/power.svg +3 -0
- data/app/assets/icons/question-mark-circle.svg +3 -0
- data/app/assets/icons/quiz-score.svg +15 -0
- data/app/assets/icons/re-invite.svg +3 -0
- data/app/assets/icons/red-circle.svg +3 -0
- data/app/assets/icons/share.svg +3 -0
- data/app/assets/icons/smiley-five.svg +5 -0
- data/app/assets/icons/smiley-four.svg +5 -0
- data/app/assets/icons/smiley-one.svg +5 -0
- data/app/assets/icons/smiley-three.svg +5 -0
- data/app/assets/icons/smiley-two.svg +5 -0
- data/app/assets/icons/sparkle.svg +3 -0
- data/app/assets/icons/star-transparent.svg +3 -0
- data/app/assets/icons/stop.svg +4 -0
- data/app/assets/icons/support-placeholder.svg +4 -0
- data/app/assets/icons/tag.svg +4 -0
- data/app/assets/icons/timer.svg +5 -0
- data/app/assets/icons/transcript.svg +31 -0
- data/app/assets/icons/trash.svg +3 -0
- data/app/assets/icons/upload-info.svg +7 -0
- data/app/assets/icons/user-circle.svg +3 -0
- data/app/assets/icons/user-group.svg +3 -0
- data/app/assets/icons/user.svg +3 -0
- data/app/assets/icons/users.svg +3 -0
- data/app/assets/icons/winner.svg +35 -0
- data/app/assets/icons/x-circle-solid.svg +3 -0
- data/app/assets/icons/x-circle.svg +3 -0
- data/app/assets/icons/x-mark.svg +3 -0
- data/app/assets/stylesheets/breadcrumbs.tailwind.css +45 -0
- data/app/assets/stylesheets/buttons.tailwind.css +98 -0
- data/app/assets/stylesheets/course_progress.css +75 -0
- data/app/assets/stylesheets/custom.css +67 -0
- data/app/assets/stylesheets/date_picker.tailwind.css +7 -0
- data/app/assets/stylesheets/directives.tailwind.css +3 -0
- data/app/assets/stylesheets/dropdown.tailwind.css +11 -0
- data/app/assets/stylesheets/file_selector.tailwind.css +47 -0
- data/app/assets/stylesheets/icons.css.erb +244 -0
- data/app/assets/stylesheets/inputs.tailwind.css +53 -0
- data/app/assets/stylesheets/menu_component.tailwind.css +39 -0
- data/app/assets/stylesheets/mobile_inputs.tailwind.css +11 -0
- data/app/assets/stylesheets/modalbox.tailwind.css +35 -0
- data/app/assets/stylesheets/profile_icon.tailwind.css +15 -0
- data/app/assets/stylesheets/textarea.tailwind.css +43 -0
- data/app/assets/stylesheets/tooltip.css +88 -0
- data/app/assets/stylesheets/typography.tailwind.css +70 -0
- data/app/helpers/ui_helper.rb +31 -0
- data/app/helpers/view_component/accordion_component.rb +12 -0
- data/app/helpers/view_component/breadcrumbs_component.rb +30 -0
- data/app/helpers/view_component/button_component.rb +180 -0
- data/app/helpers/view_component/chip_component.rb +54 -0
- data/app/helpers/view_component/component_helper.rb +21 -0
- data/app/helpers/view_component/course_card_component.rb +9 -0
- data/app/helpers/view_component/course_carousal_component.rb +14 -0
- data/app/helpers/view_component/course_select_component.rb +32 -0
- data/app/helpers/view_component/doc_section_component.rb +10 -0
- data/app/helpers/view_component/icon_component.rb +24 -0
- data/app/helpers/view_component/input_component/date_picker_component.rb +127 -0
- data/app/helpers/view_component/input_component/dropdown_component.rb +99 -0
- data/app/helpers/view_component/input_component/file_selector_component.rb +123 -0
- data/app/helpers/view_component/input_component/input_checkbox_component.rb +54 -0
- data/app/helpers/view_component/input_component/input_mobile_component.rb +68 -0
- data/app/helpers/view_component/input_component/input_radio_component.rb +54 -0
- data/app/helpers/view_component/input_component/input_text_component.rb +137 -0
- data/app/helpers/view_component/input_component/textarea_component.rb +101 -0
- data/app/helpers/view_component/input_component.rb +290 -0
- data/app/helpers/view_component/input_textarea_component.rb +28 -0
- data/app/helpers/view_component/long_course_card_component.rb +10 -0
- data/app/helpers/view_component/member_list_component.rb +17 -0
- data/app/helpers/view_component/menu_component.rb +31 -0
- data/app/helpers/view_component/menu_component_helper.rb +22 -0
- data/app/helpers/view_component/menu_item.rb +12 -0
- data/app/helpers/view_component/modal_box_component.rb +29 -0
- data/app/helpers/view_component/modal_component.rb +12 -0
- data/app/helpers/view_component/notification_bar_component.rb +22 -0
- data/app/helpers/view_component/paginator_component.rb +9 -0
- data/app/helpers/view_component/profile_icon_component.rb +46 -0
- data/app/helpers/view_component/progress_component.rb +12 -0
- data/app/helpers/view_component/table_component.rb +22 -0
- data/app/helpers/view_component/typography_component.rb +83 -0
- data/app/javascript/neo_components/controllers/collapsible_controller.js +37 -0
- data/app/javascript/neo_components/controllers/date_picker_controller.js +17 -0
- data/app/javascript/neo_components/controllers/file_selector_controller.js +145 -0
- data/app/javascript/neo_components/controllers/input_mobile_controller.js +7 -0
- data/app/javascript/neo_components/controllers/menu_component_controller.js +26 -0
- data/app/javascript/neo_components/controllers/modal_loader_controller.js +13 -0
- data/app/javascript/neo_components/controllers/modals_controller.js +26 -0
- data/app/javascript/neo_components/controllers/notification_bar_controller.js +9 -0
- data/app/javascript/neo_components/controllers/pagination_controller.js +11 -0
- data/app/javascript/neo_components/controllers/tab_change_controller.js +23 -0
- data/app/javascript/neo_components/controllers/tabs_controller.js +29 -0
- data/app/javascript/neo_components/controllers/text_clamp_controller.js +29 -0
- data/app/views/shared/components/_progress_bar_short.html.erb +8 -0
- data/app/views/shared/components/_tooltip.html.erb +7 -0
- data/app/views/view_components/accordion_component/_accordion.html.erb +22 -0
- data/app/views/view_components/breadcrumbs_component/_breadcrumbs.html.erb +38 -0
- data/app/views/view_components/button_component/_button.html.erb +13 -0
- data/app/views/view_components/buttons/_danger.html.erb +30 -0
- data/app/views/view_components/buttons/_primary.html.erb +31 -0
- data/app/views/view_components/buttons/_secondary.html.erb +29 -0
- data/app/views/view_components/chip_component/_chip_component.html.erb +9 -0
- data/app/views/view_components/course_carousal/_course_card_component.html.erb +65 -0
- data/app/views/view_components/course_carousal/_course_carousal_body_component.html.erb +25 -0
- data/app/views/view_components/course_carousal/_course_carousal_component.html.erb +8 -0
- data/app/views/view_components/course_carousal/_long_course_card_component.html.erb +70 -0
- data/app/views/view_components/course_select/_course_select_component.html.erb +19 -0
- data/app/views/view_components/course_select/_list_component.html.erb +14 -0
- data/app/views/view_components/course_select/_list_item_component.html.erb +86 -0
- data/app/views/view_components/course_select/_load_more.html.erb +17 -0
- data/app/views/view_components/course_select/_search_component.html.erb +48 -0
- data/app/views/view_components/course_select/_sidebar_component.html.erb +41 -0
- data/app/views/view_components/doc_section/_doc_section_component.html.erb +6 -0
- data/app/views/view_components/inputs/_checkbox_field.html.erb +19 -0
- data/app/views/view_components/inputs/_date_select_component.html.erb +37 -0
- data/app/views/view_components/inputs/_dropdown_field.html.erb +22 -0
- data/app/views/view_components/inputs/_file_selector.html.erb +16 -0
- data/app/views/view_components/inputs/_input_checkbox_component.html.erb +7 -0
- data/app/views/view_components/inputs/_input_mobile_component.html.erb +16 -0
- data/app/views/view_components/inputs/_input_radio_component.html.erb +7 -0
- data/app/views/view_components/inputs/_input_text_component.html.erb +16 -0
- data/app/views/view_components/inputs/_mobile_field.html.erb +31 -0
- data/app/views/view_components/inputs/_radio_field.html.erb +25 -0
- data/app/views/view_components/inputs/_text_field.html.erb +52 -0
- data/app/views/view_components/inputs/_textarea.html.erb +26 -0
- data/app/views/view_components/inputs/date_picker_component/_date_picker.html.erb +16 -0
- data/app/views/view_components/inputs/date_picker_component/_input_box.html.erb +34 -0
- data/app/views/view_components/inputs/dropdown_component/_dropdown.html.erb +16 -0
- data/app/views/view_components/inputs/dropdown_component/_select_box.html.erb +10 -0
- data/app/views/view_components/inputs/file_selector_component/_file_selector_box.html.erb +76 -0
- data/app/views/view_components/inputs/input_checkbox/_checkbox.html.erb +20 -0
- data/app/views/view_components/inputs/input_mobile/_code.html.erb +13 -0
- data/app/views/view_components/inputs/input_mobile/_mobile_box.html.erb +4 -0
- data/app/views/view_components/inputs/input_mobile/_number.html.erb +13 -0
- data/app/views/view_components/inputs/input_radio/_radio_button.html.erb +14 -0
- data/app/views/view_components/inputs/input_text/_text_box.html.erb +33 -0
- data/app/views/view_components/inputs/textarea_component/_text_area_box.html.erb +16 -0
- data/app/views/view_components/inputs/textarea_component/_textarea.html.erb +16 -0
- data/app/views/view_components/member_list/_member_list.html.erb +4 -0
- data/app/views/view_components/member_list/_member_search.html.erb +15 -0
- data/app/views/view_components/member_list/_members.html.erb +65 -0
- data/app/views/view_components/menu_component/_menu_component.html.erb +16 -0
- data/app/views/view_components/menu_component/_menu_item_button.html.erb +17 -0
- data/app/views/view_components/menu_component/_menu_item_link.html.erb +5 -0
- data/app/views/view_components/menu_component_old/_menu_component.html.erb +17 -0
- data/app/views/view_components/menu_component_old/_menu_item_button.html.erb +7 -0
- data/app/views/view_components/menu_component_old/_menu_item_link.html.erb +5 -0
- data/app/views/view_components/modal_component/_modal_box_component.html.erb +28 -0
- data/app/views/view_components/modals/_modal_component.html.erb +25 -0
- data/app/views/view_components/notification_bar/_notification_bar.html.erb +17 -0
- data/app/views/view_components/paginator/_next_page.html.erb +7 -0
- data/app/views/view_components/paginator/_paginator_component.html.erb +6 -0
- data/app/views/view_components/paginator/_prev_page.html.erb +7 -0
- data/app/views/view_components/profile_icon_component/_profile_icon.html.erb +3 -0
- data/app/views/view_components/progress_component/_progressbar.html.erb +5 -0
- data/app/views/view_components/typography/_h1_component.html.erb +1 -0
- data/app/views/view_components/typography/_h2_component.html.erb +1 -0
- data/app/views/view_components/typography/_h3_component.html.erb +1 -0
- data/app/views/view_components/typography/_heading_component.html.erb +3 -0
- data/app/views/view_components/typography/_link_component.html.erb +1 -0
- data/app/views/view_components/typography/_linked_text_component.html.erb +3 -0
- data/app/views/view_components/typography/_text_component.html.erb +1 -0
- data/config/importmap.rb +5 -0
- data/lib/neo_components/engine.rb +38 -0
- data/lib/neo_components/version.rb +5 -0
- data/lib/neo_components.rb +4 -0
- metadata +327 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<% if input.icon_name.present? %>
|
|
2
|
+
<% icon_tag = content_tag(:div, class: input.icon_style) do %>
|
|
3
|
+
<%= icon(input.icon_name, css: input.icon_size) %>
|
|
4
|
+
<% end %>
|
|
5
|
+
<% end %>
|
|
6
|
+
|
|
7
|
+
<%= content_tag :div, class: input.input_wrapper_style do %>
|
|
8
|
+
<% if input.form.present? %>
|
|
9
|
+
<% input_tag = case input.type %>
|
|
10
|
+
<% when "password" %>
|
|
11
|
+
<% input.form.password_field input.name, input.html_options %>
|
|
12
|
+
<% when "email" %>
|
|
13
|
+
<% input.form.email_field input.name, input.html_options %>
|
|
14
|
+
<% when "number" %>
|
|
15
|
+
<% input.form.number_field input.name, input.html_options %>
|
|
16
|
+
<% else %>
|
|
17
|
+
<% input.form.text_field input.name, input.html_options %>
|
|
18
|
+
<% end %>
|
|
19
|
+
<% else %>
|
|
20
|
+
<% input_tag = case input.type %>
|
|
21
|
+
<% when "password" %>
|
|
22
|
+
<% password_field_tag input.name, input.value, input.html_options %>
|
|
23
|
+
<% when "email" %>
|
|
24
|
+
<% email_field_tag input.name, input.value, input.html_options %>
|
|
25
|
+
<% when "number" %>
|
|
26
|
+
<% number_field_tag input.name, input.value, input.html_options %>
|
|
27
|
+
<% else %>
|
|
28
|
+
<% text_field_tag input.name, input.value, input.html_options %>
|
|
29
|
+
<% end %>
|
|
30
|
+
<% end %>
|
|
31
|
+
|
|
32
|
+
<%= arrange_tags(icon_tag, input_tag, input.icon_position) %>
|
|
33
|
+
<% end %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<div class="textarea-component-wrapper">
|
|
2
|
+
<% if textarea.form.present? %>
|
|
3
|
+
<%= textarea.form.text_area textarea.name,
|
|
4
|
+
**textarea.html_options,
|
|
5
|
+
placeholder: textarea.placeholder,
|
|
6
|
+
rows: textarea.rows,
|
|
7
|
+
class: textarea.textarea_style %>
|
|
8
|
+
<% else %>
|
|
9
|
+
<%= text_area_tag textarea.name,
|
|
10
|
+
textarea.value,
|
|
11
|
+
**textarea.html_options,
|
|
12
|
+
placeholder: textarea.placeholder,
|
|
13
|
+
rows: textarea.rows,
|
|
14
|
+
class: textarea.textarea_style %>
|
|
15
|
+
<% end %>
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<div class="w-full flex flex-col gap-1">
|
|
2
|
+
<% if textarea.label.present? %>
|
|
3
|
+
<label class="group">
|
|
4
|
+
<span class="<%= textarea.label_style %>"><%= textarea.label %></span>
|
|
5
|
+
<%= render 'view_components/inputs/textarea_component/text_area_box', { textarea: } %>
|
|
6
|
+
</label>
|
|
7
|
+
<% else %>
|
|
8
|
+
<%= render 'view_components/inputs/textarea_component/text_area_box', { textarea: } %>
|
|
9
|
+
<% end %>
|
|
10
|
+
|
|
11
|
+
<% if textarea.support_text.present? %>
|
|
12
|
+
<span class="<%= textarea.support_text_style %>">
|
|
13
|
+
<%= textarea.support_text %>
|
|
14
|
+
</span>
|
|
15
|
+
<% end %>
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<div>
|
|
2
|
+
<%= form_with url: user_searches_path, method: :post do |form| %>
|
|
3
|
+
<%= form.hidden_field :team_id, value: team.id %>
|
|
4
|
+
<%= form.hidden_field :all_members, value: all_members %>
|
|
5
|
+
<div class="flex flex-col md:flex-row gap-5 md:gap-3 w-full">
|
|
6
|
+
<div class="flex gap-2 md:gap-3 w-full">
|
|
7
|
+
<%= input_text_component form:, name: :term, placeholder: 'Search members'%>
|
|
8
|
+
<%= button_tag do %>
|
|
9
|
+
<%= button_component text: 'Search', type: 'outline' %>
|
|
10
|
+
<% end %>
|
|
11
|
+
</div>
|
|
12
|
+
<%= render "commons/invite_user", team: team %>
|
|
13
|
+
</div>
|
|
14
|
+
<% end %>
|
|
15
|
+
</div>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
<div id="team-member-list" class="h-full flex flex-col md:border border-line-colour rounded-xl">
|
|
2
|
+
<div id="teams-list" class="flex-shrink-0 md:py-4 md:px-6 md:border-b border-line-colour-light">
|
|
3
|
+
<div class="hidden md:grid grid-cols-12 gap-3 text-left main-text-md-semibold w-full">
|
|
4
|
+
<div class="col-span-6 flex justify-start">Name</div>
|
|
5
|
+
<div class="col-span-2 flex justify-start">Phone Number</div>
|
|
6
|
+
<div class="col-span-2 flex justify-start">Role</div>
|
|
7
|
+
<div class="col-span-2 flex justify-center">Actions</div>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<% if members.empty? %>
|
|
12
|
+
<div class="text-center text-sm mt-6">
|
|
13
|
+
No users available.
|
|
14
|
+
</div>
|
|
15
|
+
<% else %>
|
|
16
|
+
<div class="flex-1 overflow-y-auto md:divide-y md:divide-line-colour rounded-lg border border-line-colour md:border-0">
|
|
17
|
+
<% members.each do |member| %>
|
|
18
|
+
<div class="grid grid-cols-1 md:grid-cols-12 gap-3 items-center md:py-4 md:px-5 border-b border-line-colour md:border-0">
|
|
19
|
+
<div class="col-span-6 flex flex-wrap items-center justify-between gap-2 border-b md:px-0 md:py-0 px-4 py-3 border-line-colour md:border-none bg-primary-light-50 md:bg-white ">
|
|
20
|
+
<% link = policy(member).show? ? member_path(member) : "javascript:void(0);" %>
|
|
21
|
+
|
|
22
|
+
<%= link_to link, class: "cursor-pointer" do %>
|
|
23
|
+
<div class="flex items-center justify-center gap-2">
|
|
24
|
+
<%= profile_icon_component(letter: member.name.first, size: 'sm' ) %>
|
|
25
|
+
<span class="ml-2 text-ellipsis main-text-lg-normal"><%= member.name %></span>
|
|
26
|
+
</div>
|
|
27
|
+
<% end %>
|
|
28
|
+
<% if member.active? %>
|
|
29
|
+
<div class="mt-1 flex flex-1 justify-end pe-6 md:mt-0">
|
|
30
|
+
<%= chip_component(text: 'Active', colorscheme: 'primary', icon_name: 'check') %>
|
|
31
|
+
</div>
|
|
32
|
+
<% end %>
|
|
33
|
+
</div>
|
|
34
|
+
<% if member.phone.present? %>
|
|
35
|
+
<div class="col-span-6 md:col-span-2 pl-4 main-text-lg-normal md:pl-0"><%= member.country_code %><%= member.phone %></div>
|
|
36
|
+
<% else %>
|
|
37
|
+
<div class="col-span-6 md:col-span-2 pl-4 main-text-lg-normal md:pl-0">-</div>
|
|
38
|
+
<% end %>
|
|
39
|
+
<div class="col-span-6 md:col-span-2 px-4 main-text-lg-normal md:px-0">
|
|
40
|
+
<%= role_text(member.role) %>
|
|
41
|
+
</div>
|
|
42
|
+
<div class="col-span-6 md:col-span-2 flex flex-col gap-2 main-text-lg-normal items-center md:items-end main-text-lg-normal pb-3 md:pb-0 ">
|
|
43
|
+
<% if member.active_learner? && policy(:course_assigns).new? %>
|
|
44
|
+
<%= link_to new_course_assign_path(user_id: member, source_path: team_path(team)) do %>
|
|
45
|
+
<%= render 'shared/components/label_medium_notice', label: 'Assign course', icon_name: 'icon-assign-user' %>
|
|
46
|
+
<% end %>
|
|
47
|
+
<% end %>
|
|
48
|
+
|
|
49
|
+
<% if InvitePolicy.new(current_user, member).resend? %>
|
|
50
|
+
<%= link_to resend_invite_path(member, team_id: team.id), data: { turbo_method: "put" }, class:"w-full px-4 md:px-0" do %>
|
|
51
|
+
<%= button_component text: 'Re-Invite', type: 'outline', icon_name: 're-invite' %>
|
|
52
|
+
<% end %>
|
|
53
|
+
<% end %>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
<% end %>
|
|
58
|
+
<% if members.prev_page || members.next_page %>
|
|
59
|
+
<div class="py-4 flex justify-center">
|
|
60
|
+
<%= paginator_component(collection: members, path: user_searches_path(team_id: team.id, all_members:, term:)) %>
|
|
61
|
+
</div>
|
|
62
|
+
<% end %>
|
|
63
|
+
</div>
|
|
64
|
+
<% end %>
|
|
65
|
+
</div>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<div class="menu-component-container" data-controller="menu-component">
|
|
2
|
+
<button type="button" class="menu-component-button"
|
|
3
|
+
data-action="click->menu-component#toggleDropdown" data-menu-component-target="menuButton">
|
|
4
|
+
<%= icon("ellipsis-vertical", css: "menu-component-button-icon") %>
|
|
5
|
+
</button>
|
|
6
|
+
|
|
7
|
+
<div class="absolute menu-component-list-box hidden <%= position_class %>"
|
|
8
|
+
data-menu-component-target="moreMenu"
|
|
9
|
+
<%= tag.attributes(html_options) %>>
|
|
10
|
+
<div class="menu-component-list">
|
|
11
|
+
<% menu_items.each do |item| %>
|
|
12
|
+
<%= render "view_components/menu_component/menu_item_#{item.type}", item: item %>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<% button_content = capture do %>
|
|
2
|
+
<%= button_to item.url,
|
|
3
|
+
item.options.reverse_merge(
|
|
4
|
+
method: :post,
|
|
5
|
+
class: "main-text-md-normal menu-component-list-items #{item.extra_classes}"
|
|
6
|
+
) do %>
|
|
7
|
+
<span class="main-text-md-normal"><%= item.label %></span>
|
|
8
|
+
<% end %>
|
|
9
|
+
<% end %>
|
|
10
|
+
<%= item.options[:tooltip_text].present? ?
|
|
11
|
+
render(
|
|
12
|
+
'shared/components/tooltip',
|
|
13
|
+
tooltip_position: item.options[:tooltip_position] || 'right',
|
|
14
|
+
tooltip_text: item.options[:tooltip_text]
|
|
15
|
+
) { button_content } :
|
|
16
|
+
button_content
|
|
17
|
+
%>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div class="relative mt-1" data-controller="more-action">
|
|
2
|
+
<button type="button" class="flex items-center cursor-pointer rounded-full bg-line-colour hover:bg-primary-light-100"
|
|
3
|
+
data-action="click->more-action#toggleDropdown">
|
|
4
|
+
<%= icon("ellipsis-vertical", css: "#{icon_class.presence || 'h-4 w-4'} rounded-full") %>
|
|
5
|
+
</button>
|
|
6
|
+
|
|
7
|
+
<div class="absolute right-0 bg-white rounded box-shadow-medium hidden mt-3 z-50 text-slate-grey-50 whitespace-nowrap"
|
|
8
|
+
data-more-action-target="moreMenu"
|
|
9
|
+
<%= tag.attributes(html_options) %>>
|
|
10
|
+
<div class="pt-2 pb-2 flex flex-col">
|
|
11
|
+
<% menu_items.each do |item| %>
|
|
12
|
+
<%= render "view_components/menu_component_old/menu_item_#{item.type}", item: item %>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<%= turbo_frame_tag 'modal' do %>
|
|
2
|
+
<div data-controller="modal-loader" class="relative">
|
|
3
|
+
<div class="modal-wrapper" data-controller="modals" data-modals-target="modalBox">
|
|
4
|
+
<div class="<%= container_class %>">
|
|
5
|
+
<div data-modal-loader-target="loader"
|
|
6
|
+
class="hidden absolute flex modal-loader-container">
|
|
7
|
+
<div class="modal-loader"></div>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="modal-content" <%= tag.attributes(html_options) %>>
|
|
10
|
+
<% if modal.title.present? %>
|
|
11
|
+
<div class="modal-header">
|
|
12
|
+
<span class="main-text-lg-semibold"><%= modal.title %></span>
|
|
13
|
+
<button data-action="click->modals#closeModal">
|
|
14
|
+
<%= icon("x-circle", css: "h-6 w-6") %>
|
|
15
|
+
</button>
|
|
16
|
+
</div>
|
|
17
|
+
<% end %>
|
|
18
|
+
<div class="modal-body">
|
|
19
|
+
<%= body %>
|
|
20
|
+
</div>
|
|
21
|
+
<%= content_tag :div, class: "modal-footer" do %>
|
|
22
|
+
<%= modal_footer %>
|
|
23
|
+
<% end if modal_footer %>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
<% end %>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<%= turbo_frame_tag 'modal' do %>
|
|
2
|
+
<div data-controller="modal-loader" class="relative">
|
|
3
|
+
<div class="fixed inset-0 bg-black bg-opacity-80 flex items-center justify-center z-[9999]" data-controller="modals" data-modals-target="modalBox">
|
|
4
|
+
<div class="relative w-[326px] md:w-[462px]">
|
|
5
|
+
|
|
6
|
+
<div data-modal-loader-target="loader"
|
|
7
|
+
class="hidden absolute inset-0 z-[10000] flex items-center justify-center bg-white bg-opacity-60 rounded-lg">
|
|
8
|
+
<div class="loader animate-spin border-4 border-primary border-t-transparent rounded-full w-10 h-10"></div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<div class="bg-white rounded-lg w-full z-[9999]">
|
|
12
|
+
<div class="flex items-center justify-between border-b border-line-colour-light p-6">
|
|
13
|
+
<span class="heading heading-semibold"><%= title %></span>
|
|
14
|
+
<button data-action="click->modals#closeModal">
|
|
15
|
+
<span class="icon icon-close icon-base bg-letter-color"></span>
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
<div class="modal-body">
|
|
19
|
+
<%= body %>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<% end %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<div class="h-8 shadow-md border border-line-colour-light flex items-center justify-between px-4 <%= bg_color %>"
|
|
2
|
+
data-controller="notification-bar"
|
|
3
|
+
data-notification-bar-target="banner">
|
|
4
|
+
|
|
5
|
+
<% if text.present? %>
|
|
6
|
+
<div class="flex-1 flex justify-center">
|
|
7
|
+
<span class="text-sm <%= text_color %>">
|
|
8
|
+
<strong><%= text.html_safe %></strong>
|
|
9
|
+
</span>
|
|
10
|
+
</div>
|
|
11
|
+
<% end %>
|
|
12
|
+
|
|
13
|
+
<div class="flex items-center justify-end">
|
|
14
|
+
<span class="icon icon-close icon-small cursor-pointer <%= icon_color %>"
|
|
15
|
+
data-action="click->notification-bar#close"></span>
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<% if collection.next_page %>
|
|
2
|
+
<%= link_to query_url(path, {page: collection.next_page}), data: { turbo_stream: true }, class: 'inline-block' do %>
|
|
3
|
+
<%= button_component(text: 'Next', type: 'outline', icon_name: 'chevron-right', icon_position: 'right') %>
|
|
4
|
+
<% end %>
|
|
5
|
+
<% else %>
|
|
6
|
+
<%= button_component(text: 'Next', type: 'outline', icon_name: 'chevron-right', icon_position: 'right', disabled: true) %>
|
|
7
|
+
<% end %>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<% if collection.prev_page || collection.next_page %>
|
|
2
|
+
<div class="flex gap-3 w-fit">
|
|
3
|
+
<%= render "view_components/paginator/prev_page", collection: collection, path: path %>
|
|
4
|
+
<%= render "view_components/paginator/next_page", collection: collection, path: path %>
|
|
5
|
+
</div>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<% if collection.prev_page %>
|
|
2
|
+
<%= link_to query_url(path, {page: collection.prev_page}), data: { turbo_stream: true }, class: 'inline-block' do %>
|
|
3
|
+
<%= button_component(text: 'Prev', type: 'outline', icon_name: 'chevron-left') %>
|
|
4
|
+
<% end %>
|
|
5
|
+
<% else %>
|
|
6
|
+
<%= button_component(text: 'Prev', type: 'outline', icon_name: 'chevron-left', disabled: true) %>
|
|
7
|
+
<% end %>
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<div class="flex w-[52px] md:w-[120px] h-[6px] md:h-2 border-none">
|
|
2
|
+
<div class="h-1 grow bg-primary-light-100 w-full h-full border border-primary-light-100 rounded md:rounded-lg">
|
|
3
|
+
<div class="h-1 bg-primary h-full border rounded-sm md:rounded" style="width: <%= fill %>%"></div>
|
|
4
|
+
</div>
|
|
5
|
+
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= content_tag :h1, text, html_options %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= content_tag :h2, text, html_options %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= content_tag :h3, text, html_options %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= link_to text, url, html_options %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<%= content_tag tag, text, html_options %>
|
data/config/importmap.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module NeoComponents
|
|
4
|
+
class Engine < ::Rails::Engine
|
|
5
|
+
def self.gem_root
|
|
6
|
+
Pathname.new(File.expand_path("../..", __dir__))
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
# Register Sprockets asset paths (icons + stylesheets)
|
|
10
|
+
initializer "neo_components.assets" do |app|
|
|
11
|
+
app.config.assets.paths << Engine.gem_root.join("app/assets/stylesheets")
|
|
12
|
+
app.config.assets.paths << Engine.gem_root.join("app/assets/icons")
|
|
13
|
+
app.config.assets.precompile += %w[icons.css]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Register gem view path so partials under app/views/ are found
|
|
17
|
+
initializer "neo_components.view_paths" do
|
|
18
|
+
ActiveSupport.on_load(:action_controller) do
|
|
19
|
+
append_view_path NeoComponents::Engine.gem_root.join("app/views")
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Auto-include UiHelper into all ActionView contexts
|
|
24
|
+
initializer "neo_components.include_helpers" do
|
|
25
|
+
ActiveSupport.on_load(:action_view) do
|
|
26
|
+
include UiHelper
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Register gem's Stimulus controllers with importmap-rails
|
|
31
|
+
initializer "neo_components.importmap", before: "importmap" do |app|
|
|
32
|
+
if app.config.respond_to?(:importmap)
|
|
33
|
+
app.config.importmap.paths << Engine.gem_root.join("config/importmap.rb")
|
|
34
|
+
app.config.importmap.cache_sweepers << Engine.gem_root.join("app/javascript")
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|