anchor_view_components 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/app/assets/builds/anchor-view-components.css +1 -1
  4. data/app/components/anchor/action_menu_component.html.erb +5 -2
  5. data/app/components/anchor/action_menu_component.rb +9 -5
  6. data/app/components/anchor/anchor_view_components.ts +2 -0
  7. data/app/components/anchor/autocomplete_component.rb +1 -1
  8. data/app/components/anchor/badge_component.html.erb +1 -1
  9. data/app/components/anchor/badge_component.rb +2 -0
  10. data/app/components/anchor/banner_component.html.erb +2 -2
  11. data/app/components/anchor/banner_component.rb +3 -2
  12. data/app/components/anchor/breadcrumbs/item_component.html.erb +2 -2
  13. data/app/components/anchor/breadcrumbs/item_component.rb +4 -0
  14. data/app/components/anchor/breadcrumbs_component.html.erb +1 -1
  15. data/app/components/anchor/breadcrumbs_component.rb +2 -0
  16. data/app/components/anchor/button_component.html.erb +10 -10
  17. data/app/components/anchor/button_component.rb +2 -2
  18. data/app/components/anchor/dialog_component.html.erb +1 -1
  19. data/app/components/anchor/dialog_component.rb +2 -0
  20. data/app/components/anchor/icon_component.html.erb +3 -3
  21. data/app/components/anchor/icon_component.rb +4 -0
  22. data/app/components/anchor/side_nav_component.en.yml +3 -0
  23. data/app/components/anchor/side_nav_component.html.erb +129 -0
  24. data/app/components/anchor/side_nav_component.rb +24 -0
  25. data/app/components/anchor/tab_bar/tab_component.html.erb +3 -3
  26. data/app/components/anchor/tab_bar/tab_component.rb +4 -0
  27. data/app/components/anchor/tab_bar_component.html.erb +1 -1
  28. data/app/components/anchor/tab_bar_component.rb +2 -0
  29. data/app/components/anchor/text_component.html.erb +4 -4
  30. data/app/components/anchor/text_component.rb +2 -1
  31. data/app/components/anchor/toast_component.html.erb +3 -3
  32. data/app/components/anchor/toast_component.rb +2 -0
  33. data/app/components/anchor/toggle_controller.ts +45 -0
  34. data/lib/anchor/view_components/engine.rb +0 -1
  35. data/lib/anchor/view_components/version.rb +1 -1
  36. data/previews/anchor/dialog_component_preview.rb +7 -0
  37. data/previews/anchor/side_nav_component_preview/default.html.erb +46 -0
  38. data/previews/anchor/side_nav_component_preview.rb +7 -0
  39. metadata +22 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3a15adaad5fae1588fafe2b1e7faa5e932a94fc038bff53f209af5f750510d69
4
- data.tar.gz: e21f6066edb78a763e046dafb87a4e480001f2cc8a8ed0a59b65577675946515
3
+ metadata.gz: 9e950ac411f08c0997f78051a9c0faab5bf256eaacb760fc4e3756f19c8015b6
4
+ data.tar.gz: 0a4b8341f154a6d7e539e08874789aae84e02d887713e29da8c68638e4967f6d
5
5
  SHA512:
6
- metadata.gz: 060b6d4e6660786980c29a22a09c18aa5330b3bebde67551b308a22d6cd21b553df308c48dac077da62e40501629b60fa64a240016a890b8d01f3c3a9f50ed69
7
- data.tar.gz: 61ec4de1ebcc9e11f8776a9f5d229e8ceb0d0988ce814e6653753f49255edead005672440dc9e728d4fedcc8b295d53009aa970bc50097b408e8f045f031e88f
6
+ metadata.gz: 6b2d5e5f9639bf1375f711c83c003bc69a12e383a8b86425975f0b147712bf80c80cd39d0df0b34d184b39da7d75776dd20b600df1f9ce828952f9e850bc7bb1
7
+ data.tar.gz: a3f324f948b07d9bac6c0b73b5e180695aff9da46ab5bd2fb8b48275ab02ee905ee3741e977ef0e07bb494d9b764f41a564a7b5e46184eff510ef8400bb4cdfc
data/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 - 2023-08-04
4
+
5
+ ### Added
6
+
7
+ - Side Nav component
8
+
9
+ ## 0.4.1 - 2023-08-01
10
+
11
+ ### Fixed
12
+
13
+ - Removed a trailing comma causing a syntax error
14
+
3
15
  ## 0.4.0 - 2023-08-01
4
16
 
5
17
  ### Added
