diff --git a/.obsidian/icons/test-pack/Wien3Wappen.svg b/.obsidian/icons/test-pack/Wien3Wappen.svg new file mode 100644 index 00000000..76ec99ba --- /dev/null +++ b/.obsidian/icons/test-pack/Wien3Wappen.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.obsidian/plugins/cron/data.json b/.obsidian/plugins/cron/data.json index 6796bedd..f0127c92 100644 --- a/.obsidian/plugins/cron/data.json +++ b/.obsidian/plugins/cron/data.json @@ -19,7 +19,7 @@ "601d1cc7-a4f3-4f19-aa9f-3bddd7ab6b1d": { "locked": false, "lockedDeviceName": "iPhone", - "lastRun": "2024-08-16T08:03:40+02:00" + "lastRun": "2024-09-11T07:35:52+02:00" } } } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-activity-history/data.json b/.obsidian/plugins/obsidian-activity-history/data.json index a18d243a..803e467c 100644 --- a/.obsidian/plugins/obsidian-activity-history/data.json +++ b/.obsidian/plugins/obsidian-activity-history/data.json @@ -12,8 +12,8 @@ "checkpointList": [ { "path": "/", - "date": "2024-08-16", - "size": 9208587 + "date": "2024-09-11", + "size": 9778271 } ], "activityHistory": [ @@ -3810,7 +3810,111 @@ }, { "date": "2024-08-16", - "value": 3776 + "value": 3780 + }, + { + "date": "2024-08-17", + "value": 82945 + }, + { + "date": "2024-08-18", + "value": 116417 + }, + { + "date": "2024-08-19", + "value": 29115 + }, + { + "date": "2024-08-20", + "value": 17989 + }, + { + "date": "2024-08-21", + "value": 3750 + }, + { + "date": "2024-08-22", + "value": 2272 + }, + { + "date": "2024-08-23", + "value": 2546 + }, + { + "date": "2024-08-24", + "value": 14670 + }, + { + "date": "2024-08-25", + "value": 39536 + }, + { + "date": "2024-08-26", + "value": 3418 + }, + { + "date": "2024-08-27", + "value": 6103 + }, + { + "date": "2024-08-28", + "value": 7190 + }, + { + "date": "2024-08-29", + "value": 1814 + }, + { + "date": "2024-08-30", + "value": 1818 + }, + { + "date": "2024-08-31", + "value": 1686 + }, + { + "date": "2024-09-01", + "value": 88320 + }, + { + "date": "2024-09-02", + "value": 1700 + }, + { + "date": "2024-09-03", + "value": 17946 + }, + { + "date": "2024-09-04", + "value": 1785 + }, + { + "date": "2024-09-05", + "value": 1547 + }, + { + "date": "2024-09-06", + "value": 1815 + }, + { + "date": "2024-09-07", + "value": 1472 + }, + { + "date": "2024-09-08", + "value": 200726 + }, + { + "date": "2024-09-09", + "value": 2327 + }, + { + "date": "2024-09-10", + "value": 2865 + }, + { + "date": "2024-09-11", + "value": 1442 } ] } diff --git a/.obsidian/plugins/obsidian-commits/data.json b/.obsidian/plugins/obsidian-commits/data.json index 0d322ea5..f1cf11e9 100644 --- a/.obsidian/plugins/obsidian-commits/data.json +++ b/.obsidian/plugins/obsidian-commits/data.json @@ -1120,7 +1120,7 @@ "links": 1 }, "02.02 Paris/@@Paris.md": { - "size": 4639, + "size": 3428, "tags": 3, "links": 9 }, @@ -1205,7 +1205,7 @@ "links": 9 }, "01.03 Family/Hilaire Bédier.md": { - "size": 1888, + "size": 2106, "tags": 3, "links": 6 }, @@ -1220,7 +1220,7 @@ "links": 6 }, "01.03 Family/Ophélie Bédier.md": { - "size": 1894, + "size": 2116, "tags": 3, "links": 6 }, @@ -1440,7 +1440,7 @@ "links": 1 }, "03.01 Reading list/@Reading master.md": { - "size": 3154, + "size": 3472, "tags": 2, "links": 2 }, @@ -1517,10 +1517,10 @@ "05.02 Networks/Selfhosting.md": { "size": 9487, "tags": 5, - "links": 18 + "links": 19 }, "05.02 Networks/Configuring UFW.md": { - "size": 29826, + "size": 4862, "tags": 2, "links": 7 }, @@ -1570,12 +1570,12 @@ "links": 1 }, "01.02 Home/Household.md": { - "size": 2620, + "size": 3785, "tags": 2, "links": 4 }, "01.02 Home/Life mementos.md": { - "size": 2687, + "size": 710, "tags": 0, "links": 1 }, @@ -1745,7 +1745,7 @@ "links": 2 }, "01.01 Life Orga/@Finances.md": { - "size": 5483, + "size": 3574, "tags": 4, "links": 5 }, @@ -1755,9 +1755,9 @@ "links": 8 }, "01.01 Life Orga/@Lifestyle.md": { - "size": 3310, + "size": 5320, "tags": 4, - "links": 8 + "links": 14 }, "01.01 Life Orga/@Personal projects.md": { "size": 2729, @@ -2030,7 +2030,7 @@ "links": 6 }, "06.02 Investments/Crypto Tasks.md": { - "size": 7493, + "size": 8336, "tags": 3, "links": 12 }, @@ -3059,11 +3059,6 @@ "tags": 2, "links": 3 }, - "04.03 Creative snippets/2021-12-04 MRCK - lil dialogue.md": { - "size": 937, - "tags": 2, - "links": 1 - }, "02.03 Zürich/Gül.md": { "size": 1551, "tags": 3, @@ -6290,7 +6285,7 @@ "links": 4 }, "01.07 Animals/@Sally.md": { - "size": 3420, + "size": 3794, "tags": 2, "links": 4 }, @@ -7040,7 +7035,7 @@ "links": 2 }, "01.07 Animals/2023-07-13 Health check.md": { - "size": 4762, + "size": 1135, "tags": 3, "links": 3 }, @@ -8759,11 +8754,6 @@ "tags": 1, "links": 2 }, - "00.02 Inbox/Gaslight.md": { - "size": 878, - "tags": 3, - "links": 1 - }, "00.02 Inbox/Bad Kids.md": { "size": 867, "tags": 3, @@ -9797,7 +9787,7 @@ "00.03 News/Exclusive Life Aboard a Nuclear Submarine as the US Responds to Threats Around the Globe.md": { "size": 41441, "tags": 4, - "links": 1 + "links": 2 }, "00.03 News/Cillian Murphy Is the Man of the Moment.md": { "size": 40753, @@ -10124,11 +10114,6 @@ "tags": 0, "links": 2 }, - "00.02 Inbox/Underworld.md": { - "size": 880, - "tags": 1, - "links": 2 - }, "00.01 Admin/Calendars/2024-03-18.md": { "size": 1412, "tags": 0, @@ -10205,7 +10190,7 @@ "links": 6 }, "03.01 Reading list/Nightwood.md": { - "size": 864, + "size": 963, "tags": 1, "links": 3 }, @@ -10396,8 +10381,8 @@ }, "00.03 News/The soft life why millennials are quitting the rat race.md": { "size": 16096, - "tags": 4, - "links": 1 + "tags": 3, + "links": 2 }, "00.03 News/The last days of Boston Market.md": { "size": 13437, @@ -11001,8 +10986,8 @@ }, "00.03 News/The Insulin Empire Edward Ongweso Jr. & Athena Sofides.md": { "size": 35721, - "tags": 5, - "links": 1 + "tags": 3, + "links": 2 }, "00.03 News/Buying Baja Hakai Magazine.md": { "size": 37605, @@ -11300,7 +11285,7 @@ "links": 3 }, "01.06 Health/2024-06-29 Fungal treatment.md": { - "size": 6711, + "size": 12568, "tags": 2, "links": 3 }, @@ -11832,7 +11817,7 @@ "00.03 News/I Can’t Overstate How Bananas This Arizona Primary Is. The QAnon Shaman Isn’t Even the Weirdest Part..md": { "size": 29088, "tags": 3, - "links": 1 + "links": 2 }, "00.01 Admin/Calendars/2024-08-07.md": { "size": 1255, @@ -11872,12 +11857,12 @@ "00.03 News/Ozempic Boom Inside USA’s Weight-Loss Drug Capital.md": { "size": 1690, "tags": 3, - "links": 1 + "links": 2 }, "00.03 News/Moscow’s Spies Were Stealing US Tech — Until the FBI Started a Sabotage Campaign.md": { "size": 28470, "tags": 4, - "links": 1 + "links": 2 }, "00.03 News/The Chipotle Bowl Thrower Who Was Forced to Work Fast Food.md": { "size": 33196, @@ -11887,7 +11872,7 @@ "00.03 News/What I Saw in the Darién Gap.md": { "size": 55006, "tags": 3, - "links": 1 + "links": 2 }, "00.01 Admin/Calendars/2024-08-12.md": { "size": 1255, @@ -11925,17 +11910,347 @@ "links": 1 }, "00.01 Admin/Calendars/2024-08-16.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "00.01 Admin/Calendars/2024-08-17.md": { + "size": 1412, + "tags": 0, + "links": 7 + }, + "00.03 News/Escaping Oklahoma A Worker’s Story From Inside an Illegal Marijuana Operation.md": { + "size": 16884, + "tags": 3, + "links": 2 + }, + "00.03 News/Armed and Underground Inside the Turbulent, Secret World of an American Militia.md": { + "size": 49508, + "tags": 4, + "links": 2 + }, + "00.03 News/After Nike Leaders Promised Climate Action, Their Corporate Jets Kept Flying — and Polluting.md": { + "size": 14710, + "tags": 5, + "links": 2 + }, + "00.01 Admin/Calendars/2024-08-18.md": { + "size": 1412, + "tags": 0, + "links": 5 + }, + "00.03 News/The California Beach Town Awash in Poop.md": { + "size": 44113, + "tags": 4, + "links": 2 + }, + "00.03 News/How McDonald’s Found Out Its Wildly Popular Monopoly Game Was a Fraud.md": { + "size": 26048, + "tags": 5, + "links": 2 + }, + "00.03 News/The Vigil Keepers of January 6th.md": { + "size": 44917, + "tags": 3, + "links": 2 + }, + "00.01 Admin/Calendars/2024-08-19.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "00.01 Admin/Calendars/2024-08-20.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "00.03 News/Trump Assassination Attempt Laid Bare Long-standing Vulnerabilities in the Secret Service.md": { + "size": 16141, + "tags": 4, + "links": 2 + }, + "00.01 Admin/Calendars/2024-08-21.md": { + "size": 1268, + "tags": 0, + "links": 5 + }, + "03.04 Cinematheque/The Red Circle (1970).md": { + "size": 2270, + "tags": 1, + "links": 1 + }, + "00.01 Admin/Calendars/2024-08-22.md": { + "size": 1268, + "tags": 0, + "links": 7 + }, + "00.01 Admin/Calendars/2024-08-23.md": { + "size": 1412, + "tags": 0, + "links": 10 + }, + "00.01 Admin/Calendars/Events/2024-08-23 ⚽️ PSG - Montpellier (6-0).md": { + "size": 468, + "tags": 0, + "links": 2 + }, + "03.04 Cinematheque/Arizona Dream (1993).md": { + "size": 2192, + "tags": 1, + "links": 1 + }, + "00.01 Admin/Calendars/2024-08-24.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "03.02 Travels/Wien.md": { + "size": 8756, + "tags": 3, + "links": 1 + }, + "00.01 Admin/Calendars/2024-08-25.md": { + "size": 1255, + "tags": 0, + "links": 6 + }, + "00.03 News/From Fiery Revolutionary to Sunshine State Retiree The THC-Fueled Twilight of the Last of the Chicago 7.md": { + "size": 24927, + "tags": 5, + "links": 2 + }, + "00.01 Admin/Calendars/2024-08-26.md": { + "size": 1255, + "tags": 0, + "links": 8 + }, + "00.01 Admin/Calendars/2024-08-27.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "04.03 Creative snippets/New Year well Wishes.md": { + "size": 2224, + "tags": 0, + "links": 1 + }, + "00.01 Admin/Calendars/2024-08-28.md": { + "size": 1255, + "tags": 0, + "links": 7 + }, + "02.03 Zürich/Seehaus.md": { + "size": 1516, + "tags": 3, + "links": 2 + }, + "04.03 Creative snippets/The Times They are a-changing.md": { + "size": 1024, + "tags": 0, + "links": 1 + }, + "04.03 Creative snippets/If.md": { + "size": 1006, + "tags": 0, + "links": 1 + }, + "04.03 Creative snippets/Génie & Folie.md": { + "size": 815, + "tags": 0, + "links": 1 + }, + "04.03 Creative snippets/Couronnement de l'Art.md": { + "size": 835, + "tags": 0, + "links": 1 + }, + "04.03 Creative snippets/Silence of Friends.md": { + "size": 763, + "tags": 0, + "links": 1 + }, + "04.03 Creative snippets/Qu'est-ce Qui Nous Tente.md": { + "size": 773, + "tags": 0, + "links": 1 + }, + "00.01 Admin/Calendars/2024-08-29.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "03.01 Reading list/Underworld.md": { + "size": 1039, + "tags": 4, + "links": 3 + }, + "00.01 Admin/Calendars/2024-08-30.md": { + "size": 1412, + "tags": 0, + "links": 7 + }, + "00.01 Admin/Calendars/2024-08-31.md": { + "size": 1412, + "tags": 0, + "links": 5 + }, + "00.01 Admin/Calendars/2024-09-01.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "03.01 Reading list/Gaslight.md": { + "size": 1064, + "tags": 3, + "links": 2 + }, + "00.03 News/Fear and Joy in Chicago Fintan O’Toole.md": { + "size": 19567, + "tags": 3, + "links": 2 + }, + "00.03 News/How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador.md": { + "size": 35227, + "tags": 3, + "links": 2 + }, + "00.03 News/How to Make Millions as a Professional Whistleblower.md": { + "size": 28672, + "tags": 3, + "links": 1 + }, + "00.02 Inbox/Diplomacy.md": { + "size": 883, + "tags": 2, + "links": 1 + }, + "00.01 Admin/Calendars/Events/2024-09-01 ⚽️ LOSC - PSG (1-3).md": { + "size": 438, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-09-18 ⚽️ PSG - FC Girona.md": { + "size": 192, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-10-01 ⚽️ Arsenal - PSG.md": { + "size": 187, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-10-22 ⚽️ PSG - PSV Eindhoven.md": { + "size": 189, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-11-06 ⚽️ PSG - Atletico Madrid.md": { + "size": 204, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-12-10 ⚽️ RB Salzburg - PSG.md": { + "size": 195, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2025-01-22 ⚽️ PSG - Man City.md": { + "size": 190, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2025-01-29 ⚽️ Stuttgart - PSG.md": { + "size": 191, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/Events/2024-11-26 ⚽️ Bayern - PSG.md": { + "size": 186, + "tags": 0, + "links": 2 + }, + "00.01 Admin/Calendars/2024-09-02.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "00.01 Admin/Calendars/2024-09-03.md": { + "size": 1412, + "tags": 0, + "links": 7 + }, + "00.03 News/The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists.md": { + "size": 16592, + "tags": 3, + "links": 2 + }, + "00.01 Admin/Calendars/2024-09-04.md": { + "size": 1517, + "tags": 0, + "links": 6 + }, + "00.01 Admin/Calendars/2024-09-05.md": { + "size": 1394, + "tags": 0, + "links": 4 + }, + "00.01 Admin/Calendars/2024-09-06.md": { + "size": 1390, + "tags": 0, + "links": 4 + }, + "00.01 Admin/Calendars/2024-09-07.md": { "size": 1412, "tags": 0, "links": 4 + }, + "00.01 Admin/Calendars/2024-09-08.md": { + "size": 1412, + "tags": 0, + "links": 8 + }, + "00.03 News/These Are the Best Texas-Style Barbecue Joints in America – Texas Monthly.md": { + "size": 73931, + "tags": 4, + "links": 1 + }, + "00.03 News/Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons.md": { + "size": 36531, + "tags": 4, + "links": 1 + }, + "00.03 News/Anatomy of a Murder.md": { + "size": 59865, + "tags": 3, + "links": 1 + }, + "00.03 News/Why I changed my mind about volunteering.md": { + "size": 28254, + "tags": 3, + "links": 1 + }, + "00.01 Admin/Calendars/2024-09-09.md": { + "size": 1255, + "tags": 0, + "links": 4 + }, + "00.01 Admin/Calendars/2024-09-10.md": { + "size": 1412, + "tags": 0, + "links": 6 + }, + "00.01 Admin/Calendars/2024-09-11.md": { + "size": 1412, + "tags": 0, + "links": 5 } }, "commitTypes": { "/": { - "Refactor": 11773, - "Create": 2872, - "Link": 14236, - "Expand": 2312 + "Refactor": 11826, + "Create": 2938, + "Link": 14386, + "Expand": 2367 } }, "dailyCommits": { @@ -11945,147 +12260,177 @@ "2": 33, "3": 12, "4": 46, - "5": 16, - "6": 75, - "7": 1125, - "8": 3333, - "9": 1230, - "10": 839, - "11": 625, - "12": 6820, - "13": 786, - "14": 676, - "15": 1006, - "16": 770, - "17": 919, - "18": 7465, - "19": 1083, - "20": 962, - "21": 908, - "22": 814, - "23": 1414 + "5": 17, + "6": 77, + "7": 1165, + "8": 3381, + "9": 1244, + "10": 845, + "11": 631, + "12": 6827, + "13": 805, + "14": 689, + "15": 1020, + "16": 781, + "17": 946, + "18": 7471, + "19": 1084, + "20": 971, + "21": 935, + "22": 831, + "23": 1470 } }, "weeklyCommits": { "/": { - "Mon": 3444, - "Tue": 1965, - "Wed": 8064, - "Thu": 1552, - "Fri": 1627, + "Mon": 3473, + "Tue": 2002, + "Wed": 8122, + "Thu": 1572, + "Fri": 1652, "Sat": 0, - "Sun": 14541 + "Sun": 14696 } }, "recentCommits": { "/": { "Expanded": [ - " @@Zürich ", - " 2024-06-29 Fungal treatment ", - " 2024-08-01 ", - " 2024-06-29 Fungal treatment ", - " Bookmarks - Media ", " 2024-06-29 Fungal treatment ", + " @Sally ", " Household ", - " 2024-08-01 Tonsilitis ", - " 2024-08-01 Tonsilitis ", - " 2024-06-29 Fungal treatment ", + " Crypto Tasks ", " Configuring UFW ", + " 2024-09-06 ", + " 2024-09-05 ", " 2024-06-29 Fungal treatment ", - " Household ", - " Server Alias ", - " 2024-06-29 Fungal treatment ", - " 2023-07-13 Health check ", - " 2024-07-29 ", - " 2024-06-29 Fungal treatment ", - " @Family ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " Strozzi ", - " 2024-07-07 Contact ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " Opportune de Villeneuve ", - " 2024-07-13 ", - " @@London ", - " Jacqueline Bédier ", - " 2024-07-12 ", - " 2023-02-25 Polyp in Galbladder ", - " 2023-02-25 Polyp in Galbladder ", - " 2024-06-29 Fungal treatment ", - " Bar am Wasser ", + " Ophélie Bédier ", + " 2024-09-04 ", + " 2024-11-06 ⚽️ PSG - Atletico Madrid ", + " 2024-12-10 ⚽️ RB Salzburg - PSG ", + " 2025-01-22 ⚽️ PSG - Man City ", + " 2025-01-29 ⚽️ Stuttgart - PSG ", + " 2024-11-26 ⚽️ Bayern - PSG ", + " 2024-09-18 ⚽️ PSG - FC Girona ", + " 2024-10-01 ⚽️ Arsenal - PSG ", + " 2024-10-22 ⚽️ PSG - PSV Eindhoven ", + " 2024-09-01 ⚽️ LOSC - PSG ", + " 2024-09-01 ⚽️ LOSC - PSG ", + " 2024-09-01 ⚽️ LOSC - PSG ", + " Configuring UFW ", + " Gaslight ", " 2024-06-29 Fungal treatment ", + " Qu'est-ce Qui Nous Tente ", + " Silence of Friends ", + " Couronnement de l'Art ", + " Génie & Folie ", + " If ", + " The Times They are a-changing ", + " Nightwood ", + " New Year well Wishes ", + " New Year well Wishes ", + " New Year well Wishes ", " Household ", - " @Finances ", - " 2024-06-29 Fungal treatment ", - " 2024-07-07 ", - " 2024-06-29 Fungal treatment ", + " Hilaire Bédier ", + " @Lifestyle ", " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment ", - " Hosting Tasks ", - " 2024-07-02 Checkup ", - " 2024-06-29 Fungal treatment ", - " 2024-06-29 Fungal treatment " + " Wien ", + " Wien ", + " Wien ", + " Wien ", + " Wien ", + " Wien ", + " @Lifestyle ", + " @Lifestyle ", + " Configuring UFW ", + " 2024-08-23 ⚽️ PSG - Montpellier ", + " 2024-08-23 ⚽️ PSG - Montpellier ", + " 2024-08-23 ⚽️ PSG - Montpellier ", + " @Reading master " ], "Created": [ - " 2024-08-16 ", - " Sleepy Hollow (1999) ", - " 2024-08-15 ", - " The Social Dilemma (2020) ", - " 2024-08-14 ", - " 2024-08-13 ", - " The Pink Panther (1963) ", - " 2024-08-12 ", - " What I Saw in the Darién Gap ", - " The Chipotle Bowl Thrower Who Was Forced to Work Fast Food ", - " Moscow’s Spies Were Stealing US Tech — Until the FBI Started a Sabotage Campaign ", - " Ozempic Boom Inside USA’s Weight-Loss Drug Capital ", - " Interstellar (2014) ", - " 2024-08-11 ", - " 2024-08-10 ", - " Dallas Buyers Club (2013) ", - " 2024-08-09 ", - " 2024-08-08 ", - " 2024-08-07 ", - " I Can’t Overstate How Bananas This Arizona Primary Is. The QAnon Shaman Isn’t Even the Weirdest Part. ", - " The movement desperately trying to get people to have more babies ", - " Why CVS and Target Locking Up Products Is Backfiring ", - " The skydiver who survived a 14,000-foot fall - ESPN ", - " Marjorie Taylor Greene’s and Brad Raffensperger’s Voter Registrations Targeted in Georgia’s New Online Portal ", - " Why We Investigated Matthew Trewhella, the Far-Right Wisconsin Pastor Influencing Republican Politics ", - " 2024-08-06 ", - " 2024-08-05 ", + " 2024-09-11 ", + " 2024-09-10 ", + " 2024-09-09 ", + " Why I changed my mind about volunteering ", + " Anatomy of a Murder ", + " Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons ", + " These Are the Best Texas-Style Barbecue Joints in America – Texas Monthly ", + " 2024-09-08 ", + " 2024-09-07 ", + " 2024-09-06 ", + " 2024-09-05 ", + " 2024-09-04 ", + " The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists ", + " 2024-09-03 ", + " 2024-09-02 ", + " 2025-01-29 ⚽️ Stuttgart - PSG ", + " 2025-01-22 ⚽️ PSG - Man City ", + " 2024-12-10 ⚽️ RB Salzburg - PSG ", + " 2024-11-26 Bayern - PSG ", + " 2024-11-06 ⚽️ PSG - Atletico Madrid ", + " 2024-10-22 ⚽️ PSG - PSV Eindhoven ", + " 2024-10-01 ⚽️ Arsenal - PSG ", + " 2024-09-18 ⚽️ PSG - FC Girona ", + " 2024-09-01 ⚽️ LOSC - PSG ", + " Diplomacy ", + " Diplomacy ", + " How to Make Millions as a Professional Whistleblower ", + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " Fear and Joy in Chicago Fintan O’Toole ", + " 2024-09-01 ", + " 2024-08-31 ", + " 2024-08-30 ", + " 2024-08-29 ", " Untitled ", - " Magic Mike (2012) ", - " Killer Joe (2011) ", - " 2024-08-04 ", - " 2024-08-03 ", - " The People vs Larry Flynt (1996) ", - " Amistad (1997) ", - " 2024-08-02 ", - " 2024-08-01 ", - " 2024-07-31 ", - " 2024-07-30 ", - " Braveheart (1995) ", - " How four U.S. presidents unleashed economic warfare across the globe ", - " I Accidentally Uncovered a Nationwide Scam Run by Fake Hosts on Airbnb ", - " 2024-07-29 ", - " A Time to Kill (1996) ", - " 2024-07-28 ", - " 2024-07-27 ", - " 2024-07-26 ", - " 2024-07-25 ", - " 2024-07-24 ", - " Bob Marley - One Love (2024) ", - " 2024-07-23 ", - " Goodbye Christopher Robin (2017) " + " Untitled ", + " Untitled ", + " Untitled ", + " Untitled ", + " Untitled ", + " Seehaus ", + " 2024-08-28 ", + " Untitled ", + " 2024-08-27 ", + " 2024-08-26 ", + " ‘The Blind Side’ Made Him Famous. But He Has a Different Story to Tell. ", + " From Fiery Revolutionary to Sunshine State Retiree The THC-Fueled Twilight of the Last of the Chicago 7 ", + " 2024-08-25 ", + " Untitled ", + " 2024-08-24 ", + " Arizona Dream (1993) ", + " 2024-08-23 ⚽️ PSG - Montpellier " ], "Renamed": [ + " Why I changed my mind about volunteering ", + " Anatomy of a Murder ", + " Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons ", + " These Are the Best Texas-Style Barbecue Joints in America – Texas Monthly ", + " The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists ", + " 2024-11-26 ⚽️ Bayern - PSG ", + " 2024-09-01 ⚽️ LOSC - PSG (1-3) ", + " How to Make Millions as a Professional Whistleblower ", + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " Fear and Joy in Chicago Fintan O’Toole ", + " Gaslight ", + " Underworld ", + " Qu'est-ce Qui Nous Tente ", + " Silence of Friends ", + " Couronnement de l'Art ", + " Génie & Folie ", + " If ", + " The Times They are a-changing ", + " Seehaus ", + " New Year well Wishes ", + " From Fiery Revolutionary to Sunshine State Retiree The THC-Fueled Twilight of the Last of the Chicago 7 ", + " Wien ", + " 2024-08-23 ⚽️ PSG - Montpellier (6-0) ", + " Trump Assassination Attempt Laid Bare Long-standing Vulnerabilities in the Secret Service ", + " The Vigil Keepers of January 6th ", + " How McDonald’s Found Out Its Wildly Popular Monopoly Game Was a Fraud ", + " The California Beach Town Awash in Poop ", + " After Nike Leaders Promised Climate Action, Their Corporate Jets Kept Flying — and Polluting ", + " Armed and Underground Inside the Turbulent, Secret World of an American Militia ", + " Escaping Oklahoma A Worker’s Story From Inside an Illegal Marijuana Operation ", " What I Saw in the Darién Gap ", " The Chipotle Bowl Thrower Who Was Forced to Work Fast Food ", " Moscow’s Spies Were Stealing US Tech — Until the FBI Started a Sabotage Campaign ", @@ -12106,39 +12451,35 @@ " 📃 Template Scene ", " 🧭 layout$address ", " 🍷 Template Wine ", - " 📔 Template Wiki ", - " 📺 Template TVShow ", - " 🛩️ Template Travel ", - " ⏳ Template Timeline ", - " ☑️ Template Task ", - " 📚 Template Source ", - " 🖥️ Template Server ", - " 🧑🏼‍🍳 Template Recipe ", - " 🏷️ Template Product ", - " 📖 Template Pocket Source ", - " 🪴 Template Plant ", - " 📍 Template Place ", - " 👤 Template Person ", - " 📝 Template Note ", - " 🎶 Template Music ", - " 🎬 Template Movie ", - " 📈 Template Investment ", - " 🎮 Template Game ", - " 🗓️ Template Daily ", - " 🎭 Template Creation ", - " ☕️ Template Coffee ", - " 🔖 Template Bookmark ", - " 🐱 Template Animal ", - " Pablo Escobar’s Abandoned Hippos Are Wreaking Havoc in the Colombian Jungle ", - " Doctors Are Increasingly Worried About Biden ", - " A double life The cocaine kingpin who hid as a professional soccer player ", - " Adam Nayman It was one of the most sexually explicit movies of the ‘90s. Here’s why this Tom Cruise and Nicole Kidman thriller still shocks today ", - " Strozzi ", - " 2024-07-07 Contact ", - " She Made $10,000 a Month Defrauding Apps like Uber and Instacart. Meet the Queen of the Rideshare Mafia ", - " The Great American Novels " + " 📔 Template Wiki " ], "Tagged": [ + " Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons ", + " Anatomy of a Murder ", + " Why I changed my mind about volunteering ", + " Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons ", + " These Are the Best Texas-Style Barbecue Joints in America – Texas Monthly ", + " The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists ", + " Diplomacy ", + " How to Make Millions as a Professional Whistleblower ", + " How to Make Millions as a Professional Whistleblower ", + " Fear and Joy in Chicago Fintan O’Toole ", + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " Underworld ", + " Seehaus ", + " Seehaus ", + " From Fiery Revolutionary to Sunshine State Retiree The THC-Fueled Twilight of the Last of the Chicago 7 ", + " Wien ", + " Arizona Dream (1993) ", + " The Red Circle (1970) ", + " Trump Assassination Attempt Laid Bare Long-standing Vulnerabilities in the Secret Service ", + " The Vigil Keepers of January 6th ", + " The Vigil Keepers of January 6th ", + " The California Beach Town Awash in Poop ", + " How McDonald’s Found Out Its Wildly Popular Monopoly Game Was a Fraud ", + " After Nike Leaders Promised Climate Action, Their Corporate Jets Kept Flying — and Polluting ", + " Escaping Oklahoma A Worker’s Story From Inside an Illegal Marijuana Operation ", + " Armed and Underground Inside the Turbulent, Secret World of an American Militia ", " Sleepy Hollow (1999) ", " The Social Dilemma (2020) ", " The Pink Panther (1963) ", @@ -12163,35 +12504,26 @@ " Amistad (1997) ", " Braveheart (1995) ", " How four U.S. presidents unleashed economic warfare across the globe ", - " I Accidentally Uncovered a Nationwide Scam Run by Fake Hosts on Airbnb ", - " A Time to Kill (1996) ", - " Bob Marley - One Love (2024) ", - " Goodbye Christopher Robin (2017) ", - " Doctors Are Increasingly Worried About Biden ", - " Pablo Escobar’s Abandoned Hippos Are Wreaking Havoc in the Colombian Jungle ", - " Adam Nayman It was one of the most sexually explicit movies of the ‘90s. Here’s why this Tom Cruise and Nicole Kidman thriller still shocks today ", - " A double life The cocaine kingpin who hid as a professional soccer player ", - " How a Con Man Ended Up in Solitary in Colorado Supermax Federal Prison ", - " A British Nurse Was Found Guilty of Killing Seven Babies. Did She Do It ", - " For the Women Who Accused the Trump Campaign of Harassment, It’s Been More Harassment ", - " Segregation Academies Still Operate Across the South. One Town Grapples With Its Divided Schools. ", - " An Iowa paperboy disappeared 41 years ago. His mother is still on the case ", - " The big idea can you inherit memories from your ancestors ", - " ‘The whole bridge just fell down.’ The final minutes before the Key Bridge collapsed ", - " The New Rules ", - " They came for Florida's sun and sand. They got soaring costs and a culture war. ", - " Gangsters, Money and Murder How Chinese Organized Crime Is Dominating America’s Illegal Marijuana Market ", - " Russia, Ukraine, and the Coming Schism in Orthodox Christianity ", - " The Pentagon’s Silicon Valley Problem, by Andrew Cockburn ", - " ‘The Death of Slim Shady’ or Not, You Can’t Kill Eminem. Not Really. ", - " @News ", - " Inside the Savage, Surreal, Booming World of Professional Slap Fighting ", - " Chinese Organized Crime’s Latest U.S. Target Gift Cards ", - " Nat Friedman Embraces AI to Translate the Herculaneum Papyri ", - " Sextortion Scams Are Driving Teen Boys to Suicide ", - " How Russian Spies Get Flipped or Expelled, As Told by a Spycatcher " + " I Accidentally Uncovered a Nationwide Scam Run by Fake Hosts on Airbnb " ], "Refactored": [ + " 2023-07-13 Health check ", + " 2024-09-09 ", + " 2024-09-06 ", + " 2024-09-04 ", + " Life mementos ", + " Life mementos ", + " Life mementos ", + " Life mementos ", + " Life mementos ", + " 2024-08-28 ", + " @Finances ", + " 2024-08-26 ", + " @@Paris ", + " 2024-08-25 ", + " 2024-08-22 ", + " 2024-08-21 ", + " Configuring UFW ", " 2024-08-12 ", " Ozempic Boom Inside USA’s Weight-Loss Drug Capital ", " 2024-08-07 ", @@ -12225,26 +12557,12 @@ " Lemon Zucchini Muffins ", " Lemon Zucchini Muffins ", " 2024-05-09 ", - " 2024-05-08 ", - " Household ", - " 2024-04-28 ", - " 2024-04-24 ", - " Achille Bédier ", - " 2024-04-13 ", - " 2024-04-11 ", - " 2024-04-04 ", - " 2024-03-31 ", - " @Draft1 ", - " @@Project2 ", - " 2024-03-26 ", - " 2024-03-17 ", - " 2024-03-10 ", - " 2024-03-01 ⚽️ AS Monaco - PSG ", - " 2024-02-25 ", - " Sesame Seared Tuna Steak ", - " 2024-02-20 " + " 2024-05-08 " ], "Deleted": [ + " Diplomacy ", + " 2021-12-04 MRCK - lil dialogue ", + " ‘The Blind Side’ Made Him Famous. But He Has a Different Story to Tell. ", " Why CVS and Target Locking Up Products Is Backfiring ", " Adam Nayman It was one of the most sexually explicit movies of the ‘90s. Here’s why this Tom Cruise and Nicole Kidman thriller still shocks today ", " travel$visit ", @@ -12292,65 +12610,65 @@ " Why Bill Watterson Vanished - The American Conservative ", " What Really Happened to JFK ", " Why Does Crypto Matter Matt Levine on BTC, ETH, Blockchain ", - " The Tunnels of Gaza ", - " Reuters, New York Times Top List of Fossil Fuel Industry’s Favorite Media Partners ", - " The Lonely Battle to Save Species on a Tiny Speck in the Pacific ", - " The revolt of the Christian home-schoolers " + " The Tunnels of Gaza " ], "Linked": [ - " 2024-08-16 ", - " 2024-08-15 ", - " Sleepy Hollow (1999) ", - " 2024-08-15 ", - " 2024-08-15 ", - " 2024-08-15 ", - " 2024-08-14 ", - " The Social Dilemma (2020) ", - " 2024-08-14 ", - " 2024-08-13 ", - " The Chipotle Bowl Thrower Who Was Forced to Work Fast Food ", - " 2024-08-13 ", - " What Happens to Harlem When It’s White ", - " 2024-08-12 ", - " The Pink Panther (1963) ", - " 2024-08-12 ", - " I Accidentally Uncovered a Nationwide Scam Run by Fake Hosts on Airbnb ", - " 2024-08-12 ", - " 2024-08-11 ", - " Inside Snapchat’s Teen Opioid Crisis ", - " What I Saw in the Darién Gap ", - " The Chipotle Bowl Thrower Who Was Forced to Work Fast Food ", - " Moscow’s Spies Were Stealing US Tech — Until the FBI Started a Sabotage Campaign ", + " 2024-09-11 ", + " 2024-09-11 ", + " 2024-09-10 ", + " 2024-09-10 ", + " 2024-09-09 ", + " Anatomy of a Murder ", + " Why I changed my mind about volunteering ", + " Where MAGA Granddads and Resistance Moms Go to Learn America’s Most Painful History Lessons ", + " These Are the Best Texas-Style Barbecue Joints in America – Texas Monthly ", + " 2024-09-08 ", + " 2024-09-08 ", + " Fear and Joy in Chicago Fintan O’Toole ", + " The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists ", + " 2024-09-07 ", + " 2024-09-06 ", + " 2024-09-05 ", + " 2024-09-04 ", + " 2024-09-04 ", + " The Accelerationists’ App How Telegram Became the “Center of Gravity” for a New Breed of Domestic Terrorists ", + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " 2024-09-03 ", + " 2024-09-02 ", + " 2024-09-03 ", + " 2024-09-02 ", + " 2024-11-06 ⚽️ PSG - Atletico Madrid ", + " 2024-12-10 ⚽️ RB Salzburg - PSG ", + " 2025-01-22 ⚽️ PSG - Man City ", + " 2025-01-29 ⚽️ Stuttgart - PSG ", + " 2024-11-26 ⚽️ Bayern - PSG ", + " 2024-09-18 ⚽️ PSG - FC Girona ", + " 2024-10-01 ⚽️ Arsenal - PSG ", + " 2024-10-22 ⚽️ PSG - PSV Eindhoven ", + " 2024-09-01 ⚽️ LOSC - PSG ", + " 2024-09-01 ", + " Diplomacy ", + " How to Make Millions as a Professional Whistleblower ", + " Fear and Joy in Chicago Fintan O’Toole ", + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " Gaslight ", " Ozempic Boom Inside USA’s Weight-Loss Drug Capital ", - " Marjorie Taylor Greene’s and Brad Raffensperger’s Voter Registrations Targeted in Georgia’s New Online Portal ", - " 2024-08-11 ", - " Interstellar (2014) ", - " Why Did a Father of 16 Hire a Dark-Web Hit Man ", - " The skydiver who survived a 14,000-foot fall - ESPN ", - " Why We Investigated Matthew Trewhella, the Far-Right Wisconsin Pastor Influencing Republican Politics ", - " How four U.S. presidents unleashed economic warfare across the globe ", - " The movement desperately trying to get people to have more babies ", - " 2024-08-10 ", - " 2024-08-11 ", - " 2024-08-10 ", - " 2024-08-09 ", - " Dallas Buyers Club (2013) ", - " 2024-08-09 ", - " 2024-08-09 ", - " 2024-08-09 ", - " 2024-08-08 ", - " 2024-08-08 ", - " 2024-08-07 ", - " I Can’t Overstate How Bananas This Arizona Primary Is. The QAnon Shaman Isn’t Even the Weirdest Part. ", - " The movement desperately trying to get people to have more babies ", - " Why CVS and Target Locking Up Products Is Backfiring ", - " The skydiver who survived a 14,000-foot fall - ESPN ", - " Why We Investigated Matthew Trewhella, the Far-Right Wisconsin Pastor Influencing Republican Politics ", - " Marjorie Taylor Greene’s and Brad Raffensperger’s Voter Registrations Targeted in Georgia’s New Online Portal ", - " 2024-08-06 ", - " Joe Biden should drop out " + " 2024-09-01 ", + " 2024-08-31 ", + " 2024-08-31 ", + " What I Saw in the Darién Gap ", + " 2024-08-30 ", + " 2024-08-30 ", + " The Vigil Keepers of January 6th ", + " Underworld ", + " 2024-08-29 ", + " Exclusive Life Aboard a Nuclear Submarine as the US Responds to Threats Around the Globe ", + " 2024-08-29 " ], "Removed Tags from": [ + " How Nayib Bukele's 'Iron Fist' Has Transformed El Salvador ", + " The soft life why millennials are quitting the rat race ", + " The Insulin Empire Edward Ongweso Jr. & Athena Sofides ", " She Made $10,000 a Month Defrauding Apps like Uber and Instacart. Meet the Queen of the Rideshare Mafia ", " How a Con Man Ended Up in Solitary in Colorado Supermax Federal Prison ", " A British Nurse Was Found Guilty of Killing Seven Babies. Did She Do It ", @@ -12398,10 +12716,7 @@ " Multiple Trump Witnesses Have Received Significant Financial Benefits From His Businesses, Campaign ", " Jerry West, as a player and exec, sustained excellence during a lifetime of emotional struggle ", " The Local Girls Who Inspired the Hollywood Classic “Mean Girls” ", - " How Two Single Moms Escaped an Alleged Sex-Trafficking Ring and Ultimately Saved Each Other ", - " Behind the New Iron Curtain, by Marzio G. Mian, Translated by Elettra Pauletto ", - " Hippy, capitalist, guru, grocer the forgotten genius who changed British food ", - " How a Script Doctor Found His Own Voice " + " How Two Single Moms Escaped an Alleged Sex-Trafficking Ring and Ultimately Saved Each Other " ], "Removed Links from": [ " How a Con Man Ended Up in Solitary in Colorado Supermax Federal Prison ", diff --git a/.obsidian/plugins/obsidian-icon-folder/data.json b/.obsidian/plugins/obsidian-icon-folder/data.json index f69baf7a..8f9fdb2e 100644 --- a/.obsidian/plugins/obsidian-icon-folder/data.json +++ b/.obsidian/plugins/obsidian-icon-folder/data.json @@ -6,11 +6,11 @@ "emojiStyle": "native", "iconColor": null, "recentlyUsedIcons": [ + "TpWien3Wappen", "TpWappenGenfMatt", "❤️‍🔥", "TpUnteribergBlazon", - "TpServerRemix1ByMerlin2525", - "TpPharmacieLogoSvgVector" + "TpServerRemix1ByMerlin2525" ], "recentlyUsedIconsSize": 5, "rules": [], @@ -129,5 +129,6 @@ "02.03 Zürich/Dr Awad Abuawad.md": "TpPharmacieLogoSvgVector", "02.03 Zürich/Dr Cleopatra Morales.md": "TpPharmacieLogoSvgVector", "01.04 Partner/Gordana.md": "❤️‍🔥", - "01.03 Family/Dorothée Moulin.md": "TpWappenGenfMatt" + "01.03 Family/Dorothée Moulin.md": "TpWappenGenfMatt", + "03.02 Travels/Wien.md": "TpWien3Wappen" } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-minimal-settings/main.js b/.obsidian/plugins/obsidian-minimal-settings/main.js index 7bcd5f7b..973794ce 100644 --- a/.obsidian/plugins/obsidian-minimal-settings/main.js +++ b/.obsidian/plugins/obsidian-minimal-settings/main.js @@ -3,979 +3,4 @@ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD if you want to view the source, please visit the github repository of this plugin */ -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); -var __export = (target, all) => { - __markAsModule(target); - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __reExport = (target, module2, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key of __getOwnPropNames(module2)) - if (!__hasOwnProp.call(target, key) && key !== "default") - __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); - } - return target; -}; -var __toModule = (module2) => { - return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); -}; -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; - -// main.ts -__export(exports, { - default: () => MinimalTheme -}); -var import_obsidian = __toModule(require("obsidian")); -var MinimalTheme = class extends import_obsidian.Plugin { - onload() { - return __async(this, null, function* () { - yield this.loadSettings(); - this.addSettingTab(new MinimalSettingTab(this.app, this)); - this.loadRules(); - let settingsUpdate = () => { - const fontSize = this.app.vault.getConfig("baseFontSize"); - this.settings.textNormal = fontSize; - if (this.app.vault.getConfig("foldHeading")) { - this.settings.folding = true; - this.saveData(this.settings); - console.log("Folding is on"); - } else { - this.settings.folding = false; - this.saveData(this.settings); - console.log("Folding is off"); - } - document.body.classList.toggle("minimal-folding", this.settings.folding); - if (this.app.vault.getConfig("showLineNumber")) { - this.settings.lineNumbers = true; - this.saveData(this.settings); - console.log("Line numbers are on"); - } else { - this.settings.lineNumbers = false; - this.saveData(this.settings); - console.log("Line numbers are off"); - } - document.body.classList.toggle("minimal-line-nums", this.settings.lineNumbers); - if (this.app.vault.getConfig("readableLineLength")) { - this.settings.readableLineLength = true; - this.saveData(this.settings); - console.log("Readable line length is on"); - } else { - this.settings.readableLineLength = false; - this.saveData(this.settings); - console.log("Readable line length is off"); - } - document.body.classList.toggle("minimal-readable", this.settings.readableLineLength); - document.body.classList.toggle("minimal-readable-off", !this.settings.readableLineLength); - }; - let sidebarUpdate = () => { - const sidebarEl = document.getElementsByClassName("mod-left-split")[0]; - const ribbonEl = document.getElementsByClassName("side-dock-ribbon")[0]; - if (sidebarEl && ribbonEl && document.body.classList.contains("theme-light") && this.settings.lightStyle == "minimal-light-contrast") { - sidebarEl.addClass("theme-dark"); - ribbonEl.addClass("theme-dark"); - } else if (sidebarEl && ribbonEl) { - sidebarEl.removeClass("theme-dark"); - ribbonEl.removeClass("theme-dark"); - } - }; - this.registerEvent(app.vault.on("config-changed", settingsUpdate)); - this.registerEvent(app.workspace.on("css-change", sidebarUpdate)); - settingsUpdate(); - app.workspace.onLayoutReady(() => { - sidebarUpdate(); - }); - const lightStyles = ["minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"]; - const darkStyles = ["minimal-dark", "minimal-dark-tonal", "minimal-dark-black"]; - const imgGridStyles = ["img-grid", "img-grid-ratio", "img-nogrid"]; - const tableWidthStyles = ["table-100", "table-default-width", "table-wide", "table-max"]; - const iframeWidthStyles = ["iframe-100", "iframe-default-width", "iframe-wide", "iframe-max"]; - const imgWidthStyles = ["img-100", "img-default-width", "img-wide", "img-max"]; - const mapWidthStyles = ["map-100", "map-default-width", "map-wide", "map-max"]; - const chartWidthStyles = ["chart-100", "chart-default-width", "chart-wide", "chart-max"]; - this.addCommand({ - id: "increase-body-font-size", - name: "Increase body font size", - callback: () => { - this.settings.textNormal = this.settings.textNormal + 0.5; - this.saveData(this.settings); - this.setFontSize(); - } - }); - this.addCommand({ - id: "decrease-body-font-size", - name: "Decrease body font size", - callback: () => { - this.settings.textNormal = this.settings.textNormal - 0.5; - this.saveData(this.settings); - this.setFontSize(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-cycle", - name: "Cycle between dark mode styles", - callback: () => { - this.settings.darkStyle = darkStyles[(darkStyles.indexOf(this.settings.darkStyle) + 1) % darkStyles.length]; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-cycle", - name: "Cycle between light mode styles", - callback: () => { - this.settings.lightStyle = lightStyles[(lightStyles.indexOf(this.settings.lightStyle) + 1) % lightStyles.length]; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-hidden-borders", - name: "Toggle sidebar borders", - callback: () => { - this.settings.bordersToggle = !this.settings.bordersToggle; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-colorful-headings", - name: "Toggle colorful headings", - callback: () => { - this.settings.colorfulHeadings = !this.settings.colorfulHeadings; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-focus-mode", - name: "Toggle focus mode", - callback: () => { - this.settings.focusMode = !this.settings.focusMode; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-colorful-frame", - name: "Toggle colorful window frame", - callback: () => { - this.settings.colorfulFrame = !this.settings.colorfulFrame; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-table-width", - name: "Cycle between table width options", - callback: () => { - this.settings.tableWidth = tableWidthStyles[(tableWidthStyles.indexOf(this.settings.tableWidth) + 1) % tableWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-image-width", - name: "Cycle between image width options", - callback: () => { - this.settings.imgWidth = imgWidthStyles[(imgWidthStyles.indexOf(this.settings.imgWidth) + 1) % imgWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-iframe-width", - name: "Cycle between iframe width options", - callback: () => { - this.settings.iframeWidth = iframeWidthStyles[(iframeWidthStyles.indexOf(this.settings.iframeWidth) + 1) % iframeWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-chart-width", - name: "Cycle between chart width options", - callback: () => { - this.settings.chartWidth = chartWidthStyles[(chartWidthStyles.indexOf(this.settings.chartWidth) + 1) % chartWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-map-width", - name: "Cycle between map width options", - callback: () => { - this.settings.mapWidth = mapWidthStyles[(mapWidthStyles.indexOf(this.settings.mapWidth) + 1) % mapWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-img-grid", - name: "Toggle image grids", - callback: () => { - this.settings.imgGrid = !this.settings.imgGrid; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-switch", - name: "Switch between light and dark mode", - callback: () => { - this.updateTheme(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-default", - name: "Use light mode (default)", - callback: () => { - this.settings.lightStyle = "minimal-light"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-white", - name: "Use light mode (all white)", - callback: () => { - this.settings.lightStyle = "minimal-light-white"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-tonal", - name: "Use light mode (low contrast)", - callback: () => { - this.settings.lightStyle = "minimal-light-tonal"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-contrast", - name: "Use light mode (high contrast)", - callback: () => { - this.settings.lightStyle = "minimal-light-contrast"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-default", - name: "Use dark mode (default)", - callback: () => { - this.settings.darkStyle = "minimal-dark"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-tonal", - name: "Use dark mode (low contrast)", - callback: () => { - this.settings.darkStyle = "minimal-dark-tonal"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-black", - name: "Use dark mode (true black)", - callback: () => { - this.settings.darkStyle = "minimal-dark-black"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-atom-light", - name: "Switch light color scheme to Atom (light)", - callback: () => { - this.settings.lightScheme = "minimal-atom-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-ayu-light", - name: "Switch light color scheme to Ayu (light)", - callback: () => { - this.settings.lightScheme = "minimal-ayu-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-catppuccin-light", - name: "Switch light color scheme to Catppuccin (light)", - callback: () => { - this.settings.lightScheme = "minimal-catppuccin-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-default-light", - name: "Switch light color scheme to default (light)", - callback: () => { - this.settings.lightScheme = "minimal-default-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-gruvbox-light", - name: "Switch light color scheme to Gruvbox (light)", - callback: () => { - this.settings.lightScheme = "minimal-gruvbox-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-eink-light", - name: "Switch light color scheme to E-ink (light)", - callback: () => { - this.settings.lightScheme = "minimal-eink-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-everforest-light", - name: "Switch light color scheme to Everforest (light)", - callback: () => { - this.settings.lightScheme = "minimal-everforest-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-flexoki-light", - name: "Switch light color scheme to Flexoki (light)", - callback: () => { - this.settings.lightScheme = "minimal-flexoki-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-macos-light", - name: "Switch light color scheme to macOS (light)", - callback: () => { - this.settings.lightScheme = "minimal-macos-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-notion-light", - name: "Switch light color scheme to Sky (light)", - callback: () => { - this.settings.lightScheme = "minimal-notion-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-nord-light", - name: "Switch light color scheme to Nord (light)", - callback: () => { - this.settings.lightScheme = "minimal-nord-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-rose-pine-light", - name: "Switch light color scheme to Ros\xE9 Pine (light)", - callback: () => { - this.settings.lightScheme = "minimal-rose-pine-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-solarized-light", - name: "Switch light color scheme to Solarized (light)", - callback: () => { - this.settings.lightScheme = "minimal-solarized-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-things-light", - name: "Switch light color scheme to Things (light)", - callback: () => { - this.settings.lightScheme = "minimal-things-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-atom-dark", - name: "Switch dark color scheme to Atom (dark)", - callback: () => { - this.settings.darkScheme = "minimal-atom-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-ayu-dark", - name: "Switch dark color scheme to Ayu (dark)", - callback: () => { - this.settings.darkScheme = "minimal-ayu-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-catppuccin-dark", - name: "Switch dark color scheme to Catppuccin (dark)", - callback: () => { - this.settings.darkScheme = "minimal-catppuccin-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dracula-dark", - name: "Switch dark color scheme to Dracula (dark)", - callback: () => { - this.settings.darkScheme = "minimal-dracula-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-default-dark", - name: "Switch dark color scheme to default (dark)", - callback: () => { - this.settings.darkScheme = "minimal-default-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-eink-dark", - name: "Switch dark color scheme to E-ink (dark)", - callback: () => { - this.settings.darkScheme = "minimal-eink-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-everforest-dark", - name: "Switch dark color scheme to Everforest (dark)", - callback: () => { - this.settings.darkScheme = "minimal-everforest-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-flexoki-dark", - name: "Switch dark color scheme to Flexoki (dark)", - callback: () => { - this.settings.darkScheme = "minimal-flexoki-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-gruvbox-dark", - name: "Switch dark color scheme to Gruvbox (dark)", - callback: () => { - this.settings.darkScheme = "minimal-gruvbox-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-macos-dark", - name: "Switch dark color scheme to macOS (dark)", - callback: () => { - this.settings.darkScheme = "minimal-macos-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-nord-dark", - name: "Switch dark color scheme to Nord (dark)", - callback: () => { - this.settings.darkScheme = "minimal-nord-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-notion-dark", - name: "Switch dark color scheme to Sky (dark)", - callback: () => { - this.settings.darkScheme = "minimal-notion-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-rose-pine-dark", - name: "Switch dark color scheme to Ros\xE9 Pine (dark)", - callback: () => { - this.settings.darkScheme = "minimal-rose-pine-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-solarized-dark", - name: "Switch dark color scheme to Solarized (dark)", - callback: () => { - this.settings.darkScheme = "minimal-solarized-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-things-dark", - name: "Switch dark color scheme to Things (dark)", - callback: () => { - this.settings.darkScheme = "minimal-things-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dev-block-width", - name: "Dev \u2014 Show block widths", - callback: () => { - this.settings.devBlockWidth = !this.settings.devBlockWidth; - this.saveData(this.settings); - this.refresh(); - } - }); - this.refresh(); - }); - } - onunload() { - console.log("Unloading Minimal Theme Settings plugin"); - const sidebarEl = document.getElementsByClassName("mod-left-split")[0]; - const ribbonEl = document.getElementsByClassName("side-dock-ribbon")[0]; - sidebarEl.removeClass("theme-dark"); - ribbonEl.removeClass("theme-dark"); - this.unloadRules(); - this.removeStyle(); - this.removeSettings(); - this.removeLightScheme(); - this.removeDarkScheme(); - } - loadSettings() { - return __async(this, null, function* () { - this.settings = Object.assign(DEFAULT_SETTINGS, yield this.loadData()); - }); - } - saveSettings() { - return __async(this, null, function* () { - yield this.saveData(this.settings); - }); - } - refresh() { - this.updateStyle(); - } - loadRules() { - const css = document.createElement("style"); - css.id = "minimal-theme"; - document.getElementsByTagName("head")[0].appendChild(css); - document.body.classList.add("minimal-theme"); - this.updateStyle(); - } - unloadRules() { - const styleElement = document.getElementById("minimal-theme"); - if (styleElement) { - styleElement.parentNode.removeChild(styleElement); - } - document.body.classList.remove("minimal-theme"); - } - setFontSize() { - this.app.vault.setConfig("baseFontSize", this.settings.textNormal); - this.app.updateFontSize(); - } - updateStyle() { - this.removeStyle(); - this.removeSettings(); - document.body.addClass(this.settings.lightStyle, this.settings.lightScheme, this.settings.darkStyle, this.settings.darkScheme); - document.body.classList.toggle("borders-none", !this.settings.bordersToggle); - document.body.classList.toggle("colorful-headings", this.settings.colorfulHeadings); - document.body.classList.toggle("colorful-frame", this.settings.colorfulFrame); - document.body.classList.toggle("colorful-active", this.settings.colorfulActiveStates); - document.body.classList.toggle("minimal-focus-mode", this.settings.focusMode); - document.body.classList.toggle("links-int-on", this.settings.underlineInternal); - document.body.classList.toggle("links-ext-on", this.settings.underlineExternal); - document.body.classList.toggle("full-width-media", this.settings.fullWidthMedia); - document.body.classList.toggle("img-grid", this.settings.imgGrid); - document.body.classList.toggle("minimal-dev-block-width", this.settings.devBlockWidth); - document.body.classList.toggle("minimal-status-off", !this.settings.minimalStatus); - document.body.classList.toggle("full-file-names", !this.settings.trimNames); - document.body.classList.toggle("labeled-nav", this.settings.labeledNav); - document.body.classList.toggle("minimal-folding", this.settings.folding); - document.body.addClass(this.settings.chartWidth, this.settings.tableWidth, this.settings.imgWidth, this.settings.iframeWidth, this.settings.mapWidth); - const el = document.getElementById("minimal-theme"); - if (!el) - throw "minimal-theme element not found!"; - else { - el.innerText = "body.minimal-theme{--font-ui-small:" + this.settings.textSmall + "px;--line-height:" + this.settings.lineHeight + ";--line-width:" + this.settings.lineWidth + "rem;--line-width-wide:" + this.settings.lineWidthWide + "rem;--max-width:" + this.settings.maxWidth + "%;--font-editor-override:" + this.settings.editorFont + ";"; - } - } - updateDarkStyle() { - document.body.removeClass("theme-light", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); - document.body.addClass("theme-dark", this.settings.darkStyle); - if (this.app.vault.getConfig("theme") !== "system") { - this.app.setTheme("obsidian"); - this.app.vault.setConfig("theme", "obsidian"); - } - this.app.workspace.trigger("css-change"); - } - updateLightStyle() { - document.body.removeClass("theme-dark", "minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"); - document.body.addClass("theme-light", this.settings.lightStyle); - if (this.app.vault.getConfig("theme") !== "system") { - this.app.setTheme("moonstone"); - this.app.vault.setConfig("theme", "moonstone"); - } - this.app.workspace.trigger("css-change"); - } - updateDarkScheme() { - this.removeDarkScheme(); - document.body.addClass(this.settings.darkScheme); - } - updateLightScheme() { - this.removeLightScheme(); - document.body.addClass(this.settings.lightScheme); - } - updateTheme() { - if (this.app.vault.getConfig("theme") === "system") { - if (document.body.classList.contains("theme-light")) { - document.body.removeClass("theme-light"); - document.body.addClass("theme-dark"); - } else { - document.body.removeClass("theme-dark"); - document.body.addClass("theme-light"); - } - } else { - if (document.body.classList.contains("theme-light")) { - document.body.removeClass("theme-light"); - document.body.addClass("theme-dark"); - } else { - document.body.removeClass("theme-dark"); - document.body.addClass("theme-light"); - } - const currentTheme = this.app.vault.getConfig("theme"); - const newTheme = currentTheme === "moonstone" ? "obsidian" : "moonstone"; - this.app.setTheme(newTheme); - this.app.vault.setConfig("theme", newTheme); - } - this.app.workspace.trigger("css-change"); - } - removeSettings() { - document.body.removeClass("borders-none", "colorful-headings", "colorful-frame", "colorful-active", "minimal-focus-mode", "links-int-on", "links-ext-on", "full-width-media", "img-grid", "minimal-dev-block-width", "minimal-status-off", "full-file-names", "labeled-nav", "minimal-folding"); - document.body.removeClass("table-wide", "table-max", "table-100", "table-default-width", "iframe-wide", "iframe-max", "iframe-100", "iframe-default-width", "img-wide", "img-max", "img-100", "img-default-width", "chart-wide", "chart-max", "chart-100", "chart-default-width", "map-wide", "map-max", "map-100", "map-default-width"); - } - removeStyle() { - document.body.removeClass("minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); - } - removeDarkScheme() { - document.body.removeClass("minimal-atom-dark", "minimal-ayu-dark", "minimal-catppuccin-dark", "minimal-default-dark", "minimal-dracula-dark", "minimal-eink-dark", "minimal-everforest-dark", "minimal-flexoki-dark", "minimal-gruvbox-dark", "minimal-macos-dark", "minimal-nord-dark", "minimal-notion-dark", "minimal-rose-pine-dark", "minimal-solarized-dark", "minimal-things-dark"); - } - removeLightScheme() { - document.body.removeClass("minimal-atom-light", "minimal-ayu-light", "minimal-catppuccin-light", "minimal-default-light", "minimal-eink-light", "minimal-everforest-light", "minimal-flexoki-light", "minimal-gruvbox-light", "minimal-macos-light", "minimal-nord-light", "minimal-notion-light", "minimal-rose-pine-light", "minimal-solarized-light", "minimal-things-light"); - } -}; -var DEFAULT_SETTINGS = { - lightStyle: "minimal-light", - darkStyle: "minimal-dark", - lightScheme: "minimal-default-light", - darkScheme: "minimal-default-dark", - editorFont: "", - lineHeight: 1.5, - lineWidth: 40, - lineWidthWide: 50, - maxWidth: 88, - textNormal: 16, - textSmall: 13, - imgGrid: false, - imgWidth: "img-default-width", - tableWidth: "table-default-width", - iframeWidth: "iframe-default-width", - mapWidth: "map-default-width", - chartWidth: "chart-default-width", - colorfulHeadings: false, - colorfulFrame: false, - colorfulActiveStates: false, - trimNames: true, - labeledNav: false, - fullWidthMedia: true, - bordersToggle: true, - minimalStatus: true, - focusMode: false, - underlineInternal: true, - underlineExternal: true, - folding: true, - lineNumbers: false, - readableLineLength: false, - devBlockWidth: false -}; -var MinimalSettingTab = class extends import_obsidian.PluginSettingTab { - constructor(app2, plugin) { - super(app2, plugin); - this.plugin = plugin; - } - display() { - let { containerEl } = this; - containerEl.empty(); - const colorSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); - const colorSectionInfo = colorSection.createEl("div", { cls: "setting-item-info" }); - colorSectionInfo.createEl("div", { text: "Color scheme", cls: "setting-item-name" }); - const colorDesc = colorSectionInfo.createEl("div", { cls: "setting-item-description" }); - colorDesc.appendChild(createEl("span", { - text: "To create a custom color scheme use the " - })); - colorDesc.appendChild(createEl("a", { - text: "Style Settings", - href: "obsidian://show-plugin?id=obsidian-style-settings" - })); - colorDesc.appendText(" plugin. See "); - colorDesc.appendChild(createEl("a", { - text: "documentation", - href: "https://minimal.guide/features/color-schemes" - })); - colorDesc.appendText(" for details."); - new import_obsidian.Setting(containerEl).setName("Light mode color scheme").setDesc("Preset color options for light mode.").addDropdown((dropdown) => dropdown.addOption("minimal-default-light", "Default").addOption("minimal-atom-light", "Atom").addOption("minimal-ayu-light", "Ayu").addOption("minimal-catppuccin-light", "Catppuccin").addOption("minimal-eink-light", "E-ink (beta)").addOption("minimal-everforest-light", "Everforest").addOption("minimal-flexoki-light", "Flexoki").addOption("minimal-gruvbox-light", "Gruvbox").addOption("minimal-macos-light", "macOS").addOption("minimal-nord-light", "Nord").addOption("minimal-rose-pine-light", "Ros\xE9 Pine").addOption("minimal-notion-light", "Sky").addOption("minimal-solarized-light", "Solarized").addOption("minimal-things-light", "Things").setValue(this.plugin.settings.lightScheme).onChange((value) => { - this.plugin.settings.lightScheme = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateLightScheme(); - })); - new import_obsidian.Setting(containerEl).setName("Light mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown((dropdown) => dropdown.addOption("minimal-light", "Default").addOption("minimal-light-white", "All white").addOption("minimal-light-tonal", "Low contrast").addOption("minimal-light-contrast", "High contrast").setValue(this.plugin.settings.lightStyle).onChange((value) => { - this.plugin.settings.lightStyle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateLightStyle(); - })); - new import_obsidian.Setting(containerEl).setName("Dark mode color scheme").setDesc("Preset colors options for dark mode.").addDropdown((dropdown) => dropdown.addOption("minimal-default-dark", "Default").addOption("minimal-atom-dark", "Atom").addOption("minimal-ayu-dark", "Ayu").addOption("minimal-catppuccin-dark", "Catppuccin").addOption("minimal-dracula-dark", "Dracula").addOption("minimal-eink-dark", "E-ink (beta)").addOption("minimal-everforest-dark", "Everforest").addOption("minimal-flexoki-dark", "Flexoki").addOption("minimal-gruvbox-dark", "Gruvbox").addOption("minimal-macos-dark", "macOS").addOption("minimal-nord-dark", "Nord").addOption("minimal-rose-pine-dark", "Ros\xE9 Pine").addOption("minimal-notion-dark", "Sky").addOption("minimal-solarized-dark", "Solarized").addOption("minimal-things-dark", "Things").setValue(this.plugin.settings.darkScheme).onChange((value) => { - this.plugin.settings.darkScheme = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateDarkScheme(); - })); - new import_obsidian.Setting(containerEl).setName("Dark mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown((dropdown) => dropdown.addOption("minimal-dark", "Default").addOption("minimal-dark-tonal", "Low contrast").addOption("minimal-dark-black", "True black").setValue(this.plugin.settings.darkStyle).onChange((value) => { - this.plugin.settings.darkStyle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateDarkStyle(); - })); - containerEl.createEl("br"); - const featuresSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); - const featuresSectionInfo = featuresSection.createEl("div", { cls: "setting-item-info" }); - featuresSectionInfo.createEl("div", { text: "Features", cls: "setting-item-name" }); - const featuresSectionDesc = featuresSectionInfo.createEl("div", { cls: "setting-item-description" }); - featuresSectionDesc.appendChild(createEl("span", { - text: "See " - })); - featuresSectionDesc.appendChild(createEl("a", { - text: "documentation", - href: "https://minimal.guide" - })); - featuresSectionDesc.appendText(" for details."); - new import_obsidian.Setting(containerEl).setName("Text labels for primary navigation").setDesc("Navigation items in the left sidebar uses text labels.").addToggle((toggle) => toggle.setValue(this.plugin.settings.labeledNav).onChange((value) => { - this.plugin.settings.labeledNav = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful window frame").setDesc("The top area of the app uses your accent color.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulFrame).onChange((value) => { - this.plugin.settings.colorfulFrame = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful active states").setDesc("Active file and menu items use your accent color.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulActiveStates).onChange((value) => { - this.plugin.settings.colorfulActiveStates = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful headings").setDesc("Headings use a different color for each size.").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulHeadings).onChange((value) => { - this.plugin.settings.colorfulHeadings = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Minimal status bar").setDesc("Turn off to use full-width status bar.").addToggle((toggle) => toggle.setValue(this.plugin.settings.minimalStatus).onChange((value) => { - this.plugin.settings.minimalStatus = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Trim file names in sidebars").setDesc("Use ellipses to fit file names on a single line.").addToggle((toggle) => toggle.setValue(this.plugin.settings.trimNames).onChange((value) => { - this.plugin.settings.trimNames = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Workspace borders").setDesc("Display divider lines between workspace elements.").addToggle((toggle) => toggle.setValue(this.plugin.settings.bordersToggle).onChange((value) => { - this.plugin.settings.bordersToggle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Focus mode").setDesc("Hide tab bar and status bar, hover to display. Can be toggled via hotkey.").addToggle((toggle) => toggle.setValue(this.plugin.settings.focusMode).onChange((value) => { - this.plugin.settings.focusMode = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Underline internal links").setDesc("Show underlines on internal links.").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineInternal).onChange((value) => { - this.plugin.settings.underlineInternal = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Underline external links").setDesc("Show underlines on external links.").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineExternal).onChange((value) => { - this.plugin.settings.underlineExternal = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Maximize media").setDesc("Images and videos fill the width of the line.").addToggle((toggle) => toggle.setValue(this.plugin.settings.fullWidthMedia).onChange((value) => { - this.plugin.settings.fullWidthMedia = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - const layoutSection = containerEl.createEl("div", { cls: "setting-item setting-item-heading" }); - const layoutSectionInfo = layoutSection.createEl("div", { cls: "setting-item-info" }); - layoutSectionInfo.createEl("div", { text: "Layout", cls: "setting-item-name" }); - const layoutSectionDesc = layoutSectionInfo.createEl("div", { cls: "setting-item-description" }); - layoutSectionDesc.appendChild(createEl("span", { - text: "These options can also be defined on a per-file basis, see " - })); - layoutSectionDesc.appendChild(createEl("a", { - text: "documentation", - href: "https://minimal.guide/features/block-width" - })); - layoutSectionDesc.appendText(" for details."); - new import_obsidian.Setting(containerEl).setName("Image grids").setDesc("Turn consecutive images into columns \u2014 to make a new row, add an extra line break between images.").addToggle((toggle) => toggle.setValue(this.plugin.settings.imgGrid).onChange((value) => { - this.plugin.settings.imgGrid = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Chart width").setDesc("Default width for chart blocks.").addDropdown((dropdown) => dropdown.addOption("chart-default-width", "Default").addOption("chart-wide", "Wide line width").addOption("chart-max", "Maximum line width").addOption("chart-100", "100% pane width").setValue(this.plugin.settings.chartWidth).onChange((value) => { - this.plugin.settings.chartWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Iframe width").setDesc("Default width for iframe blocks.").addDropdown((dropdown) => dropdown.addOption("iframe-default-width", "Default").addOption("iframe-wide", "Wide line width").addOption("iframe-max", "Maximum line width").addOption("iframe-100", "100% pane width").setValue(this.plugin.settings.iframeWidth).onChange((value) => { - this.plugin.settings.iframeWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Image width").setDesc("Default width for image blocks.").addDropdown((dropdown) => dropdown.addOption("img-default-width", "Default").addOption("img-wide", "Wide line width").addOption("img-max", "Maximum line width").addOption("img-100", "100% pane width").setValue(this.plugin.settings.imgWidth).onChange((value) => { - this.plugin.settings.imgWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Map width").setDesc("Default width for map blocks.").addDropdown((dropdown) => dropdown.addOption("map-default-width", "Default").addOption("map-wide", "Wide line width").addOption("map-max", "Maximum line width").addOption("map-100", "100% pane width").setValue(this.plugin.settings.mapWidth).onChange((value) => { - this.plugin.settings.mapWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Table width").setDesc("Default width for table and Dataview blocks.").addDropdown((dropdown) => dropdown.addOption("table-default-width", "Default").addOption("table-wide", "Wide line width").addOption("table-max", "Maximum line width").addOption("table-100", "100% pane width").setValue(this.plugin.settings.tableWidth).onChange((value) => { - this.plugin.settings.tableWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("div", { text: "Typography", cls: "setting-item setting-item-heading" }); - new import_obsidian.Setting(containerEl).setName("Text font size").setDesc("Used for the main text (default 16).").addText((text) => text.setPlaceholder("16").setValue((this.plugin.settings.textNormal || "") + "").onChange((value) => { - this.plugin.settings.textNormal = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.setFontSize(); - })); - new import_obsidian.Setting(containerEl).setName("Small font size").setDesc("Used for text in the sidebars and tabs (default 13).").addText((text) => text.setPlaceholder("13").setValue((this.plugin.settings.textSmall || "") + "").onChange((value) => { - this.plugin.settings.textSmall = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Line height").setDesc("Line height of text (default 1.5).").addText((text) => text.setPlaceholder("1.5").setValue((this.plugin.settings.lineHeight || "") + "").onChange((value) => { - this.plugin.settings.lineHeight = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Normal line width").setDesc("Number of characters per line (default 40).").addText((text) => text.setPlaceholder("40").setValue((this.plugin.settings.lineWidth || "") + "").onChange((value) => { - this.plugin.settings.lineWidth = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Wide line width").setDesc("Number of characters per line for wide elements (default 50).").addText((text) => text.setPlaceholder("50").setValue((this.plugin.settings.lineWidthWide || "") + "").onChange((value) => { - this.plugin.settings.lineWidthWide = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Maximum line width %").setDesc("Percentage of space inside a pane that a line can fill (default 88).").addText((text) => text.setPlaceholder("88").setValue((this.plugin.settings.maxWidth || "") + "").onChange((value) => { - this.plugin.settings.maxWidth = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Editor font").setDesc("Overrides the text font defined in Obsidian Appearance settings when in edit mode.").addText((text) => text.setPlaceholder("").setValue((this.plugin.settings.editorFont || "") + "").onChange((value) => { - this.plugin.settings.editorFont = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - } -}; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBXb3Jrc3BhY2UsIE1vZGFsLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pbmltYWxUaGVtZSBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG4gIHNldHRpbmdzOiBNaW5pbWFsU2V0dGluZ3M7XHJcblxyXG4gIGFzeW5jIG9ubG9hZCgpIHtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgTWluaW1hbFNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcbiAgICB0aGlzLmxvYWRSdWxlcygpO1xyXG5cclxuICAgIC8vIENoZWNrIHN0YXRlIG9mIE9ic2lkaWFuIFNldHRpbmdzXHJcbiAgICBsZXQgc2V0dGluZ3NVcGRhdGUgPSAoKSA9PiB7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ2Jhc2VGb250U2l6ZScpO1xyXG4gICAgICB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgPSBmb250U2l6ZTtcclxuXHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygnZm9sZEhlYWRpbmcnKSkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICBjb25zb2xlLmxvZygnRm9sZGluZyBpcyBvbicpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0ZvbGRpbmcgaXMgb2ZmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWZvbGRpbmcnLCB0aGlzLnNldHRpbmdzLmZvbGRpbmcpO1xyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3Nob3dMaW5lTnVtYmVyJykpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpbmVOdW1iZXJzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdMaW5lIG51bWJlcnMgYXJlIG9uJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saW5lTnVtYmVycyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0xpbmUgbnVtYmVycyBhcmUgb2ZmJyk7XHJcbiAgICAgIH1cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWxpbmUtbnVtcycsIHRoaXMuc2V0dGluZ3MubGluZU51bWJlcnMpO1xyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3JlYWRhYmxlTGluZUxlbmd0aCcpKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ1JlYWRhYmxlIGxpbmUgbGVuZ3RoIGlzIG9uJyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGggPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWFkYWJsZSBsaW5lIGxlbmd0aCBpcyBvZmYnKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLXJlYWRhYmxlJywgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGgpO1xyXG4gICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtcmVhZGFibGUtb2ZmJywgIXRoaXMuc2V0dGluZ3MucmVhZGFibGVMaW5lTGVuZ3RoKTtcclxuICBcclxuICAgIH1cclxuICBcclxuICAgIGxldCBzaWRlYmFyVXBkYXRlID0gKCkgPT4ge1xyXG4gICAgICBjb25zdCBzaWRlYmFyRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdtb2QtbGVmdC1zcGxpdCcpWzBdO1xyXG4gICAgICBjb25zdCByaWJib25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NpZGUtZG9jay1yaWJib24nKVswXTtcclxuICAgICAgaWYgKHNpZGViYXJFbCAmJiByaWJib25FbCAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygndGhlbWUtbGlnaHQnKSAmJiB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUgPT0gJ21pbmltYWwtbGlnaHQtY29udHJhc3QnKSB7XHJcbiAgICAgICAgc2lkZWJhckVsLmFkZENsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgcmliYm9uRWwuYWRkQ2xhc3MoJ3RoZW1lLWRhcmsnKTtcclxuICAgICAgfSBlbHNlIGlmIChzaWRlYmFyRWwgJiYgcmliYm9uRWwpIHtcclxuICAgICAgICBzaWRlYmFyRWwucmVtb3ZlQ2xhc3MoJ3RoZW1lLWRhcmsnKTsgXHJcbiAgICAgICAgcmliYm9uRWwucmVtb3ZlQ2xhc3MoJ3RoZW1lLWRhcmsnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAudmF1bHQub24oJ2NvbmZpZy1jaGFuZ2VkJywgc2V0dGluZ3NVcGRhdGUpKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMucmVnaXN0ZXJFdmVudChhcHAud29ya3NwYWNlLm9uKCdjc3MtY2hhbmdlJywgc2lkZWJhclVwZGF0ZSkpO1xyXG5cclxuICAgIHNldHRpbmdzVXBkYXRlKCk7XHJcbiAgICBcclxuICAgIGFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSgoKSA9PiB7XHJcbiAgICAgIHNpZGViYXJVcGRhdGUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IGxpZ2h0U3R5bGVzID0gWydtaW5pbWFsLWxpZ2h0JywgJ21pbmltYWwtbGlnaHQtdG9uYWwnLCAnbWluaW1hbC1saWdodC1jb250cmFzdCcsICdtaW5pbWFsLWxpZ2h0LXdoaXRlJ107XHJcbiAgICBjb25zdCBkYXJrU3R5bGVzID0gWydtaW5pbWFsLWRhcmsnLCAnbWluaW1hbC1kYXJrLXRvbmFsJywgJ21pbmltYWwtZGFyay1ibGFjayddO1xyXG4gICAgY29uc3QgaW1nR3JpZFN0eWxlcyA9IFsnaW1nLWdyaWQnLCdpbWctZ3JpZC1yYXRpbycsJ2ltZy1ub2dyaWQnXTtcclxuICAgIGNvbnN0IHRhYmxlV2lkdGhTdHlsZXMgPSBbJ3RhYmxlLTEwMCcsJ3RhYmxlLWRlZmF1bHQtd2lkdGgnLCd0YWJsZS13aWRlJywndGFibGUtbWF4J107XHJcbiAgICBjb25zdCBpZnJhbWVXaWR0aFN0eWxlcyA9IFsnaWZyYW1lLTEwMCcsJ2lmcmFtZS1kZWZhdWx0LXdpZHRoJywnaWZyYW1lLXdpZGUnLCdpZnJhbWUtbWF4J107XHJcbiAgICBjb25zdCBpbWdXaWR0aFN0eWxlcyA9IFsnaW1nLTEwMCcsJ2ltZy1kZWZhdWx0LXdpZHRoJywnaW1nLXdpZGUnLCdpbWctbWF4J107XHJcbiAgICBjb25zdCBtYXBXaWR0aFN0eWxlcyA9IFsnbWFwLTEwMCcsJ21hcC1kZWZhdWx0LXdpZHRoJywnbWFwLXdpZGUnLCdtYXAtbWF4J107XHJcbiAgICBjb25zdCBjaGFydFdpZHRoU3R5bGVzID0gWydjaGFydC0xMDAnLCdjaGFydC1kZWZhdWx0LXdpZHRoJywnY2hhcnQtd2lkZScsJ2NoYXJ0LW1heCddO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnaW5jcmVhc2UtYm9keS1mb250LXNpemUnLFxyXG4gICAgICBuYW1lOiAnSW5jcmVhc2UgYm9keSBmb250IHNpemUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCA9IHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCArIDAuNTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuc2V0Rm9udFNpemUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICdkZWNyZWFzZS1ib2R5LWZvbnQtc2l6ZScsXHJcbiAgICAgIG5hbWU6ICdEZWNyZWFzZSBib2R5IGZvbnQgc2l6ZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy50ZXh0Tm9ybWFsID0gdGhpcy5zZXR0aW5ncy50ZXh0Tm9ybWFsIC0gMC41O1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5zZXRGb250U2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTsgXHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWN5Y2xlJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gZGFyayBtb2RlIHN0eWxlcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUgPSBkYXJrU3R5bGVzWyhkYXJrU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUpICsgMSkgJSBkYXJrU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTsgIFxyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbGlnaHQtY3ljbGUnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBsaWdodCBtb2RlIHN0eWxlcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlID0gbGlnaHRTdHlsZXNbKGxpZ2h0U3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5saWdodFN0eWxlKSArIDEpICUgbGlnaHRTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1oaWRkZW4tYm9yZGVycycsXHJcbiAgICAgIG5hbWU6ICdUb2dnbGUgc2lkZWJhciBib3JkZXJzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUgPSAhdGhpcy5zZXR0aW5ncy5ib3JkZXJzVG9nZ2xlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLWNvbG9yZnVsLWhlYWRpbmdzJyxcclxuICAgICAgbmFtZTogJ1RvZ2dsZSBjb2xvcmZ1bCBoZWFkaW5ncycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jb2xvcmZ1bEhlYWRpbmdzID0gIXRoaXMuc2V0dGluZ3MuY29sb3JmdWxIZWFkaW5ncztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWZvY3VzLW1vZGUnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGZvY3VzIG1vZGUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZm9jdXNNb2RlID0gIXRoaXMuc2V0dGluZ3MuZm9jdXNNb2RlO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtY29sb3JmdWwtZnJhbWUnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGNvbG9yZnVsIHdpbmRvdyBmcmFtZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lID0gIXRoaXMuc2V0dGluZ3MuY29sb3JmdWxGcmFtZTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtdGFibGUtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiB0YWJsZSB3aWR0aCBvcHRpb25zJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGggPSB0YWJsZVdpZHRoU3R5bGVzWyh0YWJsZVdpZHRoU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy50YWJsZVdpZHRoKSArIDEpICUgdGFibGVXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1pbWFnZS13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIGltYWdlIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaW1nV2lkdGggPSBpbWdXaWR0aFN0eWxlc1soaW1nV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmltZ1dpZHRoKSArIDEpICUgaW1nV2lkdGhTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtaWZyYW1lLXdpZHRoJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gaWZyYW1lIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaWZyYW1lV2lkdGggPSBpZnJhbWVXaWR0aFN0eWxlc1soaWZyYW1lV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmlmcmFtZVdpZHRoKSArIDEpICUgaWZyYW1lV2lkdGhTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2N5Y2xlLW1pbmltYWwtY2hhcnQtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBjaGFydCB3aWR0aCBvcHRpb25zJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmNoYXJ0V2lkdGggPSBjaGFydFdpZHRoU3R5bGVzWyhjaGFydFdpZHRoU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5jaGFydFdpZHRoKSArIDEpICUgY2hhcnRXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1tYXAtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBtYXAgd2lkdGggb3B0aW9ucycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tYXBXaWR0aCA9IG1hcFdpZHRoU3R5bGVzWyhtYXBXaWR0aFN0eWxlcy5pbmRleE9mKHRoaXMuc2V0dGluZ3MubWFwV2lkdGgpICsgMSkgJSBtYXBXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtaW1nLWdyaWQnLFxyXG4gICAgICBuYW1lOiAnVG9nZ2xlIGltYWdlIGdyaWRzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmltZ0dyaWQgPSAhdGhpcy5zZXR0aW5ncy5pbWdHcmlkO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtc3dpdGNoJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIG1vZGUnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlVGhlbWUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1kZWZhdWx0JyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChkZWZhdWx0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlID0gJ21pbmltYWwtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbGlnaHQtd2hpdGUnLFxyXG4gICAgICBuYW1lOiAnVXNlIGxpZ2h0IG1vZGUgKGFsbCB3aGl0ZSknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LXdoaXRlJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWxpZ2h0LXRvbmFsJyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChsb3cgY29udHJhc3QpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSAnbWluaW1hbC1saWdodC10b25hbCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1jb250cmFzdCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgbGlnaHQgbW9kZSAoaGlnaCBjb250cmFzdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LWNvbnRyYXN0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRhcmstZGVmYXVsdCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgZGFyayBtb2RlIChkZWZhdWx0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUgPSAnbWluaW1hbC1kYXJrJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZGFyay10b25hbCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgZGFyayBtb2RlIChsb3cgY29udHJhc3QpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSA9ICdtaW5pbWFsLWRhcmstdG9uYWwnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWJsYWNrJyxcclxuICAgICAgbmFtZTogJ1VzZSBkYXJrIG1vZGUgKHRydWUgYmxhY2spJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSA9ICdtaW5pbWFsLWRhcmstYmxhY2snO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1hdG9tLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gQXRvbSAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtYXRvbS1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtYXl1LWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gQXl1IChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1heXUtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWNhdHBwdWNjaW4tbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBDYXRwcHVjY2luIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1jYXRwcHVjY2luLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kZWZhdWx0LWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gZGVmYXVsdCAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtZGVmYXVsdC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZ3J1dmJveC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEdydXZib3ggKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWdydXZib3gtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWVpbmstbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBFLWluayAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtZWluay1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEV2ZXJmb3Jlc3QgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWV2ZXJmb3Jlc3QtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWZsZXhva2ktbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBGbGV4b2tpIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1mbGV4b2tpLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIG1hY09TIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1tYWNvcy1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbm90aW9uLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gU2t5IChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1ub3Rpb24tbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLW5vcmQtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBOb3JkIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1ub3JkLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1yb3NlLXBpbmUtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBSb3NcdTAwRTkgUGluZSAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1zb2xhcml6ZWQtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBTb2xhcml6ZWQgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLXNvbGFyaXplZC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtdGhpbmdzLWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gVGhpbmdzIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC10aGluZ3MtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWF0b20tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gQXRvbSAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWF0b20tZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWF5dS1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBBeXUgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1heXUtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWNhdHBwdWNjaW4tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gQ2F0cHB1Y2NpbiAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWNhdHBwdWNjaW4tZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRyYWN1bGEtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gRHJhY3VsYSAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWRyYWN1bGEtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRlZmF1bHQtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gZGVmYXVsdCAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWRlZmF1bHQtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWVpbmstZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gRS1pbmsgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1laW5rLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ldmVyZm9yZXN0LWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEV2ZXJmb3Jlc3QgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ldmVyZm9yZXN0LWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1mbGV4b2tpLWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEZsZXhva2kgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1mbGV4b2tpLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ncnV2Ym94LWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIEdydXZib3ggKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ncnV2Ym94LWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBtYWNPUyAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLW1hY29zLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ub3JkLWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIE5vcmQgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1ub3JkLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ub3Rpb24tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gU2t5IChkYXJrKScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU2NoZW1lID0gJ21pbmltYWwtbm90aW9uLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1yb3NlLXBpbmUtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gUm9zXHUwMEU5IFBpbmUgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1yb3NlLXBpbmUtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLXNvbGFyaXplZC1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBTb2xhcml6ZWQgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1zb2xhcml6ZWQtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLXRoaW5ncy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBUaGluZ3MgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC10aGluZ3MtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRldi1ibG9jay13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdEZXYgXHUyMDE0IFNob3cgYmxvY2sgd2lkdGhzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRldkJsb2NrV2lkdGggPSAhdGhpcy5zZXR0aW5ncy5kZXZCbG9ja1dpZHRoO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMucmVmcmVzaCgpXHJcbiAgfVxyXG5cclxuICBvbnVubG9hZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdVbmxvYWRpbmcgTWluaW1hbCBUaGVtZSBTZXR0aW5ncyBwbHVnaW4nKTtcclxuICAgIGNvbnN0IHNpZGViYXJFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21vZC1sZWZ0LXNwbGl0JylbMF07XHJcbiAgICBjb25zdCByaWJib25FbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3NpZGUtZG9jay1yaWJib24nKVswXTtcclxuICAgIHNpZGViYXJFbC5yZW1vdmVDbGFzcygndGhlbWUtZGFyaycpOyBcclxuICAgIHJpYmJvbkVsLnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcblxyXG4gICAgdGhpcy51bmxvYWRSdWxlcygpO1xyXG4gICAgdGhpcy5yZW1vdmVTdHlsZSgpO1xyXG4gICAgdGhpcy5yZW1vdmVTZXR0aW5ncygpO1xyXG4gICAgdGhpcy5yZW1vdmVMaWdodFNjaGVtZSgpO1xyXG4gICAgdGhpcy5yZW1vdmVEYXJrU2NoZW1lKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICB9XHJcblxyXG4gIC8vIHJlZnJlc2ggZnVuY3Rpb24gZm9yIHdoZW4gd2UgY2hhbmdlIHNldHRpbmdzXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIC8vIHJlLWxvYWQgdGhlIHN0eWxlXHJcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKClcclxuICB9XHJcblxyXG4gIC8vIGFkZCB0aGUgc3R5bGluZyBlbGVtZW50cyB3ZSBuZWVkXHJcbiAgbG9hZFJ1bGVzKCkge1xyXG4gICAgLy8gYWRkIGEgY3NzIGJsb2NrIGZvciBvdXIgc2V0dGluZ3MtZGVwZW5kZW50IHN0eWxlc1xyXG4gICAgY29uc3QgY3NzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgIGNzcy5pZCA9ICdtaW5pbWFsLXRoZW1lJztcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmRDaGlsZChjc3MpO1xyXG5cclxuICAgIC8vIGFkZCB0aGUgbWFpbiBjbGFzc1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdtaW5pbWFsLXRoZW1lJyk7XHJcblxyXG4gICAgLy8gdXBkYXRlIHRoZSBzdHlsZSB3aXRoIHRoZSBzZXR0aW5ncy1kZXBlbmRlbnQgc3R5bGVzXHJcbiAgICB0aGlzLnVwZGF0ZVN0eWxlKCk7XHJcbiAgfVxyXG4gIHVubG9hZFJ1bGVzKCkge1xyXG4gICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbmltYWwtdGhlbWUnKTtcclxuICAgIGlmIChzdHlsZUVsZW1lbnQpIHtcclxuICAgICAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbWluaW1hbC10aGVtZScpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9udFNpemUoKSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ2Jhc2VGb250U2l6ZScsIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC51cGRhdGVGb250U2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlIHRoZSBzdHlsZXMgKGF0IHRoZSBzdGFydCwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIHNldHRpbmdzIGNoYW5nZSlcclxuICB1cGRhdGVTdHlsZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlU3R5bGUoKTtcclxuICAgIHRoaXMucmVtb3ZlU2V0dGluZ3MoKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlLFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWVcclxuICAgICk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdib3JkZXJzLW5vbmUnLCAhdGhpcy5zZXR0aW5ncy5ib3JkZXJzVG9nZ2xlKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnY29sb3JmdWwtaGVhZGluZ3MnLCB0aGlzLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdjb2xvcmZ1bC1mcmFtZScsIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxGcmFtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2NvbG9yZnVsLWFjdGl2ZScsIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWZvY3VzLW1vZGUnLCB0aGlzLnNldHRpbmdzLmZvY3VzTW9kZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2xpbmtzLWludC1vbicsIHRoaXMuc2V0dGluZ3MudW5kZXJsaW5lSW50ZXJuYWwpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdsaW5rcy1leHQtb24nLCB0aGlzLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnZnVsbC13aWR0aC1tZWRpYScsIHRoaXMuc2V0dGluZ3MuZnVsbFdpZHRoTWVkaWEpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdpbWctZ3JpZCcsIHRoaXMuc2V0dGluZ3MuaW1nR3JpZCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtZGV2LWJsb2NrLXdpZHRoJywgdGhpcy5zZXR0aW5ncy5kZXZCbG9ja1dpZHRoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1zdGF0dXMtb2ZmJywgIXRoaXMuc2V0dGluZ3MubWluaW1hbFN0YXR1cyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Z1bGwtZmlsZS1uYW1lcycsICF0aGlzLnNldHRpbmdzLnRyaW1OYW1lcyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2xhYmVsZWQtbmF2JywgdGhpcy5zZXR0aW5ncy5sYWJlbGVkTmF2KTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1mb2xkaW5nJywgdGhpcy5zZXR0aW5ncy5mb2xkaW5nKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICB0aGlzLnNldHRpbmdzLmNoYXJ0V2lkdGgsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MudGFibGVXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pbWdXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5pZnJhbWVXaWR0aCxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5tYXBXaWR0aFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBnZXQgdGhlIGN1c3RvbSBjc3MgZWxlbWVudFxyXG4gICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWluaW1hbC10aGVtZScpO1xyXG4gICAgaWYgKCFlbCkgdGhyb3cgXCJtaW5pbWFsLXRoZW1lIGVsZW1lbnQgbm90IGZvdW5kIVwiO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIHNldCB0aGUgc2V0dGluZ3MtZGVwZW5kZW50IGNzc1xyXG4gICAgICBlbC5pbm5lclRleHQgPSBcclxuICAgICAgICAnYm9keS5taW5pbWFsLXRoZW1leydcclxuICAgICAgICArICctLWZvbnQtdWktc21hbGw6JyArIHRoaXMuc2V0dGluZ3MudGV4dFNtYWxsICsgJ3B4OydcclxuICAgICAgICArICctLWxpbmUtaGVpZ2h0OicgKyB0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQgKyAnOydcclxuICAgICAgICArICctLWxpbmUtd2lkdGg6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoICsgJ3JlbTsnXHJcbiAgICAgICAgKyAnLS1saW5lLXdpZHRoLXdpZGU6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoV2lkZSArICdyZW07J1xyXG4gICAgICAgICsgJy0tbWF4LXdpZHRoOicgKyB0aGlzLnNldHRpbmdzLm1heFdpZHRoICsgJyU7J1xyXG4gICAgICAgICsgJy0tZm9udC1lZGl0b3Itb3ZlcnJpZGU6JyArIHRoaXMuc2V0dGluZ3MuZWRpdG9yRm9udCArICc7JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZURhcmtTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICd0aGVtZS1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1kYXJrLXRvbmFsJyxcclxuICAgICAgJ21pbmltYWwtZGFyay1ibGFjaydcclxuICAgICk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKFxyXG4gICAgICAndGhlbWUtZGFyaycsXHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKSAhPT0gJ3N5c3RlbScpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZSgnb2JzaWRpYW4nKTtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ3RoZW1lJywgJ29ic2lkaWFuJyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFwcC53b3Jrc3BhY2UudHJpZ2dlcignY3NzLWNoYW5nZScpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlTGlnaHRTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICd0aGVtZS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1saWdodC10b25hbCcsXHJcbiAgICAgICdtaW5pbWFsLWxpZ2h0LWNvbnRyYXN0JyxcclxuICAgICAgJ21pbmltYWwtbGlnaHQtd2hpdGUnXHJcbiAgICApO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcyhcclxuICAgICAgJ3RoZW1lLWxpZ2h0JyxcclxuICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlXHJcbiAgICApO1xyXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKSAhPT0gJ3N5c3RlbScpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZSgnbW9vbnN0b25lJyk7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgdGhpcy5hcHAudmF1bHQuc2V0Q29uZmlnKCd0aGVtZScsICdtb29uc3RvbmUnKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXJrU2NoZW1lKCkge1xyXG4gICAgdGhpcy5yZW1vdmVEYXJrU2NoZW1lKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMaWdodFNjaGVtZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlTGlnaHRTY2hlbWUoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUaGVtZSgpIHtcclxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3RoZW1lJykgPT09ICdzeXN0ZW0nKSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aGVtZS1saWdodCcpKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcygndGhlbWUtZGFyaycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmNvbnRhaW5zKCd0aGVtZS1saWdodCcpKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcygndGhlbWUtZGFyaycpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKCd0aGVtZS1kYXJrJyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKCd0aGVtZS1saWdodCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygndGhlbWUnKTtcclxuICAgICAgY29uc3QgbmV3VGhlbWUgPSBjdXJyZW50VGhlbWUgPT09ICdtb29uc3RvbmUnID8gJ29ic2lkaWFuJyA6ICdtb29uc3RvbmUnO1xyXG5cclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICB0aGlzLmFwcC5zZXRUaGVtZShuZXdUaGVtZSk7XHJcbiAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgdGhpcy5hcHAudmF1bHQuc2V0Q29uZmlnKCd0aGVtZScsIG5ld1RoZW1lKTtcclxuICAgIH1cclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZXR0aW5ncygpIHtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAnYm9yZGVycy1ub25lJyxcclxuICAgICAgJ2NvbG9yZnVsLWhlYWRpbmdzJyxcclxuICAgICAgJ2NvbG9yZnVsLWZyYW1lJyxcclxuICAgICAgJ2NvbG9yZnVsLWFjdGl2ZScsXHJcbiAgICAgICdtaW5pbWFsLWZvY3VzLW1vZGUnLFxyXG4gICAgICAnbGlua3MtaW50LW9uJyxcclxuICAgICAgJ2xpbmtzLWV4dC1vbicsXHJcbiAgICAgICdmdWxsLXdpZHRoLW1lZGlhJyxcclxuICAgICAgJ2ltZy1ncmlkJyxcclxuICAgICAgJ21pbmltYWwtZGV2LWJsb2NrLXdpZHRoJyxcclxuICAgICAgJ21pbmltYWwtc3RhdHVzLW9mZicsXHJcbiAgICAgICdmdWxsLWZpbGUtbmFtZXMnLFxyXG4gICAgICAnbGFiZWxlZC1uYXYnLFxyXG4gICAgICAnbWluaW1hbC1mb2xkaW5nJ1xyXG4gICAgKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAndGFibGUtd2lkZScsXHJcbiAgICAgICd0YWJsZS1tYXgnLFxyXG4gICAgICAndGFibGUtMTAwJyxcclxuICAgICAgJ3RhYmxlLWRlZmF1bHQtd2lkdGgnLFxyXG4gICAgICAnaWZyYW1lLXdpZGUnLFxyXG4gICAgICAnaWZyYW1lLW1heCcsXHJcbiAgICAgICdpZnJhbWUtMTAwJyxcclxuICAgICAgJ2lmcmFtZS1kZWZhdWx0LXdpZHRoJyxcclxuICAgICAgJ2ltZy13aWRlJyxcclxuICAgICAgJ2ltZy1tYXgnLFxyXG4gICAgICAnaW1nLTEwMCcsXHJcbiAgICAgICdpbWctZGVmYXVsdC13aWR0aCcsXHJcbiAgICAgICdjaGFydC13aWRlJyxcclxuICAgICAgJ2NoYXJ0LW1heCcsXHJcbiAgICAgICdjaGFydC0xMDAnLFxyXG4gICAgICAnY2hhcnQtZGVmYXVsdC13aWR0aCcsXHJcbiAgICAgICdtYXAtd2lkZScsXHJcbiAgICAgICdtYXAtbWF4JyxcclxuICAgICAgJ21hcC0xMDAnLFxyXG4gICAgICAnbWFwLWRlZmF1bHQtd2lkdGgnXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ21pbmltYWwtbGlnaHQnLCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnbWluaW1hbC1saWdodC1jb250cmFzdCcsJ21pbmltYWwtbGlnaHQtd2hpdGUnLCdtaW5pbWFsLWRhcmsnLCdtaW5pbWFsLWRhcmstdG9uYWwnLCdtaW5pbWFsLWRhcmstYmxhY2snKTtcclxuICB9XHJcbiAgcmVtb3ZlRGFya1NjaGVtZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoXHJcbiAgICAgICdtaW5pbWFsLWF0b20tZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLWF5dS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtY2F0cHB1Y2Npbi1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZGVmYXVsdC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZHJhY3VsYS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZWluay1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZXZlcmZvcmVzdC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZmxleG9raS1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZ3J1dmJveC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbWFjb3MtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLW5vcmQtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLW5vdGlvbi1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtcm9zZS1waW5lLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1zb2xhcml6ZWQtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLXRoaW5ncy1kYXJrJ1xyXG4gICAgKTtcclxuICB9XHJcbiAgcmVtb3ZlTGlnaHRTY2hlbWUoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAnbWluaW1hbC1hdG9tLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtYXl1LWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtY2F0cHB1Y2Npbi1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWRlZmF1bHQtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1laW5rLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWZsZXhva2ktbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1ncnV2Ym94LWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtbWFjb3MtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1ub3JkLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtbm90aW9uLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtc29sYXJpemVkLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtdGhpbmdzLWxpZ2h0J1xyXG4gICAgKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5pbnRlcmZhY2UgTWluaW1hbFNldHRpbmdzIHtcclxuICBsaWdodFN0eWxlOiBzdHJpbmc7XHJcbiAgZGFya1N0eWxlOiBzdHJpbmc7XHJcbiAgbGlnaHRTY2hlbWU6IHN0cmluZztcclxuICBkYXJrU2NoZW1lOiBzdHJpbmc7XHJcbiAgZWRpdG9yRm9udDogc3RyaW5nO1xyXG4gIGNvbG9yZnVsSGVhZGluZ3M6IGJvb2xlYW47XHJcbiAgY29sb3JmdWxGcmFtZTogYm9vbGVhbjtcclxuICBjb2xvcmZ1bEFjdGl2ZVN0YXRlczogYm9vbGVhbixcclxuICB0cmltTmFtZXM6IGJvb2xlYW47XHJcbiAgbGFiZWxlZE5hdjogYm9vbGVhbjtcclxuICBib3JkZXJzVG9nZ2xlOiBib29sZWFuO1xyXG4gIGZvY3VzTW9kZTogYm9vbGVhbjtcclxuICBsaW5lSGVpZ2h0OiBudW1iZXI7XHJcbiAgbGluZVdpZHRoOiBudW1iZXI7XHJcbiAgbGluZVdpZHRoV2lkZTogbnVtYmVyO1xyXG4gIG1heFdpZHRoOiBudW1iZXI7XHJcbiAgaW1nR3JpZDogYm9vbGVhbjtcclxuICBkZXZCbG9ja1dpZHRoOiBib29sZWFuO1xyXG4gIHRhYmxlV2lkdGg6IHN0cmluZztcclxuICBpZnJhbWVXaWR0aDogc3RyaW5nO1xyXG4gIGltZ1dpZHRoOiBzdHJpbmc7XHJcbiAgY2hhcnRXaWR0aDogc3RyaW5nO1xyXG4gIG1hcFdpZHRoOiBzdHJpbmc7XHJcbiAgZnVsbFdpZHRoTWVkaWE6IGJvb2xlYW4sXHJcbiAgbWluaW1hbFN0YXR1czogYm9vbGVhbixcclxuICB0ZXh0Tm9ybWFsOiBudW1iZXI7XHJcbiAgdGV4dFNtYWxsOiBudW1iZXI7XHJcbiAgdW5kZXJsaW5lSW50ZXJuYWw6IGJvb2xlYW47XHJcbiAgdW5kZXJsaW5lRXh0ZXJuYWw6IGJvb2xlYW47XHJcbiAgZm9sZGluZzogYm9vbGVhbjtcclxuICBsaW5lTnVtYmVyczogYm9vbGVhbjtcclxuICByZWFkYWJsZUxpbmVMZW5ndGg6IGJvb2xlYW47XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE1pbmltYWxTZXR0aW5ncyA9IHtcclxuICBsaWdodFN0eWxlOiAnbWluaW1hbC1saWdodCcsXHJcbiAgZGFya1N0eWxlOiAnbWluaW1hbC1kYXJrJyxcclxuICBsaWdodFNjaGVtZTogJ21pbmltYWwtZGVmYXVsdC1saWdodCcsXHJcbiAgZGFya1NjaGVtZTogJ21pbmltYWwtZGVmYXVsdC1kYXJrJyxcclxuICBlZGl0b3JGb250OiAnJyxcclxuICBsaW5lSGVpZ2h0OiAxLjUsXHJcbiAgbGluZVdpZHRoOiA0MCxcclxuICBsaW5lV2lkdGhXaWRlOiA1MCxcclxuICBtYXhXaWR0aDogODgsXHJcbiAgdGV4dE5vcm1hbDogMTYsXHJcbiAgdGV4dFNtYWxsOiAxMyxcclxuICBpbWdHcmlkOiBmYWxzZSxcclxuICBpbWdXaWR0aDogJ2ltZy1kZWZhdWx0LXdpZHRoJyxcclxuICB0YWJsZVdpZHRoOiAndGFibGUtZGVmYXVsdC13aWR0aCcsXHJcbiAgaWZyYW1lV2lkdGg6ICdpZnJhbWUtZGVmYXVsdC13aWR0aCcsXHJcbiAgbWFwV2lkdGg6ICdtYXAtZGVmYXVsdC13aWR0aCcsXHJcbiAgY2hhcnRXaWR0aDogJ2NoYXJ0LWRlZmF1bHQtd2lkdGgnLFxyXG4gIGNvbG9yZnVsSGVhZGluZ3M6IGZhbHNlLFxyXG4gIGNvbG9yZnVsRnJhbWU6IGZhbHNlLFxyXG4gIGNvbG9yZnVsQWN0aXZlU3RhdGVzOiBmYWxzZSxcclxuICB0cmltTmFtZXM6IHRydWUsXHJcbiAgbGFiZWxlZE5hdjogZmFsc2UsXHJcbiAgZnVsbFdpZHRoTWVkaWE6IHRydWUsXHJcbiAgYm9yZGVyc1RvZ2dsZTogdHJ1ZSxcclxuICBtaW5pbWFsU3RhdHVzOiB0cnVlLFxyXG4gIGZvY3VzTW9kZTogZmFsc2UsXHJcbiAgdW5kZXJsaW5lSW50ZXJuYWw6IHRydWUsXHJcbiAgdW5kZXJsaW5lRXh0ZXJuYWw6IHRydWUsXHJcbiAgZm9sZGluZzogdHJ1ZSxcclxuICBsaW5lTnVtYmVyczogZmFsc2UsXHJcbiAgcmVhZGFibGVMaW5lTGVuZ3RoOiBmYWxzZSxcclxuICBkZXZCbG9ja1dpZHRoOiBmYWxzZSxcclxufVxyXG5cclxuY2xhc3MgTWluaW1hbFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcblxyXG4gIHBsdWdpbjogTWluaW1hbFRoZW1lO1xyXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE1pbmltYWxUaGVtZSkge1xyXG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgbGV0IHtjb250YWluZXJFbH0gPSB0aGlzO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcblxyXG4gICAgY29uc3QgY29sb3JTZWN0aW9uID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgY29uc3QgY29sb3JTZWN0aW9uSW5mbyA9ICBjb2xvclNlY3Rpb24uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0taW5mbyd9KTtcclxuXHJcbiAgICBjb2xvclNlY3Rpb25JbmZvLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ0NvbG9yIHNjaGVtZScsIGNsczogJ3NldHRpbmctaXRlbS1uYW1lJ30pO1xyXG5cclxuICAgIGNvbnN0IGNvbG9yRGVzYyA9IGNvbG9yU2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb24nfSk7XHJcblxyXG4gICAgICBjb2xvckRlc2MuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ3NwYW4nLCB7XHJcbiAgICAgICAgICB0ZXh0OiAnVG8gY3JlYXRlIGEgY3VzdG9tIGNvbG9yIHNjaGVtZSB1c2UgdGhlICdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgY29sb3JEZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJTdHlsZSBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgaHJlZjogXCJvYnNpZGlhbjovL3Nob3ctcGx1Z2luP2lkPW9ic2lkaWFuLXN0eWxlLXNldHRpbmdzXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgY29sb3JEZXNjLmFwcGVuZFRleHQoJyBwbHVnaW4uIFNlZSAnKTtcclxuXHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiZG9jdW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL21pbmltYWwuZ3VpZGUvZmVhdHVyZXMvY29sb3Itc2NoZW1lc1wiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRUZXh0KCcgZm9yIGRldGFpbHMuJyk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnTGlnaHQgbW9kZSBjb2xvciBzY2hlbWUnKVxyXG4gICAgICAgIC5zZXREZXNjKCdQcmVzZXQgY29sb3Igb3B0aW9ucyBmb3IgbGlnaHQgbW9kZS4nKVxyXG4gICAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1kZWZhdWx0LWxpZ2h0JywnRGVmYXVsdCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWF0b20tbGlnaHQnLCdBdG9tJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtYXl1LWxpZ2h0JywnQXl1JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtY2F0cHB1Y2Npbi1saWdodCcsJ0NhdHBwdWNjaW4nKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1laW5rLWxpZ2h0JywnRS1pbmsgKGJldGEpJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsJ0V2ZXJmb3Jlc3QnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1mbGV4b2tpLWxpZ2h0JywnRmxleG9raScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWdydXZib3gtbGlnaHQnLCdHcnV2Ym94JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbWFjb3MtbGlnaHQnLCdtYWNPUycpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vcmQtbGlnaHQnLCdOb3JkJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtcm9zZS1waW5lLWxpZ2h0JywnUm9zXHUwMEU5IFBpbmUnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1ub3Rpb24tbGlnaHQnLCdTa3knKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1zb2xhcml6ZWQtbGlnaHQnLCdTb2xhcml6ZWQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC10aGluZ3MtbGlnaHQnLCdUaGluZ3MnKVxyXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U2NoZW1lKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gdmFsdWU7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdMaWdodCBtb2RlIGJhY2tncm91bmQgY29udHJhc3QnKVxyXG4gICAgICAgIC5zZXREZXNjKCdMZXZlbCBvZiBjb250cmFzdCBiZXR3ZWVuIHNpZGViYXIgYW5kIG1haW4gY29udGVudC4nKVxyXG4gICAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodC13aGl0ZScsJ0FsbCB3aGl0ZScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbGlnaHQtY29udHJhc3QnLCdIaWdoIGNvbnRyYXN0JylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saWdodFN0eWxlKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnRGFyayBtb2RlIGNvbG9yIHNjaGVtZScpXHJcbiAgICAgICAgLnNldERlc2MoJ1ByZXNldCBjb2xvcnMgb3B0aW9ucyBmb3IgZGFyayBtb2RlLicpXHJcbiAgICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWRlZmF1bHQtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1hdG9tLWRhcmsnLCdBdG9tJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtYXl1LWRhcmsnLCdBeXUnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1jYXRwcHVjY2luLWRhcmsnLCdDYXRwcHVjY2luJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZHJhY3VsYS1kYXJrJywnRHJhY3VsYScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWVpbmstZGFyaycsJ0UtaW5rIChiZXRhKScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWV2ZXJmb3Jlc3QtZGFyaycsJ0V2ZXJmb3Jlc3QnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1mbGV4b2tpLWRhcmsnLCdGbGV4b2tpJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZ3J1dmJveC1kYXJrJywnR3J1dmJveCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW1hY29zLWRhcmsnLCdtYWNPUycpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vcmQtZGFyaycsJ05vcmQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1yb3NlLXBpbmUtZGFyaycsJ1Jvc1x1MDBFOSBQaW5lJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbm90aW9uLWRhcmsnLCdTa3knKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1zb2xhcml6ZWQtZGFyaycsJ1NvbGFyaXplZCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLXRoaW5ncy1kYXJrJywnVGhpbmdzJylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXJrU2NoZW1lKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kYXJrU2NoZW1lID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4udXBkYXRlRGFya1NjaGVtZSgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgLnNldE5hbWUoJ0RhcmsgbW9kZSBiYWNrZ3JvdW5kIGNvbnRyYXN0JylcclxuICAgICAgICAuc2V0RGVzYygnTGV2ZWwgb2YgY29udHJhc3QgYmV0d2VlbiBzaWRlYmFyIGFuZCBtYWluIGNvbnRlbnQuJylcclxuICAgICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1kYXJrLXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyay1ibGFjaycsJ1RydWUgYmxhY2snKVxyXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRhcmtTdHlsZSlcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGFya1N0eWxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4udXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2JyJyk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uSW5mbyA9ICBmZWF0dXJlc1NlY3Rpb24uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0taW5mbyd9KTtcclxuXHJcbiAgICBmZWF0dXJlc1NlY3Rpb25JbmZvLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ0ZlYXR1cmVzJywgY2xzOiAnc2V0dGluZy1pdGVtLW5hbWUnfSk7XHJcblxyXG4gICAgY29uc3QgZmVhdHVyZXNTZWN0aW9uRGVzYyA9IGZlYXR1cmVzU2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHtjbHM6ICdzZXR0aW5nLWl0ZW0tZGVzY3JpcHRpb24nfSk7XHJcblxyXG4gICAgICBmZWF0dXJlc1NlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdzcGFuJywge1xyXG4gICAgICAgICAgdGV4dDogJ1NlZSAnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICBmZWF0dXJlc1NlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJkb2N1bWVudGF0aW9uXCIsXHJcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vbWluaW1hbC5ndWlkZVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGZlYXR1cmVzU2VjdGlvbkRlc2MuYXBwZW5kVGV4dCgnIGZvciBkZXRhaWxzLicpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVGV4dCBsYWJlbHMgZm9yIHByaW1hcnkgbmF2aWdhdGlvbicpXHJcbiAgICAgIC5zZXREZXNjKCdOYXZpZ2F0aW9uIGl0ZW1zIGluIHRoZSBsZWZ0IHNpZGViYXIgdXNlcyB0ZXh0IGxhYmVscy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubGFiZWxlZE5hdilcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGFiZWxlZE5hdiA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NvbG9yZnVsIHdpbmRvdyBmcmFtZScpXHJcbiAgICAgIC5zZXREZXNjKCdUaGUgdG9wIGFyZWEgb2YgdGhlIGFwcCB1c2VzIHlvdXIgYWNjZW50IGNvbG9yLicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEZyYW1lID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NvbG9yZnVsIGFjdGl2ZSBzdGF0ZXMnKVxyXG4gICAgICAuc2V0RGVzYygnQWN0aXZlIGZpbGUgYW5kIG1lbnUgaXRlbXMgdXNlIHlvdXIgYWNjZW50IGNvbG9yLicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jb2xvcmZ1bEFjdGl2ZVN0YXRlcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnQ29sb3JmdWwgaGVhZGluZ3MnKVxyXG4gICAgICAuc2V0RGVzYygnSGVhZGluZ3MgdXNlIGEgZGlmZmVyZW50IGNvbG9yIGZvciBlYWNoIHNpemUuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWluaW1hbCBzdGF0dXMgYmFyJylcclxuICAgICAgLnNldERlc2MoJ1R1cm4gb2ZmIHRvIHVzZSBmdWxsLXdpZHRoIHN0YXR1cyBiYXIuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1pbmltYWxTdGF0dXMpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm1pbmltYWxTdGF0dXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUcmltIGZpbGUgbmFtZXMgaW4gc2lkZWJhcnMnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlIGVsbGlwc2VzIHRvIGZpdCBmaWxlIG5hbWVzIG9uIGEgc2luZ2xlIGxpbmUuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRyaW1OYW1lcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudHJpbU5hbWVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgLnNldE5hbWUoJ1dvcmtzcGFjZSBib3JkZXJzJylcclxuICAgICAgICAuc2V0RGVzYygnRGlzcGxheSBkaXZpZGVyIGxpbmVzIGJldHdlZW4gd29ya3NwYWNlIGVsZW1lbnRzLicpXHJcbiAgICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmJvcmRlcnNUb2dnbGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdGb2N1cyBtb2RlJylcclxuICAgICAgLnNldERlc2MoJ0hpZGUgdGFiIGJhciBhbmQgc3RhdHVzIGJhciwgaG92ZXIgdG8gZGlzcGxheS4gQ2FuIGJlIHRvZ2dsZWQgdmlhIGhvdGtleS4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9jdXNNb2RlKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2N1c01vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVW5kZXJsaW5lIGludGVybmFsIGxpbmtzJylcclxuICAgICAgLnNldERlc2MoJ1Nob3cgdW5kZXJsaW5lcyBvbiBpbnRlcm5hbCBsaW5rcy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudW5kZXJsaW5lSW50ZXJuYWwpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUludGVybmFsID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ1VuZGVybGluZSBleHRlcm5hbCBsaW5rcycpXHJcbiAgICAgIC5zZXREZXNjKCdTaG93IHVuZGVybGluZXMgb24gZXh0ZXJuYWwgbGlua3MuJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bmRlcmxpbmVFeHRlcm5hbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdNYXhpbWl6ZSBtZWRpYScpXHJcbiAgICAgIC5zZXREZXNjKCdJbWFnZXMgYW5kIHZpZGVvcyBmaWxsIHRoZSB3aWR0aCBvZiB0aGUgbGluZS4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZnVsbFdpZHRoTWVkaWEpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZ1bGxXaWR0aE1lZGlhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdicicpO1xyXG5cclxuICAgIGNvbnN0IGxheW91dFNlY3Rpb24gPSBjb250YWluZXJFbC5jcmVhdGVFbCgnZGl2Jywge2NsczogJ3NldHRpbmctaXRlbSBzZXR0aW5nLWl0ZW0taGVhZGluZyd9KTtcclxuXHJcbiAgICBjb25zdCBsYXlvdXRTZWN0aW9uSW5mbyA9ICBsYXlvdXRTZWN0aW9uLmNyZWF0ZUVsKCdkaXYnLCB7Y2xzOiAnc2V0dGluZy1pdGVtLWluZm8nfSk7XHJcblxyXG4gICAgbGF5b3V0U2VjdGlvbkluZm8uY3JlYXRlRWwoJ2RpdicsIHt0ZXh0OiAnTGF5b3V0JywgY2xzOiAnc2V0dGluZy1pdGVtLW5hbWUnfSk7XHJcblxyXG4gICAgY29uc3QgbGF5b3V0U2VjdGlvbkRlc2MgPSBsYXlvdXRTZWN0aW9uSW5mby5jcmVhdGVFbCgnZGl2Jywge2NsczogJ3NldHRpbmctaXRlbS1kZXNjcmlwdGlvbid9KTtcclxuXHJcbiAgICAgIGxheW91dFNlY3Rpb25EZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdzcGFuJywge1xyXG4gICAgICAgICAgdGV4dDogJ1RoZXNlIG9wdGlvbnMgY2FuIGFsc28gYmUgZGVmaW5lZCBvbiBhIHBlci1maWxlIGJhc2lzLCBzZWUgJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICBsYXlvdXRTZWN0aW9uRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiZG9jdW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL21pbmltYWwuZ3VpZGUvZmVhdHVyZXMvYmxvY2std2lkdGhcIixcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBsYXlvdXRTZWN0aW9uRGVzYy5hcHBlbmRUZXh0KCcgZm9yIGRldGFpbHMuJyk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdJbWFnZSBncmlkcycpXHJcbiAgICAgIC5zZXREZXNjKCdUdXJuIGNvbnNlY3V0aXZlIGltYWdlcyBpbnRvIGNvbHVtbnMgXHUyMDE0IHRvIG1ha2UgYSBuZXcgcm93LCBhZGQgYW4gZXh0cmEgbGluZSBicmVhayBiZXR3ZWVuIGltYWdlcy4nKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nR3JpZClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nR3JpZCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NoYXJ0IHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGNoYXJ0IGJsb2Nrcy4nKVxyXG4gICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAuYWRkT3B0aW9uKCdjaGFydC1kZWZhdWx0LXdpZHRoJywnRGVmYXVsdCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtbWF4JywnTWF4aW11bSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdjaGFydC0xMDAnLCcxMDAlIHBhbmUgd2lkdGgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jaGFydFdpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnSWZyYW1lIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGlmcmFtZSBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLWRlZmF1bHQtd2lkdGgnLCdEZWZhdWx0JylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpZnJhbWUtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLTEwMCcsJzEwMCUgcGFuZSB3aWR0aCcpXHJcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlmcmFtZVdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pZnJhbWVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0ltYWdlIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGltYWdlIGJsb2Nrcy4nKVxyXG4gICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2ltZy13aWRlJywnV2lkZSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctbWF4JywnTWF4aW11bSBsaW5lIHdpZHRoJylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpbWctMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nV2lkdGgpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmltZ1dpZHRoID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWFwIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIG1hcCBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLWRlZmF1bHQtd2lkdGgnLCdEZWZhdWx0JylcclxuICAgICAgICAuYWRkT3B0aW9uKCdtYXAtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLTEwMCcsJzEwMCUgcGFuZSB3aWR0aCcpXHJcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLm1hcFdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5tYXBXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ1RhYmxlIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIHRhYmxlIGFuZCBEYXRhdmlldyBibG9ja3MuJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnYnInKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdkaXYnLCB7dGV4dDogJ1R5cG9ncmFwaHknLCBjbHM6ICdzZXR0aW5nLWl0ZW0gc2V0dGluZy1pdGVtLWhlYWRpbmcnfSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUZXh0IGZvbnQgc2l6ZScpXHJcbiAgICAgIC5zZXREZXNjKCdVc2VkIGZvciB0aGUgbWFpbiB0ZXh0IChkZWZhdWx0IDE2KS4nKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzE2JylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLnRleHROb3JtYWwgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGV4dE5vcm1hbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0Rm9udFNpemUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdTbWFsbCBmb250IHNpemUnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlZCBmb3IgdGV4dCBpbiB0aGUgc2lkZWJhcnMgYW5kIHRhYnMgKGRlZmF1bHQgMTMpLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignMTMnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MudGV4dFNtYWxsIHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRleHRTbWFsbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0xpbmUgaGVpZ2h0JylcclxuICAgICAgLnNldERlc2MoJ0xpbmUgaGVpZ2h0IG9mIHRleHQgKGRlZmF1bHQgMS41KS4nKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzEuNScpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lSGVpZ2h0IHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpbmVIZWlnaHQgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdOb3JtYWwgbGluZSB3aWR0aCcpXHJcbiAgICAgIC5zZXREZXNjKCdOdW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSAoZGVmYXVsdCA0MCkuJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCc0MCcpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lV2lkdGggfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoID0gcGFyc2VJbnQodmFsdWUudHJpbSgpKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAuc2V0RGVzYygnTnVtYmVyIG9mIGNoYXJhY3RlcnMgcGVyIGxpbmUgZm9yIHdpZGUgZWxlbWVudHMgKGRlZmF1bHQgNTApLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignNTAnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoV2lkZSB8fCAnJykgKyAnJylcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lV2lkdGhXaWRlID0gcGFyc2VJbnQodmFsdWUudHJpbSgpKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdNYXhpbXVtIGxpbmUgd2lkdGggJScpXHJcbiAgICAgIC5zZXREZXNjKCdQZXJjZW50YWdlIG9mIHNwYWNlIGluc2lkZSBhIHBhbmUgdGhhdCBhIGxpbmUgY2FuIGZpbGwgKGRlZmF1bHQgODgpLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignODgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4V2lkdGggfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4V2lkdGggPSBwYXJzZUludCh2YWx1ZS50cmltKCkpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnRWRpdG9yIGZvbnQnKVxyXG4gICAgICAuc2V0RGVzYygnT3ZlcnJpZGVzIHRoZSB0ZXh0IGZvbnQgZGVmaW5lZCBpbiBPYnNpZGlhbiBBcHBlYXJhbmNlIHNldHRpbmdzIHdoZW4gaW4gZWRpdCBtb2RlLicpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignJylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLmVkaXRvckZvbnQgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZWRpdG9yRm9udCA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgfVxyXG59XHJcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsc0JBQWlGO0FBRWpGLGlDQUEwQyx1QkFBTztBQUFBLEVBSXpDLFNBQVM7QUFBQTtBQUViLFlBQU0sS0FBSztBQUVYLFdBQUssY0FBYyxJQUFJLGtCQUFrQixLQUFLLEtBQUs7QUFFbkQsV0FBSztBQUdMLFVBQUksaUJBQWlCLE1BQU07QUFFekIsY0FBTSxXQUFXLEtBQUssSUFBSSxNQUFNLFVBQVU7QUFDMUMsYUFBSyxTQUFTLGFBQWE7QUFHM0IsWUFBSSxLQUFLLElBQUksTUFBTSxVQUFVLGdCQUFnQjtBQUMzQyxlQUFLLFNBQVMsVUFBVTtBQUN4QixlQUFLLFNBQVMsS0FBSztBQUNuQixrQkFBUSxJQUFJO0FBQUEsZUFDUDtBQUNMLGVBQUssU0FBUyxVQUFVO0FBQ3hCLGVBQUssU0FBUyxLQUFLO0FBQ25CLGtCQUFRLElBQUk7QUFBQTtBQUVkLGlCQUFTLEtBQUssVUFBVSxPQUFPLG1CQUFtQixLQUFLLFNBQVM7QUFFaEUsWUFBSSxLQUFLLElBQUksTUFBTSxV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 +var x=Object.create;var u=Object.defineProperty;var L=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var T=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var v=n=>u(n,"__esModule",{value:!0});var O=(n,t)=>{v(n);for(var s in t)u(n,s,{get:t[s],enumerable:!0})},E=(n,t,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of W(t))!N.call(n,l)&&l!=="default"&&u(n,l,{get:()=>t[l],enumerable:!(s=L(t,l))||s.enumerable});return n},y=n=>E(v(u(n!=null?x(T(n)):{},"default",n&&n.__esModule&&"default"in n?{get:()=>n.default,enumerable:!0}:{value:n,enumerable:!0})),n);var p=(n,t,s)=>new Promise((l,d)=>{var f=h=>{try{m(s.next(h))}catch(o){d(o)}},g=h=>{try{m(s.throw(h))}catch(o){d(o)}},m=h=>h.done?l(h.value):Promise.resolve(h.value).then(f,g);m((s=s.apply(n,t)).next())});O(exports,{default:()=>S});var C=y(require("obsidian"));var a=y(require("obsidian")),D={lightStyle:"minimal-light",darkStyle:"minimal-dark",lightScheme:"minimal-default-light",darkScheme:"minimal-default-dark",editorFont:"",lineHeight:1.5,lineWidth:40,lineWidthWide:50,maxWidth:88,textNormal:16,textSmall:13,imgGrid:!1,imgWidth:"img-default-width",tableWidth:"table-default-width",iframeWidth:"iframe-default-width",mapWidth:"map-default-width",chartWidth:"chart-default-width",colorfulHeadings:!1,colorfulFrame:!1,colorfulActiveStates:!1,trimNames:!0,labeledNav:!1,fullWidthMedia:!0,bordersToggle:!0,minimalStatus:!0,focusMode:!1,underlineInternal:!0,underlineExternal:!0,folding:!0,lineNumbers:!1,readableLineLength:!1,devBlockWidth:!1},b=class extends a.PluginSettingTab{constructor(t,s){super(t,s);this.plugin=s}display(){let{containerEl:t}=this;t.empty();let l=t.createEl("div",{cls:"setting-item setting-item-heading"}).createEl("div",{cls:"setting-item-info"});l.createEl("div",{text:"Color scheme",cls:"setting-item-name"});let d=l.createEl("div",{cls:"setting-item-description"});d.appendChild(createEl("span",{text:"To create a custom color scheme use the "})),d.appendChild(createEl("a",{text:"Style Settings",href:"obsidian://show-plugin?id=obsidian-style-settings"})),d.appendText(" plugin. See "),d.appendChild(createEl("a",{text:"documentation",href:"https://minimal.guide/features/color-schemes"})),d.appendText(" for details."),new a.Setting(t).setName("Light mode color scheme").setDesc("Preset color options for light mode.").addDropdown(i=>i.addOption("minimal-default-light","Default").addOption("minimal-atom-light","Atom").addOption("minimal-ayu-light","Ayu").addOption("minimal-catppuccin-light","Catppuccin").addOption("minimal-eink-light","E-ink (beta)").addOption("minimal-everforest-light","Everforest").addOption("minimal-flexoki-light","Flexoki").addOption("minimal-gruvbox-light","Gruvbox").addOption("minimal-macos-light","macOS").addOption("minimal-nord-light","Nord").addOption("minimal-rose-pine-light","Ros\xE9 Pine").addOption("minimal-notion-light","Sky").addOption("minimal-solarized-light","Solarized").addOption("minimal-things-light","Things").setValue(this.plugin.settings.lightScheme).onChange(e=>{this.plugin.settings.lightScheme=e,this.plugin.saveData(this.plugin.settings),this.plugin.updateLightScheme()})),new a.Setting(t).setName("Light mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown(i=>i.addOption("minimal-light","Default").addOption("minimal-light-white","All white").addOption("minimal-light-tonal","Low contrast").addOption("minimal-light-contrast","High contrast").setValue(this.plugin.settings.lightStyle).onChange(e=>{this.plugin.settings.lightStyle=e,this.plugin.saveData(this.plugin.settings),this.plugin.updateLightStyle()})),new a.Setting(t).setName("Dark mode color scheme").setDesc("Preset colors options for dark mode.").addDropdown(i=>i.addOption("minimal-default-dark","Default").addOption("minimal-atom-dark","Atom").addOption("minimal-ayu-dark","Ayu").addOption("minimal-catppuccin-dark","Catppuccin").addOption("minimal-dracula-dark","Dracula").addOption("minimal-eink-dark","E-ink (beta)").addOption("minimal-everforest-dark","Everforest").addOption("minimal-flexoki-dark","Flexoki").addOption("minimal-gruvbox-dark","Gruvbox").addOption("minimal-macos-dark","macOS").addOption("minimal-nord-dark","Nord").addOption("minimal-rose-pine-dark","Ros\xE9 Pine").addOption("minimal-notion-dark","Sky").addOption("minimal-solarized-dark","Solarized").addOption("minimal-things-dark","Things").setValue(this.plugin.settings.darkScheme).onChange(e=>{this.plugin.settings.darkScheme=e,this.plugin.saveData(this.plugin.settings),this.plugin.updateDarkScheme()})),new a.Setting(t).setName("Dark mode background contrast").setDesc("Level of contrast between sidebar and main content.").addDropdown(i=>i.addOption("minimal-dark","Default").addOption("minimal-dark-tonal","Low contrast").addOption("minimal-dark-black","True black").setValue(this.plugin.settings.darkStyle).onChange(e=>{this.plugin.settings.darkStyle=e,this.plugin.saveData(this.plugin.settings),this.plugin.updateDarkStyle()})),t.createEl("br");let g=t.createEl("div",{cls:"setting-item setting-item-heading"}).createEl("div",{cls:"setting-item-info"});g.createEl("div",{text:"Features",cls:"setting-item-name"});let m=g.createEl("div",{cls:"setting-item-description"});m.appendChild(createEl("span",{text:"See "})),m.appendChild(createEl("a",{text:"documentation",href:"https://minimal.guide"})),m.appendText(" for details."),new a.Setting(t).setName("Text labels for primary navigation").setDesc("Navigation items in the left sidebar uses text labels.").addToggle(i=>i.setValue(this.plugin.settings.labeledNav).onChange(e=>{this.plugin.settings.labeledNav=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Colorful window frame").setDesc("The top area of the app uses your accent color.").addToggle(i=>i.setValue(this.plugin.settings.colorfulFrame).onChange(e=>{this.plugin.settings.colorfulFrame=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Colorful active states").setDesc("Active file and menu items use your accent color.").addToggle(i=>i.setValue(this.plugin.settings.colorfulActiveStates).onChange(e=>{this.plugin.settings.colorfulActiveStates=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Colorful headings").setDesc("Headings use a different color for each size.").addToggle(i=>i.setValue(this.plugin.settings.colorfulHeadings).onChange(e=>{this.plugin.settings.colorfulHeadings=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Minimal status bar").setDesc("Turn off to use full-width status bar.").addToggle(i=>i.setValue(this.plugin.settings.minimalStatus).onChange(e=>{this.plugin.settings.minimalStatus=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Trim file names in sidebars").setDesc("Use ellipses to fit file names on a single line.").addToggle(i=>i.setValue(this.plugin.settings.trimNames).onChange(e=>{this.plugin.settings.trimNames=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Workspace borders").setDesc("Display divider lines between workspace elements.").addToggle(i=>i.setValue(this.plugin.settings.bordersToggle).onChange(e=>{this.plugin.settings.bordersToggle=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Focus mode").setDesc("Hide tab bar and status bar, hover to display. Can be toggled via hotkey.").addToggle(i=>i.setValue(this.plugin.settings.focusMode).onChange(e=>{this.plugin.settings.focusMode=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Underline internal links").setDesc("Show underlines on internal links.").addToggle(i=>i.setValue(this.plugin.settings.underlineInternal).onChange(e=>{this.plugin.settings.underlineInternal=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Underline external links").setDesc("Show underlines on external links.").addToggle(i=>i.setValue(this.plugin.settings.underlineExternal).onChange(e=>{this.plugin.settings.underlineExternal=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Maximize media").setDesc("Images and videos fill the width of the line.").addToggle(i=>i.setValue(this.plugin.settings.fullWidthMedia).onChange(e=>{this.plugin.settings.fullWidthMedia=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),t.createEl("br");let o=t.createEl("div",{cls:"setting-item setting-item-heading"}).createEl("div",{cls:"setting-item-info"});o.createEl("div",{text:"Layout",cls:"setting-item-name"});let r=o.createEl("div",{cls:"setting-item-description"});r.appendChild(createEl("span",{text:"These options can also be defined on a per-file basis, see "})),r.appendChild(createEl("a",{text:"documentation",href:"https://minimal.guide/features/block-width"})),r.appendText(" for details."),new a.Setting(t).setName("Image grids").setDesc("Turn consecutive images into columns \u2014 to make a new row, add an extra line break between images.").addToggle(i=>i.setValue(this.plugin.settings.imgGrid).onChange(e=>{this.plugin.settings.imgGrid=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Chart width").setDesc("Default width for chart blocks.").addDropdown(i=>i.addOption("chart-default-width","Default").addOption("chart-wide","Wide line width").addOption("chart-max","Maximum line width").addOption("chart-100","100% pane width").setValue(this.plugin.settings.chartWidth).onChange(e=>{this.plugin.settings.chartWidth=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Iframe width").setDesc("Default width for iframe blocks.").addDropdown(i=>i.addOption("iframe-default-width","Default").addOption("iframe-wide","Wide line width").addOption("iframe-max","Maximum line width").addOption("iframe-100","100% pane width").setValue(this.plugin.settings.iframeWidth).onChange(e=>{this.plugin.settings.iframeWidth=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Image width").setDesc("Default width for image blocks.").addDropdown(i=>i.addOption("img-default-width","Default").addOption("img-wide","Wide line width").addOption("img-max","Maximum line width").addOption("img-100","100% pane width").setValue(this.plugin.settings.imgWidth).onChange(e=>{this.plugin.settings.imgWidth=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Map width").setDesc("Default width for map blocks.").addDropdown(i=>i.addOption("map-default-width","Default").addOption("map-wide","Wide line width").addOption("map-max","Maximum line width").addOption("map-100","100% pane width").setValue(this.plugin.settings.mapWidth).onChange(e=>{this.plugin.settings.mapWidth=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Table width").setDesc("Default width for table and Dataview blocks.").addDropdown(i=>i.addOption("table-default-width","Default").addOption("table-wide","Wide line width").addOption("table-max","Maximum line width").addOption("table-100","100% pane width").setValue(this.plugin.settings.tableWidth).onChange(e=>{this.plugin.settings.tableWidth=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),t.createEl("br"),t.createEl("div",{text:"Typography",cls:"setting-item setting-item-heading"}),new a.Setting(t).setName("Text font size").setDesc("Used for the main text (default 16).").addText(i=>i.setPlaceholder("16").setValue((this.plugin.settings.textNormal||"")+"").onChange(e=>{this.plugin.settings.textNormal=parseFloat(e),this.plugin.saveData(this.plugin.settings),this.plugin.setFontSize()})),new a.Setting(t).setName("Small font size").setDesc("Used for text in the sidebars and tabs (default 13).").addText(i=>i.setPlaceholder("13").setValue((this.plugin.settings.textSmall||"")+"").onChange(e=>{this.plugin.settings.textSmall=parseFloat(e),this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Line height").setDesc("Line height of text (default 1.5).").addText(i=>i.setPlaceholder("1.5").setValue((this.plugin.settings.lineHeight||"")+"").onChange(e=>{this.plugin.settings.lineHeight=parseFloat(e),this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Normal line width").setDesc("Number of characters per line (default 40).").addText(i=>i.setPlaceholder("40").setValue((this.plugin.settings.lineWidth||"")+"").onChange(e=>{this.plugin.settings.lineWidth=parseInt(e.trim()),this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Wide line width").setDesc("Number of characters per line for wide elements (default 50).").addText(i=>i.setPlaceholder("50").setValue((this.plugin.settings.lineWidthWide||"")+"").onChange(e=>{this.plugin.settings.lineWidthWide=parseInt(e.trim()),this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Maximum line width %").setDesc("Percentage of space inside a pane that a line can fill (default 88).").addText(i=>i.setPlaceholder("88").setValue((this.plugin.settings.maxWidth||"")+"").onChange(e=>{this.plugin.settings.maxWidth=parseInt(e.trim()),this.plugin.saveData(this.plugin.settings),this.plugin.refresh()})),new a.Setting(t).setName("Editor font").setDesc("Overrides the text font defined in Obsidian Appearance settings when in edit mode.").addText(i=>i.setPlaceholder("").setValue((this.plugin.settings.editorFont||"")+"").onChange(e=>{this.plugin.settings.editorFont=e,this.plugin.saveData(this.plugin.settings),this.plugin.refresh()}))}};var S=class extends C.Plugin{onload(){return p(this,null,function*(){yield this.loadSettings(),this.addSettingTab(new b(this.app,this)),this.loadRules();let t=()=>{let i=this.app.vault.getConfig("baseFontSize");this.settings.textNormal=i;let e=!1,w=!1,k=!1;this.app.vault.getConfig("foldHeading")?(this.settings.folding=!0,console.log("Folding is on"),e=!0):(this.settings.folding=!1,console.log("Folding is off")),this.app.vault.getConfig("showLineNumber")?(this.settings.lineNumbers=!0,console.log("Line numbers are on"),w=!0):(this.settings.lineNumbers=!1,console.log("Line numbers are off")),this.app.vault.getConfig("readableLineLength")?(this.settings.readableLineLength=!0,console.log("Readable line length is on"),k=!0):(this.settings.readableLineLength=!1,console.log("Readable line length is off"));let c=document.body.classList;c.toggle("minimal-folding",e),c.toggle("minimal-line-nums",w),c.toggle("minimal-readable",k),c.toggle("minimal-readable-off",!k),this.saveData(this.settings)},s=()=>{let i=document.getElementsByClassName("mod-left-split")[0],e=document.getElementsByClassName("side-dock-ribbon")[0];i&&e&&document.body.classList.contains("theme-light")&&this.settings.lightStyle=="minimal-light-contrast"?(i.addClass("theme-dark"),e.addClass("theme-dark")):i&&e&&(i.removeClass("theme-dark"),e.removeClass("theme-dark"))};this.registerEvent(app.vault.on("config-changed",t)),this.registerEvent(app.workspace.on("css-change",s)),t(),app.workspace.onLayoutReady(()=>{s()});let l=["minimal-light","minimal-light-tonal","minimal-light-contrast","minimal-light-white"],d=["minimal-dark","minimal-dark-tonal","minimal-dark-black"],f=["img-grid","img-grid-ratio","img-nogrid"],g=["table-100","table-default-width","table-wide","table-max"],m=["iframe-100","iframe-default-width","iframe-wide","iframe-max"],h=["img-100","img-default-width","img-wide","img-max"],o=["map-100","map-default-width","map-wide","map-max"],r=["chart-100","chart-default-width","chart-wide","chart-max"];this.addCommand({id:"increase-body-font-size",name:"Increase body font size",callback:()=>{this.settings.textNormal=this.settings.textNormal+.5,this.saveData(this.settings),this.setFontSize()}}),this.addCommand({id:"decrease-body-font-size",name:"Decrease body font size",callback:()=>{this.settings.textNormal=this.settings.textNormal-.5,this.saveData(this.settings),this.setFontSize()}}),this.addCommand({id:"toggle-minimal-dark-cycle",name:"Cycle between dark mode styles",callback:()=>{this.settings.darkStyle=d[(d.indexOf(this.settings.darkStyle)+1)%d.length],this.saveData(this.settings),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-light-cycle",name:"Cycle between light mode styles",callback:()=>{this.settings.lightStyle=l[(l.indexOf(this.settings.lightStyle)+1)%l.length],this.saveData(this.settings),this.updateLightStyle()}}),this.addCommand({id:"toggle-hidden-borders",name:"Toggle sidebar borders",callback:()=>{this.settings.bordersToggle=!this.settings.bordersToggle,this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"toggle-colorful-headings",name:"Toggle colorful headings",callback:()=>{this.settings.colorfulHeadings=!this.settings.colorfulHeadings,this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"toggle-minimal-focus-mode",name:"Toggle focus mode",callback:()=>{this.settings.focusMode=!this.settings.focusMode,this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"toggle-minimal-colorful-frame",name:"Toggle colorful window frame",callback:()=>{this.settings.colorfulFrame=!this.settings.colorfulFrame,this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"cycle-minimal-table-width",name:"Cycle between table width options",callback:()=>{this.settings.tableWidth=g[(g.indexOf(this.settings.tableWidth)+1)%g.length],this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"cycle-minimal-image-width",name:"Cycle between image width options",callback:()=>{this.settings.imgWidth=h[(h.indexOf(this.settings.imgWidth)+1)%h.length],this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"cycle-minimal-iframe-width",name:"Cycle between iframe width options",callback:()=>{this.settings.iframeWidth=m[(m.indexOf(this.settings.iframeWidth)+1)%m.length],this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"cycle-minimal-chart-width",name:"Cycle between chart width options",callback:()=>{this.settings.chartWidth=r[(r.indexOf(this.settings.chartWidth)+1)%r.length],this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"cycle-minimal-map-width",name:"Cycle between map width options",callback:()=>{this.settings.mapWidth=o[(o.indexOf(this.settings.mapWidth)+1)%o.length],this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"toggle-minimal-img-grid",name:"Toggle image grids",callback:()=>{this.settings.imgGrid=!this.settings.imgGrid,this.saveData(this.settings),this.refresh()}}),this.addCommand({id:"toggle-minimal-switch",name:"Switch between light and dark mode",callback:()=>{this.updateTheme()}}),this.addCommand({id:"toggle-minimal-light-default",name:"Use light mode (default)",callback:()=>{this.settings.lightStyle="minimal-light",this.saveData(this.settings),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-light-white",name:"Use light mode (all white)",callback:()=>{this.settings.lightStyle="minimal-light-white",this.saveData(this.settings),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-light-tonal",name:"Use light mode (low contrast)",callback:()=>{this.settings.lightStyle="minimal-light-tonal",this.saveData(this.settings),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-light-contrast",name:"Use light mode (high contrast)",callback:()=>{this.settings.lightStyle="minimal-light-contrast",this.saveData(this.settings),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-dark-default",name:"Use dark mode (default)",callback:()=>{this.settings.darkStyle="minimal-dark",this.saveData(this.settings),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-dark-tonal",name:"Use dark mode (low contrast)",callback:()=>{this.settings.darkStyle="minimal-dark-tonal",this.saveData(this.settings),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-dark-black",name:"Use dark mode (true black)",callback:()=>{this.settings.darkStyle="minimal-dark-black",this.saveData(this.settings),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-atom-light",name:"Switch light color scheme to Atom (light)",callback:()=>{this.settings.lightScheme="minimal-atom-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-ayu-light",name:"Switch light color scheme to Ayu (light)",callback:()=>{this.settings.lightScheme="minimal-ayu-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-catppuccin-light",name:"Switch light color scheme to Catppuccin (light)",callback:()=>{this.settings.lightScheme="minimal-catppuccin-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-default-light",name:"Switch light color scheme to default (light)",callback:()=>{this.settings.lightScheme="minimal-default-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-gruvbox-light",name:"Switch light color scheme to Gruvbox (light)",callback:()=>{this.settings.lightScheme="minimal-gruvbox-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-eink-light",name:"Switch light color scheme to E-ink (light)",callback:()=>{this.settings.lightScheme="minimal-eink-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-everforest-light",name:"Switch light color scheme to Everforest (light)",callback:()=>{this.settings.lightScheme="minimal-everforest-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-flexoki-light",name:"Switch light color scheme to Flexoki (light)",callback:()=>{this.settings.lightScheme="minimal-flexoki-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-macos-light",name:"Switch light color scheme to macOS (light)",callback:()=>{this.settings.lightScheme="minimal-macos-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-notion-light",name:"Switch light color scheme to Sky (light)",callback:()=>{this.settings.lightScheme="minimal-notion-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-nord-light",name:"Switch light color scheme to Nord (light)",callback:()=>{this.settings.lightScheme="minimal-nord-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-rose-pine-light",name:"Switch light color scheme to Ros\xE9 Pine (light)",callback:()=>{this.settings.lightScheme="minimal-rose-pine-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-solarized-light",name:"Switch light color scheme to Solarized (light)",callback:()=>{this.settings.lightScheme="minimal-solarized-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-things-light",name:"Switch light color scheme to Things (light)",callback:()=>{this.settings.lightScheme="minimal-things-light",this.saveData(this.settings),this.updateLightScheme(),this.updateLightStyle()}}),this.addCommand({id:"toggle-minimal-atom-dark",name:"Switch dark color scheme to Atom (dark)",callback:()=>{this.settings.darkScheme="minimal-atom-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-ayu-dark",name:"Switch dark color scheme to Ayu (dark)",callback:()=>{this.settings.darkScheme="minimal-ayu-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-catppuccin-dark",name:"Switch dark color scheme to Catppuccin (dark)",callback:()=>{this.settings.darkScheme="minimal-catppuccin-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-dracula-dark",name:"Switch dark color scheme to Dracula (dark)",callback:()=>{this.settings.darkScheme="minimal-dracula-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-default-dark",name:"Switch dark color scheme to default (dark)",callback:()=>{this.settings.darkScheme="minimal-default-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-eink-dark",name:"Switch dark color scheme to E-ink (dark)",callback:()=>{this.settings.darkScheme="minimal-eink-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-everforest-dark",name:"Switch dark color scheme to Everforest (dark)",callback:()=>{this.settings.darkScheme="minimal-everforest-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-flexoki-dark",name:"Switch dark color scheme to Flexoki (dark)",callback:()=>{this.settings.darkScheme="minimal-flexoki-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-gruvbox-dark",name:"Switch dark color scheme to Gruvbox (dark)",callback:()=>{this.settings.darkScheme="minimal-gruvbox-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-macos-dark",name:"Switch dark color scheme to macOS (dark)",callback:()=>{this.settings.darkScheme="minimal-macos-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-nord-dark",name:"Switch dark color scheme to Nord (dark)",callback:()=>{this.settings.darkScheme="minimal-nord-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-notion-dark",name:"Switch dark color scheme to Sky (dark)",callback:()=>{this.settings.darkScheme="minimal-notion-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-rose-pine-dark",name:"Switch dark color scheme to Ros\xE9 Pine (dark)",callback:()=>{this.settings.darkScheme="minimal-rose-pine-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-solarized-dark",name:"Switch dark color scheme to Solarized (dark)",callback:()=>{this.settings.darkScheme="minimal-solarized-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-things-dark",name:"Switch dark color scheme to Things (dark)",callback:()=>{this.settings.darkScheme="minimal-things-dark",this.saveData(this.settings),this.updateDarkScheme(),this.updateDarkStyle()}}),this.addCommand({id:"toggle-minimal-dev-block-width",name:"Dev \u2014 Show block widths",callback:()=>{this.settings.devBlockWidth=!this.settings.devBlockWidth,this.saveData(this.settings),this.refresh()}}),this.refresh()})}onunload(){console.log("Unloading Minimal Theme Settings plugin");let t=document.getElementsByClassName("mod-left-split")[0];t&&t.removeClass("theme-dark");let s=document.getElementsByClassName("side-dock-ribbon")[0];s&&s.removeClass("theme-dark"),this.unloadRules(),this.removeStyle(),this.removeSettings(),this.removeLightScheme(),this.removeDarkScheme()}loadSettings(){return p(this,null,function*(){this.settings=Object.assign(D,yield this.loadData())})}saveSettings(){return p(this,null,function*(){yield this.saveData(this.settings)})}refresh(){this.updateStyle()}loadRules(){let t=document.createElement("style");t.id="minimal-theme",document.getElementsByTagName("head")[0].appendChild(t),document.body.classList.add("minimal-theme"),this.updateStyle()}unloadRules(){let t=document.getElementById("minimal-theme");t&&t.parentNode.removeChild(t),document.body.classList.remove("minimal-theme")}setFontSize(){this.app.vault.setConfig("baseFontSize",this.settings.textNormal),this.app.updateFontSize()}updateStyle(){this.removeStyle(),this.removeSettings(),document.body.addClass(this.settings.lightStyle,this.settings.lightScheme,this.settings.darkStyle,this.settings.darkScheme),document.body.classList.toggle("borders-none",!this.settings.bordersToggle),document.body.classList.toggle("colorful-headings",this.settings.colorfulHeadings),document.body.classList.toggle("colorful-frame",this.settings.colorfulFrame),document.body.classList.toggle("colorful-active",this.settings.colorfulActiveStates),document.body.classList.toggle("minimal-focus-mode",this.settings.focusMode),document.body.classList.toggle("links-int-on",this.settings.underlineInternal),document.body.classList.toggle("links-ext-on",this.settings.underlineExternal),document.body.classList.toggle("full-width-media",this.settings.fullWidthMedia),document.body.classList.toggle("img-grid",this.settings.imgGrid),document.body.classList.toggle("minimal-dev-block-width",this.settings.devBlockWidth),document.body.classList.toggle("minimal-status-off",!this.settings.minimalStatus),document.body.classList.toggle("full-file-names",!this.settings.trimNames),document.body.classList.toggle("labeled-nav",this.settings.labeledNav),document.body.classList.toggle("minimal-folding",this.settings.folding),document.body.addClass(this.settings.chartWidth,this.settings.tableWidth,this.settings.imgWidth,this.settings.iframeWidth,this.settings.mapWidth);let t=document.getElementById("minimal-theme");if(t)t.innerText="body.minimal-theme{--font-ui-small:"+this.settings.textSmall+"px;--line-height:"+this.settings.lineHeight+";--line-width:"+this.settings.lineWidth+"rem;--line-width-wide:"+this.settings.lineWidthWide+"rem;--max-width:"+this.settings.maxWidth+"%;--font-editor-override:"+this.settings.editorFont+";";else throw"minimal-theme element not found!"}updateDarkStyle(){document.body.removeClass("theme-light","minimal-dark","minimal-dark-tonal","minimal-dark-black"),document.body.addClass("theme-dark",this.settings.darkStyle),this.app.vault.getConfig("theme")!=="system"&&(this.app.setTheme("obsidian"),this.app.vault.setConfig("theme","obsidian")),this.app.workspace.trigger("css-change")}updateLightStyle(){document.body.removeClass("theme-dark","minimal-light","minimal-light-tonal","minimal-light-contrast","minimal-light-white"),document.body.addClass("theme-light",this.settings.lightStyle),this.app.vault.getConfig("theme")!=="system"&&(this.app.setTheme("moonstone"),this.app.vault.setConfig("theme","moonstone")),this.app.workspace.trigger("css-change")}updateDarkScheme(){this.removeDarkScheme(),document.body.addClass(this.settings.darkScheme)}updateLightScheme(){this.removeLightScheme(),document.body.addClass(this.settings.lightScheme)}updateTheme(){if(this.app.vault.getConfig("theme")==="system")document.body.classList.contains("theme-light")?(document.body.removeClass("theme-light"),document.body.addClass("theme-dark")):(document.body.removeClass("theme-dark"),document.body.addClass("theme-light"));else{document.body.classList.contains("theme-light")?(document.body.removeClass("theme-light"),document.body.addClass("theme-dark")):(document.body.removeClass("theme-dark"),document.body.addClass("theme-light"));let s=this.app.vault.getConfig("theme")==="moonstone"?"obsidian":"moonstone";this.app.setTheme(s),this.app.vault.setConfig("theme",s)}this.app.workspace.trigger("css-change")}removeSettings(){document.body.removeClass("borders-none","colorful-headings","colorful-frame","colorful-active","minimal-focus-mode","links-int-on","links-ext-on","full-width-media","img-grid","minimal-dev-block-width","minimal-status-off","full-file-names","labeled-nav","minimal-folding"),document.body.removeClass("table-wide","table-max","table-100","table-default-width","iframe-wide","iframe-max","iframe-100","iframe-default-width","img-wide","img-max","img-100","img-default-width","chart-wide","chart-max","chart-100","chart-default-width","map-wide","map-max","map-100","map-default-width")}removeStyle(){document.body.removeClass("minimal-light","minimal-light-tonal","minimal-light-contrast","minimal-light-white","minimal-dark","minimal-dark-tonal","minimal-dark-black")}removeDarkScheme(){document.body.removeClass("minimal-atom-dark","minimal-ayu-dark","minimal-catppuccin-dark","minimal-default-dark","minimal-dracula-dark","minimal-eink-dark","minimal-everforest-dark","minimal-flexoki-dark","minimal-gruvbox-dark","minimal-macos-dark","minimal-nord-dark","minimal-notion-dark","minimal-rose-pine-dark","minimal-solarized-dark","minimal-things-dark")}removeLightScheme(){document.body.removeClass("minimal-atom-light","minimal-ayu-light","minimal-catppuccin-light","minimal-default-light","minimal-eink-light","minimal-everforest-light","minimal-flexoki-light","minimal-gruvbox-light","minimal-macos-light","minimal-nord-light","minimal-notion-light","minimal-rose-pine-light","minimal-solarized-light","minimal-things-light")}}; diff --git a/.obsidian/plugins/obsidian-minimal-settings/manifest.json b/.obsidian/plugins/obsidian-minimal-settings/manifest.json index 741b1c88..4606938b 100644 --- a/.obsidian/plugins/obsidian-minimal-settings/manifest.json +++ b/.obsidian/plugins/obsidian-minimal-settings/manifest.json @@ -1,7 +1,7 @@ { "id": "obsidian-minimal-settings", "name": "Minimal Theme Settings", - "version": "8.0.2", + "version": "8.1.1", "minAppVersion": "1.1.9", "description": "Change the colors, fonts and features of Minimal Theme.", "author": "@kepano", diff --git a/.obsidian/plugins/obsidian-reminder-plugin/data.json b/.obsidian/plugins/obsidian-reminder-plugin/data.json index 5ef196c8..0f3dde40 100644 --- a/.obsidian/plugins/obsidian-reminder-plugin/data.json +++ b/.obsidian/plugins/obsidian-reminder-plugin/data.json @@ -2,11 +2,6 @@ "scanned": true, "reminders": { "05.01 Computer setup/Storage and Syncing.md": [ - { - "title": ":cloud: [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] %%done_del%%", - "time": "2024-09-09", - "rowNumber": 178 - }, { "title": ":coin: Backup [[Storage and Syncing#Instructions for Anchor|Anchor Wallet]] %%done_del%%", "time": "2024-10-03", @@ -25,7 +20,12 @@ { "title": ":camera: [[Storage and Syncing|Storage & Sync]]: Transfer pictures to ED %%done_del%%", "time": "2024-10-10", - "rowNumber": 180 + "rowNumber": 181 + }, + { + "title": ":cloud: [[Storage and Syncing|Storage & Sync]]: Backup Volumes to [[Sync|Sync.com]] %%done_del%%", + "time": "2024-12-09", + "rowNumber": 178 }, { "title": ":iphone: Backup [[Storage and Syncing|news for previous year]] %%done_del%%", @@ -48,33 +48,28 @@ "05.02 Networks/Server Cloud.md": [ { "title": ":cloud: [[Selfhosting]], [[Server Cloud|Cloud]]: Upgrader & Health checks %%done_del%%", - "time": "2024-09-01", - "rowNumber": 284 + "time": "2025-01-01", + "rowNumber": 285 }, { "title": ":cloud: [[Server Cloud]]: Backup server %%done_del%%", - "time": "2024-09-03", + "time": "2025-03-04", "rowNumber": 279 } ], "05.02 Networks/Server Alias.md": [ - { - "title": ":email: [[Server Alias]]: Backup server %%done_del%%", - "time": "2024-09-03", - "rowNumber": 347 - }, { "title": ":email: [[Selfhosting]], [[Server Alias|Email Alias]]: Upgrader & Health checks %%done_del%%", "time": "2024-11-30", "rowNumber": 338 + }, + { + "title": ":email: [[Server Alias]]: Backup server %%done_del%%", + "time": "2025-03-04", + "rowNumber": 347 } ], "05.02 Networks/Server Tools.md": [ - { - "title": ":closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%%", - "time": "2024-08-17", - "rowNumber": 581 - }, { "title": ":hammer_and_wrench: [[Server Tools]]: Backup server %%done_del%%", "time": "2024-10-01", @@ -84,6 +79,11 @@ "title": ":desktop_computer: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Gitea & Health checks %%done_del%%", "time": "2024-10-18", "rowNumber": 579 + }, + { + "title": ":closed_lock_with_key: [[Selfhosting]], [[Server Tools|Tools]]: Upgrader Bitwarden & Health checks %%done_del%%", + "time": "2024-12-17", + "rowNumber": 581 } ], "05.02 Networks/Server VPN.md": [ @@ -123,16 +123,16 @@ } ], "04.01 lebv.org/lebv Research Tasks.md": [ - { - "title": ":fleur_de_lis:: [[lebv Research Tasks|Research]]: Lieux: que sont devenus Fleurimont & Le Pavillon aujourd'hui?", - "time": "2024-08-25", - "rowNumber": 69 - }, { "title": ":fleur_de_lis: [[lebv Research Tasks|Research]]: membres de la famille: reprendre les citations militaires (promotion/décoration)", "time": "2024-09-30", "rowNumber": 70 }, + { + "title": ":fleur_de_lis:: [[lebv Research Tasks|Research]]: Lieux: que sont devenus Fleurimont & Le Pavillon aujourd'hui?", + "time": "2024-12-25", + "rowNumber": 69 + }, { "title": ":fleur_de_lis: [[lebv Research Tasks|Research]]: membres de la famille: éplucher les mentions du Nobiliaire de Guyenne & Gascogne", "time": "2024-12-31", @@ -140,27 +140,27 @@ } ], "01.03 Family/Amaury de Villeneuve.md": [ - { - "title": ":birthday: **[[Amaury de Villeneuve|Papa]]** %%done_del%%", - "time": "2024-08-30", - "rowNumber": 125 - }, { "title": ":crown: Fête des pères %%done_del%%", "time": "2025-06-15", - "rowNumber": 129 + "rowNumber": 130 + }, + { + "title": ":birthday: **[[Amaury de Villeneuve|Papa]]** %%done_del%%", + "time": "2025-08-30", + "rowNumber": 125 } ], "01.03 Family/Laurence Bédier.md": [ - { - "title": ":birthday: **[[Laurence Bédier|Maman]]** %%done_del%%", - "time": "2024-09-04", - "rowNumber": 105 - }, { "title": ":crown: Fête des mères %%done_del%%", "time": "2025-05-25", - "rowNumber": 108 + "rowNumber": 109 + }, + { + "title": ":birthday: **[[Laurence Bédier|Maman]]** %%done_del%%", + "time": "2025-09-04", + "rowNumber": 105 } ], "01.03 Family/Noémie de Villeneuve.md": [ @@ -313,7 +313,7 @@ "01.03 Family/Hilaire Bédier.md": [ { "title": ":birthday: **[[Hilaire Bédier|Hilaire]]** %%done_del%%", - "time": "2024-08-26", + "time": "2025-08-26", "rowNumber": 105 } ], @@ -334,48 +334,48 @@ "01.02 Home/Household.md": [ { "title": "♻ [[Household]]: *Cardboard* recycling collection %%done_del%%", - "time": "2024-08-20", - "rowNumber": 78 + "time": "2024-09-17", + "rowNumber": 80 }, { "title": "🛎 🧻 REMINDER [[Household]]: check need for toilet paper %%done_del%%", - "time": "2024-08-26", - "rowNumber": 87 + "time": "2024-09-23", + "rowNumber": 92 }, { "title": "♻ [[Household]]: *Paper* recycling collection %%done_del%%", - "time": "2024-08-27", + "time": "2024-09-24", "rowNumber": 75 }, { "title": "🛎️ :house: [[Household]]: Pay rent %%done_del%%", - "time": "2024-08-31", - "rowNumber": 85 + "time": "2024-09-30", + "rowNumber": 89 }, { "title": ":blue_car: [[Household]]: Change to Winter tyres @ [[Rex Automobile CH]] %%done_del%%", "time": "2024-10-15", - "rowNumber": 96 + "rowNumber": 103 }, { "title": ":ski: [[Household]]: Organise yearly ski servicing ([[Ski Rental Zürich]]) %%done_del%%", "time": "2024-10-31", - "rowNumber": 104 + "rowNumber": 111 }, { "title": ":blue_car: [[Household]]: Clean car %%done_del%%", "time": "2024-11-30", - "rowNumber": 98 + "rowNumber": 105 }, { "title": ":blue_car: [[Household]]: Renew [road vignette](https://www.e-vignette.ch/) %%done_del%%", "time": "2024-12-20", - "rowNumber": 97 + "rowNumber": 104 }, { "title": ":blue_car: [[Household]]: Change to Summer tyres @ [[Rex Automobile CH]] %%done_del%%", "time": "2025-04-15", - "rowNumber": 95 + "rowNumber": 102 } ], "01.03 Family/Pia Bousquié.md": [ @@ -393,14 +393,9 @@ } ], "01.01 Life Orga/@Finances.md": [ - { - "title": ":heavy_dollar_sign: [[@Finances|Finances]]: Swiss tax self declaration %%done_del%%", - "time": "2024-08-31", - "rowNumber": 127 - }, { "title": ":heavy_dollar_sign: [[@Finances|Finances]]: update crypto prices within Obsidian %%done_del%%", - "time": "2024-09-10", + "time": "2024-10-08", "rowNumber": 116 }, { @@ -411,7 +406,12 @@ { "title": ":heavy_dollar_sign: [[@Finances|Finances]]: Close yearly accounts %%done_del%%", "time": "2025-01-07", - "rowNumber": 125 + "rowNumber": 118 + }, + { + "title": ":heavy_dollar_sign: [[@Finances|Finances]]: Swiss tax self declaration %%done_del%%", + "time": "2025-04-29", + "rowNumber": 119 } ], "01.01 Life Orga/@Personal projects.md": [ @@ -451,30 +451,30 @@ "06.02 Investments/Crypto Tasks.md": [ { "title": ":ballot_box_with_ballot: [[Crypto Tasks]]: Vote for [[EOS]] block producers %%done_del%%", - "time": "2024-09-03", + "time": "2024-10-01", "rowNumber": 72 }, { "title": ":chart: Check [[Nimbus]] earnings %%done_del%%", - "time": "2024-09-09", - "rowNumber": 93 + "time": "2024-10-14", + "rowNumber": 94 } ], "05.02 Networks/Configuring UFW.md": [ { "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix %%done_del%%", - "time": "2024-08-17", + "time": "2024-09-14", "rowNumber": 239 }, { "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]] Get IP addresses caught by Postfix %%done_del%%", - "time": "2024-08-17", - "rowNumber": 321 + "time": "2024-09-14", + "rowNumber": 243 }, { "title": "🖥 [[Selfhosting]], [[Configuring UFW|Firewall]]: Update the Blocked IP list %%done_del%%", - "time": "2024-08-17", - "rowNumber": 328 + "time": "2024-09-14", + "rowNumber": 247 } ], "01.03 Family/Amélie Solanet.md": [ @@ -515,21 +515,21 @@ "00.08 Bookmarks/Bookmarks - Selfhosted Apps.md": [ { "title": ":label: [[Bookmarks - Selfhosted apps]]: Review bookmarks %%done_del%%", - "time": "2024-08-22", + "time": "2024-11-22", "rowNumber": 178 } ], "00.08 Bookmarks/Bookmarks - Utilities.md": [ { "title": ":label: [[Bookmarks - Utilities]]: review bookmarks %%done_del%%", - "time": "2024-09-02", + "time": "2024-12-02", "rowNumber": 172 } ], "00.08 Bookmarks/Bookmarks - Mac applications.md": [ { "title": ":label: [[Bookmarks - Mac applications]]: review bookmarks %%done_del%%", - "time": "2024-09-09", + "time": "2024-12-09", "rowNumber": 123 } ], @@ -555,35 +555,30 @@ } ], "02.02 Paris/@@Paris.md": [ - { - "title": ":sunny: :racehorse: [[@@Paris|:test_grandes_armes_de_paris:]]: Check out the [Open de France](https://www.poloclubchantilly.com/)", - "time": "2024-08-25", - "rowNumber": 109 - }, - { - "title": ":maple_leaf: :partying_face: [[@@Paris|:test_grandes_armes_de_paris:]]: Fête des Puces %%done_del%%", - "time": "2024-09-21", - "rowNumber": 99 - }, { "title": "🎭:frame_with_picture: [[@@Paris|:test_grandes_armes_de_paris:]]: Check out [exhibitions](https://www.offi.fr/expositions-musees/programme.html) %%done_del%%", "time": "2024-10-31", "rowNumber": 90 }, { - "title": ":birthday: **Virginie Parent**, [[@@Paris|Paris]] %%done_del%%", - "time": "2024-12-12", - "rowNumber": 150 + "title": ":maple_leaf: :partying_face: [[@@Paris|:test_grandes_armes_de_paris:]]: Fête des Puces %%done_del%%", + "time": "2024-09-21", + "rowNumber": 96 }, { - "title": ":snowflake: :sports_medal:[[@@Paris|:test_grandes_armes_de_paris:]]: Check out the [6 Nations](https://billetterie.ffr.fr/fr)", + "title": ":snowflake: :sports_medal:[[@@Paris|:test_grandes_armes_de_paris:]]: Check out the [6 Nations](https://billetterie.ffr.fr/fr) %%done_del%%", "time": "2025-01-30", - "rowNumber": 105 + "rowNumber": 102 }, { - "title": ":sunny: :sports_medal:[[@@Paris|:test_grandes_armes_de_paris:]]: Check out [RG](https://www.rolandgarros.com/fr-fr/page/billetterie-roland-garros)", + "title": ":sunny: :sports_medal:[[@@Paris|:test_grandes_armes_de_paris:]]: Check out [RG](https://www.rolandgarros.com/fr-fr/page/billetterie-roland-garros) %%done_del%%", "time": "2025-03-10", - "rowNumber": 107 + "rowNumber": 103 + }, + { + "title": ":birthday: **Virginie Parent**, [[@@Paris|Paris]] %%done_del%%", + "time": "2024-12-12", + "rowNumber": 144 } ], "00.01 Admin/Calendars/2022-08-26.md": [ @@ -640,15 +635,45 @@ } ], "01.01 Life Orga/@Lifestyle.md": [ + { + "title": "🏊🏼‍♂️ [[@Lifestyle|Lifestyle]]: Swim more regularly in Summer", + "time": "2024-09-30", + "rowNumber": 80 + }, + { + "title": ":snowflake: :racehorse: [[@Switzerland|St. Moritz]], [[@Lifestyle|Lifestyle]]: Check out the [St Moritz Snow Polo](https://www.snowpolo-stmoritz.com/) %%done_del%%", + "time": "2024-10-15", + "rowNumber": 228 + }, + { + "title": ":snowflake: :racehorse: 🇦🇷 [[@Lifestyle|Lifestyle]]: Check out the Abierto de Polo %%done_del%%", + "time": "2024-11-15", + "rowNumber": 229 + }, { "title": "🍎 [[@Lifestyle|Lifestyle]]: Transitioner sucres synthétiques vers sucres naturels", "time": "2024-12-31", "rowNumber": 79 }, { - "title": "🎹 [[@Lifestyle|Lifestyle]]: Start a vinyl collection", - "time": "2024-12-31", - "rowNumber": 81 + "title": ":watch: [[@Lifestyle|Lifestyle]] Change wristband of B&M watch %%done_del%%", + "time": "2025-03-21", + "rowNumber": 117 + }, + { + "title": ":sunny: :racehorse: [[@France|:fr:]], [[@Lifestyle|Lifestyle]]: Check out the [Coupe d’Or](https://www.deauvillepoloclub.com/coupe-d-or) %%done_del%%", + "time": "2025-08-10", + "rowNumber": 225 + }, + { + "title": ":sunny: :racehorse: [[@Switzerland|Gstaad]], [[@Lifestyle|Lifestyle]]: Check out the [Gold Cup Gstaad](https://www.polo-gstaad.ch/) %%done_del%%", + "time": "2025-08-10", + "rowNumber": 227 + }, + { + "title": ":sunny: :racehorse: [[@@Paris|Paris]], [[@Lifestyle|Lifestyle]]: Check out the [Open de France](https://www.poloclubchantilly.com/) %%done_del%%", + "time": "2025-08-25", + "rowNumber": 226 } ], "06.02 Investments/Equity Tasks.md": [ @@ -673,16 +698,16 @@ } ], "01.07 Animals/@Sally.md": [ - { - "title": ":racehorse: [[@Sally|Sally]]: Pay for horseshoes (150 CHF) %%done_del%%", - "time": "2024-09-10", - "rowNumber": 142 - }, { "title": ":racehorse: [[@Sally|Sally]]: Vet check %%done_del%%", "time": "2024-09-30", "rowNumber": 136 }, + { + "title": ":racehorse: [[@Sally|Sally]]: Pay for horseshoes (150 CHF) %%done_del%%", + "time": "2024-10-10", + "rowNumber": 142 + }, { "title": ":racehorse: [[@Sally|Sally]]: EHV-1 vaccination dose %%done_del%%", "time": "2025-01-31", @@ -717,15 +742,15 @@ ], "01.07 Animals/2023-07-13 Health check.md": [ { - "title": ":racehorse: [[@Sally|Sally]], [[2023-07-13 Health check|Note]]: Check front hoofs healing", - "time": "2024-08-27", + "title": ":racehorse: [[@Sally|Sally]], [[2023-07-13 Health check|Note]]: Check front hoofs healing %%done_del%%", + "time": "2024-10-10", "rowNumber": 53 } ], "01.03 Family/Ophélie Bédier.md": [ { "title": ":birthday: **[[Ophélie Bédier|Ophélie]]** %%done_del%%", - "time": "2024-09-05", + "time": "2025-09-05", "rowNumber": 105 } ], @@ -760,7 +785,7 @@ "00.08 Bookmarks/Bookmarks - Art.md": [ { "title": ":label: [[Bookmarks - Art]]: Review bookmarks %%done_del%%", - "time": "2024-08-26", + "time": "2024-11-26", "rowNumber": 97 } ], @@ -779,11 +804,6 @@ } ], "02.03 Zürich/@@Zürich.md": [ - { - "title": ":sunny: :partying_face: [[@@Zürich|:test_zurich_coat_of_arms:]]: Zürich Openair %%done_del%%", - "time": "2024-08-23", - "rowNumber": 121 - }, { "title": "🎭:frame_with_picture: [[@@Zürich|:test_zurich_coat_of_arms:]]: Check out exhibitions at the [Rietberg](https://rietberg.ch/en/) %%done_del%%", "time": "2024-09-15", @@ -842,7 +862,7 @@ { "title": ":hibiscus: :runner: [[@@Zürich|Zürich]]: Zürich Marathon %%done_del%%", "time": "2025-04-21", - "rowNumber": 129 + "rowNumber": 130 }, { "title": ":hibiscus: :fork_and_knife: [[@@Zürich|:test_zurich_coat_of_arms:]]: Book a restaurant with terrace for the season: [[Albishaus]], [[Restaurant Boldern]], [[Zur Buech]], [[Jardin Zürichberg]], [[Bistro Rigiblick]], [[Portofino am See]], [[La Réserve|La Muña]] %%done_del%%", @@ -872,17 +892,22 @@ { "title": ":sunny: :runner: [[@@Zürich|:test_zurich_coat_of_arms:]]: Check out tickets to Weltklasse Zürich %%done_del%%", "time": "2025-08-01", - "rowNumber": 130 + "rowNumber": 131 }, { "title": ":sunny: :partying_face: [[@@Zürich|:test_zurich_coat_of_arms:]]: Street Parade %%done_del%%", "time": "2025-08-10", "rowNumber": 118 }, + { + "title": ":sunny: :partying_face: [[@@Zürich|:test_zurich_coat_of_arms:]]: Zürich Openair %%done_del%%", + "time": "2025-08-23", + "rowNumber": 121 + }, { "title": ":sunny: :partying_face: [[@@Zürich|:test_zurich_coat_of_arms:]]: Check out Seenachtfest Rapperswil-Jona %%done_del%%", "time": "2027-08-01", - "rowNumber": 122 + "rowNumber": 123 } ], "03.02 Travels/Geneva.md": [ @@ -988,25 +1013,25 @@ "00.01 Admin/Calendars/2024-04-29.md": [ { "title": "09:12 🍴: [[@@Zürich|Zürich]]: Book [[Restaurant Boldern]]", - "time": "2024-07-30", + "time": "2024-09-20", "rowNumber": 105 }, { "title": "09:13 :fork_and_knife: [[@@Zürich|Zürich]]: Book [[Zur Buech]]", - "time": "2024-08-30", + "time": "2024-09-30", "rowNumber": 106 } ], "01.06 Health/2024-06-29 Fungal treatment.md": [ { "title": ":test_pharmacie_logo_svg_vector: [[2024-06-29 Fungal treatment|Fungus]]: Take the pill %%done_del%%", - "time": "2024-08-17", + "time": "2024-09-12", "rowNumber": 58 }, { "title": ":test_pharmacie_logo_svg_vector: [[2024-06-29 Fungal treatment|Fungus]]: Nail lack %%done_del%%", - "time": "2024-08-17", - "rowNumber": 90 + "time": "2024-09-12", + "rowNumber": 116 } ], "01.06 Health/2023-02-25 Polyp in Galbladder.md": [ @@ -1017,16 +1042,51 @@ } ], "00.01 Admin/Calendars/2024-07-29.md": [ + { + "title": "09:20 📨 [[@Family|Family]]: Repondre a Papa", + "time": "2024-08-30", + "rowNumber": 104 + }, { "title": "08:18 ⚽ [[@Lifestyle|Lifestyle]]: Check the Como 07 [schedule](https://comofootball.com/en/matches-and-tickets/)", - "time": "2024-08-20", + "time": "2024-09-15", "rowNumber": 103 - }, + } + ], + "05.02 Networks/Selfhosting.md": [ { - "title": "09:20 📨 [[@Family|Family]]: Repondre a Papa", - "time": "2024-08-30", + "title": ":desktop_computer: [[Selfhosting|Self hosting]]: Check log activity for all servers %%done_del%%", + "time": "2024-09-17", + "rowNumber": 302 + } + ], + "04.03 Creative snippets/New Year well Wishes.md": [ + { + "title": ":clinking_glasses: [[New Year well Wishes]]: Check to use text for New Year's well wishes %%done_del%%", + "time": "2024-12-29", + "rowNumber": 108 + } + ], + "00.01 Admin/Calendars/2024-09-03.md": [ + { + "title": "13:44 :tshirt: [[@Lifestyle|Lifestyle]]: Check sales on 3rd jersey (black with horse) of Juventus, [[2024-09-03|link]]", + "time": "2025-04-30", + "rowNumber": 103 + } + ], + "00.01 Admin/Calendars/2024-09-04.md": [ + { + "title": "17:49 :blue_car: [[@Life Admin|Admin]]: Contact garage for revision, [[2024-09-04|link]]", + "time": "2024-09-15", "rowNumber": 104 } + ], + "00.01 Admin/Calendars/2024-09-08.md": [ + { + "title": "08:35 :movie_camera: [[@Lifestyle|Lifestyle]]: Download Dersou Ouzala [[2024-09-08|link]]", + "time": "2024-09-17", + "rowNumber": 103 + } ] }, "debug": false, diff --git a/.obsidian/plugins/obsidian-style-settings/main.js b/.obsidian/plugins/obsidian-style-settings/main.js index b7e0ea00..0e0ed28f 100644 --- a/.obsidian/plugins/obsidian-style-settings/main.js +++ b/.obsidian/plugins/obsidian-style-settings/main.js @@ -1,9858 +1,163 @@ /* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin */ -'use strict'; - -var obsidian = require('obsidian'); - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -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. -***************************************************************************** */ - -function __awaiter(thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -} - -class ExportModal extends obsidian.Modal { - constructor(app, plugin, section, config) { - super(app); - this.plugin = plugin; - this.config = config; - this.section = section; - } - onOpen() { - const { contentEl, modalEl } = this; - modalEl.addClass('modal-style-settings'); - new obsidian.Setting(contentEl) - .setName(`Export settings for: ${this.section}`) - .then((setting) => { - const output = JSON.stringify(this.config, null, 2); - // Build a copy to clipboard link - setting.controlEl.createEl('a', { - cls: 'style-settings-copy', - text: 'Copy to clipboard', - href: '#', - }, (copyButton) => { - new obsidian.TextAreaComponent(contentEl) - .setValue(output) - .then((textarea) => { - copyButton.addEventListener('click', (e) => { - e.preventDefault(); - // Select the textarea contents and copy them to the clipboard - textarea.inputEl.select(); - textarea.inputEl.setSelectionRange(0, 99999); - document.execCommand('copy'); - copyButton.addClass('success'); - setTimeout(() => { - // If the button is still in the dom, remove the success class - if (copyButton.parentNode) { - copyButton.removeClass('success'); - } - }, 2000); - }); - }); - }); - // Build a download link - setting.controlEl.createEl('a', { - cls: 'style-settings-download', - text: 'Download', - attr: { - download: 'style-settings.json', - href: `data:application/json;charset=utf-8,${encodeURIComponent(output)}`, - }, - }); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} - -class ImportModal extends obsidian.Modal { - constructor(app, plugin) { - super(app); - this.plugin = plugin; - } - onOpen() { - const { contentEl, modalEl } = this; - modalEl.addClass('modal-style-settings'); - new obsidian.Setting(contentEl) - .setName('Import style setting') - .setDesc('Import an entire or partial configuration. Warning: this may override existing settings'); - new obsidian.Setting(contentEl).then((setting) => { - // Build an error message container - const errorSpan = createSpan({ - cls: 'style-settings-import-error', - text: 'Error importing config', - }); - setting.nameEl.appendChild(errorSpan); - // Attempt to parse the imported data and close if successful - const importAndClose = (str) => __awaiter(this, void 0, void 0, function* () { - if (str) { - try { - const importedSettings = JSON.parse(str); - yield this.plugin.settingsManager.setSettings(importedSettings); - this.plugin.settingsTab.display(); - this.close(); - } - catch (e) { - errorSpan.addClass('active'); - errorSpan.setText(`Error importing style settings: ${e}`); - } - } - else { - errorSpan.addClass('active'); - errorSpan.setText(`Error importing style settings: config is empty`); - } - }); - // Build a file input - setting.controlEl.createEl('input', { - cls: 'style-settings-import-input', - attr: { - id: 'style-settings-import-input', - name: 'style-settings-import-input', - type: 'file', - accept: '.json', - }, - }, (importInput) => { - // Set up a FileReader so we can parse the file contents - importInput.addEventListener('change', (e) => { - const reader = new FileReader(); - reader.onload = (e) => __awaiter(this, void 0, void 0, function* () { - yield importAndClose(e.target.result.toString().trim()); - }); - reader.readAsText(e.target.files[0]); - }); - }); - // Build a label we will style as a link - setting.controlEl.createEl('label', { - cls: 'style-settings-import-label', - text: 'Import from file', - attr: { - for: 'style-settings-import-input', - }, - }); - new obsidian.TextAreaComponent(contentEl) - .setPlaceholder('Paste config here...') - .then((ta) => { - new obsidian.ButtonComponent(contentEl) - .setButtonText('Save') - .onClick(() => __awaiter(this, void 0, void 0, function* () { - yield importAndClose(ta.getValue().trim()); - })); - }); - }); - } - onClose() { - const { contentEl } = this; - contentEl.empty(); - } -} - -const SettingType = { - HEADING: 'heading', - INFO_TEXT: 'info-text', - CLASS_TOGGLE: 'class-toggle', - CLASS_SELECT: 'class-select', - VARIABLE_TEXT: 'variable-text', - VARIABLE_NUMBER: 'variable-number', - VARIABLE_NUMBER_SLIDER: 'variable-number-slider', - VARIABLE_SELECT: 'variable-select', - VARIABLE_COLOR: 'variable-color', - VARIABLE_THEMED_COLOR: 'variable-themed-color', - COLOR_GRADIENT: 'color-gradient', -}; - -var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - -function getDefaultExportFromCjs (x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; -} - -function createCommonjsModule(fn, basedir, module) { - return module = { - path: basedir, - exports: {}, - require: function (path, base) { - return commonjsRequire(path, (base === undefined || base === null) ? module.path : base); - } - }, fn(module, module.exports), module.exports; -} - -function commonjsRequire () { - throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); -} - -var chroma = createCommonjsModule(function (module, exports) { -/** - * chroma.js - JavaScript library for color conversions - * - * Copyright (c) 2011-2019, Gregor Aisch - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. The name Gregor Aisch may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL GREGOR AISCH OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ------------------------------------------------------- - * - * chroma.js includes colors from colorbrewer2.org, which are released under - * the following license: - * - * Copyright (c) 2002 Cynthia Brewer, Mark Harrower, - * and The Pennsylvania State University. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, - * either express or implied. See the License for the specific - * language governing permissions and limitations under the License. - * - * ------------------------------------------------------ - * - * Named colors are taken from X11 Color Names. - * http://www.w3.org/TR/css3-color/#svg-color - * - * @preserve - */ - -(function (global, factory) { - module.exports = factory() ; -}(commonjsGlobal, (function () { - var limit = function (x, min, max) { - if ( min === void 0 ) min=0; - if ( max === void 0 ) max=1; - - return x < min ? min : x > max ? max : x; - }; - - var clip_rgb = function (rgb) { - rgb._clipped = false; - rgb._unclipped = rgb.slice(0); - for (var i=0; i<=3; i++) { - if (i < 3) { - if (rgb[i] < 0 || rgb[i] > 255) { rgb._clipped = true; } - rgb[i] = limit(rgb[i], 0, 255); - } else if (i === 3) { - rgb[i] = limit(rgb[i], 0, 1); - } - } - return rgb; - }; - - // ported from jQuery's $.type - var classToType = {}; - for (var i = 0, list = ['Boolean', 'Number', 'String', 'Function', 'Array', 'Date', 'RegExp', 'Undefined', 'Null']; i < list.length; i += 1) { - var name = list[i]; - - classToType[("[object " + name + "]")] = name.toLowerCase(); - } - var type = function(obj) { - return classToType[Object.prototype.toString.call(obj)] || "object"; - }; - - var unpack = function (args, keyOrder) { - if ( keyOrder === void 0 ) keyOrder=null; - - // if called with more than 3 arguments, we return the arguments - if (args.length >= 3) { return Array.prototype.slice.call(args); } - // with less than 3 args we check if first arg is object - // and use the keyOrder string to extract and sort properties - if (type(args[0]) == 'object' && keyOrder) { - return keyOrder.split('') - .filter(function (k) { return args[0][k] !== undefined; }) - .map(function (k) { return args[0][k]; }); - } - // otherwise we just return the first argument - // (which we suppose is an array of args) - return args[0]; - }; - - var last = function (args) { - if (args.length < 2) { return null; } - var l = args.length-1; - if (type(args[l]) == 'string') { return args[l].toLowerCase(); } - return null; - }; - - var PI = Math.PI; - - var utils = { - clip_rgb: clip_rgb, - limit: limit, - type: type, - unpack: unpack, - last: last, - PI: PI, - TWOPI: PI*2, - PITHIRD: PI/3, - DEG2RAD: PI / 180, - RAD2DEG: 180 / PI - }; - - var input = { - format: {}, - autodetect: [] - }; - - var last$1 = utils.last; - var clip_rgb$1 = utils.clip_rgb; - var type$1 = utils.type; - - - var Color = function Color() { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var me = this; - if (type$1(args[0]) === 'object' && - args[0].constructor && - args[0].constructor === this.constructor) { - // the argument is already a Color instance - return args[0]; - } - - // last argument could be the mode - var mode = last$1(args); - var autodetect = false; - - if (!mode) { - autodetect = true; - if (!input.sorted) { - input.autodetect = input.autodetect.sort(function (a,b) { return b.p - a.p; }); - input.sorted = true; - } - // auto-detect format - for (var i = 0, list = input.autodetect; i < list.length; i += 1) { - var chk = list[i]; - - mode = chk.test.apply(chk, args); - if (mode) { break; } - } - } - - if (input.format[mode]) { - var rgb = input.format[mode].apply(null, autodetect ? args : args.slice(0,-1)); - me._rgb = clip_rgb$1(rgb); - } else { - throw new Error('unknown format: '+args); - } - - // add alpha channel - if (me._rgb.length === 3) { me._rgb.push(1); } - }; - - Color.prototype.toString = function toString () { - if (type$1(this.hex) == 'function') { return this.hex(); } - return ("[" + (this._rgb.join(',')) + "]"); - }; - - var Color_1 = Color; - - var chroma = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( chroma.Color, [ null ].concat( args) )); - }; - - chroma.Color = Color_1; - chroma.version = '2.1.2'; - - var chroma_1 = chroma; - - var unpack$1 = utils.unpack; - var max = Math.max; - - var rgb2cmyk = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$1(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - r = r / 255; - g = g / 255; - b = b / 255; - var k = 1 - max(r,max(g,b)); - var f = k < 1 ? 1 / (1-k) : 0; - var c = (1-r-k) * f; - var m = (1-g-k) * f; - var y = (1-b-k) * f; - return [c,m,y,k]; - }; - - var rgb2cmyk_1 = rgb2cmyk; - - var unpack$2 = utils.unpack; - - var cmyk2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$2(args, 'cmyk'); - var c = args[0]; - var m = args[1]; - var y = args[2]; - var k = args[3]; - var alpha = args.length > 4 ? args[4] : 1; - if (k === 1) { return [0,0,0,alpha]; } - return [ - c >= 1 ? 0 : 255 * (1-c) * (1-k), // r - m >= 1 ? 0 : 255 * (1-m) * (1-k), // g - y >= 1 ? 0 : 255 * (1-y) * (1-k), // b - alpha - ]; - }; - - var cmyk2rgb_1 = cmyk2rgb; - - var unpack$3 = utils.unpack; - var type$2 = utils.type; - - - - Color_1.prototype.cmyk = function() { - return rgb2cmyk_1(this._rgb); - }; - - chroma_1.cmyk = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['cmyk']) )); - }; - - input.format.cmyk = cmyk2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$3(args, 'cmyk'); - if (type$2(args) === 'array' && args.length === 4) { - return 'cmyk'; - } - } - }); - - var unpack$4 = utils.unpack; - var last$2 = utils.last; - var rnd = function (a) { return Math.round(a*100)/100; }; - - /* - * supported arguments: - * - hsl2css(h,s,l) - * - hsl2css(h,s,l,a) - * - hsl2css([h,s,l], mode) - * - hsl2css([h,s,l,a], mode) - * - hsl2css({h,s,l,a}, mode) - */ - var hsl2css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var hsla = unpack$4(args, 'hsla'); - var mode = last$2(args) || 'lsa'; - hsla[0] = rnd(hsla[0] || 0); - hsla[1] = rnd(hsla[1]*100) + '%'; - hsla[2] = rnd(hsla[2]*100) + '%'; - if (mode === 'hsla' || (hsla.length > 3 && hsla[3]<1)) { - hsla[3] = hsla.length > 3 ? hsla[3] : 1; - mode = 'hsla'; - } else { - hsla.length = 3; - } - return (mode + "(" + (hsla.join(',')) + ")"); - }; - - var hsl2css_1 = hsl2css; - - var unpack$5 = utils.unpack; - - /* - * supported arguments: - * - rgb2hsl(r,g,b) - * - rgb2hsl(r,g,b,a) - * - rgb2hsl([r,g,b]) - * - rgb2hsl([r,g,b,a]) - * - rgb2hsl({r,g,b,a}) - */ - var rgb2hsl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$5(args, 'rgba'); - var r = args[0]; - var g = args[1]; - var b = args[2]; - - r /= 255; - g /= 255; - b /= 255; - - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - - var l = (max + min) / 2; - var s, h; - - if (max === min){ - s = 0; - h = Number.NaN; - } else { - s = l < 0.5 ? (max - min) / (max + min) : (max - min) / (2 - max - min); - } - - if (r == max) { h = (g - b) / (max - min); } - else if (g == max) { h = 2 + (b - r) / (max - min); } - else if (b == max) { h = 4 + (r - g) / (max - min); } - - h *= 60; - if (h < 0) { h += 360; } - if (args.length>3 && args[3]!==undefined) { return [h,s,l,args[3]]; } - return [h,s,l]; - }; - - var rgb2hsl_1 = rgb2hsl; - - var unpack$6 = utils.unpack; - var last$3 = utils.last; - - - var round = Math.round; - - /* - * supported arguments: - * - rgb2css(r,g,b) - * - rgb2css(r,g,b,a) - * - rgb2css([r,g,b], mode) - * - rgb2css([r,g,b,a], mode) - * - rgb2css({r,g,b,a}, mode) - */ - var rgb2css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgba = unpack$6(args, 'rgba'); - var mode = last$3(args) || 'rgb'; - if (mode.substr(0,3) == 'hsl') { - return hsl2css_1(rgb2hsl_1(rgba), mode); - } - rgba[0] = round(rgba[0]); - rgba[1] = round(rgba[1]); - rgba[2] = round(rgba[2]); - if (mode === 'rgba' || (rgba.length > 3 && rgba[3]<1)) { - rgba[3] = rgba.length > 3 ? rgba[3] : 1; - mode = 'rgba'; - } - return (mode + "(" + (rgba.slice(0,mode==='rgb'?3:4).join(',')) + ")"); - }; - - var rgb2css_1 = rgb2css; - - var unpack$7 = utils.unpack; - var round$1 = Math.round; - - var hsl2rgb = function () { - var assign; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$7(args, 'hsl'); - var h = args[0]; - var s = args[1]; - var l = args[2]; - var r,g,b; - if (s === 0) { - r = g = b = l*255; - } else { - var t3 = [0,0,0]; - var c = [0,0,0]; - var t2 = l < 0.5 ? l * (1+s) : l+s-l*s; - var t1 = 2 * l - t2; - var h_ = h / 360; - t3[0] = h_ + 1/3; - t3[1] = h_; - t3[2] = h_ - 1/3; - for (var i=0; i<3; i++) { - if (t3[i] < 0) { t3[i] += 1; } - if (t3[i] > 1) { t3[i] -= 1; } - if (6 * t3[i] < 1) - { c[i] = t1 + (t2 - t1) * 6 * t3[i]; } - else if (2 * t3[i] < 1) - { c[i] = t2; } - else if (3 * t3[i] < 2) - { c[i] = t1 + (t2 - t1) * ((2 / 3) - t3[i]) * 6; } - else - { c[i] = t1; } - } - (assign = [round$1(c[0]*255),round$1(c[1]*255),round$1(c[2]*255)], r = assign[0], g = assign[1], b = assign[2]); - } - if (args.length > 3) { - // keep alpha channel - return [r,g,b,args[3]]; - } - return [r,g,b,1]; - }; - - var hsl2rgb_1 = hsl2rgb; - - var RE_RGB = /^rgb\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*\)$/; - var RE_RGBA = /^rgba\(\s*(-?\d+),\s*(-?\d+)\s*,\s*(-?\d+)\s*,\s*([01]|[01]?\.\d+)\)$/; - var RE_RGB_PCT = /^rgb\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/; - var RE_RGBA_PCT = /^rgba\(\s*(-?\d+(?:\.\d+)?)%,\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/; - var RE_HSL = /^hsl\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*\)$/; - var RE_HSLA = /^hsla\(\s*(-?\d+(?:\.\d+)?),\s*(-?\d+(?:\.\d+)?)%\s*,\s*(-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)$/; - - var round$2 = Math.round; - - var css2rgb = function (css) { - css = css.toLowerCase().trim(); - var m; - - if (input.format.named) { - try { - return input.format.named(css); - } catch (e) { - // eslint-disable-next-line - } - } - - // rgb(250,20,0) - if ((m = css.match(RE_RGB))) { - var rgb = m.slice(1,4); - for (var i=0; i<3; i++) { - rgb[i] = +rgb[i]; - } - rgb[3] = 1; // default alpha - return rgb; - } - - // rgba(250,20,0,0.4) - if ((m = css.match(RE_RGBA))) { - var rgb$1 = m.slice(1,5); - for (var i$1=0; i$1<4; i$1++) { - rgb$1[i$1] = +rgb$1[i$1]; - } - return rgb$1; - } - - // rgb(100%,0%,0%) - if ((m = css.match(RE_RGB_PCT))) { - var rgb$2 = m.slice(1,4); - for (var i$2=0; i$2<3; i$2++) { - rgb$2[i$2] = round$2(rgb$2[i$2] * 2.55); - } - rgb$2[3] = 1; // default alpha - return rgb$2; - } - - // rgba(100%,0%,0%,0.4) - if ((m = css.match(RE_RGBA_PCT))) { - var rgb$3 = m.slice(1,5); - for (var i$3=0; i$3<3; i$3++) { - rgb$3[i$3] = round$2(rgb$3[i$3] * 2.55); - } - rgb$3[3] = +rgb$3[3]; - return rgb$3; - } - - // hsl(0,100%,50%) - if ((m = css.match(RE_HSL))) { - var hsl = m.slice(1,4); - hsl[1] *= 0.01; - hsl[2] *= 0.01; - var rgb$4 = hsl2rgb_1(hsl); - rgb$4[3] = 1; - return rgb$4; - } - - // hsla(0,100%,50%,0.5) - if ((m = css.match(RE_HSLA))) { - var hsl$1 = m.slice(1,4); - hsl$1[1] *= 0.01; - hsl$1[2] *= 0.01; - var rgb$5 = hsl2rgb_1(hsl$1); - rgb$5[3] = +m[4]; // default alpha = 1 - return rgb$5; - } - }; - - css2rgb.test = function (s) { - return RE_RGB.test(s) || - RE_RGBA.test(s) || - RE_RGB_PCT.test(s) || - RE_RGBA_PCT.test(s) || - RE_HSL.test(s) || - RE_HSLA.test(s); - }; - - var css2rgb_1 = css2rgb; - - var type$3 = utils.type; - - - - - Color_1.prototype.css = function(mode) { - return rgb2css_1(this._rgb, mode); - }; - - chroma_1.css = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['css']) )); - }; - - input.format.css = css2rgb_1; - - input.autodetect.push({ - p: 5, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$3(h) === 'string' && css2rgb_1.test(h)) { - return 'css'; - } - } - }); - - var unpack$8 = utils.unpack; - - input.format.gl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgb = unpack$8(args, 'rgba'); - rgb[0] *= 255; - rgb[1] *= 255; - rgb[2] *= 255; - return rgb; - }; - - chroma_1.gl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['gl']) )); - }; - - Color_1.prototype.gl = function() { - var rgb = this._rgb; - return [rgb[0]/255, rgb[1]/255, rgb[2]/255, rgb[3]]; - }; - - var unpack$9 = utils.unpack; - - var rgb2hcg = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$9(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var c = delta * 100 / 255; - var _g = min / (255 - delta) * 100; - var h; - if (delta === 0) { - h = Number.NaN; - } else { - if (r === max) { h = (g - b) / delta; } - if (g === max) { h = 2+(b - r) / delta; } - if (b === max) { h = 4+(r - g) / delta; } - h *= 60; - if (h < 0) { h += 360; } - } - return [h, c, _g]; - }; - - var rgb2hcg_1 = rgb2hcg; - - var unpack$a = utils.unpack; - var floor = Math.floor; - - /* - * this is basically just HSV with some minor tweaks - * - * hue.. [0..360] - * chroma .. [0..1] - * grayness .. [0..1] - */ - - var hcg2rgb = function () { - var assign, assign$1, assign$2, assign$3, assign$4, assign$5; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$a(args, 'hcg'); - var h = args[0]; - var c = args[1]; - var _g = args[2]; - var r,g,b; - _g = _g * 255; - var _c = c * 255; - if (c === 0) { - r = g = b = _g; - } else { - if (h === 360) { h = 0; } - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 60; - var i = floor(h); - var f = h - i; - var p = _g * (1 - c); - var q = p + _c * (1 - f); - var t = p + _c * f; - var v = p + _c; - switch (i) { - case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break - case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break - case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break - case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break - case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break - case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break - } - } - return [r, g, b, args.length > 3 ? args[3] : 1]; - }; - - var hcg2rgb_1 = hcg2rgb; - - var unpack$b = utils.unpack; - var type$4 = utils.type; - - - - - - - Color_1.prototype.hcg = function() { - return rgb2hcg_1(this._rgb); - }; - - chroma_1.hcg = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hcg']) )); - }; - - input.format.hcg = hcg2rgb_1; - - input.autodetect.push({ - p: 1, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$b(args, 'hcg'); - if (type$4(args) === 'array' && args.length === 3) { - return 'hcg'; - } - } - }); - - var unpack$c = utils.unpack; - var last$4 = utils.last; - var round$3 = Math.round; - - var rgb2hex = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$c(args, 'rgba'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var a = ref[3]; - var mode = last$4(args) || 'auto'; - if (a === undefined) { a = 1; } - if (mode === 'auto') { - mode = a < 1 ? 'rgba' : 'rgb'; - } - r = round$3(r); - g = round$3(g); - b = round$3(b); - var u = r << 16 | g << 8 | b; - var str = "000000" + u.toString(16); //#.toUpperCase(); - str = str.substr(str.length - 6); - var hxa = '0' + round$3(a * 255).toString(16); - hxa = hxa.substr(hxa.length - 2); - switch (mode.toLowerCase()) { - case 'rgba': return ("#" + str + hxa); - case 'argb': return ("#" + hxa + str); - default: return ("#" + str); - } - }; - - var rgb2hex_1 = rgb2hex; - - var RE_HEX = /^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/; - var RE_HEXA = /^#?([A-Fa-f0-9]{8}|[A-Fa-f0-9]{4})$/; - - var hex2rgb = function (hex) { - if (hex.match(RE_HEX)) { - // remove optional leading # - if (hex.length === 4 || hex.length === 7) { - hex = hex.substr(1); - } - // expand short-notation to full six-digit - if (hex.length === 3) { - hex = hex.split(''); - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]; - } - var u = parseInt(hex, 16); - var r = u >> 16; - var g = u >> 8 & 0xFF; - var b = u & 0xFF; - return [r,g,b,1]; - } - - // match rgba hex format, eg #FF000077 - if (hex.match(RE_HEXA)) { - if (hex.length === 5 || hex.length === 9) { - // remove optional leading # - hex = hex.substr(1); - } - // expand short-notation to full eight-digit - if (hex.length === 4) { - hex = hex.split(''); - hex = hex[0]+hex[0]+hex[1]+hex[1]+hex[2]+hex[2]+hex[3]+hex[3]; - } - var u$1 = parseInt(hex, 16); - var r$1 = u$1 >> 24 & 0xFF; - var g$1 = u$1 >> 16 & 0xFF; - var b$1 = u$1 >> 8 & 0xFF; - var a = Math.round((u$1 & 0xFF) / 0xFF * 100) / 100; - return [r$1,g$1,b$1,a]; - } - - // we used to check for css colors here - // if _input.css? and rgb = _input.css hex - // return rgb - - throw new Error(("unknown hex color: " + hex)); - }; - - var hex2rgb_1 = hex2rgb; - - var type$5 = utils.type; - - - - - Color_1.prototype.hex = function(mode) { - return rgb2hex_1(this._rgb, mode); - }; - - chroma_1.hex = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hex']) )); - }; - - input.format.hex = hex2rgb_1; - input.autodetect.push({ - p: 4, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$5(h) === 'string' && [3,4,5,6,7,8,9].indexOf(h.length) >= 0) { - return 'hex'; - } - } - }); - - var unpack$d = utils.unpack; - var TWOPI = utils.TWOPI; - var min = Math.min; - var sqrt = Math.sqrt; - var acos = Math.acos; - - var rgb2hsi = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - borrowed from here: - http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/rgb2hsi.cpp - */ - var ref = unpack$d(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - r /= 255; - g /= 255; - b /= 255; - var h; - var min_ = min(r,g,b); - var i = (r+g+b) / 3; - var s = i > 0 ? 1 - min_/i : 0; - if (s === 0) { - h = NaN; - } else { - h = ((r-g)+(r-b)) / 2; - h /= sqrt((r-g)*(r-g) + (r-b)*(g-b)); - h = acos(h); - if (b > g) { - h = TWOPI - h; - } - h /= TWOPI; - } - return [h*360,s,i]; - }; - - var rgb2hsi_1 = rgb2hsi; - - var unpack$e = utils.unpack; - var limit$1 = utils.limit; - var TWOPI$1 = utils.TWOPI; - var PITHIRD = utils.PITHIRD; - var cos = Math.cos; - - /* - * hue [0..360] - * saturation [0..1] - * intensity [0..1] - */ - var hsi2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - borrowed from here: - http://hummer.stanford.edu/museinfo/doc/examples/humdrum/keyscape2/hsi2rgb.cpp - */ - args = unpack$e(args, 'hsi'); - var h = args[0]; - var s = args[1]; - var i = args[2]; - var r,g,b; - - if (isNaN(h)) { h = 0; } - if (isNaN(s)) { s = 0; } - // normalize hue - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 360; - if (h < 1/3) { - b = (1-s)/3; - r = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - g = 1 - (b+r); - } else if (h < 2/3) { - h -= 1/3; - r = (1-s)/3; - g = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - b = 1 - (r+g); - } else { - h -= 2/3; - g = (1-s)/3; - b = (1+s*cos(TWOPI$1*h)/cos(PITHIRD-TWOPI$1*h))/3; - r = 1 - (g+b); - } - r = limit$1(i*r*3); - g = limit$1(i*g*3); - b = limit$1(i*b*3); - return [r*255, g*255, b*255, args.length > 3 ? args[3] : 1]; - }; - - var hsi2rgb_1 = hsi2rgb; - - var unpack$f = utils.unpack; - var type$6 = utils.type; - - - - - - - Color_1.prototype.hsi = function() { - return rgb2hsi_1(this._rgb); - }; - - chroma_1.hsi = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsi']) )); - }; - - input.format.hsi = hsi2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$f(args, 'hsi'); - if (type$6(args) === 'array' && args.length === 3) { - return 'hsi'; - } - } - }); - - var unpack$g = utils.unpack; - var type$7 = utils.type; - - - - - - - Color_1.prototype.hsl = function() { - return rgb2hsl_1(this._rgb); - }; - - chroma_1.hsl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsl']) )); - }; - - input.format.hsl = hsl2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$g(args, 'hsl'); - if (type$7(args) === 'array' && args.length === 3) { - return 'hsl'; - } - } - }); - - var unpack$h = utils.unpack; - var min$1 = Math.min; - var max$1 = Math.max; - - /* - * supported arguments: - * - rgb2hsv(r,g,b) - * - rgb2hsv([r,g,b]) - * - rgb2hsv({r,g,b}) - */ - var rgb2hsl$1 = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$h(args, 'rgb'); - var r = args[0]; - var g = args[1]; - var b = args[2]; - var min_ = min$1(r, g, b); - var max_ = max$1(r, g, b); - var delta = max_ - min_; - var h,s,v; - v = max_ / 255.0; - if (max_ === 0) { - h = Number.NaN; - s = 0; - } else { - s = delta / max_; - if (r === max_) { h = (g - b) / delta; } - if (g === max_) { h = 2+(b - r) / delta; } - if (b === max_) { h = 4+(r - g) / delta; } - h *= 60; - if (h < 0) { h += 360; } - } - return [h, s, v] - }; - - var rgb2hsv = rgb2hsl$1; - - var unpack$i = utils.unpack; - var floor$1 = Math.floor; - - var hsv2rgb = function () { - var assign, assign$1, assign$2, assign$3, assign$4, assign$5; - - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - args = unpack$i(args, 'hsv'); - var h = args[0]; - var s = args[1]; - var v = args[2]; - var r,g,b; - v *= 255; - if (s === 0) { - r = g = b = v; - } else { - if (h === 360) { h = 0; } - if (h > 360) { h -= 360; } - if (h < 0) { h += 360; } - h /= 60; - - var i = floor$1(h); - var f = h - i; - var p = v * (1 - s); - var q = v * (1 - s * f); - var t = v * (1 - s * (1 - f)); - - switch (i) { - case 0: (assign = [v, t, p], r = assign[0], g = assign[1], b = assign[2]); break - case 1: (assign$1 = [q, v, p], r = assign$1[0], g = assign$1[1], b = assign$1[2]); break - case 2: (assign$2 = [p, v, t], r = assign$2[0], g = assign$2[1], b = assign$2[2]); break - case 3: (assign$3 = [p, q, v], r = assign$3[0], g = assign$3[1], b = assign$3[2]); break - case 4: (assign$4 = [t, p, v], r = assign$4[0], g = assign$4[1], b = assign$4[2]); break - case 5: (assign$5 = [v, p, q], r = assign$5[0], g = assign$5[1], b = assign$5[2]); break - } - } - return [r,g,b,args.length > 3?args[3]:1]; - }; - - var hsv2rgb_1 = hsv2rgb; - - var unpack$j = utils.unpack; - var type$8 = utils.type; - - - - - - - Color_1.prototype.hsv = function() { - return rgb2hsv(this._rgb); - }; - - chroma_1.hsv = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hsv']) )); - }; - - input.format.hsv = hsv2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$j(args, 'hsv'); - if (type$8(args) === 'array' && args.length === 3) { - return 'hsv'; - } - } - }); - - var labConstants = { - // Corresponds roughly to RGB brighter/darker - Kn: 18, - - // D65 standard referent - Xn: 0.950470, - Yn: 1, - Zn: 1.088830, - - t0: 0.137931034, // 4 / 29 - t1: 0.206896552, // 6 / 29 - t2: 0.12841855, // 3 * t1 * t1 - t3: 0.008856452, // t1 * t1 * t1 - }; - - var unpack$k = utils.unpack; - var pow = Math.pow; - - var rgb2lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$k(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var ref$1 = rgb2xyz(r,g,b); - var x = ref$1[0]; - var y = ref$1[1]; - var z = ref$1[2]; - var l = 116 * y - 16; - return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z)]; - }; - - var rgb_xyz = function (r) { - if ((r /= 255) <= 0.04045) { return r / 12.92; } - return pow((r + 0.055) / 1.055, 2.4); - }; - - var xyz_lab = function (t) { - if (t > labConstants.t3) { return pow(t, 1 / 3); } - return t / labConstants.t2 + labConstants.t0; - }; - - var rgb2xyz = function (r,g,b) { - r = rgb_xyz(r); - g = rgb_xyz(g); - b = rgb_xyz(b); - var x = xyz_lab((0.4124564 * r + 0.3575761 * g + 0.1804375 * b) / labConstants.Xn); - var y = xyz_lab((0.2126729 * r + 0.7151522 * g + 0.0721750 * b) / labConstants.Yn); - var z = xyz_lab((0.0193339 * r + 0.1191920 * g + 0.9503041 * b) / labConstants.Zn); - return [x,y,z]; - }; - - var rgb2lab_1 = rgb2lab; - - var unpack$l = utils.unpack; - var pow$1 = Math.pow; - - /* - * L* [0..100] - * a [-100..100] - * b [-100..100] - */ - var lab2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$l(args, 'lab'); - var l = args[0]; - var a = args[1]; - var b = args[2]; - var x,y,z, r,g,b_; - - y = (l + 16) / 116; - x = isNaN(a) ? y : y + a / 500; - z = isNaN(b) ? y : y - b / 200; - - y = labConstants.Yn * lab_xyz(y); - x = labConstants.Xn * lab_xyz(x); - z = labConstants.Zn * lab_xyz(z); - - r = xyz_rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z); // D65 -> sRGB - g = xyz_rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z); - b_ = xyz_rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z); - - return [r,g,b_,args.length > 3 ? args[3] : 1]; - }; - - var xyz_rgb = function (r) { - return 255 * (r <= 0.00304 ? 12.92 * r : 1.055 * pow$1(r, 1 / 2.4) - 0.055) - }; - - var lab_xyz = function (t) { - return t > labConstants.t1 ? t * t * t : labConstants.t2 * (t - labConstants.t0) - }; - - var lab2rgb_1 = lab2rgb; - - var unpack$m = utils.unpack; - var type$9 = utils.type; - - - - - - - Color_1.prototype.lab = function() { - return rgb2lab_1(this._rgb); - }; - - chroma_1.lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['lab']) )); - }; - - input.format.lab = lab2rgb_1; - - input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$m(args, 'lab'); - if (type$9(args) === 'array' && args.length === 3) { - return 'lab'; - } - } - }); - - var unpack$n = utils.unpack; - var RAD2DEG = utils.RAD2DEG; - var sqrt$1 = Math.sqrt; - var atan2 = Math.atan2; - var round$4 = Math.round; - - var lab2lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$n(args, 'lab'); - var l = ref[0]; - var a = ref[1]; - var b = ref[2]; - var c = sqrt$1(a * a + b * b); - var h = (atan2(b, a) * RAD2DEG + 360) % 360; - if (round$4(c*10000) === 0) { h = Number.NaN; } - return [l, c, h]; - }; - - var lab2lch_1 = lab2lch; - - var unpack$o = utils.unpack; - - - - var rgb2lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$o(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - var ref$1 = rgb2lab_1(r,g,b); - var l = ref$1[0]; - var a = ref$1[1]; - var b_ = ref$1[2]; - return lab2lch_1(l,a,b_); - }; - - var rgb2lch_1 = rgb2lch; - - var unpack$p = utils.unpack; - var DEG2RAD = utils.DEG2RAD; - var sin = Math.sin; - var cos$1 = Math.cos; - - var lch2lab = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - /* - Convert from a qualitative parameter h and a quantitative parameter l to a 24-bit pixel. - These formulas were invented by David Dalrymple to obtain maximum contrast without going - out of gamut if the parameters are in the range 0-1. - - A saturation multiplier was added by Gregor Aisch - */ - var ref = unpack$p(args, 'lch'); - var l = ref[0]; - var c = ref[1]; - var h = ref[2]; - if (isNaN(h)) { h = 0; } - h = h * DEG2RAD; - return [l, cos$1(h) * c, sin(h) * c] - }; - - var lch2lab_1 = lch2lab; - - var unpack$q = utils.unpack; - - - - var lch2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$q(args, 'lch'); - var l = args[0]; - var c = args[1]; - var h = args[2]; - var ref = lch2lab_1 (l,c,h); - var L = ref[0]; - var a = ref[1]; - var b_ = ref[2]; - var ref$1 = lab2rgb_1 (L,a,b_); - var r = ref$1[0]; - var g = ref$1[1]; - var b = ref$1[2]; - return [r, g, b, args.length > 3 ? args[3] : 1]; - }; - - var lch2rgb_1 = lch2rgb; - - var unpack$r = utils.unpack; - - - var hcl2rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var hcl = unpack$r(args, 'hcl').reverse(); - return lch2rgb_1.apply(void 0, hcl); - }; - - var hcl2rgb_1 = hcl2rgb; - - var unpack$s = utils.unpack; - var type$a = utils.type; - - - - - - - Color_1.prototype.lch = function() { return rgb2lch_1(this._rgb); }; - Color_1.prototype.hcl = function() { return rgb2lch_1(this._rgb).reverse(); }; - - chroma_1.lch = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['lch']) )); - }; - chroma_1.hcl = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['hcl']) )); - }; - - input.format.lch = lch2rgb_1; - input.format.hcl = hcl2rgb_1; - - ['lch','hcl'].forEach(function (m) { return input.autodetect.push({ - p: 2, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$s(args, m); - if (type$a(args) === 'array' && args.length === 3) { - return m; - } - } - }); }); - - /** - X11 color names - - http://www.w3.org/TR/css3-color/#svg-color - */ - - var w3cx11 = { - aliceblue: '#f0f8ff', - antiquewhite: '#faebd7', - aqua: '#00ffff', - aquamarine: '#7fffd4', - azure: '#f0ffff', - beige: '#f5f5dc', - bisque: '#ffe4c4', - black: '#000000', - blanchedalmond: '#ffebcd', - blue: '#0000ff', - blueviolet: '#8a2be2', - brown: '#a52a2a', - burlywood: '#deb887', - cadetblue: '#5f9ea0', - chartreuse: '#7fff00', - chocolate: '#d2691e', - coral: '#ff7f50', - cornflower: '#6495ed', - cornflowerblue: '#6495ed', - cornsilk: '#fff8dc', - crimson: '#dc143c', - cyan: '#00ffff', - darkblue: '#00008b', - darkcyan: '#008b8b', - darkgoldenrod: '#b8860b', - darkgray: '#a9a9a9', - darkgreen: '#006400', - darkgrey: '#a9a9a9', - darkkhaki: '#bdb76b', - darkmagenta: '#8b008b', - darkolivegreen: '#556b2f', - darkorange: '#ff8c00', - darkorchid: '#9932cc', - darkred: '#8b0000', - darksalmon: '#e9967a', - darkseagreen: '#8fbc8f', - darkslateblue: '#483d8b', - darkslategray: '#2f4f4f', - darkslategrey: '#2f4f4f', - darkturquoise: '#00ced1', - darkviolet: '#9400d3', - deeppink: '#ff1493', - deepskyblue: '#00bfff', - dimgray: '#696969', - dimgrey: '#696969', - dodgerblue: '#1e90ff', - firebrick: '#b22222', - floralwhite: '#fffaf0', - forestgreen: '#228b22', - fuchsia: '#ff00ff', - gainsboro: '#dcdcdc', - ghostwhite: '#f8f8ff', - gold: '#ffd700', - goldenrod: '#daa520', - gray: '#808080', - green: '#008000', - greenyellow: '#adff2f', - grey: '#808080', - honeydew: '#f0fff0', - hotpink: '#ff69b4', - indianred: '#cd5c5c', - indigo: '#4b0082', - ivory: '#fffff0', - khaki: '#f0e68c', - laserlemon: '#ffff54', - lavender: '#e6e6fa', - lavenderblush: '#fff0f5', - lawngreen: '#7cfc00', - lemonchiffon: '#fffacd', - lightblue: '#add8e6', - lightcoral: '#f08080', - lightcyan: '#e0ffff', - lightgoldenrod: '#fafad2', - lightgoldenrodyellow: '#fafad2', - lightgray: '#d3d3d3', - lightgreen: '#90ee90', - lightgrey: '#d3d3d3', - lightpink: '#ffb6c1', - lightsalmon: '#ffa07a', - lightseagreen: '#20b2aa', - lightskyblue: '#87cefa', - lightslategray: '#778899', - lightslategrey: '#778899', - lightsteelblue: '#b0c4de', - lightyellow: '#ffffe0', - lime: '#00ff00', - limegreen: '#32cd32', - linen: '#faf0e6', - magenta: '#ff00ff', - maroon: '#800000', - maroon2: '#7f0000', - maroon3: '#b03060', - mediumaquamarine: '#66cdaa', - mediumblue: '#0000cd', - mediumorchid: '#ba55d3', - mediumpurple: '#9370db', - mediumseagreen: '#3cb371', - mediumslateblue: '#7b68ee', - mediumspringgreen: '#00fa9a', - mediumturquoise: '#48d1cc', - mediumvioletred: '#c71585', - midnightblue: '#191970', - mintcream: '#f5fffa', - mistyrose: '#ffe4e1', - moccasin: '#ffe4b5', - navajowhite: '#ffdead', - navy: '#000080', - oldlace: '#fdf5e6', - olive: '#808000', - olivedrab: '#6b8e23', - orange: '#ffa500', - orangered: '#ff4500', - orchid: '#da70d6', - palegoldenrod: '#eee8aa', - palegreen: '#98fb98', - paleturquoise: '#afeeee', - palevioletred: '#db7093', - papayawhip: '#ffefd5', - peachpuff: '#ffdab9', - peru: '#cd853f', - pink: '#ffc0cb', - plum: '#dda0dd', - powderblue: '#b0e0e6', - purple: '#800080', - purple2: '#7f007f', - purple3: '#a020f0', - rebeccapurple: '#663399', - red: '#ff0000', - rosybrown: '#bc8f8f', - royalblue: '#4169e1', - saddlebrown: '#8b4513', - salmon: '#fa8072', - sandybrown: '#f4a460', - seagreen: '#2e8b57', - seashell: '#fff5ee', - sienna: '#a0522d', - silver: '#c0c0c0', - skyblue: '#87ceeb', - slateblue: '#6a5acd', - slategray: '#708090', - slategrey: '#708090', - snow: '#fffafa', - springgreen: '#00ff7f', - steelblue: '#4682b4', - tan: '#d2b48c', - teal: '#008080', - thistle: '#d8bfd8', - tomato: '#ff6347', - turquoise: '#40e0d0', - violet: '#ee82ee', - wheat: '#f5deb3', - white: '#ffffff', - whitesmoke: '#f5f5f5', - yellow: '#ffff00', - yellowgreen: '#9acd32' - }; - - var w3cx11_1 = w3cx11; - - var type$b = utils.type; - - - - - - Color_1.prototype.name = function() { - var hex = rgb2hex_1(this._rgb, 'rgb'); - for (var i = 0, list = Object.keys(w3cx11_1); i < list.length; i += 1) { - var n = list[i]; - - if (w3cx11_1[n] === hex) { return n.toLowerCase(); } - } - return hex; - }; - - input.format.named = function (name) { - name = name.toLowerCase(); - if (w3cx11_1[name]) { return hex2rgb_1(w3cx11_1[name]); } - throw new Error('unknown color name: '+name); - }; - - input.autodetect.push({ - p: 5, - test: function (h) { - var rest = [], len = arguments.length - 1; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 1 ]; - - if (!rest.length && type$b(h) === 'string' && w3cx11_1[h.toLowerCase()]) { - return 'named'; - } - } - }); - - var unpack$t = utils.unpack; - - var rgb2num = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var ref = unpack$t(args, 'rgb'); - var r = ref[0]; - var g = ref[1]; - var b = ref[2]; - return (r << 16) + (g << 8) + b; - }; - - var rgb2num_1 = rgb2num; - - var type$c = utils.type; - - var num2rgb = function (num) { - if (type$c(num) == "number" && num >= 0 && num <= 0xFFFFFF) { - var r = num >> 16; - var g = (num >> 8) & 0xFF; - var b = num & 0xFF; - return [r,g,b,1]; - } - throw new Error("unknown num color: "+num); - }; - - var num2rgb_1 = num2rgb; - - var type$d = utils.type; - - - - Color_1.prototype.num = function() { - return rgb2num_1(this._rgb); - }; - - chroma_1.num = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['num']) )); - }; - - input.format.num = num2rgb_1; - - input.autodetect.push({ - p: 5, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - if (args.length === 1 && type$d(args[0]) === 'number' && args[0] >= 0 && args[0] <= 0xFFFFFF) { - return 'num'; - } - } - }); - - var unpack$u = utils.unpack; - var type$e = utils.type; - var round$5 = Math.round; - - Color_1.prototype.rgb = function(rnd) { - if ( rnd === void 0 ) rnd=true; - - if (rnd === false) { return this._rgb.slice(0,3); } - return this._rgb.slice(0,3).map(round$5); - }; - - Color_1.prototype.rgba = function(rnd) { - if ( rnd === void 0 ) rnd=true; - - return this._rgb.slice(0,4).map(function (v,i) { - return i<3 ? (rnd === false ? v : round$5(v)) : v; - }); - }; - - chroma_1.rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['rgb']) )); - }; - - input.format.rgb = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgba = unpack$u(args, 'rgba'); - if (rgba[3] === undefined) { rgba[3] = 1; } - return rgba; - }; - - input.autodetect.push({ - p: 3, - test: function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - args = unpack$u(args, 'rgba'); - if (type$e(args) === 'array' && (args.length === 3 || - args.length === 4 && type$e(args[3]) == 'number' && args[3] >= 0 && args[3] <= 1)) { - return 'rgb'; - } - } - }); - - /* - * Based on implementation by Neil Bartlett - * https://github.com/neilbartlett/color-temperature - */ - - var log = Math.log; - - var temperature2rgb = function (kelvin) { - var temp = kelvin / 100; - var r,g,b; - if (temp < 66) { - r = 255; - g = -155.25485562709179 - 0.44596950469579133 * (g = temp-2) + 104.49216199393888 * log(g); - b = temp < 20 ? 0 : -254.76935184120902 + 0.8274096064007395 * (b = temp-10) + 115.67994401066147 * log(b); - } else { - r = 351.97690566805693 + 0.114206453784165 * (r = temp-55) - 40.25366309332127 * log(r); - g = 325.4494125711974 + 0.07943456536662342 * (g = temp-50) - 28.0852963507957 * log(g); - b = 255; - } - return [r,g,b,1]; - }; - - var temperature2rgb_1 = temperature2rgb; - - /* - * Based on implementation by Neil Bartlett - * https://github.com/neilbartlett/color-temperature - **/ - - - var unpack$v = utils.unpack; - var round$6 = Math.round; - - var rgb2temperature = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - var rgb = unpack$v(args, 'rgb'); - var r = rgb[0], b = rgb[2]; - var minTemp = 1000; - var maxTemp = 40000; - var eps = 0.4; - var temp; - while (maxTemp - minTemp > eps) { - temp = (maxTemp + minTemp) * 0.5; - var rgb$1 = temperature2rgb_1(temp); - if ((rgb$1[2] / rgb$1[0]) >= (b / r)) { - maxTemp = temp; - } else { - minTemp = temp; - } - } - return round$6(temp); - }; - - var rgb2temperature_1 = rgb2temperature; - - Color_1.prototype.temp = - Color_1.prototype.kelvin = - Color_1.prototype.temperature = function() { - return rgb2temperature_1(this._rgb); - }; - - chroma_1.temp = - chroma_1.kelvin = - chroma_1.temperature = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - return new (Function.prototype.bind.apply( Color_1, [ null ].concat( args, ['temp']) )); - }; - - input.format.temp = - input.format.kelvin = - input.format.temperature = temperature2rgb_1; - - var type$f = utils.type; - - Color_1.prototype.alpha = function(a, mutate) { - if ( mutate === void 0 ) mutate=false; - - if (a !== undefined && type$f(a) === 'number') { - if (mutate) { - this._rgb[3] = a; - return this; - } - return new Color_1([this._rgb[0], this._rgb[1], this._rgb[2], a], 'rgb'); - } - return this._rgb[3]; - }; - - Color_1.prototype.clipped = function() { - return this._rgb._clipped || false; - }; - - Color_1.prototype.darken = function(amount) { - if ( amount === void 0 ) amount=1; - - var me = this; - var lab = me.lab(); - lab[0] -= labConstants.Kn * amount; - return new Color_1(lab, 'lab').alpha(me.alpha(), true); - }; - - Color_1.prototype.brighten = function(amount) { - if ( amount === void 0 ) amount=1; - - return this.darken(-amount); - }; - - Color_1.prototype.darker = Color_1.prototype.darken; - Color_1.prototype.brighter = Color_1.prototype.brighten; - - Color_1.prototype.get = function(mc) { - var ref = mc.split('.'); - var mode = ref[0]; - var channel = ref[1]; - var src = this[mode](); - if (channel) { - var i = mode.indexOf(channel); - if (i > -1) { return src[i]; } - throw new Error(("unknown channel " + channel + " in mode " + mode)); - } else { - return src; - } - }; - - var type$g = utils.type; - var pow$2 = Math.pow; - - var EPS = 1e-7; - var MAX_ITER = 20; - - Color_1.prototype.luminance = function(lum) { - if (lum !== undefined && type$g(lum) === 'number') { - if (lum === 0) { - // return pure black - return new Color_1([0,0,0,this._rgb[3]], 'rgb'); - } - if (lum === 1) { - // return pure white - return new Color_1([255,255,255,this._rgb[3]], 'rgb'); - } - // compute new color using... - var cur_lum = this.luminance(); - var mode = 'rgb'; - var max_iter = MAX_ITER; - - var test = function (low, high) { - var mid = low.interpolate(high, 0.5, mode); - var lm = mid.luminance(); - if (Math.abs(lum - lm) < EPS || !max_iter--) { - // close enough - return mid; - } - return lm > lum ? test(low, mid) : test(mid, high); - }; - - var rgb = (cur_lum > lum ? test(new Color_1([0,0,0]), this) : test(this, new Color_1([255,255,255]))).rgb(); - return new Color_1(rgb.concat( [this._rgb[3]])); - } - return rgb2luminance.apply(void 0, (this._rgb).slice(0,3)); - }; - - - var rgb2luminance = function (r,g,b) { - // relative luminance - // see http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef - r = luminance_x(r); - g = luminance_x(g); - b = luminance_x(b); - return 0.2126 * r + 0.7152 * g + 0.0722 * b; - }; - - var luminance_x = function (x) { - x /= 255; - return x <= 0.03928 ? x/12.92 : pow$2((x+0.055)/1.055, 2.4); - }; - - var interpolator = {}; - - var type$h = utils.type; - - - var mix = function (col1, col2, f) { - if ( f === void 0 ) f=0.5; - var rest = [], len = arguments.length - 3; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 3 ]; - - var mode = rest[0] || 'lrgb'; - if (!interpolator[mode] && !rest.length) { - // fall back to the first supported mode - mode = Object.keys(interpolator)[0]; - } - if (!interpolator[mode]) { - throw new Error(("interpolation mode " + mode + " is not defined")); - } - if (type$h(col1) !== 'object') { col1 = new Color_1(col1); } - if (type$h(col2) !== 'object') { col2 = new Color_1(col2); } - return interpolator[mode](col1, col2, f) - .alpha(col1.alpha() + f * (col2.alpha() - col1.alpha())); - }; - - Color_1.prototype.mix = - Color_1.prototype.interpolate = function(col2, f) { - if ( f === void 0 ) f=0.5; - var rest = [], len = arguments.length - 2; - while ( len-- > 0 ) rest[ len ] = arguments[ len + 2 ]; - - return mix.apply(void 0, [ this, col2, f ].concat( rest )); - }; - - Color_1.prototype.premultiply = function(mutate) { - if ( mutate === void 0 ) mutate=false; - - var rgb = this._rgb; - var a = rgb[3]; - if (mutate) { - this._rgb = [rgb[0]*a, rgb[1]*a, rgb[2]*a, a]; - return this; - } else { - return new Color_1([rgb[0]*a, rgb[1]*a, rgb[2]*a, a], 'rgb'); - } - }; - - Color_1.prototype.saturate = function(amount) { - if ( amount === void 0 ) amount=1; - - var me = this; - var lch = me.lch(); - lch[1] += labConstants.Kn * amount; - if (lch[1] < 0) { lch[1] = 0; } - return new Color_1(lch, 'lch').alpha(me.alpha(), true); - }; - - Color_1.prototype.desaturate = function(amount) { - if ( amount === void 0 ) amount=1; - - return this.saturate(-amount); - }; - - var type$i = utils.type; - - Color_1.prototype.set = function(mc, value, mutate) { - if ( mutate === void 0 ) mutate=false; - - var ref = mc.split('.'); - var mode = ref[0]; - var channel = ref[1]; - var src = this[mode](); - if (channel) { - var i = mode.indexOf(channel); - if (i > -1) { - if (type$i(value) == 'string') { - switch(value.charAt(0)) { - case '+': src[i] += +value; break; - case '-': src[i] += +value; break; - case '*': src[i] *= +(value.substr(1)); break; - case '/': src[i] /= +(value.substr(1)); break; - default: src[i] = +value; - } - } else if (type$i(value) === 'number') { - src[i] = value; - } else { - throw new Error("unsupported value for Color.set"); - } - var out = new Color_1(src, mode); - if (mutate) { - this._rgb = out._rgb; - return this; - } - return out; - } - throw new Error(("unknown channel " + channel + " in mode " + mode)); - } else { - return src; - } - }; - - var rgb$1 = function (col1, col2, f) { - var xyz0 = col1._rgb; - var xyz1 = col2._rgb; - return new Color_1( - xyz0[0] + f * (xyz1[0]-xyz0[0]), - xyz0[1] + f * (xyz1[1]-xyz0[1]), - xyz0[2] + f * (xyz1[2]-xyz0[2]), - 'rgb' - ) - }; - - // register interpolator - interpolator.rgb = rgb$1; - - var sqrt$2 = Math.sqrt; - var pow$3 = Math.pow; - - var lrgb = function (col1, col2, f) { - var ref = col1._rgb; - var x1 = ref[0]; - var y1 = ref[1]; - var z1 = ref[2]; - var ref$1 = col2._rgb; - var x2 = ref$1[0]; - var y2 = ref$1[1]; - var z2 = ref$1[2]; - return new Color_1( - sqrt$2(pow$3(x1,2) * (1-f) + pow$3(x2,2) * f), - sqrt$2(pow$3(y1,2) * (1-f) + pow$3(y2,2) * f), - sqrt$2(pow$3(z1,2) * (1-f) + pow$3(z2,2) * f), - 'rgb' - ) - }; - - // register interpolator - interpolator.lrgb = lrgb; - - var lab$1 = function (col1, col2, f) { - var xyz0 = col1.lab(); - var xyz1 = col2.lab(); - return new Color_1( - xyz0[0] + f * (xyz1[0]-xyz0[0]), - xyz0[1] + f * (xyz1[1]-xyz0[1]), - xyz0[2] + f * (xyz1[2]-xyz0[2]), - 'lab' - ) - }; - - // register interpolator - interpolator.lab = lab$1; - - var _hsx = function (col1, col2, f, m) { - var assign, assign$1; - - var xyz0, xyz1; - if (m === 'hsl') { - xyz0 = col1.hsl(); - xyz1 = col2.hsl(); - } else if (m === 'hsv') { - xyz0 = col1.hsv(); - xyz1 = col2.hsv(); - } else if (m === 'hcg') { - xyz0 = col1.hcg(); - xyz1 = col2.hcg(); - } else if (m === 'hsi') { - xyz0 = col1.hsi(); - xyz1 = col2.hsi(); - } else if (m === 'lch' || m === 'hcl') { - m = 'hcl'; - xyz0 = col1.hcl(); - xyz1 = col2.hcl(); - } - - var hue0, hue1, sat0, sat1, lbv0, lbv1; - if (m.substr(0, 1) === 'h') { - (assign = xyz0, hue0 = assign[0], sat0 = assign[1], lbv0 = assign[2]); - (assign$1 = xyz1, hue1 = assign$1[0], sat1 = assign$1[1], lbv1 = assign$1[2]); - } - - var sat, hue, lbv, dh; - - if (!isNaN(hue0) && !isNaN(hue1)) { - // both colors have hue - if (hue1 > hue0 && hue1 - hue0 > 180) { - dh = hue1-(hue0+360); - } else if (hue1 < hue0 && hue0 - hue1 > 180) { - dh = hue1+360-hue0; - } else { - dh = hue1 - hue0; - } - hue = hue0 + f * dh; - } else if (!isNaN(hue0)) { - hue = hue0; - if ((lbv1 == 1 || lbv1 == 0) && m != 'hsv') { sat = sat0; } - } else if (!isNaN(hue1)) { - hue = hue1; - if ((lbv0 == 1 || lbv0 == 0) && m != 'hsv') { sat = sat1; } - } else { - hue = Number.NaN; - } - - if (sat === undefined) { sat = sat0 + f * (sat1 - sat0); } - lbv = lbv0 + f * (lbv1-lbv0); - return new Color_1([hue, sat, lbv], m); - }; - - var lch$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'lch'); - }; - - // register interpolator - interpolator.lch = lch$1; - interpolator.hcl = lch$1; - - var num$1 = function (col1, col2, f) { - var c1 = col1.num(); - var c2 = col2.num(); - return new Color_1(c1 + f * (c2-c1), 'num') - }; - - // register interpolator - interpolator.num = num$1; - - var hcg$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hcg'); - }; - - // register interpolator - interpolator.hcg = hcg$1; - - var hsi$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsi'); - }; - - // register interpolator - interpolator.hsi = hsi$1; - - var hsl$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsl'); - }; - - // register interpolator - interpolator.hsl = hsl$1; - - var hsv$1 = function (col1, col2, f) { - return _hsx(col1, col2, f, 'hsv'); - }; - - // register interpolator - interpolator.hsv = hsv$1; - - var clip_rgb$2 = utils.clip_rgb; - var pow$4 = Math.pow; - var sqrt$3 = Math.sqrt; - var PI$1 = Math.PI; - var cos$2 = Math.cos; - var sin$1 = Math.sin; - var atan2$1 = Math.atan2; - - var average = function (colors, mode, weights) { - if ( mode === void 0 ) mode='lrgb'; - if ( weights === void 0 ) weights=null; - - var l = colors.length; - if (!weights) { weights = Array.from(new Array(l)).map(function () { return 1; }); } - // normalize weights - var k = l / weights.reduce(function(a, b) { return a + b; }); - weights.forEach(function (w,i) { weights[i] *= k; }); - // convert colors to Color objects - colors = colors.map(function (c) { return new Color_1(c); }); - if (mode === 'lrgb') { - return _average_lrgb(colors, weights) - } - var first = colors.shift(); - var xyz = first.get(mode); - var cnt = []; - var dx = 0; - var dy = 0; - // initial color - for (var i=0; i= 360) { A$1 -= 360; } - xyz[i$1] = A$1; - } else { - xyz[i$1] = xyz[i$1]/cnt[i$1]; - } - } - alpha /= l; - return (new Color_1(xyz, mode)).alpha(alpha > 0.99999 ? 1 : alpha, true); - }; - - - var _average_lrgb = function (colors, weights) { - var l = colors.length; - var xyz = [0,0,0,0]; - for (var i=0; i < colors.length; i++) { - var col = colors[i]; - var f = weights[i] / l; - var rgb = col._rgb; - xyz[0] += pow$4(rgb[0],2) * f; - xyz[1] += pow$4(rgb[1],2) * f; - xyz[2] += pow$4(rgb[2],2) * f; - xyz[3] += rgb[3] * f; - } - xyz[0] = sqrt$3(xyz[0]); - xyz[1] = sqrt$3(xyz[1]); - xyz[2] = sqrt$3(xyz[2]); - if (xyz[3] > 0.9999999) { xyz[3] = 1; } - return new Color_1(clip_rgb$2(xyz)); - }; - - // minimal multi-purpose interface - - // @requires utils color analyze - - - var type$j = utils.type; - - var pow$5 = Math.pow; - - var scale = function(colors) { - - // constructor - var _mode = 'rgb'; - var _nacol = chroma_1('#ccc'); - var _spread = 0; - // const _fixed = false; - var _domain = [0, 1]; - var _pos = []; - var _padding = [0,0]; - var _classes = false; - var _colors = []; - var _out = false; - var _min = 0; - var _max = 1; - var _correctLightness = false; - var _colorCache = {}; - var _useCache = true; - var _gamma = 1; - - // private methods - - var setColors = function(colors) { - colors = colors || ['#fff', '#000']; - if (colors && type$j(colors) === 'string' && chroma_1.brewer && - chroma_1.brewer[colors.toLowerCase()]) { - colors = chroma_1.brewer[colors.toLowerCase()]; - } - if (type$j(colors) === 'array') { - // handle single color - if (colors.length === 1) { - colors = [colors[0], colors[0]]; - } - // make a copy of the colors - colors = colors.slice(0); - // convert to chroma classes - for (var c=0; c= _classes[i]) { - i++; - } - return i-1; - } - return 0; - }; - - var tMapLightness = function (t) { return t; }; - var tMapDomain = function (t) { return t; }; - - // const classifyValue = function(value) { - // let val = value; - // if (_classes.length > 2) { - // const n = _classes.length-1; - // const i = getClass(value); - // const minc = _classes[0] + ((_classes[1]-_classes[0]) * (0 + (_spread * 0.5))); // center of 1st class - // const maxc = _classes[n-1] + ((_classes[n]-_classes[n-1]) * (1 - (_spread * 0.5))); // center of last class - // val = _min + ((((_classes[i] + ((_classes[i+1] - _classes[i]) * 0.5)) - minc) / (maxc-minc)) * (_max - _min)); - // } - // return val; - // }; - - var getColor = function(val, bypassMap) { - var col, t; - if (bypassMap == null) { bypassMap = false; } - if (isNaN(val) || (val === null)) { return _nacol; } - if (!bypassMap) { - if (_classes && (_classes.length > 2)) { - // find the class - var c = getClass(val); - t = c / (_classes.length-2); - } else if (_max !== _min) { - // just interpolate between min/max - t = (val - _min) / (_max - _min); - } else { - t = 1; - } - } else { - t = val; - } - - // domain map - t = tMapDomain(t); - - if (!bypassMap) { - t = tMapLightness(t); // lightness correction - } - - if (_gamma !== 1) { t = pow$5(t, _gamma); } - - t = _padding[0] + (t * (1 - _padding[0] - _padding[1])); - - t = Math.min(1, Math.max(0, t)); - - var k = Math.floor(t * 10000); - - if (_useCache && _colorCache[k]) { - col = _colorCache[k]; - } else { - if (type$j(_colors) === 'array') { - //for i in [0.._pos.length-1] - for (var i=0; i<_pos.length; i++) { - var p = _pos[i]; - if (t <= p) { - col = _colors[i]; - break; - } - if ((t >= p) && (i === (_pos.length-1))) { - col = _colors[i]; - break; - } - if (t > p && t < _pos[i+1]) { - t = (t-p)/(_pos[i+1]-p); - col = chroma_1.interpolate(_colors[i], _colors[i+1], t, _mode); - break; - } - } - } else if (type$j(_colors) === 'function') { - col = _colors(t); - } - if (_useCache) { _colorCache[k] = col; } - } - return col; - }; - - var resetCache = function () { return _colorCache = {}; }; - - setColors(colors); - - // public interface - - var f = function(v) { - var c = chroma_1(getColor(v)); - if (_out && c[_out]) { return c[_out](); } else { return c; } - }; - - f.classes = function(classes) { - if (classes != null) { - if (type$j(classes) === 'array') { - _classes = classes; - _domain = [classes[0], classes[classes.length-1]]; - } else { - var d = chroma_1.analyze(_domain); - if (classes === 0) { - _classes = [d.min, d.max]; - } else { - _classes = chroma_1.limits(d, 'e', classes); - } - } - return f; - } - return _classes; - }; - - - f.domain = function(domain) { - if (!arguments.length) { - return _domain; - } - _min = domain[0]; - _max = domain[domain.length-1]; - _pos = []; - var k = _colors.length; - if ((domain.length === k) && (_min !== _max)) { - // update positions - for (var i = 0, list = Array.from(domain); i < list.length; i += 1) { - var d = list[i]; - - _pos.push((d-_min) / (_max-_min)); - } - } else { - for (var c=0; c 2) { - // set domain map - var tOut = domain.map(function (d,i) { return i/(domain.length-1); }); - var tBreaks = domain.map(function (d) { return (d - _min) / (_max - _min); }); - if (!tBreaks.every(function (val, i) { return tOut[i] === val; })) { - tMapDomain = function (t) { - if (t <= 0 || t >= 1) { return t; } - var i = 0; - while (t >= tBreaks[i+1]) { i++; } - var f = (t - tBreaks[i]) / (tBreaks[i+1] - tBreaks[i]); - var out = tOut[i] + f * (tOut[i+1] - tOut[i]); - return out; - }; - } - - } - } - _domain = [_min, _max]; - return f; - }; - - f.mode = function(_m) { - if (!arguments.length) { - return _mode; - } - _mode = _m; - resetCache(); - return f; - }; - - f.range = function(colors, _pos) { - setColors(colors); - return f; - }; - - f.out = function(_o) { - _out = _o; - return f; - }; - - f.spread = function(val) { - if (!arguments.length) { - return _spread; - } - _spread = val; - return f; - }; - - f.correctLightness = function(v) { - if (v == null) { v = true; } - _correctLightness = v; - resetCache(); - if (_correctLightness) { - tMapLightness = function(t) { - var L0 = getColor(0, true).lab()[0]; - var L1 = getColor(1, true).lab()[0]; - var pol = L0 > L1; - var L_actual = getColor(t, true).lab()[0]; - var L_ideal = L0 + ((L1 - L0) * t); - var L_diff = L_actual - L_ideal; - var t0 = 0; - var t1 = 1; - var max_iter = 20; - while ((Math.abs(L_diff) > 1e-2) && (max_iter-- > 0)) { - (function() { - if (pol) { L_diff *= -1; } - if (L_diff < 0) { - t0 = t; - t += (t1 - t) * 0.5; - } else { - t1 = t; - t += (t0 - t) * 0.5; - } - L_actual = getColor(t, true).lab()[0]; - return L_diff = L_actual - L_ideal; - })(); - } - return t; - }; - } else { - tMapLightness = function (t) { return t; }; - } - return f; - }; - - f.padding = function(p) { - if (p != null) { - if (type$j(p) === 'number') { - p = [p,p]; - } - _padding = p; - return f; - } else { - return _padding; - } - }; - - f.colors = function(numColors, out) { - // If no arguments are given, return the original colors that were provided - if (arguments.length < 2) { out = 'hex'; } - var result = []; - - if (arguments.length === 0) { - result = _colors.slice(0); - - } else if (numColors === 1) { - result = [f(0.5)]; - - } else if (numColors > 1) { - var dm = _domain[0]; - var dd = _domain[1] - dm; - result = __range__(0, numColors, false).map(function (i) { return f( dm + ((i/(numColors-1)) * dd) ); }); - - } else { // returns all colors based on the defined classes - colors = []; - var samples = []; - if (_classes && (_classes.length > 2)) { - for (var i = 1, end = _classes.length, asc = 1 <= end; asc ? i < end : i > end; asc ? i++ : i--) { - samples.push((_classes[i-1]+_classes[i])*0.5); - } - } else { - samples = _domain; - } - result = samples.map(function (v) { return f(v); }); - } - - if (chroma_1[out]) { - result = result.map(function (c) { return c[out](); }); - } - return result; - }; - - f.cache = function(c) { - if (c != null) { - _useCache = c; - return f; - } else { - return _useCache; - } - }; - - f.gamma = function(g) { - if (g != null) { - _gamma = g; - return f; - } else { - return _gamma; - } - }; - - f.nodata = function(d) { - if (d != null) { - _nacol = chroma_1(d); - return f; - } else { - return _nacol; - } - }; - - return f; - }; - - function __range__(left, right, inclusive) { - var range = []; - var ascending = left < right; - var end = !inclusive ? right : ascending ? right + 1 : right - 1; - for (var i = left; ascending ? i < end : i > end; ascending ? i++ : i--) { - range.push(i); - } - return range; - } - - // - // interpolates between a set of colors uzing a bezier spline - // - - // @requires utils lab - - - - - var bezier = function(colors) { - var assign, assign$1, assign$2; - - var I, lab0, lab1, lab2; - colors = colors.map(function (c) { return new Color_1(c); }); - if (colors.length === 2) { - // linear interpolation - (assign = colors.map(function (c) { return c.lab(); }), lab0 = assign[0], lab1 = assign[1]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return lab0[i] + (t * (lab1[i] - lab0[i])); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 3) { - // quadratic bezier interpolation - (assign$1 = colors.map(function (c) { return c.lab(); }), lab0 = assign$1[0], lab1 = assign$1[1], lab2 = assign$1[2]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t) * lab0[i]) + (2 * (1-t) * t * lab1[i]) + (t * t * lab2[i]); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 4) { - // cubic bezier interpolation - var lab3; - (assign$2 = colors.map(function (c) { return c.lab(); }), lab0 = assign$2[0], lab1 = assign$2[1], lab2 = assign$2[2], lab3 = assign$2[3]); - I = function(t) { - var lab = ([0, 1, 2].map(function (i) { return ((1-t)*(1-t)*(1-t) * lab0[i]) + (3 * (1-t) * (1-t) * t * lab1[i]) + (3 * (1-t) * t * t * lab2[i]) + (t*t*t * lab3[i]); })); - return new Color_1(lab, 'lab'); - }; - } else if (colors.length === 5) { - var I0 = bezier(colors.slice(0, 3)); - var I1 = bezier(colors.slice(2, 5)); - I = function(t) { - if (t < 0.5) { - return I0(t*2); - } else { - return I1((t-0.5)*2); - } - }; - } - return I; - }; - - var bezier_1 = function (colors) { - var f = bezier(colors); - f.scale = function () { return scale(f); }; - return f; - }; - - /* - * interpolates between a set of colors uzing a bezier spline - * blend mode formulas taken from http://www.venture-ware.com/kevin/coding/lets-learn-math-photoshop-blend-modes/ - */ - - - - - var blend = function (bottom, top, mode) { - if (!blend[mode]) { - throw new Error('unknown blend mode ' + mode); - } - return blend[mode](bottom, top); - }; - - var blend_f = function (f) { return function (bottom,top) { - var c0 = chroma_1(top).rgb(); - var c1 = chroma_1(bottom).rgb(); - return chroma_1.rgb(f(c0, c1)); - }; }; - - var each = function (f) { return function (c0, c1) { - var out = []; - out[0] = f(c0[0], c1[0]); - out[1] = f(c0[1], c1[1]); - out[2] = f(c0[2], c1[2]); - return out; - }; }; - - var normal = function (a) { return a; }; - var multiply = function (a,b) { return a * b / 255; }; - var darken$1 = function (a,b) { return a > b ? b : a; }; - var lighten = function (a,b) { return a > b ? a : b; }; - var screen = function (a,b) { return 255 * (1 - (1-a/255) * (1-b/255)); }; - var overlay = function (a,b) { return b < 128 ? 2 * a * b / 255 : 255 * (1 - 2 * (1 - a / 255 ) * ( 1 - b / 255 )); }; - var burn = function (a,b) { return 255 * (1 - (1 - b / 255) / (a/255)); }; - var dodge = function (a,b) { - if (a === 255) { return 255; } - a = 255 * (b / 255) / (1 - a / 255); - return a > 255 ? 255 : a - }; - - // # add = (a,b) -> - // # if (a + b > 255) then 255 else a + b - - blend.normal = blend_f(each(normal)); - blend.multiply = blend_f(each(multiply)); - blend.screen = blend_f(each(screen)); - blend.overlay = blend_f(each(overlay)); - blend.darken = blend_f(each(darken$1)); - blend.lighten = blend_f(each(lighten)); - blend.dodge = blend_f(each(dodge)); - blend.burn = blend_f(each(burn)); - // blend.add = blend_f(each(add)); - - var blend_1 = blend; - - // cubehelix interpolation - // based on D.A. Green "A colour scheme for the display of astronomical intensity images" - // http://astron-soc.in/bulletin/11June/289392011.pdf - - var type$k = utils.type; - var clip_rgb$3 = utils.clip_rgb; - var TWOPI$2 = utils.TWOPI; - var pow$6 = Math.pow; - var sin$2 = Math.sin; - var cos$3 = Math.cos; - - - var cubehelix = function(start, rotations, hue, gamma, lightness) { - if ( start === void 0 ) start=300; - if ( rotations === void 0 ) rotations=-1.5; - if ( hue === void 0 ) hue=1; - if ( gamma === void 0 ) gamma=1; - if ( lightness === void 0 ) lightness=[0,1]; - - var dh = 0, dl; - if (type$k(lightness) === 'array') { - dl = lightness[1] - lightness[0]; - } else { - dl = 0; - lightness = [lightness, lightness]; - } - - var f = function(fract) { - var a = TWOPI$2 * (((start+120)/360) + (rotations * fract)); - var l = pow$6(lightness[0] + (dl * fract), gamma); - var h = dh !== 0 ? hue[0] + (fract * dh) : hue; - var amp = (h * l * (1-l)) / 2; - var cos_a = cos$3(a); - var sin_a = sin$2(a); - var r = l + (amp * ((-0.14861 * cos_a) + (1.78277* sin_a))); - var g = l + (amp * ((-0.29227 * cos_a) - (0.90649* sin_a))); - var b = l + (amp * (+1.97294 * cos_a)); - return chroma_1(clip_rgb$3([r*255,g*255,b*255,1])); - }; - - f.start = function(s) { - if ((s == null)) { return start; } - start = s; - return f; - }; - - f.rotations = function(r) { - if ((r == null)) { return rotations; } - rotations = r; - return f; - }; - - f.gamma = function(g) { - if ((g == null)) { return gamma; } - gamma = g; - return f; - }; - - f.hue = function(h) { - if ((h == null)) { return hue; } - hue = h; - if (type$k(hue) === 'array') { - dh = hue[1] - hue[0]; - if (dh === 0) { hue = hue[1]; } - } else { - dh = 0; - } - return f; - }; - - f.lightness = function(h) { - if ((h == null)) { return lightness; } - if (type$k(h) === 'array') { - lightness = h; - dl = h[1] - h[0]; - } else { - lightness = [h,h]; - dl = 0; - } - return f; - }; - - f.scale = function () { return chroma_1.scale(f); }; - - f.hue(hue); - - return f; - }; - - var digits = '0123456789abcdef'; - - var floor$2 = Math.floor; - var random = Math.random; - - var random_1 = function () { - var code = '#'; - for (var i=0; i<6; i++) { - code += digits.charAt(floor$2(random() * 16)); - } - return new Color_1(code, 'hex'); - }; - - var log$1 = Math.log; - var pow$7 = Math.pow; - var floor$3 = Math.floor; - var abs = Math.abs; - - - var analyze = function (data, key) { - if ( key === void 0 ) key=null; - - var r = { - min: Number.MAX_VALUE, - max: Number.MAX_VALUE*-1, - sum: 0, - values: [], - count: 0 - }; - if (type(data) === 'object') { - data = Object.values(data); - } - data.forEach(function (val) { - if (key && type(val) === 'object') { val = val[key]; } - if (val !== undefined && val !== null && !isNaN(val)) { - r.values.push(val); - r.sum += val; - if (val < r.min) { r.min = val; } - if (val > r.max) { r.max = val; } - r.count += 1; - } - }); - - r.domain = [r.min, r.max]; - - r.limits = function (mode, num) { return limits(r, mode, num); }; - - return r; - }; - - - var limits = function (data, mode, num) { - if ( mode === void 0 ) mode='equal'; - if ( num === void 0 ) num=7; - - if (type(data) == 'array') { - data = analyze(data); - } - var min = data.min; - var max = data.max; - var values = data.values.sort(function (a,b) { return a-b; }); - - if (num === 1) { return [min,max]; } - - var limits = []; - - if (mode.substr(0,1) === 'c') { // continuous - limits.push(min); - limits.push(max); - } - - if (mode.substr(0,1) === 'e') { // equal interval - limits.push(min); - for (var i=1; i 0'); - } - var min_log = Math.LOG10E * log$1(min); - var max_log = Math.LOG10E * log$1(max); - limits.push(min); - for (var i$1=1; i$1 pb - var pr = p - pb; - limits.push((values[pb]*(1-pr)) + (values[pb+1]*pr)); - } - } - limits.push(max); - - } - - else if (mode.substr(0,1) === 'k') { // k-means clustering - /* - implementation based on - http://code.google.com/p/figue/source/browse/trunk/figue.js#336 - simplified for 1-d input values - */ - var cluster; - var n = values.length; - var assignments = new Array(n); - var clusterSizes = new Array(num); - var repeat = true; - var nb_iters = 0; - var centroids = null; - - // get seed values - centroids = []; - centroids.push(min); - for (var i$3=1; i$3 200) { - repeat = false; - } - } - - // finished k-means clustering - // the next part is borrowed from gabrielflor.it - var kClusters = {}; - for (var j$5=0; j$5 l2 ? (l1 + 0.05) / (l2 + 0.05) : (l2 + 0.05) / (l1 + 0.05); - }; - - var sqrt$4 = Math.sqrt; - var atan2$2 = Math.atan2; - var abs$1 = Math.abs; - var cos$4 = Math.cos; - var PI$2 = Math.PI; - - var deltaE = function(a, b, L, C) { - if ( L === void 0 ) L=1; - if ( C === void 0 ) C=1; - - // Delta E (CMC) - // see http://www.brucelindbloom.com/index.html?Eqn_DeltaE_CMC.html - a = new Color_1(a); - b = new Color_1(b); - var ref = Array.from(a.lab()); - var L1 = ref[0]; - var a1 = ref[1]; - var b1 = ref[2]; - var ref$1 = Array.from(b.lab()); - var L2 = ref$1[0]; - var a2 = ref$1[1]; - var b2 = ref$1[2]; - var c1 = sqrt$4((a1 * a1) + (b1 * b1)); - var c2 = sqrt$4((a2 * a2) + (b2 * b2)); - var sl = L1 < 16.0 ? 0.511 : (0.040975 * L1) / (1.0 + (0.01765 * L1)); - var sc = ((0.0638 * c1) / (1.0 + (0.0131 * c1))) + 0.638; - var h1 = c1 < 0.000001 ? 0.0 : (atan2$2(b1, a1) * 180.0) / PI$2; - while (h1 < 0) { h1 += 360; } - while (h1 >= 360) { h1 -= 360; } - var t = (h1 >= 164.0) && (h1 <= 345.0) ? (0.56 + abs$1(0.2 * cos$4((PI$2 * (h1 + 168.0)) / 180.0))) : (0.36 + abs$1(0.4 * cos$4((PI$2 * (h1 + 35.0)) / 180.0))); - var c4 = c1 * c1 * c1 * c1; - var f = sqrt$4(c4 / (c4 + 1900.0)); - var sh = sc * (((f * t) + 1.0) - f); - var delL = L1 - L2; - var delC = c1 - c2; - var delA = a1 - a2; - var delB = b1 - b2; - var dH2 = ((delA * delA) + (delB * delB)) - (delC * delC); - var v1 = delL / (L * sl); - var v2 = delC / (C * sc); - var v3 = sh; - return sqrt$4((v1 * v1) + (v2 * v2) + (dH2 / (v3 * v3))); - }; - - // simple Euclidean distance - var distance = function(a, b, mode) { - if ( mode === void 0 ) mode='lab'; - - // Delta E (CIE 1976) - // see http://www.brucelindbloom.com/index.html?Equations.html - a = new Color_1(a); - b = new Color_1(b); - var l1 = a.get(mode); - var l2 = b.get(mode); - var sum_sq = 0; - for (var i in l1) { - var d = (l1[i] || 0) - (l2[i] || 0); - sum_sq += d*d; - } - return Math.sqrt(sum_sq); - }; - - var valid = function () { - var args = [], len = arguments.length; - while ( len-- ) args[ len ] = arguments[ len ]; - - try { - new (Function.prototype.bind.apply( Color_1, [ null ].concat( args) )); - return true; - } catch (e) { - return false; - } - }; - - // some pre-defined color scales: - - - - - var scales = { - cool: function cool() { return scale([chroma_1.hsl(180,1,.9), chroma_1.hsl(250,.7,.4)]) }, - hot: function hot() { return scale(['#000','#f00','#ff0','#fff']).mode('rgb') } - }; - - /** - ColorBrewer colors for chroma.js - - Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The - Pennsylvania State University. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software distributed - under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. See the License for the - specific language governing permissions and limitations under the License. - */ - - var colorbrewer = { - // sequential - OrRd: ['#fff7ec', '#fee8c8', '#fdd49e', '#fdbb84', '#fc8d59', '#ef6548', '#d7301f', '#b30000', '#7f0000'], - PuBu: ['#fff7fb', '#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858'], - BuPu: ['#f7fcfd', '#e0ecf4', '#bfd3e6', '#9ebcda', '#8c96c6', '#8c6bb1', '#88419d', '#810f7c', '#4d004b'], - Oranges: ['#fff5eb', '#fee6ce', '#fdd0a2', '#fdae6b', '#fd8d3c', '#f16913', '#d94801', '#a63603', '#7f2704'], - BuGn: ['#f7fcfd', '#e5f5f9', '#ccece6', '#99d8c9', '#66c2a4', '#41ae76', '#238b45', '#006d2c', '#00441b'], - YlOrBr: ['#ffffe5', '#fff7bc', '#fee391', '#fec44f', '#fe9929', '#ec7014', '#cc4c02', '#993404', '#662506'], - YlGn: ['#ffffe5', '#f7fcb9', '#d9f0a3', '#addd8e', '#78c679', '#41ab5d', '#238443', '#006837', '#004529'], - Reds: ['#fff5f0', '#fee0d2', '#fcbba1', '#fc9272', '#fb6a4a', '#ef3b2c', '#cb181d', '#a50f15', '#67000d'], - RdPu: ['#fff7f3', '#fde0dd', '#fcc5c0', '#fa9fb5', '#f768a1', '#dd3497', '#ae017e', '#7a0177', '#49006a'], - Greens: ['#f7fcf5', '#e5f5e0', '#c7e9c0', '#a1d99b', '#74c476', '#41ab5d', '#238b45', '#006d2c', '#00441b'], - YlGnBu: ['#ffffd9', '#edf8b1', '#c7e9b4', '#7fcdbb', '#41b6c4', '#1d91c0', '#225ea8', '#253494', '#081d58'], - Purples: ['#fcfbfd', '#efedf5', '#dadaeb', '#bcbddc', '#9e9ac8', '#807dba', '#6a51a3', '#54278f', '#3f007d'], - GnBu: ['#f7fcf0', '#e0f3db', '#ccebc5', '#a8ddb5', '#7bccc4', '#4eb3d3', '#2b8cbe', '#0868ac', '#084081'], - Greys: ['#ffffff', '#f0f0f0', '#d9d9d9', '#bdbdbd', '#969696', '#737373', '#525252', '#252525', '#000000'], - YlOrRd: ['#ffffcc', '#ffeda0', '#fed976', '#feb24c', '#fd8d3c', '#fc4e2a', '#e31a1c', '#bd0026', '#800026'], - PuRd: ['#f7f4f9', '#e7e1ef', '#d4b9da', '#c994c7', '#df65b0', '#e7298a', '#ce1256', '#980043', '#67001f'], - Blues: ['#f7fbff', '#deebf7', '#c6dbef', '#9ecae1', '#6baed6', '#4292c6', '#2171b5', '#08519c', '#08306b'], - PuBuGn: ['#fff7fb', '#ece2f0', '#d0d1e6', '#a6bddb', '#67a9cf', '#3690c0', '#02818a', '#016c59', '#014636'], - Viridis: ['#440154', '#482777', '#3f4a8a', '#31678e', '#26838f', '#1f9d8a', '#6cce5a', '#b6de2b', '#fee825'], - - // diverging - - Spectral: ['#9e0142', '#d53e4f', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#e6f598', '#abdda4', '#66c2a5', '#3288bd', '#5e4fa2'], - RdYlGn: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee08b', '#ffffbf', '#d9ef8b', '#a6d96a', '#66bd63', '#1a9850', '#006837'], - RdBu: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#f7f7f7', '#d1e5f0', '#92c5de', '#4393c3', '#2166ac', '#053061'], - PiYG: ['#8e0152', '#c51b7d', '#de77ae', '#f1b6da', '#fde0ef', '#f7f7f7', '#e6f5d0', '#b8e186', '#7fbc41', '#4d9221', '#276419'], - PRGn: ['#40004b', '#762a83', '#9970ab', '#c2a5cf', '#e7d4e8', '#f7f7f7', '#d9f0d3', '#a6dba0', '#5aae61', '#1b7837', '#00441b'], - RdYlBu: ['#a50026', '#d73027', '#f46d43', '#fdae61', '#fee090', '#ffffbf', '#e0f3f8', '#abd9e9', '#74add1', '#4575b4', '#313695'], - BrBG: ['#543005', '#8c510a', '#bf812d', '#dfc27d', '#f6e8c3', '#f5f5f5', '#c7eae5', '#80cdc1', '#35978f', '#01665e', '#003c30'], - RdGy: ['#67001f', '#b2182b', '#d6604d', '#f4a582', '#fddbc7', '#ffffff', '#e0e0e0', '#bababa', '#878787', '#4d4d4d', '#1a1a1a'], - PuOr: ['#7f3b08', '#b35806', '#e08214', '#fdb863', '#fee0b6', '#f7f7f7', '#d8daeb', '#b2abd2', '#8073ac', '#542788', '#2d004b'], - - // qualitative - - Set2: ['#66c2a5', '#fc8d62', '#8da0cb', '#e78ac3', '#a6d854', '#ffd92f', '#e5c494', '#b3b3b3'], - Accent: ['#7fc97f', '#beaed4', '#fdc086', '#ffff99', '#386cb0', '#f0027f', '#bf5b17', '#666666'], - Set1: ['#e41a1c', '#377eb8', '#4daf4a', '#984ea3', '#ff7f00', '#ffff33', '#a65628', '#f781bf', '#999999'], - Set3: ['#8dd3c7', '#ffffb3', '#bebada', '#fb8072', '#80b1d3', '#fdb462', '#b3de69', '#fccde5', '#d9d9d9', '#bc80bd', '#ccebc5', '#ffed6f'], - Dark2: ['#1b9e77', '#d95f02', '#7570b3', '#e7298a', '#66a61e', '#e6ab02', '#a6761d', '#666666'], - Paired: ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'], - Pastel2: ['#b3e2cd', '#fdcdac', '#cbd5e8', '#f4cae4', '#e6f5c9', '#fff2ae', '#f1e2cc', '#cccccc'], - Pastel1: ['#fbb4ae', '#b3cde3', '#ccebc5', '#decbe4', '#fed9a6', '#ffffcc', '#e5d8bd', '#fddaec', '#f2f2f2'], - }; - - // add lowercase aliases for case-insensitive matches - for (var i$1 = 0, list$1 = Object.keys(colorbrewer); i$1 < list$1.length; i$1 += 1) { - var key = list$1[i$1]; - - colorbrewer[key.toLowerCase()] = colorbrewer[key]; - } - - var colorbrewer_1 = colorbrewer; - - // feel free to comment out anything to rollup - // a smaller chroma.js built - - // io --> convert colors - - - - - - - - - - - - - - - - // operators --> modify existing Colors - - - - - - - - - - - // interpolators - - - - - - - - - - - // generators -- > create new colors - chroma_1.average = average; - chroma_1.bezier = bezier_1; - chroma_1.blend = blend_1; - chroma_1.cubehelix = cubehelix; - chroma_1.mix = chroma_1.interpolate = mix; - chroma_1.random = random_1; - chroma_1.scale = scale; - - // other utility methods - chroma_1.analyze = analyze_1.analyze; - chroma_1.contrast = contrast; - chroma_1.deltaE = deltaE; - chroma_1.distance = distance; - chroma_1.limits = analyze_1.limits; - chroma_1.valid = valid; - - // scale - chroma_1.scales = scales; - - // colors - chroma_1.colors = w3cx11_1; - chroma_1.brewer = colorbrewer_1; - - var chroma_js = chroma_1; - - return chroma_js; - -}))); -}); - -function generateColorVariables(key, format, colorStr, opacity, altFormats = []) { - const parsedColor = chroma(colorStr); - const alts = altFormats.reduce((a, alt) => { - a.push(...generateColorVariables(alt.id, alt.format, colorStr, opacity)); - return a; - }, []); - switch (format) { - case 'hex': - return [{ key, value: colorStr }, ...alts]; - case 'hsl': - return [ - { - key, - value: parsedColor.css('hsl'), - }, - ...alts, - ]; - case 'hsl-values': { - const hsl = parsedColor.hsl(); - const alpha = opacity ? `,${parsedColor.alpha()}` : ''; - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - return [ - { - key, - value: `${h},${hsl[1] * 100}%,${hsl[2] * 100}%${alpha}`, - }, - ...alts, - ]; - } - case 'hsl-split': { - const hsl = parsedColor.hsl(); - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - const out = [ - { - key: `${key}-h`, - value: h.toString(), - }, - { - key: `${key}-s`, - value: (hsl[1] * 100).toString() + '%', - }, - { - key: `${key}-l`, - value: (hsl[2] * 100).toString() + '%', - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - case 'hsl-split-decimal': { - const hsl = parsedColor.hsl(); - const h = isNaN(hsl[0]) ? 0 : hsl[0]; - const out = [ - { - key: `${key}-h`, - value: h.toString(), - }, - { - key: `${key}-s`, - value: hsl[1].toString(), - }, - { - key: `${key}-l`, - value: hsl[2].toString(), - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - case 'rgb': - return [ - { - key, - value: parsedColor.css(), - }, - ...alts, - ]; - case 'rgb-values': { - const rgb = parsedColor.rgb(); - const alpha = opacity ? `,${parsedColor.alpha()}` : ''; - return [ - { - key, - value: `${rgb[0]},${rgb[1]},${rgb[2]}${alpha}`, - }, - ...alts, - ]; - } - case 'rgb-split': { - const rgb = parsedColor.rgb(); - const out = [ - { - key: `${key}-r`, - value: rgb[0].toString(), - }, - { - key: `${key}-g`, - value: rgb[1].toString(), - }, - { - key: `${key}-b`, - value: rgb[2].toString(), - }, - ...alts, - ]; - if (opacity) - out.push({ - key: `${key}-a`, - value: parsedColor.alpha().toString(), - }); - return out; - } - } -} -function pushColors(arr, id, from, to, format, step, pad) { - const scale = chroma.scale([from.trim(), to.trim()]).domain([0, 100]); - for (let i = 0; i <= 100; i++) { - if (i % step === 0) { - const c = scale(i); - arr.push(...generateColorVariables(`${id}-${i.toString().padStart(pad, '0')}`, format, c.css(), c.alpha() !== 1)); - } - } -} -function getCSSVariables(settings, config, gradients, settingsManager) { - const vars = []; - const themedLight = []; - const themedDark = []; - const gradientCandidates = {}; - const gradientCandidatesLight = {}; - const gradientCandidatesDark = {}; - const seenGradientSections = new Set(); - for (const key in settings) { - const [sectionId, settingId, modifier] = key.split('@@'); - const section = config[sectionId]; - if (!section) - continue; - const setting = config[sectionId][settingId]; - if (!setting) - continue; - const value = settings[key]; - switch (setting.type) { - case SettingType.VARIABLE_NUMBER: - case SettingType.VARIABLE_NUMBER_SLIDER: { - const format = setting - .format; - const val = value !== undefined - ? value - : setting.default; - vars.push({ - key: setting.id, - value: `${val}${format || ''}`, - }); - continue; - } - case SettingType.VARIABLE_TEXT: - case SettingType.VARIABLE_SELECT: { - const format_text = setting; - let text = value !== undefined - ? value.toString() - : format_text.default.toString(); - if (format_text.quotes) { - if (text !== `""`) { - text = `'${text}'`; - } - else { - text = ``; - } - } - vars.push({ - key: setting.id, - value: text, - }); - continue; - } - case SettingType.VARIABLE_COLOR: { - if (!seenGradientSections.has(sectionId)) - seenGradientSections.add(sectionId); - const colorSetting = setting; - const color = value !== undefined ? value.toString() : colorSetting.default; - vars.push(...generateColorVariables(setting.id, colorSetting.format, color, colorSetting.opacity, colorSetting['alt-format'])); - generateColorVariables(setting.id, 'rgb', color, colorSetting.opacity).forEach((kv) => { - gradientCandidates[kv.key] = kv.value; - }); - continue; - } - case SettingType.VARIABLE_THEMED_COLOR: { - if (!seenGradientSections.has(sectionId)) - seenGradientSections.add(sectionId); - const colorSetting = setting; - const colorKey = modifier === 'light' ? 'default-light' : 'default-dark'; - const color = value !== undefined ? value.toString() : colorSetting[colorKey]; - (modifier === 'light' ? themedLight : themedDark).push(...generateColorVariables(setting.id, colorSetting.format, color, colorSetting.opacity, colorSetting['alt-format'])); - generateColorVariables(setting.id, 'rgb', color, colorSetting.opacity).forEach((kv) => { - if (modifier === 'light') { - gradientCandidatesLight[kv.key] = kv.value; - } - else { - gradientCandidatesDark[kv.key] = kv.value; - } - }); - continue; - } - } - } - seenGradientSections.forEach((sectionId) => { - const g = gradients[sectionId]; - if (!g) - return; - g.forEach((def) => { - var _a, _b, _c; - const { from, to, format, step, id, pad = 0 } = def; - if (gradientCandidatesLight[from]) { - const fromColor = gradientCandidatesLight[from]; - const toColor = gradientCandidatesLight[to] || - ((_a = settingsManager.plugin.getCSSVar(to).light) === null || _a === void 0 ? void 0 : _a.trim()); - if (toColor) { - pushColors(themedLight, id, fromColor, toColor, format, step, pad); - } - } - if (gradientCandidatesDark[from]) { - const fromColor = gradientCandidatesDark[from]; - const toColor = gradientCandidatesDark[to] || - ((_b = settingsManager.plugin.getCSSVar(to).dark) === null || _b === void 0 ? void 0 : _b.trim()); - if (toColor) { - pushColors(themedDark, id, fromColor, toColor, format, step, pad); - } - } - if (gradientCandidates[from]) { - const fromColor = gradientCandidates[from]; - const toColor = gradientCandidates[to] || - ((_c = settingsManager.plugin.getCSSVar(to).current) === null || _c === void 0 ? void 0 : _c.trim()); - if (toColor) { - pushColors(vars, id, fromColor, toColor, format, step, pad); - } - } - }); - }); - return [vars, themedLight, themedDark]; -} -class CSSSettingsManager { - constructor(plugin) { - this.config = {}; - this.gradients = {}; - this.plugin = plugin; - this.settings = {}; - this.styleTag = document.createElement('style'); - this.styleTag.id = 'css-settings-manager'; - document.getElementsByTagName('head')[0].appendChild(this.styleTag); - } - cleanup() { - this.styleTag.remove(); - this.removeClasses(); - } - save() { - return __awaiter(this, void 0, void 0, function* () { - yield this.plugin.saveData(this.settings); - this.setCSSVariables(); - }); - } - load() { - return __awaiter(this, void 0, void 0, function* () { - this.settings = Object.assign({}, yield this.plugin.loadData()); - }); - } - initClasses() { - Object.keys(this.config).forEach((section) => { - const config = this.config[section]; - Object.keys(config).forEach((settingId) => { - const setting = config[settingId]; - if (setting.type === SettingType.CLASS_TOGGLE) { - const classToggle = setting; - const value = this.getSetting(section, settingId); - if (value === true || - (value === undefined && classToggle.default === true)) { - document.body.classList.add(setting.id); - } - } - else if (setting.type === SettingType.CLASS_SELECT) { - const multiToggle = setting; - let value = this.getSetting(section, settingId); - if (value === undefined && !!multiToggle.default) { - value = multiToggle.default; - } - else if (value === undefined) { - value = 'none'; - } - if (value !== 'none') { - document.body.classList.add(value); - } - } - }); - }); - } - removeClasses() { - Object.keys(this.config).forEach((section) => { - const config = this.config[section]; - Object.keys(config).forEach((settingId) => { - const setting = config[settingId]; - if (setting.type === SettingType.CLASS_TOGGLE) { - document.body.classList.remove(setting.id); - } - else if (setting.type === SettingType.CLASS_SELECT) { - const multiToggle = setting; - multiToggle.options.forEach((v) => { - if (typeof v === 'string') { - document.body.classList.remove(v); - } - else { - document.body.classList.remove(v.value); - } - }); - } - }); - }); - } - setCSSVariables() { - const [vars, themedLight, themedDark] = getCSSVariables(this.settings, this.config, this.gradients, this); - this.styleTag.innerText = ` - body.css-settings-manager { - ${vars.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - - body.theme-light.css-settings-manager { - ${themedLight.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - - body.theme-dark.css-settings-manager { - ${themedDark.reduce((combined, current) => { - return combined + `--${current.key}: ${current.value}; `; - }, '')} - } - ` - .trim() - .replace(/[\r\n\s]+/g, ' '); - this.plugin.app.workspace.trigger('css-change', { - source: 'style-settings', - }); - } - setConfig(settings) { - this.config = {}; - this.gradients = {}; - settings.forEach((s) => { - this.config[s.id] = {}; - s.settings.forEach((setting) => { - this.config[s.id][setting.id] = setting; - if (setting.type === SettingType.COLOR_GRADIENT) { - if (!this.gradients[s.id]) - this.gradients[s.id] = []; - this.gradients[s.id].push(setting); - } - }); - }); - let pruned = false; - for (const key in this.settings) { - const [sectionId, settingId] = key.split('@@'); - if (this.config[sectionId] && !this.config[sectionId][settingId]) { - delete this.settings[key]; - pruned = true; - } - } - if (pruned) { - this.save(); - } - else { - this.setCSSVariables(); - } - } - getSetting(sectionId, settingId) { - return this.settings[`${sectionId}@@${settingId}`]; - } - getSettings(sectionId, ids) { - return ids.reduce((settings, id) => { - const fullId = `${sectionId}@@${id}`; - const alts = ['dark', 'light']; - if (this.settings[fullId]) { - settings[fullId] = this.settings[fullId]; - } - alts.forEach((alt) => { - const id = `${fullId}@@${alt}`; - if (this.settings[id]) { - settings[id] = this.settings[id]; - } - }); - return settings; - }, {}); - } - setSetting(sectionId, settingId, value) { - this.settings[`${sectionId}@@${settingId}`] = value; - this.save(); - this.removeClasses(); - this.initClasses(); - } - setSettings(settings) { - Object.keys(settings).forEach((id) => { - this.settings[id] = settings[id]; - }); - this.removeClasses(); - this.initClasses(); - return this.save(); - } - clearSetting(sectionId, settingId) { - delete this.settings[`${sectionId}@@${settingId}`]; - this.save(); - this.removeClasses(); - this.initClasses(); - } - clearSection(sectionId) { - Object.keys(this.settings).forEach((key) => { - const [section] = key.split('@@'); - if (section === sectionId) { - delete this.settings[key]; - } - }); - this.save(); - this.removeClasses(); - this.initClasses(); - } - export(section, config) { - new ExportModal(this.plugin.app, this.plugin, section, config).open(); - } - import() { - new ImportModal(this.plugin.app, this.plugin).open(); - } -} - -const ar = {}; - -const cz = {}; - -const da = {}; - -const de = { - 'Default:': 'Standard:', - 'Error:': 'Fehler:', - 'missing default light value, or value is not in a valid color format': 'Fehlender heller standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default dark value, or value is not in a valid color format': 'Fehlender dunkler standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default value, or value is not in a valid color format': 'Fehlender standard Wert oder Wert ist in keinem validen Farb-Format', - 'missing default value': 'Fehlender standard Wert', -}; - -const en = { - 'Default:': 'Default:', - 'Error:': 'Error:', - 'missing default light value, or value is not in a valid color format': 'missing default light value, or value is not in a valid color format', - 'missing default dark value, or value is not in a valid color format': 'missing default dark value, or value is not in a valid color format', - 'missing default value, or value is not in a valid color format': 'missing default value, or value is not in a valid color format', - 'missing default value': 'missing default value', -}; - -const es = {}; - -const fr = {}; - -const hi = {}; - -const id = {}; - -const it = {}; - -const ja = {}; - -const ko = {}; - -const nl = { - 'Default:': 'Standaard:', - 'Error:': 'Error:', - 'missing default light value, or value is not in a valid color format': 'Geen standaard waarde voor het lichte thema, of de waarde is niet in het goede formaat', - 'missing default dark value, or value is not in a valid color format': 'Geen standaard waarde voor het donkere thema, of de waarde is niet in het goede formaat', - 'missing default value, or value is not in a valid color format': 'Geen standaard waarde, of de waarde is niet in het goede formaat', - 'missing default value': 'Geen standaard waarde', -}; - -const no = {}; - -const pl = {}; - -const pt = {}; - -const ptBr = {}; - -const ro = {}; - -const ru = {}; - -const sq = {}; - -const tr = {}; - -const uk = {}; - -const zh = { - 'Default:': '默认:', - 'Error:': '错误:', - 'missing default light value, or value is not in a valid color format': '缺少默认的浅色模式色值,或该色值没有采用一个有效的颜色格式', - 'missing default dark value, or value is not in a valid color format': '缺少默认的深色模式色值,或该色值没有采用一个有效的颜色格式', - 'missing default value, or value is not in a valid color format': '缺少默认色值,或该色值没有采用一个有效的颜色格式', - 'missing default value': '缺少默认色值', -}; - -const zhTw = {}; - -const lang = window.localStorage.getItem('language'); -const localeMap = { - ar, - cz, - da, - de, - en, - es, - fr, - hi, - id, - it, - ja, - ko, - nl, - no, - pl, - 'pt-BR': ptBr, - pt, - ro, - ru, - sq, - tr, - uk, - 'zh-TW': zhTw, - zh, -}; -const locale = localeMap[lang || 'en']; -function t(str) { - if (!locale) { - console.error('Error: Style Settings locale not found', lang); - } - return (locale && locale[str]) || en[str]; -} - -const settingRegExp = /\/\*!?\s*@settings[\r\n]+?([\s\S]+?)\*\//g; -const nameRegExp = /^name:\s*(.+)$/m; -function getTitle(config) { - if (lang) { - return config[`title.${lang}`] || config.title; - } - return config.title; -} -function getDescription(config) { - if (lang) { - return (config[`description.${lang}`] || - config.description); - } - return config.description; -} -function isValidDefaultColor(color) { - return /^(#|rgb|hsl)/.test(color); -} -function getPickrSettings(opts) { - const { el, isView, containerEl, swatches, opacity, defaultColor } = opts; - return { - el, - container: isView ? document.body : containerEl, - theme: 'nano', - swatches, - lockOpacity: !opacity, - default: defaultColor, - position: 'left-middle', - components: { - preview: true, - hue: true, - opacity: !!opacity, - interaction: { - hex: true, - rgba: true, - hsla: true, - input: true, - cancel: true, - save: true, - }, - }, - }; -} -function onPickrCancel(instance) { - instance.hide(); -} -function sanitizeText(str) { - if (str === '') { - return `""`; - } - return str.replace(/[;<>]/g, ''); -} -function createDescription(description, def, defLabel) { - const fragment = createFragment(); - if (description) { - fragment.appendChild(document.createTextNode(description)); - } - if (def) { - const small = createEl('small'); - small.appendChild(createEl('strong', { text: `${t('Default:')} ` })); - small.appendChild(document.createTextNode(defLabel || def)); - const div = createEl('div'); - div.appendChild(small); - fragment.appendChild(div); - } - return fragment; -} - -var fuzzysort = createCommonjsModule(function (module) { -((root, UMD) => { - if(module.exports) module.exports = UMD(); - else root['fuzzysort'] = UMD(); -})(commonjsGlobal, _ => { - - var single = (search, target) => { if(search=='farzher')return {target:"farzher was here (^-^*)/",score:0,_indexes:[0]} - if(!search || !target) return NULL - - var preparedSearch = getPreparedSearch(search); - if(!isObj(target)) target = getPrepared(target); - - var searchBitflags = preparedSearch.bitflags; - if((searchBitflags & target._bitflags) !== searchBitflags) return NULL - - return algorithm(preparedSearch, target) - }; - - - var go = (search, targets, options) => { if(search=='farzher')return [{target:"farzher was here (^-^*)/",score:0,_indexes:[0],obj:targets?targets[0]:NULL}] - if(!search) return options&&options.all ? all(search, targets, options) : noResults - - var preparedSearch = getPreparedSearch(search); - var searchBitflags = preparedSearch.bitflags; - preparedSearch.containsSpace; - - var threshold = options&&options.threshold || INT_MIN; - var limit = options&&options['limit'] || INT_MAX; // for some reason only limit breaks when minified - - var resultsLen = 0; var limitedCount = 0; - var targetsLen = targets.length; - - // This code is copy/pasted 3 times for performance reasons [options.keys, options.key, no keys] - - // options.key - if(options && options.key) { - var key = options.key; - for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]; - var target = getValue(obj, key); - if(!target) continue - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) continue - var result = algorithm(preparedSearch, target); - if(result === NULL) continue - if(result.score < threshold) continue - - // have to clone result so duplicate targets from different obj can each reference the correct obj - result = {target:result.target, _targetLower:'', _targetLowerCodes:NULL, _nextBeginningIndexes:NULL, _bitflags:0, score:result.score, _indexes:result._indexes, obj:obj}; // hidden - - if(resultsLen < limit) { q.add(result); ++resultsLen; } - else { - ++limitedCount; - if(result.score > q.peek().score) q.replaceTop(result); - } - } - - // options.keys - } else if(options && options.keys) { - var scoreFn = options['scoreFn'] || defaultScoreFn; - var keys = options.keys; - var keysLen = keys.length; - for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]; - var objResults = new Array(keysLen); - for (var keyI = 0; keyI < keysLen; ++keyI) { - var key = keys[keyI]; - var target = getValue(obj, key); - if(!target) { objResults[keyI] = NULL; continue } - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) objResults[keyI] = NULL; - else objResults[keyI] = algorithm(preparedSearch, target); - } - objResults.obj = obj; // before scoreFn so scoreFn can use it - var score = scoreFn(objResults); - if(score === NULL) continue - if(score < threshold) continue - objResults.score = score; - if(resultsLen < limit) { q.add(objResults); ++resultsLen; } - else { - ++limitedCount; - if(score > q.peek().score) q.replaceTop(objResults); - } - } - - // no keys - } else { - for(var i = 0; i < targetsLen; ++i) { var target = targets[i]; - if(!target) continue - if(!isObj(target)) target = getPrepared(target); - - if((searchBitflags & target._bitflags) !== searchBitflags) continue - var result = algorithm(preparedSearch, target); - if(result === NULL) continue - if(result.score < threshold) continue - if(resultsLen < limit) { q.add(result); ++resultsLen; } - else { - ++limitedCount; - if(result.score > q.peek().score) q.replaceTop(result); - } - } - } - - if(resultsLen === 0) return noResults - var results = new Array(resultsLen); - for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll(); - results.total = resultsLen + limitedCount; - return results - }; - - - var highlight = (result, hOpen, hClose) => { - if(typeof hOpen === 'function') return highlightCallback(result, hOpen) - if(result === NULL) return NULL - if(hOpen === undefined) hOpen = ''; - if(hClose === undefined) hClose = ''; - var highlighted = ''; - var matchesIndex = 0; - var opened = false; - var target = result.target; - var targetLen = target.length; - var indexes = result._indexes; - indexes = indexes.slice(0, indexes.len).sort((a,b)=>a-b); - for(var i = 0; i < targetLen; ++i) { var char = target[i]; - if(indexes[matchesIndex] === i) { - ++matchesIndex; - if(!opened) { opened = true; - highlighted += hOpen; - } - - if(matchesIndex === indexes.length) { - highlighted += char + hClose + target.substr(i+1); - break - } - } else { - if(opened) { opened = false; - highlighted += hClose; - } - } - highlighted += char; - } - - return highlighted - }; - var highlightCallback = (result, cb) => { - if(result === NULL) return NULL - var target = result.target; - var targetLen = target.length; - var indexes = result._indexes; - indexes = indexes.slice(0, indexes.len).sort((a,b)=>a-b); - var highlighted = ''; - var matchI = 0; - var indexesI = 0; - var opened = false; - var result = []; - for(var i = 0; i < targetLen; ++i) { var char = target[i]; - if(indexes[indexesI] === i) { - ++indexesI; - if(!opened) { opened = true; - result.push(highlighted); highlighted = ''; - } - - if(indexesI === indexes.length) { - highlighted += char; - result.push(cb(highlighted, matchI++)); highlighted = ''; - result.push(target.substr(i+1)); - break - } - } else { - if(opened) { opened = false; - result.push(cb(highlighted, matchI++)); highlighted = ''; - } - } - highlighted += char; - } - return result - }; - - - var indexes = result => result._indexes.slice(0, result._indexes.len).sort((a,b)=>a-b); - - - var prepare = (target) => { - if(typeof target !== 'string') target = ''; - var info = prepareLowerInfo(target); - return {'target':target, _targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _nextBeginningIndexes:NULL, _bitflags:info.bitflags, 'score':NULL, _indexes:[0], 'obj':NULL} // hidden - }; - - - // Below this point is only internal code - // Below this point is only internal code - // Below this point is only internal code - // Below this point is only internal code - - - var prepareSearch = (search) => { - if(typeof search !== 'string') search = ''; - search = search.trim(); - var info = prepareLowerInfo(search); - - var spaceSearches = []; - if(info.containsSpace) { - var searches = search.split(/\s+/); - searches = [...new Set(searches)]; // distinct - for(var i=0; i { - if(target.length > 999) return prepare(target) // don't cache huge targets - var targetPrepared = preparedCache.get(target); - if(targetPrepared !== undefined) return targetPrepared - targetPrepared = prepare(target); - preparedCache.set(target, targetPrepared); - return targetPrepared - }; - var getPreparedSearch = (search) => { - if(search.length > 999) return prepareSearch(search) // don't cache huge searches - var searchPrepared = preparedSearchCache.get(search); - if(searchPrepared !== undefined) return searchPrepared - searchPrepared = prepareSearch(search); - preparedSearchCache.set(search, searchPrepared); - return searchPrepared - }; - - - var all = (search, targets, options) => { - var results = []; results.total = targets.length; - - var limit = options && options.limit || INT_MAX; - - if(options && options.key) { - for(var i=0;i