ariadne_view_components 0.0.93.2 → 0.0.94

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.
Files changed (141) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/README.md +13 -4
  4. data/app/assets/javascripts/ariadne_view_components.js +14 -14
  5. data/app/assets/javascripts/ariadne_view_components.js.br +0 -0
  6. data/app/assets/javascripts/ariadne_view_components.js.gz +0 -0
  7. data/app/assets/javascripts/ariadne_view_components.js.map +1 -1
  8. data/app/assets/stylesheets/ariadne_view_components.css +1 -1
  9. data/app/assets/stylesheets/ariadne_view_components.css.br +0 -0
  10. data/app/assets/stylesheets/ariadne_view_components.css.gz +0 -0
  11. data/app/components/ariadne/base_component.rb +25 -22
  12. data/app/components/ariadne/behaviors/tooltipable.rb +12 -12
  13. data/app/components/ariadne/form/checkbox/component.rb +2 -2
  14. data/app/components/ariadne/form/group/component.rb +1 -1
  15. data/app/components/ariadne/form/radio_button/component.rb +2 -2
  16. data/app/components/ariadne/form/select/component.rb +1 -1
  17. data/app/components/ariadne/form/text_field/component.html.erb +2 -2
  18. data/app/components/ariadne/form/text_field/component.rb +14 -7
  19. data/app/components/ariadne/form/toggle/component.rb +2 -2
  20. data/app/components/ariadne/form/toggle_group/component.rb +1 -1
  21. data/app/components/ariadne/form/toggle_group/option/component.rb +1 -1
  22. data/app/components/ariadne/layout/grid/component.rb +1 -1
  23. data/app/components/ariadne/layout/grid/item/component.rb +2 -2
  24. data/app/components/ariadne/layout/label_block/component.rb +1 -1
  25. data/app/components/ariadne/layout/narrow/component.rb +1 -1
  26. data/app/components/ariadne/ui/accordion/component.rb +3 -1
  27. data/app/components/ariadne/ui/accordion/item/component.html.erb +10 -10
  28. data/app/components/ariadne/ui/accordion/item/component.rb +12 -3
  29. data/app/components/ariadne/ui/avatar/component.html.erb +9 -7
  30. data/app/components/ariadne/ui/avatar/component.rb +55 -7
  31. data/app/components/ariadne/ui/badge/component.rb +35 -16
  32. data/app/components/ariadne/ui/banner/component.html.erb +23 -0
  33. data/app/components/ariadne/ui/banner/component.rb +226 -0
  34. data/app/components/ariadne/ui/banner/component.ts +46 -0
  35. data/app/components/ariadne/ui/blankslate/component.html.erb +2 -2
  36. data/app/components/ariadne/ui/blankslate/component.rb +12 -1
  37. data/app/components/ariadne/ui/button/component.rb +35 -24
  38. data/app/components/ariadne/ui/card/body/component.rb +1 -1
  39. data/app/components/ariadne/ui/card/component.rb +11 -7
  40. data/app/components/ariadne/ui/card/footer/component.rb +1 -1
  41. data/app/components/ariadne/ui/card/header/component.html.erb +2 -2
  42. data/app/components/ariadne/ui/card/header/component.rb +25 -16
  43. data/app/components/ariadne/ui/clipboard_copy/component.html.erb +1 -0
  44. data/app/components/ariadne/ui/clipboard_copy/component.rb +17 -21
  45. data/app/components/ariadne/ui/clipboard_copy/component.ts +15 -0
  46. data/app/components/ariadne/ui/color_dot/component.html.erb +5 -5
  47. data/app/components/ariadne/ui/color_dot/component.rb +19 -4
  48. data/app/components/ariadne/ui/combobox/component.html.erb +1 -1
  49. data/app/components/ariadne/ui/combobox/component.rb +54 -23
  50. data/app/components/ariadne/ui/combobox/component.ts +2 -0
  51. data/app/components/ariadne/ui/dialog/body/component.html.erb +3 -0
  52. data/app/components/ariadne/ui/dialog/body/component.rb +28 -0
  53. data/app/components/ariadne/ui/dialog/component.html.erb +25 -24
  54. data/app/components/ariadne/ui/dialog/component.rb +87 -18
  55. data/app/components/ariadne/ui/dialog/component.ts +5 -1
  56. data/app/components/ariadne/ui/dialog/footer/component.html.erb +3 -0
  57. data/app/components/ariadne/ui/dialog/footer/component.rb +34 -0
  58. data/app/components/ariadne/ui/heroicon/component.rb +21 -21
  59. data/app/components/ariadne/ui/image/component.rb +11 -23
  60. data/app/components/ariadne/ui/link/component.html.erb +1 -3
  61. data/app/components/ariadne/ui/link/component.rb +17 -4
  62. data/app/components/ariadne/ui/list/component.html.erb +5 -9
  63. data/app/components/ariadne/ui/list/component.rb +31 -7
  64. data/app/components/ariadne/ui/list/item/component.rb +6 -5
  65. data/app/components/ariadne/ui/pagination/component.rb +1 -2
  66. data/app/components/ariadne/ui/popover/component.html.erb +1 -1
  67. data/app/components/ariadne/ui/popover/component.rb +31 -26
  68. data/app/components/ariadne/ui/relative_time/component.html.erb +1 -0
  69. data/app/components/ariadne/ui/{time_ago → relative_time}/component.rb +15 -15
  70. data/app/components/ariadne/ui/{time_ago → relative_time}/component.ts +1 -1
  71. data/app/components/ariadne/ui/shortcut/component.html.erb +0 -1
  72. data/app/components/ariadne/ui/shortcut/component.rb +31 -5
  73. data/app/components/ariadne/ui/shortcut/component.ts +1 -1
  74. data/app/components/ariadne/ui/skeleton/component.rb +2 -8
  75. data/app/components/ariadne/ui/stats_panel/component.html.erb +3 -3
  76. data/app/components/ariadne/ui/stats_panel/component.rb +25 -1
  77. data/app/components/ariadne/ui/stats_panel/item/component.html.erb +3 -3
  78. data/app/components/ariadne/ui/stats_panel/item/component.rb +6 -6
  79. data/app/components/ariadne/ui/table/cell/component.rb +1 -1
  80. data/app/components/ariadne/ui/table/row/component.rb +1 -1
  81. data/app/components/ariadne/ui/typography/component.rb +3 -1
  82. data/app/frontend/controllers/tooltip_controller.ts +8 -3
  83. data/app/frontend/stylesheets/ariadne_view_components.css +1 -0
  84. data/app/frontend/stylesheets/theme.css +88 -0
  85. data/app/frontend/utils/createController.ts +9 -0
  86. data/app/helpers/ariadne/color_helper.rb +158 -0
  87. data/app/helpers/ariadne/form_helper.rb +1 -0
  88. data/app/helpers/ariadne/size_helper.rb +7 -0
  89. data/app/lib/ariadne/attributes_helper.rb +4 -4
  90. data/app/lib/ariadne/view_component/style_variants.rb +1 -1
  91. data/app/lib/ariadne/view_helper.rb +0 -6
  92. data/lib/ariadne/accessibility.rb +64 -0
  93. data/lib/ariadne/forms/dsl/form_object.rb +5 -1
  94. data/lib/ariadne/forms/dsl/input.rb +1 -1
  95. data/lib/ariadne/static/generate_arguments.rb +54 -0
  96. data/lib/ariadne/static/generate_audited_at.rb +17 -0
  97. data/lib/ariadne/static/generate_constants.rb +19 -0
  98. data/lib/ariadne/static/generate_previews.rb +53 -0
  99. data/lib/ariadne/static/generate_statuses.rb +17 -0
  100. data/lib/ariadne/static/generate_structure.rb +279 -0
  101. data/lib/ariadne/static.rb +68 -0
  102. data/lib/ariadne/view_components/constants.rb +2 -2
  103. data/lib/ariadne/view_components/version.rb +1 -1
  104. data/lib/ariadne/view_components.rb +0 -51
  105. data/lib/ariadne/yard/component_manifest.rb +81 -81
  106. data/lib/ariadne/yard/component_ref.rb +1 -1
  107. data/lib/ariadne/yard/docs_helper.rb +24 -16
  108. data/lib/ariadne/yard/dry_initializer/common_handler.rb +103 -0
  109. data/lib/ariadne/yard/dry_initializer/option_handler.rb +38 -0
  110. data/lib/ariadne/yard/dry_initializer/param_handler.rb +57 -0
  111. data/lib/ariadne/yard/registry.rb +2 -5
  112. data/lib/ariadne/yard/{info_arch_docs_helper.rb → structure_docs_helper.rb} +5 -5
  113. data/lib/ariadne/yard.rb +20 -8
  114. data/lib/rubocop/config/default.yml +0 -3
  115. metadata +34 -37
  116. data/app/components/ariadne/behaviors/captionable.rb +0 -55
  117. data/app/components/ariadne/turbo/frame/component.html.erb +0 -3
  118. data/app/components/ariadne/turbo/frame/component.rb +0 -16
  119. data/app/components/ariadne/turbo/stream_action/component.html.erb +0 -4
  120. data/app/components/ariadne/turbo/stream_action/component.rb +0 -25
  121. data/app/components/ariadne/ui/data_table/component.html.erb +0 -1
  122. data/app/components/ariadne/ui/data_table/component.rb +0 -11
  123. data/app/components/ariadne/ui/flash/component.html.erb +0 -18
  124. data/app/components/ariadne/ui/flash/component.rb +0 -151
  125. data/app/components/ariadne/ui/flash/component.ts +0 -56
  126. data/app/components/ariadne/ui/overlay/component.html.erb +0 -12
  127. data/app/components/ariadne/ui/overlay/component.rb +0 -54
  128. data/app/components/ariadne/ui/overlay/component.ts +0 -92
  129. data/app/components/ariadne/ui/time_ago/component.html.erb +0 -1
  130. data/lib/ariadne/view_components/commands.rb +0 -90
  131. data/lib/ariadne/view_components/statuses.rb +0 -14
  132. data/lib/ariadne/view_components/upstream.rb +0 -19
  133. data/lib/ariadne/yard/lookbook_pages_backend.rb +0 -235
  134. data/lib/rubocop/cop/ariadne/no_tag_memoize.rb +0 -44
  135. data/static/arguments.yml +0 -879
  136. data/static/assets/view-components.svg +0 -18
  137. data/static/classes.yml +0 -211
  138. data/static/constants.json +0 -743
  139. data/static/statuses.json +0 -58
  140. data/static/tailwindcss.yml +0 -727
  141. /data/app/components/ariadne/ui/{time_ago → relative_time}/en.yml +0 -0
