mazer-rails 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/assets/fonts/Iconly---Bold.eot +0 -0
  3. data/assets/fonts/Iconly---Bold.svg +19 -0
  4. data/assets/fonts/Iconly---Bold.ttf +0 -0
  5. data/assets/fonts/Iconly---Bold.woff +0 -0
  6. data/assets/fonts/iconly/Iconly---Bold.eot +0 -0
  7. data/assets/fonts/iconly/Iconly---Bold.svg +19 -0
  8. data/assets/fonts/iconly/Iconly---Bold.ttf +0 -0
  9. data/assets/fonts/iconly/Iconly---Bold.woff +0 -0
  10. data/assets/images/bg/4853433.png +0 -0
  11. data/assets/images/faces/1.jpg +0 -0
  12. data/assets/images/faces/2.jpg +0 -0
  13. data/assets/images/faces/3.jpg +0 -0
  14. data/assets/images/faces/4.jpg +0 -0
  15. data/assets/images/faces/5.jpg +0 -0
  16. data/assets/images/faces/6.jpg +0 -0
  17. data/assets/images/faces/7.jpg +0 -0
  18. data/assets/images/faces/8.jpg +0 -0
  19. data/assets/images/logo/favicon.png +0 -0
  20. data/assets/images/logo/favicon.svg +1 -0
  21. data/assets/images/logo/logo.svg +1 -0
  22. data/assets/images/samples/1.png +0 -0
  23. data/assets/images/samples/2.png +0 -0
  24. data/assets/images/samples/3.png +0 -0
  25. data/assets/images/samples/4.png +0 -0
  26. data/assets/images/samples/architecture1.jpg +0 -0
  27. data/assets/images/samples/banana.jpg +0 -0
  28. data/assets/images/samples/bg-mountain.jpg +0 -0
  29. data/assets/images/samples/building.jpg +0 -0
  30. data/assets/images/samples/error-403.svg +94 -0
  31. data/assets/images/samples/error-404.svg +88 -0
  32. data/assets/images/samples/error-500.svg +76 -0
  33. data/assets/images/samples/jump.jpg +0 -0
  34. data/assets/images/samples/motorcycle.jpg +0 -0
  35. data/assets/images/samples/origami.jpg +0 -0
  36. data/assets/images/samples/water.jpg +0 -0
  37. data/assets/images/svg-loaders/audio.svg +29 -0
  38. data/assets/images/svg-loaders/ball-triangle.svg +1 -0
  39. data/assets/images/svg-loaders/bars.svg +1 -0
  40. data/assets/images/svg-loaders/circles.svg +20 -0
  41. data/assets/images/svg-loaders/grid.svg +1 -0
  42. data/assets/images/svg-loaders/hearts.svg +1 -0
  43. data/assets/images/svg-loaders/oval.svg +1 -0
  44. data/assets/images/svg-loaders/puff.svg +1 -0
  45. data/assets/images/svg-loaders/rings.svg +1 -0
  46. data/assets/images/svg-loaders/spinning-circles.svg +1 -0
  47. data/assets/images/svg-loaders/tail-spin.svg +1 -0
  48. data/assets/images/svg-loaders/three-dots.svg +1 -0
  49. data/assets/javascripts/app.js +9 -0
  50. data/assets/javascripts/bootstrap.js +6 -0
  51. data/assets/javascripts/components/dark.js +65 -0
  52. data/assets/javascripts/components/sidebar.js +185 -0
  53. data/assets/javascripts/helper/isDesktop.js +1 -0
  54. data/assets/javascripts/initTheme.js +5 -0
  55. data/assets/javascripts/mazer.js +9 -0
  56. data/assets/javascripts/pages/ckeditor.js +3 -0
  57. data/assets/javascripts/pages/component-toasts.js +9 -0
  58. data/assets/javascripts/pages/dashboard.js +158 -0
  59. data/assets/javascripts/pages/datatables.js +1 -0
  60. data/assets/javascripts/pages/filepond.js +181 -0
  61. data/assets/javascripts/pages/form-editor.js +27 -0
  62. data/assets/javascripts/pages/form-element-select.js +14 -0
  63. data/assets/javascripts/pages/horizontal-layout.js +43 -0
  64. data/assets/javascripts/pages/jquery.js +1 -0
  65. data/assets/javascripts/pages/jsvectormap.js +60 -0
  66. data/assets/javascripts/pages/parsley.js +55 -0
  67. data/assets/javascripts/pages/quill.js +27 -0
  68. data/assets/javascripts/pages/rater-js.js +38 -0
  69. data/assets/javascripts/pages/simple-datatables.js +46 -0
  70. data/assets/javascripts/pages/summernote.js +20 -0
  71. data/assets/javascripts/pages/sweetalert2.js +142 -0
  72. data/assets/javascripts/pages/tinymce.js +22 -0
  73. data/assets/javascripts/pages/toastify.js +81 -0
  74. data/assets/javascripts/pages/ui-apexchart.js +521 -0
  75. data/assets/javascripts/pages/ui-chartjs.js +445 -0
  76. data/assets/javascripts/pages/ui-todolist.js +5 -0
  77. data/assets/stylesheets/_fonts.scss +5 -0
  78. data/assets/stylesheets/_mazer.scss +103 -0
  79. data/assets/stylesheets/_utilities.scss +53 -0
  80. data/assets/stylesheets/_variables.scss +1626 -0
  81. data/assets/stylesheets/app.scss +20 -0
  82. data/assets/stylesheets/bootstrap.scss +58 -0
  83. data/assets/stylesheets/components/_alert.scss +43 -0
  84. data/assets/stylesheets/components/_avatar.scss +78 -0
  85. data/assets/stylesheets/components/_badge.scss +20 -0
  86. data/assets/stylesheets/components/_breadcrumb.scss +10 -0
  87. data/assets/stylesheets/components/_buttons.scss +62 -0
  88. data/assets/stylesheets/components/_card.scss +126 -0
  89. data/assets/stylesheets/components/_carousel.scss +6 -0
  90. data/assets/stylesheets/components/_divider.scss +37 -0
  91. data/assets/stylesheets/components/_dropdowns.scss +24 -0
  92. data/assets/stylesheets/components/_forms.scss +213 -0
  93. data/assets/stylesheets/components/_icons.scss +48 -0
  94. data/assets/stylesheets/components/_modal.scss +46 -0
  95. data/assets/stylesheets/components/_navbar.scss +280 -0
  96. data/assets/stylesheets/components/_navs.scss +32 -0
  97. data/assets/stylesheets/components/_pagination.scss +39 -0
  98. data/assets/stylesheets/components/_progress.scss +32 -0
  99. data/assets/stylesheets/components/_sidebar.scss +171 -0
  100. data/assets/stylesheets/components/_table.scss +36 -0
  101. data/assets/stylesheets/iconly.scss +327 -0
  102. data/assets/stylesheets/layouts/main.scss +48 -0
  103. data/assets/stylesheets/mixins/_navbar.scss +20 -0
  104. data/assets/stylesheets/pages/auth.scss +51 -0
  105. data/assets/stylesheets/pages/chat.scss +145 -0
  106. data/assets/stylesheets/pages/datatables.scss +7 -0
  107. data/assets/stylesheets/pages/dripicons.scss +20 -0
  108. data/assets/stylesheets/pages/email.scss +625 -0
  109. data/assets/stylesheets/pages/error.scss +22 -0
  110. data/assets/stylesheets/pages/form-element-select.scss +7 -0
  111. data/assets/stylesheets/pages/simple-datatables.scss +20 -0
  112. data/assets/stylesheets/pages/summernote.scss +4 -0
  113. data/assets/stylesheets/themes/dark/_mazer-dark.scss +82 -0
  114. data/assets/stylesheets/themes/dark/_root.scss +55 -0
  115. data/assets/stylesheets/themes/dark/_variables-dark.scss +329 -0
  116. data/assets/stylesheets/themes/dark/app-dark.scss +54 -0
  117. data/assets/stylesheets/widgets/chat.scss +26 -0
  118. data/assets/stylesheets/widgets/todo.scss +33 -0
  119. data/lib/mazer_rails/engine.rb +16 -0
  120. data/lib/mazer_rails/version.rb +5 -0
  121. data/lib/mazer_rails.rb +77 -0
  122. data/mazer-rails.gemspec +5 -5
  123. data/yarn.lock +9209 -0
  124. metadata +151 -4
  125. data/lib/mazer/rails/version.rb +0 -7
  126. data/lib/mazer/rails.rb +0 -10
