+
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
+
+***
+
+**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
+
+{{< highlight html >}}
+.emoji {
+font-family: Apple Color Emoji,Segoe UI Emoji,NotoColorEmoji,Segoe UI Symbol,Android Emoji,EmojiSymbols;
+}
+{{< /highlight >}}
+
+{{< css.inline >}}
+
+{{< /css.inline >}}
diff --git a/exampleSite/content/posts/kookaburra/featured.jpg b/exampleSite/content/posts/kookaburra/featured.jpg
new file mode 100644
index 0000000..415d21f
Binary files /dev/null and b/exampleSite/content/posts/kookaburra/featured.jpg differ
diff --git a/exampleSite/content/posts/kookaburra/index.md b/exampleSite/content/posts/kookaburra/index.md
new file mode 100644
index 0000000..c1e1609
--- /dev/null
+++ b/exampleSite/content/posts/kookaburra/index.md
@@ -0,0 +1,34 @@
+---
+date: 2020-01-03
+title: "Great Brown Kingfisher"
+tags:
+- New South Wales
+- Large birds
+---
+
+{{< figure
+ src="featured.jpg"
+ caption="The Great Brown Kingfisher"
+ attr="-- Project Gutenberg"
+ attrlink="http://www.gutenberg.org/files/60302/60302-h/60302-h.htm"
+>}}
+
+The _Dacelo gigantea_ is a bird with which every resident and traveller in New South Wales is more or less familiar, for independently of its large size, which in itself would tend to attract attention, its voice is so extraordinary as to be unlike that of any other living creature. In its disposition it is by no means shy, and when any new objects are presented to its notice, such as a party traversing the bush or pitching their tent in the vicinity of its retreat, it becomes very prying and inquisitive, often perching on the dead branch of some neighbouring tree, and watching with the greatest curiosity the kindling of the fire and the preparation of the meal; its presence, however, owing to the quietude with which it passes through the forest, and the almost noiseless manner in which it settles, is seldom detected until it emits its extraordinary gurgling, laughing note, which generally calls forth some exclamation according with the temper of the hearer, such as “There is our old friend the Laughing Jackass,” or an epithet of a less friendly character: not unfrequently does its life pay the penalty of its temerity; for if, as is often the case, the traveller’s larder be ill-provided and his appetite keen, but a few minutes elapse before it is roasting over the fire it was lately surveying with so much curiosity. So remarkable are the sounds emitted by the bird that they have been noted by nearly every writer on New South Wales and its productions. Mr. Caley states that its “loud noise, somewhat like laughing, may be heard at a considerable distance, from which circumstance, and its uncouth appearance, it probably received the extraordinary appellation given to it by the settlers on their first arrival in the colony.” Captain Sturt says, “Its cry, which resembles a chorus of wild spirits, is apt to startle the traveller who may be in jeopardy, as if laughing and mocking at his misfortune;” and Mr. Bennett, in his ‘Wanderings,’ says, “Its peculiar gurgling laugh, commencing in a low and gradually rising to a high and loud tone, is often heard in all parts of the colony; the deafening noise being poured forth while the bird remains perched upon a neighbouring tree; it rises with the dawn, when the woods re-echo with its gurgling laugh; at sunset it is again heard; and as that glorious orb sinks in the west, a last ‘good night’ is given in its peculiar tones to all within hearing.”
+
+The Great Brown Kingfisher does not inhabit Van Diemen’s Land, nor has it yet been met with in Western Australia; it may be said to be almost solely confined to that portion of Australia lying between Spencer’s Gulf and Moreton Bay, the south-eastern corner, as it were, of the continent.[^location] Unlike most other species, it frequents every variety of situation; the luxuriant brushes stretching along the coast, the more thinly-timbered forest, the belts of trees studding the parched plains and the brushes of the higher ranges being alike favoured with its presence; over all these localities it is rather thinly dispersed being nowhere very numerous.
+
+[^location]: The plate in the Pl. Enl., quoted above, has been considered by all previous writers to have reference to this bird, and while I coincide in this opinion, I think that some mistake must have arisen as to the locality, and that it never visits New Guinea nor even the northern coast of Australia, where its place is supplied by the Dacelo cervina and D. Leachii.
+
+I believe that this bird seldom, if ever, drinks; consequently the most arid plains are as suitable to its habits as the shrouded river sides and the flat brushes near the coast.
+
+Its food, which is of a mixed character, consists exclusively of animal substances; reptiles, insects and crabs, however, appear to be its favourite diet, upon which it is destined by nature to subsist: it devours lizards with avidity, and it is not an unfrequent sight to see it bearing off a snake in its bill to be eaten at leisure; it also preys on small mammalia.[^the-rat] It breeds during the months of August and September, and generally selects a hole in a large gum-tree for the purpose; making no nest, but depositing its beautiful pearl-white eggs, which are one inch and nine lines long by one inch and five lines broad, on the decomposed wood at the bottom of the hole. When there are young ones in it, it defends its breeding-place with great courage and daring, darting down upon any intruder who may attempt to ascend the tree, and inflicting severe and dangerous blows with its pointed bill.
+
+[^the-rat]: I recollect shooting a Great Brown Kingfisher in South Australia in order to secure a fine rat I saw hanging from its bill, and which proved to be a rare species inhabiting the plains of that part of the country.
+
+The sexes present so little difference in the colouring of their plumage, that they are scarcely distinguishable from each other; neither do the young at a month old exhibit any great variation from the adult, the only difference being that the markings are somewhat darker and the brown more generally diffused.
+
+It bears confinement remarkably well, and is one of the most amusing birds for the aviary with which I am acquainted: examples have been brought alive to England; one lived for several years in the Gardens of the Zoological Society of London, and at the moment I am writing (April 1843) a fine individual brought from New South Wales by Mr. Yaldwyn, is now living at his seat at Blackdown in Sussex, where it attracts the attention of every one by its singular actions and extraordinary notes, which are poured forth as freely as in its native wilds.
+
+Forehead brown, each feather with a stripe of blackish brown down the centre; crown of the head, lores, ear-coverts, and a broad band passing round the occiput blackish brown; space between the crown of the head and the band encircling the occiput, and the back of the neck buff, crossed by fine irregular lines of dark brown; back and wings brownish black; the wing-coverts and rump tipped with verditer green; primaries white at the base, black for the remainder of their length, and stained with green on their outer margins immediately behind the white; upper tail-coverts blackish brown, crossed by several broad irregular bands of rusty red; tail brownish black, tipped with white, the white increasing in extent as the feathers recede from the centre; the central feathers crossed near the tip with rusty red; the lateral feathers with brownish black, the bands being very narrow near the tip, and gradually increasing in breadth as they approach the base, where the white interspaces also become tinged with rusty red; under surface pale buffy white, crossed by fine irregular freckled markings of dark brown; upper mandible brownish black; under mandible pale buff; feet olive; irides dark brown; eyelash olive-brown.
+
+The figures represent a male and two young of the natural size.
diff --git a/exampleSite/content/posts/leaches-kingfisher/featured-i078.jpg b/exampleSite/content/posts/leaches-kingfisher/featured-i078.jpg
new file mode 100644
index 0000000..484f871
Binary files /dev/null and b/exampleSite/content/posts/leaches-kingfisher/featured-i078.jpg differ
diff --git a/exampleSite/content/posts/leaches-kingfisher/index.md b/exampleSite/content/posts/leaches-kingfisher/index.md
new file mode 100644
index 0000000..11dc02c
--- /dev/null
+++ b/exampleSite/content/posts/leaches-kingfisher/index.md
@@ -0,0 +1,32 @@
+---
+date: 2020-01-07
+title: "Leach's Kingfisher"
+tags:
+- New South Wales
+- South Australia
+- Small birds
+---
+
+Specimens of this fine Kingsfisher are contained in the British Museum, the Linnean Society, and my own collections, all of which were procured on the north-east coast of Australia, where it evidently replaces the Dacelo gigantea of New South Wales and South Australia.
+
+{{< figure
+ src="featured-i078.jpg"
+ class="smaller"
+ caption="Leach's Kingfisher"
+ attr="-- Project Gutenberg"
+ attrlink="http://www.gutenberg.org/files/60302/60302-h/60302-h.htm"
+>}}
+
+The specimen in the Linnean Society’s museum was presented by Dr. Brown[^1], who procured it in Keppel Bay on the east coast; and it was subsequently seen at Shoalwater Bay[^2] and Broad Sound on the same coast; my own specimens were obtained at Cape York, the north-eastern extremity of Australia.
+
+[^1]: Here's an example of a footnote that's been converted to a margin-note on sufficiently wide screens. They align to the paragraph that they are referenced in.
+
+[^2]: If you use a lot of footnotes close together, they are still spaced nicely and retain their distance from each other.
+
+The habits, actions, food, and indeed the whole of the economy, are so precisely like those of the Dacelo gigantea that a separate description of them is entirely unnecessary.
+
+The male has the head and back of the neck striated with brown and white; sides of the neck and under surface white, crossed with very narrow irregular markings of brown, these markings becoming much broader and conspicuous on the under surface of the shoulder; back brownish black; wing-coverts and rump shining azure-blue; wings deep blue; primaries white at the base, black on their inner webs and blue on the outer; tail rich deep blue, all but the two centre feathers irregularly barred near the extremity and largely tipped with white; upper mandible brownish black, under mandible pale buff; irides dark brown; feet olive.
+
+The female differs but little from the male in the colouring of the plumage, except that the tail-feathers, instead of being of a rich blue barred and tipped with white, are of a light chestnut-brown conspicuously barred with bluish black.
+
+The Plate represents the two sexes about the natural size.
diff --git a/exampleSite/content/posts/magpie/featured-i170.jpg b/exampleSite/content/posts/magpie/featured-i170.jpg
new file mode 100644
index 0000000..462d87d
Binary files /dev/null and b/exampleSite/content/posts/magpie/featured-i170.jpg differ
diff --git a/exampleSite/content/posts/magpie/index.md b/exampleSite/content/posts/magpie/index.md
new file mode 100644
index 0000000..083d025
--- /dev/null
+++ b/exampleSite/content/posts/magpie/index.md
@@ -0,0 +1,34 @@
+---
+date: 2020-01-20
+title: "Pied Crow Shrike"
+tags:
+- New South Wales
+- Large Birds
+draft: true
+disableMarginNotes: true
+---
+
+_Editor's note_: This page is marked as a draft, which is why everything is orange and stripey.
+
+{{< figure
+ src="featured-i170.jpg"
+ caption="The Pied Crow-Shrike"
+ attr="-- Project Gutenberg"
+ attrlink="http://www.gutenberg.org/files/60302/60302-h/60302-h.htm"
+>}}
+
+This species was originally described and figured in White’s ‘Voyage to New South Wales’: it is consequently the oldest and most familiarly known member of the group to which it belongs. It is very generally distributed over the colony of New South Wales, inhabiting alike the brushes near the coast, those of the mountain ranges, and also the forests of Eucalypti which clothe the plains and more open country. As a great part of its food consists of seeds, berries and fruits, it is more arboreal in its habits than some of the other species of its group, whose structure better adapts them for progression on the ground, and whose food principally consists of insects and their larvæ. The habitat of the present bird appears to be confined to the south-eastern portions of the continent, where, as is the case with all birds whose range is so limited, it is a stationary species, merely moving from one district to another according to the season; at one time being more numerous on the open coast, and at another among the brushes, as each may offer it a greater variety or more abundant supply of food: the hilly portions of the country intersected with deep ravines are, however, decidedly its most congenial localities. Like the other members of the genus it is mostly seen in small companies, varying from four to six in number, seldom either singly or in pairs: I am not, however, inclined to consider them as gregarious birds in the strict sense of the word, believing as I do that each of these small companies is composed of a pair and their progeny, which appear to keep together from the birth of the latter until the natural impulse for pairing prompts them to separate.[^unimportant]
+
+[^unimportant]: Here's a footnote I added for no good reason, except to demonstrate that you can turn off margin notes on a per-article basis.
+
+Their flight is very different from that of the Crow, (which they much resemble in outward appearance) being much less protracted, and never of an elevated character; its utmost extent is from one part of the forest to another, or across a gully, in effecting which they sometimes pass over the tops of the trees, while at others they accomplish the distance by flitting from tree to tree. It is during flight that the markings of this bird are displayed to the greatest advantage, the strong contrast of its colours then rendering it a conspicuous object in the bush: while on the wing also it frequently causes the woods to ring with its peculiar noisy cry, by which its presence is often indicated when otherwise it would not be seen. On the ground it hops over the surface with the greatest facility.
+
+The nest, which is usually constructed on the branches of low trees, sometimes even on those of the Casuarinæ, is of a large size, round, open, and cup-shaped, built of sticks and lined with moss and grasses; the eggs, which I was not so fortunate as to procure, are generally three or four in number.
+
+The flesh of this species is frequently eaten by the colonists, and is by some considered a delicacy.
+
+Of all the species of this singular and well-defined genus, the present, although not the largest in stature, is by far the handsomest, its markings being more clearly defined and the tints of its plumage more rich and contrasted than those of any of its congeners, the black being as deep as jet, and the white pure and unspotted; it differs also from all its allies yet discovered in having the basal half of the primaries and the basal half and the tips of the tail-feathers together with those portions of the shafts pure white.
+
+The plumage of both sexes at all ages is so precisely similar, that by dissection alone can we distinguish the male from his mate, or the young from the adult; the female is, however, always a trifle less in all her admeasurements, and the young birds have the corners of the mouth more fleshy and of a brighter yellow than the adults.
+
+All the plumage fine bluish black with the exception of the basal half of the primaries, the basal half and the tips of the tail-feathers, including those portions of their shafts and the under tail-coverts which are snow-white; irides beautiful yellow; bill and feet black.
diff --git a/exampleSite/content/posts/markdown-syntax.md b/exampleSite/content/posts/markdown-syntax.md
new file mode 100644
index 0000000..555bc19
--- /dev/null
+++ b/exampleSite/content/posts/markdown-syntax.md
@@ -0,0 +1,137 @@
++++
+author = "Hugo Authors"
+title = "Markdown Syntax Guide"
+date = "2019-03-11"
+description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
+tags = [
+ "hugoBasicSite",
+]
++++
+
+This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.
+
+
+## Headings
+
+The following HTML `
`—`
` elements represent six levels of section headings. `
` is the highest section level while `
` is the lowest.
+
+# H1
+## H2
+### H3
+#### H4
+##### H5
+###### H6
+
+## Paragraph
+
+Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.
+
+Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.
+
+## Blockquotes
+
+The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
+
+#### Blockquote without attribution
+
+> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
+> **Note** that you can use *Markdown syntax* within a blockquote.
+
+#### Blockquote with attribution
+
+> Don't communicate by sharing memory, share memory by communicating.
+> — Rob Pike[^1]
+
+
+[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015.
+
+## Tables
+
+Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box.
+
+ Name | Age
+--------|------
+ Bob | 27
+ Alice | 23
+
+#### Inline Markdown within tables
+
+| Inline | Markdown | In | Table |
+| ---------- | --------- | ----------------- | ---------- |
+| *italics* | **bold** | ~~strikethrough~~ | `code` |
+
+## Code Blocks
+
+#### Code block with backticks
+
+```html
+
+
+
+
+ Example HTML5 Document
+
+
+
Test
+
+
+```
+#### Code block indented with four spaces
+
+
+
+
+
+ Example HTML5 Document
+
+
+
Test
+
+
+
+#### Code block with Hugo's internal highlight shortcode
+{{< highlight html >}}
+
+
+
+
+ Example HTML5 Document
+
+
+
Test
+
+
+{{< /highlight >}}
+
+## List Types
+
+#### Ordered List
+
+1. First item
+2. Second item
+3. Third item
+
+#### Unordered List
+
+* List item
+* Another item
+* And another item
+
+#### Nested list
+
+* Item
+ 1. First Sub-item
+ 2. Second Sub-item
+
+## Other Elements — abbr, sub, sup, kbd, mark
+
+GIF is a bitmap image format.
+
+H2O
+
+Xn + Yn = Zn
+
+Press CTRL+ALT+Delete to end the session.
+
+Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures.
+
diff --git a/exampleSite/content/posts/placeholder-text.md b/exampleSite/content/posts/placeholder-text.md
new file mode 100644
index 0000000..e76559a
--- /dev/null
+++ b/exampleSite/content/posts/placeholder-text.md
@@ -0,0 +1,57 @@
++++
+author = "Hugo Authors"
+title = "Placeholder Text"
+date = "2019-03-09"
+description = "Lorem Ipsum Dolor Si Amet"
+tags = [
+ "hugoBasicSite",
+]
++++
+
+Lorem est tota propiore conpellat pectoribus de
+pectora summo. Redit teque digerit hominumque toris verebor lumina non cervice
+subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc
+caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis
+lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.
+
+1. Exierant elisi ambit vivere dedere
+2. Duce pollice
+3. Eris modo
+4. Spargitque ferrea quos palude
+
+Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus
+silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria
+tractus malis.
+
+1. Comas hunc haec pietate fetum procerum dixit
+2. Post torum vates letum Tiresia
+3. Flumen querellas
+4. Arcanaque montibus omnes
+5. Quidem et
+
+# Vagus elidunt
+
+
+
+[The Van de Graaf Canon](https://en.wikipedia.org/wiki/Canons_of_page_construction#Van_de_Graaf_canon)
+
+## Mane refeci capiebant unda mulcebat
+
+Victa caducifer, malo vulnere contra
+dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere
+furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. **Faces illo pepulere** tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.
+
+Iubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli
+Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare
+Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert
+ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae
+vulnus haerentia iuste et exercebat, sui et.
+
+Eurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel **mitis temploque** vocatus, inque alis, *oculos nomen* non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem
+Propoetides **parte**.
+
+{{< css.inline >}}
+
+{{< /css.inline >}}
diff --git a/exampleSite/content/posts/rich-content.md b/exampleSite/content/posts/rich-content.md
new file mode 100644
index 0000000..62d0566
--- /dev/null
+++ b/exampleSite/content/posts/rich-content.md
@@ -0,0 +1,41 @@
++++
+author = "Hugo Authors"
+title = "Rich Content"
+date = "2019-03-10"
+description = "A brief description of Hugo Shortcodes"
+tags = [
+ "hugoBasicSite",
+]
++++
+
+Hugo ships with several [Built-in Shortcodes](https://gohugo.io/content-management/shortcodes/#use-hugo-s-built-in-shortcodes) for rich content, along with a [Privacy Config](https://gohugo.io/about/hugo-and-gdpr/) and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.
+
+---
+
+## Instagram Simple Shortcode
+
+{{< instagram_simple BGvuInzyFAe hidecaption >}}
+
+
+
+---
+
+## YouTube Privacy Enhanced Shortcode
+
+{{< youtube ZJthWmvUzzc >}}
+
+
+
+---
+
+## Twitter Simple Shortcode
+
+{{< twitter_simple 1085870671291310081 >}}
+
+
+
+---
+
+## Vimeo Simple Shortcode
+
+{{< vimeo_simple 48912912 >}}
diff --git a/exampleSite/content/posts/wood-swallow/i110.jpg b/exampleSite/content/posts/wood-swallow/i110.jpg
new file mode 100644
index 0000000..add0a49
Binary files /dev/null and b/exampleSite/content/posts/wood-swallow/i110.jpg differ
diff --git a/exampleSite/content/posts/wood-swallow/index.md b/exampleSite/content/posts/wood-swallow/index.md
new file mode 100644
index 0000000..2172455
--- /dev/null
+++ b/exampleSite/content/posts/wood-swallow/index.md
@@ -0,0 +1,47 @@
+---
+date: 2020-01-26
+title: "The Wood Swallow"
+tags:
+- New South Wales
+- Small birds
+---
+
+{{< figure
+ src="i110.jpg"
+ caption="The Wood Swallow"
+ attr="-- Project Gutenberg"
+ attrlink="http://www.gutenberg.org/files/60302/60302-h/60302-h.htm"
+>}}
+
+This Wood Swallow has been long known to ornithologists[^1], but unfortunately under so many generic and specific appellations, that it may be cited as an instance of the manner in which our science has been burthened with useless names, thereby producing an inextricable confusion[^2], and which in this instance, by a reference to Latham’s accurate description, and the slightest care on the part of other writers, might have been avoided.
+
+[^1]: This is an _intentional_ stress test of the margin-notes system. When we add lots of margin notes in nearby paragraphs with lots of content, they automatically flow down the page.
+[^2]: If you are worried about having too much margin text, you can always set `disableMarginNotes` on the page, and you'll get regular footnotes at the bottom of the page.
+
+No other species of the Australian Artami[^3] with which I am acquainted possesses so wide a range from east to west as the present; the whole of the southern portion of the continent, as well as the island of Van Diemen’s Land, being alike favoured with its presence. The extent of its range northward has not yet been satisfactorily ascertained, beyond the certainty that it has not hitherto been received in any collection from the north coast.
+
+[^3]: Here's another footnote, just to make sure it works :)
+
+It may be regarded as strictly migratory in Van Diemen’s Land, where it arrives in October, the beginning of the Australian summer, and after rearing at least two broods departs again northwards in November. On the continent a scattered few remain throughout the year in all the localities favourable to its habits, the number being regulated by the supply of insect food necessary for their subsistence. I may here observe, that specimens from Swan River, South Australia and New South Wales present no difference either in size or colouring, while those from Van Diemen’s Land are invariably larger in all their admeasurements, and are also of a deeper colour; I regard them, however, as mere varieties of each other, the greater size of the latter being doubtless caused by the superabundance of food which this more southern and humid climate affords.
+
+This Wood Swallow[^4], besides being the commonest species of the genus, must I think be rendered a general favourite with the Australians, not only from its singular and pleasing actions, but by its often taking up its abode and incubating near the houses, particularly such as are surrounded by paddocks and open pasture-lands skirted by large trees. It was in such situations as these in Van Diemen’s Land, at the commencement of spring, that I first had an opportunity of observing this species; it was then very numerous on all the cleared estates on the north side of the Derwent, about eight or ten being seen on a single tree, and half as many crowding one against another on the same dead branch, but never in such numbers as to deserve the appellation of flocks: each bird appeared to act independently of the other; each, as the desire for food prompted it, sallying forth from the branch to capture a passing insect, or to soar round the tree and return again to the same spot; on alighting it repeatedly throws up and closes one wing at a time, and spreads the tail obliquely prior to settling. At other times a few were seen perched on the fence surrounding the paddock, on which they frequently descended, like Starlings, in search of coleoptera and other insects. It is not, however, in this state of comparative quiescence that this graceful bird is seen to the greatest advantage, neither is it that kind of existence for which its form is especially adapted; for although its structure is more equally suited for terrestrial, arboreal and aërial habits than that of any other species I have examined, the form of its wing at once points out the air as its peculiar province: hence it is, that when engaged in pursuit of the insects which the serene and warm weather has enticed from their lurking-places among the foliage to sport in higher regions, this beautiful species in these aërial flights displays its greatest beauty, while soaring above, in a variety of easy positions, with white-tipped tail widely spread. Another very extraordinary and singular habit of the bird is that of clustering like bees on the dead branch of a tree, as represented in the Plate; this feature was not seen by me, but by my assistant Mr. Gilbert, during his residence at Swan River, and I have here given his account in his own words. “The greatest peculiarity in the habits of this bird is its manner of suspending itself in perfect clusters, like a swarm of bees; a few birds suspending themselves on the under side of a dead branch, while others of the flock attach themselves one to the other, in such numbers that they have been observed nearly of the size of a bushel measure.”
+
+[^4]: I think the margin notes really shine when you see them spaced out down the page like this. They're super useful for technical writing, but note that they align to the top of the paragraph they're referenced from; so they work best if you use short paragraphs.
+
+It was very numerous in the town of Perth until about the middle of April, when I missed it suddenly, nor did I observe it again until near the end of May, when I saw it in countless numbers flying in company with the Common Swallows and Martens over a lake about ten miles north of the town; so numerous, in fact, were they, that they darkened the water as they flew over it.
+
+Its voice greatly resembles that of the Common Swallow in character, but is much more harsh.
+
+The stomach is muscular and capacious, and the food consists of insects generally.
+
+The season of incubation is from September to December. The situation of the nest is much varied; I have seen one placed in a thickly foliaged bough near the ground, while others were in a naked fork, on the side of the hole of a tree, in a niche formed by a portion of the bark having been separated from the trunk, &c. The nest is rather shallow, of a rounded form, about five inches in diameter, and composed of fine twigs neatly lined with fibrous roots. I observed that the nests found in Van Diemen’s Land were larger, more compact and more neatly formed than those on the continent of Australia; and one which was shown me by Mr. Justice Montague on his picturesque estate at Kangaroo Point, near Hobart Town, was placed at the extremity of a small leafy branch, as represented in the Plate.
+
+The eggs are generally four in number; they differ much in the disposition of their markings; their ground-colour is dull white, spotted and dashed with dark umber-brown; in some a second series of greyish spots appear as if beneath the surface of the shell; their medium length is eleven lines, and breadth eight lines.
+
+Head, neck, and the whole of the body fuliginous grey; wings dark bluish black, the external edges of the second, third and fourth primaries white; tail bluish black, all the feathers except the two middle ones largely tipped with white; irides dark brown; bill blue with a black tip; feet mealy lead-colour.
+
+The sexes are alike in the colouring of their plumage, and are only to be distinguished by the female being somewhat smaller in size.
+
+The young have an irregular stripe of dirty white down the centre of each feather of the upper surface, and are mottled with the same on the under surface.
+
+The Plate represents a male and female of the natural size.
diff --git a/exampleSite/themes/paperesque b/exampleSite/themes/paperesque
new file mode 120000
index 0000000..c25bddb
--- /dev/null
+++ b/exampleSite/themes/paperesque
@@ -0,0 +1 @@
+../..
\ No newline at end of file
diff --git a/images/screenshot.png b/images/screenshot.png
new file mode 100644
index 0000000..6914776
Binary files /dev/null and b/images/screenshot.png differ
diff --git a/images/tn.png b/images/tn.png
new file mode 100644
index 0000000..7a807de
Binary files /dev/null and b/images/tn.png differ
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
new file mode 100644
index 0000000..221dde7
--- /dev/null
+++ b/layouts/_default/baseof.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+ {{ partial "meta.html" . }}
+
+ {{ .Title }}{{ if ne $.Site.Title .Title }} || {{ $.Site.Title }}{{ end }}
+
+
+ {{ with .Site.Params.RSSCanonicalLink }}
+
+ {{ else }}
+ {{- with .OutputFormats.Get "rss" -}}
+ {{ printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }}
+ {{- end -}}
+ {{ end }}
+
+ {{ partial "head_includes.html" . }}
+
+
+
+
+
+ {{ end }}
+ {{ if .Date }}
+ {{ if eq .Lastmod .Date }}
+
{{ .Date.Format "January 2, 2006" }}
+
+ {{ else }}
+
Created: {{ .Date.Format "January 2, 2006" }}
+
Last Edited: {{ .Lastmod.Format "January 2, 2006" }}
+ {{ end }}
+ {{ end }}
+ {{ if .Draft }}
+
{{ .WordCount }} words
+ {{ end }}
+
+ {{ .Content }}
+
+
diff --git a/layouts/partials/twitter_cards_default_small.html b/layouts/partials/twitter_cards_default_small.html
new file mode 100644
index 0000000..946a5fa
--- /dev/null
+++ b/layouts/partials/twitter_cards_default_small.html
@@ -0,0 +1,30 @@
+{{/* This is a modified copy/paste of https://github.com/gohugoio/hugo/blob/2b73e89d6d2822e86360a6c92c87f539677c119b/tpl/tplimpl/embedded/templates/twitter_cards.html */}}
+{{- with $.Params.images -}}
+
+
+{{ else -}}
+{{- $images := $.Resources.ByType "image" -}}
+{{- $featured := $images.GetMatch "*feature*" -}}
+{{- $featured := cond (ne $featured nil) $featured ($images.GetMatch "{*cover*,*thumbnail*}") -}}
+{{- with $featured -}}
+
+
+{{- else -}}
+{{- with $.Site.Params.images -}}
+
+
+{{ else -}}
+
+{{- end -}}
+{{- end -}}
+{{- end }}
+
+
+{{ with .Site.Social.twitter -}}
+
+{{ end -}}
+{{ range .Site.Authors }}
+{{ with .twitter -}}
+
+{{ end -}}
+{{ end -}}
diff --git a/layouts/shortcodes/aside.html b/layouts/shortcodes/aside.html
new file mode 100644
index 0000000..352a191
--- /dev/null
+++ b/layouts/shortcodes/aside.html
@@ -0,0 +1,3 @@
+
diff --git a/layouts/shortcodes/cw.html b/layouts/shortcodes/cw.html
new file mode 100644
index 0000000..abc3476
--- /dev/null
+++ b/layouts/shortcodes/cw.html
@@ -0,0 +1,5 @@
+
diff --git a/layouts/shortcodes/expander.html b/layouts/shortcodes/expander.html
new file mode 100644
index 0000000..d19e153
--- /dev/null
+++ b/layouts/shortcodes/expander.html
@@ -0,0 +1,18 @@
+{{ $_hugo_config := `{ "version": 1 }` }}
+
+
+
+{{ $radioGroup := anchorize (.Get "title") }}
+
{{ .Get "title" }}
+
+
+
+
+{{ .Inner }}
+
+
diff --git a/layouts/shortcodes/fitfigure.html b/layouts/shortcodes/fitfigure.html
new file mode 100644
index 0000000..d5db3e3
--- /dev/null
+++ b/layouts/shortcodes/fitfigure.html
@@ -0,0 +1,53 @@
+{{- $path := (.Get "src") -}}
+{{- $original := .Page.Resources.GetMatch $path -}}
+{{- if not $original -}}
+ {{- errorf "couldn't find resource for src: %s" $path -}}
+{{- else if and (ne "jpeg" $original.MediaType.SubType) (ne "png" $original.MediaType.SubType) -}}
+ {{- errorf "src %s is a '%s', expected 'jpeg' or 'png'" $path $original.MediaType.SubType -}}
+{{- else -}}
+ {{- /* Below is a copy paste of https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/figure.html from Hugo commit aba2647c152ffff927f42523b77ee6651630cd67, with the img tag modified to use srcsets */ -}}
+ {{- /* Note that it presently uses `markdownify` instead of $.Page.RenderString for consistency with Hugo's `figure` shortcode. */ -}}
+
+{{- end -}}
diff --git a/layouts/shortcodes/svgfigure.html b/layouts/shortcodes/svgfigure.html
new file mode 100644
index 0000000..30f319b
--- /dev/null
+++ b/layouts/shortcodes/svgfigure.html
@@ -0,0 +1,33 @@
+{{- /* This is a copy paste of
+ https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/shortcodes/figure.html
+ from Hugo commit aba2647c152ffff927f42523b77ee6651630cd67, with the img tag
+ replaced with an object tag, with type=svg. This allows for embedded SVGs to
+ be animated with CSS in Safari 13.1. See also: https://stackoverflow.com/q/60975613/996592
+*/ -}}
+{{- /* Note that it presently uses `markdownify` instead of $.Page.RenderString for consistency with Hugo's `figure` shortcode. */ -}}
+
+
diff --git a/layouts/taxonomy/taxonomy.html b/layouts/taxonomy/taxonomy.html
new file mode 100644
index 0000000..5cf1be3
--- /dev/null
+++ b/layouts/taxonomy/taxonomy.html
@@ -0,0 +1,18 @@
+{{ define "content" }}
+
+
+
+{{ end }}
diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity
new file mode 100644
index 0000000..8da9fbc
--- /dev/null
+++ b/node_modules/.yarn-integrity
@@ -0,0 +1,39 @@
+{
+ "systemParams": "darwin-x64-72",
+ "modulesFolders": [
+ "node_modules"
+ ],
+ "flags": [],
+ "linkedModules": [],
+ "topLevelPatterns": [
+ "@juggle/resize-observer@^3.0.2"
+ ],
+ "lockfileEntries": {
+ "@juggle/resize-observer@^3.0.2": "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.2.0.tgz#5e0b448d27fe3091bae6216456512c5904d05661"
+ },
+ "files": [],
+ "artifacts": {
+ "fsevents@1.2.12": [
+ "build",
+ "build/.target.mk",
+ "build/Makefile",
+ "build/Release",
+ "build/Release/.deps",
+ "build/Release/.deps/Release",
+ "build/Release/.deps/Release/.node.d",
+ "build/Release/.deps/Release/fse.node.d",
+ "build/Release/.deps/Release/obj.target",
+ "build/Release/.deps/Release/obj.target/fse",
+ "build/Release/.deps/Release/obj.target/fse/fsevents.o.d",
+ "build/Release/.node",
+ "build/Release/fse.node",
+ "build/Release/obj.target",
+ "build/Release/obj.target/fse",
+ "build/Release/obj.target/fse/fsevents.o",
+ "build/binding.Makefile",
+ "build/config.gypi",
+ "build/fse.target.mk",
+ "build/gyp-mac-tool"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/node_modules/@juggle/resize-observer/LICENSE b/node_modules/@juggle/resize-observer/LICENSE
new file mode 100644
index 0000000..d3731a5
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2019 JUGGLE LTD
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/node_modules/@juggle/resize-observer/README.md b/node_modules/@juggle/resize-observer/README.md
new file mode 100644
index 0000000..7d89f3e
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/README.md
@@ -0,0 +1,221 @@
+
+
+
+
+
Resize Observer
+
+
+
+
+
+
+
+
+---
+
+A minimal library which polyfills the **ResizeObserver** API and is entirely based on the latest [Draft Specification](https://drafts.csswg.org/resize-observer-1/).
+
+It immediately detects when an element resizes and provides accurate sizing information back to the handler. Check out the [Example Playground](//juggle.studio/resize-observer) for more information on usage and performance.
+
+> The latest [Resize Observer specification](https://drafts.csswg.org/resize-observer-1/) is not yet finalised and is subject to change.
+> Any drastic changes to the specification will bump the major version of this library, as there will likely be breaking changes. Check the [release notes](https://github.com/juggle/resize-observer/releases) for more information.
+
+
+## Installation
+``` shell
+npm i @juggle/resize-observer
+```
+
+## Basic usage
+``` js
+import { ResizeObserver } from '@juggle/resize-observer';
+
+const ro = new ResizeObserver((entries, observer) => {
+ console.log('Body has resized!');
+ observer.disconnect(); // Stop observing
+});
+
+ro.observe(document.body); // Watch dimension changes on body
+```
+This will use the [ponyfilled](https://github.com/sindresorhus/ponyfill) version of **ResizeObserver**, even if the browser supports **ResizeObserver** natively.
+
+## Watching multiple elements
+``` js
+import { ResizeObserver } from '@juggle/resize-observer';
+
+const ro = new ResizeObserver((entries, observer) => {
+ console.log('Elements resized:', entries.length);
+ entries.forEach((entry, index) => {
+ const { inlineSize: width, blockSize: height } = entry.contentBoxSize[0];
+ console.log(`Element ${index + 1}:`, `${width}x${height}`);
+ });
+});
+
+const els = document.querySelectorAll('.resizes');
+[...els].forEach(el => ro.observe(el)); // Watch multiple!
+```
+
+## Watching different box sizes
+
+The latest standards allow for watching different box sizes. The box size option can be specified when observing an element. Options include `border-box`, `device-pixel-content-box` and `content-box` (default).
+``` js
+import { ResizeObserver } from '@juggle/resize-observer';
+
+const ro = new ResizeObserver((entries, observer) => {
+ console.log('Elements resized:', entries.length);
+ entries.forEach((entry, index) => {
+ const [size] = entry.borderBoxSize;
+ console.log(`Element ${index + 1}:`, `${size.inlineSize}x${size.blockSize}`);
+ });
+});
+
+// Watch border-box
+const observerOptions = {
+ box: 'border-box'
+};
+
+const els = document.querySelectorAll('.resizes');
+[...els].forEach(el => ro.observe(el, observerOptions));
+```
+*From the spec:*
+> The box size properties are exposed as sequences in order to support elements that have multiple fragments, which occur in [multi-column](https://www.w3.org/TR/css3-multicol/#) scenarios. However the current definitions of content rect and border box do not mention how those boxes are affected by multi-column layout. In this spec, there will only be a single ResizeObserverSize returned in the sequences, which will correspond to the dimensions of the first column. A future version of this spec will extend the returned sequences to contain the per-fragment size information.
+
+## Using the legacy version (`contentRect`)
+
+Early versions of the API return a `contentRect`. This is still made available for backwards compatibility.
+
+``` js
+import { ResizeObserver } from '@juggle/resize-observer';
+
+const ro = new ResizeObserver((entries, observer) => {
+ console.log('Elements resized:', entries.length);
+ entries.forEach((entry, index) => {
+ const { width, height } = entry.contentRect;
+ console.log(`Element ${index + 1}:`, `${width}x${height}`);
+ });
+});
+
+const els = document.querySelectorAll('.resizes');
+[...els].forEach(el => ro.observe(el));
+```
+
+
+## Switching between native and polyfilled versions
+
+You can check to see if the native version is available and switch between this and the polyfill to improve performance on browsers with native support.
+
+``` js
+import { ResizeObserver as Polyfill } from '@juggle/resize-observer';
+
+const ResizeObserver = window.ResizeObserver || Polyfill;
+
+// Uses native or polyfill, depending on browser support.
+const ro = new ResizeObserver((entries, observer) => {
+ console.log('Something has resized!');
+});
+```
+
+To improve this even more, you could use dynamic imports to only load the file when the polyfill is required.
+
+``` js
+(async () => {
+ if ('ResizeObserver' in window === false) {
+ // Loads polyfill asynchronously, only if required.
+ const module = await import('@juggle/resize-observer');
+ window.ResizeObserver = module.ResizeObserver;
+ }
+ // Uses native or polyfill, depending on browser support.
+ const ro = new ResizeObserver((entries, observer) => {
+ console.log('Something has resized!');
+ });
+})();
+```
+
+> Browsers with native support may be behind on the latest specification.
+> Use `entry.contentRect` when switching between native and polyfilled versions.
+
+
+## Resize loop detection
+
+Resize Observers have inbuilt protection against infinite resize loops.
+
+If an element's observed box size changes again within the same resize loop, the observation will be skipped and an error event will be dispatched on the window. Elements with undelivered notifications will be considered for delivery in the next loop.
+
+```js
+import { ResizeObserver } from '@juggle/resize-observer';
+
+const ro = new ResizeObserver((entries, observer) => {
+ // Changing the body size inside of the observer
+ // will cause a resize loop and the next observation will be skipped
+ document.body.style.width = '50%';
+});
+
+// Listen for errors
+window.addEventListener('error', e => console.log(e.message));
+
+// Observe the body
+ro.observe(document.body);
+```
+
+## Notification Schedule
+Notifications are scheduled after all other changes have occurred and all other animation callbacks have been called. This allows the observer callback to get the most accurate size of an element, as no other changes should occur in the same frame.
+
+![resize observer notification schedule](https://user-images.githubusercontent.com/1519516/52825568-20433500-30b5-11e9-9854-4cee13a09a7d.jpg)
+
+
+
+## How are differences detected?
+
+To prevent constant polling, every frame. The DOM is queried whenever an event occurs which could cause an element to change its size. This could be when an element is clicked, a DOM Node is added, or, when an animation is running.
+
+To cover these scenarios, there are two types of observation. The first is to listen to specific DOM events, including `resize`, `mousedown` and `focus` to name a few. The second is to listen for any DOM mutations that occur. This detects when a DOM node is added or removed, an attribute is modified, or, even when some text has changed.
+
+This allows for greater idle time, when the application itself is idle.
+
+
+## Features
+
+- Inbuilt resize loop protection.
+- Supports pseudo classes `:hover`, `:active` and `:focus`.
+- Supports transitions and animations, including infinite and long-running.
+- Detects changes which occur during animation frame.
+- Includes support for latest draft spec - observing different box sizes.
+- Polls only when required, then shuts down automatically, reducing CPU usage.
+- Zero delay system - Notifications are batched and delivered immediately, before the next paint.
+
+
+## Limitations
+
+- Transitions with initial delays cannot be detected.*
+- Animations and transitions with long periods of no change, will not be detected.*
+- Style changes from dev tools will only be noticed if they are inline styles.*
+
+
+## Tested Browsers
+
+[chrome]: https://github.com/alrra/browser-logos/raw/master/src/chrome/chrome_64x64.png
+[safari]: https://github.com/alrra/browser-logos/raw/master/src/safari/safari_64x64.png
+[safari-ios]: https://github.com/alrra/browser-logos/raw/master/src/safari-ios/safari-ios_64x64.png
+[ff]: https://github.com/alrra/browser-logos/raw/master/src/firefox/firefox_64x64.png
+[opera]: https://github.com/alrra/browser-logos/raw/master/src/opera/opera_64x64.png
+[opera-mini]: https://github.com/alrra/browser-logos/raw/master/src/opera-mini/opera-mini_64x64.png
+[edge_12-18]: https://github.com/alrra/browser-logos/raw/master/src/archive/edge_12-18/edge_12-18_64x64.png
+[edge]: https://github.com/alrra/browser-logos/raw/master/src/edge/edge_64x64.png
+[samsung]: https://github.com/alrra/browser-logos/raw/master/src/samsung-internet/samsung-internet_64x64.png
+[ie]: https://github.com/alrra/browser-logos/raw/master/src/archive/internet-explorer_9-11/internet-explorer_9-11_64x64.png
+
+### Desktop
+| ![chrome][chrome] | ![safari][safari] | ![ff][ff] | ![opera][opera] | ![edge][edge] | ![edge][edge_12-18] | ![IE][ie] |
+|--------|--------|---------|-------|------|------------|---------------------------------------|
+| Chrome | Safari | Firefox | Opera | Edge | Edge 12-18 | IE11 IE 9-10 (with polyfills)\*\* |
+
+### Mobile
+| ![chrome][chrome] | ![safari][safari] | ![ff][ff] | ![opera][opera] | ![opera mini][opera-mini] | ![edge][edge_12-18] | ![samsung internet][samsung] |
+|--------|--------|---------|-------|------------|------|------------------|
+| Chrome | Safari | Firefox | Opera | Opera Mini | Edge | Samsung Internet |
+
+---
+
+\*If other interaction occurs, changes will be detected.
+
+\*\*IE10 requires additional polyfills for `Map` and `MutationObserver`. IE9 requires IE10 polyfills plus `requestAnimationFrame`. For more information, [see issue here](https://github.com/juggle/resize-observer/issues/64).
diff --git a/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.d.ts b/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.d.ts
new file mode 100644
index 0000000..b9ff0da
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.d.ts
@@ -0,0 +1,30 @@
+interface Rectangle {
+ readonly x: number;
+ readonly y: number;
+ readonly width: number;
+ readonly height: number;
+}
+declare type DOMRectJSON = {
+ x: number;
+ y: number;
+ top: number;
+ right: number;
+ bottom: number;
+ left: number;
+ width: number;
+ height: number;
+};
+declare class DOMRectReadOnly {
+ readonly x: number;
+ readonly y: number;
+ readonly width: number;
+ readonly height: number;
+ readonly top: number;
+ readonly left: number;
+ readonly bottom: number;
+ readonly right: number;
+ constructor(x: number, y: number, width: number, height: number);
+ toJSON(): DOMRectJSON;
+ static fromRect(rectangle: Rectangle): Readonly;
+}
+export { DOMRectReadOnly };
diff --git a/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js b/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js
new file mode 100644
index 0000000..1241efa
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js
@@ -0,0 +1,22 @@
+var DOMRectReadOnly = (function () {
+ function DOMRectReadOnly(x, y, width, height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ this.top = this.y;
+ this.left = this.x;
+ this.bottom = this.top + this.height;
+ this.right = this.left + this.width;
+ return Object.freeze(this);
+ }
+ DOMRectReadOnly.prototype.toJSON = function () {
+ var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;
+ return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };
+ };
+ DOMRectReadOnly.fromRect = function (rectangle) {
+ return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+ };
+ return DOMRectReadOnly;
+}());
+export { DOMRectReadOnly };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObservation.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObservation.d.ts
new file mode 100644
index 0000000..5d0eccc
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObservation.d.ts
@@ -0,0 +1,10 @@
+import { ResizeObserverSize } from './ResizeObserverSize';
+import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';
+declare class ResizeObservation {
+ target: Element;
+ observedBox: ResizeObserverBoxOptions;
+ lastReportedSize: ResizeObserverSize;
+ constructor(target: Element, observedBox?: ResizeObserverBoxOptions);
+ isActive(): boolean;
+}
+export { ResizeObservation };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObservation.js b/node_modules/@juggle/resize-observer/lib/ResizeObservation.js
new file mode 100644
index 0000000..891dd0b
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObservation.js
@@ -0,0 +1,31 @@
+import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';
+import { calculateBoxSize } from './algorithms/calculateBoxSize';
+import { isSVG, isReplacedElement } from './utils/element';
+var skipNotifyOnElement = function (target) {
+ return !isSVG(target)
+ && !isReplacedElement(target)
+ && getComputedStyle(target).display === 'inline';
+};
+var ResizeObservation = (function () {
+ function ResizeObservation(target, observedBox) {
+ this.target = target;
+ this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;
+ this.lastReportedSize = {
+ inlineSize: 0,
+ blockSize: 0
+ };
+ }
+ ResizeObservation.prototype.isActive = function () {
+ var size = calculateBoxSize(this.target, this.observedBox, true);
+ if (skipNotifyOnElement(this.target)) {
+ this.lastReportedSize = size;
+ }
+ if (this.lastReportedSize.inlineSize !== size.inlineSize
+ || this.lastReportedSize.blockSize !== size.blockSize) {
+ return true;
+ }
+ return false;
+ };
+ return ResizeObservation;
+}());
+export { ResizeObservation };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserver.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserver.d.ts
new file mode 100644
index 0000000..b971658
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserver.d.ts
@@ -0,0 +1,10 @@
+import { ResizeObserverCallback } from './ResizeObserverCallback';
+import { ResizeObserverOptions } from './ResizeObserverOptions';
+declare class ResizeObserver {
+ constructor(callback: ResizeObserverCallback);
+ observe(target: Element, options?: ResizeObserverOptions): void;
+ unobserve(target: Element): void;
+ disconnect(): void;
+ static toString(): string;
+}
+export { ResizeObserver };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserver.js b/node_modules/@juggle/resize-observer/lib/ResizeObserver.js
new file mode 100644
index 0000000..5c97a79
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserver.js
@@ -0,0 +1,39 @@
+import { ResizeObserverController } from './ResizeObserverController';
+import { isElement } from './utils/element';
+var ResizeObserver = (function () {
+ function ResizeObserver(callback) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (typeof callback !== 'function') {
+ throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");
+ }
+ ResizeObserverController.connect(this, callback);
+ }
+ ResizeObserver.prototype.observe = function (target, options) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (!isElement(target)) {
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");
+ }
+ ResizeObserverController.observe(this, target, options);
+ };
+ ResizeObserver.prototype.unobserve = function (target) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (!isElement(target)) {
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");
+ }
+ ResizeObserverController.unobserve(this, target);
+ };
+ ResizeObserver.prototype.disconnect = function () {
+ ResizeObserverController.disconnect(this);
+ };
+ ResizeObserver.toString = function () {
+ return 'function ResizeObserver () { [polyfill code] }';
+ };
+ return ResizeObserver;
+}());
+export { ResizeObserver };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.d.ts
new file mode 100644
index 0000000..92502ba
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.d.ts
@@ -0,0 +1,6 @@
+declare enum ResizeObserverBoxOptions {
+ BORDER_BOX = "border-box",
+ CONTENT_BOX = "content-box",
+ DEVICE_PIXEL_CONTENT_BOX = "device-pixel-content-box"
+}
+export { ResizeObserverBoxOptions };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js
new file mode 100644
index 0000000..15661b7
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js
@@ -0,0 +1,7 @@
+var ResizeObserverBoxOptions;
+(function (ResizeObserverBoxOptions) {
+ ResizeObserverBoxOptions["BORDER_BOX"] = "border-box";
+ ResizeObserverBoxOptions["CONTENT_BOX"] = "content-box";
+ ResizeObserverBoxOptions["DEVICE_PIXEL_CONTENT_BOX"] = "device-pixel-content-box";
+})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));
+export { ResizeObserverBoxOptions };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverCallback.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverCallback.d.ts
new file mode 100644
index 0000000..0adfcfe
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverCallback.d.ts
@@ -0,0 +1,4 @@
+import { ResizeObserver } from './ResizeObserver';
+import { ResizeObserverEntry } from './ResizeObserverEntry';
+declare type ResizeObserverCallback = (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;
+export { ResizeObserverCallback };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverCallback.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverCallback.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverController.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverController.d.ts
new file mode 100644
index 0000000..01b18ce
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverController.d.ts
@@ -0,0 +1,10 @@
+import { ResizeObserver } from './ResizeObserver';
+import { ResizeObserverCallback } from './ResizeObserverCallback';
+import { ResizeObserverOptions } from './ResizeObserverOptions';
+declare class ResizeObserverController {
+ static connect(resizeObserver: ResizeObserver, callback: ResizeObserverCallback): void;
+ static observe(resizeObserver: ResizeObserver, target: Element, options?: ResizeObserverOptions): void;
+ static unobserve(resizeObserver: ResizeObserver, target: Element): void;
+ static disconnect(resizeObserver: ResizeObserver): void;
+}
+export { ResizeObserverController };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js
new file mode 100644
index 0000000..74ae227
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js
@@ -0,0 +1,49 @@
+import { scheduler, updateCount } from './utils/scheduler';
+import { ResizeObservation } from './ResizeObservation';
+import { ResizeObserverDetail } from './ResizeObserverDetail';
+import { resizeObservers } from './utils/resizeObservers';
+var observerMap = new WeakMap();
+var getObservationIndex = function (observationTargets, target) {
+ for (var i = 0; i < observationTargets.length; i += 1) {
+ if (observationTargets[i].target === target) {
+ return i;
+ }
+ }
+ return -1;
+};
+var ResizeObserverController = (function () {
+ function ResizeObserverController() {
+ }
+ ResizeObserverController.connect = function (resizeObserver, callback) {
+ var detail = new ResizeObserverDetail(resizeObserver, callback);
+ observerMap.set(resizeObserver, detail);
+ };
+ ResizeObserverController.observe = function (resizeObserver, target, options) {
+ var detail = observerMap.get(resizeObserver);
+ var firstObservation = detail.observationTargets.length === 0;
+ if (getObservationIndex(detail.observationTargets, target) < 0) {
+ firstObservation && resizeObservers.push(detail);
+ detail.observationTargets.push(new ResizeObservation(target, options && options.box));
+ updateCount(1);
+ scheduler.schedule();
+ }
+ };
+ ResizeObserverController.unobserve = function (resizeObserver, target) {
+ var detail = observerMap.get(resizeObserver);
+ var index = getObservationIndex(detail.observationTargets, target);
+ var lastObservation = detail.observationTargets.length === 1;
+ if (index >= 0) {
+ lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);
+ detail.observationTargets.splice(index, 1);
+ updateCount(-1);
+ }
+ };
+ ResizeObserverController.disconnect = function (resizeObserver) {
+ var _this = this;
+ var detail = observerMap.get(resizeObserver);
+ detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });
+ detail.activeTargets.splice(0, detail.activeTargets.length);
+ };
+ return ResizeObserverController;
+}());
+export { ResizeObserverController };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.d.ts
new file mode 100644
index 0000000..5c92760
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.d.ts
@@ -0,0 +1,12 @@
+import { ResizeObserver } from './ResizeObserver';
+import { ResizeObservation } from './ResizeObservation';
+import { ResizeObserverCallback } from './ResizeObserverCallback';
+declare class ResizeObserverDetail {
+ callback: ResizeObserverCallback;
+ observer: ResizeObserver;
+ activeTargets: ResizeObservation[];
+ skippedTargets: ResizeObservation[];
+ observationTargets: ResizeObservation[];
+ constructor(resizeObserver: ResizeObserver, callback: ResizeObserverCallback);
+}
+export { ResizeObserverDetail };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js
new file mode 100644
index 0000000..70263bb
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js
@@ -0,0 +1,11 @@
+var ResizeObserverDetail = (function () {
+ function ResizeObserverDetail(resizeObserver, callback) {
+ this.activeTargets = [];
+ this.skippedTargets = [];
+ this.observationTargets = [];
+ this.observer = resizeObserver;
+ this.callback = callback;
+ }
+ return ResizeObserverDetail;
+}());
+export { ResizeObserverDetail };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.d.ts
new file mode 100644
index 0000000..b97e7ae
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.d.ts
@@ -0,0 +1,11 @@
+import { DOMRectReadOnly } from './DOMRectReadOnly';
+import { ResizeObserverSize } from './ResizeObserverSize';
+declare class ResizeObserverEntry {
+ target: Element;
+ contentRect: DOMRectReadOnly;
+ borderBoxSize: ResizeObserverSize[];
+ contentBoxSize: ResizeObserverSize[];
+ devicePixelContentBoxSize: ResizeObserverSize[];
+ constructor(target: Element);
+}
+export { ResizeObserverEntry };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js
new file mode 100644
index 0000000..b54c5c9
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js
@@ -0,0 +1,13 @@
+import { calculateBoxSizes } from './algorithms/calculateBoxSize';
+var ResizeObserverEntry = (function () {
+ function ResizeObserverEntry(target) {
+ var boxes = calculateBoxSizes(target);
+ this.target = target;
+ this.contentRect = boxes.contentRect;
+ this.borderBoxSize = [boxes.borderBoxSize];
+ this.contentBoxSize = [boxes.contentBoxSize];
+ this.devicePixelContentBoxSize = [boxes.devicePixelContentBoxSize];
+ }
+ return ResizeObserverEntry;
+}());
+export { ResizeObserverEntry };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverOptions.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverOptions.d.ts
new file mode 100644
index 0000000..e67a203
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverOptions.d.ts
@@ -0,0 +1,5 @@
+import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';
+interface ResizeObserverOptions {
+ box?: 'content-box' | 'border-box' | 'device-pixel-content-box' | ResizeObserverBoxOptions;
+}
+export { ResizeObserverOptions };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverOptions.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverOptions.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.d.ts b/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.d.ts
new file mode 100644
index 0000000..0cadfa0
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.d.ts
@@ -0,0 +1,5 @@
+interface ResizeObserverSize {
+ readonly inlineSize: number;
+ readonly blockSize: number;
+}
+export { ResizeObserverSize };
diff --git a/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js b/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js
new file mode 100644
index 0000000..e69de29
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.d.ts
new file mode 100644
index 0000000..36cb58e
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.d.ts
@@ -0,0 +1,2 @@
+declare const broadcastActiveObservations: () => number;
+export { broadcastActiveObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js b/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js
new file mode 100644
index 0000000..3ffeeae
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js
@@ -0,0 +1,33 @@
+import { resizeObservers } from '../utils/resizeObservers';
+import { ResizeObserverEntry } from '../ResizeObserverEntry';
+import { calculateDepthForNode } from './calculateDepthForNode';
+import { calculateBoxSize } from './calculateBoxSize';
+var broadcastActiveObservations = function () {
+ var shallowestDepth = Infinity;
+ var callbacks = [];
+ resizeObservers.forEach(function processObserver(ro) {
+ if (ro.activeTargets.length === 0) {
+ return;
+ }
+ var entries = [];
+ ro.activeTargets.forEach(function processTarget(ot) {
+ var entry = new ResizeObserverEntry(ot.target);
+ var targetDepth = calculateDepthForNode(ot.target);
+ entries.push(entry);
+ ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);
+ if (targetDepth < shallowestDepth) {
+ shallowestDepth = targetDepth;
+ }
+ });
+ callbacks.push(function resizeObserverCallback() {
+ ro.callback.call(ro.observer, entries, ro.observer);
+ });
+ ro.activeTargets.splice(0, ro.activeTargets.length);
+ });
+ for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {
+ var callback = callbacks_1[_i];
+ callback();
+ }
+ return shallowestDepth;
+};
+export { broadcastActiveObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.d.ts
new file mode 100644
index 0000000..d4d4707
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.d.ts
@@ -0,0 +1,12 @@
+import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';
+import { ResizeObserverSize } from '../ResizeObserverSize';
+import { DOMRectReadOnly } from '../DOMRectReadOnly';
+interface ResizeObserverSizeCollection {
+ devicePixelContentBoxSize: ResizeObserverSize;
+ borderBoxSize: ResizeObserverSize;
+ contentBoxSize: ResizeObserverSize;
+ contentRect: DOMRectReadOnly;
+}
+declare const calculateBoxSizes: (target: Element, forceRecalculation?: boolean) => ResizeObserverSizeCollection;
+declare const calculateBoxSize: (target: Element, observedBox: ResizeObserverBoxOptions, forceRecalculation?: boolean | undefined) => ResizeObserverSize;
+export { calculateBoxSize, calculateBoxSizes };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js b/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js
new file mode 100644
index 0000000..65d699c
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js
@@ -0,0 +1,80 @@
+import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';
+import { DOMRectReadOnly } from '../DOMRectReadOnly';
+import { isSVG, isHidden } from '../utils/element';
+import { global } from '../utils/global';
+var cache = new WeakMap();
+var scrollRegexp = /auto|scroll/;
+var verticalRegexp = /^tb|vertical/;
+var IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);
+var parseDimension = function (pixel) { return parseFloat(pixel || '0'); };
+var size = function (inlineSize, blockSize, switchSizes) {
+ if (inlineSize === void 0) { inlineSize = 0; }
+ if (blockSize === void 0) { blockSize = 0; }
+ if (switchSizes === void 0) { switchSizes = false; }
+ return Object.freeze({
+ inlineSize: (switchSizes ? blockSize : inlineSize) || 0,
+ blockSize: (switchSizes ? inlineSize : blockSize) || 0
+ });
+};
+var zeroBoxes = Object.freeze({
+ devicePixelContentBoxSize: size(),
+ borderBoxSize: size(),
+ contentBoxSize: size(),
+ contentRect: new DOMRectReadOnly(0, 0, 0, 0)
+});
+var calculateBoxSizes = function (target, forceRecalculation) {
+ if (forceRecalculation === void 0) { forceRecalculation = false; }
+ if (cache.has(target) && !forceRecalculation) {
+ return cache.get(target);
+ }
+ if (isHidden(target)) {
+ cache.set(target, zeroBoxes);
+ return zeroBoxes;
+ }
+ var cs = getComputedStyle(target);
+ var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();
+ var removePadding = !IE && cs.boxSizing === 'border-box';
+ var switchSizes = verticalRegexp.test(cs.writingMode || '');
+ var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');
+ var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');
+ var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);
+ var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);
+ var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);
+ var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);
+ var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);
+ var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);
+ var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);
+ var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);
+ var horizontalPadding = paddingLeft + paddingRight;
+ var verticalPadding = paddingTop + paddingBottom;
+ var horizontalBorderArea = borderLeft + borderRight;
+ var verticalBorderArea = borderTop + borderBottom;
+ var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;
+ var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;
+ var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;
+ var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;
+ var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;
+ var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;
+ var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;
+ var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;
+ var boxes = Object.freeze({
+ devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),
+ borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),
+ contentBoxSize: size(contentWidth, contentHeight, switchSizes),
+ contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)
+ });
+ cache.set(target, boxes);
+ return boxes;
+};
+var calculateBoxSize = function (target, observedBox, forceRecalculation) {
+ var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;
+ switch (observedBox) {
+ case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:
+ return devicePixelContentBoxSize;
+ case ResizeObserverBoxOptions.BORDER_BOX:
+ return borderBoxSize;
+ default:
+ return contentBoxSize;
+ }
+};
+export { calculateBoxSize, calculateBoxSizes };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.d.ts
new file mode 100644
index 0000000..80fddee
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.d.ts
@@ -0,0 +1,2 @@
+declare const calculateDepthForNode: (node: Element) => number;
+export { calculateDepthForNode };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js b/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js
new file mode 100644
index 0000000..b90329e
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js
@@ -0,0 +1,14 @@
+import { isHidden } from '../utils/element';
+var calculateDepthForNode = function (node) {
+ if (isHidden(node)) {
+ return Infinity;
+ }
+ var depth = 0;
+ var parent = node.parentNode;
+ while (parent) {
+ depth += 1;
+ parent = parent.parentNode;
+ }
+ return depth;
+};
+export { calculateDepthForNode };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.d.ts
new file mode 100644
index 0000000..a4da7f6
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.d.ts
@@ -0,0 +1,2 @@
+declare const deliverResizeLoopError: () => void;
+export { deliverResizeLoopError };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js b/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js
new file mode 100644
index 0000000..b1c69a9
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js
@@ -0,0 +1,16 @@
+var msg = 'ResizeObserver loop completed with undelivered notifications.';
+var deliverResizeLoopError = function () {
+ var event;
+ if (typeof ErrorEvent === 'function') {
+ event = new ErrorEvent('error', {
+ message: msg
+ });
+ }
+ else {
+ event = document.createEvent('Event');
+ event.initEvent('error', false, false);
+ event.message = msg;
+ }
+ window.dispatchEvent(event);
+};
+export { deliverResizeLoopError };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.d.ts
new file mode 100644
index 0000000..f1c8e95
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.d.ts
@@ -0,0 +1,2 @@
+declare const gatherActiveObservationsAtDepth: (depth: number) => void;
+export { gatherActiveObservationsAtDepth };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js b/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js
new file mode 100644
index 0000000..35374f1
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js
@@ -0,0 +1,19 @@
+import { resizeObservers } from '../utils/resizeObservers';
+import { calculateDepthForNode } from './calculateDepthForNode';
+var gatherActiveObservationsAtDepth = function (depth) {
+ resizeObservers.forEach(function processObserver(ro) {
+ ro.activeTargets.splice(0, ro.activeTargets.length);
+ ro.skippedTargets.splice(0, ro.skippedTargets.length);
+ ro.observationTargets.forEach(function processTarget(ot) {
+ if (ot.isActive()) {
+ if (calculateDepthForNode(ot.target) > depth) {
+ ro.activeTargets.push(ot);
+ }
+ else {
+ ro.skippedTargets.push(ot);
+ }
+ }
+ });
+ });
+};
+export { gatherActiveObservationsAtDepth };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.d.ts
new file mode 100644
index 0000000..052cd2a
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.d.ts
@@ -0,0 +1,2 @@
+declare const hasActiveObservations: () => boolean;
+export { hasActiveObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js b/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js
new file mode 100644
index 0000000..1ad54a4
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js
@@ -0,0 +1,5 @@
+import { resizeObservers } from '../utils/resizeObservers';
+var hasActiveObservations = function () {
+ return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });
+};
+export { hasActiveObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.d.ts b/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.d.ts
new file mode 100644
index 0000000..d640187
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.d.ts
@@ -0,0 +1,2 @@
+declare const hasSkippedObservations: () => boolean;
+export { hasSkippedObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js b/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js
new file mode 100644
index 0000000..50265bf
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js
@@ -0,0 +1,5 @@
+import { resizeObservers } from '../utils/resizeObservers';
+var hasSkippedObservations = function () {
+ return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });
+};
+export { hasSkippedObservations };
diff --git a/node_modules/@juggle/resize-observer/lib/exports/resize-observer.d.ts b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.d.ts
new file mode 100644
index 0000000..2f73ed3
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.d.ts
@@ -0,0 +1,2 @@
+export { ResizeObserver } from '../ResizeObserver';
+export { ResizeObserverEntry } from '../ResizeObserverEntry';
diff --git a/node_modules/@juggle/resize-observer/lib/exports/resize-observer.js b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.js
new file mode 100644
index 0000000..2f73ed3
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.js
@@ -0,0 +1,2 @@
+export { ResizeObserver } from '../ResizeObserver';
+export { ResizeObserverEntry } from '../ResizeObserverEntry';
diff --git a/node_modules/@juggle/resize-observer/lib/exports/resize-observer.umd.js b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.umd.js
new file mode 100644
index 0000000..1646e7c
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/exports/resize-observer.umd.js
@@ -0,0 +1,500 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = global || self, factory(global.ResizeObserver = {}));
+}(this, (function (exports) { 'use strict';
+
+ var resizeObservers = [];
+
+ var hasActiveObservations = function () {
+ return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });
+ };
+
+ var hasSkippedObservations = function () {
+ return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });
+ };
+
+ var msg = 'ResizeObserver loop completed with undelivered notifications.';
+ var deliverResizeLoopError = function () {
+ var event;
+ if (typeof ErrorEvent === 'function') {
+ event = new ErrorEvent('error', {
+ message: msg
+ });
+ }
+ else {
+ event = document.createEvent('Event');
+ event.initEvent('error', false, false);
+ event.message = msg;
+ }
+ window.dispatchEvent(event);
+ };
+
+ var ResizeObserverBoxOptions;
+ (function (ResizeObserverBoxOptions) {
+ ResizeObserverBoxOptions["BORDER_BOX"] = "border-box";
+ ResizeObserverBoxOptions["CONTENT_BOX"] = "content-box";
+ ResizeObserverBoxOptions["DEVICE_PIXEL_CONTENT_BOX"] = "device-pixel-content-box";
+ })(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));
+
+ var DOMRectReadOnly = (function () {
+ function DOMRectReadOnly(x, y, width, height) {
+ this.x = x;
+ this.y = y;
+ this.width = width;
+ this.height = height;
+ this.top = this.y;
+ this.left = this.x;
+ this.bottom = this.top + this.height;
+ this.right = this.left + this.width;
+ return Object.freeze(this);
+ }
+ DOMRectReadOnly.prototype.toJSON = function () {
+ var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;
+ return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };
+ };
+ DOMRectReadOnly.fromRect = function (rectangle) {
+ return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
+ };
+ return DOMRectReadOnly;
+ }());
+
+ var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };
+ var isHidden = function (target) {
+ if (isSVG(target)) {
+ var _a = target.getBBox(), width = _a.width, height = _a.height;
+ return !width && !height;
+ }
+ var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;
+ return !(offsetWidth || offsetHeight || target.getClientRects().length);
+ };
+ var isElement = function (obj) {
+ var _a, _b;
+ var scope = (_b = (_a = obj) === null || _a === void 0 ? void 0 : _a.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView;
+ return !!(scope && obj instanceof scope.Element);
+ };
+ var isReplacedElement = function (target) {
+ switch (target.tagName) {
+ case 'INPUT':
+ if (target.type !== 'image') {
+ break;
+ }
+ case 'VIDEO':
+ case 'AUDIO':
+ case 'EMBED':
+ case 'OBJECT':
+ case 'CANVAS':
+ case 'IFRAME':
+ case 'IMG':
+ return true;
+ }
+ return false;
+ };
+
+ var global = typeof window !== 'undefined' ? window : {};
+
+ var cache = new WeakMap();
+ var scrollRegexp = /auto|scroll/;
+ var verticalRegexp = /^tb|vertical/;
+ var IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);
+ var parseDimension = function (pixel) { return parseFloat(pixel || '0'); };
+ var size = function (inlineSize, blockSize, switchSizes) {
+ if (inlineSize === void 0) { inlineSize = 0; }
+ if (blockSize === void 0) { blockSize = 0; }
+ if (switchSizes === void 0) { switchSizes = false; }
+ return Object.freeze({
+ inlineSize: (switchSizes ? blockSize : inlineSize) || 0,
+ blockSize: (switchSizes ? inlineSize : blockSize) || 0
+ });
+ };
+ var zeroBoxes = Object.freeze({
+ devicePixelContentBoxSize: size(),
+ borderBoxSize: size(),
+ contentBoxSize: size(),
+ contentRect: new DOMRectReadOnly(0, 0, 0, 0)
+ });
+ var calculateBoxSizes = function (target, forceRecalculation) {
+ if (forceRecalculation === void 0) { forceRecalculation = false; }
+ if (cache.has(target) && !forceRecalculation) {
+ return cache.get(target);
+ }
+ if (isHidden(target)) {
+ cache.set(target, zeroBoxes);
+ return zeroBoxes;
+ }
+ var cs = getComputedStyle(target);
+ var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();
+ var removePadding = !IE && cs.boxSizing === 'border-box';
+ var switchSizes = verticalRegexp.test(cs.writingMode || '');
+ var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');
+ var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');
+ var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);
+ var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);
+ var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);
+ var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);
+ var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);
+ var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);
+ var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);
+ var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);
+ var horizontalPadding = paddingLeft + paddingRight;
+ var verticalPadding = paddingTop + paddingBottom;
+ var horizontalBorderArea = borderLeft + borderRight;
+ var verticalBorderArea = borderTop + borderBottom;
+ var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;
+ var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;
+ var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;
+ var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;
+ var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;
+ var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;
+ var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;
+ var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;
+ var boxes = Object.freeze({
+ devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),
+ borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),
+ contentBoxSize: size(contentWidth, contentHeight, switchSizes),
+ contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)
+ });
+ cache.set(target, boxes);
+ return boxes;
+ };
+ var calculateBoxSize = function (target, observedBox, forceRecalculation) {
+ var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;
+ switch (observedBox) {
+ case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:
+ return devicePixelContentBoxSize;
+ case ResizeObserverBoxOptions.BORDER_BOX:
+ return borderBoxSize;
+ default:
+ return contentBoxSize;
+ }
+ };
+
+ var ResizeObserverEntry = (function () {
+ function ResizeObserverEntry(target) {
+ var boxes = calculateBoxSizes(target);
+ this.target = target;
+ this.contentRect = boxes.contentRect;
+ this.borderBoxSize = [boxes.borderBoxSize];
+ this.contentBoxSize = [boxes.contentBoxSize];
+ this.devicePixelContentBoxSize = [boxes.devicePixelContentBoxSize];
+ }
+ return ResizeObserverEntry;
+ }());
+
+ var calculateDepthForNode = function (node) {
+ if (isHidden(node)) {
+ return Infinity;
+ }
+ var depth = 0;
+ var parent = node.parentNode;
+ while (parent) {
+ depth += 1;
+ parent = parent.parentNode;
+ }
+ return depth;
+ };
+
+ var broadcastActiveObservations = function () {
+ var shallowestDepth = Infinity;
+ var callbacks = [];
+ resizeObservers.forEach(function processObserver(ro) {
+ if (ro.activeTargets.length === 0) {
+ return;
+ }
+ var entries = [];
+ ro.activeTargets.forEach(function processTarget(ot) {
+ var entry = new ResizeObserverEntry(ot.target);
+ var targetDepth = calculateDepthForNode(ot.target);
+ entries.push(entry);
+ ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);
+ if (targetDepth < shallowestDepth) {
+ shallowestDepth = targetDepth;
+ }
+ });
+ callbacks.push(function resizeObserverCallback() {
+ ro.callback.call(ro.observer, entries, ro.observer);
+ });
+ ro.activeTargets.splice(0, ro.activeTargets.length);
+ });
+ for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {
+ var callback = callbacks_1[_i];
+ callback();
+ }
+ return shallowestDepth;
+ };
+
+ var gatherActiveObservationsAtDepth = function (depth) {
+ resizeObservers.forEach(function processObserver(ro) {
+ ro.activeTargets.splice(0, ro.activeTargets.length);
+ ro.skippedTargets.splice(0, ro.skippedTargets.length);
+ ro.observationTargets.forEach(function processTarget(ot) {
+ if (ot.isActive()) {
+ if (calculateDepthForNode(ot.target) > depth) {
+ ro.activeTargets.push(ot);
+ }
+ else {
+ ro.skippedTargets.push(ot);
+ }
+ }
+ });
+ });
+ };
+
+ var process = function () {
+ var depth = 0;
+ gatherActiveObservationsAtDepth(depth);
+ while (hasActiveObservations()) {
+ depth = broadcastActiveObservations();
+ gatherActiveObservationsAtDepth(depth);
+ }
+ if (hasSkippedObservations()) {
+ deliverResizeLoopError();
+ }
+ return depth > 0;
+ };
+
+ var trigger;
+ var callbacks = [];
+ var notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };
+ var queueMicroTask = function (callback) {
+ if (!trigger) {
+ var toggle_1 = 0;
+ var el_1 = document.createTextNode('');
+ var config = { characterData: true };
+ new MutationObserver(function () { return notify(); }).observe(el_1, config);
+ trigger = function () { el_1.textContent = "" + (toggle_1 ? toggle_1-- : toggle_1++); };
+ }
+ callbacks.push(callback);
+ trigger();
+ };
+
+ var queueResizeObserver = function (cb) {
+ queueMicroTask(function ResizeObserver() {
+ requestAnimationFrame(cb);
+ });
+ };
+
+ var watching = 0;
+ var isWatching = function () { return !!watching; };
+ var CATCH_PERIOD = 250;
+ var observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };
+ var events = [
+ 'resize',
+ 'load',
+ 'transitionend',
+ 'animationend',
+ 'animationstart',
+ 'animationiteration',
+ 'keyup',
+ 'keydown',
+ 'mouseup',
+ 'mousedown',
+ 'mouseover',
+ 'mouseout',
+ 'blur',
+ 'focus'
+ ];
+ var time = function (timeout) {
+ if (timeout === void 0) { timeout = 0; }
+ return Date.now() + timeout;
+ };
+ var scheduled = false;
+ var Scheduler = (function () {
+ function Scheduler() {
+ var _this = this;
+ this.stopped = true;
+ this.listener = function () { return _this.schedule(); };
+ }
+ Scheduler.prototype.run = function (timeout) {
+ var _this = this;
+ if (timeout === void 0) { timeout = CATCH_PERIOD; }
+ if (scheduled) {
+ return;
+ }
+ scheduled = true;
+ var until = time(timeout);
+ queueResizeObserver(function () {
+ var elementsHaveResized = false;
+ try {
+ elementsHaveResized = process();
+ }
+ finally {
+ scheduled = false;
+ timeout = until - time();
+ if (!isWatching()) {
+ return;
+ }
+ if (elementsHaveResized) {
+ _this.run(1000);
+ }
+ else if (timeout > 0) {
+ _this.run(timeout);
+ }
+ else {
+ _this.start();
+ }
+ }
+ });
+ };
+ Scheduler.prototype.schedule = function () {
+ this.stop();
+ this.run();
+ };
+ Scheduler.prototype.observe = function () {
+ var _this = this;
+ var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };
+ document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);
+ };
+ Scheduler.prototype.start = function () {
+ var _this = this;
+ if (this.stopped) {
+ this.stopped = false;
+ this.observer = new MutationObserver(this.listener);
+ this.observe();
+ events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });
+ }
+ };
+ Scheduler.prototype.stop = function () {
+ var _this = this;
+ if (!this.stopped) {
+ this.observer && this.observer.disconnect();
+ events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });
+ this.stopped = true;
+ }
+ };
+ return Scheduler;
+ }());
+ var scheduler = new Scheduler();
+ var updateCount = function (n) {
+ !watching && n > 0 && scheduler.start();
+ watching += n;
+ !watching && scheduler.stop();
+ };
+
+ var skipNotifyOnElement = function (target) {
+ return !isSVG(target)
+ && !isReplacedElement(target)
+ && getComputedStyle(target).display === 'inline';
+ };
+ var ResizeObservation = (function () {
+ function ResizeObservation(target, observedBox) {
+ this.target = target;
+ this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;
+ this.lastReportedSize = {
+ inlineSize: 0,
+ blockSize: 0
+ };
+ }
+ ResizeObservation.prototype.isActive = function () {
+ var size = calculateBoxSize(this.target, this.observedBox, true);
+ if (skipNotifyOnElement(this.target)) {
+ this.lastReportedSize = size;
+ }
+ if (this.lastReportedSize.inlineSize !== size.inlineSize
+ || this.lastReportedSize.blockSize !== size.blockSize) {
+ return true;
+ }
+ return false;
+ };
+ return ResizeObservation;
+ }());
+
+ var ResizeObserverDetail = (function () {
+ function ResizeObserverDetail(resizeObserver, callback) {
+ this.activeTargets = [];
+ this.skippedTargets = [];
+ this.observationTargets = [];
+ this.observer = resizeObserver;
+ this.callback = callback;
+ }
+ return ResizeObserverDetail;
+ }());
+
+ var observerMap = new WeakMap();
+ var getObservationIndex = function (observationTargets, target) {
+ for (var i = 0; i < observationTargets.length; i += 1) {
+ if (observationTargets[i].target === target) {
+ return i;
+ }
+ }
+ return -1;
+ };
+ var ResizeObserverController = (function () {
+ function ResizeObserverController() {
+ }
+ ResizeObserverController.connect = function (resizeObserver, callback) {
+ var detail = new ResizeObserverDetail(resizeObserver, callback);
+ observerMap.set(resizeObserver, detail);
+ };
+ ResizeObserverController.observe = function (resizeObserver, target, options) {
+ var detail = observerMap.get(resizeObserver);
+ var firstObservation = detail.observationTargets.length === 0;
+ if (getObservationIndex(detail.observationTargets, target) < 0) {
+ firstObservation && resizeObservers.push(detail);
+ detail.observationTargets.push(new ResizeObservation(target, options && options.box));
+ updateCount(1);
+ scheduler.schedule();
+ }
+ };
+ ResizeObserverController.unobserve = function (resizeObserver, target) {
+ var detail = observerMap.get(resizeObserver);
+ var index = getObservationIndex(detail.observationTargets, target);
+ var lastObservation = detail.observationTargets.length === 1;
+ if (index >= 0) {
+ lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);
+ detail.observationTargets.splice(index, 1);
+ updateCount(-1);
+ }
+ };
+ ResizeObserverController.disconnect = function (resizeObserver) {
+ var _this = this;
+ var detail = observerMap.get(resizeObserver);
+ detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });
+ detail.activeTargets.splice(0, detail.activeTargets.length);
+ };
+ return ResizeObserverController;
+ }());
+
+ var ResizeObserver = (function () {
+ function ResizeObserver(callback) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (typeof callback !== 'function') {
+ throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");
+ }
+ ResizeObserverController.connect(this, callback);
+ }
+ ResizeObserver.prototype.observe = function (target, options) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (!isElement(target)) {
+ throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");
+ }
+ ResizeObserverController.observe(this, target, options);
+ };
+ ResizeObserver.prototype.unobserve = function (target) {
+ if (arguments.length === 0) {
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");
+ }
+ if (!isElement(target)) {
+ throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");
+ }
+ ResizeObserverController.unobserve(this, target);
+ };
+ ResizeObserver.prototype.disconnect = function () {
+ ResizeObserverController.disconnect(this);
+ };
+ ResizeObserver.toString = function () {
+ return 'function ResizeObserver () { [polyfill code] }';
+ };
+ return ResizeObserver;
+ }());
+
+ exports.ResizeObserver = ResizeObserver;
+ exports.ResizeObserverEntry = ResizeObserverEntry;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
diff --git a/node_modules/@juggle/resize-observer/lib/utils/element.d.ts b/node_modules/@juggle/resize-observer/lib/utils/element.d.ts
new file mode 100644
index 0000000..f07eb23
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/element.d.ts
@@ -0,0 +1,5 @@
+declare const isSVG: (target: Element) => boolean;
+declare const isHidden: (target: Element) => boolean;
+declare const isElement: (obj: unknown) => boolean;
+declare const isReplacedElement: (target: Element) => boolean;
+export { isSVG, isHidden, isElement, isReplacedElement };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/element.js b/node_modules/@juggle/resize-observer/lib/utils/element.js
new file mode 100644
index 0000000..966e1af
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/element.js
@@ -0,0 +1,32 @@
+var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };
+var isHidden = function (target) {
+ if (isSVG(target)) {
+ var _a = target.getBBox(), width = _a.width, height = _a.height;
+ return !width && !height;
+ }
+ var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;
+ return !(offsetWidth || offsetHeight || target.getClientRects().length);
+};
+var isElement = function (obj) {
+ var _a, _b;
+ var scope = (_b = (_a = obj) === null || _a === void 0 ? void 0 : _a.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView;
+ return !!(scope && obj instanceof scope.Element);
+};
+var isReplacedElement = function (target) {
+ switch (target.tagName) {
+ case 'INPUT':
+ if (target.type !== 'image') {
+ break;
+ }
+ case 'VIDEO':
+ case 'AUDIO':
+ case 'EMBED':
+ case 'OBJECT':
+ case 'CANVAS':
+ case 'IFRAME':
+ case 'IMG':
+ return true;
+ }
+ return false;
+};
+export { isSVG, isHidden, isElement, isReplacedElement };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/global.d.ts b/node_modules/@juggle/resize-observer/lib/utils/global.d.ts
new file mode 100644
index 0000000..74cc60b
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/global.d.ts
@@ -0,0 +1,8 @@
+import { ResizeObserver } from '../ResizeObserver';
+import { ResizeObserverEntry } from '../ResizeObserverEntry';
+declare type IsomorphicWindow = Window & {
+ ResizeObserver?: typeof ResizeObserver;
+ ResizeObserverEntry?: typeof ResizeObserverEntry;
+};
+export declare const global: IsomorphicWindow;
+export {};
diff --git a/node_modules/@juggle/resize-observer/lib/utils/global.js b/node_modules/@juggle/resize-observer/lib/utils/global.js
new file mode 100644
index 0000000..7df8462
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/global.js
@@ -0,0 +1 @@
+export var global = typeof window !== 'undefined' ? window : {};
diff --git a/node_modules/@juggle/resize-observer/lib/utils/process.d.ts b/node_modules/@juggle/resize-observer/lib/utils/process.d.ts
new file mode 100644
index 0000000..a87f242
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/process.d.ts
@@ -0,0 +1,2 @@
+declare const process: () => boolean;
+export { process };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/process.js b/node_modules/@juggle/resize-observer/lib/utils/process.js
new file mode 100644
index 0000000..b42dbb5
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/process.js
@@ -0,0 +1,18 @@
+import { hasActiveObservations } from '../algorithms/hasActiveObservations';
+import { hasSkippedObservations } from '../algorithms/hasSkippedObservations';
+import { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';
+import { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';
+import { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';
+var process = function () {
+ var depth = 0;
+ gatherActiveObservationsAtDepth(depth);
+ while (hasActiveObservations()) {
+ depth = broadcastActiveObservations();
+ gatherActiveObservationsAtDepth(depth);
+ }
+ if (hasSkippedObservations()) {
+ deliverResizeLoopError();
+ }
+ return depth > 0;
+};
+export { process };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.d.ts b/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.d.ts
new file mode 100644
index 0000000..c92026f
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.d.ts
@@ -0,0 +1,2 @@
+declare const queueMicroTask: (callback: () => void) => void;
+export { queueMicroTask };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js b/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js
new file mode 100644
index 0000000..ba56823
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js
@@ -0,0 +1,15 @@
+var trigger;
+var callbacks = [];
+var notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };
+var queueMicroTask = function (callback) {
+ if (!trigger) {
+ var toggle_1 = 0;
+ var el_1 = document.createTextNode('');
+ var config = { characterData: true };
+ new MutationObserver(function () { return notify(); }).observe(el_1, config);
+ trigger = function () { el_1.textContent = "" + (toggle_1 ? toggle_1-- : toggle_1++); };
+ }
+ callbacks.push(callback);
+ trigger();
+};
+export { queueMicroTask };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.d.ts b/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.d.ts
new file mode 100644
index 0000000..df8bfa9
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.d.ts
@@ -0,0 +1,2 @@
+declare const queueResizeObserver: (cb: () => void) => void;
+export { queueResizeObserver };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js b/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js
new file mode 100644
index 0000000..09b1ae4
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js
@@ -0,0 +1,7 @@
+import { queueMicroTask } from './queueMicroTask';
+var queueResizeObserver = function (cb) {
+ queueMicroTask(function ResizeObserver() {
+ requestAnimationFrame(cb);
+ });
+};
+export { queueResizeObserver };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.d.ts b/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.d.ts
new file mode 100644
index 0000000..cfa6412
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.d.ts
@@ -0,0 +1,3 @@
+import { ResizeObserverDetail } from '../ResizeObserverDetail';
+declare const resizeObservers: ResizeObserverDetail[];
+export { resizeObservers };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js b/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js
new file mode 100644
index 0000000..d6b198b
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js
@@ -0,0 +1,2 @@
+var resizeObservers = [];
+export { resizeObservers };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/scheduler.d.ts b/node_modules/@juggle/resize-observer/lib/utils/scheduler.d.ts
new file mode 100644
index 0000000..dffee4a
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/scheduler.d.ts
@@ -0,0 +1,14 @@
+declare class Scheduler {
+ private observer;
+ private listener;
+ stopped: boolean;
+ constructor();
+ private run;
+ schedule(): void;
+ private observe;
+ start(): void;
+ stop(): void;
+}
+declare const scheduler: Scheduler;
+declare const updateCount: (n: number) => void;
+export { scheduler, updateCount };
diff --git a/node_modules/@juggle/resize-observer/lib/utils/scheduler.js b/node_modules/@juggle/resize-observer/lib/utils/scheduler.js
new file mode 100644
index 0000000..90ac5ab
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/lib/utils/scheduler.js
@@ -0,0 +1,100 @@
+import { process } from './process';
+import { global } from './global';
+import { queueResizeObserver } from './queueResizeObserver';
+var watching = 0;
+var isWatching = function () { return !!watching; };
+var CATCH_PERIOD = 250;
+var observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };
+var events = [
+ 'resize',
+ 'load',
+ 'transitionend',
+ 'animationend',
+ 'animationstart',
+ 'animationiteration',
+ 'keyup',
+ 'keydown',
+ 'mouseup',
+ 'mousedown',
+ 'mouseover',
+ 'mouseout',
+ 'blur',
+ 'focus'
+];
+var time = function (timeout) {
+ if (timeout === void 0) { timeout = 0; }
+ return Date.now() + timeout;
+};
+var scheduled = false;
+var Scheduler = (function () {
+ function Scheduler() {
+ var _this = this;
+ this.stopped = true;
+ this.listener = function () { return _this.schedule(); };
+ }
+ Scheduler.prototype.run = function (timeout) {
+ var _this = this;
+ if (timeout === void 0) { timeout = CATCH_PERIOD; }
+ if (scheduled) {
+ return;
+ }
+ scheduled = true;
+ var until = time(timeout);
+ queueResizeObserver(function () {
+ var elementsHaveResized = false;
+ try {
+ elementsHaveResized = process();
+ }
+ finally {
+ scheduled = false;
+ timeout = until - time();
+ if (!isWatching()) {
+ return;
+ }
+ if (elementsHaveResized) {
+ _this.run(1000);
+ }
+ else if (timeout > 0) {
+ _this.run(timeout);
+ }
+ else {
+ _this.start();
+ }
+ }
+ });
+ };
+ Scheduler.prototype.schedule = function () {
+ this.stop();
+ this.run();
+ };
+ Scheduler.prototype.observe = function () {
+ var _this = this;
+ var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };
+ document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);
+ };
+ Scheduler.prototype.start = function () {
+ var _this = this;
+ if (this.stopped) {
+ this.stopped = false;
+ this.observer = new MutationObserver(this.listener);
+ this.observe();
+ events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });
+ }
+ };
+ Scheduler.prototype.stop = function () {
+ var _this = this;
+ if (!this.stopped) {
+ this.observer && this.observer.disconnect();
+ events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });
+ this.stopped = true;
+ }
+ };
+ return Scheduler;
+}());
+var scheduler = new Scheduler();
+var updateCount = function (n) {
+ !watching && n > 0 && scheduler.start();
+ watching += n;
+ !watching && scheduler.stop();
+};
+export { scheduler, updateCount };
diff --git a/node_modules/@juggle/resize-observer/package.json b/node_modules/@juggle/resize-observer/package.json
new file mode 100644
index 0000000..8fc5e47
--- /dev/null
+++ b/node_modules/@juggle/resize-observer/package.json
@@ -0,0 +1,69 @@
+{
+ "name": "@juggle/resize-observer",
+ "version": "3.2.0",
+ "description": "Polyfills the ResizeObserver API and supports box size options from the latest spec",
+ "main": "lib/exports/resize-observer.umd.js",
+ "module": "lib/exports/resize-observer.js",
+ "types": "lib/exports/resize-observer.d.ts",
+ "files": [
+ "lib/**/*.{js,ts}"
+ ],
+ "scripts": {
+ "build": "rm -rf lib && npm run build:esm && npm run build:umd",
+ "build:esm": "tsc",
+ "build:umd": "rollup -c",
+ "build:docs": "rm -f docs/*.* && parcel build docs/src/index.html --out-dir docs --public-url ./",
+ "ci-tests": "npm test -- --ci --runInBand && cat coverage/lcov.info | coveralls",
+ "test": "npm run lint && jest --coverage",
+ "lint": "eslint '{src,test}/**/*.ts'",
+ "preVersion": "npm run build-docs",
+ "prepublishOnly": "npm run build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/juggle/resize-observer.git"
+ },
+ "keywords": [
+ "ResizeObserver",
+ "polyfill",
+ "ponyfill",
+ "event",
+ "resize",
+ "observer",
+ "typescript",
+ "javascript",
+ "element",
+ "component",
+ "container",
+ "queries",
+ "web components",
+ "front-end",
+ "html",
+ "Angular",
+ "React",
+ "Vue"
+ ],
+ "author": "Juggle",
+ "license": "Apache-2.0",
+ "bugs": {
+ "url": "https://github.com/juggle/resize-observer/issues"
+ },
+ "homepage": "https://juggle.studio/resize-observer/",
+ "devDependencies": {
+ "@types/jest": "^25.2.3",
+ "@typescript-eslint/eslint-plugin": "^3.0.2",
+ "@typescript-eslint/parser": "^3.0.2",
+ "core-js": "^3.6.5",
+ "coveralls": "^3.1.0",
+ "cssnano": "^4.1.10",
+ "eslint": "^7.1.0",
+ "jest": "^26.0.1",
+ "jest-cli": "^26.0.1",
+ "jest-junit": "^10.0.0",
+ "jsdom": "^16.2.2",
+ "parcel-bundler": "^1.12.4",
+ "rollup": "^2.12.0",
+ "ts-jest": "^26.1.0",
+ "typescript": "^3.9.3"
+ }
+}
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..efee459
--- /dev/null
+++ b/package.json
@@ -0,0 +1,13 @@
+{
+ "name": "paperesque",
+ "version": "0.1.0",
+ "description": "paperesque Hugo theme",
+ "main": "index.js",
+ "author": "Fabian Tamp (@capnfabs)",
+ "license": "MIT",
+ "private": true,
+ "dependencies": {
+ "@juggle/resize-observer": "^3.0.2"
+ },
+ "devDependencies": {}
+}
diff --git a/static/css/reboot.css b/static/css/reboot.css
new file mode 100644
index 0000000..9f9f5e0
--- /dev/null
+++ b/static/css/reboot.css
@@ -0,0 +1,326 @@
+/*!
+ * Bootstrap Reboot v4.4.1 (https://getbootstrap.com/)
+ * Copyright 2011-2019 The Bootstrap Authors
+ * Copyright 2011-2019 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
+ */
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+}
+
+html {
+ font-family: sans-serif;
+ line-height: 1.15;
+ -webkit-text-size-adjust: 100%;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+}
+
+article, aside, figcaption, figure, footer, header, hgroup, main, nav, section {
+ display: block;
+}
+
+body {
+ margin: 0;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.5;
+ color: #212529;
+ text-align: left;
+ background-color: #fff;
+}
+
+[tabindex="-1"]:focus:not(:focus-visible) {
+ outline: 0 !important;
+}
+
+hr {
+ box-sizing: content-box;
+ height: 0;
+ overflow: visible;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ margin-top: 0;
+ margin-bottom: 0.5rem;
+}
+
+p {
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+abbr[title],
+abbr[data-original-title] {
+ text-decoration: underline;
+ -webkit-text-decoration: underline dotted;
+ text-decoration: underline dotted;
+ cursor: help;
+ border-bottom: 0;
+ -webkit-text-decoration-skip-ink: none;
+ text-decoration-skip-ink: none;
+}
+
+address {
+ margin-bottom: 1rem;
+ font-style: normal;
+ line-height: inherit;
+}
+
+ol,
+ul,
+dl {
+ margin-top: 0;
+ margin-bottom: 1rem;
+}
+
+ol ol,
+ul ul,
+ol ul,
+ul ol {
+ margin-bottom: 0;
+}
+
+dt {
+ font-weight: 700;
+}
+
+dd {
+ margin-bottom: .5rem;
+ margin-left: 0;
+}
+
+blockquote {
+ margin: 0 0 1rem;
+}
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+small {
+ font-size: 80%;
+}
+
+sub,
+sup {
+ position: relative;
+ font-size: 75%;
+ line-height: 0;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -.25em;
+}
+
+sup {
+ top: -.5em;
+}
+
+a {
+ color: #007bff;
+ text-decoration: none;
+ background-color: transparent;
+}
+
+a:hover {
+ color: #0056b3;
+ text-decoration: underline;
+}
+
+a:not([href]) {
+ color: inherit;
+ text-decoration: none;
+}
+
+a:not([href]):hover {
+ color: inherit;
+ text-decoration: none;
+}
+
+pre,
+code,
+kbd,
+samp {
+ font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+ font-size: 1em;
+}
+
+pre {
+ margin-top: 0;
+ margin-bottom: 1rem;
+ overflow: auto;
+}
+
+figure {
+ margin: 0 0 1rem;
+}
+
+img {
+ vertical-align: middle;
+ border-style: none;
+}
+
+svg {
+ overflow: hidden;
+ vertical-align: middle;
+}
+
+table {
+ border-collapse: collapse;
+}
+
+caption {
+ padding-top: 0.75rem;
+ padding-bottom: 0.75rem;
+ color: #6c757d;
+ text-align: left;
+ caption-side: bottom;
+}
+
+th {
+ text-align: inherit;
+}
+
+label {
+ display: inline-block;
+ margin-bottom: 0.5rem;
+}
+
+button {
+ border-radius: 0;
+}
+
+button:focus {
+ outline: 1px dotted;
+ outline: 5px auto -webkit-focus-ring-color;
+}
+
+input,
+button,
+select,
+optgroup,
+textarea {
+ margin: 0;
+ font-family: inherit;
+ font-size: inherit;
+ line-height: inherit;
+}
+
+button,
+input {
+ overflow: visible;
+}
+
+button,
+select {
+ text-transform: none;
+}
+
+select {
+ word-wrap: normal;
+}
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+ -webkit-appearance: button;
+}
+
+button:not(:disabled),
+[type="button"]:not(:disabled),
+[type="reset"]:not(:disabled),
+[type="submit"]:not(:disabled) {
+ cursor: pointer;
+}
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+ padding: 0;
+ border-style: none;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ box-sizing: border-box;
+ padding: 0;
+}
+
+input[type="date"],
+input[type="time"],
+input[type="datetime-local"],
+input[type="month"] {
+ -webkit-appearance: listbox;
+}
+
+textarea {
+ overflow: auto;
+ resize: vertical;
+}
+
+fieldset {
+ min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
+}
+
+legend {
+ display: block;
+ width: 100%;
+ max-width: 100%;
+ padding: 0;
+ margin-bottom: .5rem;
+ font-size: 1.5rem;
+ line-height: inherit;
+ color: inherit;
+ white-space: normal;
+}
+
+progress {
+ vertical-align: baseline;
+}
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+ height: auto;
+}
+
+[type="search"] {
+ outline-offset: -2px;
+ -webkit-appearance: none;
+}
+
+[type="search"]::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+::-webkit-file-upload-button {
+ font: inherit;
+ -webkit-appearance: button;
+}
+
+output {
+ display: inline-block;
+}
+
+summary {
+ display: list-item;
+ cursor: pointer;
+}
+
+template {
+ display: none;
+}
+
+[hidden] {
+ display: none !important;
+}
diff --git a/static/css/style.css b/static/css/style.css
new file mode 100644
index 0000000..dffe0d0
--- /dev/null
+++ b/static/css/style.css
@@ -0,0 +1,588 @@
+body {
+ -webkit-font-smoothings: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ text-rendering: optimizeLegibility;
+}
+
+code {
+ padding: 2px 4px;
+ font-size: 90%;
+ background-color: #eeeeee;
+ hyphens: none; /* reset changes from