@@ -1 +1 @@
1
- /*! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[popover]{position:fixed;z-index:2147483647;inset:0;padding:.25em;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;border:initial solid;border-color:initial;-o-border-image:initial;border-image:initial;background-color:canvas;color:initial;overflow:auto;margin:auto}[popover]:not(.\:popover-open){display:none}[popover]:is(dialog[open]){display:revert}@supports not (background-color:canvas){[popover]{background-color:#fff;color:#000}}@supports (width:-moz-fit-content){[popover]{width:-moz-fit-content;height:-moz-fit-content}}@supports not (inset:0){[popover]{top:0;left:0;right:0;bottom:0}}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:#101112;max-width:65ch}.prose :where(p):not(:where([class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:.875rem;line-height:1rem}.prose :where(video):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.btn{display:inline-flex;height:2.5rem;align-items:center;gap:.5rem;border-radius:.25rem;border-width:1px;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-left:1.25rem;padding-right:1.25rem;font-size:.75rem;line-height:1rem;font-weight:600;text-decoration-line:none}.btn:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.btn-primary{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-primary:hover{border-color:rgb(29 78 216/var(--tw-border-opacity));background-color:rgb(29 78 216/var(--tw-bg-opacity))}.btn-critical,.btn-primary:hover{--tw-border-opacity:1;--tw-bg-opacity:1}.btn-critical{border-color:rgb(191 47 29/var(--tw-border-opacity));background-color:rgb(191 47 29/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-critical:hover{--tw-border-opacity:1;border-color:rgb(148 38 25/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(148 38 25/var(--tw-bg-opacity))}.btn-text{color:rgb(39 110 241/var(--tw-text-opacity))}.btn-text,.btn-text:hover{border-color:#0000;background-color:initial;--tw-text-opacity:1}.btn-text:hover{color:rgb(30 84 183/var(--tw-text-opacity))}.btn-small{height:1.75rem;padding-right:.75rem}.btn-small,.btn-with-starting-icon{padding-left:.75rem}.btn-with-ending-icon{padding-right:.75rem}.toast{align-items:center}.toast>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.toast{border-radius:.25rem;padding:1rem;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.toast.\:popover-open{position:fixed;top:auto;bottom:2.5rem;margin-left:auto;margin-right:auto;display:flex;overflow:visible;border-width:0}.toast:popover-open{position:fixed;top:auto;bottom:2.5rem;margin-left:auto;margin-right:auto;display:flex;overflow:visible;border-width:0}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.bottom-0{bottom:0}.left-0{left:0}.z-10{z-index:10}.m-0{margin:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.\!ml-10{margin-left:2.5rem!important}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.contents{display:contents}.hidden{display:none}.h-12{height:3rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.max-h-\[200px\]{max-height:200px}.w-12{width:3rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-\[36rem\]{width:36rem}.w-full{width:100%}.w-max{width:-moz-max-content;width:max-content}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-\[1\.5px\]{border-width:1.5px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-grey-100{--tw-border-opacity:1;border-color:rgb(16 17 18/var(--tw-border-opacity))}.border-subdued{--tw-border-opacity:1;border-color:rgb(186 190 195/var(--tw-border-opacity))}.border-b-transparent{border-bottom-color:#0000}.bg-critical-subdued{--tw-bg-opacity:1;background-color:rgb(255 222 217/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-informational-subdued{--tw-bg-opacity:1;background-color:rgb(212 226 252/var(--tw-bg-opacity))}.bg-neutral{--tw-bg-opacity:1;background-color:rgb(235 237 240/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-success-subdued{--tw-bg-opacity:1;background-color:rgb(218 240 227/var(--tw-bg-opacity))}.bg-warning-subdued{--tw-bg-opacity:1;background-color:rgb(255 242 217/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.p-0{padding:0}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-1{padding-bottom:.25rem}.pb-6{padding-bottom:1.5rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:1.75rem}.text-3xl{font-size:2rem;line-height:2.5rem}.text-4xl{font-size:2.5rem;line-height:3rem}.text-base{font-size:.875rem;line-height:1rem}.text-lg{font-size:1rem;line-height:1.25rem}.text-sm{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-grey-50{--tw-text-opacity:1;color:rgb(156 161 165/var(--tw-text-opacity))}.text-primary{--tw-text-opacity:1;color:rgb(16 17 18/var(--tw-text-opacity))}.text-tertiary{--tw-text-opacity:1;color:rgb(156 161 165/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.opacity-70{opacity:.7}.shadow-\[inset_0_-1px\]{--tw-shadow:inset 0 -1px;--tw-shadow-colored:inset 0 -1px var(--tw-shadow-color)}.shadow-\[inset_0_-1px\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-gray-400{--tw-shadow-color:#9ca3af;--tw-shadow:var(--tw-shadow-colored)}.backdrop\:bg-grey-100\/50::backdrop{background-color:#10111280}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);left:0;right:0}.after\:-bottom-1:after{content:var(--tw-content);bottom:-.25rem}.after\:block:after{content:var(--tw-content);display:block}.after\:h-1:after{content:var(--tw-content);height:.25rem}.after\:bg-blue-500:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-grey-10:hover{--tw-bg-opacity:1;background-color:rgb(245 246 247/var(--tw-bg-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-grey-70:hover{--tw-text-opacity:1;color:rgb(98 102 106/var(--tw-text-opacity))}.group[aria-expanded][data-empty=true][data-loading=false] .group-aria-\[expanded\]\[data-empty\=\'true\'\]\[data-loading\=\'false\'\]\:block,.group[aria-expanded][data-loading=true] .group-aria-\[expanded\]\[data-loading\=\'true\'\]\:block{display:block}.group[data-empty=true] .group-data-\[empty\=\'true\'\]\:hidden,.group[data-loading=true] .group-data-\[loading\=\'true\'\]\:hidden{display:none}.popover-open\:block:popover-open{display:block}.\[\&\>\[aria-selected\=\'true\'\]\]\:bg-blue-20>[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(212 226 252/var(--tw-bg-opacity))}.\[\&\>li\]\:cursor-pointer>li{cursor:pointer}.\[\&\>li\]\:px-3>li{padding-left:.75rem;padding-right:.75rem}.\[\&\>li\]\:py-2>li{padding-top:.5rem;padding-bottom:.5rem}
1
+ /*! tailwindcss v3.3.3 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}[popover]{position:fixed;z-index:2147483647;inset:0;padding:.25em;width:-moz-fit-content;width:fit-content;height:-moz-fit-content;height:fit-content;border:initial solid;border-color:initial;-o-border-image:initial;border-image:initial;background-color:canvas;color:initial;overflow:auto;margin:auto}[popover]:not(.\:popover-open){display:none}[popover]:is(dialog[open]){display:revert}@supports not (background-color:canvas){[popover]{background-color:#fff;color:#000}}@supports (width:-moz-fit-content){[popover]{width:-moz-fit-content;height:-moz-fit-content}}@supports not (inset:0){[popover]{top:0;left:0;right:0;bottom:0}}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.prose{color:#101112;max-width:65ch}.prose :where(p):not(:where([class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose] *)){color:var(--tw-prose-lead);font-size:1.25em;line-height:1.6;margin-top:1.2em;margin-bottom:1.2em}.prose :where(a):not(:where([class~=not-prose] *)){color:var(--tw-prose-links);text-decoration:underline;font-weight:500}.prose :where(strong):not(:where([class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th strong):not(:where([class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose] *)){list-style-type:decimal;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol[type=A]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose] *)){list-style-type:disc;margin-top:1.25em;margin-bottom:1.25em;padding-left:1.625em}.prose :where(ol>li):not(:where([class~=not-prose] *))::marker{font-weight:400;color:var(--tw-prose-counters)}.prose :where(ul>li):not(:where([class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(hr):not(:where([class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose] *)){font-weight:500;font-style:italic;color:var(--tw-prose-quotes);border-left-width:.25rem;border-left-color:var(--tw-prose-quote-borders);quotes:"\201C""\201D""\2018""\2019";margin-top:1.6em;margin-bottom:1.6em;padding-left:1em}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:800;font-size:2.25em;margin-top:0;margin-bottom:.8888889em;line-height:1.1111111}.prose :where(h1 strong):not(:where([class~=not-prose] *)){font-weight:900;color:inherit}.prose :where(h2):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:700;font-size:1.5em;margin-top:2em;margin-bottom:1em;line-height:1.3333333}.prose :where(h2 strong):not(:where([class~=not-prose] *)){font-weight:800;color:inherit}.prose :where(h3):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;font-size:1.25em;margin-top:1.6em;margin-bottom:.6em;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(h4):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;margin-top:1.5em;margin-bottom:.5em;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose] *)){font-weight:700;color:inherit}.prose :where(img):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure>*):not(:where([class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose] *)){color:var(--tw-prose-captions);font-size:.875em;line-height:1.4285714;margin-top:.8571429em}.prose :where(code):not(:where([class~=not-prose] *)){color:var(--tw-prose-code);font-weight:600;font-size:.875em}.prose :where(code):not(:where([class~=not-prose] *)):before{content:"`"}.prose :where(code):not(:where([class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h1 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(blockquote code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(thead th code):not(:where([class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);overflow-x:auto;font-weight:400;font-size:.875em;line-height:1.7142857;margin-top:1.7142857em;margin-bottom:1.7142857em;border-radius:.375rem;padding:.8571429em 1.1428571em}.prose :where(pre code):not(:where([class~=not-prose] *)){background-color:initial;border-width:0;border-radius:0;padding:0;font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}.prose :where(pre code):not(:where([class~=not-prose] *)):before{content:none}.prose :where(pre code):not(:where([class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose] *)){width:100%;table-layout:auto;text-align:left;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.7142857}.prose :where(thead):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose] *)){color:var(--tw-prose-headings);font-weight:600;vertical-align:bottom;padding-right:.5714286em;padding-bottom:.5714286em;padding-left:.5714286em}.prose :where(tbody tr):not(:where([class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose] *)){vertical-align:initial}.prose :where(tfoot):not(:where([class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose] *)){vertical-align:top}.prose{--tw-prose-body:#374151;--tw-prose-headings:#111827;--tw-prose-lead:#4b5563;--tw-prose-links:#111827;--tw-prose-bold:#111827;--tw-prose-counters:#6b7280;--tw-prose-bullets:#d1d5db;--tw-prose-hr:#e5e7eb;--tw-prose-quotes:#111827;--tw-prose-quote-borders:#e5e7eb;--tw-prose-captions:#6b7280;--tw-prose-code:#111827;--tw-prose-pre-code:#e5e7eb;--tw-prose-pre-bg:#1f2937;--tw-prose-th-borders:#d1d5db;--tw-prose-td-borders:#e5e7eb;--tw-prose-invert-body:#d1d5db;--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:#9ca3af;--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:#9ca3af;--tw-prose-invert-bullets:#4b5563;--tw-prose-invert-hr:#374151;--tw-prose-invert-quotes:#f3f4f6;--tw-prose-invert-quote-borders:#374151;--tw-prose-invert-captions:#9ca3af;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:#d1d5db;--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:#4b5563;--tw-prose-invert-td-borders:#374151;font-size:.875rem;line-height:1rem}.prose :where(video):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(figure):not(:where([class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(li):not(:where([class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(ul>li):not(:where([class~=not-prose] *)){padding-left:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>:first-child):not(:where([class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>:last-child):not(:where([class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(hr+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h2+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h3+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(h4+*):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(thead th:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose] *)){padding:.5714286em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose] *)){padding-left:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose] *)){padding-right:0}.prose :where(.prose>:first-child):not(:where([class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose] *)){margin-bottom:0}.btn{display:inline-flex;height:2.5rem;align-items:center;gap:.5rem;border-radius:.25rem;border-width:1px;--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity));padding-left:1.25rem;padding-right:1.25rem;font-size:.75rem;line-height:1rem;font-weight:600;text-decoration-line:none}.btn:hover{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.btn-primary{--tw-border-opacity:1;border-color:rgb(37 99 235/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-primary:hover{border-color:rgb(29 78 216/var(--tw-border-opacity));background-color:rgb(29 78 216/var(--tw-bg-opacity))}.btn-critical,.btn-primary:hover{--tw-border-opacity:1;--tw-bg-opacity:1}.btn-critical{border-color:rgb(191 47 29/var(--tw-border-opacity));background-color:rgb(191 47 29/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.btn-critical:hover{--tw-border-opacity:1;border-color:rgb(148 38 25/var(--tw-border-opacity));--tw-bg-opacity:1;background-color:rgb(148 38 25/var(--tw-bg-opacity))}.btn-text{color:rgb(39 110 241/var(--tw-text-opacity))}.btn-text,.btn-text:hover{border-color:#0000;background-color:initial;--tw-text-opacity:1}.btn-text:hover{color:rgb(30 84 183/var(--tw-text-opacity))}.btn-small{height:1.75rem;padding-right:.75rem}.btn-small,.btn-with-starting-icon{padding-left:.75rem}.btn-with-ending-icon{padding-right:.75rem}.toast{align-items:center}.toast>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.toast{border-radius:.25rem;padding:1rem;--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.toast.\:popover-open{position:fixed;top:auto;bottom:2.5rem;margin-left:auto;margin-right:auto;display:flex;overflow:visible;border-width:0}.toast:popover-open{position:fixed;top:auto;bottom:2.5rem;margin-left:auto;margin-right:auto;display:flex;overflow:visible;border-width:0}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-y-0{top:0;bottom:0}.bottom-0{bottom:0}.left-0{left:0}.right-0{right:0}.z-10{z-index:10}.m-0{margin:0}.mx-2{margin-left:.5rem;margin-right:.5rem}.\!ml-10{margin-left:2.5rem!important}.ml-4{margin-left:1rem}.ml-auto{margin-left:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-auto{margin-top:auto}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.contents{display:contents}.hidden{display:none}.h-12{height:3rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.max-h-\[100dvh\]{max-height:100dvh}.max-h-\[200px\]{max-height:200px}.min-h-\[100dvh\]{min-height:100dvh}.w-12{width:3rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-\[15rem\]{width:15rem}.w-\[198px\]{width:198px}.w-\[36rem\]{width:36rem}.w-full{width:100%}.flex-auto{flex:1 1 auto}.flex-initial{flex:0 1 auto}.flex-none{flex:none}.flex-shrink-0{flex-shrink:0}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-4{gap:1rem}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px*var(--tw-divide-y-reverse))}.divide-solid>:not([hidden])~:not([hidden]){border-style:solid}.divide-white\/10>:not([hidden])~:not([hidden]){border-color:#ffffff1a}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.border{border-width:1px}.border-2{border-width:2px}.border-4{border-width:4px}.border-\[1\.5px\]{border-width:1.5px}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity))}.border-grey-100{--tw-border-opacity:1;border-color:rgb(16 17 18/var(--tw-border-opacity))}.border-subdued{--tw-border-opacity:1;border-color:rgb(186 190 195/var(--tw-border-opacity))}.border-b-transparent{border-bottom-color:#0000}.bg-critical-subdued{--tw-bg-opacity:1;background-color:rgb(255 222 217/var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity:1;background-color:rgb(17 24 39/var(--tw-bg-opacity))}.bg-green-700{--tw-bg-opacity:1;background-color:rgb(21 128 61/var(--tw-bg-opacity))}.bg-informational-subdued{--tw-bg-opacity:1;background-color:rgb(212 226 252/var(--tw-bg-opacity))}.bg-neutral{--tw-bg-opacity:1;background-color:rgb(235 237 240/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.bg-success-subdued{--tw-bg-opacity:1;background-color:rgb(218 240 227/var(--tw-bg-opacity))}.bg-teal{--tw-bg-opacity:1;background-color:rgb(28 73 87/var(--tw-bg-opacity))}.bg-warning-subdued{--tw-bg-opacity:1;background-color:rgb(255 242 217/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-white\/\[\.05\]{background-color:#ffffff0d}.bg-yellow-600{--tw-bg-opacity:1;background-color:rgb(202 138 4/var(--tw-bg-opacity))}.p-0{padding:0}.p-6{padding:1.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-0{padding-top:0;padding-bottom:0}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-4{padding-top:1rem;padding-bottom:1rem}.pb-1{padding-bottom:.25rem}.pb-6{padding-bottom:1.5rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:1.75rem}.text-3xl{font-size:2rem;line-height:2.5rem}.text-4xl{font-size:2.5rem;line-height:3rem}.text-base{font-size:.875rem;line-height:1rem}.text-lg{font-size:1rem;line-height:1.25rem}.text-sm{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.5rem}.text-xs{font-size:.75rem;line-height:1rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.leading-4{line-height:1rem}.text-critical{--tw-text-opacity:1;color:rgb(191 47 29/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgb(75 85 99/var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.text-grey-50{--tw-text-opacity:1;color:rgb(156 161 165/var(--tw-text-opacity))}.text-primary{--tw-text-opacity:1;color:rgb(16 17 18/var(--tw-text-opacity))}.text-tertiary{--tw-text-opacity:1;color:rgb(156 161 165/var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.text-white\/60{color:#fff9}.underline{text-decoration-line:underline}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.shadow-\[inset_0_-1px\]{--tw-shadow:inset 0 -1px;--tw-shadow-colored:inset 0 -1px var(--tw-shadow-color)}.shadow-\[inset_0_-1px\],.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px #0000001a,0 4px 6px -4px #0000001a;--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-gray-400{--tw-shadow-color:#9ca3af;--tw-shadow:var(--tw-shadow-colored)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[padding\]{transition-property:padding;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-\[width\]{transition-property:width;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-500{transition-duration:.5s}.backdrop\:bg-grey-100\/50::backdrop{background-color:#10111280}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);left:0;right:0}.after\:-bottom-1:after{content:var(--tw-content);bottom:-.25rem}.after\:block:after{content:var(--tw-content);display:block}.after\:h-1:after{content:var(--tw-content);height:.25rem}.after\:bg-blue-500:after{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(59 130 246/var(--tw-bg-opacity))}.hover\:bg-grey-10:hover{--tw-bg-opacity:1;background-color:rgb(245 246 247/var(--tw-bg-opacity))}.hover\:bg-white\/\[\.05\]:hover{background-color:#ffffff0d}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity))}.hover\:text-grey-70:hover{--tw-text-opacity:1;color:rgb(98 102 106/var(--tw-text-opacity))}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.group[aria-expanded][data-empty=true][data-loading=false] .group-aria-\[expanded\]\[data-empty\=\'true\'\]\[data-loading\=\'false\'\]\:block,.group[aria-expanded][data-loading=true] .group-aria-\[expanded\]\[data-loading\=\'true\'\]\:block{display:block}.group[data-empty=true] .group-data-\[empty\=\'true\'\]\:hidden,.group[data-loading=true] .group-data-\[loading\=\'true\'\]\:hidden{display:none}.popover-open\:block:popover-open{display:block}.\[\&\>\[aria-selected\=\'true\'\]\]\:bg-blue-20>[aria-selected=true]{--tw-bg-opacity:1;background-color:rgb(212 226 252/var(--tw-bg-opacity))}.\[\&\>li\]\:cursor-pointer>li{cursor:pointer}.\[\&\>li\]\:px-3>li{padding-left:.75rem;padding-right:.75rem}.\[\&\>li\]\:py-2>li{padding-top:.5rem;padding-bottom:.5rem}.side-nav-open .\[\.side-nav-open_\&\]\:w-\[3\.5rem\]{width:3.5rem}.side-nav-open .\[\.side-nav-open_\&\]\:rotate-180{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.side-nav-open .\[\.side-nav-open_\&\]\:px-4{padding-left:1rem;padding-right:1rem}.side-nav-open .\[\.side-nav-open_\&\]\:opacity-0{opacity:0}
@@ -5,9 +5,12 @@
5
5
  <%= show_button if show_button? %>
6
6
 
7
7
  <%= tag.div(
8
- class: "absolute left-0 w-max m-0 mt-1 px-0 py-1 bg-white rounded border border-subdued popover-open:block",
8
+ class: class_names(
9
+ "absolute left-0 m-0 mt-1 px-0 py-1 bg-white rounded border border-subdued popover-open:block",
10
+ menu_classes
11
+ ),
9
12
  data: { action: "toggle->action-menu#positionPopover" },
10
- id: @menu_id,
13
+ id: menu_id,
11
14
  popover: "auto",
12
15
  ) do %>
13
16
  <ul>
@@ -1,21 +1,25 @@
1
1
  module Anchor
2
2
  class ActionMenuComponent < Component
3
- renders_one :show_button, -> do
3
+ renders_one :show_button, lambda { |**kwargs|
4
4
  ButtonComponent.new(
5
- data: { action_menu_target: "button" },
6
- popovertarget: @menu_id
5
+ data: { action_menu_target: 'button' },
6
+ popovertarget: @menu_id,
7
+ **kwargs
7
8
  )
8
- end
9
+ }
9
10
  renders_many :items
10
11
 
11
- def initialize
12
+ def initialize(menu_classes: '', **kwargs)
12
13
  @menu_id = self.class.generate_id
14
+ @menu_classes = menu_classes
13
15
 
14
16
  super
15
17
  end
16
18
 
17
19
  private
18
20
 
21
+ attr_reader :menu_id, :menu_classes
22
+
19
23
  def render?
20
24
  items.present?
21
25
  end
@@ -4,6 +4,7 @@ import ActionMenuController from "./action_menu_controller";
4
4
  import AutocompleteController from "./autocomplete_controller";
5
5
  import DialogController from "./dialog_controller";
6
6
  import ToastController from "./toast_controller";
7
+ import ToggleController from "./toggle_controller";
7
8
  import { Application } from "@hotwired/stimulus";
8
9
 
9
10
  export function registerAnchorControllers(application: Application) {
@@ -11,4 +12,5 @@ export function registerAnchorControllers(application: Application) {
11
12
  application.register("autocomplete", AutocompleteController);
12
13
  application.register("dialog", DialogController);
13
14
  application.register("toast", ToastController);
15
+ application.register("toggle", ToggleController);
14
16
  }
@@ -21,7 +21,7 @@ module Anchor
21
21
  src:,
22
22
  readonly: false,
23
23
  input_data: {},
24
- list_data: {},
24
+ list_data: {}
25
25
  )
26
26
  @form_builder = form_builder
27
27
  @name = name
@@ -1,7 +1,7 @@
1
1
  <%= tag.span(
2
2
  class: class_names(
3
3
  "inline-block px-2 py-0.5 rounded-full text-xs",
4
- @variant,
4
+ variant,
5
5
  ),
6
6
  ) do %>
7
7
  <%= content %>
@@ -20,6 +20,8 @@ module Anchor
20
20
 
21
21
  private
22
22
 
23
+ attr_reader :variant
24
+
23
25
  def render?
24
26
  content.present?
25
27
  end
@@ -1,8 +1,8 @@
1
1
  <%= tag.div(
2
2
  class: class_names(
3
3
  "px-4 py-3 rounded",
4
- @variant,
5
- @classes,
4
+ variant,
5
+ classes,
6
6
  ),
7
7
  ) do %>
8
8
  <%= content %>
@@ -10,17 +10,18 @@ module Anchor
10
10
  }.freeze
11
11
  VARIANT_OPTIONS = VARIANT_MAPPINGS.keys
12
12
 
13
- def initialize(variant: VARIANT_DEFAULT, classes: nil)
13
+ def initialize(variant: VARIANT_DEFAULT, **kwargs)
14
14
  @variant = VARIANT_MAPPINGS[
15
15
  fetch_or_fallback(VARIANT_OPTIONS, variant, VARIANT_DEFAULT)
16
16
  ]
17
- @classes = classes
18
17
 
19
18
  super
20
19
  end
21
20
 
22
21
  private
23
22
 
23
+ attr_reader :variant
24
+
24
25
  def render?
25
26
  content.present?
26
27
  end
@@ -1,10 +1,10 @@
1
1
  <%= tag.li(
2
2
  aria: {
3
- current: { page: @active }
3
+ current: { page: active }
4
4
  },
5
5
  ) do %>
6
6
  <%= link_to(
7
- @href,
7
+ href,
8
8
  class: "flex"
9
9
  ) do %>
10
10
  <% if show_separator %>
@@ -10,6 +10,10 @@ module Anchor
10
10
 
11
11
  super
12
12
  end
13
+
14
+ private
15
+
16
+ attr_reader :href
13
17
  end
14
18
  end
15
19
  end
@@ -1,4 +1,4 @@
1
- <%= tag.nav aria: { label: @label } do %>
1
+ <%= tag.nav aria: { label: label } do %>
2
2
  <ol class="flex items-center">
3
3
  <% items.first.show_separator = false %>
4
4
  <% items.last.active = true %>
@@ -10,6 +10,8 @@ module Anchor
10
10
 
11
11
  private
12
12
 
13
+ attr_reader :label
14
+
13
15
  def render?
14
16
  items.present?
15
17
  end
@@ -1,15 +1,15 @@
1
1
  <%= content_tag(
2
- @tag,
3
- type: @type,
4
- href: @href,
5
- data: @data,
6
- form: @form,
7
- popovertarget: @popovertarget,
8
- popovertargetaction: @popovertargetaction,
2
+ tag,
3
+ type: type,
4
+ href: href,
5
+ data: data,
6
+ form: form,
7
+ popovertarget: popovertarget,
8
+ popovertargetaction: popovertargetaction,
9
9
  class: class_names(
10
- @size,
11
- @variant,
12
- @classes,
10
+ size,
11
+ variant,
12
+ classes,
13
13
  "btn-with-starting-icon" => starting_icon?,
14
14
  "btn-with-ending-icon" => ending_icon?,
15
15
  ),
@@ -42,7 +42,6 @@ module Anchor
42
42
  href: nil,
43
43
  size: SIZE_DEFAULT,
44
44
  variant: VARIANT_DEFAULT,
45
- data: {},
46
45
  form: nil,
47
46
  popovertarget: nil,
48
47
  popovertargetaction: nil,
@@ -54,7 +53,6 @@ module Anchor
54
53
  TYPE_OPTIONS, type, TYPE_DEFAULT
55
54
  )
56
55
  end
57
- @data = data
58
56
  @href = href if @tag == :a
59
57
  @size = SIZE_MAPPINGS[fetch_or_fallback(SIZE_OPTIONS, size, SIZE_DEFAULT)]
60
58
  @variant = VARIANT_MAPPINGS[
@@ -69,6 +67,8 @@ module Anchor
69
67
 
70
68
  private
71
69
 
70
+ attr_reader :tag, :type, :href, :size, :variant, :form, :popovertarget, :popovertargetaction
71
+
72
72
  def render?
73
73
  content.present?
74
74
  end
@@ -14,7 +14,7 @@
14
14
  variant: :heading_2xl,
15
15
  tag: :h1,
16
16
  id: title_id,
17
- ).with_content(@title) %>
17
+ ).with_content(title) %>
18
18
 
19
19
  <form class="contents" method="dialog">
20
20
  <%= tag.button(
@@ -14,6 +14,8 @@ module Anchor
14
14
 
15
15
  private
16
16
 
17
+ attr_reader :title
18
+
17
19
  def render?
18
20
  body?
19
21
  end
@@ -1,6 +1,6 @@
1
1
  <%= inline_svg_tag(
2
- "icons/#{@icon}.svg",
2
+ "icons/#{icon}.svg",
3
3
  aria_hidden: true,
4
- class: @classes,
5
- data: @data,
4
+ class: classes,
5
+ data: data,
6
6
  ) %>
@@ -5,5 +5,9 @@ module Anchor
5
5
 
6
6
  super
7
7
  end
8
+
9
+ private
10
+
11
+ attr_reader :icon
8
12
  end
9
13
  end
@@ -0,0 +1,3 @@
1
+ en:
2
+ hide_nav: Hide nav
3
+ show_nav: Show nav
@@ -0,0 +1,129 @@
1
+ <%= tag.div(
2
+ class: "flex min-h-[100dvh] max-h-[100dvh] overflow-hidden",
3
+ data: {
4
+ controller: "toggle",
5
+ toggle_toggle_class: "side-nav-open",
6
+ toggle_initial_label_value: t(".hide_nav"),
7
+ toggle_intermediate_label_value: t(".show_nav"),
8
+ },
9
+ ) do %>
10
+ <%= tag.header(
11
+ class: class_names(
12
+ "flex flex-shrink-0 w-[15rem] relative",
13
+ "[.side-nav-open_&]:w-[3.5rem] transition-[width] duration-500",
14
+ )
15
+ ) do %>
16
+ <%= tag.div(
17
+ class: class_names(
18
+ "bg-teal text-white w-[15rem] flex flex-col divide-y divide-solid divide-white/10 duration-500",
19
+ "absolute inset-y-0 right-0",
20
+ )
21
+ ) do %>
22
+ <%= tag.div(
23
+ class: class_names(
24
+ "flex-none flex items-center justify-between p-6",
25
+ "[.side-nav-open_&]:px-4 transition-[padding] duration-500",
26
+ ),
27
+ ) do %>
28
+ <%= inline_svg_tag(
29
+ "logo.svg",
30
+ aria: true,
31
+ data: { toggle_target: "inertify" },
32
+ size: "48",
33
+ title: "Buoy",
34
+ ) %>
35
+
36
+ <%= tag.button(
37
+ data: { action: "click->toggle#toggle" },
38
+ type: "button",
39
+ ) do %>
40
+ <%= tag.span(
41
+ t(".hide_nav"),
42
+ class: "sr-only",
43
+ data: { toggle_target: "label" },
44
+ ) %>
45
+
46
+ <%= render Anchor::IconComponent.new(
47
+ classes: "opacity-60 [.side-nav-open_&]:rotate-180 transition-transform duration-500",
48
+ icon: "fast-left-circle",
49
+ ) %>
50
+ <% end %>
51
+ <% end %>
52
+
53
+ <%= tag.nav(
54
+ aria: { label: "Apps" },
55
+ class: class_names(
56
+ "flex-none",
57
+ "[.side-nav-open_&]:opacity-0 transition duration-500",
58
+ ),
59
+ data: { toggle_target: "inertify" },
60
+ ) do %>
61
+ <%= render Anchor::ActionMenuComponent.new(classes: "py-4", menu_classes: "ml-4 w-[198px]") do |c| %>
62
+ <% c.with_show_button(
63
+ classes: "text-lg text-white w-full hover:text-white hover:bg-white/[.05] px-6 justify-between rounded-none",
64
+ full_width: true,
65
+ variant: :text,
66
+ ) do |button| %>
67
+ <% button.with_ending_icon(icon: "nav-arrow-down") %>
68
+ <%= apps_button_text %>
69
+ <% end %>
70
+
71
+ <% apps.each do |app| %>
72
+ <%= c.with_item { link_to(app[:label], app[:path], class: "block w-full") } %>
73
+ <% end %>
74
+ <% end %>
75
+ <% end %>
76
+
77
+ <% if nav_items.present? %>
78
+ <%= tag.nav(
79
+ aria: { label: "Main Menu" },
80
+ class: class_names(
81
+ "flex-initial py-4 overflow-y-auto",
82
+ "[.side-nav-open_&]:opacity-0 transition duration-500",
83
+ ),
84
+ data: { toggle_target: "inertify" },
85
+ ) do %>
86
+ <ul>
87
+ <% nav_items.each do |item| %>
88
+ <li>
89
+ <%= link_to(
90
+ item[:path],
91
+ class: class_names(
92
+ "block px-6 py-2 hover:bg-white/[.05] text-base font-semibold",
93
+ "bg-white/[.05]" => item[:active]
94
+ ),
95
+ aria: { current: item[:active] ? "page" : nil },
96
+ ) do %>
97
+ <%= item[:label] %>
98
+ <% end %>
99
+ </li>
100
+ <% end %>
101
+ </ul>
102
+ <% end %>
103
+ <% end %>
104
+
105
+ <%= tag.footer(
106
+ class: class_names(
107
+ "flex-none mt-auto p-6",
108
+ "[.side-nav-open_&]:opacity-0 transition duration-500",
109
+ ),
110
+ data: { toggle_target: "inertify" },
111
+ ) do %>
112
+ <%= tag.p(
113
+ "#{employee.first_name} #{employee.last_name.first}.",
114
+ class: "text-base font-semibold",
115
+ ) %>
116
+
117
+ <% if footer_links? %>
118
+ <div class="mt-2">
119
+ <%= footer_links %>
120
+ </div>
121
+ <% end %>
122
+ <% end %>
123
+ <% end %>
124
+ <% end %>
125
+
126
+ <main class="flex-auto overflow-y-auto">
127
+ <%= main_content %>
128
+ </main>
129
+ <% end %>
@@ -0,0 +1,24 @@
1
+ module Anchor
2
+ class SideNavComponent < Component
3
+ renders_one :main_content
4
+ renders_one :footer_links
5
+
6
+ def initialize(
7
+ apps:,
8
+ apps_button_text:,
9
+ nav_items:,
10
+ employee:
11
+ )
12
+ @apps = apps
13
+ @apps_button_text = apps_button_text
14
+ @nav_items = nav_items
15
+ @employee = employee
16
+
17
+ super
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :apps, :apps_button_text, :employee, :nav_items
23
+ end
24
+ end
@@ -1,11 +1,11 @@
1
1
  <%= link_to(
2
2
  content,
3
- @href,
3
+ href,
4
4
  aria: {
5
- current: { page: @active }
5
+ current: { page: active }
6
6
  },
7
7
  class: class_names(
8
8
  "inline-block px-5 py-4 text-sm font-semibold relative text-gray-600 hover:text-gray-900",
9
- "text-gray-900 after:block after:bg-blue-500 after:h-1 after:absolute after:-bottom-1 after:inset-x-0" => @active,
9
+ "text-gray-900 after:block after:bg-blue-500 after:h-1 after:absolute after:-bottom-1 after:inset-x-0" => active,
10
10
  )
11
11
  ) %>
@@ -7,6 +7,10 @@ module Anchor
7
7
 
8
8
  super
9
9
  end
10
+
11
+ private
12
+
13
+ attr_reader :href, :active
10
14
  end
11
15
  end
12
16
  end
@@ -1,5 +1,5 @@
1
1
  <%= tag.nav(
2
- aria: { label: @label },
2
+ aria: { label: label },
3
3
  class: "shadow-[inset_0_-1px] shadow-gray-400 pb-1",
4
4
  ) do %>
5
5
  <ul class="flex">
@@ -10,6 +10,8 @@ module Anchor
10
10
 
11
11
  private
12
12
 
13
+ attr_reader :label
14
+
13
15
  def render?
14
16
  tabs.present?
15
17
  end
@@ -1,8 +1,8 @@
1
1
  <%= content_tag(
2
- @tag,
3
- class: class_names(@variant, @classes),
4
- id: @id,
5
- data: @data
2
+ tag,
3
+ class: class_names(variant, classes),
4
+ id: id,
5
+ data: data
6
6
  ) do %>
7
7
  <%= content %>
8
8
  <% end %>
@@ -27,7 +27,6 @@ module Anchor
27
27
  @variant = VARIANT_MAPPING[
28
28
  fetch_or_fallback(VARIANT_OPTIONS, variant, VARIANT_DEFAULT)
29
29
  ]
30
-
31
30
  @tag = tag
32
31
  @id = id
33
32
 
@@ -36,6 +35,8 @@ module Anchor
36
35
 
37
36
  private
38
37
 
38
+ attr_reader :variant, :tag, :id
39
+
39
40
  def render?
40
41
  content.present?
41
42
  end
@@ -1,10 +1,10 @@
1
1
  <%= tag.div(
2
2
  class: class_names(
3
3
  "toast",
4
- @variant,
4
+ variant,
5
5
  ),
6
6
  data: { controller: "toast" },
7
- id: @id,
7
+ id: id,
8
8
  popover: "manual",
9
9
  ) do %>
10
10
  <% if icon? %>
@@ -20,7 +20,7 @@
20
20
  aria: { label: "Close" },
21
21
  class: "!ml-10",
22
22
  type: "button",
23
- popovertarget: @id,
23
+ popovertarget: id,
24
24
  popovertargetaction: "hide",
25
25
  ) do %>
26
26
  <%= render Anchor::IconComponent.new(icon: "cancel") %>
@@ -25,6 +25,8 @@ module Anchor
25
25
 
26
26
  private
27
27
 
28
+ attr_reader :variant, :id
29
+
28
30
  def render?
29
31
  content.present?
30
32
  end
@@ -0,0 +1,45 @@
1
+ import { Controller } from "@hotwired/stimulus";
2
+
3
+ export default class extends Controller<HTMLDivElement> {
4
+ static classes = ["toggle"]
5
+ static targets = ["inertify", "label"];
6
+ static values = {
7
+ initialLabel: String,
8
+ intermediateLabel: String,
9
+ };
10
+
11
+ declare readonly toggleClass: string;
12
+ declare readonly hasInertifyTarget: boolean;
13
+ declare readonly inertifyTargets: HTMLElement[];
14
+ declare readonly hasInitialLabelValue: boolean;
15
+ declare readonly hasIntermediateLabelValue: boolean;
16
+ declare readonly initialLabelValue: string;
17
+ declare readonly intermediateLabelValue: string;
18
+ declare readonly labelTarget: HTMLElement;
19
+
20
+ declare toggled: boolean;
21
+
22
+ initialize(): void {
23
+ this.toggled = false;
24
+ }
25
+
26
+ toggle = (): void => {
27
+ this.toggled = !this.toggled;
28
+
29
+ this.element.classList.toggle(this.toggleClass)
30
+
31
+ if (this.hasInertifyTarget) {
32
+ this.inertifyTargets.forEach((element) => {
33
+ element.toggleAttribute("inert");
34
+ });
35
+ }
36
+
37
+ if (this.hasInitialLabelValue && this.hasIntermediateLabelValue) {
38
+ if (this.toggled) {
39
+ this.labelTarget.innerHTML = this.intermediateLabelValue;
40
+ } else {
41
+ this.labelTarget.innerHTML = this.initialLabelValue;
42
+ }
43
+ }
44
+ }
45
+ }
@@ -1,4 +1,3 @@
1
- require "rails/engine"
2
1
  require "inline_svg"
3
2
 
4
3
  module Anchor
@@ -1,5 +1,5 @@
1
1
  module Anchor
2
2
  module ViewComponents
3
- VERSION = "0.4.0"
3
+ VERSION = "0.5.0"
4
4
  end
5
5
  end
@@ -15,5 +15,12 @@ module Anchor
15
15
  def with_footer
16
16
  render_with_template(template: "anchor_ui/dialog_preview/with_footer")
17
17
  end
18
+
19
+ def with_link
20
+ render Anchor::DialogComponent.new(title: 'Dialog Title') do |c|
21
+ c.with_show_button(classes: "all-unset underline").with_content("Show Dialog")
22
+ c.with_body.with_content("Content")
23
+ end
24
+ end
18
25
  end
19
26
  end
@@ -0,0 +1,46 @@
1
+ <% nav_items = [
2
+ "Case Review",
3
+ "Casing & Shipping",
4
+ "Daily Schedule",
5
+ "Donor Floor",
6
+ "Donor Qualification",
7
+ "Donors",
8
+ "Employees",
9
+ "Equipment",
10
+ "Physicals",
11
+ "Processing",
12
+ "Quality Control",
13
+ "Reception",
14
+ "Reports",
15
+ "Station Installation",
16
+ "Test Results",
17
+ ].map.with_index { |label, index| {label:, path: "#", active: index == 0} }
18
+
19
+ apps = [
20
+ {
21
+ label: "Centers",
22
+ path: "#"
23
+ },
24
+ {
25
+ label: "Corporate",
26
+ path: "#"
27
+ },
28
+ {
29
+ label: "Medical Device",
30
+ path: "#"
31
+ }
32
+ ]
33
+ %>
34
+ <%= render Anchor::SideNavComponent.new(
35
+ employee: OpenStruct.new(first_name: 'John', last_name: 'Doe'),
36
+ nav_items:,
37
+ apps:,
38
+ apps_button_text: "Medical Device",
39
+ ) do |c| %>
40
+ <% c.with_footer_links do %>
41
+ <%= link_to "About Device", "#", class: "text-base text-white/60 underline" %>
42
+ <% end %>
43
+ <% c.with_main_content do %>
44
+ Main content
45
+ <% end %>
46
+ <% end %>
@@ -0,0 +1,7 @@
1
+ module Anchor
2
+ class SideNavComponentPreview < ViewComponent::Preview
3
+ layout 'plain'
4
+
5
+ def default; end
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anchor_view_components
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Buoy Software
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-01 00:00:00.000000000 Z
11
+ date: 2023-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inline_svg
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 7.0.6
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 7.0.6
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -101,6 +115,9 @@ files:
101
115
  - app/components/anchor/panel_component.rb
102
116
  - app/components/anchor/prose_component.html.erb
103
117
  - app/components/anchor/prose_component.rb
118
+ - app/components/anchor/side_nav_component.en.yml
119
+ - app/components/anchor/side_nav_component.html.erb
120
+ - app/components/anchor/side_nav_component.rb
104
121
  - app/components/anchor/tab_bar/tab_component.html.erb
105
122
  - app/components/anchor/tab_bar/tab_component.rb
106
123
  - app/components/anchor/tab_bar_component.html.erb
@@ -110,6 +127,7 @@ files:
110
127
  - app/components/anchor/toast_component.html.erb
111
128
  - app/components/anchor/toast_component.rb
112
129
  - app/components/anchor/toast_controller.ts
130
+ - app/components/anchor/toggle_controller.ts
113
131
  - app/helpers/anchor/fetch_or_fallback_helper.rb
114
132
  - app/helpers/anchor/view_helper.rb
115
133
  - lib/anchor/view_components.rb
@@ -126,6 +144,8 @@ files:
126
144
  - previews/anchor/icon_component_preview.rb
127
145
  - previews/anchor/loading_indicator_component_preview.rb
128
146
  - previews/anchor/panel_component_preview.rb
147
+ - previews/anchor/side_nav_component_preview.rb
148
+ - previews/anchor/side_nav_component_preview/default.html.erb
129
149
  - previews/anchor/tab_bar_component_preview.rb
130
150
  - previews/anchor/table_preview/default.html.erb
131
151
  - previews/anchor/text_component_preview.rb