ariadne_view_components 0.0.93.1 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +13 -4
- data/app/assets/javascripts/ariadne_view_components.js +14 -14
- data/app/assets/javascripts/ariadne_view_components.js.br +0 -0
- data/app/assets/javascripts/ariadne_view_components.js.gz +0 -0
- data/app/assets/javascripts/ariadne_view_components.js.map +1 -1
- data/app/assets/stylesheets/ariadne_view_components.css +1 -1
- data/app/assets/stylesheets/ariadne_view_components.css.br +0 -0
- data/app/assets/stylesheets/ariadne_view_components.css.gz +0 -0
- data/app/components/ariadne/base_component.rb +25 -22
- data/app/components/ariadne/behaviors/tooltipable.rb +12 -12
- data/app/components/ariadne/form/checkbox/component.rb +2 -2
- data/app/components/ariadne/form/group/component.rb +1 -1
- data/app/components/ariadne/form/radio_button/component.rb +2 -2
- data/app/components/ariadne/form/select/component.rb +1 -1
- data/app/components/ariadne/form/text_field/component.html.erb +2 -2
- data/app/components/ariadne/form/text_field/component.rb +14 -7
- data/app/components/ariadne/form/toggle/component.rb +2 -2
- data/app/components/ariadne/form/toggle_group/component.rb +1 -1
- data/app/components/ariadne/form/toggle_group/option/component.rb +1 -1
- data/app/components/ariadne/layout/grid/component.rb +1 -1
- data/app/components/ariadne/layout/grid/item/component.rb +2 -2
- data/app/components/ariadne/layout/label_block/component.rb +1 -1
- data/app/components/ariadne/layout/narrow/component.rb +1 -1
- data/app/components/ariadne/ui/accordion/component.rb +3 -1
- data/app/components/ariadne/ui/accordion/item/component.html.erb +10 -10
- data/app/components/ariadne/ui/accordion/item/component.rb +12 -3
- data/app/components/ariadne/ui/avatar/component.html.erb +9 -7
- data/app/components/ariadne/ui/avatar/component.rb +55 -7
- data/app/components/ariadne/ui/badge/component.rb +35 -16
- data/app/components/ariadne/ui/banner/component.html.erb +23 -0
- data/app/components/ariadne/ui/banner/component.rb +226 -0
- data/app/components/ariadne/ui/banner/component.ts +46 -0
- data/app/components/ariadne/ui/blankslate/component.html.erb +2 -2
- data/app/components/ariadne/ui/blankslate/component.rb +12 -1
- data/app/components/ariadne/ui/button/component.rb +35 -24
- data/app/components/ariadne/ui/card/body/component.rb +1 -1
- data/app/components/ariadne/ui/card/component.rb +11 -7
- data/app/components/ariadne/ui/card/footer/component.rb +1 -1
- data/app/components/ariadne/ui/card/header/component.html.erb +2 -2
- data/app/components/ariadne/ui/card/header/component.rb +25 -16
- data/app/components/ariadne/ui/clipboard_copy/component.html.erb +1 -0
- data/app/components/ariadne/ui/clipboard_copy/component.rb +17 -21
- data/app/components/ariadne/ui/clipboard_copy/component.ts +15 -0
- data/app/components/ariadne/ui/color_dot/component.html.erb +5 -5
- data/app/components/ariadne/ui/color_dot/component.rb +19 -4
- data/app/components/ariadne/ui/combobox/component.html.erb +1 -1
- data/app/components/ariadne/ui/combobox/component.rb +54 -23
- data/app/components/ariadne/ui/combobox/component.ts +2 -0
- data/app/components/ariadne/ui/dialog/body/component.html.erb +3 -0
- data/app/components/ariadne/ui/dialog/body/component.rb +28 -0
- data/app/components/ariadne/ui/dialog/component.html.erb +25 -24
- data/app/components/ariadne/ui/dialog/component.rb +87 -18
- data/app/components/ariadne/ui/dialog/component.ts +5 -1
- data/app/components/ariadne/ui/dialog/footer/component.html.erb +3 -0
- data/app/components/ariadne/ui/dialog/footer/component.rb +34 -0
- data/app/components/ariadne/ui/heroicon/component.rb +21 -21
- data/app/components/ariadne/ui/image/component.rb +11 -23
- data/app/components/ariadne/ui/link/component.html.erb +1 -3
- data/app/components/ariadne/ui/link/component.rb +17 -4
- data/app/components/ariadne/ui/list/component.html.erb +5 -9
- data/app/components/ariadne/ui/list/component.rb +31 -7
- data/app/components/ariadne/ui/list/item/component.rb +6 -5
- data/app/components/ariadne/ui/pagination/component.rb +1 -2
- data/app/components/ariadne/ui/popover/component.html.erb +1 -1
- data/app/components/ariadne/ui/popover/component.rb +31 -26
- data/app/components/ariadne/ui/relative_time/component.html.erb +1 -0
- data/app/components/ariadne/ui/{time_ago → relative_time}/component.rb +15 -15
- data/app/components/ariadne/ui/{time_ago → relative_time}/component.ts +1 -1
- data/app/components/ariadne/ui/shortcut/component.html.erb +0 -1
- data/app/components/ariadne/ui/shortcut/component.rb +31 -5
- data/app/components/ariadne/ui/shortcut/component.ts +1 -1
- data/app/components/ariadne/ui/skeleton/component.rb +2 -8
- data/app/components/ariadne/ui/stats_panel/component.html.erb +3 -3
- data/app/components/ariadne/ui/stats_panel/component.rb +25 -1
- data/app/components/ariadne/ui/stats_panel/item/component.html.erb +3 -3
- data/app/components/ariadne/ui/stats_panel/item/component.rb +6 -6
- data/app/components/ariadne/ui/table/cell/component.rb +1 -1
- data/app/components/ariadne/ui/table/row/component.rb +1 -1
- data/app/components/ariadne/ui/typography/component.rb +3 -1
- data/app/frontend/controllers/tooltip_controller.ts +8 -3
- data/app/frontend/stylesheets/ariadne_view_components.css +1 -0
- data/app/frontend/stylesheets/theme.css +88 -0
- data/app/frontend/utils/createController.ts +9 -0
- data/app/helpers/ariadne/color_helper.rb +158 -0
- data/app/helpers/ariadne/form_helper.rb +1 -0
- data/app/helpers/ariadne/size_helper.rb +7 -0
- data/app/lib/ariadne/attributes_helper.rb +4 -4
- data/app/lib/ariadne/view_component/style_variants.rb +1 -1
- data/app/lib/ariadne/view_helper.rb +0 -6
- data/lib/ariadne/accessibility.rb +64 -0
- data/lib/ariadne/forms/dsl/form_object.rb +5 -1
- data/lib/ariadne/forms/dsl/input.rb +1 -1
- data/lib/ariadne/static/generate_arguments.rb +54 -0
- data/lib/ariadne/static/generate_audited_at.rb +17 -0
- data/lib/ariadne/static/generate_constants.rb +19 -0
- data/lib/ariadne/static/generate_previews.rb +53 -0
- data/lib/ariadne/static/generate_statuses.rb +17 -0
- data/lib/ariadne/static/generate_structure.rb +279 -0
- data/lib/ariadne/static.rb +68 -0
- data/lib/ariadne/view_components/constants.rb +2 -2
- data/lib/ariadne/view_components/version.rb +1 -1
- data/lib/ariadne/view_components.rb +0 -51
- data/lib/ariadne/yard/component_manifest.rb +81 -81
- data/lib/ariadne/yard/component_ref.rb +1 -1
- data/lib/ariadne/yard/docs_helper.rb +24 -16
- data/lib/ariadne/yard/dry_initializer/common_handler.rb +103 -0
- data/lib/ariadne/yard/dry_initializer/option_handler.rb +38 -0
- data/lib/ariadne/yard/dry_initializer/param_handler.rb +57 -0
- data/lib/ariadne/yard/registry.rb +2 -5
- data/lib/ariadne/yard/{info_arch_docs_helper.rb → structure_docs_helper.rb} +5 -5
- data/lib/ariadne/yard.rb +20 -8
- data/lib/rubocop/config/default.yml +0 -3
- metadata +34 -37
- data/app/components/ariadne/behaviors/captionable.rb +0 -55
- data/app/components/ariadne/turbo/frame/component.html.erb +0 -3
- data/app/components/ariadne/turbo/frame/component.rb +0 -16
- data/app/components/ariadne/turbo/stream_action/component.html.erb +0 -4
- data/app/components/ariadne/turbo/stream_action/component.rb +0 -25
- data/app/components/ariadne/ui/data_table/component.html.erb +0 -1
- data/app/components/ariadne/ui/data_table/component.rb +0 -11
- data/app/components/ariadne/ui/flash/component.html.erb +0 -18
- data/app/components/ariadne/ui/flash/component.rb +0 -151
- data/app/components/ariadne/ui/flash/component.ts +0 -56
- data/app/components/ariadne/ui/overlay/component.html.erb +0 -12
- data/app/components/ariadne/ui/overlay/component.rb +0 -54
- data/app/components/ariadne/ui/overlay/component.ts +0 -92
- data/app/components/ariadne/ui/time_ago/component.html.erb +0 -1
- data/lib/ariadne/view_components/commands.rb +0 -90
- data/lib/ariadne/view_components/statuses.rb +0 -14
- data/lib/ariadne/view_components/upstream.rb +0 -19
- data/lib/ariadne/yard/lookbook_pages_backend.rb +0 -235
- data/lib/rubocop/cop/ariadne/no_tag_memoize.rb +0 -44
- data/static/arguments.yml +0 -879
- data/static/assets/view-components.svg +0 -18
- data/static/classes.yml +0 -211
- data/static/constants.json +0 -743
- data/static/statuses.json +0 -58
- data/static/tailwindcss.yml +0 -727
- /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
         | 
| @@ -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 | 
            -
                #  | 
| 47 | 
            -
                #    | 
| 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 | 
            -
                #  | 
| 72 | 
            -
                #    | 
| 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 | 
            -
                     | 
| 62 | 
            +
                    merge_tailwind_classes([default_styles, styles.fetch(name, "")])
         | 
| 63 63 | 
             
                  end
         | 
| 64 64 | 
             
                end
         | 
| 65 65 | 
             
              end
         | 
| @@ -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:  | 
| 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 =  | 
| 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
         |