@@ -0,0 +1,60 @@
1
+ var world_map = new jsVectorMap({
2
+ selector: "#world-map",
3
+ map: "world",
4
+ zoomOnScroll: false,
5
+ regionStyle: {
6
+ hover: {
7
+ fill: '#435ebe'
8
+ }
9
+ },
10
+ markers: [
11
+ {
12
+ name: 'Indonesia',
13
+ coords: [-6.229728, 106.6894311],
14
+ style: {
15
+ fill: '#435ebe'
16
+ }
17
+ },
18
+ {
19
+ name: 'United States',
20
+ coords: [38.8936708, -77.1546604],
21
+ style: {
22
+ fill: '#28ab55'
23
+ }
24
+ },
25
+ {
26
+ name: 'Russia',
27
+ coords: [55.5807481, 36.825129],
28
+ style: {
29
+ fill: '#f3616d'
30
+ }
31
+ },
32
+ {
33
+ name: 'China',
34
+ coords: [39.9385466, 116.1172735]
35
+ },
36
+ {
37
+ name: 'United Kingdom',
38
+ coords: [51.5285582, -0.2416812]
39
+ },
40
+ {
41
+ name: 'India',
42
+ coords: [26.8851417, 75.6504721]
43
+ },
44
+ {
45
+ name: 'Australia',
46
+ coords: [-35.2813046, 149.124822]
47
+ },
48
+ {
49
+ name: 'Brazil',
50
+ coords: [-22.9140693, -43.5860681]
51
+ },
52
+ {
53
+ name: 'Egypt',
54
+ coords: [26.834955, 26.3823725]
55
+ },
56
+ ],
57
+ onRegionTooltipShow(event, tooltip) {
58
+ tooltip.css({ backgroundColor: '#435ebe' })
59
+ }
60
+ });
@@ -0,0 +1,55 @@
1
+ $.extend(window.Parsley.options, {
2
+ focus: "first",
3
+ excluded:
4
+ "input[type=button], input[type=submit], input[type=reset], .search, .ignore",
5
+ triggerAfterFailure: "change blur",
6
+ errorsContainer: function (element) {},
7
+ trigger: "change",
8
+ successClass: "is-valid",
9
+ errorClass: "is-invalid",
10
+ classHandler: function (el) {
11
+ return el.$element.closest(".form-group")
12
+ },
13
+ errorsContainer: function (el) {
14
+ return el.$element.closest(".form-group")
15
+ },
16
+ errorsWrapper: '<div class="parsley-error"></div>',
17
+ errorTemplate: "<span></span>",
18
+ })
19
+
20
+ Parsley.on("field:validated", function (el) {
21
+ var elNode = $(el)[0]
22
+ if (elNode && !elNode.isValid()) {
23
+ var rqeuiredValResult = elNode.validationResult.filter(function (vr) {
24
+ return vr.assert.name === "required"
25
+ })
26
+ if (rqeuiredValResult.length > 0) {
27
+ var fieldNode = $(elNode.element)
28
+ var formGroupNode = fieldNode.closest(".form-group")
29
+ var lblNode = formGroupNode.find(".form-label:first")
30
+ if (lblNode.length > 0) {
31
+ // change default error message to include field label
32
+ var errorNode = formGroupNode.find(
33
+ "div.parsley-error span[class*=parsley-]"
34
+ )
35
+ if (errorNode.length > 0) {
36
+ var lblText = lblNode.text()
37
+ if (lblText) {
38
+ errorNode.html(lblText + " is required.")
39
+ }
40
+ }
41
+ }
42
+ }
43
+ }
44
+ })
45
+
46
+ Parsley.addValidator("restrictedCity", {
47
+ requirementType: "string",
48
+ validateString: function (value, requirement) {
49
+ value = (value || "").trim()
50
+ return value === "" || value.toLowerCase() === requirement.toLowerCase()
51
+ },
52
+ messages: {
53
+ en: 'You have to live in <a href="https://www.google.com/maps/place/Jakarta">Jakarta</a>.',
54
+ },
55
+ })
@@ -0,0 +1,27 @@
1
+ var snow = new Quill("#snow", {
2
+ theme: "snow",
3
+ })
4
+ var bubble = new Quill("#bubble", {
5
+ theme: "bubble",
6
+ })
7
+ new Quill("#full", {
8
+ bounds: "#full-container .editor",
9
+ modules: {
10
+ toolbar: [
11
+ [{ font: [] }, { size: [] }],
12
+ ["bold", "italic", "underline", "strike"],
13
+ [{ color: [] }, { background: [] }],
14
+ [{ script: "super" }, { script: "sub" }],
15
+ [
16
+ { list: "ordered" },
17
+ { list: "bullet" },
18
+ { indent: "-1" },
19
+ { indent: "+1" },
20
+ ],
21
+ ["direction", { align: [] }],
22
+ ["link", "image", "video"],
23
+ ["clean"],
24
+ ],
25
+ },
26
+ theme: "snow",
27
+ })
@@ -0,0 +1,38 @@
1
+ raterJs({
2
+ element: document.querySelector("#basic"),
3
+ starSize: 32,
4
+ rateCallback: function rateCallback(rating, done) {
5
+ this.setRating(rating)
6
+ done()
7
+ },
8
+ })
9
+
10
+ raterJs({
11
+ element: document.querySelector("#step"),
12
+ rateCallback: function rateCallback(rating, done) {
13
+ this.setRating(rating)
14
+ done()
15
+ },
16
+ starSize: 32,
17
+ step: 0.5,
18
+ })
19
+ raterJs({
20
+ element: document.querySelector("#unli1"),
21
+ rateCallback: function rateCallback(rating, done) {
22
+ this.setRating(rating)
23
+ done()
24
+ },
25
+ starSize: 32,
26
+ max: 10,
27
+ step: 0.5,
28
+ })
29
+ raterJs({
30
+ element: document.querySelector("#unli2"),
31
+ rateCallback: function rateCallback(rating, done) {
32
+ this.setRating(rating)
33
+ done()
34
+ },
35
+ starSize: 32,
36
+ max: 16,
37
+ step: 0.5,
38
+ })
@@ -0,0 +1,46 @@
1
+ let dataTable = new simpleDatatables.DataTable(
2
+ document.getElementById("table1")
3
+ )
4
+ // Move "per page dropdown" selector element out of label
5
+ // to make it work with bootstrap 5. Add bs5 classes.
6
+ function adaptPageDropdown() {
7
+ const selector = dataTable.wrapper.querySelector(".dataTable-selector")
8
+ selector.parentNode.parentNode.insertBefore(selector, selector.parentNode)
9
+ selector.classList.add("form-select")
10
+ }
11
+
12
+ // Add bs5 classes to pagination elements
13
+ function adaptPagination() {
14
+ const paginations = dataTable.wrapper.querySelectorAll(
15
+ "ul.dataTable-pagination-list"
16
+ )
17
+
18
+ for (const pagination of paginations) {
19
+ pagination.classList.add(...["pagination", "pagination-primary"])
20
+ }
21
+
22
+ const paginationLis = dataTable.wrapper.querySelectorAll(
23
+ "ul.dataTable-pagination-list li"
24
+ )
25
+
26
+ for (const paginationLi of paginationLis) {
27
+ paginationLi.classList.add("page-item")
28
+ }
29
+
30
+ const paginationLinks = dataTable.wrapper.querySelectorAll(
31
+ "ul.dataTable-pagination-list li a"
32
+ )
33
+
34
+ for (const paginationLink of paginationLinks) {
35
+ paginationLink.classList.add("page-link")
36
+ }
37
+ }
38
+
39
+ // Patch "per page dropdown" and pagination after table rendered
40
+ dataTable.on("datatable.init", function () {
41
+ adaptPageDropdown()
42
+ adaptPagination()
43
+ })
44
+
45
+ // Re-patch pagination after the page was changed
46
+ dataTable.on("datatable.page", adaptPagination)
@@ -0,0 +1,20 @@
1
+ $("#summernote").summernote({
2
+ tabsize: 2,
3
+ height: 120,
4
+ })
5
+ $("#hint").summernote({
6
+ height: 100,
7
+ toolbar: false,
8
+ placeholder: "type with apple, orange, watermelon and lemon",
9
+ hint: {
10
+ words: ["apple", "orange", "watermelon", "lemon"],
11
+ match: /\b(\w{1,})$/,
12
+ search: function (keyword, callback) {
13
+ callback(
14
+ $.grep(this.words, function (item) {
15
+ return item.indexOf(keyword) === 0
16
+ })
17
+ )
18
+ },
19
+ },
20
+ })
@@ -0,0 +1,142 @@
1
+ document.getElementById("basic").addEventListener("click", (e) => {
2
+ Swal.fire("Any fool can use a computer")
3
+ })
4
+ document.getElementById("footer").addEventListener("click", (e) => {
5
+ Swal.fire({
6
+ icon: "error",
7
+ title: "Oops...",
8
+ text: "Something went wrong!",
9
+ footer: "<a href>Why do I have this issue?</a>",
10
+ })
11
+ })
12
+ document.getElementById("title").addEventListener("click", (e) => {
13
+ Swal.fire("The Internet?", "That thing is still around?", "question")
14
+ })
15
+ document.getElementById("success").addEventListener("click", (e) => {
16
+ Swal.fire({
17
+ icon: "success",
18
+ title: "Success",
19
+ })
20
+ })
21
+ document.getElementById("error").addEventListener("click", (e) => {
22
+ Swal.fire({
23
+ icon: "error",
24
+ title: "Error",
25
+ })
26
+ })
27
+ document.getElementById("warning").addEventListener("click", (e) => {
28
+ Swal.fire({
29
+ icon: "warning",
30
+ title: "Warning",
31
+ })
32
+ })
33
+ document.getElementById("info").addEventListener("click", (e) => {
34
+ Swal.fire({
35
+ icon: "info",
36
+ title: "Info",
37
+ })
38
+ })
39
+ document.getElementById("question").addEventListener("click", (e) => {
40
+ Swal.fire({
41
+ icon: "question",
42
+ title: "Question",
43
+ })
44
+ })
45
+ document.getElementById("text").addEventListener("click", (e) => {
46
+ Swal.fire({
47
+ title: "Enter your IP address",
48
+ input: "text",
49
+ inputLabel: "Your IP address",
50
+ showCancelButton: true,
51
+ })
52
+ })
53
+ document.getElementById("email").addEventListener("click", async (e) => {
54
+ const { value: email } = await Swal.fire({
55
+ title: "Input email address",
56
+ input: "email",
57
+ inputLabel: "Your email address",
58
+ inputPlaceholder: "Enter your email address",
59
+ })
60
+
61
+ if (email) {
62
+ Swal.fire(`Entered email: ${email}`)
63
+ }
64
+ })
65
+ document.getElementById("url").addEventListener("click", async (e) => {
66
+ const { value: url } = await Swal.fire({
67
+ input: "url",
68
+ inputLabel: "URL address",
69
+ inputPlaceholder: "Enter the URL",
70
+ })
71
+
72
+ if (url) {
73
+ Swal.fire(`Entered URL: ${url}`)
74
+ }
75
+ })
76
+ document.getElementById("password").addEventListener("click", async (e) => {
77
+ const { value: password } = await Swal.fire({
78
+ title: "Enter your password",
79
+ input: "password",
80
+ inputLabel: "Password",
81
+ inputPlaceholder: "Enter your password",
82
+ inputAttributes: {
83
+ maxlength: 10,
84
+ autocapitalize: "off",
85
+ autocorrect: "off",
86
+ },
87
+ })
88
+
89
+ if (password) {
90
+ Swal.fire(`Entered password: ${password}`)
91
+ }
92
+ })
93
+ document.getElementById("textarea").addEventListener("click", async (e) => {
94
+ const { value: text } = await Swal.fire({
95
+ input: "textarea",
96
+ inputLabel: "Message",
97
+ inputPlaceholder: "Type your message here...",
98
+ inputAttributes: {
99
+ "aria-label": "Type your message here",
100
+ },
101
+ showCancelButton: true,
102
+ })
103
+
104
+ if (text) {
105
+ Swal.fire(text)
106
+ }
107
+ })
108
+ document.getElementById("select").addEventListener("click", async (e) => {
109
+ const { value: fruit } = await Swal.fire({
110
+ title: "Select field validation",
111
+ input: "select",
112
+ inputOptions: {
113
+ Fruits: {
114
+ apples: "Apples",
115
+ bananas: "Bananas",
116
+ grapes: "Grapes",
117
+ oranges: "Oranges",
118
+ },
119
+ Vegetables: {
120
+ potato: "Potato",
121
+ broccoli: "Broccoli",
122
+ carrot: "Carrot",
123
+ },
124
+ icecream: "Ice cream",
125
+ },
126
+ inputPlaceholder: "Select a fruit",
127
+ showCancelButton: true,
128
+ inputValidator: (value) => {
129
+ return new Promise((resolve) => {
130
+ if (value === "oranges") {
131
+ resolve()
132
+ } else {
133
+ resolve("You need to select oranges :)")
134
+ }
135
+ })
136
+ },
137
+ })
138
+
139
+ if (fruit) {
140
+ Swal.fire(`You selected: ${fruit}`)
141
+ }
142
+ })
@@ -0,0 +1,22 @@
1
+ document.addEventListener("DOMContentLoaded", () => {
2
+ console.log("initing", document.body.classList.contains("theme-dark"))
3
+
4
+ const themeOptions = document.body.classList.contains("theme-dark")
5
+ ? {
6
+ skin: "oxide-dark",
7
+ content_css: "dark",
8
+ }
9
+ : {
10
+ skin: "oxide",
11
+ content_css: "default",
12
+ }
13
+
14
+ tinymce.init({ selector: "#default", ...themeOptions })
15
+ tinymce.init({
16
+ selector: "#dark",
17
+ toolbar:
18
+ "undo redo styleselect bold italic alignleft aligncenter alignright bullist numlist outdent indent code",
19
+ plugins: "code",
20
+ ...themeOptions,
21
+ })
22
+ })
@@ -0,0 +1,81 @@
1
+ document.getElementById("basic").addEventListener("click", () => {
2
+ Toastify({
3
+ text: "This is a toast",
4
+ duration: 3000,
5
+ }).showToast()
6
+ })
7
+ document.getElementById("background").addEventListener("click", () => {
8
+ Toastify({
9
+ text: "This is a toast",
10
+ duration: 3000,
11
+ backgroundColor: "linear-gradient(to right, #00b09b, #96c93d)",
12
+ }).showToast()
13
+ })
14
+ document.getElementById("close").addEventListener("click", () => {
15
+ Toastify({
16
+ text: "Click close button",
17
+ duration: 3000,
18
+ close: true,
19
+ backgroundColor: "#4fbe87",
20
+ }).showToast()
21
+ })
22
+ document.getElementById("top-left").addEventListener("click", () => {
23
+ Toastify({
24
+ text: "This is toast in top left",
25
+ duration: 3000,
26
+ close: true,
27
+ gravity: "top",
28
+ position: "left",
29
+ backgroundColor: "#4fbe87",
30
+ }).showToast()
31
+ })
32
+ document.getElementById("top-center").addEventListener("click", () => {
33
+ Toastify({
34
+ text: "This is toast in top center",
35
+ duration: 3000,
36
+ close: true,
37
+ gravity: "top",
38
+ position: "center",
39
+ backgroundColor: "#4fbe87",
40
+ }).showToast()
41
+ })
42
+ document.getElementById("top-right").addEventListener("click", () => {
43
+ Toastify({
44
+ text: "This is toast in top right",
45
+ duration: 3000,
46
+ close: true,
47
+ gravity: "top",
48
+ position: "right",
49
+ backgroundColor: "#4fbe87",
50
+ }).showToast()
51
+ })
52
+ document.getElementById("bottom-right").addEventListener("click", () => {
53
+ Toastify({
54
+ text: "This is toast in bottom right",
55
+ duration: 3000,
56
+ close: true,
57
+ gravity: "bottom",
58
+ position: "right",
59
+ backgroundColor: "#4fbe87",
60
+ }).showToast()
61
+ })
62
+ document.getElementById("bottom-center").addEventListener("click", () => {
63
+ Toastify({
64
+ text: "This is toast in bottom center",
65
+ duration: 3000,
66
+ close: true,
67
+ gravity: "bottom",
68
+ position: "center",
69
+ backgroundColor: "#4fbe87",
70
+ }).showToast()
71
+ })
72
+ document.getElementById("bottom-left").addEventListener("click", () => {
73
+ Toastify({
74
+ text: "This is toast in bottom left",
75
+ duration: 3000,
76
+ close: true,
77
+ gravity: "bottom",
78
+ position: "left",
79
+ backgroundColor: "#4fbe87",
80
+ }).showToast()
81
+ })