{
"/app.js": "/app.js?id=99f84d421ae083196e0a45c3c310168b",
"/app-dark.css": "/app-dark.css?id=1ea407db56c5163ae29311f1f38eb7b9",
"/app.css": "/app.css?id=de4c978567bfd90b38d186937dee5ccf"
}
......@@ -12,3 +12,5 @@
@import url('https://fonts.googleapis.com/css2?family=Sarabun:wght@500&display=swap');
/* @import "./components/prism.css";
@import "./components/prism-line-numbers.css"; */
\ No newline at end of file
......@@ -33,7 +33,7 @@ html.dark {
}
body {
@apply bg-slate-50 font-sans text-sm leading-5 text-slate-500 antialiased [text-rendering:optimizeLegibility] dark:bg-navy-900 dark:text-navy-200 dark:[color-scheme:dark];
@apply bg-slate-50 font-sans text-sm leading-5 text-black antialiased [text-rendering:optimizeLegibility] dark:bg-navy-900 dark:text-navy-200 dark:[color-scheme:dark];
}
body.is-monochrome::before {
......
pre[class*="language-"].line-numbers {
position: relative;
padding-left: 3.8em;
counter-reset: linenumber;
}
pre[class*="language-"].line-numbers > code {
position: relative;
white-space: inherit;
}
.line-numbers .line-numbers-rows {
position: absolute;
pointer-events: none;
top: 0;
font-size: 100%;
left: -3.8em;
width: 3em; /* works for line-numbers below 1000 lines */
letter-spacing: -1px;
border-right: 1px solid #999;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.line-numbers-rows > span {
display: block;
counter-increment: linenumber;
}
.line-numbers-rows > span:before {
content: counter(linenumber);
color: #999;
display: block;
padding-right: 0.8em;
text-align: right;
}
/* PrismJS 1.29.0
https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript+abap+abnf+actionscript+ada+agda+al+antlr4+apacheconf+apex+apl+applescript+aql+arduino+arff+armasm+arturo+asciidoc+aspnet+asm6502+asmatmel+autohotkey+autoit+avisynth+avro-idl+awk+bash+basic+batch+bbcode+bbj+bicep+birb+bison+bnf+bqn+brainfuck+brightscript+bro+bsl+c+csharp+cpp+cfscript+chaiscript+cil+cilkc+cilkcpp+clojure+cmake+cobol+coffeescript+concurnas+csp+cooklang+coq+crystal+css-extras+csv+cue+cypher+d+dart+dataweave+dax+dhall+diff+django+dns-zone-file+docker+dot+ebnf+editorconfig+eiffel+ejs+elixir+elm+etlua+erb+erlang+excel-formula+fsharp+factor+false+firestore-security-rules+flow+fortran+ftl+gml+gap+gcode+gdscript+gedcom+gettext+gherkin+git+glsl+gn+linker-script+go+go-module+gradle+graphql+groovy+haml+handlebars+haskell+haxe+hcl+hlsl+hoon+http+hpkp+hsts+ichigojam+icon+icu-message-format+idris+ignore+inform7+ini+io+j+java+javadoc+javadoclike+javastacktrace+jexl+jolie+jq+jsdoc+js-extras+json+json5+jsonp+jsstacktrace+js-templates+julia+keepalived+keyman+kotlin+kumir+kusto+latex+latte+less+lilypond+liquid+lisp+livescript+llvm+log+lolcode+lua+magma+makefile+markdown+markup-templating+mata+matlab+maxscript+mel+mermaid+metafont+mizar+mongodb+monkey+moonscript+n1ql+n4js+nand2tetris-hdl+naniscript+nasm+neon+nevod+nginx+nim+nix+nsis+objectivec+ocaml+odin+opencl+openqasm+oz+parigp+parser+pascal+pascaligo+psl+pcaxis+peoplecode+perl+php+phpdoc+php-extras+plant-uml+plsql+powerquery+powershell+processing+prolog+promql+properties+protobuf+pug+puppet+pure+purebasic+purescript+python+qsharp+q+qml+qore+r+racket+cshtml+jsx+tsx+reason+regex+rego+renpy+rescript+rest+rip+roboconf+robotframework+ruby+rust+sas+sass+scss+scala+scheme+shell-session+smali+smalltalk+smarty+sml+solidity+solution-file+soy+sparql+splunk-spl+sqf+sql+squirrel+stan+stata+iecst+stylus+supercollider+swift+systemd+t4-templating+t4-cs+t4-vb+tap+tcl+tt2+textile+toml+tremor+turtle+twig+typescript+typoscript+unrealscript+uorazor+uri+v+vala+vbnet+velocity+verilog+vhdl+vim+visual-basic+warpscript+wasm+web-idl+wgsl+wiki+wolfram+wren+xeora+xml-doc+xojo+xquery+yaml+yang+zig&plugins=line-highlight+diff-highlight+treeview */
code[class*=language-],pre[class*=language-]{color:#000;background:0 0;text-shadow:0 1px #fff;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}code[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,pre[class*=language-]::-moz-selection{text-shadow:none;background:#b3d4fc}code[class*=language-] ::selection,code[class*=language-]::selection,pre[class*=language-] ::selection,pre[class*=language-]::selection{text-shadow:none;background:#b3d4fc}@media print{code[class*=language-],pre[class*=language-]{text-shadow:none}}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#f5f2f0}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#708090}.token.punctuation{color:#999}.token.namespace{opacity:.7}.token.boolean,.token.constant,.token.deleted,.token.number,.token.property,.token.symbol,.token.tag{color:#905}.token.attr-name,.token.builtin,.token.char,.token.inserted,.token.selector,.token.string{color:#690}.language-css .token.string,.style .token.string,.token.entity,.token.operator,.token.url{color:#9a6e3a;background:hsla(0,0%,100%,.5)}.token.atrule,.token.attr-value,.token.keyword{color:#07a}.token.class-name,.token.function{color:#dd4a68}.token.important,.token.regex,.token.variable{color:#e90}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}
pre[data-line]{position:relative;padding:1em 0 1em 3em}.line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}@media print{.line-highlight{-webkit-print-color-adjust:exact;color-adjust:exact}}.line-highlight:before,.line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}.line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}.line-numbers .line-highlight:after,.line-numbers .line-highlight:before{content:none}pre[id].linkable-line-numbers span.line-numbers-rows{pointer-events:all}pre[id].linkable-line-numbers span.line-numbers-rows>span:before{cursor:pointer}pre[id].linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:rgba(128,128,128,.2)}
pre.diff-highlight>code .token.deleted:not(.prefix),pre>code.diff-highlight .token.deleted:not(.prefix){background-color:rgba(255,0,0,.1);color:inherit;display:block}pre.diff-highlight>code .token.inserted:not(.prefix),pre>code.diff-highlight .token.inserted:not(.prefix){background-color:rgba(0,255,128,.1);color:inherit;display:block}
.token.treeview-part .entry-line{position:relative;text-indent:-99em;display:inline-block;vertical-align:top;width:1.2em}.token.treeview-part .entry-line:before,.token.treeview-part .line-h:after{content:"";position:absolute;top:0;left:50%;width:50%;height:100%}.token.treeview-part .line-h:before,.token.treeview-part .line-v:before{border-left:1px solid #ccc}.token.treeview-part .line-v-last:before{height:50%;border-left:1px solid #ccc;border-bottom:1px solid #ccc}.token.treeview-part .line-h:after{height:50%;border-bottom:1px solid #ccc}.token.treeview-part .entry-name{position:relative;display:inline-block;vertical-align:top}.token.treeview-part .entry-name.dotfile{opacity:.5}@font-face{font-family:PrismTreeview;src:url(data:application/font-woff;base64,d09GRgABAAAAAAgYAAsAAAAAEGAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPwAAAFY1UkH9Y21hcAAAAYQAAAB/AAACCtvO7yxnbHlmAAACBAAAA+MAAAlACm1VqmhlYWQAAAXoAAAAKgAAADZfxj5jaGhlYQAABhQAAAAYAAAAJAFbAMFobXR4AAAGLAAAAA4AAAA0CGQAAGxvY2EAAAY8AAAAHAAAABwM9A9CbWF4cAAABlgAAAAfAAAAIAEgAHZuYW1lAAAGeAAAATcAAAJSfUrk+HBvc3QAAAewAAAAZgAAAIka0DSfeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGRYyjiBgZWBgaGQoRZISkLpUAYOBj0GBiYGVmYGrCAgzTWFweEV4ysehs1ArgDDFgZGIA3CDAB2tQjAAHic7ZHLEcMwCESfLCz/VEoKSEE5parURxMOC4c0Ec283WGFdABgBXrwCAzam4bOK9KWeefM3Hhmjyn3ed+hTRq1pS7Ra/HjYGPniHcXMy4G/zNTP7/KW5HTXArkvdBW3ArN19dCG/NRIN8K5HuB/CiQn4U26VeBfBbML9NEH78AeJyVVc1u20YQ3pn905JcSgr/YsuSDTEg3cR1bFEkYyS1HQcQ2jQF2hot6vYSoECKnnPLA/SWUy9NTr31Bfp+6azsNI0SGiolzu7ODnfn+2Z2lnHG3rxhr9nfLGKbLGesncAYYnUHpsVnMG/uwyzNdFIVd6HI6twp8+R3LpT4TSglLoTHwwJgG2/dFvKrl9yI507/p5CCq4LTxB/PlPjkFaMHnWB/0S9je7RTPS+utnGtom1T2q5pk/e3H0M1S18rsXAL7wgpxQuhAmteGGvNjmcfGXuwnFNOPCXxeOGmnjrBLWNyBeNtVq2Hs03yus1aPS3mzSyNVSfu588iW1Q93x/4fjcHn+5EkS2tMxr4xIRa8ese+4L9uKZnxEqs8+ldyN9atU02a5t5uQ8hZGms1QTKpaKYqnipiNNOAIeIADC0JNEOYY+jtSgFoOchiAjRGFACpUTRje8bwIYWGCDEgENY8MEu9bnCYCdAxftoNg0KiSpUtPaHcanYwzXRu6T4r40b5npal3V7UHWCPJW9niyl1vIHgoujEXZjudBkeWkOeMQBRmbEPhKzij1i52t6/TadL+3q7H0U1eq4E8cG4gIIwQLx8VX7ToPXgPrehVc5QXHR7gMSmwjKfaYAP4KvZV+yn9bE18y2IY37LvtyrSg3i7ZK++B603ndlg/gBJpZRsfpBI6hyiaQ6FjlnThz8lAC3LgBIMnXDOAXxBQ4SIgiEhx2AcGCAwAhwjXRpCQms42bwAUt75BvAwgONzdgOfWEwzk4Ylzj4mz+5YEzzXzWX9aNlk7ot65y5QnBHsNlm6zDTu7sspRqG4V+fgJ1lVBZ07Nm7s5nemo3Lf3PO7iwtnroQ5/YDGwPRUip6fV6L+27p+wCHwSvPs85UnHqId8NAn5IBsKdv95KrL9m31Gsf2a/rluDslk1y1J9GE+LUmmVT/OyOHaFKGnapt2H5XeJTmKd6qYNoVVZOy+pWzr7rMip3ndG/4mQSoUcMbAqG/YNIAdXhkAqTVruXhocSKN0iS4Rwj7vSS4fcF/La07BfeQSuRAcFeW+9igjwPhhYPpGCBCBHhxiKMyFMFT7ziRH7RtfIWdiha+TdW+Rqs7bLHdN2ZJIKl0um0x3op9saYr0REeRdj09pl43pMzz4tjztrY8L4o8bzT+oLY27PR/eFtXs/YY5vtwB5Iqad14eYN0ujveMaGWqkdU3TKbQSC5Uvxaf4fA7SAQ3r2tEfIhd4duld91bwMisjqBw22orthNcroXl7KqO1329HBgAexgoCfGAwiDPoBnriki3lmNojrzvD0tjo6E3vPYP6E2BMIAeJxjYGRgYADiY8t3FsTz23xl4GbYzIAB/v9nWM6wBcjgYGAC8QH+QQhZAAB4nGNgZGBg2MzAACeXMzAyoAJeADPyAh14nGNgAILNpGEA0fgIZQAAAAAAAAA2AHIAvgE+AZgCCAKMAv4DlgPsBEYEoHicY2BkYGDgZchi4GQAASYg5gJCBob/YD4DABTSAZcAeJx9kU1uwjAQhV/4qwpqhdSqi67cTTeVEmBXDgBbhBD7AHYISuLUMSD2PUdP0HNwjp6i676k3qQS9Ujjb968mYUNoI8zPJTHw02Vy9PAFatfbpLuHbfIT47b6MF33KH+6riLF0wc93CHN27wWtdUHvHuuIFbfDhuUv903CKfHbfxgC/HHerfjrtYen3HPTx7ambiIl0YKQ+xPM5ltE9CU9NqxVKaItaZGPqDmj6VmTShlRuxOoniEI2sVUIZnYqJzqxMEi1yo3dybf2ttfk4CJTT/bVOMYNBjAIpFiTJOLCWOGLOHGGPBCE7l32XO0tmw04MjQwCQ7774B//lDmrZkJY3hvOrHBiLuiJMKJqoVgrejQ3CP5Yubt0JwxNJa96Oypr6j621VSOMQKG+uP36eKmHylcb0MAeJxtwdEOgjAMBdBeWEFR/Mdl7bTJtMsygc/nwVfPoYF+QP+tGDAigDFhxgVXLLjhjhUPCtmKTtmLaGN7x6dy/Io5bybqoevRQ3LRObb0sk3HKpn1SFqW6ru26vbpYfcmRCccJhqsAAA=) format("woff")}.token.treeview-part .entry-name:before{content:"\ea01";font-family:PrismTreeview;font-size:inherit;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:2.5ex;display:inline-block}.token.treeview-part .entry-name.dir:before{content:"\ea02"}.token.treeview-part .entry-name.ext-bmp:before,.token.treeview-part .entry-name.ext-eps:before,.token.treeview-part .entry-name.ext-gif:before,.token.treeview-part .entry-name.ext-jpe:before,.token.treeview-part .entry-name.ext-jpeg:before,.token.treeview-part .entry-name.ext-jpg:before,.token.treeview-part .entry-name.ext-png:before,.token.treeview-part .entry-name.ext-svg:before,.token.treeview-part .entry-name.ext-tiff:before{content:"\ea03"}.token.treeview-part .entry-name.ext-cfg:before,.token.treeview-part .entry-name.ext-conf:before,.token.treeview-part .entry-name.ext-config:before,.token.treeview-part .entry-name.ext-csv:before,.token.treeview-part .entry-name.ext-ini:before,.token.treeview-part .entry-name.ext-log:before,.token.treeview-part .entry-name.ext-md:before,.token.treeview-part .entry-name.ext-nfo:before,.token.treeview-part .entry-name.ext-txt:before{content:"\ea06"}.token.treeview-part .entry-name.ext-asp:before,.token.treeview-part .entry-name.ext-aspx:before,.token.treeview-part .entry-name.ext-c:before,.token.treeview-part .entry-name.ext-cc:before,.token.treeview-part .entry-name.ext-cpp:before,.token.treeview-part .entry-name.ext-cs:before,.token.treeview-part .entry-name.ext-css:before,.token.treeview-part .entry-name.ext-h:before,.token.treeview-part .entry-name.ext-hh:before,.token.treeview-part .entry-name.ext-htm:before,.token.treeview-part .entry-name.ext-html:before,.token.treeview-part .entry-name.ext-jav:before,.token.treeview-part .entry-name.ext-java:before,.token.treeview-part .entry-name.ext-js:before,.token.treeview-part .entry-name.ext-php:before,.token.treeview-part .entry-name.ext-rb:before,.token.treeview-part .entry-name.ext-xml:before{content:"\ea07"}.token.treeview-part .entry-name.ext-7z:before,.token.treeview-part .entry-name.ext-bz2:before,.token.treeview-part .entry-name.ext-bz:before,.token.treeview-part .entry-name.ext-gz:before,.token.treeview-part .entry-name.ext-rar:before,.token.treeview-part .entry-name.ext-tar:before,.token.treeview-part .entry-name.ext-tgz:before,.token.treeview-part .entry-name.ext-zip:before{content:"\ea08"}.token.treeview-part .entry-name.ext-aac:before,.token.treeview-part .entry-name.ext-au:before,.token.treeview-part .entry-name.ext-cda:before,.token.treeview-part .entry-name.ext-flac:before,.token.treeview-part .entry-name.ext-mp3:before,.token.treeview-part .entry-name.ext-oga:before,.token.treeview-part .entry-name.ext-ogg:before,.token.treeview-part .entry-name.ext-wav:before,.token.treeview-part .entry-name.ext-wma:before{content:"\ea04"}.token.treeview-part .entry-name.ext-avi:before,.token.treeview-part .entry-name.ext-flv:before,.token.treeview-part .entry-name.ext-mkv:before,.token.treeview-part .entry-name.ext-mov:before,.token.treeview-part .entry-name.ext-mp4:before,.token.treeview-part .entry-name.ext-mpeg:before,.token.treeview-part .entry-name.ext-mpg:before,.token.treeview-part .entry-name.ext-ogv:before,.token.treeview-part .entry-name.ext-webm:before{content:"\ea05"}.token.treeview-part .entry-name.ext-pdf:before{content:"\ea09"}.token.treeview-part .entry-name.ext-xls:before,.token.treeview-part .entry-name.ext-xlsx:before{content:"\ea0a"}.token.treeview-part .entry-name.ext-doc:before,.token.treeview-part .entry-name.ext-docm:before,.token.treeview-part .entry-name.ext-docx:before{content:"\ea0c"}.token.treeview-part .entry-name.ext-pps:before,.token.treeview-part .entry-name.ext-ppt:before,.token.treeview-part .entry-name.ext-pptx:before{content:"\ea0b"}
table.is-hoverable > tbody > tr:hover > td,
table.is-zebra > tbody > tr:nth-child(even) > td {
@apply bg-slate-100 dark:bg-navy-600;
@apply bg-slate-100 dark:bg-navy-600 text-white;
}
import Alpine from "alpinejs";
import $ from 'jquery';
import Alpine from 'alpinejs';
import persist from '@alpinejs/persist';
import collapse from '@alpinejs/collapse';
import intersect from '@alpinejs/intersect';
// AlpineJS Plugins
import persist from "@alpinejs/persist"; // @see https://alpinejs.dev/plugins/persist
import collapse from "@alpinejs/collapse"; // @see https://alpinejs.dev/plugins/collapse
import intersect from "@alpinejs/intersect"; // @see https://alpinejs.dev/plugins/intersect
// Alpine.js Plugins
Alpine.plugin(persist);
Alpine.plugin(collapse);
Alpine.plugin(intersect);
// Third Party Libraries
/*
Scrollbar Library
@see https://github.com/Grsmto/simplebar
*/
import SimpleBar from "simplebar";
/*
Code highlighting library
Just for demo purpose only for highlighting code
@see https://highlightjs.org/
*/
import hljs from "highlight.js/lib/core";
import xml from "highlight.js/lib/languages/xml";
/*
Date Utility Library
@see https://day.js.org/
*/
import dayjs from "dayjs";
/*
Carousel Library
@see https://swiperjs.com/
*/
import Swiper from "swiper/bundle";
/*
Drag & Drop Library
@see https://github.com/SortableJS/Sortable
*/
import Sortable from "sortablejs";
/*
Charts Libraries
@see https://apexcharts.com/
*/
import ApexCharts from "apexcharts";
/*
Tables Libraries
@see https://gridjs.io/
*/
import * as Gridjs from "gridjs";
// Forms Libraries
import "@caneara/iodine"; // @see https://github.com/caneara/iodine
import * as FilePond from "filepond"; // @see https://pqina.nl/filepond/
import FilePondPluginImagePreview from "filepond-plugin-image-preview"; // @see https://pqina.nl/filepond/docs/api/plugins/image-preview/
import FilePondPluginFileEncode from "filepond-plugin-file-encode"; // @see https://pqina.nl/filepond/docs/api/plugins/image-preview/
import Quill from "quill/dist/quill.min"; // @see https://quilljs.com/
import flatpickr from "flatpickr"; // @see https://flatpickr.js.org/
import Tom from "tom-select/dist/js/tom-select.complete.min"; // @see https://tom-select.js.org/
// Import Fortawesome icons
import $ from 'jquery';
import SimpleBar from 'simplebar';
import hljs from 'highlight.js/lib/core';
import sql from 'highlight.js/lib/languages/sql';
import xml from 'highlight.js/lib/languages/xml';
import dayjs from 'dayjs';
import Swiper from 'swiper/bundle';
import Sortable from 'sortablejs';
import ApexCharts from 'apexcharts';
import * as Gridjs from 'gridjs';
import "@caneara/iodine";
import * as FilePond from 'filepond';
import FilePondPluginImagePreview from 'filepond-plugin-image-preview';
import FilePondPluginFileEncode from 'filepond-plugin-file-encode';
//import Quill from 'quill/dist/quill.min';
import Quill from 'quill/dist/quill.js';
import 'quill/dist/quill.snow.css';
import flatpickr from 'flatpickr';
import Tom from 'tom-select/dist/js/tom-select.complete.min';
import "@fortawesome/fontawesome-free/css/all.css";
// import Prism from 'prismjs';
// import 'prismjs/themes/prism.css';
// import 'prismjs/components/prism-diff.min.js';
// import 'prismjs/plugins/line-numbers/prism-line-numbers.css';
// import 'prismjs/plugins/line-numbers/prism-line-numbers.js';
import ClassicEditor from '@ckeditor/ckeditor5-build-classic';
// Helper Functions
import * as helpers from "./utils/helpers";
// Pages Scripts
import * as pages from "./pages";
// Global Store
import store from "./store";
// Breakpoints Store
import breakpoints from "./utils/breakpoints";
// Alpine Components
import usePopper from "./components/usePopper";
import accordionItem from "./components/accordionItem";
// Alpine Directives
import tooltip from "./directives/tooltip";
import inputMask from "./directives/inputMask";
// Alpine Magic Functions
import notification from "./magics/notification";
import clipboard from "./magics/clipboard";
// Register HTML, XML language for highlight.js
// Just for demo purpose only for highlighting code
hljs.registerLanguage("xml", xml);
import * as helpers from './utils/helpers';
import * as pages from './pages';
import store from './store';
import breakpoints from './utils/breakpoints';
import usePopper from './components/usePopper';
import accordionItem from './components/accordionItem';
import tooltip from './directives/tooltip';
import inputMask from './directives/inputMask';
import notification from './magics/notification';
import clipboard from './magics/clipboard';
// Register highlight.js languages
hljs.registerLanguage('xml', xml);
hljs.registerLanguage('sql', sql);
hljs.configure({ ignoreUnescapedHTML: true });
// Register plugin image preview for filepond
// Register FilePond plugins
FilePond.registerPlugin(FilePondPluginImagePreview);
FilePond.registerPlugin(FilePondPluginFileEncode);
......@@ -108,24 +69,43 @@ window.FilePond = FilePond;
window.flatpickr = flatpickr;
window.Quill = Quill;
window.Tom = Tom;
window.Alpine = Alpine;
window.helpers = helpers;
window.pages = pages;
window.$ = $;
Alpine.plugin(persist);
Alpine.plugin(collapse);
Alpine.plugin(intersect);
Alpine.directive("tooltip", tooltip);
Alpine.directive("input-mask", inputMask);
Alpine.magic("notification", () => notification);
Alpine.magic("clipboard", () => clipboard);
Alpine.store("breakpoints", breakpoints);
Alpine.store("global", store);
Alpine.data("usePopper", usePopper);
Alpine.data("accordionItem", accordionItem);
window.ClassicEditor= ClassicEditor;
Alpine.directive('tooltip', tooltip);
Alpine.directive('input-mask', inputMask);
Alpine.magic('notification', () => notification);
Alpine.magic('clipboard', () => clipboard);
Alpine.store('breakpoints', breakpoints);
Alpine.store('global', store);
Alpine.data('usePopper', usePopper);
Alpine.data('accordionItem', accordionItem);
Alpine.start();
document.addEventListener('DOMContentLoaded', async (event) => {
//Prism.highlightAll();
hljs.highlightAll();
});
document.addEventListener('livewire:load', async function () {
//Prism.highlightAll();
hljs.highlightAll();
});
Livewire.hook('message.processed', (message, component) => {
// Find all code blocks inside the component that was updated
component.el.querySelectorAll('pre').forEach((block) => {
hljs.highlightElement(block); // Apply syntax highlighting to the specific element
});
});
window.addEventListener('diffResultUpdated', async function () {
//Prism.highlightAll();
hljs.highlightAll();
});
\ No newline at end of file
const groupSelect = {
group: {
valueField: "id",
searchField: "name",
options: [], // Initialize empty array for options
placeholder: "",
placeholder: "Select the group",
plugins: ['remove_button'],
closeAfterSelect: true,
onDelete: function (values) {
},
render: {
option: function (data, escape) {
if (!data.name) {
console.error("Invalid data for option:", data);
return "";
}
return `<div class="flex space-x-3">
<div class="flex flex-col">
<span>${escape(data.name)}</span>
</div>
</div>`;
},
item: function (data, escape) {
if (!data.name) {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white px-2 py-2 mb-2 mr-2">
<span class="mx-2">${escape(data.name)}</span>
</span>`;
},
},
},
};
const fetchGroups = (groupSelect) => {
return fetch('/get-groups')
.then(response => response.json())
.then(data => {
if (!data.groups || !Array.isArray(data.groups)) {
console.error("Invalid response format:", data);
return;
}
groupSelect.group.options = data.groups;
})
.catch(error => console.error('Error fetching group data:', error));
};
export { groupSelect, fetchGroups };
\ No newline at end of file
......@@ -2,6 +2,8 @@ export { charts } from "./apexchartDemo";
export { tomSelect } from "./tomselectDemo";
export { userSelect , fetchUsers } from "./userSelect";
export { roleSelect , fetchRoles } from "./roleSelect";
export { groupSelect , fetchGroups } from "./groupSelect";
export { serverLicenseSelect , fetchServerLicenses } from "./serverLicenseSelect";
export * as tables from "./tablesDemo";
export * as formValidation from "./formValidationDemo";
......
......@@ -4,7 +4,9 @@ const roleSelect = {
searchField: "name",
options: [], // Initialize empty array for options
placeholder: "",
placeholder: "Select the role",
plugins: ['remove_button'],
closeAfterSelect: true,
onDelete: function (values) {
},
render: {
......@@ -24,7 +26,7 @@ const roleSelect = {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white p-px mr-2">
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white px-2 py-2 mb-2 mr-2">
<span class="mx-2">${escape(data.name)}</span>
</span>`;
},
......
const serverLicenseSelect = {
serverkey: {
valueField: "id",
searchField: "name",
options: [], // Initialize empty array for options
placeholder: "",
plugins: ['remove_button'],
onDelete: function (values) {
},
render: {
option: function (data, escape) {
if (!data.name) {
console.error("Invalid data for option:", data);
return "";
}
return `<div class="flex space-x-3">
<div class="flex flex-col">
<span>${escape(data.name)}</span>
</div>
</div>`;
},
item: function (data, escape) {
if (!data.name) {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-lg bg-primary dark:bg-accent text-white px-2 m-1 mr-2 py-2">
<span class="mx-2">${escape(data.name)}</span>
</span>`;
},
},
},
};
const fetchServerLicenses = (serverLicenseSelect) => {
return fetch('/get-serverlicense')
.then(response => response.json())
.then(data => {
if (!data.serverLicenses || !Array.isArray(data.serverLicenses)) {
console.error("Invalid response format:", data);
return;
}
serverLicenseSelect.serverkey.options = data.serverLicenses;
})
.catch(error => console.error('Error fetching serverkey data:', error));
};
export { serverLicenseSelect, fetchServerLicenses };
\ No newline at end of file
......@@ -101,10 +101,10 @@ export function initGridTableExapmle() {
formatter: () =>
Gridjs.html(`<div class="flex justify-center space-x-2">
<button @click="editItem" class="btn h-8 w-8 p-0 text-info hover:bg-info/20 focus:bg-info/20 active:bg-info/25">
<i class="fa fa-edit"></i>
<i aria-hidden="true" class="fa fa-edit"></i>
</button>
<button @click="deleteItem" class="btn h-8 w-8 p-0 text-error hover:bg-error/20 focus:bg-error/20 active:bg-error/25">
<i class="fa fa-trash-alt"></i>
<i aria-hidden="true" class="fa fa-trash-alt"></i>
</button>
</div>`),
},
......
const userSelect = {
user: {
valueField: "id",
searchField: "username",
options: [], // Initialize empty array for options
placeholder: "Select the user",
plugins: ['remove_button'],
closeAfterSelect: true,
onDelete: function (values) {
},
render: {
option: function (data, escape) {
if (!data.username || !data.email) {
console.error("Invalid data for option:", data);
return "";
}
return `<div class="flex space-x-3">
<div class="flex flex-col">
<span>${escape(data.username)}</span>
<span class="text-xs opacity-80">${escape(data.email)}</span>
</div>
</div>`;
},
item: function (data, escape) {
if (!data.username) {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white px-2 py-2 mb-2 mr-2">
<span class="mx-2">${escape(data.username)}</span>
</span>`;
},
},
},
};
const fetchUsers = (userSelect) => {
return fetch('/get-users')
.then(response => response.json())
.then(data => {
if (!data.users || !Array.isArray(data.users)) {
console.error("Invalid response format:", data);
return;
}
userSelect.user.options = data.users;
})
.catch(error => console.error('Error fetching user data:', error));
};
export { userSelect, fetchUsers };
\ No newline at end of file
......@@ -9,7 +9,8 @@ const userSelect = {
},
render: {
option: function (data, escape) {
if (!data.name || !data.email) {
if (!data.name) {
// console.log(data)
console.error("Invalid data for option:", data);
return "";
}
......@@ -25,7 +26,7 @@ const userSelect = {
console.error("Invalid data for item:", data);
return "";
}
return `<span class="badge rounded-full bg-primary dark:bg-accent text-white p-px mr-2">
return `<span class="badge rounded-lg bg-primary dark:bg-accent text-white px-2 m-1 mr-2 py-2">
<span class="mx-2">${escape(data.name)}</span>
</span>`;
},
......
......@@ -25,7 +25,7 @@ export function initGridTable(column, data, paginate, url, permission) {
permission.includes("EDIT")
? `
<a href="${url}/${cell}/edit" @click="editItem" class="btn h-8 w-8 p-0 text-info hover:bg-info/20 focus:bg-info/20 active:bg-info/25">
<i class="fa fa-edit"></i>
<i aria-hidden="true" class="fa fa-edit"></i>
</a>
`
: ""
......@@ -36,7 +36,7 @@ export function initGridTable(column, data, paginate, url, permission) {
? `
<div x-data="{showModal:false}">
<a @click="showModal = true" class="btn h-8 w-8 p-0 text-error hover:bg-error/20 focus:bg-error/20 active:bg-error/25">
<i class="fa fa-trash-alt"></i>
<i aria-hidden="true" class="fa fa-trash-alt"></i>
</a>
<template x-teleport="#x-teleport-target">
......
......@@ -15,11 +15,6 @@ export default {
document.body.classList.contains("is-sidebar-open") &&
Alpine.store("breakpoints").xlAndUp;
Alpine.effect(() => {
this.isDarkModeEnabled
? document.documentElement.classList.add("dark")
: document.documentElement.classList.remove("dark");
});
Alpine.effect(() => {
this.isMonochromeModeEnabled
......
import Swal from 'sweetalert2';
window.confirmDelete = function(pid) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#2D6A4F',
cancelButtonColor: '#d32424',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
Livewire.emit('deleteItem', pid);
Swal.fire(
'Deleted!',
'Your item has been deleted.',
'success'
);
}
});
}
window.confirmDeletePatchFile = function(pid) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#2D6A4F',
cancelButtonColor: '#d32424',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
Livewire.emit('deletePatchFile', pid);
Swal.fire(
'Deleted!',
'Your patch file has been deleted.',
'success'
);
}
});
}
window.confirmDelete2 = function(currency, exdate) {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#2D6A4F',
cancelButtonColor: '#d32424',
confirmButtonText: 'Yes, delete it!'
}).then((result) => {
if (result.isConfirmed) {
Livewire.emit('deleteItem', currency, exdate);
}
});
}
window.confirmDeleteSelected = function() {
Swal.fire({
title: 'Are you sure?',
text: "You won't be able to revert this!",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#2D6A4F',
cancelButtonColor: '#d32424',
confirmButtonText: 'Yes, delete them!'
}).then((result) => {
if (result.isConfirmed) {
Livewire.emit('deleteSelected');
}
});
}
<!doctype html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="UTF-8">
<link rel="icon" type="image/png" href="{{ asset('favicon.png') }}" />
<meta name="csrf-token" content="{{ csrf_token() }}">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>SPN Patch
</title>
<!-- CSS & JS Assets -->
@vite(['resources/css/app.css', 'resources/js/app.js', 'resources/js/sweetalert.js'])
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap"
rel="stylesheet" />
<script>
localStorage.getItem("_x_darkMode_on") === "true" &&
document.documentElement.classList.add("dark");
</script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
@isset($head)
{{ $head }}
@endisset
@livewireStyles
<style>
html,
body {
margin: 0;
}
body {
display: flex;
flex-direction: column;
}
main {
flex: 1;
background-color: white;
}
</style>
</head>
<body class="h-full bg-main-container">
<main class="flex-grow overflow-auto bg-main-container">
{{ $slot }}
@yield('content')
</main>
@livewireScripts
@isset($script)
{{ $script }}
@endisset
@yield('script')
<script>
Livewire.on('fileDownloaded', (url) => {
window.location.href = url;
});
</script>
</body>
</html>
......@@ -10,9 +10,7 @@
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>{{ config('app.name') }} @isset($title)
- {{ $title }}
@endisset
<title>SPN Patch
</title>
<!-- CSS & JS Assets -->
......@@ -32,40 +30,21 @@
localStorage.getItem("_x_darkMode_on") === "true" &&
document.documentElement.classList.add("dark");
</script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
@isset($head)
{{ $head }}
@endisset
@livewireStyles
</head>
<body x-data x-bind="$store.global.documentBody"
class="@isset($isSidebarOpen) {{ $isSidebarOpen === 'true' ? 'is-sidebar-open' : '' }} @endisset @isset($isHeaderBlur) {{ $isHeaderBlur === 'true' ? 'is-header-blur' : '' }} @endisset @isset($hasMinSidebar) {{ $hasMinSidebar === 'true' ? 'has-min-sidebar' : '' }} @endisset @isset($headerSticky) {{ $headerSticky === 'false' ? 'is-header-not-sticky' : '' }} @endisset">
<body>
{{ $slot }}
<!-- App preloader-->
<x-app-preloader></x-app-preloader>
<!-- Page Wrapper -->
{{-- <div id="root" class="min-h-100vh flex grow bg-slate-50 dark:bg-navy-900" x-cloak> --}}
{{ $slot }}
{{-- </div> --}}
<!--
This is a place for Alpine.js Teleport feature
@see https://alpinejs.dev/directives/teleport
-->
<div id="x-teleport-target"></div>
<script>
window.addEventListener("DOMContentLoaded", () => Alpine.start());
</script>
@livewireScripts
@livewireScripts
@isset($script)
{{ $script }}
@endisset
</body>
</html>
<div class="flex items-center space-x-4 py-5 lg:py-6">
<ul class="hidden flex-wrap items-center space-x-2 sm:flex">
<li class="flex items-center space-x-2">
<a class="text-primary transition-colors hover:text-primary-focus dark:text-accent-light dark:hover:text-accent"
href="/">Home</a>
<svg x-ignore xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
</li>
<li> Configuration </li>
<svg x-ignore xmlns="http://www.w3.org/2000/svg" class="h-4 w-4" fill="none" viewBox="0 0 24 24"
stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" />
</svg>
<li class="flex items-center space-x-2">
<a class="text-primary transition-colors hover:text-primary-focus dark:text-accent-light dark:hover:text-accent"
href="{{ route('configurations.user.index') }}">User Management</a>
</li>
</ul>
</div>