diff --git a/docs/league_ids_mfl.csv b/docs/league_ids_mfl.csv
index dc1c578..d395376 100644
--- a/docs/league_ids_mfl.csv
+++ b/docs/league_ids_mfl.csv
@@ -1,97 +1,66 @@
-"league_id","year","league_name"
-"10033","2023","#SFB13 Jack in the Box"
-"11783","2023","#SFB13 7-Eleven"
-"13262","2023","#SFB13 Gusteau's"
-"13805","2023","#SFB13 Smash Burger"
-"14383","2023","#SFB13 Maruchan Instant Ramen"
-"16327","2023","#SFB13 Template"
-"16611","2023","#SFB13 Hostess"
-"18661","2023","#SFB13 Five Guys"
-"19083","2023","#SFB13 Funyuns"
-"19242","2023","#SFB13 Panda Express"
-"19410","2023","#SFB13 Chipotle"
-"20818","2023","#SFB13 Budweiser"
-"22257","2023","#SFB13 Pringles"
-"22683","2023","#SFB13 Taco John's"
-"22723","2023","#SFB13 Starry"
-"22787","2023","#SFB13 Ritz"
-"24005","2023","#SFB13 Bojangles"
-"24426","2023","#SFB13 Culver's"
-"24558","2023","#SFB13 Grilloâs Pickles"
-"25282","2023","#SFB13 Hormel"
-"25475","2023","#SFB13 Shake Shack"
-"25641","2023","#SFB13 Mt. Dew"
-"27680","2023","#SFB13 Bill's Bar"
-"27947","2023","#SFB13 Nathan's Famous"
-"28764","2023","#SFB13 Camden Town Brewery"
-"28894","2023","#SFB13 Honker Burger"
-"29943","2023","#SFB13 Jimmy John's"
-"30558","2023","#SFB13 Krispy Kreme"
-"30599","2023","#SFB13 Red Bull"
-"30818","2023","#SFB13 8 East"
-"32402","2023","#SFB13 Skyline"
-"33910","2023","#SFB13 Pollo Tropical"
-"34633","2023","#SFB13 JIF"
-"35324","2023","#SFB13 Nestle"
-"35829","2023","#SFB13 Smuckers"
-"36116","2023","#SFB13 Loretta's"
-"36357","2023","#SFB13 Sunkist"
-"36764","2023","#SFB13 Miller Lite"
-"37392","2023","#SFB13 Crush"
-"37912","2023","#SFB13 Katz's Deli"
-"38414","2023","#SFB13 LongHorn Steakhouse"
-"39548","2023","#SFB13 Bonefish Grill"
-"40010","2023","#SFB13 Del Taco"
-"41252","2023","#SFB13 The Capital Grille"
-"41619","2023","#SFB13 Auntie Anne's"
-"42040","2023","#SFB13 Hi-C"
-"43746","2023","#SFB13 Cold Stone Creamery"
-"44163","2023","#SFB13 Red Lobster"
-"44431","2023","#SFB13 Betty Crocker"
-"44607","2023","#SFB13 Boston Market"
-"44696","2023","#SFB13 Piggly Wiggly"
-"45910","2023","#SFB13 Potbelly Sandwich Shop"
-"46793","2023","#SFB13 Snapple"
-"46802","2023","#SFB13 Reese's"
-"46957","2023","#SFB13 Krusty Krab"
-"47664","2023","#SFB13 Corona"
-"48432","2023","#SFB13 Monster"
-"51041","2023","#SFB13 Pappy's Smokehouse"
-"51958","2023","#SFB13 First Watch"
-"51967","2023","#SFB13 Steak n Shake"
-"52150","2023","#SFB13 Mike & Ike"
-"53027","2023","#SFB13 Denny's"
-"53538","2023","#SFB13 Einstein Bros. Bagels"
-"54052","2023","#SFB13 Planters"
-"54291","2023","#SFB13 Got milk?"
-"54656","2023","#SFB13 White Claw"
-"55485","2023","#SFB13 M&Ms"
-"56520","2023","#SFB13 Happy Hour with Matthew Berry"
-"57021","2023","#SFB13 Jimmy Buffet's Margaritaville"
-"57244","2023","#SFB13 Portillo's"
-"57450","2023","#SFB13 BJ's Restaurant and Brewhouse"
-"57652","2023","#SFB13 Miller Lite"
-"57697","2023","#SFB13 Golden Corral"
-"57810","2023","#SFB13 Cracker Barrel"
-"58651","2023","#SFB13 Tostitos"
-"58692","2023","#SFB13 Ruth's Chris Steak House"
-"58752","2023","#SFB13 Ocean Spray"
-"58822","2023","#SFB13 Estiatorio Milos"
-"59790","2023","#SFB13 Template backup - don't touch"
-"60690","2023","#SFB13 Graeter's Ice Cream"
-"61328","2023","#SFB13 Safeway"
-"62004","2023","#SFB13 Los Pollos Hermanos"
-"62410","2023","#SFB13 Golden Steer Steakhouse"
-"62496","2023","#SFB13 Gatorade"
-"62915","2023","#SFB13 Sbarro"
-"64054","2023","#SFB13 Busch"
-"64254","2023","#SFB13 Sour Patch Kids"
-"65474","2023","#SFB13 Good Burger"
-"65552","2023","#SFB13 Heineken"
-"66756","2023","#SFB13 Cheers"
-"67311","2023","#SFB13 LaRosa's"
-"68828","2023","#SFB13 John's Roast Pork"
-"68940","2023","#SFB13 Tropical Smoothie Cafe"
-"72626","2023","#SFB13 Kit Kat"
-"73630","2023","#SFB13 The Landsdowne"
-"74268","2023","#SFB13 Keebler"
+"league_id","league_name","year"
+"11815","#SFB14 - Tigger","2024"
+"12675","#SFB14 - Legolas","2024"
+"18581","#SFB14 - Piglet","2024"
+"19174","#SFB14 - SHIELD Agent","2024"
+"19544","#SFB14 - Wall-E","2024"
+"22803","#SFB14 - Leia Organa","2024"
+"23528","#SFB14 - Mufasa","2024"
+"24101","#SFB14 - Hooper, Quint, Brody","2024"
+"24848","#SFB14 - Kermit the Frog","2024"
+"25080","#SFB14 - Timon & Pumba","2024"
+"26200","#SFB14 - Red","2024"
+"26900","#SFB14 - Simba","2024"
+"31092","#SFB14 - Oompa Loompas","2024"
+"33337","#SFB14 - Winnie the Pooh","2024"
+"33734","#SFB14 - Kuzko & Pacha","2024"
+"33972","#SFB14 - McManus Brothers","2024"
+"37669","#SFB14 - Dracula","2024"
+"37870","#SFB14 - Scar","2024"
+"38794","#SFB14 - Yoda","2024"
+"38993","#SFB14 - Cowardly Lion","2024"
+"39495","#SFB14 - Remy","2024"
+"40276","#SFB14 - Aragon","2024"
+"41428","#SFB14 - Will Hunting","2024"
+"41862","#SFB14 - Belle","2024"
+"42655","#SFB14 - Obi-Wan Kenobi","2024"
+"43475","#SFB14 - Doc Holiday","2024"
+"43714","#SFB14 - Rick Deckard","2024"
+"43901","#SFB14 - Willy Wonka","2024"
+"44729","#SFB14 - Han Solo & Chewbacca","2024"
+"47210","#SFB14 - Aurora","2024"
+"48633","#SFB14 - Luke Skywalker","2024"
+"49252","#SFB14 - Bowser","2024"
+"49311","#SFB14 - Luigi","2024"
+"50311","#SFB14 - R2-D2/C3PO","2024"
+"51170","#SFB14 - Three Amigos","2024"
+"52188","#SFB14 - Darth Vader","2024"
+"53767","#SFB14 - Frederick Von Frankenstein & Igor","2024"
+"54568","#SFB14 - Wolfman","2024"
+"54757","#SFB14 - Mongo","2024"
+"55506","#SFB14 - Mace Windu","2024"
+"56977","#SFB14 - Gollum","2024"
+"57086","#SFB14 - Cheech & Chong","2024"
+"57410","#SFB14 - Swedish Chef","2024"
+"60960","#SFB14 - Animal","2024"
+"62201","#SFB14 - RP McMurphy","2024"
+"62644","#SFB14 - James T. Kirk","2024"
+"62977","#SFB14 - Andy Dufresne","2024"
+"63074","#SFB14 - Lando Calrissian","2024"
+"63221","#SFB14 - Rafiki","2024"
+"63694","#SFB14 - Rey & Kylo Ren","2024"
+"64315","#SFB14 - Frankenstein","2024"
+"64453","#SFB14 - Frodo","2024"
+"64646","#SFB14 - Princess Peach","2024"
+"65151","#SFB14 - Gandalf","2024"
+"65561","#SFB14 - Stanley Ipkiss","2024"
+"67039","#SFB14 - Ariel","2024"
+"67282","#SFB14 - Cinderella","2024"
+"67612","#SFB14 - Gaston","2024"
+"67783","#SFB14 - Bruce","2024"
+"68288","#SFB14 - Spinal Tap","2024"
+"71449","#SFB14 - Wyatt Earp","2024"
+"71989","#SFB14 - Beast","2024"
+"72003","#SFB14 - Boba Fett","2024"
+"72494","#SFB14 - Eeyore","2024"
+"74142","#SFB14 - Mario","2024"
diff --git a/docs/league_ids_sleeper.csv b/docs/league_ids_sleeper.csv
index 884a66b..95f87e7 100644
--- a/docs/league_ids_sleeper.csv
+++ b/docs/league_ids_sleeper.csv
@@ -1,188 +1,272 @@
league_id,league_name
-983573584717156352,#SFB13 Margaritaville
-976262031512797184,#SFB13 Buena Vista
-976261878206787584,#SFB13 Round Table Pizza
-976261660400783360,#SFB13 Charley's Philly Steaks
-976261497376555008,#SFB13 Geno's Steaks
-976261141909286912,#SFB13 Pat's King of Steaks
-976260981057781760,#SFB13 Dole Whip
-976260833393135616,#SFB13 Pizza Planet
-976260651259613184,#SFB13 Sci-Fi
-976259809760555008,#SFB13 Cheerios
-976259651387838464,#SFB13 Green Giant
-976259355953651712,#SFB13 Lion's Tap
-976259167998586880,#SFB13 Spam
-976259024729497600,#SFB13 El Tizoncito
-976258810002128896,#SFB13 Patron
-976258672990998528,#SFB13 Salon Tenampa
-976258270845370368,#SFB13 McVitie's
-976258086736314368,#SFB13 Walkers
-976257089054015488,#SFB13 Hills Have Pies
-976256882358685696,#SFB13 Sam's No. 3
-976256654289289216,#SFB13 Ben's Chili Bowl
-976256445064765440,#SFB13 Capital City
-976256302701666304,#SFB13 Crisp & Juicy
-976256080705597440,#SFB13 DC Brau
-976255932525019136,#SFB13 Dave & Buster's
-976255678144700416,#SFB13 Jason's Deli
-976255524675080192,#SFB13 Whataburger
-976255349898391552,#SFB13 WingStop
-976254557468540928,#SFB13 Lou Malnati's
-976254331211001856,#SFB13 Gino's East
-976254160767131648,#SFB13 Giordano's
-976253935210078208,#SFB13 Uno Pizzeria
-976253751667339264,#SFB13 Anchor Bar
-976253490160832512,#SFB13 Fattey Beer Co.
-976252462224969728,#SFB13 Coca-Cola
-976252270843060224,#SFB13 Waffle House
-976252084750229504,#SFB13 Albertsons
-976251873231536128,#SFB13 Bob Evans
-976251643333251072,#SFB13 Checkers/Rally's
-976251381025742848,#SFB13 Cheddar's Scratch Kitchen
-976251127027060736,#SFB13 Del Monte
-976250964711657472,#SFB13 Hungry Howie's Pizza
-976250675539587072,#SFB13 Jack's Family Restaurants
-976249368892207104,#SFB13 Oscar Mayer
-976249201136865280,#SFB13 Papa Murphy's
-976248966293598208,#SFB13 Pillsbury
-976248822110240768,#SFB13 Quaker
-976248666883194880,#SFB13 Bugles
-976248493838798848,#SFB13 Captain D's
-976248332924379136,#SFB13 Chips Ahoy
-976248080729268224,#SFB13 Church's Chicken
-976247935782445056,#SFB13 Food Lion
-976247753330253824,#SFB13 French's
-976247571075125248,#SFB13 Hubba Bubba
-976247076315066368,#SFB13 IHOP
-976246826078732288,#SFB13 Jamba
-976246638014468096,#SFB13 Kraft
-976246493029965824,#SFB13 Logan's Roadhouse
-976246289098690560,#SFB13 Long John Silver's
-976245979819098112,#SFB13 Miller's Ale House
-976245561852477440,#SFB13 Mission BBQ
-976245185321480192,#SFB13 Nabisco
-976245039401582592,#SFB13 Noodles & Company
-976244854655098880,#SFB13 Panera Bread
-976244636865941504,#SFB13 Perkins Restaurant & Bakery
-976244383911661568,#SFB13 Publix
-976244225882783744,#SFB13 Blow Pop
-976243970499997696,#SFB13 Bud Light
-976243766015102976,#SFB13 Carrabba's
-976243523169099776,#SFB13 Circle K
-976243282881658880,#SFB13 Freddy's Frozen Custard
-976242821336215552,#SFB13 Fritos
-976242580620951552,#SFB13 Jelly Belly
-976242328287383552,#SFB13 MOD Pizza
-976242123500544000,#SFB13 Papa John's
-976241886887292928,#SFB13 Paunch Burger
-976241663775420416,#SFB13 Roscoe's
-976241505134329856,#SFB13 Randy's Donuts
-976241207141511168,#SFB13 Pink's Hot Dogs
-976240982880501760,#SFB13 In-N-Out
-976240736616099840,#SFB13 Popsicle
-976240418029457408,#SFB13 Qdoba
-976239977853943808,#SFB13 TGI Friday's
-976239713524772864,#SFB13 The Habit Burger
-976238934399283200,#SFB13 Tyson
-976238667150778368,#SFB13 California Pizza Kitchen
-976238177612554240,#SFB13 Campbell's
-976237611394158592,#SFB13 Jack Links
-976237399451725824,#SFB13 Kroger
-976237174406389760,#SFB13 McAlister's Deli
-976236807119585280,#SFB13 Outback Steakhouse
-976236503741292544,#SFB13 Snickers
-976236169564397568,#SFB13 Wonder Bread
-976235776574849024,#SFB13 Alamo Freeze
-976235478557032448,#SFB13 Carl's Jr./Hardee's
-976235159391408128,#SFB13 Marco's Pizza
-976234515964252160,#SFB13 Minute Maid
-976234302172147712,#SFB13 P.F. Chang's
-976233993299353600,#SFB13 PEZ
-976233465781755904,#SFB13 Red Robin
-976233229600493568,#SFB13 SweeTarts
-976232981373272064,#SFB13 Tootsie Roll
-976232790658179072,#SFB13 Coors
-976232568838316032,#SFB13 El Pollo Loco
-976232373383737344,#SFB13 Heinz
-976232193984888832,#SFB13 Jolly Ranchers
-976231954381099008,#SFB13 Scoops Ahoy
-976231768758013952,#SFB13 Smoothie King
-976231184717979648,#SFB13 Subway
-976230945437114368,#SFB13 Takis
-976230327251197952,#SFB13 Yard House
-976230014360334336,#SFB13 Applebee's
-976229376545161216,#SFB13 Cheetos
-976228199594074112,#SFB13 Domino's
-976227792155148288,#SFB13 Dunkaroos
-976227590073565184,#SFB13 Firehouse Subs
-976227352424300544,#SFB13 Lipton
-976227134916157440,#SFB13 The Cheesecake Factory
-976226938727575552,#SFB13 Zaxby's
-976226779109158912,#SFB13 Chuck E. Cheese
-976226564113235968,#SFB13 Ben & Jerry's
-976226383519174656,#SFB13 Cheerwine
-976223091221127168,#SFB13 Cooper's Hawk Winery
-976222929027440640,#SFB13 KFC
-976219968872243200,#SFB13 Moe's Southwest Grill
-976219764827754496,#SFB13 Powerade
-976219580588716032,#SFB13 Swedish Fish
-976219448543592448,#SFB13 Whole Foods
-976219257782484992,#SFB13 Aldi
-976219061782634496,#SFB13 Doritos
-976218454606790656,#SFB13 Dutch Bros. Coffee
-976218191045152768,#SFB13 Goldfish
-976218080873377792,#SFB13 Moe's
-976217896378519552,#SFB13 Pizza Hut
-976217778971533312,#SFB13 Schweppes
-976217640899301376,#SFB13 Snuggly Duckling
-976217431691640832,#SFB13 Sonic
-976217317648461824,#SFB13 Surge
-976217154116714496,#SFB13 Wegmans
-976216871999483904,#SFB13 Dairy Queen
-976216732891217920,#SFB13 Hershey
-976216612392992768,#SFB13 Olive Garden
-976216479219732480,#SFB13 Oreo
-976216352417431552,#SFB13 Popeye's
-976216215674736640,#SFB13 A&W
-976216107176538112,#SFB13 Baskin-Robbins
-976215500915023872,#SFB13 Burger King
-976215375102767104,#SFB13 High Noon
-976215228578865152,#SFB13 Krusty Burger
-976215097020358656,#SFB13 Mello Yello
-976214916296187904,#SFB13 Skittles
-976214742555570176,#SFB13 The Drunken Clam
-976214576268128256,#SFB13 White Castle
-976214462183120896,#SFB13 7 Up
-976214276178231296,#SFB13 Guinness
-976214152773505024,#SFB13 Luke's Diner
-976213969012678656,#SFB13 McDonald's
-976213866684137472,#SFB13 Prime
-976213710123446272,#SFB13 Sprite
-976213587888840704,#SFB13 Texas Roadhouse
-976213308401405952,#SFB13 Arby's
-976213122832719872,#SFB13 Blue Moon
-976212940170788864,#SFB13 Bluth's Frozen Banana Stand
-976212767797567488,#SFB13 Bob's Burgers
-976212619105259520,#SFB13 Buffalo Wild Wings
-976208499250147328,#SFB13 Canada Dry
-976207971694788608,#SFB13 Central Perk
-976207827024896000,#SFB13 Cheez-It
-976207604575797248,#SFB13 Chik-Fil-A
-976207421867646976,#SFB13 Chili's
-976207270977617920,#SFB13 Chiquita
-976207160138862592,#SFB13 Dr. Pepper
-976207016303652864,#SFB13 Dunkin'
-976206900356259840,#SFB13 Fanta
-976206634529738752,#SFB13 Hard Rock Cafe
-976205456874045440,#SFB13 Jarritos
-976205339613786112,#SFB13 Jersey Mike's
-976205178544152576,#SFB13 Kool-Aid
-976204529618227200,#SFB13 Little Caesars
-976204374806499328,#SFB13 Pabst Blue Ribbon
-976204236943855616,#SFB13 Pepsi
-976204078277599232,#SFB13 Raising Cane's
-976203858995122176,#SFB13 Starbucks
-976203623115886592,#SFB13 Taco Bell
-976203419906097152,#SFB13 Tim Horton
-976203263441702912,#SFB13 Trader Joe's
-976202913464815616,#SFB13 Wendy's
+1107121319751159808,#SFB14 - Ace Ventura
+1107101808599793664,#SFB14 - Acerola
+1107456883344109568,#SFB14 - Agent Smith
+1107457347657531392,#SFB14 - Aladdin & Abu
+1107127226052730880,#SFB14 - Alan
+1107457730039730176,#SFB14 - Aldus Snow
+1107466566826033152,#SFB14 - Alice
+1107370743051972608,#SFB14 - Apollo Creed
+1107111361210904576,#SFB14 - Aquaman
+1107139396937216000,#SFB14 - Austin Powers
+1107467916917821440,#SFB14 - Average Joes
+1106971814007373824,#SFB14 - Axel Foley
+1107055373040717824,#SFB14 - Bane
+1107547572182503424,#SFB14 - Barbie
+1107362883907792896,#SFB14 - Bash Brothers
+1107183358284742656,#SFB14 - Batman
+1107548659291553792,#SFB14 - Beatrix Kiddo
+1107549105837961216,#SFB14 - Beetlejuice
+1107549524773502976,#SFB14 - Benny the Jet
+1107550473751728128,#SFB14 - Biff Tannen
+1107551280995647488,#SFB14 - Bill & Ted
+1107367921745059840,#SFB14 - Billy Costigan
+1107365029583740928,#SFB14 - Billy Heywood
+1107551699079626752,#SFB14 - Black Knight
+1107552638507372544,#SFB14 - Black Panther
+1107553045287878656,#SFB14 - Black Widow
+1107332114300751872,#SFB14 - Blade
+1107358894424428544,#SFB14 - Bluto
+1107054439749431296,"#SFB14 - Bo ""The Bandit"" Darville"
+1107690592479555584,#SFB14 - Bo Callahan
+1107050786367979520,#SFB14 - Bobby Boucher
+1107691035729395712,#SFB14 - Brennan Huff
+1107691432212733952,#SFB14 - Brian Drew
+1107691838917472256,#SFB14 - Brian Fantana
+1107697253722050560,#SFB14 - Brian O'Conner
+1107118973398876160,#SFB14 - Brick Tamland
+1107055949887459328,#SFB14 - Bruce Nolan
+1107697658082304000,#SFB14 - Bumblebee
+1107330489507135488,#SFB14 - Buzz
+1107139036906418176,#SFB14 - Candyman
+1107698455247638528,#SFB14 - Captain America
+1107698913248669696,#SFB14 - Captain Barbosa
+1106999359364968448,#SFB14 - Captain Jack Sparrow
+1107699330896728064,#SFB14 - Captain Marvel
+1107700004321521664,#SFB14 - Carl
+1107106506052423680,#SFB14 - Cassian Andor
+1107184728672735232,#SFB14 - Catwoman
+1107707694955196416,#SFB14 - Champ Kind
+1107362427504672768,#SFB14 - Charlie Conway
+1107708095654068224,#SFB14 - Cheshire Cat
+1107708484633628672,#SFB14 - Chubbs Peterson
+1107708903061680128,#SFB14 - Clifford Franklin
+1107371520831119360,#SFB14 - Clubber Lang
+1107709274186244096,#SFB14 - Coach Boone
+1107156435475009536,#SFB14 - Coach Gennero
+1107709706430386176,#SFB14 - Coach Klein
+1107136086255431680,#SFB14 - Coach McGinty
+1107112562329690112,#SFB14 - Cole Trickle
+1107711270284939264,#SFB14 - Colin Sullivan
+1107183864738533376,#SFB14 - Commissioner Gordon
+1107810604410068992,#SFB14 - Cousin Eddy
+1107110295623004160,#SFB14 - Crash Davis
+1107811090060251136,#SFB14 - Dale Doback
+1107811528876646400,#SFB14 - Daniel LaRusso
+1107136900655259648,#SFB14 - Danny Bateman
+1113862092022493184,#SFB14 - Danny Torrance
+1107811955336749056,#SFB14 - Dante & Randall
+1107812337852960768,#SFB14 - David Lightman
+1107182468362317824,#SFB14 - David Wooderson
+1107051672502669312,#SFB14 - Deadpool
+1107812924095062016,#SFB14 - DeLorean
+1107916016774012928,#SFB14 - Derek Zoolander & Hansel
+1107125222018228224,#SFB14 - Dirty Harry
+1107359723501199360,#SFB14 - Doctor Emmett Brown
+1107916396681519104,#SFB14 - Dominic Toretto
+1107916789897428992,#SFB14 - Donatello
+1107184277017481216,#SFB14 - Donkey
+1107358482250178560,#SFB14 - Donkey Kong
+1107917167967805440,#SFB14 - Dr Evil
+1107359316841025536,#SFB14 - Dr. Frank-N-Furter
+1107917551830671360,#SFB14 - Drax the Destroyer
+1108035277395677184,#SFB14 - Dread Pirate Roberts
+1108035797045002240,#SFB14 - Dt. James Carter & Insp. Lee
+1108036218337718272,#SFB14 - Dumbledore
+1108036622916055040,#SFB14 - Elizabeth Swan
+1108037025422311424,#SFB14 - Elle Woods
+1107137277289402368,#SFB14 - Elwood Blues
+1108037944813891584,#SFB14 - Emotions
+1108047492257771520,#SFB14 - Envy Adams
+1107360148672135168,#SFB14 - Ethan Hunt
+1113841835975262208,#SFB14 - Ezekiel & Ms. Tasty
+1107138365708767232,#SFB14 - Ferris Bueller
+1108047924610654208,#SFB14 - Fezzik
+1108048336193507328,#SFB14 - Forrest Gump
+1107111779198398464,#SFB14 - Fozi Bear
+1107367537861472256,#SFB14 - Frank Castillo
+1108049176342016000,#SFB14 - Freddy Krueger
+1113862945328463872,#SFB14 - Gamora
+1108072066428878848,#SFB14 - Genie
+1108072759906877440,#SFB14 - Ghostbusters
+1108073165240221696,#SFB14 - Ghostface
+1108073584209141760,#SFB14 - Gizmo
+1108073967610441728,#SFB14 - Globo Gym Cobras
+1108074564027998208,#SFB14 - Godzilla
+1107363302486876160,#SFB14 - Goldberg
+1108074986700623872,#SFB14 - Goonies
+1107107339364196352,#SFB14 - Goose
+1107362062038298624,#SFB14 - Gordon Bombay
+1108104034835300352,#SFB14 - Groot
+1108104364910084096,#SFB14 - Ham
+1108105026138083328,#SFB14 - Hans Gruber
+1108105326244659200,#SFB14 - Happy Gilmore
+1108105727685718016,#SFB14 - Harley Quinn
+1108106161254985728,#SFB14 - Harry & Lloyd
+1107139752064741376,#SFB14 - Harry Potter
+1107053107185405952,#SFB14 - Harry S. Stamper
+1108106672859586560,#SFB14 - Henry Hill
+1107138020874170368,#SFB14 - Henry Rowengartner
+1108107229229621248,#SFB14 - Hermione Granger
+1108107558021160960,#SFB14 - Hulk
+1108177828346167296,#SFB14 - Ian Malcolm
+1108178414776721408,#SFB14 - Icebox
+1107113262753181696,#SFB14 - Iceman
+1108178841631178752,#SFB14 - Indiana Jones
+1107054956663681024,#SFB14 - Inigo Montoya
+1108179365977759744,#SFB14 - Iron Man
+1107371096132833280,#SFB14 - Ivan Drago
+1108267767893131264,#SFB14 - Jack Burton
+1108268330605178880,#SFB14 - Jack Skellington
+1107130058134614016,#SFB14 - Jack Torrance
+1106990778766766080,#SFB14 - Jackie Moon
+1107140148158033920,#SFB14 - James Bond
+1107052119330271232,#SFB14 - James Dalton
+1108268777747247104,#SFB14 - Jay & Silent Bob
+1107330852507262976,#SFB14 - Jessie
+1107365510838304768,#SFB14 - John McClane
+1107046065406279680,#SFB14 - John Rambo
+1108269224562339840,#SFB14 - John Wick
+1107366768277913600,#SFB14 - Johnny Utah & Bodhi
+1108269652079292416,#SFB14 - Joker
+1107182952540180480,#SFB14 - Jonathan Moxon
+1108270048000577536,#SFB14 - Jules Winnfield
+1107364643632373760,#SFB14 - Julie the Cat Gaffney
+1108306678933704704,#SFB14 - Katniss Everdeen
+1108307151283433472,#SFB14 - Ken
+1107137674235879424,#SFB14 - Kevin McCallister
+1107102711650185216,#SFB14 - Khan
+1108307748531544064,#SFB14 - King Arthur & Knights of Round Table
+1108414634102702080,#SFB14 - King Kong
+1108415351282315264,#SFB14 - Kirk Lazarus
+1108417506588393472,#SFB14 - Knights of Ni
+1107101186097844224,#SFB14 - Laranjinha
+1107053935661056000,#SFB14 - Leatherface
+1108425603696513024,#SFB14 - Leonardo
+1108426246515564544,#SFB14 - Lightning McQueen
+1108427129689096192,#SFB14 - Loki
+1108427545889910784,#SFB14 - Loki & Bartleby
+1108427939034787840,#SFB14 - Lone Star & Barf
+1108428350214852608,#SFB14 - Lt. Dan
+1108446861339475968,#SFB14 - Luke Hobbs
+1108447435069816832,#SFB14 - Mad Hatter
+1107109684701601792,#SFB14 - Marsellus Wallace
+1108447844714975232,#SFB14 - Marty McFly
+1107140563951882240,#SFB14 - Mary Poppins
+1108448196143116288,#SFB14 - Maui
+1108448633583906816,#SFB14 - Maverick
+1108449054159134720,#SFB14 - McLovin
+1108450236017532928,#SFB14 - Mia Toretto
+1108450587777253376,#SFB14 - Mia Wallace
+1107333410927857664,#SFB14 - Michael Corleone
+1108478443001356288,#SFB14 - Michael Myers
+1108478785319604224,#SFB14 - Michaelangelo
+1107372049569275904,#SFB14 - Mickey Goldmill
+1107102302978170880,#SFB14 - Miguel
+1108479228062027776,#SFB14 - Mike/Sully
+1108479559466438656,#SFB14 - Milton
+1108487671745261568,#SFB14 - Moana
+1107128614014861312,#SFB14 - Mr. Chow
+1108488369572499456,#SFB14 - Mr. Miagi
+1108502333970915328,#SFB14 - Mr. Pink
+1107125825721303040,#SFB14 - Mrs. Doubtfire
+1108503015696412672,#SFB14 - Napoleon
+1108503379048964096,#SFB14 - Neo
+1108505125896769536,#SFB14 - Nick Fury
+1107136535062999040,#SFB14 - Nigel Gruff
+1108507467731869696,#SFB14 - Optimus Prime
+1109262887765483520,#SFB14 - Patrick Bateman
+1107141020946538496,#SFB14 - Paul Blake
+1113863131601776640,#SFB14 - Pennywise
+1109263014378807296,#SFB14 - Peter Bretter
+1107128264532955136,#SFB14 - Phil
+1109263095421161472,#SFB14 - Po
+1109263169945616384,#SFB14 - Predator
+1109263241357676544,#SFB14 - Princess Mononoke
+1109263385461391360,#SFB14 - Rafael
+1107360692140679168,#SFB14 - Rain Man
+1107121860518584320,#SFB14 - Ray Finkle
+1109263481561264128,#SFB14 - Ray Jennings
+1107129715350929408,#SFB14 - Redrum
+1109263559281774592,#SFB14 - Regina George
+1107331241581854720,#SFB14 - Rex
+1107138673243557888,#SFB14 - Richard Kimble
+1107045596466089984,#SFB14 - Ricky Vaughn
+1107366292551516160,#SFB14 - Riggs & Murtaugh
+1109263631931449344,#SFB14 - Ripley
+1113862638586458112,#SFB14 - Robocop
+1108562244692123648,#SFB14 - Rocket Raccoon
+1107370393129660416,#SFB14 - Rocky Balboa
+1108562054660788224,#SFB14 - Ron Burgandy
+1113863559840153600,#SFB14 - Ron Weasley
+1107056498116481024,#SFB14 - Roy Hobbs
+1108561890634190848,#SFB14 - Rudy Ruttiger
+1108561699390672896,#SFB14 - Russell & Dug
+1107027995971174400,#SFB14 - Sarah Marshall
+1108561505257295872,#SFB14 - Scott Pilgrim
+1107103114227716096,#SFB14 - Serendipity
+1107368586898911232,#SFB14 - Sergeant Sean Dignam
+1107130791605194752,#SFB14 - Shane Falco
+1108561347547316224,#SFB14 - She's All That
+1108558538688884736,#SFB14 - Shooter McGavin
+1108552098066636800,#SFB14 - Shrek
+1107332572788465664,#SFB14 - Slimer
+1108551969226027008,#SFB14 - Smalls
+1107365908508569600,#SFB14 - Snake Plissken
+1108551833024417792,#SFB14 - Sonny Corleone
+1107029862184796160,#SFB14 - Sonny Weaver
+1111732940297371648,#SFB14 - Speed Racer
+1108551699750408192,#SFB14 - Spider-Man
+1107333046233157632,#SFB14 - Spiderman (Miles Morales)
+1108551479553630208,#SFB14 - Squints
+1108551369163710464,#SFB14 - Star Lord
+1113863376872095744,#SFB14 - Stay Puft Marshmallow Man
+1107127844444143616,#SFB14 - Stu
+1107367169769385984,#SFB14 - Sunshine
+1108551236716048384,#SFB14 - Superman
+1108549524936613888,#SFB14 - T-1000
+1107368928063565824,#SFB14 - Ted
+1107331705582620672,#SFB14 - Teddy KGB
+1108549349501648896,#SFB14 - Terminator
+1108549213970939904,#SFB14 - Thanos
+1108547899652288512,#SFB14 - The Dude
+1108547730445783040,#SFB14 - The Incredibles
+1108547590746021888,#SFB14 - The Oneders
+1107130433650651136,#SFB14 - The Overlook Hotel
+1107056977995247616,#SFB14 - Thor
+1107123391439601664,#SFB14 - Thornton Melon
+1107124035349004288,#SFB14 - Tommy Boy
+1108547461368352768,#SFB14 - Totoro
+1108547282137346048,#SFB14 - Trinity
+1108547123957805056,#SFB14 - Truman Burbank
+1108547003233136640,#SFB14 - TS & Brodie
+1107046606911893504,#SFB14 - Tugg Speedman
+1108546364851470336,#SFB14 - Tyler Durden
+1108546261419925504,#SFB14 - Tyrannosaurus
+1107120389886418944,#SFB14 - Uncle Rico
+1113862418209316864,#SFB14 - Velociraptor
+1108546127831343104,#SFB14 - Veronica Corningstone
+1108546023409942528,#SFB14 - Vicky Vallencourt
+1108545892870627328,#SFB14 - Vincent Vega
+1108539423991369728,#SFB14 - Vito Corleone
+1108538997929971712,#SFB14 - Voldemort
+1107044995917475840,#SFB14 - Vontae Mack
+1108524595293822976,#SFB14 - Walter & Donnie
+1107120845752856576,#SFB14 - War Machine
+1108524235733024768,#SFB14 - Wayne & Garth
+1108523839375577088,#SFB14 - Wet Bandits
+1108523474659684352,#SFB14 - Willie Mays Hayes
+1108523003857473536,#SFB14 - Wolverine
+1107185295495118848,#SFB14 - Woody
+1108522622524002304,#SFB14 - Xenomorph
+1108522247062515712,#SFB14 - Zé Pequeno
diff --git a/docs/search.json b/docs/search.json
index 61916f3..9e34728 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -2,17 +2,17 @@
"articles": [
{
"path": "index.html",
- "title": "sfb13 ADP",
- "description": "A simple ADP site for sfb13, by \\@\\_TanHo",
+ "title": "sfb14 ADP",
+ "description": "A simple ADP site for sfb14, by \\@\\_TanHo",
"author": [],
- "contents": "\nLast updated 2024-06-30 21:05:40 EDT.\nADP\nAcross all MFL and Sleeper drafts.\n\n\n\nBest Available\n\n\n\n\n\n\n",
- "last_modified": "2024-07-01T01:05:54+00:00"
+ "contents": "\nLast updated 2024-07-08 22:38:49 EDT.\nADP\nAcross all MFL and Sleeper drafts.\n\n\n\nBest Available\n\n\n\n\n\n\n",
+ "last_modified": "2024-07-08T22:44:29-04:00"
},
{
"path": "LICENSE.html",
"author": [],
"contents": "\nMIT License\nCopyright (c) 2022 data.sfb12 authors\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the “Software”), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n\n",
- "last_modified": "2024-07-01T01:05:54+00:00"
+ "last_modified": "2024-07-08T21:52:07-04:00"
}
],
"collections": []
diff --git a/docs/site_libs/header-attrs-2.25/header-attrs.js b/docs/site_libs/header-attrs-2.25/header-attrs.js
new file mode 100644
index 0000000..dd57d92
--- /dev/null
+++ b/docs/site_libs/header-attrs-2.25/header-attrs.js
@@ -0,0 +1,12 @@
+// Pandoc 2.9 adds attributes on both header and div. We remove the former (to
+// be compatible with the behavior of Pandoc < 2.8).
+document.addEventListener('DOMContentLoaded', function(e) {
+ var hs = document.querySelectorAll("div.section[class*='level'] > :first-child");
+ var i, h, a;
+ for (i = 0; i < hs.length; i++) {
+ h = hs[i];
+ if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6
+ a = h.attributes;
+ while (a.length > 0) h.removeAttribute(a[0].name);
+ }
+});
diff --git a/docs/site_libs/htmltools-fill-0.5.7.9000/fill.css b/docs/site_libs/htmltools-fill-0.5.7.9000/fill.css
new file mode 100644
index 0000000..841ea9d
--- /dev/null
+++ b/docs/site_libs/htmltools-fill-0.5.7.9000/fill.css
@@ -0,0 +1,21 @@
+@layer htmltools {
+ .html-fill-container {
+ display: flex;
+ flex-direction: column;
+ /* Prevent the container from expanding vertically or horizontally beyond its
+ parent's constraints. */
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > .html-fill-item {
+ /* Fill items can grow and shrink freely within
+ available vertical space in fillable container */
+ flex: 1 1 auto;
+ min-height: 0;
+ min-width: 0;
+ }
+ .html-fill-container > :not(.html-fill-item) {
+ /* Prevent shrinking or growing of non-fill items */
+ flex: 0 0 auto;
+ }
+}
diff --git a/docs/site_libs/htmlwidgets-1.6.3/htmlwidgets.js b/docs/site_libs/htmlwidgets-1.6.3/htmlwidgets.js
new file mode 100644
index 0000000..1067d02
--- /dev/null
+++ b/docs/site_libs/htmlwidgets-1.6.3/htmlwidgets.js
@@ -0,0 +1,901 @@
+(function() {
+ // If window.HTMLWidgets is already defined, then use it; otherwise create a
+ // new object. This allows preceding code to set options that affect the
+ // initialization process (though none currently exist).
+ window.HTMLWidgets = window.HTMLWidgets || {};
+
+ // See if we're running in a viewer pane. If not, we're in a web browser.
+ var viewerMode = window.HTMLWidgets.viewerMode =
+ /\bviewer_pane=1\b/.test(window.location);
+
+ // See if we're running in Shiny mode. If not, it's a static document.
+ // Note that static widgets can appear in both Shiny and static modes, but
+ // obviously, Shiny widgets can only appear in Shiny apps/documents.
+ var shinyMode = window.HTMLWidgets.shinyMode =
+ typeof(window.Shiny) !== "undefined" && !!window.Shiny.outputBindings;
+
+ // We can't count on jQuery being available, so we implement our own
+ // version if necessary.
+ function querySelectorAll(scope, selector) {
+ if (typeof(jQuery) !== "undefined" && scope instanceof jQuery) {
+ return scope.find(selector);
+ }
+ if (scope.querySelectorAll) {
+ return scope.querySelectorAll(selector);
+ }
+ }
+
+ function asArray(value) {
+ if (value === null)
+ return [];
+ if ($.isArray(value))
+ return value;
+ return [value];
+ }
+
+ // Implement jQuery's extend
+ function extend(target /*, ... */) {
+ if (arguments.length == 1) {
+ return target;
+ }
+ for (var i = 1; i < arguments.length; i++) {
+ var source = arguments[i];
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ target[prop] = source[prop];
+ }
+ }
+ }
+ return target;
+ }
+
+ // IE8 doesn't support Array.forEach.
+ function forEach(values, callback, thisArg) {
+ if (values.forEach) {
+ values.forEach(callback, thisArg);
+ } else {
+ for (var i = 0; i < values.length; i++) {
+ callback.call(thisArg, values[i], i, values);
+ }
+ }
+ }
+
+ // Replaces the specified method with the return value of funcSource.
+ //
+ // Note that funcSource should not BE the new method, it should be a function
+ // that RETURNS the new method. funcSource receives a single argument that is
+ // the overridden method, it can be called from the new method. The overridden
+ // method can be called like a regular function, it has the target permanently
+ // bound to it so "this" will work correctly.
+ function overrideMethod(target, methodName, funcSource) {
+ var superFunc = target[methodName] || function() {};
+ var superFuncBound = function() {
+ return superFunc.apply(target, arguments);
+ };
+ target[methodName] = funcSource(superFuncBound);
+ }
+
+ // Add a method to delegator that, when invoked, calls
+ // delegatee.methodName. If there is no such method on
+ // the delegatee, but there was one on delegator before
+ // delegateMethod was called, then the original version
+ // is invoked instead.
+ // For example:
+ //
+ // var a = {
+ // method1: function() { console.log('a1'); }
+ // method2: function() { console.log('a2'); }
+ // };
+ // var b = {
+ // method1: function() { console.log('b1'); }
+ // };
+ // delegateMethod(a, b, "method1");
+ // delegateMethod(a, b, "method2");
+ // a.method1();
+ // a.method2();
+ //
+ // The output would be "b1", "a2".
+ function delegateMethod(delegator, delegatee, methodName) {
+ var inherited = delegator[methodName];
+ delegator[methodName] = function() {
+ var target = delegatee;
+ var method = delegatee[methodName];
+
+ // The method doesn't exist on the delegatee. Instead,
+ // call the method on the delegator, if it exists.
+ if (!method) {
+ target = delegator;
+ method = inherited;
+ }
+
+ if (method) {
+ return method.apply(target, arguments);
+ }
+ };
+ }
+
+ // Implement a vague facsimilie of jQuery's data method
+ function elementData(el, name, value) {
+ if (arguments.length == 2) {
+ return el["htmlwidget_data_" + name];
+ } else if (arguments.length == 3) {
+ el["htmlwidget_data_" + name] = value;
+ return el;
+ } else {
+ throw new Error("Wrong number of arguments for elementData: " +
+ arguments.length);
+ }
+ }
+
+ // http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
+ function escapeRegExp(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ }
+
+ function hasClass(el, className) {
+ var re = new RegExp("\\b" + escapeRegExp(className) + "\\b");
+ return re.test(el.className);
+ }
+
+ // elements - array (or array-like object) of HTML elements
+ // className - class name to test for
+ // include - if true, only return elements with given className;
+ // if false, only return elements *without* given className
+ function filterByClass(elements, className, include) {
+ var results = [];
+ for (var i = 0; i < elements.length; i++) {
+ if (hasClass(elements[i], className) == include)
+ results.push(elements[i]);
+ }
+ return results;
+ }
+
+ function on(obj, eventName, func) {
+ if (obj.addEventListener) {
+ obj.addEventListener(eventName, func, false);
+ } else if (obj.attachEvent) {
+ obj.attachEvent(eventName, func);
+ }
+ }
+
+ function off(obj, eventName, func) {
+ if (obj.removeEventListener)
+ obj.removeEventListener(eventName, func, false);
+ else if (obj.detachEvent) {
+ obj.detachEvent(eventName, func);
+ }
+ }
+
+ // Translate array of values to top/right/bottom/left, as usual with
+ // the "padding" CSS property
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/padding
+ function unpackPadding(value) {
+ if (typeof(value) === "number")
+ value = [value];
+ if (value.length === 1) {
+ return {top: value[0], right: value[0], bottom: value[0], left: value[0]};
+ }
+ if (value.length === 2) {
+ return {top: value[0], right: value[1], bottom: value[0], left: value[1]};
+ }
+ if (value.length === 3) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[1]};
+ }
+ if (value.length === 4) {
+ return {top: value[0], right: value[1], bottom: value[2], left: value[3]};
+ }
+ }
+
+ // Convert an unpacked padding object to a CSS value
+ function paddingToCss(paddingObj) {
+ return paddingObj.top + "px " + paddingObj.right + "px " + paddingObj.bottom + "px " + paddingObj.left + "px";
+ }
+
+ // Makes a number suitable for CSS
+ function px(x) {
+ if (typeof(x) === "number")
+ return x + "px";
+ else
+ return x;
+ }
+
+ // Retrieves runtime widget sizing information for an element.
+ // The return value is either null, or an object with fill, padding,
+ // defaultWidth, defaultHeight fields.
+ function sizingPolicy(el) {
+ var sizingEl = document.querySelector("script[data-for='" + el.id + "'][type='application/htmlwidget-sizing']");
+ if (!sizingEl)
+ return null;
+ var sp = JSON.parse(sizingEl.textContent || sizingEl.text || "{}");
+ if (viewerMode) {
+ return sp.viewer;
+ } else {
+ return sp.browser;
+ }
+ }
+
+ // @param tasks Array of strings (or falsy value, in which case no-op).
+ // Each element must be a valid JavaScript expression that yields a
+ // function. Or, can be an array of objects with "code" and "data"
+ // properties; in this case, the "code" property should be a string
+ // of JS that's an expr that yields a function, and "data" should be
+ // an object that will be added as an additional argument when that
+ // function is called.
+ // @param target The object that will be "this" for each function
+ // execution.
+ // @param args Array of arguments to be passed to the functions. (The
+ // same arguments will be passed to all functions.)
+ function evalAndRun(tasks, target, args) {
+ if (tasks) {
+ forEach(tasks, function(task) {
+ var theseArgs = args;
+ if (typeof(task) === "object") {
+ theseArgs = theseArgs.concat([task.data]);
+ task = task.code;
+ }
+ var taskFunc = tryEval(task);
+ if (typeof(taskFunc) !== "function") {
+ throw new Error("Task must be a function! Source:\n" + task);
+ }
+ taskFunc.apply(target, theseArgs);
+ });
+ }
+ }
+
+ // Attempt eval() both with and without enclosing in parentheses.
+ // Note that enclosing coerces a function declaration into
+ // an expression that eval() can parse
+ // (otherwise, a SyntaxError is thrown)
+ function tryEval(code) {
+ var result = null;
+ try {
+ result = eval("(" + code + ")");
+ } catch(error) {
+ if (!(error instanceof SyntaxError)) {
+ throw error;
+ }
+ try {
+ result = eval(code);
+ } catch(e) {
+ if (e instanceof SyntaxError) {
+ throw error;
+ } else {
+ throw e;
+ }
+ }
+ }
+ return result;
+ }
+
+ function initSizing(el) {
+ var sizing = sizingPolicy(el);
+ if (!sizing)
+ return;
+
+ var cel = document.getElementById("htmlwidget_container");
+ if (!cel)
+ return;
+
+ if (typeof(sizing.padding) !== "undefined") {
+ document.body.style.margin = "0";
+ document.body.style.padding = paddingToCss(unpackPadding(sizing.padding));
+ }
+
+ if (sizing.fill) {
+ document.body.style.overflow = "hidden";
+ document.body.style.width = "100%";
+ document.body.style.height = "100%";
+ document.documentElement.style.width = "100%";
+ document.documentElement.style.height = "100%";
+ cel.style.position = "absolute";
+ var pad = unpackPadding(sizing.padding);
+ cel.style.top = pad.top + "px";
+ cel.style.right = pad.right + "px";
+ cel.style.bottom = pad.bottom + "px";
+ cel.style.left = pad.left + "px";
+ el.style.width = "100%";
+ el.style.height = "100%";
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+
+ } else {
+ el.style.width = px(sizing.width);
+ el.style.height = px(sizing.height);
+
+ return {
+ getWidth: function() { return cel.getBoundingClientRect().width; },
+ getHeight: function() { return cel.getBoundingClientRect().height; }
+ };
+ }
+ }
+
+ // Default implementations for methods
+ var defaults = {
+ find: function(scope) {
+ return querySelectorAll(scope, "." + this.name);
+ },
+ renderError: function(el, err) {
+ var $el = $(el);
+
+ this.clearError(el);
+
+ // Add all these error classes, as Shiny does
+ var errClass = "shiny-output-error";
+ if (err.type !== null) {
+ // use the classes of the error condition as CSS class names
+ errClass = errClass + " " + $.map(asArray(err.type), function(type) {
+ return errClass + "-" + type;
+ }).join(" ");
+ }
+ errClass = errClass + " htmlwidgets-error";
+
+ // Is el inline or block? If inline or inline-block, just display:none it
+ // and add an inline error.
+ var display = $el.css("display");
+ $el.data("restore-display-mode", display);
+
+ if (display === "inline" || display === "inline-block") {
+ $el.hide();
+ if (err.message !== "") {
+ var errorSpan = $("").addClass(errClass);
+ errorSpan.text(err.message);
+ $el.after(errorSpan);
+ }
+ } else if (display === "block") {
+ // If block, add an error just after the el, set visibility:none on the
+ // el, and position the error to be on top of the el.
+ // Mark it with a unique ID and CSS class so we can remove it later.
+ $el.css("visibility", "hidden");
+ if (err.message !== "") {
+ var errorDiv = $("
").addClass(errClass).css("position", "absolute")
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ // setting width can push out the page size, forcing otherwise
+ // unnecessary scrollbars to appear and making it impossible for
+ // the element to shrink; so use max-width instead
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ errorDiv.text(err.message);
+ $el.after(errorDiv);
+
+ // Really dumb way to keep the size/position of the error in sync with
+ // the parent element as the window is resized or whatever.
+ var intId = setInterval(function() {
+ if (!errorDiv[0].parentElement) {
+ clearInterval(intId);
+ return;
+ }
+ errorDiv
+ .css("top", el.offsetTop)
+ .css("left", el.offsetLeft)
+ .css("maxWidth", el.offsetWidth)
+ .css("height", el.offsetHeight);
+ }, 500);
+ }
+ }
+ },
+ clearError: function(el) {
+ var $el = $(el);
+ var display = $el.data("restore-display-mode");
+ $el.data("restore-display-mode", null);
+
+ if (display === "inline" || display === "inline-block") {
+ if (display)
+ $el.css("display", display);
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ } else if (display === "block"){
+ $el.css("visibility", "inherit");
+ $(el.nextSibling).filter(".htmlwidgets-error").remove();
+ }
+ },
+ sizing: {}
+ };
+
+ // Called by widget bindings to register a new type of widget. The definition
+ // object can contain the following properties:
+ // - name (required) - A string indicating the binding name, which will be
+ // used by default as the CSS classname to look for.
+ // - initialize (optional) - A function(el) that will be called once per
+ // widget element; if a value is returned, it will be passed as the third
+ // value to renderValue.
+ // - renderValue (required) - A function(el, data, initValue) that will be
+ // called with data. Static contexts will cause this to be called once per
+ // element; Shiny apps will cause this to be called multiple times per
+ // element, as the data changes.
+ window.HTMLWidgets.widget = function(definition) {
+ if (!definition.name) {
+ throw new Error("Widget must have a name");
+ }
+ if (!definition.type) {
+ throw new Error("Widget must have a type");
+ }
+ // Currently we only support output widgets
+ if (definition.type !== "output") {
+ throw new Error("Unrecognized widget type '" + definition.type + "'");
+ }
+ // TODO: Verify that .name is a valid CSS classname
+
+ // Support new-style instance-bound definitions. Old-style class-bound
+ // definitions have one widget "object" per widget per type/class of
+ // widget; the renderValue and resize methods on such widget objects
+ // take el and instance arguments, because the widget object can't
+ // store them. New-style instance-bound definitions have one widget
+ // object per widget instance; the definition that's passed in doesn't
+ // provide renderValue or resize methods at all, just the single method
+ // factory(el, width, height)
+ // which returns an object that has renderValue(x) and resize(w, h).
+ // This enables a far more natural programming style for the widget
+ // author, who can store per-instance state using either OO-style
+ // instance fields or functional-style closure variables (I guess this
+ // is in contrast to what can only be called C-style pseudo-OO which is
+ // what we required before).
+ if (definition.factory) {
+ definition = createLegacyDefinitionAdapter(definition);
+ }
+
+ if (!definition.renderValue) {
+ throw new Error("Widget must have a renderValue function");
+ }
+
+ // For static rendering (non-Shiny), use a simple widget registration
+ // scheme. We also use this scheme for Shiny apps/documents that also
+ // contain static widgets.
+ window.HTMLWidgets.widgets = window.HTMLWidgets.widgets || [];
+ // Merge defaults into the definition; don't mutate the original definition.
+ var staticBinding = extend({}, defaults, definition);
+ overrideMethod(staticBinding, "find", function(superfunc) {
+ return function(scope) {
+ var results = superfunc(scope);
+ // Filter out Shiny outputs, we only want the static kind
+ return filterByClass(results, "html-widget-output", false);
+ };
+ });
+ window.HTMLWidgets.widgets.push(staticBinding);
+
+ if (shinyMode) {
+ // Shiny is running. Register the definition with an output binding.
+ // The definition itself will not be the output binding, instead
+ // we will make an output binding object that delegates to the
+ // definition. This is because we foolishly used the same method
+ // name (renderValue) for htmlwidgets definition and Shiny bindings
+ // but they actually have quite different semantics (the Shiny
+ // bindings receive data that includes lots of metadata that it
+ // strips off before calling htmlwidgets renderValue). We can't
+ // just ignore the difference because in some widgets it's helpful
+ // to call this.renderValue() from inside of resize(), and if
+ // we're not delegating, then that call will go to the Shiny
+ // version instead of the htmlwidgets version.
+
+ // Merge defaults with definition, without mutating either.
+ var bindingDef = extend({}, defaults, definition);
+
+ // This object will be our actual Shiny binding.
+ var shinyBinding = new Shiny.OutputBinding();
+
+ // With a few exceptions, we'll want to simply use the bindingDef's
+ // version of methods if they are available, otherwise fall back to
+ // Shiny's defaults. NOTE: If Shiny's output bindings gain additional
+ // methods in the future, and we want them to be overrideable by
+ // HTMLWidget binding definitions, then we'll need to add them to this
+ // list.
+ delegateMethod(shinyBinding, bindingDef, "getId");
+ delegateMethod(shinyBinding, bindingDef, "onValueChange");
+ delegateMethod(shinyBinding, bindingDef, "onValueError");
+ delegateMethod(shinyBinding, bindingDef, "renderError");
+ delegateMethod(shinyBinding, bindingDef, "clearError");
+ delegateMethod(shinyBinding, bindingDef, "showProgress");
+
+ // The find, renderValue, and resize are handled differently, because we
+ // want to actually decorate the behavior of the bindingDef methods.
+
+ shinyBinding.find = function(scope) {
+ var results = bindingDef.find(scope);
+
+ // Only return elements that are Shiny outputs, not static ones
+ var dynamicResults = results.filter(".html-widget-output");
+
+ // It's possible that whatever caused Shiny to think there might be
+ // new dynamic outputs, also caused there to be new static outputs.
+ // Since there might be lots of different htmlwidgets bindings, we
+ // schedule execution for later--no need to staticRender multiple
+ // times.
+ if (results.length !== dynamicResults.length)
+ scheduleStaticRender();
+
+ return dynamicResults;
+ };
+
+ // Wrap renderValue to handle initialization, which unfortunately isn't
+ // supported natively by Shiny at the time of this writing.
+
+ shinyBinding.renderValue = function(el, data) {
+ Shiny.renderDependencies(data.deps);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var i = 0; data.evals && i < data.evals.length; i++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[i]);
+ }
+ if (!bindingDef.renderOnNullValue) {
+ if (data.x === null) {
+ el.style.visibility = "hidden";
+ return;
+ } else {
+ el.style.visibility = "inherit";
+ }
+ }
+ if (!elementData(el, "initialized")) {
+ initSizing(el);
+
+ elementData(el, "initialized", true);
+ if (bindingDef.initialize) {
+ var rect = el.getBoundingClientRect();
+ var result = bindingDef.initialize(el, rect.width, rect.height);
+ elementData(el, "init_result", result);
+ }
+ }
+ bindingDef.renderValue(el, data.x, elementData(el, "init_result"));
+ evalAndRun(data.jsHooks.render, elementData(el, "init_result"), [el, data.x]);
+ };
+
+ // Only override resize if bindingDef implements it
+ if (bindingDef.resize) {
+ shinyBinding.resize = function(el, width, height) {
+ // Shiny can call resize before initialize/renderValue have been
+ // called, which doesn't make sense for widgets.
+ if (elementData(el, "initialized")) {
+ bindingDef.resize(el, width, height, elementData(el, "init_result"));
+ }
+ };
+ }
+
+ Shiny.outputBindings.register(shinyBinding, bindingDef.name);
+ }
+ };
+
+ var scheduleStaticRenderTimerId = null;
+ function scheduleStaticRender() {
+ if (!scheduleStaticRenderTimerId) {
+ scheduleStaticRenderTimerId = setTimeout(function() {
+ scheduleStaticRenderTimerId = null;
+ window.HTMLWidgets.staticRender();
+ }, 1);
+ }
+ }
+
+ // Render static widgets after the document finishes loading
+ // Statically render all elements that are of this widget's class
+ window.HTMLWidgets.staticRender = function() {
+ var bindings = window.HTMLWidgets.widgets || [];
+ forEach(bindings, function(binding) {
+ var matches = binding.find(document.documentElement);
+ forEach(matches, function(el) {
+ var sizeObj = initSizing(el, binding);
+
+ var getSize = function(el) {
+ if (sizeObj) {
+ return {w: sizeObj.getWidth(), h: sizeObj.getHeight()}
+ } else {
+ var rect = el.getBoundingClientRect();
+ return {w: rect.width, h: rect.height}
+ }
+ };
+
+ if (hasClass(el, "html-widget-static-bound"))
+ return;
+ el.className = el.className + " html-widget-static-bound";
+
+ var initResult;
+ if (binding.initialize) {
+ var size = getSize(el);
+ initResult = binding.initialize(el, size.w, size.h);
+ elementData(el, "init_result", initResult);
+ }
+
+ if (binding.resize) {
+ var lastSize = getSize(el);
+ var resizeHandler = function(e) {
+ var size = getSize(el);
+ if (size.w === 0 && size.h === 0)
+ return;
+ if (size.w === lastSize.w && size.h === lastSize.h)
+ return;
+ lastSize = size;
+ binding.resize(el, size.w, size.h, initResult);
+ };
+
+ on(window, "resize", resizeHandler);
+
+ // This is needed for cases where we're running in a Shiny
+ // app, but the widget itself is not a Shiny output, but
+ // rather a simple static widget. One example of this is
+ // an rmarkdown document that has runtime:shiny and widget
+ // that isn't in a render function. Shiny only knows to
+ // call resize handlers for Shiny outputs, not for static
+ // widgets, so we do it ourselves.
+ if (window.jQuery) {
+ window.jQuery(document).on(
+ "shown.htmlwidgets shown.bs.tab.htmlwidgets shown.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ window.jQuery(document).on(
+ "hidden.htmlwidgets hidden.bs.tab.htmlwidgets hidden.bs.collapse.htmlwidgets",
+ resizeHandler
+ );
+ }
+
+ // This is needed for the specific case of ioslides, which
+ // flips slides between display:none and display:block.
+ // Ideally we would not have to have ioslide-specific code
+ // here, but rather have ioslides raise a generic event,
+ // but the rmarkdown package just went to CRAN so the
+ // window to getting that fixed may be long.
+ if (window.addEventListener) {
+ // It's OK to limit this to window.addEventListener
+ // browsers because ioslides itself only supports
+ // such browsers.
+ on(document, "slideenter", resizeHandler);
+ on(document, "slideleave", resizeHandler);
+ }
+ }
+
+ var scriptData = document.querySelector("script[data-for='" + el.id + "'][type='application/json']");
+ if (scriptData) {
+ var data = JSON.parse(scriptData.textContent || scriptData.text);
+ // Resolve strings marked as javascript literals to objects
+ if (!(data.evals instanceof Array)) data.evals = [data.evals];
+ for (var k = 0; data.evals && k < data.evals.length; k++) {
+ window.HTMLWidgets.evaluateStringMember(data.x, data.evals[k]);
+ }
+ binding.renderValue(el, data.x, initResult);
+ evalAndRun(data.jsHooks.render, initResult, [el, data.x]);
+ }
+ });
+ });
+
+ invokePostRenderHandlers();
+ }
+
+
+ function has_jQuery3() {
+ if (!window.jQuery) {
+ return false;
+ }
+ var $version = window.jQuery.fn.jquery;
+ var $major_version = parseInt($version.split(".")[0]);
+ return $major_version >= 3;
+ }
+
+ /*
+ / Shiny 1.4 bumped jQuery from 1.x to 3.x which means jQuery's
+ / on-ready handler (i.e., $(fn)) is now asyncronous (i.e., it now
+ / really means $(setTimeout(fn)).
+ / https://jquery.com/upgrade-guide/3.0/#breaking-change-document-ready-handlers-are-now-asynchronous
+ /
+ / Since Shiny uses $() to schedule initShiny, shiny>=1.4 calls initShiny
+ / one tick later than it did before, which means staticRender() is
+ / called renderValue() earlier than (advanced) widget authors might be expecting.
+ / https://github.com/rstudio/shiny/issues/2630
+ /
+ / For a concrete example, leaflet has some methods (e.g., updateBounds)
+ / which reference Shiny methods registered in initShiny (e.g., setInputValue).
+ / Since leaflet is privy to this life-cycle, it knows to use setTimeout() to
+ / delay execution of those methods (until Shiny methods are ready)
+ / https://github.com/rstudio/leaflet/blob/18ec981/javascript/src/index.js#L266-L268
+ /
+ / Ideally widget authors wouldn't need to use this setTimeout() hack that
+ / leaflet uses to call Shiny methods on a staticRender(). In the long run,
+ / the logic initShiny should be broken up so that method registration happens
+ / right away, but binding happens later.
+ */
+ function maybeStaticRenderLater() {
+ if (shinyMode && has_jQuery3()) {
+ window.jQuery(window.HTMLWidgets.staticRender);
+ } else {
+ window.HTMLWidgets.staticRender();
+ }
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener("DOMContentLoaded", function() {
+ document.removeEventListener("DOMContentLoaded", arguments.callee, false);
+ maybeStaticRenderLater();
+ }, false);
+ } else if (document.attachEvent) {
+ document.attachEvent("onreadystatechange", function() {
+ if (document.readyState === "complete") {
+ document.detachEvent("onreadystatechange", arguments.callee);
+ maybeStaticRenderLater();
+ }
+ });
+ }
+
+
+ window.HTMLWidgets.getAttachmentUrl = function(depname, key) {
+ // If no key, default to the first item
+ if (typeof(key) === "undefined")
+ key = 1;
+
+ var link = document.getElementById(depname + "-" + key + "-attachment");
+ if (!link) {
+ throw new Error("Attachment " + depname + "/" + key + " not found in document");
+ }
+ return link.getAttribute("href");
+ };
+
+ window.HTMLWidgets.dataframeToD3 = function(df) {
+ var names = [];
+ var length;
+ for (var name in df) {
+ if (df.hasOwnProperty(name))
+ names.push(name);
+ if (typeof(df[name]) !== "object" || typeof(df[name].length) === "undefined") {
+ throw new Error("All fields must be arrays");
+ } else if (typeof(length) !== "undefined" && length !== df[name].length) {
+ throw new Error("All fields must be arrays of the same length");
+ }
+ length = df[name].length;
+ }
+ var results = [];
+ var item;
+ for (var row = 0; row < length; row++) {
+ item = {};
+ for (var col = 0; col < names.length; col++) {
+ item[names[col]] = df[names[col]][row];
+ }
+ results.push(item);
+ }
+ return results;
+ };
+
+ window.HTMLWidgets.transposeArray2D = function(array) {
+ if (array.length === 0) return array;
+ var newArray = array[0].map(function(col, i) {
+ return array.map(function(row) {
+ return row[i]
+ })
+ });
+ return newArray;
+ };
+ // Split value at splitChar, but allow splitChar to be escaped
+ // using escapeChar. Any other characters escaped by escapeChar
+ // will be included as usual (including escapeChar itself).
+ function splitWithEscape(value, splitChar, escapeChar) {
+ var results = [];
+ var escapeMode = false;
+ var currentResult = "";
+ for (var pos = 0; pos < value.length; pos++) {
+ if (!escapeMode) {
+ if (value[pos] === splitChar) {
+ results.push(currentResult);
+ currentResult = "";
+ } else if (value[pos] === escapeChar) {
+ escapeMode = true;
+ } else {
+ currentResult += value[pos];
+ }
+ } else {
+ currentResult += value[pos];
+ escapeMode = false;
+ }
+ }
+ if (currentResult !== "") {
+ results.push(currentResult);
+ }
+ return results;
+ }
+ // Function authored by Yihui/JJ Allaire
+ window.HTMLWidgets.evaluateStringMember = function(o, member) {
+ var parts = splitWithEscape(member, '.', '\\');
+ for (var i = 0, l = parts.length; i < l; i++) {
+ var part = parts[i];
+ // part may be a character or 'numeric' member name
+ if (o !== null && typeof o === "object" && part in o) {
+ if (i == (l - 1)) { // if we are at the end of the line then evalulate
+ if (typeof o[part] === "string")
+ o[part] = tryEval(o[part]);
+ } else { // otherwise continue to next embedded object
+ o = o[part];
+ }
+ }
+ }
+ };
+
+ // Retrieve the HTMLWidget instance (i.e. the return value of an
+ // HTMLWidget binding's initialize() or factory() function)
+ // associated with an element, or null if none.
+ window.HTMLWidgets.getInstance = function(el) {
+ return elementData(el, "init_result");
+ };
+
+ // Finds the first element in the scope that matches the selector,
+ // and returns the HTMLWidget instance (i.e. the return value of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with that element, if any. If no element matches the
+ // selector, or the first matching element has no HTMLWidget
+ // instance associated with it, then null is returned.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.find = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var el = scope.querySelector(selector);
+ if (el === null) {
+ return null;
+ } else {
+ return window.HTMLWidgets.getInstance(el);
+ }
+ };
+
+ // Finds all elements in the scope that match the selector, and
+ // returns the HTMLWidget instances (i.e. the return values of
+ // an HTMLWidget binding's initialize() or factory() function)
+ // associated with the elements, in an array. If elements that
+ // match the selector don't have an associated HTMLWidget
+ // instance, the returned array will contain nulls.
+ //
+ // The scope argument is optional, and defaults to window.document.
+ window.HTMLWidgets.findAll = function(scope, selector) {
+ if (arguments.length == 1) {
+ selector = scope;
+ scope = document;
+ }
+
+ var nodes = scope.querySelectorAll(selector);
+ var results = [];
+ for (var i = 0; i < nodes.length; i++) {
+ results.push(window.HTMLWidgets.getInstance(nodes[i]));
+ }
+ return results;
+ };
+
+ var postRenderHandlers = [];
+ function invokePostRenderHandlers() {
+ while (postRenderHandlers.length) {
+ var handler = postRenderHandlers.shift();
+ if (handler) {
+ handler();
+ }
+ }
+ }
+
+ // Register the given callback function to be invoked after the
+ // next time static widgets are rendered.
+ window.HTMLWidgets.addPostRenderHandler = function(callback) {
+ postRenderHandlers.push(callback);
+ };
+
+ // Takes a new-style instance-bound definition, and returns an
+ // old-style class-bound definition. This saves us from having
+ // to rewrite all the logic in this file to accomodate both
+ // types of definitions.
+ function createLegacyDefinitionAdapter(defn) {
+ var result = {
+ name: defn.name,
+ type: defn.type,
+ initialize: function(el, width, height) {
+ return defn.factory(el, width, height);
+ },
+ renderValue: function(el, x, instance) {
+ return instance.renderValue(x);
+ },
+ resize: function(el, width, height, instance) {
+ return instance.resize(width, height);
+ }
+ };
+
+ if (defn.find)
+ result.find = defn.find;
+ if (defn.renderError)
+ result.renderError = defn.renderError;
+ if (defn.clearError)
+ result.clearError = defn.clearError;
+
+ return result;
+ }
+})();
diff --git a/docs/site_libs/reactwidget-1.0.0/react-tools.js b/docs/site_libs/reactwidget-1.0.0/react-tools.js
new file mode 100644
index 0000000..871441a
--- /dev/null
+++ b/docs/site_libs/reactwidget-1.0.0/react-tools.js
@@ -0,0 +1,547 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/
+/******/ // Check if module is in cache
+/******/ if(installedModules[moduleId]) {
+/******/ return installedModules[moduleId].exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = installedModules[moduleId] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./srcjs/react-tools.js");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./srcjs/input.js":
+/*!************************!*\
+ !*** ./srcjs/input.js ***!
+ \************************/
+/*! exports provided: reactShinyInput */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reactShinyInput", function() { return reactShinyInput; });
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
+/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom");
+/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__);
+/* harmony import */ var shiny__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! shiny */ "shiny");
+/* harmony import */ var shiny__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(shiny__WEBPACK_IMPORTED_MODULE_2__);
+/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! jquery */ "jquery");
+/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_3__);
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
+
+function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
+
+function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
+
+function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
+
+function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
+
+function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
+
+function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
+
+function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
+
+
+
+
+
+/*
+ * This default receiveMessage implementation expects data to contain whole
+ * configuration and value properties. If either is present, it will be set and
+ * the component will be re-rendered. Because receiveMessage is typically used
+ * by input authors to perform incremental updates, this default implementation
+ * can be overriden by the user with the receiveMessage arguments to
+ * reactShinyInput.
+ */
+
+function defaultReceiveMessage(el, _ref) {
+ var configuration = _ref.configuration,
+ value = _ref.value;
+ var dirty = false;
+
+ if (configuration !== undefined) {
+ this.setInputConfiguration(el, configuration);
+ dirty = true;
+ }
+
+ if (value !== undefined) {
+ this.setInputValue(el, value);
+ dirty = true;
+ }
+
+ if (dirty) {
+ this.getCallback(el)();
+ this.render(el);
+ }
+}
+
+var defaultOptions = {
+ receiveMessage: defaultReceiveMessage,
+ type: false,
+ ratePolicy: null
+};
+/**
+ * Installs a new Shiny input binding based on a React component.
+ *
+ * @param {string} selector - jQuery selector that should identify the set of
+ * container elements within the scope argument of Shiny.InputBinding.find.
+ * @param {string} name - A name such as 'acme.FooInput' that should uniquely
+ * identify the component.
+ * @param {Object} component - React Component, either class or function.
+ * @param {Object} options - Additional configuration options. Supported
+ * options are:
+ * - receiveMessage: Implementation of Shiny.InputBinding to use in place of
+ * the default. Typically overridden as an optimization to perform
+ * incremental value updates.
+ * - type: `false`, a string, or a function.
+ * - `false` (the default): denotes that the value produced by this input
+ * should not be intercepted by any handlers registered in R on the
+ * server using shiny::registerInputHandler().
+ * - string: denotes the input's *type* and should correspond to the
+ * type parameter of shiny::registerInputHandler().
+ * - function: A function called with `this` bound to the InputBinding
+ * instance and passed a single argument, the input's containing DOM
+ * element. The function should return either `false` or a string
+ * corresponding to the type parameter of shiny::registerInputHandler().
+ * - ratePolicy: A rate policy object as defined in the documentation for
+ * getRatePolicy(): https://shiny.rstudio.com/articles/building-inputs.html
+ * A rate policy object has two members:
+ * - `policy`: Valid values are the strings "direct", "debounce", and
+ * "throttle". "direct" means that all events are sent immediately.
+ * - `delay`: Number indicating the number of milliseconds that should be
+ * used when debouncing or throttling. Has no effect if the policy is
+ * direct.
+ * The specified rate policy is only applied when `true` is passed as the
+ * second argument to the `setValue` function passed as a prop to the
+ * input component.
+ *
+ */
+
+function reactShinyInput(selector, name, component, options) {
+ options = Object.assign({}, defaultOptions, options);
+ shiny__WEBPACK_IMPORTED_MODULE_2___default.a.inputBindings.register(new ( /*#__PURE__*/function (_Shiny$InputBinding) {
+ _inherits(_class, _Shiny$InputBinding);
+
+ var _super = _createSuper(_class);
+
+ function _class() {
+ _classCallCheck(this, _class);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(_class, [{
+ key: "find",
+
+ /*
+ * Methods override those in Shiny.InputBinding
+ */
+ value: function find(scope) {
+ return jquery__WEBPACK_IMPORTED_MODULE_3___default()(scope).find(selector);
+ }
+ }, {
+ key: "getValue",
+ value: function getValue(el) {
+ return this.getInputValue(el);
+ }
+ }, {
+ key: "setValue",
+ value: function setValue(el, value) {
+ var rateLimited = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
+
+ /*
+ * We have to check whether $(el).data('callback') is undefined here
+ * in case shiny::renderUI() is involved. If an input is contained in a
+ * shiny::uiOutput(), the following strange thing happens occasionally:
+ *
+ * 1. setValue() is bound to an el in this.render(), below
+ * 2. An event that will call setValue() is enqueued
+ * 3. While the event is still enqueued, el is unbound and removed
+ * from the DOM by the JS code associated with shiny::uiOutput()
+ * - That code uses jQuery .html() in output_binding_html.js
+ * - .html() removes el from the DOM and clears ist data and events
+ * 4. By the time the setValue() bound to the original el is invoked,
+ * el has been unbound and its data cleared.
+ *
+ * Since the original input is gone along with its callback, it
+ * seems to make the most sense to do nothing.
+ */
+ if (jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('callback') !== undefined) {
+ this.setInputValue(el, value);
+ this.getCallback(el)(rateLimited);
+ this.render(el);
+ }
+ }
+ }, {
+ key: "initialize",
+ value: function initialize(el) {
+ jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('value', JSON.parse(jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).next().text()));
+ jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('configuration', JSON.parse(jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).next().next().text()));
+ }
+ }, {
+ key: "subscribe",
+ value: function subscribe(el, callback) {
+ jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('callback', callback);
+ this.render(el);
+ }
+ }, {
+ key: "unsubscribe",
+ value: function unsubscribe(el) {
+ react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.render(null, el);
+ }
+ }, {
+ key: "receiveMessage",
+ value: function receiveMessage(el, data) {
+ options.receiveMessage.call(this, el, data);
+ }
+ }, {
+ key: "getType",
+ value: function getType(el) {
+ if (typeof options.type === 'function') {
+ return options.type.call(this, el);
+ } else if (options.type === false || typeof options.type === 'string') {
+ return options.type;
+ } else {
+ throw new Error('options.type must be false, a string, or a function');
+ }
+ }
+ }, {
+ key: "getRatePolicy",
+ value: function getRatePolicy() {
+ return options.ratePolicy;
+ }
+ /*
+ * Methods not present in Shiny.InputBinding but accessible to users
+ * through `this` in receiveMessage
+ */
+
+ }, {
+ key: "getInputValue",
+ value: function getInputValue(el) {
+ return jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('value');
+ }
+ }, {
+ key: "setInputValue",
+ value: function setInputValue(el, value) {
+ jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('value', value);
+ }
+ }, {
+ key: "getInputConfiguration",
+ value: function getInputConfiguration(el) {
+ return jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('configuration');
+ }
+ }, {
+ key: "setInputConfiguration",
+ value: function setInputConfiguration(el, configuration) {
+ jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('configuration', configuration);
+ }
+ }, {
+ key: "getCallback",
+ value: function getCallback(el) {
+ return jquery__WEBPACK_IMPORTED_MODULE_3___default()(el).data('callback');
+ }
+ }, {
+ key: "render",
+ value: function render(el) {
+ var element = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(component, {
+ configuration: this.getInputConfiguration(el),
+ value: this.getValue(el),
+ setValue: this.setValue.bind(this, el),
+ el: el
+ });
+ react_dom__WEBPACK_IMPORTED_MODULE_1___default.a.render(element, el);
+ }
+ }]);
+
+ return _class;
+ }(shiny__WEBPACK_IMPORTED_MODULE_2___default.a.InputBinding))(), name);
+}
+
+/***/ }),
+
+/***/ "./srcjs/react-tools.js":
+/*!******************************!*\
+ !*** ./srcjs/react-tools.js ***!
+ \******************************/
+/*! no exports provided */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony import */ var _widget__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./widget */ "./srcjs/widget.js");
+/* harmony import */ var _input__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./input */ "./srcjs/input.js");
+
+
+window.reactR = {
+ reactShinyInput: _input__WEBPACK_IMPORTED_MODULE_1__["reactShinyInput"],
+ reactWidget: _widget__WEBPACK_IMPORTED_MODULE_0__["reactWidget"],
+ hydrate: _widget__WEBPACK_IMPORTED_MODULE_0__["hydrate"]
+};
+
+/***/ }),
+
+/***/ "./srcjs/widget.js":
+/*!*************************!*\
+ !*** ./srcjs/widget.js ***!
+ \*************************/
+/*! exports provided: hydrate, defaultOptions, mergeOptions, formatDimension, isTag, reactWidget */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+__webpack_require__.r(__webpack_exports__);
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hydrate", function() { return hydrate; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultOptions", function() { return defaultOptions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeOptions", function() { return mergeOptions; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "formatDimension", function() { return formatDimension; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isTag", function() { return isTag; });
+/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reactWidget", function() { return reactWidget; });
+function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
+
+/**
+ * Recursively transforms tag, a JSON representation of an instance of a
+ * React component and its children, into a React element suitable for
+ * passing to ReactDOM.render.
+ * @param {Object} components
+ * @param {Object} tag
+ */
+function hydrate(components, tag) {
+ if (typeof tag === 'string') return tag;
+
+ if (tag.name[0] === tag.name[0].toUpperCase() && !components.hasOwnProperty(tag.name)) {
+ throw new Error("Unknown component: " + tag.name);
+ }
+
+ var elem = components.hasOwnProperty(tag.name) ? components[tag.name] : tag.name,
+ args = [elem, tag.attribs];
+
+ for (var i = 0; i < tag.children.length; i++) {
+ args.push(hydrate(components, tag.children[i]));
+ }
+
+ return React.createElement.apply(React, args);
+}
+var defaultOptions = {
+ // The name of the property on the root tag to use for the width, if
+ // it's updated.
+ widthProperty: "width",
+ // The name of the property on the root tag to use for the height, if
+ // it's updated.
+ heightProperty: "height",
+ // Whether or not to append the string 'px' to the width and height
+ // properties when they change.
+ appendPx: false,
+ // Whether or not to dynamically update the width and height properties
+ // of the last known tag when the computed width and height change in
+ // the browser.
+ renderOnResize: false
+};
+function mergeOptions(options) {
+ var merged = {};
+
+ for (var k in defaultOptions) {
+ merged[k] = defaultOptions[k];
+ }
+
+ for (var k in options) {
+ if (!defaultOptions.hasOwnProperty(k)) {
+ throw new Error("Unrecognized option: " + k);
+ }
+
+ merged[k] = options[k];
+ }
+
+ return merged;
+}
+function formatDimension(dim, options) {
+ if (options.appendPx) {
+ return dim + 'px';
+ } else {
+ return dim;
+ }
+}
+function isTag(value) {
+ return _typeof(value) === 'object' && value.hasOwnProperty('name') && value.hasOwnProperty('attribs') && value.hasOwnProperty('children');
+}
+/**
+ * Creates an HTMLWidget that is updated by rendering a React component.
+ * React component constructors are made available by specifying them by
+ * name in the components object.
+ * @param {string} name
+ * @param {string} type
+ * @param {Object} components
+ * @param {Object} options
+ */
+
+function reactWidget(name, type, components, options) {
+ var actualOptions = mergeOptions(options);
+ window.HTMLWidgets.widget({
+ name: name,
+ type: type,
+ factory: function factory(el, width, height) {
+ var lastValue,
+ instance = {},
+ renderValue = function renderValue(value) {
+ if (actualOptions.renderOnResize) {
+ // value.tag might be a primitive string, in which
+ // case there is no attribs property.
+ if (_typeof(value.tag) === 'object') {
+ value.tag.attribs[actualOptions["widthProperty"]] = formatDimension(width);
+ value.tag.attribs[actualOptions["heightProperty"]] = formatDimension(height);
+ }
+
+ lastValue = value;
+ } // with functional stateless components this will be null
+ // see https://reactjs.org/docs/react-dom.html#render for more details
+
+
+ this.instance.component = ReactDOM.render(hydrate(components, value.tag), el);
+ };
+
+ return {
+ instance: instance,
+ renderValue: renderValue,
+ resize: function resize(newWidth, newHeight) {
+ if (actualOptions.renderOnResize) {
+ width = newWidth;
+ height = newHeight;
+ renderValue(lastValue);
+ }
+ }
+ };
+ }
+ });
+}
+
+/***/ }),
+
+/***/ "jquery":
+/*!********************************!*\
+ !*** external "window.jQuery" ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = window.jQuery;
+
+/***/ }),
+
+/***/ "react":
+/*!*******************************!*\
+ !*** external "window.React" ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = window.React;
+
+/***/ }),
+
+/***/ "react-dom":
+/*!**********************************!*\
+ !*** external "window.ReactDOM" ***!
+ \**********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = window.ReactDOM;
+
+/***/ }),
+
+/***/ "shiny":
+/*!*******************************!*\
+ !*** external "window.Shiny" ***!
+ \*******************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+module.exports = window.Shiny;
+
+/***/ })
+
+/******/ });
+//# sourceMappingURL=react-tools.js.map
\ No newline at end of file
diff --git a/docs/site_libs/reactwidget-1.0.0/react-tools.js.map b/docs/site_libs/reactwidget-1.0.0/react-tools.js.map
new file mode 100644
index 0000000..088dfa0
--- /dev/null
+++ b/docs/site_libs/reactwidget-1.0.0/react-tools.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./srcjs/input.js","webpack:///./srcjs/react-tools.js","webpack:///./srcjs/widget.js","webpack:///external \"window.jQuery\"","webpack:///external \"window.React\"","webpack:///external \"window.ReactDOM\"","webpack:///external \"window.Shiny\""],"names":["defaultReceiveMessage","el","configuration","value","dirty","undefined","setInputConfiguration","setInputValue","getCallback","render","defaultOptions","receiveMessage","type","ratePolicy","reactShinyInput","selector","name","component","options","Object","assign","Shiny","inputBindings","register","scope","$","find","getInputValue","rateLimited","data","JSON","parse","next","text","callback","ReactDOM","call","Error","element","React","createElement","getInputConfiguration","getValue","setValue","bind","InputBinding","window","reactR","reactWidget","hydrate","components","tag","toUpperCase","hasOwnProperty","elem","args","attribs","i","children","length","push","apply","widthProperty","heightProperty","appendPx","renderOnResize","mergeOptions","merged","k","formatDimension","dim","isTag","actualOptions","HTMLWidgets","widget","factory","width","height","lastValue","instance","renderValue","resize","newWidth","newHeight"],"mappings":"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","file":"react-tools.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./srcjs/react-tools.js\");\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport Shiny from 'shiny';\r\nimport $ from 'jquery';\r\n\r\n/*\r\n * This default receiveMessage implementation expects data to contain whole\r\n * configuration and value properties. If either is present, it will be set and\r\n * the component will be re-rendered. Because receiveMessage is typically used\r\n * by input authors to perform incremental updates, this default implementation\r\n * can be overriden by the user with the receiveMessage arguments to\r\n * reactShinyInput.\r\n */\r\nfunction defaultReceiveMessage(el, { configuration, value }) {\r\n let dirty = false;\r\n if (configuration !== undefined) {\r\n this.setInputConfiguration(el, configuration);\r\n dirty = true;\r\n }\r\n if (value !== undefined) {\r\n this.setInputValue(el, value);\r\n dirty = true;\r\n }\r\n if (dirty) {\r\n this.getCallback(el)();\r\n this.render(el);\r\n }\r\n}\r\n\r\nconst defaultOptions = {\r\n receiveMessage: defaultReceiveMessage,\r\n type: false,\r\n ratePolicy: null\r\n};\r\n\r\n/**\r\n * Installs a new Shiny input binding based on a React component.\r\n *\r\n * @param {string} selector - jQuery selector that should identify the set of\r\n * container elements within the scope argument of Shiny.InputBinding.find.\r\n * @param {string} name - A name such as 'acme.FooInput' that should uniquely\r\n * identify the component.\r\n * @param {Object} component - React Component, either class or function.\r\n * @param {Object} options - Additional configuration options. Supported\r\n * options are:\r\n * - receiveMessage: Implementation of Shiny.InputBinding to use in place of\r\n * the default. Typically overridden as an optimization to perform\r\n * incremental value updates.\r\n * - type: `false`, a string, or a function.\r\n * - `false` (the default): denotes that the value produced by this input\r\n * should not be intercepted by any handlers registered in R on the\r\n * server using shiny::registerInputHandler().\r\n * - string: denotes the input's *type* and should correspond to the\r\n * type parameter of shiny::registerInputHandler().\r\n * - function: A function called with `this` bound to the InputBinding\r\n * instance and passed a single argument, the input's containing DOM\r\n * element. The function should return either `false` or a string\r\n * corresponding to the type parameter of shiny::registerInputHandler().\r\n * - ratePolicy: A rate policy object as defined in the documentation for\r\n * getRatePolicy(): https://shiny.rstudio.com/articles/building-inputs.html\r\n * A rate policy object has two members:\r\n * - `policy`: Valid values are the strings \"direct\", \"debounce\", and\r\n * \"throttle\". \"direct\" means that all events are sent immediately.\r\n * - `delay`: Number indicating the number of milliseconds that should be\r\n * used when debouncing or throttling. Has no effect if the policy is\r\n * direct.\r\n * The specified rate policy is only applied when `true` is passed as the\r\n * second argument to the `setValue` function passed as a prop to the\r\n * input component.\r\n *\r\n */\r\nexport function reactShinyInput(selector,\r\n name,\r\n component,\r\n options) {\r\n options = Object.assign({}, defaultOptions, options);\r\n Shiny.inputBindings.register(new class extends Shiny.InputBinding {\r\n\r\n /*\r\n * Methods override those in Shiny.InputBinding\r\n */\r\n\r\n find(scope) {\r\n return $(scope).find(selector);\r\n }\r\n getValue(el) {\r\n return this.getInputValue(el);\r\n }\r\n setValue(el, value, rateLimited = false) {\r\n /*\r\n * We have to check whether $(el).data('callback') is undefined here\r\n * in case shiny::renderUI() is involved. If an input is contained in a\r\n * shiny::uiOutput(), the following strange thing happens occasionally:\r\n *\r\n * 1. setValue() is bound to an el in this.render(), below\r\n * 2. An event that will call setValue() is enqueued\r\n * 3. While the event is still enqueued, el is unbound and removed\r\n * from the DOM by the JS code associated with shiny::uiOutput()\r\n * - That code uses jQuery .html() in output_binding_html.js\r\n * - .html() removes el from the DOM and clears ist data and events\r\n * 4. By the time the setValue() bound to the original el is invoked,\r\n * el has been unbound and its data cleared.\r\n *\r\n * Since the original input is gone along with its callback, it\r\n * seems to make the most sense to do nothing.\r\n */\r\n if ($(el).data('callback') !== undefined) {\r\n this.setInputValue(el, value);\r\n this.getCallback(el)(rateLimited);\r\n this.render(el);\r\n }\r\n }\r\n initialize(el) {\r\n $(el).data('value', JSON.parse($(el).next().text()));\r\n $(el).data('configuration', JSON.parse($(el).next().next().text()));\r\n }\r\n subscribe(el, callback) {\r\n $(el).data('callback', callback);\r\n this.render(el);\r\n }\r\n unsubscribe(el) {\r\n ReactDOM.render(null, el);\r\n }\r\n receiveMessage(el, data) {\r\n options.receiveMessage.call(this, el, data);\r\n }\r\n getType(el) {\r\n if (typeof options.type === 'function') {\r\n return options.type.call(this, el);\r\n } else if (options.type === false || typeof options.type === 'string') {\r\n return options.type;\r\n } else {\r\n throw new Error('options.type must be false, a string, or a function');\r\n }\r\n }\r\n getRatePolicy() {\r\n return options.ratePolicy;\r\n }\r\n\r\n /*\r\n * Methods not present in Shiny.InputBinding but accessible to users\r\n * through `this` in receiveMessage\r\n */\r\n\r\n getInputValue(el) {\r\n return $(el).data('value');\r\n }\r\n setInputValue(el, value) {\r\n $(el).data('value', value);\r\n }\r\n getInputConfiguration(el) {\r\n return $(el).data('configuration');\r\n }\r\n setInputConfiguration(el, configuration) {\r\n $(el).data('configuration', configuration);\r\n }\r\n getCallback(el) {\r\n return $(el).data('callback');\r\n }\r\n render(el) {\r\n const element = React.createElement(component, {\r\n configuration: this.getInputConfiguration(el),\r\n value: this.getValue(el),\r\n setValue: this.setValue.bind(this, el),\r\n el: el\r\n });\r\n ReactDOM.render(element, el);\r\n }\r\n }, name);\r\n}\r\n\r\n","import { reactWidget, hydrate } from './widget';\r\nimport { reactShinyInput } from './input';\r\n\r\nwindow.reactR = {\r\n reactShinyInput: reactShinyInput,\r\n reactWidget: reactWidget,\r\n hydrate: hydrate\r\n};\r\n","/**\r\n * Recursively transforms tag, a JSON representation of an instance of a\r\n * React component and its children, into a React element suitable for\r\n * passing to ReactDOM.render.\r\n * @param {Object} components\r\n * @param {Object} tag\r\n */\r\nexport function hydrate(components, tag) {\r\n if (typeof tag === 'string') return tag;\r\n if (tag.name[0] === tag.name[0].toUpperCase()\r\n && !components.hasOwnProperty(tag.name)) {\r\n throw new Error(\"Unknown component: \" + tag.name);\r\n }\r\n var elem = components.hasOwnProperty(tag.name) ? components[tag.name] : tag.name,\r\n args = [elem, tag.attribs];\r\n for (var i = 0; i < tag.children.length; i++) {\r\n args.push(hydrate(components, tag.children[i]));\r\n }\r\n return React.createElement.apply(React, args);\r\n}\r\n\r\nexport const defaultOptions = {\r\n // The name of the property on the root tag to use for the width, if\r\n // it's updated.\r\n widthProperty: \"width\",\r\n // The name of the property on the root tag to use for the height, if\r\n // it's updated.\r\n heightProperty: \"height\",\r\n // Whether or not to append the string 'px' to the width and height\r\n // properties when they change.\r\n appendPx: false,\r\n // Whether or not to dynamically update the width and height properties\r\n // of the last known tag when the computed width and height change in\r\n // the browser.\r\n renderOnResize: false\r\n};\r\n\r\nexport function mergeOptions(options) {\r\n var merged = {};\r\n for (var k in defaultOptions) {\r\n merged[k] = defaultOptions[k];\r\n }\r\n for (var k in options) {\r\n if (!defaultOptions.hasOwnProperty(k)) {\r\n throw new Error(\"Unrecognized option: \" + k);\r\n }\r\n merged[k] = options[k];\r\n }\r\n return merged;\r\n}\r\n\r\nexport function formatDimension(dim, options) {\r\n if (options.appendPx) {\r\n return dim + 'px';\r\n } else {\r\n return dim;\r\n }\r\n}\r\n\r\nexport function isTag(value) {\r\n return (typeof value === 'object')\r\n && value.hasOwnProperty('name')\r\n && value.hasOwnProperty('attribs')\r\n && value.hasOwnProperty('children');\r\n}\r\n\r\n/**\r\n * Creates an HTMLWidget that is updated by rendering a React component.\r\n * React component constructors are made available by specifying them by\r\n * name in the components object.\r\n * @param {string} name\r\n * @param {string} type\r\n * @param {Object} components\r\n * @param {Object} options\r\n */\r\nexport function reactWidget(name, type, components, options) {\r\n var actualOptions = mergeOptions(options);\r\n window.HTMLWidgets.widget({\r\n name: name,\r\n type: type,\r\n factory: function (el, width, height) {\r\n var lastValue,\r\n instance = {},\r\n renderValue = (function (value) {\r\n if (actualOptions.renderOnResize) {\r\n // value.tag might be a primitive string, in which\r\n // case there is no attribs property.\r\n if (typeof value.tag === 'object') {\r\n value.tag.attribs[actualOptions[\"widthProperty\"]] = formatDimension(width);\r\n value.tag.attribs[actualOptions[\"heightProperty\"]] = formatDimension(height);\r\n }\r\n lastValue = value;\r\n }\r\n // with functional stateless components this will be null\r\n // see https://reactjs.org/docs/react-dom.html#render for more details\r\n this.instance.component = ReactDOM.render(hydrate(components, value.tag), el);\r\n });\r\n return {\r\n instance: instance,\r\n renderValue: renderValue,\r\n resize: function (newWidth, newHeight) {\r\n if (actualOptions.renderOnResize) {\r\n width = newWidth;\r\n height = newHeight;\r\n renderValue(lastValue);\r\n }\r\n }\r\n };\r\n }\r\n })\r\n}\r\n\r\n","module.exports = window.jQuery;","module.exports = window.React;","module.exports = window.ReactDOM;","module.exports = window.Shiny;"],"sourceRoot":""}
\ No newline at end of file