ruby_event_store-browser 2.5.1 → 2.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d8751953fbf8d113ab312cf8bb35f847d5ac5d71dc1ad868263b900b6659801
4
- data.tar.gz: 3ac9153d0e7f0b6f1310e8aa2bed3e25d81361a53bc043b21ebf48615ec69dbe
3
+ metadata.gz: 1936ff546e0ad15d87e44b1db604c7249f56bbec6c4eb8837fdd9725b03724df
4
+ data.tar.gz: bae5fd36d624bfa6d34c655e0d37b93f992438f082a002a687840e17b9de9b42
5
5
  SHA512:
6
- metadata.gz: 2d18795af4c24ad82c42b9214964387884e1a5c525509a8f559b11679e5d222cfb60ac75daab7d17dbc0fb840f63edea3a9cc5d6c17be0ee1e501b5deae21322
7
- data.tar.gz: 97b5d401e981d3dfbc17c3ddaf8b80436ec18acd39aafdf679e004460d056da2201599cae84bf19ec3d6fa149f2e44d02a4dca915a20960008337ddc5e0c9528
6
+ metadata.gz: 34c5084fff038f9d503052eb7f74a0a96c035a90afa86c4051fec0ba18eb067187c9df87659a16bddfb6b2bef70dfe99e43b68a9fa392ab7463288fdddb85650
7
+ data.tar.gz: 42508d0dea023cdec765c5e399ec748609d2a9844a2ac3aa0b8ed4339fdb349419182309465593bb48ca31501c033e2a95ed8654cb4ff1b1053d64d903f643c4
@@ -130,11 +130,11 @@ module RubyEventStore
130
130
  end
131
131
 
132
132
  def json(body)
133
- [200, { "Content-Type" => "application/vnd.api+json" }, [JSON.dump(body.to_h)]]
133
+ [200, { "content-type" => "application/vnd.api+json" }, [JSON.dump(body.to_h)]]
134
134
  end
135
135
 
136
136
  def erb(template, **locals)
137
- [200, { "Content-Type" => "text/html;charset=utf-8" }, [ERB.new(template).result_with_hash(locals)]]
137
+ [200, { "content-type" => "text/html;charset=utf-8" }, [ERB.new(template).result_with_hash(locals)]]
138
138
  end
139
139
 
140
140
  def res_version
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Browser
5
+ class GemSource
6
+ attr_reader :path
7
+
8
+ def initialize(load_path)
9
+ @path =
10
+ load_path
11
+ .select { |entry| String === entry }
12
+ .find { |entry| entry.match? %r{ruby_event_store-browser(?:-\d\.\d\.\d)?/lib\z} }
13
+ end
14
+
15
+ def version
16
+ if from_rubygems?
17
+ path.split("/").fetch(-2).split("-").last
18
+ elsif from_git?
19
+ path.split("/").fetch(-3).split("-").last
20
+ end
21
+ end
22
+
23
+ def from_rubygems?
24
+ path.match? %r{/gems/ruby_event_store-browser-\d\.\d\.\d/lib\z}
25
+ end
26
+
27
+ def from_git?
28
+ path.match? %r{/bundler/gems/rails_event_store-[a-z0-9]{12}/ruby_event_store-browser/lib\z}
29
+ end
30
+ end
31
+ end
32
+ end
@@ -9,11 +9,20 @@ module RubyEventStore
9
9
  end
10
10
 
11
11
  def to_h
12
- { data: JsonApiEvent.new(event, parent_event_id).to_h }
12
+ {
13
+ data: [
14
+ JsonApiEvent.new(event, parent_event_id).to_h,
15
+ { relationships: { streams: { data: streams } } }
16
+ ].reduce(&:merge)
17
+ }
13
18
  end
14
19
 
15
20
  private
16
21
 
22
+ def streams
23
+ event_store.streams_of(event_id).map { |stream| { "id" => stream.name, "type" => "streams" } }
24
+ end
25
+
17
26
  attr_reader :event_store, :event_id
18
27
 
19
28
  def event
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyEventStore
2
4
  module Browser
3
5
  class GetStream
@@ -8,28 +10,17 @@ module RubyEventStore
8
10
  end
9
11
 
10
12
  def to_h
11
- {
12
- data: {
13
- id: stream_name,
14
- type: "streams",
15
- attributes: {
16
- related_streams: related_streams
17
- },
18
- relationships: {
19
- events: {
20
- links: {
21
- self: routing.paginated_events_from_stream_url(id: stream_name)
22
- }
23
- }
24
- }
25
- }
26
- }
13
+ { data: JsonApiStream.new(stream_name, events_from_stream_url, related_streams).to_h }
27
14
  end
28
15
 
29
16
  private
30
17
 
31
18
  attr_reader :stream_name, :routing, :related_streams_query
32
19
 
20
+ def events_from_stream_url
21
+ routing.paginated_events_from_stream_url(id: stream_name)
22
+ end
23
+
33
24
  def related_streams
34
25
  related_streams_query.call(stream_name) unless related_streams_query.equal?(DEFAULT_RELATED_STREAMS_QUERY)
35
26
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RubyEventStore
4
+ module Browser
5
+ class JsonApiStream
6
+ def initialize(stream_name, events_from_stream_url, related_streams)
7
+ @stream_name = stream_name
8
+ @events_from_stream_url = events_from_stream_url
9
+ @related_streams = related_streams
10
+ end
11
+
12
+ def to_h
13
+ {
14
+ id: stream_name,
15
+ type: "streams",
16
+ attributes: {
17
+ related_streams: related_streams
18
+ },
19
+ relationships: {
20
+ events: {
21
+ links: {
22
+ self: events_from_stream_url
23
+ }
24
+ }
25
+ }
26
+ }
27
+ end
28
+
29
+ private
30
+
31
+ attr_reader :stream_name, :events_from_stream_url, :related_streams
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RubyEventStore
2
4
  module Browser
