new"> 3013
+          "integrity": "sha1-dLbTPJrh4AFRDxeakRaFiPGu2qk=",
3014
+          "dev": true
2940 3015
         }
2941 3016
       }
2942 3017
     },
@@ -2991,6 +3066,7 @@
2991 3066
       "version": "1.4.4",
2992 3067
       "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
2993 3068
       "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
3069
+      "dev": true,
2994 3070
       "requires": {
2995 3071
         "once": "^1.4.0"
2996 3072
       }
@@ -2999,6 +3075,7 @@
2999 3075
       "version": "1.4.1",
3000 3076
       "resolved": "https://registry.npmjs.org/endent/-/endent-1.4.1.tgz",
3001 3077
       "integrity": "sha512-buHTb5c8AC9NshtP6dgmNLYkiT+olskbq1z6cEGvfGCF3Qphbu/1zz5Xu+yjTDln8RbxNhPoUyJ5H8MSrp1olQ==",
3078
+      "dev": true,
3002 3079
       "requires": {
3003 3080
         "dedent": "^0.7.0",
3004 3081
         "fast-json-parse": "^1.0.3",
@@ -3392,6 +3469,7 @@
3392 3469
       "version": "3.2.7",
3393 3470
       "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz",
3394 3471
       "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==",
3472
+      "dev": true,
3395 3473
       "requires": {
3396 3474
         "@nodelib/fs.stat": "^2.0.2",
3397 3475
         "@nodelib/fs.walk": "^1.2.3",
@@ -3403,7 +3481,8 @@
3403 3481
     "fast-json-parse": {
3404 3482
       "version": "1.0.3",
3405 3483
       "resolved": "https://registry.npmjs.org/fast-json-parse/-/fast-json-parse-1.0.3.tgz",
3406
-      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw=="
3484
+      "integrity": "sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw==",
3485
+      "dev": true
3407 3486
     },
3408 3487
     "fast-json-stable-stringify": {
3409 3488
       "version": "2.1.0",
@@ -3415,6 +3494,7 @@
3415 3494
       "version": "1.13.0",
3416 3495
       "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
3417 3496
       "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==",
3497
+      "dev": true,
3418 3498
       "requires": {
3419 3499
         "reusify": "^1.0.4"
3420 3500
       }
@@ -3546,7 +3626,8 @@
3546 3626
     "fs.realpath": {
3547 3627
       "version": "1.0.0",
3548 3628
       "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
3549
-      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
3629
+      "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
3630
+      "dev": true
3550 3631
     },
3551 3632
     "fsevents": {
3552 3633
       "version": "2.3.2",
@@ -3638,6 +3719,7 @@
3638 3719
       "version": "7.1.7",
3639 3720
       "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
3640 3721
       "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
3722
+      "dev": true,
3641 3723
       "requires": {
3642 3724
         "fs.realpath": "^1.0.0",
3643 3725
         "inflight": "^1.0.4",
@@ -3884,7 +3966,8 @@
3884 3966
     "human-signals": {
3885 3967
       "version": "1.1.1",
3886 3968
       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
3887
-      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
3969
+      "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
3970
+      "dev": true
3888 3971
     },
3889 3972
     "humanize-num": {
3890 3973
       "version": "1.1.5",
@@ -3930,6 +4013,7 @@
3930 4013
       "version": "1.0.6",
3931 4014
       "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
3932 4015
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
4016
+      "dev": true,
3933 4017
       "requires": {
3934 4018
         "once": "^1.3.0",
3935 4019
         "wrappy": "1"
@@ -4121,7 +4205,8 @@
4121 4205
     "is-path-inside": {
4122 4206
       "version": "3.0.3",
4123 4207
       "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
4124
-      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ=="
4208
+      "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
4209
+      "dev": true
4125 4210
     },
4126 4211
     "is-plain-object": {
4127 4212
       "version": "2.0.4",
@@ -4173,7 +4258,8 @@
4173 4258
     "isexe": {
4174 4259
       "version": "2.0.0",
4175 4260
       "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4176
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
4261
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
4262
+      "dev": true
4177 4263
     },
4178 4264
     "isstream": {
4179 4265
       "version": "0.1.2",
@@ -4396,7 +4482,8 @@
4396 4482
     "lodash": {
4397 4483
       "version": "4.17.21",
4398 4484
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
4399
-      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
4485
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
4486
+      "dev": true
4400 4487
     },
4401 4488
     "longest": {
4402 4489
       "version": "1.0.1",
@@ -4523,12 +4610,14 @@
4523 4610
     "merge-stream": {
4524 4611
       "version": "2.0.0",
4525 4612
       "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
4526
-      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w=="
4613
+      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
4614
+      "dev": true
4527 4615
     },
4528 4616
     "merge2": {
4529 4617
       "version": "1.4.1",
4530 4618
       "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
4531
-      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
4619
+      "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
4620
+      "dev": true
4532 4621
     },
4533 4622
     "methods": {
4534 4623
       "version": "1.1.2",
@@ -4540,6 +4629,7 @@
4540 4629
       "version": "4.0.4",
4541 4630
       "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
4542 4631
       "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
4632
+      "dev": true,
4543 4633
       "requires": {
4544 4634
         "braces": "^3.0.1",
4545 4635
         "picomatch": "^2.2.3"
@@ -4606,6 +4696,7 @@
4606 4696
       "version": "3.0.4",
4607 4697
       "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
4608 4698
       "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
4699
+      "dev": true,
4609 4700
       "requires": {
4610 4701
         "brace-expansion": "^1.1.7"
4611 4702
       }
@@ -5002,7 +5093,8 @@
5002 5093
     "objectorarray": {
5003 5094
       "version": "1.0.5",
5004 5095
       "resolved": "https://registry.npmjs.org/objectorarray/-/objectorarray-1.0.5.tgz",
5005
-      "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg=="
5096
+      "integrity": "sha512-eJJDYkhJFFbBBAxeh8xW+weHlkI28n2ZdQV/J/DNfWfSKlGEf2xcfAbZTv3riEXHAhL9SVOTs2pRmXiSTf78xg==",
5097
+      "dev": true
5006 5098
     },
5007 5099
     "on-finished": {
5008 5100
       "version": "2.3.0",
@@ -5017,6 +5109,7 @@
5017 5109
       "version": "1.4.0",
5018 5110
       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
5019 5111
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
5112
+      "dev": true,
5020 5113
       "requires": {
5021 5114
         "wrappy": "1"
5022 5115
       }
@@ -5025,6 +5118,7 @@
5025 5118
       "version": "5.1.2",
5026 5119
       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
5027 5120
       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
5121
+      "dev": true,
5028 5122
       "requires": {
5029 5123
         "mimic-fn": "^2.1.0"
5030 5124
       },
@@ -5032,7 +5126,8 @@
5032 5126
         "mimic-fn": {
5033 5127
           "version": "2.1.0",
5034 5128
           "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
5035
-          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
5129
+          "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
5130
+          "dev": true
5036 5131
         }
5037 5132
       }
5038 5133
     },
@@ -5045,7 +5140,8 @@
5045 5140
     "os-homedir": {
5046 5141
       "version": "1.0.2",
5047 5142
       "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
5048
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
5143
+      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
5144
+      "dev": true
5049 5145
     },
5050 5146
     "os-locale": {
5051 5147
       "version": "2.1.0",
@@ -5071,12 +5167,14 @@
5071 5167
     "os-tmpdir": {
5072 5168
       "version": "1.0.2",
5073 5169
       "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
5074
-      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
5170
+      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
5171
+      "dev": true
5075 5172
     },
5076 5173
     "osenv": {
5077 5174
       "version": "0.1.5",
5078 5175
       "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
5079 5176
       "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
5177
+      "dev": true,
5080 5178
       "requires": {
5081 5179
         "os-homedir": "^1.0.0",
5082 5180
         "os-tmpdir": "^1.0.0"
@@ -5085,7 +5183,8 @@
5085 5183
     "p-finally": {
5086 5184
       "version": "1.0.0",
5087 5185
       "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
5088
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
5186
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
5187
+      "dev": true
5089 5188
     },
5090 5189
     "p-limit": {
5091 5190
       "version": "2.3.0",
@@ -5108,7 +5207,8 @@
5108 5207
     "p-try": {
5109 5208
       "version": "2.2.0",
5110 5209
       "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
5111
-      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
5210
+      "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
5211
+      "dev": true
5112 5212
     },
5113 5213
     "pako": {
5114 5214
       "version": "1.0.11",
@@ -5174,7 +5274,8 @@
5174 5274
     "path-is-absolute": {
5175 5275
       "version": "1.0.1",
5176 5276
       "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
5177
-      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
5277
+      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
5278
+      "dev": true
5178 5279
     },
5179 5280
     "path-key": {
5180 5281
       "version": "2.0.1",
@@ -5263,6 +5364,7 @@
5263 5364
       "version": "3.0.4",
5264 5365
       "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.4.tgz",
5265 5366
       "integrity": "sha512-ksrr8y9+nXOxQB2osVNqrgvX/XQPOXaU4BQMKjYq8PvaY1U18mo+fKgBSwzK+luSyinOuPae956lSVcBwxlAMg==",
5367
+      "dev": true,
5266 5368
       "requires": {
5267 5369
         "base64-js": "^1.5.1",
5268 5370
         "xmlbuilder": "^9.0.7"
@@ -5271,7 +5373,8 @@
5271 5373
         "xmlbuilder": {
5272 5374
           "version": "9.0.7",
5273 5375
           "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
5274
-          "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
5376
+          "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
5377
+          "dev": true
5275 5378
         }
5276 5379
       }
5277 5380
     },
@@ -5319,6 +5422,7 @@
5319 5422
       "version": "0.3.1",
5320 5423
       "resolved": "https://registry.npmjs.org/properties-parser/-/properties-parser-0.3.1.tgz",
5321 5424
       "integrity": "sha1-ExbpU5/7/ZOEXjabIRAiq9R4dxo=",
5425
+      "dev": true,
5322 5426
       "requires": {
5323 5427
         "string.prototype.codepointat": "^0.2.0"
5324 5428
       }
@@ -5383,6 +5487,7 @@
5383 5487
       "version": "3.0.0",
5384 5488
       "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
5385 5489
       "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
5490
+      "dev": true,
5386 5491
       "requires": {
5387 5492
         "end-of-stream": "^1.1.0",
5388 5493
         "once": "^1.3.1"
@@ -5397,7 +5502,8 @@
5397 5502
     "q": {
5398 5503
       "version": "1.5.1",
5399 5504
       "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
5400
-      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
5505
+      "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=",
5506
+      "dev": true
5401 5507
     },
5402 5508
     "qs": {
5403 5509
       "version": "6.7.0",
@@ -5420,7 +5526,8 @@
5420 5526
     "queue-microtask": {
5421 5527
       "version": "1.2.3",
5422 5528
       "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
5423
-      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
5529
+      "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
5530
+      "dev": true
5424 5531
     },
5425 5532
     "randombytes": {
5426 5533
       "version": "2.1.0",
@@ -5463,6 +5570,7 @@
5463 5570
       "version": "3.2.0",
5464 5571
       "resolved": "https://registry.npmjs.org/read-chunk/-/read-chunk-3.2.0.tgz",
5465 5572
       "integrity": "sha512-CEjy9LCzhmD7nUpJ1oVOE6s/hBkejlcJEgLQHVnQznOSilOPb+kpKktlLfFDK3/WP43+F80xkUTM2VOkYoSYvQ==",
5573
+      "dev": true,
5466 5574
       "requires": {
5467 5575
         "pify": "^4.0.1",
5468 5576
         "with-open-file": "^0.1.6"
@@ -5471,7 +5579,8 @@
5471 5579
         "pify": {
5472 5580
           "version": "4.0.1",
5473 5581
           "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
5474
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
5582
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
5583
+          "dev": true
5475 5584
         }
5476 5585
       }
5477 5586
     },
@@ -5666,7 +5775,8 @@
5666 5775
     "reusify": {
5667 5776
       "version": "1.0.4",
5668 5777
       "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
5669
-      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
5778
+      "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
5779
+      "dev": true
5670 5780
     },
5671 5781
     "right-align": {
5672 5782
       "version": "0.1.3",
@@ -5756,6 +5866,7 @@
5756 5866
       "version": "1.2.0",
5757 5867
       "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
5758 5868
       "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
5869
+      "dev": true,
5759 5870
       "requires": {
5760 5871
         "queue-microtask": "^1.2.2"
5761 5872
       }
@@ -5841,7 +5952,8 @@
5841 5952
     "semver": {
5842 5953
       "version": "5.7.1",
5843 5954
       "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
5844
-      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
5955
+      "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
5956
+      "dev": true
5845 5957
     },
5846 5958
     "send": {
5847 5959
       "version": "0.17.1",
@@ -5964,7 +6076,8 @@
5964 6076
     "signal-exit": {
5965 6077
       "version": "3.0.3",
5966 6078
       "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
5967
-      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
6079
+      "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
6080
+      "dev": true
5968 6081
     },
5969 6082
     "simctl": {
5970 6083
       "version": "2.0.0",
@@ -6296,7 +6409,8 @@
6296 6409
     "string.prototype.codepointat": {
6297 6410
       "version": "0.2.1",
6298 6411
       "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
6299
-      "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg=="
6412
+      "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==",
6413
+      "dev": true
6300 6414
     },
6301 6415
     "string_decoder": {
6302 6416
       "version": "1.1.1",
@@ -6334,7 +6448,8 @@
6334 6448
     "strip-final-newline": {
6335 6449
       "version": "2.0.0",
6336 6450
       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
6337
-      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="
6451
+      "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
6452
+      "dev": true
6338 6453
     },
6339 6454
     "strip-indent": {
6340 6455
       "version": "1.0.1",
@@ -6744,7 +6859,8 @@
6744 6859
     "underscore": {
6745 6860
       "version": "1.13.1",
6746 6861
       "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
6747
-      "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
6862
+      "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==",
6863
+      "dev": true
6748 6864
     },
6749 6865
     "union-value": {
6750 6866
       "version": "1.0.1",
@@ -7889,6 +8005,7 @@
7889 8005
       "version": "0.1.7",
7890 8006
       "resolved": "https://registry.npmjs.org/with-open-file/-/with-open-file-0.1.7.tgz",
7891 8007
       "integrity": "sha512-ecJS2/oHtESJ1t3ZfMI3B7KIDKyfN0O16miWxdn30zdh66Yd3LsRFebXZXq6GU4xfxLf6nVxp9kIqElb5fqczA==",
8008
+      "dev": true,
7892 8009
       "requires": {
7893 8010
         "p-finally": "^1.0.0",
7894 8011
         "p-try": "^2.1.0",
@@ -7898,7 +8015,8 @@
7898 8015
         "pify": {
7899 8016
           "version": "4.0.1",
7900 8017
           "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
7901
-          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g=="
8018
+          "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
8019
+          "dev": true
7902 8020
         }
7903 8021
       }
7904 8022
     },
@@ -7956,7 +8074,8 @@
7956 8074
     "wrappy": {
7957 8075
       "version": "1.0.2",
7958 8076
       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
7959
-      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
8077
+      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
8078
+      "dev": true
7960 8079
     },
7961 8080
     "ws": {
7962 8081
       "version": "3.3.2",

+ 13 - 4
package.json

@@ -21,8 +21,11 @@
21 21
     "@angular/http": "5.2.10",
22 22
     "@angular/platform-browser": "5.2.10",
23 23
     "@angular/platform-browser-dynamic": "5.2.10",
24
+    "@ionic-native/camera": "^4.20.0",
24 25
     "@ionic-native/core": "4.7.0",
25 26
     "@ionic-native/device": "^4.7.0",
27
+    "@ionic-native/file": "^4.20.0",
28
+    "@ionic-native/file-transfer": "^4.20.0",
26 29
     "@ionic-native/health": "^4.7.0",
27 30
     "@ionic-native/http": "^4.20.0",
28 31
     "@ionic-native/in-app-browser": "^4.7.0",
@@ -50,7 +53,10 @@
50 53
   },
51 54
   "devDependencies": {
52 55
     "@ionic/app-scripts": "^3.2.4",
56
+    "cordova-android": "^9.1.0",
53 57
     "cordova-ios": "^6.2.0",
58
+    "cordova-plugin-camera": "^5.0.3",
59
+    "cordova-plugin-file-transfer": "^1.7.1",
54 60
     "cordova-plugin-inappbrowser": "^5.0.0",
55 61
     "typescript": "~2.6.2"
56 62
   },
@@ -65,11 +71,14 @@
65 71
       "cordova-plugin-splashscreen": {},
66 72
       "cordova-plugin-device": {},
67 73
       "cordova-plugin-whitelist": {},
68
-      "cordova-plugin-inappbrowser": {}
74
+      "cordova-plugin-inappbrowser": {},
75
+      "cordova-plugin-file-transfer": {},
76
+      "cordova-plugin-file": {},
77
+      "cordova-plugin-camera": {}
69 78
     },
70 79
     "platforms": [
71
-      "ios",
72
-      "android"
80
+      "android",
81
+      "ios"
73 82
     ]
74 83
   }
75
-}
84
+}

+ 15 - 3
src/app/app.module.ts

@@ -13,6 +13,7 @@ import { EventPage } from '../pages/event/event';
13 13
 import { ProductCatDetailPage } from '../pages/product-cat-detail/product-cat-detail';
14 14
 import { NewsReaderPage } from '../pages/news-reader/news-reader';
15 15
 import { CouponViewPage } from '../pages/coupon-view/coupon-view';
16
+import { EventUploadPage } from '../pages/event-upload/event-upload';
16 17
 
17 18
 import { StatusBar } from '@ionic-native/status-bar';
18 19
 import { SplashScreen } from '@ionic-native/splash-screen';
@@ -33,6 +34,12 @@ import { UserAgent } from '@ionic-native/user-agent';
33 34
 
34 35
 import { HTTP  } from '@ionic-native/http';
35 36
 
37
+import { FileTransfer } from '@ionic-native/file-transfer';
38
+import { File } from '@ionic-native/file';
39
+import { Camera } from '@ionic-native/camera';
40
+
41
+
42
+
36 43
 @NgModule({
37 44
     declarations: [
38 45
         MyApp,
@@ -45,7 +52,8 @@ import { HTTP  } from '@ionic-native/http';
45 52
         EventPage,
46 53
         ProductCatDetailPage,
47 54
         NewsReaderPage,
48
-        CouponViewPage
55
+        CouponViewPage,
56
+        EventUploadPage
49 57
     ],
50 58
     imports: [
51 59
         BrowserModule,
@@ -69,7 +77,8 @@ import { HTTP  } from '@ionic-native/http';
69 77
         EventPage,
70 78
         ProductCatDetailPage,
71 79
         NewsReaderPage,
72
-        CouponViewPage
80
+        CouponViewPage,
81
+        EventUploadPage
73 82
     ],
74 83
     providers: [
75 84
         StatusBar,
@@ -83,7 +92,10 @@ import { HTTP  } from '@ionic-native/http';
83 92
         HumanizePipe,
84 93
         Device,
85 94
         HTTP, 
86
-        UserAgent
95
+        UserAgent,
96
+        FileTransfer,
97
+        File,
98
+        Camera
87 99
     ]
88 100
 })
89 101
 export class AppModule {}

+ 19 - 0
src/pages/event-upload/event-upload.html

@@ -0,0 +1,19 @@
1
+<!--
2
+  Generated template for the EventUploadPage page.
3
+
4
+  See http://ionicframework.com/docs/components/#navigation for more info on
5
+  Ionic pages and navigation.
6
+-->
7
+<ion-header>
8
+
9
+  <ion-navbar color="primary">
10
+    <ion-title>Event Detail</ion-title>
11
+  </ion-navbar>
12
+
13
+</ion-header>
14
+
15
+
16
+<ion-content padding>
17
+     <button ion-button (click)="selectImage()" color="tertiary" size='small'>Upload</button>
18
+
19
+</ion-content>

+ 13 - 0
src/pages/event-upload/event-upload.module.ts

@@ -0,0 +1,13 @@
1
+import { NgModule } from '@angular/core';
2
+import { IonicPageModule } from 'ionic-angular';
3
+import { EventUploadPage } from './event-upload';
4
+
5
+@NgModule({
6
+  declarations: [
7
+    EventUploadPage,
8
+  ],
9
+  imports: [
10
+    IonicPageModule.forChild(EventUploadPage),
11
+  ],
12
+})
13
+export class EventUploadPageModule {}

+ 3 - 0
src/pages/event-upload/event-upload.scss

@@ -0,0 +1,3 @@
1
+page-event-upload {
2
+
3
+}

+ 87 - 0
src/pages/event-upload/event-upload.ts

@@ -0,0 +1,87 @@
1
+import { Component } from '@angular/core';
2
+import { IonicPage, NavController, NavParams } from 'ionic-angular';
3
+import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
4
+import { File } from '@ionic-native/file';
5
+import { ActionSheetController } from 'ionic-angular';
6
+import { Camera, CameraOptions } from '@ionic-native/camera';
7
+import { HealthProvider } from '../../providers/health/health';
8
+/**
9
+ * Generated class for the EventUploadPage page.
10
+ *
11
+ * See https://ionicframework.com/docs/components/#navigation for more info on
12
+ * Ionic pages and navigation.
13
+ */
14
+
15
+@IonicPage()
16
+@Component({
17
+    selector: 'page-event-upload',
18
+    templateUrl: 'event-upload.html',
19
+})
20
+export class EventUploadPage {
21
+
22
+     imagePickerOptions = {
23
+         maximumImagesCount: 1,
24
+         quality: 50
25
+       };
26
+     croppedImagePath:string = "";
27
+
28
+     photoURL: any;
29
+     msg:string = "Upload Your Photo";
30
+
31
+    constructor(public navCtrl: NavController, public navParams: NavParams, private camera: Camera,   public actionSheetController: ActionSheetController, private hp: HealthProvider) {
32
+        let eventId = navParams.get('eventId');
33
+        console.log("eventId "+eventId);
34
+    }
35
+
36
+    ionViewDidLoad() {
37
+        console.log('ionViewDidLoad EventUploadPage');
38
+    }
39
+      async selectImage() {
40
+         const actionSheet = await this.actionSheetController.create({
41
+             header: "Select Image source",
42
+             buttons: [{
43
+                 text: 'Load from Library',
44
+                 handler: () => {
45
+                     this.pickImage(this.camera.PictureSourceType.PHOTOLIBRARY);
46
+                 }
47
+             },
48
+                 {
49
+                     text: 'Use Camera',
50
+                     handler: () => {
51
+                         this.pickImage(this.camera.PictureSourceType.CAMERA);
52
+                     }
53
+                 },
54
+                 {
55
+                     text: 'Cancel',
56
+                     role: 'cancel'
57
+                 }
58
+             ]
59
+         });
60
+         await actionSheet.present();
61
+     }
62
+    pickImage(sourceType) {
63
+        const options: CameraOptions = {
64
+            quality: 100,
65
+            sourceType: sourceType,
66
+            destinationType: this.camera.DestinationType.FILE_URI,
67
+            encodingType: this.camera.EncodingType.JPEG,
68
+            mediaType: this.camera.MediaType.PICTURE
69
+        }
70
+        this.camera.getPicture(options).then( async (imageData) => {
71
+            // imageData is either a base64 encoded string or a file URI
72
+            this.croppedImagePath = 'data:image/jpeg;base64,' + imageData;
73
+
74
+            console.log(this.croppedImagePath);
75
+            this.msg = "Uploading ...";
76
+            let r0  = await this.hp.uploadPhoto(imageData);
77
+            this.photoURL = await this.hp.getPhoto();
78
+            this.msg = "Upload Your Photo";
79
+            console.log("r0");
80
+            console.log(r0);
81
+        }, (err) => {
82
+            // Handle error
83
+            console.log(err);
84
+        });
85
+    }
86
+
87
+}

+ 1 - 1
src/pages/event/event.html

@@ -31,7 +31,7 @@
31 31
       </button>
32 32
     </ion-col>
33 33
     <ion-col>
34
-      <button ion-button icon-start color='success' block>
34
+      <button ion-button icon-start color='success' block (click)="joinEvent(p.id)">
35 35
         <ion-icon name="text"></ion-icon>
36 36
         <div>Join</div>
37 37
       </button>

+ 6 - 0
src/pages/event/event.ts

@@ -7,6 +7,7 @@ import { HealthProvider } from '../../providers/health/health';
7 7
 import { HumanizePipe  } from 'angular2-humanize';
8 8
 import { NativeStorage } from '@ionic-native/native-storage';
9 9
 import { InAppBrowser } from '@ionic-native/in-app-browser';
10
+import { EventUploadPage }  from '../event-upload/event-upload';
10 11
 /**
11 12
  * Generated class for the EventPage page.
12 13
  *
@@ -88,6 +89,7 @@ export class EventPage {
88 89
         this.hp.getWPPostCat(46, 1)
89 90
             .then( data => {
90 91
                 this.eventPosts = JSON.parse(data.data);
92
+                console.log(JSON.stringify(this.eventPosts));
91 93
             }, error => {
92 94
                 console.log("errors");
93 95
                 console.log(""+error);
@@ -188,4 +190,8 @@ export class EventPage {
188 190
     openLink(link: string) {
189 191
          this.ab.create(link, '_blank');
190 192
     }
193
+    joinEvent(id) {
194
+        console.log("join "+id);
195
+        this.navCtrl.push(EventUploadPage, { eventId: id });
196
+    }
191 197
 }

+ 2 - 1
src/pages/home/home.ts

@@ -33,6 +33,7 @@ export class HomePage {
33 33
     }
34 34
 
35 35
     ionViewDidEnter() {
36
+        this.postPage = 1;
36 37
         this.healthProvider.getWPPostCat(30, this.postPage++)
37 38
             .then( data => {
38 39
                 console.log(data);
@@ -40,7 +41,7 @@ export class HomePage {
40 41
                 console.log(this.wpPosts);
41 42
             }, error => {
42 43
                 console.log("errors");
43
-                console.log(""+error);
44
+                console.log(JSON.stringify(error));
44 45
             });
45 46
         /*
46 47
         this.healthProvider.getProducts()

+ 62 - 2
src/providers/health/health.ts

@@ -4,7 +4,8 @@ import { Observable } from 'rxjs';
4 4
 import { HttpHeaders } from '@angular/common/http';
5 5
 import { Device } from '@ionic-native/device';
6 6
 import { HTTP, HTTPResponse } from '@ionic-native/http';
7
-
7
+import { FileTransfer, FileUploadOptions, FileTransferObject } from '@ionic-native/file-transfer';
8
+import { NativeStorage } from '@ionic-native/native-storage';
8 9
 
9 10
 /*
10 11
   Generated class for the HealthProvider provider.
@@ -20,6 +21,7 @@ const IMAGE_URL = HOSTBASE + "/media/";
20 21
 const QR_URL = HOSTBASE + "/static/";
21 22
 const REDEEM_API = HOSTBASE + "/coredata/api/redeem";
22 23
 const SV_API = HOSTBASE + "/strava/api";
24
+const UPLOAD_API = HOSTBASE + "/strava/uploadPhoto";
23 25
 const WP = "https://whitesports.net/wp-json/wp/v2/";
24 26
 
25 27
 @Injectable()
@@ -33,7 +35,7 @@ export class HealthProvider {
33 35
             'Authorization': 'JWT eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoicHVibGljIiwicm9sZXMiOlsicHVibGljIl0sImV4cCI6MTczNDE2NTcxMCwiaWF0IjoxNDc0OTY1NzEwLCJuYmYiOjE0NzQ5NjU3MTAsImlkZW50aXR5IjoiNTdlOWVmMjZjMjU0ZmQ4N2Q3ZmQ4MzM2In0.-9fcm5s8qYbdqBDUX7cZJ5J3AX91fe6VrCLs_S-_eBU'
34 36
         })
35 37
     };
36
-    constructor(public http: HttpClient, private nhttp: HTTP, private dev: Device) {
38
+    constructor(public http: HttpClient, private nhttp: HTTP, private dev: Device, private transfer: FileTransfer, private storage: NativeStorage) {
37 39
         console.log('Hello HealthProvider Provider');
38 40
         console.log("construct device = ", this.dev.model, this.dev.serial, this.dev.isVirtual);
39 41
     }
@@ -115,6 +117,64 @@ export class HealthProvider {
115 117
     getWSProfile(athId, token) {
116 118
         return this.http.post(SV_API, {action: "GET_WS_PROFILE", athId: athId,   token: token });
117 119
     }
120
+      async getPhoto() {
121
+          /*
122
+ >>        let info = await this.kohaService.getPatronInfo();
123
+
124
+           console.log(info);
125
+           if( info != null ) {
126
+ >>            let url =  this.getPhotoUrl(info.GetPatronInfo.borrowernumber)
127
+               return this.http.get(url, {}, this.header)
128
+               .then(
129
+                   res => {
130
+ >>                    let o = JSON.parse(res.data);
131
+                       console.log(o);
132
+                       if(o.output == null ) {
133
+ >>                        return "";
134
+                       }else {
135
+                           return this.UPLOAD_URL + o.output;
136
+                       }
137
+                   },
138
+                   error => {
139
+                       return null;
140
+                   }
141
+               );
142
+           }else {
143
+               return null;
144
+           }*/
145
+       }
146
+    uploadPhotoUrl(eventId, athId) {
147
+        let url = UPLOAD_API + "?eventId="+eventId+"&athId="+athId;
148
+        return url;
149
+    }
150
+     async uploadPhoto(filePath) {
151
+
152
+         /*
153
+         let info = await this.kohaService.getPatronInfo();
154
+
155
+         console.log(info);
156
+         if( info != null ) {
157
+             const fileTransfer: FileTransferObject = this.transfer.create();
158
+
159
+             let options: FileUploadOptions = {
160
+                 fileKey: 'file',
161
+                 //fileName: 'name.jpg',
162
+             }
163
+
164
+             return fileTransfer.upload(filePath, this.uploadPhotoUrl(info.GetPatronInfo.borrowernumber), options)
165
+                 .then((data) => {
166
+                     // success
167
+                     console.log("from tranfer");
168
+                     console.log(data);
169
+                     return JSON.parse(data.response);
170
+                 }, (err) => {
171
+                     // error
172
+                     return err;
173
+                 })
174
+         } else {
175
+             return null;
176
+         }*/
177
+     }
118 178
     /*
119 179
   listNews(token, act): Observable<any> {
120 180
     return this.http.post("http://mcotn-api.simplico.net/api/v2.0/posts", {  action: "LIST", model: {} }, this.httpOptions);

tmt/tiger_frontend - Gogs: Simplico Git Service

暫無描述

home.html 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <!DOCTYPE html>
  2. <html lang="en" data-theme="mytheme">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>TMT ELeaning</title>
  8. <link rel="stylesheet" href="css/main.css">
  9. <link rel="preconnect" href="https://fonts.googleapis.com">
  10. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  11. <link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;500;600&family=Poppins&display=swap"
  12. rel="stylesheet">
  13. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.2.0/css/all.min.css"
  14. integrity="sha512-xh6O/CkQoPOWDdYTDqeRdPCVd1SpvCA9XXcUnZS2FmJNp1coAFzvtCN9BmamE+4aHK8yyUHUSCcJHgXloTyT2A=="
  15. crossorigin="anonymous" referrerpolicy="no-referrer" />
  16. </head>
  17. <body>
  18. <div class="bg-primary">
  19. <div class="container mx-auto p-4">
  20. <div class="flex justify-between flex-row">
  21. <div class="justify-center"><img src="img/tmt-logo.svg" alt="" class="w-56">
  22. </div>
  23. <div class="mt-2">
  24. <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5"
  25. stroke="currentColor" class="w-6 h-6">
  26. <path stroke-linecap="round" stroke-linejoin="round"
  27. d="M17.982 18.725A7.488 7.488 0 0012 15.75a7.488 7.488 0 00-5.982 2.975m11.963 0a9 9 0 10-11.963 0m11.963 0A8.966 8.966 0 0112 21a8.966 8.966 0 01-5.982-2.275M15 9.75a3 3 0 11-6 0 3 3 0 016 0z" />
  28. </svg>
  29. </div>
  30. </div>
  31. </div>
  32. </div>
  33. <div class="bg-secondary">
  34. <div class="container mx-auto">
  35. <div class="navbar font-poppins min-h-0 mx-auto">
  36. <div class="navbar-start">
  37. <!----- Mobile Menu Start ----->
  38. <div class="dropdown">
  39. <label tabindex="0" class="btn btn-ghost lg:hidden">
  40. <svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24"
  41. stroke="currentColor">
  42. <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
  43. d="M4 6h16M4 12h8m-8 6h16" />
  44. </svg>
  45. </label>
  46. <ul tabindex="0"
  47. class="menu menu-compact dropdown-content mt-3 p-2 shadow bg-base-100 rounded-box w-52 ">
  48. <li><a>Mobile Item 1</a></li>
  49. <li tabindex="0">
  50. <a class="justify-between">
  51. Parent
  52. <svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="24" height="24"
  53. viewBox="0 0 24 24">
  54. <path d="M8.59,16.58L13.17,12L8.59,7.41L10,6L16,12L10,18L8.59,16.58Z" />
  55. </svg>
  56. </a>
  57. <ul class="p-2">
  58. <li><a>Submenu 1</a></li>
  59. <li><a>Submenu 2</a></li>
  60. </ul>
  61. </li>
  62. <li><a>Item 3</a></li>
  63. </ul>
  64. </div>
  65. <!----- Mobile Menu End ----->
  66. <!----- Desktop Menu Start ----->
  67. <div class="hidden lg:flex">
  68. <ul class="menu menu-horizontal px-1 ">
  69. <li class="p-0"><a class="px-3 py-1">Item 1</a></li>
  70. <li tabindex="0">
  71. <a class="px-3 py-1">
  72. Parent
  73. <svg class="fill-current" xmlns="http://www.w3.org/2000/svg" width="20" height="20"
  74. viewBox="0 0 24 24">
  75. <path d="M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z" />
  76. </svg>
  77. </a>
  78. <ul class="p-2 z-50">
  79. <li class="bg-secondary"><a>Submenu 1</a></li>
  80. <li class="bg-secondary"><a>Submenu 2</a></li>
  81. </ul>
  82. </li>
  83. <li><a class="px-3 py-1">Item 3</a></li>
  84. </ul>
  85. </div>
  86. <!----- Desktop Menu End ----->
  87. </div>
  88. <div class="navbar-end">
  89. <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="w-6 h-6">
  90. <path fill-rule="evenodd"
  91. d="M5.636 4.575a.75.75 0 010 1.06 9 9 0 000 12.729.75.75 0 01-1.06 1.06c-4.101-4.1-4.101-10.748 0-14.849a.75.75 0 011.06 0zm12.728 0a.75.75 0 011.06 0c4.101 4.1 4.101 10.749 0 14.85a.75.75 0 11-1.06-1.061 9 9 0 000-12.728.75.75 0 010-1.06zM7.757 6.696a.75.75 0 010 1.061 6 6 0 000 8.485.75.75 0 01-1.06 1.061 7.5 7.5 0 010-10.607.75.75 0 011.06 0zm8.486 0a.75.75 0 011.06 0 7.5 7.5 0 010 10.607.75.75 0 01-1.06-1.06 6 6 0 000-8.486.75.75 0 010-1.06zM9.879 8.818a.75.75 0 010 1.06 3 3 0 000 4.243.75.75 0 11-1.061 1.06 4.5 4.5 0 010-6.363.75.75 0 011.06 0zm4.242 0a.75.75 0 011.061 0 4.5 4.5 0 010 6.364.75.75 0 01-1.06-1.06 3 3 0 000-4.244.75.75 0 010-1.06zM10.875 12a1.125 1.125 0 112.25 0 1.125 1.125 0 01-2.25 0z"
  92. clip-rule="evenodd" />
  93. </svg>
  94. <span class="pl-2"></span>
  95. <a class="">Live</a>
  96. </div>
  97. </div>
  98. </div>
  99. </div>
  100. <!-------- Content Start--------->
  101. <!-------- End Start--------->
  102. <!----- Footet Start ----->
  103. <footer class="footer footer-center p-10 bg-black text-gray-200">
  104. <div class="grid grid-flow-col gap-4">
  105. <a class="link link-hover">About us</a>
  106. <a class="link link-hover">Contact</a>
  107. <a class="link link-hover">Jobs</a>
  108. <a class="link link-hover">Press kit...</a>
  109. </div>
  110. <div>
  111. <div class="grid grid-flow-col gap-4">
  112. <a><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
  113. class="fill-current">
  114. <path
  115. d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z">
  116. </path>
  117. </svg></a>
  118. <a><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
  119. class="fill-current">
  120. <path
  121. d="M19.615 3.184c-3.604-.246-11.631-.245-15.23 0-3.897.266-4.356 2.62-4.385 8.816.029 6.185.484 8.549 4.385 8.816 3.6.245 11.626.246 15.23 0 3.897-.266 4.356-2.62 4.385-8.816-.029-6.185-.484-8.549-4.385-8.816zm-10.615 12.816v-8l8 3.993-8 4.007z">
  122. </path>
  123. </svg></a>
  124. <a><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"
  125. class="fill-current">
  126. <path
  127. d="M9 8h-3v4h3v12h5v-12h3.642l.358-4h-4v-1.667c0-.955.192-1.333 1.115-1.333h2.885v-5h-3.808c-3.596 0-5.192 1.583-5.192 4.615v3.385z">
  128. </path>
  129. </svg></a>
  130. </div>
  131. </div>
  132. <div>
  133. <p>Copyright © 2023 - All right reserved by ACME Industries Ltd</p>
  134. </div>
  135. </footer>
  136. <!----- Footet End ----->
  137. </body>
  138. </html>