@@ -0,0 +1,88 @@
1
+ [data-ariadne-color-mode] {
2
+ background-color: hsl(var(--background));
3
+ color: hsl(var(--foreground));
4
+ }
5
+
6
+ * {
7
+ border-color: hsl(var(--border));
8
+ }
9
+
10
+ [data-ariadne-light-theme='light'] {
11
+ --background: 0 0% 100%;
12
+ --foreground: 240 10% 3.9%;
13
+
14
+ --muted: 240 4.8% 95.9%;
15
+ --muted-foreground: 240 3.8% 46.1%;
16
+
17
+ --popover: 0 0% 100%;
18
+ --popover-foreground: 240 10% 3.9%;
19
+
20
+ --card: 0 0% 100%;
21
+ --card-foreground: 240 10% 3.9%;
22
+
23
+ --border: 240 5.9% 90%;
24
+ --input: 240 5.9% 90%;
25
+
26
+ --primary: 262.76 30% 36%;
27
+ --primary-foreground: 227.98 6% 99%;
28
+
29
+ --secondary: 240 4.8% 95.9%;
30
+ --secondary-foreground: 240 5.9% 10%;
31
+
32
+ --accent: 240 4.8% 95.9%;
33
+ --accent-foreground: 240 5.9% 10%;
34
+
35
+ --danger: 0 84.2% 60.2%;
36
+ --danger-foreground: 0 0% 98%;
37
+
38
+ --warning: 43 100% 42%;
39
+ --warning-foreground: 210 40% 98%;
40
+
41
+ --success: 93 85% 32%;
42
+ --success-foreground: 0 0% 100%;
43
+
44
+ --info: 211 100% 50%;
45
+ --info-foreground: 199 89% 48%;
46
+
47
+ --ring: 240 5.9% 10%;
48
+ }
49
+
50
+ [data-ariadne-dark-theme='dark'] {
51
+ --background: 240 10% 3.9%;
52
+ --foreground: 0 0% 98%;
53
+
54
+ --muted: 240 3.7% 15.9%;
55
+ --muted-foreground: 240 5% 64.9%;
56
+
57
+ --popover: 240 10% 3.9%;
58
+ --popover-foreground: 0 0% 98%;
59
+
60
+ --card: 240 10% 3.9%;
61
+ --card-foreground: 0 0% 98%;
62
+
63
+ --border: 240 3.7% 15.9%;
64
+ --input: 240 3.7% 15.9%;
65
+
66
+ --primary: 259.98 94% 88%;
67
+ --primary-foreground: 227.98 6% 99%;
68
+
69
+ --secondary: 240 3.7% 15.9%;
70
+ --secondary-foreground: 0 0% 98%;
71
+
72
+ --accent: 240 3.7% 15.9%;
73
+ --accent-foreground: 0 0% 98%;
74
+
75
+ --danger: 0 62.8% 30.6%;
76
+ --danger-foreground: 0 0% 98%;
77
+
78
+ --warning: 43 100% 42%;
79
+ --warning-foreground: 210 40% 98%;
80
+
81
+ --success: 93 85% 32%;
82
+ --success-foreground: 0 0% 100%;
83
+
84
+ --info: 217 91% 60%;
85
+ --info-foreground: 0 0% 100%;
86
+
87
+ --ring: 240 4.9% 83.9%;
88
+ }
@@ -88,6 +88,15 @@ export function controllerFactory<E extends HTMLElement>() {
88
88
  class ExtendedController extends Controller<E> {
89
89
  static targets = Object.keys(targets ?? {})
90
90
  static values = values ?? {}
91
+
92
+ private dispatchEvent(target: HTMLElement, name: string, options: {bubbles?: boolean, cancelable?: boolean} = {}) {
93
+ // Dispatching event to trigger all related actions
94
+ const event = new Event(name, {
95
+ bubbles: options.bubbles || false,
96
+ cancelable: options.cancelable || false,
97
+ });
98
+ target.dispatchEvent(event);
99
+ }
91
100
  }
92
101
 
93
102
  return ExtendedController as unknown as new () => ControllerWithTargets<E, T, Y>
@@ -0,0 +1,158 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ariadne
4
+ module ColorHelper
5
+ VALID_COLORS =
6
+ {
7
+ "red": [
8
+ "ariadne-bg-red-500/15",
9
+ "ariadne-text-red-700",
10
+ "group-data-[hover]:ariadne-bg-red-500/25",
11
+ "dark:ariadne-bg-red-500/10",
12
+ "dark:ariadne-text-red-400",
13
+ "dark:group-data-[hover]:ariadne-bg-red-500/20",
14
+ ],
15
+ "orange": [
16
+ "ariadne-bg-orange-500/15",
17
+ "ariadne-text-orange-700",
18
+ "group-data-[hover]:ariadne-bg-orange-500/25",
19
+ "dark:ariadne-bg-orange-500/10",
20
+ "dark:ariadne-text-orange-400",
21
+ "dark:group-data-[hover]:ariadne-bg-orange-500/20",
22
+ ],
23
+ "amber": [
24
+ "ariadne-bg-amber-400/20",
25
+ "ariadne-text-amber-700",
26
+ "group-data-[hover]:ariadne-bg-amber-400/30",
27
+ "dark:ariadne-bg-amber-400/10",
28
+ "dark:ariadne-text-amber-400",
29
+ "dark:group-data-[hover]:ariadne-bg-amber-400/15",
30
+ ],
31
+ "yellow": [
32
+ "ariadne-bg-yellow-400/20",
33
+ "ariadne-text-yellow-700",
34
+ "group-data-[hover]:ariadne-bg-yellow-400/30",
35
+ "dark:ariadne-bg-yellow-400/10",
36
+ "dark:ariadne-text-yellow-300",
37
+ "dark:group-data-[hover]:ariadne-bg-yellow-400/15",
38
+ ],
39
+ "lime": [
40
+ "ariadne-bg-lime-400/20",
41
+ "ariadne-text-lime-700",
42
+ "group-data-[hover]:ariadne-bg-lime-400/30",
43
+ "dark:ariadne-bg-lime-400/10",
44
+ "dark:ariadne-text-lime-300",
45
+ "dark:group-data-[hover]:ariadne-bg-lime-400/15",
46
+ ],
47
+ "green": [
48
+ "ariadne-bg-green-500/15",
49
+ "ariadne-text-green-700",
50
+ "group-data-[hover]:ariadne-bg-green-500/25",
51
+ "dark:ariadne-bg-green-500/10",
52
+ "dark:ariadne-text-green-400",
53
+ "dark:group-data-[hover]:ariadne-bg-green-500/20",
54
+ ],
55
+ "emerald": [
56
+ "ariadne-bg-emerald-500/15",
57
+ "ariadne-text-emerald-700",
58
+ "group-data-[hover]:ariadne-bg-emerald-500/25",
59
+ "dark:ariadne-bg-emerald-500/10",
60
+ "dark:ariadne-text-emerald-400",
61
+ "dark:group-data-[hover]:ariadne-bg-emerald-500/20",
62
+ ],
63
+ "teal": [
64
+ "ariadne-bg-teal-500/15",
65
+ "ariadne-text-teal-700",
66
+ "group-data-[hover]:ariadne-bg-teal-500/25",
67
+ "dark:ariadne-bg-teal-500/10",
68
+ "dark:ariadne-text-teal-300",
69
+ "dark:group-data-[hover]:ariadne-bg-teal-500/20",
70
+ ],
71
+ "cyan": [
72
+ "ariadne-bg-cyan-400/20",
73
+ "ariadne-text-cyan-700",
74
+ "group-data-[hover]:ariadne-bg-cyan-400/30",
75
+ "dark:ariadne-bg-cyan-400/10",
76
+ "dark:ariadne-text-cyan-300",
77
+ "dark:group-data-[hover]:ariadne-bg-cyan-400/15",
78
+ ],
79
+ "sky": [
80
+ "ariadne-bg-sky-500/15",
81
+ "ariadne-text-sky-700",
82
+ "group-data-[hover]:ariadne-bg-sky-500/25",
83
+ "dark:ariadne-bg-sky-500/10",
84
+ "dark:ariadne-text-sky-300",
85
+ "dark:group-data-[hover]:ariadne-bg-sky-500/20",
86
+ ],
87
+ "blue": [
88
+ "ariadne-bg-blue-500/15",
89
+ "ariadne-text-blue-700",
90
+ "group-data-[hover]:ariadne-bg-blue-500/25",
91
+ "dark:ariadne-text-blue-400",
92
+ "dark:group-data-[hover]:ariadne-bg-blue-500/25",
93
+ ],
94
+ "indigo": [
95
+ "ariadne-bg-indigo-500/15",
96
+ "ariadne-text-indigo-700",
97
+ "group-data-[hover]:ariadne-bg-indigo-500/25",
98
+ "dark:ariadne-text-indigo-400",
99
+ "dark:group-data-[hover]:ariadne-bg-indigo-500/20",
100
+ ],
101
+ "violet": [
102
+ "ariadne-bg-violet-500/15",
103
+ "ariadne-text-violet-700",
104
+ "group-data-[hover]:ariadne-bg-violet-500/25",
105
+ "dark:ariadne-text-violet-400",
106
+ "dark:group-data-[hover]:ariadne-bg-violet-500/20",
107
+ ],
108
+ "purple": [
109
+ "ariadne-bg-purple-500/15",
110
+ "ariadne-text-purple-700",
111
+ "group-data-[hover]:ariadne-bg-purple-500/25",
112
+ "dark:ariadne-text-purple-400",
113
+ "dark:group-data-[hover]:ariadne-bg-purple-500/20",
114
+ ],
115
+ "fuchsia": [
116
+ "ariadne-bg-fuchsia-400/15",
117
+ "ariadne-text-fuchsia-700",
118
+ "group-data-[hover]:ariadne-bg-fuchsia-400/25",
119
+ "dark:ariadne-bg-fuchsia-400/10",
120
+ "dark:ariadne-text-fuchsia-400",
121
+ "dark:group-data-[hover]:ariadne-bg-fuchsia-400/20",
122
+ ],
123
+ "pink": [
124
+ "ariadne-bg-pink-400/15",
125
+ "ariadne-text-pink-700",
126
+ "group-data-[hover]:ariadne-bg-pink-400/25",
127
+ "dark:ariadne-bg-pink-400/10",
128
+ "dark:ariadne-text-pink-400",
129
+ "dark:group-data-[hover]:ariadne-bg-pink-400/20",
130
+ ],
131
+ "rose": [
132
+ "ariadne-bg-rose-400/15",
133
+ "ariadne-text-rose-700",
134
+ "group-data-[hover]:ariadne-bg-rose-400/25",
135
+ "dark:ariadne-bg-rose-400/10",
136
+ "dark:ariadne-text-rose-400",
137
+ "dark:group-data-[hover]:ariadne-bg-rose-400/20",
138
+ ],
139
+ "zinc": [
140
+ "ariadne-bg-zinc-600/10",
141
+ "ariadne-text-zinc-700",
142
+ "group-data-[hover]:ariadne-bg-zinc-600/20",
143
+ "dark:ariadne-bg-white/5",
144
+ "dark:ariadne-text-zinc-400",
145
+ "dark:group-data-[hover]:ariadne-bg-white/10",
146
+ ],
147
+ }.freeze
148
+
149
+ def include_colors!
150
+ @variants[:color] ||= {}
151
+ @variants[:color] = {}
152
+
153
+ VALID_COLORS.each do |color, classes|
154
+ @variants[:color][color] = classes
155
+ end
156
+ end
157
+ end
158
+ end
@@ -5,6 +5,7 @@ module Ariadne
5
5
  # :nodoc:
6
6
  module FormHelper
7
7
  def ariadne_form_with(**kwargs, &block)
8
+ kwargs[:id] ||= Ariadne::BaseComponent.generate_id(base_name: "form")
8
9
  form_with(**kwargs, skip_default_ids: false, builder: Ariadne::Forms::Builder, &block)
9
10
  end
10
11
 
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ariadne
4
+ module SizeHelper
5
+ VALID_SIZES = [:xs, :sm, :md, :lg, :xl].freeze
6
+ end
7
+ end
@@ -43,8 +43,8 @@ module Ariadne
43
43
  # It's designed to be used to normalize and merge aria information from system_arguments
44
44
  # hashes. Consider using this pattern in component initializers:
45
45
  #
46
- # @system_arguments[:aria] = merge_aria(
47
- # @system_arguments,
46
+ # html_attrs[:aria] = merge_aria(
47
+ # html_attrs,
48
48
  # { aria: { labelled_by: id } }
49
49
  # )
50
50
  def merge_aria(*hashes)
@@ -68,8 +68,8 @@ module Ariadne
68
68
  # It's designed to be used to normalize and merge data information from system_arguments
69
69
  # hashes. Consider using this pattern in component initializers:
70
70
  #
71
- # @system_arguments[:data] = merge_aria(
72
- # @system_arguments,
71
+ # html_attrs[:data] = merge_aria(
72
+ # html_attrs,
73
73
  # { data: { foo: "bar" } }
74
74
  # )
75
75
  def merge_data(*hashes)
@@ -59,7 +59,7 @@ module Ariadne
59
59
  # merge Araidne style variants with user provided overrides
60
60
  def merged_styles(name = self.class.default_style_name, **variants)
61
61
  default_styles = self.class.style_config.compile(name.to_sym, **variants)
62
- Ariadne::ViewComponents.tailwind_merger.merge([default_styles, styles.fetch(name, "")])
62
+ merge_tailwind_classes([default_styles, styles.fetch(name, "")])
63
63
  end
64
64
  end
65
65
  end
@@ -6,12 +6,6 @@ module Ariadne
6
6
  module ViewHelper
7
7
  class ViewHelperNotFound < StandardError; end
8
8
 
9
- class << self
10
- def generate_id
11
- SecureRandom.hex(6)
12
- end
13
- end
14
-
15
9
  HELPERS = {
16
10
  heroicon: "Ariadne::UI::Heroicon::Component",
17
11
  }.freeze
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+ module Ariadne
5
+ # :nodoc:
6
+ module Accessibility
7
+ # Skip axe checks for components that should be tested as part of a larger component.
8
+ # Do not add to this list for any other reason!
9
+ IGNORED_PREVIEWS = [].freeze
10
+
11
+ # Skip `:region` which relates to preview page structure rather than individual component.
12
+ AXE_RULES_TO_SKIP = {
13
+ # these will be skipped in CI
14
+ will_fix: {
15
+ global: [],
16
+
17
+ per_component: {},
18
+ },
19
+
20
+ # these will always be skipped
21
+ wont_fix: {
22
+ global: [
23
+ :region,
24
+ ],
25
+
26
+ per_component: {},
27
+ },
28
+ }.freeze
29
+
30
+ class << self
31
+ def ignore_preview?(preview_class)
32
+ IGNORED_PREVIEWS.include?(preview_class)
33
+ end
34
+
35
+ def axe_rules_to_skip(component: nil, scenario_name: nil, flatten: false)
36
+ to_skip = {
37
+ wont_fix: Set.new(AXE_RULES_TO_SKIP.dig(:wont_fix, :global) || []),
38
+ will_fix: Set.new(AXE_RULES_TO_SKIP.dig(:will_fix, :global) || []),
39
+ }
40
+
41
+ if component
42
+ to_skip[:wont_fix].merge(AXE_RULES_TO_SKIP.dig(:wont_fix, :per_component, component, :all_scenarios) || [])
43
+ to_skip[:will_fix].merge(AXE_RULES_TO_SKIP.dig(:will_fix, :per_component, component, :all_scenarios) || [])
44
+
45
+ if scenario_name
46
+ to_skip[:wont_fix].merge(AXE_RULES_TO_SKIP.dig(:wont_fix, :per_component, component, scenario_name) || [])
47
+ to_skip[:will_fix].merge(AXE_RULES_TO_SKIP.dig(:will_fix, :per_component, component, scenario_name) || [])
48
+ end
49
+ end
50
+
51
+ if flatten
52
+ flattened = to_skip.each_with_object(Set.new) do |(_, rule_set), memo|
53
+ memo.merge(rule_set)
54
+ end
55
+
56
+ return flattened.to_a
57
+ end
58
+
59
+ to_skip.transform_values(&:to_a)
60
+ end
61
+ end
62
+ end
63
+ end
64
+ # :nocov:
@@ -9,7 +9,7 @@ module Ariadne
9
9
 
10
10
  attr_reader :builder, :form, :id
11
11
 
12
- def initialize(builder:, form:, id: ::Ariadne::ViewHelper.generate_id)
12
+ def initialize(builder:, form:, id: Ariadne::BaseComponent.generate_id)
13
13
  @builder = builder
14
14
  @form = form
15
15
  @id = id
@@ -17,6 +17,10 @@ module Ariadne
17
17
  yield(self) if block_given?
18
18
  end
19
19
 
20
+ def generate_id(base_name: "form")
21
+ Ariadne::BaseComponent.generate_id(base_name:)
22
+ end
23
+
20
24
  def group(**options, &block)
21
25
  add_input(InputGroup.new(builder: @builder, form: @form, **options, &block))
22
26
  end
@@ -108,7 +108,7 @@ module Ariadne
108
108
 
109
109
  @options[:invalid] = "true" if invalid?
110
110
 
111
- @base_id = ::Ariadne::ViewHelper.generate_id
111
+ @base_id = Ariadne::BaseComponent.generate_id(base_name: "ariadne-form-input")
112
112
 
113
113
  @ids = {}.tap do |id_map|
114
114
  id_map[:validation] = "validation-#{@base_id}" if supports_validation?
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+
5
+ require "json"
6
+
7
+ module Ariadne
8
+ module Static
9
+ # :nodoc:
10
+ module GenerateArguments
11
+ class << self
12
+ def call(view_context: self.view_context)
13
+ Ariadne::BaseComponent.descendants.sort_by(&:name).map do |component|
14
+ docs = registry.find(component)
15
+ ref = Ariadne::Yard::ComponentManifest.ref_for(component)
16
+
17
+ args = docs.params.map do |tag|
18
+ default_value = Ariadne::Yard::DocsHelper.pretty_default_value(tag, component)
19
+
20
+ {
21
+ "name" => tag.name,
22
+ "type" => tag.types.join(", "),
23
+ "default" => default_value,
24
+ "description" => view_context.render(inline: tag.text&.squish),
25
+ }
26
+ end
27
+
28
+ {
29
+ "component" => docs.metadata[:title],
30
+ "a11y_reviewed" => docs.metadata[:a11y_reviewed] == "true",
31
+ "short_name" => docs.short_name,
32
+ "source" => ref.source_url,
33
+ "lookbook" => ref.lookbook_url,
34
+ "parameters" => args,
35
+ }
36
+ end
37
+ end
38
+
39
+ private
40
+
41
+ def view_context
42
+ @view_context ||= ApplicationController.new.tap { |c| c.request = ActionDispatch::TestRequest.create }.view_context.tap do |vc|
43
+ vc.singleton_class.include(Ariadne::Yard::DocsHelper)
44
+ vc.singleton_class.include(Ariadne::ViewHelper)
45
+ end
46
+ end
47
+
48
+ def registry
49
+ @registry ||= Ariadne::Yard::Registry.make
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+ module Ariadne
5
+ module Static
6
+ # :nodoc:
7
+ module GenerateAuditedAt
8
+ class << self
9
+ def call
10
+ Ariadne::BaseComponent.descendants.sort_by(&:name).each_with_object({}) do |component, mem|
11
+ mem[component.to_s] = component.audited_at.to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+ module Ariadne
5
+ module Static
6
+ # :nodoc:
7
+ module GenerateConstants
8
+ class << self
9
+ def call
10
+ Ariadne::BaseComponent.descendants.sort_by(&:name).each_with_object({}) do |component, mem|
11
+ mem[component.to_s] = component.constants(false).sort.index_with do |constant|
12
+ component.const_get(constant)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+
5
+ require "json"
6
+
7
+ module Ariadne
8
+ module Static
9
+ # :nodoc:
10
+ module GeneratePreviews
11
+ class << self
12
+ def call
13
+ Lookbook.previews.filter_map do |preview|
14
+ next if preview.preview_class == Ariadne::FormsPreview
15
+ next if Ariadne::Accessibility.ignore_preview?(preview.preview_class)
16
+
17
+ class_name, _ = Ariadne::Yard::DocsHelper.component_and_short_name(preview.preview_class)
18
+
19
+ {
20
+ type: preview.lookup_path.split("/")[1], # e.g. preview.lookup_path => "ariadne/ui/badge"
21
+ name: preview.name,
22
+ component: class_name,
23
+ lookup_path: preview.lookup_path,
24
+ examples: preview.scenarios.flat_map do |parent_scenario|
25
+ scenarios = parent_scenario.type == :scenario_group ? parent_scenario.scenarios : [parent_scenario]
26
+
27
+ scenarios.map do |scenario|
28
+ snapshot_tag = scenario.tags.find { |tag| tag.tag_name == "snapshot" }
29
+ snapshot = if snapshot_tag.nil?
30
+ "false"
31
+ elsif snapshot_tag.text.blank?
32
+ "true"
33
+ else
34
+ snapshot_tag.text
35
+ end
36
+ {
37
+ preview_path: scenario.lookup_path,
38
+ name: scenario.name,
39
+ snapshot: snapshot,
40
+ skip_rules: Ariadne::Accessibility.axe_rules_to_skip(
41
+ component: class_name,
42
+ scenario_name: scenario.name,
43
+ ),
44
+ }
45
+ end
46
+ end,
47
+ }
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nocov:
4
+ module Ariadne
5
+ module Static
6
+ # :nodoc:
7
+ module GenerateStatuses
8
+ class << self
9
+ def call
10
+ Ariadne::Component.descendants.sort_by(&:name).each_with_object({}) do |component, mem|
11
+ mem[component.to_s] = component.status.to_s
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end