3
5
  class Urls
@@ -20,6 +22,7 @@ module RubyEventStore
20
22
  @root_path = root_path
21
23
  @app_url = [host, root_path].compact.reduce(:+)
22
24
  @api_url = api_url || ("#{app_url}/api" if app_url)
25
+ @gem_source = GemSource.new($LOAD_PATH)
23
26
  end
24
27
 
25
28
  def events_url
@@ -45,11 +48,21 @@ module RubyEventStore
45
48
  end
46
49
 
47
50
  def browser_js_url
48
- "#{app_url}/ruby_event_store_browser.js"
51
+ name = "ruby_event_store_browser.js"
52
+ if gem_source.from_git?
53
+ cdn_file_url(name)
54
+ else
55
+ local_file_url(name)
56
+ end
49
57
  end
50
58
 
51
59
  def browser_css_url
52
- "#{app_url}/ruby_event_store_browser.css"
60
+ name = "ruby_event_store_browser.css"
61
+ if gem_source.from_git?
62
+ cdn_file_url(name)
63
+ else
64
+ local_file_url(name)
65
+ end
53
66
  end
54
67
 
55
68
  def bootstrap_js_url
@@ -59,6 +72,17 @@ module RubyEventStore
59
72
  def ==(o)
60
73
  self.class.eql?(o.class) && app_url.eql?(o.app_url) && api_url.eql?(o.api_url)
61
74
  end
75
+
76
+ private
77
+ attr_reader :gem_source
78
+
79
+ def local_file_url(name)
80
+ "#{app_url}/#{name}"
81
+ end
82
+
83
+ def cdn_file_url(name)
84
+ "https://cdn.railseventstore.org/#{gem_source.version}/#{name}"
85
+ end
62
86
  end
63
87
  end
64
88
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RubyEventStore
4
4
  module Browser
5
- VERSION = "2.5.1"
5
+ VERSION = "2.7.0"
6
6
  end
7
7
  end
@@ -10,7 +10,9 @@ end
10
10
 
11
11
  require_relative "browser/get_event"
12
12
  require_relative "browser/json_api_event"
13
+ require_relative "browser/json_api_stream"
13
14
  require_relative "browser/get_events_from_stream"
14
15
  require_relative "browser/get_stream"
15
16
  require_relative "browser/urls"
17
+ require_relative "browser/gem_source"
16
18
  require_relative "browser/router"
@@ -1 +1 @@
1
- /*! tailwindcss v3.1.4 | 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}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-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}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}*,: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-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: }::-webkit-backdrop{--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-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: }::backdrop{--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-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: }.absolute{position:absolute}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.mr-1{margin-right:.25rem}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.h-16{height:4rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.flex-1{flex:1 1 0%}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.p-0{padding:0}.px-8{padding-left:2rem;padding-right:2rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-4{padding-bottom:1rem}.pt-2{padding-top:.5rem}.pl-8{padding-left:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-bottom{vertical-align:bottom}.font-sans{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}.text-sm{font-size:.875rem;line-height:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.no-underline{-webkit-text-decoration-line:none;text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-red-700\/50:disabled{border-color:#b91c1c80}.disabled\:text-red-700\/50:disabled{color:#b91c1c80}
1
+ /*! tailwindcss v3.2.4 | 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}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-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}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}*,::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-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: }.absolute{position:absolute}.my-10{margin-top:2.5rem;margin-bottom:2.5rem}.ml-4{margin-left:1rem}.mt-8{margin-top:2rem}.mr-1{margin-right:.25rem}.inline-block{display:inline-block}.flex{display:flex}.table{display:table}.h-16{height:4rem}.min-h-screen{min-height:100vh}.w-full{width:100%}.flex-1{flex:1 1 0%}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.list-disc{list-style-type:disc}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-b{border-bottom-width:1px}.border-gray-400{--tw-border-opacity:1;border-color:rgb(156 163 175/var(--tw-border-opacity))}.border-red-700{--tw-border-opacity:1;border-color:rgb(185 28 28/var(--tw-border-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity))}.bg-red-700{--tw-bg-opacity:1;background-color:rgb(185 28 28/var(--tw-bg-opacity))}.p-0{padding:0}.px-8{padding-left:2rem;padding-right:2rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-8{padding-top:2rem;padding-bottom:2rem}.px-2{padding-left:.5rem;padding-right:.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-4{padding-bottom:1rem}.pt-2{padding-top:.5rem}.pl-8{padding-left:2rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-top{vertical-align:top}.align-bottom{vertical-align:bottom}.font-sans{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}.text-sm{font-size:.875rem;line-height:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-xs{font-size:.75rem;line-height:1rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.text-gray-800{--tw-text-opacity:1;color:rgb(31 41 55/var(--tw-text-opacity))}.text-gray-100{--tw-text-opacity:1;color:rgb(243 244 246/var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgb(156 163 175/var(--tw-text-opacity))}.text-red-700{--tw-text-opacity:1;color:rgb(185 28 28/var(--tw-text-opacity))}.no-underline{text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-red-700\/50:disabled{border-color:#b91c1c80}.disabled\:text-red-700\/50:disabled{color:#b91c1c80}