1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
- var reactPrimitives = _interopDefault(require('react-primitives'));
- var transformDeclPairs = _interopDefault(require('css-to-react-native'));
- var reactIs = require('react-is');
- var React = require('react');
- var React__default = _interopDefault(React);
- require('shallowequal');
- var Stylis = _interopDefault(require('@emotion/stylis'));
- var unitless = _interopDefault(require('@emotion/unitless'));
- var supportsColor = _interopDefault(require('supports-color'));
- var hoist = _interopDefault(require('hoist-non-react-statics'));
- //
- /* eslint-disable no-bitwise */
- var AD_REPLACER_R = /(a)(d)/gi;
- /* This is the "capacity" of our alphabet i.e. 2x26 for all letters plus their capitalised
- * counterparts */
- var charsLength = 52;
- /* start at 75 for 'a' until 'z' (25) and then start at 65 for capitalised letters */
- var getAlphabeticChar = function getAlphabeticChar(code) {
- return String.fromCharCode(code + (code > 25 ? 39 : 97));
- };
- /* input a number, usually a hash and convert it to base-52 */
- function generateAlphabeticName(code) {
- var name = '';
- var x;
- /* get a char and divide by alphabet-length */
- for (x = Math.abs(code); x > charsLength; x = x / charsLength | 0) {
- name = getAlphabeticChar(x % charsLength) + name;
- }
- return (getAlphabeticChar(x % charsLength) + name).replace(AD_REPLACER_R, '$1-$2');
- }
- //
- /* eslint-disable */
- var SEED = 5381; // When we have separate strings it's useful to run a progressive
- // version of djb2 where we pretend that we're still looping over
- // the same string
- var phash = function phash(h, x) {
- var i = x.length;
- while (i) {
- h = h * 33 ^ x.charCodeAt(--i);
- }
- return h;
- }; // This is a djb2 hashing function
- var hash = function hash(x) {
- return phash(SEED, x);
- };
- //
- var generateComponentId = (function (str) {
- return generateAlphabeticName(hash(str) >>> 0);
- });
- //
- function getComponentName(target) {
- return (process.env.NODE_ENV !== 'production' ? typeof target === 'string' && target : false) || // $FlowFixMe
- target.displayName || // $FlowFixMe
- target.name || 'Component';
- }
- //
- function isFunction(test) {
- return typeof test === 'function';
- }
- //
- function isStatelessFunction(test) {
- return typeof test === 'function' && !(test.prototype && test.prototype.isReactComponent);
- }
- //
- var isPlainObject = (function (x) {
- return typeof x === 'object' && x.constructor === Object;
- });
- //
- function isStyledComponent(target) {
- return target && typeof target.styledComponentId === 'string';
- }
- 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 _extends() {
- _extends = Object.assign || function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- return _extends.apply(this, arguments);
- }
- function _inheritsLoose(subClass, superClass) {
- subClass.prototype = Object.create(superClass.prototype);
- subClass.prototype.constructor = subClass;
- subClass.__proto__ = superClass;
- }
- function _objectWithoutPropertiesLoose(source, excluded) {
- if (source == null) return {};
- var target = {};
- var sourceKeys = Object.keys(source);
- var key, i;
- for (i = 0; i < sourceKeys.length; i++) {
- key = sourceKeys[i];
- if (excluded.indexOf(key) >= 0) continue;
- target[key] = source[key];
- }
- return target;
- }
- //
- var SC_ATTR = typeof process !== 'undefined' && (process.env.REACT_APP_SC_ATTR || process.env.SC_ATTR) || 'data-styled';
- var SC_ATTR_ACTIVE = 'active';
- var SC_ATTR_VERSION = 'data-styled-version';
- var SC_VERSION = "5.0.1";
- var IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;
- var DISABLE_SPEEDY = typeof SC_DISABLE_SPEEDY === 'boolean' && SC_DISABLE_SPEEDY || typeof process !== 'undefined' && (process.env.REACT_APP_SC_DISABLE_SPEEDY || process.env.SC_DISABLE_SPEEDY) || process.env.NODE_ENV !== 'production'; // Shared empty execution context when generating static styles
- //
- /* eslint-disable camelcase, no-undef */
- var getNonce = function getNonce() {
- return typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;
- };
- var errorMap = {
- "1": "Cannot create styled-component for component: %s.\n\n",
- "2": "Can't collect styles once you've consumed a `ServerStyleSheet`'s styles! `ServerStyleSheet` is a one off instance for each server-side render cycle.\n\n- Are you trying to reuse it across renders?\n- Are you accidentally calling collectStyles twice?\n\n",
- "3": "Streaming SSR is only supported in a Node.js environment; Please do not try to call this method in the browser.\n\n",
- "4": "The `StyleSheetManager` expects a valid target or sheet prop!\n\n- Does this error occur on the client and is your target falsy?\n- Does this error occur on the server and is the sheet falsy?\n\n",
- "5": "The clone method cannot be used on the client!\n\n- Are you running in a client-like environment on the server?\n- Are you trying to run SSR on the client?\n\n",
- "6": "Trying to insert a new style tag, but the given Node is unmounted!\n\n- Are you using a custom target that isn't mounted?\n- Does your document not have a valid head element?\n- Have you accidentally removed a style tag manually?\n\n",
- "7": "ThemeProvider: Please return an object from your \"theme\" prop function, e.g.\n\n```js\ntheme={() => ({})}\n```\n\n",
- "8": "ThemeProvider: Please make your \"theme\" prop an object.\n\n",
- "9": "Missing document `<head>`\n\n",
- "10": "Cannot find a StyleSheet instance. Usually this happens if there are multiple copies of styled-components loaded at once. Check out this issue for how to troubleshoot and fix the common cases where this situation can happen: https://github.com/styled-components/styled-components/issues/1941#issuecomment-417862021\n\n",
- "11": "_This error was replaced with a dev-time warning, it will be deleted for v4 final._ [createGlobalStyle] received children which will not be rendered. Please use the component without passing children elements.\n\n",
- "12": "It seems you are interpolating a keyframe declaration (%s) into an untagged string. This was supported in styled-components v3, but is not longer supported in v4 as keyframes are now injected on-demand. Please wrap your string in the css\\`\\` helper which ensures the styles are injected correctly. See https://www.styled-components.com/docs/api#css\n\n",
- "13": "%s is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.\n\n",
- "14": "ThemeProvider: \"theme\" prop is required.\n\n",
- "15": "A stylis plugin has been supplied that is not named. We need a name for each plugin to be able to prevent styling collisions between different stylis configurations within the same app. Before you pass your plugin to `<StyleSheetManager stylisPlugins={[]}>`, please make sure each plugin is uniquely-named, e.g.\n\n```js\nObject.defineProperty(importedPlugin, 'name', { value: 'some-unique-name' });\n```\n\n",
- "16": "Reached the limit of how many styled components may be created at group %s.\nYou may only create up to 1,073,741,824 components. If you're creating components dynamically,\nas for instance in your render method then you may be running into this limitation.\n\n",
- "17": "CSSStyleSheet could not be found on HTMLStyleElement.\nHas styled-components' style tag been unmounted or altered by another script?\n"
- };
- //
- var ERRORS = process.env.NODE_ENV !== 'production' ? errorMap : {};
- /**
- * super basic version of sprintf
- */
- function format() {
- var a = arguments.length <= 0 ? undefined : arguments[0];
- var b = [];
- for (var c = 1, len = arguments.length; c < len; c += 1) {
- b.push(c < 0 || arguments.length <= c ? undefined : arguments[c]);
- }
- b.forEach(function (d) {
- a = a.replace(/%[a-z]/, d);
- });
- return a;
- }
- /**
- * Create an error file out of errors.md for development and a simple web link to the full errors
- * in production mode.
- */
- function throwStyledComponentsError(code) {
- for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- interpolations[_key - 1] = arguments[_key];
- }
- if (process.env.NODE_ENV === 'production') {
- throw new Error("An error occurred. See https://github.com/styled-components/styled-components/blob/master/packages/styled-components/src/utils/errors.md#" + code + " for more information." + (interpolations.length > 0 ? " Additional arguments: " + interpolations.join(', ') : ''));
- } else {
- throw new Error(format.apply(void 0, [ERRORS[code]].concat(interpolations)).trim());
- }
- }
- //
- var ELEMENT_TYPE = 1;
- /* Node.ELEMENT_TYPE */
- /** Find last style element if any inside target */
- var findLastStyleTag = function findLastStyleTag(target) {
- var childNodes = target.childNodes;
- for (var i = childNodes.length; i >= 0; i--) {
- var child = childNodes[i];
- if (child && child.nodeType === ELEMENT_TYPE && child.hasAttribute(SC_ATTR)) {
- return child;
- }
- }
- return undefined;
- };
- /** Create a style element inside `target` or <head> after the last */
- var makeStyleTag = function makeStyleTag(target) {
- var head = document.head;
- var parent = target || head;
- var style = document.createElement('style');
- var prevStyle = findLastStyleTag(parent);
- var nextSibling = prevStyle !== undefined ? prevStyle.nextSibling : null;
- style.setAttribute(SC_ATTR, SC_ATTR_ACTIVE);
- style.setAttribute(SC_ATTR_VERSION, SC_VERSION);
- var nonce = getNonce();
- if (nonce) style.setAttribute('nonce', nonce);
- parent.insertBefore(style, nextSibling);
- return style;
- };
- /** Get the CSSStyleSheet instance for a given style element */
- var getSheet = function getSheet(tag) {
- if (tag.sheet) {
- return tag.sheet;
- } // Avoid Firefox quirk where the style element might not have a sheet property
- var _document = document,
- styleSheets = _document.styleSheets;
- for (var i = 0, l = styleSheets.length; i < l; i++) {
- var sheet = styleSheets[i];
- if (sheet.ownerNode === tag) {
- return sheet;
- }
- }
- throwStyledComponentsError(17);
- return undefined;
- };
- //
- /** Create a CSSStyleSheet-like tag depending on the environment */
- var makeTag = function makeTag(_ref) {
- var isServer = _ref.isServer,
- useCSSOMInjection = _ref.useCSSOMInjection,
- target = _ref.target;
- if (isServer) {
- return new VirtualTag(target);
- } else if (useCSSOMInjection) {
- return new CSSOMTag(target);
- } else {
- return new TextTag(target);
- }
- };
- var CSSOMTag =
- /*#__PURE__*/
- function () {
- function CSSOMTag(target) {
- var element = this.element = makeStyleTag(target); // Avoid Edge bug where empty style elements don't create sheets
- element.appendChild(document.createTextNode(''));
- this.sheet = getSheet(element);
- this.length = 0;
- }
- var _proto = CSSOMTag.prototype;
- _proto.insertRule = function insertRule(index, rule) {
- try {
- this.sheet.insertRule(rule, index);
- this.length++;
- return true;
- } catch (_error) {
- return false;
- }
- };
- _proto.deleteRule = function deleteRule(index) {
- this.sheet.deleteRule(index);
- this.length--;
- };
- _proto.getRule = function getRule(index) {
- var rule = this.sheet.cssRules[index]; // Avoid IE11 quirk where cssText is inaccessible on some invalid rules
- if (rule !== undefined && typeof rule.cssText === 'string') {
- return rule.cssText;
- } else {
- return '';
- }
- };
- return CSSOMTag;
- }();
- /** A Tag that emulates the CSSStyleSheet API but uses text nodes */
- var TextTag =
- /*#__PURE__*/
- function () {
- function TextTag(target) {
- var element = this.element = makeStyleTag(target);
- this.nodes = element.childNodes;
- this.length = 0;
- }
- var _proto2 = TextTag.prototype;
- _proto2.insertRule = function insertRule(index, rule) {
- if (index <= this.length && index >= 0) {
- var node = document.createTextNode(rule);
- var refNode = this.nodes[index];
- this.element.insertBefore(node, refNode || null);
- this.length++;
- return true;
- } else {
- return false;
- }
- };
- _proto2.deleteRule = function deleteRule(index) {
- this.element.removeChild(this.nodes[index]);
- this.length--;
- };
- _proto2.getRule = function getRule(index) {
- if (index < this.length) {
- return this.nodes[index].textContent;
- } else {
- return '';
- }
- };
- return TextTag;
- }();
- /** A completely virtual (server-side) Tag that doesn't manipulate the DOM */
- var VirtualTag =
- /*#__PURE__*/
- function () {
- function VirtualTag(_target) {
- this.rules = [];
- this.length = 0;
- }
- var _proto3 = VirtualTag.prototype;
- _proto3.insertRule = function insertRule(index, rule) {
- if (index <= this.length) {
- this.rules.splice(index, 0, rule);
- this.length++;
- return true;
- } else {
- return false;
- }
- };
- _proto3.deleteRule = function deleteRule(index) {
- this.rules.splice(index, 1);
- this.length--;
- };
- _proto3.getRule = function getRule(index) {
- if (index < this.length) {
- return this.rules[index];
- } else {
- return '';
- }
- };
- return VirtualTag;
- }();
- //
- /** Create a GroupedTag with an underlying Tag implementation */
- var makeGroupedTag = function makeGroupedTag(tag) {
- return new DefaultGroupedTag(tag);
- };
- var BASE_SIZE = 1 << 9;
- var DefaultGroupedTag =
- /*#__PURE__*/
- function () {
- function DefaultGroupedTag(tag) {
- this.groupSizes = new Uint32Array(BASE_SIZE);
- this.length = BASE_SIZE;
- this.tag = tag;
- }
- var _proto = DefaultGroupedTag.prototype;
- _proto.indexOfGroup = function indexOfGroup(group) {
- var index = 0;
- for (var i = 0; i < group; i++) {
- index += this.groupSizes[i];
- }
- return index;
- };
- _proto.insertRules = function insertRules(group, rules) {
- if (group >= this.groupSizes.length) {
- var oldBuffer = this.groupSizes;
- var oldSize = oldBuffer.length;
- var newSize = oldSize;
- while (group >= newSize) {
- newSize <<= 1;
- if (newSize < 0) {
- throwStyledComponentsError(16, "" + group);
- }
- }
- this.groupSizes = new Uint32Array(newSize);
- this.groupSizes.set(oldBuffer);
- this.length = newSize;
- for (var i = oldSize; i < newSize; i++) {
- this.groupSizes[i] = 0;
- }
- }
- var ruleIndex = this.indexOfGroup(group + 1);
- for (var _i = 0, l = rules.length; _i < l; _i++) {
- if (this.tag.insertRule(ruleIndex, rules[_i])) {
- this.groupSizes[group]++;
- ruleIndex++;
- }
- }
- };
- _proto.clearGroup = function clearGroup(group) {
- if (group < this.length) {
- var length = this.groupSizes[group];
- var startIndex = this.indexOfGroup(group);
- var endIndex = startIndex + length;
- this.groupSizes[group] = 0;
- for (var i = startIndex; i < endIndex; i++) {
- this.tag.deleteRule(startIndex);
- }
- }
- };
- _proto.getGroup = function getGroup(group) {
- var css = '';
- if (group >= this.length || this.groupSizes[group] === 0) {
- return css;
- }
- var length = this.groupSizes[group];
- var startIndex = this.indexOfGroup(group);
- var endIndex = startIndex + length;
- for (var i = startIndex; i < endIndex; i++) {
- css += this.tag.getRule(i) + "\n";
- }
- return css;
- };
- return DefaultGroupedTag;
- }();
- //
- var MAX_SMI = 1 << 31 - 1;
- var groupIDRegister = new Map();
- var reverseRegister = new Map();
- var nextFreeGroup = 1;
- var getGroupForId = function getGroupForId(id) {
- if (groupIDRegister.has(id)) {
- return groupIDRegister.get(id);
- }
- var group = nextFreeGroup++;
- if (process.env.NODE_ENV !== 'production' && ((group | 0) < 0 || group > MAX_SMI)) {
- throwStyledComponentsError(16, "" + group);
- }
- groupIDRegister.set(id, group);
- reverseRegister.set(group, id);
- return group;
- };
- var getIdForGroup = function getIdForGroup(group) {
- return reverseRegister.get(group);
- };
- var setGroupForId = function setGroupForId(id, group) {
- if (group >= nextFreeGroup) {
- nextFreeGroup = group + 1;
- }
- groupIDRegister.set(id, group);
- reverseRegister.set(group, id);
- };
- //
- var SELECTOR = "style[" + SC_ATTR + "][" + SC_ATTR_VERSION + "=\"" + SC_VERSION + "\"]";
- var RULE_RE = /(?:\s*)?(.*?){((?:{[^}]*}|(?!{).*?)*)}/g;
- var MARKER_RE = new RegExp("^" + SC_ATTR + "\\.g(\\d+)\\[id=\"([\\w\\d-]+)\"\\]");
- var outputSheet = function outputSheet(sheet) {
- var tag = sheet.getTag();
- var length = tag.length;
- var css = '';
- for (var group = 0; group < length; group++) {
- var id = getIdForGroup(group);
- if (id === undefined) continue;
- var names = sheet.names.get(id);
- var rules = tag.getGroup(group);
- if (names === undefined || rules.length === 0) continue;
- var selector = SC_ATTR + ".g" + group + "[id=\"" + id + "\"]";
- var content = '';
- if (names !== undefined) {
- names.forEach(function (name) {
- if (name.length > 0) {
- content += name + ",";
- }
- });
- } // NOTE: It's easier to collect rules and have the marker
- // after the actual rules to simplify the rehydration
- css += "" + rules + selector + "{content:\"" + content + "\"}\n";
- }
- return css;
- };
- var rehydrateNamesFromContent = function rehydrateNamesFromContent(sheet, id, content) {
- var names = content.split(',');
- var name;
- for (var i = 0, l = names.length; i < l; i++) {
- // eslint-disable-next-line
- if (name = names[i]) {
- sheet.registerName(id, name);
- }
- }
- };
- var rehydrateSheetFromTag = function rehydrateSheetFromTag(sheet, style) {
- var rawHTML = style.innerHTML;
- var rules = [];
- var parts; // parts = [match, selector, content]
- // eslint-disable-next-line no-cond-assign
- while (parts = RULE_RE.exec(rawHTML)) {
- var marker = parts[1].match(MARKER_RE);
- if (marker) {
- var group = parseInt(marker[1], 10) | 0;
- var id = marker[2];
- if (group !== 0) {
- // Rehydrate componentId to group index mapping
- setGroupForId(id, group); // Rehydrate names and rules
- // looks like: data-styled.g11[id="idA"]{content:"nameA,"}
- rehydrateNamesFromContent(sheet, id, parts[2].split('"')[1]);
- sheet.getTag().insertRules(group, rules);
- }
- rules.length = 0;
- } else {
- rules.push(parts[0].trim());
- }
- }
- };
- var rehydrateSheet = function rehydrateSheet(sheet) {
- var nodes = document.querySelectorAll(SELECTOR);
- for (var i = 0, l = nodes.length; i < l; i++) {
- var node = nodes[i];
- if (node && node.getAttribute(SC_ATTR) !== SC_ATTR_ACTIVE) {
- rehydrateSheetFromTag(sheet, node);
- if (node.parentNode) {
- node.parentNode.removeChild(node);
- }
- }
- }
- };
- var SHOULD_REHYDRATE = IS_BROWSER;
- var defaultOptions = {
- isServer: !IS_BROWSER,
- useCSSOMInjection: !DISABLE_SPEEDY
- };
- /** Contains the main stylesheet logic for stringification and caching */
- var StyleSheet =
- /*#__PURE__*/
- function () {
- /** Register a group ID to give it an index */
- StyleSheet.registerId = function registerId(id) {
- return getGroupForId(id);
- };
- function StyleSheet(options, globalStyles, names) {
- if (options === void 0) {
- options = defaultOptions;
- }
- if (globalStyles === void 0) {
- globalStyles = {};
- }
- this.options = _extends({}, defaultOptions, {}, options);
- this.gs = globalStyles;
- this.names = new Map(names); // We rehydrate only once and use the sheet that is created first
- if (!this.options.isServer && IS_BROWSER && SHOULD_REHYDRATE) {
- SHOULD_REHYDRATE = false;
- rehydrateSheet(this);
- }
- }
- var _proto = StyleSheet.prototype;
- _proto.reconstructWithOptions = function reconstructWithOptions(options) {
- return new StyleSheet(_extends({}, this.options, {}, options), this.gs, this.names);
- };
- _proto.allocateGSInstance = function allocateGSInstance(id) {
- return this.gs[id] = (this.gs[id] || 0) + 1;
- }
- /** Lazily initialises a GroupedTag for when it's actually needed */
- ;
- _proto.getTag = function getTag() {
- return this.tag || (this.tag = makeGroupedTag(makeTag(this.options)));
- }
- /** Check whether a name is known for caching */
- ;
- _proto.hasNameForId = function hasNameForId(id, name) {
- return this.names.has(id) && this.names.get(id).has(name);
- }
- /** Mark a group's name as known for caching */
- ;
- _proto.registerName = function registerName(id, name) {
- getGroupForId(id);
- if (!this.names.has(id)) {
- var groupNames = new Set();
- groupNames.add(name);
- this.names.set(id, groupNames);
- } else {
- this.names.get(id).add(name);
- }
- }
- /** Insert new rules which also marks the name as known */
- ;
- _proto.insertRules = function insertRules(id, name, rules) {
- this.registerName(id, name);
- this.getTag().insertRules(getGroupForId(id), rules);
- }
- /** Clears all cached names for a given group ID */
- ;
- _proto.clearNames = function clearNames(id) {
- if (this.names.has(id)) {
- this.names.get(id).clear();
- }
- }
- /** Clears all rules for a given group ID */
- ;
- _proto.clearRules = function clearRules(id) {
- this.getTag().clearGroup(getGroupForId(id));
- this.clearNames(id);
- }
- /** Clears the entire tag which deletes all rules but not its names */
- ;
- _proto.clearTag = function clearTag() {
- // NOTE: This does not clear the names, since it's only used during SSR
- // so that we can continuously output only new rules
- this.tag = undefined;
- }
- /** Outputs the current sheet as a CSS string with markers for SSR */
- ;
- _proto.toString = function toString() {
- return outputSheet(this);
- };
- return StyleSheet;
- }();
- //
- var EMPTY_ARRAY = Object.freeze([]);
- var EMPTY_OBJECT = Object.freeze({});
- /**
- * MIT License
- *
- * Copyright (c) 2016 Sultan Tarimo
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
- * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- */
- /* eslint-disable */
- function insertRulePlugin (insertRule) {
- var delimiter = '/*|*/';
- var needle = delimiter + "}";
- function toSheet(block) {
- if (block) {
- try {
- insertRule(block + "}");
- } catch (e) {}
- }
- }
- return function ruleSheet(context, content, selectors, parents, line, column, length, ns, depth, at) {
- switch (context) {
- // property
- case 1:
- // @import
- if (depth === 0 && content.charCodeAt(0) === 64) return insertRule(content + ";"), '';
- break;
- // selector
- case 2:
- if (ns === 0) return content + delimiter;
- break;
- // at-rule
- case 3:
- switch (ns) {
- // @font-face, @page
- case 102:
- case 112:
- return insertRule(selectors[0] + content), '';
- default:
- return content + (at === 0 ? delimiter : '');
- }
- case -2:
- content.split(needle).forEach(toSheet);
- }
- };
- }
- var COMMENT_REGEX = /^\s*\/\/.*$/gm;
- function createStylisInstance(_temp) {
- var _ref = _temp === void 0 ? EMPTY_OBJECT : _temp,
- _ref$options = _ref.options,
- options = _ref$options === void 0 ? EMPTY_OBJECT : _ref$options,
- _ref$plugins = _ref.plugins,
- plugins = _ref$plugins === void 0 ? EMPTY_ARRAY : _ref$plugins;
- var stylis = new Stylis(options); // Wrap `insertRulePlugin to build a list of rules,
- // and then make our own plugin to return the rules. This
- // makes it easier to hook into the existing SSR architecture
- var parsingRules = []; // eslint-disable-next-line consistent-return
- var returnRulesPlugin = function returnRulesPlugin(context) {
- if (context === -2) {
- var parsedRules = parsingRules;
- parsingRules = [];
- return parsedRules;
- }
- };
- var parseRulesPlugin = insertRulePlugin(function (rule) {
- parsingRules.push(rule);
- });
- var _componentId;
- var _selector;
- var _selectorRegexp;
- var selfReferenceReplacer = function selfReferenceReplacer(match, offset, string) {
- if ( // the first self-ref is always untouched
- offset > 0 && // there should be at least two self-refs to do a replacement (.b > .b)
- string.slice(0, offset).indexOf(_selector) !== -1 && // no consecutive self refs (.b.b); that is a precedence boost and treated differently
- string.slice(offset - _selector.length, offset) !== _selector) {
- return "." + _componentId;
- }
- return match;
- };
- /**
- * When writing a style like
- *
- * & + & {
- * color: red;
- * }
- *
- * The second ampersand should be a reference to the static component class. stylis
- * has no knowledge of static class so we have to intelligently replace the base selector.
- *
- * https://github.com/thysultan/stylis.js#plugins <- more info about the context phase values
- * "2" means this plugin is taking effect at the very end after all other processing is complete
- */
- var selfReferenceReplacementPlugin = function selfReferenceReplacementPlugin(context, _, selectors) {
- if (context === 2 && selectors.length && selectors[0].lastIndexOf(_selector) > 0) {
- // eslint-disable-next-line no-param-reassign
- selectors[0] = selectors[0].replace(_selectorRegexp, selfReferenceReplacer);
- }
- };
- stylis.use([].concat(plugins, [selfReferenceReplacementPlugin, parseRulesPlugin, returnRulesPlugin]));
- function stringifyRules(css, selector, prefix, componentId) {
- if (componentId === void 0) {
- componentId = '&';
- }
- var flatCSS = css.replace(COMMENT_REGEX, '');
- var cssStr = selector && prefix ? prefix + " " + selector + " { " + flatCSS + " }" : flatCSS; // stylis has no concept of state to be passed to plugins
- // but since JS is single=threaded, we can rely on that to ensure
- // these properties stay in sync with the current stylis run
- _componentId = componentId;
- _selector = selector;
- _selectorRegexp = new RegExp("\\" + _selector + "\\b", 'g');
- return stylis(prefix || !selector ? '' : selector, cssStr);
- }
- stringifyRules.hash = plugins.length ? plugins.reduce(function (acc, plugin) {
- if (!plugin.name) {
- throwStyledComponentsError(15);
- }
- return phash(acc, plugin.name);
- }, SEED).toString() : '';
- return stringifyRules;
- }
- //
- var StyleSheetContext = React__default.createContext();
- var StyleSheetConsumer = StyleSheetContext.Consumer;
- var StylisContext = React__default.createContext();
- var StylisConsumer = StylisContext.Consumer;
- var masterSheet = new StyleSheet();
- var masterStylis = createStylisInstance();
- //
- var Keyframes =
- /*#__PURE__*/
- function () {
- function Keyframes(name, stringifyArgs) {
- var _this = this;
- this.inject = function (styleSheet) {
- if (!styleSheet.hasNameForId(_this.id, _this.name)) {
- styleSheet.insertRules(_this.id, _this.name, masterStylis.apply(void 0, _this.stringifyArgs));
- }
- };
- this.toString = function () {
- return throwStyledComponentsError(12, String(_this.name));
- };
- this.name = name;
- this.id = "sc-keyframes-" + name;
- this.stringifyArgs = stringifyArgs;
- }
- var _proto = Keyframes.prototype;
- _proto.getName = function getName() {
- return this.name;
- };
- return Keyframes;
- }();
- //
- /**
- * inlined version of
- * https://github.com/facebook/fbjs/blob/master/packages/fbjs/src/core/hyphenateStyleName.js
- */
- var uppercasePattern = /([A-Z])/g;
- var msPattern = /^ms-/;
- /**
- * Hyphenates a camelcased CSS property name, for example:
- *
- * > hyphenateStyleName('backgroundColor')
- * < "background-color"
- * > hyphenateStyleName('MozTransition')
- * < "-moz-transition"
- * > hyphenateStyleName('msTransition')
- * < "-ms-transition"
- *
- * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
- * is converted to `-ms-`.
- *
- * @param {string} string
- * @return {string}
- */
- function hyphenateStyleName(string) {
- return string.replace(uppercasePattern, '-$1').toLowerCase().replace(msPattern, '-ms-');
- }
- //
- function addUnitIfNeeded(name, value) {
- // https://github.com/amilajack/eslint-plugin-flowtype-errors/issues/133
- // $FlowFixMe
- if (value == null || typeof value === 'boolean' || value === '') {
- return '';
- }
- if (typeof value === 'number' && value !== 0 && !(name in unitless)) {
- return value + "px"; // Presumes implicit 'px' suffix for unitless numbers
- }
- return String(value).trim();
- }
- //
- /**
- * It's falsish not falsy because 0 is allowed.
- */
- var isFalsish = function isFalsish(chunk) {
- return chunk === undefined || chunk === null || chunk === false || chunk === '';
- };
- var objToCssArray = function objToCssArray(obj, prevKey) {
- var rules = [];
- var keys = Object.keys(obj);
- keys.forEach(function (key) {
- if (!isFalsish(obj[key])) {
- if (isPlainObject(obj[key])) {
- rules.push.apply(rules, objToCssArray(obj[key], key));
- return rules;
- } else if (isFunction(obj[key])) {
- rules.push(hyphenateStyleName(key) + ":", obj[key], ';');
- return rules;
- }
- rules.push(hyphenateStyleName(key) + ": " + addUnitIfNeeded(key, obj[key]) + ";");
- }
- return rules;
- });
- return prevKey ? [prevKey + " {"].concat(rules, ['}']) : rules;
- };
- function flatten(chunk, executionContext, styleSheet) {
- if (Array.isArray(chunk)) {
- var ruleSet = [];
- for (var i = 0, len = chunk.length, result; i < len; i += 1) {
- result = flatten(chunk[i], executionContext, styleSheet);
- if (result === '') continue;else if (Array.isArray(result)) ruleSet.push.apply(ruleSet, result);else ruleSet.push(result);
- }
- return ruleSet;
- }
- if (isFalsish(chunk)) {
- return '';
- }
- /* Handle other components */
- if (isStyledComponent(chunk)) {
- return "." + chunk.styledComponentId;
- }
- /* Either execute or defer the function */
- if (isFunction(chunk)) {
- if (isStatelessFunction(chunk) && executionContext) {
- var _result = chunk(executionContext);
- if (process.env.NODE_ENV !== 'production' && reactIs.isElement(_result)) {
- // eslint-disable-next-line no-console
- console.warn(getComponentName(chunk) + " is not a styled component and cannot be referred to via component selector. See https://www.styled-components.com/docs/advanced#referring-to-other-components for more details.");
- }
- return flatten(_result, executionContext, styleSheet);
- } else return chunk;
- }
- if (chunk instanceof Keyframes) {
- if (styleSheet) {
- chunk.inject(styleSheet);
- return chunk.getName();
- } else return chunk;
- }
- /* Handle objects */
- return isPlainObject(chunk) ? objToCssArray(chunk) : chunk.toString();
- }
- //
- var printed = {};
- function warnOnce(message) {
- if (printed[message]) return;
- printed[message] = true;
- if (typeof console !== 'undefined' && console.warn) console.warn(message);
- }
- //
- var SINGLE_QUOTE = "'".charCodeAt(0);
- var DOUBLE_QUOTE = '"'.charCodeAt(0);
- var BACKSLASH = '\\'.charCodeAt(0);
- var SLASH = '/'.charCodeAt(0);
- var NEWLINE = '\n'.charCodeAt(0);
- var SPACE = ' '.charCodeAt(0);
- var FEED = '\f'.charCodeAt(0);
- var TAB = '\t'.charCodeAt(0);
- var CR = '\r'.charCodeAt(0);
- var OPEN_SQUARE = '['.charCodeAt(0);
- var CLOSE_SQUARE = ']'.charCodeAt(0);
- var OPEN_PARENTHESES = '('.charCodeAt(0);
- var CLOSE_PARENTHESES = ')'.charCodeAt(0);
- var OPEN_CURLY = '{'.charCodeAt(0);
- var CLOSE_CURLY = '}'.charCodeAt(0);
- var SEMICOLON = ';'.charCodeAt(0);
- var ASTERISK = '*'.charCodeAt(0);
- var COLON = ':'.charCodeAt(0);
- var AT = '@'.charCodeAt(0);
- var RE_AT_END = /[ \n\t\r\f\{\(\)'"\\;/\[\]#]/g;
- var RE_WORD_END = /[ \n\t\r\f\(\)\{\}:;@!'"\\\]\[#]|\/(?=\*)/g;
- var RE_BAD_BRACKET = /.[\\\/\("'\n]/;
- function tokenize(input, options) {
- if (options === void 0) {
- options = {};
- }
- var tokens = [];
- var css = input.css.valueOf();
- var ignore = options.ignoreErrors;
- var code, next, quote, lines, last, content, escape, nextLine, nextOffset, escaped, escapePos, prev, n;
- var length = css.length;
- var offset = -1;
- var line = 1;
- var pos = 0;
- function unclosed(what) {
- throw input.error("Unclosed " + what, line, pos - offset);
- }
- while (pos < length) {
- code = css.charCodeAt(pos);
- if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {
- offset = pos;
- line += 1;
- }
- switch (code) {
- case NEWLINE:
- case SPACE:
- case TAB:
- case CR:
- case FEED:
- next = pos;
- do {
- next += 1;
- code = css.charCodeAt(next);
- if (code === NEWLINE) {
- offset = next;
- line += 1;
- }
- } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
- tokens.push(['space', css.slice(pos, next)]);
- pos = next - 1;
- break;
- case OPEN_SQUARE:
- tokens.push(['[', '[', line, pos - offset]);
- break;
- case CLOSE_SQUARE:
- tokens.push([']', ']', line, pos - offset]);
- break;
- case OPEN_CURLY:
- tokens.push(['{', '{', line, pos - offset]);
- break;
- case CLOSE_CURLY:
- tokens.push(['}', '}', line, pos - offset]);
- break;
- case COLON:
- tokens.push([':', ':', line, pos - offset]);
- break;
- case SEMICOLON:
- tokens.push([';', ';', line, pos - offset]);
- break;
- case OPEN_PARENTHESES:
- prev = tokens.length ? tokens[tokens.length - 1][1] : '';
- n = css.charCodeAt(pos + 1);
- if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
- next = pos;
- do {
- escaped = false;
- next = css.indexOf(')', next + 1);
- if (next === -1) {
- if (ignore) {
- next = pos;
- break;
- } else {
- unclosed('bracket');
- }
- }
- escapePos = next;
- while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
- escapePos -= 1;
- escaped = !escaped;
- }
- } while (escaped);
- tokens.push(['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- } else {
- next = css.indexOf(')', pos + 1);
- content = css.slice(pos, next + 1);
- if (next === -1 || RE_BAD_BRACKET.test(content)) {
- tokens.push(['(', '(', line, pos - offset]);
- } else {
- tokens.push(['brackets', content, line, pos - offset, line, next - offset]);
- pos = next;
- }
- }
- break;
- case CLOSE_PARENTHESES:
- tokens.push([')', ')', line, pos - offset]);
- break;
- case SINGLE_QUOTE:
- case DOUBLE_QUOTE:
- quote = code === SINGLE_QUOTE ? "'" : '"';
- next = pos;
- do {
- escaped = false;
- next = css.indexOf(quote, next + 1);
- if (next === -1) {
- if (ignore) {
- next = pos + 1;
- break;
- } else {
- unclosed('quote');
- }
- }
- escapePos = next;
- while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
- escapePos -= 1;
- escaped = !escaped;
- }
- } while (escaped);
- content = css.slice(pos, next + 1);
- lines = content.split('\n');
- last = lines.length - 1;
- if (last > 0) {
- nextLine = line + last;
- nextOffset = next - lines[last].length;
- } else {
- nextLine = line;
- nextOffset = offset;
- }
- tokens.push(['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset]);
- offset = nextOffset;
- line = nextLine;
- pos = next;
- break;
- case AT:
- RE_AT_END.lastIndex = pos + 1;
- RE_AT_END.test(css);
- if (RE_AT_END.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = RE_AT_END.lastIndex - 2;
- }
- tokens.push(['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
- case BACKSLASH:
- next = pos;
- escape = true;
- while (css.charCodeAt(next + 1) === BACKSLASH) {
- next += 1;
- escape = !escape;
- }
- code = css.charCodeAt(next + 1);
- if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
- next += 1;
- }
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- break;
- default:
- if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
- next = css.indexOf('*/', pos + 2) + 1;
- if (next === 0) {
- if (ignore) {
- next = css.length;
- } else {
- unclosed('comment');
- }
- }
- content = css.slice(pos, next + 1);
- lines = content.split('\n');
- last = lines.length - 1;
- if (last > 0) {
- nextLine = line + last;
- nextOffset = next - lines[last].length;
- } else {
- nextLine = line;
- nextOffset = offset;
- }
- tokens.push(['comment', content, line, pos - offset, nextLine, next - nextOffset]);
- offset = nextOffset;
- line = nextLine;
- pos = next;
- } else {
- RE_WORD_END.lastIndex = pos + 1;
- RE_WORD_END.test(css);
- if (RE_WORD_END.lastIndex === 0) {
- next = css.length - 1;
- } else {
- next = RE_WORD_END.lastIndex - 2;
- }
- tokens.push(['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset]);
- pos = next;
- }
- break;
- }
- pos++;
- }
- return tokens;
- }
- //
- var HIGHLIGHT_THEME = {
- brackets: [36, 39],
- // cyan
- string: [31, 39],
- // red
- 'at-word': [31, 39],
- // red
- comment: [90, 39],
- // gray
- '{': [32, 39],
- // green
- '}': [32, 39],
- // green
- ':': [1, 22],
- // bold
- ';': [1, 22],
- // bold
- '(': [1, 22],
- // bold
- ')': [1, 22] // bold
- };
- function code(color) {
- return "\x1B[" + color + "m";
- }
- function terminalHighlight(css) {
- var tokens = tokenize(new Input(css), {
- ignoreErrors: true
- });
- var result = [];
- tokens.forEach(function (token) {
- var color = HIGHLIGHT_THEME[token[0]];
- if (color) {
- result.push(token[1].split(/\r?\n/).map(function (i) {
- return code(color[0]) + i + code(color[1]);
- }).join('\n'));
- } else {
- result.push(token[1]);
- }
- });
- return result.join('');
- }
- /**
- * The CSS parser throws this error for broken CSS.
- *
- * Custom parsers can throw this error for broken custom syntax using
- * the {@link Node#error} method.
- *
- * PostCSS will use the input source map to detect the original error location.
- * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,
- * PostCSS will show the original position in the Sass file.
- *
- * If you need the position in the PostCSS input
- * (e.g., to debug the previous compiler), use `error.input.file`.
- *
- * @example
- * // Catching and checking syntax error
- * try {
- * postcss.parse('a{')
- * } catch (error) {
- * if ( error.name === 'CssSyntaxError' ) {
- * error //=> CssSyntaxError
- * }
- * }
- *
- * @example
- * // Raising error from plugin
- * throw node.error('Unknown variable', { plugin: 'postcss-vars' });
- */
- var CssSyntaxError =
- /*#__PURE__*/
- function () {
- /**
- * @param {string} message - error message
- * @param {number} [line] - source line of the error
- * @param {number} [column] - source column of the error
- * @param {string} [source] - source code of the broken file
- * @param {string} [file] - absolute path to the broken file
- * @param {string} [plugin] - PostCSS plugin name, if error came from plugin
- */
- function CssSyntaxError(message, line, column, source, file, plugin) {
- /**
- * @member {string} - Always equal to `'CssSyntaxError'`. You should
- * always check error type
- * by `error.name === 'CssSyntaxError'` instead of
- * `error instanceof CssSyntaxError`, because
- * npm could have several PostCSS versions.
- *
- * @example
- * if ( error.name === 'CssSyntaxError' ) {
- * error //=> CssSyntaxError
- * }
- */
- this.name = 'CssSyntaxError';
- /**
- * @member {string} - Error message.
- *
- * @example
- * error.message //=> 'Unclosed block'
- */
- this.reason = message;
- if (file) {
- /**
- * @member {string} - Absolute path to the broken file.
- *
- * @example
- * error.file //=> 'a.sass'
- * error.input.file //=> 'a.css'
- */
- this.file = file;
- }
- if (source) {
- /**
- * @member {string} - Source code of the broken file.
- *
- * @example
- * error.source //=> 'a { b {} }'
- * error.input.column //=> 'a b { }'
- */
- this.source = source;
- }
- if (plugin) {
- /**
- * @member {string} - Plugin name, if error came from plugin.
- *
- * @example
- * error.plugin //=> 'postcss-vars'
- */
- this.plugin = plugin;
- }
- if (typeof line !== 'undefined' && typeof column !== 'undefined') {
- /**
- * @member {number} - Source line of the error.
- *
- * @example
- * error.line //=> 2
- * error.input.line //=> 4
- */
- this.line = line;
- /**
- * @member {number} - Source column of the error.
- *
- * @example
- * error.column //=> 1
- * error.input.column //=> 4
- */
- this.column = column;
- }
- this.setMessage();
- if (Error.captureStackTrace) {
- Error.captureStackTrace(this, CssSyntaxError);
- }
- }
- var _proto = CssSyntaxError.prototype;
- _proto.setMessage = function setMessage() {
- /**
- * @member {string} - Full error text in the GNU error format
- * with plugin, file, line and column.
- *
- * @example
- * error.message //=> 'a.css:1:1: Unclosed block'
- */
- this.message = this.plugin ? this.plugin + ": " : '';
- this.message += this.file ? this.file : '<css input>';
- if (typeof this.line !== 'undefined') {
- this.message += ":" + this.line + ":" + this.column;
- }
- this.message += ": " + this.reason;
- }
- /**
- * Returns a few lines of CSS source that caused the error.
- *
- * If the CSS has an input source map without `sourceContent`,
- * this method will return an empty string.
- *
- * @param {boolean} [color] whether arrow will be colored red by terminal
- * color codes. By default, PostCSS will detect
- * color support by `process.stdout.isTTY`
- * and `process.env.NODE_DISABLE_COLORS`.
- *
- * @example
- * error.showSourceCode() //=> " 4 | }
- * // 5 | a {
- * // > 6 | bad
- * // | ^
- * // 7 | }
- * // 8 | b {"
- *
- * @return {string} few lines of CSS source that caused the error
- */
- ;
- _proto.showSourceCode = function showSourceCode(color) {
- var _this = this;
- if (!this.source) return '';
- var css = this.source;
- if (typeof color === 'undefined') color = supportsColor;
- if (color) css = terminalHighlight(css);
- var lines = css.split(/\r?\n/);
- var start = Math.max(this.line - 3, 0);
- var end = Math.min(this.line + 2, lines.length);
- var maxWidth = String(end).length;
- return lines.slice(start, end).map(function (line, index) {
- var number = start + 1 + index;
- var padded = (" " + number).slice(-maxWidth);
- var gutter = " " + padded + " | ";
- if (number === _this.line) {
- var spacing = gutter.replace(/\d/g, ' ') + line.slice(0, _this.column - 1).replace(/[^\t]/g, ' ');
- return ">" + gutter + line + "\n " + spacing + "^";
- } else {
- return " " + gutter + line;
- }
- }).join('\n');
- }
- /**
- * Returns error position, message and source code of the broken part.
- *
- * @example
- * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block
- * // > 1 | a {
- * // | ^"
- *
- * @return {string} error position, message and source code
- */
- ;
- _proto.toString = function toString() {
- var code = this.showSourceCode();
- if (code) {
- code = "\n\n" + code + "\n";
- }
- return this.name + ": " + this.message + code;
- };
- _createClass(CssSyntaxError, [{
- key: "generated",
- get: function get() {
- warnOnce('CssSyntaxError#generated is deprecated. Use input instead.');
- return this.input;
- }
- /**
- * @memberof CssSyntaxError#
- * @member {Input} input - Input object with PostCSS internal information
- * about input file. If input has source map
- * from previous tool, PostCSS will use origin
- * (for example, Sass) source. You can use this
- * object to get PostCSS input source.
- *
- * @example
- * error.input.file //=> 'a.css'
- * error.file //=> 'a.sass'
- */
- }]);
- return CssSyntaxError;
- }();
- //
- /* eslint-disable valid-jsdoc */
- var defaultRaw = {
- colon: ': ',
- indent: ' ',
- beforeDecl: '\n',
- beforeRule: '\n',
- beforeOpen: ' ',
- beforeClose: '\n',
- beforeComment: '\n',
- after: '\n',
- emptyBody: '',
- commentLeft: ' ',
- commentRight: ' '
- };
- function capitalize(str) {
- return str[0].toUpperCase() + str.slice(1);
- }
- var Stringifier =
- /*#__PURE__*/
- function () {
- function Stringifier(builder) {
- this.builder = builder;
- }
- var _proto = Stringifier.prototype;
- _proto.stringify = function stringify(node, semicolon) {
- this[node.type](node, semicolon);
- };
- _proto.root = function root(node) {
- this.body(node);
- if (node.raws.after) this.builder(node.raws.after);
- };
- _proto.comment = function comment(node) {
- var left = this.raw(node, 'left', 'commentLeft');
- var right = this.raw(node, 'right', 'commentRight');
- this.builder("/*" + left + node.text + right + "*/", node);
- };
- _proto.decl = function decl(node, semicolon) {
- var between = this.raw(node, 'between', 'colon');
- var string = node.prop + between + this.rawValue(node, 'value');
- if (node.important) {
- string += node.raws.important || ' !important';
- }
- if (semicolon) string += ';';
- this.builder(string, node);
- };
- _proto.rule = function rule(node) {
- this.block(node, this.rawValue(node, 'selector'));
- };
- _proto.atrule = function atrule(node, semicolon) {
- var name = "@" + node.name;
- var params = node.params ? this.rawValue(node, 'params') : '';
- if (typeof node.raws.afterName !== 'undefined') {
- name += node.raws.afterName;
- } else if (params) {
- name += ' ';
- }
- if (node.nodes) {
- this.block(node, name + params);
- } else {
- var end = (node.raws.between || '') + (semicolon ? ';' : '');
- this.builder(name + params + end, node);
- }
- };
- _proto.body = function body(node) {
- var last = node.nodes.length - 1;
- while (last > 0) {
- if (node.nodes[last].type !== 'comment') break;
- last -= 1;
- }
- var semicolon = this.raw(node, 'semicolon');
- for (var i = 0; i < node.nodes.length; i++) {
- var child = node.nodes[i];
- var before = this.raw(child, 'before');
- if (before) this.builder(before);
- this.stringify(child, last !== i || semicolon);
- }
- };
- _proto.block = function block(node, start) {
- var between = this.raw(node, 'between', 'beforeOpen');
- this.builder(start + between + "{", node, 'start');
- var after;
- if (node.nodes && node.nodes.length) {
- this.body(node);
- after = this.raw(node, 'after');
- } else {
- after = this.raw(node, 'after', 'emptyBody');
- }
- if (after) this.builder(after);
- this.builder('}', node, 'end');
- };
- _proto.raw = function raw(node, own, detect) {
- var value;
- if (!detect) detect = own; // Already had
- if (own) {
- value = node.raws[own];
- if (typeof value !== 'undefined') return value;
- }
- var parent = node.parent; // Hack for first rule in CSS
- if (detect === 'before') {
- if (!parent || parent.type === 'root' && parent.first === node) {
- return '';
- }
- } // Floating child without parent
- if (!parent) return defaultRaw[detect]; // Detect style by other nodes
- var root = node.root();
- if (!root.rawCache) root.rawCache = {};
- if (typeof root.rawCache[detect] !== 'undefined') {
- return root.rawCache[detect];
- }
- if (detect === 'before' || detect === 'after') {
- return this.beforeAfter(node, detect);
- } else {
- var method = "raw" + capitalize(detect);
- if (this[method]) {
- value = this[method](root, node);
- } else {
- root.walk(function (i) {
- value = i.raws[own];
- if (typeof value !== 'undefined') return false;
- });
- }
- }
- if (typeof value === 'undefined') value = defaultRaw[detect];
- root.rawCache[detect] = value;
- return value;
- };
- _proto.rawSemicolon = function rawSemicolon(root) {
- var value;
- root.walk(function (i) {
- if (i.nodes && i.nodes.length && i.last.type === 'decl') {
- value = i.raws.semicolon;
- if (typeof value !== 'undefined') return false;
- }
- });
- return value;
- };
- _proto.rawEmptyBody = function rawEmptyBody(root) {
- var value;
- root.walk(function (i) {
- if (i.nodes && i.nodes.length === 0) {
- value = i.raws.after;
- if (typeof value !== 'undefined') return false;
- }
- });
- return value;
- };
- _proto.rawIndent = function rawIndent(root) {
- if (root.raws.indent) return root.raws.indent;
- var value;
- root.walk(function (i) {
- var p = i.parent;
- if (p && p !== root && p.parent && p.parent === root) {
- if (typeof i.raws.before !== 'undefined') {
- var parts = i.raws.before.split('\n');
- value = parts[parts.length - 1];
- value = value.replace(/[^\s]/g, '');
- return false;
- }
- }
- });
- return value;
- };
- _proto.rawBeforeComment = function rawBeforeComment(root, node) {
- var value;
- root.walkComments(function (i) {
- if (typeof i.raws.before !== 'undefined') {
- value = i.raws.before;
- if (value.indexOf('\n') !== -1) {
- value = value.replace(/[^\n]+$/, '');
- }
- return false;
- }
- });
- if (typeof value === 'undefined') {
- value = this.raw(node, null, 'beforeDecl');
- }
- return value;
- };
- _proto.rawBeforeDecl = function rawBeforeDecl(root, node) {
- var value;
- root.walkDecls(function (i) {
- if (typeof i.raws.before !== 'undefined') {
- value = i.raws.before;
- if (value.indexOf('\n') !== -1) {
- value = value.replace(/[^\n]+$/, '');
- }
- return false;
- }
- });
- if (typeof value === 'undefined') {
- value = this.raw(node, null, 'beforeRule');
- }
- return value;
- };
- _proto.rawBeforeRule = function rawBeforeRule(root) {
- var value;
- root.walk(function (i) {
- if (i.nodes && (i.parent !== root || root.first !== i)) {
- if (typeof i.raws.before !== 'undefined') {
- value = i.raws.before;
- if (value.indexOf('\n') !== -1) {
- value = value.replace(/[^\n]+$/, '');
- }
- return false;
- }
- }
- });
- return value;
- };
- _proto.rawBeforeClose = function rawBeforeClose(root) {
- var value;
- root.walk(function (i) {
- if (i.nodes && i.nodes.length > 0) {
- if (typeof i.raws.after !== 'undefined') {
- value = i.raws.after;
- if (value.indexOf('\n') !== -1) {
- value = value.replace(/[^\n]+$/, '');
- }
- return false;
- }
- }
- });
- return value;
- };
- _proto.rawBeforeOpen = function rawBeforeOpen(root) {
- var value;
- root.walk(function (i) {
- if (i.type !== 'decl') {
- value = i.raws.between;
- if (typeof value !== 'undefined') return false;
- }
- });
- return value;
- };
- _proto.rawColon = function rawColon(root) {
- var value;
- root.walkDecls(function (i) {
- if (typeof i.raws.between !== 'undefined') {
- value = i.raws.between.replace(/[^\s:]/g, '');
- return false;
- }
- });
- return value;
- };
- _proto.beforeAfter = function beforeAfter(node, detect) {
- var value;
- if (node.type === 'decl') {
- value = this.raw(node, null, 'beforeDecl');
- } else if (node.type === 'comment') {
- value = this.raw(node, null, 'beforeComment');
- } else if (detect === 'before') {
- value = this.raw(node, null, 'beforeRule');
- } else {
- value = this.raw(node, null, 'beforeClose');
- }
- var buf = node.parent;
- var depth = 0;
- while (buf && buf.type !== 'root') {
- depth += 1;
- buf = buf.parent;
- }
- if (value.indexOf('\n') !== -1) {
- var indent = this.raw(node, null, 'indent');
- if (indent.length) {
- for (var step = 0; step < depth; step++) {
- value += indent;
- }
- }
- }
- return value;
- };
- _proto.rawValue = function rawValue(node, prop) {
- var value = node[prop];
- var raw = node.raws[prop];
- if (raw && raw.value === value) {
- return raw.raw;
- } else {
- return value;
- }
- };
- return Stringifier;
- }();
- //
- function stringify(node, builder) {
- var str = new Stringifier(builder);
- str.stringify(node);
- }
- /**
- * @typedef {object} position
- * @property {number} line - source line in file
- * @property {number} column - source column in file
- */
- /**
- * @typedef {object} source
- * @property {Input} input - {@link Input} with input file
- * @property {position} start - The starting position of the node’s source
- * @property {position} end - The ending position of the node’s source
- */
- var cloneNode = function cloneNode(obj, parent) {
- var cloned = new obj.constructor();
- for (var i in obj) {
- if (!obj.hasOwnProperty(i)) continue;
- var value = obj[i];
- var type = typeof value;
- if (i === 'parent' && type === 'object') {
- if (parent) cloned[i] = parent;
- } else if (i === 'source') {
- cloned[i] = value;
- } else if (value instanceof Array) {
- cloned[i] = value.map(function (j) {
- return cloneNode(j, cloned);
- });
- } else if (i !== 'before' && i !== 'after' && i !== 'between' && i !== 'semicolon') {
- if (type === 'object' && value !== null) value = cloneNode(value);
- cloned[i] = value;
- }
- }
- return cloned;
- };
- /**
- * All node classes inherit the following common methods.
- *
- * @abstract
- */
- var Node =
- /*#__PURE__*/
- function () {
- /**
- * @param {object} [defaults] - value for node properties
- */
- function Node(defaults) {
- if (defaults === void 0) {
- defaults = {};
- }
- this.raws = {};
- for (var name in defaults) {
- this[name] = defaults[name];
- }
- }
- /**
- * Returns a CssSyntaxError instance containing the original position
- * of the node in the source, showing line and column numbers and also
- * a small excerpt to facilitate debugging.
- *
- * If present, an input source map will be used to get the original position
- * of the source, even from a previous compilation step
- * (e.g., from Sass compilation).
- *
- * This method produces very useful error messages.
- *
- * @param {string} message - error description
- * @param {object} [opts] - options
- * @param {string} opts.plugin - plugin name that created this error.
- * PostCSS will set it automatically.
- * @param {string} opts.word - a word inside a node’s string that should
- * be highlighted as the source of the error
- * @param {number} opts.index - an index inside a node’s string that should
- * be highlighted as the source of the error
- *
- * @return {CssSyntaxError} error object to throw it
- *
- * @example
- * if ( !variables[name] ) {
- * throw decl.error('Unknown variable ' + name, { word: name });
- * // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black
- * // color: $black
- * // a
- * // ^
- * // background: white
- * }
- */
- var _proto = Node.prototype;
- _proto.error = function error(message, opts) {
- if (opts === void 0) {
- opts = {};
- }
- if (this.source) {
- var pos = this.positionBy(opts);
- return this.source.input.error(message, pos.line, pos.column, opts);
- } else {
- return new CssSyntaxError(message);
- }
- }
- /**
- * This method is provided as a convenience wrapper for {@link Result#warn}.
- *
- * @param {Result} result - the {@link Result} instance
- * that will receive the warning
- * @param {string} text - warning message
- * @param {object} [opts] - options
- * @param {string} opts.plugin - plugin name that created this warning.
- * PostCSS will set it automatically.
- * @param {string} opts.word - a word inside a node’s string that should
- * be highlighted as the source of the warning
- * @param {number} opts.index - an index inside a node’s string that should
- * be highlighted as the source of the warning
- *
- * @return {Warning} created warning object
- *
- * @example
- * const plugin = postcss.plugin('postcss-deprecated', () => {
- * return (root, result) => {
- * root.walkDecls('bad', decl => {
- * decl.warn(result, 'Deprecated property bad');
- * });
- * };
- * });
- */
- ;
- _proto.warn = function warn(result, text, opts) {
- var data = {
- node: this
- };
- for (var i in opts) {
- data[i] = opts[i];
- }
- return result.warn(text, data);
- }
- /**
- * Removes the node from its parent and cleans the parent properties
- * from the node and its children.
- *
- * @example
- * if ( decl.prop.match(/^-webkit-/) ) {
- * decl.remove();
- * }
- *
- * @return {Node} node to make calls chain
- */
- ;
- _proto.remove = function remove() {
- if (this.parent) {
- this.parent.removeChild(this);
- }
- this.parent = undefined;
- return this;
- }
- /**
- * Returns a CSS string representing the node.
- *
- * @param {stringifier|syntax} [stringifier] - a syntax to use
- * in string generation
- *
- * @return {string} CSS string of this node
- *
- * @example
- * postcss.rule({ selector: 'a' }).toString() //=> "a {}"
- */
- ;
- _proto.toString = function toString(stringifier) {
- if (stringifier === void 0) {
- stringifier = stringify;
- }
- if (stringifier.stringify) stringifier = stringifier.stringify;
- var result = '';
- stringifier(this, function (i) {
- result += i;
- });
- return result;
- }
- /**
- * Returns a clone of the node.
- *
- * The resulting cloned node and its (cloned) children will have
- * a clean parent and code style properties.
- *
- * @param {object} [overrides] - new properties to override in the clone.
- *
- * @example
- * const cloned = decl.clone({ prop: '-moz-' + decl.prop });
- * cloned.raws.before //=> undefined
- * cloned.parent //=> undefined
- * cloned.toString() //=> -moz-transform: scale(0)
- *
- * @return {Node} clone of the node
- */
- ;
- _proto.clone = function clone(overrides) {
- if (overrides === void 0) {
- overrides = {};
- }
- var cloned = cloneNode(this);
- for (var name in overrides) {
- cloned[name] = overrides[name];
- }
- return cloned;
- }
- /**
- * Shortcut to clone the node and insert the resulting cloned node
- * before the current node.
- *
- * @param {object} [overrides] - new properties to override in the clone.
- *
- * @example
- * decl.cloneBefore({ prop: '-moz-' + decl.prop });
- *
- * @return {Node} - new node
- */
- ;
- _proto.cloneBefore = function cloneBefore(overrides) {
- if (overrides === void 0) {
- overrides = {};
- }
- var cloned = this.clone(overrides);
- this.parent.insertBefore(this, cloned);
- return cloned;
- }
- /**
- * Shortcut to clone the node and insert the resulting cloned node
- * after the current node.
- *
- * @param {object} [overrides] - new properties to override in the clone.
- *
- * @return {Node} - new node
- */
- ;
- _proto.cloneAfter = function cloneAfter(overrides) {
- if (overrides === void 0) {
- overrides = {};
- }
- var cloned = this.clone(overrides);
- this.parent.insertAfter(this, cloned);
- return cloned;
- }
- /**
- * Inserts node(s) before the current node and removes the current node.
- *
- * @param {...Node} nodes - node(s) to replace current one
- *
- * @example
- * if ( atrule.name == 'mixin' ) {
- * atrule.replaceWith(mixinRules[atrule.params]);
- * }
- *
- * @return {Node} current node to methods chain
- */
- ;
- _proto.replaceWith = function replaceWith() {
- var _this = this;
- if (this.parent) {
- for (var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++) {
- nodes[_key] = arguments[_key];
- }
- nodes.forEach(function (node) {
- _this.parent.insertBefore(_this, node);
- });
- this.remove();
- }
- return this;
- }
- /**
- * Removes the node from its current parent and inserts it
- * at the end of `newParent`.
- *
- * This will clean the `before` and `after` code {@link Node#raws} data
- * from the node and replace them with the indentation style of `newParent`.
- * It will also clean the `between` property
- * if `newParent` is in another {@link Root}.
- *
- * @param {Container} newParent - container node where the current node
- * will be moved
- *
- * @example
- * atrule.moveTo(atrule.root());
- *
- * @return {Node} current node to methods chain
- */
- ;
- _proto.moveTo = function moveTo(newParent) {
- this.cleanRaws(this.root() === newParent.root());
- this.remove();
- newParent.append(this);
- return this;
- }
- /**
- * Removes the node from its current parent and inserts it into
- * a new parent before `otherNode`.
- *
- * This will also clean the node’s code style properties just as it would
- * in {@link Node#moveTo}.
- *
- * @param {Node} otherNode - node that will be before current node
- *
- * @return {Node} current node to methods chain
- */
- ;
- _proto.moveBefore = function moveBefore(otherNode) {
- this.cleanRaws(this.root() === otherNode.root());
- this.remove();
- otherNode.parent.insertBefore(otherNode, this);
- return this;
- }
- /**
- * Removes the node from its current parent and inserts it into
- * a new parent after `otherNode`.
- *
- * This will also clean the node’s code style properties just as it would
- * in {@link Node#moveTo}.
- *
- * @param {Node} otherNode - node that will be after current node
- *
- * @return {Node} current node to methods chain
- */
- ;
- _proto.moveAfter = function moveAfter(otherNode) {
- this.cleanRaws(this.root() === otherNode.root());
- this.remove();
- otherNode.parent.insertAfter(otherNode, this);
- return this;
- }
- /**
- * Returns the next child of the node’s parent.
- * Returns `undefined` if the current node is the last child.
- *
- * @return {Node|undefined} next node
- *
- * @example
- * if ( comment.text === 'delete next' ) {
- * const next = comment.next();
- * if ( next ) {
- * next.remove();
- * }
- * }
- */
- ;
- _proto.next = function next() {
- var index = this.parent.index(this);
- return this.parent.nodes[index + 1];
- }
- /**
- * Returns the previous child of the node’s parent.
- * Returns `undefined` if the current node is the first child.
- *
- * @return {Node|undefined} previous node
- *
- * @example
- * const annotation = decl.prev();
- * if ( annotation.type == 'comment' ) {
- * readAnnotation(annotation.text);
- * }
- */
- ;
- _proto.prev = function prev() {
- var index = this.parent.index(this);
- return this.parent.nodes[index - 1];
- };
- _proto.toJSON = function toJSON() {
- var fixed = {};
- for (var name in this) {
- if (!this.hasOwnProperty(name)) continue;
- if (name === 'parent') continue;
- var value = this[name];
- if (value instanceof Array) {
- fixed[name] = value.map(function (i) {
- if (typeof i === 'object' && i.toJSON) {
- return i.toJSON();
- } else {
- return i;
- }
- });
- } else if (typeof value === 'object' && value.toJSON) {
- fixed[name] = value.toJSON();
- } else {
- fixed[name] = value;
- }
- }
- return fixed;
- }
- /**
- * Returns a {@link Node#raws} value. If the node is missing
- * the code style property (because the node was manually built or cloned),
- * PostCSS will try to autodetect the code style property by looking
- * at other nodes in the tree.
- *
- * @param {string} prop - name of code style property
- * @param {string} [defaultType] - name of default value, it can be missed
- * if the value is the same as prop
- *
- * @example
- * const root = postcss.parse('a { background: white }');
- * root.nodes[0].append({ prop: 'color', value: 'black' });
- * root.nodes[0].nodes[1].raws.before //=> undefined
- * root.nodes[0].nodes[1].raw('before') //=> ' '
- *
- * @return {string} code style value
- */
- ;
- _proto.raw = function raw(prop, defaultType) {
- var str = new Stringifier();
- return str.raw(this, prop, defaultType);
- }
- /**
- * Finds the Root instance of the node’s tree.
- *
- * @example
- * root.nodes[0].nodes[0].root() === root
- *
- * @return {Root} root parent
- */
- ;
- _proto.root = function root() {
- var result = this;
- while (result.parent) {
- result = result.parent;
- }
- return result;
- };
- _proto.cleanRaws = function cleanRaws(keepBetween) {
- delete this.raws.before;
- delete this.raws.after;
- if (!keepBetween) delete this.raws.between;
- };
- _proto.positionInside = function positionInside(index) {
- var string = this.toString();
- var column = this.source.start.column;
- var line = this.source.start.line;
- for (var i = 0; i < index; i++) {
- if (string[i] === '\n') {
- column = 1;
- line += 1;
- } else {
- column += 1;
- }
- }
- return {
- line: line,
- column: column
- };
- };
- _proto.positionBy = function positionBy(opts) {
- var pos = this.source.start;
- if (opts.index) {
- pos = this.positionInside(opts.index);
- } else if (opts.word) {
- var index = this.toString().indexOf(opts.word);
- if (index !== -1) pos = this.positionInside(index);
- }
- return pos;
- };
- _proto.removeSelf = function removeSelf() {
- warnOnce('Node#removeSelf is deprecated. Use Node#remove.');
- return this.remove();
- };
- _proto.replace = function replace(nodes) {
- warnOnce('Node#replace is deprecated. Use Node#replaceWith');
- return this.replaceWith(nodes);
- };
- _proto.style = function style(own, detect) {
- warnOnce('Node#style() is deprecated. Use Node#raw()');
- return this.raw(own, detect);
- };
- _proto.cleanStyles = function cleanStyles(keepBetween) {
- warnOnce('Node#cleanStyles() is deprecated. Use Node#cleanRaws()');
- return this.cleanRaws(keepBetween);
- };
- _createClass(Node, [{
- key: "before",
- get: function get() {
- warnOnce('Node#before is deprecated. Use Node#raws.before');
- return this.raws.before;
- },
- set: function set(val) {
- warnOnce('Node#before is deprecated. Use Node#raws.before');
- this.raws.before = val;
- }
- }, {
- key: "between",
- get: function get() {
- warnOnce('Node#between is deprecated. Use Node#raws.between');
- return this.raws.between;
- },
- set: function set(val) {
- warnOnce('Node#between is deprecated. Use Node#raws.between');
- this.raws.between = val;
- }
- /**
- * @memberof Node#
- * @member {string} type - String representing the node’s type.
- * Possible values are `root`, `atrule`, `rule`,
- * `decl`, or `comment`.
- *
- * @example
- * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'
- */
- /**
- * @memberof Node#
- * @member {Container} parent - the node’s parent node.
- *
- * @example
- * root.nodes[0].parent == root;
- */
- /**
- * @memberof Node#
- * @member {source} source - the input source of the node
- *
- * The property is used in source map generation.
- *
- * If you create a node manually (e.g., with `postcss.decl()`),
- * that node will not have a `source` property and will be absent
- * from the source map. For this reason, the plugin developer should
- * consider cloning nodes to create new ones (in which case the new node’s
- * source will reference the original, cloned node) or setting
- * the `source` property manually.
- *
- * ```js
- * // Bad
- * const prefixed = postcss.decl({
- * prop: '-moz-' + decl.prop,
- * value: decl.value
- * });
- *
- * // Good
- * const prefixed = decl.clone({ prop: '-moz-' + decl.prop });
- * ```
- *
- * ```js
- * if ( atrule.name == 'add-link' ) {
- * const rule = postcss.rule({ selector: 'a', source: atrule.source });
- * atrule.parent.insertBefore(atrule, rule);
- * }
- * ```
- *
- * @example
- * decl.source.input.from //=> '/home/ai/a.sass'
- * decl.source.start //=> { line: 10, column: 2 }
- * decl.source.end //=> { line: 10, column: 12 }
- */
- /**
- * @memberof Node#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `before`: the space symbols before the node. It also stores `*`
- * and `_` symbols before the declaration (IE hack).
- * * `after`: the space symbols after the last child of the node
- * to the end of the node.
- * * `between`: the symbols between the property and value
- * for declarations, selector and `{` for rules, or last parameter
- * and `{` for at-rules.
- * * `semicolon`: contains true if the last child has
- * an (optional) semicolon.
- * * `afterName`: the space between the at-rule name and its parameters.
- * * `left`: the space symbols between `/*` and the comment’s text.
- * * `right`: the space symbols between the comment’s text
- * and <code>*/</code>.
- * * `important`: the content of the important statement,
- * if it is not just `!important`.
- *
- * PostCSS cleans selectors, declaration values and at-rule parameters
- * from comments and extra spaces, but it stores origin content in raws
- * properties. As such, if you don’t change a declaration’s value,
- * PostCSS will use the raw value with comments.
- *
- * @example
- * const root = postcss.parse('a {\n color:black\n}')
- * root.first.first.raws //=> { before: '\n ', between: ':' }
- */
- }]);
- return Node;
- }();
- /**
- * Represents a CSS declaration.
- *
- * @extends Node
- *
- * @example
- * const root = postcss.parse('a { color: black }');
- * const decl = root.first.first;
- * decl.type //=> 'decl'
- * decl.toString() //=> ' color: black'
- */
- var Declaration =
- /*#__PURE__*/
- function (_Node) {
- _inheritsLoose(Declaration, _Node);
- function Declaration(defaults) {
- var _this;
- _this = _Node.call(this, defaults) || this;
- _this.type = 'decl';
- return _this;
- }
- _createClass(Declaration, [{
- key: "_value",
- get: function get() {
- warnOnce('Node#_value was deprecated. Use Node#raws.value');
- return this.raws.value;
- },
- set: function set(val) {
- warnOnce('Node#_value was deprecated. Use Node#raws.value');
- this.raws.value = val;
- }
- }, {
- key: "_important",
- get: function get() {
- warnOnce('Node#_important was deprecated. Use Node#raws.important');
- return this.raws.important;
- },
- set: function set(val) {
- warnOnce('Node#_important was deprecated. Use Node#raws.important');
- this.raws.important = val;
- }
- /**
- * @memberof Declaration#
- * @member {string} prop - the declaration’s property name
- *
- * @example
- * const root = postcss.parse('a { color: black }');
- * const decl = root.first.first;
- * decl.prop //=> 'color'
- */
- /**
- * @memberof Declaration#
- * @member {string} value - the declaration’s value
- *
- * @example
- * const root = postcss.parse('a { color: black }');
- * const decl = root.first.first;
- * decl.value //=> 'black'
- */
- /**
- * @memberof Declaration#
- * @member {boolean} important - `true` if the declaration
- * has an !important annotation.
- *
- * @example
- * const root = postcss.parse('a { color: black !important; color: red }');
- * root.first.first.important //=> true
- * root.first.last.important //=> undefined
- */
- /**
- * @memberof Declaration#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `before`: the space symbols before the node. It also stores `*`
- * and `_` symbols before the declaration (IE hack).
- * * `between`: the symbols between the property and value
- * for declarations, selector and `{` for rules, or last parameter
- * and `{` for at-rules.
- * * `important`: the content of the important statement,
- * if it is not just `!important`.
- *
- * PostCSS cleans declaration from comments and extra spaces,
- * but it stores origin content in raws properties.
- * As such, if you don’t change a declaration’s value,
- * PostCSS will use the raw value with comments.
- *
- * @example
- * const root = postcss.parse('a {\n color:black\n}')
- * root.first.first.raws //=> { before: '\n ', between: ':' }
- */
- }]);
- return Declaration;
- }(Node);
- /**
- * Represents a comment between declarations or statements (rule and at-rules).
- *
- * Comments inside selectors, at-rule parameters, or declaration values
- * will be stored in the `raws` properties explained above.
- *
- * @extends Node
- */
- var Comment =
- /*#__PURE__*/
- function (_Node) {
- _inheritsLoose(Comment, _Node);
- function Comment(defaults) {
- var _this;
- _this = _Node.call(this, defaults) || this;
- _this.type = 'comment';
- return _this;
- }
- _createClass(Comment, [{
- key: "left",
- get: function get() {
- warnOnce('Comment#left was deprecated. Use Comment#raws.left');
- return this.raws.left;
- },
- set: function set(val) {
- warnOnce('Comment#left was deprecated. Use Comment#raws.left');
- this.raws.left = val;
- }
- }, {
- key: "right",
- get: function get() {
- warnOnce('Comment#right was deprecated. Use Comment#raws.right');
- return this.raws.right;
- },
- set: function set(val) {
- warnOnce('Comment#right was deprecated. Use Comment#raws.right');
- this.raws.right = val;
- }
- /**
- * @memberof Comment#
- * @member {string} text - the comment’s text
- */
- /**
- * @memberof Comment#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `before`: the space symbols before the node.
- * * `left`: the space symbols between `/*` and the comment’s text.
- * * `right`: the space symbols between the comment’s text.
- */
- }]);
- return Comment;
- }(Node);
- //
- var Parser =
- /*#__PURE__*/
- function () {
- function Parser(input) {
- this.input = input;
- this.pos = 0;
- this.root = new Root();
- this.current = this.root;
- this.spaces = '';
- this.semicolon = false;
- this.root.source = {
- input: input,
- start: {
- line: 1,
- column: 1
- }
- };
- }
- var _proto = Parser.prototype;
- _proto.tokenize = function tokenize$1() {
- this.tokens = tokenize(this.input);
- };
- _proto.loop = function loop() {
- var token;
- while (this.pos < this.tokens.length) {
- token = this.tokens[this.pos];
- switch (token[0]) {
- case 'space':
- case ';':
- this.spaces += token[1];
- break;
- case '}':
- this.end(token);
- break;
- case 'comment':
- this.comment(token);
- break;
- case 'at-word':
- this.atrule(token);
- break;
- case '{':
- this.emptyRule(token);
- break;
- default:
- this.other();
- break;
- }
- this.pos += 1;
- }
- this.endFile();
- };
- _proto.comment = function comment(token) {
- var node = new Comment();
- this.init(node, token[2], token[3]);
- node.source.end = {
- line: token[4],
- column: token[5]
- };
- var text = token[1].slice(2, -2);
- if (/^\s*$/.test(text)) {
- node.text = '';
- node.raws.left = text;
- node.raws.right = '';
- } else {
- var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
- node.text = match[2];
- node.raws.left = match[1];
- node.raws.right = match[3];
- }
- };
- _proto.emptyRule = function emptyRule(token) {
- var node = new Rule();
- this.init(node, token[2], token[3]);
- node.selector = '';
- node.raws.between = '';
- this.current = node;
- };
- _proto.other = function other() {
- var token;
- var end = false;
- var type = null;
- var colon = false;
- var bracket = null;
- var brackets = [];
- var start = this.pos;
- while (this.pos < this.tokens.length) {
- token = this.tokens[this.pos];
- type = token[0];
- if (type === '(' || type === '[') {
- if (!bracket) bracket = token;
- brackets.push(type === '(' ? ')' : ']');
- } else if (brackets.length === 0) {
- if (type === ';') {
- if (colon) {
- this.decl(this.tokens.slice(start, this.pos + 1));
- return;
- } else {
- break;
- }
- } else if (type === '{') {
- this.rule(this.tokens.slice(start, this.pos + 1));
- return;
- } else if (type === '}') {
- this.pos -= 1;
- end = true;
- break;
- } else if (type === ':') {
- colon = true;
- }
- } else if (type === brackets[brackets.length - 1]) {
- brackets.pop();
- if (brackets.length === 0) bracket = null;
- }
- this.pos += 1;
- }
- if (this.pos === this.tokens.length) {
- this.pos -= 1;
- end = true;
- }
- if (brackets.length > 0) this.unclosedBracket(bracket);
- if (end && colon) {
- while (this.pos > start) {
- token = this.tokens[this.pos][0];
- if (token !== 'space' && token !== 'comment') break;
- this.pos -= 1;
- }
- this.decl(this.tokens.slice(start, this.pos + 1));
- return;
- }
- this.unknownWord(start);
- };
- _proto.rule = function rule(tokens) {
- tokens.pop();
- var node = new Rule();
- this.init(node, tokens[0][2], tokens[0][3]);
- node.raws.between = this.spacesFromEnd(tokens);
- this.raw(node, 'selector', tokens);
- this.current = node;
- };
- _proto.decl = function decl(tokens) {
- var node = new Declaration();
- this.init(node);
- var last = tokens[tokens.length - 1];
- if (last[0] === ';') {
- this.semicolon = true;
- tokens.pop();
- }
- if (last[4]) {
- node.source.end = {
- line: last[4],
- column: last[5]
- };
- } else {
- node.source.end = {
- line: last[2],
- column: last[3]
- };
- }
- while (tokens[0][0] !== 'word') {
- node.raws.before += tokens.shift()[1];
- }
- node.source.start = {
- line: tokens[0][2],
- column: tokens[0][3]
- };
- node.prop = '';
- while (tokens.length) {
- var type = tokens[0][0];
- if (type === ':' || type === 'space' || type === 'comment') {
- break;
- }
- node.prop += tokens.shift()[1];
- }
- node.raws.between = '';
- var token;
- while (tokens.length) {
- token = tokens.shift();
- if (token[0] === ':') {
- node.raws.between += token[1];
- break;
- } else {
- node.raws.between += token[1];
- }
- }
- if (node.prop[0] === '_' || node.prop[0] === '*') {
- node.raws.before += node.prop[0];
- node.prop = node.prop.slice(1);
- }
- node.raws.between += this.spacesFromStart(tokens);
- this.precheckMissedSemicolon(tokens);
- for (var i = tokens.length - 1; i > 0; i--) {
- token = tokens[i];
- if (token[1] === '!important') {
- node.important = true;
- var string = this.stringFrom(tokens, i);
- string = this.spacesFromEnd(tokens) + string;
- if (string !== ' !important') node.raws.important = string;
- break;
- } else if (token[1] === 'important') {
- var cache = tokens.slice(0);
- var str = '';
- for (var j = i; j > 0; j--) {
- var _type = cache[j][0];
- if (str.trim().indexOf('!') === 0 && _type !== 'space') {
- break;
- }
- str = cache.pop()[1] + str;
- }
- if (str.trim().indexOf('!') === 0) {
- node.important = true;
- node.raws.important = str;
- tokens = cache;
- }
- }
- if (token[0] !== 'space' && token[0] !== 'comment') {
- break;
- }
- }
- this.raw(node, 'value', tokens);
- if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens);
- };
- _proto.atrule = function atrule(token) {
- var node = new AtRule();
- node.name = token[1].slice(1);
- if (node.name === '') {
- this.unnamedAtrule(node, token);
- }
- this.init(node, token[2], token[3]);
- var last = false;
- var open = false;
- var params = [];
- this.pos += 1;
- while (this.pos < this.tokens.length) {
- token = this.tokens[this.pos];
- if (token[0] === ';') {
- node.source.end = {
- line: token[2],
- column: token[3]
- };
- this.semicolon = true;
- break;
- } else if (token[0] === '{') {
- open = true;
- break;
- } else if (token[0] === '}') {
- this.end(token);
- break;
- } else {
- params.push(token);
- }
- this.pos += 1;
- }
- if (this.pos === this.tokens.length) {
- last = true;
- }
- node.raws.between = this.spacesFromEnd(params);
- if (params.length) {
- node.raws.afterName = this.spacesFromStart(params);
- this.raw(node, 'params', params);
- if (last) {
- token = params[params.length - 1];
- node.source.end = {
- line: token[4],
- column: token[5]
- };
- this.spaces = node.raws.between;
- node.raws.between = '';
- }
- } else {
- node.raws.afterName = '';
- node.params = '';
- }
- if (open) {
- node.nodes = [];
- this.current = node;
- }
- };
- _proto.end = function end(token) {
- if (this.current.nodes && this.current.nodes.length) {
- this.current.raws.semicolon = this.semicolon;
- }
- this.semicolon = false;
- this.current.raws.after = (this.current.raws.after || '') + this.spaces;
- this.spaces = '';
- if (this.current.parent) {
- this.current.source.end = {
- line: token[2],
- column: token[3]
- };
- this.current = this.current.parent;
- } else {
- this.unexpectedClose(token);
- }
- };
- _proto.endFile = function endFile() {
- if (this.current.parent) this.unclosedBlock();
- if (this.current.nodes && this.current.nodes.length) {
- this.current.raws.semicolon = this.semicolon;
- }
- this.current.raws.after = (this.current.raws.after || '') + this.spaces;
- } // Helpers
- ;
- _proto.init = function init(node, line, column) {
- this.current.push(node);
- node.source = {
- start: {
- line: line,
- column: column
- },
- input: this.input
- };
- node.raws.before = this.spaces;
- this.spaces = '';
- if (node.type !== 'comment') this.semicolon = false;
- };
- _proto.raw = function raw(node, prop, tokens) {
- var token, type;
- var length = tokens.length;
- var value = '';
- var clean = true;
- for (var i = 0; i < length; i += 1) {
- token = tokens[i];
- type = token[0];
- if (type === 'comment' || type === 'space' && i === length - 1) {
- clean = false;
- } else {
- value += token[1];
- }
- }
- if (!clean) {
- var raw = tokens.reduce(function (all, i) {
- return all + i[1];
- }, '');
- node.raws[prop] = {
- value: value,
- raw: raw
- };
- }
- node[prop] = value;
- };
- _proto.spacesFromEnd = function spacesFromEnd(tokens) {
- var lastTokenType;
- var spaces = '';
- while (tokens.length) {
- lastTokenType = tokens[tokens.length - 1][0];
- if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;
- spaces = tokens.pop()[1] + spaces;
- }
- return spaces;
- };
- _proto.spacesFromStart = function spacesFromStart(tokens) {
- var next;
- var spaces = '';
- while (tokens.length) {
- next = tokens[0][0];
- if (next !== 'space' && next !== 'comment') break;
- spaces += tokens.shift()[1];
- }
- return spaces;
- };
- _proto.stringFrom = function stringFrom(tokens, from) {
- var result = '';
- for (var i = from; i < tokens.length; i++) {
- result += tokens[i][1];
- }
- tokens.splice(from, tokens.length - from);
- return result;
- };
- _proto.colon = function colon(tokens) {
- var brackets = 0;
- var token, type, prev;
- for (var i = 0; i < tokens.length; i++) {
- token = tokens[i];
- type = token[0];
- if (type === '(') {
- brackets += 1;
- } else if (type === ')') {
- brackets -= 1;
- } else if (brackets === 0 && type === ':') {
- if (!prev) {
- this.doubleColon(token);
- } else if (prev[0] === 'word' && prev[1] === 'progid') {
- continue;
- } else {
- return i;
- }
- }
- prev = token;
- }
- return false;
- } // Errors
- ;
- _proto.unclosedBracket = function unclosedBracket(bracket) {
- throw this.input.error('Unclosed bracket', bracket[2], bracket[3]);
- };
- _proto.unknownWord = function unknownWord(start) {
- var token = this.tokens[start];
- throw this.input.error('Unknown word', token[2], token[3]);
- };
- _proto.unexpectedClose = function unexpectedClose(token) {
- throw this.input.error('Unexpected }', token[2], token[3]);
- };
- _proto.unclosedBlock = function unclosedBlock() {
- var pos = this.current.source.start;
- throw this.input.error('Unclosed block', pos.line, pos.column);
- };
- _proto.doubleColon = function doubleColon(token) {
- throw this.input.error('Double colon', token[2], token[3]);
- };
- _proto.unnamedAtrule = function unnamedAtrule(node, token) {
- throw this.input.error('At-rule without name', token[2], token[3]);
- };
- _proto.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) {
- };
- _proto.checkMissedSemicolon = function checkMissedSemicolon(tokens) {
- var colon = this.colon(tokens);
- if (colon === false) return;
- var founded = 0;
- var token;
- for (var j = colon - 1; j >= 0; j--) {
- token = tokens[j];
- if (token[0] !== 'space') {
- founded += 1;
- if (founded === 2) break;
- }
- }
- throw this.input.error('Missed semicolon', token[2], token[3]);
- };
- return Parser;
- }();
- //
- function parse(css, opts) {
- if (opts && opts.safe) {
- throw new Error('Option safe was removed. ' + 'Use parser: require("postcss-safe-parser")');
- }
- var input = new Input(css, opts);
- var parser = new Parser(input);
- try {
- parser.tokenize();
- parser.loop();
- } catch (e) {
- if (e.name === 'CssSyntaxError' && opts && opts.from) {
- if (/\.scss$/i.test(opts.from)) {
- e.message += '\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';
- } else if (/\.less$/i.test(opts.from)) {
- e.message += '\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';
- }
- }
- throw e;
- }
- return parser.root;
- }
- function cleanSource(nodes) {
- return nodes.map(function (i) {
- if (i.nodes) i.nodes = cleanSource(i.nodes);
- delete i.source;
- return i;
- });
- }
- /**
- * @callback childCondition
- * @param {Node} node - container child
- * @param {number} index - child index
- * @param {Node[]} nodes - all container children
- * @return {boolean}
- */
- /**
- * @callback childIterator
- * @param {Node} node - container child
- * @param {number} index - child index
- * @return {false|undefined} returning `false` will break iteration
- */
- /**
- * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes
- * inherit some common methods to help work with their children.
- *
- * Note that all containers can store any content. If you write a rule inside
- * a rule, PostCSS will parse it.
- *
- * @extends Node
- * @abstract
- */
- var Container =
- /*#__PURE__*/
- function (_Node) {
- _inheritsLoose(Container, _Node);
- function Container() {
- return _Node.apply(this, arguments) || this;
- }
- var _proto = Container.prototype;
- _proto.push = function push(child) {
- child.parent = this;
- this.nodes.push(child);
- return this;
- }
- /**
- * Iterates through the container’s immediate children,
- * calling `callback` for each child.
- *
- * Returning `false` in the callback will break iteration.
- *
- * This method only iterates through the container’s immediate children.
- * If you need to recursively iterate through all the container’s descendant
- * nodes, use {@link Container#walk}.
- *
- * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe
- * if you are mutating the array of child nodes during iteration.
- * PostCSS will adjust the current index to match the mutations.
- *
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * const root = postcss.parse('a { color: black; z-index: 1 }');
- * const rule = root.first;
- *
- * for ( let decl of rule.nodes ) {
- * decl.cloneBefore({ prop: '-webkit-' + decl.prop });
- * // Cycle will be infinite, because cloneBefore moves the current node
- * // to the next index
- * }
- *
- * rule.each(decl => {
- * decl.cloneBefore({ prop: '-webkit-' + decl.prop });
- * // Will be executed only for color and z-index
- * });
- */
- ;
- _proto.each = function each(callback) {
- if (!this.lastEach) this.lastEach = 0;
- if (!this.indexes) this.indexes = {};
- this.lastEach += 1;
- var id = this.lastEach;
- this.indexes[id] = 0;
- if (!this.nodes) return undefined;
- var index, result;
- while (this.indexes[id] < this.nodes.length) {
- index = this.indexes[id];
- result = callback(this.nodes[index], index);
- if (result === false) break;
- this.indexes[id] += 1;
- }
- delete this.indexes[id];
- return result;
- }
- /**
- * Traverses the container’s descendant nodes, calling callback
- * for each node.
- *
- * Like container.each(), this method is safe to use
- * if you are mutating arrays during iteration.
- *
- * If you only need to iterate through the container’s immediate children,
- * use {@link Container#each}.
- *
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * root.walk(node => {
- * // Traverses all descendant nodes.
- * });
- */
- ;
- _proto.walk = function walk(callback) {
- return this.each(function (child, i) {
- var result = callback(child, i);
- if (result !== false && child.walk) {
- result = child.walk(callback);
- }
- return result;
- });
- }
- /**
- * Traverses the container’s descendant nodes, calling callback
- * for each declaration node.
- *
- * If you pass a filter, iteration will only happen over declarations
- * with matching properties.
- *
- * Like {@link Container#each}, this method is safe
- * to use if you are mutating arrays during iteration.
- *
- * @param {string|RegExp} [prop] - string or regular expression
- * to filter declarations by property name
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * root.walkDecls(decl => {
- * checkPropertySupport(decl.prop);
- * });
- *
- * root.walkDecls('border-radius', decl => {
- * decl.remove();
- * });
- *
- * root.walkDecls(/^background/, decl => {
- * decl.value = takeFirstColorFromGradient(decl.value);
- * });
- */
- ;
- _proto.walkDecls = function walkDecls(prop, callback) {
- if (!callback) {
- callback = prop;
- return this.walk(function (child, i) {
- if (child.type === 'decl') {
- return callback(child, i);
- }
- });
- } else if (prop instanceof RegExp) {
- return this.walk(function (child, i) {
- if (child.type === 'decl' && prop.test(child.prop)) {
- return callback(child, i);
- }
- });
- } else {
- return this.walk(function (child, i) {
- if (child.type === 'decl' && child.prop === prop) {
- return callback(child, i);
- }
- });
- }
- }
- /**
- * Traverses the container’s descendant nodes, calling callback
- * for each rule node.
- *
- * If you pass a filter, iteration will only happen over rules
- * with matching selectors.
- *
- * Like {@link Container#each}, this method is safe
- * to use if you are mutating arrays during iteration.
- *
- * @param {string|RegExp} [selector] - string or regular expression
- * to filter rules by selector
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * const selectors = [];
- * root.walkRules(rule => {
- * selectors.push(rule.selector);
- * });
- * console.log(`Your CSS uses ${selectors.length} selectors`);
- */
- ;
- _proto.walkRules = function walkRules(selector, callback) {
- if (!callback) {
- callback = selector;
- return this.walk(function (child, i) {
- if (child.type === 'rule') {
- return callback(child, i);
- }
- });
- } else if (selector instanceof RegExp) {
- return this.walk(function (child, i) {
- if (child.type === 'rule' && selector.test(child.selector)) {
- return callback(child, i);
- }
- });
- } else {
- return this.walk(function (child, i) {
- if (child.type === 'rule' && child.selector === selector) {
- return callback(child, i);
- }
- });
- }
- }
- /**
- * Traverses the container’s descendant nodes, calling callback
- * for each at-rule node.
- *
- * If you pass a filter, iteration will only happen over at-rules
- * that have matching names.
- *
- * Like {@link Container#each}, this method is safe
- * to use if you are mutating arrays during iteration.
- *
- * @param {string|RegExp} [name] - string or regular expression
- * to filter at-rules by name
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * root.walkAtRules(rule => {
- * if ( isOld(rule.name) ) rule.remove();
- * });
- *
- * let first = false;
- * root.walkAtRules('charset', rule => {
- * if ( !first ) {
- * first = true;
- * } else {
- * rule.remove();
- * }
- * });
- */
- ;
- _proto.walkAtRules = function walkAtRules(name, callback) {
- if (!callback) {
- callback = name;
- return this.walk(function (child, i) {
- if (child.type === 'atrule') {
- return callback(child, i);
- }
- });
- } else if (name instanceof RegExp) {
- return this.walk(function (child, i) {
- if (child.type === 'atrule' && name.test(child.name)) {
- return callback(child, i);
- }
- });
- } else {
- return this.walk(function (child, i) {
- if (child.type === 'atrule' && child.name === name) {
- return callback(child, i);
- }
- });
- }
- }
- /**
- * Traverses the container’s descendant nodes, calling callback
- * for each comment node.
- *
- * Like {@link Container#each}, this method is safe
- * to use if you are mutating arrays during iteration.
- *
- * @param {childIterator} callback - iterator receives each node and index
- *
- * @return {false|undefined} returns `false` if iteration was broke
- *
- * @example
- * root.walkComments(comment => {
- * comment.remove();
- * });
- */
- ;
- _proto.walkComments = function walkComments(callback) {
- return this.walk(function (child, i) {
- if (child.type === 'comment') {
- return callback(child, i);
- }
- });
- }
- /**
- * Inserts new nodes to the start of the container.
- *
- * @param {...(Node|object|string|Node[])} children - new nodes
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * const decl1 = postcss.decl({ prop: 'color', value: 'black' });
- * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });
- * rule.append(decl1, decl2);
- *
- * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule
- * root.append({ selector: 'a' }); // rule
- * rule.append({ prop: 'color', value: 'black' }); // declaration
- * rule.append({ text: 'Comment' }) // comment
- *
- * root.append('a {}');
- * root.first.append('color: black; z-index: 1');
- */
- ;
- _proto.append = function append() {
- var _this = this;
- for (var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++) {
- children[_key] = arguments[_key];
- }
- children.forEach(function (child) {
- var nodes = _this.normalize(child, _this.last);
- nodes.forEach(function (node) {
- return _this.nodes.push(node);
- });
- });
- return this;
- }
- /**
- * Inserts new nodes to the end of the container.
- *
- * @param {...(Node|object|string|Node[])} children - new nodes
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * const decl1 = postcss.decl({ prop: 'color', value: 'black' });
- * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });
- * rule.prepend(decl1, decl2);
- *
- * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule
- * root.append({ selector: 'a' }); // rule
- * rule.append({ prop: 'color', value: 'black' }); // declaration
- * rule.append({ text: 'Comment' }) // comment
- *
- * root.append('a {}');
- * root.first.append('color: black; z-index: 1');
- */
- ;
- _proto.prepend = function prepend() {
- var _this2 = this;
- for (var _len2 = arguments.length, children = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- children[_key2] = arguments[_key2];
- }
- children = children.reverse();
- children.forEach(function (child) {
- var nodes = _this2.normalize(child, _this2.first, 'prepend').reverse();
- nodes.forEach(function (node) {
- return _this2.nodes.unshift(node);
- });
- for (var id in _this2.indexes) {
- _this2.indexes[id] = _this2.indexes[id] + nodes.length;
- }
- });
- return this;
- };
- _proto.cleanRaws = function cleanRaws(keepBetween) {
- _Node.prototype.cleanRaws.call(this, keepBetween);
- if (this.nodes) {
- this.nodes.forEach(function (node) {
- return node.cleanRaws(keepBetween);
- });
- }
- }
- /**
- * Insert new node before old node within the container.
- *
- * @param {Node|number} exist - child or child’s index.
- * @param {Node|object|string|Node[]} add - new node
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));
- */
- ;
- _proto.insertBefore = function insertBefore(exist, add) {
- var _this3 = this;
- exist = this.index(exist);
- var type = exist === 0 ? 'prepend' : false;
- var nodes = this.normalize(add, this.nodes[exist], type).reverse();
- nodes.forEach(function (node) {
- return _this3.nodes.splice(exist, 0, node);
- });
- var index;
- for (var id in this.indexes) {
- index = this.indexes[id];
- if (exist <= index) {
- this.indexes[id] = index + nodes.length;
- }
- }
- return this;
- }
- /**
- * Insert new node after old node within the container.
- *
- * @param {Node|number} exist - child or child’s index
- * @param {Node|object|string|Node[]} add - new node
- *
- * @return {Node} this node for methods chain
- */
- ;
- _proto.insertAfter = function insertAfter(exist, add) {
- var _this4 = this;
- exist = this.index(exist);
- var nodes = this.normalize(add, this.nodes[exist]).reverse();
- nodes.forEach(function (node) {
- return _this4.nodes.splice(exist + 1, 0, node);
- });
- var index;
- for (var id in this.indexes) {
- index = this.indexes[id];
- if (exist < index) {
- this.indexes[id] = index + nodes.length;
- }
- }
- return this;
- };
- _proto.remove = function remove(child) {
- if (typeof child !== 'undefined') {
- warnOnce('Container#remove is deprecated. ' + 'Use Container#removeChild');
- this.removeChild(child);
- } else {
- _Node.prototype.remove.call(this);
- }
- return this;
- }
- /**
- * Removes node from the container and cleans the parent properties
- * from the node and its children.
- *
- * @param {Node|number} child - child or child’s index
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * rule.nodes.length //=> 5
- * rule.removeChild(decl);
- * rule.nodes.length //=> 4
- * decl.parent //=> undefined
- */
- ;
- _proto.removeChild = function removeChild(child) {
- child = this.index(child);
- this.nodes[child].parent = undefined;
- this.nodes.splice(child, 1);
- var index;
- for (var id in this.indexes) {
- index = this.indexes[id];
- if (index >= child) {
- this.indexes[id] = index - 1;
- }
- }
- return this;
- }
- /**
- * Removes all children from the container
- * and cleans their parent properties.
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * rule.removeAll();
- * rule.nodes.length //=> 0
- */
- ;
- _proto.removeAll = function removeAll() {
- this.nodes.forEach(function (node) {
- return node.parent = undefined;
- });
- this.nodes = [];
- return this;
- }
- /**
- * Passes all declaration values within the container that match pattern
- * through callback, replacing those values with the returned result
- * of callback.
- *
- * This method is useful if you are using a custom unit or function
- * and need to iterate through all values.
- *
- * @param {string|RegExp} pattern - replace pattern
- * @param {object} opts - options to speed up the search
- * @param {string|string[]} opts.props - an array of property names
- * @param {string} opts.fast - string that’s used
- * to narrow down values and speed up
- the regexp search
- * @param {function|string} callback - string to replace pattern
- * or callback that returns a new
- * value.
- * The callback will receive
- * the same arguments as those
- * passed to a function parameter
- * of `String#replace`.
- *
- * @return {Node} this node for methods chain
- *
- * @example
- * root.replaceValues(/\d+rem/, { fast: 'rem' }, string => {
- * return 15 * parseInt(string) + 'px';
- * });
- */
- ;
- _proto.replaceValues = function replaceValues(pattern, opts, callback) {
- if (!callback) {
- callback = opts;
- opts = {};
- }
- this.walkDecls(function (decl) {
- if (opts.props && opts.props.indexOf(decl.prop) === -1) return;
- if (opts.fast && decl.value.indexOf(opts.fast) === -1) return;
- decl.value = decl.value.replace(pattern, callback);
- });
- return this;
- }
- /**
- * Returns `true` if callback returns `true`
- * for all of the container’s children.
- *
- * @param {childCondition} condition - iterator returns true or false.
- *
- * @return {boolean} is every child pass condition
- *
- * @example
- * const noPrefixes = rule.every(i => i.prop[0] !== '-');
- */
- ;
- _proto.every = function every(condition) {
- return this.nodes.every(condition);
- }
- /**
- * Returns `true` if callback returns `true` for (at least) one
- * of the container’s children.
- *
- * @param {childCondition} condition - iterator returns true or false.
- *
- * @return {boolean} is some child pass condition
- *
- * @example
- * const hasPrefix = rule.some(i => i.prop[0] === '-');
- */
- ;
- _proto.some = function some(condition) {
- return this.nodes.some(condition);
- }
- /**
- * Returns a `child`’s index within the {@link Container#nodes} array.
- *
- * @param {Node} child - child of the current container.
- *
- * @return {number} child index
- *
- * @example
- * rule.index( rule.nodes[2] ) //=> 2
- */
- ;
- _proto.index = function index(child) {
- if (typeof child === 'number') {
- return child;
- } else {
- return this.nodes.indexOf(child);
- }
- }
- /**
- * The container’s first child.
- *
- * @type {Node}
- *
- * @example
- * rule.first == rules.nodes[0];
- */
- ;
- _proto.normalize = function normalize(nodes, sample) {
- var _this5 = this;
- if (typeof nodes === 'string') {
- nodes = cleanSource(parse(nodes).nodes);
- } else if (!Array.isArray(nodes)) {
- if (nodes.type === 'root') {
- nodes = nodes.nodes;
- } else if (nodes.type) {
- nodes = [nodes];
- } else if (nodes.prop) {
- if (typeof nodes.value === 'undefined') {
- throw new Error('Value field is missed in node creation');
- } else if (typeof nodes.value !== 'string') {
- nodes.value = String(nodes.value);
- }
- nodes = [new Declaration(nodes)];
- } else if (nodes.selector) {
- nodes = [new Rule(nodes)];
- } else if (nodes.name) {
- nodes = [new AtRule(nodes)];
- } else if (nodes.text) {
- nodes = [new Comment(nodes)];
- } else {
- throw new Error('Unknown node type in node creation');
- }
- }
- var processed = nodes.map(function (i) {
- if (typeof i.raws === 'undefined') i = _this5.rebuild(i);
- if (i.parent) i = i.clone();
- if (typeof i.raws.before === 'undefined') {
- if (sample && typeof sample.raws.before !== 'undefined') {
- i.raws.before = sample.raws.before.replace(/[^\s]/g, '');
- }
- }
- i.parent = _this5;
- return i;
- });
- return processed;
- };
- _proto.rebuild = function rebuild(node, parent) {
- var _this6 = this;
- var fix;
- if (node.type === 'root') {
- fix = new Root();
- } else if (node.type === 'atrule') {
- fix = new AtRule();
- } else if (node.type === 'rule') {
- fix = new Rule();
- } else if (node.type === 'decl') {
- fix = new Declaration();
- } else if (node.type === 'comment') {
- fix = new Comment();
- }
- for (var i in node) {
- if (i === 'nodes') {
- fix.nodes = node.nodes.map(function (j) {
- return _this6.rebuild(j, fix);
- });
- } else if (i === 'parent' && parent) {
- fix.parent = parent;
- } else if (node.hasOwnProperty(i)) {
- fix[i] = node[i];
- }
- }
- return fix;
- };
- _proto.eachInside = function eachInside(callback) {
- warnOnce('Container#eachInside is deprecated. ' + 'Use Container#walk instead.');
- return this.walk(callback);
- };
- _proto.eachDecl = function eachDecl(prop, callback) {
- warnOnce('Container#eachDecl is deprecated. ' + 'Use Container#walkDecls instead.');
- return this.walkDecls(prop, callback);
- };
- _proto.eachRule = function eachRule(selector, callback) {
- warnOnce('Container#eachRule is deprecated. ' + 'Use Container#walkRules instead.');
- return this.walkRules(selector, callback);
- };
- _proto.eachAtRule = function eachAtRule(name, callback) {
- warnOnce('Container#eachAtRule is deprecated. ' + 'Use Container#walkAtRules instead.');
- return this.walkAtRules(name, callback);
- };
- _proto.eachComment = function eachComment(callback) {
- warnOnce('Container#eachComment is deprecated. ' + 'Use Container#walkComments instead.');
- return this.walkComments(callback);
- };
- _createClass(Container, [{
- key: "first",
- get: function get() {
- if (!this.nodes) return undefined;
- return this.nodes[0];
- }
- /**
- * The container’s last child.
- *
- * @type {Node}
- *
- * @example
- * rule.last == rule.nodes[rule.nodes.length - 1];
- */
- }, {
- key: "last",
- get: function get() {
- if (!this.nodes) return undefined;
- return this.nodes[this.nodes.length - 1];
- }
- }, {
- key: "semicolon",
- get: function get() {
- warnOnce('Node#semicolon is deprecated. Use Node#raws.semicolon');
- return this.raws.semicolon;
- },
- set: function set(val) {
- warnOnce('Node#semicolon is deprecated. Use Node#raws.semicolon');
- this.raws.semicolon = val;
- }
- }, {
- key: "after",
- get: function get() {
- warnOnce('Node#after is deprecated. Use Node#raws.after');
- return this.raws.after;
- },
- set: function set(val) {
- warnOnce('Node#after is deprecated. Use Node#raws.after');
- this.raws.after = val;
- }
- /**
- * @memberof Container#
- * @member {Node[]} nodes - an array containing the container’s children
- *
- * @example
- * const root = postcss.parse('a { color: black }');
- * root.nodes.length //=> 1
- * root.nodes[0].selector //=> 'a'
- * root.nodes[0].nodes[0].prop //=> 'color'
- */
- }]);
- return Container;
- }(Node);
- /**
- * Represents an at-rule.
- *
- * If it’s followed in the CSS by a {} block, this node will have
- * a nodes property representing its children.
- *
- * @extends Container
- *
- * @example
- * const root = postcss.parse('@charset "UTF-8"; @media print {}');
- *
- * const charset = root.first;
- * charset.type //=> 'atrule'
- * charset.nodes //=> undefined
- *
- * const media = root.last;
- * media.nodes //=> []
- */
- var AtRule =
- /*#__PURE__*/
- function (_Container) {
- _inheritsLoose(AtRule, _Container);
- function AtRule(defaults) {
- var _this;
- _this = _Container.call(this, defaults) || this;
- _this.type = 'atrule';
- return _this;
- }
- var _proto = AtRule.prototype;
- _proto.append = function append() {
- var _Container$prototype$;
- if (!this.nodes) this.nodes = [];
- for (var _len = arguments.length, children = new Array(_len), _key = 0; _key < _len; _key++) {
- children[_key] = arguments[_key];
- }
- return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children));
- };
- _proto.prepend = function prepend() {
- var _Container$prototype$2;
- if (!this.nodes) this.nodes = [];
- for (var _len2 = arguments.length, children = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- children[_key2] = arguments[_key2];
- }
- return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children));
- };
- _createClass(AtRule, [{
- key: "afterName",
- get: function get() {
- warnOnce('AtRule#afterName was deprecated. Use AtRule#raws.afterName');
- return this.raws.afterName;
- },
- set: function set(val) {
- warnOnce('AtRule#afterName was deprecated. Use AtRule#raws.afterName');
- this.raws.afterName = val;
- }
- }, {
- key: "_params",
- get: function get() {
- warnOnce('AtRule#_params was deprecated. Use AtRule#raws.params');
- return this.raws.params;
- },
- set: function set(val) {
- warnOnce('AtRule#_params was deprecated. Use AtRule#raws.params');
- this.raws.params = val;
- }
- /**
- * @memberof AtRule#
- * @member {string} name - the at-rule’s name immediately follows the `@`
- *
- * @example
- * const root = postcss.parse('@media print {}');
- * media.name //=> 'media'
- * const media = root.first;
- */
- /**
- * @memberof AtRule#
- * @member {string} params - the at-rule’s parameters, the values
- * that follow the at-rule’s name but precede
- * any {} block
- *
- * @example
- * const root = postcss.parse('@media print, screen {}');
- * const media = root.first;
- * media.params //=> 'print, screen'
- */
- /**
- * @memberof AtRule#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `before`: the space symbols before the node. It also stores `*`
- * and `_` symbols before the declaration (IE hack).
- * * `after`: the space symbols after the last child of the node
- * to the end of the node.
- * * `between`: the symbols between the property and value
- * for declarations, selector and `{` for rules, or last parameter
- * and `{` for at-rules.
- * * `semicolon`: contains true if the last child has
- * an (optional) semicolon.
- * * `afterName`: the space between the at-rule name and its parameters.
- *
- * PostCSS cleans at-rule parameters from comments and extra spaces,
- * but it stores origin content in raws properties.
- * As such, if you don’t change a declaration’s value,
- * PostCSS will use the raw value with comments.
- *
- * @example
- * const root = postcss.parse(' @media\nprint {\n}')
- * root.first.first.raws //=> { before: ' ',
- * // between: ' ',
- * // afterName: '\n',
- * // after: '\n' }
- */
- }]);
- return AtRule;
- }(Container);
- //
- /**
- * Contains helpers for safely splitting lists of CSS values,
- * preserving parentheses and quotes.
- *
- * @example
- * const list = postcss.list;
- *
- * @namespace list
- */
- var list = {
- split: function split(string, separators, last) {
- var array = [];
- var current = '';
- var split = false;
- var func = 0;
- var quote = false;
- var escape = false;
- for (var i = 0; i < string.length; i++) {
- var letter = string[i];
- if (quote) {
- if (escape) {
- escape = false;
- } else if (letter === '\\') {
- escape = true;
- } else if (letter === quote) {
- quote = false;
- }
- } else if (letter === '"' || letter === "'") {
- quote = letter;
- } else if (letter === '(') {
- func += 1;
- } else if (letter === ')') {
- if (func > 0) func -= 1;
- } else if (func === 0) {
- if (separators.indexOf(letter) !== -1) split = true;
- }
- if (split) {
- if (current !== '') array.push(current.trim());
- current = '';
- split = false;
- } else {
- current += letter;
- }
- }
- if (last || current !== '') array.push(current.trim());
- return array;
- },
- /**
- * Safely splits space-separated values (such as those for `background`,
- * `border-radius`, and other shorthand properties).
- *
- * @param {string} string - space-separated values
- *
- * @return {string[]} splitted values
- *
- * @example
- * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']
- */
- space: function space(string) {
- var spaces = [' ', '\n', '\t'];
- return list.split(string, spaces);
- },
- /**
- * Safely splits comma-separated values (such as those for `transition-*`
- * and `background` properties).
- *
- * @param {string} string - comma-separated values
- *
- * @return {string[]} splitted values
- *
- * @example
- * postcss.list.comma('black, linear-gradient(white, black)')
- * //=> ['black', 'linear-gradient(white, black)']
- */
- comma: function comma(string) {
- var comma = ',';
- return list.split(string, [comma], true);
- }
- };
- /**
- * Represents a CSS rule: a selector followed by a declaration block.
- *
- * @extends Container
- *
- * @example
- * const root = postcss.parse('a{}');
- * const rule = root.first;
- * rule.type //=> 'rule'
- * rule.toString() //=> 'a{}'
- */
- var Rule =
- /*#__PURE__*/
- function (_Container) {
- _inheritsLoose(Rule, _Container);
- function Rule(defaults) {
- var _this;
- _this = _Container.call(this, defaults) || this;
- _this.type = 'rule';
- if (!_this.nodes) _this.nodes = [];
- return _this;
- }
- /**
- * An array containing the rule’s individual selectors.
- * Groups of selectors are split at commas.
- *
- * @type {string[]}
- *
- * @example
- * const root = postcss.parse('a, b { }');
- * const rule = root.first;
- *
- * rule.selector //=> 'a, b'
- * rule.selectors //=> ['a', 'b']
- *
- * rule.selectors = ['a', 'strong'];
- * rule.selector //=> 'a, strong'
- */
- _createClass(Rule, [{
- key: "selectors",
- get: function get() {
- return list.comma(this.selector);
- },
- set: function set(values) {
- var match = this.selector ? this.selector.match(/,\s*/) : null;
- var sep = match ? match[0] : "," + this.raw('between', 'beforeOpen');
- this.selector = values.join(sep);
- }
- }, {
- key: "_selector",
- get: function get() {
- warnOnce('Rule#_selector is deprecated. Use Rule#raws.selector');
- return this.raws.selector;
- },
- set: function set(val) {
- warnOnce('Rule#_selector is deprecated. Use Rule#raws.selector');
- this.raws.selector = val;
- }
- /**
- * @memberof Rule#
- * @member {string} selector - the rule’s full selector represented
- * as a string
- *
- * @example
- * const root = postcss.parse('a, b { }');
- * const rule = root.first;
- * rule.selector //=> 'a, b'
- */
- /**
- * @memberof Rule#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `before`: the space symbols before the node. It also stores `*`
- * and `_` symbols before the declaration (IE hack).
- * * `after`: the space symbols after the last child of the node
- * to the end of the node.
- * * `between`: the symbols between the property and value
- * for declarations, selector and `{` for rules, or last parameter
- * and `{` for at-rules.
- * * `semicolon`: contains true if the last child has
- * an (optional) semicolon.
- *
- * PostCSS cleans selectors from comments and extra spaces,
- * but it stores origin content in raws properties.
- * As such, if you don’t change a declaration’s value,
- * PostCSS will use the raw value with comments.
- *
- * @example
- * const root = postcss.parse('a {\n color:black\n}')
- * root.first.first.raws //=> { before: '', between: ' ', after: '\n' }
- */
- }]);
- return Rule;
- }(Container);
- //
- /**
- * Represents a plugin’s warning. It can be created using {@link Node#warn}.
- *
- * @example
- * if ( decl.important ) {
- * decl.warn(result, 'Avoid !important', { word: '!important' });
- * }
- */
- var Warning =
- /*#__PURE__*/
- function () {
- /**
- * @param {string} text - warning message
- * @param {Object} [opts] - warning options
- * @param {Node} opts.node - CSS node that caused the warning
- * @param {string} opts.word - word in CSS source that caused the warning
- * @param {number} opts.index - index in CSS node string that caused
- * the warning
- * @param {string} opts.plugin - name of the plugin that created
- * this warning. {@link Result#warn} fills
- * this property automatically.
- */
- function Warning(text, opts) {
- if (opts === void 0) {
- opts = {};
- }
- /**
- * @member {string} - Type to filter warnings from
- * {@link Result#messages}. Always equal
- * to `"warning"`.
- *
- * @example
- * const nonWarning = result.messages.filter(i => i.type !== 'warning')
- */
- this.type = 'warning';
- /**
- * @member {string} - The warning message.
- *
- * @example
- * warning.text //=> 'Try to avoid !important'
- */
- this.text = text;
- if (opts.node && opts.node.source) {
- var pos = opts.node.positionBy(opts);
- /**
- * @member {number} - Line in the input file
- * with this warning’s source
- *
- * @example
- * warning.line //=> 5
- */
- this.line = pos.line;
- /**
- * @member {number} - Column in the input file
- * with this warning’s source.
- *
- * @example
- * warning.column //=> 6
- */
- this.column = pos.column;
- }
- for (var opt in opts) {
- this[opt] = opts[opt];
- }
- }
- /**
- * Returns a warning position and message.
- *
- * @example
- * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'
- *
- * @return {string} warning position and message
- */
- var _proto = Warning.prototype;
- _proto.toString = function toString() {
- if (this.node) {
- return this.node.error(this.text, {
- plugin: this.plugin,
- index: this.index,
- word: this.word
- }).message;
- } else if (this.plugin) {
- return this.plugin + ": " + this.text;
- } else {
- return this.text;
- }
- }
- /**
- * @memberof Warning#
- * @member {string} plugin - The name of the plugin that created
- * it will fill this property automatically.
- * this warning. When you call {@link Node#warn}
- *
- * @example
- * warning.plugin //=> 'postcss-important'
- */
- /**
- * @memberof Warning#
- * @member {Node} node - Contains the CSS node that caused the warning.
- *
- * @example
- * warning.node.toString() //=> 'color: white !important'
- */
- ;
- return Warning;
- }();
- /**
- * @typedef {object} Message
- * @property {string} type - message type
- * @property {string} plugin - source PostCSS plugin name
- */
- /**
- * Provides the result of the PostCSS transformations.
- *
- * A Result instance is returned by {@link LazyResult#then}
- * or {@link Root#toResult} methods.
- *
- * @example
- * postcss([cssnext]).process(css).then(function (result) {
- * console.log(result.css);
- * });
- *
- * @example
- * var result2 = postcss.parse(css).toResult();
- */
- var Result =
- /*#__PURE__*/
- function () {
- /**
- * @param {Processor} processor - processor used for this transformation.
- * @param {Root} root - Root node after all transformations.
- * @param {processOptions} opts - options from the {@link Processor#process}
- * or {@link Root#toResult}
- */
- function Result(processor, root, opts) {
- /**
- * @member {Processor} - The Processor instance used
- * for this transformation.
- *
- * @example
- * for ( let plugin of result.processor.plugins) {
- * if ( plugin.postcssPlugin === 'postcss-bad' ) {
- * throw 'postcss-good is incompatible with postcss-bad';
- * }
- * });
- */
- this.processor = processor;
- /**
- * @member {Message[]} - Contains messages from plugins
- * (e.g., warnings or custom messages).
- * Each message should have type
- * and plugin properties.
- *
- * @example
- * postcss.plugin('postcss-min-browser', () => {
- * return (root, result) => {
- * var browsers = detectMinBrowsersByCanIUse(root);
- * result.messages.push({
- * type: 'min-browser',
- * plugin: 'postcss-min-browser',
- * browsers: browsers
- * });
- * };
- * });
- */
- this.messages = [];
- /**
- * @member {Root} - Root node after all transformations.
- *
- * @example
- * root.toResult().root == root;
- */
- this.root = root;
- /**
- * @member {processOptions} - Options from the {@link Processor#process}
- * or {@link Root#toResult} call
- * that produced this Result instance.
- *
- * @example
- * root.toResult(opts).opts == opts;
- */
- this.opts = opts;
- /**
- * @member {string} - A CSS string representing of {@link Result#root}.
- *
- * @example
- * postcss.parse('a{}').toResult().css //=> "a{}"
- */
- this.css = undefined;
- /**
- * @member {SourceMapGenerator} - An instance of `SourceMapGenerator`
- * class from the `source-map` library,
- * representing changes
- * to the {@link Result#root} instance.
- *
- * @example
- * result.map.toJSON() //=> { version: 3, file: 'a.css', … }
- *
- * @example
- * if ( result.map ) {
- * fs.writeFileSync(result.opts.to + '.map', result.map.toString());
- * }
- */
- this.map = undefined;
- }
- /**
- * Returns for @{link Result#css} content.
- *
- * @example
- * result + '' === result.css
- *
- * @return {string} string representing of {@link Result#root}
- */
- var _proto = Result.prototype;
- _proto.toString = function toString() {
- return this.css;
- }
- /**
- * Creates an instance of {@link Warning} and adds it
- * to {@link Result#messages}.
- *
- * @param {string} text - warning message
- * @param {Object} [opts] - warning options
- * @param {Node} opts.node - CSS node that caused the warning
- * @param {string} opts.word - word in CSS source that caused the warning
- * @param {number} opts.index - index in CSS node string that caused
- * the warning
- * @param {string} opts.plugin - name of the plugin that created
- * this warning. {@link Result#warn} fills
- * this property automatically.
- *
- * @return {Warning} created warning
- */
- ;
- _proto.warn = function warn(text, opts) {
- if (opts === void 0) {
- opts = {};
- }
- if (!opts.plugin) {
- if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
- opts.plugin = this.lastPlugin.postcssPlugin;
- }
- }
- var warning = new Warning(text, opts);
- this.messages.push(warning);
- return warning;
- }
- /**
- * Returns warnings from plugins. Filters {@link Warning} instances
- * from {@link Result#messages}.
- *
- * @example
- * result.warnings().forEach(warn => {
- * console.warn(warn.toString());
- * });
- *
- * @return {Warning[]} warnings from plugins
- */
- ;
- _proto.warnings = function warnings() {
- return this.messages.filter(function (i) {
- return i.type === 'warning';
- });
- }
- /**
- * An alias for the {@link Result#css} property.
- * Use it with syntaxes that generate non-CSS output.
- * @type {string}
- *
- * @example
- * result.css === result.content;
- */
- ;
- _createClass(Result, [{
- key: "content",
- get: function get() {
- return this.css;
- }
- }]);
- return Result;
- }();
- function isPromise(obj) {
- return typeof obj === 'object' && typeof obj.then === 'function';
- }
- /**
- * @callback onFulfilled
- * @param {Result} result
- */
- /**
- * @callback onRejected
- * @param {Error} error
- */
- /**
- * A Promise proxy for the result of PostCSS transformations.
- *
- * A `LazyResult` instance is returned by {@link Processor#process}.
- *
- * @example
- * const lazy = postcss([cssnext]).process(css);
- */
- var LazyResult =
- /*#__PURE__*/
- function () {
- function LazyResult(processor, css, opts) {
- this.stringified = false;
- this.processed = false;
- var root;
- if (typeof css === 'object' && css.type === 'root') {
- root = css;
- } else if (css instanceof LazyResult || css instanceof Result) {
- root = css.root;
- if (css.map) {
- if (typeof opts.map === 'undefined') opts.map = {};
- if (!opts.map.inline) opts.map.inline = false;
- opts.map.prev = css.map;
- }
- } else {
- var parser = parse;
- if (opts.syntax) parser = opts.syntax.parse;
- if (opts.parser) parser = opts.parser;
- if (parser.parse) parser = parser.parse;
- try {
- root = parser(css, opts);
- } catch (error) {
- this.error = error;
- }
- }
- this.result = new Result(processor, root, opts);
- }
- /**
- * Returns a {@link Processor} instance, which will be used
- * for CSS transformations.
- * @type {Processor}
- */
- var _proto = LazyResult.prototype;
- /**
- * Processes input CSS through synchronous plugins
- * and calls {@link Result#warnings()}.
- *
- * @return {Warning[]} warnings from plugins
- */
- _proto.warnings = function warnings() {
- return this.sync().warnings();
- }
- /**
- * Alias for the {@link LazyResult#css} property.
- *
- * @example
- * lazy + '' === lazy.css;
- *
- * @return {string} output CSS
- */
- ;
- _proto.toString = function toString() {
- return this.css;
- }
- /**
- * Processes input CSS through synchronous and asynchronous plugins
- * and calls `onFulfilled` with a Result instance. If a plugin throws
- * an error, the `onRejected` callback will be executed.
- *
- * It implements standard Promise API.
- *
- * @param {onFulfilled} onFulfilled - callback will be executed
- * when all plugins will finish work
- * @param {onRejected} onRejected - callback will be execited on any error
- *
- * @return {Promise} Promise API to make queue
- *
- * @example
- * postcss([cssnext]).process(css).then(result => {
- * console.log(result.css);
- * });
- */
- ;
- _proto.then = function then(onFulfilled, onRejected) {
- return this.async().then(onFulfilled, onRejected);
- }
- /**
- * Processes input CSS through synchronous and asynchronous plugins
- * and calls onRejected for each error thrown in any plugin.
- *
- * It implements standard Promise API.
- *
- * @param {onRejected} onRejected - callback will be execited on any error
- *
- * @return {Promise} Promise API to make queue
- *
- * @example
- * postcss([cssnext]).process(css).then(result => {
- * console.log(result.css);
- * }).catch(error => {
- * console.error(error);
- * });
- */
- ;
- _proto["catch"] = function _catch(onRejected) {
- return this.async()["catch"](onRejected);
- };
- _proto.handleError = function handleError(error, plugin) {
- try {
- this.error = error;
- if (error.name === 'CssSyntaxError' && !error.plugin) {
- error.plugin = plugin.postcssPlugin;
- error.setMessage();
- } else if (plugin.postcssVersion) {
- var pluginName = plugin.postcssPlugin;
- var pluginVer = plugin.postcssVersion;
- var runtimeVer = this.result.processor.version;
- var a = pluginVer.split('.');
- var b = runtimeVer.split('.');
- if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
- warnOnce("" + ('Your current PostCSS version ' + 'is ') + runtimeVer + ", but " + pluginName + " " + ("uses " + pluginVer + ". Perhaps this is ") + "the source of the error below.");
- }
- }
- } catch (err) {
- if (console && console.error) console.error(err);
- }
- };
- _proto.asyncTick = function asyncTick(resolve, reject) {
- var _this = this;
- if (this.plugin >= this.processor.plugins.length) {
- this.processed = true;
- return resolve();
- }
- try {
- var plugin = this.processor.plugins[this.plugin];
- var promise = this.run(plugin);
- this.plugin += 1;
- if (isPromise(promise)) {
- promise.then(function () {
- _this.asyncTick(resolve, reject);
- })["catch"](function (error) {
- _this.handleError(error, plugin);
- _this.processed = true;
- reject(error);
- });
- } else {
- this.asyncTick(resolve, reject);
- }
- } catch (error) {
- this.processed = true;
- reject(error);
- }
- };
- _proto.async = function async() {
- var _this2 = this;
- if (this.processed) {
- return new Promise(function (resolve, reject) {
- if (_this2.error) {
- reject(_this2.error);
- } else {
- resolve(_this2.stringify());
- }
- });
- }
- if (this.processing) {
- return this.processing;
- }
- this.processing = new Promise(function (resolve, reject) {
- if (_this2.error) return reject(_this2.error);
- _this2.plugin = 0;
- _this2.asyncTick(resolve, reject);
- }).then(function () {
- _this2.processed = true;
- return _this2.stringify();
- });
- return this.processing;
- };
- _proto.sync = function sync() {
- var _this3 = this;
- if (this.processed) return this.result;
- this.processed = true;
- if (this.processing) {
- throw new Error('Use process(css).then(cb) to work with async plugins');
- }
- if (this.error) throw this.error;
- this.result.processor.plugins.forEach(function (plugin) {
- var promise = _this3.run(plugin);
- if (isPromise(promise)) {
- throw new Error('Use process(css).then(cb) to work with async plugins');
- }
- });
- return this.result;
- };
- _proto.run = function run(plugin) {
- this.result.lastPlugin = plugin;
- try {
- return plugin(this.result.root, this.result);
- } catch (error) {
- this.handleError(error, plugin);
- throw error;
- }
- };
- _proto.stringify = function stringify$1() {
- if (this.stringified) return this.result;
- this.stringified = true;
- this.sync();
- var opts = this.result.opts;
- var str = stringify;
- if (opts.syntax) str = opts.syntax.stringify;
- if (opts.stringifier) str = opts.stringifier;
- if (str.stringify) str = str.stringify;
- var result = '';
- str(this.root, function (i) {
- result += i;
- });
- this.result.css = result;
- return this.result;
- };
- _createClass(LazyResult, [{
- key: "processor",
- get: function get() {
- return this.result.processor;
- }
- /**
- * Options from the {@link Processor#process} call.
- * @type {processOptions}
- */
- }, {
- key: "opts",
- get: function get() {
- return this.result.opts;
- }
- /**
- * Processes input CSS through synchronous plugins, converts `Root`
- * to a CSS string and returns {@link Result#css}.
- *
- * This property will only work with synchronous plugins.
- * If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use {@link LazyResult#then}.
- *
- * @type {string}
- * @see Result#css
- */
- }, {
- key: "css",
- get: function get() {
- return this.stringify().css;
- }
- /**
- * An alias for the `css` property. Use it with syntaxes
- * that generate non-CSS output.
- *
- * This property will only work with synchronous plugins.
- * If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use {@link LazyResult#then}.
- *
- * @type {string}
- * @see Result#content
- */
- }, {
- key: "content",
- get: function get() {
- return this.stringify().content;
- }
- /**
- * Processes input CSS through synchronous plugins
- * and returns {@link Result#map}.
- *
- * This property will only work with synchronous plugins.
- * If the processor contains any asynchronous plugins
- * it will throw an error. This is why this method is only
- * for debug purpose, you should always use {@link LazyResult#then}.
- *
- * @type {SourceMapGenerator}
- * @see Result#map
- */
- }, {
- key: "map",
- get: function get() {
- return this.stringify().map;
- }
- /**
- * Processes input CSS through synchronous plugins
- * and returns {@link Result#root}.
- *
- * This property will only work with synchronous plugins. If the processor
- * contains any asynchronous plugins it will throw an error.
- *
- * This is why this method is only for debug purpose,
- * you should always use {@link LazyResult#then}.
- *
- * @type {Root}
- * @see Result#root
- */
- }, {
- key: "root",
- get: function get() {
- return this.sync().root;
- }
- /**
- * Processes input CSS through synchronous plugins
- * and returns {@link Result#messages}.
- *
- * This property will only work with synchronous plugins. If the processor
- * contains any asynchronous plugins it will throw an error.
- *
- * This is why this method is only for debug purpose,
- * you should always use {@link LazyResult#then}.
- *
- * @type {Message[]}
- * @see Result#messages
- */
- }, {
- key: "messages",
- get: function get() {
- return this.sync().messages;
- }
- }]);
- return LazyResult;
- }();
- //
- /**
- * @callback builder
- * @param {string} part - part of generated CSS connected to this node
- * @param {Node} node - AST node
- * @param {"start"|"end"} [type] - node’s part type
- */
- /**
- * @callback parser
- *
- * @param {string|toString} css - string with input CSS or any object
- * with toString() method, like a Buffer
- * @param {processOptions} [opts] - options with only `from` and `map` keys
- *
- * @return {Root} PostCSS AST
- */
- /**
- * @callback stringifier
- *
- * @param {Node} node - start node for stringifing. Usually {@link Root}.
- * @param {builder} builder - function to concatenate CSS from node’s parts
- * or generate string and source map
- *
- * @return {void}
- */
- /**
- * @typedef {object} syntax
- * @property {parser} parse - function to generate AST by string
- * @property {stringifier} stringify - function to generate string by AST
- */
- /**
- * @typedef {object} toString
- * @property {function} toString
- */
- /**
- * @callback pluginFunction
- * @param {Root} root - parsed input CSS
- * @param {Result} result - result to set warnings or check other plugins
- */
- /**
- * @typedef {object} Plugin
- * @property {function} postcss - PostCSS plugin function
- */
- /**
- * @typedef {object} processOptions
- * @property {string} from - the path of the CSS source file.
- * You should always set `from`,
- * because it is used in source map
- * generation and syntax error messages.
- * @property {string} to - the path where you’ll put the output
- * CSS file. You should always set `to`
- * to generate correct source maps.
- * @property {parser} parser - function to generate AST by string
- * @property {stringifier} stringifier - class to generate string by AST
- * @property {syntax} syntax - object with `parse` and `stringify`
- * @property {object} map - source map options
- * @property {boolean} map.inline - does source map should
- * be embedded in the output
- * CSS as a base64-encoded
- * comment
- * @property {string|object|false|function} map.prev - source map content
- * from a previous
- * processing step
- * (for example, Sass).
- * PostCSS will try to find
- * previous map
- * automatically, so you
- * could disable it by
- * `false` value.
- * @property {boolean} map.sourcesContent - does PostCSS should set
- * the origin content to map
- * @property {string|false} map.annotation - does PostCSS should set
- * annotation comment to map
- * @property {string} map.from - override `from` in map’s
- * `sources`
- */
- /**
- * Contains plugins to process CSS. Create one `Processor` instance,
- * initialize its plugins, and then use that instance on numerous CSS files.
- *
- * @example
- * const processor = postcss([autoprefixer, precss]);
- * processor.process(css1).then(result => console.log(result.css));
- * processor.process(css2).then(result => console.log(result.css));
- */
- var Processor =
- /*#__PURE__*/
- function () {
- /**
- * @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS
- * plugins. See {@link Processor#use} for plugin format.
- */
- function Processor(plugins) {
- if (plugins === void 0) {
- plugins = [];
- }
- /**
- * @member {string} - Current PostCSS version.
- *
- * @example
- * if ( result.processor.version.split('.')[0] !== '5' ) {
- * throw new Error('This plugin works only with PostCSS 5');
- * }
- */
- this.version = '5.2.0';
- /**
- * @member {pluginFunction[]} - Plugins added to this processor.
- *
- * @example
- * const processor = postcss([autoprefixer, precss]);
- * processor.plugins.length //=> 2
- */
- this.plugins = this.normalize(plugins);
- }
- /**
- * Adds a plugin to be used as a CSS processor.
- *
- * PostCSS plugin can be in 4 formats:
- * * A plugin created by {@link postcss.plugin} method.
- * * A function. PostCSS will pass the function a @{link Root}
- * as the first argument and current {@link Result} instance
- * as the second.
- * * An object with a `postcss` method. PostCSS will use that method
- * as described in #2.
- * * Another {@link Processor} instance. PostCSS will copy plugins
- * from that instance into this one.
- *
- * Plugins can also be added by passing them as arguments when creating
- * a `postcss` instance (see [`postcss(plugins)`]).
- *
- * Asynchronous plugins should return a `Promise` instance.
- *
- * @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin
- * or {@link Processor}
- * with plugins
- *
- * @example
- * const processor = postcss()
- * .use(autoprefixer)
- * .use(precss);
- *
- * @return {Processes} current processor to make methods chain
- */
- var _proto = Processor.prototype;
- _proto.use = function use(plugin) {
- this.plugins = this.plugins.concat(this.normalize([plugin]));
- return this;
- }
- /**
- * Parses source CSS and returns a {@link LazyResult} Promise proxy.
- * Because some plugins can be asynchronous it doesn’t make
- * any transformations. Transformations will be applied
- * in the {@link LazyResult} methods.
- *
- * @param {string|toString|Result} css - String with input CSS or
- * any object with a `toString()`
- * method, like a Buffer.
- * Optionally, send a {@link Result}
- * instance and the processor will
- * take the {@link Root} from it.
- * @param {processOptions} [opts] - options
- *
- * @return {LazyResult} Promise proxy
- *
- * @example
- * processor.process(css, { from: 'a.css', to: 'a.out.css' })
- * .then(result => {
- * console.log(result.css);
- * });
- */
- ;
- _proto.process = function process(css, opts) {
- if (opts === void 0) {
- opts = {};
- }
- return new LazyResult(this, css, opts);
- };
- _proto.normalize = function normalize(plugins) {
- var normalized = [];
- plugins.forEach(function (i) {
- if (i.postcss) i = i.postcss;
- if (typeof i === 'object' && Array.isArray(i.plugins)) {
- normalized = normalized.concat(i.plugins);
- } else if (typeof i === 'function') {
- normalized.push(i);
- } else {
- throw new Error(i + " is not a PostCSS plugin");
- }
- });
- return normalized;
- };
- return Processor;
- }();
- /**
- * Represents a CSS file and contains all its parsed nodes.
- *
- * @extends Container
- *
- * @example
- * const root = postcss.parse('a{color:black} b{z-index:2}');
- * root.type //=> 'root'
- * root.nodes.length //=> 2
- */
- var Root =
- /*#__PURE__*/
- function (_Container) {
- _inheritsLoose(Root, _Container);
- function Root(defaults) {
- var _this;
- _this = _Container.call(this, defaults) || this;
- _this.type = 'root';
- if (!_this.nodes) _this.nodes = [];
- return _this;
- }
- var _proto = Root.prototype;
- _proto.removeChild = function removeChild(child) {
- child = this.index(child);
- if (child === 0 && this.nodes.length > 1) {
- this.nodes[1].raws.before = this.nodes[child].raws.before;
- }
- return _Container.prototype.removeChild.call(this, child);
- };
- _proto.normalize = function normalize(child, sample, type) {
- var nodes = _Container.prototype.normalize.call(this, child);
- if (sample) {
- if (type === 'prepend') {
- if (this.nodes.length > 1) {
- sample.raws.before = this.nodes[1].raws.before;
- } else {
- delete sample.raws.before;
- }
- } else if (this.first !== sample) {
- nodes.forEach(function (node) {
- node.raws.before = sample.raws.before;
- });
- }
- }
- return nodes;
- }
- /**
- * Returns a {@link Result} instance representing the root’s CSS.
- *
- * @param {processOptions} [opts] - options with only `to` and `map` keys
- *
- * @return {Result} result with current root’s CSS
- *
- * @example
- * const root1 = postcss.parse(css1, { from: 'a.css' });
- * const root2 = postcss.parse(css2, { from: 'b.css' });
- * root1.append(root2);
- * const result = root1.toResult({ to: 'all.css', map: true });
- */
- ;
- _proto.toResult = function toResult(opts) {
- if (opts === void 0) {
- opts = {};
- }
- var lazy = new LazyResult(new Processor(), this, opts);
- return lazy.stringify();
- };
- _proto.remove = function remove(child) {
- warnOnce('Root#remove is deprecated. Use Root#removeChild');
- this.removeChild(child);
- };
- _proto.prevMap = function prevMap() {
- warnOnce('Root#prevMap is deprecated. Use Root#source.input.map');
- return this.source.input.map;
- }
- /**
- * @memberof Root#
- * @member {object} raws - Information to generate byte-to-byte equal
- * node string as it was in the origin input.
- *
- * Every parser saves its own properties,
- * but the default CSS parser uses:
- *
- * * `after`: the space symbols after the last child to the end of file.
- * * `semicolon`: is the last child has an (optional) semicolon.
- *
- * @example
- * postcss.parse('a {}\n').raws //=> { after: '\n' }
- * postcss.parse('a {}').raws //=> { after: '' }
- */
- ;
- return Root;
- }(Container);
- var sequence = 0;
- /**
- * @typedef {object} filePosition
- * @property {string} file - path to file
- * @property {number} line - source line in file
- * @property {number} column - source column in file
- */
- /**
- * Represents the source CSS.
- *
- * @example
- * const root = postcss.parse(css, { from: file });
- * const input = root.source.input;
- */
- var Input =
- /*#__PURE__*/
- function () {
- /**
- * @param {string} css - input CSS source
- * @param {object} [opts] - {@link Processor#process} options
- */
- function Input(css, opts) {
- if (opts === void 0) {
- opts = {};
- }
- /**
- * @member {string} - input CSS source
- *
- * @example
- * const input = postcss.parse('a{}', { from: file }).input;
- * input.css //=> "a{}";
- */
- this.css = css.toString();
- if (this.css[0] === "\uFEFF" || this.css[0] === "\uFFFE") {
- this.css = this.css.slice(1);
- }
- if (opts.from) {
- if (/^\w+:\/\//.test(opts.from)) {
- /**
- * @member {string} - The absolute path to the CSS source file
- * defined with the `from` option.
- *
- * @example
- * const root = postcss.parse(css, { from: 'a.css' });
- * root.source.input.file //=> '/home/ai/a.css'
- */
- this.file = opts.from;
- } else {
- this.file = path.resolve(opts.from);
- }
- }
- /*
- let map = new PreviousMap(this.css, opts);
- if ( map.text ) {
- /!**
- * @member {PreviousMap} - The input source map passed from
- * a compilation step before PostCSS
- * (for example, from Sass compiler).
- *
- * @example
- * root.source.input.map.consumer().sources //=> ['a.sass']
- *!/
- this.map = map;
- let file = map.consumer().file;
- if ( !this.file && file ) this.file = this.mapResolve(file);
- }
- */
- if (!this.file) {
- sequence += 1;
- /**
- * @member {string} - The unique ID of the CSS source. It will be
- * created if `from` option is not provided
- * (because PostCSS does not know the file path).
- *
- * @example
- * const root = postcss.parse(css);
- * root.source.input.file //=> undefined
- * root.source.input.id //=> "<input css 1>"
- */
- this.id = "<input css " + sequence + ">";
- }
- if (this.map) this.map.file = this.from;
- }
- var _proto = Input.prototype;
- _proto.error = function error(message, line, column, opts) {
- if (opts === void 0) {
- opts = {};
- }
- var result;
- var origin = this.origin(line, column);
- if (origin) {
- result = new CssSyntaxError(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);
- } else {
- result = new CssSyntaxError(message, line, column, this.css, this.file, opts.plugin);
- }
- result.input = {
- line: line,
- column: column,
- source: this.css
- };
- if (this.file) result.input.file = this.file;
- return result;
- }
- /**
- * Reads the input source map and returns a symbol position
- * in the input source (e.g., in a Sass file that was compiled
- * to CSS before being passed to PostCSS).
- *
- * @param {number} line - line in input CSS
- * @param {number} column - column in input CSS
- *
- * @return {filePosition} position in input source
- *
- * @example
- * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
- */
- ;
- _proto.origin = function origin(line, column) {
- if (!this.map) return false;
- var consumer = this.map.consumer();
- var from = consumer.originalPositionFor({
- line: line,
- column: column
- });
- if (!from.source) return false;
- var result = {
- file: this.mapResolve(from.source),
- line: from.line,
- column: from.column
- };
- var source = consumer.sourceContentFor(from.source);
- if (source) result.source = source;
- return result;
- };
- _proto.mapResolve = function mapResolve(file) {
- if (/^\w+:\/\//.test(file)) {
- return file;
- } else {
- return path.resolve(this.map.consumer().sourceRoot || '.', file);
- }
- }
- /**
- * The CSS source identifier. Contains {@link Input#file} if the user
- * set the `from` option, or {@link Input#id} if they did not.
- * @type {string}
- *
- * @example
- * const root = postcss.parse(css, { from: 'a.css' });
- * root.source.input.from //=> "/home/ai/a.css"
- *
- * const root = postcss.parse(css);
- * root.source.input.from //=> "<input css 1>"
- */
- ;
- _createClass(Input, [{
- key: "from",
- get: function get() {
- return this.file || this.id;
- }
- }]);
- return Input;
- }();
- var SafeParser =
- /*#__PURE__*/
- function (_Parser) {
- _inheritsLoose(SafeParser, _Parser);
- function SafeParser() {
- return _Parser.apply(this, arguments) || this;
- }
- var _proto = SafeParser.prototype;
- _proto.tokenize = function tokenize$1() {
- this.tokens = tokenize(this.input, {
- ignoreErrors: true
- });
- };
- _proto.comment = function comment(token) {
- var node = new Comment();
- this.init(node, token[2], token[3]);
- node.source.end = {
- line: token[4],
- column: token[5]
- };
- var text = token[1].slice(2);
- if (text.slice(-2) === '*/') text = text.slice(0, -2);
- if (/^\s*$/.test(text)) {
- node.text = '';
- node.raws.left = text;
- node.raws.right = '';
- } else {
- var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
- node.text = match[2];
- node.raws.left = match[1];
- node.raws.right = match[3];
- }
- };
- _proto.unclosedBracket = function unclosedBracket() {};
- _proto.unknownWord = function unknownWord(start) {
- var buffer = this.tokens.slice(start, this.pos + 1);
- this.spaces += buffer.map(function (i) {
- return i[1];
- }).join('');
- };
- _proto.unexpectedClose = function unexpectedClose() {
- this.current.raws.after += '}';
- };
- _proto.doubleColon = function doubleColon() {};
- _proto.unnamedAtrule = function unnamedAtrule(node) {
- node.name = '';
- };
- _proto.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) {
- var colon = this.colon(tokens);
- if (colon === false) return;
- var split;
- for (split = colon - 1; split >= 0; split--) {
- if (tokens[split][0] === 'word') break;
- }
- for (split -= 1; split >= 0; split--) {
- if (tokens[split][0] !== 'space') {
- split += 1;
- break;
- }
- }
- var other = tokens.splice(split, tokens.length - split);
- this.decl(other);
- };
- _proto.checkMissedSemicolon = function checkMissedSemicolon() {};
- _proto.endFile = function endFile() {
- if (this.current.nodes && this.current.nodes.length) {
- this.current.raws.semicolon = this.semicolon;
- }
- this.current.raws.after = (this.current.raws.after || '') + this.spaces;
- while (this.current.parent) {
- this.current = this.current.parent;
- this.current.raws.after = '';
- }
- };
- return SafeParser;
- }(Parser);
- //
- function safeParse(css, opts) {
- var input = new Input(css, opts);
- var parser = new SafeParser(input);
- parser.tokenize();
- parser.loop();
- return parser.root;
- }
- //
- var generated = {};
- /*
- InlineStyle takes arbitrary CSS and generates a flat object
- */
- var _InlineStyle = (function (styleSheet) {
- var InlineStyle =
- /*#__PURE__*/
- function () {
- function InlineStyle(rules) {
- this.rules = rules;
- }
- var _proto = InlineStyle.prototype;
- _proto.generateStyleObject = function generateStyleObject(executionContext) {
- var flatCSS = flatten(this.rules, executionContext).join('');
- var hash = generateComponentId(flatCSS);
- if (!generated[hash]) {
- var root = safeParse(flatCSS);
- var declPairs = [];
- root.each(function (node) {
- if (node.type === 'decl') {
- declPairs.push([node.prop, node.value]);
- } else if (process.env.NODE_ENV !== 'production' && node.type !== 'comment') {
- /* eslint-disable no-console */
- console.warn("Node of type " + node.type + " not supported as an inline style");
- }
- }); // RN currently does not support differing values for the corner radii of Image
- // components (but does for View). It is almost impossible to tell whether we'll have
- // support, so we'll just disable multiple values here.
- // https://github.com/styled-components/css-to-react-native/issues/11
- var styleObject = transformDeclPairs(declPairs, ['borderRadius', 'borderWidth', 'borderColor', 'borderStyle']);
- var styles = styleSheet.create({
- generated: styleObject
- });
- generated[hash] = styles.generated;
- }
- return generated[hash];
- };
- return InlineStyle;
- }();
- return InlineStyle;
- });
- /* eslint-disable */
- /**
- mixin-deep; https://github.com/jonschlinkert/mixin-deep
- Inlined such that it will be consistently transpiled to an IE-compatible syntax.
- The MIT License (MIT)
- Copyright (c) 2014-present, Jon Schlinkert.
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
- */
- var isObject = function isObject(val) {
- return typeof val === 'function' || typeof val === 'object' && val !== null && !Array.isArray(val);
- };
- var isValidKey = function isValidKey(key) {
- return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';
- };
- function mixin(target, val, key) {
- var obj = target[key];
- if (isObject(val) && isObject(obj)) {
- mixinDeep(obj, val);
- } else {
- target[key] = val;
- }
- }
- function mixinDeep(target) {
- for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- rest[_key - 1] = arguments[_key];
- }
- for (var _i = 0, _rest = rest; _i < _rest.length; _i++) {
- var obj = _rest[_i];
- if (isObject(obj)) {
- for (var key in obj) {
- if (isValidKey(key)) {
- mixin(target, obj[key], key);
- }
- }
- }
- }
- return target;
- }
- //
- var determineTheme = (function (props, providedTheme, defaultProps) {
- if (defaultProps === void 0) {
- defaultProps = EMPTY_OBJECT;
- }
- return props.theme !== defaultProps.theme && props.theme || providedTheme || defaultProps.theme;
- });
- //
- function isTag(target) {
- return typeof target === 'string' && (process.env.NODE_ENV !== 'production' ? target.charAt(0) === target.charAt(0).toLowerCase() : true);
- }
- //
- function generateDisplayName(target) {
- // $FlowFixMe
- return isTag(target) ? "styled." + target : "Styled(" + getComponentName(target) + ")";
- }
- var ThemeContext = React__default.createContext();
- var ThemeConsumer = ThemeContext.Consumer;
- function mergeTheme(theme, outerTheme) {
- if (!theme) {
- return throwStyledComponentsError(14);
- }
- if (isFunction(theme)) {
- var mergedTheme = theme(outerTheme);
- if (process.env.NODE_ENV !== 'production' && (mergedTheme === null || Array.isArray(mergedTheme) || typeof mergedTheme !== 'object')) {
- return throwStyledComponentsError(7);
- }
- return mergedTheme;
- }
- if (Array.isArray(theme) || typeof theme !== 'object') {
- return throwStyledComponentsError(8);
- }
- return outerTheme ? _extends({}, outerTheme, {}, theme) : theme;
- }
- /**
- * Provide a theme to an entire react component tree via context
- */
- function ThemeProvider(props) {
- var outerTheme = React.useContext(ThemeContext);
- var themeContext = React.useMemo(function () {
- return mergeTheme(props.theme, outerTheme);
- }, [props.theme, outerTheme]);
- if (!props.children) {
- return null;
- }
- return React__default.createElement(ThemeContext.Provider, {
- value: themeContext
- }, props.children);
- }
- // if the user makes use of ThemeProvider or StyleSheetManager things will break.
- var StyledNativeComponent =
- /*#__PURE__*/
- function (_Component) {
- _inheritsLoose(StyledNativeComponent, _Component);
- function StyledNativeComponent() {
- var _this;
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
- args[_key] = arguments[_key];
- }
- _this = _Component.call.apply(_Component, [this].concat(args)) || this;
- _this.attrs = {};
- return _this;
- }
- var _proto = StyledNativeComponent.prototype;
- _proto.render = function render() {
- var _this2 = this;
- return React__default.createElement(ThemeConsumer, null, function (theme) {
- var _this2$props = _this2.props,
- renderAs = _this2$props.as,
- forwardedComponent = _this2$props.forwardedComponent,
- forwardedAs = _this2$props.forwardedAs,
- forwardedRef = _this2$props.forwardedRef,
- _this2$props$style = _this2$props.style,
- style = _this2$props$style === void 0 ? [] : _this2$props$style,
- props = _objectWithoutPropertiesLoose(_this2$props, ["as", "forwardedComponent", "forwardedAs", "forwardedRef", "style"]);
- var defaultProps = forwardedComponent.defaultProps,
- target = forwardedComponent.target;
- var generatedStyles = _this2.generateAndInjectStyles(determineTheme(_this2.props, theme, defaultProps) || EMPTY_OBJECT, _this2.props);
- var propsForElement = _extends({}, props, {}, _this2.attrs, {
- style: [generatedStyles].concat(style)
- });
- if (forwardedRef) propsForElement.ref = forwardedRef;
- if (forwardedAs) propsForElement.as = forwardedAs;
- return React.createElement(renderAs || target, propsForElement);
- });
- };
- _proto.buildExecutionContext = function buildExecutionContext(theme, props, attrs) {
- var _this3 = this;
- var context = _extends({}, props, {
- theme: theme
- });
- if (!attrs.length) return context;
- this.attrs = {};
- attrs.forEach(function (attrDef) {
- var resolvedAttrDef = attrDef;
- var attr;
- var key;
- if (isFunction(resolvedAttrDef)) {
- resolvedAttrDef = resolvedAttrDef(context);
- }
- /* eslint-disable guard-for-in */
- for (key in resolvedAttrDef) {
- attr = resolvedAttrDef[key];
- _this3.attrs[key] = attr;
- context[key] = attr;
- }
- /* eslint-enable */
- });
- return context;
- };
- _proto.generateAndInjectStyles = function generateAndInjectStyles(theme, props) {
- var inlineStyle = props.forwardedComponent.inlineStyle;
- var executionContext = this.buildExecutionContext(theme, props, props.forwardedComponent.attrs);
- return inlineStyle.generateStyleObject(executionContext);
- };
- _proto.setNativeProps = function setNativeProps(nativeProps) {
- if (this.root !== undefined) {
- // $FlowFixMe
- this.root.setNativeProps(nativeProps);
- } else if (process.env.NODE_ENV !== 'production') {
- // eslint-disable-next-line no-console
- console.warn('setNativeProps was called on a Styled Component wrapping a stateless functional component.');
- }
- };
- return StyledNativeComponent;
- }(React.Component);
- var _StyledNativeComponent = (function (InlineStyle) {
- var createStyledNativeComponent = function createStyledNativeComponent(target, options, rules) {
- var _options$attrs = options.attrs,
- attrs = _options$attrs === void 0 ? EMPTY_ARRAY : _options$attrs,
- _options$displayName = options.displayName,
- displayName = _options$displayName === void 0 ? generateDisplayName(target) : _options$displayName,
- _options$ParentCompon = options.ParentComponent,
- ParentComponent = _options$ParentCompon === void 0 ? StyledNativeComponent : _options$ParentCompon;
- var isClass = !isTag(target);
- var isTargetStyledComp = isStyledComponent(target); // $FlowFixMe
- var WrappedStyledNativeComponent = React__default.forwardRef(function (props, ref) {
- return React__default.createElement(ParentComponent, _extends({}, props, {
- forwardedComponent: WrappedStyledNativeComponent,
- forwardedRef: ref
- }));
- });
- var finalAttrs = // $FlowFixMe
- isTargetStyledComp && target.attrs ? Array.prototype.concat(target.attrs, attrs).filter(Boolean) : attrs;
- /**
- * forwardRef creates a new interim component, which we'll take advantage of
- * instead of extending ParentComponent to create _another_ interim class
- */
- // $FlowFixMe
- WrappedStyledNativeComponent.attrs = finalAttrs;
- WrappedStyledNativeComponent.displayName = displayName; // $FlowFixMe
- WrappedStyledNativeComponent.inlineStyle = new InlineStyle( // $FlowFixMe
- isTargetStyledComp ? target.inlineStyle.rules.concat(rules) : rules); // $FlowFixMe
- WrappedStyledNativeComponent.styledComponentId = 'StyledNativeComponent'; // $FlowFixMe
- WrappedStyledNativeComponent.target = isTargetStyledComp ? // $FlowFixMe
- target.target : target; // $FlowFixMe
- WrappedStyledNativeComponent.withComponent = function withComponent(tag) {
- var _ = options.displayName,
- __ = options.componentId,
- optionsToCopy = _objectWithoutPropertiesLoose(options, ["displayName", "componentId"]);
- var newOptions = _extends({}, optionsToCopy, {
- attrs: finalAttrs,
- ParentComponent: ParentComponent
- });
- return createStyledNativeComponent(tag, newOptions, rules);
- }; // $FlowFixMe
- Object.defineProperty(WrappedStyledNativeComponent, 'defaultProps', {
- get: function get() {
- return this._foldedDefaultProps;
- },
- set: function set(obj) {
- // $FlowFixMe
- this._foldedDefaultProps = isTargetStyledComp ? mixinDeep({}, target.defaultProps, obj) : obj;
- }
- });
- if (isClass) {
- hoist(WrappedStyledNativeComponent, target, {
- // all SC-specific things should not be hoisted
- attrs: true,
- displayName: true,
- inlineStyle: true,
- styledComponentId: true,
- target: true,
- withComponent: true
- });
- }
- return WrappedStyledNativeComponent;
- };
- return createStyledNativeComponent;
- });
- //
- var interleave = (function (strings, interpolations) {
- var result = [strings[0]];
- for (var i = 0, len = interpolations.length; i < len; i += 1) {
- result.push(interpolations[i], strings[i + 1]);
- }
- return result;
- });
- //
- function css(styles) {
- for (var _len = arguments.length, interpolations = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- interpolations[_key - 1] = arguments[_key];
- }
- if (isFunction(styles) || isPlainObject(styles)) {
- // $FlowFixMe
- return flatten(interleave(EMPTY_ARRAY, [styles].concat(interpolations)));
- }
- if (interpolations.length === 0 && styles.length === 1 && typeof styles[0] === "string") {
- // $FlowFixMe
- return styles;
- } // $FlowFixMe
- return flatten(interleave(styles, interpolations));
- }
- function constructWithOptions(componentConstructor, tag, options) {
- if (options === void 0) {
- options = EMPTY_OBJECT;
- }
- if (!reactIs.isValidElementType(tag)) {
- return throwStyledComponentsError(1, String(tag));
- }
- /* This is callable directly as a template function */
- // $FlowFixMe: Not typed to avoid destructuring arguments
- var templateFunction = function templateFunction() {
- return componentConstructor(tag, options, css.apply(void 0, arguments));
- };
- /* If config methods are called, wrap up a new template function and merge options */
- templateFunction.withConfig = function (config) {
- return constructWithOptions(componentConstructor, tag, _extends({}, options, {}, config));
- };
- /* Modify/inject new props at runtime */
- templateFunction.attrs = function (attrs) {
- return constructWithOptions(componentConstructor, tag, _extends({}, options, {
- attrs: Array.prototype.concat(options.attrs, attrs).filter(Boolean)
- }));
- };
- return templateFunction;
- }
- // export default <Config: { theme?: any }, Instance>(
- // Component: AbstractComponent<Config, Instance>
- // ): AbstractComponent<$Diff<Config, { theme?: any }> & { theme?: any }, Instance>
- //
- // but the old build system tooling doesn't support the syntax
- var withTheme = (function (Component) {
- // $FlowFixMe This should be React.forwardRef<Config, Instance>
- var WithTheme = React__default.forwardRef(function (props, ref) {
- var theme = React.useContext(ThemeContext); // $FlowFixMe defaultProps isn't declared so it can be inferrable
- var defaultProps = Component.defaultProps;
- var themeProp = determineTheme(props, theme, defaultProps);
- if (process.env.NODE_ENV !== 'production' && themeProp === undefined) {
- // eslint-disable-next-line no-console
- console.warn("[withTheme] You are not using a ThemeProvider nor passing a theme prop or a theme in defaultProps in component class \"" + getComponentName(Component) + "\"");
- }
- return React__default.createElement(Component, _extends({}, props, {
- theme: themeProp,
- ref: ref
- }));
- });
- hoist(WithTheme, Component);
- WithTheme.displayName = "WithTheme(" + getComponentName(Component) + ")";
- return WithTheme;
- });
- //
- var InlineStyle = _InlineStyle(reactPrimitives.StyleSheet);
- var StyledNativeComponent$1 = _StyledNativeComponent(InlineStyle);
- var styled = function styled(tag) {
- return constructWithOptions(StyledNativeComponent$1, tag);
- };
- /* React native lazy-requires each of these modules for some reason, so let's
- * assume it's for a good reason and not eagerly load them all */
- var aliases = 'Image Text Touchable View ';
- /* Define a getter for each alias which simply gets the reactNative component
- * and passes it to styled */
- aliases.split(/\s+/m).forEach(function (alias) {
- return Object.defineProperty(styled, alias, {
- enumerable: true,
- configurable: false,
- get: function get() {
- return styled(reactPrimitives[alias]);
- }
- });
- });
- exports.ThemeConsumer = ThemeConsumer;
- exports.ThemeContext = ThemeContext;
- exports.ThemeProvider = ThemeProvider;
- exports.css = css;
- exports.default = styled;
- exports.isStyledComponent = isStyledComponent;
- exports.withTheme = withTheme;
- //# sourceMappingURL=styled-components-primitives.cjs.js.map
|