on master help sign in
everything working
commit753937620e3d1e52d22f687f448bbf2bc6928bb8 authorHunter Miller <hunter@hmiller.dev> dateMon 11 Jul 2022, 10:24 (4 years ago) parent52699e4
19 files changed+1618−240
desk/app/seek.hoon+90−31 desk/gen/metaphone.hoon+6 desk/lib/metaphone.hoon+190 desk/lib/sift.hoon+4−4 desk/sur/seek.hoon+5−5 desk/ted/publish-all.hoon+40 ui/package-lock.json+829−167 ui/package.json+4−1 ui/src/app.tsx+8−3 ui/src/components/Filter.tsx+55 ui/src/components/Layout.tsx+17 ui/src/components/Logo.tsx+13 ui/src/components/Meta.tsx+45 ui/src/components/SearchInput.tsx+2−2 ui/src/components/SearchList.tsx+20−5 ui/src/components/TagField.tsx+151 ui/src/pages/Post.tsx+106 ui/src/pages/Search.tsx+23−21 ui/src/types/seek.ts+10−1
desk/app/seek.hoon+90−31
@@ -2,6 +2,7 @@
22/+ gossip, default-agent, verb, dbug
33/+ *seek
44/+ sift
5+/+ m=metaphone
56/$ grab-listing %noun %directory-listing
67/$ grab-directory %noun %directory
78^- agent:gall
@@ -11,7 +12,7 @@
1112 +$ state-0
1213 $: %0
1314 =lookup:s
14− =trigrams:s
15+ =phonetics:s
1516 =trail:s
1617 =directory:s
1718 published=directory:s
@@ -101,10 +102,10 @@
101102 %declare
102103 =+ !<(=declare:s vase)
103104 di-abet:(publish declare di-core)
104− %declarations
105− =+ !<(declared=(list declare:s) vase)
106− =. di-core (roll declared publish)
107− cor
105+ :: %declarations
106+ :: =+ !<(declared=(list declare:s) vase)
107+ :: =. di-core (roll declared publish)
108+ :: cor
108109 ==
109110 ++ publish
110111 |= [=declare:s core=_di-core]
@@ -120,7 +121,7 @@
120121 ==
121122 ?: (~(has by directory) hash.listing)
122123 ~& 'Listing already exists.'
123− cor
124+ di-core
124125 =. published (~(put by directory) hash.listing listing)
125126 (di-publish:(di-abed:core hash.listing) listing)
126127 --
@@ -167,14 +168,24 @@
167168 |= =path
168169 ^- (unit (unit cage))
169170 ?+ path [~ ~]
170− [%x %lookup @ @ @ ~]
171+ [%x %lookup @ @ @ @ ~]
171172 =- ``search+!>(-)
172173 ^- search:s
173− =/ start (slav %ud i.t.t.t.path)
174− =/ limit (slav %ud i.t.t.t.t.path)
174+ =/ filter
175+ %+ rash i.t.t.path
176+ (perk [%app %group %content %other %all ~])
177+ =/ term `@t`(slav %t i.t.t.t.path)
178+ =/ start (slav %ud i.t.t.t.t.path)
179+ =/ limit (slav %ud i.t.t.t.t.t.path)
175180 :: expects encoded @t values)
176− =/ term `@t`(slav %t i.t.t.path)
177− =/ all (get-listings (get-hashes term))
181+ =/ all
182+ %+ skim
183+ %- get-listings
184+ %- get-hashes
185+ %- sort-entries
186+ (get-entries term)
187+ |= =listing:s
188+ |(=(filter %all) =(filter type.post.listing))
178189 =/ listings (swag [start limit] all)
179190 :* listings
180191 start
@@ -183,12 +194,61 @@
183194 (lent all)
184195 ==
185196 ==
186−++ get-hashes
197+++ get-entries
198+ |= =key:s
199+ ^- (list entry:s)
200+ =/ title (norm:sift key) :: full query
201+ =/ parts (sift:sift key) :: split query
202+ =/ title-entries
203+ %- malt
204+ %+ weld
205+ (get-phonetics title)
206+ (~(gut by lookup) title *(list entry:s))
207+ %~ tap by
208+ %-
209+ %~ uni by :: union and prefer title entries (better rank)
210+ %- malt
211+ %- zing
212+ %+ turn
213+ parts
214+ |= word=@t
215+ %+ turn
216+ %+ weld
217+ (get-phonetics word)
218+ (~(gut by lookup) word *(list entry:s))
219+ |= =entry:s
220+ (derank entry 10)
221+ title-entries
222+++ get-phonetics
187223 |= =key:s
224+ ^- (list entry:s)
225+ =/ keys
226+ %+ skim
227+ %~ tap in
228+ (~(gut by phonetics) (utter:m key) *(set key:s))
229+ |= [word=key:s]
230+ !=(key word)
231+ %+ roll
232+ keys
233+ |= [word=key:s entries=(list entry:s)]
234+ %+ weld
235+ entries
236+ %+ turn
237+ (~(gut by lookup) word *(list entry:s))
238+ |= =entry:s
239+ (derank entry 10)
240+++ derank
241+ |= [=entry:s offset=@ud]
242+ [hash.entry (add rank.entry offset)] :: phonetically similar should be lower
243+++ sort-entries
244+ |= entries=(list entry:s)
245+ %+ sort entries
246+ |= [a=entry:s b=entry:s]
247+ (lth rank.a rank.b)
248+++ get-hashes
249+ |= entries=(list entry:s)
188250 %+ turn
189− %+ sort (~(gut by lookup) key *(list entry:s))
190− |= [a=entry:s b=entry:s]
191− (gte rank.a rank.b)
251+ entries
192252 |=(=entry:s hash.entry)
193253++ get-listings
194254 |= l=(list hash)
@@ -210,16 +270,20 @@
210270 =/ entries=lookup:s
211271 %- malt
212272 %- zing
213− :~ ~[[title.post.l ~[[hash rank=0]]]]
273+ :~ ~[[(crip (cass (trip title.post.l))) ~[[hash rank=0]]]]
274+ %+ turn
275+ (sift:sift title.post.l)
276+ |= word=@t
277+ [word ~[[hash rank=1]]]
214278 %+ turn
215279 tags.post.l
216280 |= tag=@t
217− [tag ~[[hash rank=1]]]
281+ [(norm:sift tag) ~[[hash rank=2]]]
218282 %+ turn
219283 (sift:sift description.post.l)
220284 |= word=@t
221− [word ~[[hash rank=2]]]
222− ~[[type.post.l ~[[hash rank=3]]]]
285+ [word ~[[hash rank=3]]]
286+ ~[[type.post.l ~[[hash rank=4]]]]
223287 ==
224288 =/ keys ~(tap in ~(key by entries))
225289 =. trail (~(put by trail) hash keys)
@@ -229,18 +293,13 @@
229293 |= [=key:s value=(list entry:s)]
230294 ?. (~(has by entries) key) value
231295 (weld value (~(got by entries) key))
232− =. trigrams
233− %+ roll
234− %+ snoc
235− %+ turn keys
236− |= =key:s
237− %- malt
238− %+ turn (iching key)
239− |= =trigram:s
240− [trigram (silt ~[key])]
241− trigrams
242− |= [next=trigrams:s t=trigrams:s]
243− %- (~(uno by t) next)
296+ =. phonetics
297+ %-
298+ %- ~(uno by phonetics)
299+ %- malt
300+ %+ turn keys
301+ |= =key:s
302+ [(utter:m key) (silt ~[key])]
244303 |= [k=key:s v=(set key:s) w=(set key:s)]
245304 (~(uni in v) w)
246305 di-core
desk/gen/metaphone.hoonnew file+6
@@ -0,0 +1,6 @@
1+/+ *metaphone
2+:- %say
3+|= $: [now=@da eny=@uv =beak]
4+ [[word=@t ~] ~]
5+ ==
6+noun+(utter word)
desk/lib/metaphone.hoonnew file+190
@@ -0,0 +1,190 @@
1+|%
2+++ utter
3+ |= corpus=@t
4+ ^- @t
5+ =/ norm (cuss (trip corpus))
6+ ~(phone core [norm *tape 0])
7+++ core
8+ |_ [text=tape chars=tape index=@ud]
9+ ++ phone
10+ ?: =(current 'A')
11+ ?: =(next 'E') (jump2 'E')
12+ (jump 'A')
13+ ?:
14+ ?& =(next 'N')
15+ ?| =(current 'G')
16+ =(current 'K')
17+ =(current 'P')
18+ ==
19+ ==
20+ (jump2 'N')
21+ ?: =(current 'W')
22+ ?: =(next 'R') (jump2 'R')
23+ ?: =(next 'H') (jump2 current)
24+ ?: (vowel next) (jump2 'W')
25+ recite
26+ ?: =(current 'X') (jump 'S')
27+ ?:
28+ ?| =(current 'E')
29+ =(current 'I')
30+ =(current 'O')
31+ =(current 'U')
32+ ==
33+ (jump current)
34+ recite
35+ ++ recite
36+ ?: (gte index (lent text))
37+ (crip chars)
38+ :: B -> B unless in MB
39+ ?: &(=(current 'B') !=(prev 'M'))
40+ (jump 'B')
41+ :: 'sh' if -CIA- or -CH, but not SCH, except SCHW (SCHW is handled in S)
42+ :: S if -CI-, -CE- or -CY- dropped if -SCI-, SCE-, -SCY- (handed in S)
43+ :: else K
44+ ?: =(current 'C')
45+ ?: (soft next)
46+ :: C[IEY]
47+ ?: &(=(next 'I') =((at 2 &) 'A'))
48+ :: CIA
49+ (jump sh)
50+ ?: !=(prev 'S')
51+ (jump 'S')
52+ advance
53+ ?: =(next 'H')
54+ (jump2 sh)
55+ (jump 'K')
56+ :: J if in -DGE-, -DGI- or -DGY-, else T
57+ ?: =(current 'D')
58+ ?: &(=(next 'G') (soft (at 2 &)))
59+ (jump2 'J')
60+ (jump 'T')
61+ :: F if in -GH and not B--GH, D--GH, -H--GH, -H---GH
62+ :: else dropped if -GNED, -GN,
63+ :: else dropped if -DGE-, -DGI- or -DGY- (handled in D)
64+ :: else J if in -GE-, -GI, -GY and not GG
65+ :: else K
66+ ?: =(current 'G')
67+ ?: =(next 'H')
68+ ?: |(!(no-gh-to-f (at 3 |)) =((at 4 |) 'H'))
69+ (jump2 'F')
70+ advance
71+ ?: =(next 'N')
72+ ?: !&(=((at 2 &) 'E') =((at 3 &) 'D'))
73+ (jump 'K')
74+ advance
75+ ?: &((soft next) !=(prev 'G'))
76+ (jump 'J')
77+ (jump 'K')
78+ :: H if before a vowel and not after C,G,P,S,T
79+ ?: &(=(current 'H') (vowel next) !(dipthong-h prev))
80+ (jump 'H')
81+ :: Dropped if after C, else K
82+ ?: &(=(current 'K') !=(prev 'C'))
83+ (jump 'K')
84+ :: F if before H, else P
85+ ?: =(current 'P')
86+ ?: =(next 'H')
87+ (jump 'F')
88+ (jump 'P')
89+ :: K
90+ ?: =(current 'Q')
91+ (jump 'K')
92+ :: 'sh' in -SH-, -SIO- or -SIA- or -SCHW-, else S
93+ ?: =(current 'S')
94+ ?: &(=(next 'I') |(=((at 2 &) 'O') =((at 2 &) 'A')))
95+ (jump sh)
96+ ?: =(next 'H')
97+ (jump2 sh)
98+ (jump 'S')
99+ :: sh' in -TIA- or -TIO-, else 'th' before H, else T
100+ ?: =(current 'T')
101+ ?: &(=(next 'I') |(=((at 2 &) 'O') =((at 2 &) 'A')))
102+ (jump sh)
103+ ?: =(next 'H')
104+ (jump2 th)
105+ ?: !&(=(next 'C') =((at 2 &) 'H'))
106+ (jump 'T')
107+ advance
108+ :: F
109+ ?: =(current 'V')
110+ (jump 'F')
111+ ?: &(=(current 'W') (vowel next))
112+ (jump 'W')
113+ :: KS
114+ ?: =(current 'X')
115+ (jump 'KS')
116+ :: Y if followed by a vowel
117+ ?: &(=(current 'Y') (vowel next))
118+ (jump 'Y')
119+ :: S
120+ ?: =(current 'Z')
121+ (jump 'S')
122+ ?:
123+ ?| =(current 'F')
124+ =(current 'J')
125+ =(current 'L')
126+ =(current 'M')
127+ =(current 'N')
128+ =(current 'R')
129+ ==
130+ (jump current)
131+ advance
132+ ++ advance
133+ =. index +(index)
134+ recite
135+ ++ jump
136+ |= char=@t
137+ =. chars (snoc chars char)
138+ =. index +(index)
139+ recite
140+ ++ jump2
141+ |= char=@t
142+ =. chars (snoc chars char)
143+ =. index (add index 2)
144+ recite
145+ ++ current (snag index text)
146+ ++ next
147+ ?: (gte index (dec (lent text))) ''
148+ (snag +(index) text)
149+ ++ prev
150+ ?: (lte index 0) ''
151+ (snag (dec index) text)
152+ ++ at
153+ |= [offset=@ud forward=?]
154+ ?: forward
155+ ?: (gth (add index offset) (dec (lent text))) ''
156+ (snag (add index offset) text)
157+ ?: (lth (sub index offset) 0) ''
158+ (snag (sub index offset) text)
159+ --
160+++ soft
161+ |= char=@t
162+ ?| =(char 'E')
163+ =(char 'I')
164+ =(char 'Y')
165+ ==
166+++ vowel
167+ |= char=@t
168+ ?| =(char 'A')
169+ =(char 'E')
170+ =(char 'I')
171+ =(char 'O')
172+ =(char 'U')
173+ ==
174+++ dipthong-h
175+ |= char=@t
176+ ?| =(char 'C')
177+ =(char 'G')
178+ =(char 'P')
179+ =(char 'S')
180+ =(char 'T')
181+ ==
182+++ no-gh-to-f
183+ |= char=@t
184+ ?| =(char 'B')
185+ =(char 'D')
186+ =(char 'H')
187+ ==
188+++ sh 'X'
189+++ th '0'
190+--
desk/lib/sift.hoon+4−4
@@ -12,9 +12,8 @@
1212++ split
1313 |= corpus=@t
1414 ^- (list @t)
15− ~& (norm corpus)
1615 %+ rash (norm corpus)
17− (more ace (cook crip (plus allowed)))
16+ (more ace (cook crip (plus ;~(pose aln hep))))
1817++ allowed ;~(pose aln hep ace)
1918++ banned ;~(less allowed prn)
2019++ expunge
@@ -22,9 +21,10 @@
2221 ^- (list @t)
2322 %- zing
2423 %+ rash corpus
25− %- star
24+ %- plus
2625 ;~ pose
27− ;~(sfix allowed (plus banned))
26+ ;~(pfix (plus banned) (star allowed))
27+ ;~(sfix (star allowed) (plus banned))
2828 (plus allowed)
2929 ==
3030++ trimall
desk/sur/seek.hoon+5−5
@@ -2,7 +2,7 @@
22+$ key @t :: keyword that points to listings
33+$ hash @uv :: @uv version of shax result
44+$ rank @ud :: @ud representing priority of listing
5−+$ trigram @t :: @t consisting of three characters taken from a word
5++$ phonetic @t :: @t consisting of phonetic characters from metaphone
66::
77:: an entry points to a listing hash and provides
88:: a semblance of priority for the listing
@@ -52,10 +52,10 @@
5252::
5353+$ lookup (map key (list entry))
5454::
55−:: trigrams act as a way to account for spelling errors. we keep a map
56−:: of trigram to set of lookup keys. we take the query's trigrams and
57−:: count how many times a particular key comes up.
58−+$ trigrams (map trigram (set key))
55+:: phonetics act as a way to account for spelling errors. we keep a map
56+:: of phonetic to set of lookup keys. we take the query's phonetics and
57+:: use that to add other words to the results.
58++$ phonetics (map phonetic (set key))
5959::
6060:: trail is a way for us to know all the keys required to update
6161:: a listing with the new hash of it's contents
desk/ted/publish-all.hoonnew file+40
@@ -0,0 +1,40 @@
1+/- spider
2+/- s=seek
3+/+ *strandio
4+=, strand=strand:spider
5+=/ posts
6+ ^- (list declare:s)
7+ :~ :- %friends
8+ ['networked subject' %group 'web+urbitgraph://group/~matwet/networked-subject' 'https://subject.network | networked subject' ~['hosting' 'networking' 'urbit' 'ops'] 'https://urbits3.ams3.digitaloceanspaces.com/sitful-hatred/2022.7.07..17.15.52-ns.png']
9+ :- %friends
10+ ['Hooniverse' %group 'web+urbitgraph://group/~hiddev-dannut/new-hooniverse' 'Community based Hoon learning for all levels. For discussion of Hoon specific to Uqbar, join ~hiddev-dannut/uhoon' ~['hoon' 'dev' 'urbit' 'programming' 'education'] 'https://i.imgur.com/ghThlz7.png']
11+ :- %friends
12+ ['Hollow Mars Theory' %group 'web+urbitgraph://group/~rabsef-bicrym/hollow-mars-theory' 'Definitely NOT a Conspiracy Chat' ~['conspiracies' 'ufos' 'steel beams'] '']
13+ :- %friends
14+ ['celestial systems' %group 'web+urbitgraph://group/~nocsyx-lassul/celestial-systems' 'A place for pilots who are building hosting providers' ~['hosting' 'ops' 'urbit'] '']
15+ :- %friends
16+ ['Structure' %group 'web+urbitgraph://group/~fabled-faster/structure' 'Urbit Structural Design and Engineering Group. Always Thinking About Mechanics.' ~['design' 'ux' 'hci' 'urbit'] 'https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2022.1.27..17.59.43-image.png']
17+ :- %friends
18+ ['The Marketplace' %group 'web+urbitgraph://group/~tirrel/the-marketplace' 'Welcome to The Marketplace, featuring The Pit, Urbit\'s first open-outcry market!' ~['urbit' 'market' 'sell' 'buy'] 'https://snipboard.io/U0IYyi.jpg']
19+ :- %friends
20+ ['The Forge' %group 'web+urbitgraph://group/~middev/the-forge' 'pale fire computing' ~['dev' 'programming' 'hoon' 'urbit'] 'https://nyc3.digitaloceanspaces.com/archiv/littel-wolfur/2021.5.06..21.01.58-the%20forge.png']
21+ :- %friends
22+ ['UFORIA' %group 'web+urbitgraph://group/~tiplec-lacnyx/ufora' 'UFO Research, Investigations, and Analysis' ~['UFO' 'conspiracies' 'research'] 'https://tiplec-lacnyx.nyc3.digitaloceanspaces.com/tiplec-lacnyx/2021.12.27..06.09.47-change1.jpg']
23+ :- %friends
24+ ['Urbit Community' %group 'web+urbitgraph://group/~bitbet-bolbel/urbit-community' 'World hub, help desk, meet and greet, etc.' ~['general' 'urbit' 'community' 'help'] 'https://fabled-faster.nyc3.digitaloceanspaces.com/fabled-faster/2021.4.02..21.52.41-UC.png']
25+ :- %friends
26+ ['Urbytes' %group 'web+urbitgraph://group/~nartes-fasrum/urbytes' 'We feed and water Mars.' ~['cooking' 'food' 'beverages' 'peanut butter eggs'] '']
27+ ==
28+^- thread:spider
29+|= arg=vase
30+=/ m (strand ,vase)
31+^- form:m
32+;< our=@p bind:m get-our
33+;< ~ bind:m
34+ %- send-raw-cards
35+ ^- (list card:agent:gall)
36+ %+ turn
37+ posts
38+ |= =declare:s
39+ [%pass /poke %agent [our %seek] %poke [%declare !>(declare)]]
40+(pure:m !>(~))
ui/package-lock.json+829−167
@@ -10,6 +10,7 @@
1010 "dependencies": {
1111 "@heroicons/react": "^1.0.6",
1212 "@radix-ui/react-dropdown-menu": "^0.1.6",
13+ "@radix-ui/react-select": "^0.1.1",
1314 "@radix-ui/react-toggle-group": "^0.1.5",
1415 "@urbit/api": "^2.0.0",
1516 "@urbit/http-api": "^2.0.0",
@@ -18,8 +19,10 @@
1819 "lodash.debounce": "^4.0.8",
1920 "react": "^17.0.2",
2021 "react-dom": "^17.0.2",
22+ "react-hook-form": "^7.33.1",
2123 "react-query": "^3.39.1",
22− "react-router-dom": "^6.3.0"
24+ "react-router-dom": "^6.3.0",
25+ "react-select": "^5.4.0"
2326 },
2427 "devDependencies": {
2528 "@types/lodash.debounce": "^4.0.7",
@@ -38,7 +41,6 @@
3841 "version": "2.2.0",
3942 "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
4043 "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
41− "dev": true,
4244 "dependencies": {
4345 "@jridgewell/gen-mapping": "^0.1.0",
4446 "@jridgewell/trace-mapping": "^0.3.9"
@@ -51,7 +53,6 @@
5153 "version": "7.18.6",
5254 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
5355 "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
54− "dev": true,
5556 "dependencies": {
5657 "@babel/highlight": "^7.18.6"
5758 },
@@ -63,7 +64,6 @@
6364 "version": "7.18.6",
6465 "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
6566 "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==",
66− "dev": true,
6767 "engines": {
6868 "node": ">=6.9.0"
6969 }
@@ -72,7 +72,6 @@
7272 "version": "7.18.6",
7373 "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz",
7474 "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==",
75− "dev": true,
7675 "dependencies": {
7776 "@ampproject/remapping": "^2.1.0",
7877 "@babel/code-frame": "^7.18.6",
@@ -102,7 +101,6 @@
102101 "version": "7.18.7",
103102 "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz",
104103 "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==",
105− "dev": true,
106104 "dependencies": {
107105 "@babel/types": "^7.18.7",
108106 "@jridgewell/gen-mapping": "^0.3.2",
@@ -116,7 +114,6 @@
116114 "version": "0.3.2",
117115 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
118116 "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
119− "dev": true,
120117 "dependencies": {
121118 "@jridgewell/set-array": "^1.0.1",
122119 "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -130,7 +127,6 @@
130127 "version": "7.18.6",
131128 "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz",
132129 "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==",
133− "dev": true,
134130 "dependencies": {
135131 "@babel/compat-data": "^7.18.6",
136132 "@babel/helper-validator-option": "^7.18.6",
@@ -148,7 +144,6 @@
148144 "version": "7.18.6",
149145 "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz",
150146 "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==",
151− "dev": true,
152147 "engines": {
153148 "node": ">=6.9.0"
154149 }
@@ -157,7 +152,6 @@
157152 "version": "7.18.6",
158153 "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz",
159154 "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==",
160− "dev": true,
161155 "dependencies": {
162156 "@babel/template": "^7.18.6",
163157 "@babel/types": "^7.18.6"
@@ -170,7 +164,6 @@
170164 "version": "7.18.6",
171165 "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
172166 "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
173− "dev": true,
174167 "dependencies": {
175168 "@babel/types": "^7.18.6"
176169 },
@@ -182,7 +175,6 @@
182175 "version": "7.18.6",
183176 "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
184177 "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
185− "dev": true,
186178 "dependencies": {
187179 "@babel/types": "^7.18.6"
188180 },
@@ -194,7 +186,6 @@
194186 "version": "7.18.6",
195187 "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
196188 "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
197− "dev": true,
198189 "dependencies": {
199190 "@babel/helper-environment-visitor": "^7.18.6",
200191 "@babel/helper-module-imports": "^7.18.6",
@@ -213,7 +204,6 @@
213204 "version": "7.18.6",
214205 "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz",
215206 "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==",
216− "dev": true,
217207 "engines": {
218208 "node": ">=6.9.0"
219209 }
@@ -222,7 +212,6 @@
222212 "version": "7.18.6",
223213 "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
224214 "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
225− "dev": true,
226215 "dependencies": {
227216 "@babel/types": "^7.18.6"
228217 },
@@ -234,7 +223,6 @@
234223 "version": "7.18.6",
235224 "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
236225 "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
237− "dev": true,
238226 "dependencies": {
239227 "@babel/types": "^7.18.6"
240228 },
@@ -246,7 +234,6 @@
246234 "version": "7.18.6",
247235 "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
248236 "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
249− "dev": true,
250237 "engines": {
251238 "node": ">=6.9.0"
252239 }
@@ -255,7 +242,6 @@
255242 "version": "7.18.6",
256243 "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
257244 "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
258− "dev": true,
259245 "engines": {
260246 "node": ">=6.9.0"
261247 }
@@ -264,7 +250,6 @@
264250 "version": "7.18.6",
265251 "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz",
266252 "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==",
267− "dev": true,
268253 "dependencies": {
269254 "@babel/template": "^7.18.6",
270255 "@babel/traverse": "^7.18.6",
@@ -278,7 +263,6 @@
278263 "version": "7.18.6",
279264 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
280265 "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
281− "dev": true,
282266 "dependencies": {
283267 "@babel/helper-validator-identifier": "^7.18.6",
284268 "chalk": "^2.0.0",
@@ -292,7 +276,6 @@
292276 "version": "7.18.6",
293277 "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
294278 "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==",
295− "dev": true,
296279 "bin": {
297280 "parser": "bin/babel-parser.js"
298281 },
@@ -300,6 +283,20 @@
300283 "node": ">=6.0.0"
301284 }
302285 },
286+ "node_modules/@babel/plugin-syntax-jsx": {
287+ "version": "7.18.6",
288+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
289+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
290+ "dependencies": {
291+ "@babel/helper-plugin-utils": "^7.18.6"
292+ },
293+ "engines": {
294+ "node": ">=6.9.0"
295+ },
296+ "peerDependencies": {
297+ "@babel/core": "^7.0.0-0"
298+ }
299+ },
303300 "node_modules/@babel/plugin-transform-react-jsx-self": {
304301 "version": "7.18.6",
305302 "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz",
@@ -345,7 +342,6 @@
345342 "version": "7.18.6",
346343 "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
347344 "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
348− "dev": true,
349345 "dependencies": {
350346 "@babel/code-frame": "^7.18.6",
351347 "@babel/parser": "^7.18.6",
@@ -359,7 +355,6 @@
359355 "version": "7.18.6",
360356 "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
361357 "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
362− "dev": true,
363358 "dependencies": {
364359 "@babel/code-frame": "^7.18.6",
365360 "@babel/generator": "^7.18.6",
@@ -380,7 +375,6 @@
380375 "version": "7.18.7",
381376 "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz",
382377 "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==",
383− "dev": true,
384378 "dependencies": {
385379 "@babel/helper-validator-identifier": "^7.18.6",
386380 "to-fast-properties": "^2.0.0"
@@ -389,6 +383,119 @@
389383 "node": ">=6.9.0"
390384 }
391385 },
386+ "node_modules/@emotion/babel-plugin": {
387+ "version": "11.9.2",
388+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz",
389+ "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==",
390+ "dependencies": {
391+ "@babel/helper-module-imports": "^7.12.13",
392+ "@babel/plugin-syntax-jsx": "^7.12.13",
393+ "@babel/runtime": "^7.13.10",
394+ "@emotion/hash": "^0.8.0",
395+ "@emotion/memoize": "^0.7.5",
396+ "@emotion/serialize": "^1.0.2",
397+ "babel-plugin-macros": "^2.6.1",
398+ "convert-source-map": "^1.5.0",
399+ "escape-string-regexp": "^4.0.0",
400+ "find-root": "^1.1.0",
401+ "source-map": "^0.5.7",
402+ "stylis": "4.0.13"
403+ },
404+ "peerDependencies": {
405+ "@babel/core": "^7.0.0"
406+ }
407+ },
408+ "node_modules/@emotion/babel-plugin/node_modules/escape-string-regexp": {
409+ "version": "4.0.0",
410+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
411+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
412+ "engines": {
413+ "node": ">=10"
414+ },
415+ "funding": {
416+ "url": "https://github.com/sponsors/sindresorhus"
417+ }
418+ },
419+ "node_modules/@emotion/cache": {
420+ "version": "11.9.3",
421+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.9.3.tgz",
422+ "integrity": "sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==",
423+ "dependencies": {
424+ "@emotion/memoize": "^0.7.4",
425+ "@emotion/sheet": "^1.1.1",
426+ "@emotion/utils": "^1.0.0",
427+ "@emotion/weak-memoize": "^0.2.5",
428+ "stylis": "4.0.13"
429+ }
430+ },
431+ "node_modules/@emotion/hash": {
432+ "version": "0.8.0",
433+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
434+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
435+ },
436+ "node_modules/@emotion/memoize": {
437+ "version": "0.7.5",
438+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz",
439+ "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ=="
440+ },
441+ "node_modules/@emotion/react": {
442+ "version": "11.9.3",
443+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz",
444+ "integrity": "sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==",
445+ "dependencies": {
446+ "@babel/runtime": "^7.13.10",
447+ "@emotion/babel-plugin": "^11.7.1",
448+ "@emotion/cache": "^11.9.3",
449+ "@emotion/serialize": "^1.0.4",
450+ "@emotion/utils": "^1.1.0",
451+ "@emotion/weak-memoize": "^0.2.5",
452+ "hoist-non-react-statics": "^3.3.1"
453+ },
454+ "peerDependencies": {
455+ "@babel/core": "^7.0.0",
456+ "react": ">=16.8.0"
457+ },
458+ "peerDependenciesMeta": {
459+ "@babel/core": {
460+ "optional": true
461+ },
462+ "@types/react": {
463+ "optional": true
464+ }
465+ }
466+ },
467+ "node_modules/@emotion/serialize": {
468+ "version": "1.0.4",
469+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz",
470+ "integrity": "sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==",
471+ "dependencies": {
472+ "@emotion/hash": "^0.8.0",
473+ "@emotion/memoize": "^0.7.4",
474+ "@emotion/unitless": "^0.7.5",
475+ "@emotion/utils": "^1.0.0",
476+ "csstype": "^3.0.2"
477+ }
478+ },
479+ "node_modules/@emotion/sheet": {
480+ "version": "1.1.1",
481+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.1.tgz",
482+ "integrity": "sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA=="
483+ },
484+ "node_modules/@emotion/unitless": {
485+ "version": "0.7.5",
486+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
487+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
488+ },
489+ "node_modules/@emotion/utils": {
490+ "version": "1.1.0",
491+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz",
492+ "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ=="
493+ },
494+ "node_modules/@emotion/weak-memoize": {
495+ "version": "0.2.5",
496+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
497+ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
498+ },
392499 "node_modules/@heroicons/react": {
393500 "version": "1.0.6",
394501 "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz",
@@ -401,7 +508,6 @@
401508 "version": "0.1.1",
402509 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
403510 "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
404− "dev": true,
405511 "dependencies": {
406512 "@jridgewell/set-array": "^1.0.0",
407513 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -414,7 +520,6 @@
414520 "version": "3.0.8",
415521 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
416522 "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
417− "dev": true,
418523 "engines": {
419524 "node": ">=6.0.0"
420525 }
@@ -423,7 +528,6 @@
423528 "version": "1.1.2",
424529 "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
425530 "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
426− "dev": true,
427531 "engines": {
428532 "node": ">=6.0.0"
429533 }
@@ -431,14 +535,12 @@
431535 "node_modules/@jridgewell/sourcemap-codec": {
432536 "version": "1.4.14",
433537 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
434− "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
435− "dev": true
538+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
436539 },
437540 "node_modules/@jridgewell/trace-mapping": {
438541 "version": "0.3.14",
439542 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
440543 "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
441− "dev": true,
442544 "dependencies": {
443545 "@jridgewell/resolve-uri": "^3.0.3",
444546 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -484,6 +586,14 @@
484586 "node": ">= 8"
485587 }
486588 },
589+ "node_modules/@radix-ui/number": {
590+ "version": "0.1.0",
591+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-0.1.0.tgz",
592+ "integrity": "sha512-rpf6QiOWLHAkM4FEMYu9i+5Jr8cKT893+R4mPpcdsy4LD7omr9JfdOqj/h/xPA5+EcVrpMMlU6rrRYpUB5UI8g==",
593+ "dependencies": {
594+ "@babel/runtime": "^7.13.10"
595+ }
596+ },
487597 "node_modules/@radix-ui/popper": {
488598 "version": "0.1.0",
489599 "resolved": "https://registry.npmjs.org/@radix-ui/popper/-/popper-0.1.0.tgz",
@@ -623,6 +733,21 @@
623733 "react": "^16.8 || ^17.0"
624734 }
625735 },
736+ "node_modules/@radix-ui/react-label": {
737+ "version": "0.1.5",
738+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz",
739+ "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==",
740+ "dependencies": {
741+ "@babel/runtime": "^7.13.10",
742+ "@radix-ui/react-compose-refs": "0.1.0",
743+ "@radix-ui/react-context": "0.1.1",
744+ "@radix-ui/react-id": "0.1.5",
745+ "@radix-ui/react-primitive": "0.1.4"
746+ },
747+ "peerDependencies": {
748+ "react": "^16.8 || ^17.0"
749+ }
750+ },
626751 "node_modules/@radix-ui/react-menu": {
627752 "version": "0.1.6",
628753 "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-0.1.6.tgz",
@@ -729,6 +854,36 @@
729854 "react": "^16.8 || ^17.0"
730855 }
731856 },
857+ "node_modules/@radix-ui/react-select": {
858+ "version": "0.1.1",
859+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-0.1.1.tgz",
860+ "integrity": "sha512-xY3jLz2c6ZBHflldGsA79bE/swUfRMpiRPQf+JDihOufsd3z5uW22PFe0MS5bGZiIpK6aAZAvwqEd2Bu7hqp8w==",
861+ "dependencies": {
862+ "@babel/runtime": "^7.13.10",
863+ "@radix-ui/number": "0.1.0",
864+ "@radix-ui/primitive": "0.1.0",
865+ "@radix-ui/react-collection": "0.1.4",
866+ "@radix-ui/react-compose-refs": "0.1.0",
867+ "@radix-ui/react-context": "0.1.1",
868+ "@radix-ui/react-dismissable-layer": "0.1.5",
869+ "@radix-ui/react-focus-scope": "0.1.4",
870+ "@radix-ui/react-id": "0.1.5",
871+ "@radix-ui/react-label": "0.1.5",
872+ "@radix-ui/react-portal": "0.1.4",
873+ "@radix-ui/react-primitive": "0.1.4",
874+ "@radix-ui/react-use-callback-ref": "0.1.0",
875+ "@radix-ui/react-use-controllable-state": "0.1.0",
876+ "@radix-ui/react-use-layout-effect": "0.1.0",
877+ "@radix-ui/react-use-previous": "0.1.1",
878+ "@radix-ui/react-visually-hidden": "0.1.4",
879+ "aria-hidden": "^1.1.1",
880+ "react-remove-scroll": "^2.4.0"
881+ },
882+ "peerDependencies": {
883+ "react": "^16.8 || ^17.0",
884+ "react-dom": "^16.8 || ^17.0"
885+ }
886+ },
732887 "node_modules/@radix-ui/react-slot": {
733888 "version": "0.1.2",
734889 "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz",
@@ -841,6 +996,17 @@
841996 "react": "^16.8 || ^17.0"
842997 }
843998 },
999+ "node_modules/@radix-ui/react-use-previous": {
1000+ "version": "0.1.1",
1001+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz",
1002+ "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==",
1003+ "dependencies": {
1004+ "@babel/runtime": "^7.13.10"
1005+ },
1006+ "peerDependencies": {
1007+ "react": "^16.8 || ^17.0"
1008+ }
1009+ },
8441010 "node_modules/@radix-ui/react-use-rect": {
8451011 "version": "0.1.1",
8461012 "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz",
@@ -864,6 +1030,18 @@
8641030 "react": "^16.8 || ^17.0"
8651031 }
8661032 },
1033+ "node_modules/@radix-ui/react-visually-hidden": {
1034+ "version": "0.1.4",
1035+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-0.1.4.tgz",
1036+ "integrity": "sha512-K/q6AEEzqeeEq/T0NPChvBqnwlp8Tl4NnQdrI/y8IOY7BRR+Ug0PEsVk6g48HJ7cA1//COugdxXXVVK/m0X1mA==",
1037+ "dependencies": {
1038+ "@babel/runtime": "^7.13.10",
1039+ "@radix-ui/react-primitive": "0.1.4"
1040+ },
1041+ "peerDependencies": {
1042+ "react": "^16.8 || ^17.0"
1043+ }
1044+ },
8671045 "node_modules/@radix-ui/rect": {
8681046 "version": "0.1.1",
8691047 "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-0.1.1.tgz",
@@ -900,17 +1078,20 @@
9001078 "@types/lodash": "*"
9011079 }
9021080 },
1081+ "node_modules/@types/parse-json": {
1082+ "version": "4.0.0",
1083+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
1084+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
1085+ },
9031086 "node_modules/@types/prop-types": {
9041087 "version": "15.7.5",
9051088 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
906− "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
907− "devOptional": true
1089+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
9081090 },
9091091 "node_modules/@types/react": {
9101092 "version": "17.0.47",
9111093 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz",
9121094 "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==",
913− "devOptional": true,
9141095 "dependencies": {
9151096 "@types/prop-types": "*",
9161097 "@types/scheduler": "*",
@@ -926,11 +1107,18 @@
9261107 "@types/react": "^17"
9271108 }
9281109 },
1110+ "node_modules/@types/react-transition-group": {
1111+ "version": "4.4.5",
1112+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz",
1113+ "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==",
1114+ "dependencies": {
1115+ "@types/react": "*"
1116+ }
1117+ },
9291118 "node_modules/@types/scheduler": {
9301119 "version": "0.16.2",
9311120 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
932− "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
933− "devOptional": true
1121+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
9341122 },
9351123 "node_modules/@urbit/api": {
9361124 "version": "2.1.1",
@@ -1018,7 +1206,6 @@
10181206 "version": "3.2.1",
10191207 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
10201208 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
1021− "dev": true,
10221209 "dependencies": {
10231210 "color-convert": "^1.9.0"
10241211 },
@@ -1089,6 +1276,16 @@
10891276 "postcss": "^8.1.0"
10901277 }
10911278 },
1279+ "node_modules/babel-plugin-macros": {
1280+ "version": "2.8.0",
1281+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
1282+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
1283+ "dependencies": {
1284+ "@babel/runtime": "^7.7.2",
1285+ "cosmiconfig": "^6.0.0",
1286+ "resolve": "^1.12.0"
1287+ }
1288+ },
10921289 "node_modules/balanced-match": {
10931290 "version": "1.0.2",
10941291 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1161,7 +1358,6 @@
11611358 "version": "4.21.1",
11621359 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz",
11631360 "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==",
1164− "dev": true,
11651361 "funding": [
11661362 {
11671363 "type": "opencollective",
@@ -1185,6 +1381,14 @@
11851381 "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
11861382 }
11871383 },
1384+ "node_modules/callsites": {
1385+ "version": "3.1.0",
1386+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1387+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1388+ "engines": {
1389+ "node": ">=6"
1390+ }
1391+ },
11881392 "node_modules/camelcase-css": {
11891393 "version": "2.0.1",
11901394 "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -1198,7 +1402,6 @@
11981402 "version": "1.0.30001361",
11991403 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz",
12001404 "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==",
1201− "dev": true,
12021405 "funding": [
12031406 {
12041407 "type": "opencollective",
@@ -1214,7 +1417,6 @@
12141417 "version": "2.4.2",
12151418 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
12161419 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
1217− "dev": true,
12181420 "dependencies": {
12191421 "ansi-styles": "^3.2.1",
12201422 "escape-string-regexp": "^1.0.5",
@@ -1272,7 +1474,6 @@
12721474 "version": "1.9.3",
12731475 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
12741476 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
1275− "dev": true,
12761477 "dependencies": {
12771478 "color-name": "1.1.3"
12781479 }
@@ -1280,8 +1481,7 @@
12801481 "node_modules/color-name": {
12811482 "version": "1.1.3",
12821483 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
1283− "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
1284− "dev": true
1484+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
12851485 },
12861486 "node_modules/concat-map": {
12871487 "version": "0.0.1",
@@ -1301,7 +1501,6 @@
13011501 "version": "1.8.0",
13021502 "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
13031503 "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
1304− "dev": true,
13051504 "dependencies": {
13061505 "safe-buffer": "~5.1.1"
13071506 }
@@ -1316,6 +1515,21 @@
13161515 "url": "https://opencollective.com/core-js"
13171516 }
13181517 },
1518+ "node_modules/cosmiconfig": {
1519+ "version": "6.0.0",
1520+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
1521+ "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
1522+ "dependencies": {
1523+ "@types/parse-json": "^4.0.0",
1524+ "import-fresh": "^3.1.0",
1525+ "parse-json": "^5.0.0",
1526+ "path-type": "^4.0.0",
1527+ "yaml": "^1.7.2"
1528+ },
1529+ "engines": {
1530+ "node": ">=8"
1531+ }
1532+ },
13191533 "node_modules/cssesc": {
13201534 "version": "3.0.0",
13211535 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -1337,7 +1551,6 @@
13371551 "version": "4.3.4",
13381552 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
13391553 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1340− "dev": true,
13411554 "dependencies": {
13421555 "ms": "2.1.2"
13431556 },
@@ -1395,11 +1608,27 @@
13951608 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
13961609 "dev": true
13971610 },
1611+ "node_modules/dom-helpers": {
1612+ "version": "5.2.1",
1613+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
1614+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
1615+ "dependencies": {
1616+ "@babel/runtime": "^7.8.7",
1617+ "csstype": "^3.0.2"
1618+ }
1619+ },
13981620 "node_modules/electron-to-chromium": {
13991621 "version": "1.4.176",
14001622 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz",
1401− "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==",
1402− "dev": true
1623+ "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw=="
1624+ },
1625+ "node_modules/error-ex": {
1626+ "version": "1.3.2",
1627+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
1628+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
1629+ "dependencies": {
1630+ "is-arrayish": "^0.2.1"
1631+ }
14031632 },
14041633 "node_modules/esbuild": {
14051634 "version": "0.14.48",
@@ -1760,7 +1989,6 @@
17601989 "version": "3.1.1",
17611990 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
17621991 "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1763− "dev": true,
17641992 "engines": {
17651993 "node": ">=6"
17661994 }
@@ -1769,7 +1997,6 @@
17691997 "version": "1.0.5",
17701998 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
17711999 "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
1772− "dev": true,
17732000 "engines": {
17742001 "node": ">=0.8.0"
17752002 }
@@ -1829,6 +2056,11 @@
18292056 "node": ">=8"
18302057 }
18312058 },
2059+ "node_modules/find-root": {
2060+ "version": "1.1.0",
2061+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
2062+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
2063+ },
18322064 "node_modules/fraction.js": {
18332065 "version": "4.2.0",
18342066 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
@@ -1864,14 +2096,12 @@
18642096 "node_modules/function-bind": {
18652097 "version": "1.1.1",
18662098 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
1867− "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
1868− "dev": true
2099+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
18692100 },
18702101 "node_modules/gensync": {
18712102 "version": "1.0.0-beta.2",
18722103 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
18732104 "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1874− "dev": true,
18752105 "engines": {
18762106 "node": ">=6.9.0"
18772107 }
@@ -1919,7 +2149,6 @@
19192149 "version": "11.12.0",
19202150 "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
19212151 "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1922− "dev": true,
19232152 "engines": {
19242153 "node": ">=4"
19252154 }
@@ -1928,7 +2157,6 @@
19282157 "version": "1.0.3",
19292158 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
19302159 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
1931− "dev": true,
19322160 "dependencies": {
19332161 "function-bind": "^1.1.1"
19342162 },
@@ -1940,7 +2168,6 @@
19402168 "version": "3.0.0",
19412169 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
19422170 "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
1943− "dev": true,
19442171 "engines": {
19452172 "node": ">=4"
19462173 }
@@ -1953,6 +2180,14 @@
19532180 "@babel/runtime": "^7.7.6"
19542181 }
19552182 },
2183+ "node_modules/hoist-non-react-statics": {
2184+ "version": "3.3.2",
2185+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
2186+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
2187+ "dependencies": {
2188+ "react-is": "^16.7.0"
2189+ }
2190+ },
19562191 "node_modules/immer": {
19572192 "version": "9.0.15",
19582193 "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
@@ -1962,6 +2197,21 @@
19622197 "url": "https://opencollective.com/immer"
19632198 }
19642199 },
2200+ "node_modules/import-fresh": {
2201+ "version": "3.3.0",
2202+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2203+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2204+ "dependencies": {
2205+ "parent-module": "^1.0.0",
2206+ "resolve-from": "^4.0.0"
2207+ },
2208+ "engines": {
2209+ "node": ">=6"
2210+ },
2211+ "funding": {
2212+ "url": "https://github.com/sponsors/sindresorhus"
2213+ }
2214+ },
19652215 "node_modules/inflight": {
19662216 "version": "1.0.6",
19672217 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -1984,6 +2234,11 @@
19842234 "loose-envify": "^1.0.0"
19852235 }
19862236 },
2237+ "node_modules/is-arrayish": {
2238+ "version": "0.2.1",
2239+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2240+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
2241+ },
19872242 "node_modules/is-binary-path": {
19882243 "version": "2.1.0",
19892244 "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -2000,7 +2255,6 @@
20002255 "version": "2.9.0",
20012256 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
20022257 "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
2003− "dev": true,
20042258 "dependencies": {
20052259 "has": "^1.0.3"
20062260 },
@@ -2052,7 +2306,6 @@
20522306 "version": "2.5.2",
20532307 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
20542308 "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
2055− "dev": true,
20562309 "bin": {
20572310 "jsesc": "bin/jsesc"
20582311 },
@@ -2060,11 +2313,15 @@
20602313 "node": ">=4"
20612314 }
20622315 },
2316+ "node_modules/json-parse-even-better-errors": {
2317+ "version": "2.3.1",
2318+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2319+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
2320+ },
20632321 "node_modules/json5": {
20642322 "version": "2.2.1",
20652323 "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
20662324 "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
2067− "dev": true,
20682325 "bin": {
20692326 "json5": "lib/cli.js"
20702327 },
@@ -2081,6 +2338,11 @@
20812338 "node": ">=10"
20822339 }
20832340 },
2341+ "node_modules/lines-and-columns": {
2342+ "version": "1.2.4",
2343+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
2344+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
2345+ },
20842346 "node_modules/lodash.chunk": {
20852347 "version": "4.2.0",
20862348 "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
@@ -2116,6 +2378,11 @@
21162378 "remove-accents": "0.4.2"
21172379 }
21182380 },
2381+ "node_modules/memoize-one": {
2382+ "version": "5.2.1",
2383+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
2384+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
2385+ },
21192386 "node_modules/merge2": {
21202387 "version": "1.4.1",
21212388 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -2163,8 +2430,7 @@
21632430 "node_modules/ms": {
21642431 "version": "2.1.2",
21652432 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2166− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2167− "dev": true
2433+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
21682434 },
21692435 "node_modules/nano-time": {
21702436 "version": "1.0.0",
@@ -2189,8 +2455,7 @@
21892455 "node_modules/node-releases": {
21902456 "version": "2.0.5",
21912457 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
2192− "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
2193− "dev": true
2458+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
21942459 },
21952460 "node_modules/normalize-path": {
21962461 "version": "3.0.0",
@@ -2240,6 +2505,34 @@
22402505 "wrappy": "1"
22412506 }
22422507 },
2508+ "node_modules/parent-module": {
2509+ "version": "1.0.1",
2510+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2511+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2512+ "dependencies": {
2513+ "callsites": "^3.0.0"
2514+ },
2515+ "engines": {
2516+ "node": ">=6"
2517+ }
2518+ },
2519+ "node_modules/parse-json": {
2520+ "version": "5.2.0",
2521+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
2522+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
2523+ "dependencies": {
2524+ "@babel/code-frame": "^7.0.0",
2525+ "error-ex": "^1.3.1",
2526+ "json-parse-even-better-errors": "^2.3.0",
2527+ "lines-and-columns": "^1.1.6"
2528+ },
2529+ "engines": {
2530+ "node": ">=8"
2531+ },
2532+ "funding": {
2533+ "url": "https://github.com/sponsors/sindresorhus"
2534+ }
2535+ },
22432536 "node_modules/path-is-absolute": {
22442537 "version": "1.0.1",
22452538 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -2251,14 +2544,20 @@
22512544 "node_modules/path-parse": {
22522545 "version": "1.0.7",
22532546 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2254− "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2255− "dev": true
2547+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
2548+ },
2549+ "node_modules/path-type": {
2550+ "version": "4.0.0",
2551+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2552+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2553+ "engines": {
2554+ "node": ">=8"
2555+ }
22562556 },
22572557 "node_modules/picocolors": {
22582558 "version": "1.0.0",
22592559 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2260− "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
2261− "dev": true
2560+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
22622561 },
22632562 "node_modules/picomatch": {
22642563 "version": "2.3.1",
@@ -2408,6 +2707,16 @@
24082707 "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
24092708 "dev": true
24102709 },
2710+ "node_modules/prop-types": {
2711+ "version": "15.8.1",
2712+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
2713+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
2714+ "dependencies": {
2715+ "loose-envify": "^1.4.0",
2716+ "object-assign": "^4.1.1",
2717+ "react-is": "^16.13.1"
2718+ }
2719+ },
24112720 "node_modules/queue-microtask": {
24122721 "version": "1.2.3",
24132722 "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -2465,6 +2774,26 @@
24652774 "react": "17.0.2"
24662775 }
24672776 },
2777+ "node_modules/react-hook-form": {
2778+ "version": "7.33.1",
2779+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz",
2780+ "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==",
2781+ "engines": {
2782+ "node": ">=12.22.0"
2783+ },
2784+ "funding": {
2785+ "type": "opencollective",
2786+ "url": "https://opencollective.com/react-hook-form"
2787+ },
2788+ "peerDependencies": {
2789+ "react": "^16.8.0 || ^17 || ^18"
2790+ }
2791+ },
2792+ "node_modules/react-is": {
2793+ "version": "16.13.1",
2794+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
2795+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
2796+ },
24682797 "node_modules/react-query": {
24692798 "version": "3.39.1",
24702799 "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.1.tgz",
@@ -2578,6 +2907,24 @@
25782907 "react-dom": ">=16.8"
25792908 }
25802909 },
2910+ "node_modules/react-select": {
2911+ "version": "5.4.0",
2912+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.4.0.tgz",
2913+ "integrity": "sha512-CjE9RFLUvChd5SdlfG4vqxZd55AZJRrLrHzkQyTYeHlpOztqcgnyftYAolJ0SGsBev6zAs6qFrjm6KU3eo2hzg==",
2914+ "dependencies": {
2915+ "@babel/runtime": "^7.12.0",
2916+ "@emotion/cache": "^11.4.0",
2917+ "@emotion/react": "^11.8.1",
2918+ "@types/react-transition-group": "^4.4.0",
2919+ "memoize-one": "^5.0.0",
2920+ "prop-types": "^15.6.0",
2921+ "react-transition-group": "^4.3.0"
2922+ },
2923+ "peerDependencies": {
2924+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
2925+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
2926+ }
2927+ },
25812928 "node_modules/react-style-singleton": {
25822929 "version": "2.2.1",
25832930 "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
@@ -2605,6 +2952,21 @@
26052952 "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz",
26062953 "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ=="
26072954 },
2955+ "node_modules/react-transition-group": {
2956+ "version": "4.4.2",
2957+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
2958+ "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
2959+ "dependencies": {
2960+ "@babel/runtime": "^7.5.5",
2961+ "dom-helpers": "^5.0.1",
2962+ "loose-envify": "^1.4.0",
2963+ "prop-types": "^15.6.2"
2964+ },
2965+ "peerDependencies": {
2966+ "react": ">=16.6.0",
2967+ "react-dom": ">=16.6.0"
2968+ }
2969+ },
26082970 "node_modules/read-cache": {
26092971 "version": "1.0.0",
26102972 "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -2640,7 +3002,6 @@
26403002 "version": "1.22.1",
26413003 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
26423004 "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
2643− "dev": true,
26443005 "dependencies": {
26453006 "is-core-module": "^2.9.0",
26463007 "path-parse": "^1.0.7",
@@ -2653,6 +3014,14 @@
26533014 "url": "https://github.com/sponsors/ljharb"
26543015 }
26553016 },
3017+ "node_modules/resolve-from": {
3018+ "version": "4.0.0",
3019+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
3020+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
3021+ "engines": {
3022+ "node": ">=4"
3023+ }
3024+ },
26563025 "node_modules/reusify": {
26573026 "version": "1.0.4",
26583027 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -2718,8 +3087,7 @@
27183087 "node_modules/safe-buffer": {
27193088 "version": "5.1.2",
27203089 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
2721− "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
2722− "dev": true
3090+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
27233091 },
27243092 "node_modules/scheduler": {
27253093 "version": "0.20.2",
@@ -2734,11 +3102,18 @@
27343102 "version": "6.3.0",
27353103 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
27363104 "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
2737− "dev": true,
27383105 "bin": {
27393106 "semver": "bin/semver.js"
27403107 }
27413108 },
3109+ "node_modules/source-map": {
3110+ "version": "0.5.7",
3111+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
3112+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
3113+ "engines": {
3114+ "node": ">=0.10.0"
3115+ }
3116+ },
27423117 "node_modules/source-map-js": {
27433118 "version": "1.0.2",
27443119 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -2748,11 +3123,15 @@
27483123 "node": ">=0.10.0"
27493124 }
27503125 },
3126+ "node_modules/stylis": {
3127+ "version": "4.0.13",
3128+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz",
3129+ "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag=="
3130+ },
27513131 "node_modules/supports-color": {
27523132 "version": "5.5.0",
27533133 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
27543134 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
2755− "dev": true,
27563135 "dependencies": {
27573136 "has-flag": "^3.0.0"
27583137 },
@@ -2764,7 +3143,6 @@
27643143 "version": "1.0.0",
27653144 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
27663145 "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2767− "dev": true,
27683146 "engines": {
27693147 "node": ">= 0.4"
27703148 },
@@ -2822,7 +3200,6 @@
28223200 "version": "2.0.0",
28233201 "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
28243202 "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
2825− "dev": true,
28263203 "engines": {
28273204 "node": ">=4"
28283205 }
@@ -2870,7 +3247,6 @@
28703247 "version": "1.0.4",
28713248 "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
28723249 "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
2873− "dev": true,
28743250 "funding": [
28753251 {
28763252 "type": "opencollective",
@@ -3041,7 +3417,6 @@
30413417 "version": "1.10.2",
30423418 "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
30433419 "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
3044− "dev": true,
30453420 "engines": {
30463421 "node": ">= 6"
30473422 }
@@ -3052,7 +3427,6 @@
30523427 "version": "2.2.0",
30533428 "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
30543429 "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
3055− "dev": true,
30563430 "requires": {
30573431 "@jridgewell/gen-mapping": "^0.1.0",
30583432 "@jridgewell/trace-mapping": "^0.3.9"
@@ -3062,7 +3436,6 @@
30623436 "version": "7.18.6",
30633437 "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
30643438 "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
3065− "dev": true,
30663439 "requires": {
30673440 "@babel/highlight": "^7.18.6"
30683441 }
@@ -3070,14 +3443,12 @@
30703443 "@babel/compat-data": {
30713444 "version": "7.18.6",
30723445 "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz",
3073− "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==",
3074− "dev": true
3446+ "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ=="
30753447 },
30763448 "@babel/core": {
30773449 "version": "7.18.6",
30783450 "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz",
30793451 "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==",
3080− "dev": true,
30813452 "requires": {
30823453 "@ampproject/remapping": "^2.1.0",
30833454 "@babel/code-frame": "^7.18.6",
@@ -3100,7 +3471,6 @@
31003471 "version": "7.18.7",
31013472 "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz",
31023473 "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==",
3103− "dev": true,
31043474 "requires": {
31053475 "@babel/types": "^7.18.7",
31063476 "@jridgewell/gen-mapping": "^0.3.2",
@@ -3111,7 +3481,6 @@
31113481 "version": "0.3.2",
31123482 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
31133483 "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
3114− "dev": true,
31153484 "requires": {
31163485 "@jridgewell/set-array": "^1.0.1",
31173486 "@jridgewell/sourcemap-codec": "^1.4.10",
@@ -3124,7 +3493,6 @@
31243493 "version": "7.18.6",
31253494 "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz",
31263495 "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==",
3127− "dev": true,
31283496 "requires": {
31293497 "@babel/compat-data": "^7.18.6",
31303498 "@babel/helper-validator-option": "^7.18.6",
@@ -3135,14 +3503,12 @@
31353503 "@babel/helper-environment-visitor": {
31363504 "version": "7.18.6",
31373505 "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz",
3138− "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==",
3139− "dev": true
3506+ "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q=="
31403507 },
31413508 "@babel/helper-function-name": {
31423509 "version": "7.18.6",
31433510 "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz",
31443511 "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==",
3145− "dev": true,
31463512 "requires": {
31473513 "@babel/template": "^7.18.6",
31483514 "@babel/types": "^7.18.6"
@@ -3152,7 +3518,6 @@
31523518 "version": "7.18.6",
31533519 "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
31543520 "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
3155− "dev": true,
31563521 "requires": {
31573522 "@babel/types": "^7.18.6"
31583523 }
@@ -3161,7 +3526,6 @@
31613526 "version": "7.18.6",
31623527 "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
31633528 "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
3164− "dev": true,
31653529 "requires": {
31663530 "@babel/types": "^7.18.6"
31673531 }
@@ -3170,7 +3534,6 @@
31703534 "version": "7.18.6",
31713535 "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz",
31723536 "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==",
3173− "dev": true,
31743537 "requires": {
31753538 "@babel/helper-environment-visitor": "^7.18.6",
31763539 "@babel/helper-module-imports": "^7.18.6",
@@ -3185,14 +3548,12 @@
31853548 "@babel/helper-plugin-utils": {
31863549 "version": "7.18.6",
31873550 "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz",
3188− "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==",
3189− "dev": true
3551+ "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg=="
31903552 },
31913553 "@babel/helper-simple-access": {
31923554 "version": "7.18.6",
31933555 "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
31943556 "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
3195− "dev": true,
31963557 "requires": {
31973558 "@babel/types": "^7.18.6"
31983559 }
@@ -3201,7 +3562,6 @@
32013562 "version": "7.18.6",
32023563 "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
32033564 "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
3204− "dev": true,
32053565 "requires": {
32063566 "@babel/types": "^7.18.6"
32073567 }
@@ -3209,20 +3569,17 @@
32093569 "@babel/helper-validator-identifier": {
32103570 "version": "7.18.6",
32113571 "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
3212− "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
3213− "dev": true
3572+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g=="
32143573 },
32153574 "@babel/helper-validator-option": {
32163575 "version": "7.18.6",
32173576 "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
3218− "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
3219− "dev": true
3577+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw=="
32203578 },
32213579 "@babel/helpers": {
32223580 "version": "7.18.6",
32233581 "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz",
32243582 "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==",
3225− "dev": true,
32263583 "requires": {
32273584 "@babel/template": "^7.18.6",
32283585 "@babel/traverse": "^7.18.6",
@@ -3233,7 +3590,6 @@
32333590 "version": "7.18.6",
32343591 "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
32353592 "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
3236− "dev": true,
32373593 "requires": {
32383594 "@babel/helper-validator-identifier": "^7.18.6",
32393595 "chalk": "^2.0.0",
@@ -3243,8 +3599,15 @@
32433599 "@babel/parser": {
32443600 "version": "7.18.6",
32453601 "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz",
3246− "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==",
3247− "dev": true
3602+ "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw=="
3603+ },
3604+ "@babel/plugin-syntax-jsx": {
3605+ "version": "7.18.6",
3606+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
3607+ "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
3608+ "requires": {
3609+ "@babel/helper-plugin-utils": "^7.18.6"
3610+ }
32483611 },
32493612 "@babel/plugin-transform-react-jsx-self": {
32503613 "version": "7.18.6",
@@ -3276,7 +3639,6 @@
32763639 "version": "7.18.6",
32773640 "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz",
32783641 "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==",
3279− "dev": true,
32803642 "requires": {
32813643 "@babel/code-frame": "^7.18.6",
32823644 "@babel/parser": "^7.18.6",
@@ -3287,7 +3649,6 @@
32873649 "version": "7.18.6",
32883650 "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz",
32893651 "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==",
3290− "dev": true,
32913652 "requires": {
32923653 "@babel/code-frame": "^7.18.6",
32933654 "@babel/generator": "^7.18.6",
@@ -3305,12 +3666,105 @@
33053666 "version": "7.18.7",
33063667 "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz",
33073668 "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==",
3308− "dev": true,
33093669 "requires": {
33103670 "@babel/helper-validator-identifier": "^7.18.6",
33113671 "to-fast-properties": "^2.0.0"
33123672 }
33133673 },
3674+ "@emotion/babel-plugin": {
3675+ "version": "11.9.2",
3676+ "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz",
3677+ "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==",
3678+ "requires": {
3679+ "@babel/helper-module-imports": "^7.12.13",
3680+ "@babel/plugin-syntax-jsx": "^7.12.13",
3681+ "@babel/runtime": "^7.13.10",
3682+ "@emotion/hash": "^0.8.0",
3683+ "@emotion/memoize": "^0.7.5",
3684+ "@emotion/serialize": "^1.0.2",
3685+ "babel-plugin-macros": "^2.6.1",
3686+ "convert-source-map": "^1.5.0",
3687+ "escape-string-regexp": "^4.0.0",
3688+ "find-root": "^1.1.0",
3689+ "source-map": "^0.5.7",
3690+ "stylis": "4.0.13"
3691+ },
3692+ "dependencies": {
3693+ "escape-string-regexp": {
3694+ "version": "4.0.0",
3695+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
3696+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
3697+ }
3698+ }
3699+ },
3700+ "@emotion/cache": {
3701+ "version": "11.9.3",
3702+ "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.9.3.tgz",
3703+ "integrity": "sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==",
3704+ "requires": {
3705+ "@emotion/memoize": "^0.7.4",
3706+ "@emotion/sheet": "^1.1.1",
3707+ "@emotion/utils": "^1.0.0",
3708+ "@emotion/weak-memoize": "^0.2.5",
3709+ "stylis": "4.0.13"
3710+ }
3711+ },
3712+ "@emotion/hash": {
3713+ "version": "0.8.0",
3714+ "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz",
3715+ "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow=="
3716+ },
3717+ "@emotion/memoize": {
3718+ "version": "0.7.5",
3719+ "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz",
3720+ "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ=="
3721+ },
3722+ "@emotion/react": {
3723+ "version": "11.9.3",
3724+ "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz",
3725+ "integrity": "sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==",
3726+ "requires": {
3727+ "@babel/runtime": "^7.13.10",
3728+ "@emotion/babel-plugin": "^11.7.1",
3729+ "@emotion/cache": "^11.9.3",
3730+ "@emotion/serialize": "^1.0.4",
3731+ "@emotion/utils": "^1.1.0",
3732+ "@emotion/weak-memoize": "^0.2.5",
3733+ "hoist-non-react-statics": "^3.3.1"
3734+ }
3735+ },
3736+ "@emotion/serialize": {
3737+ "version": "1.0.4",
3738+ "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz",
3739+ "integrity": "sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==",
3740+ "requires": {
3741+ "@emotion/hash": "^0.8.0",
3742+ "@emotion/memoize": "^0.7.4",
3743+ "@emotion/unitless": "^0.7.5",
3744+ "@emotion/utils": "^1.0.0",
3745+ "csstype": "^3.0.2"
3746+ }
3747+ },
3748+ "@emotion/sheet": {
3749+ "version": "1.1.1",
3750+ "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.1.tgz",
3751+ "integrity": "sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA=="
3752+ },
3753+ "@emotion/unitless": {
3754+ "version": "0.7.5",
3755+ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz",
3756+ "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg=="
3757+ },
3758+ "@emotion/utils": {
3759+ "version": "1.1.0",
3760+ "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz",
3761+ "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ=="
3762+ },
3763+ "@emotion/weak-memoize": {
3764+ "version": "0.2.5",
3765+ "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz",
3766+ "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA=="
3767+ },
33143768 "@heroicons/react": {
33153769 "version": "1.0.6",
33163770 "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz",
@@ -3321,7 +3775,6 @@
33213775 "version": "0.1.1",
33223776 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
33233777 "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
3324− "dev": true,
33253778 "requires": {
33263779 "@jridgewell/set-array": "^1.0.0",
33273780 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -3330,26 +3783,22 @@
33303783 "@jridgewell/resolve-uri": {
33313784 "version": "3.0.8",
33323785 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz",
3333− "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==",
3334− "dev": true
3786+ "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w=="
33353787 },
33363788 "@jridgewell/set-array": {
33373789 "version": "1.1.2",
33383790 "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
3339− "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
3340− "dev": true
3791+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw=="
33413792 },
33423793 "@jridgewell/sourcemap-codec": {
33433794 "version": "1.4.14",
33443795 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
3345− "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
3346− "dev": true
3796+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw=="
33473797 },
33483798 "@jridgewell/trace-mapping": {
33493799 "version": "0.3.14",
33503800 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz",
33513801 "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==",
3352− "dev": true,
33533802 "requires": {
33543803 "@jridgewell/resolve-uri": "^3.0.3",
33553804 "@jridgewell/sourcemap-codec": "^1.4.10"
@@ -3386,6 +3835,14 @@
33863835 "fastq": "^1.6.0"
33873836 }
33883837 },
3838+ "@radix-ui/number": {
3839+ "version": "0.1.0",
3840+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-0.1.0.tgz",
3841+ "integrity": "sha512-rpf6QiOWLHAkM4FEMYu9i+5Jr8cKT893+R4mPpcdsy4LD7omr9JfdOqj/h/xPA5+EcVrpMMlU6rrRYpUB5UI8g==",
3842+ "requires": {
3843+ "@babel/runtime": "^7.13.10"
3844+ }
3845+ },
33893846 "@radix-ui/popper": {
33903847 "version": "0.1.0",
33913848 "resolved": "https://registry.npmjs.org/@radix-ui/popper/-/popper-0.1.0.tgz",
@@ -3497,6 +3954,18 @@
34973954 "@radix-ui/react-use-layout-effect": "0.1.0"
34983955 }
34993956 },
3957+ "@radix-ui/react-label": {
3958+ "version": "0.1.5",
3959+ "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-0.1.5.tgz",
3960+ "integrity": "sha512-Au9+n4/DhvjR0IHhvZ1LPdx/OW+3CGDie30ZyCkbSHIuLp4/CV4oPPGBwJ1vY99Jog3zyQhsGww9MXj8O9Aj/A==",
3961+ "requires": {
3962+ "@babel/runtime": "^7.13.10",
3963+ "@radix-ui/react-compose-refs": "0.1.0",
3964+ "@radix-ui/react-context": "0.1.1",
3965+ "@radix-ui/react-id": "0.1.5",
3966+ "@radix-ui/react-primitive": "0.1.4"
3967+ }
3968+ },
35003969 "@radix-ui/react-menu": {
35013970 "version": "0.1.6",
35023971 "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-0.1.6.tgz",
@@ -3583,6 +4052,32 @@
35834052 "@radix-ui/react-use-controllable-state": "0.1.0"
35844053 }
35854054 },
4055+ "@radix-ui/react-select": {
4056+ "version": "0.1.1",
4057+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-0.1.1.tgz",
4058+ "integrity": "sha512-xY3jLz2c6ZBHflldGsA79bE/swUfRMpiRPQf+JDihOufsd3z5uW22PFe0MS5bGZiIpK6aAZAvwqEd2Bu7hqp8w==",
4059+ "requires": {
4060+ "@babel/runtime": "^7.13.10",
4061+ "@radix-ui/number": "0.1.0",
4062+ "@radix-ui/primitive": "0.1.0",
4063+ "@radix-ui/react-collection": "0.1.4",
4064+ "@radix-ui/react-compose-refs": "0.1.0",
4065+ "@radix-ui/react-context": "0.1.1",
4066+ "@radix-ui/react-dismissable-layer": "0.1.5",
4067+ "@radix-ui/react-focus-scope": "0.1.4",
4068+ "@radix-ui/react-id": "0.1.5",
4069+ "@radix-ui/react-label": "0.1.5",
4070+ "@radix-ui/react-portal": "0.1.4",
4071+ "@radix-ui/react-primitive": "0.1.4",
4072+ "@radix-ui/react-use-callback-ref": "0.1.0",
4073+ "@radix-ui/react-use-controllable-state": "0.1.0",
4074+ "@radix-ui/react-use-layout-effect": "0.1.0",
4075+ "@radix-ui/react-use-previous": "0.1.1",
4076+ "@radix-ui/react-visually-hidden": "0.1.4",
4077+ "aria-hidden": "^1.1.1",
4078+ "react-remove-scroll": "^2.4.0"
4079+ }
4080+ },
35864081 "@radix-ui/react-slot": {
35874082 "version": "0.1.2",
35884083 "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-0.1.2.tgz",
@@ -3668,6 +4163,14 @@
36684163 "@babel/runtime": "^7.13.10"
36694164 }
36704165 },
4166+ "@radix-ui/react-use-previous": {
4167+ "version": "0.1.1",
4168+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-0.1.1.tgz",
4169+ "integrity": "sha512-O/ZgrDBr11dR8rhO59ED8s5zIXBRFi8MiS+CmFGfi7MJYdLbfqVOmQU90Ghf87aifEgWe6380LA69KBneaShAg==",
4170+ "requires": {
4171+ "@babel/runtime": "^7.13.10"
4172+ }
4173+ },
36714174 "@radix-ui/react-use-rect": {
36724175 "version": "0.1.1",
36734176 "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-0.1.1.tgz",
@@ -3685,6 +4188,15 @@
36854188 "@babel/runtime": "^7.13.10"
36864189 }
36874190 },
4191+ "@radix-ui/react-visually-hidden": {
4192+ "version": "0.1.4",
4193+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-0.1.4.tgz",
4194+ "integrity": "sha512-K/q6AEEzqeeEq/T0NPChvBqnwlp8Tl4NnQdrI/y8IOY7BRR+Ug0PEsVk6g48HJ7cA1//COugdxXXVVK/m0X1mA==",
4195+ "requires": {
4196+ "@babel/runtime": "^7.13.10",
4197+ "@radix-ui/react-primitive": "0.1.4"
4198+ }
4199+ },
36884200 "@radix-ui/rect": {
36894201 "version": "0.1.1",
36904202 "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-0.1.1.tgz",
@@ -3718,17 +4230,20 @@
37184230 "@types/lodash": "*"
37194231 }
37204232 },
4233+ "@types/parse-json": {
4234+ "version": "4.0.0",
4235+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
4236+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
4237+ },
37214238 "@types/prop-types": {
37224239 "version": "15.7.5",
37234240 "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
3724− "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
3725− "devOptional": true
4241+ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w=="
37264242 },
37274243 "@types/react": {
37284244 "version": "17.0.47",
37294245 "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz",
37304246 "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==",
3731− "devOptional": true,
37324247 "requires": {
37334248 "@types/prop-types": "*",
37344249 "@types/scheduler": "*",
@@ -3744,11 +4259,18 @@
37444259 "@types/react": "^17"
37454260 }
37464261 },
4262+ "@types/react-transition-group": {
4263+ "version": "4.4.5",
4264+ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz",
4265+ "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==",
4266+ "requires": {
4267+ "@types/react": "*"
4268+ }
4269+ },
37474270 "@types/scheduler": {
37484271 "version": "0.16.2",
37494272 "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
3750− "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
3751− "devOptional": true
4273+ "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew=="
37524274 },
37534275 "@urbit/api": {
37544276 "version": "2.1.1",
@@ -3823,7 +4345,6 @@
38234345 "version": "3.2.1",
38244346 "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
38254347 "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
3826− "dev": true,
38274348 "requires": {
38284349 "color-convert": "^1.9.0"
38294350 }
@@ -3866,6 +4387,16 @@
38664387 "postcss-value-parser": "^4.2.0"
38674388 }
38684389 },
4390+ "babel-plugin-macros": {
4391+ "version": "2.8.0",
4392+ "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz",
4393+ "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==",
4394+ "requires": {
4395+ "@babel/runtime": "^7.7.2",
4396+ "cosmiconfig": "^6.0.0",
4397+ "resolve": "^1.12.0"
4398+ }
4399+ },
38694400 "balanced-match": {
38704401 "version": "1.0.2",
38714402 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -3929,7 +4460,6 @@
39294460 "version": "4.21.1",
39304461 "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz",
39314462 "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==",
3932− "dev": true,
39334463 "requires": {
39344464 "caniuse-lite": "^1.0.30001359",
39354465 "electron-to-chromium": "^1.4.172",
@@ -3937,6 +4467,11 @@
39374467 "update-browserslist-db": "^1.0.4"
39384468 }
39394469 },
4470+ "callsites": {
4471+ "version": "3.1.0",
4472+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
4473+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
4474+ },
39404475 "camelcase-css": {
39414476 "version": "2.0.1",
39424477 "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
@@ -3946,14 +4481,12 @@
39464481 "caniuse-lite": {
39474482 "version": "1.0.30001361",
39484483 "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz",
3949− "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==",
3950− "dev": true
4484+ "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ=="
39514485 },
39524486 "chalk": {
39534487 "version": "2.4.2",
39544488 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
39554489 "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
3956− "dev": true,
39574490 "requires": {
39584491 "ansi-styles": "^3.2.1",
39594492 "escape-string-regexp": "^1.0.5",
@@ -3996,7 +4529,6 @@
39964529 "version": "1.9.3",
39974530 "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
39984531 "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
3999− "dev": true,
40004532 "requires": {
40014533 "color-name": "1.1.3"
40024534 }
@@ -4004,8 +4536,7 @@
40044536 "color-name": {
40054537 "version": "1.1.3",
40064538 "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
4007− "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
4008− "dev": true
4539+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
40094540 },
40104541 "concat-map": {
40114542 "version": "0.0.1",
@@ -4022,7 +4553,6 @@
40224553 "version": "1.8.0",
40234554 "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
40244555 "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
4025− "dev": true,
40264556 "requires": {
40274557 "safe-buffer": "~5.1.1"
40284558 }
@@ -4032,6 +4562,18 @@
40324562 "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.3.tgz",
40334563 "integrity": "sha512-oAKwkj9xcWNBAvGbT//WiCdOMpb9XQG92/Fe3ABFM/R16BsHgePG00mFOgKf7IsCtfj8tA1kHtf/VwErhriz5Q=="
40344564 },
4565+ "cosmiconfig": {
4566+ "version": "6.0.0",
4567+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
4568+ "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
4569+ "requires": {
4570+ "@types/parse-json": "^4.0.0",
4571+ "import-fresh": "^3.1.0",
4572+ "parse-json": "^5.0.0",
4573+ "path-type": "^4.0.0",
4574+ "yaml": "^1.7.2"
4575+ }
4576+ },
40354577 "cssesc": {
40364578 "version": "3.0.0",
40374579 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
@@ -4047,7 +4589,6 @@
40474589 "version": "4.3.4",
40484590 "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
40494591 "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
4050− "dev": true,
40514592 "requires": {
40524593 "ms": "2.1.2"
40534594 }
@@ -4091,11 +4632,27 @@
40914632 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
40924633 "dev": true
40934634 },
4635+ "dom-helpers": {
4636+ "version": "5.2.1",
4637+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
4638+ "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
4639+ "requires": {
4640+ "@babel/runtime": "^7.8.7",
4641+ "csstype": "^3.0.2"
4642+ }
4643+ },
40944644 "electron-to-chromium": {
40954645 "version": "1.4.176",
40964646 "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz",
4097− "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==",
4098− "dev": true
4647+ "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw=="
4648+ },
4649+ "error-ex": {
4650+ "version": "1.3.2",
4651+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
4652+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
4653+ "requires": {
4654+ "is-arrayish": "^0.2.1"
4655+ }
40994656 },
41004657 "esbuild": {
41014658 "version": "0.14.48",
@@ -4268,14 +4825,12 @@
42684825 "escalade": {
42694826 "version": "3.1.1",
42704827 "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
4271− "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
4272− "dev": true
4828+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
42734829 },
42744830 "escape-string-regexp": {
42754831 "version": "1.0.5",
42764832 "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
4277− "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
4278− "dev": true
4833+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
42794834 },
42804835 "estree-walker": {
42814836 "version": "2.0.2",
@@ -4325,6 +4880,11 @@
43254880 "to-regex-range": "^5.0.1"
43264881 }
43274882 },
4883+ "find-root": {
4884+ "version": "1.1.0",
4885+ "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
4886+ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="
4887+ },
43284888 "fraction.js": {
43294889 "version": "4.2.0",
43304890 "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
@@ -4346,14 +4906,12 @@
43464906 "function-bind": {
43474907 "version": "1.1.1",
43484908 "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
4349− "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
4350− "dev": true
4909+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
43514910 },
43524911 "gensync": {
43534912 "version": "1.0.0-beta.2",
43544913 "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
4355− "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
4356− "dev": true
4914+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
43574915 },
43584916 "get-nonce": {
43594917 "version": "1.0.1",
@@ -4385,14 +4943,12 @@
43854943 "globals": {
43864944 "version": "11.12.0",
43874945 "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
4388− "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
4389− "dev": true
4946+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
43904947 },
43914948 "has": {
43924949 "version": "1.0.3",
43934950 "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
43944951 "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
4395− "dev": true,
43964952 "requires": {
43974953 "function-bind": "^1.1.1"
43984954 }
@@ -4400,8 +4956,7 @@
44004956 "has-flag": {
44014957 "version": "3.0.0",
44024958 "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
4403− "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
4404− "dev": true
4959+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
44054960 },
44064961 "history": {
44074962 "version": "5.3.0",
@@ -4411,11 +4966,28 @@
44114966 "@babel/runtime": "^7.7.6"
44124967 }
44134968 },
4969+ "hoist-non-react-statics": {
4970+ "version": "3.3.2",
4971+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
4972+ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
4973+ "requires": {
4974+ "react-is": "^16.7.0"
4975+ }
4976+ },
44144977 "immer": {
44154978 "version": "9.0.15",
44164979 "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz",
44174980 "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ=="
44184981 },
4982+ "import-fresh": {
4983+ "version": "3.3.0",
4984+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
4985+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
4986+ "requires": {
4987+ "parent-module": "^1.0.0",
4988+ "resolve-from": "^4.0.0"
4989+ }
4990+ },
44194991 "inflight": {
44204992 "version": "1.0.6",
44214993 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4438,6 +5010,11 @@
44385010 "loose-envify": "^1.0.0"
44395011 }
44405012 },
5013+ "is-arrayish": {
5014+ "version": "0.2.1",
5015+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
5016+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="
5017+ },
44415018 "is-binary-path": {
44425019 "version": "2.1.0",
44435020 "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -4451,7 +5028,6 @@
44515028 "version": "2.9.0",
44525029 "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
44535030 "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
4454− "dev": true,
44555031 "requires": {
44565032 "has": "^1.0.3"
44575033 }
@@ -4490,14 +5066,17 @@
44905066 "jsesc": {
44915067 "version": "2.5.2",
44925068 "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
4493− "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
4494− "dev": true
5069+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
5070+ },
5071+ "json-parse-even-better-errors": {
5072+ "version": "2.3.1",
5073+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
5074+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
44955075 },
44965076 "json5": {
44975077 "version": "2.2.1",
44985078 "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
4499− "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==",
4500− "dev": true
5079+ "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
45015080 },
45025081 "lilconfig": {
45035082 "version": "2.0.5",
@@ -4505,6 +5084,11 @@
45055084 "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==",
45065085 "dev": true
45075086 },
5087+ "lines-and-columns": {
5088+ "version": "1.2.4",
5089+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
5090+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="
5091+ },
45085092 "lodash.chunk": {
45095093 "version": "4.2.0",
45105094 "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz",
@@ -4537,6 +5121,11 @@
45375121 "remove-accents": "0.4.2"
45385122 }
45395123 },
5124+ "memoize-one": {
5125+ "version": "5.2.1",
5126+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz",
5127+ "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q=="
5128+ },
45405129 "merge2": {
45415130 "version": "1.4.1",
45425131 "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -4575,8 +5164,7 @@
45755164 "ms": {
45765165 "version": "2.1.2",
45775166 "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
4578− "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
4579− "dev": true
5167+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
45805168 },
45815169 "nano-time": {
45825170 "version": "1.0.0",
@@ -4595,8 +5183,7 @@
45955183 "node-releases": {
45965184 "version": "2.0.5",
45975185 "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
4598− "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
4599− "dev": true
5186+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
46005187 },
46015188 "normalize-path": {
46025189 "version": "3.0.0",
@@ -4634,6 +5221,25 @@
46345221 "wrappy": "1"
46355222 }
46365223 },
5224+ "parent-module": {
5225+ "version": "1.0.1",
5226+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
5227+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
5228+ "requires": {
5229+ "callsites": "^3.0.0"
5230+ }
5231+ },
5232+ "parse-json": {
5233+ "version": "5.2.0",
5234+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
5235+ "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
5236+ "requires": {
5237+ "@babel/code-frame": "^7.0.0",
5238+ "error-ex": "^1.3.1",
5239+ "json-parse-even-better-errors": "^2.3.0",
5240+ "lines-and-columns": "^1.1.6"
5241+ }
5242+ },
46375243 "path-is-absolute": {
46385244 "version": "1.0.1",
46395245 "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -4642,14 +5248,17 @@
46425248 "path-parse": {
46435249 "version": "1.0.7",
46445250 "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
4645− "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
4646− "dev": true
5251+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
5252+ },
5253+ "path-type": {
5254+ "version": "4.0.0",
5255+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
5256+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
46475257 },
46485258 "picocolors": {
46495259 "version": "1.0.0",
46505260 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
4651− "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
4652− "dev": true
5261+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
46535262 },
46545263 "picomatch": {
46555264 "version": "2.3.1",
@@ -4729,6 +5338,16 @@
47295338 "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
47305339 "dev": true
47315340 },
5341+ "prop-types": {
5342+ "version": "15.8.1",
5343+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
5344+ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
5345+ "requires": {
5346+ "loose-envify": "^1.4.0",
5347+ "object-assign": "^4.1.1",
5348+ "react-is": "^16.13.1"
5349+ }
5350+ },
47325351 "queue-microtask": {
47335352 "version": "1.2.3",
47345353 "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -4760,6 +5379,17 @@
47605379 "scheduler": "^0.20.2"
47615380 }
47625381 },
5382+ "react-hook-form": {
5383+ "version": "7.33.1",
5384+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz",
5385+ "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==",
5386+ "requires": {}
5387+ },
5388+ "react-is": {
5389+ "version": "16.13.1",
5390+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
5391+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
5392+ },
47635393 "react-query": {
47645394 "version": "3.39.1",
47655395 "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.1.tgz",
@@ -4828,6 +5458,20 @@
48285458 "react-router": "6.3.0"
48295459 }
48305460 },
5461+ "react-select": {
5462+ "version": "5.4.0",
5463+ "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.4.0.tgz",
5464+ "integrity": "sha512-CjE9RFLUvChd5SdlfG4vqxZd55AZJRrLrHzkQyTYeHlpOztqcgnyftYAolJ0SGsBev6zAs6qFrjm6KU3eo2hzg==",
5465+ "requires": {
5466+ "@babel/runtime": "^7.12.0",
5467+ "@emotion/cache": "^11.4.0",
5468+ "@emotion/react": "^11.8.1",
5469+ "@types/react-transition-group": "^4.4.0",
5470+ "memoize-one": "^5.0.0",
5471+ "prop-types": "^15.6.0",
5472+ "react-transition-group": "^4.3.0"
5473+ }
5474+ },
48315475 "react-style-singleton": {
48325476 "version": "2.2.1",
48335477 "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
@@ -4845,6 +5489,17 @@
48455489 }
48465490 }
48475491 },
5492+ "react-transition-group": {
5493+ "version": "4.4.2",
5494+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
5495+ "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
5496+ "requires": {
5497+ "@babel/runtime": "^7.5.5",
5498+ "dom-helpers": "^5.0.1",
5499+ "loose-envify": "^1.4.0",
5500+ "prop-types": "^15.6.2"
5501+ }
5502+ },
48485503 "read-cache": {
48495504 "version": "1.0.0",
48505505 "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
@@ -4877,13 +5532,17 @@
48775532 "version": "1.22.1",
48785533 "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
48795534 "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
4880− "dev": true,
48815535 "requires": {
48825536 "is-core-module": "^2.9.0",
48835537 "path-parse": "^1.0.7",
48845538 "supports-preserve-symlinks-flag": "^1.0.0"
48855539 }
48865540 },
5541+ "resolve-from": {
5542+ "version": "4.0.0",
5543+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
5544+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
5545+ },
48875546 "reusify": {
48885547 "version": "1.0.4",
48895548 "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -4919,8 +5578,7 @@
49195578 "safe-buffer": {
49205579 "version": "5.1.2",
49215580 "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
4922− "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
4923− "dev": true
5581+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
49245582 },
49255583 "scheduler": {
49265584 "version": "0.20.2",
@@ -4934,8 +5592,12 @@
49345592 "semver": {
49355593 "version": "6.3.0",
49365594 "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
4937− "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
4938− "dev": true
5595+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
5596+ },
5597+ "source-map": {
5598+ "version": "0.5.7",
5599+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
5600+ "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="
49395601 },
49405602 "source-map-js": {
49415603 "version": "1.0.2",
@@ -4943,11 +5605,15 @@
49435605 "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
49445606 "dev": true
49455607 },
5608+ "stylis": {
5609+ "version": "4.0.13",
5610+ "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz",
5611+ "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag=="
5612+ },
49465613 "supports-color": {
49475614 "version": "5.5.0",
49485615 "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
49495616 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
4950− "dev": true,
49515617 "requires": {
49525618 "has-flag": "^3.0.0"
49535619 }
@@ -4955,8 +5621,7 @@
49555621 "supports-preserve-symlinks-flag": {
49565622 "version": "1.0.0",
49575623 "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
4958− "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
4959− "dev": true
5624+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
49605625 },
49615626 "tailwindcss": {
49625627 "version": "3.1.4",
@@ -4999,8 +5664,7 @@
49995664 "to-fast-properties": {
50005665 "version": "2.0.0",
50015666 "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
5002− "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
5003− "dev": true
5667+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
50045668 },
50055669 "to-regex-range": {
50065670 "version": "5.0.1",
@@ -5035,7 +5699,6 @@
50355699 "version": "1.0.4",
50365700 "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz",
50375701 "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==",
5038− "dev": true,
50395702 "requires": {
50405703 "escalade": "^3.1.1",
50415704 "picocolors": "^1.0.0"
@@ -5131,8 +5794,7 @@
51315794 "yaml": {
51325795 "version": "1.10.2",
51335796 "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz",
5134− "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
5135− "dev": true
5797+ "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg=="
51365798 }
51375799 }
51385800}
ui/package.json+4−1
@@ -12,6 +12,7 @@
1212 "dependencies": {
1313 "@heroicons/react": "^1.0.6",
1414 "@radix-ui/react-dropdown-menu": "^0.1.6",
15+ "@radix-ui/react-select": "^0.1.1",
1516 "@radix-ui/react-toggle-group": "^0.1.5",
1617 "@urbit/api": "^2.0.0",
1718 "@urbit/http-api": "^2.0.0",
@@ -20,8 +21,10 @@
2021 "lodash.debounce": "^4.0.8",
2122 "react": "^17.0.2",
2223 "react-dom": "^17.0.2",
24+ "react-hook-form": "^7.33.1",
2325 "react-query": "^3.39.1",
24− "react-router-dom": "^6.3.0"
26+ "react-router-dom": "^6.3.0",
27+ "react-select": "^5.4.0"
2528 },
2629 "devDependencies": {
2730 "@types/lodash.debounce": "^4.0.7",
ui/src/app.tsx+8−3
@@ -1,6 +1,8 @@
11import React from 'react';
22import { QueryClient, QueryClientProvider } from 'react-query';
33import { BrowserRouter, Route, Routes } from 'react-router-dom';
4+import { Layout } from './components/Layout';
5+import { Post } from './pages/Post';
46import { Search } from './pages/Search';
57
68const queryClient = new QueryClient();
@@ -8,9 +10,12 @@ const queryClient = new QueryClient();
810function Main() {
911 return (
1012 <Routes>
11− <Route path="/" element={<Search />} />
12− <Route path="/:lookup" element={<Search />} />
13− <Route path="/:lookup/:limit/:page" element={<Search />} />
13+ <Route element={<Layout />}>
14+ <Route path="/" element={<Search />} />
15+ <Route path="/search/:lookup" element={<Search />} />
16+ <Route path="/search/:lookup/:limit/:page" element={<Search />} />
17+ <Route path="/post" element={<Post />} />
18+ </Route>
1419 </Routes>
1520 );
1621}
ui/src/components/Filter.tsxnew file+55
@@ -0,0 +1,55 @@
1+import React from 'react';
2+import * as Select from '@radix-ui/react-select';
3+import { PostFilter, PostType } from '../types/seek';
4+
5+interface FilterItemProps {
6+ title: PostFilter;
7+}
8+
9+const FilterItem = ({ title }: FilterItemProps) => {
10+ return (
11+ <Select.Item value={title} className="text-mauve cursor-default select-none relative py-2 pl-3 pr-9 focus:outline-none focus:ring-1 focus:ring-rosy font-semibold">
12+ <Select.ItemText>%{title}</Select.ItemText>
13+ <Select.ItemIndicator className="text-rosy absolute inset-y-0 right-0 flex items-center pr-4">
14+ <svg className="h-5 w-5" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
15+ <path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
16+ </svg>
17+ </Select.ItemIndicator>
18+ </Select.Item>
19+ )
20+}
21+
22+const filters: PostFilter[] = ['all', 'app', 'group', 'content', 'other'];
23+
24+interface FilterProps<T extends string> {
25+ selected: T;
26+ onSelect: (value: T) => void;
27+ showAll?: boolean;
28+ className?: string;
29+}
30+
31+export function Filter<T extends string>({ selected, onSelect, className, showAll = true }: FilterProps<T>) {
32+ const options = showAll ? filters : filters.filter(f => f === 'all');
33+ return (
34+ <div className={className}>
35+ <Select.Root value={selected} onValueChange={onSelect}>
36+ <span className="sr-only">Filter Type</span>
37+ <Select.Trigger className="bg-linen flex justify-between w-32 font-semibold border border-fawn/30 rounded-lg shadow-sm pl-3 pr-2 py-1.5 text-left cursor-default focus:outline-none focus:ring-1 focus:ring-rosy focus:border-rosy sm:text-sm">
38+ <Select.Value>%{selected}</Select.Value>
39+ <Select.Icon asChild>
40+ <svg className="h-5 w-5 text-rosy" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor">
41+ <path fillRule="evenodd" d="M10 3a1 1 0 01.707.293l3 3a1 1 0 01-1.414 1.414L10 5.414 7.707 7.707a1 1 0 01-1.414-1.414l3-3A1 1 0 0110 3zm-3.707 9.293a1 1 0 011.414 0L10 14.586l2.293-2.293a1 1 0 011.414 1.414l-3 3a1 1 0 01-1.414 0l-3-3a1 1 0 010-1.414z" clipRule="evenodd" />
42+ </svg>
43+ </Select.Icon>
44+ </Select.Trigger>
45+ <Select.Content className="z-10 w-full bg-linen shadow-lg max-h-60 rounded-md py-1 text-base ring-1 ring-rosy ring-opacity-5 overflow-auto focus:outline-none sm:text-sm">
46+ <Select.Viewport>
47+ {options.map(f => (
48+ <FilterItem key={f} title={f} />
49+ ))}
50+ </Select.Viewport>
51+ </Select.Content>
52+ </Select.Root>
53+ </div>
54+ )
55+}
ui/src/components/Layout.tsxnew file+17
@@ -0,0 +1,17 @@
1+import cn from 'classnames';
2+import React from 'react';
3+import { Outlet, useParams } from 'react-router-dom';
4+import { Meta } from './Meta';
5+
6+export const Layout = () => {
7+ const params = useParams<{ lookup: string }>();
8+
9+ return (
10+ <main className={cn("flex flex-col items-center min-h-screen", !params.lookup && 'justify-center')}>
11+ <div className="max-w-2xl w-full p-4 sm:py-12 px-8 space-y-6">
12+ <Outlet />
13+ </div>
14+ <Meta className='self-start mx-10 my-6 sm:m-0 sm:fixed left-4 bottom-4 text-sm'/>
15+ </main>
16+ )
17+}
ui/src/components/Logo.tsxnew file+13
@@ -0,0 +1,13 @@
1+import React from 'react';
2+
3+interface LogoProps {
4+ className?: string;
5+}
6+
7+export const Logo = ({ className }: LogoProps) => {
8+ return (
9+ <svg className={className} fill="none" xmlns="http://www.w3.org/2000/svg" viewBox='0 0 179 58'>
10+ <path className='fill-current' d="M10.125 44.5c-1.66667 0-3.33333-.1875-5-.5625-1.66667-.375-3.0625-.875-4.1875-1.5l-.3125-7.125h3.6875l1.3125 4.5c1.5.9583 3.14583 1.4375 4.9375 1.4375 1.3333 0 2.375-.2917 3.125-.875.75-.5833 1.125-1.3542 1.125-2.3125 0-1-.375-1.8542-1.125-2.5625-.75-.7083-2.2708-1.5-4.5625-2.375-3.04167-1.1667-5.16667-2.3958-6.375-3.6875-1.20833-1.2917-1.8125-2.9167-1.8125-4.875 0-1.625.5-3.0625 1.5-4.3125s2.375-2.2292 4.125-2.9375c1.79167-.7083 3.8542-1.0625 6.1875-1.0625 1.2917 0 2.5833.125 3.875.375 1.3333.2083 2.4375.5208 3.3125.9375l.6875 7H17l-1.4375-4.375c-.4167-.25-.9167-.4375-1.5-.5625-.5833-.1667-1.1667-.25-1.75-.25-1.3333 0-2.41667.3125-3.25.9375-.79167.5833-1.1875 1.3542-1.1875 2.3125 0 1.0417.45833 1.9167 1.375 2.625.9583.7083 2.6458 1.5833 5.0625 2.625C17.0625 29.0417 19 30.25 20.125 31.5c1.1667 1.25 1.75 2.7917 1.75 4.625 0 2.5-1.1042 4.5208-3.3125 6.0625C16.3958 43.7292 13.5833 44.5 10.125 44.5ZM24.8125 57.75l-.1875-2.6875 3.875-1c0-.2083.0208-.625.0625-1.25s.0625-1.4375.0625-2.4375c.0417-1 .0833-2.1667.125-3.5s.0625-2.8125.0625-4.4375l.125-13.375c0-1.25-.0417-2.4167-.125-3.5s-.2292-2.1042-.4375-3.0625l-4-.875v-2.5625l10.1875-2.6875 1.5 1.0625-.4375 3.625.1875.0625c1.0417-1.5 2.2917-2.6875 3.75-3.5625S42.5833 16.25 44.25 16.25c2.0833 0 4 .5417 5.75 1.625 1.75 1.0417 3.1458 2.5417 4.1875 4.5 1.0833 1.9583 1.625 4.2917 1.625 7 0 2.75-.625 5.2708-1.875 7.5625-1.25 2.25-3 4.0625-5.25 5.4375s-4.875 2.0625-7.875 2.0625c-.7917 0-1.625-.0833-2.5-.25-.875-.125-1.6875-.3333-2.4375-.625V47.75c0 1.4583.0208 2.7917.0625 4 .0833 1.2083.1458 1.9792.1875 2.3125L41.25 55l-.1875 2.75h-16.25Zm16.125-17.3125c1.4583 0 2.7083-.3333 3.75-1 1.0833-.7083 1.9375-1.75 2.5625-3.125.625-1.4167.9375-3.1667.9375-5.25.0417-2.0833-.2708-3.8125-.9375-5.1875-.625-1.4167-1.4583-2.4792-2.5-3.1875-1.0417-.7083-2.2083-1.0625-3.5-1.0625-1.0417 0-2.0208.25-2.9375.75-.9167.4583-1.7292 1.1458-2.4375 2.0625v14.5c.6667.4583 1.4375.8333 2.3125 1.125.9167.25 1.8333.375 2.75.375ZM59.5625 44l-.1875-2.6875 3.875-1c.0833-.375.1458-1.1042.1875-2.1875.0417-1.0833.0833-2.3958.125-3.9375.0417-1.5833.0625-3.2292.0625-4.9375v-7.8125c0-1.4167-.0208-2.875-.0625-4.375 0-1.5-.0208-2.9375-.0625-4.3125 0-1.4167-.0208-2.6667-.0625-3.75-.0417-1.125-.0833-1.97917-.125-2.5625l-4.625-.625-.125-2.4375L69.375.5l1.5625 1c-.0417 1.29167-.1042 2.5625-.1875 3.8125-.0417 1.20833-.0833 2.54167-.125 4 0 1.4583-.0208 3.125-.0625 5-.0417 1.8333-.0833 4.0208-.125 6.5625l.1875.0625c1.3333-1.5833 2.75-2.75 4.25-3.5 1.5-.7917 3.1042-1.1875 4.8125-1.1875s3.25.4375 4.625 1.3125c1.4167.8333 2.5417 2.0833 3.375 3.75.8333 1.6667 1.25 3.7083 1.25 6.125v6.5c0 1.4167.0208 2.75.0625 4 .0833 1.2083.1667 2 .25 2.375l3.875 1L92.9375 44h-14.625l-.1875-2.6875 3.5625-1c.0833-.3333.1458-.8125.1875-1.4375.0417-.625.0625-1.3542.0625-2.1875C81.9792 35.8542 82 35 82 34.125v-5.75c0-1.625-.2708-2.9375-.8125-3.9375-.5-1.0417-1.1667-1.7917-2-2.25-.8333-.5-1.75-.75-2.75-.75-1.125 0-2.2083.2708-3.25.8125-1 .5-1.875 1.25-2.625 2.25v9.25c0 1.6667.0208 3.1042.0625 4.3125.0833 1.1667.1875 1.9167.3125 2.25l3.8125 1L74.5625 44h-15ZM95.1875 44 95 41.25l4.1875-.9375c.0417-.1667.0833-.5208.125-1.0625s.0833-1.25.125-2.125c.0417-.9167.0625-1.9792.0625-3.1875l.0625-4.75c0-1.2917-.0417-2.4792-.125-3.5625-.0833-1.125-.2292-2.1667-.4375-3.125l-4.1875-.875v-2.5625L105.5 16.375l1.438 1.0625c-.126 1.2917-.23 2.6042-.313 3.9375-.042 1.2917-.063 2.7917-.063 4.5v7.875c0 1.5417.021 2.9375.063 4.1875.083 1.25.187 2.0417.313 2.375l4.187.9375-.187 2.75H95.1875Zm7.9375-33.4375c-1.458 0-2.625-.4375-3.5-1.3125-.875-.91667-1.3125-2-1.3125-3.25 0-1.20833.4375-2.27083 1.3125-3.1875.875-.91667 2.042-1.375 3.5-1.375 1.458 0 2.604.45833 3.437 1.375.834.91667 1.25 1.97917 1.25 3.1875 0 1.25-.416 2.33333-1.25 3.25-.833.875-1.979 1.3125-3.437 1.3125ZM113.312 44l-.187-2.6875 3.875-1c.042-.1667.083-.5.125-1 .042-.5417.083-1.25.125-2.125.042-.9167.062-2 .062-3.25l.063-4.75c0-1.3333-.042-2.5417-.125-3.625-.083-1.0833-.229-2.1042-.438-3.0625l-4-.875v-2.5625L123 16.375l1.5 1.0625-.375 3.5.187.0625c1.334-1.5833 2.75-2.7708 4.25-3.5625 1.542-.7917 3.167-1.1875 4.876-1.1875 1.708 0 3.25.4375 4.624 1.3125 1.417.8333 2.542 2.0833 3.376 3.75.833 1.6667 1.25 3.7083 1.25 6.125v6.5c0 1.4167.02 2.75.062 4 .042 1.2083.125 2 .25 2.375l3.875 1L146.688 44H132l-.188-2.6875 3.626-1c.083-.3333.145-.8125.187-1.4375.042-.625.063-1.3542.063-2.1875.041-.8333.062-1.6875.062-2.5625v-5.75c0-1.625-.271-2.9375-.812-3.9375-.5-1.0417-1.167-1.7917-2-2.25-.834-.5-1.75-.75-2.75-.75-1.167 0-2.25.2708-3.25.8125-1 .5-1.876 1.25-2.626 2.25v9.25c0 1.5833.021 3 .063 4.25.083 1.2083.187 1.9792.313 2.3125l3.874 1L128.375 44h-15.063ZM178.562 44h-13.874l-.188-2.6875 2.938-1-5.626-7.375-1.937-2.4375-7.813-10.0625-2.937-1 .187-2.6875h13.626l.187 2.6875-2.625 1 4.5 5.875 1.938 2.5625 8.874 11.4375 2.938 1L178.562 44Zm-8.937-23.5625-2.625-1 .188-2.6875H177l.188 2.6875-2.938 1-7.312 8.4375-5.126 4.0625-5.312 7.375 2.938 1L159.25 44h-10.188l-.187-2.6875 2.937-1 8.063-9.8125L165 26.3125l4.625-5.875Z" />
11+ </svg>
12+ )
13+}
ui/src/components/Meta.tsxnew file+45
@@ -0,0 +1,45 @@
1+import { PlusIcon } from '@heroicons/react/solid';
2+import { ChargeUpdateInitial, scryCharges } from '@urbit/api';
3+import React, { useEffect, useState } from 'react';
4+import { Link } from 'react-router-dom';
5+import api from '../api';
6+import { Logo } from './Logo';
7+
8+interface MetaProps {
9+ className?: string;
10+}
11+
12+export const Meta = ({ className }: MetaProps) => {
13+ const [version, setVersion] = useState('');
14+
15+ useEffect(() => {
16+ if (!version) {
17+ api.scry<ChargeUpdateInitial>(scryCharges).then(charges => {
18+ const version = charges.initial.seek?.version;
19+
20+ if (version) {
21+ setVersion(version);
22+ }
23+ })
24+ }
25+ }, []);
26+
27+ return (
28+ <footer className={className}>
29+ <div className='flex mb-2 space-x-3 items-end'>
30+ <Logo className="w-24 text-rosy" />
31+ {version && <span className='mb-[3px]'>v{version}</span>}
32+ </div>
33+ <a
34+ className="inline-block font-mono default-ring underline rounded-md hover:text-rosy mb-4"
35+ href="web+urbitgraph://group/~nocsyx-lassul/sphinx"
36+ >
37+ ~nocsyx-lassul/sphinx
38+ </a>
39+ <Link to="/post" className="flex items-center rounded-lg text-base font-semibold text-rosy bg-rosy/30 border-2 border-transparent hover:border-rosy p-2 transition-colors">
40+ <PlusIcon className='h-4 w-4 mr-1' />
41+ Add a Listing
42+ </Link>
43+ </footer>
44+ )
45+}
ui/src/components/SearchInput.tsx+2−2
@@ -15,14 +15,14 @@ export const SearchInput = ({ lookup, className, onChange }: SearchInputProps) =
1515 }, [onChange]);
1616
1717 return (
18− <div className='relative flex items-center'>
18+ <div className={cn('relative flex items-center', className)}>
1919 <SearchIcon className='flip absolute left-2 h-5 w-5' />
2020 <input
2121 type='text'
2222 value={lookup}
2323 onChange={onInput}
2424 placeholder="Search"
25− className={cn('w-full py-1 pl-9 pr-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg', className)}
25+ className={cn('w-full py-1 pl-9 pr-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30')}
2626 />
2727 </div>
2828 )
ui/src/components/SearchList.tsx+20−5
@@ -8,18 +8,33 @@ interface SearchListProps {
88}
99
1010export const SearchList = ({ listings, className }: SearchListProps) => {
11+ if (!listings) {
12+ return null;
13+ }
14+
15+ if (listings.length === 0) {
16+ return (
17+ <div>
18+ <h2 className='text-xl font-semibold'>No Results</h2>
19+ </div>
20+ )
21+ }
22+
1123 return (
1224 <ul className={cn('px-2 space-y-6', className)}>
1325 {listings && listings.map(l => (
1426 <li key={l.hash}>
15− <article className='group relative flex w-full'>
27+ <article className='group flex w-full'>
1628 {l.post.image ? (
17− <img src={l.post.image} className="absolute -left-28 w-24 h-24 object-cover" />
18− ) : <div className='absolute -left-28 w-24 h-24' />}
19− <div className='flex-1'>
29+ <img src={l.post.image} className="w-24 h-24 object-cover rounded-xl" />
30+ ) : <div className='w-24 h-24 bg-rosy/20 rounded-xl' />}
31+ <div className='flex-1 ml-4'>
2032 <a className='block w-full mb-2 hover:text-rosy transition-colors' href={l.post.link}>
2133 <h2 className='block font-semibold text-lg leading-none mb-1'>{l.post.title}</h2>
22− <span className='block font-mono text-xs'>{l.post.link.replace('web+urbitgraph://', '')}</span>
34+ <div className='font-mono text-xs space-x-3'>
35+ <strong>%{l.post.type}</strong>
36+ <span>{l.post.link.replace('web+urbitgraph://', '')}</span>
37+ </div>
2338 </a>
2439 <p className='mb-2 text-sm'>{l.post.description}</p>
2540 <div className='flex font-mono text-xs text-zinc-500 space-x-3 opacity-0 group-hover:opacity-100 transition-opacity'>
ui/src/components/TagField.tsxnew file+151
@@ -0,0 +1,151 @@
1+import React, { Component, KeyboardEventHandler, useCallback, useState } from 'react';
2+
3+import CreatableSelect from 'react-select/creatable';
4+import { ActionMeta, components, ControlProps, MultiValue, MultiValueGenericProps, MultiValueRemoveProps, OnChangeValue } from 'react-select';
5+import { XIcon } from '@heroicons/react/solid';
6+
7+export interface Option {
8+ readonly label: string;
9+ readonly value: string;
10+}
11+
12+const createOption = (label: string) => ({
13+ label,
14+ value: label,
15+});
16+
17+function Control({ children, ...props }: ControlProps<Option, true>) {
18+ return (
19+ <components.Control
20+ {...props}
21+ className="flex items-center w-full py-1 px-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30 cursor-text text-mauve"
22+ >
23+ {children}
24+ </components.Control>
25+ );
26+}
27+
28+function TagContainer({
29+ children,
30+ ...props
31+}: MultiValueGenericProps<Option, true>) {
32+ return (
33+ <components.MultiValueContainer {...props}>
34+ <div className="flex">{children}</div>
35+ </components.MultiValueContainer>
36+ );
37+}
38+
39+function TagLabel({ data }: { data: Option }) {
40+ const { value, label } = data;
41+ return (
42+ <div className="flex h-6 items-center rounded-l bg-lavender text-linen">
43+ <span className="p-1 font-semibold">{label || value}</span>
44+ </div>
45+ );
46+}
47+
48+function TagRemove(props: MultiValueRemoveProps<Option, true>) {
49+ return (
50+ <components.MultiValueRemove {...props}>
51+ <div className="flex h-full items-center rounded-r bg-lavender pr-1">
52+ <XIcon className="h-4 w-4 text-linen" />
53+ </div>
54+ </components.MultiValueRemove>
55+ );
56+}
57+
58+interface TagFieldProps {
59+ tags: MultiValue<Option>;
60+ onTags: (tags: MultiValue<Option>) => void;
61+ className?: string;
62+}
63+
64+export const TagField = ({ tags, onTags, className }: TagFieldProps) => {
65+ const [input, setInput] = useState('');
66+
67+ const handleChange = useCallback((
68+ value: OnChangeValue<Option, true>,
69+ actionMeta: ActionMeta<Option>
70+ ) => {
71+ console.group('Value Changed');
72+ console.log(value);
73+ console.log(`action: ${actionMeta.action}`);
74+ console.groupEnd();
75+ onTags(value);
76+ }, []);
77+
78+ const handleInputChange = useCallback((value) => {
79+ setInput(value);
80+ }, []);
81+
82+ const handleKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback((event) => {
83+ if (!input) return;
84+
85+ switch (event.key) {
86+ case 'Enter':
87+ case 'Tab':
88+ console.group('Value Added');
89+ console.log(tags);
90+ console.groupEnd();
91+
92+ setInput('');
93+ onTags([...tags, createOption(input)])
94+ event.preventDefault();
95+ }
96+ }, [input, tags]);
97+
98+ return (
99+ <CreatableSelect<Option, true>
100+ className={className}
101+ components={{
102+ ...components,
103+ Control,
104+ MultiValueContainer: TagContainer,
105+ MultiValueLabel: TagLabel,
106+ MultiValueRemove: TagRemove,
107+ DropdownIndicator: null
108+ }}
109+ styles={{
110+ control: (base) => ({}),
111+ input: (base) => ({
112+ ...base,
113+ padding: 0,
114+ margin: 0,
115+ }),
116+ clearIndicator: (base) => ({
117+ ...base,
118+ cursor: 'pointer',
119+ padding: 0
120+ }),
121+ multiValue: (base) => ({
122+ ...base,
123+ backgroundColor: '',
124+ margin: '0 2px',
125+ }),
126+ multiValueRemove: (base) => ({
127+ ...base,
128+ paddingRight: '',
129+ paddingLeft: '',
130+ '&:hover': {
131+ color: 'inherit',
132+ backgroundColor: 'inherit',
133+ },
134+ }),
135+ valueContainer: (base) => ({
136+ ...base,
137+ padding: 0
138+ })
139+ }}
140+ inputValue={input}
141+ isClearable
142+ isMulti
143+ menuIsOpen={false}
144+ onChange={handleChange}
145+ onInputChange={handleInputChange}
146+ onKeyDown={handleKeyDown}
147+ placeholder="Type something and press enter..."
148+ value={tags}
149+ />
150+ );
151+}
ui/src/pages/Post.tsxnew file+106
@@ -0,0 +1,106 @@
1+import debounce from 'lodash.debounce';
2+import React, { useCallback, useEffect, useRef, useState } from 'react';
3+import { useForm } from 'react-hook-form';
4+import { Link, useNavigate } from 'react-router-dom';
5+import { MultiValue } from 'react-select';
6+import api from '../api';
7+import { Filter } from '../components/Filter';
8+import { Option, TagField } from '../components/TagField';
9+import { Declare, Post as PostForm } from '../types/seek';
10+
11+export const Post = () => {
12+ const navigate = useNavigate();
13+ const [tags, setTags] = useState<MultiValue<Option>>([]);
14+ const [image, setImage] = useState<string>('');
15+ const { register, watch, reset, setValue, handleSubmit } = useForm<PostForm>({
16+ defaultValues: {
17+ title: '',
18+ type: 'other',
19+ link: '',
20+ image: '',
21+ description: ''
22+ }
23+ });
24+
25+ const updateImg = useRef(debounce(setImage));
26+ const img = watch('image');
27+ const type = watch('type');
28+
29+ const onSubmit = useCallback((values: Omit<PostForm, 'tags'>) => {
30+ api.poke<Declare>({
31+ app: 'seek',
32+ mark: 'declare',
33+ json: {
34+ reach: 'friends',
35+ post: {
36+ ...values,
37+ tags: tags.map(t => t.value)
38+ }
39+ }
40+ })
41+ reset();
42+ setTags([]);
43+ }, [tags]);
44+
45+ useEffect(() => {
46+ register('type')
47+ }, []);
48+
49+ useEffect(() => {
50+ if (img) {
51+ updateImg.current(img)
52+ }
53+ }, [img]);
54+
55+ return (
56+ <>
57+ <header>
58+ <h1 className='text-2xl font-semibold'>Add a Listing</h1>
59+ </header>
60+ <form onSubmit={handleSubmit(onSubmit)}>
61+ <div className='flex w-full space-x-6'>
62+ <div className='flex-1 space-y-3'>
63+ <div>
64+ <label htmlFor='title' className='text-sm font-semibold'>Title</label>
65+ <div className='flex items-center space-x-2'>
66+ <input {...register('title', { required: true, maxLength: 80 })} className='flex-1 w-full py-1 px-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30' placeholder='sphinx'/>
67+ <Filter selected={type} onSelect={(value) => setValue('type', value)} />
68+ </div>
69+ </div>
70+ <div className='flex items-center space-x-6'>
71+ <div className='flex-1 space-y-3'>
72+ <div>
73+ <label htmlFor='image' className='text-sm font-semibold'>Image</label>
74+ <input type="url" {...register('image')} className='flex-1 w-full py-1 px-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30' placeholder='https://nyc3.digitaloceanspaces.com/...' />
75+ </div>
76+ <div>
77+ <label htmlFor='link' className='text-sm font-semibold'>Link</label>
78+ <input type="url" {...register('link', { required: true })} className='flex-1 w-full py-1 px-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30' placeholder='web+urbitgraph://~nocsyx-lassul/sphinx' />
79+ </div>
80+ </div>
81+ <img className='flex-none object-cover w-28 h-28 mt-4 border-2 border-dashed border-mauve/60 rounded-lg' src={image || undefined} />
82+ </div>
83+ <div>
84+ <label htmlFor='description' className='text-sm font-semibold'>Description</label>
85+ <textarea {...register('description', { required: true, maxLength: 256 })} rows={2} className='align-middle w-full py-1 px-2 bg-fawn/30 focus:outline-none focus:ring-2 ring-lavender rounded-lg border border-fawn/30' placeholder='An app for answering your riddles' />
86+ </div>
87+ <div>
88+ <label className='text-sm font-semibold'>Tags</label>
89+ <TagField tags={tags} onTags={setTags} />
90+ </div>
91+ <div className='pt-3'>
92+ <div className='flex justify-between border-t border-zinc-300 py-3'>
93+ <button type="button" className='flex items-center rounded-lg text-base font-semibold text-rosy bg-rosy/30 border-2 border-transparent hover:border-rosy leading-none py-2 px-3 transition-colors' onClick={() => navigate(-1)}>
94+ Back to Search
95+ </button>
96+ <button type="submit" className='flex items-center rounded-lg text-base font-semibold text-linen bg-rosy border-2 border-transparent hover:border-linen/60 leading-none py-2 px-3 transition-colors'>
97+ Publish
98+ </button>
99+ </div>
100+ </div>
101+ </div>
102+ </div>
103+ </form>
104+ </>
105+ )
106+}
ui/src/pages/Search.tsx+23−21
@@ -4,11 +4,14 @@ import debounce from 'lodash.debounce';
44import { SearchInput } from '../components/SearchInput';
55import { SearchList } from '../components/SearchList';
66import { useQuery } from 'react-query';
7−import { Search as SearchType } from '../types/seek';
7+import { PostFilter, PostType, Search as SearchType } from '../types/seek';
88import api from '../api';
9−import { useNavigate, useParams } from 'react-router-dom';
9+import { Link, useNavigate, useParams } from 'react-router-dom';
1010import { Paginator } from '../components/Paginator';
1111import { stringToTa } from '@urbit/api';
12+import { Filter } from '../components/Filter';
13+import { Meta } from '../components/Meta';
14+import { DocumentAddIcon, PlusCircleIcon, PlusIcon } from '@heroicons/react/solid';
1215
1316interface RouteParams extends Record<string, string | undefined> {
1417 lookup?: string;
@@ -31,13 +34,14 @@ export const Search = () => {
3134 limit,
3235 page
3336 } = useParams<RouteParams>();
37+ const [selected, setSelected] = useState<PostFilter>('all')
3438 const [rawSearch, setRawSearch] = useState(lookup || '');
3539 const size = parseInt(limit || '10', 10);
3640 const pageInt = parseInt(page || '1', 10) - 1;
3741 const start = pageInt * size;
38− const { data } = useQuery<unknown, unknown, SearchType>(`lookup-${lookup}-${size}-${start}`, () => api.scry<SearchType>({
42+ const { data } = useQuery<unknown, unknown, SearchType>(`lookup-${selected}-${lookup}-${size}-${start}`, () => api.scry<SearchType>({
3943 app: 'seek',
40− path: `/lookup/${encodeLookup(lookup)}/${start}/${size}`
44+ path: `/lookup/${selected}/${encodeLookup(lookup)}/${start}/${size}`
4145 }), {
4246 enabled: !!lookup,
4347 keepPreviousData: true
@@ -51,12 +55,11 @@ export const Search = () => {
5155
5256 const update = useRef(debounce((value: string) => {
5357 if (!value) {
54− navigate('/');
5558 return;
5659 }
5760
58− navigate(`/${value}/${size}/${page || '1'}`)
59− }, 200))
61+ navigate(`/search/${value}/${size}/${page || '1'}`)
62+ }, 400))
6063
6164 const onChange = useCallback((value: string) => {
6265 setRawSearch(value);
@@ -72,19 +75,18 @@ export const Search = () => {
7275 }, [lookup, size]);
7376
7477 return (
75− <main className={cn("flex flex-col items-center min-h-screen", !data && 'justify-center')}>
76− <div className="max-w-xl w-full p-4 sm:py-12 px-8 space-y-6">
77− <header>
78− <SearchInput lookup={rawSearch} onChange={onChange} />
79− </header>
80− {data && <div className='flex justify-end border-t border-zinc-300'>
81− <Paginator pages={pages} currentPage={pageInt} linkBuilder={linkBuild} />
82− </div>}
83− <SearchList listings={data?.listings || []} />
84− {data && pages > 1 && <div className='flex justify-end border-t border-zinc-300'>
85− <Paginator pages={pages} currentPage={pageInt} linkBuilder={linkBuild} />
86− </div>}
87− </div>
88− </main>
78+ <>
79+ <header className='flex items-center space-x-2'>
80+ <SearchInput className='flex-1' lookup={rawSearch} onChange={onChange} />
81+ <Filter selected={selected} onSelect={setSelected} />
82+ </header>
83+ {lookup && data && <div className='flex justify-end border-t border-zinc-300'>
84+ <Paginator pages={pages} currentPage={pageInt} linkBuilder={linkBuild} />
85+ </div>}
86+ {lookup && <SearchList listings={data?.listings || []} />}
87+ {data && pages > 1 && <div className='flex justify-end border-t border-zinc-300'>
88+ <Paginator pages={pages} currentPage={pageInt} linkBuilder={linkBuild} />
89+ </div>}
90+ </>
8991 )
9092}
ui/src/types/seek.ts+10−1
@@ -1,6 +1,15 @@
1+export type PostType = 'app' | 'group' | 'content' | 'other';
2+
3+export type PostFilter = 'all' | PostType;
4+
5+export interface Declare {
6+ reach: 'friends' | 'public' | 'private';
7+ post: Post
8+}
9+
110export interface Post {
211 title: string;
3− type: 'app' | 'group' | 'content' | 'other';
12+ type: PostType;
413 description: string;
514 image: string;
615 tags: string[];