* /dream api: Upload StableDiffusion image to Firestore
* Minor tweaks
* Set content type on uploaded image
This makes it so the image doesn't auto-download when opened in a new tab
* Allow users to dream directly from within Manifold
* Remove unused import
* Implement a /comment endpoint which supports html and markdown
* Upgrade @tiptap/core to latest
* Update all tiptap deps to beta.199
* Add @tiptap/suggestion
* Import @tiptap/html in the right place
* ... add deps everywhere
So I have no idea how common deps work apparently
* Add tiptap/suggestion too
* Clean up dream
* More cleanups
* Rework /comment endpoint
* Move API to /comment
* Change imports in case that matters
* Add a couple todos
* Dynamically import micromark
* Parallellize gsutil with -m option
* Adding comments via api working, editor.tsx erroring out
* Unused import
* Remove disabled state from useTextEditor
Co-authored-by: Ian Philips <iansphilips@gmail.com>
* Fix chart `onMouseOver` propagation
* Make generic charts support money on y-axis
* Fix somewhat ridiculous `formatMoney` to work with negative amounts
* Make margins on charts configurable
* Implement color as function of point on SingleValueHistoryChart
* Rewrite portfolio history graphs with new graph machinery
* Toast Nivo
* Factor out section header
* Remove daily balance change
* Remove dead code
* Layout, add streak
* Fix visibility observer to work on server
* Tweak
* Search perserved by url
* Add pill query param
* Add search page
* Extract component for ProbChangeRow
* Explore groups page
* Add search row
* Add trending groups section
* Add unfollow option for group
* Experimental home: accommodate old saved sections.
* Tweaks to search layout
* Rearrange layout
* Daily movers page
* Add streak grayed out indicator
* Use firebase query instead of algolia search for groups
* Replace trending group card with pills
* Hide streak if you turned off that notification
* Listen for group updates
* Better UI for adding / removing groups
* Toast feedback for join/leave group. Customize button moved to bottom.
* Remove Home title
* Refactor arrange home
* Add new for you section
* Add prefetch
* Move home out of experimental!
* Remove unused import
* Show non-public markets from group
* Add embedded market grids
* Hacky way to set height
I haven't figured out a way yet to get the height of the actual iframe's content, so I did some bad estimate for now to unblock shipping the feature, while I continue investigating.
* WIP persistence work
* Fix up close date filter, kill custom scroll restoration
* Use built-in Next.js scroll restoration machinery
* Tweaking stuff
* Implement 'history state' idea
* Clean up and unify persistent state stores
* Respect options for persisting contract search
* Fix typing in common lib
* Clean up console logging
* Make `groupConsecutive` more capable
* Put denormalized `contractQuestion` and `contractSlug` on comments
* Update user profile UI to use new denormalized fields
* `/Austin` -> `/market`
* Load bets and comments tabs data on user page independently
* Implement basic pagination on profile comments list
* Tweak server auth to return `null` instead of `undefined`
* Switch to SSR for user page
* Fix lint
* Fix broken contract fetching in user bets list
* Tidying
* Embed a tweet by URL
* Clean up imports
* Prevent tweetId from getting interpreted as a number
* Use a single place to embed iframe, Youtube, and Tweets
* Support Manifold and Metaculus embeds
* Remove unused import
* Simplify Manifold paste logic
* Clean up embed rewrite code
* Add back comment
* Rejigger config so tsx is only in web/
* Clean up comment
* Revert unnecessary tsconfig change
* Fix placeholder
* Lighten placeholder
* Add @ mentions to editor
* Fix mention list not loading
* Sort mention list by prefix, follow count
* Render at mention with Linkify component
- mentions are now Next <Link> rather than <a>
- fix bug where editor.getText() returns [object Object] for mentions
- fix mention rendering for posted markets
* Try embedding iframes in tiptap
* When iframe code is pasted, inject it into the editor
* Code cleanups and comments
* Remove clsx dependency
Cuz it doesn't exist in `common` anyways
* Rename to tiptap-iframe
* Add TipTap editor and renderer components
* Change market description editor to rich text
* Type description as JSON, fix string-based logic
- Delete make-predictions.tsx
- Delete feed logic that showed descriptions
* wip Fix API validation
* fix type error
* fix extension import (backend)
In firebase, typescript compiles imports into common js imports
like `const StarterKit = require("@tiptap/starter-kit")`
Even though StarterKit is exported from the cjs file, it gets imported
as undefined. But it magically works if we import *
If you're reading this in the future, consider replacing StarterKit with
the entire list of extensions.
* Stop load on fail create market, improve warning
* Refactor editor as hook / fix infinite submit bug
Move state of editor back up to parent
We have to do this later anyways to allow parent to edit
* Add images - display, paste + uploading
* add uploading state of image
* Fix placeholder, misc styling
min height, quote
* Fix appending to description
* code review fixes: rename, refactor, chop carets
* Add hint & upload button on new lines
- bump to Tailwind 3.1 for arbitrary variants
* clean up, run prettier
* rename FileButton to FileUploadButton
* add image extension as functions dependency
* Simple limit order UI
* Update bet schema
* Restrict bet panel / bet row to only CPMMBinaryContracts (all binary DPM are resolved)
* Limit orders partway implemented
* Update follow leaderboard copy
* Change cpmm code to take some state instead of whole contract
* Write more of matching algorithm
* Fill in more of placebet
* Use client side contract search for emulator
* More correct matching
* Merge branch 'main' into limit-orders
* Some cleanup
* Listen for unfilled bets in bet panel. Calculate how the probability moves based on open limit orders.
* Simpler switching between bet & limit bet.
* Render your open bets (unfilled limit orders)
* Cancel bet endpoint.
* Fix build error
* Rename open bets to limit bets. Tweak payout calculation
* Limit probability selector to 1-99
* Deduct user balance only on each fill. Store orderAmount of bet. Timestamp of fills.
* Use floating equal to check if have shares
* Add limit order switcher to mobile bet dialog
* Support limit orders on numeric markets
* Allow CORS exception for Vercel deployments
* Remove console.logs
* Update user balance by new bet amount
* Tweak vercel cors
* Try another regexp for vercel cors
* Test another vercel regex
* Slight notifications refactor
* Fix docs edit link (#624)
* Fix docs edit link
* Update github links
* Small groups UX changes
* Groups UX on mobile
* Leaderboards => Rankings on groups
* Unused vars
* create: remove automatic setting of log scale
* Use react-query to cache notifications (#625)
* Use react-query to cache notifications
* Fix imports
* Cleanup
* Limit unseen notifs query
* Catch the bounced query
* Don't use interval
* Unused var
* Avoid flash of page nav
* Give notification question priority & 2 lines
* Right justify timestamps
* Rewording
* Margin
* Simplify error msg
* Be explicit about limit for unseen notifs
* Pass limit > 0
* Remove category filters
* Remove category selector references
* Track notification clicks
* Analyze tab usage
* Bold more on new group chats
* Add API route for listing a bets by user (#567)
* Add API route for getting a user's bets
* Refactor bets API to use /bets
* Update /markets to use zod validation
* Update docs
* Clone missing indexes from firestore
* Minor notif spacing adjustments
* Enable tipping on group chats w/ notif (#629)
* Tweak cors regex for vercel
* Your limit bets
* Implement selling shares
* Merge branch 'main' into limit-orders
* Fix lint
* Move binary search to util file
* Add note that there might be closed form
* Add tooltip to explain limit probability
* Tweak
* Cancel your limit orders if you run out of money
* Don't show amount error in probability input
* Require limit prob to be >= .1% and <= 99.9%
* Fix focus input bug
* Simplify mobile betting dialog
* Move mobile limit bets list into bet dialog.
* Small fixes to existing sell shares client
* Lint
* Refactor useSaveShares to actually read from localStorage, use less bug-prone interface.
* Fix NaN error
* Remove TODO
* Simple bet fill notification
* Tweak wording
* Sort limit bets by limit prob
* Padding on limit bets
* Match header size
Co-authored-by: Ian Philips <iansphilips@gmail.com>
Co-authored-by: ahalekelly <ahalekelly@gmail.com>
Co-authored-by: mantikoros <sgrugett@gmail.com>
Co-authored-by: Ben Congdon <ben@congdon.dev>
Co-authored-by: Austin Chen <akrolsmir@gmail.com>
* Clean the user's display name on update.
The user's display name should always be clean (see for example
functions/src/create-user.ts). However, change-user-info.ts does not
enforce this, thus potentially allowing a malicious user to change their
name to something that doesn't satisfy the rules for clean display
names.
Note: this cannot happen currently because all callers (in profile.tsx)
clean the name. However, doing it here is good defense in depth
(similar to how the userName is cleaned).
* Update display name max length to 30
* Add a script to hunt down too-long display names
* Make util.isProd a function
* Don't access admin.firestore() on top level of utils.ts
Co-authored-by: Jonas Wagner <ltlygwayh@gmail.com>
* Add tsconfig.json for common
* Prefer `const` over `let` over `var`
* Kill dead code
* Fix some trivial Typescript issues
* Turn on Typescript linting in common except for no-explicit-any
* Correctly specify tsconfig dir name in functions eslintrc
* Play with using 3 icons for 1-click usage
* Align bet icons with the percentages
* Hide liquidity injection star, for now
* Fix Free Response card layouts
* Use triangles instead of planes
* Set correct hover states the arrows
* Fix down triangle & padding
* Default large nums to 2 sigfigs
* Clean up hover areas
* Fix bet width, remove "chance/expected"
* Show "M$20" on hover, hide arrows when closed
* Improve click targets
* FR: "MULTI" => "MANY", single => "TOP"
* Install react-hot-toaster
* Implement quick betting on binary questions
* Handle different kinds of markets
* Extract out QuickBet into its own component
* Minor tweaks
* Visually separate out quick bet pane
* Hide quick bet for FR markets with no answers
* Fill in which bets the user has already placed
* Animate movements, fix binary direction
* Hover arrows are now always gray
* Pull out code into quick-bet.tsx
* Minor comments
* Fix import
ts-ignore is scary
* Fixes from James's feedback
* Hide text only on quickbet
* Set common package.json sideEffects: false
* Configure SWC to modularize lodash imports
* Import specific lodash functions instead of _
* Add an eslint rule to avoid full lodash import
* Numeric contract type
* Create market numeric type
* Add numeric graph (coded without testing)
* Outline of numeric bet panel
* Update bet panel logic
* create numeric contracts
* remove batching for antes for numeric markets
* Remove focus
* numeric market range [1, 100]
* Zoom graph
* Hide bet panels
* getNumericBets
* Add numeric resolution panel
* Use getNumericBets in bet panel calc
* Switch bucket count to 100
* Parallelize ante creation
* placeBet for numeric markets
* halve std of numeric bets
* Update resolveMarket with numeric type
* Set min and max for contract
* lower std for numeric bets
* calculateNumericDpmShares: use sorted order
* Use min and max to map the input
* Fix probability calc
* normpdf variance mislabeled
* range input
* merge
* change numeric graph color
* fix getNewContract params
* bet panel labels
* validation
* number input
* fix bucketing
* bucket input, numeric resolution panel
* outcome label
* merge
* numeric bet panel on mobile
* Make text underneath filled green answer bar selectable
* Default to 'all' feed category when loading page.
* fix numeric resolution panel
* fix numeric bet panel calculations
* display numeric resolution
* don't render NumericBetPanel for non numeric markets
* numeric bets: store shares, bet amounts across buckets in each bet object
* restore your bets for numeric markets
* numeric pnl calculations
* remove hasUserHitManaLimit
* contrain contract type
* handle undefined allOutcomeShares
* numeric ante bet amount
* use correct amount for numeric dpm payouts
* change numeric graph/outcome color
* numeric constants
* hack to show correct numeric payout in calculateDpmPayoutAfterCorrectBet
* remove comment
* fix ante display in bet list
* halve bucket count
* cast to NumericContract
* fix merge imports
* OUTCOME_TYPES
* typo
* lower bucket count to 200
* store raw numeric value with bet
* store raw numeric resolution value
* number input max length
* create page: min, max to undefined if not numeric market
* numeric resolution formatting
* expected value for numeric markets
* expected value for numeric markets
* rearrange lines for readability
* move normalpdf to util/math
* show bets tab
* check if outcomeMode is undefined
* remove extraneous auto-merge cruft
* hide comment status for numeric markets
* import
Co-authored-by: mantikoros <sgrugett@gmail.com>