diff --git a/.changeset/ninety-ghosts-shake.md b/.changeset/ninety-ghosts-shake.md new file mode 100644 index 000000000..0814dfe6c --- /dev/null +++ b/.changeset/ninety-ghosts-shake.md @@ -0,0 +1,5 @@ +--- +"@tabler/core": patch +--- + +Add Signature Pad feature and signatures page diff --git a/core/scss/_utilities.scss b/core/scss/_utilities.scss index eef28aecb..6eb9b1ad2 100644 --- a/core/scss/_utilities.scss +++ b/core/scss/_utilities.scss @@ -43,8 +43,9 @@ $utilities: ( v-text: vertical-text, grab: grab, grabbing: grabbing, + crosshair: crosshair, ), - ), + ), "border": ( property: border, values: $border-values, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6b6519c26..6e8eb87dc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -147,6 +147,9 @@ importers: plyr: specifier: ^3.7.8 version: 3.7.8 + signature_pad: + specifier: ^5.0.4 + version: 5.0.4 star-rating.js: specifier: ^4.3.1 version: 4.3.1 @@ -3777,6 +3780,10 @@ packages: engines: {node: '>=14'} dev: true + /signature_pad@5.0.4: + resolution: {integrity: sha512-nngOixbwLAUOuH3QnZwlgwmynQblxmo4iWacKFwfymJfiY+Qt+9icNtcIe/okqXKun4hJ5QTFmHyC7dmv6lf2w==} + dev: false + /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: diff --git a/preview/eleventy.config.mjs b/preview/eleventy.config.mjs index 14b52d228..61b7adc3c 100644 --- a/preview/eleventy.config.mjs +++ b/preview/eleventy.config.mjs @@ -33,7 +33,7 @@ const getCopyList = () => { files.forEach((file) => { if (!file.match(/^https?/)) { - copy[`node_modules/${dirname(file)}`] = `libs/${dirname(file) }`; + copy[`node_modules/${dirname(file)}`] = `libs/${dirname(file)}`; } }) @@ -91,7 +91,7 @@ export default function (eleventyConfig) { return { url: file.replace(/^pages\//, '/') } -}); + }); }); eleventyConfig.addGlobalData("site", { @@ -413,12 +413,12 @@ export default function (eleventyConfig) { /** * Filters */ - eleventyConfig.addFilter("miliseconds_to_minutes", function (value) { + eleventyConfig.addFilter("miliseconds_to_minutes", function (value) { // Raturn 3:45 time format const minutes = Math.floor(value / 60000); const seconds = ((value % 60000) / 1000).toFixed(0); return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; - }); + }); eleventyConfig.addFilter("relative", (page) => { const segments = (page.url || '').replace(/^\//).split('/'); @@ -577,7 +577,7 @@ export default function (eleventyConfig) { /** * Shortcodes */ - const tags = ["capture_global", "endcapture_global", "highlight", "endhighlight"]; + const tags = ["highlight", "endhighlight"]; tags.forEach(tag => { eleventyConfig.addLiquidTag(tag, function (liquidEngine) { return { @@ -591,6 +591,31 @@ export default function (eleventyConfig) { }); }); + ['script', 'modal'].forEach((tag) => { + eleventyConfig.addPairedShortcode(`capture_${tag}`, function (content) { + if (!this.page[tag]) { + this.page[tag] = [] + } + + if (!this.page[tag][this.page.url]) { + this.page[tag][this.page.url] = []; + } + + this.page[tag][this.page.url].push(content); + + return '' + }) + + eleventyConfig.addShortcode(`${tag}s`, function () { + + if (this.page[tag]) { + return this.page[tag][this.page.url] ? `\n${this.page[tag][this.page.url].join('\n').trim()}\n` : ''; + } + + return '' + }); + }); + /** * Transforms */ diff --git a/preview/package.json b/preview/package.json index cbae03ea0..e216816f4 100644 --- a/preview/package.json +++ b/preview/package.json @@ -16,7 +16,7 @@ "js-compile": "rollup --config build/rollup.config.mjs --sourcemap", "js-minify": "pnpm run js-minify-demo && pnpm run js-minify-theme", "js-minify-demo": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/preview/js/demo.js.map,includeSources,url=demo.min.js.map\" --output dist/preview/js/demo.min.js dist/preview/js/demo.js", - "js-minify-theme": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/preview/js/demo-theme.js.map,includeSources,url=demo-theme.min.js.map\" --output dist/preview/js/demo-theme.min.js dist/preview/js/demo-theme.js", + "js-minify-theme": "terser --compress passes=2 --mangle --comments \"/^!/\" --source-map \"content=dist/preview/js/demo-theme.js.map,includeSources,url=demo-theme.min.js.map\" --output dist/preview/js/demo-theme.min.js dist/preview/js/demo-theme.js", "clean": "shx rm -rf dist demo", "html": "pnpm run html-build && pnpm run html-prettify", "html-build": "eleventy", @@ -31,32 +31,33 @@ "zip": "mkdir -p packages-zip && zip -r packages-zip/tabler-$(node -p \"require('./package.json').version\").zip demo/*" }, "dependencies": { + "@melloware/coloris": "^0.24.0", "@tabler/core": "workspace:*", "@tabler/icons": "^3.29.0", - "@melloware/coloris": "^0.24.0", "apexcharts": "^4.4.0", - "star-rating.js": "^4.3.1", - "tinymce": "^7.6.1", - "tom-select": "^2.4.2", - "typed.js": "^2.1.0", + "autosize": "^6.0.1", + "choices.js": "^11.0.3", + "countup.js": "^2.8.0", + "dropzone": "^6.0.0-beta.2", + "flatpickr": "^4.6.13", + "fslightbox": "^3.4.2", "imask": "^7.6.1", "jsvectormap": "^1.6.0", "list.js": "^2.3.1", "litepicker": "^2.0.12", "nouislider": "^15.8.1", "plyr": "^3.7.8", - "dropzone": "^6.0.0-beta.2", - "flatpickr": "^4.6.13", - "fslightbox": "^3.4.2", - "choices.js": "^11.0.3", - "countup.js": "^2.8.0", - "autosize": "^6.0.1" + "star-rating.js": "^4.3.1", + "tinymce": "^7.6.1", + "tom-select": "^2.4.2", + "typed.js": "^2.1.0", + "signature_pad": "^5.0.4" }, "devDependencies": { - "request": "^2.88.2", - "imageoptim-cli": "^3.1.9", "@11ty/eleventy": "^3.0.0", - "@repo/banner": "workspace:*" + "@repo/banner": "workspace:*", + "imageoptim-cli": "^3.1.9", + "request": "^2.88.2" }, "prettier": { "tabWidth": 2, diff --git a/preview/pages/2-step-verification-code.html b/preview/pages/2-step-verification-code.html index db6b0048e..6d8376fed 100644 --- a/preview/pages/2-step-verification-code.html +++ b/preview/pages/2-step-verification-code.html @@ -53,7 +53,7 @@ permalink: 2-step-verification-code.html It may take a minute to receive your code. Haven't received it? Resend a new code. -{% capture_global scripts %} +{% capture_script %} -{% endcapture_global %} \ No newline at end of file +{% endcapture_script %} \ No newline at end of file diff --git a/preview/pages/_data/libs.json b/preview/pages/_data/libs.json index 6bbc17297..65d9982f3 100644 --- a/preview/pages/_data/libs.json +++ b/preview/pages/_data/libs.json @@ -24,7 +24,8 @@ "dropzone": "dropzone/dist/dropzone-min.js", "star-rating.js": "star-rating.js/dist/star-rating.min.js", "coloris.js": "@melloware/coloris/dist/umd/coloris.min.js", - "typed.js": "typed.js/dist/typed.umd.js" + "typed.js": "typed.js/dist/typed.umd.js", + "signature_pad": "signature_pad/dist/signature_pad.umd.min.js" }, "css": { "mapbox": "https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.css", diff --git a/preview/pages/_data/menu.json b/preview/pages/_data/menu.json index 9692d463b..8a16f6dc3 100644 --- a/preview/pages/_data/menu.json +++ b/preview/pages/_data/menu.json @@ -281,6 +281,11 @@ "title": "Settings", "url": "settings.html" }, + "signatures": { + "title": "Signatures", + "url": "signatures.html", + "badge": "New" + }, "tasks": { "title": "Tasks", "url": "tasks.html" diff --git a/preview/pages/_includes/layout/js.html b/preview/pages/_includes/layout/js.html index 08a799fc2..e825de966 100644 --- a/preview/pages/_includes/layout/js.html +++ b/preview/pages/_includes/layout/js.html @@ -1,10 +1,10 @@ - {% assign google-maps-key = site.googleMapsDevKey -%} {% if environment != 'development' -%} - {% assign google-maps-key = site.googleMapsKey -%} +{% assign google-maps-key = site.googleMapsKey -%} {% endif -%} {% if page-libs -%} + {% for lib in libs.js -%} {% if page-libs contains lib[0] or libs.global-libs contains lib[0] -%} {% for file in lib[1] -%} @@ -12,8 +12,8 @@ {% endfor -%} {% endif -%} {% endfor -%} + {% endif -%} - @@ -23,13 +23,7 @@ -{% for script in site.captured_global.scripts %} -{{ script }} -{% endfor %} - -{% for script in site.captured_once.scripts %} -{{ script }} -{% endfor %} +{% scripts %} {% assign libs = page-libs | default: layout.page-libs %} {% for lib in libs.js-files %} diff --git a/preview/pages/_includes/layout/modals-capture.html b/preview/pages/_includes/layout/modals-capture.html deleted file mode 100644 index 16615019d..000000000 --- a/preview/pages/_includes/layout/modals-capture.html +++ /dev/null @@ -1,3 +0,0 @@ -{% for modal in site.captured_global.modals %} -{{ modal }} -{% endfor %} diff --git a/preview/pages/_includes/layout/modals.html b/preview/pages/_includes/layout/modals.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/preview/pages/_includes/ui/chart-heatmap.html b/preview/pages/_includes/ui/chart-heatmap.html index 991c9fef1..06839e0ea 100644 --- a/preview/pages/_includes/ui/chart-heatmap.html +++ b/preview/pages/_includes/ui/chart-heatmap.html @@ -8,87 +8,85 @@ {% capture script %} {% assign colors = include.colors | default: 1 %} {% endcapture %} -{% capture_global scripts %} +{% capture_script %} {{ script }} -{% endcapture_global %} +{% endcapture_script %} diff --git a/preview/pages/_includes/ui/chart-sparkline.html b/preview/pages/_includes/ui/chart-sparkline.html index 1935d28db..55d59b358 100644 --- a/preview/pages/_includes/ui/chart-sparkline.html +++ b/preview/pages/_includes/ui/chart-sparkline.html @@ -14,9 +14,8 @@ {% if id %}
- {% capture_global scripts %} + {% capture_script %} - {% endcapture_global %} + {% endcapture_script %} {% endif %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/chart.html b/preview/pages/_includes/ui/chart.html index ee5019fa7..7dc8eb40b 100644 --- a/preview/pages/_includes/ui/chart.html +++ b/preview/pages/_includes/ui/chart.html @@ -21,7 +21,6 @@ {% capture script %} {% assign chart-type = data.type | default: 'bar' %} {% endcapture %} -{% capture_global scripts %} +{% capture_script %} {{ script }} -{% endcapture_global %} +{% endcapture_script %} {% endif %} diff --git a/preview/pages/_includes/ui/colorpicker.html b/preview/pages/_includes/ui/colorpicker.html index 5b3539568..4d5ca5fe4 100644 --- a/preview/pages/_includes/ui/colorpicker.html +++ b/preview/pages/_includes/ui/colorpicker.html @@ -4,9 +4,8 @@ -{% capture_global scripts %} +{% capture_script %} -{% endcapture_global %} +{% endcapture_script %} diff --git a/preview/pages/_includes/ui/datepicker.html b/preview/pages/_includes/ui/datepicker.html index 132e227c2..bf1d64b31 100644 --- a/preview/pages/_includes/ui/datepicker.html +++ b/preview/pages/_includes/ui/datepicker.html @@ -26,7 +26,6 @@ {% capture script %} {% endcapture %} {% if include.show-scripts %} {{ script }} {% else %} -{% capture_global scripts %} +{% capture_script %} {{ script }} -{% endcapture_global %} +{% endcapture_script %} {% endif %} {% endif %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/dropzone.html b/preview/pages/_includes/ui/dropzone.html index 237ae3d6b..4d808d27c 100644 --- a/preview/pages/_includes/ui/dropzone.html +++ b/preview/pages/_includes/ui/dropzone.html @@ -14,13 +14,12 @@ {% endif %} -{% capture_global scripts %} +{% capture_script %} -{% endcapture_global %} \ No newline at end of file +{% endcapture_script %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/inline-player.html b/preview/pages/_includes/ui/inline-player.html index 7e66599db..ed3009442 100644 --- a/preview/pages/_includes/ui/inline-player.html +++ b/preview/pages/_includes/ui/inline-player.html @@ -3,17 +3,15 @@ {% if id and include.embed-id %} -{% capture_global scripts %} +{% capture_script %} -{% endcapture_global %} +{% endcapture_script %} {% endif %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/map-vector.html b/preview/pages/_includes/ui/map-vector.html index 408fe52a5..9fb756370 100644 --- a/preview/pages/_includes/ui/map-vector.html +++ b/preview/pages/_includes/ui/map-vector.html @@ -11,7 +11,6 @@ {% capture script %} {% endcapture %} {% if include.show-scripts %} {{ script }} {% else %} - {% capture_global scripts %} + {% capture_script %} {{ script }} - {% endcapture_global %} + {% endcapture_script %} {% endif %} {% endif %} diff --git a/preview/pages/_includes/ui/map.html b/preview/pages/_includes/ui/map.html index 5efcee2c5..e03158c10 100644 --- a/preview/pages/_includes/ui/map.html +++ b/preview/pages/_includes/ui/map.html @@ -8,9 +8,8 @@ - {% capture_global scripts %} + {% capture_script %} - {% endcapture_global %} + {% endcapture_script %} {% endif %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/modal.html b/preview/pages/_includes/ui/modal.html index e5c071999..1319aa62a 100644 --- a/preview/pages/_includes/ui/modal.html +++ b/preview/pages/_includes/ui/modal.html @@ -2,7 +2,7 @@ {% assign modal-id = include.modal-id | default: 'simple' %} {% assign size = include['size'] %} -{% capture_global modals %} +{% capture_modal %} -{% endcapture_global %} +{% endcapture_modal %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/range.html b/preview/pages/_includes/ui/range.html index 06d7c2a99..f640a3b96 100644 --- a/preview/pages/_includes/ui/range.html +++ b/preview/pages/_includes/ui/range.html @@ -7,9 +7,8 @@ {% if id %} - {% capture_global scripts %} + {% capture_script %} - {% endcapture_global %} + {% endcapture_script %} {% else %} {% endif %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/rating.html b/preview/pages/_includes/ui/rating.html index 91725a1ce..129f4a2d8 100644 --- a/preview/pages/_includes/ui/rating.html +++ b/preview/pages/_includes/ui/rating.html @@ -20,9 +20,8 @@ {% assign star = star | replace_regex: "[\n\t]{2,}", " " | strip %} {% assign star = star | replace_regex: "", "" | strip %} -{% capture_global scripts %} +{% capture_script %} -{% endcapture_global %} \ No newline at end of file +{% endcapture_script %} \ No newline at end of file diff --git a/preview/pages/_includes/ui/select.html b/preview/pages/_includes/ui/select.html index 52f6b5592..f09070e53 100644 --- a/preview/pages/_includes/ui/select.html +++ b/preview/pages/_includes/ui/select.html @@ -56,7 +56,6 @@ {% capture script %} {% endcapture %} @@ -96,9 +94,9 @@ {% if include.show-scripts %} {{ script }} {% else %} -{% capture_global scripts %} +{% capture_script %} {{ script }} -{% endcapture_global %} +{% endcapture_script %} {% endif %} {% endif %} diff --git a/preview/pages/_includes/ui/signature.html b/preview/pages/_includes/ui/signature.html new file mode 100644 index 000000000..3f1929646 --- /dev/null +++ b/preview/pages/_includes/ui/signature.html @@ -0,0 +1,52 @@ +{% assign id = include.id | default: 'default' %} + +