admiral-tools-figma 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1 -0
  3. data/admiral-tools-figma.gemspec +9 -0
  4. data/admiraltools/actions/figma_download_images.rb +116 -0
  5. data/admiraltools/actions/figma_generate_styles.rb +77 -0
  6. data/admiraltools/actions/figma_get_image_links.rb +139 -0
  7. data/admiraltools/actions/figma_get_styles.rb +90 -0
  8. data/admiraltools/helper/admiraltools_helper.rb +18 -0
  9. data/admiraltools/helper/figma/figma_client/figma_client.rb +193 -0
  10. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_color.rb +35 -0
  11. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_component.rb +58 -0
  12. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_components_styles_meta.rb +30 -0
  13. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_frame_info.rb +46 -0
  14. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_node.rb +43 -0
  15. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_paint.rb +32 -0
  16. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_style.rb +48 -0
  17. data/admiraltools/helper/figma/figma_client/models/api/primitives/figma_type_style.rb +56 -0
  18. data/admiraltools/helper/figma/figma_client/models/api/results/figma_components_styles_result.rb +36 -0
  19. data/admiraltools/helper/figma/figma_client/models/api/results/figma_images_result.rb +25 -0
  20. data/admiraltools/helper/figma/figma_client/models/api/results/figma_nodes_result.rb +52 -0
  21. data/admiraltools/helper/figma/figma_client/models/domain/converters/figma_to_domain_converter.rb +98 -0
  22. data/admiraltools/helper/figma/figma_client/models/domain/primitives/color.rb +44 -0
  23. data/admiraltools/helper/figma/figma_client/models/domain/primitives/component.rb +86 -0
  24. data/admiraltools/helper/figma/figma_client/models/domain/primitives/components_list.rb +29 -0
  25. data/admiraltools/helper/figma/figma_client/models/domain/primitives/font.rb +56 -0
  26. data/admiraltools/helper/figma/figma_client/models/domain/primitives/frame_info.rb +46 -0
  27. data/admiraltools/helper/figma/figma_client/models/domain/primitives/image_link.rb +33 -0
  28. data/admiraltools/helper/figma/figma_client/models/domain/primitives/style.rb +113 -0
  29. data/admiraltools/helper/figma/figma_client/models/domain/primitives/styles_group.rb +22 -0
  30. data/admiraltools/helper/figma/figma_client/models/domain/primitives/styles_list.rb +29 -0
  31. data/admiraltools/helper/figma/figma_client/models/models.rb +25 -0
  32. data/admiraltools/helper/figma/figma_image_downloader/bin/svg2vectordrawable.jar +0 -0
  33. data/admiraltools/helper/figma/figma_image_downloader/figma_image_downloader.rb +65 -0
  34. data/admiraltools/helper/figma/figma_image_downloader/generators/folder_generator.rb +47 -0
  35. data/admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_raw.rb +32 -0
  36. data/admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_res.rb +38 -0
  37. data/admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_xcassets.rb +180 -0
  38. data/admiraltools/helper/figma/figma_image_downloader/generators/generators.rb +6 -0
  39. data/admiraltools/helper/figma/figma_image_downloader/helpers/image_name_formatter.rb +72 -0
  40. data/admiraltools/helper/figma/figma_image_downloader/helpers/progress_tasks_logger.rb +22 -0
  41. data/admiraltools/helper/figma/figma_image_downloader/helpers/scale_formatter.rb +96 -0
  42. data/admiraltools/helper/figma/figma_image_downloader/helpers/svg_to_vector_converter.rb +12 -0
  43. data/admiraltools/helper/figma/figma_image_downloader/models/download_image_params.rb +31 -0
  44. data/admiraltools/helper/figma/figma_image_downloader/models/image_name_components.rb +10 -0
  45. data/admiraltools/helper/figma/figma_image_downloader/models/image_ref.rb +12 -0
  46. data/admiraltools/helper/figma/figma_image_downloader/models/image_set_ref.rb +14 -0
  47. data/admiraltools/helper/figma/figma_image_downloader/models/models.rb +5 -0
  48. data/admiraltools/helper/figma/figma_template_generator/figma_template_generator.rb +22 -0
  49. data/admiraltools/helper/figma/figma_template_generator/models/styles_template.rb +34 -0
  50. data/admiraltools/helper/figma/helpers/file_folder.rb +30 -0
  51. data/admiraltools/helper/figma/helpers/hash_access.rb +18 -0
  52. data/admiraltools/helper/figma/helpers/string_filters.rb +63 -0
  53. data/admiraltools/helper/figma/helpers/string_format.rb +60 -0
  54. data/admiraltools/helper/system/system.rb +17 -0
  55. data/admiraltools/version.rb +7 -0
  56. data/admiraltools.rb +18 -0
  57. metadata +96 -0
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'folder_generator'
4
+ require_relative 'folder_generator_raw'
5
+ require_relative 'folder_generator_res'
6
+ require_relative 'folder_generator_xcassets'
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../models/image_name_components'
4
+ require_relative '../../helpers/string_format'
5
+
6
+ class ImageNameFormatter
7
+ def separate(name:, naming_style:, folder_depth:, page_name: nil, frame_name: nil)
8
+ name = File.join([page_name, frame_name, name].compact)
9
+ full_name = format_path(name)
10
+ path_components = slice_name(name: full_name, folder_depth: folder_depth)
11
+ name = format_name(name: path_components.name, naming_style: naming_style)
12
+ folder = format_folder(folder: path_components.folder, naming_style: naming_style)
13
+ ImageNameComponents.new(name: name, folder: folder)
14
+ end
15
+
16
+ def image_path(group_name:, image_link:, single_scale:, convert_to_dpi: false)
17
+ if single_scale
18
+ "#{group_name}.#{image_link.image_format}"
19
+ else
20
+ scale = ScaleFormatter.new.formatted_scale(scale: image_link.scale, convert_to_dpi: convert_to_dpi)
21
+ "#{group_name}@#{scale}.#{image_link.image_format}"
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def format_name(name:, naming_style:)
28
+ format_string(string: name, naming_style: naming_style).lowercase_first_letter
29
+ end
30
+
31
+ def format_folder(folder:, naming_style:)
32
+ folder.split('/').map { |f| format_string(string: f, naming_style: naming_style) }.join('/')
33
+ end
34
+
35
+ def format_string(string:, naming_style:)
36
+ string ||= ''
37
+ case naming_style
38
+ when String::FORMAT_STYLE_CAMELCASE
39
+ string.camelcase('-', '_', ' ', '/')
40
+ when String::FORMAT_STYLE_SNAKECASE
41
+ string.snakecase
42
+ when String::FORMAT_STYLE_KEBABCASE
43
+ string.kebabcase
44
+ else
45
+ string
46
+ end
47
+ end
48
+
49
+ def slice_name(name:, folder_depth:)
50
+ path_components = (name || '').split('/') || []
51
+ max_index = max(path_components.length - 1, 0)
52
+ folder_depth = folder_depth.negative? ? max_index : folder_depth
53
+ max_depth = max(folder_depth, 0)
54
+
55
+ folder = path_components[0, max_depth].join('/') || ''
56
+ name = path_components[max_depth..max_index].join('/') || ''
57
+
58
+ ImageNameComponents.new(name: name, folder: folder)
59
+ end
60
+
61
+ def format_path(path)
62
+ path.split('/').map(&:strip).join('/')
63
+ end
64
+
65
+ def min(a, b)
66
+ [a, b].min
67
+ end
68
+
69
+ def max(a, b)
70
+ [a, b].max
71
+ end
72
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ProgressTasksLogger
4
+ attr_accessor :total_count, :current_count
5
+
6
+ def initialize(total_count:)
7
+ @total_count = total_count
8
+ @current_count = 0
9
+ end
10
+
11
+ def reset
12
+ self.current_count = 0
13
+ end
14
+
15
+ def increment(value: 1)
16
+ self.current_count += value
17
+ end
18
+
19
+ def progress_string
20
+ "(#{current_count}/#{total_count})"
21
+ end
22
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ScaleFormatter
4
+ def scales_from_dpis(dpis)
5
+ return [] if dpis.nil?
6
+
7
+ dpis.map { |d| scale_from_dpi(d) }.compact
8
+ end
9
+
10
+ def dpis_from_scales(scales)
11
+ return [] if scales.nil?
12
+
13
+ scales.map { |s| dpi_from_scale(s) }.compact
14
+ end
15
+
16
+ def any_scales_to_scales(scales)
17
+ return [] if scales.nil?
18
+
19
+ result_scales = []
20
+ scales.each do |scale|
21
+ case scale
22
+ when String
23
+ converted_scale = scale_from_dpi(scale)
24
+ if !converted_scale.nil?
25
+ result_scales.push(converted_scale)
26
+ else
27
+ float_scale = scale.to_f
28
+ result_scales.push(float_scale) unless float_scale.nil?
29
+ end
30
+ when Numeric
31
+ result_scales.push(scale)
32
+ else
33
+ next
34
+ end
35
+ end
36
+ result_scales.uniq
37
+ end
38
+
39
+ def scale_from_dpi(dpi)
40
+ dpi = dpi.downcase
41
+ case dpi
42
+ when 'ldpi'
43
+ 0.75
44
+ when 'mdpi'
45
+ 1.0
46
+ when 'hdpi'
47
+ 1.5
48
+ when 'xhdpi'
49
+ 2.0
50
+ when 'xxhdpi'
51
+ 3.0
52
+ when 'xxxhdpi'
53
+ 4.0
54
+ else
55
+ nil
56
+ end
57
+ end
58
+
59
+ def dpi_from_scale(scale)
60
+ scale = scale.round(2)
61
+ case scale
62
+ when 0.75
63
+ 'ldpi'
64
+ when 1.0
65
+ 'mdpi'
66
+ when 1.5
67
+ 'hdpi'
68
+ when 2.0
69
+ 'xhdpi'
70
+ when 3.0
71
+ 'xxhdpi'
72
+ when 4.0
73
+ 'xxxhdpi'
74
+ else
75
+ nil
76
+ end
77
+ end
78
+
79
+ def formatted_scale(scale:, convert_to_dpi: false)
80
+ return nil if scale.nil?
81
+
82
+ dpi_scale = dpi_from_scale(scale)
83
+
84
+ if convert_to_dpi && !dpi_scale.nil?
85
+ dpi_scale
86
+ else
87
+ "#{scale.to_s_formatted.gsub(/[.,]/, '_')}x"
88
+ end
89
+ end
90
+ end
91
+
92
+ class Numeric
93
+ def to_s_formatted
94
+ to_s.chomp('.0')
95
+ end
96
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ class SvtToVectorConverter
4
+ def convert(input_file:, output_file: nil)
5
+ return unless ['.svg'].include?(File.extname(input_file))
6
+
7
+ name = File.join(File.dirname(input_file), File.basename(input_file, File.extname(input_file)))
8
+ output_file = output_file.nil? ? "#{name}.xml" : output_file
9
+ jar_file = File.join(File.dirname(__FILE__), '../bin/svg2vectordrawable.jar')
10
+ system("java -jar #{jar_file} #{input_file} #{output_file} true")
11
+ end
12
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ class DownloadImageParams
4
+ attr_accessor :image_components, :output_folder, :folder_depth, :output_format, :naming_style,
5
+ :xcassets_params, :convert_svg_to_vector, :convert_scales_to_dpi,
6
+ :include_page_name, :include_frame_name
7
+
8
+ def initialize(
9
+ image_components:,
10
+ output_folder:,
11
+ folder_depth:,
12
+ output_format:,
13
+ naming_style:,
14
+ xcassets_params:,
15
+ convert_svg_to_vector:,
16
+ convert_scales_to_dpi:,
17
+ include_page_name:,
18
+ include_frame_name:
19
+ )
20
+ @image_components = image_components
21
+ @output_folder = output_folder
22
+ @folder_depth = folder_depth
23
+ @output_format = output_format
24
+ @naming_style = naming_style
25
+ @xcassets_params = xcassets_params
26
+ @convert_svg_to_vector = convert_svg_to_vector
27
+ @convert_scales_to_dpi = convert_scales_to_dpi
28
+ @include_page_name = include_page_name
29
+ @include_frame_name = include_frame_name
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ImageNameComponents
4
+ attr_accessor :name, :folder
5
+
6
+ def initialize(name:, folder:)
7
+ @name = name
8
+ @folder = folder
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../helpers/scale_formatter'
4
+
5
+ class ImageRef
6
+ attr_accessor :path, :image_link
7
+
8
+ def initialize(path:, image_link:)
9
+ @path = path
10
+ @image_link = image_link
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'image_ref'
4
+
5
+ class ImageSetRef
6
+ attr_accessor :name, :folder, :image_refs, :single_scale
7
+
8
+ def initialize(name:, folder:, image_refs:, single_scale:)
9
+ @name = name || ''
10
+ @folder = folder || ''
11
+ @image_refs = image_refs || []
12
+ @single_scale = single_scale
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'image_ref'
4
+ require_relative 'image_set_ref'
5
+ require_relative 'download_image_params'
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'models/styles_template'
4
+
5
+ class FigmaTemplateGenerator
6
+ def generate(styles:, style_types:, template_path:, output_path:)
7
+ require 'liquid'
8
+ Liquid::Template.register_filter(StringFilters)
9
+
10
+ styles = styles.select { |s| (style_types.nil? || style_types.include?(s.style_type)) }
11
+ template_data = StylesTemplate.new(styles: styles).to_hash
12
+
13
+ dir_name = File.dirname(output_path)
14
+ FileUtils.mkdir_p(dir_name) unless File.directory?(dir_name)
15
+
16
+ template = File.read(template_path)
17
+ output = Liquid::Template.parse(template).render(template_data)
18
+ output_file = File.open(output_path, 'w')
19
+ output_file.write(output)
20
+ output_file.close unless output.nil?
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../figma_client/figma_client'
4
+
5
+ class StylesTemplate
6
+ attr_accessor :groups, :styles, :common_style_names
7
+
8
+ def initialize(styles:)
9
+ styles = styles.sort_by(&:name)
10
+ @styles = styles
11
+
12
+ groups_hash = {}
13
+
14
+ styles.each do |s|
15
+ group = groups_hash[s.name_info.group_name] || StylesGroup.new(name: s.name_info.group_name, styles: [])
16
+ group.styles.push(s)
17
+ groups_hash[s.name_info.group_name] = group
18
+ end
19
+
20
+ @groups = groups_hash.map { |_key, value| value }
21
+
22
+ @common_style_names = styles
23
+ .uniq { |s| s.name_info.style_name }
24
+ .map { |s| s.name_info.style_name }
25
+ end
26
+
27
+ def to_hash
28
+ hash = {}
29
+ hash['styles'] = styles.map(&:to_hash)
30
+ hash['groups'] = groups.map(&:to_hash)
31
+ hash['common_style_names'] = common_style_names
32
+ hash
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'fileutils'
4
+
5
+ class File
6
+ def self.open_file(file_name:, mode:, create_directories:)
7
+ create_directories = !create_directories.nil? || false
8
+ if create_directories
9
+ dirname = File.dirname(file_name)
10
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
11
+ end
12
+ File.open(file_name, mode)
13
+ end
14
+
15
+ def self.read_file_json(path:)
16
+ if File.exist?(path)
17
+ text = File.read(path)
18
+ JSON.parse(text)
19
+ else
20
+ nil
21
+ end
22
+ end
23
+
24
+ def self.write_file_json(hash:, path:, create_directories: true)
25
+ file = File.open_file(file_name: path, mode: 'w', create_directories: create_directories)
26
+ json = JSON.pretty_generate(hash)
27
+ file.write(json)
28
+ file.close
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Hash
4
+ def dig_set(keys, value, force = false, delete_if_nil = true)
5
+ final_key = keys.pop
6
+ position = self
7
+ keys.each do |key|
8
+ position[key] = {} if !position[key].is_a?(Hash) && force
9
+ position = position[key]
10
+ break if position.nil?
11
+ end
12
+ if delete_if_nil && value.nil?
13
+ position&.delete(final_key)
14
+ else
15
+ position[final_key] = value
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'string_format'
4
+
5
+ module StringFilters
6
+ # Letter case
7
+
8
+ def uppercase_first_letter(input)
9
+ input.uppercase_first_letter
10
+ end
11
+
12
+ def lowercase_first_letter(input)
13
+ input.lowercase_first_letter
14
+ end
15
+
16
+ # Snake case
17
+
18
+ def snakecase(input)
19
+ input.snakecase
20
+ end
21
+
22
+ def upper_snakecase(input)
23
+ input.snakecase.uppercase_first_letter
24
+ end
25
+
26
+ def lower_snakecase(input)
27
+ input.snakecase.lowercase_first_letter
28
+ end
29
+
30
+ # Kebab case
31
+
32
+ def kebabcase(input)
33
+ input.kebabcase
34
+ end
35
+
36
+ def upper_kebabcase(input)
37
+ input.kebabcase.uppercase_first_letter
38
+ end
39
+
40
+ def lower_kebabcase(input)
41
+ input.kebabcase.lowercase_first_letter
42
+ end
43
+
44
+ # Camel case
45
+
46
+ def camelcase_s(input, *separators)
47
+ input.camelcase(separators)
48
+ end
49
+
50
+ def upper_camelcase(input, *separators)
51
+ input.camelcase(separators)
52
+ end
53
+
54
+ def lower_camelcase(input, *separators)
55
+ input.camelcase(separators)
56
+ end
57
+
58
+ # Formatting
59
+
60
+ def default_format(input)
61
+ input.default_format
62
+ end
63
+ end
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ FORMAT_STYLE_CAMELCASE = 'camelcase'
5
+ FORMAT_STYLE_SNAKECASE = 'snakecase'
6
+ FORMAT_STYLE_KEBABCASE = 'kebabcase'
7
+
8
+ def uppercase_first_letter
9
+ capitalize
10
+ end
11
+
12
+ def lowercase_first_letter
13
+ return self unless length.positive?
14
+
15
+ self[0, 1].downcase + self[1..-1]
16
+ end
17
+
18
+ def snakecase
19
+ gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2')
20
+ .gsub(/([a-z\d])([A-Z])/, '\1_\2')
21
+ .tr('-', '_')
22
+ .gsub(/\s/, '_')
23
+ .gsub(/__+/, '_')
24
+ .downcase
25
+ end
26
+
27
+ def kebabcase
28
+ snakecase.gsub(/_/, '-')
29
+ end
30
+
31
+ def camelcase(*separators)
32
+ case separators.first
33
+ when Symbol, TrueClass, FalseClass, NilClass
34
+ first_letter = separators.shift
35
+ end
36
+
37
+ separators = ['_', '\s'] if separators.empty?
38
+
39
+ str = dup
40
+
41
+ separators.each do |s|
42
+ str = str.gsub(/(?:#{s}+)([a-zA-Z0-9])/) { Regexp.last_match(1).upcase }
43
+ end
44
+
45
+ case first_letter
46
+ when :upper, true
47
+ str = str.gsub(/(\A|\s)([a-z])/) { Regexp.last_match(1) + Regexp.last_match(2).upcase }
48
+ when :lower, false
49
+ str = str.gsub(/(\A|\s)([A-Z])/) { Regexp.last_match(1) + Regexp.last_match(2).downcase }
50
+ end
51
+
52
+ str
53
+ end
54
+
55
+ def default_format
56
+ available_symbols_regex = /[^a-zA-Z0-9_]/
57
+ separator_symbols = [' ', '_', '-', '/']
58
+ camelcase(separator_symbols).gsub(available_symbols_regex, '').lowercase_first_letter
59
+ end
60
+ end
@@ -0,0 +1,17 @@
1
+ def syscall(*cmd)
2
+ require 'open3'
3
+ stdout, = Open3.capture3(*cmd)
4
+ stdout
5
+ end
6
+
7
+ def syscall_safe(*cmd)
8
+ syscall(*cmd)
9
+ rescue StandardError
10
+ ''
11
+ end
12
+
13
+ class String
14
+ def extract_by_regex(regex)
15
+ (regex.match(self) || [])[0]
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fastlane
4
+ module Admiraltools
5
+ VERSION = '0.0.36'
6
+ end
7
+ end
data/admiraltools.rb ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ #require 'fastlane/plugin/admiraltools/version'
4
+ #
5
+ module Fastlane
6
+ module Admiraltools
7
+ # Return all .rb files inside the "actions" and "helpers" directory
8
+ def self.all_classes
9
+ Dir[File.expand_path('**/{actions,helpers}/*.rb', File.dirname(__FILE__))]
10
+ end
11
+ end
12
+ end
13
+
14
+ # By default we want to import all available actions and helpers
15
+ # A plugin can contain any number of actions and plugins
16
+ Fastlane::Admiraltools.all_classes.each do |current|
17
+ require current
18
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: admiral-tools-figma
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Admiral team
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-09-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: The tool to download figma icons
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - README.md
20
+ - admiral-tools-figma.gemspec
21
+ - admiraltools.rb
22
+ - admiraltools/actions/figma_download_images.rb
23
+ - admiraltools/actions/figma_generate_styles.rb
24
+ - admiraltools/actions/figma_get_image_links.rb
25
+ - admiraltools/actions/figma_get_styles.rb
26
+ - admiraltools/helper/admiraltools_helper.rb
27
+ - admiraltools/helper/figma/figma_client/figma_client.rb
28
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_color.rb
29
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_component.rb
30
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_components_styles_meta.rb
31
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_frame_info.rb
32
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_node.rb
33
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_paint.rb
34
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_style.rb
35
+ - admiraltools/helper/figma/figma_client/models/api/primitives/figma_type_style.rb
36
+ - admiraltools/helper/figma/figma_client/models/api/results/figma_components_styles_result.rb
37
+ - admiraltools/helper/figma/figma_client/models/api/results/figma_images_result.rb
38
+ - admiraltools/helper/figma/figma_client/models/api/results/figma_nodes_result.rb
39
+ - admiraltools/helper/figma/figma_client/models/domain/converters/figma_to_domain_converter.rb
40
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/color.rb
41
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/component.rb
42
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/components_list.rb
43
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/font.rb
44
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/frame_info.rb
45
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/image_link.rb
46
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/style.rb
47
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/styles_group.rb
48
+ - admiraltools/helper/figma/figma_client/models/domain/primitives/styles_list.rb
49
+ - admiraltools/helper/figma/figma_client/models/models.rb
50
+ - admiraltools/helper/figma/figma_image_downloader/bin/svg2vectordrawable.jar
51
+ - admiraltools/helper/figma/figma_image_downloader/figma_image_downloader.rb
52
+ - admiraltools/helper/figma/figma_image_downloader/generators/folder_generator.rb
53
+ - admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_raw.rb
54
+ - admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_res.rb
55
+ - admiraltools/helper/figma/figma_image_downloader/generators/folder_generator_xcassets.rb
56
+ - admiraltools/helper/figma/figma_image_downloader/generators/generators.rb
57
+ - admiraltools/helper/figma/figma_image_downloader/helpers/image_name_formatter.rb
58
+ - admiraltools/helper/figma/figma_image_downloader/helpers/progress_tasks_logger.rb
59
+ - admiraltools/helper/figma/figma_image_downloader/helpers/scale_formatter.rb
60
+ - admiraltools/helper/figma/figma_image_downloader/helpers/svg_to_vector_converter.rb
61
+ - admiraltools/helper/figma/figma_image_downloader/models/download_image_params.rb
62
+ - admiraltools/helper/figma/figma_image_downloader/models/image_name_components.rb
63
+ - admiraltools/helper/figma/figma_image_downloader/models/image_ref.rb
64
+ - admiraltools/helper/figma/figma_image_downloader/models/image_set_ref.rb
65
+ - admiraltools/helper/figma/figma_image_downloader/models/models.rb
66
+ - admiraltools/helper/figma/figma_template_generator/figma_template_generator.rb
67
+ - admiraltools/helper/figma/figma_template_generator/models/styles_template.rb
68
+ - admiraltools/helper/figma/helpers/file_folder.rb
69
+ - admiraltools/helper/figma/helpers/hash_access.rb
70
+ - admiraltools/helper/figma/helpers/string_filters.rb
71
+ - admiraltools/helper/figma/helpers/string_format.rb
72
+ - admiraltools/helper/system/system.rb
73
+ - admiraltools/version.rb
74
+ homepage: https://github.com/admiral-team
75
+ licenses: []
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubygems_version: 3.4.10
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: The tool to download figma icons
96
+ test_files: []