# frozen_string_literal: truemodulePlaybookmodulePbDocHelperdefpb_kit_title(title)title.remove("pb_").titleize.tr("_"," ")enddefpb_kit(kit: "",type: "rails",show_code: true,limit_examples: false,dark_mode: false)examples=pb_doc_kit_examples(kit,type)examples=examples.first(1)iflimit_examplesexamples.mapdo|example|pb_rails"docs/kit_example",props: {kit: kit,example_title: example.values.first,example_key: example.keys.first,show_code: show_code,type: type,dark: dark_mode,}end.join.yield_self(&method(:raw))enddefnav_hash_array(link)link.first.lastend# Deal with lists of kits, used in Playbook doc and Externallydefpb_kits(type: "rails",limit_examples: false,dark_mode: false)kits=get_kits(type)# Iterate through the filtered kits and render themkits.mapdo|kit|render_pb_doc_kit(kit["name"],type,limit_examples,true,dark_mode)end.join.html_safeenddefget_kits(type="rails")kits=YAML.load_file(Playbook::Engine.root.join("dist/menu.yml"))||[]# Filter kits that have at least one component compatible with the typekits["kits"].selectdo|kit|kit["components"].any?{|component|component["platforms"].include?(type)}endenddefaggregate_kitsall_kits=[]YAML.load_file(Playbook::Engine.root.join("dist/menu.yml"))["kits"].eachdo|kit|kit_name=kit["name"]components=kit["components"].map{|c|c["name"]}all_kits<<ifcomponents.size==1components.firstelse{kit_name=>components}endendall_kitsend# rubocop:disable Style/OptionalBooleanParameterdefrender_pb_doc_kit(kit_name,type,limit_examples,code=true,dark_mode=false)parent_kit=YAML.load_file(Playbook::Engine.root.join("dist/menu.yml"))["kits"].find{|kit|kit["name"]==kit_name}# Initialize component_content as an empty stringcomponent_content=""# Check if parent_kit is not nilifparent_kit# Filter components based on the specified typecomponents=parent_kit["components"].select{|component|component["platforms"].include?(type)}# If it's a parent with components, accumulate the UI content for child componentsifcomponents.any?component_content=components.mapdo|component|component_name=component["name"]title=pb_doc_render_clickable_title(component_name,type)# Use component_name for the title# Render the component UI content with the same styles/tags as the parentcomponent_ui=raw("<div class='pb--docItem-ui'>
#{pb_kit(kit: component_name,type: type,show_code: code,limit_examples: limit_examples,dark_mode: dark_mode)}
</div>")# Combine the component name and component UI content"#{title}#{component_ui}"end.join.to_sendend# Combine the component content and UI content for the parent kitcomponent_content.to_s.to_send# rubocop:enable Style/OptionalBooleanParameterprivatedefpb_doc_kit_path(kit,*args)Playbook.kit_path(kit,"docs",*args)enddefpb_doc_kit_examples(kit,type)example_file=pb_doc_kit_path(kit,"example.yml")ifFile.exist?(example_file)examples_list=YAML.load_file(example_file).inject({}){|item,(k,v)|item[k.to_sym]=v;item}examples_list.dig(:examples,type)||[]else[]endenddefpb_doc_render_clickable_title(kit,type)url="#"beginurl=casetypewhen"react"kit_show_reacts_path(kit)when"swift"kit_show_swift_path(kit)elsekit_show_path(kit)end# FIXME: this is here because this helper generates a link for playbook website,# but shouldn't do anything when used elsewhererescueputs"Kit Path Not Avaliable"endrenderinline: "<a href='#{url}'>#{pb_rails(:title,props: {text: pb_kit_title(kit),tag: 'h3',size: 2})}</a>"endendend