diff --git a/bin/build-site.sh b/bin/build-site.sh index 46faad1f0..a2193953d 100755 --- a/bin/build-site.sh +++ b/bin/build-site.sh @@ -156,6 +156,28 @@ node $TW5_BUILD_TIDDLYWIKI \ --build index favicon static \ || exit 1 +# /tour.html tour edition +node $TW5_BUILD_TIDDLYWIKI \ + ./editions/tour \ + --verbose \ + --output $TW5_BUILD_OUTPUT \ + --rendertiddler $:/core/save/all tour.html text/plain \ + || exit 1 + +# /dev/index.html Developer docs +# /dev/favicon.ico Favicon for dev site +# /dev/static.html Static rendering of default tiddlers +# /dev/alltiddlers.html Static rendering of all tiddlers +# /dev/static/* Static single tiddlers +# /dev/static/static.css Static stylesheet +node $TW5_BUILD_TIDDLYWIKI \ + ./editions/dev \ + --verbose \ + --load $TW5_BUILD_OUTPUT/build.tid \ + --output $TW5_BUILD_OUTPUT/dev \ + --build index favicon static \ + || exit 1 + # /share.html Custom edition for sharing via the URL node $TW5_BUILD_TIDDLYWIKI \ ./editions/share \ diff --git a/editions/prerelease/tiddlywiki.info b/editions/prerelease/tiddlywiki.info index 168fbb41f..c469dcf99 100644 --- a/editions/prerelease/tiddlywiki.info +++ b/editions/prerelease/tiddlywiki.info @@ -14,7 +14,10 @@ "tiddlywiki/dynannotate", "tiddlywiki/codemirror", "tiddlywiki/menubar", - "tiddlywiki/jszip" + "tiddlywiki/jszip", + "tiddlywiki/confetti", + "tiddlywiki/dynannotate", + "tiddlywiki/tour" ], "themes": [ "tiddlywiki/vanilla", diff --git a/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png b/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png new file mode 100644 index 000000000..29a70a1c3 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png.meta b/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png.meta new file mode 100644 index 000000000..b374371bf --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Asteroid (253) Mathilde Image.png.meta @@ -0,0 +1,3 @@ +title: Asteroid (253) Mathilde Image +type: image/png +tags: Image diff --git a/editions/tour/tiddlers/Solar System/Asteroid.tid b/editions/tour/tiddlers/Solar System/Asteroid.tid new file mode 100644 index 000000000..e1b3a0f29 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Asteroid.tid @@ -0,0 +1,17 @@ +created: 20230720112554020 +modified: 20230720112827830 +title: Asteroid +type: text/vnd.tiddlywiki +tags: [[Solar System]] + +[img class=hero-image [Asteroid (253) Mathilde Image]] + +An asteroid is a space rock. It is a small object in the [[Solar System]] that travels around the [[Sun]]. It is like a [[planet|Planet]] but smaller. They range from very small (smaller than a car) to 600 miles (1000 km) across. A few asteroids have asteroid moons. + +The name "asteroid" means "like a star" in the ancient Greek language. Asteroids may look like small stars in the sky, but they really do move around the [[Sun]], while stars only seem to move because the [[Earth]] spins. Like [[planets|Planet]], asteroids do not make their own light. Because of this, some people think "asteroids" is not a good name, and think that the name "planetoid" ("like a planet") would be a better name. + +Giuseppe Piazzi found the first asteroid, in 1801. He called it Ceres, and it is the biggest object in the asteroid belt. Others, like Juno, Pallas, and Vesta were found later. In the 1850s so many had been found, that they were numbered by a Minor planet designation starting with 1 Ceres. Today, astronomers using computerized telescopes find thousands of asteroids every month. Asteroid impact prediction is one of the purposes. + +Asteroids are the leftover rock and other material from the formation of the [[Solar System]]. These rocks were too small to come together to make a [[planet|Planet]]. Some are made of carbon or metal. Depending on what's on the surface, they are classified into various asteroid spectral types including Type M (metal), Type S (stone), and Type C (carbon). + +Most asteroids in our [[Solar System]] are in the asteroid belt between [[Mars]] and [[Jupiter]]. Many are not in the main asteroid belt. The ones that come close to [[Earth]] are called Near-Earth asteroids. Many scientists think asteroids striking the [[Earth]] killed off all the dinosaurs and caused some of the other extinction events. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Comet Image.png b/editions/tour/tiddlers/Solar System/Comet Image.png new file mode 100644 index 000000000..5223b95e3 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Comet Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Comet Image.png.meta b/editions/tour/tiddlers/Solar System/Comet Image.png.meta new file mode 100644 index 000000000..8972522f3 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Comet Image.png.meta @@ -0,0 +1,3 @@ +title: Comet Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Comet.tid b/editions/tour/tiddlers/Solar System/Comet.tid new file mode 100644 index 000000000..1555b6c90 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Comet.tid @@ -0,0 +1,15 @@ +created: 20230720113501352 +modified: 20230720113633994 +title: Comet +type: text/vnd.tiddlywiki +tags: [[Solar System]] + +[img class=hero-image [Comet Image]] + +A comet is a ball of mostly ice that moves around in outer space. Comets are often described as "dirty snowballs". They are very different from [[asteroids|Asteroid]]. The orbital inclinations of comets are usually high and not near the ecliptic where most [[solar system|Solar System]] objects are found. Most of them are long-period comets and come from the [[Kuiper belt]]. That is very far away from the [[Sun]], but some of them also come near enough to [[Earth]] for us to see at night. + +They have long "tails", because the [[Sun]] melts the ice. A comet's tail does not trail behind it, but points directly away from the [[Sun]], because it is blown by the solar wind. The hard centre of the comet is the nucleus. It is one of the blackest things (lowest albedo) in the [[solar system|Solar System]]. When light shone on the nucleus of Halley's Comet, the comet reflected only 4% of the light back to us. + +Periodic comets visit again and again. Non-periodic or single-apparition comets visit only once. + +Comets sometimes break up, as Comet Biela did in the 19th century. Comet Shoemaker-Levy 9 broke up, and the pieces hit [[Jupiter]] in 1994. Some comets orbit (go around) together in groups. Astronomers think these comets are broken pieces that used to be one object. diff --git a/editions/tour/tiddlers/Solar System/Earth Image.png b/editions/tour/tiddlers/Solar System/Earth Image.png new file mode 100644 index 000000000..d2584076c Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Earth Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Earth Image.png.meta b/editions/tour/tiddlers/Solar System/Earth Image.png.meta new file mode 100644 index 000000000..e699640b6 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Earth Image.png.meta @@ -0,0 +1,3 @@ +title: Earth Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Earth's Moon Image.png b/editions/tour/tiddlers/Solar System/Earth's Moon Image.png new file mode 100644 index 000000000..f33afc953 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Earth's Moon Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Earth's Moon Image.png.meta b/editions/tour/tiddlers/Solar System/Earth's Moon Image.png.meta new file mode 100644 index 000000000..855226d8f --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Earth's Moon Image.png.meta @@ -0,0 +1,3 @@ +title: Earth's Moon Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Earth's Moon.tid b/editions/tour/tiddlers/Solar System/Earth's Moon.tid new file mode 100644 index 000000000..6ef234fb0 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Earth's Moon.tid @@ -0,0 +1,10 @@ +created: 20230720105302348 +modified: 20230720105451528 +title: Earth's Moon +type: text/vnd.tiddlywiki + +[img class=hero-image [Earth's Moon Image]] + +The Moon is [[Earth]]'s only natural satellite. We usually see it in the night sky and also during the day. Some other planets also have moons or natural satellites. + +Our moon is about one-fourth of the width of the [[Earth]]. Because it is far away it looks small, about half a degree wide. The gravity on the moon is one-sixth of the [[Earth]]'s gravity. It means that something will be one-sixth as heavy on the Moon than on [[Earth]]. The Moon is a rocky and dusty place. It moves slowly away from the [[Earth]] at a rate of 3.8 cm per year, due to the effect of tidal dissipation. diff --git a/editions/tour/tiddlers/Solar System/Earth.tid b/editions/tour/tiddlers/Solar System/Earth.tid new file mode 100644 index 000000000..1c467fb9d --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Earth.tid @@ -0,0 +1,21 @@ +created: 20230720102439731 +modified: 20230720105223869 +title: Earth +type: text/vnd.tiddlywiki +tags: Planet [[Rocky]] + +[img class=hero-image [Earth Image]] + +Earth is the third planet from the [[Sun]] in the [[Solar System]]. It is the only planet known to have life on it. The Earth formed about 4.5 billion years ago. It is one of four rocky planets on the inner side of the [[Solar System]]. The other three are [[Mercury]], [[Venus]], and [[Mars]]. + +The large mass of the [[Sun]] keeps the Earth in orbit through the force of gravity. Earth also turns around in space, so that different parts face the Sun at different times. Earth goes around the [[Sun]] once (one year) for every 365​1⁄4 times it turns around (one day). + +Earth is the only planet in the [[Solar System]] that has a large amount of liquid water on its surface. About 74% of the surface of Earth is covered by liquid or frozen water. Because of this, people sometimes call it the blue planet. + +Because of its water, Earth is home to millions of species of plants and animals which need water to survive. The things that live on Earth have changed its surface greatly. For example, early cyanobacteria changed the air and gave it oxygen. The living part of Earth's surface is called the "biosphere". + +Earth is one of the eight planets in the [[Solar System]]. There are also thousands of small bodies which move around the [[Sun]]. The [[Solar System]] is moving through the Orion Arm of the [[Milky Way]] galaxy, and will be for about the next 10,000 years. + +Earth is about 150,000,000 kilometres or 93,000,000 miles away from the [[Sun]] (this distance is called an "Astronomical Unit"). It moves on its orbit at an average speed of about 30 km/s (19 mi/s). Earth turns all the way around about 365​1⁄4 times in the time it takes for Earth to go all the way around the [[Sun]]. To make up this extra bit of a day every year, an additional day is used every four years. This is named a "leap year". + +The [[Moon|Earth's Moon]] goes around Earth at an average distance of 400,000 kilometres or 250,000 miles. It is locked to Earth, so that it always has the same half facing Earth; the other half is called the "dark side of the moon". It takes about 27​1⁄3 days for the [[Moon|Earth's Moon]] to go all the way around Earth, but because Earth is moving around the [[Sun]] at the same time, it takes about 29​1⁄2 days for the [[Moon|Earth's Moon]] to go from dark to bright to dark again. This is where the word "month" came from, even though most months now have 30 or 31 days. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Jupiter Image.png b/editions/tour/tiddlers/Solar System/Jupiter Image.png new file mode 100644 index 000000000..933f1c115 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Jupiter Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Jupiter Image.png.meta b/editions/tour/tiddlers/Solar System/Jupiter Image.png.meta new file mode 100644 index 000000000..472a37e54 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Jupiter Image.png.meta @@ -0,0 +1,3 @@ +title: Jupiter Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Jupiter.tid b/editions/tour/tiddlers/Solar System/Jupiter.tid new file mode 100644 index 000000000..54ef1904c --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Jupiter.tid @@ -0,0 +1,15 @@ +created: 20230720103949854 +modified: 20230720104126047 +title: Jupiter +type: text/vnd.tiddlywiki +tags: Planet [[Gas Giant]] + +[img class=hero-image [Jupiter Image]] + +Jupiter is the largest planet in the [[Solar System]]. It is the fifth planet from the [[Sun]]. Jupiter is a gas giant because it is so large, and made mostly of gas. The other gas giants in the Solar System are [[Saturn]], [[Uranus]], and [[Neptune]]. + +Jupiter's mass is about 318 times the mass of [[Earth]]. This is more than twice the mass of all the other planets in the [[Solar System]] put together. + +Jupiter can be seen even without using a telescope. It is the third brightest object in the night sky. Only the [[Earth's Moon]] and [[Venus]] are brighter. The ancient Romans named the planet after their King of the Gods, Jupiter (Latin: Iuppiter). + +Jupiter has 95 known moons. About 75 of them are very small—less than five kilometres wide. The four largest moons of Jupiter are Io, Europa, Ganymede, and Callisto. They are called the Galilean moons because Galileo Galilei discovered them. Ganymede is the largest moon in the Solar System. Its diameter is larger than that of the planet [[Mercury]]. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Kuiper belt.tid b/editions/tour/tiddlers/Solar System/Kuiper belt.tid new file mode 100644 index 000000000..578fa81a0 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Kuiper belt.tid @@ -0,0 +1,12 @@ +created: 20230720113703253 +modified: 20230720113733279 +title: Kuiper belt +type: text/vnd.tiddlywiki + +The Kuiper belt is an area of the [[Solar System]] beyond the orbit of [[Neptune]] (at 30 astronomical units) to 50 AU from the [[Sun]]. + +The objects within the Kuiper Belt together with the members of the scattered disk beyond, are together called trans-Neptunian. + +Many objects such as dwarf planets in the Kuiper belt are much bigger than the ones in the asteroid belt and are round. At least some Kuiper belt objects are icebound. + +The first objects in the Kuiper belt to be found were [[Pluto]] and Charon (moon) but the belt was only identified and named in 1992 when more Kuiper belt objects (KBOs) were found. A few thousand have since been discovered and more than 70,000 KBOs over 100 km (62 mi) in diameter are thought to exist. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Mars Image.png b/editions/tour/tiddlers/Solar System/Mars Image.png new file mode 100644 index 000000000..32ffaa966 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Mars Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Mars Image.png.meta b/editions/tour/tiddlers/Solar System/Mars Image.png.meta new file mode 100644 index 000000000..bdd350430 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Mars Image.png.meta @@ -0,0 +1,5 @@ +created: 20230720103818354 +modified: 20230720103822277 +title: Mars Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Mars.tid b/editions/tour/tiddlers/Solar System/Mars.tid new file mode 100644 index 000000000..34ab6d138 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Mars.tid @@ -0,0 +1,11 @@ +created: 20230720103800905 +modified: 20230720103915592 +title: Mars +type: text/vnd.tiddlywiki +tags: Planet [[Rocky]] + +[img class=hero-image [Mars Image]] + +Mars is the fourth planet from the [[Sun]] in the [[Solar System]] and the second-smallest planet. Mars is a terrestrial planet with polar ice caps of frozen water and carbon dioxide. It has the largest volcano in the [[Solar System]], and some very large impact craters. Mars is named after the mythological Roman god of war because it appears of red color. + +Space probes such as the Viking program landers are the main tools for the exploration of Mars. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Mercury Image.png b/editions/tour/tiddlers/Solar System/Mercury Image.png new file mode 100644 index 000000000..7d92260b5 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Mercury Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Mercury Image.png.meta b/editions/tour/tiddlers/Solar System/Mercury Image.png.meta new file mode 100644 index 000000000..3ff1fd022 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Mercury Image.png.meta @@ -0,0 +1,3 @@ +title: Mercury Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Mercury.tid b/editions/tour/tiddlers/Solar System/Mercury.tid new file mode 100644 index 000000000..2df1fc653 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Mercury.tid @@ -0,0 +1,21 @@ +created: 20230720101415532 +modified: 20230720101809366 +title: Mercury +type: text/vnd.tiddlywiki +tags: Planet [[Rocky]] + +[img class=hero-image [Mercury Image]] + +Mercury is the smallest planet in the [[Solar System]]. It is the closest planet to the [[Sun]]. It makes one trip around the Sun once every 87.969 days. + +Mercury is bright when we can see it from [[Earth]]. It has an apparent magnitude ranging from −2.0 to 5.5. It cannot be seen easily because it is usually too close to the [[Sun]]. Because of this, Mercury can only be seen in the morning or evening twilight or when there is a solar eclipse. + +Less is known about Mercury than about other planets of our [[Solar System]]. Even with telescopes only a small, bright crescent can be seen. It is also hard to put a satellite in orbit around it. Two spacecraft have visited Mercury. The first one was Mariner 10. It only made a map of about 45% of the Mercury's surface from 1974 to 1975. The second is the MESSENGER spacecraft, which finished mapping Mercury in March 2013. + +Mercury looks like [[Earth's Moon]]. It has many craters and smooth plains. It has no moons and little atmosphere as we know it. However, Mercury does have an extremely thin atmosphere, known as an exosphere. Mercury has a large iron core. Because of this Mercury has a magnetic field about 1% as strong as that of the Earth. It is a very dense planet because its core is large. + +Temperature at the surface can be anywhere from about 90 to 700 K (−183 °C to 427 °C, −297 °F to 801 °F), with the subsolar point being the hottest and the bottoms of craters near the poles being the coldest. + +Known sightings of Mercury date back to at least the first millennium BC. Before the 4th century BC, Greek astronomers thought that Mercury was two different objects: The one that they were only able at sunrise, they called Apollo; the other one that they were only able to see at sunset, they called Hermes. The English name for the planet is from the Romans, who named it after the Roman god Mercury. The symbol for Mercury is based on Hermes' staff. + +Even though Mercury is the closest planet to the [[Sun]], it is not the hottest. This is because it has no greenhouse effect. The heat that the [[Sun]] gives it, quickly escapes into space. The hottest planet is [[Venus]]. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Milky Way Image.png b/editions/tour/tiddlers/Solar System/Milky Way Image.png new file mode 100644 index 000000000..a408977b1 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Milky Way Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Milky Way Image.png.meta b/editions/tour/tiddlers/Solar System/Milky Way Image.png.meta new file mode 100644 index 000000000..ba0727bb8 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Milky Way Image.png.meta @@ -0,0 +1,5 @@ +created: 20230720095228607 +modified: 20230720095237609 +title: Milky Way Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Milky Way.tid b/editions/tour/tiddlers/Solar System/Milky Way.tid new file mode 100644 index 000000000..353611a9d --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Milky Way.tid @@ -0,0 +1,14 @@ +created: 20230720095039202 +modified: 20230720095530636 +title: Milky Way +type: text/vnd.tiddlywiki + +[img class=hero-image [Milky Way Image]] + +The Milky Way is our home galaxy. It contains around 400 billion stars, including our [[Sun]]. + +The Milky Way has a diameter of about 170,000 or 200,000 light years, and is a barred spiral galaxy. The idea that the Milky Way is made of stars goes back to the Ancient Greek philosopher Democritus. + +The Milky Way has three main parts: a disk, where the [[Solar System]] is, a bulge at the core, and an outer halo all around it. Although the word "disk" suggests it is flat, the Milky Way is actually not quite flat. It is slightly warped and twisted. + +This galaxy belongs to the Local Group of three large galaxies and over 50 smaller galaxies. The Milky Way is one of the largest galaxies in the group, second to the Andromeda Galaxy. Its closest neighbour is the Canis Major Dwarf Galaxy, which is about 25,000 light years away from the Earth. The Andromeda Galaxy is moving towards the Milky Way Galaxy, and will collide with it in about 3.75 billion years. The Andromeda Galaxy moves with a speed of about 1,800 kilometres per minute. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Moon.tid b/editions/tour/tiddlers/Solar System/Moon.tid new file mode 100644 index 000000000..84dc3e8be --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Moon.tid @@ -0,0 +1,9 @@ +created: 20230720113324534 +modified: 20230720113416564 +title: Moon +type: text/vnd.tiddlywiki +tags: [[Solar System]] + +Bodies which orbit [[planets|Planet]] are called moons. They vary in size. The [[Earth]] has only one moon. Some other planets have many moons, and some have none. When people write just "the moon", they are usually talking about the moon of the Earth. [[Earth's Moon]] is written with a capital letter, Moon. The Latin word for the moon is luna, which is why the adjective used to talk about the moon is "lunar". For example, lunar eclipse. + +Anything that goes around a planet is called a satellite. Moons are natural satellites. People also use rockets to send machines into orbit around the Earth. These machines are called artificial (man-made) satellites. diff --git a/editions/tour/tiddlers/Solar System/Neptune Image.png b/editions/tour/tiddlers/Solar System/Neptune Image.png new file mode 100644 index 000000000..de2fc62a5 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Neptune Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Neptune Image.png.meta b/editions/tour/tiddlers/Solar System/Neptune Image.png.meta new file mode 100644 index 000000000..85d72346a --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Neptune Image.png.meta @@ -0,0 +1,3 @@ +title: Neptune Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Neptune.tid b/editions/tour/tiddlers/Solar System/Neptune.tid new file mode 100644 index 000000000..f6aa264ab --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Neptune.tid @@ -0,0 +1,19 @@ +created: 20230720104752241 +modified: 20230720104941305 +title: Neptune +type: text/vnd.tiddlywiki +tags: Planet [[Gas Giant]] + +[img class=hero-image [Neptune Image]] + +Neptune is the eighth and farthest planet from the [[Sun]] in the [[Solar System]]. It is an ice giant. It is the fourth-largest planet in the system. Neptune has five rings. These rings are hard to see from the [[Earth]]. + +Neptune's mass is 17 times [[Earth]]'s mass and a little bit more than [[Uranus]]' mass. Neptune is denser and smaller than [[Uranus]]. Its greater mass makes its gravity make its atmosphere smaller and denser. + +It was named after the Roman god of the sea, Neptune. Neptune's astronomical symbol is ♆, the trident of the god Neptune. + +Neptune's atmosphere is mostly hydrogen and helium. It also contains small amounts of methane which makes the planet appear blue. Neptune's blue color is much darker than the color of [[Uranus]]. Neptune also has the strongest winds of any planet in the [[Solar System]], as high as 2,100 km/h or 1,300 mph. + +Urbain Le Verrier and John Couch Adams were the astronomers who discovered Neptune. Neptune was not discovered using a telescope. It was the first planet to be discovered using mathematics. In 1821, astronomers saw that [[Uranus]]' orbit was different from what they expected. Another nearby planet's mass was changing [[Uranus]]' orbit. They found Neptune was the cause. + +Voyager 2 visited Neptune on 25 August 1989. It was the only spacecraft to visit the planet. Neptune used to have a huge storm known as the "Great Dark Spot". Voyager 2 discovered the spot in 1989. The dark spot was not seen in 1994, but new spots were found since then. It is not known why the dark spot disappeared. Visits by other space probes have been planned. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Planet Image.png b/editions/tour/tiddlers/Solar System/Planet Image.png new file mode 100644 index 000000000..48f0f247d Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Planet Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Planet Image.png.meta b/editions/tour/tiddlers/Solar System/Planet Image.png.meta new file mode 100644 index 000000000..edb449743 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Planet Image.png.meta @@ -0,0 +1,3 @@ +title: Planet Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Planet.tid b/editions/tour/tiddlers/Solar System/Planet.tid new file mode 100644 index 000000000..b6fd010a3 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Planet.tid @@ -0,0 +1,17 @@ +created: 20230720112945287 +modified: 20230720113139369 +title: Planet +type: text/vnd.tiddlywiki +tags: [[Solar System]] + +[img class=hero-image [Planet Image]] + +A planet is a large object such as [[Venus]] or [[Earth]] that orbits a star. Planets are smaller than stars, and they do not make light. [[Jupiter]] is the biggest planet in the [[Solar System]], while the smallest planet in the [[Solar System]] is [[Mercury]]. + +Planets are shaped like a slightly squashed ball (called a spheroid). Objects that orbit planets are called satellites. A star and everything which orbits it are called a star system. + +There are eight planets in the [[Solar System]]. [[Pluto]] used to be called a planet, but in August 2006, the International Astronomical Union decided it was a dwarf planet instead. There are four more known dwarf planets in the [[Solar System]], Ceres, Makemake, Eris and Haumea. + +The name "planet" is from the Greek word πλανήτης (planetes), meaning "wanderers", or "things that move". Until the 1990s, people only knew the planets in the [[Solar System]]. + +4,905 extrasolar planets (exoplanets) have been discovered in 3,629 planetary systems (January 2022 data). The count includes 808 multi-planetary systems. Known exoplanets range in size from gas giants about twice as large as Jupiter down to just over the size of the [[Moon|Earth's Moon]]. About 100 of these planets are roughly the size as [[Earth]]. Nine of these orbit in the habitable zone of their star. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Pluto Image.png b/editions/tour/tiddlers/Solar System/Pluto Image.png new file mode 100644 index 000000000..826869ba4 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Pluto Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Pluto Image.png.meta b/editions/tour/tiddlers/Solar System/Pluto Image.png.meta new file mode 100644 index 000000000..8bb04416f --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Pluto Image.png.meta @@ -0,0 +1,3 @@ +title: Pluto Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Pluto.tid b/editions/tour/tiddlers/Solar System/Pluto.tid new file mode 100644 index 000000000..f8968bf03 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Pluto.tid @@ -0,0 +1,12 @@ +created: 20230720113803689 +modified: 20230720114100139 +title: Pluto +type: text/vnd.tiddlywiki + +[img class=hero-image [Pluto Image]] + +Pluto is a dwarf [[planet|Planet]] in the [[Solar System]]. Its formal name is 134340 Pluto, and its planetary symbol ⯓ or ♇. Pluto is the ninth largest body that moves around the [[Sun]]. Upon first being discovered, Pluto was considered a planet but was reclassified to a dwarf planet in 2006. It is the largest body in the [[Kuiper belt]]. + +Like other members of the [[Kuiper belt]], Pluto is mainly made of rock and ice. It is quite small. It is about a fifth (⅕) of the weight of the [[Earth's Moon]]. It is only a third (⅓) of its volume. Pluto is very far from the [[Sun]], so its temperature is very low. The average temperature on Pluto is -226 to -240 degrees Celsius. It has an odd orbit and this orbit is very sloped. It takes Pluto to 30 to 49 AU (4.4–7.4 billion km) from the [[Sun]]. This causes Pluto to sometimes go closer to the Sun than [[Neptune]]. + +Since it was discovered in 1930, Pluto was thought to be the [[Solar System]]'s ninth planet. In the late 1970s, the minor planet 2060 Chiron was found and people learned that Pluto had a small size. Later, in the early 21st century, the scattered disc object Eris and other objects like Pluto were discovered. Eris was initially believed to be 27% larger than Pluto, but was later found to be slightly smaller. On August 24, 2006, the International Astronomical Union (IAU) gave a definition to the word "planet" for the first time. By this definition, Pluto was not a planet anymore. It became a "dwarf planet" along with Eris and Ceres. After this, Pluto was put on the list of minor planets and was downgraded in 2006 by astronomer Michael E Brown. It was given the number 134340. Some scientists still think that Pluto should be classified as a planet. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Saturn Image.png b/editions/tour/tiddlers/Solar System/Saturn Image.png new file mode 100644 index 000000000..e2a73acd2 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Saturn Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Saturn Image.png.meta b/editions/tour/tiddlers/Solar System/Saturn Image.png.meta new file mode 100644 index 000000000..42f23a6b3 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Saturn Image.png.meta @@ -0,0 +1,3 @@ +title: Saturn Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Saturn.tid b/editions/tour/tiddlers/Solar System/Saturn.tid new file mode 100644 index 000000000..cbd0848ea --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Saturn.tid @@ -0,0 +1,17 @@ +created: 20230720104344173 +modified: 20230720104515376 +title: Saturn +type: text/vnd.tiddlywiki +tags: Planet [[Gas Giant]] + +[img class=hero-image [Saturn Image]] + +Saturn is the sixth planet from the [[Sun]] in the [[Solar System]]. + +Saturn is one of the four gas giant planets in the [[Solar System]], together with [[Jupiter]], [[Uranus]], and [[Neptune]]. It is the second largest planet in the [[Solar System]] ([[Jupiter]] is larger). + +Saturn was named after the Roman god Saturnus. He was considered to be the same as the Greek god Kronos. Saturn's symbol is ♄ which is the symbol of Saturnus' sickle. + +Inside Saturn is probably a core of iron, nickel, silicon and oxygen compounds, surrounded by a deep layer of metallic hydrogen, then a layer of liquid hydrogen and liquid helium and finally, an outer gaseous layer. + +Saturn has 145 known moons orbiting the planet. The largest moon is Titan. Titan is larger in volume than the planet [[Mercury]]. Titan is the second-largest moon in the [[Solar System]]. The largest moon is a moon of [[Jupiter]], Ganymede. There are also many rings around Saturn. These rings are made of ice with some rocks and dust. Some people think that that the rings were made by a moon impact or other event. Saturn is about 1,433,000,000 km (870,000,000 mi) on average from the [[Sun]]. Saturn takes 29.6 Earth years to move around the [[Sun]]. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Solar System Image.png b/editions/tour/tiddlers/Solar System/Solar System Image.png new file mode 100644 index 000000000..2cd156daf Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Solar System Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Solar System Image.png.meta b/editions/tour/tiddlers/Solar System/Solar System Image.png.meta new file mode 100644 index 000000000..7f9210e9f --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Solar System Image.png.meta @@ -0,0 +1,3 @@ +title: Solar System Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Solar System.tid b/editions/tour/tiddlers/Solar System/Solar System.tid new file mode 100644 index 000000000..9a73fe9ee --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Solar System.tid @@ -0,0 +1,18 @@ +created: 20230720093645837 +modified: 20230720112852404 +title: Solar System +type: text/vnd.tiddlywiki + +[img class=hero-image [Solar System Image]] + +The Solar System is the [[Sun]] and all the objects that orbit around it. The Sun is orbited by [[planets|Planet]], [[asteroids|Asteroid]], [[comets|Comet]] and other things. + +The Solar System is about 4.568 billion years old. The Sun formed by gravity in a large molecular cloud. It is mainly hydrogen, which it converts into helium through nuclear fusion. The planets are in a flattened orbiting disk. This disk was left over from the cloud that formed the Sun. Eventually, the gas and dust of the disk came together into planets. It is thought that almost all stars and their planets form this way. + +The Sun is a star. It makes up 99.9% of the Solar System's mass. This means that it has strong gravity. The other objects are pulled into orbit around the Sun. The Sun is mostly made out of hydrogen, and some helium and higher elements. All heavier elements, called metals in astronomy, account for less than 2% of the Sun's mass. Oxygen is about 1% of the Sun's mass. Iron (0.2%) is the most plentiful of the other elements. + +There are eight planets in the Solar System. From closest to farthest from the Sun, they are: [[Mercury]], [[Venus]], [[Earth]], [[Mars]], [[Jupiter]], [[Saturn]], [[Uranus]] and [[Neptune]]. The first four planets are called terrestrial planets. They are mostly made of rock and metal, and they are mostly solid. The last four planets are called gas giants. This is because they are much larger than other planets and are mostly made of gas. + +Six of the planets, and the six largest dwarf planets, are orbited by [[moons|Moon]]. There are more than 200 moons in the Solar System. [[Mercury]] and [[Venus]] have no moons, and [[Jupiter]] and [[Saturn]] have the largest number of moons. The largest moon is [[Ganymede]] which is a moon of [[Jupiter]]. [[Titan]] is one of [[Saturn]]’s moons. It is the only moon in the Solar System to have an atmosphere, which is mainly composed of nitrogen. + +The Solar System also contains other things. There are [[asteroid belts|Asteroid]], mostly between [[Mars]] and [[Jupiter]]. Further out than [[Neptune]], there is the [[Kuiper belt]] and the scattered disc. These areas have dwarf planets, including [[Pluto]], Makemake, Haumea, Ceres and Eris. There are thousands of very small objects in these areas. There are also [[comets|Comet]], centaurs, and interplanetary dust. diff --git a/editions/tour/tiddlers/Solar System/Sun Image.png b/editions/tour/tiddlers/Solar System/Sun Image.png new file mode 100644 index 000000000..66da3a30a Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Sun Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Sun Image.png.meta b/editions/tour/tiddlers/Solar System/Sun Image.png.meta new file mode 100644 index 000000000..0f4c217b0 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Sun Image.png.meta @@ -0,0 +1,5 @@ +created: 20230720095341229 +modified: 20230720095343728 +type: image/png +title: Sun Image +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Sun.tid b/editions/tour/tiddlers/Solar System/Sun.tid new file mode 100644 index 000000000..16996c886 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Sun.tid @@ -0,0 +1,17 @@ +created: 20230720094834001 +modified: 20230720095518349 +title: Sun +type: text/vnd.tiddlywiki +tags: [[Solar System]] + +[img class=hero-image [Sun Image]] + +The Sun, also known as Sol, is a star at the center of our [[solar system|Solar System]]. It is a yellow star that gives off different types of energy such as infrared energy (heat), ultraviolet light, radio waves and light. It also gives off a stream of particles, which reaches [[Earth]] as "solar wind". The source of all this energy is nuclear fusion. Nuclear fusion is the reaction in the star which turns hydrogen into helium and makes huge amounts of energy. It is a nearly perfect ball of hot plasma. + +The Sun is a star like many others in our [[Milky Way]] galaxy. The Sun is a type of star called a G-type main-sequence star based on its spectral class. + +The Sun has existed for a little over 4.5 billion years. It is going to continue for at least as long again. + +The Sun is about a hundred times as wide as the Earth. It has a mass of 1.9891×1030 kg. This is 333,000 times the mass of the [[Earth]]. 1.3 million [[Earths|Earth]] can fit inside the Sun. The Sun fuses about 600 million tons of hydrogen into helium every second. + +The Sun is the main source of energy for the [[Earth]]. This energy is made deep inside the Sun in a process called nuclear fusion. Four hydrogen atoms are fused together to make one helium atom. Some of the leftover matter turns into energy. This is the same way energy is released in a hydrogen bomb. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Uranus Image.png b/editions/tour/tiddlers/Solar System/Uranus Image.png new file mode 100644 index 000000000..717c12fe9 Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Uranus Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Uranus Image.png.meta b/editions/tour/tiddlers/Solar System/Uranus Image.png.meta new file mode 100644 index 000000000..412b2588a --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Uranus Image.png.meta @@ -0,0 +1,3 @@ +title: Uranus Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Uranus.tid b/editions/tour/tiddlers/Solar System/Uranus.tid new file mode 100644 index 000000000..273021788 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Uranus.tid @@ -0,0 +1,19 @@ +created: 20230720104606510 +modified: 20230720104721998 +title: Uranus +type: text/vnd.tiddlywiki +tags: Planet [[Gas Giant]] + +[img class=hero-image [Uranus Image]] + +Uranus is the seventh planet from the [[Sun]] in our [[Solar System]]. Like [[Neptune]], it is an ice giant. It is the third largest planet in the solar system. + +The planet is made of ice, gases and liquid metal. Its atmosphere contains hydrogen (1H), helium (2He) and methane. The temperature on Uranus is −197 °C (−322.6 °F; 76.1 K) near the top of its atmosphere, but its small solid core (about 55% the mass of [[Earth]]) is probably about 4,730 °C (8,540 °F; 5,000 K). + +The planet is tilted on its axis so much that it is sideways. It has five big moons, many small ones, and a small system of 13 planetary rings. + +The distance between Uranus and the [[Sun]] is about 2.8 billion km. Uranus completes its orbit around the [[Sun]] in 84 earth years. It completes a spin around its axis in 17 hours and 14 minutes. This means there are about 43,000 Uranian days in one Uranian year. + +Uranus was discovered in 1781. This planet can be seen with the naked eye under perfect conditions. John Flamsteed saw it decades earlier but mistook it for a star (34 Tauri). + +Uranus is named after Uranus, the Greek name of the Sumerian god Anu, who was a god of the sky. \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Venus Image.png b/editions/tour/tiddlers/Solar System/Venus Image.png new file mode 100644 index 000000000..665bb18db Binary files /dev/null and b/editions/tour/tiddlers/Solar System/Venus Image.png differ diff --git a/editions/tour/tiddlers/Solar System/Venus Image.png.meta b/editions/tour/tiddlers/Solar System/Venus Image.png.meta new file mode 100644 index 000000000..fc1bd8938 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Venus Image.png.meta @@ -0,0 +1,3 @@ +title: Venus Image +type: image/png +tags: Image \ No newline at end of file diff --git a/editions/tour/tiddlers/Solar System/Venus.tid b/editions/tour/tiddlers/Solar System/Venus.tid new file mode 100644 index 000000000..33a2c1b72 --- /dev/null +++ b/editions/tour/tiddlers/Solar System/Venus.tid @@ -0,0 +1,17 @@ +created: 20230720101839792 +modified: 20230720104223481 +title: Venus +type: text/vnd.tiddlywiki +tags: Planet [[Rocky]] + +[img class=hero-image [Venus Image]] + +Venus is the second planet from the [[Sun]]. Venus is the only planet in the [[Solar System]] that has a day longer than a year. The year length of Venus is 225 [[Earth]] days. The day length of Venus is 243 [[Earth]] days. + +Venus is a terrestrial planet because it has a solid, rocky surface like other planets in the inner [[Solar System]]. Astronomers have known Venus for thousands of years. The ancient Romans named it after their goddess Venus, goddess of love and beauty. + +Venus is the brightest thing in the night sky except for the Moon. It is sometimes called the morning star or the evening star as at some elongations it is easily seen just before the sun comes up in the morning. At other times, it can be seen just after the sun goes down in the evening. Venus comes closer to the [[Earth]] than any other planet does. + +Venus is sometimes called the sister planet of L as they are quite similar in size and gravity. In other ways the planets are very different. Venus' atmosphere (air) is mostly carbon dioxide with clouds of sulphuric acid. Sulphuric acid is a chemical that is poisonous to life. For this it is sometimes known as the Earth's "evil twin". + +The thick atmosphere makes it hard to see the surface. Until the late twentieth century many thought there might be life there. The pressure on Venus' surface is 92 times that of [[Earth]]. Venus is one of only 2 planets in the [[Solar System]] (the other being [[Mercury]]) that has no moons. Venus spins very slowly on its axis and it spins in the opposite direction to the other planets. \ No newline at end of file diff --git a/editions/tour/tiddlers/System/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid b/editions/tour/tiddlers/System/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid new file mode 100644 index 000000000..9fbacf686 --- /dev/null +++ b/editions/tour/tiddlers/System/$__themes_tiddlywiki_vanilla_options_sidebarlayout.tid @@ -0,0 +1,4 @@ +title: $:/themes/tiddlywiki/vanilla/options/sidebarlayout +type: text/vnd.tiddlywiki + +fluid-fixed \ No newline at end of file diff --git a/editions/tour/tiddlers/System/DefaultTiddlers.tid b/editions/tour/tiddlers/System/DefaultTiddlers.tid new file mode 100644 index 000000000..932e7d52c --- /dev/null +++ b/editions/tour/tiddlers/System/DefaultTiddlers.tid @@ -0,0 +1,4 @@ +title: $:/DefaultTiddlers + +[[HelloThere]] +[[Solar System]] diff --git a/editions/tour/tiddlers/System/HelloThere.tid b/editions/tour/tiddlers/System/HelloThere.tid new file mode 100644 index 000000000..c66875f68 --- /dev/null +++ b/editions/tour/tiddlers/System/HelloThere.tid @@ -0,0 +1,5 @@ +title: HelloThere + +Welcome to this TiddlyWiki about the [[Solar System]]. + +With many thanks to the [[Simple English Wikipedia|https://simple.wikipedia.org/]], the original source of this material. diff --git a/editions/tour/tiddlers/System/SiteSubtitle.tid b/editions/tour/tiddlers/System/SiteSubtitle.tid new file mode 100644 index 000000000..77b568672 --- /dev/null +++ b/editions/tour/tiddlers/System/SiteSubtitle.tid @@ -0,0 +1,2 @@ +title: $:/SiteSubitle +text: An Interactive Guide \ No newline at end of file diff --git a/editions/tour/tiddlers/System/SiteTitle.tid b/editions/tour/tiddlers/System/SiteTitle.tid new file mode 100644 index 000000000..a719f77f6 --- /dev/null +++ b/editions/tour/tiddlers/System/SiteTitle.tid @@ -0,0 +1,2 @@ +title: $:/SiteTitle +text: ~TiddlyWiki Tour \ No newline at end of file diff --git a/editions/tour/tiddlers/System/configAutoStartTour.tid b/editions/tour/tiddlers/System/configAutoStartTour.tid new file mode 100644 index 000000000..6bafd6d58 --- /dev/null +++ b/editions/tour/tiddlers/System/configAutoStartTour.tid @@ -0,0 +1,2 @@ +title: $:/config/AutoStartTour +text: yes diff --git a/editions/tour/tiddlers/System/styles.tid b/editions/tour/tiddlers/System/styles.tid new file mode 100644 index 000000000..04e9b94d2 --- /dev/null +++ b/editions/tour/tiddlers/System/styles.tid @@ -0,0 +1,9 @@ +title: $:/demoshow/styles +tags: [[$:/tags/Stylesheet]] + +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline + +.hero-image { +max-width: 300px; +max-height: 300px; +} \ No newline at end of file diff --git a/editions/tour/tiddlywiki.info b/editions/tour/tiddlywiki.info new file mode 100644 index 000000000..1c6ce20dc --- /dev/null +++ b/editions/tour/tiddlywiki.info @@ -0,0 +1,16 @@ +{ + "description": "A step by step introduction to TiddlyWiki", + "plugins": [ + "tiddlywiki/tour", + "tiddlywiki/confetti", + "tiddlywiki/dynannotate" + ], + "themes": [ + "tiddlywiki/vanilla", + "tiddlywiki/snowwhite" + ], + "build": { + "index": [ + "--rendertiddler","$:/core/save/all","index.html","text/plain"] + } +} diff --git a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid index 956deec8c..5f8d5fd34 100644 --- a/editions/tw5.com/tiddlers/hellothere/HelloThere.tid +++ b/editions/tw5.com/tiddlers/hellothere/HelloThere.tid @@ -5,7 +5,22 @@ tags: TableOfContents title: HelloThere type: text/vnd.tiddlywiki -!!.tc-hero-heading ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information'' +
+ + This is a build of ~TiddlyWiki 5 from the branch [[confetti-plugin|https://github.com/Jermolene/TiddlyWiki5/tree/confetti-plugin]]. Despite the name of the branch, it actually introduces two new plugins and brings updates to an existing one: + + * The ''Tour Plugin'' allows interactive learning tours to be created and presented in TiddlyWiki + ** Launch the tour in this wiki with the {{$:/plugins/tiddlywiki/tour/start-tour-button}} button in the sidebar + * The ''Confetti Plugin'' displays animated bursts of confetti + ** See the [[Confetti Plugin readme|$:/plugins/tiddlywiki/confetti/readme]] for examples + * The ''updated Dynannotate Plugin'' gains the ability to highlight screen elements using an animated spotlight effect + ** See the [[Dynannotate Spotlight Demo|$:/plugins/tiddlywiki/dynannotate/examples/spotlight]] + + A standalone demo of the tour functionality is [ext[available here|./tour.html]]. + +
+ + !!.tc-hero-heading ''Welcome to TiddlyWiki, a unique [[non-linear|Philosophy of Tiddlers]] notebook for [[capturing|Creating and editing tiddlers]], [[organising|Structuring TiddlyWiki]] and [[sharing|Sharing your tiddlers with others]] complex information'' Use it to keep your [[to-do list|TaskManagementExample]], to plan an [[essay or novel|"TiddlyWiki for Scholars" by Alberto Molina]], or to organise your wedding. Record every thought that crosses your brain, or build a flexible and responsive website. diff --git a/editions/tw5.com/tiddlywiki.info b/editions/tw5.com/tiddlywiki.info index 5ce9a2f1b..9f9f3aac3 100644 --- a/editions/tw5.com/tiddlywiki.info +++ b/editions/tw5.com/tiddlywiki.info @@ -7,6 +7,9 @@ "tiddlywiki/evernote", "tiddlywiki/internals", "tiddlywiki/menubar", + "tiddlywiki/confetti", + "tiddlywiki/dynannotate", + "tiddlywiki/tour", "tiddlywiki/qrcode" ], "themes": [ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..d57ca1623 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1616 @@ +{ + "name": "tiddlywiki", + "version": "5.3.4-prerelease", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "tiddlywiki", + "version": "5.3.4-prerelease", + "license": "BSD", + "dependencies": { + "aws-sdk": "^2.1543.0" + }, + "bin": { + "tiddlywiki": "tiddlywiki.js" + }, + "devDependencies": { + "eslint": "^7.32.0" + }, + "engines": { + "node": ">=0.8.2" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1543.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1543.0.tgz", + "integrity": "sha512-sC8VwfdlauX7AYYm6Ed4SkONjt7cLr63AdkSL0MS+lwoy1fJwVRb2Kwylv+an1uAdQavRltWnEg2LVo2jzRQuA==", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/aws-sdk/node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json index cb4eb8fc9..62e3cff8d 100644 --- a/package.json +++ b/package.json @@ -36,5 +36,8 @@ "test": "node ./tiddlywiki.js ./editions/test --verbose --version --build index", "lint:fix": "eslint . --fix", "lint": "eslint ." + }, + "dependencies": { + "aws-sdk": "^2.1543.0" } } diff --git a/plugins/tiddlywiki/confetti/confetti-manager.js b/plugins/tiddlywiki/confetti/confetti-manager.js new file mode 100644 index 000000000..98384bf32 --- /dev/null +++ b/plugins/tiddlywiki/confetti/confetti-manager.js @@ -0,0 +1,56 @@ +/*\ +title: $:/plugins/tiddlywiki/confetti/confetti-manager.js +type: application/javascript +module-type: global + +Confetti manager + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var confetti = require("$:/plugins/tiddlywiki/confetti/confetti.js"); + +function ConfettiManager() { + this.outstandingTimers = []; +} + +ConfettiManager.prototype.launch = function (delay,options) { + var self = this, + defaultOptions = { + scalar: 1.2, + particleCount: 400, + zIndex: 2000 + }; + options = $tw.utils.extend(defaultOptions,options); + if(delay > 0) { + var id = setTimeout(function() { + var p = self.outstandingTimers.indexOf(id); + if(p !== -1) { + self.outstandingTimers.splice(p,1); + } else { + console.log("Confetti Manager Error: Cannot find previously stored timer ID"); + debugger; + } + confetti(options); + },delay); + this.outstandingTimers.push(id); + } else { + confetti(options); + } +}; + +ConfettiManager.prototype.reset = function () { + $tw.utils.each(this.outstandingTimers,function(id) { + clearTimeout(id); + }); + this.outstandingTimers = []; + confetti.reset(); +}; + +exports.ConfettiManager = ConfettiManager; + +})(); diff --git a/plugins/tiddlywiki/confetti/confetti-widget.js b/plugins/tiddlywiki/confetti/confetti-widget.js new file mode 100644 index 000000000..6c78f7066 --- /dev/null +++ b/plugins/tiddlywiki/confetti/confetti-widget.js @@ -0,0 +1,67 @@ +/*\ +title: $:/plugins/tiddlywiki/confetti/confetti-widget.js +type: application/javascript +module-type: widget + +Confetti widget + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +var Widget = require("$:/core/modules/widgets/widget.js").widget; + +var confetti = require("$:/plugins/tiddlywiki/confetti/confetti.js"); + +var ConfettiWidget = function(parseTreeNode,options) { + this.initialise(parseTreeNode,options); +}; + +/* +Inherit from the base widget class +*/ +ConfettiWidget.prototype = new Widget(); + +/* +Render this widget into the DOM +*/ +ConfettiWidget.prototype.render = function(parent,nextSibling) { + var self = this; + // Remember parent + this.parentDomNode = parent; + // Compute attributes and execute state + this.computeAttributes(); + this.execute(); + // Launch confetti + if($tw.browser) { + var options = {}; + $tw.utils.each(this.attributes,function(attribute,name) { + options[name] = self.getAttribute(name); + }); + $tw.confettiManager.launch(options.delay,options); + } + // Render children + this.renderChildren(parent,nextSibling); +}; + +/* +Compute the internal state of the widget +*/ +ConfettiWidget.prototype.execute = function() { + // Make child widgets + this.makeChildWidgets(); +}; + +/* +Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering +*/ +ConfettiWidget.prototype.refresh = function(changedTiddlers) { + return this.refreshChildren(changedTiddlers); +}; + +exports.confetti = ConfettiWidget; + +})(); diff --git a/plugins/tiddlywiki/confetti/examples/staggered.tid b/plugins/tiddlywiki/confetti/examples/staggered.tid new file mode 100644 index 000000000..8b45ceef4 --- /dev/null +++ b/plugins/tiddlywiki/confetti/examples/staggered.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/confetti/examples/staggered +tags: $:/tags/ConfettiExample + +<$button> +<$action-sendmessage $message="tm-confetti-launch"/> +<$action-sendmessage $message="tm-confetti-launch" originY=0.6 spread=70 delay=300/> +<$action-sendmessage $message="tm-confetti-launch" originY=0.55 spread=30 delay=600/> +Launch three staggered rounds of confetti + diff --git a/plugins/tiddlywiki/confetti/examples/typing-trigger.tid b/plugins/tiddlywiki/confetti/examples/typing-trigger.tid new file mode 100644 index 000000000..d4362bb63 --- /dev/null +++ b/plugins/tiddlywiki/confetti/examples/typing-trigger.tid @@ -0,0 +1,10 @@ +title: $:/plugins/tiddlywiki/confetti/examples/typing-trigger +tags: $:/tags/ConfettiExample + +Type the word "launch": <$edit-text tiddler="$:/temp/confetti/launchstatus" tag="input" placeholder="Type here"/> + +<$list filter="[{$:/temp/confetti/launchstatus}match:caseinsensitive[launch]]" variable="ignore"> +Launched! +<$confetti particleCount=100/> +<$confetti particleCount=100 delay=300/> + diff --git a/plugins/tiddlywiki/confetti/files/LICENSE b/plugins/tiddlywiki/confetti/files/LICENSE new file mode 100644 index 000000000..d703e2ecc --- /dev/null +++ b/plugins/tiddlywiki/confetti/files/LICENSE @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2020, Kiril Vatev + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/plugins/tiddlywiki/confetti/files/confetti.js b/plugins/tiddlywiki/confetti/files/confetti.js new file mode 100644 index 000000000..b2a5e6e67 --- /dev/null +++ b/plugins/tiddlywiki/confetti/files/confetti.js @@ -0,0 +1,626 @@ +(function main(global, module, isWorker, workerSize) { + var canUseWorker = !!( + global.Worker && + global.Blob && + global.Promise && + global.OffscreenCanvas && + global.OffscreenCanvasRenderingContext2D && + global.HTMLCanvasElement && + global.HTMLCanvasElement.prototype.transferControlToOffscreen && + global.URL && + global.URL.createObjectURL); + + function noop() {} + + // create a promise if it exists, otherwise, just + // call the function directly + function promise(func) { + var ModulePromise = module.exports.Promise; + var Prom = ModulePromise !== void 0 ? ModulePromise : global.Promise; + + if (typeof Prom === 'function') { + return new Prom(func); + } + + func(noop, noop); + + return null; + } + + var raf = (function () { + var TIME = Math.floor(1000 / 60); + var frame, cancel; + var frames = {}; + var lastFrameTime = 0; + + if (typeof requestAnimationFrame === 'function' && typeof cancelAnimationFrame === 'function') { + frame = function (cb) { + var id = Math.random(); + + frames[id] = requestAnimationFrame(function onFrame(time) { + if (lastFrameTime === time || lastFrameTime + TIME - 1 < time) { + lastFrameTime = time; + delete frames[id]; + + cb(); + } else { + frames[id] = requestAnimationFrame(onFrame); + } + }); + + return id; + }; + cancel = function (id) { + if (frames[id]) { + cancelAnimationFrame(frames[id]); + } + }; + } else { + frame = function (cb) { + return setTimeout(cb, TIME); + }; + cancel = function (timer) { + return clearTimeout(timer); + }; + } + + return { frame: frame, cancel: cancel }; + }()); + + var getWorker = (function () { + var worker; + var prom; + var resolves = {}; + + function decorate(worker) { + function execute(options, callback) { + worker.postMessage({ options: options || {}, callback: callback }); + } + worker.init = function initWorker(canvas) { + var offscreen = canvas.transferControlToOffscreen(); + worker.postMessage({ canvas: offscreen }, [offscreen]); + }; + + worker.fire = function fireWorker(options, size, done) { + if (prom) { + execute(options, null); + return prom; + } + + var id = Math.random().toString(36).slice(2); + + prom = promise(function (resolve) { + function workerDone(msg) { + if (msg.data.callback !== id) { + return; + } + + delete resolves[id]; + worker.removeEventListener('message', workerDone); + + prom = null; + done(); + resolve(); + } + + worker.addEventListener('message', workerDone); + execute(options, id); + + resolves[id] = workerDone.bind(null, { data: { callback: id }}); + }); + + return prom; + }; + + worker.reset = function resetWorker() { + worker.postMessage({ reset: true }); + + for (var id in resolves) { + resolves[id](); + delete resolves[id]; + } + }; + } + + return function () { + if (worker) { + return worker; + } + + if (!isWorker && canUseWorker) { + var code = [ + 'var CONFETTI, SIZE = {}, module = {};', + '(' + main.toString() + ')(this, module, true, SIZE);', + 'onmessage = function(msg) {', + ' if (msg.data.options) {', + ' CONFETTI(msg.data.options).then(function () {', + ' if (msg.data.callback) {', + ' postMessage({ callback: msg.data.callback });', + ' }', + ' });', + ' } else if (msg.data.reset) {', + ' CONFETTI && CONFETTI.reset();', + ' } else if (msg.data.resize) {', + ' SIZE.width = msg.data.resize.width;', + ' SIZE.height = msg.data.resize.height;', + ' } else if (msg.data.canvas) {', + ' SIZE.width = msg.data.canvas.width;', + ' SIZE.height = msg.data.canvas.height;', + ' CONFETTI = module.exports.create(msg.data.canvas);', + ' }', + '}', + ].join('\n'); + try { + worker = new Worker(URL.createObjectURL(new Blob([code]))); + } catch (e) { + // eslint-disable-next-line no-console + typeof console !== undefined && typeof console.warn === 'function' ? console.warn('🎊 Could not load worker', e) : null; + + return null; + } + + decorate(worker); + } + + return worker; + }; + })(); + + var defaults = { + particleCount: 50, + angle: 90, + spread: 45, + startVelocity: 45, + decay: 0.9, + gravity: 1, + drift: 0, + ticks: 200, + x: 0.5, + y: 0.5, + shapes: ['square', 'circle'], + zIndex: 100, + colors: [ + '#26ccff', + '#a25afd', + '#ff5e7e', + '#88ff5a', + '#fcff42', + '#ffa62d', + '#ff36ff' + ], + // probably should be true, but back-compat + disableForReducedMotion: false, + scalar: 1 + }; + + function convert(val, transform) { + return transform ? transform(val) : val; + } + + function isOk(val) { + return !(val === null || val === undefined); + } + + function prop(options, name, transform) { + return convert( + options && isOk(options[name]) ? options[name] : defaults[name], + transform + ); + } + + function onlyPositiveInt(number){ + return number < 0 ? 0 : Math.floor(number); + } + + function randomInt(min, max) { + // [min, max) + return Math.floor(Math.random() * (max - min)) + min; + } + + function toDecimal(str) { + return parseInt(str, 16); + } + + function colorsToRgb(colors) { + return colors.map(hexToRgb); + } + + function hexToRgb(str) { + var val = String(str).replace(/[^0-9a-f]/gi, ''); + + if (val.length < 6) { + val = val[0]+val[0]+val[1]+val[1]+val[2]+val[2]; + } + + return { + r: toDecimal(val.substring(0,2)), + g: toDecimal(val.substring(2,4)), + b: toDecimal(val.substring(4,6)) + }; + } + + function getOrigin(options) { + var origin = prop(options, 'origin', Object); + origin.x = prop(origin, 'x', Number); + origin.y = prop(origin, 'y', Number); + + return origin; + } + + function setCanvasWindowSize(canvas) { + canvas.width = document.documentElement.clientWidth; + canvas.height = document.documentElement.clientHeight; + } + + function setCanvasRectSize(canvas) { + var rect = canvas.getBoundingClientRect(); + canvas.width = rect.width; + canvas.height = rect.height; + } + + function getCanvas(zIndex) { + var canvas = document.createElement('canvas'); + + canvas.style.position = 'fixed'; + canvas.style.top = '0px'; + canvas.style.left = '0px'; + canvas.style.pointerEvents = 'none'; + canvas.style.zIndex = zIndex; + + return canvas; + } + + function ellipse(context, x, y, radiusX, radiusY, rotation, startAngle, endAngle, antiClockwise) { + context.save(); + context.translate(x, y); + context.rotate(rotation); + context.scale(radiusX, radiusY); + context.arc(0, 0, 1, startAngle, endAngle, antiClockwise); + context.restore(); + } + + function randomPhysics(opts) { + var radAngle = opts.angle * (Math.PI / 180); + var radSpread = opts.spread * (Math.PI / 180); + + return { + x: opts.x, + y: opts.y, + wobble: Math.random() * 10, + wobbleSpeed: Math.min(0.11, Math.random() * 0.1 + 0.05), + velocity: (opts.startVelocity * 0.5) + (Math.random() * opts.startVelocity), + angle2D: -radAngle + ((0.5 * radSpread) - (Math.random() * radSpread)), + tiltAngle: (Math.random() * (0.75 - 0.25) + 0.25) * Math.PI, + color: opts.color, + shape: opts.shape, + tick: 0, + totalTicks: opts.ticks, + decay: opts.decay, + drift: opts.drift, + random: Math.random() + 2, + tiltSin: 0, + tiltCos: 0, + wobbleX: 0, + wobbleY: 0, + gravity: opts.gravity * 3, + ovalScalar: 0.6, + scalar: opts.scalar + }; + } + + function updateFetti(context, fetti) { + fetti.x += Math.cos(fetti.angle2D) * fetti.velocity + fetti.drift; + fetti.y += Math.sin(fetti.angle2D) * fetti.velocity + fetti.gravity; + fetti.wobble += fetti.wobbleSpeed; + fetti.velocity *= fetti.decay; + fetti.tiltAngle += 0.1; + fetti.tiltSin = Math.sin(fetti.tiltAngle); + fetti.tiltCos = Math.cos(fetti.tiltAngle); + fetti.random = Math.random() + 2; + fetti.wobbleX = fetti.x + ((10 * fetti.scalar) * Math.cos(fetti.wobble)); + fetti.wobbleY = fetti.y + ((10 * fetti.scalar) * Math.sin(fetti.wobble)); + + var progress = (fetti.tick++) / fetti.totalTicks; + + var x1 = fetti.x + (fetti.random * fetti.tiltCos); + var y1 = fetti.y + (fetti.random * fetti.tiltSin); + var x2 = fetti.wobbleX + (fetti.random * fetti.tiltCos); + var y2 = fetti.wobbleY + (fetti.random * fetti.tiltSin); + + context.fillStyle = 'rgba(' + fetti.color.r + ', ' + fetti.color.g + ', ' + fetti.color.b + ', ' + (1 - progress) + ')'; + context.beginPath(); + + if (fetti.shape === 'circle') { + context.ellipse ? + context.ellipse(fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI) : + ellipse(context, fetti.x, fetti.y, Math.abs(x2 - x1) * fetti.ovalScalar, Math.abs(y2 - y1) * fetti.ovalScalar, Math.PI / 10 * fetti.wobble, 0, 2 * Math.PI); + } else if (fetti.shape === 'star') { + var rot = Math.PI / 2 * 3; + var innerRadius = 4 * fetti.scalar; + var outerRadius = 8 * fetti.scalar; + var x = fetti.x; + var y = fetti.y; + var spikes = 5; + var step = Math.PI / spikes; + + while (spikes--) { + x = fetti.x + Math.cos(rot) * outerRadius; + y = fetti.y + Math.sin(rot) * outerRadius; + context.lineTo(x, y); + rot += step; + + x = fetti.x + Math.cos(rot) * innerRadius; + y = fetti.y + Math.sin(rot) * innerRadius; + context.lineTo(x, y); + rot += step; + } + } else { + context.moveTo(Math.floor(fetti.x), Math.floor(fetti.y)); + context.lineTo(Math.floor(fetti.wobbleX), Math.floor(y1)); + context.lineTo(Math.floor(x2), Math.floor(y2)); + context.lineTo(Math.floor(x1), Math.floor(fetti.wobbleY)); + } + + context.closePath(); + context.fill(); + + return fetti.tick < fetti.totalTicks; + } + + function animate(canvas, fettis, resizer, size, done) { + var animatingFettis = fettis.slice(); + var context = canvas.getContext('2d'); + var animationFrame; + var destroy; + + var prom = promise(function (resolve) { + function onDone() { + animationFrame = destroy = null; + + context.clearRect(0, 0, size.width, size.height); + + done(); + resolve(); + } + + function update() { + if (isWorker && !(size.width === workerSize.width && size.height === workerSize.height)) { + size.width = canvas.width = workerSize.width; + size.height = canvas.height = workerSize.height; + } + + if (!size.width && !size.height) { + resizer(canvas); + size.width = canvas.width; + size.height = canvas.height; + } + + context.clearRect(0, 0, size.width, size.height); + + animatingFettis = animatingFettis.filter(function (fetti) { + return updateFetti(context, fetti); + }); + + if (animatingFettis.length) { + animationFrame = raf.frame(update); + } else { + onDone(); + } + } + + animationFrame = raf.frame(update); + destroy = onDone; + }); + + return { + addFettis: function (fettis) { + animatingFettis = animatingFettis.concat(fettis); + + return prom; + }, + canvas: canvas, + promise: prom, + reset: function () { + if (animationFrame) { + raf.cancel(animationFrame); + } + + if (destroy) { + destroy(); + } + } + }; + } + + function confettiCannon(canvas, globalOpts) { + var isLibCanvas = !canvas; + var allowResize = !!prop(globalOpts || {}, 'resize'); + var globalDisableForReducedMotion = prop(globalOpts, 'disableForReducedMotion', Boolean); + var shouldUseWorker = canUseWorker && !!prop(globalOpts || {}, 'useWorker'); + var worker = shouldUseWorker ? getWorker() : null; + var resizer = isLibCanvas ? setCanvasWindowSize : setCanvasRectSize; + var initialized = (canvas && worker) ? !!canvas.__confetti_initialized : false; + var preferLessMotion = typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion)').matches; + var animationObj; + + function fireLocal(options, size, done) { + var particleCount = prop(options, 'particleCount', onlyPositiveInt); + var angle = prop(options, 'angle', Number); + var spread = prop(options, 'spread', Number); + var startVelocity = prop(options, 'startVelocity', Number); + var decay = prop(options, 'decay', Number); + var gravity = prop(options, 'gravity', Number); + var drift = prop(options, 'drift', Number); + var colors = prop(options, 'colors', colorsToRgb); + var ticks = prop(options, 'ticks', Number); + var shapes = prop(options, 'shapes'); + var scalar = prop(options, 'scalar'); + var origin = getOrigin(options); + + var temp = particleCount; + var fettis = []; + + var startX = canvas.width * origin.x; + var startY = canvas.height * origin.y; + + while (temp--) { + fettis.push( + randomPhysics({ + x: startX, + y: startY, + angle: angle, + spread: spread, + startVelocity: startVelocity, + color: colors[temp % colors.length], + shape: shapes[randomInt(0, shapes.length)], + ticks: ticks, + decay: decay, + gravity: gravity, + drift: drift, + scalar: scalar + }) + ); + } + + // if we have a previous canvas already animating, + // add to it + if (animationObj) { + return animationObj.addFettis(fettis); + } + + animationObj = animate(canvas, fettis, resizer, size , done); + + return animationObj.promise; + } + + function fire(options) { + var disableForReducedMotion = globalDisableForReducedMotion || prop(options, 'disableForReducedMotion', Boolean); + var zIndex = prop(options, 'zIndex', Number); + + if (disableForReducedMotion && preferLessMotion) { + return promise(function (resolve) { + resolve(); + }); + } + + if (isLibCanvas && animationObj) { + // use existing canvas from in-progress animation + canvas = animationObj.canvas; + } else if (isLibCanvas && !canvas) { + // create and initialize a new canvas + canvas = getCanvas(zIndex); + document.body.appendChild(canvas); + } + + if (allowResize && !initialized) { + // initialize the size of a user-supplied canvas + resizer(canvas); + } + + var size = { + width: canvas.width, + height: canvas.height + }; + + if (worker && !initialized) { + worker.init(canvas); + } + + initialized = true; + + if (worker) { + canvas.__confetti_initialized = true; + } + + function onResize() { + if (worker) { + // TODO this really shouldn't be immediate, because it is expensive + var obj = { + getBoundingClientRect: function () { + if (!isLibCanvas) { + return canvas.getBoundingClientRect(); + } + } + }; + + resizer(obj); + + worker.postMessage({ + resize: { + width: obj.width, + height: obj.height + } + }); + return; + } + + // don't actually query the size here, since this + // can execute frequently and rapidly + size.width = size.height = null; + } + + function done() { + animationObj = null; + + if (allowResize) { + global.removeEventListener('resize', onResize); + } + + if (isLibCanvas && canvas) { + document.body.removeChild(canvas); + canvas = null; + initialized = false; + } + } + + if (allowResize) { + global.addEventListener('resize', onResize, false); + } + + if (worker) { + return worker.fire(options, size, done); + } + + return fireLocal(options, size, done); + } + + fire.reset = function () { + if (worker) { + worker.reset(); + } + + if (animationObj) { + animationObj.reset(); + } + }; + + return fire; + } + + // Make default export lazy to defer worker creation until called. + var defaultFire; + function getDefaultFire() { + if (!defaultFire) { + defaultFire = confettiCannon(null, { useWorker: true, resize: true }); + } + return defaultFire; + } + + module.exports = function() { + return getDefaultFire().apply(this, arguments); + }; + module.exports.reset = function() { + getDefaultFire().reset(); + }; + module.exports.create = confettiCannon; +}((function () { + if (typeof window !== 'undefined') { + return window; + } + + if (typeof self !== 'undefined') { + return self; + } + + return this || {}; +})(), module, false)); diff --git a/plugins/tiddlywiki/confetti/files/tiddlywiki.files b/plugins/tiddlywiki/confetti/files/tiddlywiki.files new file mode 100644 index 000000000..c59b41874 --- /dev/null +++ b/plugins/tiddlywiki/confetti/files/tiddlywiki.files @@ -0,0 +1,20 @@ +{ + "tiddlers": [ + { + "file": "confetti.js", + "fields": { + "type": "application/javascript", + "title": "$:/plugins/tiddlywiki/confetti/confetti.js", + "module-type": "library" + }, + "prefix": "", + "suffix": "" + },{ + "file": "LICENSE", + "fields": { + "type": "text/plain", + "title": "$:/plugins/tiddlywiki/confetti/license" + } + } + ] +} diff --git a/plugins/tiddlywiki/confetti/plugin.info b/plugins/tiddlywiki/confetti/plugin.info new file mode 100644 index 000000000..f4c2f420c --- /dev/null +++ b/plugins/tiddlywiki/confetti/plugin.info @@ -0,0 +1,6 @@ +{ + "title": "$:/plugins/tiddlywiki/confetti", + "name": "Confetti", + "description": "Animated confetti effect", + "list": "readme" +} diff --git a/plugins/tiddlywiki/confetti/readme.tid b/plugins/tiddlywiki/confetti/readme.tid new file mode 100644 index 000000000..d9606ea6a --- /dev/null +++ b/plugins/tiddlywiki/confetti/readme.tid @@ -0,0 +1,65 @@ +title: $:/plugins/tiddlywiki/confetti/readme + +\define show-example(name) +<$let title={{{ [[$:/plugins/tiddlywiki/confetti/examples/]addsuffix<__name__>] }}}> + +For example: + +<$macrocall $name="copy-to-clipboard-above-right" src=<<__src__>>/> + +<$codeblock code={{{ [get[text]] }}}/> + +Renders as: + +<$transclude tiddler=<<title>> mode="block"/> + +</$let> +\end + +! Introduction + +This plugin adds a programmable confetti cannon to your TiddlyWiki. It is based on https://www.kirilv.com/canvas-confetti/ by Kiril Vatev. + +! Usage + +The confetti cannon can be controlled using messages or via the `<$confetti>` widget. Use the message approach when triggering confetti in response to an action (such as clicking a button). Use the widget approach when confetti is to be triggered by a condition (such as a target number of words being reached). + +!! Messages: tm-confetti-launch and tm-confetti-reset + +The `tm-confetti-launch` message launches the confetti cannon. See below for the available parameters. + +The `tm-confetti-reset` message cancels any confetti that is in progress. + +<<show-example staggered>> + +!! Widget: `<$confetti>` + +The `<$confetti>` widget launches the confetti cannon when it is first rendered. See below for the available attributes. + +Typically it is used in conjunction with a `<$list>` or `<$reveal>` widget that shows the widget when the conditions required to trigger the confetti are satisfied. + +In this example, the confetti will be launched when the word "launch" in typed into the box. + +<<show-example typing-trigger>> + +!! Confetti Launch parameters + +The following options are supported: + +|!Name |!Description |!Default | +|''delay'' |Number of milliseconds to delay the launch |0 | +|''particleCount'' |The number of confetti to launch |50 | +|''angle'' |The angle in which to launch the confetti, in degrees (90 is straight up) |90 | +|''spread'' |How far off center the confetti can go, in degrees. 45 means the confetti will launch at the defined `angle` plus or minus 22.5 degrees |45 | +|''startVelocity'' |How fast the confetti will start going, in pixels |45 | +|''decay'' |How quickly the confetti will lose speed. Keep this number between 0 and 1, otherwise the confetti will gain speed |0.9 | +|''gravity'' |How quickly the particles are pulled down. 1 is full gravity, 0.5 is half gravity, etc. |1 | +|''drift'' |How much to the side the confetti will drift. The default is 0, meaning that they will fall straight down. Use a negative number for left and positive number for right |0 | +|''ticks'' |How many times the confetti will move (this is an abstract quantity; the designed recommends playing with it if the confetti disappears too quickly for you) |200 | +|''originX'' |The `x` position on the page, with `0` being the left edge and `1` being the right edge |0.5 | +|''originY'' |The `y` position on the page, with `0` being the top edge and `1` being the bottom edge |0.5 | +|''colors'' |A space separated list of color strings in hex format (eg `#bada55` or `#ce5`) | | +|''shapes'' |A space separated list of shapes for the confetti. The possible values are `square`, `circle`, and `star`. The default is to use both squares and circles in an even mix. To use a single shape, you can provide just one shape in the list, such as `star`. You can also change the mix by providing a value such as `circle circle square` to use two third circles and one third squares | | +|''scalar'' |Scale factor for each confetti particle. Use decimals to make the confetti smaller |1 | +|''zIndex'' |Z-index of confetti. Increase the value if the confetti is appearing behind other on-screen elements|100 | +|''disableForReducedMotion'' |Set to `yes` to entirely disable confetti for users that [[prefer reduced motion|https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion]] |`no` | diff --git a/plugins/tiddlywiki/confetti/startup.js b/plugins/tiddlywiki/confetti/startup.js new file mode 100644 index 000000000..773d8e9fe --- /dev/null +++ b/plugins/tiddlywiki/confetti/startup.js @@ -0,0 +1,55 @@ +/*\ +title: $:/plugins/tiddlywiki/confetti/startup.js +type: application/javascript +module-type: startup + +Setup the root widget event handlers + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +// Export name and synchronous status +exports.name = "confetti"; +exports.platforms = ["browser"]; +exports.after = ["startup"]; +exports.synchronous = true; + +// Install the root widget event handlers +exports.startup = function() { + $tw.confettiManager = new $tw.ConfettiManager(); + $tw.rootWidget.addEventListener("tm-confetti-launch",function(event) { + var paramObject = event.paramObject || {}, + options = {}, + extractNumericParameter = function(name) { + options[name] = paramObject[name] && $tw.utils.parseNumber(paramObject[name]); + }, + extractListParameter = function(name) { + options[name] = paramObject[name] && $tw.utils.parseStringArray(paramObject[name]); + }, + extractBooleanParameter = function(name) { + options[name] = paramObject[name] && paramObject[name] === "yes"; + }; + $tw.utils.each("particleCount angle spread startVelocity decay gravity drift ticks scalar zIndex".split(" "),function(name) { + extractNumericParameter(name); + }); + $tw.utils.each("colors shapes".split(" "),function(name) { + extractListParameter(name); + }); + options.origin = { + x: paramObject.originX && $tw.utils.parseNumber(paramObject.originX), + y: paramObject.originY && $tw.utils.parseNumber(paramObject.originY) + }; + extractBooleanParameter("disableForReducedMotion"); + var delay = paramObject.delay ? $tw.utils.parseNumber(paramObject.delay) : 0; + $tw.confettiManager.launch(delay,options); + }); + $tw.rootWidget.addEventListener("tm-confetti-reset",function(event) { + $tw.confettiManager.reset(); + }); +}; + +})(); diff --git a/plugins/tiddlywiki/dynannotate/docs/readme.tid b/plugins/tiddlywiki/dynannotate/docs/readme.tid index 5160d137f..6076def30 100644 --- a/plugins/tiddlywiki/dynannotate/docs/readme.tid +++ b/plugins/tiddlywiki/dynannotate/docs/readme.tid @@ -5,6 +5,7 @@ The ''Dynannotate'' plugin allows annotations on textual content to be created a * The dynannotate widget draws clickable textual annotations, search highlights and search snippets as overlays over the top of the content that it contains * The selection tracker keeps track of changes to the selected text in the main browser window. It triggers an action string when the selection changes, passing it the details of the selection. It can be used to display a popup menu ** The original legacy selection tracker is also provided for backwards compatibility. It is much more limited, and not recommended for new projects +* The element spotlight highlights on screen elements using a spotlight animation !! Dynannotate Widget @@ -172,3 +173,12 @@ Notes: * The selection popup will disappear if the selection is cancelled; this will happen if the user clicks on any other element apart than a button. Thus it is not possible to have any interactive controls within the popup apart from buttons +!! Element Spotlight + +The `tm-spotlight-element` message causes a spotlight effect to briefly appear to highlight a specified element. The message accepts the following parameters: + +|!Parameter |!Description | +|`selector` |CSS selector of the element to highlight | +|{//Any parameter names starting with `selector-`}// |Fallback CSS selectors to be used if the primary selector does not resolve to an element | + +The fallback CSS selectors are case-insensitively sorted by title before use, with uppercase letters sorting before lower case letters. The usual convention is to use numeric suffixes: `selector-00`, `selector-01` etc. diff --git a/plugins/tiddlywiki/dynannotate/examples/spotlight.tid b/plugins/tiddlywiki/dynannotate/examples/spotlight.tid new file mode 100644 index 000000000..6e6316b1b --- /dev/null +++ b/plugins/tiddlywiki/dynannotate/examples/spotlight.tid @@ -0,0 +1,71 @@ +title: $:/plugins/tiddlywiki/dynannotate/examples/spotlight +tags: $:/tags/dynannotateExamples +caption: Spotlight + +\define show-example(example) +<$codeblock code=<<__example__>>/> + +//''Displays as:''// + +$example$ +\end + +<div class="tc-dynannotation-example-info"> + +!! Spotlighting an Image + +</div> + +<<show-example """ +<$button> +<$action-sendmessage $message="tm-spotlight-element" selector=".tc-dynannotate-spotlight-image-example"/> +Spotlight this image +</$button> +<div class="tc-dynannotate-spotlight-image-example" style="display:inline-block;"> +{{$:/core/images/globe}} +</div> +""">> + +<div class="tc-dynannotation-example-info"> + +!! Spotlighting a Button + +</div> + +<<show-example """ +<$button class="tc-dynannotate-spotlight-button-example"> +<$action-sendmessage $message="tm-spotlight-element" selector=".tc-dynannotate-spotlight-button-example"/> +Spotlight this button +</$button> +""">> + +<div class="tc-dynannotation-example-info"> + +!! Spotlighting a Text Area + +</div> + +<<show-example """ +<$button> +<$action-sendmessage $message="tm-spotlight-element" selector=".tc-dynannotate-spotlight-textarea-example"/> +Spotlight this text area +</$button> + +<$edit-text class="tc-dynannotate-spotlight-textarea-example" tag="textarea" tiddler="$:/temp/dynannotate/spotlight/demo/text"/> + +""">> + +<div class="tc-dynannotation-example-info"> + +!! Spotlighting the Sidebar Search Input + +This button will spotlight the sidebar search, but if the sidebar is hidden then it will spotlight the button for showing the sidebar. + +</div> + +<<show-example """ +<$button> +<$action-sendmessage $message="tm-spotlight-element" selector=".tc-sidebar-search .tc-popup-handle" selector-fallback=".tc-menubar .tc-show-sidebar-btn"/> +Spotlight the sidebar search input +</$button> +""">> \ No newline at end of file diff --git a/plugins/tiddlywiki/dynannotate/modules/element-spotlight.js b/plugins/tiddlywiki/dynannotate/modules/element-spotlight.js new file mode 100644 index 000000000..cbf4e4679 --- /dev/null +++ b/plugins/tiddlywiki/dynannotate/modules/element-spotlight.js @@ -0,0 +1,136 @@ +/*\ +title: $:/plugins/tiddlywiki/dynannotate/element-spotlight.js +type: application/javascript +module-type: library + +Manages the element spotlight effect + +\*/ +(function(){ + +/*jslint node: true, browser: true */ +/*global $tw: false */ +"use strict"; + +function ElementSpotlight() { + this.animationStartTime; // Undefined if no animation is in progress + // Create DOM nodes + this.spotlightElement = $tw.utils.domMaker("div",{ + "class": "tc-dynannotate-spotlight" + }); + this.spotlightWrapper = $tw.utils.domMaker("div",{ + "class": "tc-dynannotate-spotlight-wrapper", + children: [ + this.spotlightElement + ] + }); + document.body.appendChild(this.spotlightWrapper); +} + +/* +Return the first visible element that matches a selector +*/ +ElementSpotlight.prototype.querySelectorSafe = function(selector) { + var targetNodes; + // Get the matching elements + try { + targetNodes = document.querySelectorAll(selector); + } catch(e) { + console.log("Error with selector: " + selector); + } + if(!targetNodes) { + return undefined; + } + // Remove any elements from the start of the list that are hidden, or have hidden ancestors + var didRemoveFirstEntry; + do { + didRemoveFirstEntry = false; + var hasHiddenAncestor = false, + n = targetNodes[0]; + while(n) { + if(n.hidden || (n instanceof Element && window.getComputedStyle(n).display === "none")) { + hasHiddenAncestor = true; + break; + } + n = n.parentNode; + } + if(hasHiddenAncestor) { + // Remove first entry from targetNodes array + targetNodes = [].slice.call(targetNodes, 1); + didRemoveFirstEntry = true; + } + } while(didRemoveFirstEntry) + // Return the first result + return targetNodes[0]; +}; + +ElementSpotlight.prototype.positionSpotlight = function(x,y,innerRadius,outerRadius,opacity) { + this.spotlightElement.style.display = "block"; + this.spotlightElement.style.backgroundImage = "radial-gradient(circle at " + (x / window.innerWidth * 100) + "% " + (y / window.innerHeight * 100) + "%, transparent " + innerRadius + "px, rgba(0, 0, 0, " + opacity + ") " + outerRadius + "px)"; +}; + +ElementSpotlight.prototype.easeInOut = function(v) { + return (Math.sin((v - 0.5) * Math.PI) + 1) / 2; +}; + +/* +Shine a spotlight on the first element that matches an array of selectors +*/ +ElementSpotlight.prototype.shineSpotlight = function(selectors) { + var self = this; + function animationLoop(selectors) { + // Calculate how far through the animation we are + // 0...1 = zoom in + // 1...2 = hold + // 2...3 = fade out + var now = new Date(), + t = (now - self.animationStartTime) / ($tw.utils.getAnimationDuration() * 2); + t = t >= 3 ? 3 : t; + // Query the selector for the target element + var targetNode, selectorIndex = 0; + while(!targetNode && selectorIndex < selectors.length) { + targetNode = self.querySelectorSafe(selectors[selectorIndex]); + selectorIndex += 1; + } + // Position the spotlight if we've got the target + if(targetNode) { + var rect = targetNode.getBoundingClientRect(); + var innerRadius, outerRadius, opacity; + if(t <= 1) { + t = self.easeInOut(t); + innerRadius = rect.width / 2 + (window.innerWidth * 2 * (1 - t)); + outerRadius = rect.width + (window.innerWidth * 3 * (1 - t)); + opacity = 0.2 + t / 4; + } else if(t <= 2) { + innerRadius = rect.width / 2; + outerRadius = rect.width; + opacity = 0.45; + } else { + t = self.easeInOut(3 - t); + innerRadius = rect.width / 2 + (window.innerWidth * 2 * (1 - t)); + outerRadius = rect.width + (window.innerWidth * 3 * (1 - t)); + opacity = t / 3; + } + self.positionSpotlight((rect.left + rect.right) / 2,(rect.top + rect.bottom) / 2,innerRadius,outerRadius,opacity); + } else { + self.spotlightElement.style.display = "none"; + } + // Call the next frame unless we're at the end + if(t <= 3) { + window.requestAnimationFrame(function () { + animationLoop(selectors); + }); + } else { + // End the animation if we've exceeded the time limit + self.animationStartTime = undefined; + } + } + this.animationStartTime = new Date(); + window.requestAnimationFrame(function () { + animationLoop(selectors); + }); +}; + +exports.ElementSpotlight = ElementSpotlight; + +})(); diff --git a/plugins/tiddlywiki/dynannotate/modules/startup.js b/plugins/tiddlywiki/dynannotate/modules/startup.js index a2fe6a7f6..4324c5893 100644 --- a/plugins/tiddlywiki/dynannotate/modules/startup.js +++ b/plugins/tiddlywiki/dynannotate/modules/startup.js @@ -1,3 +1,5 @@ +const { ElementSpotlight } = require("./element-spotlight"); + /*\ title: $:/plugins/tiddlywiki/dynannotate/startup.js type: application/javascript @@ -22,18 +24,39 @@ var CONFIG_SELECTION_TRACKER_TITLE = "$:/config/Dynannotate/SelectionTracker/Ena CONFIG_LEGACY_SELECTION_TRACKER_TITLE = "$:/config/Dynannotate/LegacySelectionTracker/Enable"; var SelectionTracker = require("$:/plugins/tiddlywiki/dynannotate/selection-tracker.js").SelectionTracker, - LegacySelectionTracker = require("$:/plugins/tiddlywiki/dynannotate/legacy-selection-tracker.js").LegacySelectionTracker; + LegacySelectionTracker = require("$:/plugins/tiddlywiki/dynannotate/legacy-selection-tracker.js").LegacySelectionTracker, + ElementSpotlight = require("$:/plugins/tiddlywiki/dynannotate/element-spotlight.js").ElementSpotlight; exports.startup = function() { $tw.dynannotate = {}; + // Setup selection tracker if($tw.wiki.getTiddlerText(CONFIG_SELECTION_TRACKER_TITLE,"yes") === "yes") { $tw.dynannotate.selectionTracker = new SelectionTracker($tw.wiki); } + // Setup legacy selection tracker if($tw.wiki.getTiddlerText(CONFIG_LEGACY_SELECTION_TRACKER_TITLE,"yes") === "yes") { $tw.dynannotate.legacySelectionTracker = new LegacySelectionTracker($tw.wiki,{ allowBlankSelectionPopup: true }); } + // Set up the element spotlight + $tw.dynannotate.elementSpotlight = new ElementSpotlight(); + $tw.rootWidget.addEventListener("tm-spotlight-element",function(event) { + var selectors = []; + if(event.paramObject.selector) { + selectors.push(event.paramObject.selector); + } + $tw.utils.each(Object.keys(event.paramObject).sort(),function(name) { + var SELECTOR_PROPERTY_PREFIX = "selector-"; + if($tw.utils.startsWith(name,SELECTOR_PROPERTY_PREFIX)) { + selectors.push(event.paramObject[name]); + } + }); + if(event.paramObject["selector-fallback"]) { + selectors.push(event.paramObject["selector-fallback"]); + } + $tw.dynannotate.elementSpotlight.shineSpotlight(selectors); + }); }; })(); diff --git a/plugins/tiddlywiki/dynannotate/styles.tid b/plugins/tiddlywiki/dynannotate/styles.tid index 8b13eba58..9143b8fd0 100644 --- a/plugins/tiddlywiki/dynannotate/styles.tid +++ b/plugins/tiddlywiki/dynannotate/styles.tid @@ -52,3 +52,20 @@ tags: [[$:/tags/Stylesheet]] background: #ffa; padding: 1em; } + +.tc-dynannotate-spotlight-wrapper { + position: fixed; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 1000; + pointer-events: none; +} + +.tc-dynannotate-spotlight { + position: absolute; + height: 100%; + width: 100%; + display: none; +} diff --git a/plugins/tiddlywiki/tour/config-AutoStartTour.tid b/plugins/tiddlywiki/tour/config-AutoStartTour.tid new file mode 100644 index 000000000..ba598fd0e --- /dev/null +++ b/plugins/tiddlywiki/tour/config-AutoStartTour.tid @@ -0,0 +1,2 @@ +title: $:/config/AutoStartTour +text: no diff --git a/plugins/tiddlywiki/tour/config-CurrentTour.tid b/plugins/tiddlywiki/tour/config-CurrentTour.tid new file mode 100644 index 000000000..3f7cd7b5e --- /dev/null +++ b/plugins/tiddlywiki/tour/config-CurrentTour.tid @@ -0,0 +1,2 @@ +title: $:/config/CurrentTour +text: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/config-DefaultColourMappings.multids b/plugins/tiddlywiki/tour/config-DefaultColourMappings.multids new file mode 100644 index 000000000..d753333f9 --- /dev/null +++ b/plugins/tiddlywiki/tour/config-DefaultColourMappings.multids @@ -0,0 +1,31 @@ +title: $:/config/DefaultColourMappings/ + +tour-chooser-button-foreground: <<colour very-muted-foreground>> +tour-chooser-button-hover-background: <<colour muted-foreground>> +tour-chooser-button-hover-foreground:: <<colour background>> +tour-chooser-button-selected-background: <<colour primary>> +tour-chooser-button-selected-foreground: <<colour background>> +tour-chooser-dropdown-foreground: <<colour very-muted-foreground>> +tour-chooser-item-background: <<colour background>> +tour-chooser-item-border: <<colour muted-foreground>> +tour-chooser-item-foreground: <<colour foreground>> +tour-chooser-item-shadow: <<colour muted-foreground>> +tour-chooser-item-start-background: <<colour download-background>> +tour-chooser-item-start-foreground: <<colour background>> +tour-chooser-item-start-hover-background: <<colour primary>> +tour-chooser-item-start-hover-foreground: <<colour background>> +tour-fullscreen-background: <<colour page-background>> +tour-fullscreen-controls-foreground: <<colour muted-foreground>> +tour-navigation-buttons-back-background: red +tour-navigation-buttons-back-foreground: white +tour-navigation-buttons-hint-background: purple +tour-navigation-buttons-hint-foreground: white +tour-navigation-buttons-hover-background: <<colour foreground>> +tour-navigation-buttons-hover-foreground: <<colour background>> +tour-navigation-buttons-next-background: purple +tour-navigation-buttons-next-foreground: white +tour-overlay-background: #cbfff8 +tour-overlay-border: #228877 +tour-step-heading-background: none +tour-step-task-background: <<colour download-background>> +tour-step-task-foreground: <<colour download-foreground>> diff --git a/plugins/tiddlywiki/tour/config-ShowTour.tid b/plugins/tiddlywiki/tour/config-ShowTour.tid new file mode 100644 index 000000000..44ed4339f --- /dev/null +++ b/plugins/tiddlywiki/tour/config-ShowTour.tid @@ -0,0 +1,2 @@ +title: $:/config/ShowTour +text: hide diff --git a/plugins/tiddlywiki/tour/docs.tid b/plugins/tiddlywiki/tour/docs.tid new file mode 100644 index 000000000..0f9168f38 --- /dev/null +++ b/plugins/tiddlywiki/tour/docs.tid @@ -0,0 +1,25 @@ +title: $:/plugins/tiddlywiki/tour/docs + +Tour definition tiddlers have the following fields: + +|!Name |!Description | +|tags |Must include $:/tags/Tour | +|tour-tag |Name of tag used to define tour step sequence | +|logo |Title of tiddler containing logo of tour | +|description |Brief description of the tour | +|text |Longer description of the tour | +|class |(optional) additional class to apply to the tour wrapper | + + +Tour step tiddlers have the following fields: + +|!Name |!Description | +|tags|Must include the tag used to define the tour step sequence | +|caption|Caption for the tour step | +|display-mode|(optional) can be set to `fullscreen` | +|enter-actions|(optional) action string invoked when the step is displayed | +|hint-selector|(optional) selector to be highlighted by the hint button in steps with a step-success-filter | +|hint-text|(optional) text to be displayed for the hint button | +|condition|(optional) filter expression that must return a result for the step to be displayed | +|step-success-filter|(optional) filter expression that must return a result for the step to be considered completed | +|step-success-filtervar|(optional) filter expression evaluated to set the first result as the variable `step-success-filter-var` which can be used in the `step-success-filter` | \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/images/tour-button-icon.tid b/plugins/tiddlywiki/tour/images/tour-button-icon.tid new file mode 100644 index 000000000..88a0a1402 --- /dev/null +++ b/plugins/tiddlywiki/tour/images/tour-button-icon.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/tour-button-icon +tags: $:/tags/Image + +\parameters (size:"22pt") +<svg width=<<size>> height=<<size>> class="tc-image-tour-button tc-image-button" viewBox="0 0 24 24"> +<path d="M0 0h24v24H0z" style="fill:none"/> +<path d="M1.832 10.356a1.024 1.024 0 0 1 0-1.832l9.71-4.856c.288-.144.628-.144.916 0l9.71 4.856a1.024 1.024 0 0 1 0 1.832l-9.71 4.855a1.025 1.025 0 0 1-.916 0l-9.71-4.855Z"/> +<path d="M18.5 13.19v3.25h-.066c.044.163.066.33.066.5 0 1.932-2.913 3.5-6.5 3.5s-6.5-1.568-6.5-3.5c0-.17.022-.337.066-.5H5.5v-3.25l6.042 3.02c.288.145.628.145.916 0l6.042-3.02ZM2.73 8.44l.208 5-.681 3s-.002.709.974.717c.92.007 1-.717 1-.717l-.793-3 .293-5h-1Z"/> +</svg> \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/plugin.info b/plugins/tiddlywiki/tour/plugin.info new file mode 100644 index 000000000..203e98abb --- /dev/null +++ b/plugins/tiddlywiki/tour/plugin.info @@ -0,0 +1,7 @@ +{ + "title": "$:/plugins/tiddlywiki/tour", + "name": "Tour", + "description": "A tour of TiddlyWiki", + "list": "readme docs settings", + "dependents": ["$:/plugins/tiddlywiki/confetti","$:/plugins/tiddlywiki/dynannotate"] +} diff --git a/plugins/tiddlywiki/tour/readme.tid b/plugins/tiddlywiki/tour/readme.tid new file mode 100644 index 000000000..7ebbf380b --- /dev/null +++ b/plugins/tiddlywiki/tour/readme.tid @@ -0,0 +1,3 @@ +title: $:/plugins/tiddlywiki/tour/readme + +The Tour Plugin for TiddlyWiki provides a framework for making interactive guided tours. An "Introduction to ~TiddlyWiki" tour is included in the plugin but it is also possible to load additional tours and switch between them. diff --git a/plugins/tiddlywiki/tour/settings.tid b/plugins/tiddlywiki/tour/settings.tid new file mode 100644 index 000000000..bdb955bee --- /dev/null +++ b/plugins/tiddlywiki/tour/settings.tid @@ -0,0 +1,154 @@ +title: $:/plugins/tiddlywiki/tour/settings + +\import [[$:/plugins/tiddlywiki/tour/variables]] +\procedure button-expand-collapse-all(caption,text) +<$button> + <$list filter="[all[shadows+tiddlers]tag<currentTourTag>]" variable="currentStep"> + <$let + collapseState={{{ [[$:/state/Tour/Settings/Tour/Visibility/]addsuffix<currentTour>addsuffix<currentStep>] }}} + > + <$action-setfield $tiddler=<<collapseState>> text=<<text>>/> + </$let> + </$list> + <$text text=<<caption>>/> +</$button> +\end + +\procedure display-tour-step-field-text(fieldName,fieldCaption) +<$list filter="[<currentStep>has<fieldName>]" variable="ignore"> + <tr> + <th> + <$text text=<<fieldCaption>>/> + </th> + <td> + <$text text={{{ [<currentStep>get<fieldName>] }}}/> + </td> + </tr> +</$list> +\end + +<$let + stateCurrentTour=<<qualify "$:/state/Tour/Settings/Current">> + defaultTour={{{ [{$:/config/CurrentTour}] :else[all[shadows+tiddlers]tag[$:/tags/Tour]] }}} +> + +! Tour Overview + +Select a tour: +<$select tiddler=<<stateCurrentTour>> default=<<defaultTour>>> + <$list filter="[all[shadows+tiddlers]tag[$:/tags/Tour]]"> + <option value=<<currentTiddler>>> + <$transclude $field="description"> + <$text text=<<currentTiddler>>/> + </$transclude> + </option> + </$list> +</$select> + +<$let + currentTour={{{ [<stateCurrentTour>get[text]] :else[<defaultTour>] }}} + currentTourTag={{{ [<currentTour>get[tour-tag]] }}} +> + <table class="tc-tour-settings-tour-details"> + <tbody> + <tr> + <th> + Tour title + </th> + <td> + <$link to=<<currentTour>>><$text text=<<currentTour>>/></$link> + </td> + </tr> + <tr> + <th> + Tour description + </th> + <td> + <div class="tc-tour-settings-tour-details-description"> + <$transclude $tiddler=<<currentTour>>> + (No description available) + </$transclude> + </div> + </td> + </tr> + <tr> + <th> + Tour logo + </th> + <td> + <div class="tc-tour-settings-tour-details-logo"> + <$image source={{{ [<currentTour>get[logo]] }}}/> + </div> + </td> + </tr> + <tr> + <th> + Tour step tag + </th> + <td> + <$transclude $variable="tag" tag=<<currentTourTag>>/> + </td> + </tr> + </tbody> + </table> + <$list filter="[<currentTour>has[settings]]" variable="ignore"> + <p> + Custom tour settings: + </p> + <div class="tc-tour-settings-tour-settings"> + <$transclude $tiddler={{{ [<currentTour>get[settings]] }}}/> + </div> + </$list> + <p> + <<button-expand-collapse-all "Expand All" "show">> + <<button-expand-collapse-all "Collapse All" "hide">> + </p> + <$list filter="[all[shadows+tiddlers]tag<currentTourTag>]" variable="currentStep" counter="stepNumber"> + <$let + collapseState={{{ [[$:/state/Tour/Settings/Tour/Visibility/]addsuffix<currentTour>addsuffix<currentStep>] }}} + > + <div class="tc-tour-settings-tour-step"> + <div class="tc-tour-settings-tour-step-heading"> + <$button class="tc-btn-invisible tc-tour-settings-tour-step-open-button"> + <$action-setfield $tiddler=<<collapseState>> text={{{ [<collapseState>get[text]else[hide]match[show]then[hide]else[show]] }}}/> + <$list filter="[<collapseState>get[text]else[hide]match[show]]" variable="ignore" emptyMessage="{{$:/core/images/right-arrow}}"> + {{$:/core/images/down-arrow}} + </$list> + <span class="tc-tour-settings-tour-step-heading-step-number"> + <$text text=<<stepNumber>>/> + </span> + <$transclude $tiddler=<<currentStep>> $field="caption"> + <$text text=<<currentStep>>/> + </$transclude> + </$button> + <$button class="tc-btn-invisible tc-tour-settings-tour-step-launch-button" tooltip="Launch this step of the tour"> + <$transclude $variable="tour-start" title=<<currentTour>> step=<<currentStep>>/> + {{$:/core/images/open-window}} + </$button> + </div> + <$reveal state=<<collapseState>> text="show" type="match" default="hide" animate="yes"> + <table class="tc-tour-settings-tour-step-details"> + <tbody> + <<display-tour-step-field-text "title" "Title">> + <<display-tour-step-field-text "caption" "Caption">> + <<display-tour-step-field-text "step-success-filter" "step-success-filter">> + <<display-tour-step-field-text "step-success-filter-var" "step-success-filter Variable">> + <<display-tour-step-field-text "display-mode" "Display Mode">> + <<display-tour-step-field-text "enter-actions" "Enter Actions">> + <<display-tour-step-field-text "hint-text" "Hint text">> + <<display-tour-step-field-text "hint-selector" "Hint selector">> + <<display-tour-step-field-text "hint-selector-fallback-1" "Hint selector Fallback 1">> + <<display-tour-step-field-text "hint-selector-fallback-2" "Hint selector Fallback 2">> + <<display-tour-step-field-text "condition" "Condition">> + </tbody> + </table> + <div class="tc-tour-settings-tour-step-body"> + <$transclude $tiddler=<<currentStep>> $mode="block"/> + </div> + </$reveal> + </div> + </$let> + </$list> +</$let> + +</$let> diff --git a/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid new file mode 100644 index 000000000..9adf981e1 --- /dev/null +++ b/plugins/tiddlywiki/tour/simplified-tiddler-with-tags.tid @@ -0,0 +1,106 @@ +title: $:/plugins/tiddlywiki/tour/simplified-tiddler-with-tags + +\whitespace trim +\define tag-pill-styles() +background-color:$(backgroundColor)$; +fill:$(foregroundColor)$; +color:$(foregroundColor)$; +\end + +\procedure tag-pill-label(prefix) +<$text text={{{ [<currentTiddler>removeprefix<prefix>] }}}/> +\end + +\procedure tag-pill-label-link(prefix) +<div> + <$link> + <$transclude $variable="tag-pill-label" prefix=<<prefix>>/> + </$link> +</div> +\end + +<!-- This has no whitespace trim to avoid modifying $actions$. Closing tags omitted for brevity. --> +\define tag-pill-inner(tag,icon,colour,fallbackTarget,colourA,colourB,element-tag,element-attributes,actions,prefix) +\whitespace trim +<$let + foregroundColor=<<contrastcolour target:"""$colour$""" fallbackTarget:"""$fallbackTarget$""" colourA:"""$colourA$""" colourB:"""$colourB$""">> + backgroundColor=<<__colour__>> +> +<$element-tag$ + $element-attributes$ + class="tc-tag-label tc-btn-invisible" + style=<<tag-pill-styles>> +> + <<__actions__>> + <$transclude tiddler=<<__icon__>>/> + <$let currentTiddler=<<__tag__>>> + <$transclude $variable="tag-pill-label" prefix=<<__prefix__>>/> + </$let> +</$element-tag$> +</$let> +\end + +\define tag-pill-body(tag,icon,colour,palette,element-tag,element-attributes,actions,prefix) +<$transclude $variable="tag-pill-inner" + tag=<<__tag__>> + icon=<<__icon__>> + colour=<<__colour__>> + fallbackTarget={{$palette$##tag-background}} + colourA={{$palette$##foreground}} + colourB={{$palette$##background}} + element-tag=<<__element-tag__>> + element-attributes=<<__element-attributes__>> + actions=<<__actions__>> + prefix=<<__prefix__>> +/> +\end + +\procedure simplified-tag(prefix) +<span class="tc-tag-list-item" data-tag-title=<<currentTiddler>>> + <$set name="transclusion" value=<<currentTiddler>>> + <$transclude $variable="tag-pill-body" + tag=<<currentTiddler>> + icon={{{ [<currentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerIconFilter]!is[draft]get[text]] }}} + colour={{{ [<currentTiddler>] :cascade[all[shadows+tiddlers]tag[$:/tags/TiddlerColourFilter]!is[draft]get[text]] }}} + palette={{$:/palette}} + element-tag="$button" + element-attributes="""popup=<<qualify "$:/state/popup/tag">> dragFilter="[all[current]tagging[]]" tag='span'""" + prefix=<<prefix>> + /> + <$reveal state=<<qualify "$:/state/popup/tag">> type="popup" position="below" animate="yes" class="tc-drop-down"> + <$set name="tv-show-missing-links" value="yes"> + <$transclude $variable="tag-pill-label-link" prefix=<<prefix>>/> + </$set> + <hr> + <$list filter="[all[shadows+tiddlers]tag<currentTiddler>]"> + <$transclude $variable="tag-pill-label-link" prefix=<<prefix>>/> + </$list> + </$reveal> + </$set> +</span> +\end + +<$let storyTiddler=<<currentTiddler>>> + <div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tiddler-shadow " role="article"> + <div class="tc-tiddler-title"> + <div class="tc-titlebar"> + <span class="tc-tiddler-controls"> + <$list filter="[<tour-simplified-tiddler-close-button>match[yes]]" variable="ignore"> + {{||$:/core/ui/Buttons/close}} + </$list> + </span> + <span> + <h2 class="tc-title"><$view field="caption"/></h2> + </span> + </div> + </div> + <div class="tc-tags-wrapper"> + <$list filter="[all[current]tags[]sort[title]]" storyview="pop"> + <<simplified-tag "$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/">> + </$list> + </div> + <div class="tc-tiddler-body"> + <$transclude field="text" mode="block"/> + </div> + </div> +</$let> \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/simplified-tiddler.tid b/plugins/tiddlywiki/tour/simplified-tiddler.tid new file mode 100644 index 000000000..22a146b9a --- /dev/null +++ b/plugins/tiddlywiki/tour/simplified-tiddler.tid @@ -0,0 +1,22 @@ +title: $:/plugins/tiddlywiki/tour/simplified-tiddler + +\whitespace trim +<$let storyTiddler=<<currentTiddler>>> + <div class="tc-tiddler-frame tc-tiddler-view-frame tc-tiddler-exists tc-tiddler-shadow " role="article"> + <div class="tc-tiddler-title"> + <div class="tc-titlebar"> + <span class="tc-tiddler-controls"> + <$list filter="[<tour-simplified-tiddler-close-button>match[yes]]" variable="ignore"> + {{||$:/core/ui/Buttons/close}} + </$list> + </span> + <span> + <h2 class="tc-title"><$view field="caption"/></h2> + </span> + </div> + </div> + <div class="tc-tiddler-body"> + <$transclude field="text" mode="block"/> + </div> + </div> +</$let> \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/start-tour-button.tid b/plugins/tiddlywiki/tour/start-tour-button.tid new file mode 100644 index 000000000..d04d8b698 --- /dev/null +++ b/plugins/tiddlywiki/tour/start-tour-button.tid @@ -0,0 +1,18 @@ +title: $:/plugins/tiddlywiki/tour/start-tour-button +tags: $:/tags/PageControls +caption: {{$:/plugins/tiddlywiki/tour/tour-button-icon}} Start Tour +description: Start interactive training tour + +\whitespace trim +\import [[$:/plugins/tiddlywiki/tour/variables]] +<$button tooltip="Start interactive training tour" aria-label="Start Tour" class=<<tv-config-toolbar-class>>> +<<tour-restart>> +<$list filter="[<tv-config-toolbar-icons>match[yes]]" variable="listItem"> +{{$:/plugins/tiddlywiki/tour/tour-button-icon}} +</$list> +<$list filter="[<tv-config-toolbar-text>match[yes]]"> +<span class="tc-btn-text"> +<$text text="Start Tour"/> +</span> +</$list> +</$button> \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/startup-actions.tid b/plugins/tiddlywiki/tour/startup-actions.tid new file mode 100644 index 000000000..033e0a614 --- /dev/null +++ b/plugins/tiddlywiki/tour/startup-actions.tid @@ -0,0 +1,7 @@ +title: $:/plugins/tiddlywiki/tour/startup-actions +tags: $:/tags/StartupAction + +\import [[$:/plugins/tiddlywiki/tour/variables]] +<$list filter="[[$:/config/AutoStartTour]get[text]else[no]match[yes]]" variable="ignore"> +<<tour-restart>> +</$list> diff --git a/plugins/tiddlywiki/tour/styles.tid b/plugins/tiddlywiki/tour/styles.tid new file mode 100644 index 000000000..2cd28bc93 --- /dev/null +++ b/plugins/tiddlywiki/tour/styles.tid @@ -0,0 +1,261 @@ +title: $:/plugins/tiddlywiki/tour/styles +tags: $:/tags/Stylesheet + +\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock + +.tc-tour-panel { + position: fixed; + bottom: 0; + left: 0; + width: 310px; + height: 400px; + overflow: auto; + -webkit-overflow-scrolling: touch; + <<box-shadow "0px 0px 5px rgba(0, 0, 0, 0.3)">> + border: 1px solid <<colour tour-overlay-border>>; + background: <<colour tour-overlay-background>>; + border-radius: 8px; + padding: 1em; + margin: 0.5em; + z-index: 2000; +} + +.tc-tour-panel-navigation .tc-btn-big-green { + border-radius: 0.25em; + margin: 0 1em 0 0; +} + +.tc-tour-panel-navigation .tc-btn-big-green.tc-tour-panel-navigation-back { + background: <<colour tour-navigation-buttons-back-background>>; + color: <<colour tour-navigation-buttons-back-foreground>>; +} + +.tc-tour-panel-navigation .tc-btn-big-green.tc-tour-panel-navigation-next { + background: <<colour tour-navigation-buttons-next-background>>; + color: <<colour tour-navigation-buttons-next-foreground>>; +} + +.tc-tour-panel-navigation .tc-btn-big-green.tc-tour-panel-navigation-hint { + background: <<colour tour-navigation-buttons-hint-background>>; + color: <<colour tour-navigation-buttons-hint-foreground>>; +} + +.tc-tour-panel-navigation .tc-btn-big-green:hover { + color: <<colour tour-navigation-buttons-hover-foreground>>; + background: <<colour tour-navigation-buttons-hover-background>>; +} + +.tc-tour-panel-fullscreen { + top: 0; + right: 0; + width: auto; + height: auto; + box-shadow: none; + border: none; + background: <<colour tour-fullscreen-background>>; + margin: 0; + border-radius: 0; +} + +.tc-tour-panel-controls .tc-tour-panel-list-button { + padding: 2px 8px; + border-radius: 1em; + color: <<color tour-chooser-button-foreground>>; + text-align: left; +} + +.tc-tour-panel-controls .tc-tour-panel-list-button.tc-selected { + color: <<colour tour-chooser-button-selected-foreground>>; + fill: <<colour tour-chooser-button-selected-foreground>>; + background: <<color tour-chooser-button-selected-background>>; +} + +.tc-tour-panel-controls .tc-tour-panel-list-button:hover { + background: <<colour tour-chooser-button-hover-background>>; + color: <<colour tour-chooser-button-hover-foreground>>; +} + +.tc-tour-panel-controls .tc-popup .tc-drop-down { + font-size: 1em; + color: <<colour tour-chooser-dropdown-foreground>>; + min-width: auto; +} + +.tc-tour-panel-chooser-item { + border: 1px solid <<colour tour-chooser-item-border>>; + background: <<colour tour-chooser-item-background>>; + color: <<colour tour-chooser-item-foreground>>; + padding: 4px 4px 4px 8px; + margin: 12px 0; + border-radius: 12px; + box-shadow: 3px 3px 5px <<colour tour-chooser-item-shadow>>; + display: flex; + flex-direction: row; + justify-content: space-between; + gap: 1em; +} + +.tc-tour-panel-chooser-item .tc-tour-panel-chooser-start-button { + display: inline-block; + width: auto; + padding: 4px; + font-size: 0.7em; + vertical-align: baseline; + border-radius: 1em; + background: <<colour tour-chooser-item-start-background>>; + color: <<colour tour-chooser-item-start-foreground>>; + fill: <<colour tour-chooser-item-start-foreground>>; + text-transform: uppercase; +} + +.tc-tour-panel-chooser-wrapper button:hover { + background: <<colour tour-chooser-item-start-hover-background>>; + color: <<colour tour-chooser-item-start-hover-foreground>>; +} + +.tc-tour-panel-fullscreen h1 { + background: <<colour tour-step-heading-background>>; + padding: 0.25em; + margin: -0.25em; + border-radius: 4px; +} + +.tc-tour-panel-fullscreen .tc-tour-panel-controls { + /* display: none; */ + position: fixed; + top: 0; + left: 0; + right: 0; + padding: 4px; + color: <<colour tour-fullscreen-controls-foreground>>; +} + +.tc-tour-panel .tc-tour-panel-banner-image { + display: none; +} + +.tc-tour-panel-fullscreen .tc-tour-panel-banner-image { + display: block; + width: 200px; + float: right; + margin: 4em 2em 2em 2em; +} + +.tc-tour-panel-fullscreen .tc-tour-panel-inner { + width: 30%; + min-width: 400px; + height: 30%; + margin: 20% auto; +} + +.tc-tour-panel .tc-tour-panel-inner .tc-tiddler-frame { + width: auto; + padding: 1.5em 2.5em; +} + +.tc-tour-panel .tc-tour-panel-inner .tc-tiddler-frame .tc-titlebar { + font-size: 1.5em; + line-height: 1.1; +} + +.tc-tour-task { + background: <<colour tour-step-task-background>>; + color: <<colour tour-step-task-foreground>>; + padding: 0.5em; + border-radius: 1em; +} + +.tc-tour-task svg { + fill: <<colour tour-step-task-foreground>>; + vertical-align: middle; + width: 1.2em; + height: 1.2em; + margin-right: 0.5em; +} + +.tc-tour-settings-tour-details, +.tc-tour-settings-tour-step-details { + width: 100%; +} + +.tc-tour-settings-tour-details th, +.tc-tour-settings-tour-step-details th { + text-align: right; + vertical-align: top; + font-weight: normal; + width:10em; +} + +.tc-tour-settings-tour-details td, +.tc-tour-settings-tour-step-details td { + font-weight: bold; +} + +.tc-tour-settings-tour-details-description { + +} + +.tc-tour-settings-tour-details-logo img { + max-width: 200px; + max-height: 100px; +} + +.tc-tour-settings-tour-settings { + border: 1px solid <<colour muted-foreground>>; + margin: 0.5em 0; + padding: 0.5em; +} + +.tc-tour-settings-tour-step { + border: 1px solid <<colour foreground>>; +} + +.tc-tour-settings-tour-step-heading { + background: <<colour muted-foreground>>; + border: 0; + display: flex; + flex-wrap: nowrap; + justify-content: space-between; + align-items: center; + gap: 5px; +} + +.tc-tour-settings-tour-step-open-button, +.tc-tour-settings-tour-step-launch-button { + display: inline-block; + padding: 0.25em; +} + +.tc-tour-settings-tour-step-open-button { + flex-grow: 1; + text-align: left; +} + +.tc-tour-settings-tour-step-launch-button { + flex-grow: 0; +} + +.tc-tour-settings-tour-step-open-button:hover, +.tc-tour-settings-tour-step-launch-button:hover { + background: <<colour foreground>>; + color: <<colour background>>; + fill: <<colour background>>; +} + +.tc-tour-settings-tour-step-heading-step-number { + font-weight: bold; + background: <<colour foreground>>; + color: <<colour background>>; + border-radius: 1em; + font-size: 0.9em; + display: inline-block; + padding: 0 4px; +} + +.tc-tour-settings-tour-step-details { + margin: 0; +} + +.tc-tour-settings-tour-step-body { + padding: 0.5em; +} diff --git a/plugins/tiddlywiki/tour/tour-panel.tid b/plugins/tiddlywiki/tour/tour-panel.tid new file mode 100644 index 000000000..63a23f6e6 --- /dev/null +++ b/plugins/tiddlywiki/tour/tour-panel.tid @@ -0,0 +1,106 @@ +title: $:/plugins/tiddlywiki/tour/panel +tags: $:/tags/PageTemplate + +\whitespace trim + +\procedure tour-buttons() +\procedure tv-action-refresh-policy() always +<div class="tc-tour-panel-navigation"> + <%if [function[tour-is-not-first-step]] %> + <$button class="tc-btn-big-green tc-tour-panel-navigation-back"> + <<tour-previous-step>> + back + </$button> + <%endif%> + <%if [function[tour-is-not-last-step]] %> + <$button class="tc-btn-big-green tc-tour-panel-navigation-next"> + <<tour-next-step>> + next + </$button> + <%endif%> + <%if [function[tour-is-last-step]] %> + <$confetti/> + <$confetti delay=100/> + <$confetti delay=200/> + <$confetti delay=300/> + <$confetti delay=400/> + <$confetti delay=500/> + <%endif%> +</div> +\end + +\procedure tour-step-no-success-filter() +<$transclude tiddler=<<currentTourStep>> mode="block"/> +<<tour-buttons>> +\end tour-step-no-success-filter + +\procedure tour-step-success-filter-not-satisfied() +<$transclude tiddler=<<currentTourStep>> mode="block"/> +<%if [{$:/state/tour/step}has[hint-selector]] %> + <div class="tc-tour-panel-navigation"> + <$button class="tc-btn-big-green tc-tour-panel-navigation-hint"> + <$action-sendmessage $message="tm-spotlight-element" selector={{{ [{$:/state/tour/step}get[hint-selector]] }}} selector-fallback-1={{{ [{$:/state/tour/step}get[hint-selector-fallback-1]] }}} selector-fallback-2={{{ [{$:/state/tour/step}get[hint-selector-fallback-2]] }}}/> + <$transclude tiddler={{$:/state/tour/step}} field="hint-text" mode="inline"> show me a hint </$transclude> + </$button> + </div> +<%endif%> +\end tour-step-success-filter-not-satisfied + +\procedure tour-step-success-filter-satisfied() +<$let tour-task=""> + <$transclude tiddler=<<currentTourStep>> mode="block"/> +</$let> +<$confetti/> +<p> + Congratulations, you may proceed +</p> +<<tour-buttons>> +\end tour-step-success-filter-satisfied +\import [[$:/plugins/tiddlywiki/tour/variables]] + +<%if [{$:/config/ShowTour}!is[blank]else[show]match[show]] %> + <div class=`tc-tour-panel tc-tour-panel-${ [{$:/state/tour/step}get[display-mode]else[normal]] }$ ${ [{$:/config/CurrentTour}get[class]] }$`> + <$image class="tc-tour-panel-banner-image" source={{{ [{$:/config/CurrentTour}get[logo]] }}}/> + <div class="tc-tour-panel-inner"> + <div class="tc-tiddler-controls tc-tour-panel-controls"> + <$button set="$:/config/ShowTour" setTo="no" class="tc-btn-invisible">{{$:/core/images/close-button}}</$button> + <$button popup=<<qualify "$:/state/popup/tour-dropdown">> class="tc-btn-invisible tc-tour-panel-list-button" selectedClass="tc-selected"> + <span class="tc-small-gap-right">''Tour'':</span> <<tour-display-current-tour>> + </$button> + <$reveal state=<<qualify "$:/state/popup/tour-dropdown">> type="popup" position="belowleft" animate="yes" tag="div"> + <div class="tc-drop-down"> + <p> + Choose a tour: + </p> + <p> + <<tour-chooser>> + </p> + </div> + </$reveal> + </div> + <$let + currentTour={{$:/config/CurrentTour}} + currentTourStep={{$:/state/tour/step}} + step-success-filter-var={{{ [<currentTourStep>get[step-success-filter-var]] :map[subfilter<currentTiddler>] }}} + > + <%if [<currentTourStep>has[caption]] %> + <h1><$transclude $tiddler=<<currentTourStep>> $field="caption" mode="inline"/></h1> + <%endif%> + <!-- Handle steps without a step-success-filter --> + <%if [<currentTourStep>!has[step-success-filter]] %> + <<tour-step-no-success-filter>> + <%endif%> + <!-- Handle steps that have a step-success-filter --> + <%if [<currentTourStep>has[step-success-filter]] %> + <$let step-success-filter={{{ [<currentTourStep>get[step-success-filter]] }}}> + <%if [subfilter<step-success-filter>] %> + <<tour-step-success-filter-satisfied>> + <%else%> + <<tour-step-success-filter-not-satisfied>> + <%endif%> + </$let> + <%endif%> + </$let> + </div> + </div> +<%endif%> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/config/ProductName.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/config/ProductName.tid new file mode 100644 index 000000000..be410b9e1 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/config/ProductName.tid @@ -0,0 +1,2 @@ +title: $:/config/Tours/IntroductionToTiddlyWiki/ProductName +text: ~TiddlyWiki diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-GasGiant.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-GasGiant.tid new file mode 100644 index 000000000..a3acbe3f6 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-GasGiant.tid @@ -0,0 +1,4 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Gas Giant +caption: Gas Giant + + A gas giant is a large planet that has a solid core, but a very thick atmosphere. This means that most of the planet is made up of gas. These planets are very large. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Jupiter.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Jupiter.tid new file mode 100644 index 000000000..139bfc372 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Jupiter.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Jupiter +caption: Jupiter +tags: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Planet [[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Gas Giant]] + +Jupiter is the largest planet in the Solar System. It is the fifth planet from the Sun. Jupiter is a gas giant because it is so large and made of gas. The other gas giants in the Solar System are [[Saturn|$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Saturn]], Uranus, and Neptune. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Mars.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Mars.tid new file mode 100644 index 000000000..68bac333d --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Mars.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Mars +caption: Mars +tags: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Planet [[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Rocky]] + +Mars is the fourth planet from the Sun in the Solar System and the second-smallest planet. Mars is a terrestrial planet with polar ice caps of frozen water and carbon dioxide. It has the largest volcano in the Solar System, and some very large impact craters. Mars is named after the mythological Roman god of war because it appears of red color. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Planet.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Planet.tid new file mode 100644 index 000000000..1f5d782b1 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Planet.tid @@ -0,0 +1,4 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Planet +caption: Planet + + A planet is a large object such as Venus or Earth that orbits a star. Planets are smaller than stars, and they do not make light. Jupiter is the biggest planet in the Solar System, while the smallest planet in the Solar System is Mercury. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Rocky.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Rocky.tid new file mode 100644 index 000000000..b07d53f50 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Rocky.tid @@ -0,0 +1,4 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Rocky +caption: Rocky + + Rocky planets have a core, a mantle, and a crust. They are a bit like a boiled egg: the central yolk is the core; the white albumin is the mantle; and the shell is the crust. The crust of a terrestrial planet is thin, with the core and the mantle taking up the vast bulk, sometimes with a very large core, sometimes much smaller. Terrestrial planets have metallic cores of mostly iron, with rocky mantles and crusts. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Saturn.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Saturn.tid new file mode 100644 index 000000000..2324b5475 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/data/tiddlers-Saturn.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Saturn +caption: Saturn +tags: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Planet [[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Gas Giant]] + +Saturn is the sixth planet from the Sun located in the Solar System. It is the second largest planet in the Solar System, after Jupiter. Saturn is one of the four gas giant planets in the Solar System, along with [[Jupiter|$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Jupiter]], Uranus, and Neptune. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg new file mode 100644 index 000000000..100556513 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 500 335" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <g transform="matrix(0.488281,0,0,0.436198,0,0)"> + <rect id="Artboard1" x="0" y="0" width="1024" height="768" style="fill:none;"/> + <clipPath id="_clip1"> + <rect id="Artboard11" serif:id="Artboard1" x="0" y="0" width="1024" height="768"/> + </clipPath> + <g clip-path="url(#_clip1)"> + <g transform="matrix(3.66495,0,0,4.10256,0,0.218772)"> + <g transform="matrix(1,0,0,1,-59.5095,-391.468)"> + <path d="M320.725,420.421C326.96,417.788 332.843,414.256 338.913,411.253C338.882,411.406 338.722,411.458 338.626,411.561C328.964,419.375 327.614,432.589 328.751,444.808C329.174,451.149 327.382,458.033 325.167,464.525C321.022,475.102 313.017,486.251 303.726,485.68C300.214,485.568 298.174,483.58 295.563,481.456C295.057,485.757 293.067,489.595 291.148,493.398C286.718,501.831 275.14,505.548 264.419,514.553C253.699,523.558 267.849,555.718 271.28,561.578C274.711,567.439 284.287,569.583 280.571,574.872C279.434,576.618 277.696,577.243 275.838,577.921L273.318,578.249C262.308,577.938 257.466,577.965 251.859,568.744L247.489,568.87C242.402,568.644 244.522,568.746 241.129,568.577C235.455,568.356 236.364,562.965 235.366,560.117C233.769,550.449 237.478,540.73 237.361,531.06C237.32,527.627 232.462,515.476 230.727,511.132C225.287,512.156 219.817,512.351 214.298,512.626C201.576,512.595 188.94,511.037 176.396,509.059C173.952,519.157 166.686,533.291 172.692,543.554C179.982,554.17 185.098,557.111 193.028,557.751C200.957,558.39 202.748,567.343 200.829,570.541C199.131,572.751 196.147,573.152 193.611,573.687L188.539,573.925C184.548,573.791 180.98,572.714 177.424,571.052C171.485,567.736 165.351,560.844 160.793,555.895C161.854,557.871 162.487,561.729 161.525,563.524C158.83,567.341 147.176,567.318 141.839,564.946C135.776,562.252 121.125,543.335 118.86,529.168C124.886,517.772 133.665,507.845 138.106,495.437C128.425,489.26 123.24,479.204 123.913,467.813L124.156,466.494C114.631,468.277 119.57,467.614 109.323,468.389C76.689,468.289 47.99,446.162 64.15,411.773C65.201,409.737 66.201,407.885 67.982,408.77C69.412,409.479 69.207,412.325 68.487,415.481C59.25,456.572 104.396,456.886 132.149,449.282C134.903,448.528 140.381,443.444 144.176,441.759C150.379,439.004 157.111,437.887 163.793,437.082C180.411,435.188 200.384,443.943 210.533,444.228C220.681,444.514 235.118,441.798 243.98,442.37C250.41,442.664 256.724,443.825 262.928,445.478C266.944,425.911 267.228,411.489 276.748,408.151C281.18,408.851 284.806,413.787 287.706,417.829L287.706,423.746C287.706,428.653 295.104,432.636 304.216,432.636C313.328,432.636 320.725,428.653 320.725,423.746L320.725,420.421ZM151.046,554.19L152.645,554.662C154.654,553.763 158.693,555.152 160.836,555.832C156.89,551.458 150.947,545.035 146.664,540.986C145.259,536.084 145.859,531.152 146.161,526.148L146.222,525.734C144.534,529.74 142.391,533.634 141.24,537.85C139.893,543.539 147.228,549.677 150.073,553.194L151.046,554.19Z"/> + </g> + <g transform="matrix(2.12347,0,0,2.12347,219.225,-7.42467)"> + <g transform="matrix(1,0,0,0.666667,-0.185118,3.43957)"> + <path d="M0.667,9.362C0.576,9.293 0.518,9.153 0.518,9C0.518,8.847 0.576,8.707 0.667,8.638C2.756,7.072 10.971,0.911 12.065,0.09C12.14,0.033 12.23,0.033 12.306,0.09C13.399,0.911 21.614,7.072 23.703,8.638C23.794,8.707 23.852,8.847 23.852,9C23.852,9.153 23.794,9.293 23.703,9.362C21.614,10.928 13.399,17.089 12.306,17.91C12.23,17.967 12.14,17.967 12.065,17.91C10.971,17.089 2.756,10.928 0.667,9.362Z"/> + </g> + <g transform="matrix(1,0,0,1,1.77636e-15,4.43957)"> + <path d="M18.5,8.75L18.5,13.744C18.5,15.675 15.587,17.244 12,17.244C8.413,17.244 5.5,15.675 5.5,13.744L5.5,8.75L11.951,11.975C11.982,11.991 12.018,11.991 12.049,11.975L18.5,8.75Z"/> + </g> + <g transform="matrix(1,0,0,0.648293,19.2746,5.5086)"> + <path d="M2,6L2.207,11L1.526,14C1.526,14 1.524,14.709 2.5,14.717C3.421,14.724 3.5,14 3.5,14L2.707,11L3,6L2,6Z"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg.meta b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg.meta new file mode 100644 index 000000000..c2c789d5b --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/images/tiddlywiki-tour-logo.svg.meta @@ -0,0 +1,2 @@ +title: $:/plugins/tiddlywiki/tour/tiddlywiki-tour-logo +type: image/svg+xml diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/introduction-to-tiddlywiki.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/introduction-to-tiddlywiki.tid new file mode 100644 index 000000000..8d78c1073 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/introduction-to-tiddlywiki.tid @@ -0,0 +1,8 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki +tags: $:/tags/Tour +tour-tag: $:/tags/Tour/IntroductionToTiddlyWiki +logo: $:/plugins/tiddlywiki/tour/tiddlywiki-tour-logo +description: Introduction to {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}} +settings: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/settings + +An introductory tour to {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}} \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/settings.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/settings.tid new file mode 100644 index 000000000..9d5c964bc --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/settings.tid @@ -0,0 +1,4 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/settings + +Customise name used for ~TiddlyWiki: <$edit tiddler="$:/config/Tours/IntroductionToTiddlyWiki/ProductName" tag="input"/> + diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/close-control-panel.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/close-control-panel.tid new file mode 100644 index 000000000..3abd90764 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/close-control-panel.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/close-control-panel +caption: Close the control panel +tags: $:/tags/Tour/IntroductionToTiddlyWiki +hint-selector: .tc-story-river div[data-tiddler-title='$:/ControlPanel'] .tc-btn-\%24\%3A\%2Fcore\%2Fui\%2FButtons\%2Fclose +step-success-filter: [[$:/StoryList]!contains[$:/ControlPanel]] + +<<tour-task "Now close the control panel">> + +Use the {{$:/core/images/close-button|0.65em}} button in the top right corner of the control panel tiddler. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/closing-tiddlers.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/closing-tiddlers.tid new file mode 100644 index 000000000..38f5af0fd --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/closing-tiddlers.tid @@ -0,0 +1,25 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/closing-tiddlers +caption: Closing tiddlers +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen +enter-actions: <$action-setfield $tiddler="$:/temp/Tour/DemoStoryList" list="$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Jupiter $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Saturn"/> +step-success-filter: [list[$:/temp/Tour/DemoStoryList]count[]match[0]] + +\procedure tour-simplified-tiddler-close-button() yes + +In the top right corner of each tiddler there is a button marked {{$:/core/images/close-button|0.65em}} that can be used to close them when you are finished with them. + +<<tour-task "Close both of these tiddlers">> + +Closing a tiddler does not delete it or alter it in any way. It just removes it from the display. + +<$navigator story="$:/temp/Tour/DemoStoryList" history="$:/temp/Tour/DemoHistoryList" openLinkFromInsideRiver="below"> + +<$list + filter="[list[$:/temp/Tour/DemoStoryList]]" + history="$:/temp/Tour/DemoHistoryList" + template="$:/plugins/tiddlywiki/tour/simplified-tiddler" + storyview="classic" +/> + +</$navigator> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/create-tiddler.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/create-tiddler.tid new file mode 100644 index 000000000..13d40a26d --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/create-tiddler.tid @@ -0,0 +1,11 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/create-tiddler +caption: Creating Tiddlers +tags: $:/tags/Tour/IntroductionToTiddlyWiki +hint-selector: .tc-story-river div[data-tiddler-title="Draft of 'New Tiddler'"] input[value]:not([value="Congratulations"]) +hint-selector-fallback-1: .tc-story-river div[data-tiddler-title='Draft of \'New Tiddler\''] .tc-btn-\%24\%3A\%2Fcore\%2Fui\%2FButtons\%2Fsave +hint-selector-fallback-2: .tc-btn-\%24\%3A\%2Fcore\%2Fui\%2FButtons\%2Fnew-tiddler +step-success-filter: [list[$:/StoryList]match[Congratulations]] + +<<tour-task "Create a tiddler titled 'Congratulations'">> + +Use the {{$:/core/images/new-button|0.65em}} button to create the new tiddler, then type correct "title". Finally, click the {{$:/core/images/done-button|0.65em}} button. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/end-of-fullscreen.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/end-of-fullscreen.tid new file mode 100644 index 000000000..fbf778d0f --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/end-of-fullscreen.tid @@ -0,0 +1,10 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/end-of-fullscreen +caption: Going Deeper +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen + +Congratulations! + +You have completed the first part of this tour. + +Now we are going guide you through using {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}}. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/finished.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/finished.tid new file mode 100644 index 000000000..16cdd6509 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/finished.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/finished +caption: Congratulations +tags: $:/tags/Tour/IntroductionToTiddlyWiki + +You have completed the tour. + +You can choose to take another tour: + +<<tour-chooser filter:"[all[shadows+tiddlers]tag[$:/tags/Tour]] -[<currentTour>]">> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/links.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/links.tid new file mode 100644 index 000000000..257088c14 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/links.tid @@ -0,0 +1,23 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/links +caption: Linking tiddlers +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen +enter-actions: <$action-setfield $tiddler="$:/temp/Tour/DemoStoryList" list="$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Jupiter"/> +step-success-filter: [[$:/temp/Tour/DemoStoryList]contains[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Saturn]] + +Links allow you to decide if you want more information on a particular area or term as you go. + +<<tour-task "Click the blue link to open the tiddler 'Saturn'">> + +Notice how the new tiddler opens alongside the old one. This allows you to scroll back up to retrace your steps. + +<$navigator story="$:/temp/Tour/DemoStoryList" history="$:/temp/Tour/DemoHistoryList" openLinkFromInsideRiver="below"> + +<$list + filter="[list[$:/temp/Tour/DemoStoryList]]" + history="$:/temp/Tour/DemoHistoryList" + template="$:/plugins/tiddlywiki/tour/simplified-tiddler" + storyview="classic" +/> + +</$navigator> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/open-control-panel.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/open-control-panel.tid new file mode 100644 index 000000000..69751f6ba --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/open-control-panel.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/open-control-panel +caption: Open the control panel +tags: $:/tags/Tour/IntroductionToTiddlyWiki +hint-selector: .tc-btn-\%24\%3A\%2Fcore\%2Fui\%2FButtons\%2Fcontrol-panel +step-success-filter: [[$:/StoryList]contains[$:/ControlPanel]] + +<<tour-task "Open the control panel">> + +Click the {{$:/core/images/options-button|0.65em}} icon in the sidebar at the right. \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/recent.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/recent.tid new file mode 100644 index 000000000..c0c3957a2 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/recent.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/recent +caption: Finding recent tiddlers +tags: $:/tags/Tour/IntroductionToTiddlyWiki +hint-selector: .tc-sidebar-tabs-main .tc-timeline > .tc-menu-list-item:nth-child(1) .tc-menu-list-subitem:nth-child(1) .tc-tiddlylink +hint-selector-fallback-1: .tc-sidebar-tabs-main button:nth-child(3) +step-success-filter: [list[$:/StoryList]match<step-success-filter-var>] +step-success-filter-var: [all[tiddlers]!is[system]!sort[modified]] + +<<tour-task "Use the ''Recent'' tab of the sidebar to open the most recently edited tiddler.">> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/search.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/search.tid new file mode 100644 index 000000000..44b153785 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/search.tid @@ -0,0 +1,9 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/search +caption: Searching +tags: $:/tags/Tour/IntroductionToTiddlyWiki +hint-selector: .tc-sidebar-search .tc-popup-handle +step-success-filter: [{$:/temp/search}match[help]] + +<<tour-task "Search for the phrase 'help'">> + +Type the phrase into the text box labelled "search" in the sidebar at the right. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tags.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tags.tid new file mode 100644 index 000000000..0629d3b02 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tags.tid @@ -0,0 +1,26 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/tags +caption: Tagging tiddlers +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen +enter-actions: <$action-setfield $tiddler="$:/temp/Tour/DemoStoryList" list="$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Mars"/> +step-success-filter: [[$:/temp/Tour/DemoStoryList]contains[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Saturn]] + +Tiddlers may be categorised with one or more descriptive keywords or phrases called "tags". Tags can be used to search and navigate between tiddlers. + +Click on the tag to display a dropdown menu. The menu is divided into two parts: + +* At the top, there is a link to the tiddler with the same title as the tag. This is generally used to describe the tag or give an overview of its purpose +* Beneath the link to the tag, there a list of links to the other tiddlers with the same tag + +<<tour-task "Use the tag dropdown to open the tiddler 'Saturn'">> + +<$navigator story="$:/temp/Tour/DemoStoryList" history="$:/temp/Tour/DemoHistoryList" openLinkFromInsideRiver="below"> + +<$list + filter="[list[$:/temp/Tour/DemoStoryList]]" + history="$:/temp/Tour/DemoHistoryList" + template="$:/plugins/tiddlywiki/tour/simplified-tiddler-with-tags" + storyview="classic" +/> + +</$navigator> diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tiddlers.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tiddlers.tid new file mode 100644 index 000000000..af939bff1 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/tiddlers.tid @@ -0,0 +1,16 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/tiddlers +caption: How does it work? +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen + +{{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}} lets you collect and organise all kinds of information into interconnected bite-sized pieces called ''tiddlers''. + +A tiddler is like an index card. + +<$let tv-wikilinks="no"> + +{{$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/tiddlers/Jupiter||$:/plugins/tiddlywiki/tour/simplified-tiddler}} + +</$let> + +Each tiddler must have a unique title that is used to distinguish it. diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/welcome.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/welcome.tid new file mode 100644 index 000000000..c9037dbf2 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/steps/welcome.tid @@ -0,0 +1,10 @@ +title: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/welcome +caption: Welcome +tags: $:/tags/Tour/IntroductionToTiddlyWiki +display-mode: fullscreen + +!! An interactive tour of {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}} + +Welcome to this tour of {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}}. + +We hope you'll find {{$:/config/Tours/IntroductionToTiddlyWiki/ProductName}} a helpful and supportive tool. Let's get started! diff --git a/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/tagsTourIntroductionToTiddlyWiki.tid b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/tagsTourIntroductionToTiddlyWiki.tid new file mode 100644 index 000000000..c717061e7 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/introduction-to-tiddlywiki/tagsTourIntroductionToTiddlyWiki.tid @@ -0,0 +1,2 @@ +title: $:/tags/Tour/IntroductionToTiddlyWiki +list: $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/welcome $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/tiddlers $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/links $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/closing-tiddlers $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/tags $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/end-of-fullscreen $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/open-control-panel $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/close-control-panel $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/search $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/recent $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/create-tiddler $:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/finished diff --git a/plugins/tiddlywiki/tour/tours/using-tags/finished.tid b/plugins/tiddlywiki/tour/tours/using-tags/finished.tid new file mode 100644 index 000000000..6d8a9e4f9 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/finished.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/tour/using-tags/finished +caption: Congratulations +tags: $:/tags/Tour/UsingTags + +<<tour-chooser filter:"[all[shadows+tiddlers]tag[$:/tags/Tour]] -[<currentTour>]">> diff --git a/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg b/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg new file mode 100644 index 000000000..0773e0f00 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg width="100%" height="100%" viewBox="0 0 500 335" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"> + <g transform="matrix(0.488281,0,0,0.436198,0,0)"> + <rect id="Artboard1" x="0" y="0" width="1024" height="768" style="fill:none;"/> + <clipPath id="_clip1"> + <rect id="Artboard11" serif:id="Artboard1" x="0" y="0" width="1024" height="768"/> + </clipPath> + <g clip-path="url(#_clip1)"> + <g transform="matrix(3.66495,0,0,4.10256,0,0.218772)"> + <g transform="matrix(1,0,0,1,-59.5095,-391.468)"> + <path d="M320.725,420.421C326.96,417.788 332.843,414.256 338.913,411.253C338.882,411.406 338.722,411.458 338.626,411.561C328.964,419.375 327.614,432.589 328.751,444.808C329.174,451.149 327.382,458.033 325.167,464.525C321.022,475.102 313.017,486.251 303.726,485.68C300.214,485.568 298.174,483.58 295.563,481.456C295.057,485.757 293.067,489.595 291.148,493.398C286.718,501.831 275.14,505.548 264.419,514.553C253.699,523.558 267.849,555.718 271.28,561.578C274.711,567.439 284.287,569.583 280.571,574.872C279.434,576.618 277.696,577.243 275.838,577.921L273.318,578.249C262.308,577.938 257.466,577.965 251.859,568.744L247.489,568.87C242.402,568.644 244.522,568.746 241.129,568.577C235.455,568.356 236.364,562.965 235.366,560.117C233.769,550.449 237.478,540.73 237.361,531.06C237.32,527.627 232.462,515.476 230.727,511.132C225.287,512.156 219.817,512.351 214.298,512.626C201.576,512.595 188.94,511.037 176.396,509.059C173.952,519.157 166.686,533.291 172.692,543.554C179.982,554.17 185.098,557.111 193.028,557.751C200.957,558.39 202.748,567.343 200.829,570.541C199.131,572.751 196.147,573.152 193.611,573.687L188.539,573.925C184.548,573.791 180.98,572.714 177.424,571.052C171.485,567.736 165.351,560.844 160.793,555.895C161.854,557.871 162.487,561.729 161.525,563.524C158.83,567.341 147.176,567.318 141.839,564.946C135.776,562.252 121.125,543.335 118.86,529.168C124.886,517.772 133.665,507.845 138.106,495.437C128.425,489.26 123.24,479.204 123.913,467.813L124.156,466.494C114.631,468.277 119.57,467.614 109.323,468.389C76.689,468.289 47.99,446.162 64.15,411.773C65.201,409.737 66.201,407.885 67.982,408.77C69.412,409.479 69.207,412.325 68.487,415.481C59.25,456.572 104.396,456.886 132.149,449.282C134.903,448.528 140.381,443.444 144.176,441.759C150.379,439.004 157.111,437.887 163.793,437.082C180.411,435.188 200.384,443.943 210.533,444.228C220.681,444.514 235.118,441.798 243.98,442.37C250.41,442.664 256.724,443.825 262.928,445.478C266.944,425.911 267.228,411.489 276.748,408.151C281.18,408.851 284.806,413.787 287.706,417.829L287.706,423.746C287.706,428.653 295.104,432.636 304.216,432.636C313.328,432.636 320.725,428.653 320.725,423.746L320.725,420.421ZM151.046,554.19L152.645,554.662C154.654,553.763 158.693,555.152 160.836,555.832C156.89,551.458 150.947,545.035 146.664,540.986C145.259,536.084 145.859,531.152 146.161,526.148L146.222,525.734C144.534,529.74 142.391,533.634 141.24,537.85C139.893,543.539 147.228,549.677 150.073,553.194L151.046,554.19Z" fill="red"/> + </g> + <g transform="matrix(2.12347,0,0,2.12347,219.225,-7.42467)"> + <g transform="matrix(1,0,0,0.666667,-0.185118,3.43957)"> + <path d="M0.667,9.362C0.576,9.293 0.518,9.153 0.518,9C0.518,8.847 0.576,8.707 0.667,8.638C2.756,7.072 10.971,0.911 12.065,0.09C12.14,0.033 12.23,0.033 12.306,0.09C13.399,0.911 21.614,7.072 23.703,8.638C23.794,8.707 23.852,8.847 23.852,9C23.852,9.153 23.794,9.293 23.703,9.362C21.614,10.928 13.399,17.089 12.306,17.91C12.23,17.967 12.14,17.967 12.065,17.91C10.971,17.089 2.756,10.928 0.667,9.362Z"/> + </g> + <g transform="matrix(1,0,0,1,1.77636e-15,4.43957)"> + <path d="M18.5,8.75L18.5,13.744C18.5,15.675 15.587,17.244 12,17.244C8.413,17.244 5.5,15.675 5.5,13.744L5.5,8.75L11.951,11.975C11.982,11.991 12.018,11.991 12.049,11.975L18.5,8.75Z"/> + </g> + <g transform="matrix(1,0,0,0.648293,19.2746,5.5086)"> + <path d="M2,6L2.207,11L1.526,14C1.526,14 1.524,14.709 2.5,14.717C3.421,14.724 3.5,14 3.5,14L2.707,11L3,6L2,6Z"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg.meta b/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg.meta new file mode 100644 index 000000000..29d308fc0 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/tags-tour-logo.svg.meta @@ -0,0 +1,2 @@ +title: $:/plugins/tiddlywiki/tour/tags-tour-logo +type: image/svg+xml diff --git a/plugins/tiddlywiki/tour/tours/using-tags/tagsTourUsingTags.tid b/plugins/tiddlywiki/tour/tours/using-tags/tagsTourUsingTags.tid new file mode 100644 index 000000000..30681ca24 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/tagsTourUsingTags.tid @@ -0,0 +1,2 @@ +title: $:/tags/Tour/UsingTags +list: $:/plugins/tiddlywiki/tour/using-tags/welcome $:/plugins/tiddlywiki/tour/using-tags/finished diff --git a/plugins/tiddlywiki/tour/tours/using-tags/using-tags.tid b/plugins/tiddlywiki/tour/tours/using-tags/using-tags.tid new file mode 100644 index 000000000..31c2f4b78 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/using-tags.tid @@ -0,0 +1,7 @@ +title: $:/plugins/tiddlywiki/tour/using-tags +tags: $:/tags/Tour +tour-tag: $:/tags/Tour/UsingTags +logo: $:/plugins/tiddlywiki/tour/tags-tour-logo +description: Using Tags in ~TiddlyWiki + +An introduction to using tags in ~TiddlyWiki \ No newline at end of file diff --git a/plugins/tiddlywiki/tour/tours/using-tags/welcome.tid b/plugins/tiddlywiki/tour/tours/using-tags/welcome.tid new file mode 100644 index 000000000..852273629 --- /dev/null +++ b/plugins/tiddlywiki/tour/tours/using-tags/welcome.tid @@ -0,0 +1,5 @@ +title: $:/plugins/tiddlywiki/tour/using-tags/welcome +caption: Welcome +tags: $:/tags/Tour/UsingTags + +!! An introduction to using tags in ~TiddlyWiki diff --git a/plugins/tiddlywiki/tour/variables.tid b/plugins/tiddlywiki/tour/variables.tid new file mode 100644 index 000000000..65cec532d --- /dev/null +++ b/plugins/tiddlywiki/tour/variables.tid @@ -0,0 +1,104 @@ +title: $:/plugins/tiddlywiki/tour/variables + +\whitespace trim + +<!-- + +The following state tiddlers control the tour. They should not be directly modified, but rather use the appropriate procedure to ensure that all the associated actions are performed. + +* $:/config/CurrentTour: title of current tour definition tiddler +* $:/state/tour/step: title of current step of the tour + +These config tiddlers may be changed directly as required: + +* $:/config/ShowTour: "show" (default) or "hide" +* $:/config/AutoStartTour: "no" (default) or "yes" + +--> + +\function tour-current-tag() +[{$:/config/CurrentTour}get[tour-tag]] +\end + +\procedure tour-filter-steps-by-condition() +[<currentTiddler>has[condition]subfilter{!!condition}limit[1]] :else[<currentTiddler>!has[condition]then[true]] +\end + +\function tour-all-steps-filtered-by-condition() +[all[shadows+tiddlers]tag<tour-current-tag>filter<tour-filter-steps-by-condition>] +\end + +\function tour-is-not-first-step() +[function[tour-all-steps-filtered-by-condition]allbefore{$:/state/tour/step}count[]compare:number:gt[0]] +\end + +\function tour-is-last-step() +[function[tour-all-steps-filtered-by-condition]allafter{$:/state/tour/step}count[]compare:number:eq[0]] +\end + +\function tour-is-not-last-step() +[function[tour-all-steps-filtered-by-condition]allafter{$:/state/tour/step}count[]compare:number:gt[0]] +\end + + +\procedure tour-initialise-current-tour-step() +\procedure tv-action-refresh-policy() always +<$transclude $tiddler={{$:/state/tour/step}} $field="enter-actions"/> +\end + +\procedure tour-chooser(filter:"[all[shadows+tiddlers]tag[$:/tags/Tour]]") +\procedure choose-tour-actions() +<$transclude $variable="tour-start" title=<<currentTiddler>>/> +\end choose-tour-actions +<div class="tc-tour-panel-chooser-wrapper"> + <$list filter=<<filter>>> + <div class="tc-tour-panel-chooser-item"> + <div class="tc-tour-panel-chooser-item-text"> + <$transclude $field="description"> + <$text text=<<currentTiddler>>/> + </$transclude> + </div> + <$button class="tc-btn-invisible tc-tour-panel-chooser-start-button" actions=<<choose-tour-actions>>> + start {{$:/core/images/chevron-right}} + </$button> + </div> + </$list> +</div> +\end tour-chooser + +\procedure tour-start(title,step) +\procedure tv-action-refresh-policy() always +<$action-setfield $tiddler="$:/config/CurrentTour" text=<<title>>/> +<$transclude $variable="tour-restart" step=<<step>>/> +\end + +\procedure tour-restart(step) +\procedure tv-action-refresh-policy() always +<$action-setfield $tiddler="$:/config/ShowTour" text="show"/> +<$action-setfield $tiddler="$:/state/tour/step" $field="text" $value={{{ [<step>!is[blank]] :else[function[tour-all-steps-filtered-by-condition]first[]] }}}/> +<<tour-initialise-current-tour-step>> +\end + +\procedure tour-next-step() +\procedure tv-action-refresh-policy() always +<$action-setfield $tiddler="$:/state/tour/step" $field="text" $value={{{ [function[tour-all-steps-filtered-by-condition]allafter{$:/state/tour/step}else[$:/plugins/tiddlywiki/tour/introduction-to-tiddlywiki/steps/finished]] }}}/> +<<tour-initialise-current-tour-step>> +\end + +\procedure tour-previous-step() +\procedure tv-action-refresh-policy() always +<$action-setfield $tiddler="$:/state/tour/step" $field="text" $value={{{ [function[tour-all-steps-filtered-by-condition]allbefore{$:/state/tour/step}last[]] :else[all[shadows+tiddlers]tag<tour-current-tag>first[]] }}}/> +<<tour-initialise-current-tour-step>> +\end + +\procedure tour-display-current-tour() +<$transclude $tiddler={{$:/config/CurrentTour}} $field="description"> + <$text text={{$:/config/CurrentTour}}/> +</$transclude> +\end + +\procedure tour-task(text) +<div class="tc-tour-task"> +{{$:/core/images/help}} <$transclude $variable="text" $mode="inline"/> +</div> +\end