Plugin Directory

Changeset 3260511


Ignore:
Timestamp:
03/24/2025 04:19:56 AM (13 months ago)
Author:
xssdevelopment
Message:

Update merge-pdf to version 1.0.1

Location:
merge-pdf
Files:
8 deleted
30 edited
1 copied

Legend:

Unmodified
Added
Removed
  • merge-pdf/tags/1.0.0/trunk/build/block.json

    r3225930 r3260511  
    33  "apiVersion": 3,
    44  "name": "create-block/merge-pdf",
    5   "version": "1.0.0",
     5  "version": "1.0.1",
    66  "title": "Merge Pdf",
    77  "category": "widgets",
  • merge-pdf/tags/1.0.0/trunk/build/index-rtl.css

    r3232408 r3260511  
    1 /*!****************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***!
    3   \****************************************************************************************************************************************************************************************************************************************************/
    4 .solution__merge-pdf {
    5   margin: 1rem;
    6 }
     1.solution__merge-pdf{margin:1rem}
  • merge-pdf/tags/1.0.0/trunk/build/index.asset.php

    r3232408 r3260511  
    1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '971621e220fab65d6c23');
     1<?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '95952ffc9d1cf6e0a1db');
  • merge-pdf/tags/1.0.0/trunk/build/index.css

    r3232408 r3260511  
    1 /*!****************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***!
    3   \****************************************************************************************************************************************************************************************************************************************************/
    4 .solution__merge-pdf {
    5   margin: 1rem;
    6 }
    7 
    8 /*# sourceMappingURL=index.css.map*/
     1.solution__merge-pdf{margin:1rem}
  • merge-pdf/tags/1.0.0/trunk/build/index.js

    r3232408 r3260511  
    1 /******/ (() => { // webpackBootstrap
    2 /******/    "use strict";
    3 /******/    var __webpack_modules__ = ({
    4 
    5 /***/ "./src/edit.js":
    6 /*!*********************!*\
    7   !*** ./src/edit.js ***!
    8   \*********************/
    9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    10 
    11 __webpack_require__.r(__webpack_exports__);
    12 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    13 /* harmony export */   "default": () => (/* binding */ Edit),
    14 /* harmony export */   mergePDFIcon: () => (/* binding */ mergePDFIcon)
    15 /* harmony export */ });
    16 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss");
    17 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    18 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
    19 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    20 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    21 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
    22 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);
    23 /**
    24  * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
    25  * Those files can contain any CSS code that gets applied to the editor.
    26  *
    27  * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
    28  */
    29 
    30 
    31 
    32 
    33 function Edit() {
    34   return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    35     className: "solution__merge-pdf",
    36     children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    37       className: "solution__container__wrapper",
    38       children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", {
    39         className: "solution__container",
    40         children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    41           className: "solution__header",
    42           children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Merge PDF', 'merge-pdf')
    43         }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", {
    44           className: "solution__form",
    45           children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("label", {
    46             htmlFor: "file",
    47             className: "solution__label",
    48             children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", {
    49               children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('File:', 'merge-pdf')
    50             }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input", {
    51               type: "file",
    52               id: "file",
    53               name: "file",
    54               required: true,
    55               className: "solution__file-input",
    56               disabled: true
    57             })]
    58           }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", {
    59             disabled: true,
    60             className: "solution__btn",
    61             children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Submit', 'merge-pdf')
    62           })]
    63         })]
    64       })
    65     })
    66   }));
    67 }
    68 const mergePDFIcon = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('svg', {
    69   width: 32,
    70   height: 33,
    71   viewBox: '0 0 32 33',
    72   fill: 'none',
    73   xmlns: 'http://www.w3.org/2000/svg'
    74 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('ellipse', {
    75   cx: '15.8843',
    76   cy: '16.5014',
    77   rx: '13.2358',
    78   ry: '13.3335',
    79   fill: '#E3FAFC'
    80 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    81   d: 'M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282',
    82   stroke: '#0C8599',
    83   'stroke-width': '1.32791',
    84   'stroke-linecap': 'round',
    85   'stroke-linejoin': 'round'
    86 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    87   d: 'M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282',
    88   stroke: '#0C8599',
    89   'stroke-width': '1.32791',
    90   'stroke-linecap': 'round',
    91   'stroke-linejoin': 'round'
    92 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    93   d: 'M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z',
    94   stroke: '#0C8599',
    95   'stroke-width': '1.32791',
    96   'stroke-linecap': 'round',
    97   'stroke-linejoin': 'round',
    98   'fill-rule': 'evenodd',
    99   'clip-rule': 'evenodd'
    100 }));
    101 
    102 /***/ }),
    103 
    104 /***/ "./src/index.js":
    105 /*!**********************!*\
    106   !*** ./src/index.js ***!
    107   \**********************/
    108 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    109 
    110 __webpack_require__.r(__webpack_exports__);
    111 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss");
    112 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    113 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__);
    114 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js");
    115 /* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/block.json");
    116 
    117 
    118 
    119 
    120 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__, {
    121   icon: _edit__WEBPACK_IMPORTED_MODULE_2__.mergePDFIcon,
    122   edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"]
    123 });
    124 
    125 /***/ }),
    126 
    127 /***/ "./src/editor.scss":
    128 /*!*************************!*\
    129   !*** ./src/editor.scss ***!
    130   \*************************/
    131 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    132 
    133 __webpack_require__.r(__webpack_exports__);
    134 // extracted by mini-css-extract-plugin
    135 
    136 
    137 /***/ }),
    138 
    139 /***/ "./src/style.scss":
    140 /*!************************!*\
    141   !*** ./src/style.scss ***!
    142   \************************/
    143 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    144 
    145 __webpack_require__.r(__webpack_exports__);
    146 // extracted by mini-css-extract-plugin
    147 
    148 
    149 /***/ }),
    150 
    151 /***/ "react/jsx-runtime":
    152 /*!**********************************!*\
    153   !*** external "ReactJSXRuntime" ***!
    154   \**********************************/
    155 /***/ ((module) => {
    156 
    157 module.exports = window["ReactJSXRuntime"];
    158 
    159 /***/ }),
    160 
    161 /***/ "@wordpress/blocks":
    162 /*!********************************!*\
    163   !*** external ["wp","blocks"] ***!
    164   \********************************/
    165 /***/ ((module) => {
    166 
    167 module.exports = window["wp"]["blocks"];
    168 
    169 /***/ }),
    170 
    171 /***/ "@wordpress/element":
    172 /*!*********************************!*\
    173   !*** external ["wp","element"] ***!
    174   \*********************************/
    175 /***/ ((module) => {
    176 
    177 module.exports = window["wp"]["element"];
    178 
    179 /***/ }),
    180 
    181 /***/ "@wordpress/i18n":
    182 /*!******************************!*\
    183   !*** external ["wp","i18n"] ***!
    184   \******************************/
    185 /***/ ((module) => {
    186 
    187 module.exports = window["wp"]["i18n"];
    188 
    189 /***/ }),
    190 
    191 /***/ "./src/block.json":
    192 /*!************************!*\
    193   !*** ./src/block.json ***!
    194   \************************/
    195 /***/ ((module) => {
    196 
    197 module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.0","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');
    198 
    199 /***/ })
    200 
    201 /******/    });
    202 /************************************************************************/
    203 /******/    // The module cache
    204 /******/    var __webpack_module_cache__ = {};
    205 /******/   
    206 /******/    // The require function
    207 /******/    function __webpack_require__(moduleId) {
    208 /******/        // Check if module is in cache
    209 /******/        var cachedModule = __webpack_module_cache__[moduleId];
    210 /******/        if (cachedModule !== undefined) {
    211 /******/            return cachedModule.exports;
    212 /******/        }
    213 /******/        // Create a new module (and put it into the cache)
    214 /******/        var module = __webpack_module_cache__[moduleId] = {
    215 /******/            // no module.id needed
    216 /******/            // no module.loaded needed
    217 /******/            exports: {}
    218 /******/        };
    219 /******/   
    220 /******/        // Execute the module function
    221 /******/        __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
    222 /******/   
    223 /******/        // Return the exports of the module
    224 /******/        return module.exports;
    225 /******/    }
    226 /******/   
    227 /******/    // expose the modules object (__webpack_modules__)
    228 /******/    __webpack_require__.m = __webpack_modules__;
    229 /******/   
    230 /************************************************************************/
    231 /******/    /* webpack/runtime/chunk loaded */
    232 /******/    (() => {
    233 /******/        var deferred = [];
    234 /******/        __webpack_require__.O = (result, chunkIds, fn, priority) => {
    235 /******/            if(chunkIds) {
    236 /******/                priority = priority || 0;
    237 /******/                for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
    238 /******/                deferred[i] = [chunkIds, fn, priority];
    239 /******/                return;
    240 /******/            }
    241 /******/            var notFulfilled = Infinity;
    242 /******/            for (var i = 0; i < deferred.length; i++) {
    243 /******/                var chunkIds = deferred[i][0];
    244 /******/                var fn = deferred[i][1];
    245 /******/                var priority = deferred[i][2];
    246 /******/                var fulfilled = true;
    247 /******/                for (var j = 0; j < chunkIds.length; j++) {
    248 /******/                    if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
    249 /******/                        chunkIds.splice(j--, 1);
    250 /******/                    } else {
    251 /******/                        fulfilled = false;
    252 /******/                        if(priority < notFulfilled) notFulfilled = priority;
    253 /******/                    }
    254 /******/                }
    255 /******/                if(fulfilled) {
    256 /******/                    deferred.splice(i--, 1)
    257 /******/                    var r = fn();
    258 /******/                    if (r !== undefined) result = r;
    259 /******/                }
    260 /******/            }
    261 /******/            return result;
    262 /******/        };
    263 /******/    })();
    264 /******/   
    265 /******/    /* webpack/runtime/compat get default export */
    266 /******/    (() => {
    267 /******/        // getDefaultExport function for compatibility with non-harmony modules
    268 /******/        __webpack_require__.n = (module) => {
    269 /******/            var getter = module && module.__esModule ?
    270 /******/                () => (module['default']) :
    271 /******/                () => (module);
    272 /******/            __webpack_require__.d(getter, { a: getter });
    273 /******/            return getter;
    274 /******/        };
    275 /******/    })();
    276 /******/   
    277 /******/    /* webpack/runtime/define property getters */
    278 /******/    (() => {
    279 /******/        // define getter functions for harmony exports
    280 /******/        __webpack_require__.d = (exports, definition) => {
    281 /******/            for(var key in definition) {
    282 /******/                if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    283 /******/                    Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    284 /******/                }
    285 /******/            }
    286 /******/        };
    287 /******/    })();
    288 /******/   
    289 /******/    /* webpack/runtime/hasOwnProperty shorthand */
    290 /******/    (() => {
    291 /******/        __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
    292 /******/    })();
    293 /******/   
    294 /******/    /* webpack/runtime/make namespace object */
    295 /******/    (() => {
    296 /******/        // define __esModule on exports
    297 /******/        __webpack_require__.r = (exports) => {
    298 /******/            if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    299 /******/                Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    300 /******/            }
    301 /******/            Object.defineProperty(exports, '__esModule', { value: true });
    302 /******/        };
    303 /******/    })();
    304 /******/   
    305 /******/    /* webpack/runtime/jsonp chunk loading */
    306 /******/    (() => {
    307 /******/        // no baseURI
    308 /******/       
    309 /******/        // object to store loaded and loading chunks
    310 /******/        // undefined = chunk not loaded, null = chunk preloaded/prefetched
    311 /******/        // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
    312 /******/        var installedChunks = {
    313 /******/            "index": 0,
    314 /******/            "./style-index": 0
    315 /******/        };
    316 /******/       
    317 /******/        // no chunk on demand loading
    318 /******/       
    319 /******/        // no prefetching
    320 /******/       
    321 /******/        // no preloaded
    322 /******/       
    323 /******/        // no HMR
    324 /******/       
    325 /******/        // no HMR manifest
    326 /******/       
    327 /******/        __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
    328 /******/       
    329 /******/        // install a JSONP callback for chunk loading
    330 /******/        var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
    331 /******/            var chunkIds = data[0];
    332 /******/            var moreModules = data[1];
    333 /******/            var runtime = data[2];
    334 /******/            // add "moreModules" to the modules object,
    335 /******/            // then flag all "chunkIds" as loaded and fire callback
    336 /******/            var moduleId, chunkId, i = 0;
    337 /******/            if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
    338 /******/                for(moduleId in moreModules) {
    339 /******/                    if(__webpack_require__.o(moreModules, moduleId)) {
    340 /******/                        __webpack_require__.m[moduleId] = moreModules[moduleId];
    341 /******/                    }
    342 /******/                }
    343 /******/                if(runtime) var result = runtime(__webpack_require__);
    344 /******/            }
    345 /******/            if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
    346 /******/            for(;i < chunkIds.length; i++) {
    347 /******/                chunkId = chunkIds[i];
    348 /******/                if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
    349 /******/                    installedChunks[chunkId][0]();
    350 /******/                }
    351 /******/                installedChunks[chunkId] = 0;
    352 /******/            }
    353 /******/            return __webpack_require__.O(result);
    354 /******/        }
    355 /******/       
    356 /******/        var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
    357 /******/        chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
    358 /******/        chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
    359 /******/    })();
    360 /******/   
    361 /************************************************************************/
    362 /******/   
    363 /******/    // startup
    364 /******/    // Load entry module and return exports
    365 /******/    // This entry module depends on other loaded chunks and execution need to be delayed
    366 /******/    var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.js")))
    367 /******/    __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
    368 /******/   
    369 /******/ })()
    370 ;
    371 //# sourceMappingURL=index.js.map
     1(()=>{"use strict";var e,i={354:()=>{const e=window.wp.blocks,i=window.wp.element,r=window.wp.i18n,n=window.ReactJSXRuntime,t=(0,i.createElement)("svg",{width:32,height:33,viewBox:"0 0 32 33",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)("ellipse",{cx:"15.8843",cy:"16.5014",rx:"13.2358",ry:"13.3335",fill:"#E3FAFC"}),(0,i.createElement)("path",{d:"M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round","fill-rule":"evenodd","clip-rule":"evenodd"})),l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.1","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');(0,e.registerBlockType)(l,{icon:t,edit:function(){return(0,i.createElement)("div",null,(0,n.jsx)("div",{className:"solution__merge-pdf",children:(0,n.jsx)("div",{className:"solution__container__wrapper",children:(0,n.jsxs)("div",{className:"solution__container",children:[(0,n.jsx)("div",{className:"solution__header",children:(0,r.__)("Merge PDF","merge-pdf")}),(0,n.jsxs)("div",{className:"solution__form",children:[(0,n.jsxs)("label",{htmlFor:"file",className:"solution__label",children:[(0,n.jsx)("span",{children:(0,r.__)("File:","merge-pdf")}),(0,n.jsx)("input",{type:"file",id:"file",name:"file",required:!0,className:"solution__file-input",disabled:!0})]}),(0,n.jsx)("button",{disabled:!0,className:"solution__btn",children:(0,r.__)("Submit","merge-pdf")})]})]})})}))}})}},r={};function n(e){var t=r[e];if(void 0!==t)return t.exports;var l=r[e]={exports:{}};return i[e](l,l.exports,n),l.exports}n.m=i,e=[],n.O=(i,r,t,l)=>{if(!r){var s=1/0;for(c=0;c<e.length;c++){r=e[c][0],t=e[c][1],l=e[c][2];for(var o=!0,a=0;a<r.length;a++)(!1&l||s>=l)&&Object.keys(n.O).every((e=>n.O[e](r[a])))?r.splice(a--,1):(o=!1,l<s&&(s=l));if(o){e.splice(c--,1);var d=t();void 0!==d&&(i=d)}}return i}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[r,t,l]},n.o=(e,i)=>Object.prototype.hasOwnProperty.call(e,i),(()=>{var e={57:0,350:0};n.O.j=i=>0===e[i];var i=(i,r)=>{var t,l,s=r[0],o=r[1],a=r[2],d=0;if(s.some((i=>0!==e[i]))){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(a)var c=a(n)}for(i&&i(r);d<s.length;d++)l=s[d],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(c)},r=self.webpackChunk=self.webpackChunk||[];r.forEach(i.bind(null,0)),r.push=i.bind(null,r.push.bind(r))})();var t=n.O(void 0,[350],(()=>n(354)));t=n.O(t)})();
  • merge-pdf/tags/1.0.0/trunk/build/style-index-rtl.css

    r3232408 r3260511  
    1 /*!***************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***!
    3   \***************************************************************************************************************************************************************************************************************************************************/
    4 :root {
    5   --solution-merge-pdf-primary-color: #4f46e5;
    6   --solution-merge-pdf-secondary-color: #eef2ff;
    7   --solution-merge-pdf-tertiary-color: #000;
    8   --solution-merge-pdf-background-color: #fff;
    9   --solution-merge-pdf-border-color: #e5e7eb;
    10   --solution-merge-pdf-input-border-color: #d1d5db;
    11   --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2);
    12   --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05);
    13   --solution-merge-pdf-dropdown-bg-color: #fff;
    14   --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1);
    15   --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1);
    16 }
    17 
    18 .solution__merge-pdf .solution__container-wrapper {
    19   padding: 1rem;
    20   display: flex;
    21   flex-direction: column;
    22   gap: 1rem;
    23   color: var(--solution-merge-pdf-tertiary-color);
    24 }
    25 .solution__merge-pdf .solution__container {
    26   box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px;
    27   border: 1px solid var(--solution-merge-pdf-border-color);
    28   background-color: var(--solution-merge-pdf-background-color);
    29   border-radius: 0.75rem;
    30   padding: 1.5rem 1.5rem 0.5rem;
    31   position: relative;
    32   display: flex;
    33   flex-direction: column;
    34   min-height: 180px;
    35   gap: 1rem;
    36 }
    37 .solution__merge-pdf .solution__header {
    38   font-size: 1.25rem;
    39   letter-spacing: 0.05em;
    40   font-weight: 500;
    41 }
    42 .solution__merge-pdf .solution__content {
    43   flex-grow: 1;
    44   display: grid;
    45 }
    46 .solution__merge-pdf .solution__form {
    47   display: flex;
    48   flex-direction: column;
    49   gap: 1rem;
    50 }
    51 .solution__merge-pdf .solution__label {
    52   white-space: nowrap;
    53   width: 100%;
    54   font-size: 0.75rem;
    55   font-weight: 500;
    56   display: flex;
    57   flex-direction: column;
    58   gap: 0.3rem;
    59 }
    60 .solution__merge-pdf .solution__hint {
    61   font-size: 0.75rem;
    62   font-weight: 500;
    63   color: var(--solution-merge-pdf-primary-color);
    64   white-space: wrap;
    65 }
    66 .solution__merge-pdf .solution__input {
    67   border: 1px solid var(--solution-merge-pdf-input-border-color);
    68   border-radius: 0.375rem;
    69   padding: 0.25rem 0.5rem;
    70   font-size: 1rem;
    71   line-height: 32px;
    72   outline: 1px solid transparent;
    73   outline-offset: -1px;
    74 }
    75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button {
    76   margin-left: 1rem;
    77   padding: 0.5rem 1rem;
    78   border-radius: 0.75rem;
    79   border: none;
    80   background-color: var(--solution-merge-pdf-secondary-color);
    81   color: var(--solution-merge-pdf-primary-color);
    82   font-weight: 500;
    83   cursor: pointer;
    84 }
    85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button {
    86   background-color: var(--solution-merge-pdf-secondary-color);
    87 }
    88 .solution__merge-pdf .solution__btn {
    89   display: inline-flex;
    90   align-items: center; /* Ensures the icon and text are aligned */
    91   justify-content: center;
    92   gap: 0.5rem; /* Adds space between the icon and the text */
    93   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);
    94   background: var(--solution-merge-pdf-secondary-color);
    95   color: var(--solution-merge-pdf-primary-color);
    96   padding: 0.5rem 1rem;
    97   border-radius: 1rem;
    98   font-weight: 600;
    99   cursor: pointer;
    100   border: none;
    101 }
    102 .solution__merge-pdf .solution__btn:hover {
    103   filter: brightness(0.98);
    104 }
    105 .solution__merge-pdf .solution__btn .dashicons {
    106   font-size: 1.2rem; /* Adjust the size of the icon */
    107   vertical-align: middle; /* Aligns the icon vertically with the text */
    108 }
    109 .solution__merge-pdf .solution__dropdown-wrapper {
    110   position: relative;
    111 }
    112 .solution__merge-pdf .solution__dropdown {
    113   position: relative;
    114   overflow: visible;
    115   background-color: transparent;
    116   box-shadow: none;
    117   width: 100%;
    118   border-radius: 0.75rem;
    119   max-height: 15rem;
    120   z-index: 10;
    121 }
    122 .solution__merge-pdf .solution__dropdown--hidden {
    123   display: none;
    124 }
    125 .solution__merge-pdf .solution__loading-section {
    126   display: none;
    127   position: absolute;
    128   top: 50%;
    129   right: 50%;
    130   transform: translate(50%, -50%);
    131 }
    132 .solution__merge-pdf .solution__loading-container {
    133   display: flex;
    134   justify-content: center;
    135   align-items: center;
    136   gap: 1rem;
    137   transition: 2s ease;
    138 }
    139 .solution__merge-pdf .solution__download-section {
    140   display: flex;
    141   justify-content: center;
    142   align-items: center;
    143   flex-direction: column;
    144   gap: 2rem;
    145   height: 100%;
    146 }
    147 .solution__merge-pdf .solution__download-section:last-child {
    148   margin-top: auto;
    149 }
    150 .solution__merge-pdf .solution__download-container {
    151   display: flex;
    152   flex-direction: column;
    153   flex-grow: 1;
    154   justify-content: center;
    155   align-items: center;
    156   gap: 1rem;
    157 }
    158 .solution__merge-pdf .solution__download-file-container {
    159   display: flex;
    160   flex-wrap: wrap;
    161   justify-content: flex-start;
    162   gap: 1rem;
    163 }
    164 .solution__merge-pdf .solution__download-file-name {
    165   white-space: nowrap;
    166   overflow: hidden;
    167   text-overflow: ellipsis;
    168   max-width: 12rem;
    169 }
    170 .solution__merge-pdf .solution__title-text {
    171   font-weight: 600;
    172 }
    173 .solution__merge-pdf .solution__text {
    174   font-weight: 500;
    175 }
    176 .solution__merge-pdf .solution__provided-text {
    177   display: flex;
    178   justify-content: center;
    179   font-size: 0.7rem;
    180   margin-top: 0.5rem;
    181 }
    182 .solution__merge-pdf .solution__error-section {
    183   display: flex;
    184   flex-direction: column;
    185   justify-self: center;
    186   align-self: center;
    187 }
    188 .solution__merge-pdf .solution__dot {
    189   background: var(--solution-merge-pdf-tertiary-color);
    190   height: 0.65em;
    191   width: 0.65em;
    192   border-radius: 50%;
    193   animation: move 0.6s ease infinite;
    194 }
    195 .solution__merge-pdf .solution__link {
    196   color: var(--solution-merge-pdf-tertiary-color);
    197 }
    198 .solution__merge-pdf .solution__select {
    199   display: flex;
    200   flex-direction: column;
    201   position: relative;
    202   gap: 0.3rem;
    203   /* Placeholder color */
    204   /* Style for selected option */
    205 }
    206 .solution__merge-pdf .solution__select .solution__select-input {
    207   height: 42px;
    208   padding: 0 0.5rem;
    209   border-radius: 0.375rem;
    210   border: 1px solid var(--solution-merge-pdf-input-border-color);
    211   color: var(--solution-merge-pdf-tertiary-color);
    212   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color);
    213   -webkit-appearance: none;
    214      -moz-appearance: none;
    215           appearance: none;
    216   cursor: pointer;
    217   /* Arrow styling */
    218   background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");
    219   background-repeat: no-repeat;
    220   background-position: left 1rem center;
    221   background-size: 1rem;
    222 }
    223 .solution__merge-pdf .solution__select .solution__select-input:focus {
    224   outline: 1px solid var(--solution-merge-pdf-primary-color);
    225   box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color);
    226 }
    227 .solution__merge-pdf .solution__select .solution__select-input option {
    228   padding: 1rem;
    229 }
    230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] {
    231   color: var(--solution-merge-pdf-input-border-color);
    232 }
    233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid {
    234   color: var(--solution-merge-pdf-input-border-color);
    235 }
    236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) {
    237   color: var(--solution-merge-pdf-tertiary-color);
    238 }
    239 .solution__merge-pdf .solution_dropdown button {
    240   width: 100%;
    241 }
    242 .solution__merge-pdf .solution__dropdown-content {
    243   display: none;
    244   position: absolute;
    245   flex-direction: column;
    246   min-width: 100%;
    247   max-height: 150px;
    248   padding: 0.5rem 0;
    249   overflow: auto;
    250   background-color: #fff;
    251   box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
    252   z-index: 10;
    253   margin-top: 3px;
    254   border-radius: 10px;
    255   top: 100%;
    256   right: 50%;
    257   transform: translate(50%, 0);
    258 }
    259 .solution__merge-pdf .solution__dropdown-content label {
    260   display: block;
    261   margin-top: 10px;
    262   padding: 0 1rem;
    263 }
    264 .solution__merge-pdf .solution__dropdown-button {
    265   min-width: 100%;
    266 }
    267 .solution__merge-pdf .solution__dropdown-content:hover,
    268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content {
    269   display: flex;
    270 }
    271 .solution__merge-pdf .solution__group {
    272   display: flex;
    273   flex-wrap: wrap;
    274   gap: 10px;
    275 }
    276 .solution__merge-pdf .solution__group > div,
    277 .solution__merge-pdf .solution__group > label {
    278   flex: 1;
    279 }
    280 .solution__merge-pdf .solution__sortable-container {
    281   cursor: move;
    282   display: flex;
    283   padding: 1rem;
    284   margin: 0.5rem 0;
    285   border: 1px dashed var(--solution-merge-pdf-primary-color);
    286   border-radius: 0.375rem;
    287   align-items: center;
    288   gap: 2rem;
    289 }
    290 .solution__merge-pdf .solution__preview-container {
    291   position: relative;
    292   padding: 1px 0;
    293   background-color: #E2EFF9;
    294   border-radius: 0.25rem;
    295   min-height: 60px;
    296   min-width: 60px;
    297   max-width: 60px;
    298   max-height: 60px;
    299   display: flex;
    300   align-items: center;
    301   justify-content: center;
    302 }
    303 .solution__merge-pdf .solution__preview-image {
    304   width: 60px;
    305   height: 60px;
    306   -o-object-fit: contain;
    307      object-fit: contain;
    308 }
    309 .solution__merge-pdf .solution__file-info {
    310   display: flex;
    311   flex-direction: column;
    312   gap: 0.5rem;
    313 }
    314 .solution__merge-pdf .solution__actions-group {
    315   display: flex;
    316   gap: 1rem;
    317   margin-right: auto;
    318 }
    319 @media (max-width: 500px) {
    320   .solution__merge-pdf .solution__sortable-container {
    321     flex-wrap: wrap; /* Allow items to wrap to the next line */
    322     justify-content: center; /* Center item content */
    323     gap: 1rem;
    324   }
    325   .solution__merge-pdf .solution__sortable-container > :nth-child(1),
    326   .solution__merge-pdf .solution__sortable-container > :nth-child(2) {
    327     flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */
    328   }
    329   .solution__merge-pdf .solution__sortable-container > :nth-child(3) {
    330     flex: 1 1 100%; /* Full width for the third item */
    331     justify-content: center; /* Center item content */
    332   }
    333   .solution__merge-pdf .solution__actions-group {
    334     margin-right: 0;
    335   }
    336 }
    337 
    338 .solution__modal {
    339   display: none; /* Initially hidden */
    340   position: fixed;
    341   top: 0;
    342   right: 0;
    343   width: 100%; /* Full screen width */
    344   height: 100%; /* Full screen height */
    345   background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */
    346   justify-content: center; /* Center content horizontally */
    347   align-items: center; /* Center content vertically */
    348   z-index: 1000; /* Ensures modal appears on top */
    349 }
    350 
    351 /* Modal content styling */
    352 .solution__toolbar {
    353   display: flex;
    354   position: absolute;
    355   justify-content: center;
    356   align-items: center;
    357   gap: 0.1rem;
    358   top: 0;
    359   right: 50%;
    360   transform: translateX(50%);
    361   background-color: rgba(240, 240, 240, 0.8);
    362   border-bottom-right-radius: 0.375rem;
    363   border-bottom-left-radius: 0.375rem;
    364   z-index: 1000;
    365 }
    366 
    367 .solution__toolbar-button {
    368   padding: 10px 15px;
    369   cursor: pointer;
    370   color: black;
    371   border: none;
    372   border-radius: 4px;
    373   transition: background-color 0.3s;
    374   background-color: transparent;
    375 }
    376 
    377 .solution__toolbar-button:hover {
    378   color: white;
    379 }
    380 
    381 .solution__pdf-renderer {
    382   display: flex;
    383   justify-content: center;
    384   align-items: center;
    385   overflow: auto;
    386   background-color: #f4f4f4;
    387   box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    388   border: 1px solid #ddd;
    389   max-width: 80%;
    390   max-height: 80%;
    391 }
    392 
    393 .solution__page-indicator {
    394   color: black;
    395   font-size: 16px;
    396   align-self: center;
    397   text-align: center;
    398   white-space: nowrap;
    399 }
    400 
    401 .solution__interactive-image {
    402   max-width: 80%;
    403   max-height: 80%;
    404   fit-object: contain;
    405 }
    406 
    407 @keyframes rotation {
    408   0% {
    409     transform: rotate(0deg);
    410   }
    411   100% {
    412     transform: rotate(-360deg);
    413   }
    414 }
    415 @keyframes move {
    416   0% {
    417     transform: translateX(-50%);
    418   }
    419   50% {
    420     transform: translateX(50%);
    421   }
    422   100% {
    423     transform: translateX(-50%);
    424   }
    425 }
     1:root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-left:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;right:50%;position:absolute;top:50%;transform:translate(50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:left 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;right:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-right:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-right:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;right:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;display:flex;gap:.1rem;right:50%;position:absolute;transform:translateX(50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes move{0%{transform:translateX(-50%)}50%{transform:translateX(50%)}to{transform:translateX(-50%)}}
  • merge-pdf/tags/1.0.0/trunk/build/style-index.css

    r3232408 r3260511  
    1 /*!***************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***!
    3   \***************************************************************************************************************************************************************************************************************************************************/
    4 :root {
    5   --solution-merge-pdf-primary-color: #4f46e5;
    6   --solution-merge-pdf-secondary-color: #eef2ff;
    7   --solution-merge-pdf-tertiary-color: #000;
    8   --solution-merge-pdf-background-color: #fff;
    9   --solution-merge-pdf-border-color: #e5e7eb;
    10   --solution-merge-pdf-input-border-color: #d1d5db;
    11   --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2);
    12   --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05);
    13   --solution-merge-pdf-dropdown-bg-color: #fff;
    14   --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1);
    15   --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1);
    16 }
    17 
    18 .solution__merge-pdf .solution__container-wrapper {
    19   padding: 1rem;
    20   display: flex;
    21   flex-direction: column;
    22   gap: 1rem;
    23   color: var(--solution-merge-pdf-tertiary-color);
    24 }
    25 .solution__merge-pdf .solution__container {
    26   box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px;
    27   border: 1px solid var(--solution-merge-pdf-border-color);
    28   background-color: var(--solution-merge-pdf-background-color);
    29   border-radius: 0.75rem;
    30   padding: 1.5rem 1.5rem 0.5rem;
    31   position: relative;
    32   display: flex;
    33   flex-direction: column;
    34   min-height: 180px;
    35   gap: 1rem;
    36 }
    37 .solution__merge-pdf .solution__header {
    38   font-size: 1.25rem;
    39   letter-spacing: 0.05em;
    40   font-weight: 500;
    41 }
    42 .solution__merge-pdf .solution__content {
    43   flex-grow: 1;
    44   display: grid;
    45 }
    46 .solution__merge-pdf .solution__form {
    47   display: flex;
    48   flex-direction: column;
    49   gap: 1rem;
    50 }
    51 .solution__merge-pdf .solution__label {
    52   white-space: nowrap;
    53   width: 100%;
    54   font-size: 0.75rem;
    55   font-weight: 500;
    56   display: flex;
    57   flex-direction: column;
    58   gap: 0.3rem;
    59 }
    60 .solution__merge-pdf .solution__hint {
    61   font-size: 0.75rem;
    62   font-weight: 500;
    63   color: var(--solution-merge-pdf-primary-color);
    64   white-space: wrap;
    65 }
    66 .solution__merge-pdf .solution__input {
    67   border: 1px solid var(--solution-merge-pdf-input-border-color);
    68   border-radius: 0.375rem;
    69   padding: 0.25rem 0.5rem;
    70   font-size: 1rem;
    71   line-height: 32px;
    72   outline: 1px solid transparent;
    73   outline-offset: -1px;
    74 }
    75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button {
    76   margin-right: 1rem;
    77   padding: 0.5rem 1rem;
    78   border-radius: 0.75rem;
    79   border: none;
    80   background-color: var(--solution-merge-pdf-secondary-color);
    81   color: var(--solution-merge-pdf-primary-color);
    82   font-weight: 500;
    83   cursor: pointer;
    84 }
    85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button {
    86   background-color: var(--solution-merge-pdf-secondary-color);
    87 }
    88 .solution__merge-pdf .solution__btn {
    89   display: inline-flex;
    90   align-items: center; /* Ensures the icon and text are aligned */
    91   justify-content: center;
    92   gap: 0.5rem; /* Adds space between the icon and the text */
    93   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);
    94   background: var(--solution-merge-pdf-secondary-color);
    95   color: var(--solution-merge-pdf-primary-color);
    96   padding: 0.5rem 1rem;
    97   border-radius: 1rem;
    98   font-weight: 600;
    99   cursor: pointer;
    100   border: none;
    101 }
    102 .solution__merge-pdf .solution__btn:hover {
    103   filter: brightness(0.98);
    104 }
    105 .solution__merge-pdf .solution__btn .dashicons {
    106   font-size: 1.2rem; /* Adjust the size of the icon */
    107   vertical-align: middle; /* Aligns the icon vertically with the text */
    108 }
    109 .solution__merge-pdf .solution__dropdown-wrapper {
    110   position: relative;
    111 }
    112 .solution__merge-pdf .solution__dropdown {
    113   position: relative;
    114   overflow: visible;
    115   background-color: transparent;
    116   box-shadow: none;
    117   width: 100%;
    118   border-radius: 0.75rem;
    119   max-height: 15rem;
    120   z-index: 10;
    121 }
    122 .solution__merge-pdf .solution__dropdown--hidden {
    123   display: none;
    124 }
    125 .solution__merge-pdf .solution__loading-section {
    126   display: none;
    127   position: absolute;
    128   top: 50%;
    129   left: 50%;
    130   transform: translate(-50%, -50%);
    131 }
    132 .solution__merge-pdf .solution__loading-container {
    133   display: flex;
    134   justify-content: center;
    135   align-items: center;
    136   gap: 1rem;
    137   transition: 2s ease;
    138 }
    139 .solution__merge-pdf .solution__download-section {
    140   display: flex;
    141   justify-content: center;
    142   align-items: center;
    143   flex-direction: column;
    144   gap: 2rem;
    145   height: 100%;
    146 }
    147 .solution__merge-pdf .solution__download-section:last-child {
    148   margin-top: auto;
    149 }
    150 .solution__merge-pdf .solution__download-container {
    151   display: flex;
    152   flex-direction: column;
    153   flex-grow: 1;
    154   justify-content: center;
    155   align-items: center;
    156   gap: 1rem;
    157 }
    158 .solution__merge-pdf .solution__download-file-container {
    159   display: flex;
    160   flex-wrap: wrap;
    161   justify-content: flex-start;
    162   gap: 1rem;
    163 }
    164 .solution__merge-pdf .solution__download-file-name {
    165   white-space: nowrap;
    166   overflow: hidden;
    167   text-overflow: ellipsis;
    168   max-width: 12rem;
    169 }
    170 .solution__merge-pdf .solution__title-text {
    171   font-weight: 600;
    172 }
    173 .solution__merge-pdf .solution__text {
    174   font-weight: 500;
    175 }
    176 .solution__merge-pdf .solution__provided-text {
    177   display: flex;
    178   justify-content: center;
    179   font-size: 0.7rem;
    180   margin-top: 0.5rem;
    181 }
    182 .solution__merge-pdf .solution__error-section {
    183   display: flex;
    184   flex-direction: column;
    185   justify-self: center;
    186   align-self: center;
    187 }
    188 .solution__merge-pdf .solution__dot {
    189   background: var(--solution-merge-pdf-tertiary-color);
    190   height: 0.65em;
    191   width: 0.65em;
    192   border-radius: 50%;
    193   animation: move 0.6s ease infinite;
    194 }
    195 .solution__merge-pdf .solution__link {
    196   color: var(--solution-merge-pdf-tertiary-color);
    197 }
    198 .solution__merge-pdf .solution__select {
    199   display: flex;
    200   flex-direction: column;
    201   position: relative;
    202   gap: 0.3rem;
    203   /* Placeholder color */
    204   /* Style for selected option */
    205 }
    206 .solution__merge-pdf .solution__select .solution__select-input {
    207   height: 42px;
    208   padding: 0 0.5rem;
    209   border-radius: 0.375rem;
    210   border: 1px solid var(--solution-merge-pdf-input-border-color);
    211   color: var(--solution-merge-pdf-tertiary-color);
    212   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color);
    213   -webkit-appearance: none;
    214      -moz-appearance: none;
    215           appearance: none;
    216   cursor: pointer;
    217   /* Arrow styling */
    218   background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");
    219   background-repeat: no-repeat;
    220   background-position: right 1rem center;
    221   background-size: 1rem;
    222 }
    223 .solution__merge-pdf .solution__select .solution__select-input:focus {
    224   outline: 1px solid var(--solution-merge-pdf-primary-color);
    225   box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color);
    226 }
    227 .solution__merge-pdf .solution__select .solution__select-input option {
    228   padding: 1rem;
    229 }
    230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] {
    231   color: var(--solution-merge-pdf-input-border-color);
    232 }
    233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid {
    234   color: var(--solution-merge-pdf-input-border-color);
    235 }
    236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) {
    237   color: var(--solution-merge-pdf-tertiary-color);
    238 }
    239 .solution__merge-pdf .solution_dropdown button {
    240   width: 100%;
    241 }
    242 .solution__merge-pdf .solution__dropdown-content {
    243   display: none;
    244   position: absolute;
    245   flex-direction: column;
    246   min-width: 100%;
    247   max-height: 150px;
    248   padding: 0.5rem 0;
    249   overflow: auto;
    250   background-color: #fff;
    251   box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
    252   z-index: 10;
    253   margin-top: 3px;
    254   border-radius: 10px;
    255   top: 100%;
    256   left: 50%;
    257   transform: translate(-50%, 0);
    258 }
    259 .solution__merge-pdf .solution__dropdown-content label {
    260   display: block;
    261   margin-top: 10px;
    262   padding: 0 1rem;
    263 }
    264 .solution__merge-pdf .solution__dropdown-button {
    265   min-width: 100%;
    266 }
    267 .solution__merge-pdf .solution__dropdown-content:hover,
    268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content {
    269   display: flex;
    270 }
    271 .solution__merge-pdf .solution__group {
    272   display: flex;
    273   flex-wrap: wrap;
    274   gap: 10px;
    275 }
    276 .solution__merge-pdf .solution__group > div,
    277 .solution__merge-pdf .solution__group > label {
    278   flex: 1;
    279 }
    280 .solution__merge-pdf .solution__sortable-container {
    281   cursor: move;
    282   display: flex;
    283   padding: 1rem;
    284   margin: 0.5rem 0;
    285   border: 1px dashed var(--solution-merge-pdf-primary-color);
    286   border-radius: 0.375rem;
    287   align-items: center;
    288   gap: 2rem;
    289 }
    290 .solution__merge-pdf .solution__preview-container {
    291   position: relative;
    292   padding: 1px 0;
    293   background-color: #E2EFF9;
    294   border-radius: 0.25rem;
    295   min-height: 60px;
    296   min-width: 60px;
    297   max-width: 60px;
    298   max-height: 60px;
    299   display: flex;
    300   align-items: center;
    301   justify-content: center;
    302 }
    303 .solution__merge-pdf .solution__preview-image {
    304   width: 60px;
    305   height: 60px;
    306   -o-object-fit: contain;
    307      object-fit: contain;
    308 }
    309 .solution__merge-pdf .solution__file-info {
    310   display: flex;
    311   flex-direction: column;
    312   gap: 0.5rem;
    313 }
    314 .solution__merge-pdf .solution__actions-group {
    315   display: flex;
    316   gap: 1rem;
    317   margin-left: auto;
    318 }
    319 @media (max-width: 500px) {
    320   .solution__merge-pdf .solution__sortable-container {
    321     flex-wrap: wrap; /* Allow items to wrap to the next line */
    322     justify-content: center; /* Center item content */
    323     gap: 1rem;
    324   }
    325   .solution__merge-pdf .solution__sortable-container > :nth-child(1),
    326   .solution__merge-pdf .solution__sortable-container > :nth-child(2) {
    327     flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */
    328   }
    329   .solution__merge-pdf .solution__sortable-container > :nth-child(3) {
    330     flex: 1 1 100%; /* Full width for the third item */
    331     justify-content: center; /* Center item content */
    332   }
    333   .solution__merge-pdf .solution__actions-group {
    334     margin-left: 0;
    335   }
    336 }
    337 
    338 .solution__modal {
    339   display: none; /* Initially hidden */
    340   position: fixed;
    341   top: 0;
    342   left: 0;
    343   width: 100%; /* Full screen width */
    344   height: 100%; /* Full screen height */
    345   background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */
    346   justify-content: center; /* Center content horizontally */
    347   align-items: center; /* Center content vertically */
    348   z-index: 1000; /* Ensures modal appears on top */
    349 }
    350 
    351 /* Modal content styling */
    352 .solution__toolbar {
    353   display: flex;
    354   position: absolute;
    355   justify-content: center;
    356   align-items: center;
    357   gap: 0.1rem;
    358   top: 0;
    359   left: 50%;
    360   transform: translateX(-50%);
    361   background-color: rgba(240, 240, 240, 0.8);
    362   border-bottom-left-radius: 0.375rem;
    363   border-bottom-right-radius: 0.375rem;
    364   z-index: 1000;
    365 }
    366 
    367 .solution__toolbar-button {
    368   padding: 10px 15px;
    369   cursor: pointer;
    370   color: black;
    371   border: none;
    372   border-radius: 4px;
    373   transition: background-color 0.3s;
    374   background-color: transparent;
    375 }
    376 
    377 .solution__toolbar-button:hover {
    378   color: white;
    379 }
    380 
    381 .solution__pdf-renderer {
    382   display: flex;
    383   justify-content: center;
    384   align-items: center;
    385   overflow: auto;
    386   background-color: #f4f4f4;
    387   box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    388   border: 1px solid #ddd;
    389   max-width: 80%;
    390   max-height: 80%;
    391 }
    392 
    393 .solution__page-indicator {
    394   color: black;
    395   font-size: 16px;
    396   align-self: center;
    397   text-align: center;
    398   white-space: nowrap;
    399 }
    400 
    401 .solution__interactive-image {
    402   max-width: 80%;
    403   max-height: 80%;
    404   fit-object: contain;
    405 }
    406 
    407 @keyframes rotation {
    408   0% {
    409     transform: rotate(0deg);
    410   }
    411   100% {
    412     transform: rotate(360deg);
    413   }
    414 }
    415 @keyframes move {
    416   0% {
    417     transform: translateX(50%);
    418   }
    419   50% {
    420     transform: translateX(-50%);
    421   }
    422   100% {
    423     transform: translateX(50%);
    424   }
    425 }
    426 
    427 /*# sourceMappingURL=style-index.css.map*/
     1:root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-right:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;left:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(-50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-left:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-left:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;left:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;display:flex;gap:.1rem;left:50%;position:absolute;transform:translateX(-50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes move{0%{transform:translateX(50%)}50%{transform:translateX(-50%)}to{transform:translateX(50%)}}
  • merge-pdf/tags/1.0.0/trunk/build/view.asset.php

    r3232408 r3260511  
    1 <?php return array('dependencies' => array(), 'version' => 'd3134df337a43cf2ea57');
     1<?php return array('dependencies' => array(), 'version' => '1b8511a4fa9f3be4b297');
  • merge-pdf/tags/1.0.0/trunk/build/view.js

    r3232408 r3260511  
    1 /******/ (() => { // webpackBootstrap
    2 /*!*********************!*\
    3   !*** ./src/view.js ***!
    4   \*********************/
    5 document.querySelectorAll('.solution__merge-pdf .solution__form').forEach(form => {
    6   form.addEventListener('submit', function (event) {
    7     event.preventDefault();
    8     const formId = form.getAttribute('id');
    9     const fileInput = form.querySelector('[name="file"]');
    10     const loadingSection = document.getElementById(`loadingSection_${formId}`);
    11     const errorSection = document.getElementById(`errorSection_${formId}`);
    12     const resultMessage = document.getElementById(`resultMessage_${formId}`);
    13     const downloadSection = document.getElementById(`downloadSection_${formId}`);
    14 
    15     // Hide the form, show the loading indicator, hide error and download sections
    16     form.style.display = 'none';
    17     loadingSection.style.display = 'flex';
    18     errorSection.style.display = 'none'; // Hide error section
    19     downloadSection.style.display = 'none';
    20     const formData = new FormData();
    21     Array.from(fileInput.files).forEach((file, index) => {
    22       formData.append(`file[${index}]`, file);
    23     });
    24     formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce);
    25     fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, {
    26       method: 'POST',
    27       body: formData
    28     }).then(response => response.json()).then(data => {
    29       if (data.id) {
    30         pollStatus(data.id, formId);
    31       } else {
    32         loadingSection.style.display = 'none';
    33         errorSection.style.display = 'flex';
    34         resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    35         const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    36         fileListContainer.innerHTML = '';
    37       }
    38     }).catch(() => {
    39       loadingSection.style.display = 'none';
    40       errorSection.style.display = 'flex';
    41       resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    42       const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    43       fileListContainer.innerHTML = '';
    44     });
    45   });
    46 
    47   // Add event listener for restart buttons
    48   const restartDownloadBtn = document.getElementById(`restartDownloadBtn_${form.id}`);
    49   const restartErrorBtn = document.getElementById(`restartErrorBtn_${form.id}`);
    50 
    51   // Function to restart the process and reset the form
    52   function resetForm() {
    53     form.reset();
    54     form.style.display = 'flex';
    55     document.getElementById(`loadingSection_${form.id}`).style.display = 'none'; // Hide loading
    56     document.getElementById(`downloadSection_${form.id}`).style.display = 'none'; // Hide download
    57     document.getElementById(`errorSection_${form.id}`).style.display = 'none'; // Hide error section
    58     const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    59     fileListContainer.innerHTML = '';
    60   }
    61   if (restartDownloadBtn) {
    62     restartDownloadBtn.addEventListener('click', resetForm);
    63   }
    64   if (restartErrorBtn) {
    65     restartErrorBtn.addEventListener('click', resetForm);
    66   }
    67   pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc;
    68   const containerId = form.getAttribute('id');
    69   let currentPdf, currentPage, totalPages, rotation, scale;
    70   let allFiles = [];
    71   const fileListContainer = document.createElement("div");
    72   fileListContainer.setAttribute(`id`, `${containerId}-file-list-container`);
    73   const formField = document.getElementById(`${containerId}-files-input`);
    74   const formFieldParent = formField.parentElement;
    75   formFieldParent.appendChild(fileListContainer);
    76   formField.addEventListener("change", async event => {
    77     const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    78     const newFiles = Array.from(event.target.files);
    79 
    80     // Merge new files with the existing files but remove duplicates within new files
    81     const uniqueNewFiles = newFiles.filter(file => !allFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size));
    82 
    83     // Merge the unique new files with the existing files
    84     allFiles = [...allFiles, ...uniqueNewFiles];
    85     const dataTransfer = new DataTransfer();
    86 
    87     // Add all unique files to DataTransfer
    88     allFiles.forEach(file => {
    89       dataTransfer.items.add(file);
    90     });
    91     event.target.files = dataTransfer.files;
    92 
    93     // Only create and append list items for new files that aren't already in the list
    94     for (const file of uniqueNewFiles) {
    95       const listItem = await createFileListItem(file, event);
    96       fileListContainer.appendChild(listItem);
    97     }
    98     createSortableInstance(fileListContainer, event);
    99   });
    100   async function createFileListItem(file, event) {
    101     const listItem = document.createElement("div");
    102     listItem.classList.add("solution__sortable-container");
    103     const previewContainer = document.createElement("div");
    104     previewContainer.classList.add("solution__preview-container");
    105     if (file.type && file.type.match(/image.*/)) {
    106       createPreviewImage(previewContainer, file);
    107     } else if (file.type && file.type.match("application/pdf")) {
    108       await createPreviewPdf(previewContainer, file);
    109     }
    110     const fileSize = file.size > 1024 * 1024 ? (file.size / (1024 * 1024)).toFixed(2) + " MB" : (file.size / 1024).toFixed(2) + " KB";
    111     const fileInfoContent = `
    112     <div class="solution__file-info">
    113         <div class="solution__file-name">${file.name}</div>
    114         <div class="solution__file-size">${fileSize}</div>
    115     </div>
    116   `;
    117     const fileInfo = document.createElement("div");
    118     fileInfo.classList.add("solution__file-info");
    119     fileInfo.innerHTML = fileInfoContent;
    120     const previewButton = createPreviewButton(file);
    121     const removeButton = createRemoveButton(file, event);
    122     const actionContainer = document.createElement("div");
    123     actionContainer.classList.add("solution__actions-group");
    124     actionContainer.appendChild(previewButton);
    125     actionContainer.appendChild(removeButton);
    126     listItem.appendChild(previewContainer);
    127     listItem.appendChild(fileInfo);
    128     listItem.appendChild(actionContainer);
    129     return listItem;
    130   }
    131   function createRemoveButton(file, event) {
    132     const removeButton = document.createElement("button");
    133     removeButton.className = "solution__btn";
    134     const removeIcon = document.createElement("i");
    135     removeIcon.className = "fas fa-trash";
    136     removeIcon.title = "Remove File";
    137     removeButton.appendChild(removeIcon);
    138     removeButton.addEventListener("click", e => {
    139       e.preventDefault();
    140       e.stopPropagation();
    141 
    142       // Remove the file from allFiles as well
    143       allFiles = allFiles.filter(f => f.name !== file.name); // Update the array directly
    144 
    145       const dataTransfer = new DataTransfer();
    146       allFiles.forEach(f => dataTransfer.items.add(f));
    147       event.target.files = dataTransfer.files;
    148       const listItem = e.target.closest(".solution__sortable-container");
    149       listItem?.parentElement?.removeChild(listItem);
    150     });
    151     return removeButton;
    152   }
    153   function createPreviewButton(file) {
    154     const previewButton = document.createElement("button");
    155     previewButton.classList.add("solution__btn");
    156     const viewIcon = document.createElement("i");
    157     viewIcon.className = "fas fa-eye";
    158     viewIcon.title = "View File";
    159     previewButton.appendChild(viewIcon);
    160     previewButton.addEventListener("click", async e => {
    161       e.preventDefault();
    162       e.stopPropagation();
    163       await showModal(file);
    164     });
    165     return previewButton;
    166   }
    167   function createSortableInstance(element, event) {
    168     if (element._sortableInstance) {
    169       element._sortableInstance.destroy();
    170     }
    171     element._sortableInstance = new Sortable(element, {
    172       animation: 150,
    173       onEnd: () => {
    174         const dataTransfer = new DataTransfer();
    175         const newFileList = Array.from(element.children).map(item => {
    176           const fileNameElement = item.querySelector(`#${containerId}-file-list-container .solution__file-name`);
    177           return fileNameElement ? fileNameElement.textContent : null;
    178         });
    179         newFileList.forEach(fileName => {
    180           const file = Array.from(event.target.files).find(f => f.name === fileName);
    181           if (file) {
    182             dataTransfer.items.add(file);
    183           }
    184         });
    185         event.target.files = dataTransfer.files;
    186       }
    187     });
    188   }
    189   function createPreviewImage(element, file) {
    190     const fileURL = URL.createObjectURL(file);
    191     const img = document.createElement("img");
    192     img.classList.add("solution__preview-image");
    193     img.src = fileURL;
    194     element.appendChild(img);
    195   }
    196   async function createPreviewPdf(element, file) {
    197     try {
    198       const fileURL = URL.createObjectURL(file);
    199       const pdf = await pdfjsLib.getDocument(fileURL).promise;
    200       const page = await pdf.getPage(1); // Render the first page only
    201 
    202       const preCalculateViewport = page.getViewport({
    203         scale: 1
    204       });
    205       const scaleHeight = 60 / preCalculateViewport.height;
    206       const scaleWidth = 60 / preCalculateViewport.width;
    207       const scale = Math.min(scaleHeight, scaleWidth);
    208       const viewport = page.getViewport({
    209         scale
    210       });
    211       const canvas = document.createElement("canvas");
    212       canvas.className = "page";
    213       canvas.width = viewport.width;
    214       canvas.height = viewport.height;
    215       const context = canvas.getContext("2d");
    216       const renderContext = {
    217         canvasContext: context,
    218         viewport: viewport
    219       };
    220       await page.render(renderContext).promise;
    221       element.appendChild(canvas);
    222     } catch (error) {
    223       console.log(error);
    224     }
    225   }
    226   async function showModal(file) {
    227     const fullscreenModal = document.createElement("div");
    228     fullscreenModal.id = "solution__fullscreen-modal";
    229     fullscreenModal.classList.add("solution__modal");
    230     fullscreenModal.style.display = "flex"; // Show the modal when opened
    231 
    232     if (file.type && file.type.match(/image.*/)) {
    233       const imageContent = createImageRenderer(file);
    234       const toolbar = createToolbar();
    235       fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content
    236       fullscreenModal.appendChild(imageContent); // Render the image content
    237     }
    238     if (file.type && file.type.match("application/pdf")) {
    239       const pdfContent = await createPdfRenderer(file);
    240       const toolbar = createToolbar();
    241       fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content
    242       fullscreenModal.appendChild(pdfContent); // Render the PDF content
    243     }
    244     document.body.appendChild(fullscreenModal); // Add the modal to the body
    245 
    246     // Add event listener to close the modal when clicking outside the content or toolbar
    247     fullscreenModal.addEventListener("click", event => {
    248       closeModal(event, fullscreenModal);
    249     });
    250   }
    251   function closeModal(event, modal) {
    252     if (event.target === modal) {
    253       modal.remove();
    254     }
    255   }
    256   function createImageRenderer(file) {
    257     const image = document.createElement("img");
    258     image.classList.add("solution__interactive-image");
    259     image.style.transformOrigin = "center center"; // Proper zoom/rotation pivot
    260     image.setAttribute("data-scale", "1"); // Initialize scale
    261     image.setAttribute("data-rotation", "0"); // Initialize rotation
    262 
    263     // Load the image content
    264     const reader = new FileReader();
    265     reader.onload = event => {
    266       image.src = event.target.result; // Set image source
    267     };
    268     reader.readAsDataURL(file);
    269     return image;
    270   }
    271   async function createPdfRenderer(file) {
    272     const pdfRendererDiv = document.createElement("div");
    273     pdfRendererDiv.classList.add("solution__pdf-renderer");
    274 
    275     // Create a canvas for rendering
    276     const canvas = document.createElement("canvas");
    277     canvas.id = "solution__pdf-canvas";
    278     pdfRendererDiv.appendChild(canvas);
    279     const ctx = canvas.getContext("2d");
    280 
    281     // Load the PDF using PDF.js
    282     const pdf = await pdfjsLib.getDocument(URL.createObjectURL(file)).promise;
    283 
    284     // Store PDF and page details in the instance
    285     currentPdf = pdf;
    286     currentPage = 1;
    287     totalPages = pdf.numPages;
    288     rotation = 0;
    289     scale = 1;
    290 
    291     // Render the first page
    292     await renderPage(ctx);
    293     return pdfRendererDiv;
    294   }
    295   async function renderPage(ctx) {
    296     const page = await currentPdf.getPage(currentPage);
    297 
    298     // Adjust canvas size based on the PDF page
    299     const viewport = page.getViewport({
    300       scale,
    301       rotation
    302     });
    303     const canvas = ctx.canvas;
    304     canvas.width = viewport.width;
    305     canvas.height = viewport.height;
    306     const renderContext = {
    307       canvasContext: ctx,
    308       viewport: viewport
    309     };
    310     await page.render(renderContext).promise;
    311 
    312     // Update toolbar state (for buttons and page indicator)
    313     const pageIndicator = document.getElementById("solution__page-indicator");
    314     if (pageIndicator) {
    315       pageIndicator.textContent = `${currentPage} / ${totalPages}`;
    316     }
    317   }
    318   function createToolbar() {
    319     const toolbar = document.createElement("div");
    320     toolbar.classList.add("solution__toolbar");
    321 
    322     // Buttons for toolbar
    323     const buttons = [{
    324       text: "Left",
    325       id: "solution__previous-btn",
    326       icon: "fa-solid fa-chevron-left"
    327     }, {
    328       text: "Right",
    329       id: "solution__next-btn",
    330       icon: "fa-solid fa-chevron-right"
    331     }, {
    332       text: "Zoom In",
    333       id: "solution__zoom-in-btn",
    334       icon: "fa-solid fa-magnifying-glass-plus"
    335     }, {
    336       text: "Zoom Out",
    337       id: "solution__zoom-out-btn",
    338       icon: "fa-solid fa-magnifying-glass-minus"
    339     }, {
    340       text: "Rotate Left",
    341       id: "solution__rotate-left-btn",
    342       icon: "fa-solid fa-arrow-rotate-left"
    343     }, {
    344       text: "Rotate Right",
    345       id: "solution__rotate-right-btn",
    346       icon: "fa-solid fa-arrow-rotate-right"
    347     }, {
    348       text: "Close",
    349       id: "close-modal-btn",
    350       icon: "fa-solid fa-xmark"
    351     }];
    352 
    353     // Create Left button
    354     const leftBtn = createToolbarButton(buttons[0]);
    355     toolbar.appendChild(leftBtn);
    356 
    357     // Create page indicator
    358     const pageIndicator = document.createElement("span");
    359     pageIndicator.id = "solution__page-indicator";
    360     pageIndicator.textContent = `${currentPage || 1} / ${totalPages || 1}`;
    361     pageIndicator.classList.add("solution__page-indicator");
    362     toolbar.appendChild(pageIndicator);
    363 
    364     // Create Right button
    365     const rightBtn = createToolbarButton(buttons[1]);
    366     toolbar.appendChild(rightBtn);
    367 
    368     // Add remaining buttons
    369     buttons.slice(2).forEach(button => {
    370       const btn = createToolbarButton(button);
    371       toolbar.appendChild(btn);
    372     });
    373     return toolbar;
    374   }
    375   function createToolbarButton(buttonConfig) {
    376     const btn = document.createElement("button");
    377     btn.id = buttonConfig.id;
    378     btn.classList.add("solution__toolbar-button");
    379 
    380     // Create the icon element
    381     const icon = document.createElement("i");
    382     icon.className = buttonConfig.icon; // Use the icon class from buttonConfig
    383     btn.appendChild(icon);
    384 
    385     // Assign the event listener
    386     btn.addEventListener("click", async e => {
    387       e.preventDefault();
    388       e.stopPropagation();
    389       await handleToolbarAction(buttonConfig.id); // Handle action here
    390     });
    391     return btn;
    392   }
    393   async function handleToolbarAction(actionId) {
    394     const pdfCanvas = document.querySelector("#solution__pdf-canvas");
    395     const image = document.querySelector(".solution__interactive-image");
    396     if (actionId === "close-modal-btn") {
    397       document.getElementById("solution__fullscreen-modal")?.remove();
    398       return;
    399     }
    400     if (pdfCanvas) {
    401       // Handle PDF-specific actions (left, right, etc.)
    402       await handlePdfToolbarAction(actionId);
    403     } else if (image) {
    404       // Handle image-specific actions (zoom, rotate, etc.)
    405       handleImageToolbarActions(actionId, image);
    406     }
    407   }
    408   function handleImageToolbarActions(actionId, image) {
    409     let scale = parseFloat(image.getAttribute("data-scale")) || 1;
    410     let rotation = parseInt(image.getAttribute("data-rotation")) || 0;
    411 
    412     // Store original dimensions
    413     const originalWidth = image.naturalWidth;
    414     const originalHeight = image.naturalHeight;
    415 
    416     // Get parent element's dimensions
    417     const parent = image.parentElement;
    418     const parentWidth = parent.offsetWidth;
    419     const parentHeight = parent.offsetHeight;
    420     switch (actionId) {
    421       case "solution__zoom-in-btn":
    422         scale = Math.min(scale + 0.1, 5); // Cap zoom at 5x
    423         break;
    424       case "solution__zoom-out-btn":
    425         scale = Math.max(scale - 0.1, 0.1); // Minimum zoom to 0.1x
    426         break;
    427       case "solution__rotate-left-btn":
    428         rotation = (rotation - 90) % 360; // Rotate counter-clockwise
    429         break;
    430       case "solution__rotate-right-btn":
    431         rotation = (rotation + 90) % 360; // Rotate clockwise
    432         break;
    433     }
    434 
    435     // Determine whether to swap width and height
    436     let adjustedWidth = originalWidth * scale;
    437     let adjustedHeight = originalHeight * scale;
    438     if (Math.abs(rotation % 180) === 90) {
    439       // Swap width and height if rotated 90 or 270 degrees
    440       [adjustedWidth, adjustedHeight] = [adjustedHeight, adjustedWidth];
    441       adjustedWidth = parentWidth * 0.8;
    442       adjustedHeight = adjustedWidth / originalWidth * originalHeight;
    443       adjustedHeight = parentHeight * 0.8;
    444       adjustedHeight = adjustedHeight / originalWidth * originalHeight;
    445     }
    446 
    447     // Apply updated dimensions
    448     image.style.transform = `scale(${scale}) rotate(${rotation}deg)`;
    449     image.style.width = `${adjustedWidth}px`;
    450     image.style.height = `${adjustedHeight}px`;
    451     image.style.objectFit = "contain";
    452 
    453     // Update rotation data (only for internal tracking)
    454     image.setAttribute("data-scale", scale); // Store current scale
    455     image.setAttribute("data-rotation", rotation); // Store current rotation
    456   }
    457   async function handlePdfToolbarAction(actionId) {
    458     const canvas = document.getElementById("solution__pdf-canvas");
    459     const ctx = canvas.getContext("2d");
    460     switch (actionId) {
    461       case "solution__previous-btn":
    462         if (currentPage > 1) {
    463           currentPage--;
    464           await renderPage(ctx);
    465         }
    466         break;
    467       case "solution__next-btn":
    468         if (currentPage < totalPages) {
    469           currentPage++;
    470           await renderPage(ctx);
    471         }
    472         break;
    473       case "solution__zoom-in-btn":
    474         scale += 0.2;
    475         await renderPage(ctx);
    476         break;
    477       case "solution__zoom-out-btn":
    478         scale -= 0.2;
    479         await renderPage(ctx);
    480         break;
    481       case "solution__rotate-left-btn":
    482         rotation -= 90;
    483         await renderPage(ctx);
    484         break;
    485       case "solution__rotate-right-btn":
    486         rotation += 90;
    487         await renderPage(ctx);
    488         break;
    489       case "close-modal-btn":
    490         break;
    491       default:
    492         console.log(`Unknown action: ${actionId}`);
    493     }
    494   }
    495 });
    496 function pollStatus(id, formId) {
    497   const loadingSection = document.getElementById(`loadingSection_${formId}`);
    498   const errorSection = document.getElementById(`errorSection_${formId}`);
    499   const resultMessage = document.getElementById(`resultMessage_${formId}`);
    500   const downloadSection = document.getElementById(`downloadSection_${formId}`);
    501   const downloadFilesContainer = document.getElementById(`downloadFilesContainer_${formId}`);
    502   function checkStatus() {
    503     fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`).then(response => response.json()).then(data => {
    504       if (data.status === 'done') {
    505         loadingSection.style.display = 'none';
    506         downloadFilesContainer.innerHTML = ''; // Clear previous downloads
    507 
    508         if (data.output && data.output.files && data.output.files.length > 0) {
    509           data.output.files.forEach(file => {
    510             // Create download button
    511             const downloadButton = document.createElement('button');
    512             downloadButton.type = 'button';
    513             downloadButton.className = 'solution__btn';
    514             downloadButton.innerHTML = `
    515                                 <div class="dashicons dashicons-download"></div>
    516                                 <span class="solution__download-file-name">${file.name}</span>
    517                             `;
    518 
    519             // Set download functionality
    520             downloadButton.addEventListener('click', event => {
    521               event.preventDefault();
    522               const anchor = document.createElement('a');
    523               anchor.href = file.path;
    524               anchor.target = '_blank';
    525               document.body.appendChild(anchor);
    526               anchor.click();
    527               document.body.removeChild(anchor);
    528             });
    529 
    530             // Append elements to the container
    531             const fileContainer = document.createElement('div');
    532             fileContainer.className = 'solution__download-file-container';
    533             fileContainer.appendChild(downloadButton);
    534             downloadFilesContainer.appendChild(fileContainer);
    535           });
    536           downloadSection.style.display = 'flex'; // Show download section
    537         } else {
    538           errorSection.style.display = 'flex';
    539           resultMessage.innerText = 'No files available for download.';
    540         }
    541       } else if (data.status === 'error') {
    542         throw new Error('Processing failed: ' + data.message);
    543       } else {
    544         setTimeout(checkStatus, 500);
    545       }
    546     }).catch(() => {
    547       loadingSection.style.display = 'none';
    548       errorSection.style.display = 'flex';
    549       resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    550     });
    551   }
    552   checkStatus();
    553 }
    554 /******/ })()
    555 ;
    556 //# sourceMappingURL=view.js.map
     1document.querySelectorAll(".solution__merge-pdf .solution__form").forEach((e=>{e.addEventListener("submit",(function(t){t.preventDefault();const n=e.getAttribute("id"),o=e.querySelector('[name="file"]'),i=document.getElementById(`loadingSection_${n}`),s=document.getElementById(`errorSection_${n}`),l=document.getElementById(`resultMessage_${n}`),d=document.getElementById(`downloadSection_${n}`);e.style.display="none",i.style.display="flex",s.style.display="none",d.style.display="none";const c=new FormData;Array.from(o.files).forEach(((e,t)=>{c.append(`file[${t}]`,e)})),c.append("mergePDFFormNonce",wpApiSettingsMergePDF.mergePDFNonce),fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`,{method:"POST",body:c}).then((e=>e.json())).then((e=>{e.id?function(e,t){const n=document.getElementById(`loadingSection_${t}`),o=document.getElementById(`errorSection_${t}`),a=document.getElementById(`resultMessage_${t}`),i=document.getElementById(`downloadSection_${t}`),s=document.getElementById(`downloadFilesContainer_${t}`);!function t(){fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${e}`,{method:"GET",headers:{"X-WP-Nonce":wpApiSettingsMergePDF.mergePDFNonce,"Content-Type":"application/json"}}).then((e=>e.json())).then((e=>{if("done"===e.status)n.style.display="none",s.innerHTML="",e.output&&e.output.files&&e.output.files.length>0?(e.output.files.forEach((e=>{const t=document.createElement("button");t.type="button",t.className="solution__btn",t.innerHTML=`\n                                <div class="dashicons dashicons-download"></div>\n                                <span class="solution__download-file-name">${e.name}</span>\n                            `,t.addEventListener("click",(t=>{t.preventDefault();const n=document.createElement("a");n.href=e.path,n.target="_blank",document.body.appendChild(n),n.click(),document.body.removeChild(n)}));const n=document.createElement("div");n.className="solution__download-file-container",n.appendChild(t),s.appendChild(n)})),i.style.display="flex"):(o.style.display="flex",a.innerText="No files available for download.");else{if("error"===e.status)throw new Error("Processing failed: "+e.message);setTimeout(t,500)}})).catch((()=>{n.style.display="none",o.style.display="flex",a.innerText="An unexpected error occurred. Please try again."}))}()}(e.id,n):(i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML="")})).catch((()=>{i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML=""}))}));const t=document.getElementById(`restartDownloadBtn_${e.id}`),n=document.getElementById(`restartErrorBtn_${e.id}`);function o(){e.reset(),e.style.display="flex",document.getElementById(`loadingSection_${e.id}`).style.display="none",document.getElementById(`downloadSection_${e.id}`).style.display="none",document.getElementById(`errorSection_${e.id}`).style.display="none",document.getElementById(`${a}-file-list-container`).innerHTML=""}t&&t.addEventListener("click",o),n&&n.addEventListener("click",o),pdfjsLib.GlobalWorkerOptions.workerSrc=wpApiSettingsMergePDF.pdfWorkerSrc;const a=e.getAttribute("id");let i,s,l,d,c,r=[];const u=document.createElement("div");u.setAttribute("id",`${a}-file-list-container`);const m=document.getElementById(`${a}-files-input`);async function p(e,t){const n=document.createElement("div");n.classList.add("solution__sortable-container");const o=document.createElement("div");o.classList.add("solution__preview-container"),e.type&&e.type.match(/image.*/)?function(e,t){const n=URL.createObjectURL(t),o=document.createElement("img");o.classList.add("solution__preview-image"),o.src=n,e.appendChild(o)}(o,e):e.type&&e.type.match("application/pdf")&&await async function(e,t){try{const n=URL.createObjectURL(t),o=await pdfjsLib.getDocument(n).promise,a=await o.getPage(1),i=a.getViewport({scale:1}),s=60/i.height,l=60/i.width,d=Math.min(s,l),c=a.getViewport({scale:d}),r=document.createElement("canvas");r.className="page",r.width=c.width,r.height=c.height;const u={canvasContext:r.getContext("2d"),viewport:c};await a.render(u).promise,e.appendChild(r)}catch(e){console.log(e)}}(o,e);const a=e.size>1048576?(e.size/1048576).toFixed(2)+" MB":(e.size/1024).toFixed(2)+" KB",u=`\n    <div class="solution__file-info">\n        <div class="solution__file-name">${e.name}</div>\n        <div class="solution__file-size">${a}</div>\n    </div>\n  `,m=document.createElement("div");m.classList.add("solution__file-info"),m.innerHTML=u;const p=function(e){const t=document.createElement("button");t.classList.add("solution__btn");const n=document.createElement("i");return n.className="fas fa-eye",n.title="View File",t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.createElement("div");if(t.id="solution__fullscreen-modal",t.classList.add("solution__modal"),t.style.display="flex",e.type&&e.type.match(/image.*/)){const n=function(e){const t=document.createElement("img");t.classList.add("solution__interactive-image"),t.style.transformOrigin="center center",t.setAttribute("data-scale","1"),t.setAttribute("data-rotation","0");const n=new FileReader;return n.onload=e=>{t.src=e.target.result},n.readAsDataURL(e),t}(e),o=g();t.appendChild(o),t.appendChild(n)}if(e.type&&e.type.match("application/pdf")){const n=await async function(e){const t=document.createElement("div");t.classList.add("solution__pdf-renderer");const n=document.createElement("canvas");n.id="solution__pdf-canvas",t.appendChild(n);const o=n.getContext("2d"),a=await pdfjsLib.getDocument(URL.createObjectURL(e)).promise;return i=a,s=1,l=a.numPages,d=0,c=1,await f(o),t}(e),o=g();t.appendChild(o),t.appendChild(n)}document.body.appendChild(t),t.addEventListener("click",(e=>{!function(e,t){e.target===t&&t.remove()}(e,t)}))}(e)})),t}(e),_=function(e,t){const n=document.createElement("button");n.className="solution__btn";const o=document.createElement("i");return o.className="fas fa-trash",o.title="Remove File",n.appendChild(o),n.addEventListener("click",(n=>{n.preventDefault(),n.stopPropagation(),r=r.filter((t=>t.name!==e.name));const o=new DataTransfer;r.forEach((e=>o.items.add(e))),t.target.files=o.files;const a=n.target.closest(".solution__sortable-container");a?.parentElement?.removeChild(a)})),n}(e,t),y=document.createElement("div");return y.classList.add("solution__actions-group"),y.appendChild(p),y.appendChild(_),n.appendChild(o),n.appendChild(m),n.appendChild(y),n}async function f(e){const t=await i.getPage(s),n=t.getViewport({scale:c,rotation:d}),o=e.canvas;o.width=n.width,o.height=n.height;const a={canvasContext:e,viewport:n};await t.render(a).promise;const r=document.getElementById("solution__page-indicator");r&&(r.textContent=`${s} / ${l}`)}function g(){const e=document.createElement("div");e.classList.add("solution__toolbar");const t=[{text:"Left",id:"solution__previous-btn",icon:"fa-solid fa-chevron-left"},{text:"Right",id:"solution__next-btn",icon:"fa-solid fa-chevron-right"},{text:"Zoom In",id:"solution__zoom-in-btn",icon:"fa-solid fa-magnifying-glass-plus"},{text:"Zoom Out",id:"solution__zoom-out-btn",icon:"fa-solid fa-magnifying-glass-minus"},{text:"Rotate Left",id:"solution__rotate-left-btn",icon:"fa-solid fa-arrow-rotate-left"},{text:"Rotate Right",id:"solution__rotate-right-btn",icon:"fa-solid fa-arrow-rotate-right"},{text:"Close",id:"close-modal-btn",icon:"fa-solid fa-xmark"}],n=_(t[0]);e.appendChild(n);const o=document.createElement("span");o.id="solution__page-indicator",o.textContent=`${s||1} / ${l||1}`,o.classList.add("solution__page-indicator"),e.appendChild(o);const a=_(t[1]);return e.appendChild(a),t.slice(2).forEach((t=>{const n=_(t);e.appendChild(n)})),e}function _(e){const t=document.createElement("button");t.id=e.id,t.classList.add("solution__toolbar-button");const n=document.createElement("i");return n.className=e.icon,t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.querySelector("#solution__pdf-canvas"),n=document.querySelector(".solution__interactive-image");"close-modal-btn"!==e?t?await async function(e){const t=document.getElementById("solution__pdf-canvas").getContext("2d");switch(e){case"solution__previous-btn":s>1&&(s--,await f(t));break;case"solution__next-btn":s<l&&(s++,await f(t));break;case"solution__zoom-in-btn":c+=.2,await f(t);break;case"solution__zoom-out-btn":c-=.2,await f(t);break;case"solution__rotate-left-btn":d-=90,await f(t);break;case"solution__rotate-right-btn":d+=90,await f(t);break;case"close-modal-btn":break;default:console.log(`Unknown action: ${e}`)}}(e):n&&function(e,t){let n=parseFloat(t.getAttribute("data-scale"))||1,o=parseInt(t.getAttribute("data-rotation"))||0;const a=t.naturalWidth,i=t.naturalHeight,s=t.parentElement,l=s.offsetWidth,d=s.offsetHeight;switch(e){case"solution__zoom-in-btn":n=Math.min(n+.1,5);break;case"solution__zoom-out-btn":n=Math.max(n-.1,.1);break;case"solution__rotate-left-btn":o=(o-90)%360;break;case"solution__rotate-right-btn":o=(o+90)%360}let c=a*n,r=i*n;90===Math.abs(o%180)&&([c,r]=[r,c],c=.8*l,r=c/a*i,r=.8*d,r=r/a*i),t.style.transform=`scale(${n}) rotate(${o}deg)`,t.style.width=`${c}px`,t.style.height=`${r}px`,t.style.objectFit="contain",t.setAttribute("data-scale",n),t.setAttribute("data-rotation",o)}(e,n):document.getElementById("solution__fullscreen-modal")?.remove()}(e.id)})),t}m.parentElement.appendChild(u),m.addEventListener("change",(async e=>{const t=document.getElementById(`${a}-file-list-container`),n=Array.from(e.target.files).filter((e=>!r.some((t=>t.name===e.name&&t.size===e.size))));r=[...r,...n];const o=new DataTransfer;r.forEach((e=>{o.items.add(e)})),e.target.files=o.files;for(const o of n){const n=await p(o,e);t.appendChild(n)}!function(e,t){e._sortableInstance&&e._sortableInstance.destroy(),e._sortableInstance=new Sortable(e,{animation:150,onEnd:()=>{const n=new DataTransfer;Array.from(e.children).map((e=>{const t=e.querySelector(`#${a}-file-list-container .solution__file-name`);return t?t.textContent:null})).forEach((e=>{const o=Array.from(t.target.files).find((t=>t.name===e));o&&n.items.add(o)})),t.target.files=n.files}})}(t,e)}))}));
  • merge-pdf/tags/1.0.0/trunk/includes/process-machine.php

    r3225930 r3260511  
    122122// Check status of processing task
    123123function cross_service_solutions_merge_pdf_check_status($request) {
     124    $nonce = $request->get_header('X-WP-Nonce');
     125    if (!$nonce || !wp_verify_nonce($nonce, 'merge_pdf_form_nonce_action')) {
     126        return new WP_Error('nonce_invalid', 'Nonce verification failed', array(
     127            'status' => 403,
     128            'message' => 'The provided nonce is invalid or expired. Please refresh and try again.'
     129        ));
     130    }
     131
    124132    $api_key = esc_attr(get_option('cross_service_solutions_api_key'));
    125133    $id = sanitize_text_field($request['id']);
  • merge-pdf/tags/1.0.0/trunk/languages/merge-pdf.pot

    r3250034 r3260511  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Merge PDF 1.0.0\n"
     5"Project-Id-Version: Merge PDF 1.0.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/merge-pdf\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  • merge-pdf/tags/1.0.0/trunk/merge-pdf.php

    r3232408 r3260511  
    55 * Requires at least: 6.6
    66 * Requires PHP:      7.2.24
    7  * Version:           1.0.0
     7 * Version:           1.0.1
    88 * Author:            Cross Service Solutions
    99 * License:           GPL-2.0-or-later
     
    104104function cross_service_solutions_merge_pdf_localize_script() {
    105105    // Localize the script registered by the viewScript in block.json
    106     wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettings', array(
     106    wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettingsMergePDF', array(
    107107        'root' => esc_url_raw(rest_url()),
    108108        'mergePDFNonce' => wp_create_nonce('merge_pdf_form_nonce_action'),
  • merge-pdf/tags/1.0.0/trunk/readme.txt

    r3250034 r3260511  
    55Requires at least: 5.0
    66Tested up to: 6.7
    7 Stable tag: 1.0.0
     7Stable tag: 1.0.1
    88Requires PHP: 7.2.24
    99License: GPLv2 or later
     
    9494== Changelog ==
    9595
     96= 1.0.1 =
     97* Implemented nonce validation for polling status GET request.
     98* Ensuring the global object in JavaScript is unique.
     99
    96100= 1.0.0 =
    97101* Initial release of the Merge PDF plugin.
  • merge-pdf/tags/1.0.0/trunk/src/block.json

    r3225930 r3260511  
    33    "apiVersion": 3,
    44    "name": "create-block/merge-pdf",
    5     "version": "1.0.0",
     5    "version": "1.0.1",
    66    "title": "Merge Pdf",
    77    "category": "widgets",
  • merge-pdf/tags/1.0.0/trunk/src/view.js

    r3225930 r3260511  
    2828            formData.append(`file[${index}]`, file);
    2929        });
    30         formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce);
    31 
    32         fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, {
     30        formData.append('mergePDFFormNonce', wpApiSettingsMergePDF.mergePDFNonce);
     31
     32        fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`, {
    3333            method: 'POST',
    3434            body: formData,
     
    8888    }
    8989
    90     pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc;
     90    pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettingsMergePDF.pdfWorkerSrc;
    9191    const containerId = form.getAttribute('id');
    9292    let currentPdf, currentPage, totalPages, rotation, scale;
     
    569569
    570570    function checkStatus() {
    571         fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`)
     571        fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${id}`, {
     572            method: 'GET',
     573            headers: {
     574                'X-WP-Nonce': wpApiSettingsMergePDF.mergePDFNonce,
     575                'Content-Type': 'application/json'
     576            }
     577        })
    572578            .then((response) => response.json())
    573579            .then((data) => {
  • merge-pdf/trunk/build/block.json

    r3225930 r3260511  
    33  "apiVersion": 3,
    44  "name": "create-block/merge-pdf",
    5   "version": "1.0.0",
     5  "version": "1.0.1",
    66  "title": "Merge Pdf",
    77  "category": "widgets",
  • merge-pdf/trunk/build/index-rtl.css

    r3232408 r3260511  
    1 /*!****************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***!
    3   \****************************************************************************************************************************************************************************************************************************************************/
    4 .solution__merge-pdf {
    5   margin: 1rem;
    6 }
     1.solution__merge-pdf{margin:1rem}
  • merge-pdf/trunk/build/index.asset.php

    r3232408 r3260511  
    1 <?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '971621e220fab65d6c23');
     1<?php return array('dependencies' => array('react-jsx-runtime', 'wp-blocks', 'wp-element', 'wp-i18n'), 'version' => '95952ffc9d1cf6e0a1db');
  • merge-pdf/trunk/build/index.css

    r3232408 r3260511  
    1 /*!****************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/editor.scss ***!
    3   \****************************************************************************************************************************************************************************************************************************************************/
    4 .solution__merge-pdf {
    5   margin: 1rem;
    6 }
    7 
    8 /*# sourceMappingURL=index.css.map*/
     1.solution__merge-pdf{margin:1rem}
  • merge-pdf/trunk/build/index.js

    r3232408 r3260511  
    1 /******/ (() => { // webpackBootstrap
    2 /******/    "use strict";
    3 /******/    var __webpack_modules__ = ({
    4 
    5 /***/ "./src/edit.js":
    6 /*!*********************!*\
    7   !*** ./src/edit.js ***!
    8   \*********************/
    9 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    10 
    11 __webpack_require__.r(__webpack_exports__);
    12 /* harmony export */ __webpack_require__.d(__webpack_exports__, {
    13 /* harmony export */   "default": () => (/* binding */ Edit),
    14 /* harmony export */   mergePDFIcon: () => (/* binding */ mergePDFIcon)
    15 /* harmony export */ });
    16 /* harmony import */ var _editor_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./editor.scss */ "./src/editor.scss");
    17 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/element */ "@wordpress/element");
    18 /* harmony import */ var _wordpress_element__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_element__WEBPACK_IMPORTED_MODULE_1__);
    19 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n");
    20 /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__);
    21 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ "react/jsx-runtime");
    22 /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__);
    23 /**
    24  * Lets webpack process CSS, SASS or SCSS files referenced in JavaScript files.
    25  * Those files can contain any CSS code that gets applied to the editor.
    26  *
    27  * @see https://www.npmjs.com/package/@wordpress/scripts#using-css
    28  */
    29 
    30 
    31 
    32 
    33 function Edit() {
    34   return (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('div', null, /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    35     className: "solution__merge-pdf",
    36     children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    37       className: "solution__container__wrapper",
    38       children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", {
    39         className: "solution__container",
    40         children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div", {
    41           className: "solution__header",
    42           children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Merge PDF', 'merge-pdf')
    43         }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div", {
    44           className: "solution__form",
    45           children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("label", {
    46             htmlFor: "file",
    47             className: "solution__label",
    48             children: [/*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span", {
    49               children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('File:', 'merge-pdf')
    50             }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input", {
    51               type: "file",
    52               id: "file",
    53               name: "file",
    54               required: true,
    55               className: "solution__file-input",
    56               disabled: true
    57             })]
    58           }), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("button", {
    59             disabled: true,
    60             className: "solution__btn",
    61             children: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Submit', 'merge-pdf')
    62           })]
    63         })]
    64       })
    65     })
    66   }));
    67 }
    68 const mergePDFIcon = (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('svg', {
    69   width: 32,
    70   height: 33,
    71   viewBox: '0 0 32 33',
    72   fill: 'none',
    73   xmlns: 'http://www.w3.org/2000/svg'
    74 }, (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('ellipse', {
    75   cx: '15.8843',
    76   cy: '16.5014',
    77   rx: '13.2358',
    78   ry: '13.3335',
    79   fill: '#E3FAFC'
    80 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    81   d: 'M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282',
    82   stroke: '#0C8599',
    83   'stroke-width': '1.32791',
    84   'stroke-linecap': 'round',
    85   'stroke-linejoin': 'round'
    86 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    87   d: 'M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282',
    88   stroke: '#0C8599',
    89   'stroke-width': '1.32791',
    90   'stroke-linecap': 'round',
    91   'stroke-linejoin': 'round'
    92 }), (0,_wordpress_element__WEBPACK_IMPORTED_MODULE_1__.createElement)('path', {
    93   d: 'M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z',
    94   stroke: '#0C8599',
    95   'stroke-width': '1.32791',
    96   'stroke-linecap': 'round',
    97   'stroke-linejoin': 'round',
    98   'fill-rule': 'evenodd',
    99   'clip-rule': 'evenodd'
    100 }));
    101 
    102 /***/ }),
    103 
    104 /***/ "./src/index.js":
    105 /*!**********************!*\
    106   !*** ./src/index.js ***!
    107   \**********************/
    108 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    109 
    110 __webpack_require__.r(__webpack_exports__);
    111 /* harmony import */ var _style_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./style.scss */ "./src/style.scss");
    112 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/blocks */ "@wordpress/blocks");
    113 /* harmony import */ var _wordpress_blocks__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__);
    114 /* harmony import */ var _edit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./edit */ "./src/edit.js");
    115 /* harmony import */ var _block_json__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./block.json */ "./src/block.json");
    116 
    117 
    118 
    119 
    120 (0,_wordpress_blocks__WEBPACK_IMPORTED_MODULE_1__.registerBlockType)(_block_json__WEBPACK_IMPORTED_MODULE_3__, {
    121   icon: _edit__WEBPACK_IMPORTED_MODULE_2__.mergePDFIcon,
    122   edit: _edit__WEBPACK_IMPORTED_MODULE_2__["default"]
    123 });
    124 
    125 /***/ }),
    126 
    127 /***/ "./src/editor.scss":
    128 /*!*************************!*\
    129   !*** ./src/editor.scss ***!
    130   \*************************/
    131 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    132 
    133 __webpack_require__.r(__webpack_exports__);
    134 // extracted by mini-css-extract-plugin
    135 
    136 
    137 /***/ }),
    138 
    139 /***/ "./src/style.scss":
    140 /*!************************!*\
    141   !*** ./src/style.scss ***!
    142   \************************/
    143 /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
    144 
    145 __webpack_require__.r(__webpack_exports__);
    146 // extracted by mini-css-extract-plugin
    147 
    148 
    149 /***/ }),
    150 
    151 /***/ "react/jsx-runtime":
    152 /*!**********************************!*\
    153   !*** external "ReactJSXRuntime" ***!
    154   \**********************************/
    155 /***/ ((module) => {
    156 
    157 module.exports = window["ReactJSXRuntime"];
    158 
    159 /***/ }),
    160 
    161 /***/ "@wordpress/blocks":
    162 /*!********************************!*\
    163   !*** external ["wp","blocks"] ***!
    164   \********************************/
    165 /***/ ((module) => {
    166 
    167 module.exports = window["wp"]["blocks"];
    168 
    169 /***/ }),
    170 
    171 /***/ "@wordpress/element":
    172 /*!*********************************!*\
    173   !*** external ["wp","element"] ***!
    174   \*********************************/
    175 /***/ ((module) => {
    176 
    177 module.exports = window["wp"]["element"];
    178 
    179 /***/ }),
    180 
    181 /***/ "@wordpress/i18n":
    182 /*!******************************!*\
    183   !*** external ["wp","i18n"] ***!
    184   \******************************/
    185 /***/ ((module) => {
    186 
    187 module.exports = window["wp"]["i18n"];
    188 
    189 /***/ }),
    190 
    191 /***/ "./src/block.json":
    192 /*!************************!*\
    193   !*** ./src/block.json ***!
    194   \************************/
    195 /***/ ((module) => {
    196 
    197 module.exports = /*#__PURE__*/JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.0","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');
    198 
    199 /***/ })
    200 
    201 /******/    });
    202 /************************************************************************/
    203 /******/    // The module cache
    204 /******/    var __webpack_module_cache__ = {};
    205 /******/   
    206 /******/    // The require function
    207 /******/    function __webpack_require__(moduleId) {
    208 /******/        // Check if module is in cache
    209 /******/        var cachedModule = __webpack_module_cache__[moduleId];
    210 /******/        if (cachedModule !== undefined) {
    211 /******/            return cachedModule.exports;
    212 /******/        }
    213 /******/        // Create a new module (and put it into the cache)
    214 /******/        var module = __webpack_module_cache__[moduleId] = {
    215 /******/            // no module.id needed
    216 /******/            // no module.loaded needed
    217 /******/            exports: {}
    218 /******/        };
    219 /******/   
    220 /******/        // Execute the module function
    221 /******/        __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
    222 /******/   
    223 /******/        // Return the exports of the module
    224 /******/        return module.exports;
    225 /******/    }
    226 /******/   
    227 /******/    // expose the modules object (__webpack_modules__)
    228 /******/    __webpack_require__.m = __webpack_modules__;
    229 /******/   
    230 /************************************************************************/
    231 /******/    /* webpack/runtime/chunk loaded */
    232 /******/    (() => {
    233 /******/        var deferred = [];
    234 /******/        __webpack_require__.O = (result, chunkIds, fn, priority) => {
    235 /******/            if(chunkIds) {
    236 /******/                priority = priority || 0;
    237 /******/                for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
    238 /******/                deferred[i] = [chunkIds, fn, priority];
    239 /******/                return;
    240 /******/            }
    241 /******/            var notFulfilled = Infinity;
    242 /******/            for (var i = 0; i < deferred.length; i++) {
    243 /******/                var chunkIds = deferred[i][0];
    244 /******/                var fn = deferred[i][1];
    245 /******/                var priority = deferred[i][2];
    246 /******/                var fulfilled = true;
    247 /******/                for (var j = 0; j < chunkIds.length; j++) {
    248 /******/                    if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
    249 /******/                        chunkIds.splice(j--, 1);
    250 /******/                    } else {
    251 /******/                        fulfilled = false;
    252 /******/                        if(priority < notFulfilled) notFulfilled = priority;
    253 /******/                    }
    254 /******/                }
    255 /******/                if(fulfilled) {
    256 /******/                    deferred.splice(i--, 1)
    257 /******/                    var r = fn();
    258 /******/                    if (r !== undefined) result = r;
    259 /******/                }
    260 /******/            }
    261 /******/            return result;
    262 /******/        };
    263 /******/    })();
    264 /******/   
    265 /******/    /* webpack/runtime/compat get default export */
    266 /******/    (() => {
    267 /******/        // getDefaultExport function for compatibility with non-harmony modules
    268 /******/        __webpack_require__.n = (module) => {
    269 /******/            var getter = module && module.__esModule ?
    270 /******/                () => (module['default']) :
    271 /******/                () => (module);
    272 /******/            __webpack_require__.d(getter, { a: getter });
    273 /******/            return getter;
    274 /******/        };
    275 /******/    })();
    276 /******/   
    277 /******/    /* webpack/runtime/define property getters */
    278 /******/    (() => {
    279 /******/        // define getter functions for harmony exports
    280 /******/        __webpack_require__.d = (exports, definition) => {
    281 /******/            for(var key in definition) {
    282 /******/                if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
    283 /******/                    Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
    284 /******/                }
    285 /******/            }
    286 /******/        };
    287 /******/    })();
    288 /******/   
    289 /******/    /* webpack/runtime/hasOwnProperty shorthand */
    290 /******/    (() => {
    291 /******/        __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
    292 /******/    })();
    293 /******/   
    294 /******/    /* webpack/runtime/make namespace object */
    295 /******/    (() => {
    296 /******/        // define __esModule on exports
    297 /******/        __webpack_require__.r = (exports) => {
    298 /******/            if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
    299 /******/                Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
    300 /******/            }
    301 /******/            Object.defineProperty(exports, '__esModule', { value: true });
    302 /******/        };
    303 /******/    })();
    304 /******/   
    305 /******/    /* webpack/runtime/jsonp chunk loading */
    306 /******/    (() => {
    307 /******/        // no baseURI
    308 /******/       
    309 /******/        // object to store loaded and loading chunks
    310 /******/        // undefined = chunk not loaded, null = chunk preloaded/prefetched
    311 /******/        // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
    312 /******/        var installedChunks = {
    313 /******/            "index": 0,
    314 /******/            "./style-index": 0
    315 /******/        };
    316 /******/       
    317 /******/        // no chunk on demand loading
    318 /******/       
    319 /******/        // no prefetching
    320 /******/       
    321 /******/        // no preloaded
    322 /******/       
    323 /******/        // no HMR
    324 /******/       
    325 /******/        // no HMR manifest
    326 /******/       
    327 /******/        __webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
    328 /******/       
    329 /******/        // install a JSONP callback for chunk loading
    330 /******/        var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
    331 /******/            var chunkIds = data[0];
    332 /******/            var moreModules = data[1];
    333 /******/            var runtime = data[2];
    334 /******/            // add "moreModules" to the modules object,
    335 /******/            // then flag all "chunkIds" as loaded and fire callback
    336 /******/            var moduleId, chunkId, i = 0;
    337 /******/            if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
    338 /******/                for(moduleId in moreModules) {
    339 /******/                    if(__webpack_require__.o(moreModules, moduleId)) {
    340 /******/                        __webpack_require__.m[moduleId] = moreModules[moduleId];
    341 /******/                    }
    342 /******/                }
    343 /******/                if(runtime) var result = runtime(__webpack_require__);
    344 /******/            }
    345 /******/            if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
    346 /******/            for(;i < chunkIds.length; i++) {
    347 /******/                chunkId = chunkIds[i];
    348 /******/                if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
    349 /******/                    installedChunks[chunkId][0]();
    350 /******/                }
    351 /******/                installedChunks[chunkId] = 0;
    352 /******/            }
    353 /******/            return __webpack_require__.O(result);
    354 /******/        }
    355 /******/       
    356 /******/        var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
    357 /******/        chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
    358 /******/        chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
    359 /******/    })();
    360 /******/   
    361 /************************************************************************/
    362 /******/   
    363 /******/    // startup
    364 /******/    // Load entry module and return exports
    365 /******/    // This entry module depends on other loaded chunks and execution need to be delayed
    366 /******/    var __webpack_exports__ = __webpack_require__.O(undefined, ["./style-index"], () => (__webpack_require__("./src/index.js")))
    367 /******/    __webpack_exports__ = __webpack_require__.O(__webpack_exports__);
    368 /******/   
    369 /******/ })()
    370 ;
    371 //# sourceMappingURL=index.js.map
     1(()=>{"use strict";var e,i={354:()=>{const e=window.wp.blocks,i=window.wp.element,r=window.wp.i18n,n=window.ReactJSXRuntime,t=(0,i.createElement)("svg",{width:32,height:33,viewBox:"0 0 32 33",fill:"none",xmlns:"http://www.w3.org/2000/svg"},(0,i.createElement)("ellipse",{cx:"15.8843",cy:"16.5014",rx:"13.2358",ry:"13.3335",fill:"#E3FAFC"}),(0,i.createElement)("path",{d:"M14.4364 11.3L12.9609 10.5623V22.3659L14.4364 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M10.0106 11.3L8.53516 10.5623V22.3659L10.0106 21.6282",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round"}),(0,i.createElement)("path",{d:"M23.2886 20.1527L17.3867 22.3659V10.5623L23.2886 12.7754V20.1527Z",stroke:"#0C8599","stroke-width":"1.32791","stroke-linecap":"round","stroke-linejoin":"round","fill-rule":"evenodd","clip-rule":"evenodd"})),l=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"create-block/merge-pdf","version":"1.0.1","title":"Merge Pdf","category":"widgets","description":"Seamlessly combine multiple PDFs into a single file for easy sharing, organizing, and storage, all while preserving original formatting and quality.","example":{},"supports":{"html":false},"textdomain":"merge-pdf","editorScript":"file:./index.js","editorStyle":"file:./index.css","style":"file:./style-index.css","render":"file:./render.php","viewScript":"file:./view.js"}');(0,e.registerBlockType)(l,{icon:t,edit:function(){return(0,i.createElement)("div",null,(0,n.jsx)("div",{className:"solution__merge-pdf",children:(0,n.jsx)("div",{className:"solution__container__wrapper",children:(0,n.jsxs)("div",{className:"solution__container",children:[(0,n.jsx)("div",{className:"solution__header",children:(0,r.__)("Merge PDF","merge-pdf")}),(0,n.jsxs)("div",{className:"solution__form",children:[(0,n.jsxs)("label",{htmlFor:"file",className:"solution__label",children:[(0,n.jsx)("span",{children:(0,r.__)("File:","merge-pdf")}),(0,n.jsx)("input",{type:"file",id:"file",name:"file",required:!0,className:"solution__file-input",disabled:!0})]}),(0,n.jsx)("button",{disabled:!0,className:"solution__btn",children:(0,r.__)("Submit","merge-pdf")})]})]})})}))}})}},r={};function n(e){var t=r[e];if(void 0!==t)return t.exports;var l=r[e]={exports:{}};return i[e](l,l.exports,n),l.exports}n.m=i,e=[],n.O=(i,r,t,l)=>{if(!r){var s=1/0;for(c=0;c<e.length;c++){r=e[c][0],t=e[c][1],l=e[c][2];for(var o=!0,a=0;a<r.length;a++)(!1&l||s>=l)&&Object.keys(n.O).every((e=>n.O[e](r[a])))?r.splice(a--,1):(o=!1,l<s&&(s=l));if(o){e.splice(c--,1);var d=t();void 0!==d&&(i=d)}}return i}l=l||0;for(var c=e.length;c>0&&e[c-1][2]>l;c--)e[c]=e[c-1];e[c]=[r,t,l]},n.o=(e,i)=>Object.prototype.hasOwnProperty.call(e,i),(()=>{var e={57:0,350:0};n.O.j=i=>0===e[i];var i=(i,r)=>{var t,l,s=r[0],o=r[1],a=r[2],d=0;if(s.some((i=>0!==e[i]))){for(t in o)n.o(o,t)&&(n.m[t]=o[t]);if(a)var c=a(n)}for(i&&i(r);d<s.length;d++)l=s[d],n.o(e,l)&&e[l]&&e[l][0](),e[l]=0;return n.O(c)},r=self.webpackChunk=self.webpackChunk||[];r.forEach(i.bind(null,0)),r.push=i.bind(null,r.push.bind(r))})();var t=n.O(void 0,[350],(()=>n(354)));t=n.O(t)})();
  • merge-pdf/trunk/build/style-index-rtl.css

    r3232408 r3260511  
    1 /*!***************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***!
    3   \***************************************************************************************************************************************************************************************************************************************************/
    4 :root {
    5   --solution-merge-pdf-primary-color: #4f46e5;
    6   --solution-merge-pdf-secondary-color: #eef2ff;
    7   --solution-merge-pdf-tertiary-color: #000;
    8   --solution-merge-pdf-background-color: #fff;
    9   --solution-merge-pdf-border-color: #e5e7eb;
    10   --solution-merge-pdf-input-border-color: #d1d5db;
    11   --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2);
    12   --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05);
    13   --solution-merge-pdf-dropdown-bg-color: #fff;
    14   --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1);
    15   --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1);
    16 }
    17 
    18 .solution__merge-pdf .solution__container-wrapper {
    19   padding: 1rem;
    20   display: flex;
    21   flex-direction: column;
    22   gap: 1rem;
    23   color: var(--solution-merge-pdf-tertiary-color);
    24 }
    25 .solution__merge-pdf .solution__container {
    26   box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px;
    27   border: 1px solid var(--solution-merge-pdf-border-color);
    28   background-color: var(--solution-merge-pdf-background-color);
    29   border-radius: 0.75rem;
    30   padding: 1.5rem 1.5rem 0.5rem;
    31   position: relative;
    32   display: flex;
    33   flex-direction: column;
    34   min-height: 180px;
    35   gap: 1rem;
    36 }
    37 .solution__merge-pdf .solution__header {
    38   font-size: 1.25rem;
    39   letter-spacing: 0.05em;
    40   font-weight: 500;
    41 }
    42 .solution__merge-pdf .solution__content {
    43   flex-grow: 1;
    44   display: grid;
    45 }
    46 .solution__merge-pdf .solution__form {
    47   display: flex;
    48   flex-direction: column;
    49   gap: 1rem;
    50 }
    51 .solution__merge-pdf .solution__label {
    52   white-space: nowrap;
    53   width: 100%;
    54   font-size: 0.75rem;
    55   font-weight: 500;
    56   display: flex;
    57   flex-direction: column;
    58   gap: 0.3rem;
    59 }
    60 .solution__merge-pdf .solution__hint {
    61   font-size: 0.75rem;
    62   font-weight: 500;
    63   color: var(--solution-merge-pdf-primary-color);
    64   white-space: wrap;
    65 }
    66 .solution__merge-pdf .solution__input {
    67   border: 1px solid var(--solution-merge-pdf-input-border-color);
    68   border-radius: 0.375rem;
    69   padding: 0.25rem 0.5rem;
    70   font-size: 1rem;
    71   line-height: 32px;
    72   outline: 1px solid transparent;
    73   outline-offset: -1px;
    74 }
    75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button {
    76   margin-left: 1rem;
    77   padding: 0.5rem 1rem;
    78   border-radius: 0.75rem;
    79   border: none;
    80   background-color: var(--solution-merge-pdf-secondary-color);
    81   color: var(--solution-merge-pdf-primary-color);
    82   font-weight: 500;
    83   cursor: pointer;
    84 }
    85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button {
    86   background-color: var(--solution-merge-pdf-secondary-color);
    87 }
    88 .solution__merge-pdf .solution__btn {
    89   display: inline-flex;
    90   align-items: center; /* Ensures the icon and text are aligned */
    91   justify-content: center;
    92   gap: 0.5rem; /* Adds space between the icon and the text */
    93   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);
    94   background: var(--solution-merge-pdf-secondary-color);
    95   color: var(--solution-merge-pdf-primary-color);
    96   padding: 0.5rem 1rem;
    97   border-radius: 1rem;
    98   font-weight: 600;
    99   cursor: pointer;
    100   border: none;
    101 }
    102 .solution__merge-pdf .solution__btn:hover {
    103   filter: brightness(0.98);
    104 }
    105 .solution__merge-pdf .solution__btn .dashicons {
    106   font-size: 1.2rem; /* Adjust the size of the icon */
    107   vertical-align: middle; /* Aligns the icon vertically with the text */
    108 }
    109 .solution__merge-pdf .solution__dropdown-wrapper {
    110   position: relative;
    111 }
    112 .solution__merge-pdf .solution__dropdown {
    113   position: relative;
    114   overflow: visible;
    115   background-color: transparent;
    116   box-shadow: none;
    117   width: 100%;
    118   border-radius: 0.75rem;
    119   max-height: 15rem;
    120   z-index: 10;
    121 }
    122 .solution__merge-pdf .solution__dropdown--hidden {
    123   display: none;
    124 }
    125 .solution__merge-pdf .solution__loading-section {
    126   display: none;
    127   position: absolute;
    128   top: 50%;
    129   right: 50%;
    130   transform: translate(50%, -50%);
    131 }
    132 .solution__merge-pdf .solution__loading-container {
    133   display: flex;
    134   justify-content: center;
    135   align-items: center;
    136   gap: 1rem;
    137   transition: 2s ease;
    138 }
    139 .solution__merge-pdf .solution__download-section {
    140   display: flex;
    141   justify-content: center;
    142   align-items: center;
    143   flex-direction: column;
    144   gap: 2rem;
    145   height: 100%;
    146 }
    147 .solution__merge-pdf .solution__download-section:last-child {
    148   margin-top: auto;
    149 }
    150 .solution__merge-pdf .solution__download-container {
    151   display: flex;
    152   flex-direction: column;
    153   flex-grow: 1;
    154   justify-content: center;
    155   align-items: center;
    156   gap: 1rem;
    157 }
    158 .solution__merge-pdf .solution__download-file-container {
    159   display: flex;
    160   flex-wrap: wrap;
    161   justify-content: flex-start;
    162   gap: 1rem;
    163 }
    164 .solution__merge-pdf .solution__download-file-name {
    165   white-space: nowrap;
    166   overflow: hidden;
    167   text-overflow: ellipsis;
    168   max-width: 12rem;
    169 }
    170 .solution__merge-pdf .solution__title-text {
    171   font-weight: 600;
    172 }
    173 .solution__merge-pdf .solution__text {
    174   font-weight: 500;
    175 }
    176 .solution__merge-pdf .solution__provided-text {
    177   display: flex;
    178   justify-content: center;
    179   font-size: 0.7rem;
    180   margin-top: 0.5rem;
    181 }
    182 .solution__merge-pdf .solution__error-section {
    183   display: flex;
    184   flex-direction: column;
    185   justify-self: center;
    186   align-self: center;
    187 }
    188 .solution__merge-pdf .solution__dot {
    189   background: var(--solution-merge-pdf-tertiary-color);
    190   height: 0.65em;
    191   width: 0.65em;
    192   border-radius: 50%;
    193   animation: move 0.6s ease infinite;
    194 }
    195 .solution__merge-pdf .solution__link {
    196   color: var(--solution-merge-pdf-tertiary-color);
    197 }
    198 .solution__merge-pdf .solution__select {
    199   display: flex;
    200   flex-direction: column;
    201   position: relative;
    202   gap: 0.3rem;
    203   /* Placeholder color */
    204   /* Style for selected option */
    205 }
    206 .solution__merge-pdf .solution__select .solution__select-input {
    207   height: 42px;
    208   padding: 0 0.5rem;
    209   border-radius: 0.375rem;
    210   border: 1px solid var(--solution-merge-pdf-input-border-color);
    211   color: var(--solution-merge-pdf-tertiary-color);
    212   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color);
    213   -webkit-appearance: none;
    214      -moz-appearance: none;
    215           appearance: none;
    216   cursor: pointer;
    217   /* Arrow styling */
    218   background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");
    219   background-repeat: no-repeat;
    220   background-position: left 1rem center;
    221   background-size: 1rem;
    222 }
    223 .solution__merge-pdf .solution__select .solution__select-input:focus {
    224   outline: 1px solid var(--solution-merge-pdf-primary-color);
    225   box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color);
    226 }
    227 .solution__merge-pdf .solution__select .solution__select-input option {
    228   padding: 1rem;
    229 }
    230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] {
    231   color: var(--solution-merge-pdf-input-border-color);
    232 }
    233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid {
    234   color: var(--solution-merge-pdf-input-border-color);
    235 }
    236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) {
    237   color: var(--solution-merge-pdf-tertiary-color);
    238 }
    239 .solution__merge-pdf .solution_dropdown button {
    240   width: 100%;
    241 }
    242 .solution__merge-pdf .solution__dropdown-content {
    243   display: none;
    244   position: absolute;
    245   flex-direction: column;
    246   min-width: 100%;
    247   max-height: 150px;
    248   padding: 0.5rem 0;
    249   overflow: auto;
    250   background-color: #fff;
    251   box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
    252   z-index: 10;
    253   margin-top: 3px;
    254   border-radius: 10px;
    255   top: 100%;
    256   right: 50%;
    257   transform: translate(50%, 0);
    258 }
    259 .solution__merge-pdf .solution__dropdown-content label {
    260   display: block;
    261   margin-top: 10px;
    262   padding: 0 1rem;
    263 }
    264 .solution__merge-pdf .solution__dropdown-button {
    265   min-width: 100%;
    266 }
    267 .solution__merge-pdf .solution__dropdown-content:hover,
    268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content {
    269   display: flex;
    270 }
    271 .solution__merge-pdf .solution__group {
    272   display: flex;
    273   flex-wrap: wrap;
    274   gap: 10px;
    275 }
    276 .solution__merge-pdf .solution__group > div,
    277 .solution__merge-pdf .solution__group > label {
    278   flex: 1;
    279 }
    280 .solution__merge-pdf .solution__sortable-container {
    281   cursor: move;
    282   display: flex;
    283   padding: 1rem;
    284   margin: 0.5rem 0;
    285   border: 1px dashed var(--solution-merge-pdf-primary-color);
    286   border-radius: 0.375rem;
    287   align-items: center;
    288   gap: 2rem;
    289 }
    290 .solution__merge-pdf .solution__preview-container {
    291   position: relative;
    292   padding: 1px 0;
    293   background-color: #E2EFF9;
    294   border-radius: 0.25rem;
    295   min-height: 60px;
    296   min-width: 60px;
    297   max-width: 60px;
    298   max-height: 60px;
    299   display: flex;
    300   align-items: center;
    301   justify-content: center;
    302 }
    303 .solution__merge-pdf .solution__preview-image {
    304   width: 60px;
    305   height: 60px;
    306   -o-object-fit: contain;
    307      object-fit: contain;
    308 }
    309 .solution__merge-pdf .solution__file-info {
    310   display: flex;
    311   flex-direction: column;
    312   gap: 0.5rem;
    313 }
    314 .solution__merge-pdf .solution__actions-group {
    315   display: flex;
    316   gap: 1rem;
    317   margin-right: auto;
    318 }
    319 @media (max-width: 500px) {
    320   .solution__merge-pdf .solution__sortable-container {
    321     flex-wrap: wrap; /* Allow items to wrap to the next line */
    322     justify-content: center; /* Center item content */
    323     gap: 1rem;
    324   }
    325   .solution__merge-pdf .solution__sortable-container > :nth-child(1),
    326   .solution__merge-pdf .solution__sortable-container > :nth-child(2) {
    327     flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */
    328   }
    329   .solution__merge-pdf .solution__sortable-container > :nth-child(3) {
    330     flex: 1 1 100%; /* Full width for the third item */
    331     justify-content: center; /* Center item content */
    332   }
    333   .solution__merge-pdf .solution__actions-group {
    334     margin-right: 0;
    335   }
    336 }
    337 
    338 .solution__modal {
    339   display: none; /* Initially hidden */
    340   position: fixed;
    341   top: 0;
    342   right: 0;
    343   width: 100%; /* Full screen width */
    344   height: 100%; /* Full screen height */
    345   background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */
    346   justify-content: center; /* Center content horizontally */
    347   align-items: center; /* Center content vertically */
    348   z-index: 1000; /* Ensures modal appears on top */
    349 }
    350 
    351 /* Modal content styling */
    352 .solution__toolbar {
    353   display: flex;
    354   position: absolute;
    355   justify-content: center;
    356   align-items: center;
    357   gap: 0.1rem;
    358   top: 0;
    359   right: 50%;
    360   transform: translateX(50%);
    361   background-color: rgba(240, 240, 240, 0.8);
    362   border-bottom-right-radius: 0.375rem;
    363   border-bottom-left-radius: 0.375rem;
    364   z-index: 1000;
    365 }
    366 
    367 .solution__toolbar-button {
    368   padding: 10px 15px;
    369   cursor: pointer;
    370   color: black;
    371   border: none;
    372   border-radius: 4px;
    373   transition: background-color 0.3s;
    374   background-color: transparent;
    375 }
    376 
    377 .solution__toolbar-button:hover {
    378   color: white;
    379 }
    380 
    381 .solution__pdf-renderer {
    382   display: flex;
    383   justify-content: center;
    384   align-items: center;
    385   overflow: auto;
    386   background-color: #f4f4f4;
    387   box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    388   border: 1px solid #ddd;
    389   max-width: 80%;
    390   max-height: 80%;
    391 }
    392 
    393 .solution__page-indicator {
    394   color: black;
    395   font-size: 16px;
    396   align-self: center;
    397   text-align: center;
    398   white-space: nowrap;
    399 }
    400 
    401 .solution__interactive-image {
    402   max-width: 80%;
    403   max-height: 80%;
    404   fit-object: contain;
    405 }
    406 
    407 @keyframes rotation {
    408   0% {
    409     transform: rotate(0deg);
    410   }
    411   100% {
    412     transform: rotate(-360deg);
    413   }
    414 }
    415 @keyframes move {
    416   0% {
    417     transform: translateX(-50%);
    418   }
    419   50% {
    420     transform: translateX(50%);
    421   }
    422   100% {
    423     transform: translateX(-50%);
    424   }
    425 }
     1:root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-left:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;right:50%;position:absolute;top:50%;transform:translate(50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:left 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;right:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-right:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-right:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;right:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-right-radius:.375rem;border-bottom-left-radius:.375rem;display:flex;gap:.1rem;right:50%;position:absolute;transform:translateX(50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes move{0%{transform:translateX(-50%)}50%{transform:translateX(50%)}to{transform:translateX(-50%)}}
  • merge-pdf/trunk/build/style-index.css

    r3232408 r3260511  
    1 /*!***************************************************************************************************************************************************************************************************************************************************!*\
    2   !*** css ../../node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!../../node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!../../node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./src/style.scss ***!
    3   \***************************************************************************************************************************************************************************************************************************************************/
    4 :root {
    5   --solution-merge-pdf-primary-color: #4f46e5;
    6   --solution-merge-pdf-secondary-color: #eef2ff;
    7   --solution-merge-pdf-tertiary-color: #000;
    8   --solution-merge-pdf-background-color: #fff;
    9   --solution-merge-pdf-border-color: #e5e7eb;
    10   --solution-merge-pdf-input-border-color: #d1d5db;
    11   --solution-merge-pdf-shadow-color: rgba(149, 157, 165, 0.2);
    12   --solution-merge-pdf-btn-shadow-color: rgba(0, 0, 0, 0.05);
    13   --solution-merge-pdf-dropdown-bg-color: #fff;
    14   --solution-merge-pdf-dropdown-shadow-color-1: rgba(0, 0, 0, 0.1);
    15   --solution-merge-pdf-dropdown-shadow-color-2: rgba(0, 0, 0, 0.1);
    16 }
    17 
    18 .solution__merge-pdf .solution__container-wrapper {
    19   padding: 1rem;
    20   display: flex;
    21   flex-direction: column;
    22   gap: 1rem;
    23   color: var(--solution-merge-pdf-tertiary-color);
    24 }
    25 .solution__merge-pdf .solution__container {
    26   box-shadow: var(--solution-merge-pdf-shadow-color) 0 8px 24px;
    27   border: 1px solid var(--solution-merge-pdf-border-color);
    28   background-color: var(--solution-merge-pdf-background-color);
    29   border-radius: 0.75rem;
    30   padding: 1.5rem 1.5rem 0.5rem;
    31   position: relative;
    32   display: flex;
    33   flex-direction: column;
    34   min-height: 180px;
    35   gap: 1rem;
    36 }
    37 .solution__merge-pdf .solution__header {
    38   font-size: 1.25rem;
    39   letter-spacing: 0.05em;
    40   font-weight: 500;
    41 }
    42 .solution__merge-pdf .solution__content {
    43   flex-grow: 1;
    44   display: grid;
    45 }
    46 .solution__merge-pdf .solution__form {
    47   display: flex;
    48   flex-direction: column;
    49   gap: 1rem;
    50 }
    51 .solution__merge-pdf .solution__label {
    52   white-space: nowrap;
    53   width: 100%;
    54   font-size: 0.75rem;
    55   font-weight: 500;
    56   display: flex;
    57   flex-direction: column;
    58   gap: 0.3rem;
    59 }
    60 .solution__merge-pdf .solution__hint {
    61   font-size: 0.75rem;
    62   font-weight: 500;
    63   color: var(--solution-merge-pdf-primary-color);
    64   white-space: wrap;
    65 }
    66 .solution__merge-pdf .solution__input {
    67   border: 1px solid var(--solution-merge-pdf-input-border-color);
    68   border-radius: 0.375rem;
    69   padding: 0.25rem 0.5rem;
    70   font-size: 1rem;
    71   line-height: 32px;
    72   outline: 1px solid transparent;
    73   outline-offset: -1px;
    74 }
    75 .solution__merge-pdf .solution__file-input::-webkit-file-upload-button {
    76   margin-right: 1rem;
    77   padding: 0.5rem 1rem;
    78   border-radius: 0.75rem;
    79   border: none;
    80   background-color: var(--solution-merge-pdf-secondary-color);
    81   color: var(--solution-merge-pdf-primary-color);
    82   font-weight: 500;
    83   cursor: pointer;
    84 }
    85 .solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button {
    86   background-color: var(--solution-merge-pdf-secondary-color);
    87 }
    88 .solution__merge-pdf .solution__btn {
    89   display: inline-flex;
    90   align-items: center; /* Ensures the icon and text are aligned */
    91   justify-content: center;
    92   gap: 0.5rem; /* Adds space between the icon and the text */
    93   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);
    94   background: var(--solution-merge-pdf-secondary-color);
    95   color: var(--solution-merge-pdf-primary-color);
    96   padding: 0.5rem 1rem;
    97   border-radius: 1rem;
    98   font-weight: 600;
    99   cursor: pointer;
    100   border: none;
    101 }
    102 .solution__merge-pdf .solution__btn:hover {
    103   filter: brightness(0.98);
    104 }
    105 .solution__merge-pdf .solution__btn .dashicons {
    106   font-size: 1.2rem; /* Adjust the size of the icon */
    107   vertical-align: middle; /* Aligns the icon vertically with the text */
    108 }
    109 .solution__merge-pdf .solution__dropdown-wrapper {
    110   position: relative;
    111 }
    112 .solution__merge-pdf .solution__dropdown {
    113   position: relative;
    114   overflow: visible;
    115   background-color: transparent;
    116   box-shadow: none;
    117   width: 100%;
    118   border-radius: 0.75rem;
    119   max-height: 15rem;
    120   z-index: 10;
    121 }
    122 .solution__merge-pdf .solution__dropdown--hidden {
    123   display: none;
    124 }
    125 .solution__merge-pdf .solution__loading-section {
    126   display: none;
    127   position: absolute;
    128   top: 50%;
    129   left: 50%;
    130   transform: translate(-50%, -50%);
    131 }
    132 .solution__merge-pdf .solution__loading-container {
    133   display: flex;
    134   justify-content: center;
    135   align-items: center;
    136   gap: 1rem;
    137   transition: 2s ease;
    138 }
    139 .solution__merge-pdf .solution__download-section {
    140   display: flex;
    141   justify-content: center;
    142   align-items: center;
    143   flex-direction: column;
    144   gap: 2rem;
    145   height: 100%;
    146 }
    147 .solution__merge-pdf .solution__download-section:last-child {
    148   margin-top: auto;
    149 }
    150 .solution__merge-pdf .solution__download-container {
    151   display: flex;
    152   flex-direction: column;
    153   flex-grow: 1;
    154   justify-content: center;
    155   align-items: center;
    156   gap: 1rem;
    157 }
    158 .solution__merge-pdf .solution__download-file-container {
    159   display: flex;
    160   flex-wrap: wrap;
    161   justify-content: flex-start;
    162   gap: 1rem;
    163 }
    164 .solution__merge-pdf .solution__download-file-name {
    165   white-space: nowrap;
    166   overflow: hidden;
    167   text-overflow: ellipsis;
    168   max-width: 12rem;
    169 }
    170 .solution__merge-pdf .solution__title-text {
    171   font-weight: 600;
    172 }
    173 .solution__merge-pdf .solution__text {
    174   font-weight: 500;
    175 }
    176 .solution__merge-pdf .solution__provided-text {
    177   display: flex;
    178   justify-content: center;
    179   font-size: 0.7rem;
    180   margin-top: 0.5rem;
    181 }
    182 .solution__merge-pdf .solution__error-section {
    183   display: flex;
    184   flex-direction: column;
    185   justify-self: center;
    186   align-self: center;
    187 }
    188 .solution__merge-pdf .solution__dot {
    189   background: var(--solution-merge-pdf-tertiary-color);
    190   height: 0.65em;
    191   width: 0.65em;
    192   border-radius: 50%;
    193   animation: move 0.6s ease infinite;
    194 }
    195 .solution__merge-pdf .solution__link {
    196   color: var(--solution-merge-pdf-tertiary-color);
    197 }
    198 .solution__merge-pdf .solution__select {
    199   display: flex;
    200   flex-direction: column;
    201   position: relative;
    202   gap: 0.3rem;
    203   /* Placeholder color */
    204   /* Style for selected option */
    205 }
    206 .solution__merge-pdf .solution__select .solution__select-input {
    207   height: 42px;
    208   padding: 0 0.5rem;
    209   border-radius: 0.375rem;
    210   border: 1px solid var(--solution-merge-pdf-input-border-color);
    211   color: var(--solution-merge-pdf-tertiary-color);
    212   box-shadow: 0 1px 2px 0 var(--solution-merge-pdf-shadow-color);
    213   -webkit-appearance: none;
    214      -moz-appearance: none;
    215           appearance: none;
    216   cursor: pointer;
    217   /* Arrow styling */
    218   background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58L12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");
    219   background-repeat: no-repeat;
    220   background-position: right 1rem center;
    221   background-size: 1rem;
    222 }
    223 .solution__merge-pdf .solution__select .solution__select-input:focus {
    224   outline: 1px solid var(--solution-merge-pdf-primary-color);
    225   box-shadow: 0 0 0 3px var(--solution-merge-pdf-secondary-color);
    226 }
    227 .solution__merge-pdf .solution__select .solution__select-input option {
    228   padding: 1rem;
    229 }
    230 .solution__merge-pdf .solution__select .solution__select-input option[disabled] {
    231   color: var(--solution-merge-pdf-input-border-color);
    232 }
    233 .solution__merge-pdf .solution__select .solution__select-input:required:invalid {
    234   color: var(--solution-merge-pdf-input-border-color);
    235 }
    236 .solution__merge-pdf .solution__select .solution__select-input option:not([disabled]) {
    237   color: var(--solution-merge-pdf-tertiary-color);
    238 }
    239 .solution__merge-pdf .solution_dropdown button {
    240   width: 100%;
    241 }
    242 .solution__merge-pdf .solution__dropdown-content {
    243   display: none;
    244   position: absolute;
    245   flex-direction: column;
    246   min-width: 100%;
    247   max-height: 150px;
    248   padding: 0.5rem 0;
    249   overflow: auto;
    250   background-color: #fff;
    251   box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);
    252   z-index: 10;
    253   margin-top: 3px;
    254   border-radius: 10px;
    255   top: 100%;
    256   left: 50%;
    257   transform: translate(-50%, 0);
    258 }
    259 .solution__merge-pdf .solution__dropdown-content label {
    260   display: block;
    261   margin-top: 10px;
    262   padding: 0 1rem;
    263 }
    264 .solution__merge-pdf .solution__dropdown-button {
    265   min-width: 100%;
    266 }
    267 .solution__merge-pdf .solution__dropdown-content:hover,
    268 .solution__merge-pdf .solution__dropdown-button:focus + .solution__dropdown-content {
    269   display: flex;
    270 }
    271 .solution__merge-pdf .solution__group {
    272   display: flex;
    273   flex-wrap: wrap;
    274   gap: 10px;
    275 }
    276 .solution__merge-pdf .solution__group > div,
    277 .solution__merge-pdf .solution__group > label {
    278   flex: 1;
    279 }
    280 .solution__merge-pdf .solution__sortable-container {
    281   cursor: move;
    282   display: flex;
    283   padding: 1rem;
    284   margin: 0.5rem 0;
    285   border: 1px dashed var(--solution-merge-pdf-primary-color);
    286   border-radius: 0.375rem;
    287   align-items: center;
    288   gap: 2rem;
    289 }
    290 .solution__merge-pdf .solution__preview-container {
    291   position: relative;
    292   padding: 1px 0;
    293   background-color: #E2EFF9;
    294   border-radius: 0.25rem;
    295   min-height: 60px;
    296   min-width: 60px;
    297   max-width: 60px;
    298   max-height: 60px;
    299   display: flex;
    300   align-items: center;
    301   justify-content: center;
    302 }
    303 .solution__merge-pdf .solution__preview-image {
    304   width: 60px;
    305   height: 60px;
    306   -o-object-fit: contain;
    307      object-fit: contain;
    308 }
    309 .solution__merge-pdf .solution__file-info {
    310   display: flex;
    311   flex-direction: column;
    312   gap: 0.5rem;
    313 }
    314 .solution__merge-pdf .solution__actions-group {
    315   display: flex;
    316   gap: 1rem;
    317   margin-left: auto;
    318 }
    319 @media (max-width: 500px) {
    320   .solution__merge-pdf .solution__sortable-container {
    321     flex-wrap: wrap; /* Allow items to wrap to the next line */
    322     justify-content: center; /* Center item content */
    323     gap: 1rem;
    324   }
    325   .solution__merge-pdf .solution__sortable-container > :nth-child(1),
    326   .solution__merge-pdf .solution__sortable-container > :nth-child(2) {
    327     flex: 1 1 calc(50% - 0.5rem); /* Each takes 50% of the container width, minus gap */
    328   }
    329   .solution__merge-pdf .solution__sortable-container > :nth-child(3) {
    330     flex: 1 1 100%; /* Full width for the third item */
    331     justify-content: center; /* Center item content */
    332   }
    333   .solution__merge-pdf .solution__actions-group {
    334     margin-left: 0;
    335   }
    336 }
    337 
    338 .solution__modal {
    339   display: none; /* Initially hidden */
    340   position: fixed;
    341   top: 0;
    342   left: 0;
    343   width: 100%; /* Full screen width */
    344   height: 100%; /* Full screen height */
    345   background-color: rgba(0, 0, 0, 0.7); /* Semi-transparent background */
    346   justify-content: center; /* Center content horizontally */
    347   align-items: center; /* Center content vertically */
    348   z-index: 1000; /* Ensures modal appears on top */
    349 }
    350 
    351 /* Modal content styling */
    352 .solution__toolbar {
    353   display: flex;
    354   position: absolute;
    355   justify-content: center;
    356   align-items: center;
    357   gap: 0.1rem;
    358   top: 0;
    359   left: 50%;
    360   transform: translateX(-50%);
    361   background-color: rgba(240, 240, 240, 0.8);
    362   border-bottom-left-radius: 0.375rem;
    363   border-bottom-right-radius: 0.375rem;
    364   z-index: 1000;
    365 }
    366 
    367 .solution__toolbar-button {
    368   padding: 10px 15px;
    369   cursor: pointer;
    370   color: black;
    371   border: none;
    372   border-radius: 4px;
    373   transition: background-color 0.3s;
    374   background-color: transparent;
    375 }
    376 
    377 .solution__toolbar-button:hover {
    378   color: white;
    379 }
    380 
    381 .solution__pdf-renderer {
    382   display: flex;
    383   justify-content: center;
    384   align-items: center;
    385   overflow: auto;
    386   background-color: #f4f4f4;
    387   box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
    388   border: 1px solid #ddd;
    389   max-width: 80%;
    390   max-height: 80%;
    391 }
    392 
    393 .solution__page-indicator {
    394   color: black;
    395   font-size: 16px;
    396   align-self: center;
    397   text-align: center;
    398   white-space: nowrap;
    399 }
    400 
    401 .solution__interactive-image {
    402   max-width: 80%;
    403   max-height: 80%;
    404   fit-object: contain;
    405 }
    406 
    407 @keyframes rotation {
    408   0% {
    409     transform: rotate(0deg);
    410   }
    411   100% {
    412     transform: rotate(360deg);
    413   }
    414 }
    415 @keyframes move {
    416   0% {
    417     transform: translateX(50%);
    418   }
    419   50% {
    420     transform: translateX(-50%);
    421   }
    422   100% {
    423     transform: translateX(50%);
    424   }
    425 }
    426 
    427 /*# sourceMappingURL=style-index.css.map*/
     1:root{--solution-merge-pdf-primary-color:#4f46e5;--solution-merge-pdf-secondary-color:#eef2ff;--solution-merge-pdf-tertiary-color:#000;--solution-merge-pdf-background-color:#fff;--solution-merge-pdf-border-color:#e5e7eb;--solution-merge-pdf-input-border-color:#d1d5db;--solution-merge-pdf-shadow-color:hsla(210,8%,62%,.2);--solution-merge-pdf-btn-shadow-color:rgba(0,0,0,.05);--solution-merge-pdf-dropdown-bg-color:#fff;--solution-merge-pdf-dropdown-shadow-color-1:rgba(0,0,0,.1);--solution-merge-pdf-dropdown-shadow-color-2:rgba(0,0,0,.1)}.solution__merge-pdf .solution__container-wrapper{color:var(--solution-merge-pdf-tertiary-color);display:flex;flex-direction:column;gap:1rem;padding:1rem}.solution__merge-pdf .solution__container{background-color:var(--solution-merge-pdf-background-color);border:1px solid var(--solution-merge-pdf-border-color);border-radius:.75rem;box-shadow:var(--solution-merge-pdf-shadow-color) 0 8px 24px;display:flex;flex-direction:column;gap:1rem;min-height:180px;padding:1.5rem 1.5rem .5rem;position:relative}.solution__merge-pdf .solution__header{font-size:1.25rem;font-weight:500;letter-spacing:.05em}.solution__merge-pdf .solution__content{display:grid;flex-grow:1}.solution__merge-pdf .solution__form{display:flex;flex-direction:column;gap:1rem}.solution__merge-pdf .solution__label{display:flex;flex-direction:column;font-size:.75rem;font-weight:500;gap:.3rem;white-space:nowrap;width:100%}.solution__merge-pdf .solution__hint{color:var(--solution-merge-pdf-primary-color);font-size:.75rem;font-weight:500;white-space:wrap}.solution__merge-pdf .solution__input{border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;font-size:1rem;line-height:32px;outline:1px solid transparent;outline-offset:-1px;padding:.25rem .5rem}.solution__merge-pdf .solution__file-input::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color);border:none;border-radius:.75rem;color:var(--solution-merge-pdf-primary-color);cursor:pointer;font-weight:500;margin-right:1rem;padding:.5rem 1rem}.solution__merge-pdf .solution__file-input:hover::-webkit-file-upload-button{background-color:var(--solution-merge-pdf-secondary-color)}.solution__merge-pdf .solution__btn{align-items:center;background:var(--solution-merge-pdf-secondary-color);border:none;border-radius:1rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-btn-shadow-color);color:var(--solution-merge-pdf-primary-color);cursor:pointer;display:inline-flex;font-weight:600;gap:.5rem;justify-content:center;padding:.5rem 1rem}.solution__merge-pdf .solution__btn:hover{filter:brightness(.98)}.solution__merge-pdf .solution__btn .dashicons{font-size:1.2rem;vertical-align:middle}.solution__merge-pdf .solution__dropdown-wrapper{position:relative}.solution__merge-pdf .solution__dropdown{background-color:transparent;border-radius:.75rem;box-shadow:none;max-height:15rem;overflow:visible;position:relative;width:100%;z-index:10}.solution__merge-pdf .solution__dropdown--hidden{display:none}.solution__merge-pdf .solution__loading-section{display:none;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.solution__merge-pdf .solution__loading-container{align-items:center;display:flex;gap:1rem;justify-content:center;transition:2s ease}.solution__merge-pdf .solution__download-section{align-items:center;display:flex;flex-direction:column;gap:2rem;height:100%;justify-content:center}.solution__merge-pdf .solution__download-section:last-child{margin-top:auto}.solution__merge-pdf .solution__download-container{align-items:center;display:flex;flex-direction:column;flex-grow:1;gap:1rem;justify-content:center}.solution__merge-pdf .solution__download-file-container{display:flex;flex-wrap:wrap;gap:1rem;justify-content:flex-start}.solution__merge-pdf .solution__download-file-name{max-width:12rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.solution__merge-pdf .solution__title-text{font-weight:600}.solution__merge-pdf .solution__text{font-weight:500}.solution__merge-pdf .solution__provided-text{display:flex;font-size:.7rem;justify-content:center;margin-top:.5rem}.solution__merge-pdf .solution__error-section{align-self:center;display:flex;flex-direction:column;justify-self:center}.solution__merge-pdf .solution__dot{animation:move .6s ease infinite;background:var(--solution-merge-pdf-tertiary-color);border-radius:50%;height:.65em;width:.65em}.solution__merge-pdf .solution__link{color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution__select{display:flex;flex-direction:column;gap:.3rem;position:relative}.solution__merge-pdf .solution__select .solution__select-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%234f46e5%27 viewBox=%270 0 24 24%27%3E%3Cpath d=%27M7.41 8.58 12 13.17l4.59-4.59L18 10l-6 6-6-6z%27/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:1rem;border:1px solid var(--solution-merge-pdf-input-border-color);border-radius:.375rem;box-shadow:0 1px 2px 0 var(--solution-merge-pdf-shadow-color);color:var(--solution-merge-pdf-tertiary-color);cursor:pointer;height:42px;padding:0 .5rem}.solution__merge-pdf .solution__select .solution__select-input:focus{box-shadow:0 0 0 3px var(--solution-merge-pdf-secondary-color);outline:1px solid var(--solution-merge-pdf-primary-color)}.solution__merge-pdf .solution__select .solution__select-input option{padding:1rem}.solution__merge-pdf .solution__select .solution__select-input option[disabled]{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input:required:invalid{color:var(--solution-merge-pdf-input-border-color)}.solution__merge-pdf .solution__select .solution__select-input option:not([disabled]){color:var(--solution-merge-pdf-tertiary-color)}.solution__merge-pdf .solution_dropdown button{width:100%}.solution__merge-pdf .solution__dropdown-content{background-color:#fff;border-radius:10px;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);display:none;flex-direction:column;left:50%;margin-top:3px;max-height:150px;min-width:100%;overflow:auto;padding:.5rem 0;position:absolute;top:100%;transform:translate(-50%);z-index:10}.solution__merge-pdf .solution__dropdown-content label{display:block;margin-top:10px;padding:0 1rem}.solution__merge-pdf .solution__dropdown-button{min-width:100%}.solution__merge-pdf .solution__dropdown-button:focus+.solution__dropdown-content,.solution__merge-pdf .solution__dropdown-content:hover{display:flex}.solution__merge-pdf .solution__group{display:flex;flex-wrap:wrap;gap:10px}.solution__merge-pdf .solution__group>div,.solution__merge-pdf .solution__group>label{flex:1}.solution__merge-pdf .solution__sortable-container{align-items:center;border:1px dashed var(--solution-merge-pdf-primary-color);border-radius:.375rem;cursor:move;display:flex;gap:2rem;margin:.5rem 0;padding:1rem}.solution__merge-pdf .solution__preview-container{align-items:center;background-color:#e2eff9;border-radius:.25rem;display:flex;justify-content:center;max-height:60px;max-width:60px;min-height:60px;min-width:60px;padding:1px 0;position:relative}.solution__merge-pdf .solution__preview-image{height:60px;-o-object-fit:contain;object-fit:contain;width:60px}.solution__merge-pdf .solution__file-info{display:flex;flex-direction:column;gap:.5rem}.solution__merge-pdf .solution__actions-group{display:flex;gap:1rem;margin-left:auto}@media(max-width:500px){.solution__merge-pdf .solution__sortable-container{flex-wrap:wrap;gap:1rem;justify-content:center}.solution__merge-pdf .solution__sortable-container>:first-child,.solution__merge-pdf .solution__sortable-container>:nth-child(2){flex:1 1 calc(50% - 0.5rem)}.solution__merge-pdf .solution__sortable-container>:nth-child(3){flex:1 1 100%;justify-content:center}.solution__merge-pdf .solution__actions-group{margin-left:0}}.solution__modal{background-color:rgba(0,0,0,.7);display:none;height:100%;left:0;position:fixed;width:100%}.solution__modal,.solution__toolbar{align-items:center;justify-content:center;top:0;z-index:1000}.solution__toolbar{background-color:hsla(0,0%,94%,.8);border-bottom-left-radius:.375rem;border-bottom-right-radius:.375rem;display:flex;gap:.1rem;left:50%;position:absolute;transform:translateX(-50%)}.solution__toolbar-button{background-color:transparent;border:none;border-radius:4px;color:#000;cursor:pointer;padding:10px 15px;transition:background-color .3s}.solution__toolbar-button:hover{color:#fff}.solution__pdf-renderer{align-items:center;background-color:#f4f4f4;border:1px solid #ddd;box-shadow:0 4px 8px rgba(0,0,0,.1);display:flex;justify-content:center;max-height:80%;max-width:80%;overflow:auto}.solution__page-indicator{align-self:center;color:#000;font-size:16px;text-align:center;white-space:nowrap}.solution__interactive-image{max-height:80%;max-width:80%;fit-object:contain}@keyframes rotation{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes move{0%{transform:translateX(50%)}50%{transform:translateX(-50%)}to{transform:translateX(50%)}}
  • merge-pdf/trunk/build/view.asset.php

    r3232408 r3260511  
    1 <?php return array('dependencies' => array(), 'version' => 'd3134df337a43cf2ea57');
     1<?php return array('dependencies' => array(), 'version' => '1b8511a4fa9f3be4b297');
  • merge-pdf/trunk/build/view.js

    r3232408 r3260511  
    1 /******/ (() => { // webpackBootstrap
    2 /*!*********************!*\
    3   !*** ./src/view.js ***!
    4   \*********************/
    5 document.querySelectorAll('.solution__merge-pdf .solution__form').forEach(form => {
    6   form.addEventListener('submit', function (event) {
    7     event.preventDefault();
    8     const formId = form.getAttribute('id');
    9     const fileInput = form.querySelector('[name="file"]');
    10     const loadingSection = document.getElementById(`loadingSection_${formId}`);
    11     const errorSection = document.getElementById(`errorSection_${formId}`);
    12     const resultMessage = document.getElementById(`resultMessage_${formId}`);
    13     const downloadSection = document.getElementById(`downloadSection_${formId}`);
    14 
    15     // Hide the form, show the loading indicator, hide error and download sections
    16     form.style.display = 'none';
    17     loadingSection.style.display = 'flex';
    18     errorSection.style.display = 'none'; // Hide error section
    19     downloadSection.style.display = 'none';
    20     const formData = new FormData();
    21     Array.from(fileInput.files).forEach((file, index) => {
    22       formData.append(`file[${index}]`, file);
    23     });
    24     formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce);
    25     fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, {
    26       method: 'POST',
    27       body: formData
    28     }).then(response => response.json()).then(data => {
    29       if (data.id) {
    30         pollStatus(data.id, formId);
    31       } else {
    32         loadingSection.style.display = 'none';
    33         errorSection.style.display = 'flex';
    34         resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    35         const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    36         fileListContainer.innerHTML = '';
    37       }
    38     }).catch(() => {
    39       loadingSection.style.display = 'none';
    40       errorSection.style.display = 'flex';
    41       resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    42       const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    43       fileListContainer.innerHTML = '';
    44     });
    45   });
    46 
    47   // Add event listener for restart buttons
    48   const restartDownloadBtn = document.getElementById(`restartDownloadBtn_${form.id}`);
    49   const restartErrorBtn = document.getElementById(`restartErrorBtn_${form.id}`);
    50 
    51   // Function to restart the process and reset the form
    52   function resetForm() {
    53     form.reset();
    54     form.style.display = 'flex';
    55     document.getElementById(`loadingSection_${form.id}`).style.display = 'none'; // Hide loading
    56     document.getElementById(`downloadSection_${form.id}`).style.display = 'none'; // Hide download
    57     document.getElementById(`errorSection_${form.id}`).style.display = 'none'; // Hide error section
    58     const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    59     fileListContainer.innerHTML = '';
    60   }
    61   if (restartDownloadBtn) {
    62     restartDownloadBtn.addEventListener('click', resetForm);
    63   }
    64   if (restartErrorBtn) {
    65     restartErrorBtn.addEventListener('click', resetForm);
    66   }
    67   pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc;
    68   const containerId = form.getAttribute('id');
    69   let currentPdf, currentPage, totalPages, rotation, scale;
    70   let allFiles = [];
    71   const fileListContainer = document.createElement("div");
    72   fileListContainer.setAttribute(`id`, `${containerId}-file-list-container`);
    73   const formField = document.getElementById(`${containerId}-files-input`);
    74   const formFieldParent = formField.parentElement;
    75   formFieldParent.appendChild(fileListContainer);
    76   formField.addEventListener("change", async event => {
    77     const fileListContainer = document.getElementById(`${containerId}-file-list-container`);
    78     const newFiles = Array.from(event.target.files);
    79 
    80     // Merge new files with the existing files but remove duplicates within new files
    81     const uniqueNewFiles = newFiles.filter(file => !allFiles.some(existingFile => existingFile.name === file.name && existingFile.size === file.size));
    82 
    83     // Merge the unique new files with the existing files
    84     allFiles = [...allFiles, ...uniqueNewFiles];
    85     const dataTransfer = new DataTransfer();
    86 
    87     // Add all unique files to DataTransfer
    88     allFiles.forEach(file => {
    89       dataTransfer.items.add(file);
    90     });
    91     event.target.files = dataTransfer.files;
    92 
    93     // Only create and append list items for new files that aren't already in the list
    94     for (const file of uniqueNewFiles) {
    95       const listItem = await createFileListItem(file, event);
    96       fileListContainer.appendChild(listItem);
    97     }
    98     createSortableInstance(fileListContainer, event);
    99   });
    100   async function createFileListItem(file, event) {
    101     const listItem = document.createElement("div");
    102     listItem.classList.add("solution__sortable-container");
    103     const previewContainer = document.createElement("div");
    104     previewContainer.classList.add("solution__preview-container");
    105     if (file.type && file.type.match(/image.*/)) {
    106       createPreviewImage(previewContainer, file);
    107     } else if (file.type && file.type.match("application/pdf")) {
    108       await createPreviewPdf(previewContainer, file);
    109     }
    110     const fileSize = file.size > 1024 * 1024 ? (file.size / (1024 * 1024)).toFixed(2) + " MB" : (file.size / 1024).toFixed(2) + " KB";
    111     const fileInfoContent = `
    112     <div class="solution__file-info">
    113         <div class="solution__file-name">${file.name}</div>
    114         <div class="solution__file-size">${fileSize}</div>
    115     </div>
    116   `;
    117     const fileInfo = document.createElement("div");
    118     fileInfo.classList.add("solution__file-info");
    119     fileInfo.innerHTML = fileInfoContent;
    120     const previewButton = createPreviewButton(file);
    121     const removeButton = createRemoveButton(file, event);
    122     const actionContainer = document.createElement("div");
    123     actionContainer.classList.add("solution__actions-group");
    124     actionContainer.appendChild(previewButton);
    125     actionContainer.appendChild(removeButton);
    126     listItem.appendChild(previewContainer);
    127     listItem.appendChild(fileInfo);
    128     listItem.appendChild(actionContainer);
    129     return listItem;
    130   }
    131   function createRemoveButton(file, event) {
    132     const removeButton = document.createElement("button");
    133     removeButton.className = "solution__btn";
    134     const removeIcon = document.createElement("i");
    135     removeIcon.className = "fas fa-trash";
    136     removeIcon.title = "Remove File";
    137     removeButton.appendChild(removeIcon);
    138     removeButton.addEventListener("click", e => {
    139       e.preventDefault();
    140       e.stopPropagation();
    141 
    142       // Remove the file from allFiles as well
    143       allFiles = allFiles.filter(f => f.name !== file.name); // Update the array directly
    144 
    145       const dataTransfer = new DataTransfer();
    146       allFiles.forEach(f => dataTransfer.items.add(f));
    147       event.target.files = dataTransfer.files;
    148       const listItem = e.target.closest(".solution__sortable-container");
    149       listItem?.parentElement?.removeChild(listItem);
    150     });
    151     return removeButton;
    152   }
    153   function createPreviewButton(file) {
    154     const previewButton = document.createElement("button");
    155     previewButton.classList.add("solution__btn");
    156     const viewIcon = document.createElement("i");
    157     viewIcon.className = "fas fa-eye";
    158     viewIcon.title = "View File";
    159     previewButton.appendChild(viewIcon);
    160     previewButton.addEventListener("click", async e => {
    161       e.preventDefault();
    162       e.stopPropagation();
    163       await showModal(file);
    164     });
    165     return previewButton;
    166   }
    167   function createSortableInstance(element, event) {
    168     if (element._sortableInstance) {
    169       element._sortableInstance.destroy();
    170     }
    171     element._sortableInstance = new Sortable(element, {
    172       animation: 150,
    173       onEnd: () => {
    174         const dataTransfer = new DataTransfer();
    175         const newFileList = Array.from(element.children).map(item => {
    176           const fileNameElement = item.querySelector(`#${containerId}-file-list-container .solution__file-name`);
    177           return fileNameElement ? fileNameElement.textContent : null;
    178         });
    179         newFileList.forEach(fileName => {
    180           const file = Array.from(event.target.files).find(f => f.name === fileName);
    181           if (file) {
    182             dataTransfer.items.add(file);
    183           }
    184         });
    185         event.target.files = dataTransfer.files;
    186       }
    187     });
    188   }
    189   function createPreviewImage(element, file) {
    190     const fileURL = URL.createObjectURL(file);
    191     const img = document.createElement("img");
    192     img.classList.add("solution__preview-image");
    193     img.src = fileURL;
    194     element.appendChild(img);
    195   }
    196   async function createPreviewPdf(element, file) {
    197     try {
    198       const fileURL = URL.createObjectURL(file);
    199       const pdf = await pdfjsLib.getDocument(fileURL).promise;
    200       const page = await pdf.getPage(1); // Render the first page only
    201 
    202       const preCalculateViewport = page.getViewport({
    203         scale: 1
    204       });
    205       const scaleHeight = 60 / preCalculateViewport.height;
    206       const scaleWidth = 60 / preCalculateViewport.width;
    207       const scale = Math.min(scaleHeight, scaleWidth);
    208       const viewport = page.getViewport({
    209         scale
    210       });
    211       const canvas = document.createElement("canvas");
    212       canvas.className = "page";
    213       canvas.width = viewport.width;
    214       canvas.height = viewport.height;
    215       const context = canvas.getContext("2d");
    216       const renderContext = {
    217         canvasContext: context,
    218         viewport: viewport
    219       };
    220       await page.render(renderContext).promise;
    221       element.appendChild(canvas);
    222     } catch (error) {
    223       console.log(error);
    224     }
    225   }
    226   async function showModal(file) {
    227     const fullscreenModal = document.createElement("div");
    228     fullscreenModal.id = "solution__fullscreen-modal";
    229     fullscreenModal.classList.add("solution__modal");
    230     fullscreenModal.style.display = "flex"; // Show the modal when opened
    231 
    232     if (file.type && file.type.match(/image.*/)) {
    233       const imageContent = createImageRenderer(file);
    234       const toolbar = createToolbar();
    235       fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content
    236       fullscreenModal.appendChild(imageContent); // Render the image content
    237     }
    238     if (file.type && file.type.match("application/pdf")) {
    239       const pdfContent = await createPdfRenderer(file);
    240       const toolbar = createToolbar();
    241       fullscreenModal.appendChild(toolbar); // Add toolbar to the top of the modal content
    242       fullscreenModal.appendChild(pdfContent); // Render the PDF content
    243     }
    244     document.body.appendChild(fullscreenModal); // Add the modal to the body
    245 
    246     // Add event listener to close the modal when clicking outside the content or toolbar
    247     fullscreenModal.addEventListener("click", event => {
    248       closeModal(event, fullscreenModal);
    249     });
    250   }
    251   function closeModal(event, modal) {
    252     if (event.target === modal) {
    253       modal.remove();
    254     }
    255   }
    256   function createImageRenderer(file) {
    257     const image = document.createElement("img");
    258     image.classList.add("solution__interactive-image");
    259     image.style.transformOrigin = "center center"; // Proper zoom/rotation pivot
    260     image.setAttribute("data-scale", "1"); // Initialize scale
    261     image.setAttribute("data-rotation", "0"); // Initialize rotation
    262 
    263     // Load the image content
    264     const reader = new FileReader();
    265     reader.onload = event => {
    266       image.src = event.target.result; // Set image source
    267     };
    268     reader.readAsDataURL(file);
    269     return image;
    270   }
    271   async function createPdfRenderer(file) {
    272     const pdfRendererDiv = document.createElement("div");
    273     pdfRendererDiv.classList.add("solution__pdf-renderer");
    274 
    275     // Create a canvas for rendering
    276     const canvas = document.createElement("canvas");
    277     canvas.id = "solution__pdf-canvas";
    278     pdfRendererDiv.appendChild(canvas);
    279     const ctx = canvas.getContext("2d");
    280 
    281     // Load the PDF using PDF.js
    282     const pdf = await pdfjsLib.getDocument(URL.createObjectURL(file)).promise;
    283 
    284     // Store PDF and page details in the instance
    285     currentPdf = pdf;
    286     currentPage = 1;
    287     totalPages = pdf.numPages;
    288     rotation = 0;
    289     scale = 1;
    290 
    291     // Render the first page
    292     await renderPage(ctx);
    293     return pdfRendererDiv;
    294   }
    295   async function renderPage(ctx) {
    296     const page = await currentPdf.getPage(currentPage);
    297 
    298     // Adjust canvas size based on the PDF page
    299     const viewport = page.getViewport({
    300       scale,
    301       rotation
    302     });
    303     const canvas = ctx.canvas;
    304     canvas.width = viewport.width;
    305     canvas.height = viewport.height;
    306     const renderContext = {
    307       canvasContext: ctx,
    308       viewport: viewport
    309     };
    310     await page.render(renderContext).promise;
    311 
    312     // Update toolbar state (for buttons and page indicator)
    313     const pageIndicator = document.getElementById("solution__page-indicator");
    314     if (pageIndicator) {
    315       pageIndicator.textContent = `${currentPage} / ${totalPages}`;
    316     }
    317   }
    318   function createToolbar() {
    319     const toolbar = document.createElement("div");
    320     toolbar.classList.add("solution__toolbar");
    321 
    322     // Buttons for toolbar
    323     const buttons = [{
    324       text: "Left",
    325       id: "solution__previous-btn",
    326       icon: "fa-solid fa-chevron-left"
    327     }, {
    328       text: "Right",
    329       id: "solution__next-btn",
    330       icon: "fa-solid fa-chevron-right"
    331     }, {
    332       text: "Zoom In",
    333       id: "solution__zoom-in-btn",
    334       icon: "fa-solid fa-magnifying-glass-plus"
    335     }, {
    336       text: "Zoom Out",
    337       id: "solution__zoom-out-btn",
    338       icon: "fa-solid fa-magnifying-glass-minus"
    339     }, {
    340       text: "Rotate Left",
    341       id: "solution__rotate-left-btn",
    342       icon: "fa-solid fa-arrow-rotate-left"
    343     }, {
    344       text: "Rotate Right",
    345       id: "solution__rotate-right-btn",
    346       icon: "fa-solid fa-arrow-rotate-right"
    347     }, {
    348       text: "Close",
    349       id: "close-modal-btn",
    350       icon: "fa-solid fa-xmark"
    351     }];
    352 
    353     // Create Left button
    354     const leftBtn = createToolbarButton(buttons[0]);
    355     toolbar.appendChild(leftBtn);
    356 
    357     // Create page indicator
    358     const pageIndicator = document.createElement("span");
    359     pageIndicator.id = "solution__page-indicator";
    360     pageIndicator.textContent = `${currentPage || 1} / ${totalPages || 1}`;
    361     pageIndicator.classList.add("solution__page-indicator");
    362     toolbar.appendChild(pageIndicator);
    363 
    364     // Create Right button
    365     const rightBtn = createToolbarButton(buttons[1]);
    366     toolbar.appendChild(rightBtn);
    367 
    368     // Add remaining buttons
    369     buttons.slice(2).forEach(button => {
    370       const btn = createToolbarButton(button);
    371       toolbar.appendChild(btn);
    372     });
    373     return toolbar;
    374   }
    375   function createToolbarButton(buttonConfig) {
    376     const btn = document.createElement("button");
    377     btn.id = buttonConfig.id;
    378     btn.classList.add("solution__toolbar-button");
    379 
    380     // Create the icon element
    381     const icon = document.createElement("i");
    382     icon.className = buttonConfig.icon; // Use the icon class from buttonConfig
    383     btn.appendChild(icon);
    384 
    385     // Assign the event listener
    386     btn.addEventListener("click", async e => {
    387       e.preventDefault();
    388       e.stopPropagation();
    389       await handleToolbarAction(buttonConfig.id); // Handle action here
    390     });
    391     return btn;
    392   }
    393   async function handleToolbarAction(actionId) {
    394     const pdfCanvas = document.querySelector("#solution__pdf-canvas");
    395     const image = document.querySelector(".solution__interactive-image");
    396     if (actionId === "close-modal-btn") {
    397       document.getElementById("solution__fullscreen-modal")?.remove();
    398       return;
    399     }
    400     if (pdfCanvas) {
    401       // Handle PDF-specific actions (left, right, etc.)
    402       await handlePdfToolbarAction(actionId);
    403     } else if (image) {
    404       // Handle image-specific actions (zoom, rotate, etc.)
    405       handleImageToolbarActions(actionId, image);
    406     }
    407   }
    408   function handleImageToolbarActions(actionId, image) {
    409     let scale = parseFloat(image.getAttribute("data-scale")) || 1;
    410     let rotation = parseInt(image.getAttribute("data-rotation")) || 0;
    411 
    412     // Store original dimensions
    413     const originalWidth = image.naturalWidth;
    414     const originalHeight = image.naturalHeight;
    415 
    416     // Get parent element's dimensions
    417     const parent = image.parentElement;
    418     const parentWidth = parent.offsetWidth;
    419     const parentHeight = parent.offsetHeight;
    420     switch (actionId) {
    421       case "solution__zoom-in-btn":
    422         scale = Math.min(scale + 0.1, 5); // Cap zoom at 5x
    423         break;
    424       case "solution__zoom-out-btn":
    425         scale = Math.max(scale - 0.1, 0.1); // Minimum zoom to 0.1x
    426         break;
    427       case "solution__rotate-left-btn":
    428         rotation = (rotation - 90) % 360; // Rotate counter-clockwise
    429         break;
    430       case "solution__rotate-right-btn":
    431         rotation = (rotation + 90) % 360; // Rotate clockwise
    432         break;
    433     }
    434 
    435     // Determine whether to swap width and height
    436     let adjustedWidth = originalWidth * scale;
    437     let adjustedHeight = originalHeight * scale;
    438     if (Math.abs(rotation % 180) === 90) {
    439       // Swap width and height if rotated 90 or 270 degrees
    440       [adjustedWidth, adjustedHeight] = [adjustedHeight, adjustedWidth];
    441       adjustedWidth = parentWidth * 0.8;
    442       adjustedHeight = adjustedWidth / originalWidth * originalHeight;
    443       adjustedHeight = parentHeight * 0.8;
    444       adjustedHeight = adjustedHeight / originalWidth * originalHeight;
    445     }
    446 
    447     // Apply updated dimensions
    448     image.style.transform = `scale(${scale}) rotate(${rotation}deg)`;
    449     image.style.width = `${adjustedWidth}px`;
    450     image.style.height = `${adjustedHeight}px`;
    451     image.style.objectFit = "contain";
    452 
    453     // Update rotation data (only for internal tracking)
    454     image.setAttribute("data-scale", scale); // Store current scale
    455     image.setAttribute("data-rotation", rotation); // Store current rotation
    456   }
    457   async function handlePdfToolbarAction(actionId) {
    458     const canvas = document.getElementById("solution__pdf-canvas");
    459     const ctx = canvas.getContext("2d");
    460     switch (actionId) {
    461       case "solution__previous-btn":
    462         if (currentPage > 1) {
    463           currentPage--;
    464           await renderPage(ctx);
    465         }
    466         break;
    467       case "solution__next-btn":
    468         if (currentPage < totalPages) {
    469           currentPage++;
    470           await renderPage(ctx);
    471         }
    472         break;
    473       case "solution__zoom-in-btn":
    474         scale += 0.2;
    475         await renderPage(ctx);
    476         break;
    477       case "solution__zoom-out-btn":
    478         scale -= 0.2;
    479         await renderPage(ctx);
    480         break;
    481       case "solution__rotate-left-btn":
    482         rotation -= 90;
    483         await renderPage(ctx);
    484         break;
    485       case "solution__rotate-right-btn":
    486         rotation += 90;
    487         await renderPage(ctx);
    488         break;
    489       case "close-modal-btn":
    490         break;
    491       default:
    492         console.log(`Unknown action: ${actionId}`);
    493     }
    494   }
    495 });
    496 function pollStatus(id, formId) {
    497   const loadingSection = document.getElementById(`loadingSection_${formId}`);
    498   const errorSection = document.getElementById(`errorSection_${formId}`);
    499   const resultMessage = document.getElementById(`resultMessage_${formId}`);
    500   const downloadSection = document.getElementById(`downloadSection_${formId}`);
    501   const downloadFilesContainer = document.getElementById(`downloadFilesContainer_${formId}`);
    502   function checkStatus() {
    503     fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`).then(response => response.json()).then(data => {
    504       if (data.status === 'done') {
    505         loadingSection.style.display = 'none';
    506         downloadFilesContainer.innerHTML = ''; // Clear previous downloads
    507 
    508         if (data.output && data.output.files && data.output.files.length > 0) {
    509           data.output.files.forEach(file => {
    510             // Create download button
    511             const downloadButton = document.createElement('button');
    512             downloadButton.type = 'button';
    513             downloadButton.className = 'solution__btn';
    514             downloadButton.innerHTML = `
    515                                 <div class="dashicons dashicons-download"></div>
    516                                 <span class="solution__download-file-name">${file.name}</span>
    517                             `;
    518 
    519             // Set download functionality
    520             downloadButton.addEventListener('click', event => {
    521               event.preventDefault();
    522               const anchor = document.createElement('a');
    523               anchor.href = file.path;
    524               anchor.target = '_blank';
    525               document.body.appendChild(anchor);
    526               anchor.click();
    527               document.body.removeChild(anchor);
    528             });
    529 
    530             // Append elements to the container
    531             const fileContainer = document.createElement('div');
    532             fileContainer.className = 'solution__download-file-container';
    533             fileContainer.appendChild(downloadButton);
    534             downloadFilesContainer.appendChild(fileContainer);
    535           });
    536           downloadSection.style.display = 'flex'; // Show download section
    537         } else {
    538           errorSection.style.display = 'flex';
    539           resultMessage.innerText = 'No files available for download.';
    540         }
    541       } else if (data.status === 'error') {
    542         throw new Error('Processing failed: ' + data.message);
    543       } else {
    544         setTimeout(checkStatus, 500);
    545       }
    546     }).catch(() => {
    547       loadingSection.style.display = 'none';
    548       errorSection.style.display = 'flex';
    549       resultMessage.innerText = 'An unexpected error occurred. Please try again.';
    550     });
    551   }
    552   checkStatus();
    553 }
    554 /******/ })()
    555 ;
    556 //# sourceMappingURL=view.js.map
     1document.querySelectorAll(".solution__merge-pdf .solution__form").forEach((e=>{e.addEventListener("submit",(function(t){t.preventDefault();const n=e.getAttribute("id"),o=e.querySelector('[name="file"]'),i=document.getElementById(`loadingSection_${n}`),s=document.getElementById(`errorSection_${n}`),l=document.getElementById(`resultMessage_${n}`),d=document.getElementById(`downloadSection_${n}`);e.style.display="none",i.style.display="flex",s.style.display="none",d.style.display="none";const c=new FormData;Array.from(o.files).forEach(((e,t)=>{c.append(`file[${t}]`,e)})),c.append("mergePDFFormNonce",wpApiSettingsMergePDF.mergePDFNonce),fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`,{method:"POST",body:c}).then((e=>e.json())).then((e=>{e.id?function(e,t){const n=document.getElementById(`loadingSection_${t}`),o=document.getElementById(`errorSection_${t}`),a=document.getElementById(`resultMessage_${t}`),i=document.getElementById(`downloadSection_${t}`),s=document.getElementById(`downloadFilesContainer_${t}`);!function t(){fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${e}`,{method:"GET",headers:{"X-WP-Nonce":wpApiSettingsMergePDF.mergePDFNonce,"Content-Type":"application/json"}}).then((e=>e.json())).then((e=>{if("done"===e.status)n.style.display="none",s.innerHTML="",e.output&&e.output.files&&e.output.files.length>0?(e.output.files.forEach((e=>{const t=document.createElement("button");t.type="button",t.className="solution__btn",t.innerHTML=`\n                                <div class="dashicons dashicons-download"></div>\n                                <span class="solution__download-file-name">${e.name}</span>\n                            `,t.addEventListener("click",(t=>{t.preventDefault();const n=document.createElement("a");n.href=e.path,n.target="_blank",document.body.appendChild(n),n.click(),document.body.removeChild(n)}));const n=document.createElement("div");n.className="solution__download-file-container",n.appendChild(t),s.appendChild(n)})),i.style.display="flex"):(o.style.display="flex",a.innerText="No files available for download.");else{if("error"===e.status)throw new Error("Processing failed: "+e.message);setTimeout(t,500)}})).catch((()=>{n.style.display="none",o.style.display="flex",a.innerText="An unexpected error occurred. Please try again."}))}()}(e.id,n):(i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML="")})).catch((()=>{i.style.display="none",s.style.display="flex",l.innerText="An unexpected error occurred. Please try again.",document.getElementById(`${a}-file-list-container`).innerHTML=""}))}));const t=document.getElementById(`restartDownloadBtn_${e.id}`),n=document.getElementById(`restartErrorBtn_${e.id}`);function o(){e.reset(),e.style.display="flex",document.getElementById(`loadingSection_${e.id}`).style.display="none",document.getElementById(`downloadSection_${e.id}`).style.display="none",document.getElementById(`errorSection_${e.id}`).style.display="none",document.getElementById(`${a}-file-list-container`).innerHTML=""}t&&t.addEventListener("click",o),n&&n.addEventListener("click",o),pdfjsLib.GlobalWorkerOptions.workerSrc=wpApiSettingsMergePDF.pdfWorkerSrc;const a=e.getAttribute("id");let i,s,l,d,c,r=[];const u=document.createElement("div");u.setAttribute("id",`${a}-file-list-container`);const m=document.getElementById(`${a}-files-input`);async function p(e,t){const n=document.createElement("div");n.classList.add("solution__sortable-container");const o=document.createElement("div");o.classList.add("solution__preview-container"),e.type&&e.type.match(/image.*/)?function(e,t){const n=URL.createObjectURL(t),o=document.createElement("img");o.classList.add("solution__preview-image"),o.src=n,e.appendChild(o)}(o,e):e.type&&e.type.match("application/pdf")&&await async function(e,t){try{const n=URL.createObjectURL(t),o=await pdfjsLib.getDocument(n).promise,a=await o.getPage(1),i=a.getViewport({scale:1}),s=60/i.height,l=60/i.width,d=Math.min(s,l),c=a.getViewport({scale:d}),r=document.createElement("canvas");r.className="page",r.width=c.width,r.height=c.height;const u={canvasContext:r.getContext("2d"),viewport:c};await a.render(u).promise,e.appendChild(r)}catch(e){console.log(e)}}(o,e);const a=e.size>1048576?(e.size/1048576).toFixed(2)+" MB":(e.size/1024).toFixed(2)+" KB",u=`\n    <div class="solution__file-info">\n        <div class="solution__file-name">${e.name}</div>\n        <div class="solution__file-size">${a}</div>\n    </div>\n  `,m=document.createElement("div");m.classList.add("solution__file-info"),m.innerHTML=u;const p=function(e){const t=document.createElement("button");t.classList.add("solution__btn");const n=document.createElement("i");return n.className="fas fa-eye",n.title="View File",t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.createElement("div");if(t.id="solution__fullscreen-modal",t.classList.add("solution__modal"),t.style.display="flex",e.type&&e.type.match(/image.*/)){const n=function(e){const t=document.createElement("img");t.classList.add("solution__interactive-image"),t.style.transformOrigin="center center",t.setAttribute("data-scale","1"),t.setAttribute("data-rotation","0");const n=new FileReader;return n.onload=e=>{t.src=e.target.result},n.readAsDataURL(e),t}(e),o=g();t.appendChild(o),t.appendChild(n)}if(e.type&&e.type.match("application/pdf")){const n=await async function(e){const t=document.createElement("div");t.classList.add("solution__pdf-renderer");const n=document.createElement("canvas");n.id="solution__pdf-canvas",t.appendChild(n);const o=n.getContext("2d"),a=await pdfjsLib.getDocument(URL.createObjectURL(e)).promise;return i=a,s=1,l=a.numPages,d=0,c=1,await f(o),t}(e),o=g();t.appendChild(o),t.appendChild(n)}document.body.appendChild(t),t.addEventListener("click",(e=>{!function(e,t){e.target===t&&t.remove()}(e,t)}))}(e)})),t}(e),_=function(e,t){const n=document.createElement("button");n.className="solution__btn";const o=document.createElement("i");return o.className="fas fa-trash",o.title="Remove File",n.appendChild(o),n.addEventListener("click",(n=>{n.preventDefault(),n.stopPropagation(),r=r.filter((t=>t.name!==e.name));const o=new DataTransfer;r.forEach((e=>o.items.add(e))),t.target.files=o.files;const a=n.target.closest(".solution__sortable-container");a?.parentElement?.removeChild(a)})),n}(e,t),y=document.createElement("div");return y.classList.add("solution__actions-group"),y.appendChild(p),y.appendChild(_),n.appendChild(o),n.appendChild(m),n.appendChild(y),n}async function f(e){const t=await i.getPage(s),n=t.getViewport({scale:c,rotation:d}),o=e.canvas;o.width=n.width,o.height=n.height;const a={canvasContext:e,viewport:n};await t.render(a).promise;const r=document.getElementById("solution__page-indicator");r&&(r.textContent=`${s} / ${l}`)}function g(){const e=document.createElement("div");e.classList.add("solution__toolbar");const t=[{text:"Left",id:"solution__previous-btn",icon:"fa-solid fa-chevron-left"},{text:"Right",id:"solution__next-btn",icon:"fa-solid fa-chevron-right"},{text:"Zoom In",id:"solution__zoom-in-btn",icon:"fa-solid fa-magnifying-glass-plus"},{text:"Zoom Out",id:"solution__zoom-out-btn",icon:"fa-solid fa-magnifying-glass-minus"},{text:"Rotate Left",id:"solution__rotate-left-btn",icon:"fa-solid fa-arrow-rotate-left"},{text:"Rotate Right",id:"solution__rotate-right-btn",icon:"fa-solid fa-arrow-rotate-right"},{text:"Close",id:"close-modal-btn",icon:"fa-solid fa-xmark"}],n=_(t[0]);e.appendChild(n);const o=document.createElement("span");o.id="solution__page-indicator",o.textContent=`${s||1} / ${l||1}`,o.classList.add("solution__page-indicator"),e.appendChild(o);const a=_(t[1]);return e.appendChild(a),t.slice(2).forEach((t=>{const n=_(t);e.appendChild(n)})),e}function _(e){const t=document.createElement("button");t.id=e.id,t.classList.add("solution__toolbar-button");const n=document.createElement("i");return n.className=e.icon,t.appendChild(n),t.addEventListener("click",(async t=>{t.preventDefault(),t.stopPropagation(),await async function(e){const t=document.querySelector("#solution__pdf-canvas"),n=document.querySelector(".solution__interactive-image");"close-modal-btn"!==e?t?await async function(e){const t=document.getElementById("solution__pdf-canvas").getContext("2d");switch(e){case"solution__previous-btn":s>1&&(s--,await f(t));break;case"solution__next-btn":s<l&&(s++,await f(t));break;case"solution__zoom-in-btn":c+=.2,await f(t);break;case"solution__zoom-out-btn":c-=.2,await f(t);break;case"solution__rotate-left-btn":d-=90,await f(t);break;case"solution__rotate-right-btn":d+=90,await f(t);break;case"close-modal-btn":break;default:console.log(`Unknown action: ${e}`)}}(e):n&&function(e,t){let n=parseFloat(t.getAttribute("data-scale"))||1,o=parseInt(t.getAttribute("data-rotation"))||0;const a=t.naturalWidth,i=t.naturalHeight,s=t.parentElement,l=s.offsetWidth,d=s.offsetHeight;switch(e){case"solution__zoom-in-btn":n=Math.min(n+.1,5);break;case"solution__zoom-out-btn":n=Math.max(n-.1,.1);break;case"solution__rotate-left-btn":o=(o-90)%360;break;case"solution__rotate-right-btn":o=(o+90)%360}let c=a*n,r=i*n;90===Math.abs(o%180)&&([c,r]=[r,c],c=.8*l,r=c/a*i,r=.8*d,r=r/a*i),t.style.transform=`scale(${n}) rotate(${o}deg)`,t.style.width=`${c}px`,t.style.height=`${r}px`,t.style.objectFit="contain",t.setAttribute("data-scale",n),t.setAttribute("data-rotation",o)}(e,n):document.getElementById("solution__fullscreen-modal")?.remove()}(e.id)})),t}m.parentElement.appendChild(u),m.addEventListener("change",(async e=>{const t=document.getElementById(`${a}-file-list-container`),n=Array.from(e.target.files).filter((e=>!r.some((t=>t.name===e.name&&t.size===e.size))));r=[...r,...n];const o=new DataTransfer;r.forEach((e=>{o.items.add(e)})),e.target.files=o.files;for(const o of n){const n=await p(o,e);t.appendChild(n)}!function(e,t){e._sortableInstance&&e._sortableInstance.destroy(),e._sortableInstance=new Sortable(e,{animation:150,onEnd:()=>{const n=new DataTransfer;Array.from(e.children).map((e=>{const t=e.querySelector(`#${a}-file-list-container .solution__file-name`);return t?t.textContent:null})).forEach((e=>{const o=Array.from(t.target.files).find((t=>t.name===e));o&&n.items.add(o)})),t.target.files=n.files}})}(t,e)}))}));
  • merge-pdf/trunk/includes/process-machine.php

    r3225930 r3260511  
    122122// Check status of processing task
    123123function cross_service_solutions_merge_pdf_check_status($request) {
     124    $nonce = $request->get_header('X-WP-Nonce');
     125    if (!$nonce || !wp_verify_nonce($nonce, 'merge_pdf_form_nonce_action')) {
     126        return new WP_Error('nonce_invalid', 'Nonce verification failed', array(
     127            'status' => 403,
     128            'message' => 'The provided nonce is invalid or expired. Please refresh and try again.'
     129        ));
     130    }
     131
    124132    $api_key = esc_attr(get_option('cross_service_solutions_api_key'));
    125133    $id = sanitize_text_field($request['id']);
  • merge-pdf/trunk/languages/merge-pdf.pot

    r3250034 r3260511  
    33msgid ""
    44msgstr ""
    5 "Project-Id-Version: Merge PDF 1.0.0\n"
     5"Project-Id-Version: Merge PDF 1.0.1\n"
    66"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/merge-pdf\n"
    77"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
  • merge-pdf/trunk/merge-pdf.php

    r3232408 r3260511  
    55 * Requires at least: 6.6
    66 * Requires PHP:      7.2.24
    7  * Version:           1.0.0
     7 * Version:           1.0.1
    88 * Author:            Cross Service Solutions
    99 * License:           GPL-2.0-or-later
     
    104104function cross_service_solutions_merge_pdf_localize_script() {
    105105    // Localize the script registered by the viewScript in block.json
    106     wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettings', array(
     106    wp_localize_script('create-block-merge-pdf-view-script', 'wpApiSettingsMergePDF', array(
    107107        'root' => esc_url_raw(rest_url()),
    108108        'mergePDFNonce' => wp_create_nonce('merge_pdf_form_nonce_action'),
  • merge-pdf/trunk/readme.txt

    r3250034 r3260511  
    55Requires at least: 5.0
    66Tested up to: 6.7
    7 Stable tag: 1.0.0
     7Stable tag: 1.0.1
    88Requires PHP: 7.2.24
    99License: GPLv2 or later
     
    9494== Changelog ==
    9595
     96= 1.0.1 =
     97* Implemented nonce validation for polling status GET request.
     98* Ensuring the global object in JavaScript is unique.
     99
    96100= 1.0.0 =
    97101* Initial release of the Merge PDF plugin.
  • merge-pdf/trunk/src/block.json

    r3225930 r3260511  
    33    "apiVersion": 3,
    44    "name": "create-block/merge-pdf",
    5     "version": "1.0.0",
     5    "version": "1.0.1",
    66    "title": "Merge Pdf",
    77    "category": "widgets",
  • merge-pdf/trunk/src/view.js

    r3225930 r3260511  
    2828            formData.append(`file[${index}]`, file);
    2929        });
    30         formData.append('mergePDFFormNonce', wpApiSettings.mergePDFNonce);
    31 
    32         fetch(`${wpApiSettings.root}merge-pdf/v1/send-data`, {
     30        formData.append('mergePDFFormNonce', wpApiSettingsMergePDF.mergePDFNonce);
     31
     32        fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/send-data`, {
    3333            method: 'POST',
    3434            body: formData,
     
    8888    }
    8989
    90     pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettings.pdfWorkerSrc;
     90    pdfjsLib.GlobalWorkerOptions.workerSrc = wpApiSettingsMergePDF.pdfWorkerSrc;
    9191    const containerId = form.getAttribute('id');
    9292    let currentPdf, currentPage, totalPages, rotation, scale;
     
    569569
    570570    function checkStatus() {
    571         fetch(`${wpApiSettings.root}merge-pdf/v1/status/${id}`)
     571        fetch(`${wpApiSettingsMergePDF.root}merge-pdf/v1/status/${id}`, {
     572            method: 'GET',
     573            headers: {
     574                'X-WP-Nonce': wpApiSettingsMergePDF.mergePDFNonce,
     575                'Content-Type': 'application/json'
     576            }
     577        })
    572578            .then((response) => response.json())
    573579            .then((data) => {
Note: See TracChangeset for help on using the changeset viewer.